From 613a4cce9c44e8f84b38d42ef7dfabc53e847989 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 3 Dec 2025 11:38:36 -0500 Subject: [PATCH] feat: show language mismatch popup on select message not in L2 --- lib/l10n/intl_ar.arb | 7 +- lib/l10n/intl_be.arb | 7 +- lib/l10n/intl_bn.arb | 7 +- lib/l10n/intl_bo.arb | 7 +- lib/l10n/intl_ca.arb | 7 +- lib/l10n/intl_cs.arb | 7 +- lib/l10n/intl_da.arb | 7 +- lib/l10n/intl_de.arb | 7 +- lib/l10n/intl_el.arb | 7 +- lib/l10n/intl_en.arb | 3 +- lib/l10n/intl_eo.arb | 7 +- lib/l10n/intl_es.arb | 7 +- lib/l10n/intl_et.arb | 7 +- lib/l10n/intl_eu.arb | 7 +- lib/l10n/intl_fa.arb | 7 +- lib/l10n/intl_fi.arb | 7 +- lib/l10n/intl_fil.arb | 7 +- lib/l10n/intl_fr.arb | 7 +- lib/l10n/intl_ga.arb | 7 +- lib/l10n/intl_gl.arb | 7 +- lib/l10n/intl_he.arb | 7 +- lib/l10n/intl_hi.arb | 7 +- lib/l10n/intl_hr.arb | 7 +- lib/l10n/intl_hu.arb | 7 +- lib/l10n/intl_ia.arb | 7 +- lib/l10n/intl_id.arb | 7 +- lib/l10n/intl_ie.arb | 7 +- lib/l10n/intl_it.arb | 7 +- lib/l10n/intl_ja.arb | 7 +- lib/l10n/intl_ka.arb | 7 +- lib/l10n/intl_ko.arb | 7 +- lib/l10n/intl_lt.arb | 7 +- lib/l10n/intl_lv.arb | 7 +- lib/l10n/intl_nb.arb | 7 +- lib/l10n/intl_nl.arb | 7 +- lib/l10n/intl_pl.arb | 7 +- lib/l10n/intl_pt.arb | 7 +- lib/l10n/intl_pt_BR.arb | 7 +- lib/l10n/intl_pt_PT.arb | 7 +- lib/l10n/intl_ro.arb | 7 +- lib/l10n/intl_ru.arb | 7 +- lib/l10n/intl_sk.arb | 7 +- lib/l10n/intl_sl.arb | 7 +- lib/l10n/intl_sr.arb | 7 +- lib/l10n/intl_sv.arb | 7 +- lib/l10n/intl_ta.arb | 7 +- lib/l10n/intl_te.arb | 7 +- lib/l10n/intl_th.arb | 7 +- lib/l10n/intl_tr.arb | 7 +- lib/l10n/intl_uk.arb | 7 +- lib/l10n/intl_vi.arb | 7 +- lib/l10n/intl_yue.arb | 7 +- lib/l10n/intl_zh.arb | 7 +- lib/l10n/intl_zh_Hant.arb | 7 +- lib/pages/chat/chat.dart | 74 ++++++++----------- .../activity_chat_extension.dart | 18 +++++ lib/pangea/common/utils/overlay.dart | 23 ++++++ .../models/representation_content_model.dart | 5 ++ .../repo/language_mismatch_repo.dart | 65 ++++++++-------- .../widgets/language_mismatch_popup.dart | 22 +++++- 60 files changed, 451 insertions(+), 130 deletions(-) diff --git a/lib/l10n/intl_ar.arb b/lib/l10n/intl_ar.arb index 6cc980b38..1bc77fbb9 100644 --- a/lib/l10n/intl_ar.arb +++ b/lib/l10n/intl_ar.arb @@ -1,6 +1,6 @@ { "@@locale": "ar", - "@@last_modified": "2025-12-03 10:30:28.531390", + "@@last_modified": "2025-12-03 11:36:55.312756", "about": "حول", "@about": { "type": "String", @@ -10852,5 +10852,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "لغة الهدف الخاصة بك لا تتطابق مع هذه الرسالة. هل تريد تحديث لغة الهدف الخاصة بك؟", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index 63dd27455..b2ef40fef 100644 --- a/lib/l10n/intl_be.arb +++ b/lib/l10n/intl_be.arb @@ -1915,7 +1915,7 @@ "playWithAI": "Пакуль гуляйце з ШІ", "courseStartDesc": "Pangea Bot гатовы да працы ў любы час!\n\n...але навучанне лепш з сябрамі!", "@@locale": "be", - "@@last_modified": "2025-12-03 10:30:13.500676", + "@@last_modified": "2025-12-03 11:36:45.348859", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11734,5 +11734,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ваша мэтавая мова не супадае з гэтым паведамленнем. Абнавіць вашу мэтавую мову?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bn.arb b/lib/l10n/intl_bn.arb index f12ca08c5..b917a4a03 100644 --- a/lib/l10n/intl_bn.arb +++ b/lib/l10n/intl_bn.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:30:46.970936", + "@@last_modified": "2025-12-03 11:37:07.254419", "about": "সম্পর্কে", "@about": { "type": "String", @@ -11739,5 +11739,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "আপনার লক্ষ্য ভাষা এই বার্তার সাথে মেলে না। আপনার লক্ষ্য ভাষা আপডেট করবেন?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bo.arb b/lib/l10n/intl_bo.arb index 66a2c51c1..b8a5a2502 100644 --- a/lib/l10n/intl_bo.arb +++ b/lib/l10n/intl_bo.arb @@ -4282,7 +4282,7 @@ "joinPublicTrip": "མི་ཚེས་ལ་ལོག་འབད།", "startOwnTrip": "ངེད་རང་གི་ལོག་ལ་སྦྱོར་བཅོས།", "@@locale": "bo", - "@@last_modified": "2025-12-03 10:30:43.532170", + "@@last_modified": "2025-12-03 11:37:05.020486", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -10385,5 +10385,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Bokmål mål språket ditt samsvarer ikke med denne meldingen. Oppdater målspråket ditt?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb index a624cbe32..b369bbafe 100644 --- a/lib/l10n/intl_ca.arb +++ b/lib/l10n/intl_ca.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:30:15.655552", + "@@last_modified": "2025-12-03 11:36:46.628205", "about": "Quant a", "@about": { "type": "String", @@ -10659,5 +10659,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "El teu idioma de destinació no coincideix amb aquest missatge. Vols actualitzar el teu idioma de destinació?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index 80d065f95..03ed33a7b 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -1,6 +1,6 @@ { "@@locale": "cs", - "@@last_modified": "2025-12-03 10:30:09.271970", + "@@last_modified": "2025-12-03 11:36:43.008688", "about": "O aplikaci", "@about": { "type": "String", @@ -11242,5 +11242,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Jazyk cíle neodpovídá této zprávě. Chcete aktualizovat svůj cílový jazyk?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_da.arb b/lib/l10n/intl_da.arb index dacb2a40c..493c85a2f 100644 --- a/lib/l10n/intl_da.arb +++ b/lib/l10n/intl_da.arb @@ -1934,7 +1934,7 @@ "playWithAI": "Leg med AI for nu", "courseStartDesc": "Pangea Bot er klar til at starte når som helst!\n\n...men læring er bedre med venner!", "@@locale": "da", - "@@last_modified": "2025-12-03 10:29:29.731950", + "@@last_modified": "2025-12-03 11:36:19.185422", "@aboutHomeserver": { "type": "String", "placeholders": { @@ -11697,5 +11697,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Dit målsprog stemmer ikke overens med denne besked. Opdater dit målsprog?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index f2a8b6f89..f63c9e1d7 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -1,6 +1,6 @@ { "@@locale": "de", - "@@last_modified": "2025-12-03 10:29:59.289566", + "@@last_modified": "2025-12-03 11:36:37.054264", "alwaysUse24HourFormat": "true", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." @@ -10642,5 +10642,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ihre Zielsprache stimmt nicht mit dieser Nachricht überein. Möchten Sie Ihre Zielsprache aktualisieren?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_el.arb b/lib/l10n/intl_el.arb index b47ff0464..670ada1c3 100644 --- a/lib/l10n/intl_el.arb +++ b/lib/l10n/intl_el.arb @@ -4460,7 +4460,7 @@ "playWithAI": "Παίξτε με την Τεχνητή Νοημοσύνη προς το παρόν", "courseStartDesc": "Ο Pangea Bot είναι έτοιμος να ξεκινήσει οποιαδήποτε στιγμή!\n\n...αλλά η μάθηση είναι καλύτερη με φίλους!", "@@locale": "el", - "@@last_modified": "2025-12-03 10:30:57.003976", + "@@last_modified": "2025-12-03 11:37:12.093444", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11693,5 +11693,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Η γλώσσα στόχου σας δεν ταιριάζει με αυτό το μήνυμα. Θέλετε να ενημερώσετε τη γλώσσα στόχου σας;", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 5cbf0f889..b7e3482fd 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -4989,5 +4989,6 @@ } } }, - "pickDifferentActivity": "Pick a different activity" + "pickDifferentActivity": "Pick a different activity", + "messageLanguageMismatchMessage": "Your target language doesn't match this message. Update your target language?" } diff --git a/lib/l10n/intl_eo.arb b/lib/l10n/intl_eo.arb index a59b56bac..28ff9436a 100644 --- a/lib/l10n/intl_eo.arb +++ b/lib/l10n/intl_eo.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:31:03.548316", + "@@last_modified": "2025-12-03 11:37:15.815743", "about": "Prio", "@about": { "type": "String", @@ -11724,5 +11724,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Via celolingvo ne kongruas kun ĉi tiu mesaĝo. Ĉu ĝisdatigi vian celolingvon?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index f6edeb9ea..bc6bc793e 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -1,6 +1,6 @@ { "@@locale": "es", - "@@last_modified": "2025-12-03 10:29:23.778699", + "@@last_modified": "2025-12-03 11:36:15.055874", "about": "Acerca de", "@about": { "type": "String", @@ -7870,5 +7870,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "El idioma de destino no coincide con este mensaje. ¿Actualizar el idioma de destino?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb index edbbaa7db..570c68874 100644 --- a/lib/l10n/intl_et.arb +++ b/lib/l10n/intl_et.arb @@ -1,6 +1,6 @@ { "@@locale": "et", - "@@last_modified": "2025-12-03 10:29:57.478134", + "@@last_modified": "2025-12-03 11:36:35.627602", "about": "Rakenduse teave", "@about": { "type": "String", @@ -10906,5 +10906,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Teie sihtkeel ei ühti selle sõnumiga. Kas soovite oma sihtkeelt uuendada?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_eu.arb b/lib/l10n/intl_eu.arb index c825e9839..e6169ece2 100644 --- a/lib/l10n/intl_eu.arb +++ b/lib/l10n/intl_eu.arb @@ -1,6 +1,6 @@ { "@@locale": "eu", - "@@last_modified": "2025-12-03 10:29:53.791099", + "@@last_modified": "2025-12-03 11:36:32.505093", "about": "Honi buruz", "@about": { "type": "String", @@ -10635,5 +10635,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Zure helburu hizkuntza ez da mezu honekin bat etortzen. Eguneratu al dezakezu zure helburu hizkuntza?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fa.arb b/lib/l10n/intl_fa.arb index b0e4e1595..53063acec 100644 --- a/lib/l10n/intl_fa.arb +++ b/lib/l10n/intl_fa.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:30:49.073619", + "@@last_modified": "2025-12-03 11:37:08.469937", "repeatPassword": "تکرار رمزعبور", "@repeatPassword": {}, "about": "درباره", @@ -11367,5 +11367,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "زبان هدف شما با این پیام مطابقت ندارد. آیا زبان هدف خود را به‌روزرسانی کنید؟", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fi.arb b/lib/l10n/intl_fi.arb index da6862142..3e0b5a612 100644 --- a/lib/l10n/intl_fi.arb +++ b/lib/l10n/intl_fi.arb @@ -4013,7 +4013,7 @@ "playWithAI": "Leiki tekoälyn kanssa nyt", "courseStartDesc": "Pangea Bot on valmis milloin tahansa!\n\n...mutta oppiminen on parempaa ystävien kanssa!", "@@locale": "fi", - "@@last_modified": "2025-12-03 10:29:28.000186", + "@@last_modified": "2025-12-03 11:36:17.887679", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11258,5 +11258,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Kohdekielesi ei vastaa tätä viestiä. Päivitäkö kohdekielesi?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fil.arb b/lib/l10n/intl_fil.arb index 6eb06b7d8..b17528a47 100644 --- a/lib/l10n/intl_fil.arb +++ b/lib/l10n/intl_fil.arb @@ -2791,7 +2791,7 @@ "selectAll": "Piliin lahat", "deselectAll": "Huwag piliin lahat", "@@locale": "fil", - "@@last_modified": "2025-12-03 10:30:24.695985", + "@@last_modified": "2025-12-03 11:36:52.845643", "@setCustomPermissionLevel": { "type": "String", "placeholders": {} @@ -11611,5 +11611,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ang iyong target na wika ay hindi tumutugma sa mensaheng ito. I-update ang iyong target na wika?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 38e2d3488..b440adcbf 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -1,6 +1,6 @@ { "@@locale": "fr", - "@@last_modified": "2025-12-03 10:31:16.115668", + "@@last_modified": "2025-12-03 11:37:22.098085", "about": "À propos", "@about": { "type": "String", @@ -10959,5 +10959,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Votre langue cible ne correspond pas à ce message. Voulez-vous mettre à jour votre langue cible ?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index 1118ce0cb..1359426d3 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -4521,7 +4521,7 @@ "playWithAI": "Imir le AI faoi láthair", "courseStartDesc": "Tá Bot Pangea réidh chun dul am ar bith!\n\n...ach is fearr foghlaim le cairde!", "@@locale": "ga", - "@@last_modified": "2025-12-03 10:31:12.355807", + "@@last_modified": "2025-12-03 11:37:21.302431", "@customReaction": { "type": "String", "placeholders": {} @@ -10633,5 +10633,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ní comhoiriúnach do theanga sprioc le haghaidh an teachtaireachta seo. An nuashonraigh do theanga sprioc?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index 99d4dd197..6ed75f87e 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -1,6 +1,6 @@ { "@@locale": "gl", - "@@last_modified": "2025-12-03 10:29:25.436969", + "@@last_modified": "2025-12-03 11:36:16.780690", "about": "Acerca de", "@about": { "type": "String", @@ -10632,5 +10632,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "A súa lingua de destino non coincide con este mensaxe. Actualizar a súa lingua de destino?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_he.arb b/lib/l10n/intl_he.arb index ba4b58b70..c9dbd295b 100644 --- a/lib/l10n/intl_he.arb +++ b/lib/l10n/intl_he.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:29:47.561493", + "@@last_modified": "2025-12-03 11:36:29.117862", "about": "אודות", "@about": { "type": "String", @@ -11684,5 +11684,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "שפת היעד שלך אינה תואמת את ההודעה הזו. האם לעדכן את שפת היעד שלך?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hi.arb b/lib/l10n/intl_hi.arb index dd7e01ea7..9e28e3d87 100644 --- a/lib/l10n/intl_hi.arb +++ b/lib/l10n/intl_hi.arb @@ -4487,7 +4487,7 @@ "playWithAI": "अभी के लिए एआई के साथ खेलें", "courseStartDesc": "पैंजिया बॉट कभी भी जाने के लिए तैयार है!\n\n...लेकिन दोस्तों के साथ सीखना बेहतर है!", "@@locale": "hi", - "@@last_modified": "2025-12-03 10:31:01.035602", + "@@last_modified": "2025-12-03 11:37:14.540576", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11720,5 +11720,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "आपकी लक्षित भाषा इस संदेश से मेल नहीं खाती। क्या आप अपनी लक्षित भाषा अपडेट करना चाहेंगे?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hr.arb b/lib/l10n/intl_hr.arb index 37e6edf64..1e33dd533 100644 --- a/lib/l10n/intl_hr.arb +++ b/lib/l10n/intl_hr.arb @@ -1,6 +1,6 @@ { "@@locale": "hr", - "@@last_modified": "2025-12-03 10:29:43.328965", + "@@last_modified": "2025-12-03 11:36:27.424602", "about": "Informacije", "@about": { "type": "String", @@ -11007,5 +11007,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Vaš ciljni jezik se ne podudara s ovom porukom. Želite li ažurirati svoj ciljni jezik?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb index b10d7cd1c..39bd33705 100644 --- a/lib/l10n/intl_hu.arb +++ b/lib/l10n/intl_hu.arb @@ -1,6 +1,6 @@ { "@@locale": "hu", - "@@last_modified": "2025-12-03 10:29:32.057483", + "@@last_modified": "2025-12-03 11:36:20.356699", "about": "Névjegy", "@about": { "type": "String", @@ -10636,5 +10636,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "A cél nyelve nem egyezik meg ezzel az üzenettel. Frissíti a cél nyelvét?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ia.arb b/lib/l10n/intl_ia.arb index fda7b1861..b970c8b31 100644 --- a/lib/l10n/intl_ia.arb +++ b/lib/l10n/intl_ia.arb @@ -1962,7 +1962,7 @@ "playWithAI": "Joca con le IA pro ora", "courseStartDesc": "Pangea Bot es preste a comenzar a qualunque momento!\n\n...ma apprender es melior con amicos!", "@@locale": "ia", - "@@last_modified": "2025-12-03 10:29:49.294834", + "@@last_modified": "2025-12-03 11:36:30.210370", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11713,5 +11713,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Tua lingua target non concordat cum hoc nuntio. Renovare tuam linguam target?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_id.arb b/lib/l10n/intl_id.arb index d5737b870..a59ac1030 100644 --- a/lib/l10n/intl_id.arb +++ b/lib/l10n/intl_id.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:29:35.057047", + "@@last_modified": "2025-12-03 11:36:21.817521", "setAsCanonicalAlias": "Atur sebagai alias utama", "@setAsCanonicalAlias": { "type": "String", @@ -10626,5 +10626,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Bahasa target Anda tidak cocok dengan pesan ini. Perbarui bahasa target Anda?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ie.arb b/lib/l10n/intl_ie.arb index 692c3387a..99b1bb4ce 100644 --- a/lib/l10n/intl_ie.arb +++ b/lib/l10n/intl_ie.arb @@ -4376,7 +4376,7 @@ "playWithAI": "Joca con AI pro ora", "courseStartDesc": "Pangea Bot es preste a partir a qualunque momento!\n\n...ma apprender es melior con amicos!", "@@locale": "ie", - "@@last_modified": "2025-12-03 10:29:41.092414", + "@@last_modified": "2025-12-03 11:36:26.117148", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11609,5 +11609,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Tua lingua target non concordat cum hoc nuntio. Renovare linguam tuam target?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 8c737470a..76e447e1a 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:30:04.563615", + "@@last_modified": "2025-12-03 11:36:40.442034", "about": "Informazioni", "@about": { "type": "String", @@ -10638,5 +10638,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "La tua lingua di destinazione non corrisponde a questo messaggio. Vuoi aggiornare la tua lingua di destinazione?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index 17c579a15..5e1ec641e 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -1,6 +1,6 @@ { "@@locale": "ja", - "@@last_modified": "2025-12-03 10:30:59.054527", + "@@last_modified": "2025-12-03 11:37:13.415132", "about": "このアプリについて", "@about": { "type": "String", @@ -11425,5 +11425,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "ターゲット言語がこのメッセージと一致しません。ターゲット言語を更新しますか?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ka.arb b/lib/l10n/intl_ka.arb index 168f2ebf7..ce59821e6 100644 --- a/lib/l10n/intl_ka.arb +++ b/lib/l10n/intl_ka.arb @@ -2598,7 +2598,7 @@ "playWithAI": "ამ დროისთვის ითამაშეთ AI-თან", "courseStartDesc": "Pangea Bot მზადაა ნებისმიერ დროს გასასვლელად!\n\n...მაგრამ სწავლა უკეთესია მეგობრებთან ერთად!", "@@locale": "ka", - "@@last_modified": "2025-12-03 10:31:07.852817", + "@@last_modified": "2025-12-03 11:37:18.523462", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11665,5 +11665,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "თქვენი მიზნობრივი ენა არ ემთხვევა ამ შეტყობინებას. განაახლეთ თქვენი მიზნობრივი ენა?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ko.arb b/lib/l10n/intl_ko.arb index 3a7e00022..39e10f453 100644 --- a/lib/l10n/intl_ko.arb +++ b/lib/l10n/intl_ko.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:29:21.753863", + "@@last_modified": "2025-12-03 11:36:14.042097", "about": "소개", "@about": { "type": "String", @@ -10743,5 +10743,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "대상 언어가 이 메시지와 일치하지 않습니다. 대상 언어를 업데이트하시겠습니까?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lt.arb b/lib/l10n/intl_lt.arb index f6513683c..cfc2f9514 100644 --- a/lib/l10n/intl_lt.arb +++ b/lib/l10n/intl_lt.arb @@ -3865,7 +3865,7 @@ "playWithAI": "Žaiskite su dirbtiniu intelektu dabar", "courseStartDesc": "Pangea botas pasiruošęs bet kada pradėti!\n\n...bet mokymasis yra geresnis su draugais!", "@@locale": "lt", - "@@last_modified": "2025-12-03 10:30:34.545170", + "@@last_modified": "2025-12-03 11:37:00.421228", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11440,5 +11440,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Jūsų tikslinė kalba nesutampa su šiuo pranešimu. Ar norite atnaujinti savo tikslinę kalbą?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index 88fb55a51..10231eecf 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -4486,7 +4486,7 @@ "playWithAI": "Tagad spēlējiet ar AI", "courseStartDesc": "Pangea bots ir gatavs jebkurā laikā!\n\n...bet mācīties ir labāk ar draugiem!", "@@locale": "lv", - "@@last_modified": "2025-12-03 10:30:26.874201", + "@@last_modified": "2025-12-03 11:36:54.273221", "analyticsInactiveTitle": "Pieprasījumi neaktīviem lietotājiem nevar tikt nosūtīti", "analyticsInactiveDesc": "Neaktīvi lietotāji, kuri nav pieteikušies kopš šīs funkcijas ieviešanas, neredzēs jūsu pieprasījumu.\n\nPieprasījuma poga parādīsies, kad viņi atgriezīsies. Jūs varat atkārtoti nosūtīt pieprasījumu vēlāk, noklikšķinot uz pieprasījuma pogas viņu vārdā, kad tā būs pieejama.", "accessRequestedTitle": "Pieprasījums piekļūt analītikai", @@ -10621,5 +10621,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Jūsu mērķa valoda nesakrīt ar šo ziņojumu. Vai vēlaties atjaunināt savu mērķa valodu?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb index c6742269e..60de9b8da 100644 --- a/lib/l10n/intl_nb.arb +++ b/lib/l10n/intl_nb.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:30:10.936757", + "@@last_modified": "2025-12-03 11:36:44.135739", "about": "Om", "@about": { "type": "String", @@ -11728,5 +11728,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Mål språket ditt samsvarer ikke med denne meldingen. Vil du oppdatere målspråket ditt?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index cc10b73c5..5d89cae7b 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:30:41.689144", + "@@last_modified": "2025-12-03 11:37:03.689136", "about": "Over ons", "@about": { "type": "String", @@ -10635,5 +10635,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Uw doeltaal komt niet overeen met dit bericht. Wilt u uw doeltaal bijwerken?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index 3247b0542..6813297b5 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -1,6 +1,6 @@ { "@@locale": "pl", - "@@last_modified": "2025-12-03 10:30:52.793986", + "@@last_modified": "2025-12-03 11:37:09.726956", "about": "O aplikacji", "@about": { "type": "String", @@ -10635,5 +10635,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Twój docelowy język nie pasuje do tej wiadomości. Zaktualizować swój docelowy język?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 6bfb4c6e5..bea4b80ca 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:29:55.539620", + "@@last_modified": "2025-12-03 11:36:34.084326", "copiedToClipboard": "Copiada para a área de transferência", "@copiedToClipboard": { "type": "String", @@ -11735,5 +11735,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "O seu idioma de destino não corresponde a esta mensagem. Atualizar o seu idioma de destino?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt_BR.arb b/lib/l10n/intl_pt_BR.arb index 99c24659d..9042304c8 100644 --- a/lib/l10n/intl_pt_BR.arb +++ b/lib/l10n/intl_pt_BR.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:29:51.928516", + "@@last_modified": "2025-12-03 11:36:31.334762", "about": "Sobre", "@about": { "type": "String", @@ -10993,5 +10993,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Seu idioma de destino não corresponde a esta mensagem. Atualizar seu idioma de destino?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt_PT.arb b/lib/l10n/intl_pt_PT.arb index d21232600..ec488c988 100644 --- a/lib/l10n/intl_pt_PT.arb +++ b/lib/l10n/intl_pt_PT.arb @@ -3335,7 +3335,7 @@ "selectAll": "Selecionar tudo", "deselectAll": "Desmarcar tudo", "@@locale": "pt_PT", - "@@last_modified": "2025-12-03 10:30:20.842171", + "@@last_modified": "2025-12-03 11:36:49.262059", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11664,5 +11664,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "O seu idioma de destino não corresponde a esta mensagem. Atualizar o seu idioma de destino?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb index 5625eee80..78e522042 100644 --- a/lib/l10n/intl_ro.arb +++ b/lib/l10n/intl_ro.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:29:37.617394", + "@@last_modified": "2025-12-03 11:36:22.939099", "about": "Despre", "@about": { "type": "String", @@ -11370,5 +11370,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Limba țintă nu se potrivește cu acest mesaj. Doriți să actualizați limba țintă?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index 93caa91be..e69d94047 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -1,6 +1,6 @@ { "@@locale": "ru", - "@@last_modified": "2025-12-03 10:31:05.575917", + "@@last_modified": "2025-12-03 11:37:16.847372", "about": "О проекте", "@about": { "type": "String", @@ -10740,5 +10740,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ваш целевой язык не соответствует этому сообщению. Обновить ваш целевой язык?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sk.arb b/lib/l10n/intl_sk.arb index 86db04d3d..7d5817e51 100644 --- a/lib/l10n/intl_sk.arb +++ b/lib/l10n/intl_sk.arb @@ -1,6 +1,6 @@ { "@@locale": "sk", - "@@last_modified": "2025-12-03 10:29:39.057337", + "@@last_modified": "2025-12-03 11:36:25.077269", "about": "O aplikácii", "@about": { "type": "String", @@ -11719,5 +11719,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Vaša cieľová jazyková verzia sa nezhoduje s touto správou. Chcete aktualizovať svoju cieľovú jazykovú verziu?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sl.arb b/lib/l10n/intl_sl.arb index 6d0129da8..bd8e36c07 100644 --- a/lib/l10n/intl_sl.arb +++ b/lib/l10n/intl_sl.arb @@ -2468,7 +2468,7 @@ "playWithAI": "Za zdaj igrajte z AI-jem", "courseStartDesc": "Pangea Bot je pripravljen kadarkoli!\n\n...ampak je bolje učiti se s prijatelji!", "@@locale": "sl", - "@@last_modified": "2025-12-03 10:30:00.944868", + "@@last_modified": "2025-12-03 11:36:37.990886", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11716,5 +11716,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Vaš cilj jezik ne ustreza temu sporočilu. Ali želite posodobiti svoj cilj jezik?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sr.arb b/lib/l10n/intl_sr.arb index 2cf79b8ed..e0d8bca83 100644 --- a/lib/l10n/intl_sr.arb +++ b/lib/l10n/intl_sr.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:31:09.729056", + "@@last_modified": "2025-12-03 11:37:19.859367", "about": "О програму", "@about": { "type": "String", @@ -11737,5 +11737,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Vaš ciljni jezik se ne poklapa sa ovom porukom. Da li želite da ažurirate svoj ciljni jezik?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb index 609dd5c29..6996d9fbb 100644 --- a/lib/l10n/intl_sv.arb +++ b/lib/l10n/intl_sv.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:30:55.022846", + "@@last_modified": "2025-12-03 11:37:10.758797", "about": "Om", "@about": { "type": "String", @@ -11113,5 +11113,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ditt målspråk matchar inte detta meddelande. Vill du uppdatera ditt målspråk?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ta.arb b/lib/l10n/intl_ta.arb index 3951e15b4..81c863241 100644 --- a/lib/l10n/intl_ta.arb +++ b/lib/l10n/intl_ta.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:30:40.029007", + "@@last_modified": "2025-12-03 11:37:02.609418", "acceptedTheInvitation": "👍 {username} அழைப்பை ஏற்றுக்கொண்டது", "@acceptedTheInvitation": { "type": "String", @@ -10859,5 +10859,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "உங்கள் இலக்கு மொழி இந்த செய்தியுடன் பொருந்தவில்லை. உங்கள் இலக்கு மொழியை புதுப்பிக்கவா?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_te.arb b/lib/l10n/intl_te.arb index cd0c39ced..56e6f079b 100644 --- a/lib/l10n/intl_te.arb +++ b/lib/l10n/intl_te.arb @@ -1924,7 +1924,7 @@ "playWithAI": "ఇప్పుడే AI తో ఆడండి", "courseStartDesc": "పాంజియా బాట్ ఎప్పుడైనా సిద్ధంగా ఉంటుంది!\n\n...కానీ స్నేహితులతో నేర్చుకోవడం మెరుగైనది!", "@@locale": "te", - "@@last_modified": "2025-12-03 10:30:32.508974", + "@@last_modified": "2025-12-03 11:36:57.737104", "@setCustomPermissionLevel": { "type": "String", "placeholders": {} @@ -11724,5 +11724,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "మీ లక్ష్య భాష ఈ సందేశానికి సరిపోలడం లేదు. మీ లక్ష్య భాషను నవీకరించాలా?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_th.arb b/lib/l10n/intl_th.arb index 6b131ffce..10d54d8b6 100644 --- a/lib/l10n/intl_th.arb +++ b/lib/l10n/intl_th.arb @@ -4460,7 +4460,7 @@ "playWithAI": "เล่นกับ AI ชั่วคราว", "courseStartDesc": "Pangea Bot พร้อมที่จะเริ่มต้นได้ทุกเมื่อ!\n\n...แต่การเรียนรู้ดีกว่ากับเพื่อน!", "@@locale": "th", - "@@last_modified": "2025-12-03 10:30:18.986154", + "@@last_modified": "2025-12-03 11:36:48.052510", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11693,5 +11693,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "ภาษาที่คุณเลือกไม่ตรงกับข้อความนี้ ต้องการอัปเดตภาษาที่คุณเลือกหรือไม่?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb index c8e091032..a4db75435 100644 --- a/lib/l10n/intl_tr.arb +++ b/lib/l10n/intl_tr.arb @@ -1,6 +1,6 @@ { "@@locale": "tr", - "@@last_modified": "2025-12-03 10:30:30.590666", + "@@last_modified": "2025-12-03 11:36:56.511057", "about": "Hakkında", "@about": { "type": "String", @@ -10857,5 +10857,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Hedef diliniz bu mesajla eşleşmiyor. Hedef dilinizi güncelleyebilir misiniz?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_uk.arb b/lib/l10n/intl_uk.arb index 697b2bb5f..50309f9a3 100644 --- a/lib/l10n/intl_uk.arb +++ b/lib/l10n/intl_uk.arb @@ -1,6 +1,6 @@ { "@@locale": "uk", - "@@last_modified": "2025-12-03 10:30:06.811114", + "@@last_modified": "2025-12-03 11:36:41.416683", "about": "Про застосунок", "@about": { "type": "String", @@ -10629,5 +10629,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ваша цільова мова не відповідає цьому повідомленню. Оновити вашу цільову мову?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_vi.arb b/lib/l10n/intl_vi.arb index c33854c1c..9641f7930 100644 --- a/lib/l10n/intl_vi.arb +++ b/lib/l10n/intl_vi.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:30:37.893660", + "@@last_modified": "2025-12-03 11:37:01.540762", "about": "Giới thiệu", "@about": { "type": "String", @@ -6205,5 +6205,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "Ngôn ngữ mục tiêu của bạn không khớp với thông điệp này. Cập nhật ngôn ngữ mục tiêu của bạn?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_yue.arb b/lib/l10n/intl_yue.arb index 0ab9ba615..11d2f806b 100644 --- a/lib/l10n/intl_yue.arb +++ b/lib/l10n/intl_yue.arb @@ -1860,7 +1860,7 @@ "selectAll": "全選", "deselectAll": "取消全選", "@@locale": "yue", - "@@last_modified": "2025-12-03 10:30:02.789794", + "@@last_modified": "2025-12-03 11:36:39.120785", "@ignoreUser": { "type": "String", "placeholders": {} @@ -11726,5 +11726,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "您的目標語言與此消息不匹配。要更新您的目標語言嗎?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index ccc8081ee..94b06e0c1 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -1,6 +1,6 @@ { "@@locale": "zh", - "@@last_modified": "2025-12-03 10:30:45.297060", + "@@last_modified": "2025-12-03 11:37:06.135839", "about": "关于", "@about": { "type": "String", @@ -10626,5 +10626,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "您的目标语言与此消息不匹配。要更新您的目标语言吗?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_zh_Hant.arb b/lib/l10n/intl_zh_Hant.arb index bbcd53b69..52a399270 100644 --- a/lib/l10n/intl_zh_Hant.arb +++ b/lib/l10n/intl_zh_Hant.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2025-12-03 10:30:22.582679", + "@@last_modified": "2025-12-03 11:36:51.200682", "about": "關於", "@about": { "type": "String", @@ -10633,5 +10633,10 @@ "@pickDifferentActivity": { "type": "String", "placeholders": {} + }, + "messageLanguageMismatchMessage": "您的目標語言與此消息不匹配。要更新您的目標語言嗎?", + "@messageLanguageMismatchMessage": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/pages/chat/chat.dart b/lib/pages/chat/chat.dart index 61d69dd0c..15c129d79 100644 --- a/lib/pages/chat/chat.dart +++ b/lib/pages/chat/chat.dart @@ -29,6 +29,7 @@ import 'package:fluffychat/pages/chat/recording_dialog.dart'; import 'package:fluffychat/pages/chat_details/chat_details.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_chat_controller.dart'; +import 'package:fluffychat/pangea/activity_sessions/activity_session_chat/activity_chat_extension.dart'; import 'package:fluffychat/pangea/analytics_misc/construct_type_enum.dart'; import 'package:fluffychat/pangea/analytics_misc/constructs_model.dart'; import 'package:fluffychat/pangea/analytics_misc/get_analytics_controller.dart'; @@ -58,7 +59,6 @@ import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; import 'package:fluffychat/pangea/learning_settings/constants/language_constants.dart'; import 'package:fluffychat/pangea/learning_settings/repo/language_mismatch_repo.dart'; -import 'package:fluffychat/pangea/learning_settings/widgets/language_mismatch_popup.dart'; import 'package:fluffychat/pangea/learning_settings/widgets/p_language_dialog.dart'; import 'package:fluffychat/pangea/message_token_text/tokens_util.dart'; import 'package:fluffychat/pangea/spaces/utils/load_participants_util.dart'; @@ -1994,6 +1994,26 @@ class ChatController extends State return; } + if (LanguageMismatchRepo.shouldShowByEvent(event.eventId) && + pangeaMessageEvent?.originalSent?.content.langCodeMatchesL2 == false) { + LanguageMismatchRepo.setEvent(event.eventId); + OverlayUtil.showLanguageMismatchPopup( + context: context, + targetId: event.eventId, + message: L10n.of(context).messageLanguageMismatchMessage, + targetLanguage: pangeaMessageEvent!.originalSent!.langCode, + onConfirm: () => showToolbar( + event, + pangeaMessageEvent: pangeaMessageEvent, + selectedToken: selectedToken, + mode: mode, + nextEvent: nextEvent, + prevEvent: prevEvent, + ), + ); + return; + } + final overlayEntry = MessageSelectionOverlay( chatController: this, event: event, @@ -2060,8 +2080,7 @@ class ChatController extends State // There's a listen in my_analytics_controller that decides when to auto-update // analytics based on when / how many messages the logged in user send. This // stream sends the data for newly sent messages. - if (originalSent?.langCode.split("-").first != - MatrixState.pangeaController.languageController.userL2?.langCodeShort) { + if (originalSent?.langCodeMatchesL2 != true) { return; } @@ -2155,23 +2174,6 @@ class ChatController extends State } } - bool get shouldShowLanguageMismatchPopup { - if (!LanguageMismatchRepo.shouldShow) { - return false; - } - - final l1 = - MatrixState.pangeaController.languageController.userL1?.langCodeShort; - final l2 = - MatrixState.pangeaController.languageController.userL2?.langCodeShort; - final activityLang = room.activityPlan?.req.targetLanguage.split('-').first; - - return activityLang != null && - l2 != null && - l2 != activityLang && - l1 != activityLang; - } - void showNextMatch() { MatrixState.pAnyState.closeOverlay(); final match = choreographer.igcController.openMatches.firstOrNull; @@ -2194,7 +2196,7 @@ class ChatController extends State bool manual = false, bool autosend = false, }) async { - if (shouldShowLanguageMismatchPopup) { + if (shouldShowLanguageMismatchPopupByActivity) { return showLanguageMismatchPopup(); } @@ -2209,34 +2211,20 @@ class ChatController extends State } void showLanguageMismatchPopup() { - if (!shouldShowLanguageMismatchPopup) { + if (!shouldShowLanguageMismatchPopupByActivity) { return; } final targetLanguage = room.activityPlan!.req.targetLanguage; - LanguageMismatchRepo.set(); - OverlayUtil.showPositionedCard( + LanguageMismatchRepo.setRoom(roomId); + OverlayUtil.showLanguageMismatchPopup( context: context, - cardToShow: LanguageMismatchPopup( - overlayId: 'language_mismatch_popup', - onConfirm: () async { - await MatrixState.pangeaController.userController.updateProfile( - (profile) { - profile.userSettings.targetLanguage = targetLanguage; - return profile; - }, - waitForDataInSync: true, - ); - - WidgetsBinding.instance.addPostFrameCallback( - (_) => onRequestWritingAssistance(manual: false, autosend: true), - ); - }, + targetId: ChoreoConstants.inputTransformTargetKey, + message: L10n.of(context).languageMismatchDesc, + targetLanguage: targetLanguage, + onConfirm: () => WidgetsBinding.instance.addPostFrameCallback( + (_) => onRequestWritingAssistance(manual: false, autosend: true), ), - maxHeight: 325, - maxWidth: 325, - transformTargetId: ChoreoConstants.inputTransformTargetKey, - overlayKey: 'language_mismatch_popup', ); } diff --git a/lib/pangea/activity_sessions/activity_session_chat/activity_chat_extension.dart b/lib/pangea/activity_sessions/activity_session_chat/activity_chat_extension.dart index c059ca826..77f3affda 100644 --- a/lib/pangea/activity_sessions/activity_session_chat/activity_chat_extension.dart +++ b/lib/pangea/activity_sessions/activity_session_chat/activity_chat_extension.dart @@ -4,6 +4,7 @@ import 'package:fluffychat/config/app_config.dart'; import 'package:fluffychat/pages/chat/chat.dart'; import 'package:fluffychat/pangea/activity_sessions/activity_room_extension.dart'; import 'package:fluffychat/pangea/instructions/instructions_enum.dart'; +import 'package:fluffychat/pangea/learning_settings/repo/language_mismatch_repo.dart'; import 'package:fluffychat/widgets/matrix.dart'; extension ActivityMenuLogic on ChatController { @@ -35,4 +36,21 @@ extension ActivityMenuLogic on ChatController { return count >= 3; } + + bool get shouldShowLanguageMismatchPopupByActivity { + if (!LanguageMismatchRepo.shouldShowByRoom(roomId)) { + return false; + } + + final l1 = + MatrixState.pangeaController.languageController.userL1?.langCodeShort; + final l2 = + MatrixState.pangeaController.languageController.userL2?.langCodeShort; + final activityLang = room.activityPlan?.req.targetLanguage.split('-').first; + + return activityLang != null && + l2 != null && + l2 != activityLang && + l1 != activityLang; + } } diff --git a/lib/pangea/common/utils/overlay.dart b/lib/pangea/common/utils/overlay.dart index eb10ac357..aacabc9d8 100644 --- a/lib/pangea/common/utils/overlay.dart +++ b/lib/pangea/common/utils/overlay.dart @@ -13,6 +13,7 @@ import 'package:fluffychat/pangea/common/utils/any_state_holder.dart'; import 'package:fluffychat/pangea/common/widgets/anchored_overlay_widget.dart'; import 'package:fluffychat/pangea/common/widgets/overlay_container.dart'; import 'package:fluffychat/pangea/common/widgets/transparent_backdrop.dart'; +import 'package:fluffychat/pangea/learning_settings/widgets/language_mismatch_popup.dart'; import '../../../config/themes.dart'; import '../../../widgets/matrix.dart'; import 'error_handler.dart'; @@ -305,4 +306,26 @@ class OverlayUtil { ignorePointer: true, ); } + + static void showLanguageMismatchPopup({ + required BuildContext context, + required String targetId, + required String message, + required String targetLanguage, + required VoidCallback onConfirm, + }) { + showPositionedCard( + context: context, + cardToShow: LanguageMismatchPopup( + message: message, + overlayId: 'language_mismatch_popup', + onConfirm: onConfirm, + targetLanguage: targetLanguage, + ), + maxHeight: 325, + maxWidth: 325, + transformTargetId: targetId, + overlayKey: 'language_mismatch_popup', + ); + } } diff --git a/lib/pangea/events/models/representation_content_model.dart b/lib/pangea/events/models/representation_content_model.dart index c4ee4e43f..36c41cd3e 100644 --- a/lib/pangea/events/models/representation_content_model.dart +++ b/lib/pangea/events/models/representation_content_model.dart @@ -9,6 +9,7 @@ import 'package:fluffychat/pangea/choreographer/igc/pangea_match_status_enum.dar import 'package:fluffychat/pangea/common/utils/error_handler.dart'; import 'package:fluffychat/pangea/events/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/toolbar/models/speech_to_text_models.dart'; +import 'package:fluffychat/widgets/matrix.dart'; /// this class is contained within a [RepresentationEvent] /// this event is the child of a [EventTypes.Message] @@ -91,6 +92,10 @@ class PangeaRepresentation { return data; } + bool get langCodeMatchesL2 => + langCode.split("-").first == + MatrixState.pangeaController.languageController.userL2?.langCodeShort; + /// Get construct uses for the message that weren't captured during language assistance. /// Takes a list of tokens and a choreo record, which is searched /// through for each token for its construct use type. diff --git a/lib/pangea/learning_settings/repo/language_mismatch_repo.dart b/lib/pangea/learning_settings/repo/language_mismatch_repo.dart index 6863164a7..0096bff42 100644 --- a/lib/pangea/learning_settings/repo/language_mismatch_repo.dart +++ b/lib/pangea/learning_settings/repo/language_mismatch_repo.dart @@ -2,41 +2,46 @@ import 'package:get_storage/get_storage.dart'; class LanguageMismatchRepo { static final GetStorage _storage = GetStorage('language_mismatch'); - static const String key = 'shown_timestamp'; static const Duration displayInterval = Duration(minutes: 30); - static Future set() async { - await _storage.write(key, DateTime.now().toIso8601String()); + static String _roomKey(String roomId) => 'language_mismatch_room_$roomId'; + static String _eventKey(String eventId) => 'language_mismatch_event_$eventId'; + + static bool shouldShowByRoom(String roomId) => _get(_roomKey(roomId)); + static bool shouldShowByEvent(String eventId) => _get(_eventKey(eventId)); + + static Future setRoom(String roomId) async => _set(_roomKey(roomId)); + static Future setEvent(String eventId) async => + _set(_eventKey(eventId)); + + static Future _set(String key) async { + await _storage.write( + key, + DateTime.now().toIso8601String(), + ); } - static DateTime? _get() { - final entry = _storage.read(key); - if (entry == null) return null; - - try { - final value = DateTime.tryParse(entry); - if (value != null) { - final timeSince = DateTime.now().difference(value); - if (timeSince > displayInterval) { - _delete(); - return null; - } - return value; - } - } catch (_) { - _delete(); - } - - return null; - } - - static Future _delete() async { - await _storage.remove(key); - } - - static bool get shouldShow { - final lastShown = _get(); + static bool _get(String key) { + final lastShown = _getCached(key); if (lastShown == null) return true; return DateTime.now().difference(lastShown) >= displayInterval; } + + static DateTime? _getCached(String key) { + final entry = _storage.read(key); + if (entry == null) return null; + + final value = DateTime.tryParse(entry); + if (value == null) { + _storage.remove(key); + return null; + } + + final timeSince = DateTime.now().difference(value); + if (timeSince > displayInterval) { + _storage.remove(key); + return null; + } + return value; + } } diff --git a/lib/pangea/learning_settings/widgets/language_mismatch_popup.dart b/lib/pangea/learning_settings/widgets/language_mismatch_popup.dart index 0c86a9b50..34f0dcb6c 100644 --- a/lib/pangea/learning_settings/widgets/language_mismatch_popup.dart +++ b/lib/pangea/learning_settings/widgets/language_mismatch_popup.dart @@ -7,14 +7,30 @@ import 'package:fluffychat/widgets/future_loading_dialog.dart'; import 'package:fluffychat/widgets/matrix.dart'; class LanguageMismatchPopup extends StatelessWidget { + final String message; final String overlayId; - final Future Function() onConfirm; + final String targetLanguage; + final VoidCallback onConfirm; + const LanguageMismatchPopup({ super.key, + required this.message, required this.overlayId, + required this.targetLanguage, required this.onConfirm, }); + Future _updateLanguage() async { + await MatrixState.pangeaController.userController.updateProfile( + (profile) { + profile.userSettings.targetLanguage = targetLanguage; + return profile; + }, + waitForDataInSync: true, + ); + onConfirm(); + } + @override Widget build(BuildContext context) { return Column( @@ -29,7 +45,7 @@ class LanguageMismatchPopup extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text( - L10n.of(context).languageMismatchDesc, + message, style: BotStyle.text(context), textAlign: TextAlign.center, ), @@ -39,7 +55,7 @@ class LanguageMismatchPopup extends StatelessWidget { onPressed: () async { await showFutureLoadingDialog( context: context, - future: onConfirm, + future: _updateLanguage, ); MatrixState.pAnyState.closeOverlay(overlayId); },