diff --git a/lib/l10n/intl_ar.arb b/lib/l10n/intl_ar.arb index cb7e976f9..2ec0e9c04 100644 --- a/lib/l10n/intl_ar.arb +++ b/lib/l10n/intl_ar.arb @@ -1,6 +1,6 @@ { "@@locale": "ar", - "@@last_modified": "2026-02-09 10:31:06.969392", + "@@last_modified": "2026-02-09 11:09:32.801033", "about": "حول", "@about": { "type": "String", @@ -11177,6 +11177,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "عنّي", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "تعبير اصطلاحي", "grammarCopyPOSphrasalv": "فعل مركب", "grammarCopyPOScompn": "مركب", @@ -11211,5 +11216,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "تغيير البريد الإلكتروني", + "withTheseAddressesDescription": "باستخدام هذه العناوين البريدية يمكنك تسجيل الدخول، واستعادة كلمة المرور، وإدارة الاشتراكات.", + "noAddressDescription": "لم تقم بإضافة أي عناوين بريد إلكتروني بعد.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_be.arb b/lib/l10n/intl_be.arb index 9f56ebca9..2754a34fb 100644 --- a/lib/l10n/intl_be.arb +++ b/lib/l10n/intl_be.arb @@ -1908,7 +1908,7 @@ "playWithAI": "Пакуль гуляйце з ШІ", "courseStartDesc": "Pangea Bot гатовы да працы ў любы час!\n\n...але навучанне лепш з сябрамі!", "@@locale": "be", - "@@last_modified": "2026-02-09 10:30:56.849128", + "@@last_modified": "2026-02-09 11:09:23.199652", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -12059,6 +12059,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Пра мяне", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Ідыём", "grammarCopyPOSphrasalv": "Фразавы дзеяслоў", "grammarCopyPOScompn": "Складаны", @@ -12093,5 +12098,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Змяніць электронную пошту", + "withTheseAddressesDescription": "З гэтымі электроннымі адрасамі вы можаце ўвайсці, аднавіць свой пароль і кіраваць падпіскамі.", + "noAddressDescription": "Вы яшчэ не дабавілі ніводнага электроннага адрасу.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bn.arb b/lib/l10n/intl_bn.arb index fb33c73ee..61e5ab945 100644 --- a/lib/l10n/intl_bn.arb +++ b/lib/l10n/intl_bn.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:31:21.327976", + "@@last_modified": "2026-02-09 11:09:46.816075", "about": "সম্পর্কে", "@about": { "type": "String", @@ -12064,6 +12064,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "আমার সম্পর্কে", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "বাগধারা", "grammarCopyPOSphrasalv": "ফ্রেজাল ক্রিয়া", "grammarCopyPOScompn": "যুগ্ম", @@ -12098,5 +12103,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "ইমেইল পরিবর্তন করুন", + "withTheseAddressesDescription": "এই ইমেইল ঠিকানাগুলির মাধ্যমে আপনি লগ ইন করতে, আপনার পাসওয়ার্ড পুনরুদ্ধার করতে এবং সাবস্ক্রিপশন পরিচালনা করতে পারেন।", + "noAddressDescription": "আপনি এখনও কোন ইমেইল ঠিকানা যোগ করেননি।", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_bo.arb b/lib/l10n/intl_bo.arb index c43b02482..4b558844a 100644 --- a/lib/l10n/intl_bo.arb +++ b/lib/l10n/intl_bo.arb @@ -4276,7 +4276,7 @@ "joinPublicTrip": "མི་ཚེས་ལ་ལོག་འབད།", "startOwnTrip": "ངེད་རང་གི་ལོག་ལ་སྦྱོར་བཅོས།", "@@locale": "bo", - "@@last_modified": "2026-02-09 10:31:18.713273", + "@@last_modified": "2026-02-09 11:09:44.069009", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -10714,6 +10714,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Bok o meni", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasal Verb", "grammarCopyPOScompn": "Compound", @@ -10748,5 +10753,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Bohor email", + "withTheseAddressesDescription": "S dengan alamat email ini, Anda dapat masuk, memulihkan kata sandi Anda, dan mengelola langganan.", + "noAddressDescription": "Anda belum menambahkan alamat email apa pun.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ca.arb b/lib/l10n/intl_ca.arb index 6567634fd..9670f68b1 100644 --- a/lib/l10n/intl_ca.arb +++ b/lib/l10n/intl_ca.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:30:58.877498", + "@@last_modified": "2026-02-09 11:09:24.612806", "about": "Quant a", "@about": { "type": "String", @@ -10984,6 +10984,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Sobre mi", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Verb Phrasal", "grammarCopyPOScompn": "Compost", @@ -11018,5 +11023,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Canvia l'email", + "withTheseAddressesDescription": "Amb aquestes adreces de correu electrònic pots iniciar sessió, recuperar la teva contrasenya i gestionar les subscripcions.", + "noAddressDescription": "Encara no has afegit cap adreça de correu electrònic.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_cs.arb b/lib/l10n/intl_cs.arb index 2f0de87e6..67c47b042 100644 --- a/lib/l10n/intl_cs.arb +++ b/lib/l10n/intl_cs.arb @@ -1,6 +1,6 @@ { "@@locale": "cs", - "@@last_modified": "2026-02-09 10:30:53.085602", + "@@last_modified": "2026-02-09 11:09:20.002945", "about": "O aplikaci", "@about": { "type": "String", @@ -11567,6 +11567,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "O mně", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Frázové sloveso", "grammarCopyPOScompn": "Složenina", @@ -11601,5 +11606,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Změnit e-mail", + "withTheseAddressesDescription": "S těmito e-mailovými adresami se můžete přihlásit, obnovit své heslo a spravovat předplatné.", + "noAddressDescription": "Zatím jste nepřidali žádné e-mailové adresy.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_da.arb b/lib/l10n/intl_da.arb index cb13a9d91..c0c309d49 100644 --- a/lib/l10n/intl_da.arb +++ b/lib/l10n/intl_da.arb @@ -1927,7 +1927,7 @@ "playWithAI": "Leg med AI for nu", "courseStartDesc": "Pangea Bot er klar til at starte når som helst!\n\n...men læring er bedre med venner!", "@@locale": "da", - "@@last_modified": "2026-02-09 10:30:26.547080", + "@@last_modified": "2026-02-09 11:08:45.510364", "@aboutHomeserver": { "type": "String", "placeholders": { @@ -12021,6 +12021,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Om mig", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasal Verb", "grammarCopyPOScompn": "Sammensat", @@ -12055,5 +12060,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Ændre email", + "withTheseAddressesDescription": "Med disse emailadresser kan du logge ind, gendanne din adgangskode og administrere abonnementer.", + "noAddressDescription": "Du har endnu ikke tilføjet nogen emailadresser.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_de.arb b/lib/l10n/intl_de.arb index c85543eca..32b58e7cf 100644 --- a/lib/l10n/intl_de.arb +++ b/lib/l10n/intl_de.arb @@ -1,6 +1,6 @@ { "@@locale": "de", - "@@last_modified": "2026-02-09 10:30:45.424459", + "@@last_modified": "2026-02-09 11:09:13.137048", "alwaysUse24HourFormat": "true", "@alwaysUse24HourFormat": { "description": "Set to true to always display time of day in 24 hour format." @@ -10967,6 +10967,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Über mich", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasal Verb", "grammarCopyPOScompn": "Zusammengesetztes Wort", @@ -11001,5 +11006,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "E-Mail ändern", + "withTheseAddressesDescription": "Mit diesen E-Mail-Adressen können Sie sich anmelden, Ihr Passwort wiederherstellen und Abonnements verwalten.", + "noAddressDescription": "Sie haben noch keine E-Mail-Adressen hinzugefügt.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_el.arb b/lib/l10n/intl_el.arb index 41cbb375a..4ea104e49 100644 --- a/lib/l10n/intl_el.arb +++ b/lib/l10n/intl_el.arb @@ -4453,7 +4453,7 @@ "playWithAI": "Παίξτε με την Τεχνητή Νοημοσύνη προς το παρόν", "courseStartDesc": "Ο Pangea Bot είναι έτοιμος να ξεκινήσει οποιαδήποτε στιγμή!\n\n...αλλά η μάθηση είναι καλύτερη με φίλους!", "@@locale": "el", - "@@last_modified": "2026-02-09 10:31:27.836094", + "@@last_modified": "2026-02-09 11:09:52.785391", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -12018,6 +12018,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Σχετικά με εμένα", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Ιδιωματισμός", "grammarCopyPOSphrasalv": "Φραστικό Ρήμα", "grammarCopyPOScompn": "Σύνθετο", @@ -12052,5 +12057,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Αλλαγή email", + "withTheseAddressesDescription": "Με αυτές τις διευθύνσεις email μπορείτε να συνδεθείτε, να ανακτήσετε τον κωδικό πρόσβασής σας και να διαχειριστείτε τις συνδρομές.", + "noAddressDescription": "Δεν έχετε προσθέσει καμία διεύθυνση email μέχρι στιγμής.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_en.arb b/lib/l10n/intl_en.arb index 8008ab3d0..8cbb0a2fc 100644 --- a/lib/l10n/intl_en.arb +++ b/lib/l10n/intl_en.arb @@ -5072,6 +5072,7 @@ "autoIGCToolName": "Enable writing assistance", "autoIGCToolDescription": "Automatically run Pangea Chat tools to correct sent messages to target language.", "emptyAudioError": "Recording failed. Please check your audio permissions and try again.", + "aboutMeHint": "About me", "changeEmail": "Change email", "withTheseAddressesDescription": "With these email addresses you can log in, recover your password, and manage subscriptions.", "noAddressDescription": "You have not added any email addresses yet.", diff --git a/lib/l10n/intl_eo.arb b/lib/l10n/intl_eo.arb index 1f4a4fc1d..946d9ffc6 100644 --- a/lib/l10n/intl_eo.arb +++ b/lib/l10n/intl_eo.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:31:32.343732", + "@@last_modified": "2026-02-09 11:09:57.785827", "about": "Prio", "@about": { "type": "String", @@ -12049,6 +12049,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Pri mi", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasal Verb", "grammarCopyPOScompn": "Kunmetita", @@ -12083,5 +12088,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Ŝanĝi retpoŝton", + "withTheseAddressesDescription": "Kun ĉi tiuj retpoŝtaj adresoj vi povas ensaluti, rekuperi vian pasvorton, kaj administri abonojn.", + "noAddressDescription": "Vi ankoraŭ ne aldonis iujn retpoŝtajn adresojn.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_es.arb b/lib/l10n/intl_es.arb index aa2560f1b..5040071ef 100644 --- a/lib/l10n/intl_es.arb +++ b/lib/l10n/intl_es.arb @@ -1,6 +1,6 @@ { "@@locale": "es", - "@@last_modified": "2026-02-09 10:30:21.560804", + "@@last_modified": "2026-02-09 11:08:40.981454", "about": "Acerca de", "@about": { "type": "String", @@ -8202,6 +8202,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Acerca de mí", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Modismo", "grammarCopyPOSphrasalv": "Verbo Frasal", "grammarCopyPOScompn": "Compuesto", @@ -8236,5 +8241,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Cambiar correo electrónico", + "withTheseAddressesDescription": "Con estas direcciones de correo electrónico puedes iniciar sesión, recuperar tu contraseña y gestionar suscripciones.", + "noAddressDescription": "Aún no has añadido ninguna dirección de correo electrónico.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_et.arb b/lib/l10n/intl_et.arb index b331e9a9f..c621e5a6d 100644 --- a/lib/l10n/intl_et.arb +++ b/lib/l10n/intl_et.arb @@ -1,6 +1,6 @@ { "@@locale": "et", - "@@last_modified": "2026-02-09 10:30:44.206560", + "@@last_modified": "2026-02-09 11:09:05.357413", "about": "Rakenduse teave", "@about": { "type": "String", @@ -11231,6 +11231,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Minust", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idioom", "grammarCopyPOSphrasalv": "Fraasi Verb", "grammarCopyPOScompn": "Kompleks", @@ -11265,5 +11270,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Muuda e-posti", + "withTheseAddressesDescription": "Nende e-posti aadressidega saad sisse logida, oma parooli taastada ja tellimusi hallata.", + "noAddressDescription": "Sa ei ole veel ühtegi e-posti aadressi lisanud.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_eu.arb b/lib/l10n/intl_eu.arb index 6cde5e0a0..568a778ed 100644 --- a/lib/l10n/intl_eu.arb +++ b/lib/l10n/intl_eu.arb @@ -1,6 +1,6 @@ { "@@locale": "eu", - "@@last_modified": "2026-02-09 10:30:41.236742", + "@@last_modified": "2026-02-09 11:09:01.052613", "about": "Honi buruz", "@about": { "type": "String", @@ -10960,6 +10960,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Niri buruz", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasal Verb", "grammarCopyPOScompn": "Konposatu", @@ -10994,5 +10999,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Aldatu posta elektronikoa", + "withTheseAddressesDescription": "Posta elektroniko helbide hauekin saioa hasi dezakezu, zure pasahitza berreskuratu eta harpidetzak kudeatu.", + "noAddressDescription": "Oraindik ez duzu posta elektroniko helbiderik gehitu.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fa.arb b/lib/l10n/intl_fa.arb index be63f02dd..75cd90f6d 100644 --- a/lib/l10n/intl_fa.arb +++ b/lib/l10n/intl_fa.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:31:23.313797", + "@@last_modified": "2026-02-09 11:09:48.180617", "repeatPassword": "تکرار رمزعبور", "@repeatPassword": {}, "about": "درباره", @@ -11692,6 +11692,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "درباره من", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "اصطلاح", "grammarCopyPOSphrasalv": "فعل عبارتی", "grammarCopyPOScompn": "ترکیب", @@ -11726,5 +11731,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "تغییر ایمیل", + "withTheseAddressesDescription": "با این آدرس‌های ایمیل می‌توانید وارد شوید، رمز عبور خود را بازیابی کنید و اشتراک‌ها را مدیریت کنید.", + "noAddressDescription": "شما هنوز هیچ آدرس ایمیلی اضافه نکرده‌اید.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fi.arb b/lib/l10n/intl_fi.arb index c65b2dc8f..6d16ae0bf 100644 --- a/lib/l10n/intl_fi.arb +++ b/lib/l10n/intl_fi.arb @@ -4006,7 +4006,7 @@ "playWithAI": "Leiki tekoälyn kanssa nyt", "courseStartDesc": "Pangea Bot on valmis milloin tahansa!\n\n...mutta oppiminen on parempaa ystävien kanssa!", "@@locale": "fi", - "@@last_modified": "2026-02-09 10:30:24.862038", + "@@last_modified": "2026-02-09 11:08:44.050102", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11583,6 +11583,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Tietoa minusta", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idioomi", "grammarCopyPOSphrasalv": "Fraasiverbi", "grammarCopyPOScompn": "Yhdistelmä", @@ -11617,5 +11622,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Vaihda sähköpostiosoite", + "withTheseAddressesDescription": "Näiden sähköpostiosoitteiden avulla voit kirjautua sisään, palauttaa salasanasi ja hallita tilauksia.", + "noAddressDescription": "Et ole vielä lisännyt mitään sähköpostiosoitteita.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fil.arb b/lib/l10n/intl_fil.arb index 6b8fc6e95..14e084989 100644 --- a/lib/l10n/intl_fil.arb +++ b/lib/l10n/intl_fil.arb @@ -2784,7 +2784,7 @@ "selectAll": "Piliin lahat", "deselectAll": "Huwag piliin lahat", "@@locale": "fil", - "@@last_modified": "2026-02-09 10:31:04.579384", + "@@last_modified": "2026-02-09 11:09:29.936599", "@setCustomPermissionLevel": { "type": "String", "placeholders": {} @@ -11936,6 +11936,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Tungkol sa akin", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idyoma", "grammarCopyPOSphrasalv": "Phrasal Verb", "grammarCopyPOScompn": "Pinagsama", @@ -11970,5 +11975,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Palitan ang email", + "withTheseAddressesDescription": "Sa mga email address na ito, maaari kang mag-log in, i-recover ang iyong password, at pamahalaan ang mga subscription.", + "noAddressDescription": "Wala ka pang naidagdag na anumang email address.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_fr.arb b/lib/l10n/intl_fr.arb index 7a95f7509..ba626d21f 100644 --- a/lib/l10n/intl_fr.arb +++ b/lib/l10n/intl_fr.arb @@ -1,6 +1,6 @@ { "@@locale": "fr", - "@@last_modified": "2026-02-09 10:31:39.092623", + "@@last_modified": "2026-02-09 11:10:07.003221", "about": "À propos", "@about": { "type": "String", @@ -11284,6 +11284,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "À propos de moi", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Verbe à particule", "grammarCopyPOScompn": "Composé", @@ -11318,5 +11323,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Changer l'email", + "withTheseAddressesDescription": "Avec ces adresses email, vous pouvez vous connecter, récupérer votre mot de passe et gérer vos abonnements.", + "noAddressDescription": "Vous n'avez pas encore ajouté d'adresses email.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ga.arb b/lib/l10n/intl_ga.arb index dbc6a0884..bdc067a78 100644 --- a/lib/l10n/intl_ga.arb +++ b/lib/l10n/intl_ga.arb @@ -4514,7 +4514,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": "2026-02-09 10:31:37.968813", + "@@last_modified": "2026-02-09 11:10:05.570216", "@customReaction": { "type": "String", "placeholders": {} @@ -10958,6 +10958,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Fúm", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Frása", "grammarCopyPOSphrasalv": "Gníomhhacht Phrásúil", "grammarCopyPOScompn": "Comhoibriú", @@ -10992,5 +10997,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Athraigh an ríomhphost", + "withTheseAddressesDescription": "Leis na seoltaí ríomhphoist seo, is féidir leat logáil isteach, do phasfhocal a chur ar ais, agus síntiúis a bhainistiú.", + "noAddressDescription": "Níl aon seoltaí ríomhphoist curtha leis fós.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_gl.arb b/lib/l10n/intl_gl.arb index 91c508254..f598911a2 100644 --- a/lib/l10n/intl_gl.arb +++ b/lib/l10n/intl_gl.arb @@ -1,6 +1,6 @@ { "@@locale": "gl", - "@@last_modified": "2026-02-09 10:30:23.363980", + "@@last_modified": "2026-02-09 11:08:42.508158", "about": "Acerca de", "@about": { "type": "String", @@ -10957,6 +10957,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Sobre min", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Verbo Frasal", "grammarCopyPOScompn": "Composto", @@ -10991,5 +10996,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Cambiar correo electrónico", + "withTheseAddressesDescription": "Con estes enderezos de correo electrónico podes iniciar sesión, recuperar a túa contrasinal e xestionar subscricións.", + "noAddressDescription": "Non engadiches ningún enderezo de correo electrónico aínda.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_he.arb b/lib/l10n/intl_he.arb index 344403974..c385f170e 100644 --- a/lib/l10n/intl_he.arb +++ b/lib/l10n/intl_he.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:30:36.836306", + "@@last_modified": "2026-02-09 11:08:56.858820", "about": "אודות", "@about": { "type": "String", @@ -12009,6 +12009,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "עליי", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "ביטוי", "grammarCopyPOSphrasalv": "פועל פיזי", "grammarCopyPOScompn": "מורכב", @@ -12043,5 +12048,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "שנה דוא\"ל", + "withTheseAddressesDescription": "עם כתובות הדוא\"ל הללו אתה יכול להתחבר, לשחזר את הסיסמה שלך ולנהל מנויים.", + "noAddressDescription": "עדיין לא הוספת כתובות דוא\"ל.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hi.arb b/lib/l10n/intl_hi.arb index 61a8e2885..301f9fe14 100644 --- a/lib/l10n/intl_hi.arb +++ b/lib/l10n/intl_hi.arb @@ -4480,7 +4480,7 @@ "playWithAI": "अभी के लिए एआई के साथ खेलें", "courseStartDesc": "पैंजिया बॉट कभी भी जाने के लिए तैयार है!\n\n...लेकिन दोस्तों के साथ सीखना बेहतर है!", "@@locale": "hi", - "@@last_modified": "2026-02-09 10:31:30.698303", + "@@last_modified": "2026-02-09 11:09:56.145817", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -12045,6 +12045,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "मेरे बारे में", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "मुहावरा", "grammarCopyPOSphrasalv": "फ्रेज़ल वर्ब", "grammarCopyPOScompn": "संयुक्त", @@ -12079,5 +12084,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "ईमेल बदलें", + "withTheseAddressesDescription": "इन ईमेल पतों के साथ आप लॉग इन कर सकते हैं, अपना पासवर्ड पुनर्प्राप्त कर सकते हैं, और सब्सक्रिप्शन प्रबंधित कर सकते हैं।", + "noAddressDescription": "आपने अभी तक कोई ईमेल पता नहीं जोड़ा है।", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hr.arb b/lib/l10n/intl_hr.arb index d827d59b3..4a1ad631d 100644 --- a/lib/l10n/intl_hr.arb +++ b/lib/l10n/intl_hr.arb @@ -1,6 +1,6 @@ { "@@locale": "hr", - "@@last_modified": "2026-02-09 10:30:35.547762", + "@@last_modified": "2026-02-09 11:08:55.423013", "about": "Informacije", "@about": { "type": "String", @@ -11332,6 +11332,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "O meni", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasalni Glagol", "grammarCopyPOScompn": "Složenica", @@ -11366,5 +11371,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Promijeni email", + "withTheseAddressesDescription": "S ovim email adresama možete se prijaviti, oporaviti svoju lozinku i upravljati pretplatama.", + "noAddressDescription": "Još niste dodali nijednu email adresu.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_hu.arb b/lib/l10n/intl_hu.arb index ae2ab1174..9ec22c848 100644 --- a/lib/l10n/intl_hu.arb +++ b/lib/l10n/intl_hu.arb @@ -1,6 +1,6 @@ { "@@locale": "hu", - "@@last_modified": "2026-02-09 10:30:28.032874", + "@@last_modified": "2026-02-09 11:08:47.162355", "about": "Névjegy", "@about": { "type": "String", @@ -10961,6 +10961,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Rólam", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idióma", "grammarCopyPOSphrasalv": "Frazális ige", "grammarCopyPOScompn": "Összetett", @@ -10995,5 +11000,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Email cím módosítása", + "withTheseAddressesDescription": "Ezekkel az email címekkel be tudsz jelentkezni, vissza tudod állítani a jelszavadat, és kezelni tudod az előfizetéseket.", + "noAddressDescription": "Még nem adtál hozzá email címeket.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ia.arb b/lib/l10n/intl_ia.arb index 1b5f6a205..d5ba26248 100644 --- a/lib/l10n/intl_ia.arb +++ b/lib/l10n/intl_ia.arb @@ -1955,7 +1955,7 @@ "playWithAI": "Joca con le IA pro ora", "courseStartDesc": "Pangea Bot es preste a comenzar a qualunque momento!\n\n...ma apprender es melior con amicos!", "@@locale": "ia", - "@@last_modified": "2026-02-09 10:30:38.575679", + "@@last_modified": "2026-02-09 11:08:57.966375", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -12038,6 +12038,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Despre mine", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Verbo Phrasal", "grammarCopyPOScompn": "Compuesto", @@ -12072,5 +12077,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Cambia email", + "withTheseAddressesDescription": "Con estas direcciones de correo electrónico puedes iniciar sesión, recuperar tu contraseña y gestionar suscripciones.", + "noAddressDescription": "Aún no has añadido ninguna dirección de correo electrónico.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_id.arb b/lib/l10n/intl_id.arb index e773a3d57..8503ecfad 100644 --- a/lib/l10n/intl_id.arb +++ b/lib/l10n/intl_id.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:30:29.458472", + "@@last_modified": "2026-02-09 11:08:48.564116", "setAsCanonicalAlias": "Atur sebagai alias utama", "@setAsCanonicalAlias": { "type": "String", @@ -10951,6 +10951,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Tentang saya", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Kata Kerja Phrasal", "grammarCopyPOScompn": "Kombinasi", @@ -10985,5 +10990,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Ubah email", + "withTheseAddressesDescription": "Dengan alamat email ini, Anda dapat masuk, memulihkan kata sandi Anda, dan mengelola langganan.", + "noAddressDescription": "Anda belum menambahkan alamat email apapun.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ie.arb b/lib/l10n/intl_ie.arb index 1ea252757..33e01880d 100644 --- a/lib/l10n/intl_ie.arb +++ b/lib/l10n/intl_ie.arb @@ -4369,7 +4369,7 @@ "playWithAI": "Joca con AI pro ora", "courseStartDesc": "Pangea Bot es preste a partir a qualunque momento!\n\n...ma apprender es melior con amicos!", "@@locale": "ie", - "@@last_modified": "2026-02-09 10:30:34.375227", + "@@last_modified": "2026-02-09 11:08:53.872484", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11934,6 +11934,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Faoi m'ainm", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasal Verb", "grammarCopyPOScompn": "Composé", @@ -11968,5 +11973,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Mudara e-posta", + "withTheseAddressesDescription": "Izi e-posta adresleri ile giriş yapabilir, şifrenizi kurtarabilir ve aboneliklerinizi yönetebilirsiniz.", + "noAddressDescription": "Henüz herhangi bir e-posta adresi eklemediniz.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_it.arb b/lib/l10n/intl_it.arb index 7d131fbd0..4cedeee53 100644 --- a/lib/l10n/intl_it.arb +++ b/lib/l10n/intl_it.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:30:49.194487", + "@@last_modified": "2026-02-09 11:09:17.051102", "about": "Informazioni", "@about": { "type": "String", @@ -10963,6 +10963,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Informazioni su di me", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Verbo Frazionale", "grammarCopyPOScompn": "Composto", @@ -10997,5 +11002,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Cambia email", + "withTheseAddressesDescription": "Con queste email puoi accedere, recuperare la tua password e gestire gli abbonamenti.", + "noAddressDescription": "Non hai ancora aggiunto alcun indirizzo email.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ja.arb b/lib/l10n/intl_ja.arb index ac6b45a6e..5c7d5e600 100644 --- a/lib/l10n/intl_ja.arb +++ b/lib/l10n/intl_ja.arb @@ -1,6 +1,6 @@ { "@@locale": "ja", - "@@last_modified": "2026-02-09 10:31:29.266500", + "@@last_modified": "2026-02-09 11:09:54.188816", "about": "このアプリについて", "@about": { "type": "String", @@ -11750,6 +11750,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "私について", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "イディオム", "grammarCopyPOSphrasalv": "句動詞", "grammarCopyPOScompn": "複合語", @@ -11784,5 +11789,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "メールアドレスを変更", + "withTheseAddressesDescription": "これらのメールアドレスを使用して、ログイン、パスワードの回復、サブスクリプションの管理ができます。", + "noAddressDescription": "まだメールアドレスを追加していません。", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ka.arb b/lib/l10n/intl_ka.arb index 876451d36..a12c57a10 100644 --- a/lib/l10n/intl_ka.arb +++ b/lib/l10n/intl_ka.arb @@ -2591,7 +2591,7 @@ "playWithAI": "ამ დროისთვის ითამაშეთ AI-თან", "courseStartDesc": "Pangea Bot მზადაა ნებისმიერ დროს გასასვლელად!\n\n...მაგრამ სწავლა უკეთესია მეგობრებთან ერთად!", "@@locale": "ka", - "@@last_modified": "2026-02-09 10:31:35.201910", + "@@last_modified": "2026-02-09 11:10:02.292014", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11990,6 +11990,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "ჩემზე", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "იდიომი", "grammarCopyPOSphrasalv": "ფრაზული ზმნა", "grammarCopyPOScompn": "კომპლექსური", @@ -12024,5 +12029,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "ელ. ფოსტის შეცვლა", + "withTheseAddressesDescription": "ამ ელ. ფოსტის მისამართების საშუალებით შეგიძლიათ შეხვიდეთ, აღადგინოთ თქვენი პაროლი და მართოთ გამოწერები.", + "noAddressDescription": "თქვენ ჯერ არ გაქვთ დამატებული ელ. ფოსტის მისამართები.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ko.arb b/lib/l10n/intl_ko.arb index f79ecf8f8..79f66f7f7 100644 --- a/lib/l10n/intl_ko.arb +++ b/lib/l10n/intl_ko.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:30:18.919050", + "@@last_modified": "2026-02-09 11:08:39.290513", "about": "소개", "@about": { "type": "String", @@ -11068,6 +11068,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "내 소개", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "관용구", "grammarCopyPOSphrasalv": "구동사", "grammarCopyPOScompn": "복합어", @@ -11102,5 +11107,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "이메일 변경", + "withTheseAddressesDescription": "이 이메일 주소로 로그인하고, 비밀번호를 복구하며, 구독을 관리할 수 있습니다.", + "noAddressDescription": "아직 이메일 주소를 추가하지 않았습니다.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lt.arb b/lib/l10n/intl_lt.arb index 280b130fb..17df2b9d3 100644 --- a/lib/l10n/intl_lt.arb +++ b/lib/l10n/intl_lt.arb @@ -3858,7 +3858,7 @@ "playWithAI": "Žaiskite su dirbtiniu intelektu dabar", "courseStartDesc": "Pangea botas pasiruošęs bet kada pradėti!\n\n...bet mokymasis yra geresnis su draugais!", "@@locale": "lt", - "@@last_modified": "2026-02-09 10:31:13.179961", + "@@last_modified": "2026-02-09 11:09:38.541694", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11765,6 +11765,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Apie mane", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasal Verb", "grammarCopyPOScompn": "Sudėtinis", @@ -11799,5 +11804,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Keisti el. paštą", + "withTheseAddressesDescription": "Su šiais el. pašto adresais galite prisijungti, atkurti slaptažodį ir valdyti prenumeratas.", + "noAddressDescription": "Jūs dar nepridėjote jokių el. pašto adresų.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_lv.arb b/lib/l10n/intl_lv.arb index d51702338..fd473b660 100644 --- a/lib/l10n/intl_lv.arb +++ b/lib/l10n/intl_lv.arb @@ -4480,7 +4480,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": "2026-02-09 10:31:05.908661", + "@@last_modified": "2026-02-09 11:09:31.557778", "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", @@ -10946,6 +10946,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Par mani", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Frazēts darbības vārds", "grammarCopyPOScompn": "Savienojums", @@ -10980,5 +10985,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Mainīt e-pastu", + "withTheseAddressesDescription": "Ar šiem e-pasta adresēm jūs varat pieteikties, atjaunot savu paroli un pārvaldīt abonementus.", + "noAddressDescription": "Jūs vēl neesat pievienojis nevienu e-pasta adresi.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nb.arb b/lib/l10n/intl_nb.arb index faf5dc164..33d24b295 100644 --- a/lib/l10n/intl_nb.arb +++ b/lib/l10n/intl_nb.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:30:55.280815", + "@@last_modified": "2026-02-09 11:09:21.418237", "about": "Om", "@about": { "type": "String", @@ -12053,6 +12053,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Om meg", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasal Verb", "grammarCopyPOScompn": "Sammensatt", @@ -12087,5 +12092,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Endre e-post", + "withTheseAddressesDescription": "Med disse e-postadressene kan du logge inn, gjenopprette passordet ditt og administrere abonnementer.", + "noAddressDescription": "Du har ikke lagt til noen e-postadresser ennå.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_nl.arb b/lib/l10n/intl_nl.arb index 981a2e752..8b2e372a2 100644 --- a/lib/l10n/intl_nl.arb +++ b/lib/l10n/intl_nl.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:31:17.188799", + "@@last_modified": "2026-02-09 11:09:42.630335", "about": "Over ons", "@about": { "type": "String", @@ -10960,6 +10960,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Over mij", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idioom", "grammarCopyPOSphrasalv": "Frazal Werkwoord", "grammarCopyPOScompn": "Samenstelling", @@ -10994,5 +10999,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Wijzig e-mailadres", + "withTheseAddressesDescription": "Met deze e-mailadressen kun je inloggen, je wachtwoord herstellen en abonnementen beheren.", + "noAddressDescription": "Je hebt nog geen e-mailadressen toegevoegd.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pl.arb b/lib/l10n/intl_pl.arb index 2bdb85519..fb697743b 100644 --- a/lib/l10n/intl_pl.arb +++ b/lib/l10n/intl_pl.arb @@ -1,6 +1,6 @@ { "@@locale": "pl", - "@@last_modified": "2026-02-09 10:31:24.557539", + "@@last_modified": "2026-02-09 11:09:49.851439", "about": "O aplikacji", "@about": { "type": "String", @@ -10958,6 +10958,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "O mnie", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Czasownik frazowy", "grammarCopyPOScompn": "Złożony", @@ -10992,5 +10997,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Zmień adres e-mail", + "withTheseAddressesDescription": "Dzięki tym adresom e-mail możesz się zalogować, odzyskać hasło i zarządzać subskrypcjami.", + "noAddressDescription": "Nie dodałeś jeszcze żadnych adresów e-mail.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_pt.arb b/lib/l10n/intl_pt.arb index 6f537dcd1..368846890 100644 --- a/lib/l10n/intl_pt.arb +++ b/lib/l10n/intl_pt.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:30:42.465226", + "@@last_modified": "2026-02-09 11:09:03.927804", "copiedToClipboard": "Copiada para a área de transferência", "@copiedToClipboard": { "type": "String", @@ -12060,6 +12060,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Sobre mim", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Verbo Frasal", "grammarCopyPOScompn": "Composto", @@ -12094,5 +12099,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Alterar e-mail", + "withTheseAddressesDescription": "Com esses endereços de e-mail, você pode fazer login, recuperar sua senha e gerenciar assinaturas.", + "noAddressDescription": "Você ainda não adicionou nenhum endereço de e-mail.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "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 6fd6bd30c..231e186b8 100644 --- a/lib/l10n/intl_pt_BR.arb +++ b/lib/l10n/intl_pt_BR.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:30:39.705540", + "@@last_modified": "2026-02-09 11:08:59.417144", "about": "Sobre", "@about": { "type": "String", @@ -11318,6 +11318,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Sobre mim", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Verbo Frasal", "grammarCopyPOScompn": "Composto", @@ -11352,5 +11357,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Alterar e-mail", + "withTheseAddressesDescription": "Com esses endereços de e-mail, você pode fazer login, recuperar sua senha e gerenciar assinaturas.", + "noAddressDescription": "Você ainda não adicionou nenhum endereço de e-mail.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "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 2e2dad6cf..77a475da6 100644 --- a/lib/l10n/intl_pt_PT.arb +++ b/lib/l10n/intl_pt_PT.arb @@ -3328,7 +3328,7 @@ "selectAll": "Selecionar tudo", "deselectAll": "Desmarcar tudo", "@@locale": "pt_PT", - "@@last_modified": "2026-02-09 10:31:01.370163", + "@@last_modified": "2026-02-09 11:09:27.266695", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -11989,6 +11989,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Sobre mim", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Verbo Frasal", "grammarCopyPOScompn": "Composto", @@ -12023,5 +12028,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Alterar e-mail", + "withTheseAddressesDescription": "Com esses endereços de e-mail, você pode fazer login, recuperar sua senha e gerenciar assinaturas.", + "noAddressDescription": "Você ainda não adicionou nenhum endereço de e-mail.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ro.arb b/lib/l10n/intl_ro.arb index b63507f52..318b79fc2 100644 --- a/lib/l10n/intl_ro.arb +++ b/lib/l10n/intl_ro.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:30:31.024987", + "@@last_modified": "2026-02-09 11:08:50.792922", "about": "Despre", "@about": { "type": "String", @@ -11695,6 +11695,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Despre mine", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Verb Phrastic", "grammarCopyPOScompn": "Compus", @@ -11729,5 +11734,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Schimbă emailul", + "withTheseAddressesDescription": "Cu aceste adrese de email poți să te conectezi, să îți recuperezi parola și să gestionezi abonamentele.", + "noAddressDescription": "Nu ai adăugat încă nicio adresă de email.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ru.arb b/lib/l10n/intl_ru.arb index acd67ec0d..75a4b00f1 100644 --- a/lib/l10n/intl_ru.arb +++ b/lib/l10n/intl_ru.arb @@ -1,6 +1,6 @@ { "@@locale": "ru", - "@@last_modified": "2026-02-09 10:31:33.668055", + "@@last_modified": "2026-02-09 11:09:59.118469", "about": "О проекте", "@about": { "type": "String", @@ -11068,6 +11068,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Обо мне", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Идиома", "grammarCopyPOSphrasalv": "Фразовый глагол", "grammarCopyPOScompn": "Составное", @@ -11102,5 +11107,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Сменить электронную почту", + "withTheseAddressesDescription": "С помощью этих адресов электронной почты вы можете войти в систему, восстановить пароль и управлять подписками.", + "noAddressDescription": "Вы еще не добавили ни одного адреса электронной почты.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sk.arb b/lib/l10n/intl_sk.arb index f372fb272..e3b50a52c 100644 --- a/lib/l10n/intl_sk.arb +++ b/lib/l10n/intl_sk.arb @@ -1,6 +1,6 @@ { "@@locale": "sk", - "@@last_modified": "2026-02-09 10:30:32.743132", + "@@last_modified": "2026-02-09 11:08:52.351401", "about": "O aplikácii", "@about": { "type": "String", @@ -12044,6 +12044,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "O mne", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idióm", "grammarCopyPOSphrasalv": "Frázové sloveso", "grammarCopyPOScompn": "Zložené", @@ -12078,5 +12083,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Zmeniť e-mail", + "withTheseAddressesDescription": "S týmito e-mailovými adresami sa môžete prihlásiť, obnoviť svoje heslo a spravovať predplatné.", + "noAddressDescription": "Ešte ste nepridali žiadne e-mailové adresy.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sl.arb b/lib/l10n/intl_sl.arb index 3a79289b9..c62e362d3 100644 --- a/lib/l10n/intl_sl.arb +++ b/lib/l10n/intl_sl.arb @@ -2461,7 +2461,7 @@ "playWithAI": "Za zdaj igrajte z AI-jem", "courseStartDesc": "Pangea Bot je pripravljen kadarkoli!\n\n...ampak je bolje učiti se s prijatelji!", "@@locale": "sl", - "@@last_modified": "2026-02-09 10:30:46.615986", + "@@last_modified": "2026-02-09 11:09:14.553223", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -12041,6 +12041,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "O meni", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasalni glagol", "grammarCopyPOScompn": "Sestavljenka", @@ -12075,5 +12080,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Spremeni e-pošto", + "withTheseAddressesDescription": "S temi e-poštnimi naslovi se lahko prijavite, obnovite geslo in upravljate z naročninami.", + "noAddressDescription": "Še niste dodali nobenih e-poštnih naslovov.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sr.arb b/lib/l10n/intl_sr.arb index b064171a5..47cc65f3a 100644 --- a/lib/l10n/intl_sr.arb +++ b/lib/l10n/intl_sr.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:31:36.571438", + "@@last_modified": "2026-02-09 11:10:03.632765", "about": "О програму", "@about": { "type": "String", @@ -12062,6 +12062,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "О мени", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasal Verb", "grammarCopyPOScompn": "Kombinacija", @@ -12096,5 +12101,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Promeni email", + "withTheseAddressesDescription": "Sa ovim email adresama možete se prijaviti, povratiti svoju lozinku i upravljati pretplatama.", + "noAddressDescription": "Još niste dodali nijednu email adresu.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_sv.arb b/lib/l10n/intl_sv.arb index c5a281579..787d57133 100644 --- a/lib/l10n/intl_sv.arb +++ b/lib/l10n/intl_sv.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:31:25.986941", + "@@last_modified": "2026-02-09 11:09:51.437329", "about": "Om", "@about": { "type": "String", @@ -11438,6 +11438,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Om mig", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Idiom", "grammarCopyPOSphrasalv": "Phrasverb", "grammarCopyPOScompn": "Sammansatt", @@ -11472,5 +11477,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Ändra e-postadress", + "withTheseAddressesDescription": "Med dessa e-postadresser kan du logga in, återställa ditt lösenord och hantera prenumerationer.", + "noAddressDescription": "Du har ännu inte lagt till några e-postadresser.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_ta.arb b/lib/l10n/intl_ta.arb index 82c5efb6a..77850c249 100644 --- a/lib/l10n/intl_ta.arb +++ b/lib/l10n/intl_ta.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:31:16.047418", + "@@last_modified": "2026-02-09 11:09:41.597668", "acceptedTheInvitation": "👍 {username} அழைப்பை ஏற்றுக்கொண்டது", "@acceptedTheInvitation": { "type": "String", @@ -11184,6 +11184,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "என்னைப் பற்றி", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "விளக்கம்", "grammarCopyPOSphrasalv": "பொருள் வினை", "grammarCopyPOScompn": "சேர்க்கை", @@ -11218,5 +11223,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "மின்னஞ்சலை மாற்றவும்", + "withTheseAddressesDescription": "இந்த மின்னஞ்சல் முகவரிகளுடன் நீங்கள் உள்நுழைந்து, உங்கள் கடவுச்சொல்லை மீட்டெடுக்கவும், சந்தாக்களை நிர்வகிக்கவும் முடியும்.", + "noAddressDescription": "நீங்கள் இன்னும் எந்த மின்னஞ்சல் முகவரிகளையும் சேர்க்கவில்லை.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_te.arb b/lib/l10n/intl_te.arb index 5dbeb11ec..544df2529 100644 --- a/lib/l10n/intl_te.arb +++ b/lib/l10n/intl_te.arb @@ -1917,7 +1917,7 @@ "playWithAI": "ఇప్పుడే AI తో ఆడండి", "courseStartDesc": "పాంజియా బాట్ ఎప్పుడైనా సిద్ధంగా ఉంటుంది!\n\n...కానీ స్నేహితులతో నేర్చుకోవడం మెరుగైనది!", "@@locale": "te", - "@@last_modified": "2026-02-09 10:31:11.484072", + "@@last_modified": "2026-02-09 11:09:36.591690", "@setCustomPermissionLevel": { "type": "String", "placeholders": {} @@ -12049,6 +12049,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "నా గురించి", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "సామెత", "grammarCopyPOSphrasalv": "పదబంధ క్రియ", "grammarCopyPOScompn": "సంకలనం", @@ -12083,5 +12088,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "ఇమెయిల్ మార్చండి", + "withTheseAddressesDescription": "ఈ ఇమెయిల్ చిరునామాలతో మీరు లాగిన్ అవ్వవచ్చు, మీ పాస్వర్డ్‌ను పునరుద్ధరించవచ్చు మరియు సబ్‌స్క్రిప్షన్లను నిర్వహించవచ్చు.", + "noAddressDescription": "మీరు ఇంకా ఎలాంటి ఇమెయిల్ చిరునామాలను జోడించలేదు.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_th.arb b/lib/l10n/intl_th.arb index d048c59c9..e50e12ac3 100644 --- a/lib/l10n/intl_th.arb +++ b/lib/l10n/intl_th.arb @@ -4453,7 +4453,7 @@ "playWithAI": "เล่นกับ AI ชั่วคราว", "courseStartDesc": "Pangea Bot พร้อมที่จะเริ่มต้นได้ทุกเมื่อ!\n\n...แต่การเรียนรู้ดีกว่ากับเพื่อน!", "@@locale": "th", - "@@last_modified": "2026-02-09 10:31:00.286726", + "@@last_modified": "2026-02-09 11:09:25.941768", "@alwaysUse24HourFormat": { "type": "String", "placeholders": {} @@ -12018,6 +12018,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "เกี่ยวกับฉัน", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "สำนวน", "grammarCopyPOSphrasalv": "กริยาวลี", "grammarCopyPOScompn": "คำผสม", @@ -12052,5 +12057,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "เปลี่ยนอีเมล", + "withTheseAddressesDescription": "ด้วยที่อยู่อีเมลเหล่านี้ คุณสามารถเข้าสู่ระบบ กู้คืนรหัสผ่าน และจัดการการสมัครสมาชิกได้", + "noAddressDescription": "คุณยังไม่ได้เพิ่มที่อยู่อีเมลใด ๆ", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_tr.arb b/lib/l10n/intl_tr.arb index 0048a617e..e90077aae 100644 --- a/lib/l10n/intl_tr.arb +++ b/lib/l10n/intl_tr.arb @@ -1,6 +1,6 @@ { "@@locale": "tr", - "@@last_modified": "2026-02-09 10:31:10.118107", + "@@last_modified": "2026-02-09 11:09:34.545567", "about": "Hakkında", "@about": { "type": "String", @@ -11182,6 +11182,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Hakkımda", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Deyim", "grammarCopyPOSphrasalv": "Deyim Fiili", "grammarCopyPOScompn": "Bileşik", @@ -11216,5 +11221,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "E-posta değiştir", + "withTheseAddressesDescription": "Bu e-posta adresleriyle oturum açabilir, şifrenizi kurtarabilir ve aboneliklerinizi yönetebilirsiniz.", + "noAddressDescription": "Henüz herhangi bir e-posta adresi eklemediniz.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_uk.arb b/lib/l10n/intl_uk.arb index dbfcea87b..e43890fed 100644 --- a/lib/l10n/intl_uk.arb +++ b/lib/l10n/intl_uk.arb @@ -1,6 +1,6 @@ { "@@locale": "uk", - "@@last_modified": "2026-02-09 10:30:50.645170", + "@@last_modified": "2026-02-09 11:09:18.460030", "about": "Про застосунок", "@about": { "type": "String", @@ -10954,6 +10954,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Про мене", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Ідіома", "grammarCopyPOSphrasalv": "Фразове дієслово", "grammarCopyPOScompn": "Складене", @@ -10988,5 +10993,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Змінити електронну пошту", + "withTheseAddressesDescription": "З цими електронними адресами ви можете увійти, відновити свій пароль і керувати підписками.", + "noAddressDescription": "Ви ще не додали жодних електронних адрес.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_vi.arb b/lib/l10n/intl_vi.arb index a8b484fc8..97dc307cd 100644 --- a/lib/l10n/intl_vi.arb +++ b/lib/l10n/intl_vi.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:31:14.436728", + "@@last_modified": "2026-02-09 11:09:39.961686", "about": "Giới thiệu", "@about": { "type": "String", @@ -6538,6 +6538,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "Về tôi", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "Thành ngữ", "grammarCopyPOSphrasalv": "Động từ cụm", "grammarCopyPOScompn": "Hợp chất", @@ -6572,5 +6577,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "Thay đổi email", + "withTheseAddressesDescription": "Với những địa chỉ email này, bạn có thể đăng nhập, khôi phục mật khẩu và quản lý đăng ký.", + "noAddressDescription": "Bạn chưa thêm địa chỉ email nào.", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_yue.arb b/lib/l10n/intl_yue.arb index b796030d0..dab04d273 100644 --- a/lib/l10n/intl_yue.arb +++ b/lib/l10n/intl_yue.arb @@ -1853,7 +1853,7 @@ "selectAll": "全選", "deselectAll": "取消全選", "@@locale": "yue", - "@@last_modified": "2026-02-09 10:30:47.898227", + "@@last_modified": "2026-02-09 11:09:15.805629", "@ignoreUser": { "type": "String", "placeholders": {} @@ -12051,6 +12051,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "關於我", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "成語", "grammarCopyPOSphrasalv": "短語動詞", "grammarCopyPOScompn": "複合詞", @@ -12085,5 +12090,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "更改電郵", + "withTheseAddressesDescription": "使用這些電郵地址您可以登錄、恢復密碼和管理訂閱。", + "noAddressDescription": "您尚未添加任何電郵地址。", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/l10n/intl_zh.arb b/lib/l10n/intl_zh.arb index 50917324d..0fe08595b 100644 --- a/lib/l10n/intl_zh.arb +++ b/lib/l10n/intl_zh.arb @@ -1,6 +1,6 @@ { "@@locale": "zh", - "@@last_modified": "2026-02-09 10:31:19.946784", + "@@last_modified": "2026-02-09 11:09:45.374826", "about": "关于", "@about": { "type": "String", @@ -10951,6 +10951,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "关于我", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "成语", "grammarCopyPOSphrasalv": "短语动词", "grammarCopyPOScompn": "复合词", @@ -10985,5 +10990,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "更改电子邮件", + "withTheseAddressesDescription": "使用这些电子邮件地址,您可以登录、恢复密码和管理订阅。", + "noAddressDescription": "您尚未添加任何电子邮件地址。", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "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 6180510c5..e39d78cdc 100644 --- a/lib/l10n/intl_zh_Hant.arb +++ b/lib/l10n/intl_zh_Hant.arb @@ -1,5 +1,5 @@ { - "@@last_modified": "2026-02-09 10:31:02.904070", + "@@last_modified": "2026-02-09 11:09:28.599644", "about": "關於", "@about": { "type": "String", @@ -10958,6 +10958,11 @@ "type": "String", "placeholders": {} }, + "aboutMeHint": "關於我", + "@aboutMeHint": { + "type": "String", + "placeholders": {} + }, "grammarCopyPOSidiom": "成語", "grammarCopyPOSphrasalv": "片語動詞", "grammarCopyPOScompn": "合成詞", @@ -10992,5 +10997,20 @@ "@youveCompletedPractice": { "type": "String", "placeholders": {} + }, + "changeEmail": "更改電子郵件", + "withTheseAddressesDescription": "使用這些電子郵件地址,您可以登錄、恢復密碼和管理訂閱。", + "noAddressDescription": "您尚未添加任何電子郵件地址。", + "@changeEmail": { + "type": "String", + "placeholders": {} + }, + "@withTheseAddressesDescription": { + "type": "String", + "placeholders": {} + }, + "@noAddressDescription": { + "type": "String", + "placeholders": {} } } \ No newline at end of file diff --git a/lib/pangea/analytics_data/analytics_data_service.dart b/lib/pangea/analytics_data/analytics_data_service.dart index 4c703aacb..5e4a4f79b 100644 --- a/lib/pangea/analytics_data/analytics_data_service.dart +++ b/lib/pangea/analytics_data/analytics_data_service.dart @@ -442,7 +442,8 @@ class AnalyticsDataService { final offset = lowerLevelXP - newData.totalXP; await MatrixState.pangeaController.userController.addXPOffset(offset); await updateXPOffset( - MatrixState.pangeaController.userController.analyticsProfile!.xpOffset!, + MatrixState + .pangeaController.userController.publicProfile!.analytics.xpOffset!, ); } diff --git a/lib/pangea/analytics_misc/level_display_name.dart b/lib/pangea/analytics_misc/level_display_name.dart index e5903aa38..7fbe00d42 100644 --- a/lib/pangea/analytics_misc/level_display_name.dart +++ b/lib/pangea/analytics_misc/level_display_name.dart @@ -23,8 +23,9 @@ class LevelDisplayName extends StatelessWidget { ), child: FutureBuilder( future: MatrixState.pangeaController.userController - .getPublicAnalyticsProfile(userId), + .getPublicProfile(userId), builder: (context, snapshot) { + final analytics = snapshot.data?.analytics; return Row( mainAxisSize: MainAxisSize.min, children: [ @@ -42,27 +43,36 @@ class LevelDisplayName extends StatelessWidget { else Row( children: [ - if (snapshot.data?.baseLanguage != null && - snapshot.data?.targetLanguage != null) + if (snapshot.data?.countryEmoji != null) + Padding( + padding: const EdgeInsets.only(right: 4.0), + child: Text( + snapshot.data!.countryEmoji!, + style: textStyle ?? + const TextStyle( + fontSize: 16.0, + ), + ), + ), + if (analytics?.baseLanguage != null && + analytics?.targetLanguage != null) Text( - snapshot.data!.baseLanguage!.langCodeShort - .toUpperCase(), + analytics!.baseLanguage!.langCodeShort.toUpperCase(), style: textStyle ?? TextStyle( fontWeight: FontWeight.bold, color: Theme.of(context).colorScheme.primary, ), ), - if (snapshot.data?.baseLanguage != null && - snapshot.data?.targetLanguage != null) + if (analytics?.baseLanguage != null && + analytics?.targetLanguage != null) Icon( Icons.chevron_right_outlined, size: iconSize ?? 16.0, ), - if (snapshot.data?.targetLanguage != null) + if (analytics?.targetLanguage != null) Text( - snapshot.data!.targetLanguage!.langCodeShort - .toUpperCase(), + analytics!.targetLanguage!.langCodeShort.toUpperCase(), style: textStyle ?? TextStyle( fontWeight: FontWeight.bold, @@ -70,14 +80,14 @@ class LevelDisplayName extends StatelessWidget { ), ), const SizedBox(width: 4.0), - if (snapshot.data?.level != null) + if (analytics?.level != null) Text( "⭐", style: textStyle, ), - if (snapshot.data?.level != null) + if (analytics?.level != null) Text( - "${snapshot.data!.level!}", + "${analytics!.level!}", style: textStyle ?? TextStyle( fontWeight: FontWeight.bold, diff --git a/lib/pangea/common/constants/model_keys.dart b/lib/pangea/common/constants/model_keys.dart index 84b69e97b..445c5b8ff 100644 --- a/lib/pangea/common/constants/model_keys.dart +++ b/lib/pangea/common/constants/model_keys.dart @@ -9,6 +9,7 @@ class ModelKey { static const String userDateOfBirth = 'date_of_birth'; static const String userSpeaks = 'speaks'; static const String userCountry = 'country'; + static const String userAbout = 'about'; static const String hasJoinedHelpSpace = 'has_joined_help_space'; static const String userInterests = 'interests'; static const String publicProfile = 'public_profile'; diff --git a/lib/pangea/common/controllers/pangea_controller.dart b/lib/pangea/common/controllers/pangea_controller.dart index 71a4a5987..969dcb522 100644 --- a/lib/pangea/common/controllers/pangea_controller.dart +++ b/lib/pangea/common/controllers/pangea_controller.dart @@ -120,7 +120,10 @@ class PangeaController { _settingsSubscription?.cancel(); _settingsSubscription = userController.settingsUpdateStream.stream.listen( - (update) => matrixState.client.updateBotOptions(update.userSettings), + (update) async { + await matrixState.client.updateBotOptions(update.userSettings); + await userController.updatePublicProfile(); + }, ); _joinSpaceSubscription?.cancel(); @@ -178,8 +181,10 @@ class PangeaController { ]); } - _clearCache(exclude: exclude); - matrixState.client.updateBotOptions(userController.profile.userSettings); + await _clearCache(exclude: exclude); + await matrixState.client + .updateBotOptions(userController.profile.userSettings); + await userController.updatePublicProfile(); } static final List _storageKeys = [ diff --git a/lib/pangea/learning_settings/country_picker_tile.dart b/lib/pangea/learning_settings/country_picker_tile.dart index 250b4e6ba..5391d4164 100644 --- a/lib/pangea/learning_settings/country_picker_tile.dart +++ b/lib/pangea/learning_settings/country_picker_tile.dart @@ -74,7 +74,7 @@ class CountryPickerDropdownState extends State { ), ), ], - onChanged: widget.learningController.changeCountry, + onChanged: widget.learningController.setCountry, value: widget.learningController.country, dropdownSearchData: DropdownSearchData( searchController: _searchController, diff --git a/lib/pangea/learning_settings/settings_learning.dart b/lib/pangea/learning_settings/settings_learning.dart index 64986f00b..a874c3629 100644 --- a/lib/pangea/learning_settings/settings_learning.dart +++ b/lib/pangea/learning_settings/settings_learning.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:developer'; import 'dart:io'; @@ -44,11 +45,14 @@ class SettingsLearningController extends State { String? languageMatchError; final ScrollController scrollController = ScrollController(); + final TextEditingController aboutTextController = TextEditingController(); + Timer? _textDebounce; @override void initState() { super.initState(); _profile = pangeaController.userController.profile.copy(); + aboutTextController.text = _profile.userSettings.about ?? ''; TtsController.setAvailableLanguages().then((_) => setState(() {})); } @@ -56,6 +60,8 @@ class SettingsLearningController extends State { void dispose() { TtsController.stop(); scrollController.dispose(); + aboutTextController.dispose(); + _textDebounce?.cancel(); super.dispose(); } @@ -183,11 +189,19 @@ class SettingsLearningController extends State { if (mounted) setState(() {}); } - void changeCountry(Country? country) { + void setCountry(Country? country) { _profile.userSettings.country = country?.name; if (mounted) setState(() {}); } + void setAbout(String about) { + _profile.userSettings.about = about; + _textDebounce?.cancel(); + _textDebounce = Timer(const Duration(milliseconds: 500), () { + if (mounted) setState(() {}); + }); + } + void updateToolSetting(ToolSetting toolSetting, bool value) { switch (toolSetting) { case ToolSetting.interactiveTranslator: @@ -350,6 +364,8 @@ class SettingsLearningController extends State { Country? get country => CountryService().findByName(_profile.userSettings.country); + String? get about => _profile.userSettings.about; + @override Widget build(BuildContext context) { return SettingsLearningView(this); diff --git a/lib/pangea/learning_settings/settings_learning_view.dart b/lib/pangea/learning_settings/settings_learning_view.dart index 1f11f2872..fd12bd93a 100644 --- a/lib/pangea/learning_settings/settings_learning_view.dart +++ b/lib/pangea/learning_settings/settings_learning_view.dart @@ -144,6 +144,16 @@ class SettingsLearningView extends StatelessWidget { initialGender: controller.gender, onChanged: controller.setGender, ), + TextField( + controller: controller.aboutTextController, + decoration: InputDecoration( + hintText: L10n.of(context).aboutMeHint, + ), + onChanged: (val) => + controller.setAbout(val), + minLines: 1, + maxLines: 3, + ), ], ), ), diff --git a/lib/pangea/user/about_me_display.dart b/lib/pangea/user/about_me_display.dart new file mode 100644 index 000000000..0a3cf5c12 --- /dev/null +++ b/lib/pangea/user/about_me_display.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; + +import 'package:fluffychat/widgets/matrix.dart'; + +class AboutMeDisplay extends StatelessWidget { + final String userId; + final double maxWidth; + final double textSize; + + const AboutMeDisplay({ + super.key, + required this.userId, + this.maxWidth = 200, + this.textSize = 12, + }); + + @override + Widget build(BuildContext context) { + return ConstrainedBox( + constraints: BoxConstraints(maxWidth: maxWidth), + child: FutureBuilder( + future: MatrixState.pangeaController.userController + .getPublicProfile(userId), + builder: (context, snapshot) => snapshot.data?.about == null + ? const SizedBox.shrink() + : Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: Text( + snapshot.data!.about!, + style: TextStyle(fontSize: textSize), + maxLines: 3, + overflow: TextOverflow.ellipsis, + ), + ), + ), + ); + } +} diff --git a/lib/pangea/user/public_profile_model.dart b/lib/pangea/user/public_profile_model.dart new file mode 100644 index 000000000..9f4ed71d9 --- /dev/null +++ b/lib/pangea/user/public_profile_model.dart @@ -0,0 +1,61 @@ +import 'package:country_picker/country_picker.dart'; + +import 'package:fluffychat/pangea/events/constants/pangea_event_types.dart'; +import 'package:fluffychat/pangea/user/analytics_profile_model.dart'; + +class PublicProfileModel { + final AnalyticsProfileModel analytics; + final String? country; + final String? about; + + const PublicProfileModel({ + required this.analytics, + this.country, + this.about, + }); + + String? get countryEmoji => + country != null ? CountryService().findByName(country!)?.flagEmoji : null; + + Map toJson() { + final json = analytics.toJson(); + + if (country != null) { + json['country'] = country; + } + + if (about != null) { + json['about'] = about; + } + + return json; + } + + factory PublicProfileModel.fromJson(Map json) { + final analytics = AnalyticsProfileModel.fromJson(json); + + final profileJson = + json[PangeaEventTypes.profileAnalytics] as Map?; + + final String? country = profileJson != null ? profileJson['country'] : null; + final String? about = profileJson != null ? profileJson['about'] : null; + + return PublicProfileModel( + analytics: analytics, + country: country, + about: about, + ); + } + + PublicProfileModel copyWith({ + AnalyticsProfileModel? analytics, + String? country, + String? about, + }) { + return PublicProfileModel( + analytics: analytics ?? this.analytics, + country: country ?? this.country, + about: about ?? this.about, + ); + } +} diff --git a/lib/pangea/user/user_controller.dart b/lib/pangea/user/user_controller.dart index 2e3be4226..79c9d7b70 100644 --- a/lib/pangea/user/user_controller.dart +++ b/lib/pangea/user/user_controller.dart @@ -15,6 +15,7 @@ import 'package:fluffychat/pangea/languages/language_service.dart'; import 'package:fluffychat/pangea/languages/p_language_store.dart'; import 'package:fluffychat/pangea/learning_settings/tool_settings_enum.dart'; import 'package:fluffychat/pangea/user/analytics_profile_model.dart'; +import 'package:fluffychat/pangea/user/public_profile_model.dart'; import 'package:fluffychat/widgets/matrix.dart'; import 'user_model.dart'; @@ -43,7 +44,7 @@ class UserController { /// to be read in from client's account data each time it is accessed. Profile? _cachedProfile; - AnalyticsProfileModel? analyticsProfile; + PublicProfileModel? publicProfile; /// Listens for account updates and updates the cached profile StreamSubscription? _profileListener; @@ -174,18 +175,21 @@ class UserController { if (client.userID == null) return; try { final resp = await client.getUserProfile(client.userID!); - analyticsProfile = - AnalyticsProfileModel.fromJson(resp.additionalProperties); + publicProfile = PublicProfileModel.fromJson(resp.additionalProperties); } catch (e) { // getting a 404 error for some users without pre-existing profile // still want to set other properties, so catch this error - analyticsProfile = AnalyticsProfileModel(); + publicProfile = PublicProfileModel( + analytics: AnalyticsProfileModel(), + ); } + await updatePublicProfile(); + // Do not await. This function pulls level from analytics, // so it waits for analytics to finish initializing. Analytics waits for user controller to // finish initializing, so this would cause a deadlock. - if (analyticsProfile!.isEmpty) { + if (publicProfile!.analytics.isEmpty) { final analyticsService = MatrixState.pangeaController.matrixState.analyticsDataService; @@ -272,12 +276,24 @@ class UserController { Future _savePublicProfileUpdate( String type, Map content, - ) async => - client.setUserProfile( + ) async { + try { + await client.setUserProfile( client.userID!, type, content, ); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + 'type': type, + 'content': content, + }, + ); + } + } Future updateAnalyticsProfile({ required int level, @@ -286,75 +302,98 @@ class UserController { }) async { targetLanguage ??= userL2; baseLanguage ??= userL1; - if (targetLanguage == null || analyticsProfile == null) return; + if (targetLanguage == null || publicProfile == null) return; final analyticsRoom = client.analyticsRoomLocal(targetLanguage); - if (analyticsProfile!.targetLanguage == targetLanguage && - analyticsProfile!.baseLanguage == baseLanguage && - analyticsProfile!.languageAnalytics?[targetLanguage]?.level == level && - analyticsProfile!.analyticsRoomIdByLanguage(targetLanguage) == + if (publicProfile!.analytics.targetLanguage == targetLanguage && + publicProfile!.analytics.baseLanguage == baseLanguage && + publicProfile!.analytics.languageAnalytics?[targetLanguage]?.level == + level && + publicProfile!.analytics.analyticsRoomIdByLanguage(targetLanguage) == analyticsRoom?.id) { return; } - analyticsProfile!.baseLanguage = baseLanguage; - analyticsProfile!.targetLanguage = targetLanguage; - analyticsProfile!.setLanguageInfo( + publicProfile!.analytics.baseLanguage = baseLanguage; + publicProfile!.analytics.targetLanguage = targetLanguage; + publicProfile!.analytics.setLanguageInfo( targetLanguage, level, analyticsRoom?.id, ); + await _savePublicProfileUpdate( PangeaEventTypes.profileAnalytics, - analyticsProfile!.toJson(), + publicProfile!.toJson(), ); } Future _addAnalyticsRoomIdsToPublicProfile() async { - if (analyticsProfile?.languageAnalytics == null) return; + if (publicProfile?.analytics.languageAnalytics == null) return; final analyticsRooms = client.allMyAnalyticsRooms; if (analyticsRooms.isEmpty) return; for (final analyticsRoom in analyticsRooms) { final lang = analyticsRoom.madeForLang?.split("-").first; - if (lang == null || analyticsProfile?.languageAnalytics == null) continue; + if (lang == null || publicProfile?.analytics.languageAnalytics == null) { + continue; + } final langKey = - analyticsProfile!.languageAnalytics!.keys.firstWhereOrNull( + publicProfile!.analytics.languageAnalytics!.keys.firstWhereOrNull( (l) => l.langCodeShort == lang, ); if (langKey == null) continue; - if (analyticsProfile!.languageAnalytics![langKey]!.analyticsRoomId == + if (publicProfile! + .analytics.languageAnalytics![langKey]!.analyticsRoomId == analyticsRoom.id) { continue; } - analyticsProfile!.setLanguageInfo( + publicProfile!.analytics.setLanguageInfo( langKey, - analyticsProfile!.languageAnalytics![langKey]!.level, + publicProfile!.analytics.languageAnalytics![langKey]!.level, analyticsRoom.id, ); } await _savePublicProfileUpdate( PangeaEventTypes.profileAnalytics, - analyticsProfile!.toJson(), + publicProfile!.toJson(), ); } Future addXPOffset(int offset) async { final targetLanguage = userL2; - if (targetLanguage == null || analyticsProfile == null) return; + if (targetLanguage == null || publicProfile == null) return; - analyticsProfile!.addXPOffset( + publicProfile!.analytics.addXPOffset( targetLanguage, offset, client.analyticsRoomLocal(targetLanguage)?.id, ); await _savePublicProfileUpdate( PangeaEventTypes.profileAnalytics, - analyticsProfile!.toJson(), + publicProfile!.toJson(), + ); + } + + Future updatePublicProfile() async { + if (publicProfile == null || + (publicProfile!.country == profile.userSettings.country && + publicProfile!.about == profile.userSettings.about)) { + return; + } + + publicProfile = publicProfile!.copyWith( + country: profile.userSettings.country, + about: profile.userSettings.about, + ); + + await _savePublicProfileUpdate( + PangeaEventTypes.profileAnalytics, + publicProfile!.toJson(), ); } @@ -380,6 +419,28 @@ class UserController { } } + Future getPublicProfile(String userId) async { + try { + if (userId == BotName.byEnvironment) { + return PublicProfileModel( + analytics: AnalyticsProfileModel(), + ); + } + + final resp = await client.getUserProfile(userId); + return PublicProfileModel.fromJson(resp.additionalProperties); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + userId: userId, + }, + ); + return null; + } + } + bool isToolEnabled(ToolSetting setting) { return userToolSetting(setting); } diff --git a/lib/pangea/user/user_model.dart b/lib/pangea/user/user_model.dart index ff0184627..8f7cc1976 100644 --- a/lib/pangea/user/user_model.dart +++ b/lib/pangea/user/user_model.dart @@ -18,6 +18,7 @@ class UserSettings { String? sourceLanguage; GenderEnum gender; String? country; + String? about; LanguageLevelTypeEnum cefrLevel; String? voice; @@ -29,6 +30,7 @@ class UserSettings { this.sourceLanguage, this.gender = GenderEnum.unselected, this.country, + this.about, this.cefrLevel = LanguageLevelTypeEnum.a1, this.voice, }); @@ -49,6 +51,7 @@ class UserSettings { ) : GenderEnum.unselected, country: json[ModelKey.userCountry], + about: json[ModelKey.userAbout], cefrLevel: json[ModelKey.cefrLevel] is String ? LanguageLevelTypeEnum.fromString( json[ModelKey.cefrLevel], @@ -66,6 +69,7 @@ class UserSettings { data[ModelKey.sourceLanguage] = sourceLanguage; data[ModelKey.userGender] = gender.string; data[ModelKey.userCountry] = country; + data[ModelKey.userAbout] = about; data[ModelKey.cefrLevel] = cefrLevel.string; data[ModelKey.voice] = voice; return data; @@ -126,6 +130,7 @@ class UserSettings { sourceLanguage: sourceLanguage, gender: gender, country: country, + about: about, cefrLevel: cefrLevel, voice: voice, ); @@ -143,6 +148,7 @@ class UserSettings { other.sourceLanguage == sourceLanguage && other.gender == gender && other.country == country && + other.about == about && other.cefrLevel == cefrLevel && other.voice == voice; } @@ -156,6 +162,7 @@ class UserSettings { sourceLanguage.hashCode, gender.hashCode, country.hashCode, + about.hashCode, cefrLevel.hashCode, voice.hashCode, ]); diff --git a/lib/widgets/adaptive_dialogs/user_dialog.dart b/lib/widgets/adaptive_dialogs/user_dialog.dart index 102101336..866f53bcb 100644 --- a/lib/widgets/adaptive_dialogs/user_dialog.dart +++ b/lib/widgets/adaptive_dialogs/user_dialog.dart @@ -7,6 +7,7 @@ import 'package:matrix/matrix.dart'; import 'package:fluffychat/config/themes.dart'; import 'package:fluffychat/l10n/l10n.dart'; import 'package:fluffychat/pangea/analytics_misc/level_display_name.dart'; +import 'package:fluffychat/pangea/user/about_me_display.dart'; import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/widgets/adaptive_dialogs/adaptive_dialog_action.dart'; import 'package:fluffychat/widgets/avatar.dart'; @@ -163,10 +164,10 @@ class UserDialog extends StatelessWidget { // ), Padding( padding: const EdgeInsets.all(4.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, + child: Column( children: [ LevelDisplayName(userId: profile.userId), + AboutMeDisplay(userId: profile.userId), ], ), ), diff --git a/lib/widgets/member_actions_popup_menu_button.dart b/lib/widgets/member_actions_popup_menu_button.dart index 75376e351..f555a192f 100644 --- a/lib/widgets/member_actions_popup_menu_button.dart +++ b/lib/widgets/member_actions_popup_menu_button.dart @@ -8,6 +8,7 @@ import 'package:fluffychat/pangea/analytics_misc/level_display_name.dart'; import 'package:fluffychat/pangea/bot/utils/bot_name.dart'; import 'package:fluffychat/pangea/bot/widgets/bot_chat_settings_dialog.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension.dart'; +import 'package:fluffychat/pangea/user/about_me_display.dart'; import 'package:fluffychat/widgets/avatar.dart'; import 'package:fluffychat/widgets/permission_slider_dialog.dart'; import 'adaptive_dialogs/show_ok_cancel_alert_dialog.dart'; @@ -58,53 +59,61 @@ void showMemberActionsPopupMenu({ items: >[ PopupMenuItem( value: _MemberActions.info, - child: Row( - // Pangea# - spacing: 12.0, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Avatar( - name: displayname, - mxContent: user.avatarUrl, - presenceUserId: user.id, - presenceBackgroundColor: theme.colorScheme.surfaceContainer, - ), - Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, + Row( + // Pangea# + spacing: 12.0, children: [ - ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 128), - child: Text( - displayname, - textAlign: TextAlign.center, - style: theme.textTheme.labelLarge, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), + Avatar( + name: displayname, + mxContent: user.avatarUrl, + presenceUserId: user.id, + presenceBackgroundColor: theme.colorScheme.surfaceContainer, ), - ConstrainedBox( - constraints: const BoxConstraints(maxWidth: 128), - child: Text( - user.id, - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 10), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), + Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 128), + child: Text( + displayname, + textAlign: TextAlign.center, + style: theme.textTheme.labelLarge, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 128), + child: Text( + user.id, + textAlign: TextAlign.center, + style: const TextStyle(fontSize: 10), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + // #Pangea + Padding( + padding: const EdgeInsets.all(4.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + LevelDisplayName(userId: user.id), + ], + ), + ), + // Pangea# + ], ), - // #Pangea - Padding( - padding: const EdgeInsets.all(4.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - LevelDisplayName(userId: user.id), - ], - ), - ), - // Pangea# ], ), + // #Pangea + AboutMeDisplay(userId: user.id), + // Pangea# ], ), ),