diff --git a/assets/l10n/intl_en.arb b/assets/l10n/intl_en.arb index 282acab40..b538b4d49 100644 --- a/assets/l10n/intl_en.arb +++ b/assets/l10n/intl_en.arb @@ -4114,14 +4114,14 @@ "placeholders": {} }, "addChatToSpaceDesc": "Adding a chat to a space will make the chat appear within the space for students and give them access.", - "addSpaceToSpaceDesc": "Adding a sub space to space will make the sub space appear in the main space's chat list.", + "addSpaceToSpaceDesc": "Adding a sub space to space will make the sub space appear in the main space''s chat list.", "spaceAnalytics": "Space Analytics", "changeAnalyticsLanguage": "Change Analytics Language", "suggestToSpace": "Suggest this space", - "suggestToSpaceDesc": "Suggested sub spaces will appear in their main space's chat list", + "suggestToSpaceDesc": "Suggested sub spaces will appear in their main space''s chat list", "practice": "Practice", "noLanguagesSet": "No languages set", - "noActivitiesFound": "That's enough on this for now! Come back later for more.", + "noActivitiesFound": "That''s enough on this for now! Come back later for more.", "hintTitle": "Hint:", "speechToTextBody": "See how well you did by looking at your Accuracy and Words Per Minute scores", "previous": "Previous", @@ -4225,17 +4225,135 @@ "discoverHomeservers": "Discover homeservers", "whatIsAHomeserver": "What is a homeserver?", "homeserverDescription": "All your data is stored on the homeserver, just like an email provider. You can choose which homeserver you want to use, while you can still communicate with everyone. Learn more at at https://matrix.org.", - "doesNotSeemToBeAValidHomeserver": "Doesn't seem to be a compatible homeserver. Wrong URL?", + "doesNotSeemToBeAValidHomeserver": "Doesn''t seem to be a compatible homeserver. Wrong URL?", "grammar": "Grammar", "contactHasBeenInvitedToTheChat": "Contact has been invited to the chat", "inviteChat": "📨 Invite chat", "chatName": "Chat name", "reportContentIssueTitle": "Report content issue", "feedback": "Optional feedback", - "reportContentIssueDescription": "Uh oh! AI can faciliate personalized learning experiences but... also hallucinates. Please provide any feedback you have and we'll try again.", + "reportContentIssueDescription": "Uh oh! AI can faciliate personalized learning experiences but... also hallucinates. Please provide any feedback you have and we''ll try again.", "clickTheWordAgainToDeselect": "Click the selected word to deselect it.", "l2SupportNa": "Not Available", "l2SupportAlpha": "Alpha", "l2SupportBeta": "Beta", - "l2SupportFull": "Full" + "l2SupportFull": "Full", + "grammarCopySCONJ": "Subordinating Conjunction", + "grammarCopyNUM": "Number", + "grammarCopyVERB": "Verb", + "grammarCopyAFFIX": "Affix", + "grammarCopyPARTpos": "Particle", + "grammarCopyADJ": "Adjective", + "grammarCopyCCONJ": "Coordinating Conjunction", + "grammarCopyPUNCT": "Punctuation", + "grammarCopyADV": "Adverb", + "grammarCopyAUX": "Auxiliary", + "grammarCopySPACE": "Space", + "grammarCopySYM": "Symbol", + "grammarCopyDET": "Determiner", + "grammarCopyPRON": "Pronoun", + "grammarCopyADP": "Adposition", + "grammarCopyPROPN": "Proper Noun", + "grammarCopyNOUN": "Noun", + "grammarCopyINTJ": "Interjection", + "grammarCopyX": "Other", + "grammarCopyFem": "Feminine", + "grammarCopy2": "Second Person", + "grammarCopyImp": "Imperative", + "grammarCopyQest": "Question", + "grammarCopyPerf": "Perfect", + "grammarCopyAccNom": "Accusative, Nominative", + "grammarCopyObl": "Oblique Case", + "grammarCopyAct": "Active", + "grammarCopyBrck": "Bracket", + "grammarCopyArt": "Article", + "grammarCopySing": "Singular", + "grammarCopyMasc": "Masculine", + "grammarCopyMod": "Modal", + "grammarCopyAdverbial": "Adverbial", + "grammarCopyPeri": "Periphrastic", + "grammarCopyDigit": "Digit", + "grammarCopyNot_proper": "Not Proper", + "grammarCopyCard": "Cardinal", + "grammarCopyProp": "Proper", + "grammarCopyDash": "Dash", + "grammarCopyYes": "Yes", + "grammarCopySemi": "Semicolon", + "grammarCopyComm": "Comma", + "grammarCopyCnd": "Conditional", + "grammarCopyIntRel": "Interrogative, Relative", + "grammarCopyAcc": "Accusative", + "grammarCopyPartTag": "Partitive", + "grammarCopyInt": "Interrogative", + "grammarCopyPast": "Past", + "grammarCopySup": "Superlative", + "grammarCopyColo": "Colon", + "grammarCopy3": "Third Person", + "grammarCopyPlur": "Plural", + "grammarCopyNpr": "Proper Noun", + "grammarCopyInterrogative": "Interrogative", + "grammarCopyInfm": "Informal", + "grammarCopyTim": "Time", + "grammarCopyNeg": "Negative", + "grammarCopyTot": "Total", + "grammarCopyAdnomial": "Adnominal", + "grammarCopyProg": "Progressive", + "grammarCopySub": "Subjunctive", + "grammarCopyComplementive": "Complementive", + "grammarCopyNom": "Nominative", + "grammarCopyFut": "Future", + "grammarCopyDat": "Dative", + "grammarCopyPres": "Present", + "grammarCopyNeut": "Neuter", + "grammarCopyRel": "Relative", + "grammarCopyFinal_ending": "Final Ending", + "grammarCopyDem": "Demonstrative", + "grammarCopyPre": "Preposition", + "grammarCopyFin": "Finite", + "grammarCopyPos": "Positive", + "grammarCopyQuot": "Quotation", + "grammarCopyGer": "Gerund", + "grammarCopyPass": "Passive", + "grammarCopyGen": "Genitive", + "grammarCopyPrs": "Present", + "grammarCopyDef": "Definite", + "grammarCopyOrd": "Ordinal", + "grammarCopyIns": "Instrumental", + "grammarCopyAccDat": "Accusative, Dative", + "grammarCopyInf": "Infinitive", + "grammarCopyLong": "Long", + "grammarCopyInd": "Indicative", + "grammarCopyCmp": "Comparative", + "grammarCopyRelative_case": "Relative Case", + "grammarCopyExcl": "Exclamative", + "grammarCopy1": "First Person", + "grammarCopyIni": "Initial", + "grammarCopyPerson": "Person", + "grammarCopyForeign": "Foreign", + "grammarCopyVoice": "Voice", + "grammarCopyVerbType": "Verb Type", + "grammarCopyPoss": "Possessive", + "grammarCopyPrepCase": "Prepositional Case", + "grammarCopyNumType": "Numeral Type", + "grammarCopyNounType": "Noun Type", + "grammarCopyReflex": "Reflexive", + "grammarCopyPronType": "Pronoun Type", + "grammarCopyPunctSide": "Punctuation Side", + "grammarCopyVerbForm": "Verb Form", + "grammarCopyGender": "Gender", + "grammarCopyMood": "Mood", + "grammarCopyAspect": "Aspect", + "grammarCopyPunctType": "Punctuation Type", + "grammarCopyTense": "Tense", + "grammarCopyDegree": "Degree", + "grammarCopyPolite": "Politeness", + "grammarCopyAdvType": "Adverb Type", + "grammarCopyNumber": "Number", + "grammarCopyConjType": "Conjunction Type", + "grammarCopyPolarity": "Polarity", + "grammarCopyNumberPsor": "Possessor''s Number", + "grammarCopyCase": "Case", + "grammarCopyDefinite": "Definiteness", + "grammarCopyNumForm": "Numeral Form", + "grammarCopyUnknown": "Unknown" } \ No newline at end of file diff --git a/lib/pangea/utils/get_grammar_copy.dart b/lib/pangea/utils/get_grammar_copy.dart new file mode 100644 index 000000000..31a907c36 --- /dev/null +++ b/lib/pangea/utils/get_grammar_copy.dart @@ -0,0 +1,267 @@ +import 'dart:developer'; + +import 'package:fluffychat/pangea/utils/error_handler.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_gen/gen_l10n/l10n.dart'; + +String getGrammarCopy(String tag, BuildContext context) { + switch (tag) { + case 'SCONJ': + return L10n.of(context)!.grammarCopySCONJ; + case 'NUM': + return L10n.of(context)!.grammarCopyNUM; + case 'VERB': + return L10n.of(context)!.grammarCopyVERB; + case 'AFFIX': + return L10n.of(context)!.grammarCopyAFFIX; + case 'PART': + return L10n.of(context)!.grammarCopyPARTpos; + case 'ADJ': + return L10n.of(context)!.grammarCopyADJ; + case 'CCONJ': + return L10n.of(context)!.grammarCopyCCONJ; + case 'PUNCT': + return L10n.of(context)!.grammarCopyPUNCT; + case 'ADV': + return L10n.of(context)!.grammarCopyADV; + case 'AUX': + return L10n.of(context)!.grammarCopyAUX; + case 'SPACE': + return L10n.of(context)!.grammarCopySPACE; + case 'SYM': + return L10n.of(context)!.grammarCopySYM; + case 'DET': + return L10n.of(context)!.grammarCopyDET; + case 'PRON': + return L10n.of(context)!.grammarCopyPRON; + case 'ADP': + return L10n.of(context)!.grammarCopyADP; + case 'PROPN': + return L10n.of(context)!.grammarCopyPROPN; + case 'NOUN': + return L10n.of(context)!.grammarCopyNOUN; + case 'INTJ': + return L10n.of(context)!.grammarCopyINTJ; + case 'X': + return L10n.of(context)!.grammarCopyX; + case 'Fem': + return L10n.of(context)!.grammarCopyFem; + case '2': + return L10n.of(context)!.grammarCopy2; + case 'Imp': + return L10n.of(context)!.grammarCopyImp; + case 'Qest': + return L10n.of(context)!.grammarCopyQest; + case 'Perf': + return L10n.of(context)!.grammarCopyPerf; + case 'Acc,Nom': + return L10n.of(context)!.grammarCopyAccNom; + case 'Obl': + return L10n.of(context)!.grammarCopyObl; + case 'Act': + return L10n.of(context)!.grammarCopyAct; + case 'Brck': + return L10n.of(context)!.grammarCopyBrck; + case 'Art': + return L10n.of(context)!.grammarCopyArt; + case 'Sing': + return L10n.of(context)!.grammarCopySing; + case 'Masc': + return L10n.of(context)!.grammarCopyMasc; + case 'Mod': + return L10n.of(context)!.grammarCopyMod; + case 'Adverbial': + return L10n.of(context)!.grammarCopyAdverbial; + case 'Peri': + return L10n.of(context)!.grammarCopyPeri; + case 'Digit': + return L10n.of(context)!.grammarCopyDigit; + case 'Not_proper': + return L10n.of(context)!.grammarCopyNot_proper; + case 'Card': + return L10n.of(context)!.grammarCopyCard; + case 'Prop': + return L10n.of(context)!.grammarCopyProp; + case 'Dash': + return L10n.of(context)!.grammarCopyDash; + case 'Yes': + return L10n.of(context)!.grammarCopyYes; + case 'Semi': + return L10n.of(context)!.grammarCopySemi; + case 'Comm': + return L10n.of(context)!.grammarCopyComm; + case 'Cnd': + return L10n.of(context)!.grammarCopyCnd; + case 'Int,Rel': + return L10n.of(context)!.grammarCopyIntRel; + case 'Acc': + return L10n.of(context)!.grammarCopyAcc; + case 'Part': + return L10n.of(context)! + .grammarCopyPartTag; // To avoid conflict with 'PART' POS + case 'Int': + return L10n.of(context)!.grammarCopyInt; + case 'Past': + return L10n.of(context)!.grammarCopyPast; + case 'Sup': + return L10n.of(context)!.grammarCopySup; + case 'Colo': + return L10n.of(context)!.grammarCopyColo; + case '3': + return L10n.of(context)!.grammarCopy3; + case 'Plur': + return L10n.of(context)!.grammarCopyPlur; + case 'Npr': + return L10n.of(context)!.grammarCopyNpr; + case 'Interrogative': + return L10n.of(context)!.grammarCopyInterrogative; + case 'Infm': + return L10n.of(context)!.grammarCopyInfm; + case 'Tim': + return L10n.of(context)!.grammarCopyTim; + case 'Neg': + return L10n.of(context)!.grammarCopyNeg; + case 'Tot': + return L10n.of(context)!.grammarCopyTot; + case 'Adnomial': + return L10n.of(context)!.grammarCopyAdnomial; + case 'Prog': + return L10n.of(context)!.grammarCopyProg; + case 'Sub': + return L10n.of(context)!.grammarCopySub; + case 'Complementive': + return L10n.of(context)!.grammarCopyComplementive; + case 'Nom': + return L10n.of(context)!.grammarCopyNom; + case 'Fut': + return L10n.of(context)!.grammarCopyFut; + case 'Dat': + return L10n.of(context)!.grammarCopyDat; + case 'Pres': + return L10n.of(context)!.grammarCopyPres; + case 'Neut': + return L10n.of(context)!.grammarCopyNeut; + case 'Rel': + return L10n.of(context)!.grammarCopyRel; + case 'Final_ending': + return L10n.of(context)!.grammarCopyFinal_ending; + case 'Dem': + return L10n.of(context)!.grammarCopyDem; + case 'Pre': + return L10n.of(context)!.grammarCopyPre; + case 'Fin': + return L10n.of(context)!.grammarCopyFin; + case 'Pos': + return L10n.of(context)!.grammarCopyPos; + case 'Quot': + return L10n.of(context)!.grammarCopyQuot; + case 'Ger': + return L10n.of(context)!.grammarCopyGer; + case 'Pass': + return L10n.of(context)!.grammarCopyPass; + case 'Gen': + return L10n.of(context)!.grammarCopyGen; + case 'Prs': + return L10n.of(context)!.grammarCopyPrs; + case 'Def': + return L10n.of(context)!.grammarCopyDef; + case 'Ord': + return L10n.of(context)!.grammarCopyOrd; + case 'Ins': + return L10n.of(context)!.grammarCopyIns; + case 'Acc,Dat': + return L10n.of(context)!.grammarCopyAccDat; + case 'Inf': + return L10n.of(context)!.grammarCopyInf; + case 'Long': + return L10n.of(context)!.grammarCopyLong; + case 'Ind': + return L10n.of(context)!.grammarCopyInd; + case 'Cmp': + return L10n.of(context)!.grammarCopyCmp; + case 'Relative_case': + return L10n.of(context)!.grammarCopyRelative_case; + case 'Excl': + return L10n.of(context)!.grammarCopyExcl; + case '1': + return L10n.of(context)!.grammarCopy1; + case 'Ini': + return L10n.of(context)!.grammarCopyIni; + case 'Person': + return L10n.of(context)!.grammarCopyPerson; + case 'Foreign': + return L10n.of(context)!.grammarCopyForeign; + case 'Voice': + return L10n.of(context)!.grammarCopyVoice; + case 'VerbType': + return L10n.of(context)!.grammarCopyVerbType; + case 'Poss': + return L10n.of(context)!.grammarCopyPoss; + case 'PrepCase': + return L10n.of(context)!.grammarCopyPrepCase; + case 'NumType': + return L10n.of(context)!.grammarCopyNumType; + case 'NounType': + return L10n.of(context)!.grammarCopyNounType; + case 'Reflex': + return L10n.of(context)!.grammarCopyReflex; + case 'PronType': + return L10n.of(context)!.grammarCopyPronType; + case 'PunctSide': + return L10n.of(context)!.grammarCopyPunctSide; + case 'VerbForm': + return L10n.of(context)!.grammarCopyVerbForm; + case 'Gender': + return L10n.of(context)!.grammarCopyGender; + case 'Mood': + return L10n.of(context)!.grammarCopyMood; + case 'Aspect': + return L10n.of(context)!.grammarCopyAspect; + case 'PunctType': + return L10n.of(context)!.grammarCopyPunctType; + case 'Tense': + return L10n.of(context)!.grammarCopyTense; + case 'Degree': + return L10n.of(context)!.grammarCopyDegree; + case 'Polite': + return L10n.of(context)!.grammarCopyPolite; + case 'AdvType': + return L10n.of(context)!.grammarCopyAdvType; + case 'Number': + return L10n.of(context)!.grammarCopyNumber; + case 'ConjType': + return L10n.of(context)!.grammarCopyConjType; + case 'Polarity': + return L10n.of(context)!.grammarCopyPolarity; + case 'Number[psor]': + return L10n.of(context)!.grammarCopyNumberPsor; + case 'Case': + return L10n.of(context)!.grammarCopyCase; + case 'Definite': + return L10n.of(context)!.grammarCopyDefinite; + case 'NumForm': + return L10n.of(context)!.grammarCopyNumForm; + // Handle empty tag + case '': + ErrorHandler.logError( + e: Exception('Empty tag'), + m: 'Empty tag in getGrammarCopy', + data: { + 'context': context, + }, + ); + return L10n.of(context)!.grammarCopyUnknown; + default: + debugger(when: kDebugMode); + ErrorHandler.logError( + e: Exception('Need to add copy for $tag to intl_en.arb'), + m: 'Need to add copy for $tag to intl_en.arb', + data: { + 'tag': tag, + 'context': context, + }, + ); + return tag; // Fallback to the tag itself if no match is found + } +} diff --git a/lib/pangea/widgets/chat_list/analytics_summary/analytics_popup.dart b/lib/pangea/widgets/chat_list/analytics_summary/analytics_popup.dart index 321795e24..9dcc7b06b 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/analytics_popup.dart +++ b/lib/pangea/widgets/chat_list/analytics_summary/analytics_popup.dart @@ -1,6 +1,8 @@ import 'package:fluffychat/config/app_config.dart'; +import 'package:fluffychat/pangea/enum/construct_type_enum.dart'; import 'package:fluffychat/pangea/enum/progress_indicators_enum.dart'; import 'package:fluffychat/pangea/models/analytics/construct_list_model.dart'; +import 'package:fluffychat/pangea/utils/get_grammar_copy.dart'; import 'package:flutter/material.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart'; @@ -47,7 +49,13 @@ class AnalyticsPopup extends StatelessWidget { child: ListTile( onTap: () {}, title: Text( - constructsModel.constructList[index].lemma, + constructsModel.type == ConstructTypeEnum.morph + ? getGrammarCopy( + constructsModel + .constructList[index].lemma, + context, + ) + : constructsModel.constructList[index].lemma, ), subtitle: LinearProgressIndicator( value: