From f3bb717245e4b741b28fdc7193ba4f0fba64af85 Mon Sep 17 00:00:00 2001 From: William Jordan-Cooley Date: Sat, 13 Apr 2024 12:11:24 -0400 Subject: [PATCH] finished saving text as transcript event, going to change to rep event though --- assets/l10n/intl_en.arb | 57 +- assets/l10n/intl_es.arb | 3 +- lib/pages/chat/events/message_content.dart | 2 +- lib/pangea/constants/pangea_event_types.dart | 4 + .../constants/pangea_message_types.dart | 3 - .../speech_to_text_controller.dart | 43 +- lib/pangea/enum/message_mode_enum.dart | 16 +- lib/pangea/models/pangea_message_event.dart | 81 +- lib/pangea/models/speech_to_text_models.dart | 30 +- lib/pangea/utils/report_message.dart | 12 +- .../chat/message_speech_to_text_card.dart | 159 +-- lib/pangea/widgets/chat/message_toolbar.dart | 55 +- lib/pangea/widgets/igc/pangea_rich_text.dart | 5 +- needed-translations.txt | 955 +++++++++--------- 14 files changed, 737 insertions(+), 688 deletions(-) delete mode 100644 lib/pangea/constants/pangea_message_types.dart diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 0783205a6..28107dc47 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -2415,9 +2415,6 @@ "seconds": {} } }, - "pleaseEnterANumber": "Please enter a number greater than 0", - "archiveRoomDescription": "The chat will be moved to the archive. Other users will be able to see that you have left the chat.", - "roomUpgradeDescription": "The chat will then be recreated with the new room version. All participants will be notified that they need to switch to the new chat. You can find out more about room versions at https://spec.matrix.org/latest/rooms/", "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.", @@ -2568,15 +2565,7 @@ "placeholders": {} }, "copyClassLink": "Copy invite link", - "@copyClassLink": { - "type": "text", - "placeholders": {} - }, "copyClassLinkDesc": "Clicking this link will take students to the app, direct them to make an account and they will automatically join this space.", - "@copyClassLink": { - "type": "text", - "placeholders": {} - }, "copyClassCode": "Copy invite code", "inviteStudentByUserName": "Invite student by username", "@inviteStudentByUserName": { @@ -2748,11 +2737,6 @@ "type": "text", "placeholders": {} }, - "errorPleaseRefresh": "We're looking into it! Please reload and try again.", - "@errorPleaseRefresh": { - "type": "text", - "placeholders": {} - }, "joinWithClassCode": "Join class or exchange", "@joinWithClassCode": { "type": "text", @@ -2973,26 +2957,6 @@ "type": "text", "placeholders": {} }, - "error502504Title": "Wow, there are a lot of students online!", - "@error502504Title": { - "type": "text", - "placeholders": {} - }, - "error502504Desc": "Translation and grammar tools may be slow or unavailable while the Pangea bots catch up.", - "@error502504Desc": { - "type": "text", - "placeholders": {} - }, - "error404Title": "Translation error!", - "@error404Title": { - "type": "text", - "placeholders": {} - }, - "error404Desc": "Pangea Bot isn't sure how to translate that...", - "@error404Desc": { - "type": "text", - "placeholders": {} - }, "errorDisableIT": "Translation assistance is turned off.", "errorDisableIGC": "Grammar assistance is turned off.", "errorDisableLanguageAssistance": "Translation assistance and grammar assistance are turned off.", @@ -3095,11 +3059,6 @@ "type": "text", "placeholders": {} }, - "classDescription": "Space Description", - "@classDescription": { - "type": "text", - "placeholders": {} - }, "inviteStudentByUserNameDesc": "If your student already has an account, you can search for them.", "@inviteStudentByUserNameDesc": { "type": "text", @@ -3116,7 +3075,6 @@ "clickMessageTitle": "Need help?", "clickMessageBody": "Click messages to access definitions, translations, and audio!", "understandingMessagesTitle": "Definitions and translations!", - "addToClass": "Add this chat to ", "understandingMessagesBody": "Click underlined words for definitions. Translate with message options (upper right).", "allDone": "All done!", "vocab": "Vocabulary", @@ -3649,7 +3607,6 @@ "user": {} } }, - "decline": "Decline", "declinedInvitation": "Declined invitation", "acceptedInvitation": "Accepted invitation", "youreInvited": "📩 You're invited!", @@ -3728,7 +3685,6 @@ }, "acceptSelection": "Accept Correction", "acceptSelectionAnyway": "Use this anyway", - "replace": "Make correction", "makingActivity": "Making activity", "why": "Why?", "definition": "Definition", @@ -3751,12 +3707,6 @@ } }, "noTeachersFound": "No teachers found to report to", - "pushNotificationsNotAvailable": "Push notifications not available", - "learnMore": "Learn more", - "banUserDescription": "The user will be banned from the chat and will not be able to enter the chat again until they are unbanned.", - "unbanUserDescription": "The user will be able to enter the chat again if they try.", - "kickUserDescription": "The user is kicked out of the chat but not banned. In public chats, the user can rejoin at any time.", - "makeAdminDescription": "Once you make this user admin, you may not be able to undo this as they will then have the same permissions as you.", "pleaseEnterANumber": "Please enter a number greater than 0", "archiveRoomDescription": "The chat will be moved to the archive. Other users will be able to see that you have left the chat.", "roomUpgradeDescription": "The chat will then be recreated with the new room version. All participants will be notified that they need to switch to the new chat. You can find out more about room versions at https://spec.matrix.org/latest/rooms/", @@ -3776,10 +3726,6 @@ } }, "searchChatsRooms": "Search for #chats, @users...", - "groupName": "Group name", - "createGroupAndInviteUsers": "Create a group and invite users", - "groupCanBeFoundViaSearch": "Group can be found via search", - "inNoSpaces": "You are not a member of any classes or exchanges", "createClass": "Create class", "createExchange": "Create exchange", "viewArchive": "View Archive", @@ -3886,7 +3832,7 @@ "enableModerationDesc": "Enable automatic moderation to review messages before they are sent", "conversationLanguageLevel": "What is the language level of this conversation?", "showDefinition": "Show Definition", - "acceptedKeyVerification": "{sender} accepted key verification", + "acceptedKeyVerification": "{sender} accepted key verification", "@acceptedKeyVerification": { "type": "text", "placeholders": { @@ -3941,6 +3887,7 @@ "more": "More", "translationTooltip": "Translate", "audioTooltip": "Play Audio", + "transcriptTooltip": "Transcript", "certifyAge": "I certify that I am over {age} years of age", "@certifyAge": { "type": "text", diff --git a/assets/l10n/intl_es.arb b/assets/l10n/intl_es.arb index 4a2825a2d..723a3d7a2 100644 --- a/assets/l10n/intl_es.arb +++ b/assets/l10n/intl_es.arb @@ -4572,6 +4572,7 @@ "more": "Más", "translationTooltip": "Traducir", "audioTooltip": "Reproducir audio", + "transcriptTooltip": "Transcripción", "yourBirthdayPleaseShort": "Seleccione su grupo de edad", "certifyAge": "Certifico que soy mayor de {age} años", "@certifyAge": { @@ -4587,4 +4588,4 @@ "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." -} +} \ No newline at end of file diff --git a/lib/pages/chat/events/message_content.dart b/lib/pages/chat/events/message_content.dart index 301e972f4..4ac171c83 100644 --- a/lib/pages/chat/events/message_content.dart +++ b/lib/pages/chat/events/message_content.dart @@ -341,7 +341,7 @@ class MessageContent extends StatelessWidget { ), onListen: () => toolbarController?.showToolbar( context, - mode: MessageMode.conversion, + mode: MessageMode.textToSpeech, ), ), enableInteractiveSelection: diff --git a/lib/pangea/constants/pangea_event_types.dart b/lib/pangea/constants/pangea_event_types.dart index abd155460..ce7c2373d 100644 --- a/lib/pangea/constants/pangea_event_types.dart +++ b/lib/pangea/constants/pangea_event_types.dart @@ -2,6 +2,8 @@ class PangeaEventTypes { static const classSettings = "pangea.class"; static const pangeaExchange = "p.exchange"; + static const transcript = "pangea.transcript"; + static const rules = "p.rules"; static const studentAnalyticsSummary = "pangea.usranalytics"; @@ -18,4 +20,6 @@ class PangeaEventTypes { static const botOptions = "pangea.bot_options"; static const userAge = "pangea.user_age"; + + static const String report = 'm.report'; } diff --git a/lib/pangea/constants/pangea_message_types.dart b/lib/pangea/constants/pangea_message_types.dart deleted file mode 100644 index 23ee52abd..000000000 --- a/lib/pangea/constants/pangea_message_types.dart +++ /dev/null @@ -1,3 +0,0 @@ -class PangeaMessageTypes { - static String report = 'm.report'; -} diff --git a/lib/pangea/controllers/speech_to_text_controller.dart b/lib/pangea/controllers/speech_to_text_controller.dart index c0eefb390..31902195f 100644 --- a/lib/pangea/controllers/speech_to_text_controller.dart +++ b/lib/pangea/controllers/speech_to_text_controller.dart @@ -1,8 +1,11 @@ import 'dart:async'; import 'dart:convert'; +import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; +import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/models/speech_to_text_models.dart'; +import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart'; @@ -28,7 +31,7 @@ class SpeechToTextController { } void _initializeCacheClearing() { - const duration = Duration(minutes: 15); + const duration = Duration(minutes: 2); _cacheClearTimer = Timer.periodic(duration, (Timer t) => _clearCache()); } @@ -41,7 +44,8 @@ class SpeechToTextController { } Future get( - SpeechToTextRequestModel requestModel) async { + SpeechToTextRequestModel requestModel, + ) async { final int cacheKey = requestModel.hashCode; if (_cache.containsKey(cacheKey)) { @@ -52,11 +56,35 @@ class SpeechToTextController { requestModel: requestModel, ); _cache[cacheKey] = _SpeechToTextCacheItem(data: response); + return response; } } - static Future _fetchResponse({ + Future saveTranscriptAsMatrixEvent( + SpeechToTextResponseModel 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'); + final json = response.toJson(); + + requestModel.audioEvent?.room.sendPangeaEvent( + content: response.toJson(), + parentEventId: requestModel.audioEvent!.eventId, + type: PangeaEventTypes.transcript, + ); + debugPrint('Transcript saved as matrix event'); + + return Future.value(null); + } + + Future _fetchResponse({ required String accessToken, required SpeechToTextRequestModel requestModel, }) async { @@ -72,7 +100,14 @@ class SpeechToTextController { if (res.statusCode == 200) { final Map json = jsonDecode(utf8.decode(res.bodyBytes)); - return SpeechToTextResponseModel.fromJson(json); + + final response = SpeechToTextResponseModel.fromJson(json); + + saveTranscriptAsMatrixEvent(response, requestModel).onError( + (error, stackTrace) => ErrorHandler.logError(e: error, s: stackTrace), + ); + + return response; } else { debugPrint('Error converting speech to text: ${res.body}'); throw Exception('Failed to convert speech to text'); diff --git a/lib/pangea/enum/message_mode_enum.dart b/lib/pangea/enum/message_mode_enum.dart index e4d5c5c5d..22ce88a0f 100644 --- a/lib/pangea/enum/message_mode_enum.dart +++ b/lib/pangea/enum/message_mode_enum.dart @@ -1,15 +1,17 @@ import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; -enum MessageMode { conversion, translation, definition } +enum MessageMode { translation, definition, speechToText, textToSpeech } extension MessageModeExtension on MessageMode { - IconData icon(bool isAudioMessage) { + IconData get icon { switch (this) { case MessageMode.translation: return Icons.g_translate; - case MessageMode.conversion: + case MessageMode.textToSpeech: return Icons.play_arrow; + case MessageMode.speechToText: + return Icons.mic; //TODO change icon for audio messages case MessageMode.definition: return Icons.book; @@ -22,8 +24,10 @@ extension MessageModeExtension on MessageMode { switch (this) { case MessageMode.translation: return L10n.of(context)!.translations; - case MessageMode.conversion: + case MessageMode.textToSpeech: return L10n.of(context)!.messageAudio; + case MessageMode.speechToText: + return L10n.of(context)!.transcriptTooltip; case MessageMode.definition: return L10n.of(context)!.definitions; default: @@ -36,8 +40,10 @@ extension MessageModeExtension on MessageMode { switch (this) { case MessageMode.translation: return L10n.of(context)!.translationTooltip; - case MessageMode.conversion: + case MessageMode.textToSpeech: return L10n.of(context)!.audioTooltip; + case MessageMode.speechToText: + return L10n.of(context)!.transcriptTooltip; case MessageMode.definition: return L10n.of(context)!.define; default: diff --git a/lib/pangea/models/pangea_message_event.dart b/lib/pangea/models/pangea_message_event.dart index ccc44e49a..652b3519e 100644 --- a/lib/pangea/models/pangea_message_event.dart +++ b/lib/pangea/models/pangea_message_event.dart @@ -2,14 +2,15 @@ import 'dart:convert'; import 'package:collection/collection.dart'; import 'package:fluffychat/pangea/constants/model_keys.dart'; -import 'package:fluffychat/pangea/constants/pangea_message_types.dart'; import 'package:fluffychat/pangea/controllers/text_to_speech_controller.dart'; +import 'package:fluffychat/pangea/enum/audio_encoding_enum.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/models/choreo_record.dart'; import 'package:fluffychat/pangea/models/class_model.dart'; import 'package:fluffychat/pangea/models/message_data_models.dart'; import 'package:fluffychat/pangea/models/pangea_match_model.dart'; import 'package:fluffychat/pangea/models/pangea_representation_event.dart'; +import 'package:fluffychat/pangea/models/speech_to_text_models.dart'; import 'package:fluffychat/pangea/utils/bot_name.dart'; import 'package:fluffychat/pangea/widgets/chat/message_audio_card.dart'; import 'package:flutter/material.dart'; @@ -56,6 +57,8 @@ class PangeaMessageEvent { Room get room => _event.room; + bool get isAudioMessage => _event.messageType == MessageTypes.Audio; + Event? _latestEditCache; Event get _latestEdit => _latestEditCache ??= _event .aggregatedEvents( @@ -267,6 +270,78 @@ class PangeaMessageEvent { null; }).toSet(); + Set get transcriptionEvents => _event.aggregatedEvents( + timeline, + PangeaEventTypes.transcript, + ); + + Event? get transcriptionEvent => transcriptionEvents.lastOrNull; + + Future getSpeechToTextLocal() async { + if (transcriptionEvent == null) return null; + + return SpeechToTextResponseModel.fromJson( + transcriptionEvent!.content[PangeaEventTypes.transcript] + as Map, + ); + } + + Future getSpeechToTextGlobal( + String l1Code, + String l2Code, + ) async { + if (!isAudioMessage) { + ErrorHandler.logError( + e: 'Message is not an audio message ${_event.eventId}', + s: StackTrace.current, + data: _event.content, + ); + return null; + } + + if (transcriptionEvent != null) return getSpeechToTextLocal(); + + final matrixFile = await _event.downloadAndDecryptAttachment(); + // Pangea# + // File? file; + + // TODO: Test on mobile and see if we need this case, doeesn't seem so + // if (!kIsWeb) { + // final tempDir = await getTemporaryDirectory(); + // final fileName = Uri.encodeComponent( + // // #Pangea + // // widget.event.attachmentOrThumbnailMxcUrl()!.pathSegments.last, + // widget.messageEvent.event + // .attachmentOrThumbnailMxcUrl()! + // .pathSegments + // .last, + // // Pangea# + // ); + // file = File('${tempDir.path}/${fileName}_${matrixFile.name}'); + // await file.writeAsBytes(matrixFile.bytes); + // } + + // audioFile = file; + + final SpeechToTextResponseModel 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: 44100, + userL1: l1Code, + userL2: l2Code, + ), + ), + ); + + return response; + } + List? _representations; List get representations { if (_representations != null) return _representations!; @@ -431,6 +506,8 @@ class PangeaMessageEvent { ), ); }, + ).onError( + (error, stackTrace) => ErrorHandler.logError(e: error, s: stackTrace), ); return pangeaRep; @@ -456,7 +533,7 @@ class PangeaMessageEvent { _event.room.isSpaceAdmin && _event.senderId != BotName.byEnvironment && !room.isUserSpaceAdmin(_event.senderId) && - _event.messageType != PangeaMessageTypes.report; + _event.messageType != PangeaEventTypes.report; String get messageDisplayLangCode { final bool immersionMode = MatrixState diff --git a/lib/pangea/models/speech_to_text_models.dart b/lib/pangea/models/speech_to_text_models.dart index d55de33d9..83a04ec8b 100644 --- a/lib/pangea/models/speech_to_text_models.dart +++ b/lib/pangea/models/speech_to_text_models.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:fluffychat/pangea/enum/audio_encoding_enum.dart'; import 'package:flutter/foundation.dart'; +import 'package:matrix/matrix.dart'; class SpeechToTextAudioConfigModel { final AudioEncodingEnum encoding; @@ -33,10 +34,12 @@ class SpeechToTextAudioConfigModel { class SpeechToTextRequestModel { final Uint8List audioContent; final SpeechToTextAudioConfigModel config; + final Event? audioEvent; SpeechToTextRequestModel({ required this.audioContent, required this.config, + this.audioEvent, }); Map toJson() => { @@ -68,7 +71,7 @@ class WordInfo { final String word; final Duration? startTime; final Duration? endTime; - final double? confidence; + final int? confidence; WordInfo({ required this.word, @@ -85,13 +88,20 @@ class WordInfo { endTime: json['end_time'] != null ? Duration(milliseconds: json['end_time']) : null, - confidence: (json['confidence'] as num?)?.toDouble(), + confidence: json['confidence'], ); + + Map toJson() => { + "word": word, + "start_time": startTime?.inMilliseconds, + "end_time": endTime?.inMilliseconds, + "confidence": confidence, + }; } class Transcript { final String transcript; - final double confidence; + final int confidence; final List words; Transcript({ @@ -106,6 +116,12 @@ class Transcript { words: (json['words'] as List).map((e) => WordInfo.fromJson(e)).toList(), ); + + Map toJson() => { + "transcript": transcript, + "confidence": confidence, + "words": words.map((e) => e.toJson()).toList(), + }; } class SpeechToTextResult { @@ -119,6 +135,10 @@ class SpeechToTextResult { .map((e) => Transcript.fromJson(e)) .toList(), ); + + Map toJson() => { + "transcripts": transcripts.map((e) => e.toJson()).toList(), + }; } class SpeechToTextResponseModel { @@ -134,4 +154,8 @@ class SpeechToTextResponseModel { .map((e) => SpeechToTextResult.fromJson(e)) .toList(), ); + + Map toJson() => { + "results": results.map((e) => e.toJson()).toList(), + }; } diff --git a/lib/pangea/utils/report_message.dart b/lib/pangea/utils/report_message.dart index a7b3f1c28..5b6ceb0ba 100644 --- a/lib/pangea/utils/report_message.dart +++ b/lib/pangea/utils/report_message.dart @@ -1,12 +1,10 @@ -import 'package:flutter/material.dart'; - -import 'package:flutter_gen/gen_l10n/l10n.dart'; -import 'package:matrix/matrix.dart'; - -import 'package:fluffychat/pangea/constants/pangea_message_types.dart'; +import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/extensions/client_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/widgets/matrix.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; +import 'package:matrix/matrix.dart'; Future reportMessage( BuildContext context, @@ -66,7 +64,7 @@ Future reportMessage( final String message = "$messageTitle\n\n$messageBody"; for (final Room reportDM in reportDMs) { final event = { - 'msgtype': PangeaMessageTypes.report, + 'msgtype': PangeaEventTypes.report, 'body': message, }; await reportDM.sendEvent(event); diff --git a/lib/pangea/widgets/chat/message_speech_to_text_card.dart b/lib/pangea/widgets/chat/message_speech_to_text_card.dart index 88b77e6cf..3a717349c 100644 --- a/lib/pangea/widgets/chat/message_speech_to_text_card.dart +++ b/lib/pangea/widgets/chat/message_speech_to_text_card.dart @@ -1,16 +1,10 @@ -import 'dart:developer'; - -import 'package:fluffychat/pangea/enum/audio_encoding_enum.dart'; -import 'package:fluffychat/pangea/models/message_data_models.dart'; import 'package:fluffychat/pangea/models/pangea_message_event.dart'; import 'package:fluffychat/pangea/models/speech_to_text_models.dart'; import 'package:fluffychat/pangea/utils/bot_style.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; -import 'package:fluffychat/utils/localized_exception_extension.dart'; +import 'package:fluffychat/pangea/widgets/igc/card_error_widget.dart'; import 'package:fluffychat/widgets/matrix.dart'; -import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:matrix/matrix.dart'; class MessageSpeechToTextCard extends StatefulWidget { final PangeaMessageEvent messageEvent; @@ -24,15 +18,10 @@ class MessageSpeechToTextCard extends StatefulWidget { MessageSpeechToTextCardState createState() => MessageSpeechToTextCardState(); } -enum AudioFileStatus { notDownloaded, downloading, downloaded } - class MessageSpeechToTextCardState extends State { - PangeaRepresentation? repEvent; - String? transcription; + SpeechToTextResponseModel? speechToTextResponse; bool _fetchingTranscription = true; - AudioFileStatus status = AudioFileStatus.notDownloaded; - MatrixFile? matrixFile; - // File? audioFile; + Object? error; String? get l1Code => MatrixState.pangeaController.languageController.activeL1Code( @@ -43,124 +32,41 @@ class MessageSpeechToTextCardState extends State { roomID: widget.messageEvent.room.id, ); - // get transcription from local events - Future getLocalTranscription() async { - return "This is a dummy transcription"; - } - - // This code is duplicated from audio_player.dart. Is there some way to reuse that code? - Future _downloadAction() async { - // #Pangea - // if (status != AudioFileStatus.notDownloaded) return; - if (status != AudioFileStatus.notDownloaded) { - return; - } - // Pangea# - setState(() => status = AudioFileStatus.downloading); - try { - // #Pangea - // final matrixFile = await widget.event.downloadAndDecryptAttachment(); - final matrixFile = - await widget.messageEvent.event.downloadAndDecryptAttachment(); - // Pangea# - // File? file; - - // TODO: Test on mobile and see if we need this case - // if (!kIsWeb) { - // final tempDir = await getTemporaryDirectory(); - // final fileName = Uri.encodeComponent( - // // #Pangea - // // widget.event.attachmentOrThumbnailMxcUrl()!.pathSegments.last, - // widget.messageEvent.event - // .attachmentOrThumbnailMxcUrl()! - // .pathSegments - // .last, - // // Pangea# - // ); - // file = File('${tempDir.path}/${fileName}_${matrixFile.name}'); - // await file.writeAsBytes(matrixFile.bytes); - // } - - // audioFile = file; - this.matrixFile = matrixFile; - status = AudioFileStatus.downloaded; - } catch (e, s) { - Logs().v('Could not download audio file', e, s); - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text(e.toLocalizedString(context)), - ), - ); - } - } - - AudioEncodingEnum? get encoding { - if (matrixFile == null) return null; - return mimeTypeToAudioEncoding(matrixFile!.mimeType); - } - - // call API to transcribe audio - Future transcribeAudio() async { - await _downloadAction(); - - final localmatrixFile = matrixFile; - final info = matrixFile?.info; - - if (matrixFile == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: 'Audio file or matrix file is null ${widget.messageEvent.eventId}', - s: StackTrace.current, - data: widget.messageEvent.event.content, - ); - return null; - } - - if (l1Code == null || l2Code == null) { - debugger(when: kDebugMode); - ErrorHandler.logError( - e: 'Language codes are null ${widget.messageEvent.eventId}', - s: StackTrace.current, - data: widget.messageEvent.event.content, - ); - return null; - } - - final SpeechToTextResponseModel response = - await MatrixState.pangeaController.speechToText.get( - SpeechToTextRequestModel( - audioContent: matrixFile!.bytes, - config: SpeechToTextAudioConfigModel( - encoding: encoding ?? AudioEncodingEnum.encodingUnspecified, - //this is the default in the RecordConfig in record package - sampleRateHertz: 44100, - userL1: l1Code!, - userL2: l2Code!, - ), - ), - ); - return response.results.first.transcripts.first.transcript; - } + String? get transcription => speechToTextResponse + ?.results.firstOrNull?.transcripts.firstOrNull?.transcript; // look for transcription in message event // if not found, call API to transcribe audio - Future loadTranscription() async { - // transcription ??= await getLocalTranscription(); - transcription ??= await transcribeAudio(); - setState(() => _fetchingTranscription = false); + Future getSpeechToText() async { + try { + if (l1Code == null || l2Code == null) { + throw Exception('Language selection not found'); + } + speechToTextResponse ??= + await widget.messageEvent.getSpeechToTextGlobal(l1Code!, l2Code!); + } catch (e, s) { + error = e; + ErrorHandler.logError( + e: e, + s: s, + data: widget.messageEvent.event.content, + ); + } finally { + setState(() => _fetchingTranscription = false); + } } @override void initState() { super.initState(); - loadTranscription(); + getSpeechToText(); } @override Widget build(BuildContext context) { - // if (!_fetchingTranscription && repEvent == null && transcription == null) { - // return const CardErrorWidget(); - // } + if (!_fetchingTranscription && speechToTextResponse == null) { + return CardErrorWidget(error: error); + } return Padding( padding: const EdgeInsets.all(8), @@ -173,15 +79,10 @@ class MessageSpeechToTextCardState extends State { color: Theme.of(context).colorScheme.primary, ), ) - : transcription != null - ? Text( - transcription!, - style: BotStyle.text(context), - ) - : Text( - repEvent!.text, - style: BotStyle.text(context), - ), + : Text( + transcription!, + style: BotStyle.text(context), + ), ); } } diff --git a/lib/pangea/widgets/chat/message_toolbar.dart b/lib/pangea/widgets/chat/message_toolbar.dart index 1a722dac1..196416422 100644 --- a/lib/pangea/widgets/chat/message_toolbar.dart +++ b/lib/pangea/widgets/chat/message_toolbar.dart @@ -176,13 +176,21 @@ class MessageToolbarState extends State { case MessageMode.translation: showTranslation(); break; - case MessageMode.conversion: - showConversion(); + case MessageMode.textToSpeech: + showTextToSpeech(); + break; + case MessageMode.speechToText: + showSpeechToText(); break; case MessageMode.definition: showDefinition(); break; default: + ErrorHandler.logError( + e: "Invalid toolbar mode", + s: StackTrace.current, + data: {"newMode": newMode}, + ); break; } } @@ -200,21 +208,22 @@ class MessageToolbarState extends State { ); } - void showConversion() { - debugPrint("show conversion"); - if (isAudioMessage) { - debugPrint("is audio message"); - toolbarContent = MessageSpeechToTextCard( - messageEvent: widget.pangeaMessageEvent, - ); - } else { - toolbarContent = MessageAudioCard( - messageEvent: widget.pangeaMessageEvent, - ); - } + void showTextToSpeech() { + debugPrint("show text to speech"); + toolbarContent = MessageAudioCard( + messageEvent: widget.pangeaMessageEvent, + ); + } + + void showSpeechToText() { + debugPrint("show speech to text"); + toolbarContent = MessageSpeechToTextCard( + messageEvent: widget.pangeaMessageEvent, + ); } void showDefinition() { + debugPrint("show definition"); if (widget.textSelection.selectedText == null || widget.textSelection.selectedText!.isEmpty) { toolbarContent = const SelectToDefine(); @@ -231,10 +240,6 @@ class MessageToolbarState extends State { ); } - bool get isAudioMessage { - return widget.pangeaMessageEvent.event.messageType == MessageTypes.Audio; - } - void showImage() {} void spellCheck() {} @@ -259,7 +264,9 @@ class MessageToolbarState extends State { ) ?? true; autoplay - ? updateMode(MessageMode.conversion) + ? updateMode(widget.pangeaMessageEvent.isAudioMessage + ? MessageMode.speechToText + : MessageMode.textToSpeech) : updateMode(MessageMode.translation); }); @@ -322,13 +329,19 @@ class MessageToolbarState extends State { Row( mainAxisSize: MainAxisSize.min, children: MessageMode.values.map((mode) { - if (mode == MessageMode.definition && isAudioMessage) { + if ([MessageMode.definition, MessageMode.textToSpeech] + .contains(mode) && + widget.pangeaMessageEvent.isAudioMessage) { + return const SizedBox.shrink(); + } + if (mode == MessageMode.speechToText && + !widget.pangeaMessageEvent.isAudioMessage) { return const SizedBox.shrink(); } return Tooltip( message: mode.tooltip(context), child: IconButton( - icon: Icon(mode.icon(isAudioMessage)), + icon: Icon(mode.icon), color: currentMode == mode ? Theme.of(context).colorScheme.primary : null, diff --git a/lib/pangea/widgets/igc/pangea_rich_text.dart b/lib/pangea/widgets/igc/pangea_rich_text.dart index e083a67b6..612fabe8d 100644 --- a/lib/pangea/widgets/igc/pangea_rich_text.dart +++ b/lib/pangea/widgets/igc/pangea_rich_text.dart @@ -87,7 +87,8 @@ class PangeaRichTextState extends State { context: context, langCode: widget.pangeaMessageEvent.messageDisplayLangCode, ) - .onError((error, stackTrace) => ErrorHandler.logError()) + .onError((error, stackTrace) => + ErrorHandler.logError(e: error, s: stackTrace)) .then((event) { repEvent = event; widget.toolbarController?.toolbar?.textSelection.setMessageText( @@ -158,7 +159,7 @@ class PangeaRichTextState extends State { ), onListen: () => widget.toolbarController?.showToolbar( context, - mode: MessageMode.conversion, + mode: MessageMode.textToSpeech, ), ), TextSpan( diff --git a/needed-translations.txt b/needed-translations.txt index b5d0fb74a..51e52cf0f 100644 --- a/needed-translations.txt +++ b/needed-translations.txt @@ -105,7 +105,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -154,10 +153,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -176,6 +171,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -195,7 +195,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -705,11 +704,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -759,13 +758,13 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -784,6 +783,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -829,6 +829,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -947,7 +948,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -996,10 +996,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -1018,6 +1014,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -1037,7 +1038,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -1547,11 +1547,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -1604,21 +1604,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -1637,6 +1637,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -1682,6 +1683,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -1800,7 +1802,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -1849,10 +1850,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -1871,6 +1868,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -1890,7 +1892,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -2400,11 +2401,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -2457,21 +2458,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -2490,6 +2491,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -2535,6 +2537,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -2653,7 +2656,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -2702,10 +2704,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -2724,6 +2722,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -2743,7 +2746,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -3253,11 +3255,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -3310,21 +3312,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -3343,6 +3345,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -3388,6 +3391,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -3506,7 +3510,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -3555,10 +3558,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -3577,6 +3576,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -3596,7 +3600,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -4106,11 +4109,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -4163,21 +4166,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -4196,6 +4199,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -4241,6 +4245,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -4355,7 +4360,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -4404,10 +4408,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -4426,6 +4426,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -4445,7 +4450,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -4955,6 +4959,7 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", @@ -5008,13 +5013,13 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -5063,6 +5068,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -5181,7 +5187,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -5230,10 +5235,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -5252,6 +5253,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -5271,7 +5277,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -5781,11 +5786,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -5838,21 +5843,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -5871,6 +5876,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -5916,6 +5922,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -6034,7 +6041,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -6083,10 +6089,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -6105,6 +6107,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -6124,7 +6131,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -6634,11 +6640,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -6691,21 +6697,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -6724,6 +6730,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -6769,6 +6776,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -6883,7 +6891,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -6932,10 +6939,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -6954,6 +6957,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -6973,7 +6981,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -7483,11 +7490,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -7537,13 +7544,13 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -7562,6 +7569,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -7607,6 +7615,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -7721,7 +7730,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -7770,10 +7778,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -7792,6 +7796,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -7811,7 +7820,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -8321,6 +8329,7 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", @@ -8374,13 +8383,13 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -8429,6 +8438,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -8547,7 +8557,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -8596,10 +8605,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -8618,6 +8623,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -8637,7 +8647,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -9147,11 +9156,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -9204,21 +9213,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -9237,6 +9246,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -9282,6 +9292,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -9400,7 +9411,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -9449,10 +9459,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -9471,6 +9477,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -9490,7 +9501,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -10000,11 +10010,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -10057,21 +10067,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -10090,6 +10100,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -10135,6 +10146,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -10253,7 +10265,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -10302,10 +10313,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -10324,6 +10331,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -10343,7 +10355,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -10853,11 +10864,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -10910,21 +10921,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -10943,6 +10954,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -10988,6 +11000,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -11106,7 +11119,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -11155,10 +11167,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -11177,6 +11185,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -11196,7 +11209,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -11706,11 +11718,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -11763,21 +11775,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -11796,6 +11808,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -11841,6 +11854,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -11955,7 +11969,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -12004,10 +12017,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -12026,6 +12035,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -12045,7 +12059,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -12555,6 +12568,7 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", @@ -12608,13 +12622,13 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -12663,6 +12677,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -12781,7 +12796,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -12830,10 +12844,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -12852,6 +12862,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -12871,7 +12886,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -13381,11 +13395,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -13438,21 +13452,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -13471,6 +13485,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -13516,6 +13531,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -13634,7 +13650,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -13683,10 +13698,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -13705,6 +13716,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -13724,7 +13740,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -14234,11 +14249,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -14291,21 +14306,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -14324,6 +14339,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -14369,6 +14385,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -14484,7 +14501,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -14533,10 +14549,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -14555,6 +14567,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -14574,7 +14591,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -15084,11 +15100,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -15139,13 +15155,13 @@ "reportMessageBody", "noTeachersFound", "noUsersFoundWithQuery", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -15164,6 +15180,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -15209,6 +15226,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -15327,7 +15345,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -15376,10 +15393,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -15398,6 +15411,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -15417,7 +15435,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -15927,11 +15944,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -15984,21 +16001,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -16017,6 +16034,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -16062,6 +16080,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -16180,7 +16199,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -16229,10 +16247,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -16251,6 +16265,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -16270,7 +16289,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -16780,11 +16798,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -16837,21 +16855,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -16870,6 +16888,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -16915,6 +16934,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -17033,7 +17053,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -17082,10 +17101,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -17104,6 +17119,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -17123,7 +17143,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -17633,11 +17652,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -17690,21 +17709,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -17723,6 +17742,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -17768,6 +17788,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -17882,7 +17903,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -17931,10 +17951,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -17953,6 +17969,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -17972,7 +17993,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -18482,11 +18502,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -18536,13 +18556,13 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -18561,6 +18581,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -18606,6 +18627,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -18724,7 +18746,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -18773,10 +18794,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -18795,6 +18812,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -18814,7 +18836,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -19324,11 +19345,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -19381,21 +19402,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -19414,6 +19435,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -19459,6 +19481,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -19577,7 +19600,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -19626,10 +19648,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -19648,6 +19666,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -19667,7 +19690,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -20177,11 +20199,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -20234,21 +20256,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -20267,6 +20289,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -20312,6 +20335,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -20430,7 +20454,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -20479,10 +20502,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -20501,6 +20520,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -20520,7 +20544,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -21030,11 +21053,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -21087,21 +21110,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -21120,6 +21143,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -21165,6 +21189,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -21283,7 +21308,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -21332,10 +21356,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -21354,6 +21374,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -21373,7 +21398,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -21883,11 +21907,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -21940,21 +21964,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -21973,6 +21997,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -22018,6 +22043,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -22136,7 +22162,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -22185,10 +22210,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -22207,6 +22228,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -22226,7 +22252,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -22736,11 +22761,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -22793,21 +22818,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -22826,6 +22851,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -22871,6 +22897,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -22989,7 +23016,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -23038,10 +23064,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -23060,6 +23082,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -23079,7 +23106,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -23589,11 +23615,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -23646,21 +23672,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -23679,6 +23705,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -23724,6 +23751,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -23842,7 +23870,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -23891,10 +23918,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -23913,6 +23936,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -23932,7 +23960,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -24442,11 +24469,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -24499,21 +24526,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -24532,6 +24559,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -24577,6 +24605,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -24695,7 +24724,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -24744,10 +24772,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -24766,6 +24790,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -24785,7 +24814,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -25295,11 +25323,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -25352,21 +25380,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -25385,6 +25413,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -25430,6 +25459,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -25544,7 +25574,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -25593,10 +25622,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -25615,6 +25640,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -25634,7 +25664,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -26144,6 +26173,7 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", @@ -26197,13 +26227,13 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -26252,6 +26282,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -26370,7 +26401,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -26419,10 +26449,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -26441,6 +26467,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -26460,7 +26491,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -26970,11 +27000,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -27027,21 +27057,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -27060,6 +27090,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -27105,6 +27136,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -27223,7 +27255,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -27272,10 +27303,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -27294,6 +27321,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -27313,7 +27345,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -27823,11 +27854,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -27880,21 +27911,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -27913,6 +27944,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -27958,6 +27990,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -28072,7 +28105,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -28121,10 +28153,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -28143,6 +28171,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -28162,7 +28195,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -28672,11 +28704,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -28726,19 +28758,20 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -28784,6 +28817,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -28902,7 +28936,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -28951,10 +28984,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -28973,6 +29002,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -28992,7 +29026,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -29502,11 +29535,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -29559,21 +29592,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -29592,6 +29625,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -29637,6 +29671,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -29755,7 +29790,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -29804,10 +29838,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -29826,6 +29856,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -29845,7 +29880,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -30355,11 +30389,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -30412,21 +30446,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -30445,6 +30479,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -30490,6 +30525,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -30608,7 +30644,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -30657,10 +30692,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -30679,6 +30710,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -30698,7 +30734,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -31208,11 +31243,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -31265,21 +31300,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -31298,6 +31333,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -31343,6 +31379,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -31461,7 +31498,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -31510,10 +31546,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -31532,6 +31564,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -31551,7 +31588,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -32061,11 +32097,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -32118,21 +32154,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -32151,6 +32187,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -32196,6 +32233,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -32314,7 +32352,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -32363,10 +32400,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -32385,6 +32418,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -32404,7 +32442,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -32914,11 +32951,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -32971,21 +33008,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -33004,6 +33041,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -33049,6 +33087,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -33167,7 +33206,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -33216,10 +33254,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -33238,6 +33272,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -33257,7 +33296,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -33767,11 +33805,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -33824,21 +33862,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -33857,6 +33895,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -33902,6 +33941,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -34016,7 +34056,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -34065,10 +34104,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -34087,6 +34122,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -34106,7 +34146,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -34616,11 +34655,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -34670,13 +34709,13 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -34695,6 +34734,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -34740,6 +34780,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -34854,7 +34895,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -34903,10 +34943,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -34925,6 +34961,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -34944,7 +34985,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -35454,11 +35494,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -35508,13 +35548,13 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -35533,6 +35573,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -35578,6 +35619,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -35696,7 +35738,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -35745,10 +35786,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -35767,6 +35804,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -35786,7 +35828,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -36296,11 +36337,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -36353,21 +36394,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -36386,6 +36427,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -36431,6 +36473,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -36545,7 +36588,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -36594,10 +36636,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -36616,6 +36654,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -36635,7 +36678,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -37145,11 +37187,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -37199,13 +37241,13 @@ "reportMessageTitle", "reportMessageBody", "noTeachersFound", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", @@ -37224,6 +37266,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -37269,6 +37312,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView", @@ -37387,7 +37431,6 @@ "getStarted", "mustBe13", "yourBirthdayPleaseShort", - "errorPleaseRefresh", "joinWithClassCode", "joinWithClassCodeDesc", "joinWithClassCodeHint", @@ -37436,10 +37479,6 @@ "saveChanges", "publicProfileTitle", "publicProfileDesc", - "error502504Title", - "error502504Desc", - "error404Title", - "error404Desc", "errorDisableIT", "errorDisableIGC", "errorDisableLanguageAssistance", @@ -37458,6 +37497,11 @@ "iAgreeToThe", "termsAndConditions", "andCertifyIAmAtLeast13YearsOfAge", + "error502504Title", + "error502504Desc", + "error404Title", + "error404Desc", + "errorPleaseRefresh", "findAClass", "toggleIT", "toggleIGC", @@ -37477,7 +37521,6 @@ "clickMessageTitle", "clickMessageBody", "understandingMessagesTitle", - "addToClass", "understandingMessagesBody", "allDone", "vocab", @@ -37987,11 +38030,11 @@ "allPrivateChats", "unknownPrivateChat", "copyClassCodeDesc", + "addToClass", "addToClassDesc", "addToClassOrExchange", "addToClassOrExchangeDesc", "invitedToClassOrExchange", - "decline", "declinedInvitation", "acceptedInvitation", "youreInvited", @@ -38044,21 +38087,21 @@ "yourGlobalUserIdIs", "noUsersFoundWithQuery", "searchChatsRooms", - "groupName", - "createGroupAndInviteUsers", - "groupCanBeFoundViaSearch", - "inNoSpaces", "createClass", "createExchange", "viewArchive", "trialExpiration", "freeTrialDesc", "activateTrial", + "inNoSpaces", "successfullySubscribed", "clickToManageSubscription", "emptyInviteWarning", "errorGettingAudio", "nothingFound", + "groupName", + "createGroupAndInviteUsers", + "groupCanBeFoundViaSearch", "wrongRecoveryKey", "startConversation", "commandHint_sendraw", @@ -38077,6 +38120,7 @@ "publicSpaces", "addChatOrSubSpace", "subspace", + "decline", "thisDevice", "initAppError", "databaseBuildErrorBody", @@ -38122,6 +38166,7 @@ "more", "translationTooltip", "audioTooltip", + "transcriptTooltip", "certifyAge", "kickBotWarning", "joinToView",