feat: script to translate specific keys and inclusion of acftl in level names
This commit is contained in:
parent
b20f2d3ef0
commit
c7c6efadaf
57 changed files with 990 additions and 430 deletions
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "ar",
|
||||
"@@last_modified": "2025-10-16 13:08:16.063345",
|
||||
"@@last_modified": "2025-11-04 13:34:44.139492",
|
||||
"about": "حول",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3316,13 +3316,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "يتعلم:",
|
||||
"joinWithClassCode": "انضم إلى الدورة",
|
||||
"joinWithClassCodeHint": "أدخل رمز الدعوة",
|
||||
"languageLevelPreA1": "مبتدئ حقيقي (ما قبل A1)",
|
||||
"languageLevelA1": "مبتدئ (A1)",
|
||||
"languageLevelA2": "مبتدئ أساسي (A2)",
|
||||
"languageLevelB1": "متوسط (B1)",
|
||||
"languageLevelB2": "متوسط مرتفع (B2)",
|
||||
"languageLevelC1": "متقدم (C1)",
|
||||
"languageLevelC2": "إتقان (C2)",
|
||||
"languageLevelPreA1": "مبتدئ منخفض (ما قبل A1)",
|
||||
"languageLevelA1": "مبتدئ متوسط (A1)",
|
||||
"languageLevelA2": "مبتدئ عالي (A2)",
|
||||
"languageLevelB1": "متوسط متوسط (B1)",
|
||||
"languageLevelB2": "متقدم منخفض (B2)",
|
||||
"languageLevelC1": "متقدم متوسط (C1)",
|
||||
"languageLevelC2": "متفوق (C2)",
|
||||
"changeTheNameOfTheClass": "غير الاسم",
|
||||
"changeTheNameOfTheChat": "غير اسم الدردشة",
|
||||
"askPangeaBot": "اطلب من بوت بانجيا تعريفًا سياقيًا.",
|
||||
|
|
|
|||
|
|
@ -833,13 +833,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Вучыцца:",
|
||||
"joinWithClassCode": "Далучыцца да курса",
|
||||
"joinWithClassCodeHint": "Увядзіце код запрашэння",
|
||||
"languageLevelPreA1": "Пачатковец (Pre A1)",
|
||||
"languageLevelA1": "Пачатковец (A1)",
|
||||
"languageLevelA2": "Элементарны (A2)",
|
||||
"languageLevelB1": "Сярэдні (B1)",
|
||||
"languageLevelB2": "Павышаны сярэдні (B2)",
|
||||
"languageLevelC1": "Прасунуты (C1)",
|
||||
"languageLevelC2": "Майстэрства (C2)",
|
||||
"languageLevelPreA1": "Навічок Нізкі (Папярэдні A1)",
|
||||
"languageLevelA1": "Навічок Сярэдні (A1)",
|
||||
"languageLevelA2": "Пачатковы высокі (A2)",
|
||||
"languageLevelB1": "Сярэдні сярэдні (B1)",
|
||||
"languageLevelB2": "Высокі нізкі (B2)",
|
||||
"languageLevelC1": "Высокі сярэдні (C1)",
|
||||
"languageLevelC2": "Супер (C2)",
|
||||
"changeTheNameOfTheClass": "Змяніць імя",
|
||||
"changeTheNameOfTheChat": "Змяніць імя чата",
|
||||
"askPangeaBot": "Пытайце ў Pangea Bot для кантэкстуальнага вызначэння.",
|
||||
|
|
@ -2392,7 +2392,7 @@
|
|||
"playWithAI": "Пакуль гуляйце з ШІ",
|
||||
"courseStartDesc": "Pangea Bot гатовы да працы ў любы час!\n\n...але навучанне лепш з сябрамі!",
|
||||
"@@locale": "be",
|
||||
"@@last_modified": "2025-10-16 13:08:21.169808",
|
||||
"@@last_modified": "2025-11-04 13:34:29.024561",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:08:26.192955",
|
||||
"@@last_modified": "2025-11-04 13:35:07.054864",
|
||||
"about": "সম্পর্কে",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3425,13 +3425,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "শিখছে:",
|
||||
"joinWithClassCode": "কোর্সে যোগ দিন",
|
||||
"joinWithClassCodeHint": "আমন্ত্রণ কোড লিখুন",
|
||||
"languageLevelPreA1": "সত্যিই শুরু (প্রি A1)",
|
||||
"languageLevelA1": "শুরু (A1)",
|
||||
"languageLevelA2": "প্রাথমিক (A2)",
|
||||
"languageLevelB1": "মধ্যবর্তী (B1)",
|
||||
"languageLevelB2": "উচ্চ মধ্যবর্তী (B2)",
|
||||
"languageLevelC1": "উন্নত (C1)",
|
||||
"languageLevelC2": "মাস্টারি (C2)",
|
||||
"languageLevelPreA1": "নবীন নিম্ন (প্রি A1)",
|
||||
"languageLevelA1": "নবীন মধ্য (এ1)",
|
||||
"languageLevelA2": "নবীন উচ্চ (A2)",
|
||||
"languageLevelB1": "মধ্যবর্তী মধ্য (B1)",
|
||||
"languageLevelB2": "উন্নত নিম্ন (B2)",
|
||||
"languageLevelC1": "উন্নত মধ্য (C1)",
|
||||
"languageLevelC2": "শ্রেষ্ঠ (C2)",
|
||||
"changeTheNameOfTheClass": "নাম পরিবর্তন করুন",
|
||||
"changeTheNameOfTheChat": "চ্যাটের নাম পরিবর্তন করুন",
|
||||
"askPangeaBot": "প্রশ্ন করুন পাঞ্জিয়া বটকে একটি প্রাসঙ্গিক সংজ্ঞার জন্য।",
|
||||
|
|
|
|||
|
|
@ -3300,13 +3300,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "སྱོན་ཚན་ལས་སྐད་ལེན་པ།",
|
||||
"joinWithClassCode": "ཚོང་ཚད་ལ་སྡེབ་སྤྱོད་ན།",
|
||||
"joinWithClassCodeHint": "འཕྲིན་ལེན་ལས་སྤྱོད་ན་ལོག་ལེན་འབད།",
|
||||
"languageLevelPreA1": "བརྗེད་ཡོད་པ་སྤྱོད་མི་ཚོད་ (Pre A1)",
|
||||
"languageLevelA1": "བརྗེད་ཡོད་པ (A1)",
|
||||
"languageLevelA2": "གཞི་སྒོར (A2)",
|
||||
"languageLevelB1": "ལས་སྤྱོད་ལོག་ལེན་ (B1)",
|
||||
"languageLevelB2": "མཐར་ཕྱིན་ལས་སྤྱོད་ལོག་ལེན་ (B2)",
|
||||
"languageLevelC1": "ལོངས་སྤྱོད་ལོག་ལེན་ (C1)",
|
||||
"languageLevelC2": "མཐོ་སྐོར (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Novice High (A2)",
|
||||
"languageLevelB1": "Intermediate Mid (B1)",
|
||||
"languageLevelB2": "Advanced Low (B2)",
|
||||
"languageLevelC1": "Advanced Mid (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "མིང་ལེན་བསྐྱར་བཟོ།",
|
||||
"changeTheNameOfTheChat": "ཆ་ཚང་མིང་བསྐྱར་བཟོ།",
|
||||
"askPangeaBot": "Pangea Bot ལ་འདི་ལས་སྒྲིག་བཀོད་ལ་བཀོད་ནས་བརྗེ་བརྗོད་འདི་ལ་བཀོད།",
|
||||
|
|
@ -4707,7 +4707,7 @@
|
|||
"joinPublicTrip": "མི་ཚེས་ལ་ལོག་འབད།",
|
||||
"startOwnTrip": "ངེད་རང་གི་ལོག་ལ་སྦྱོར་བཅོས།",
|
||||
"@@locale": "bo",
|
||||
"@@last_modified": "2025-10-16 16:03:25.501925",
|
||||
"@@last_modified": "2025-11-04 13:35:01.640152",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:30:33.942130",
|
||||
"@@last_modified": "2025-11-04 13:34:30.531761",
|
||||
"about": "Quant a",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3403,13 +3403,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Està aprenent:",
|
||||
"joinWithClassCode": "Uneix-te al curs",
|
||||
"joinWithClassCodeHint": "Introdueix el codi d'invitació",
|
||||
"languageLevelPreA1": "Totalment principiants (Pre A1)",
|
||||
"languageLevelA1": "Principiant (A1)",
|
||||
"languageLevelA2": "Elemental (A2)",
|
||||
"languageLevelB1": "Intermedi (B1)",
|
||||
"languageLevelB2": "Intermedi superior (B2)",
|
||||
"languageLevelC1": "Avançat (C1)",
|
||||
"languageLevelC2": "Dominació (C2)",
|
||||
"languageLevelPreA1": "Novell Baix (Pre A1)",
|
||||
"languageLevelA1": "Novell Mitjà (A1)",
|
||||
"languageLevelA2": "Novell Alt (A2)",
|
||||
"languageLevelB1": "Intermedi Mitjà (B1)",
|
||||
"languageLevelB2": "Avançat Baix (B2)",
|
||||
"languageLevelC1": "Avançat Mitjà (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Canvia el nom",
|
||||
"changeTheNameOfTheChat": "Canvia el nom del xat",
|
||||
"askPangeaBot": "Pregunta a Pangea Bot per una definició contextual.",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "cs",
|
||||
"@@last_modified": "2025-10-16 13:30:36.618840",
|
||||
"@@last_modified": "2025-11-04 13:34:23.845105",
|
||||
"about": "O aplikaci",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -2960,13 +2960,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Se učí:",
|
||||
"joinWithClassCode": "Připojit se ke kurzu",
|
||||
"joinWithClassCodeHint": "Zadejte pozvánkový kód",
|
||||
"languageLevelPreA1": "Skutečný začátečník (Pre A1)",
|
||||
"languageLevelA1": "Začátečník (A1)",
|
||||
"languageLevelA2": "Základní (A2)",
|
||||
"languageLevelB1": "Středně pokročilý (B1)",
|
||||
"languageLevelB2": "Vyšší středně pokročilý (B2)",
|
||||
"languageLevelC1": "Pokročilý (C1)",
|
||||
"languageLevelC2": "Mistrovství (C2)",
|
||||
"languageLevelPreA1": "Nováček Nízká (Pre A1)",
|
||||
"languageLevelA1": "Nováček Mid (A1)",
|
||||
"languageLevelA2": "Začátečník Vysoký (A2)",
|
||||
"languageLevelB1": "Středně pokročilý Střední (B1)",
|
||||
"languageLevelB2": "Pokročilý Nízký (B2)",
|
||||
"languageLevelC1": "Pokročilý Střední (C1)",
|
||||
"languageLevelC2": "Vysoce pokročilý (C2)",
|
||||
"changeTheNameOfTheClass": "Změnit název",
|
||||
"changeTheNameOfTheChat": "Změnit název chatu",
|
||||
"askPangeaBot": "Požádejte Pangea Bota o kontextovou definici.",
|
||||
|
|
|
|||
|
|
@ -852,13 +852,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Lærer:",
|
||||
"joinWithClassCode": "Deltag i kursus",
|
||||
"joinWithClassCodeHint": "Indtast invitationskoden",
|
||||
"languageLevelPreA1": "Sandbegynder (Pre A1)",
|
||||
"languageLevelA1": "Begynder (A1)",
|
||||
"languageLevelA2": "Elementær (A2)",
|
||||
"languageLevelB1": "Mellem (B1)",
|
||||
"languageLevelB2": "Øvre Mellem (B2)",
|
||||
"languageLevelC1": "Avanceret (C1)",
|
||||
"languageLevelC2": "Mestring (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Novice High (A2)",
|
||||
"languageLevelB1": "Intermediate Mid (B1)",
|
||||
"languageLevelB2": "Advanced Low (B2)",
|
||||
"languageLevelC1": "Advanced Mid (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Skift navn",
|
||||
"changeTheNameOfTheChat": "Skift chatnavn",
|
||||
"askPangeaBot": "Spørg Pangea Bot om en kontekstuel definition.",
|
||||
|
|
@ -2411,7 +2411,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-10-16 13:30:39.003047",
|
||||
"@@last_modified": "2025-11-04 13:33:43.063775",
|
||||
"@aboutHomeserver": {
|
||||
"type": "String",
|
||||
"placeholders": {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "de",
|
||||
"@@last_modified": "2025-10-16 13:30:41.915934",
|
||||
"@@last_modified": "2025-11-04 13:34:11.760779",
|
||||
"alwaysUse24HourFormat": "true",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"description": "Set to true to always display time of day in 24 hour format."
|
||||
|
|
@ -3438,13 +3438,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Lernt:",
|
||||
"joinWithClassCode": "Kurs beitreten",
|
||||
"joinWithClassCodeHint": "Einladungscode eingeben",
|
||||
"languageLevelPreA1": "Wahrer Anfänger (Pre A1)",
|
||||
"languageLevelA1": "Anfänger (A1)",
|
||||
"languageLevelA2": "Grundstufe (A2)",
|
||||
"languageLevelPreA1": "Anfänger Niedrig (Pre A1)",
|
||||
"languageLevelA1": "Novize Mitte (A1)",
|
||||
"languageLevelA2": "Anfänger Hoch (A2)",
|
||||
"languageLevelB1": "Mittelstufe (B1)",
|
||||
"languageLevelB2": "Obere Mittelstufe (B2)",
|
||||
"languageLevelC1": "Fortgeschritten (C1)",
|
||||
"languageLevelC2": "Meisterschaft (C2)",
|
||||
"languageLevelB2": "Fortgeschritten Niedrig (B2)",
|
||||
"languageLevelC1": "Fortgeschritten Mittel (C1)",
|
||||
"languageLevelC2": "Überlegen (C2)",
|
||||
"changeTheNameOfTheClass": "Namen ändern",
|
||||
"changeTheNameOfTheChat": "Den Namen des Chats ändern",
|
||||
"askPangeaBot": "Fragen Sie Pangea Bot nach einer kontextbezogenen Definition.",
|
||||
|
|
|
|||
|
|
@ -3378,13 +3378,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Μαθαίνει:",
|
||||
"joinWithClassCode": "Εγγραφή στο μάθημα",
|
||||
"joinWithClassCodeHint": "Εισάγετε τον κωδικό πρόσκλησης",
|
||||
"languageLevelPreA1": "Πραγματικά αρχάριος (Προ A1)",
|
||||
"languageLevelA1": "Αρχάριος (A1)",
|
||||
"languageLevelA2": "Βασικό (A2)",
|
||||
"languageLevelB1": "Μεσαίο (B1)",
|
||||
"languageLevelB2": "Ανώτερο μεσαίο (B2)",
|
||||
"languageLevelC1": "Προχωρημένο (C1)",
|
||||
"languageLevelC2": "Διδασκαλία (C2)",
|
||||
"languageLevelPreA1": "Νέος Χαμηλός (Προ Α1)",
|
||||
"languageLevelA1": "Νέος Μέσος (A1)",
|
||||
"languageLevelA2": "Αρχάριος Υψηλού Επιπέδου (A2)",
|
||||
"languageLevelB1": "Μεσαίος Μέτριος (B1)",
|
||||
"languageLevelB2": "Προχωρημένος Χαμηλού Επιπέδου (B2)",
|
||||
"languageLevelC1": "Προχωρημένος Μέτριος (C1)",
|
||||
"languageLevelC2": "Ανώτερος (C2)",
|
||||
"changeTheNameOfTheClass": "Αλλαγή ονόματος",
|
||||
"changeTheNameOfTheChat": "Αλλαγή ονόματος της συνομιλίας",
|
||||
"askPangeaBot": "Ζητήστε από το Pangea Bot μια συμφραζόμενη ορισμό.",
|
||||
|
|
@ -4937,7 +4937,7 @@
|
|||
"playWithAI": "Παίξτε με την Τεχνητή Νοημοσύνη προς το παρόν",
|
||||
"courseStartDesc": "Ο Pangea Bot είναι έτοιμος να ξεκινήσει οποιαδήποτε στιγμή!\n\n...αλλά η μάθηση είναι καλύτερη με φίλους!",
|
||||
"@@locale": "el",
|
||||
"@@last_modified": "2025-10-16 13:30:44.558485",
|
||||
"@@last_modified": "2025-11-04 13:35:19.855843",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -3305,13 +3305,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Is learning:",
|
||||
"joinWithClassCode": "Join course",
|
||||
"joinWithClassCodeHint": "Enter invite code",
|
||||
"languageLevelPreA1": "True Beginner (Pre A1)",
|
||||
"languageLevelA1": "Beginner (A1)",
|
||||
"languageLevelA2": "Elementary (A2)",
|
||||
"languageLevelB1": "Intermediate (B1)",
|
||||
"languageLevelB2": "Upper Intermediate (B2)",
|
||||
"languageLevelC1": "Advanced (C1)",
|
||||
"languageLevelC2": "Mastery (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Novice High (A2)",
|
||||
"languageLevelB1": "Intermediate Mid (B1)",
|
||||
"languageLevelB2": "Advanced Low (B2)",
|
||||
"languageLevelC1": "Advanced Mid (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Change the name",
|
||||
"changeTheNameOfTheChat": "Change the name of the chat",
|
||||
"askPangeaBot": "Ask Pangea Bot for a contextual definition.",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:30:47.008238",
|
||||
"@@last_modified": "2025-11-04 13:35:26.105229",
|
||||
"about": "Prio",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -2557,13 +2557,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Ŝatas:",
|
||||
"joinWithClassCode": "Aliĝi al kurso",
|
||||
"joinWithClassCodeHint": "Enmetu invitan kodon",
|
||||
"languageLevelPreA1": "Verŝa Komencanto (Pre A1)",
|
||||
"languageLevelA1": "Komencanto (A1)",
|
||||
"languageLevelA2": "Elementa (A2)",
|
||||
"languageLevelB1": "Meznivelulo (B1)",
|
||||
"languageLevelB2": "Supermeznivelulo (B2)",
|
||||
"languageLevelC1": "Progresinta (C1)",
|
||||
"languageLevelC2": "Mastro (C2)",
|
||||
"languageLevelPreA1": "Novice Malalta (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Novica Alta (A2)",
|
||||
"languageLevelB1": "Mezgrada Meza (B1)",
|
||||
"languageLevelB2": "Avancita Malalta (B2)",
|
||||
"languageLevelC1": "Avancita Meza (C1)",
|
||||
"languageLevelC2": "Supera (C2)",
|
||||
"changeTheNameOfTheClass": "Ŝanĝi la nomon",
|
||||
"changeTheNameOfTheChat": "Ŝanĝi la nomon de la babilejo",
|
||||
"askPangeaBot": "Demandi al Pangea Bot por kunteksta difino.",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "es",
|
||||
"@@last_modified": "2025-10-16 13:30:49.638463",
|
||||
"@@last_modified": "2025-11-04 13:33:35.588794",
|
||||
"about": "Acerca de",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3619,13 +3619,13 @@
|
|||
"addDescription": "Añadir descripción",
|
||||
"pleaseEnterSecurityKeyDescription": "Para desbloquear el respaldo de tu chat, por favor ingresa tu clave de seguridad que ha sido generada en una sesión previa. Tu clave de seguridad NO es tu contraseña.",
|
||||
"updateLanguage": "Cambiar mis idiomas",
|
||||
"languageLevelPreA1": "Principiante absoluto (Pre A1)",
|
||||
"languageLevelA1": "Principiante elemental (A1)",
|
||||
"languageLevelA2": "Principiante básico (A2)",
|
||||
"languageLevelB1": "Intermedio (B1)",
|
||||
"languageLevelB2": "Intermedio alto (B2)",
|
||||
"languageLevelC1": "Avanzado (C1)",
|
||||
"languageLevelC2": "Maestría (C2)",
|
||||
"languageLevelPreA1": "Novato Bajo (Pre A1)",
|
||||
"languageLevelA1": "Novato Medio (A1)",
|
||||
"languageLevelA2": "Principiante Alto (A2)",
|
||||
"languageLevelB1": "Intermedio Medio (B1)",
|
||||
"languageLevelB2": "Avanzado Bajo (B2)",
|
||||
"languageLevelC1": "Avanzado Medio (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"reportAnIssue": "Ayuda",
|
||||
"whatLanguageYouWantToLearn": "¿Qué idioma quiere aprender?",
|
||||
"whatIsYourBaseLanguage": "¿Cuál es su idioma base? \n\n Actualmente, la traducción interactiva solo está disponible cuando su idioma base es inglés y español. La asistencia gramatical está disponible para todos los idiomas base.",
|
||||
|
|
@ -7427,5 +7427,33 @@
|
|||
"@highlightVocabTooltip": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelPreA1": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelA1": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelA2": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelB1": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelB2": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelC1": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelC2": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "et",
|
||||
"@@last_modified": "2025-10-16 13:30:52.593520",
|
||||
"@@last_modified": "2025-11-04 13:34:09.788327",
|
||||
"about": "Rakenduse teave",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3434,13 +3434,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Õpib:",
|
||||
"joinWithClassCode": "Liitu ruumiga",
|
||||
"joinWithClassCodeHint": "Sisesta kutsekood",
|
||||
"languageLevelPreA1": "Tõeline algaja (Pre A1)",
|
||||
"languageLevelA1": "Algaja (A1)",
|
||||
"languageLevelA2": "Algeline (A2)",
|
||||
"languageLevelB1": "Keskmine (B1)",
|
||||
"languageLevelB2": "Ülemine Keskastme (B2)",
|
||||
"languageLevelC1": "Edasijõudnud (C1)",
|
||||
"languageLevelC2": "Meisterlikkus (C2)",
|
||||
"languageLevelPreA1": "Algaja Madal (Eel A1)",
|
||||
"languageLevelA1": "Algaja Kesktase (A1)",
|
||||
"languageLevelA2": "Algaja Kõrge (A2)",
|
||||
"languageLevelB1": "Vahepealne Keskmine (B1)",
|
||||
"languageLevelB2": "Edasijõudnud Madal (B2)",
|
||||
"languageLevelC1": "Edasijõudnud Keskmine (C1)",
|
||||
"languageLevelC2": "Üksikasjalik (C2)",
|
||||
"changeTheNameOfTheClass": "Muuda nime",
|
||||
"changeTheNameOfTheChat": "Muuda vestluse nime",
|
||||
"askPangeaBot": "Küsi Pangea Botilt kontekstuaalset definitsiooni.",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "eu",
|
||||
"@@last_modified": "2025-10-16 13:30:55.222415",
|
||||
"@@last_modified": "2025-11-04 13:34:05.712800",
|
||||
"about": "Honi buruz",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3431,13 +3431,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Ikasten:",
|
||||
"joinWithClassCode": "Batu ikastaroan",
|
||||
"joinWithClassCodeHint": "Sartu gonbidapen kodea",
|
||||
"languageLevelPreA1": "Hasiberri Benetakoa (Pre A1)",
|
||||
"languageLevelA1": "Hasiberri (A1)",
|
||||
"languageLevelA2": "Oinarrizkoa (A2)",
|
||||
"languageLevelB1": "Erdakorra (B1)",
|
||||
"languageLevelB2": "Goren Erdakorra (B2)",
|
||||
"languageLevelC1": "Aurreratua (C1)",
|
||||
"languageLevelC2": "Maisu (C2)",
|
||||
"languageLevelPreA1": "Hasiberri Baxua (Pre A1)",
|
||||
"languageLevelA1": "Hasiberri Erdi (A1)",
|
||||
"languageLevelA2": "Hasiberri Altua (A2)",
|
||||
"languageLevelB1": "Ertain Ertaina (B1)",
|
||||
"languageLevelB2": "Aurreratu Baxua (B2)",
|
||||
"languageLevelC1": "Aurreratu Ertaina (C1)",
|
||||
"languageLevelC2": "Goren (C2)",
|
||||
"changeTheNameOfTheClass": "Aldatu izena",
|
||||
"changeTheNameOfTheChat": "Aldatu txateatzen denaren izena",
|
||||
"askPangeaBot": "Galdetu Pangea Bot-i testuinguruko definizio bat.",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:30:57.998791",
|
||||
"@@last_modified": "2025-11-04 13:35:09.159097",
|
||||
"repeatPassword": "تکرار رمزعبور",
|
||||
"@repeatPassword": {},
|
||||
"about": "درباره",
|
||||
|
|
@ -2851,13 +2851,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "در حال یادگیری:",
|
||||
"joinWithClassCode": "پیوستن به دوره",
|
||||
"joinWithClassCodeHint": "کد دعوت را وارد کنید",
|
||||
"languageLevelPreA1": "مبتدی مطلق (پیش A1)",
|
||||
"languageLevelA1": "مبتدی (A1)",
|
||||
"languageLevelA2": "مقدماتی (A2)",
|
||||
"languageLevelB1": "متوسط (B1)",
|
||||
"languageLevelB2": "متوسط رو به بالا (B2)",
|
||||
"languageLevelC1": "پیشرفته (C1)",
|
||||
"languageLevelC2": "استادی (C2)",
|
||||
"languageLevelPreA1": "نوآموز پایین (پیش A1)",
|
||||
"languageLevelA1": "نوآموز میانه (A1)",
|
||||
"languageLevelA2": "مبتدی بالا (A2)",
|
||||
"languageLevelB1": "متوسطه میانه (B1)",
|
||||
"languageLevelB2": "پیشرفته پایین (B2)",
|
||||
"languageLevelC1": "پیشرفته میانه (C1)",
|
||||
"languageLevelC2": "عالی (C2)",
|
||||
"changeTheNameOfTheClass": "تغییر نام",
|
||||
"changeTheNameOfTheChat": "تغییر نام چت",
|
||||
"askPangeaBot": "از ربات پانگئا برای تعریف متنی درخواست کنید.",
|
||||
|
|
|
|||
|
|
@ -2931,13 +2931,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Oppii:",
|
||||
"joinWithClassCode": "Liity kurssille",
|
||||
"joinWithClassCodeHint": "Syötä kutsukoodi",
|
||||
"languageLevelPreA1": "Tosi aloitteleva (Pre A1)",
|
||||
"languageLevelA1": "Alkeistaso (A1)",
|
||||
"languageLevelA2": "Perustaso (A2)",
|
||||
"languageLevelB1": "Keskitaso (B1)",
|
||||
"languageLevelB2": "Yläkeskitaso (B2)",
|
||||
"languageLevelC1": "Edistynyt (C1)",
|
||||
"languageLevelC2": "Mestaritaito (C2)",
|
||||
"languageLevelPreA1": "Aloittelija Matala (Pre A1)",
|
||||
"languageLevelA1": "Aloittelija Keskitaso (A1)",
|
||||
"languageLevelA2": "Aloittelija Korkea (A2)",
|
||||
"languageLevelB1": "Keskitaso Keskiväli (B1)",
|
||||
"languageLevelB2": "Korkea Alhainen (B2)",
|
||||
"languageLevelC1": "Korkea Keskiväli (C1)",
|
||||
"languageLevelC2": "Erinomainen (C2)",
|
||||
"changeTheNameOfTheClass": "Vaihda nimi",
|
||||
"changeTheNameOfTheChat": "Vaihda keskustelun nimi",
|
||||
"askPangeaBot": "Kysy Pangea Botilta kontekstuaalista määritelmää.",
|
||||
|
|
@ -4512,7 +4512,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-10-16 13:31:00.370211",
|
||||
"@@last_modified": "2025-11-04 13:33:40.930239",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1697,13 +1697,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Nagtututo:",
|
||||
"joinWithClassCode": "Sumali sa kurso",
|
||||
"joinWithClassCodeHint": "Ilagay ang invite code",
|
||||
"languageLevelPreA1": "Tunay na Nagsisimula (Pre A1)",
|
||||
"languageLevelA1": "Nagsisimula (A1)",
|
||||
"languageLevelA2": "Pang-Elementary (A2)",
|
||||
"languageLevelB1": "Intermediate (B1)",
|
||||
"languageLevelB2": "Upper Intermediate (B2)",
|
||||
"languageLevelC1": "Advanced (C1)",
|
||||
"languageLevelC2": "Mastery (C2)",
|
||||
"languageLevelPreA1": "Baguhan Mababa (Pre A1)",
|
||||
"languageLevelA1": "Baguhang Mid (A1)",
|
||||
"languageLevelA2": "Baguhan Mataas (A2)",
|
||||
"languageLevelB1": "Katamtamang Gitna (B1)",
|
||||
"languageLevelB2": "Advanced Mababa (B2)",
|
||||
"languageLevelC1": "Advanced Gitna (C1)",
|
||||
"languageLevelC2": "Superyor (C2)",
|
||||
"changeTheNameOfTheClass": "Palitan ang pangalan",
|
||||
"changeTheNameOfTheChat": "Palitan ang pangalan ng chat",
|
||||
"askPangeaBot": "Magtanong kay Pangea Bot para sa isang kontekstuwal na depinisyon.",
|
||||
|
|
@ -3272,7 +3272,7 @@
|
|||
"selectAll": "Piliin lahat",
|
||||
"deselectAll": "Huwag piliin lahat",
|
||||
"@@locale": "fil",
|
||||
"@@last_modified": "2025-10-16 13:31:03.387348",
|
||||
"@@last_modified": "2025-11-04 13:34:38.274191",
|
||||
"@setCustomPermissionLevel": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "fr",
|
||||
"@@last_modified": "2025-10-16 13:31:05.366693",
|
||||
"@@last_modified": "2025-11-04 13:35:41.866867",
|
||||
"about": "À propos",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3261,13 +3261,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Apprend :",
|
||||
"joinWithClassCode": "Rejoindre le cours",
|
||||
"joinWithClassCodeHint": "Entrez le code d'invitation",
|
||||
"languageLevelPreA1": "Vrai Débutant (Pre A1)",
|
||||
"languageLevelA1": "Débutant (A1)",
|
||||
"languageLevelA2": "Élémentaire (A2)",
|
||||
"languageLevelB1": "Intermédiaire (B1)",
|
||||
"languageLevelB2": "Intermédiaire supérieur (B2)",
|
||||
"languageLevelC1": "Avancé (C1)",
|
||||
"languageLevelC2": "Maîtrise (C2)",
|
||||
"languageLevelPreA1": "Novice Bas (Pré A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Novice élevé (A2)",
|
||||
"languageLevelB1": "Intermédiaire moyen (B1)",
|
||||
"languageLevelB2": "Avancé faible (B2)",
|
||||
"languageLevelC1": "Avancé moyen (C1)",
|
||||
"languageLevelC2": "Supérieur (C2)",
|
||||
"changeTheNameOfTheClass": "Changer le nom",
|
||||
"changeTheNameOfTheChat": "Changer le nom du chat",
|
||||
"askPangeaBot": "Demandez à Pangea Bot une définition contextuelle.",
|
||||
|
|
|
|||
|
|
@ -3439,13 +3439,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Ag foghlaim:",
|
||||
"joinWithClassCode": "Cláraigh leis an gcód rang",
|
||||
"joinWithClassCodeHint": "Cuir isteach an cód cuireadh",
|
||||
"languageLevelPreA1": "Tús Mór (Pre A1)",
|
||||
"languageLevelA1": "Tús Mór (A1)",
|
||||
"languageLevelA2": "Bunúsach (A2)",
|
||||
"languageLevelB1": "Meánleibhéal (B1)",
|
||||
"languageLevelB2": "Meánleibhéal Uachtarach (B2)",
|
||||
"languageLevelC1": "Ceadúnas Ardleibhéil (C1)",
|
||||
"languageLevelC2": "Foirfeacht (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Tosaitheoir Ard (A2)",
|
||||
"languageLevelB1": "Idirmheánach Lár (B1)",
|
||||
"languageLevelB2": "Ard Íseal (B2)",
|
||||
"languageLevelC1": "Ard Lár (C1)",
|
||||
"languageLevelC2": "Sár (C2)",
|
||||
"changeTheNameOfTheClass": "Athraigh an t-ainm",
|
||||
"changeTheNameOfTheChat": "Athraigh ainm an chomhrá",
|
||||
"askPangeaBot": "Iarr ar Pangea Bot le sainmhíniú comhthéacsúil.",
|
||||
|
|
@ -4998,7 +4998,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-10-16 13:31:08.161200",
|
||||
"@@last_modified": "2025-11-04 13:35:39.442358",
|
||||
"@customReaction": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "gl",
|
||||
"@@last_modified": "2025-10-16 13:31:10.613939",
|
||||
"@@last_modified": "2025-11-04 13:33:37.429308",
|
||||
"about": "Acerca de",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3432,13 +3432,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Está a aprender:",
|
||||
"joinWithClassCode": "Unirse ao curso",
|
||||
"joinWithClassCodeHint": "Introduce o código de invitación",
|
||||
"languageLevelPreA1": "Principiante verdadeiro (Pre A1)",
|
||||
"languageLevelA1": "Principiante (A1)",
|
||||
"languageLevelA2": "Elemental (A2)",
|
||||
"languageLevelB1": "Intermedio (B1)",
|
||||
"languageLevelB2": "Nivel avanzado (B2)",
|
||||
"languageLevelC1": "Avanzado (C1)",
|
||||
"languageLevelC2": "Maestría (C2)",
|
||||
"languageLevelPreA1": "Novato Baixo (Pre A1)",
|
||||
"languageLevelA1": "Novato Medio (A1)",
|
||||
"languageLevelA2": "Novato Alto (A2)",
|
||||
"languageLevelB1": "Intermedio Medio (B1)",
|
||||
"languageLevelB2": "Avanzado Baixo (B2)",
|
||||
"languageLevelC1": "Avanzado Medio (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Cambiar o nome",
|
||||
"changeTheNameOfTheChat": "Cambiar o nome do chat",
|
||||
"askPangeaBot": "Pregunte ao Pangea Bot por unha definición contextual.",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:31:12.984526",
|
||||
"@@last_modified": "2025-11-04 13:33:59.135039",
|
||||
"about": "אודות",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -2017,13 +2017,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "לומד:",
|
||||
"joinWithClassCode": "הצטרף לקורס",
|
||||
"joinWithClassCodeHint": "הזן קוד הזמנה",
|
||||
"languageLevelPreA1": "מתחיל אמיתי (Pre A1)",
|
||||
"languageLevelA1": "מתחיל (A1)",
|
||||
"languageLevelA2": "יסודי (A2)",
|
||||
"languageLevelB1": "בינוני (B1)",
|
||||
"languageLevelB2": "בינוני עליון (B2)",
|
||||
"languageLevelC1": "מתקדם (C1)",
|
||||
"languageLevelC2": "שליטה (C2)",
|
||||
"languageLevelPreA1": "מתחיל נמוך (פרה A1)",
|
||||
"languageLevelA1": "מתחיל בינוני (A1)",
|
||||
"languageLevelA2": "מתחיל גבוה (A2)",
|
||||
"languageLevelB1": "בינוני בינוני (B1)",
|
||||
"languageLevelB2": "מתקדם נמוך (B2)",
|
||||
"languageLevelC1": "מתקדם בינוני (C1)",
|
||||
"languageLevelC2": "מעל (C2)",
|
||||
"changeTheNameOfTheClass": "שנה את השם",
|
||||
"changeTheNameOfTheChat": "שנה את שם הצ'אט",
|
||||
"askPangeaBot": "שאל את בוט פנגיאה להגדרה הקשרית.",
|
||||
|
|
|
|||
|
|
@ -3405,13 +3405,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "सीख रहा है:",
|
||||
"joinWithClassCode": "कोर्स में शामिल हों",
|
||||
"joinWithClassCodeHint": "आमंत्रण कोड दर्ज करें",
|
||||
"languageLevelPreA1": "सच्चा शुरुआतकर्ता (Pre A1)",
|
||||
"languageLevelA1": "शुरुआती (A1)",
|
||||
"languageLevelA2": "मूलभूत (A2)",
|
||||
"languageLevelB1": "मध्यम (B1)",
|
||||
"languageLevelB2": "उच्च मध्यम (B2)",
|
||||
"languageLevelC1": "उन्नत (C1)",
|
||||
"languageLevelC2": "माहिर (C2)",
|
||||
"languageLevelPreA1": "नवीनतम निम्न (पूर्व A1)",
|
||||
"languageLevelA1": "नवोदित मध्य (A1)",
|
||||
"languageLevelA2": "नवीन उच्च (A2)",
|
||||
"languageLevelB1": "मध्यम मध्य (B1)",
|
||||
"languageLevelB2": "उन्नत निम्न (B2)",
|
||||
"languageLevelC1": "उन्नत मध्य (C1)",
|
||||
"languageLevelC2": "श्रेष्ठ (C2)",
|
||||
"changeTheNameOfTheClass": "नाम बदलें",
|
||||
"changeTheNameOfTheChat": "चैट का नाम बदलें",
|
||||
"askPangeaBot": "पांगेआ बॉट से संदर्भात्मक परिभाषा पूछें।",
|
||||
|
|
@ -4964,7 +4964,7 @@
|
|||
"playWithAI": "अभी के लिए एआई के साथ खेलें",
|
||||
"courseStartDesc": "पैंजिया बॉट कभी भी जाने के लिए तैयार है!\n\n...लेकिन दोस्तों के साथ सीखना बेहतर है!",
|
||||
"@@locale": "hi",
|
||||
"@@last_modified": "2025-10-16 13:31:15.251036",
|
||||
"@@last_modified": "2025-11-04 13:35:23.970994",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "hr",
|
||||
"@@last_modified": "2025-10-16 13:31:18.226992",
|
||||
"@@last_modified": "2025-11-04 13:33:57.394567",
|
||||
"about": "Informacije",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3187,13 +3187,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Uči:",
|
||||
"joinWithClassCode": "Pridruži se tečaju",
|
||||
"joinWithClassCodeHint": "Unesite pozivni kod",
|
||||
"languageLevelPreA1": "Potpuni početnik (Pre A1)",
|
||||
"languageLevelA1": "Početnik (A1)",
|
||||
"languageLevelA2": "Osnovno (A2)",
|
||||
"languageLevelB1": "Srednja razina (B1)",
|
||||
"languageLevelB2": "Viša srednja razina (B2)",
|
||||
"languageLevelC1": "Napredno (C1)",
|
||||
"languageLevelC2": "Majstorski (C2)",
|
||||
"languageLevelPreA1": "Novak Nizak (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Početni Visoki (A2)",
|
||||
"languageLevelB1": "Srednji Srednji (B1)",
|
||||
"languageLevelB2": "Napredni Niski (B2)",
|
||||
"languageLevelC1": "Napredni Srednji (C1)",
|
||||
"languageLevelC2": "Superiorni (C2)",
|
||||
"changeTheNameOfTheClass": "Promijeni ime",
|
||||
"changeTheNameOfTheChat": "Promijeni ime chata",
|
||||
"askPangeaBot": "Pitaj Pangea Bota za kontekstualnu definiciju.",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "hu",
|
||||
"@@last_modified": "2025-10-16 13:31:20.947240",
|
||||
"@@last_modified": "2025-11-04 13:33:45.709926",
|
||||
"about": "Névjegy",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3431,13 +3431,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Tanul:",
|
||||
"joinWithClassCode": "Csatlakozás kurzushoz",
|
||||
"joinWithClassCodeHint": "Írja be a meghívókódot",
|
||||
"languageLevelPreA1": "Igazi kezdő (Pre A1)",
|
||||
"languageLevelA1": "Kezdő (A1)",
|
||||
"languageLevelA2": "Alapfok (A2)",
|
||||
"languageLevelB1": "Középhaladó (B1)",
|
||||
"languageLevelB2": "Felsőközéphaladó (B2)",
|
||||
"languageLevelC1": "Haladó (C1)",
|
||||
"languageLevelC2": "Mesterfokú (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Kezdő Magas (A2)",
|
||||
"languageLevelB1": "Középfok Közepes (B1)",
|
||||
"languageLevelB2": "Felsőfok Alacsony (B2)",
|
||||
"languageLevelC1": "Felsőfok Közepes (C1)",
|
||||
"languageLevelC2": "Kiváló (C2)",
|
||||
"changeTheNameOfTheClass": "Név módosítása",
|
||||
"changeTheNameOfTheChat": "A chat nevének módosítása",
|
||||
"askPangeaBot": "Kérdezze meg a Pangea Botot egy kontextuális meghatározásért.",
|
||||
|
|
|
|||
|
|
@ -880,13 +880,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Est in le processo de apprender:",
|
||||
"joinWithClassCode": "Joinar le curso",
|
||||
"joinWithClassCodeHint": "Entera le codice de invito",
|
||||
"languageLevelPreA1": "Principiante vermente (Pre A1)",
|
||||
"languageLevelA1": "Principiante (A1)",
|
||||
"languageLevelA2": "Elementari (A2)",
|
||||
"languageLevelB1": "Intermedie (B1)",
|
||||
"languageLevelB2": "Superiore intermedie (B2)",
|
||||
"languageLevelC1": "Avanzate (C1)",
|
||||
"languageLevelC2": "Maestria (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Novice High (A2)",
|
||||
"languageLevelB1": "Intermediate Mid (B1)",
|
||||
"languageLevelB2": "Advanced Low (B2)",
|
||||
"languageLevelC1": "Advanced Mid (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Changear le nomine",
|
||||
"changeTheNameOfTheChat": "Changear le nomine del chat",
|
||||
"askPangeaBot": "Questiona Pangea Bot pro un definition contextual.",
|
||||
|
|
@ -2439,7 +2439,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-10-16 13:31:23.726766",
|
||||
"@@last_modified": "2025-11-04 13:34:01.175577",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:31:25.902157",
|
||||
"@@last_modified": "2025-11-04 13:33:48.096891",
|
||||
"setAsCanonicalAlias": "Atur sebagai alias utama",
|
||||
"@setAsCanonicalAlias": {
|
||||
"type": "String",
|
||||
|
|
@ -3433,13 +3433,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Sedang belajar:",
|
||||
"joinWithClassCode": "Gabung kursus",
|
||||
"joinWithClassCodeHint": "Masukkan kode undangan",
|
||||
"languageLevelPreA1": "Pemula Sejati (Pre A1)",
|
||||
"languageLevelA1": "Pemula (A1)",
|
||||
"languageLevelA2": "Dasar (A2)",
|
||||
"languageLevelB1": "Menengah (B1)",
|
||||
"languageLevelB2": "Menengah Atas (B2)",
|
||||
"languageLevelC1": "Lanjutan (C1)",
|
||||
"languageLevelC2": "Penguasaan (C2)",
|
||||
"languageLevelPreA1": "Pemula Rendah (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Pemula Tinggi (A2)",
|
||||
"languageLevelB1": "Menengah Sedang (B1)",
|
||||
"languageLevelB2": "Lanjutan Rendah (B2)",
|
||||
"languageLevelC1": "Lanjutan Sedang (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Ubah nama",
|
||||
"changeTheNameOfTheChat": "Ubah nama obrolan",
|
||||
"askPangeaBot": "Tanyakan Pangea Bot untuk definisi kontekstual.",
|
||||
|
|
|
|||
|
|
@ -3294,13 +3294,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Es in apprendage:",
|
||||
"joinWithClassCode": "Joinar al curso",
|
||||
"joinWithClassCodeHint": "Entera le codice de invitation",
|
||||
"languageLevelPreA1": "Vermente Novice (Pre A1)",
|
||||
"languageLevelA1": "Novice (A1)",
|
||||
"languageLevelA2": "Elementari (A2)",
|
||||
"languageLevelB1": "Intermedie (B1)",
|
||||
"languageLevelB2": "Superiore Intermedie (B2)",
|
||||
"languageLevelC1": "Avanzate (C1)",
|
||||
"languageLevelC2": "Maestria (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Novice High (A2)",
|
||||
"languageLevelB1": "Intermediate Mid (B1)",
|
||||
"languageLevelB2": "Advanced Low (B2)",
|
||||
"languageLevelC1": "Advanced Mid (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Cambiar le nomine",
|
||||
"changeTheNameOfTheChat": "Cambiar le nomine del chat",
|
||||
"askPangeaBot": "Dumanda Pangea Bot por un definition contextual.",
|
||||
|
|
@ -4853,7 +4853,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-10-16 13:31:28.322202",
|
||||
"@@last_modified": "2025-11-04 13:33:55.367913",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:31:31.204302",
|
||||
"@@last_modified": "2025-11-04 13:34:19.072263",
|
||||
"about": "Informazioni",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3410,13 +3410,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Sta imparando:",
|
||||
"joinWithClassCode": "Unisciti al corso",
|
||||
"joinWithClassCodeHint": "Inserisci il codice di invito",
|
||||
"languageLevelPreA1": "Principiante assoluto (Pre A1)",
|
||||
"languageLevelA1": "Principiante (A1)",
|
||||
"languageLevelA2": "Elementare (A2)",
|
||||
"languageLevelB1": "Intermedio (B1)",
|
||||
"languageLevelB2": "Intermedio superiore (B2)",
|
||||
"languageLevelC1": "Avanzato (C1)",
|
||||
"languageLevelC2": "Padronanza (C2)",
|
||||
"languageLevelPreA1": "Principiante Basso (Pre A1)",
|
||||
"languageLevelA1": "Novizio Mid (A1)",
|
||||
"languageLevelA2": "Principiante Alto (A2)",
|
||||
"languageLevelB1": "Intermedio Medio (B1)",
|
||||
"languageLevelB2": "Avanzato Basso (B2)",
|
||||
"languageLevelC1": "Avanzato Medio (C1)",
|
||||
"languageLevelC2": "Superiore (C2)",
|
||||
"changeTheNameOfTheClass": "Cambia il nome",
|
||||
"changeTheNameOfTheChat": "Cambia il nome della chat",
|
||||
"askPangeaBot": "Chiedi a Pangea Bot una definizione contestuale.",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "ja",
|
||||
"@@last_modified": "2025-10-16 13:31:33.790667",
|
||||
"@@last_modified": "2025-11-04 13:35:21.867810",
|
||||
"about": "このアプリについて",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -2774,13 +2774,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "学習中の言語:",
|
||||
"joinWithClassCode": "コースに参加",
|
||||
"joinWithClassCodeHint": "招待コードを入力してください",
|
||||
"languageLevelPreA1": "初心者(Pre A1)",
|
||||
"languageLevelA1": "初級(A1)",
|
||||
"languageLevelA2": "初中級(A2)",
|
||||
"languageLevelB1": "中級(B1)",
|
||||
"languageLevelB2": "上級中級(B2)",
|
||||
"languageLevelC1": "上級(C1)",
|
||||
"languageLevelC2": "熟練(C2)",
|
||||
"languageLevelPreA1": "初心者低 (プレA1)",
|
||||
"languageLevelA1": "初心者ミッド (A1)",
|
||||
"languageLevelA2": "初級高 (A2)",
|
||||
"languageLevelB1": "中級中 (B1)",
|
||||
"languageLevelB2": "上級低 (B2)",
|
||||
"languageLevelC1": "上級中 (C1)",
|
||||
"languageLevelC2": "最上級 (C2)",
|
||||
"changeTheNameOfTheClass": "名前を変更",
|
||||
"changeTheNameOfTheChat": "チャットの名前を変更",
|
||||
"askPangeaBot": "Pangea Botにコンテキスト定義を尋ねる。",
|
||||
|
|
|
|||
|
|
@ -1516,13 +1516,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "სწავლობს:",
|
||||
"joinWithClassCode": "შეერთება კურსში",
|
||||
"joinWithClassCodeHint": "შეიყვანეთ მოწვევის კოდი",
|
||||
"languageLevelPreA1": "სინამდვილე დამწყები (Pre A1)",
|
||||
"languageLevelA1": "დამწყები (A1)",
|
||||
"languageLevelA2": "საშუალო (A2)",
|
||||
"languageLevelB1": "შუალედური (B1)",
|
||||
"languageLevelB2": "ზედა შუალედური (B2)",
|
||||
"languageLevelC1": "მაღალი დონის (C1)",
|
||||
"languageLevelC2": "მასტერული (C2)",
|
||||
"languageLevelPreA1": "ახალი დაბალი (წინა A1)",
|
||||
"languageLevelA1": "ახალი შუა (A1)",
|
||||
"languageLevelA2": "დაწყებითი მაღალი (A2)",
|
||||
"languageLevelB1": "შუალედური საშუალო (B1)",
|
||||
"languageLevelB2": "წინასწარი დაბალი (B2)",
|
||||
"languageLevelC1": "წინასწარი საშუალო (C1)",
|
||||
"languageLevelC2": "უმაღლესი (C2)",
|
||||
"changeTheNameOfTheClass": "შეცვალეთ კლასი",
|
||||
"changeTheNameOfTheChat": "შეცვალეთ ჩატის სახელი",
|
||||
"askPangeaBot": "მოითხოვეთ Pangea Bot-გან კონტექსტუალური განმარტება.",
|
||||
|
|
@ -3075,7 +3075,7 @@
|
|||
"playWithAI": "ამ დროისთვის ითამაშეთ AI-თან",
|
||||
"courseStartDesc": "Pangea Bot მზადაა ნებისმიერ დროს გასასვლელად!\n\n...მაგრამ სწავლა უკეთესია მეგობრებთან ერთად!",
|
||||
"@@locale": "ka",
|
||||
"@@last_modified": "2025-10-16 13:31:36.334482",
|
||||
"@@last_modified": "2025-11-04 13:35:34.501028",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:31:39.341446",
|
||||
"@@last_modified": "2025-11-04 13:33:33.344908",
|
||||
"about": "소개",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3367,13 +3367,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "학습 중인 언어:",
|
||||
"joinWithClassCode": "수업 참여",
|
||||
"joinWithClassCodeHint": "초대 코드를 입력하세요",
|
||||
"languageLevelPreA1": "초보자 (Pre A1)",
|
||||
"languageLevelA1": "초급 (A1)",
|
||||
"languageLevelA2": "초급 (A2)",
|
||||
"languageLevelB1": "중급 (B1)",
|
||||
"languageLevelB2": "상급 중급 (B2)",
|
||||
"languageLevelC1": "고급 (C1)",
|
||||
"languageLevelC2": "숙달 (C2)",
|
||||
"languageLevelPreA1": "초급 낮음 (Pre A1)",
|
||||
"languageLevelA1": "초급 중급 (A1)",
|
||||
"languageLevelA2": "초급 고급 (A2)",
|
||||
"languageLevelB1": "중급 중 (B1)",
|
||||
"languageLevelB2": "고급 저 (B2)",
|
||||
"languageLevelC1": "고급 중 (C1)",
|
||||
"languageLevelC2": "우수 (C2)",
|
||||
"changeTheNameOfTheClass": "이름 변경",
|
||||
"changeTheNameOfTheChat": "채팅 이름 변경",
|
||||
"askPangeaBot": "Pangea Bot에게 맥락에 맞는 정의를 요청하세요.",
|
||||
|
|
|
|||
|
|
@ -2783,13 +2783,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Mokosi:",
|
||||
"joinWithClassCode": "Prisijungti prie kurso",
|
||||
"joinWithClassCodeHint": "Įveskite kvietimo kodą",
|
||||
"languageLevelPreA1": "Tikras pradedantysis (Pre A1)",
|
||||
"languageLevelA1": "Pradedantysis (A1)",
|
||||
"languageLevelA2": "Pradedantysis (A2)",
|
||||
"languageLevelB1": "Tarpinis (B1)",
|
||||
"languageLevelB2": "Aukštesnysis tarpinis (B2)",
|
||||
"languageLevelC1": "Pažengęs (C1)",
|
||||
"languageLevelC2": "Meistrystė (C2)",
|
||||
"languageLevelPreA1": "Pradedantysis Žemas (Pre A1)",
|
||||
"languageLevelA1": "Pradedančiojo vidurinis (A1)",
|
||||
"languageLevelA2": "Pradedančiųjų aukštas (A2)",
|
||||
"languageLevelB1": "Vidutinio lygio vidurys (B1)",
|
||||
"languageLevelB2": "Išplėstinis žemas (B2)",
|
||||
"languageLevelC1": "Išplėstinis vidurys (C1)",
|
||||
"languageLevelC2": "Pats aukščiausias (C2)",
|
||||
"changeTheNameOfTheClass": "Pakeisti pavadinimą",
|
||||
"changeTheNameOfTheChat": "Pakeisti pokalbio pavadinimą",
|
||||
"askPangeaBot": "Paklausk Pangea bot'o apie kontekstinę apibrėžimą.",
|
||||
|
|
@ -4342,7 +4342,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-10-16 13:31:41.724130",
|
||||
"@@last_modified": "2025-11-04 13:34:52.927239",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -3419,13 +3419,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Mācās:",
|
||||
"joinWithClassCode": "Pievienoties kursam",
|
||||
"joinWithClassCodeHint": "Ievadiet ielūguma kodu",
|
||||
"languageLevelPreA1": "Ļoti iesācējs (Pre A1)",
|
||||
"languageLevelA1": "Iesācējs (A1)",
|
||||
"languageLevelA2": "Pamatskolas līmenis (A2)",
|
||||
"languageLevelB1": "Vidējais līmenis (B1)",
|
||||
"languageLevelB2": "Augstā vidējā līmenī (B2)",
|
||||
"languageLevelC1": "Uzlabots (C1)",
|
||||
"languageLevelC2": "Meistarība (C2)",
|
||||
"languageLevelPreA1": "Sākuma līmenis Zems (Pre A1)",
|
||||
"languageLevelA1": "Jaunais Vidējais (A1)",
|
||||
"languageLevelA2": "Sākuma augstums (A2)",
|
||||
"languageLevelB1": "Vidējais vidus (B1)",
|
||||
"languageLevelB2": "Augstais zems (B2)",
|
||||
"languageLevelC1": "Augstais vidus (C1)",
|
||||
"languageLevelC2": "Augstākais (C2)",
|
||||
"changeTheNameOfTheClass": "Mainīt nosaukumu",
|
||||
"changeTheNameOfTheChat": "Mainīt čata nosaukumu",
|
||||
"askPangeaBot": "Uzdod Pangea botam jautājumu par kontekstualizētu definīciju.",
|
||||
|
|
@ -4958,7 +4958,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-10-16 13:31:44.701808",
|
||||
"@@last_modified": "2025-11-04 13:34:40.949441",
|
||||
"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",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:31:46.932073",
|
||||
"@@last_modified": "2025-11-04 13:34:26.297705",
|
||||
"about": "Om",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -2346,13 +2346,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Lærer:",
|
||||
"joinWithClassCode": "Bli med i kurs",
|
||||
"joinWithClassCodeHint": "Skriv inn invitasjonskode",
|
||||
"languageLevelPreA1": "Reell nybegynner (Pre A1)",
|
||||
"languageLevelA1": "Nybegynner (A1)",
|
||||
"languageLevelA2": "Elementært (A2)",
|
||||
"languageLevelB1": "Middels (B1)",
|
||||
"languageLevelB2": "Øvre middels (B2)",
|
||||
"languageLevelC1": "Avansert (C1)",
|
||||
"languageLevelC2": "Mestring (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Nybegynner Høy (A2)",
|
||||
"languageLevelB1": "Moderat Mid (B1)",
|
||||
"languageLevelB2": "Avansert Lav (B2)",
|
||||
"languageLevelC1": "Avansert Mid (C1)",
|
||||
"languageLevelC2": "Overlegen (C2)",
|
||||
"changeTheNameOfTheClass": "Endre navnet",
|
||||
"changeTheNameOfTheChat": "Endre navnet på chatten",
|
||||
"askPangeaBot": "Spør Pangea Bot om en kontekstuell definisjon.",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:31:49.093821",
|
||||
"@@last_modified": "2025-11-04 13:34:59.239403",
|
||||
"about": "Over ons",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3430,13 +3430,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Leren:",
|
||||
"joinWithClassCode": "Deelname via cursuscode",
|
||||
"joinWithClassCodeHint": "Voer uitnodigingscode in",
|
||||
"languageLevelPreA1": "Echte Beginner (Pre A1)",
|
||||
"languageLevelA1": "Beginner (A1)",
|
||||
"languageLevelA2": "Elementair (A2)",
|
||||
"languageLevelB1": "Intermediate (B1)",
|
||||
"languageLevelB2": "Upper Intermediate (B2)",
|
||||
"languageLevelC1": "Gevorderd (C1)",
|
||||
"languageLevelC2": "Meesterschap (C2)",
|
||||
"languageLevelPreA1": "Novice Laag (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Beginners Hoog (A2)",
|
||||
"languageLevelB1": "Gemiddeld Midden (B1)",
|
||||
"languageLevelB2": "Geavanceerd Laag (B2)",
|
||||
"languageLevelC1": "Geavanceerd Midden (C1)",
|
||||
"languageLevelC2": "Superieur (C2)",
|
||||
"changeTheNameOfTheClass": "Verander de naam",
|
||||
"changeTheNameOfTheChat": "Verander de naam van de chat",
|
||||
"askPangeaBot": "Vraag Pangea Bot om een contextuele definitie.",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "pl",
|
||||
"@@last_modified": "2025-10-16 13:31:52.022877",
|
||||
"@@last_modified": "2025-11-04 13:35:11.553191",
|
||||
"about": "O aplikacji",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3431,13 +3431,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Uczy się:",
|
||||
"joinWithClassCode": "Dołącz do kursu",
|
||||
"joinWithClassCodeHint": "Wprowadź kod zaproszenia",
|
||||
"languageLevelPreA1": "Prawdziwy początkujący (Pre A1)",
|
||||
"languageLevelA1": "Początkujący (A1)",
|
||||
"languageLevelA2": "Podstawowy (A2)",
|
||||
"languageLevelB1": "Średniozaawansowany (B1)",
|
||||
"languageLevelB2": "Wyższy średniozaawansowany (B2)",
|
||||
"languageLevelC1": "Zaawansowany (C1)",
|
||||
"languageLevelC2": "Mistrzostwo (C2)",
|
||||
"languageLevelPreA1": "Nowicjusz Niski (Pre A1)",
|
||||
"languageLevelA1": "Nowicjusz Środkowy (A1)",
|
||||
"languageLevelA2": "Nowicjusz Wysoki (A2)",
|
||||
"languageLevelB1": "Średniozaawansowany Średni (B1)",
|
||||
"languageLevelB2": "Zaawansowany Niski (B2)",
|
||||
"languageLevelC1": "Zaawansowany Średni (C1)",
|
||||
"languageLevelC2": "Wyższy (C2)",
|
||||
"changeTheNameOfTheClass": "Zmień nazwę",
|
||||
"changeTheNameOfTheChat": "Zmień nazwę czatu",
|
||||
"askPangeaBot": "Zapytaj Pangea Bot o kontekstową definicję.",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:31:54.004418",
|
||||
"@@last_modified": "2025-11-04 13:34:07.487948",
|
||||
"copiedToClipboard": "Copiada para a área de transferência",
|
||||
"@copiedToClipboard": {
|
||||
"type": "String",
|
||||
|
|
@ -3421,13 +3421,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Está aprendendo:",
|
||||
"joinWithClassCode": "Participar do curso",
|
||||
"joinWithClassCodeHint": "Digite o código de convite",
|
||||
"languageLevelPreA1": "Total Iniciante (Pré A1)",
|
||||
"languageLevelA1": "Iniciante (A1)",
|
||||
"languageLevelA2": "Elementar (A2)",
|
||||
"languageLevelB1": "Intermediário (B1)",
|
||||
"languageLevelB2": "Intermediário Superior (B2)",
|
||||
"languageLevelC1": "Avançado (C1)",
|
||||
"languageLevelC2": "Mestria (C2)",
|
||||
"languageLevelPreA1": "Iniciante Baixo (Pré A1)",
|
||||
"languageLevelA1": "Novato Mid (A1)",
|
||||
"languageLevelA2": "Iniciante Alto (A2)",
|
||||
"languageLevelB1": "Intermediário Médio (B1)",
|
||||
"languageLevelB2": "Avançado Baixo (B2)",
|
||||
"languageLevelC1": "Avançado Médio (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Alterar o nome",
|
||||
"changeTheNameOfTheChat": "Alterar o nome do chat",
|
||||
"askPangeaBot": "Peça ao Pangea Bot uma definição contextual.",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:31:56.112352",
|
||||
"@@last_modified": "2025-11-04 13:34:03.353415",
|
||||
"about": "Sobre",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3178,13 +3178,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Está aprendendo:",
|
||||
"joinWithClassCode": "Participar do curso",
|
||||
"joinWithClassCodeHint": "Digite o código de convite",
|
||||
"languageLevelPreA1": "Total Iniciante (Pré A1)",
|
||||
"languageLevelA1": "Iniciante (A1)",
|
||||
"languageLevelA2": "Elementar (A2)",
|
||||
"languageLevelB1": "Intermediário (B1)",
|
||||
"languageLevelB2": "Intermediário Avançado (B2)",
|
||||
"languageLevelC1": "Avançado (C1)",
|
||||
"languageLevelC2": "Mestria (C2)",
|
||||
"languageLevelPreA1": "Novato Baixo (Pré A1)",
|
||||
"languageLevelA1": "Novato Médio (A1)",
|
||||
"languageLevelA2": "Iniciante Alto (A2)",
|
||||
"languageLevelB1": "Intermediário Médio (B1)",
|
||||
"languageLevelB2": "Avançado Baixo (B2)",
|
||||
"languageLevelC1": "Avançado Médio (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Alterar o nome",
|
||||
"changeTheNameOfTheChat": "Alterar o nome do chat",
|
||||
"askPangeaBot": "Pergunte ao Pangea Bot por uma definição contextual.",
|
||||
|
|
|
|||
|
|
@ -2241,13 +2241,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Está a aprender:",
|
||||
"joinWithClassCode": "Juntar-se ao curso",
|
||||
"joinWithClassCodeHint": "Inserir código de convite",
|
||||
"languageLevelPreA1": "Iniciante Verdadeiro (Pré A1)",
|
||||
"languageLevelA1": "Principiante (A1)",
|
||||
"languageLevelA2": "Elementar (A2)",
|
||||
"languageLevelB1": "Intermediário (B1)",
|
||||
"languageLevelB2": "Intermediário Superior (B2)",
|
||||
"languageLevelC1": "Avançado (C1)",
|
||||
"languageLevelC2": "Domínio (C2)",
|
||||
"languageLevelPreA1": "Iniciante Baixo (Pré A1)",
|
||||
"languageLevelA1": "Novato Mid (A1)",
|
||||
"languageLevelA2": "Iniciante Alto (A2)",
|
||||
"languageLevelB1": "Intermediário Médio (B1)",
|
||||
"languageLevelB2": "Avançado Baixo (B2)",
|
||||
"languageLevelC1": "Avançado Médio (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Alterar o nome",
|
||||
"changeTheNameOfTheChat": "Alterar o nome do chat",
|
||||
"askPangeaBot": "Peça ao Pangea Bot uma definição contextual.",
|
||||
|
|
@ -3816,7 +3816,7 @@
|
|||
"selectAll": "Selecionar tudo",
|
||||
"deselectAll": "Desmarcar tudo",
|
||||
"@@locale": "pt_PT",
|
||||
"@@last_modified": "2025-10-16 13:31:58.159625",
|
||||
"@@last_modified": "2025-11-04 13:34:34.127034",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:32:00.774739",
|
||||
"@@last_modified": "2025-11-04 13:33:50.681488",
|
||||
"about": "Despre",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -2850,13 +2850,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Învățând:",
|
||||
"joinWithClassCode": "Participă la curs",
|
||||
"joinWithClassCodeHint": "Introduceți codul de invitație",
|
||||
"languageLevelPreA1": "Începător adevărat (Pre A1)",
|
||||
"languageLevelA1": "Începător (A1)",
|
||||
"languageLevelA2": "Elementar (A2)",
|
||||
"languageLevelB1": "Intermediar (B1)",
|
||||
"languageLevelB2": "Upper Intermediate (B2)",
|
||||
"languageLevelC1": "Avansat (C1)",
|
||||
"languageLevelC2": "Maestru (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Novice Înalt (A2)",
|
||||
"languageLevelB1": "Intermediar Mediu (B1)",
|
||||
"languageLevelB2": "Avansat Scăzut (B2)",
|
||||
"languageLevelC1": "Avansat Mediu (C1)",
|
||||
"languageLevelC2": "Superior (C2)",
|
||||
"changeTheNameOfTheClass": "Schimbă numele",
|
||||
"changeTheNameOfTheChat": "Schimbă numele chat-ului",
|
||||
"askPangeaBot": "Întreabă Pangea Bot pentru o definiție contextuală.",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "ru",
|
||||
"@@last_modified": "2025-10-16 13:32:02.970247",
|
||||
"@@last_modified": "2025-11-04 13:35:28.162026",
|
||||
"about": "О проекте",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3369,13 +3369,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Учится:",
|
||||
"joinWithClassCode": "Присоединиться к курсу",
|
||||
"joinWithClassCodeHint": "Введите код приглашения",
|
||||
"languageLevelPreA1": "Настоящий новичок (Pre A1)",
|
||||
"languageLevelA1": "Начинающий (A1)",
|
||||
"languageLevelA2": "Элементарный (A2)",
|
||||
"languageLevelB1": "Средний (B1)",
|
||||
"languageLevelB2": "Выше среднего (B2)",
|
||||
"languageLevelC1": "Продвинутый (C1)",
|
||||
"languageLevelC2": "Мастерство (C2)",
|
||||
"languageLevelPreA1": "Новичок Низкий (Pre A1)",
|
||||
"languageLevelA1": "Новичок Мид (A1)",
|
||||
"languageLevelA2": "Начальный высокий (A2)",
|
||||
"languageLevelB1": "Средний средний (B1)",
|
||||
"languageLevelB2": "Продвинутый низкий (B2)",
|
||||
"languageLevelC1": "Продвинутый средний (C1)",
|
||||
"languageLevelC2": "Высший (C2)",
|
||||
"changeTheNameOfTheClass": "Изменить название",
|
||||
"changeTheNameOfTheChat": "Изменить название чата",
|
||||
"askPangeaBot": "Попросите Pangea Bot дать контекстное определение.",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "sk",
|
||||
"@@last_modified": "2025-10-16 13:32:06.139506",
|
||||
"@@last_modified": "2025-11-04 13:33:53.548300",
|
||||
"about": "O aplikácii",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -2054,13 +2054,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Učí sa:",
|
||||
"joinWithClassCode": "Pripojiť sa ku kurzu",
|
||||
"joinWithClassCodeHint": "Zadajte kód pozvania",
|
||||
"languageLevelPreA1": "Úplný začiatočník (Pre A1)",
|
||||
"languageLevelA1": "Začiatočník (A1)",
|
||||
"languageLevelA2": "Elementárny (A2)",
|
||||
"languageLevelB1": "Stredne pokročilý (B1)",
|
||||
"languageLevelB2": "Vyšší stredne pokročilý (B2)",
|
||||
"languageLevelC1": "Pokročilý (C1)",
|
||||
"languageLevelC2": "Majstrovstvo (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Nováčik Stred (A1)",
|
||||
"languageLevelA2": "Začiatočník Vysoký (A2)",
|
||||
"languageLevelB1": "Stredne Pokročilý Stredný (B1)",
|
||||
"languageLevelB2": "Pokročilý Nízky (B2)",
|
||||
"languageLevelC1": "Pokročilý Stredný (C1)",
|
||||
"languageLevelC2": "Nadpriemerný (C2)",
|
||||
"changeTheNameOfTheClass": "Zmeniť názov",
|
||||
"changeTheNameOfTheChat": "Zmeniť názov chatu",
|
||||
"askPangeaBot": "Požiadať Pangea Bota o kontextovú definíciu.",
|
||||
|
|
|
|||
|
|
@ -1386,13 +1386,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Se uči:",
|
||||
"joinWithClassCode": "Pridruži se tečaju",
|
||||
"joinWithClassCodeHint": "Vnesi kodo povabila",
|
||||
"languageLevelPreA1": "Popoln začetnik (Pre A1)",
|
||||
"languageLevelA1": "Začetnik (A1)",
|
||||
"languageLevelA2": "Elementarni (A2)",
|
||||
"languageLevelB1": "Srednjega nivoja (B1)",
|
||||
"languageLevelB2": "Višji srednji nivo (B2)",
|
||||
"languageLevelC1": "Napredno (C1)",
|
||||
"languageLevelC2": "Obvladovanje (C2)",
|
||||
"languageLevelPreA1": "Novice Low (Pre A1)",
|
||||
"languageLevelA1": "Novice Mid (A1)",
|
||||
"languageLevelA2": "Visoka začetna (A2)",
|
||||
"languageLevelB1": "Srednja (B1)",
|
||||
"languageLevelB2": "Nizka napredna (B2)",
|
||||
"languageLevelC1": "Srednja napredna (C1)",
|
||||
"languageLevelC2": "Visoka (C2)",
|
||||
"changeTheNameOfTheClass": "Spremeni ime",
|
||||
"changeTheNameOfTheChat": "Spremeni ime klepeta",
|
||||
"askPangeaBot": "Vprašajte Pangea Bota za kontekstualno definicijo.",
|
||||
|
|
@ -2945,7 +2945,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-10-16 13:32:09.029952",
|
||||
"@@last_modified": "2025-11-04 13:34:14.532285",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:32:11.725645",
|
||||
"@@last_modified": "2025-11-04 13:35:36.950474",
|
||||
"about": "О програму",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -2467,13 +2467,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Учится:",
|
||||
"joinWithClassCode": "Присоединиться к курсу",
|
||||
"joinWithClassCodeHint": "Введите код приглашения",
|
||||
"languageLevelPreA1": "Почетни почетни (Pre A1)",
|
||||
"languageLevelA1": "Начинајући (A1)",
|
||||
"languageLevelA2": "Основни (A2)",
|
||||
"languageLevelB1": "Средњи (B1)",
|
||||
"languageLevelB2": "Вишњи средњи (B2)",
|
||||
"languageLevelC1": "Напредни (C1)",
|
||||
"languageLevelC2": "Мастерство (C2)",
|
||||
"languageLevelPreA1": "Почетник Низак (Пре A1)",
|
||||
"languageLevelA1": "Почетник Средњи (A1)",
|
||||
"languageLevelA2": "Početni Visoki (A2)",
|
||||
"languageLevelB1": "Srednji Srednji (B1)",
|
||||
"languageLevelB2": "Napredni Niski (B2)",
|
||||
"languageLevelC1": "Napredni Srednji (C1)",
|
||||
"languageLevelC2": "Superiorni (C2)",
|
||||
"changeTheNameOfTheClass": "Промени име",
|
||||
"changeTheNameOfTheChat": "Промени име ћаскања",
|
||||
"askPangeaBot": "Питајте Пангее Бот за контекстуалну дефиницију.",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 16:03:28.457217",
|
||||
"@@last_modified": "2025-11-04 13:35:16.747047",
|
||||
"about": "Om",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3092,13 +3092,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Lär sig:",
|
||||
"joinWithClassCode": "Gå med i kurs",
|
||||
"joinWithClassCodeHint": "Ange inbjudningskod",
|
||||
"languageLevelPreA1": "Äkta nybörjare (Pre A1)",
|
||||
"languageLevelA1": "Nybörjare (A1)",
|
||||
"languageLevelA2": "Elementär (A2)",
|
||||
"languageLevelB1": "Mellanliggande (B1)",
|
||||
"languageLevelB2": "Övre mellanliggande (B2)",
|
||||
"languageLevelC1": "Avancerad (C1)",
|
||||
"languageLevelC2": "Mästerskap (C2)",
|
||||
"languageLevelPreA1": "Novis Låg (Pre A1)",
|
||||
"languageLevelA1": "Novis Mid (A1)",
|
||||
"languageLevelA2": "Nybörjare Hög (A2)",
|
||||
"languageLevelB1": "Medelnivå Mitten (B1)",
|
||||
"languageLevelB2": "Avancerad Låg (B2)",
|
||||
"languageLevelC1": "Avancerad Mitten (C1)",
|
||||
"languageLevelC2": "Överlägsen (C2)",
|
||||
"changeTheNameOfTheClass": "Ändra namnet",
|
||||
"changeTheNameOfTheChat": "Ändra chatnamnet",
|
||||
"askPangeaBot": "Fråga Pangea Bot om en kontextuell definition.",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:32:14.869459",
|
||||
"@@last_modified": "2025-11-04 13:34:57.181084",
|
||||
"acceptedTheInvitation": "👍 {username} அழைப்பை ஏற்றுக்கொண்டது",
|
||||
"@acceptedTheInvitation": {
|
||||
"type": "String",
|
||||
|
|
@ -3307,13 +3307,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "கற்றுக் கொண்டுவரும்:",
|
||||
"joinWithClassCode": "பாடத்துடன் சேரவும்",
|
||||
"joinWithClassCodeHint": "அழைப்பு குறியீட்டை உள்ளிடவும்",
|
||||
"languageLevelPreA1": "உண்மையான ஆரம்பம் (Pre A1)",
|
||||
"languageLevelA1": "தொடக்கம் (A1)",
|
||||
"languageLevelA2": "அடிப்படை (A2)",
|
||||
"languageLevelB1": "இடையிலான (B1)",
|
||||
"languageLevelB2": "மேலான இடையிலான (B2)",
|
||||
"languageLevelC1": "மேம்பட்ட (C1)",
|
||||
"languageLevelC2": "திறமை (C2)",
|
||||
"languageLevelPreA1": "புதியவர் குறைந்த (முன் A1)",
|
||||
"languageLevelA1": "புதிய நடுவண் (A1)",
|
||||
"languageLevelA2": "புதிய உயர்வு (A2)",
|
||||
"languageLevelB1": "மத்திய நடுத்தர (B1)",
|
||||
"languageLevelB2": "மேம்பட்ட குறைந்த (B2)",
|
||||
"languageLevelC1": "மேம்பட்ட நடுத்தர (C1)",
|
||||
"languageLevelC2": "மேன்மை (C2)",
|
||||
"changeTheNameOfTheClass": "பெயரை மாற்றவும்",
|
||||
"changeTheNameOfTheChat": "செய்தி குழுவின் பெயரை மாற்றவும்",
|
||||
"askPangeaBot": "பங்கேயா பாட்டிடம் ஒரு சூழ்நிலையியல் வரையறையை கேளுங்கள்.",
|
||||
|
|
|
|||
|
|
@ -842,13 +842,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "శిక్షణ పొందుతున్నవారు:",
|
||||
"joinWithClassCode": "కోర్సులో చేరండి",
|
||||
"joinWithClassCodeHint": "ఆహ్వాన కోడ్ను నమోదు చేయండి",
|
||||
"languageLevelPreA1": "నిజమైన ప్రారంభికుడు (Pre A1)",
|
||||
"languageLevelA1": "ప్రారంభికుడు (A1)",
|
||||
"languageLevelA2": "ప్రాథమిక (A2)",
|
||||
"languageLevelB1": "మధ్యస్థ (B1)",
|
||||
"languageLevelB2": "అపురూప మధ్యస్థ (B2)",
|
||||
"languageLevelC1": "అధిక స్థాయి (C1)",
|
||||
"languageLevelC2": "నైపుణ్యము (C2)",
|
||||
"languageLevelPreA1": "నవీన్ తక్కువ (ప్రి A1)",
|
||||
"languageLevelA1": "నవీన్ మిడ్ (A1)",
|
||||
"languageLevelA2": "ప్రారంభం ఉన్నత (A2)",
|
||||
"languageLevelB1": "మధ్యస్థ మిడ్ (B1)",
|
||||
"languageLevelB2": "అధిక నిమ్న (B2)",
|
||||
"languageLevelC1": "అధిక మిడ్ (C1)",
|
||||
"languageLevelC2": "ఉన్నత (C2)",
|
||||
"changeTheNameOfTheClass": "పేరు మార్చండి",
|
||||
"changeTheNameOfTheChat": "చాట్ పేరును మార్చండి",
|
||||
"askPangeaBot": "పాంజియా బాట్ను ప్రశ్నించండి, సందర్భానుసార వివరణ కోసం.",
|
||||
|
|
@ -2401,7 +2401,7 @@
|
|||
"playWithAI": "ఇప్పుడే AI తో ఆడండి",
|
||||
"courseStartDesc": "పాంజియా బాట్ ఎప్పుడైనా సిద్ధంగా ఉంటుంది!\n\n...కానీ స్నేహితులతో నేర్చుకోవడం మెరుగైనది!",
|
||||
"@@locale": "te",
|
||||
"@@last_modified": "2025-10-16 13:32:18.059294",
|
||||
"@@last_modified": "2025-11-04 13:34:50.382080",
|
||||
"@setCustomPermissionLevel": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -3378,13 +3378,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "กำลังเรียนรู้:",
|
||||
"joinWithClassCode": "เข้าร่วมคอร์ส",
|
||||
"joinWithClassCodeHint": "ป้อนรหัสเชิญ",
|
||||
"languageLevelPreA1": "ผู้เริ่มต้นจริง (Pre A1)",
|
||||
"languageLevelA1": "ผู้เริ่มต้น (A1)",
|
||||
"languageLevelA2": "ระดับพื้นฐาน (A2)",
|
||||
"languageLevelB1": "ระดับกลาง (B1)",
|
||||
"languageLevelB2": "ระดับกลางขั้นสูง (B2)",
|
||||
"languageLevelC1": "ระดับสูง (C1)",
|
||||
"languageLevelC2": "เชี่ยวชาญ (C2)",
|
||||
"languageLevelPreA1": "ระดับเริ่มต้นต่ำ (Pre A1)",
|
||||
"languageLevelA1": "มือใหม่ ระดับกลาง (A1)",
|
||||
"languageLevelA2": "ระดับเริ่มต้นสูง (A2)",
|
||||
"languageLevelB1": "ระดับกลางกลาง (B1)",
|
||||
"languageLevelB2": "ระดับสูงต่ำ (B2)",
|
||||
"languageLevelC1": "ระดับสูงกลาง (C1)",
|
||||
"languageLevelC2": "ระดับสูงสุด (C2)",
|
||||
"changeTheNameOfTheClass": "เปลี่ยนชื่อ",
|
||||
"changeTheNameOfTheChat": "เปลี่ยนชื่อแชท",
|
||||
"askPangeaBot": "ถาม Pangea Bot เพื่อคำจำกัดความตามบริบท",
|
||||
|
|
@ -4937,7 +4937,7 @@
|
|||
"playWithAI": "เล่นกับ AI ชั่วคราว",
|
||||
"courseStartDesc": "Pangea Bot พร้อมที่จะเริ่มต้นได้ทุกเมื่อ!\n\n...แต่การเรียนรู้ดีกว่ากับเพื่อน!",
|
||||
"@@locale": "th",
|
||||
"@@last_modified": "2025-10-16 13:32:20.092719",
|
||||
"@@last_modified": "2025-11-04 13:34:32.284237",
|
||||
"@alwaysUse24HourFormat": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "tr",
|
||||
"@@last_modified": "2025-10-16 13:32:23.571063",
|
||||
"@@last_modified": "2025-11-04 13:34:47.775542",
|
||||
"about": "Hakkında",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3314,13 +3314,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Öğrenen:",
|
||||
"joinWithClassCode": "Derse katıl",
|
||||
"joinWithClassCodeHint": "Davet kodunu girin",
|
||||
"languageLevelPreA1": "Gerçek Başlangıç (Pre A1)",
|
||||
"languageLevelA1": "Başlangıç (A1)",
|
||||
"languageLevelA2": "Temel (A2)",
|
||||
"languageLevelB1": "Orta Seviye (B1)",
|
||||
"languageLevelB2": "Üst Orta (B2)",
|
||||
"languageLevelC1": "İleri (C1)",
|
||||
"languageLevelC2": "Ustalık (C2)",
|
||||
"languageLevelPreA1": "Acemi Düşük (Pre A1)",
|
||||
"languageLevelA1": "Acemi Orta (A1)",
|
||||
"languageLevelA2": "Yeni Başlayan Yüksek (A2)",
|
||||
"languageLevelB1": "Orta Seviye Orta (B1)",
|
||||
"languageLevelB2": "İleri Seviye Düşük (B2)",
|
||||
"languageLevelC1": "İleri Seviye Orta (C1)",
|
||||
"languageLevelC2": "Üst Düzey (C2)",
|
||||
"changeTheNameOfTheClass": "İsmi değiştir",
|
||||
"changeTheNameOfTheChat": "Sohbetin adını değiştir",
|
||||
"askPangeaBot": "Pangea Bot'tan bağlam tanımı isteyin.",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "uk",
|
||||
"@@last_modified": "2025-10-16 13:32:26.039817",
|
||||
"@@last_modified": "2025-11-04 13:34:20.995929",
|
||||
"about": "Про застосунок",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3433,13 +3433,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "Вивчає:",
|
||||
"joinWithClassCode": "Приєднатися до курсу",
|
||||
"joinWithClassCodeHint": "Введіть код запрошення",
|
||||
"languageLevelPreA1": "Досвідчений початківець (Pre A1)",
|
||||
"languageLevelA1": "Початковий (A1)",
|
||||
"languageLevelA2": "Елементарний (A2)",
|
||||
"languageLevelB1": "Середній (B1)",
|
||||
"languageLevelB2": "Вищий середній (B2)",
|
||||
"languageLevelC1": "Просунутий (C1)",
|
||||
"languageLevelC2": "Майстерність (C2)",
|
||||
"languageLevelPreA1": "Новачок Низький (Перед A1)",
|
||||
"languageLevelA1": "Новачок Середній (A1)",
|
||||
"languageLevelA2": "Початковий високий (A2)",
|
||||
"languageLevelB1": "Середній середній (B1)",
|
||||
"languageLevelB2": "Високий низький (B2)",
|
||||
"languageLevelC1": "Високий середній (C1)",
|
||||
"languageLevelC2": "Вищий (C2)",
|
||||
"changeTheNameOfTheClass": "Змінити назву",
|
||||
"changeTheNameOfTheChat": "Змінити назву чату",
|
||||
"askPangeaBot": "Запитайте у Pangea Bot про контекстуальне визначення.",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:32:28.677939",
|
||||
"@@last_modified": "2025-11-04 13:34:54.956294",
|
||||
"about": "Giới thiệu",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -1814,13 +1814,13 @@
|
|||
"mustBe13": "Bạn phải ít nhất 13 tuổi",
|
||||
"yourBirthdayPleaseShort": "Vui lòng chọn nhóm tuổi của bạn",
|
||||
"joinWithClassCodeHint": "Nhập mã mời",
|
||||
"languageLevelPreA1": "Hoàn toàn mới (Pre A1)",
|
||||
"languageLevelA1": "Sơ cấp (A1)",
|
||||
"languageLevelA2": "Căn bản (A2)",
|
||||
"languageLevelB1": "Trung cấp (B1)",
|
||||
"languageLevelB2": "Trung cấp cao (B2)",
|
||||
"languageLevelC1": "Nâng cao (C1)",
|
||||
"languageLevelC2": "Thành thạo (C2)",
|
||||
"languageLevelPreA1": "Người mới bắt đầu Thấp (Pre A1)",
|
||||
"languageLevelA1": "Người mới giữa (A1)",
|
||||
"languageLevelA2": "Người mới cao (A2)",
|
||||
"languageLevelB1": "Trung cấp trung bình (B1)",
|
||||
"languageLevelB2": "Cao cấp thấp (B2)",
|
||||
"languageLevelC1": "Cao cấp trung bình (C1)",
|
||||
"languageLevelC2": "Cao cấp (C2)",
|
||||
"changeTheNameOfTheClass": "Đổi tên",
|
||||
"changeTheNameOfTheChat": "Đổi tên trò chuyện",
|
||||
"welcomeToYourNewClass": "Chào mừng! 🙂",
|
||||
|
|
@ -5757,5 +5757,33 @@
|
|||
"@highlightVocabTooltip": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelPreA1": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelA1": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelA2": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelB1": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelB2": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelC1": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
},
|
||||
"@languageLevelC2": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
}
|
||||
}
|
||||
|
|
@ -765,13 +765,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "正在學習:",
|
||||
"joinWithClassCode": "加入課程",
|
||||
"joinWithClassCodeHint": "輸入邀請碼",
|
||||
"languageLevelPreA1": "真正的初學者(Pre A1)",
|
||||
"languageLevelA1": "初學者(A1)",
|
||||
"languageLevelA2": "初級(A2)",
|
||||
"languageLevelB1": "中級(B1)",
|
||||
"languageLevelB2": "中高級(B2)",
|
||||
"languageLevelC1": "高級(C1)",
|
||||
"languageLevelC2": "精通(C2)",
|
||||
"languageLevelPreA1": "新手低級 (Pre A1)",
|
||||
"languageLevelA1": "新手中級 (A1)",
|
||||
"languageLevelA2": "初學者高級 (A2)",
|
||||
"languageLevelB1": "中級中 (B1)",
|
||||
"languageLevelB2": "高級低 (B2)",
|
||||
"languageLevelC1": "高級中 (C1)",
|
||||
"languageLevelC2": "卓越 (C2)",
|
||||
"changeTheNameOfTheClass": "更改名稱",
|
||||
"changeTheNameOfTheChat": "更改聊天名稱",
|
||||
"askPangeaBot": "向Pangea機器人詢問語境定義。",
|
||||
|
|
@ -2341,7 +2341,7 @@
|
|||
"selectAll": "全選",
|
||||
"deselectAll": "取消全選",
|
||||
"@@locale": "yue",
|
||||
"@@last_modified": "2025-10-16 13:32:30.797608",
|
||||
"@@last_modified": "2025-11-04 13:34:17.294087",
|
||||
"@ignoreUser": {
|
||||
"type": "String",
|
||||
"placeholders": {}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"@@locale": "zh",
|
||||
"@@last_modified": "2025-10-16 13:32:33.841766",
|
||||
"@@last_modified": "2025-11-04 13:35:03.855586",
|
||||
"about": "关于",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3434,13 +3434,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "正在学习:",
|
||||
"joinWithClassCode": "加入课程",
|
||||
"joinWithClassCodeHint": "输入邀请码",
|
||||
"languageLevelPreA1": "初学者(Pre A1)",
|
||||
"languageLevelA1": "初级(A1)",
|
||||
"languageLevelA2": "基础(A2)",
|
||||
"languageLevelB1": "中级(B1)",
|
||||
"languageLevelB2": "中高级(B2)",
|
||||
"languageLevelC1": "高级(C1)",
|
||||
"languageLevelC2": "精通(C2)",
|
||||
"languageLevelPreA1": "初学者低级(预 A1)",
|
||||
"languageLevelA1": "新手中级 (A1)",
|
||||
"languageLevelA2": "初学者高水平 (A2)",
|
||||
"languageLevelB1": "中级中水平 (B1)",
|
||||
"languageLevelB2": "高级低水平 (B2)",
|
||||
"languageLevelC1": "高级中水平 (C1)",
|
||||
"languageLevelC2": "优秀 (C2)",
|
||||
"changeTheNameOfTheClass": "更改名称",
|
||||
"changeTheNameOfTheChat": "更改聊天名称",
|
||||
"askPangeaBot": "向Pangea机器人询问上下文定义。",
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
"@@last_modified": "2025-10-16 13:32:35.882830",
|
||||
"@@last_modified": "2025-11-04 13:34:35.934573",
|
||||
"about": "關於",
|
||||
"@about": {
|
||||
"type": "String",
|
||||
|
|
@ -3410,13 +3410,13 @@
|
|||
"iWantALanguagePartnerWhoIsLearning": "正在學習:",
|
||||
"joinWithClassCode": "加入課程",
|
||||
"joinWithClassCodeHint": "輸入邀請碼",
|
||||
"languageLevelPreA1": "完全初學者(Pre A1)",
|
||||
"languageLevelA1": "初級(A1)",
|
||||
"languageLevelA2": "Elementary(A2)",
|
||||
"languageLevelB1": "中級(B1)",
|
||||
"languageLevelB2": "中高級(B2)",
|
||||
"languageLevelC1": "高級(C1)",
|
||||
"languageLevelC2": "精通(C2)",
|
||||
"languageLevelPreA1": "新手低級(Pre A1)",
|
||||
"languageLevelA1": "新手中級 (A1)",
|
||||
"languageLevelA2": "初學者高級 (A2)",
|
||||
"languageLevelB1": "中級中 (B1)",
|
||||
"languageLevelB2": "高級低 (B2)",
|
||||
"languageLevelC1": "高級中 (C1)",
|
||||
"languageLevelC2": "優秀 (C2)",
|
||||
"changeTheNameOfTheClass": "更改名稱",
|
||||
"changeTheNameOfTheChat": "更改聊天名稱",
|
||||
"askPangeaBot": "向Pangea機器人詢問語境定義。",
|
||||
|
|
|
|||
9
scripts/translate/keys_to_translate.txt
Normal file
9
scripts/translate/keys_to_translate.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
# Example keys file for translate_keys.py
|
||||
# Lines starting with # are comments and will be ignored
|
||||
# One key per line
|
||||
|
||||
languageLevelA2
|
||||
languageLevelB1
|
||||
languageLevelB2
|
||||
languageLevelC1
|
||||
languageLevelC2
|
||||
495
scripts/translate/translate_keys.py
Executable file
495
scripts/translate/translate_keys.py
Executable file
|
|
@ -0,0 +1,495 @@
|
|||
#!/usr/bin/env python3
|
||||
"""
|
||||
Translate a specific set of keys in the ARB files.
|
||||
|
||||
This script accepts a list of keys and:
|
||||
1. Finds the value in the source ARB file (intl_en.arb)
|
||||
2. Finds each instance of the value in the target ARB files (intl_*.arb)
|
||||
3. Translates the value using OpenAI (reusing translate.py model)
|
||||
4. Replaces the value in the target ARB files with the translated value
|
||||
|
||||
Usage:
|
||||
python translate_keys.py --keys key1 key2 key3
|
||||
python translate_keys.py --keys-file keys.txt
|
||||
|
||||
|
||||
WARNING: Has not been tested extensively. Has not been tested with pluralization or
|
||||
complex placeholders. Verify results before committing.
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Any, List
|
||||
|
||||
try:
|
||||
from openai import OpenAI
|
||||
except ImportError:
|
||||
print("Error: openai package not found. Please install it with: pip install openai")
|
||||
sys.exit(1)
|
||||
|
||||
# We'll implement all necessary functions locally to avoid path issues
|
||||
|
||||
# Get the client root directory (where this script is run from when called as module)
|
||||
client_root = (
|
||||
Path.cwd() if Path.cwd().name == "client" else Path(__file__).parent.parent.parent
|
||||
)
|
||||
l10n_dir = client_root / "lib" / "l10n"
|
||||
|
||||
|
||||
def load_translations(lang_code: str) -> dict[str, str]:
|
||||
"""Load translations for a language code using the correct path."""
|
||||
import json
|
||||
|
||||
path_to_translations = l10n_dir / f"intl_{lang_code}.arb"
|
||||
if not path_to_translations.exists():
|
||||
translations = {}
|
||||
else:
|
||||
with open(path_to_translations, encoding="utf-8") as f:
|
||||
translations = json.loads(f.read())
|
||||
|
||||
return translations
|
||||
|
||||
|
||||
def load_supported_languages() -> List[tuple[str, str]]:
|
||||
"""Load the supported languages from the languages.json file with correct path."""
|
||||
import json
|
||||
|
||||
languages_path = client_root / "scripts" / "languages.json"
|
||||
with open(languages_path, "r", encoding="utf-8") as f:
|
||||
raw_languages = json.load(f)
|
||||
|
||||
languages: List[tuple[str, str]] = []
|
||||
for lang in raw_languages:
|
||||
assert isinstance(lang, dict), "Each language entry must be a dictionary."
|
||||
language_code = lang.get("language_code", None)
|
||||
language_name = lang.get("language_name", None)
|
||||
assert (
|
||||
language_code and language_name
|
||||
), f"Each language must have a 'language_code' and 'language_name'. Found: {lang}"
|
||||
languages.append((language_code, language_name))
|
||||
return languages
|
||||
|
||||
|
||||
def save_translations(lang_code: str, translations: dict[str, str]) -> None:
|
||||
"""Save translations for a language code using the correct path."""
|
||||
import json
|
||||
from collections import OrderedDict
|
||||
from datetime import datetime
|
||||
|
||||
path_to_translations = l10n_dir / f"intl_{lang_code}.arb"
|
||||
|
||||
translations["@@locale"] = lang_code
|
||||
translations["@@last_modified"] = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")
|
||||
|
||||
# Load existing data to preserve order if exists.
|
||||
if path_to_translations.exists():
|
||||
with open(path_to_translations, "r", encoding="utf-8") as f:
|
||||
try:
|
||||
existing_data = json.load(f, object_pairs_hook=OrderedDict)
|
||||
except json.JSONDecodeError:
|
||||
existing_data = OrderedDict()
|
||||
else:
|
||||
existing_data = OrderedDict()
|
||||
|
||||
# Update existing keys and append new keys (preserving existing order).
|
||||
for key, value in translations.items():
|
||||
if key in existing_data:
|
||||
existing_data[key] = value # update value; order remains unchanged
|
||||
else:
|
||||
existing_data[key] = value # new key appended at the end
|
||||
|
||||
with open(path_to_translations, "w", encoding="utf-8") as f:
|
||||
f.write(json.dumps(existing_data, indent=2, ensure_ascii=False))
|
||||
|
||||
|
||||
def reconcile_metadata(
|
||||
lang_code: str,
|
||||
translation_keys: List[str],
|
||||
english_translations_dict: dict[str, Any],
|
||||
) -> None:
|
||||
"""
|
||||
For each translation key, update its metadata (the key prefixed with '@') by merging
|
||||
any existing metadata with computed metadata. For basic translations, if no metadata exists,
|
||||
add it; otherwise, leave it as is.
|
||||
"""
|
||||
translations = load_translations(lang_code)
|
||||
|
||||
for key in translation_keys:
|
||||
# Skip keys that weren't successfully translated
|
||||
if key not in translations:
|
||||
continue
|
||||
|
||||
translation = translations[key]
|
||||
meta_key = f"@{key}"
|
||||
existing_meta = translations.get(meta_key, {})
|
||||
assert isinstance(translation, str)
|
||||
|
||||
# Case 1: Basic translations, no placeholders.
|
||||
if "{" not in translation:
|
||||
if not existing_meta:
|
||||
translations[meta_key] = {"type": "String", "placeholders": {}}
|
||||
# if metadata exists, leave it as is.
|
||||
|
||||
# Case 2: Translations with placeholders (no pluralization).
|
||||
elif (
|
||||
"{" in translation
|
||||
and "plural," not in translation
|
||||
and "other{" not in translation
|
||||
):
|
||||
# Compute placeholders.
|
||||
computed_placeholders = {}
|
||||
for placeholder in translation.split("{")[1:]:
|
||||
placeholder_name = placeholder.split("}")[0]
|
||||
computed_placeholders[placeholder_name] = {}
|
||||
# Obtain placeholder type from english translation or default to {}
|
||||
placeholder_type = (
|
||||
english_translations_dict.get(meta_key, {})
|
||||
.get("placeholders", {})
|
||||
.get(placeholder_name, {})
|
||||
.get("type")
|
||||
)
|
||||
if placeholder_type:
|
||||
computed_placeholders[placeholder_name]["type"] = placeholder_type
|
||||
if existing_meta:
|
||||
# Merge computed placeholders into existing metadata.
|
||||
existing_meta.setdefault("type", "String")
|
||||
existing_meta["placeholders"] = computed_placeholders
|
||||
translations[meta_key] = existing_meta
|
||||
else:
|
||||
# Obtain type from english translation or default to "String".
|
||||
translation_type = english_translations_dict.get(meta_key, {}).get(
|
||||
"type", "String"
|
||||
)
|
||||
translations[meta_key] = {
|
||||
"type": translation_type,
|
||||
"placeholders": computed_placeholders,
|
||||
}
|
||||
|
||||
# Case 3: Translations with pluralization.
|
||||
elif (
|
||||
"{" in translation and "plural," in translation and "other{" in translation
|
||||
):
|
||||
# Extract placeholders appearing before the plural part.
|
||||
prefix = translation.split("plural,")[0].split("{")[1]
|
||||
placeholders_list = [
|
||||
p.strip() for p in prefix.split(",") if p.strip() != ""
|
||||
]
|
||||
computed_placeholders = {ph: {} for ph in placeholders_list}
|
||||
for ph in placeholders_list:
|
||||
# Obtain placeholder type from english translation or default to {}
|
||||
placeholder_type = (
|
||||
english_translations_dict.get(meta_key, {})
|
||||
.get("placeholders", {})
|
||||
.get(ph, {})
|
||||
.get("type")
|
||||
)
|
||||
if placeholder_type:
|
||||
computed_placeholders[ph]["type"] = placeholder_type
|
||||
if existing_meta:
|
||||
existing_meta.setdefault("type", "String")
|
||||
existing_meta["placeholders"] = computed_placeholders
|
||||
translations[meta_key] = existing_meta
|
||||
else:
|
||||
# Obtain type from english translation or default to "String".
|
||||
translation_type = english_translations_dict.get(meta_key, {}).get(
|
||||
"type", "String"
|
||||
)
|
||||
translations[meta_key] = {
|
||||
"type": "String",
|
||||
"placeholders": computed_placeholders,
|
||||
}
|
||||
|
||||
save_translations(lang_code, translations)
|
||||
|
||||
|
||||
def get_all_target_language_files() -> List[Path]:
|
||||
"""Get all target ARB files (excluding intl_en.arb)."""
|
||||
arb_files = list(l10n_dir.glob("intl_*.arb"))
|
||||
# Filter out the English source file
|
||||
return [f for f in arb_files if f.name != "intl_en.arb"]
|
||||
|
||||
|
||||
def extract_language_code_from_filename(arb_path: Path) -> str:
|
||||
"""Extract language code from ARB filename (e.g., intl_es.arb -> es)."""
|
||||
filename = arb_path.stem # Get filename without extension
|
||||
return filename.replace("intl_", "")
|
||||
|
||||
|
||||
def translate_batch_with_openai(
|
||||
translation_requests: dict[str, str],
|
||||
target_language: str,
|
||||
source_language: str = "English",
|
||||
) -> dict[str, str]:
|
||||
"""
|
||||
Translate a batch of texts using OpenAI API.
|
||||
|
||||
Args:
|
||||
translation_requests: Dictionary of {key: text} to translate
|
||||
target_language: Target language name (e.g., "Spanish", "French")
|
||||
source_language: Source language name (default: "English")
|
||||
|
||||
Returns:
|
||||
Dictionary of {key: translated_text}
|
||||
"""
|
||||
import json
|
||||
|
||||
client = OpenAI()
|
||||
|
||||
# Create a batch translation prompt
|
||||
prompt = f"""
|
||||
Translate the following JSON object from {source_language} to {target_language}.
|
||||
Preserve any placeholders (text within curly braces like {{username}}) exactly as they are.
|
||||
Preserve any special formatting or ICU message format syntax.
|
||||
Return only a JSON object with the same keys but translated values.
|
||||
|
||||
JSON to translate: {json.dumps(translation_requests, indent=2)}
|
||||
"""
|
||||
|
||||
try:
|
||||
chat_completion = client.chat.completions.create(
|
||||
messages=[
|
||||
{
|
||||
"role": "system",
|
||||
"content": "You are a professional translator. You translate text accurately while preserving any placeholders and special formatting. Always respond with valid JSON only.",
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": prompt,
|
||||
},
|
||||
],
|
||||
model="gpt-4o-mini",
|
||||
temperature=0.0,
|
||||
)
|
||||
|
||||
response = chat_completion.choices[0].message.content.strip()
|
||||
|
||||
# Clean up common JSON formatting issues
|
||||
if response.startswith("```json"):
|
||||
response = response[7:]
|
||||
if response.endswith("```"):
|
||||
response = response[:-3]
|
||||
response = response.strip()
|
||||
|
||||
# Parse the JSON response
|
||||
translated_batch = json.loads(response)
|
||||
return translated_batch
|
||||
|
||||
except json.JSONDecodeError as e:
|
||||
print(f"JSON parsing error when translating batch to {target_language}: {e}")
|
||||
print(f"Response was: {response[:200]}...")
|
||||
# Fallback to original texts if parsing fails
|
||||
return translation_requests
|
||||
except (ConnectionError, TimeoutError) as e:
|
||||
print(f"Network error translating batch to {target_language}: {e}")
|
||||
return translation_requests # Return original texts if translation fails
|
||||
except ValueError as e:
|
||||
print(f"API error translating batch to {target_language}: {e}")
|
||||
return translation_requests # Return original texts if translation fails
|
||||
|
||||
|
||||
def get_language_display_name(lang_code: str) -> str:
|
||||
"""Get the display name for a language code."""
|
||||
supported_languages = load_supported_languages()
|
||||
for code, display_name in supported_languages:
|
||||
if code == lang_code:
|
||||
return display_name
|
||||
|
||||
# Fallback mapping for common language codes
|
||||
fallback_names = {
|
||||
"es": "Spanish",
|
||||
"fr": "French",
|
||||
"de": "German",
|
||||
"it": "Italian",
|
||||
"pt": "Portuguese",
|
||||
"pt_PT": "Portuguese",
|
||||
"ja": "Japanese",
|
||||
"ko": "Korean",
|
||||
"zh": "Chinese",
|
||||
"zh_Hant": "Traditional Chinese",
|
||||
"ru": "Russian",
|
||||
"ar": "Arabic",
|
||||
"hi": "Hindi",
|
||||
"nl": "Dutch",
|
||||
"sv": "Swedish",
|
||||
"da": "Danish",
|
||||
"no": "Norwegian",
|
||||
"nb": "Norwegian",
|
||||
"fi": "Finnish",
|
||||
"pl": "Polish",
|
||||
"cs": "Czech",
|
||||
"sk": "Slovak",
|
||||
"hu": "Hungarian",
|
||||
"ro": "Romanian",
|
||||
"bg": "Bulgarian",
|
||||
"hr": "Croatian",
|
||||
"sl": "Slovenian",
|
||||
"et": "Estonian",
|
||||
"lv": "Latvian",
|
||||
"lt": "Lithuanian",
|
||||
"el": "Greek",
|
||||
"tr": "Turkish",
|
||||
"th": "Thai",
|
||||
"vi": "Vietnamese",
|
||||
"id": "Indonesian",
|
||||
"ms": "Malay",
|
||||
"fil": "Filipino",
|
||||
"he": "Hebrew",
|
||||
"uk": "Ukrainian",
|
||||
"be": "Belarusian",
|
||||
"ca": "Catalan",
|
||||
"gl": "Galician",
|
||||
"eu": "Basque",
|
||||
}
|
||||
|
||||
return fallback_names.get(lang_code, lang_code.title())
|
||||
|
||||
|
||||
def translate_keys(keys_to_translate: List[str]) -> None:
|
||||
"""
|
||||
Translate specific keys in all target ARB files using batch translation.
|
||||
|
||||
Args:
|
||||
keys_to_translate: List of keys to translate
|
||||
"""
|
||||
# Load English translations (source)
|
||||
english_translations = load_translations("en")
|
||||
|
||||
# Validate that all keys exist in English
|
||||
missing_keys = [key for key in keys_to_translate if key not in english_translations]
|
||||
if missing_keys:
|
||||
print(
|
||||
f"Error: The following keys were not found in intl_en.arb: {missing_keys}"
|
||||
)
|
||||
return
|
||||
|
||||
# Filter out metadata keys
|
||||
keys_to_translate = [key for key in keys_to_translate if not key.startswith("@")]
|
||||
|
||||
# Get all target ARB files
|
||||
target_files = get_all_target_language_files()
|
||||
|
||||
print(f"Found {len(target_files)} target language files")
|
||||
print(f"Translating {len(keys_to_translate)} keys: {keys_to_translate}")
|
||||
|
||||
# Process keys in batches of 10
|
||||
batch_size = 10
|
||||
|
||||
for arb_file in target_files:
|
||||
lang_code = extract_language_code_from_filename(arb_file)
|
||||
lang_display_name = get_language_display_name(lang_code)
|
||||
|
||||
print(f"\nProcessing {lang_display_name} ({lang_code})...")
|
||||
|
||||
# Load current translations for this language
|
||||
current_translations = load_translations(lang_code)
|
||||
|
||||
# Track which keys were actually updated
|
||||
updated_keys = []
|
||||
|
||||
# Process keys in batches
|
||||
for i in range(0, len(keys_to_translate), batch_size):
|
||||
batch = keys_to_translate[i : i + batch_size]
|
||||
|
||||
# Prepare translation requests for this batch
|
||||
translation_requests = {}
|
||||
for key in batch:
|
||||
english_text = english_translations[key]
|
||||
translation_requests[key] = english_text
|
||||
|
||||
print(
|
||||
f" Translating batch {i//batch_size + 1} ({len(batch)} keys): {batch}"
|
||||
)
|
||||
|
||||
# Translate the batch
|
||||
translated_batch = translate_batch_with_openai(
|
||||
translation_requests, lang_display_name
|
||||
)
|
||||
|
||||
# Update translations and track updated keys
|
||||
for key in batch:
|
||||
if key in translated_batch:
|
||||
translated_text = translated_batch[key]
|
||||
current_translations[key] = translated_text
|
||||
updated_keys.append(key)
|
||||
print(
|
||||
f" {key}: '{english_translations[key]}' -> '{translated_text}'"
|
||||
)
|
||||
else:
|
||||
print(f" Warning: Key '{key}' not found in translation response")
|
||||
|
||||
# Save the updated translations
|
||||
if updated_keys:
|
||||
save_translations(lang_code, current_translations)
|
||||
|
||||
# Reconcile metadata for updated keys
|
||||
reconcile_metadata(lang_code, updated_keys, english_translations)
|
||||
|
||||
print(f" ✓ Updated {len(updated_keys)} keys in {lang_code}")
|
||||
else:
|
||||
print(f" - No keys updated in {lang_code}")
|
||||
|
||||
|
||||
def read_keys_from_file(file_path: Path) -> List[str]:
|
||||
"""Read keys from a text file (one key per line)."""
|
||||
if not file_path.exists():
|
||||
raise FileNotFoundError(f"Keys file not found: {file_path}")
|
||||
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
keys = [
|
||||
line.strip()
|
||||
for line in f
|
||||
if line.strip() and not line.strip().startswith("#")
|
||||
]
|
||||
|
||||
return keys
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Translate specific keys in ARB files",
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||
epilog="""
|
||||
Examples:
|
||||
python translate_keys.py --keys about accept account
|
||||
python -m scripts.translate.translate_keys.py --keys-file scripts.translate.keys_to_translate.txt
|
||||
""",
|
||||
)
|
||||
|
||||
group = parser.add_mutually_exclusive_group(required=True)
|
||||
group.add_argument("--keys", nargs="+", help="List of keys to translate")
|
||||
group.add_argument(
|
||||
"--keys-file",
|
||||
type=Path,
|
||||
help="File containing keys to translate (one per line)",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Get the keys to translate
|
||||
if args.keys:
|
||||
keys_to_translate = args.keys
|
||||
else:
|
||||
keys_to_translate = read_keys_from_file(args.keys_file)
|
||||
|
||||
if not keys_to_translate:
|
||||
print("Error: No keys to translate")
|
||||
sys.exit(1)
|
||||
|
||||
# Change to the client directory so relative paths work
|
||||
original_cwd = Path.cwd()
|
||||
client_dir = Path(__file__).parent.parent.parent
|
||||
|
||||
try:
|
||||
import os
|
||||
|
||||
os.chdir(client_dir)
|
||||
translate_keys(keys_to_translate)
|
||||
finally:
|
||||
os.chdir(original_cwd)
|
||||
|
||||
print("\n✓ Translation complete!")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Loading…
Add table
Reference in a new issue