Enhance audience management features with new components and API integrations

- Added `AssignCoursesModal`, `AudienceMemberRow`, `AudienceTable`, and related components for improved audience management UI.
- Implemented audience invite actions including resend and revoke functionality.
- Updated audience API to support importing members and assigning courses.
- Refactored audience data handling to include status and invite management.
- Improved overall user experience with pagination and selection features in the audience table.
This commit is contained in:
Rotimi Best
2026-03-22 18:42:23 +01:00
parent e9c4082f89
commit 3919ff6c2f
157 changed files with 13183 additions and 872 deletions
@@ -8,7 +8,7 @@ export const ROUTE = {
COURSE: '/course',
LOGIN: '/login',
SIGN_UP: '/signup',
INVITE_TEACHER: '/invite/t',
INVITE: '/invite',
PROFILE: '/profile',
PEOPLE: '/people',
DISCUSSIONS: '/discussions',
@@ -25,7 +25,7 @@ export const PUBLIC_ROUTES = [
ROUTE.LOGIN,
ROUTE.LOGOUT,
ROUTE.SIGN_UP,
`^${ROUTE.INVITE_TEACHER}/.*`,
`^${ROUTE.INVITE}/.*`,
ROUTE.FORGOT,
ROUTE.RESET,
`^${ROUTE.PAGES}/.*`,
@@ -42,7 +42,7 @@ export const ROUTES_TO_HIDE_NAV = [
`^${ROUTE.LOGIN}$`,
`^${ROUTE.SIGN_UP}$`,
ROUTE.LMS_HOME,
`^${ROUTE.INVITE_TEACHER}/.*`,
`^${ROUTE.INVITE}/.*`,
`^/course/.*/enroll$`,
`^${ROUTE.FORGOT}$`,
`^${ROUTE.RESET}$`,
@@ -11,3 +11,14 @@ export function getCioCookieString(cookies: Cookies): string {
.map((c) => `${c.name}=${c.value}`)
.join('; ');
}
export function getHasCioCookies(cookies: Cookies): boolean {
const cioCookies = cookies.getAll().filter((c) => c.name.includes('classroomio'));
if (cioCookies.length === 0) return false;
// check if the cookies doesn't includ ONLY classroomio_locale
const onlyLocaleCookie = cioCookies.every((c) => c.name === 'classroomio_locale');
return !onlyLocaleCookie;
}
@@ -475,7 +475,54 @@
"name": "Navn",
"email": "E-mail",
"date_joined": "Dato tilmeldt",
"upgrade": "Opgrader din plan for at invitere flere elever"
"upgrade": "Opgrader din plan for at invitere flere elever",
"import_users": "Importer brugere",
"search_placeholder": "Søg...",
"status": "Status",
"status_active": "Aktiv",
"status_pending": "Afventer",
"status_expired": "Udløbet",
"status_revoked": "Tilbagekaldt",
"select_all": "Vælg alle",
"selected_count": "{count} valgt",
"assign_courses": "Tildel til kurser",
"invite": {
"row_actions_aria": "Åbne handlinger",
"resend": "Send invitationen igen",
"revoke": "Tilbagekald afventende invitation",
"resend_snackbar_success": "Invitationsmail sendt",
"resend_snackbar_email_failed": "Invitationen blev fornyet, men e-mailen kunne ikke sendes",
"revoke_snackbar_success": "Afventende invitation tilbagekaldt"
},
"assign": {
"title": "Tildel til kurser",
"description": "Giv de valgte brugere adgang til kurser og giv dem eventuelt besked via e-mail.",
"select_courses": "Vælg kurser",
"select_courses_placeholder": "Vælg kurser...",
"send_email": "Send notifikations-e-mail",
"submit": "Tildel",
"cancel": "Annuller",
"snackbar_success": "Tildelt {assigned} brugere til kurser ({alreadyEnrolled} allerede tilmeldt, {emailsSent} e-mails sendt)",
"snackbar_no_courses": "Vælg venligst mindst ét kursus",
"snackbar_failed": "Kunne ikke tildele kurser"
},
"import": {
"title": "Importer brugere",
"description": "Tilføj elever til din organisation ved at indtaste deres e-mailadresser. Tildel dem eventuelt til kurser og send invitationsmails.",
"emails_label": "E-mail-adresser",
"emails_placeholder": "Indtast e-mails adskilt af kommaer, nye linjer eller semikolon\nf.eks. alice@example.com, bob@example.com",
"course_access": "Kursusadgang",
"no_courses": "Ingen kursusopgave",
"all_courses": "Alle kurser",
"select_courses": "Vælg specifikke kurser",
"select_courses_placeholder": "Vælg kurser...",
"send_email": "Send invitationsmail til importerede brugere",
"submit": "Importer brugere",
"back": "Tilbage til Publikum",
"snackbar_success": "Importerede {importerede} brugere ({skipped} eksisterede allerede, {emailsSent} e-mails sendt)",
"snackbar_no_emails": "Indtast venligst mindst én e-mailadresse",
"snackbar_failed": "Kunne ikke importere brugere"
}
},
"community": {
"title": "Fællesskab",
@@ -940,6 +987,8 @@
"complete": "Komplet",
"next": "Næste",
"prev": "Prev",
"prev_shortcut": "Forrige (←)",
"next_shortcut": "Næste (→)",
"disabled": "Funktionen er deaktiveret",
"version_history": {
"title": "Versionshistorik",
@@ -1200,6 +1249,9 @@
},
"edit": {
"accepted_answers_placeholder": "Accepterede svar (kommasepareret)"
},
"review": {
"your_answer_label": "Indsendt:"
}
},
"numeric": {
@@ -1217,6 +1269,11 @@
"tolerance_info": "Tilladt forskel fra den korrekte værdi (f.eks. accepterer 0,5 +/-0,5).",
"correct_value_placeholder": "Korrekt værdi",
"tolerance_placeholder": "Tolerance"
},
"review": {
"your_answer_label": "Indsendt:",
"in_range": "Inden for tolerance",
"out_of_range": "Ydre tolerance"
}
},
"short_answer": {
@@ -1228,6 +1285,10 @@
},
"edit": {
"instructions_placeholder": "Valgfri instruktioner"
},
"review": {
"your_answer_label": "Indsendt:",
"accepted_label": "Accepterede svar"
}
},
"true_false": {
@@ -1291,8 +1352,9 @@
"option_prefix": "Mulighed",
"remove": "Fjern",
"add_option": "Tilføj mulighed",
"correct_badge": "(korrekt)",
"not_set": "Ikke indstillet"
"correct_badge": "korrekt",
"not_set": "Ikke indstillet",
"incorrect_badge": "Forkert"
}
}
},
@@ -1473,7 +1535,10 @@
"cancel": "Annuller"
},
"content_locked_title": "Dette indhold er låst",
"content_locked_description": "Din instruktør har ikke låst dette indhold op endnu. Fuldfør tidligere indhold, eller tjek tilbage senere."
"content_locked_description": "Din instruktør har ikke låst dette indhold op endnu. Fuldfør tidligere indhold, eller tjek tilbage senere.",
"saving": "Gemmer...",
"saved": "Gemt",
"draft_recovery": "Der blev fundet et ikke-gemt udkast til denne lektion. Vil du gendanne den?"
},
"news_feed": {
"heading": "Nyhedsfeed",
@@ -1582,6 +1647,7 @@
"unpublished": "Upubliceret",
"continue_course": "Fortsæt",
"learn_more": "Få flere oplysninger",
"tags_overflow_aria": "{count} flere tags",
"list_view": {
"title": "Titel",
"description": "Beskrivelse",
@@ -2245,7 +2311,8 @@
"email_password_disabled_message": "E-mail/adgangskodelogin er deaktiveret for denne organisation.",
"google_auth_disabled": "Google-godkendelse er deaktiveret.",
"signup_disabled_error": "Tilmelding er deaktiveret for denne organisation. Kontakt venligst din administrator.",
"or_continue_with": "Eller fortsæt med e-mail og adgangskode"
"or_continue_with": "Eller fortsæt med e-mail og adgangskode",
"sso_enabled": "{provider} er aktiveret for denne organisation"
},
"tabs": {
"general": "Generelt",
@@ -2471,7 +2538,8 @@
"edit_group": "Rediger gruppe",
"edit_tag": "Rediger tag",
"save": "Gem",
"cancel": "Annuller"
"cancel": "Annuller",
"actions_menu": "Tag handlinger"
},
"common": {
"not_available": "N/A"
@@ -2480,9 +2548,13 @@
"invite": {
"organization": {
"page_title": "Tilmeld dig {orgName} på ClassroomIO",
"role_label": "Rolle: {role}",
"email_label": "Inviteret e-mail: {email}",
"join_button": "Deltag i organisationen",
"invitation_student": "Du er blevet inviteret til {orgName} som elev.",
"invitation_teacher": "Du er blevet inviteret til {orgName} som lærer.",
"invitation_admin": "Du er blevet inviteret til {orgName} som administrator.",
"invitation_fallback": "Du er blevet inviteret til {orgName} som {role}.",
"email_line": "E-mail: {email}",
"accept_button": "Acceptér invitation",
"go_to_dashboard": "Gå til dashboard",
"messages": {
"email_mismatch": "Du er logget ind med en anden e-mail end denne invitation.",
"expired": "Dette invitationslink er udløbet.",
@@ -2520,6 +2592,17 @@
"cancel": "Cancel",
"save": "Create key"
}
},
"usage": {
"title": "Anvendelse og grænser",
"description": "MCP er tilgængelig på alle abonnementer, men brugen styres med månedlige automatiseringskreditter og nøglegrænser.",
"credits_title": "Kreditter tilbage",
"credits_description": "Muterende MCP-handlinger bruger kreditter. Læsehandlinger er gratis.",
"keys_title": "Aktive nøgler",
"keys_description": "Brug én MCP-nøgle pr. integration, så adgang kan roteres eller tilbagekaldes rent.",
"rate_limits_title": "Satsgrænser",
"rate_limits_description": "Læs/skriv/publicér anmodninger tilladt pr. minut.",
"used_label": "Brugt:"
}
},
"keys": {
@@ -2534,7 +2617,11 @@
"never_used": "Aldrig",
"scopes_label": "Omfang:",
"revoke_confirm": "Vil du tilbagekalde denne automatiseringsnøgle?",
"rotate_confirm": "Drej denne automatiseringsnøgle?"
"rotate_confirm": "Drej denne automatiseringsnøgle?",
"table_key": "Nøgle",
"table_status": "Status",
"table_created": "Oprettet",
"table_last_used": "Sidst brugt"
},
"clients": {
"claude_code": "Claude kode",
@@ -475,7 +475,54 @@
"name": "Name",
"email": "E-Mail",
"date_joined": "Datum des Beitritts",
"upgrade": "Aktualisieren Sie Ihren Plan, um mehr Studenten einzuladen"
"upgrade": "Aktualisieren Sie Ihren Plan, um mehr Studenten einzuladen",
"import_users": "Benutzer importieren",
"search_placeholder": "Suchen…",
"status": "Status",
"status_active": "Aktiv",
"status_pending": "Ausstehend",
"status_expired": "Abgelaufen",
"status_revoked": "Widerrufen",
"select_all": "Alles auswählen",
"selected_count": "{count} ausgewählt",
"assign_courses": "Zu Kursen zuweisen",
"invite": {
"row_actions_aria": "Offene Aktionen",
"resend": "Einladung erneut senden",
"revoke": "Ausstehende Einladung widerrufen",
"resend_snackbar_success": "Einladungs-E-Mail gesendet",
"resend_snackbar_email_failed": "Die Einladung wurde erneuert, die E-Mail konnte jedoch nicht gesendet werden",
"revoke_snackbar_success": "Ausstehende Einladung widerrufen"
},
"assign": {
"title": "Zu Kursen zuweisen",
"description": "Gewähren Sie den ausgewählten Benutzern Zugriff auf Kurse und benachrichtigen Sie sie optional per E-Mail.",
"select_courses": "Kurse auswählen",
"select_courses_placeholder": "Kurse auswählen...",
"send_email": "Benachrichtigungs-E-Mail senden",
"submit": "Zuweisen",
"cancel": "Abbrechen",
"snackbar_success": "{assigned} Benutzer den Kursen zugewiesen ({alreadyEnrolled} bereits angemeldet, {emailsSent} E-Mails gesendet)",
"snackbar_no_courses": "Bitte wählen Sie mindestens einen Kurs aus",
"snackbar_failed": "Kurse konnten nicht zugewiesen werden"
},
"import": {
"title": "Benutzer importieren",
"description": "Fügen Sie Ihrer Organisation Studenten hinzu, indem Sie deren E-Mail-Adressen eingeben. Ordnen Sie sie optional Kursen zu und versenden Sie Einladungs-E-Mails.",
"emails_label": "E-Mail-Adressen",
"emails_placeholder": "Geben Sie E-Mails durch Kommas, Zeilenumbrüche oder Semikolons getrennt ein\nz.B. alice@example.com, bob@example.com",
"course_access": "Kurszugang",
"no_courses": "Keine Kurszuordnung",
"all_courses": "Alle Kurse",
"select_courses": "Wählen Sie bestimmte Kurse aus",
"select_courses_placeholder": "Kurse auswählen...",
"send_email": "Senden Sie Einladungs-E-Mails an importierte Benutzer",
"submit": "Benutzer importieren",
"back": "Zurück zum Publikum",
"snackbar_success": "Importierte {imported} Benutzer ({skipped} existierte bereits, {emailsSent} E-Mails wurden gesendet)",
"snackbar_no_emails": "Bitte geben Sie mindestens eine E-Mail-Adresse ein",
"snackbar_failed": "Benutzer konnten nicht importiert werden"
}
},
"community": {
"title": "Gemeinschaft",
@@ -940,6 +987,8 @@
"complete": "Komplett",
"next": "Als nächstes",
"prev": "Vorher",
"prev_shortcut": "Zurück (←)",
"next_shortcut": "Weiter (→)",
"disabled": "Funktion ist deaktiviert",
"version_history": {
"title": "Versionsgeschichte",
@@ -1200,6 +1249,9 @@
},
"edit": {
"accepted_answers_placeholder": "Akzeptierte Antworten (durch Kommas getrennt)"
},
"review": {
"your_answer_label": "Eingereicht:"
}
},
"numeric": {
@@ -1217,6 +1269,11 @@
"tolerance_info": "Zulässige Abweichung vom korrekten Wert (Beispiel: 0,5 akzeptiert +/-0,5).",
"correct_value_placeholder": "Korrekter Wert",
"tolerance_placeholder": "Toleranz"
},
"review": {
"your_answer_label": "Eingereicht:",
"in_range": "Innerhalb der Toleranz",
"out_of_range": "Außerhalb der Toleranz"
}
},
"short_answer": {
@@ -1228,6 +1285,10 @@
},
"edit": {
"instructions_placeholder": "Optionale Anweisungen"
},
"review": {
"your_answer_label": "Eingereicht:",
"accepted_label": "Akzeptierte Antworten"
}
},
"true_false": {
@@ -1291,8 +1352,9 @@
"option_prefix": "Option",
"remove": "Entfernen",
"add_option": "Option hinzufügen",
"correct_badge": "(Richtig)",
"not_set": "Nicht festgelegt"
"correct_badge": "Richtig",
"not_set": "Nicht festgelegt",
"incorrect_badge": "Falsch"
}
}
},
@@ -1473,7 +1535,10 @@
"cancel": "Abbrechen"
},
"content_locked_title": "Dieser Inhalt ist gesperrt",
"content_locked_description": "Ihr Kursleiter hat diesen Inhalt noch nicht freigeschaltet. Vervollständigen Sie den vorherigen Inhalt oder schauen Sie später noch einmal vorbei."
"content_locked_description": "Ihr Kursleiter hat diesen Inhalt noch nicht freigeschaltet. Vervollständigen Sie den vorherigen Inhalt oder schauen Sie später noch einmal vorbei.",
"saving": "Sparen…",
"saved": "Gespeichert",
"draft_recovery": "Für diese Lektion wurde ein nicht gespeicherter Entwurf gefunden. Möchten Sie es wiederherstellen?"
},
"news_feed": {
"heading": "Newsfeed",
@@ -1582,6 +1647,7 @@
"unpublished": "Unveröffentlicht",
"continue_course": "Weiter",
"learn_more": "Erfahren Sie mehr",
"tags_overflow_aria": "{count} weitere Tags",
"list_view": {
"title": "Titel",
"description": "Beschreibung",
@@ -2245,7 +2311,8 @@
"email_password_disabled_message": "Die E-Mail-/Passwort-Anmeldung ist für diese Organisation deaktiviert.",
"google_auth_disabled": "Die Google-Authentifizierung ist deaktiviert.",
"signup_disabled_error": "Die Anmeldung ist für diese Organisation deaktiviert. Bitte wenden Sie sich an Ihren Administrator.",
"or_continue_with": "Oder fahren Sie mit E-Mail und Passwort fort"
"or_continue_with": "Oder fahren Sie mit E-Mail und Passwort fort",
"sso_enabled": "{provider} ist für diese Organisation aktiviert"
},
"tabs": {
"general": "Allgemein",
@@ -2471,7 +2538,8 @@
"edit_group": "Gruppe bearbeiten",
"edit_tag": "Tag bearbeiten",
"save": "Speichern",
"cancel": "Abbrechen"
"cancel": "Abbrechen",
"actions_menu": "Markieren Sie Aktionen"
},
"common": {
"not_available": "N/A"
@@ -2480,9 +2548,13 @@
"invite": {
"organization": {
"page_title": "Treten Sie {orgName} auf ClassroomIO bei",
"role_label": "Rolle: {role}",
"email_label": "Eingeladene E-Mail: {email}",
"join_button": "Treten Sie der Organisation bei",
"invitation_student": "Sie wurden zu {orgName} als Schüler/in eingeladen.",
"invitation_teacher": "Sie wurden zu {orgName} als Lehrer/in eingeladen.",
"invitation_admin": "Sie wurden zu {orgName} als Administrator/in eingeladen.",
"invitation_fallback": "Sie wurden zu {orgName} als {role} eingeladen.",
"email_line": "E-Mail: {email}",
"accept_button": "Einladung annehmen",
"go_to_dashboard": "Zum Dashboard",
"messages": {
"email_mismatch": "Sie sind mit einer anderen E-Mail-Adresse als dieser Einladung angemeldet.",
"expired": "Dieser Einladungslink ist abgelaufen.",
@@ -2520,6 +2592,17 @@
"cancel": "Cancel",
"save": "Create key"
}
},
"usage": {
"title": "Nutzung und Grenzen",
"description": "MCP ist in jedem Plan verfügbar, die Nutzung wird jedoch durch monatliche Automatisierungsguthaben und Schlüssellimits gesteuert.",
"credits_title": "Verbleibende Credits",
"credits_description": "Mutierende MCP-Aktionen verbrauchen Credits. Leseaktionen sind kostenlos.",
"keys_title": "Aktive Schlüssel",
"keys_description": "Verwenden Sie einen MCP-Schlüssel pro Integration, damit der Zugriff sauber rotiert oder widerrufen werden kann.",
"rate_limits_title": "Tarifbegrenzungen",
"rate_limits_description": "Zulässige Lese-/Schreib-/Veröffentlichungsanfragen pro Minute.",
"used_label": "Verwendet:"
}
},
"keys": {
@@ -2534,7 +2617,11 @@
"never_used": "Niemals",
"scopes_label": "Geltungsbereiche:",
"revoke_confirm": "Diesen Automatisierungsschlüssel widerrufen?",
"rotate_confirm": "Diesen Automatisierungsschlüssel drehen?"
"rotate_confirm": "Diesen Automatisierungsschlüssel drehen?",
"table_key": "Schlüssel",
"table_status": "Status",
"table_created": "Erstellt",
"table_last_used": "Zuletzt verwendet"
},
"clients": {
"claude_code": "Claude Code",
@@ -902,6 +902,7 @@
"unpublished": "Unpublished",
"continue_course": "Continue",
"learn_more": "Learn more",
"tags_overflow_aria": "{count} more tags",
"list_view": {
"title": "Title",
"description": "Description",
@@ -1084,6 +1085,8 @@
"complete": "Complete",
"next": "Next",
"prev": "Prev",
"prev_shortcut": "Previous (←)",
"next_shortcut": "Next (→)",
"materials": {
"body_heading": "No note, video or slide added for this lesson yet",
"body_content": "Share your knowledge with your students by creating engaging content. Start by clicking on",
@@ -1345,7 +1348,8 @@
"option_prefix": "Option",
"remove": "Remove",
"add_option": "Add option",
"correct_badge": "(Correct)",
"correct_badge": "Correct",
"incorrect_badge": "Incorrect",
"not_set": "Not set"
},
"navigation": {
@@ -1414,6 +1418,10 @@
},
"preview": {
"helper": "Free-text answer question."
},
"review": {
"your_answer_label": "Submitted:",
"accepted_label": "Accepted answers"
}
},
"numeric": {
@@ -1431,6 +1439,11 @@
"preview": {
"correct_value_label": "Correct value",
"tolerance_label": "Tolerance"
},
"review": {
"your_answer_label": "Submitted:",
"in_range": "Within tolerance",
"out_of_range": "Outside tolerance"
}
},
"fill_blank": {
@@ -1442,6 +1455,9 @@
},
"preview": {
"accepted_answers_label": "Accepted answers"
},
"review": {
"your_answer_label": "Submitted:"
}
},
"file_upload": {
@@ -2015,6 +2031,12 @@
"manage": "Manage all your students here and stay connected with them",
"name": "Name",
"email": "Email",
"search_placeholder": "Search…",
"status": "Status",
"status_active": "Active",
"status_pending": "Pending",
"status_expired": "Expired",
"status_revoked": "Revoked",
"date_joined": "Date Joined",
"upgrade": "Upgrade your plan to invite more students",
"select_all": "Select all",
@@ -2048,6 +2070,14 @@
"snackbar_success": "Assigned {assigned} users to courses ({alreadyEnrolled} already enrolled, {emailsSent} emails sent)",
"snackbar_no_courses": "Please select at least one course",
"snackbar_failed": "Failed to assign courses"
},
"invite": {
"row_actions_aria": "Open actions",
"resend": "Resend invite",
"revoke": "Revoke pending invite",
"resend_snackbar_success": "Invitation email sent",
"resend_snackbar_email_failed": "Invite was renewed but the email could not be sent",
"revoke_snackbar_success": "Pending invitation revoked"
}
},
"analytics": {
@@ -2453,9 +2483,13 @@
"invite": {
"organization": {
"page_title": "Join {orgName} on ClassroomIO",
"role_label": "Role: {role}",
"email_label": "Invited email: {email}",
"join_button": "Join Organization",
"invitation_student": "You've been invited into {orgName} as a student.",
"invitation_teacher": "You've been invited into {orgName} as a teacher.",
"invitation_admin": "You've been invited into {orgName} as an admin.",
"invitation_fallback": "You've been invited into {orgName} as {role}.",
"email_line": "Email: {email}",
"accept_button": "Accept invitation",
"go_to_dashboard": "Go to Dashboard",
"messages": {
"email_mismatch": "You are logged in with a different email from this invite.",
"expired": "This invite link has expired.",
@@ -475,7 +475,54 @@
"name": "Nombre",
"email": "Correo electrónico",
"date_joined": "Fecha de incorporación",
"upgrade": "Actualice su plan para invitar a más estudiantes"
"upgrade": "Actualice su plan para invitar a más estudiantes",
"import_users": "Importar usuarios",
"search_placeholder": "Buscar…",
"status": "Estado",
"status_active": "Activo",
"status_pending": "Pendiente",
"status_expired": "Caducado",
"status_revoked": "Revocado",
"select_all": "Seleccionar todo",
"selected_count": "{count} seleccionado",
"assign_courses": "Asignar a cursos",
"invite": {
"row_actions_aria": "Acciones abiertas",
"resend": "Reenviar invitación",
"revoke": "Revocar invitación pendiente",
"resend_snackbar_success": "Correo electrónico de invitación enviado",
"resend_snackbar_email_failed": "La invitación se renovó pero no se pudo enviar el correo electrónico.",
"revoke_snackbar_success": "Invitación pendiente revocada"
},
"assign": {
"title": "Asignar a cursos",
"description": "Dar acceso a los cursos a los usuarios seleccionados y, opcionalmente, notificarles por correo electrónico.",
"select_courses": "Seleccionar cursos",
"select_courses_placeholder": "Elige cursos...",
"send_email": "Enviar correo electrónico de notificación",
"submit": "Asignar",
"cancel": "Cancelar",
"snackbar_success": "Usuarios asignados {assigned} a cursos ({alreadyEnrolled} ya inscritos, {emailsSent} correos electrónicos enviados)",
"snackbar_no_courses": "Por favor seleccione al menos un curso",
"snackbar_failed": "No se pudieron asignar cursos"
},
"import": {
"title": "Importar usuarios",
"description": "Agregue estudiantes a su organización ingresando sus direcciones de correo electrónico. Opcionalmente, asígnalos a cursos y envía correos electrónicos de invitación.",
"emails_label": "Direcciones de correo electrónico",
"emails_placeholder": "Ingrese correos electrónicos separados por comas, nuevas líneas o punto y coma\npor ej. alicia@ejemplo.com, bob@ejemplo.com",
"course_access": "Acceso al curso",
"no_courses": "Sin tarea de curso",
"all_courses": "Todos los cursos",
"select_courses": "Seleccionar cursos específicos",
"select_courses_placeholder": "Elige cursos...",
"send_email": "Enviar correo electrónico de invitación a usuarios importados",
"submit": "Importar usuarios",
"back": "Volver a la audiencia",
"snackbar_success": "Usuarios importados {importados} ({skipped} ya existía, {emailsSent} correos electrónicos enviados)",
"snackbar_no_emails": "Por favor ingrese al menos una dirección de correo electrónico",
"snackbar_failed": "No se pudieron importar usuarios"
}
},
"community": {
"title": "Comunidad",
@@ -940,6 +987,8 @@
"complete": "completo",
"next": "Siguiente",
"prev": "Anterior",
"prev_shortcut": "Anterior (←)",
"next_shortcut": "Siguiente (→)",
"disabled": "La característica está deshabilitada",
"version_history": {
"title": "Historial de versiones",
@@ -1200,6 +1249,9 @@
},
"edit": {
"accepted_answers_placeholder": "Respuestas aceptadas (separadas por comas)"
},
"review": {
"your_answer_label": "Enviado:"
}
},
"numeric": {
@@ -1217,6 +1269,11 @@
"tolerance_info": "Diferencia permitida con respecto al valor correcto (por ejemplo, 0,5 acepta +/-0,5).",
"correct_value_placeholder": "Valor correcto",
"tolerance_placeholder": "Tolerancia"
},
"review": {
"your_answer_label": "Enviado:",
"in_range": "Dentro de la tolerancia",
"out_of_range": "Tolerancia exterior"
}
},
"short_answer": {
@@ -1228,6 +1285,10 @@
},
"edit": {
"instructions_placeholder": "Instrucciones opcionales"
},
"review": {
"your_answer_label": "Enviado:",
"accepted_label": "Respuestas aceptadas"
}
},
"true_false": {
@@ -1291,8 +1352,9 @@
"option_prefix": "Opción",
"remove": "Quitar",
"add_option": "Agregar opción",
"correct_badge": "(Correcto)",
"not_set": "No establecido"
"correct_badge": "Correcto",
"not_set": "No establecido",
"incorrect_badge": "Incorrecto"
}
}
},
@@ -1473,7 +1535,10 @@
"cancel": "Cancelar"
},
"content_locked_title": "Este contenido está bloqueado.",
"content_locked_description": "Su instructor aún no ha desbloqueado este contenido. Complete el contenido anterior o vuelva a consultarlo más tarde."
"content_locked_description": "Su instructor aún no ha desbloqueado este contenido. Complete el contenido anterior o vuelva a consultarlo más tarde.",
"saving": "Guardando…",
"saved": "Guardado",
"draft_recovery": "Se encontró un borrador no guardado para esta lección. ¿Quieres restaurarlo?"
},
"news_feed": {
"heading": "Noticias",
@@ -1582,6 +1647,7 @@
"unpublished": "Inédito",
"continue_course": "Continuar",
"learn_more": "Más información",
"tags_overflow_aria": "{count} etiquetas más",
"list_view": {
"title": "Título",
"description": "Descripción",
@@ -2245,7 +2311,8 @@
"email_password_disabled_message": "El inicio de sesión con correo electrónico/contraseña está deshabilitado para esta organización.",
"google_auth_disabled": "La autenticación de Google está deshabilitada.",
"signup_disabled_error": "El registro está deshabilitado para esta organización. Por favor contacte a su administrador.",
"or_continue_with": "O continuar con correo electrónico y contraseña"
"or_continue_with": "O continuar con correo electrónico y contraseña",
"sso_enabled": "{provider} está habilitado para esta organización"
},
"tabs": {
"general": "generales",
@@ -2471,7 +2538,8 @@
"edit_group": "Editar grupo",
"edit_tag": "Editar etiqueta",
"save": "Guardar",
"cancel": "Cancelar"
"cancel": "Cancelar",
"actions_menu": "Acciones de etiqueta"
},
"common": {
"not_available": "N/A"
@@ -2480,9 +2548,13 @@
"invite": {
"organization": {
"page_title": "Únase a {orgName} en ClassroomIO",
"role_label": "Rol: {rol}",
"email_label": "Correo electrónico invitado: {email}",
"join_button": "Unirse a la organización",
"invitation_student": "Has sido invitado a {orgName} como estudiante.",
"invitation_teacher": "Has sido invitado a {orgName} como profesor.",
"invitation_admin": "Has sido invitado a {orgName} como administrador.",
"invitation_fallback": "Has sido invitado a {orgName} como {role}.",
"email_line": "Correo electrónico: {email}",
"accept_button": "Aceptar invitación",
"go_to_dashboard": "Ir al panel",
"messages": {
"email_mismatch": "Has iniciado sesión con un correo electrónico diferente al de esta invitación.",
"expired": "Este enlace de invitación ha caducado.",
@@ -2520,6 +2592,17 @@
"cancel": "Cancel",
"save": "Create key"
}
},
"usage": {
"title": "Uso y límites",
"description": "MCP está disponible en todos los planes, pero el uso se controla con créditos de automatización mensuales y límites clave.",
"credits_title": "Créditos restantes",
"credits_description": "Las acciones mutantes de MCP consumen créditos. Las acciones de lectura son gratuitas.",
"keys_title": "Claves activas",
"keys_description": "Utilice una clave MCP por integración para que el acceso se pueda rotar o revocar limpiamente.",
"rate_limits_title": "Límites de tarifas",
"rate_limits_description": "Solicitudes de lectura/escritura/publicación permitidas por minuto.",
"used_label": "Usado:"
}
},
"keys": {
@@ -2534,7 +2617,11 @@
"never_used": "nunca",
"scopes_label": "Alcances:",
"revoke_confirm": "¿Revocar esta clave de automatización?",
"rotate_confirm": "¿Girar esta clave de automatización?"
"rotate_confirm": "¿Girar esta clave de automatización?",
"table_key": "clave",
"table_status": "Estado",
"table_created": "Creado",
"table_last_used": "último usado"
},
"clients": {
"claude_code": "Código Claude",
@@ -475,7 +475,54 @@
"name": "Nom",
"email": "Courriel",
"date_joined": "Date d'adhésion",
"upgrade": "Améliorez votre forfait pour inviter plus d'étudiants"
"upgrade": "Améliorez votre forfait pour inviter plus d'étudiants",
"import_users": "Importer des utilisateurs",
"search_placeholder": "Rechercher…",
"status": "Statut",
"status_active": "Actif",
"status_pending": "En attente",
"status_expired": "Expiré",
"status_revoked": "Révoqué",
"select_all": "Tout sélectionner",
"selected_count": "{count} sélectionnés",
"assign_courses": "Attribuer aux cours",
"invite": {
"row_actions_aria": "Actions ouvertes",
"resend": "Renvoyer l'invitation",
"revoke": "Révoquer l'invitation en attente",
"resend_snackbar_success": "E-mail d'invitation envoyé",
"resend_snackbar_email_failed": "L'invitation a été renouvelée mais l'e-mail n'a pas pu être envoyé",
"revoke_snackbar_success": "Invitation en attente révoquée"
},
"assign": {
"title": "Attribuer aux cours",
"description": "Donnez aux utilisateurs sélectionnés l'accès aux cours et éventuellement les avertir par e-mail.",
"select_courses": "Sélectionner des cours",
"select_courses_placeholder": "Choisissez des cours...",
"send_email": "Envoyer un e-mail de notification",
"submit": "Attribuer",
"cancel": "Annuler",
"snackbar_success": "{assigned} utilisateurs affectés aux cours ({alreadyEnrolled} déjà inscrits, {emailsSent} e-mails envoyés)",
"snackbar_no_courses": "Veuillez sélectionner au moins un cours",
"snackbar_failed": "Échec de l'attribution des cours"
},
"import": {
"title": "Importer des utilisateurs",
"description": "Ajoutez des étudiants à votre organisation en saisissant leurs adresses e-mail. Vous pouvez éventuellement les attribuer à des cours et envoyer des e-mails d'invitation.",
"emails_label": "Adresses e-mail",
"emails_placeholder": "Saisissez les e-mails séparés par des virgules, des nouvelles lignes ou des points-virgules\npar ex. alice@exemple.com, bob@exemple.com",
"course_access": "Accès aux cours",
"no_courses": "Aucun devoir de cours",
"all_courses": "Tous les cours",
"select_courses": "Sélectionnez des cours spécifiques",
"select_courses_placeholder": "Choisissez des cours...",
"send_email": "Envoyer un e-mail d'invitation aux utilisateurs importés",
"submit": "Importer des utilisateurs",
"back": "Retour au public",
"snackbar_success": "Utilisateurs {importés} importés ({skipped} existait déjà, {emailsSent} e-mails envoyés)",
"snackbar_no_emails": "Veuillez saisir au moins une adresse e-mail",
"snackbar_failed": "Échec de l'importation des utilisateurs"
}
},
"community": {
"title": "Communauté",
@@ -940,6 +987,8 @@
"complete": "Terminé",
"next": "Suivant",
"prev": "Précédent",
"prev_shortcut": "Précédent (←)",
"next_shortcut": "Suivant (→)",
"disabled": "La fonctionnalité est désactivée",
"version_history": {
"title": "Historique des versions",
@@ -1200,6 +1249,9 @@
},
"edit": {
"accepted_answers_placeholder": "Réponses acceptées (séparées par des virgules)"
},
"review": {
"your_answer_label": "Soumis :"
}
},
"numeric": {
@@ -1217,6 +1269,11 @@
"tolerance_info": "Différence autorisée par rapport à la valeur correcte (par exemple, 0,5 accepte +/-0,5).",
"correct_value_placeholder": "Valeur correcte",
"tolerance_placeholder": "Tolérance"
},
"review": {
"your_answer_label": "Soumis :",
"in_range": "Dans les limites de tolérance",
"out_of_range": "Hors tolérance"
}
},
"short_answer": {
@@ -1228,6 +1285,10 @@
},
"edit": {
"instructions_placeholder": "Instructions facultatives"
},
"review": {
"your_answer_label": "Soumis :",
"accepted_label": "Réponses acceptées"
}
},
"true_false": {
@@ -1291,8 +1352,9 @@
"option_prefix": "Options",
"remove": "Supprimer",
"add_option": "Ajouter une option",
"correct_badge": "(C'est vrai)",
"not_set": "Non défini"
"correct_badge": "C'est vrai",
"not_set": "Non défini",
"incorrect_badge": "Incorrect"
}
}
},
@@ -1473,7 +1535,10 @@
"cancel": "Annuler"
},
"content_locked_title": "Ce contenu est verrouillé",
"content_locked_description": "Votre instructeur n'a pas encore débloqué ce contenu. Complétez le contenu précédent ou revenez plus tard."
"content_locked_description": "Votre instructeur n'a pas encore débloqué ce contenu. Complétez le contenu précédent ou revenez plus tard.",
"saving": "Sauvegarde…",
"saved": "Enregistré",
"draft_recovery": "Un brouillon non enregistré a été trouvé pour cette leçon. Souhaitez-vous le restaurer ?"
},
"news_feed": {
"heading": "Fil d'actualité",
@@ -1582,6 +1647,7 @@
"unpublished": "Inédit",
"continue_course": "Continuer",
"learn_more": "En savoir plus",
"tags_overflow_aria": "{count} autres tags",
"list_view": {
"title": "Titre",
"description": "Descriptif",
@@ -2245,7 +2311,8 @@
"email_password_disabled_message": "La connexion par e-mail/mot de passe est désactivée pour cette organisation.",
"google_auth_disabled": "L'authentification Google est désactivée.",
"signup_disabled_error": "L'inscription est désactivée pour cette organisation. Veuillez contacter votre administrateur.",
"or_continue_with": "Ou continuez avec email et mot de passe"
"or_continue_with": "Ou continuez avec email et mot de passe",
"sso_enabled": "{provider} est activé pour cette organisation"
},
"tabs": {
"general": "Général",
@@ -2471,7 +2538,8 @@
"edit_group": "Modifier le groupe",
"edit_tag": "Modifier la balise",
"save": "Enregistrer",
"cancel": "Annuler"
"cancel": "Annuler",
"actions_menu": "Actions de balise"
},
"common": {
"not_available": "N/D"
@@ -2480,9 +2548,13 @@
"invite": {
"organization": {
"page_title": "Rejoignez {orgName} sur ClassroomIO",
"role_label": "Rôle : {rôle}",
"email_label": "E-mail invité : {email}",
"join_button": "Rejoindre l'organisation",
"invitation_student": "Vous avez été invité(e) dans {orgName} en tant qu'étudiant.",
"invitation_teacher": "Vous avez été invité(e) dans {orgName} en tant qu'enseignant.",
"invitation_admin": "Vous avez été invité(e) dans {orgName} en tant qu'administrateur.",
"invitation_fallback": "Vous avez été invité(e) dans {orgName} en tant que {role}.",
"email_line": "E-mail : {email}",
"accept_button": "Accepter l'invitation",
"go_to_dashboard": "Aller au tableau de bord",
"messages": {
"email_mismatch": "Vous êtes connecté avec un e-mail différent de celui de cette invitation.",
"expired": "Ce lien d'invitation a expiré.",
@@ -2520,6 +2592,17 @@
"cancel": "Cancel",
"save": "Create key"
}
},
"usage": {
"title": "Utilisation et limites",
"description": "MCP est disponible sur chaque forfait, mais l'utilisation est contrôlée par des crédits d'automatisation mensuels et des limites clés.",
"credits_title": "Crédits restants",
"credits_description": "Les actions MCP en mutation consomment des crédits. Les actions de lecture sont gratuites.",
"keys_title": "Clés actives",
"keys_description": "Utilisez une clé MCP par intégration afin que l'accès puisse être alterné ou révoqué proprement.",
"rate_limits_title": "Limites de taux",
"rate_limits_description": "Requêtes de lecture/écriture/publication autorisées par minute.",
"used_label": "Utilisé :"
}
},
"keys": {
@@ -2534,7 +2617,11 @@
"never_used": "Jamais",
"scopes_label": "Portées :",
"revoke_confirm": "Révoquer cette clé d'automatisation ?",
"rotate_confirm": "Faire pivoter cette clé d'automatisation ?"
"rotate_confirm": "Faire pivoter cette clé d'automatisation ?",
"table_key": "Clé",
"table_status": "Statut",
"table_created": "Créé",
"table_last_used": "Dernière utilisation"
},
"clients": {
"claude_code": "Claude Code",
@@ -475,7 +475,54 @@
"name": "नाम",
"email": "ईमेल",
"date_joined": "शामिल होने की तिथि",
"upgrade": "अधिक छात्रों को आमंत्रित करने के लिए अपनी योजना को अपग्रेड करें"
"upgrade": "अधिक छात्रों को आमंत्रित करने के लिए अपनी योजना को अपग्रेड करें",
"import_users": "उपयोगकर्ता आयात करें",
"search_placeholder": "खोजें…",
"status": "स्थिति",
"status_active": "सक्रिय",
"status_pending": "लंबित",
"status_expired": "समाप्त हो गया",
"status_revoked": "निरस्त किया गया",
"select_all": "सभी का चयन करें",
"selected_count": "{गिनती} चयनित",
"assign_courses": "पाठ्यक्रमों को असाइन करें",
"invite": {
"row_actions_aria": "खुली कार्रवाइयां",
"resend": "आमंत्रण पुनः भेजें",
"revoke": "लंबित आमंत्रण निरस्त करें",
"resend_snackbar_success": "आमंत्रण ईमेल भेजा गया",
"resend_snackbar_email_failed": "आमंत्रण नवीनीकृत किया गया लेकिन ईमेल नहीं भेजा जा सका",
"revoke_snackbar_success": "लंबित आमंत्रण निरस्त कर दिया गया"
},
"assign": {
"title": "पाठ्यक्रमों को असाइन करें",
"description": "चयनित उपयोगकर्ताओं को पाठ्यक्रमों तक पहुंच प्रदान करें और वैकल्पिक रूप से उन्हें ईमेल द्वारा सूचित करें।",
"select_courses": "पाठ्यक्रम चुनें",
"select_courses_placeholder": "पाठ्यक्रम चुनें...",
"send_email": "अधिसूचना ईमेल भेजें",
"submit": "नियुक्‍त करें",
"cancel": "रद्द करें",
"snackbar_success": "पाठ्यक्रमों के लिए {assigned} उपयोगकर्ताओं को असाइन किया गया ({alreadyEnrolled} पहले से ही नामांकित, {emailsSent} ईमेल भेजे गए)",
"snackbar_no_courses": "कृपया कम से कम एक पाठ्यक्रम चुनें",
"snackbar_failed": "पाठ्यक्रम आवंटित करने में विफल"
},
"import": {
"title": "उपयोगकर्ता आयात करें",
"description": "छात्रों के ईमेल पते दर्ज करके उन्हें अपने संगठन में जोड़ें। वैकल्पिक रूप से उन्हें पाठ्यक्रमों में नियुक्त करें और आमंत्रण ईमेल भेजें।",
"emails_label": "ईमेल पते",
"emails_placeholder": "ईमेल को अल्पविराम, न्यूलाइन या अर्धविराम से अलग करके दर्ज करें\nजैसे alice@example.com, bob@example.com",
"course_access": "पाठ्यक्रम प्रवेश",
"no_courses": "कोई पाठ्यक्रम असाइनमेंट नहीं",
"all_courses": "सभी पाठ्यक्रम",
"select_courses": "विशिष्ट पाठ्यक्रम चुनें",
"select_courses_placeholder": "पाठ्यक्रम चुनें...",
"send_email": "आयातित उपयोगकर्ताओं को आमंत्रण ईमेल भेजें",
"submit": "उपयोगकर्ता आयात करें",
"back": "दर्शकों के पास वापस जाएँ",
"snackbar_success": "आयातित {आयातित} उपयोगकर्ता ({स्किप्ड} पहले से मौजूद थे, {ईमेल्ससेंट} ईमेल भेजे गए)",
"snackbar_no_emails": "कृपया कम से कम एक ईमेल पता दर्ज करें",
"snackbar_failed": "उपयोगकर्ताओं को आयात करने में विफल"
}
},
"community": {
"title": "समुदाय",
@@ -940,6 +987,8 @@
"complete": "पूर्ण",
"next": "अगला",
"prev": "पिछला",
"prev_shortcut": "पिछला (←)",
"next_shortcut": "अगला (→)",
"disabled": "सुविधा अक्षम है",
"version_history": {
"title": "संस्करण इतिहास",
@@ -1200,6 +1249,9 @@
},
"edit": {
"accepted_answers_placeholder": "स्वीकृत उत्तर (अल्पविराम से अलग)"
},
"review": {
"your_answer_label": "प्रस्तुत:"
}
},
"numeric": {
@@ -1217,6 +1269,11 @@
"tolerance_info": "सही मान से स्वीकार्य अंतर (उदाहरण के लिए, 0.5 +/-0.5 स्वीकार करता है)।",
"correct_value_placeholder": "सही मूल्य",
"tolerance_placeholder": "सहनशीलता"
},
"review": {
"your_answer_label": "प्रस्तुत:",
"in_range": "सहनशीलता के भीतर",
"out_of_range": "बाहर की सहनशीलता"
}
},
"short_answer": {
@@ -1228,6 +1285,10 @@
},
"edit": {
"instructions_placeholder": "वैकल्पिक निर्देश"
},
"review": {
"your_answer_label": "प्रस्तुत:",
"accepted_label": "स्वीकृत उत्तर"
}
},
"true_false": {
@@ -1291,8 +1352,9 @@
"option_prefix": "विकल्प",
"remove": "हटाओ",
"add_option": "विकल्प जोड़ें",
"correct_badge": "(सही)",
"not_set": "सेट नहीं"
"correct_badge": "सही",
"not_set": "सेट नहीं",
"incorrect_badge": "गलत"
}
}
},
@@ -1473,7 +1535,10 @@
"cancel": "रद्द करें"
},
"content_locked_title": "यह सामग्री लॉक है",
"content_locked_description": "आपके प्रशिक्षक ने अभी तक इस सामग्री को अनलॉक नहीं किया है। पिछली सामग्री पूरी करें या बाद में दोबारा जाँचें।"
"content_locked_description": "आपके प्रशिक्षक ने अभी तक इस सामग्री को अनलॉक नहीं किया है। पिछली सामग्री पूरी करें या बाद में दोबारा जाँचें।",
"saving": "सहेजा जा रहा है...",
"saved": "सहेजा गया",
"draft_recovery": "इस पाठ के लिए एक सहेजा न गया ड्राफ्ट मिला। क्या आप इसे पुनर्स्थापित करना चाहेंगे?"
},
"news_feed": {
"heading": "समाचार फ़ीड",
@@ -1582,6 +1647,7 @@
"unpublished": "अप्रकाशित",
"continue_course": "जारी रखें",
"learn_more": "और जानें",
"tags_overflow_aria": "{count} और टैग",
"list_view": {
"title": "शीर्षक",
"description": "विवरण",
@@ -2245,7 +2311,8 @@
"email_password_disabled_message": "इस संगठन के लिए ईमेल/पासवर्ड लॉगिन अक्षम है।",
"google_auth_disabled": "Google प्रमाणीकरण अक्षम है.",
"signup_disabled_error": "इस संगठन के लिए साइनअप अक्षम है. कृपया अपने व्यवस्थापक से संपर्क करें.",
"or_continue_with": "या ईमेल और पासवर्ड के साथ जारी रखें"
"or_continue_with": "या ईमेल और पासवर्ड के साथ जारी रखें",
"sso_enabled": "इस संगठन के लिए {प्रदाता} सक्षम है"
},
"tabs": {
"general": "सामान्य",
@@ -2471,7 +2538,8 @@
"edit_group": "समूह संपादित करें",
"edit_tag": "टैग संपादित करें",
"save": "सहेजें",
"cancel": "रद्द करें"
"cancel": "रद्द करें",
"actions_menu": "क्रियाएँ टैग करें"
},
"common": {
"not_available": "एन/ए"
@@ -2480,9 +2548,13 @@
"invite": {
"organization": {
"page_title": "ClassroomIO पर {orgName} से जुड़ें",
"role_label": "भूमिका: {भूमिका}",
"email_label": "आमंत्रित ईमेल: {ईमेल}",
"join_button": "संगठन से जुड़ें",
"invitation_student": "आपको {orgName} में छात्र के रूप में आमंत्रित किया गया है।",
"invitation_teacher": "आपको {orgName} में शिक्षक के रूप में आमंत्रित किया गया है।",
"invitation_admin": "आपको {orgName} में व्यवस्थापक के रूप में आमंत्रित किया गया है।",
"invitation_fallback": "आपको {orgName} में {role} के रूप में आमंत्रित किया गया है।",
"email_line": "ईमेल: {email}",
"accept_button": "निमंत्रण स्वीकार करें",
"go_to_dashboard": "डैशबोर्ड पर जाएं",
"messages": {
"email_mismatch": "आप इस आमंत्रण से भिन्न ईमेल से लॉग इन हैं।",
"expired": "यह आमंत्रण लिंक समाप्त हो गया है.",
@@ -2520,6 +2592,17 @@
"cancel": "Cancel",
"save": "Create key"
}
},
"usage": {
"title": "उपयोग और सीमाएँ",
"description": "एमसीपी हर योजना पर उपलब्ध है, लेकिन उपयोग को मासिक स्वचालन क्रेडिट और प्रमुख सीमाओं के साथ नियंत्रित किया जाता है।",
"credits_title": "क्रेडिट शेष",
"credits_description": "MCP क्रियाओं को बदलने से क्रेडिट की खपत होती है। पढ़ें क्रियाएँ निःशुल्क हैं।",
"keys_title": "सक्रिय कुंजियाँ",
"keys_description": "प्रति एकीकरण एक एमसीपी कुंजी का उपयोग करें ताकि पहुंच को घुमाया जा सके या सफाई से रद्द किया जा सके।",
"rate_limits_title": "दर सीमा",
"rate_limits_description": "प्रति मिनट पढ़ने/लिखने/प्रकाशित करने के अनुरोधों की अनुमति है।",
"used_label": "प्रयुक्त:"
}
},
"keys": {
@@ -2534,7 +2617,11 @@
"never_used": "कभी नहीं",
"scopes_label": "दायरा:",
"revoke_confirm": "इस स्वचालन कुंजी को निरस्त करें?",
"rotate_confirm": "इस स्वचालन कुंजी को घुमाएँ?"
"rotate_confirm": "इस स्वचालन कुंजी को घुमाएँ?",
"table_key": "कुंजी",
"table_status": "स्थिति",
"table_created": "बनाया गया",
"table_last_used": "अंतिम बार उपयोग किया गया"
},
"clients": {
"claude_code": "क्लाउड कोड",
@@ -475,7 +475,54 @@
"name": "Imię",
"email": "E-mail",
"date_joined": "Data dołączenia",
"upgrade": "Uaktualnij swój plan, aby zaprosić więcej uczniów"
"upgrade": "Uaktualnij swój plan, aby zaprosić więcej uczniów",
"import_users": "Importuj użytkowników",
"search_placeholder": "Szukaj…",
"status": "Stan",
"status_active": "Aktywny",
"status_pending": "Oczekujące",
"status_expired": "Wygasło",
"status_revoked": "Unieważnione",
"select_all": "Zaznacz wszystko",
"selected_count": "Wybrano {count}",
"assign_courses": "Przypisz do kursów",
"invite": {
"row_actions_aria": "Otwórz działania",
"resend": "Wyślij zaproszenie ponownie",
"revoke": "Odwołaj oczekujące zaproszenie",
"resend_snackbar_success": "E-mail z zaproszeniem wysłany",
"resend_snackbar_email_failed": "Zaproszenie zostało odnowione, ale e-mail nie mógł zostać wysłany",
"revoke_snackbar_success": "Oczekujące zaproszenie zostało odwołane"
},
"assign": {
"title": "Przypisz do kursów",
"description": "Nadaj wybranym użytkownikom dostęp do kursów i opcjonalnie powiadom ich e-mailem.",
"select_courses": "Wybierz kursy",
"select_courses_placeholder": "Wybierz kursy...",
"send_email": "Wyślij e-mail z powiadomieniem",
"submit": "Przypisz",
"cancel": "Anuluj",
"snackbar_success": "Przypisano {przydzielonych} użytkowników do kursów ({alreadyEnrolled} jest już zapisanych, wysłano e-maile: {emailsSent})",
"snackbar_no_courses": "Proszę wybrać przynajmniej jeden kurs",
"snackbar_failed": "Nie udało się przypisać kursów"
},
"import": {
"title": "Importuj użytkowników",
"description": "Dodaj uczniów do swojej organizacji, wprowadzając ich adresy e-mail. Opcjonalnie przypisz je do kursów i wyślij e-maile z zaproszeniami.",
"emails_label": "Adresy e-mail",
"emails_placeholder": "Wpisz adresy e-mail oddzielone przecinkami, znakami nowej linii lub średnikami\nnp. alice@example.com, bob@example.com",
"course_access": "Dostęp do kursu",
"no_courses": "Brak przypisanego kursu",
"all_courses": "Wszystkie kursy",
"select_courses": "Wybierz konkretne kursy",
"select_courses_placeholder": "Wybierz kursy...",
"send_email": "Wyślij wiadomość e-mail z zaproszeniem do zaimportowanych użytkowników",
"submit": "Importuj użytkowników",
"back": "Powrót do Publiczności",
"snackbar_success": "Zaimportowani użytkownicy: {imported} ({skipped} już istniało, wysłano e-maile: {emailsSent})",
"snackbar_no_emails": "Proszę podać przynajmniej jeden adres e-mail",
"snackbar_failed": "Nie udało się zaimportować użytkowników"
}
},
"community": {
"title": "Społeczność",
@@ -940,6 +987,8 @@
"complete": "Kompletny",
"next": "Następny",
"prev": "Poprzednia",
"prev_shortcut": "Poprzedni (←)",
"next_shortcut": "Następny (→)",
"disabled": "Funkcja jest wyłączona",
"version_history": {
"title": "Historia wersji",
@@ -1200,6 +1249,9 @@
},
"edit": {
"accepted_answers_placeholder": "Zaakceptowane odpowiedzi (oddzielone przecinkami)"
},
"review": {
"your_answer_label": "Przesłane:"
}
},
"numeric": {
@@ -1217,6 +1269,11 @@
"tolerance_info": "Dopuszczalna różnica od prawidłowej wartości (na przykład 0,5 akceptuje +/-0,5).",
"correct_value_placeholder": "Prawidłowa wartość",
"tolerance_placeholder": "Tolerancja"
},
"review": {
"your_answer_label": "Przesłane:",
"in_range": "W ramach tolerancji",
"out_of_range": "Tolerancja zewnętrzna"
}
},
"short_answer": {
@@ -1228,6 +1285,10 @@
},
"edit": {
"instructions_placeholder": "Instrukcje opcjonalne"
},
"review": {
"your_answer_label": "Przesłane:",
"accepted_label": "Zaakceptowane odpowiedzi"
}
},
"true_false": {
@@ -1291,8 +1352,9 @@
"option_prefix": "Opcja",
"remove": "Usuń",
"add_option": "Dodaj opcję",
"correct_badge": "(Poprawnie)",
"not_set": "Nie ustawiono"
"correct_badge": "Poprawnie",
"not_set": "Nie ustawiono",
"incorrect_badge": "Niepoprawne"
}
}
},
@@ -1473,7 +1535,10 @@
"cancel": "Anuluj"
},
"content_locked_title": "Ta zawartość jest zablokowana",
"content_locked_description": "Twój instruktor nie odblokował jeszcze tej zawartości. Uzupełnij poprzednią zawartość lub sprawdź później."
"content_locked_description": "Twój instruktor nie odblokował jeszcze tej zawartości. Uzupełnij poprzednią zawartość lub sprawdź później.",
"saving": "Zapisuję…",
"saved": "Zapisano",
"draft_recovery": "Znaleziono niezapisaną wersję roboczą tej lekcji. Czy chcesz go przywrócić?"
},
"news_feed": {
"heading": "Kanał wiadomości",
@@ -1582,6 +1647,7 @@
"unpublished": "Niepublikowane",
"continue_course": "Kontynuuj",
"learn_more": "Dowiedz się więcej",
"tags_overflow_aria": "Jeszcze {count} tagów",
"list_view": {
"title": "Tytuł",
"description": "Opis",
@@ -2245,7 +2311,8 @@
"email_password_disabled_message": "Logowanie za pomocą adresu e-mail/hasła jest wyłączone w tej organizacji.",
"google_auth_disabled": "Uwierzytelnianie Google jest wyłączone.",
"signup_disabled_error": "Rejestracja w tej organizacji jest wyłączona. Skontaktuj się ze swoim administratorem.",
"or_continue_with": "Możesz też kontynuować, podając adres e-mail i hasło"
"or_continue_with": "Możesz też kontynuować, podając adres e-mail i hasło",
"sso_enabled": "Usługa {provider} jest włączona dla tej organizacji"
},
"tabs": {
"general": "Generał",
@@ -2471,7 +2538,8 @@
"edit_group": "Edytuj grupę",
"edit_tag": "Edytuj znacznik",
"save": "Zapisz",
"cancel": "Anuluj"
"cancel": "Anuluj",
"actions_menu": "Oznacz działania"
},
"common": {
"not_available": "Nie dotyczy"
@@ -2480,9 +2548,13 @@
"invite": {
"organization": {
"page_title": "Dołącz do organizacji {orgName} w ClassroomIO",
"role_label": "Rola: {rola}",
"email_label": "Zaproszony e-mail: {email}",
"join_button": "Dołącz do organizacji",
"invitation_student": "Zostałeś zaproszony do {orgName} jako uczeń.",
"invitation_teacher": "Zostałeś zaproszony do {orgName} jako nauczyciel.",
"invitation_admin": "Zostałeś zaproszony do {orgName} jako administrator.",
"invitation_fallback": "Zostałeś zaproszony do {orgName} jako {role}.",
"email_line": "E-mail: {email}",
"accept_button": "Zaakceptuj zaproszenie",
"go_to_dashboard": "Przejdź do panelu",
"messages": {
"email_mismatch": "Jesteś zalogowany przy użyciu innego adresu e-mail niż to zaproszenie.",
"expired": "Ten link z zaproszeniem wygasł.",
@@ -2520,6 +2592,17 @@
"cancel": "Cancel",
"save": "Create key"
}
},
"usage": {
"title": "Zastosowanie i ograniczenia",
"description": "MCP jest dostępne w każdym planie, ale wykorzystanie jest kontrolowane za pomocą miesięcznych kredytów automatyzacji i limitów kluczowych.",
"credits_title": "Pozostały kredyty",
"credits_description": "Mutowanie działań MCP zużywa kredyty. Czytanie akcji jest bezpłatne.",
"keys_title": "Aktywne klucze",
"keys_description": "Użyj jednego klucza MCP na każdą integrację, aby umożliwić łatwą rotację lub cofnięcie dostępu.",
"rate_limits_title": "Limity stawek",
"rate_limits_description": "Żądania odczytu/zapisu/publikowania dozwolone na minutę.",
"used_label": "Używane:"
}
},
"keys": {
@@ -2534,7 +2617,11 @@
"never_used": "Nigdy",
"scopes_label": "Zakresy:",
"revoke_confirm": "Unieważnić ten klucz automatyzacji?",
"rotate_confirm": "Obrócić ten klucz automatyzacji?"
"rotate_confirm": "Obrócić ten klucz automatyzacji?",
"table_key": "Klucz",
"table_status": "Stan",
"table_created": "Utworzono",
"table_last_used": "Ostatnio używany"
},
"clients": {
"claude_code": "Claude'a Koda",
@@ -475,7 +475,54 @@
"name": "Nome",
"email": "E-mail",
"date_joined": "Data de adesão",
"upgrade": "Atualize seu plano para convidar mais alunos"
"upgrade": "Atualize seu plano para convidar mais alunos",
"import_users": "Importar usuários",
"search_placeholder": "Pesquisar…",
"status": "Estado",
"status_active": "Ativo",
"status_pending": "Pendente",
"status_expired": "Expirado",
"status_revoked": "Revogado",
"select_all": "Selecionar tudo",
"selected_count": "{contagem} selecionados",
"assign_courses": "Atribuir a cursos",
"invite": {
"row_actions_aria": "Ações abertas",
"resend": "Reenviar convite",
"revoke": "Revogar convite pendente",
"resend_snackbar_success": "E-mail de convite enviado",
"resend_snackbar_email_failed": "O convite foi renovado, mas não foi possível enviar o e-mail",
"revoke_snackbar_success": "Convite pendente revogado"
},
"assign": {
"title": "Atribuir a cursos",
"description": "Conceda aos usuários selecionados acesso aos cursos e, opcionalmente, notifique-os por e-mail.",
"select_courses": "Selecione os cursos",
"select_courses_placeholder": "Escolha cursos...",
"send_email": "Enviar e-mail de notificação",
"submit": "Atribuir",
"cancel": "Cancelar",
"snackbar_success": "{assigned} usuários atribuídos aos cursos ({alreadyEnrolled} já inscrito, {emailsSent} e-mails enviados)",
"snackbar_no_courses": "Selecione pelo menos um curso",
"snackbar_failed": "Falha ao atribuir cursos"
},
"import": {
"title": "Importar usuários",
"description": "Adicione alunos à sua organização inserindo seus endereços de e-mail. Opcionalmente, atribua-os a cursos e envie e-mails de convite.",
"emails_label": "Endereços de e-mail",
"emails_placeholder": "Insira e-mails separados por vírgulas, novas linhas ou ponto e vírgula\npor exemplo alice@exemplo.com, bob@exemplo.com",
"course_access": "Acesso ao curso",
"no_courses": "Nenhuma tarefa de curso",
"all_courses": "Todos os cursos",
"select_courses": "Selecione cursos específicos",
"select_courses_placeholder": "Escolha cursos...",
"send_email": "Enviar e-mail de convite para usuários importados",
"submit": "Importar usuários",
"back": "Voltar ao público",
"snackbar_success": "Usuários {importados} importados ({skipped} já existia, {emailsSent} emails enviados)",
"snackbar_no_emails": "Insira pelo menos um endereço de e-mail",
"snackbar_failed": "Falha ao importar usuários"
}
},
"community": {
"title": "Comunidade",
@@ -940,6 +987,8 @@
"complete": "Completo",
"next": "Próximo",
"prev": "Anterior",
"prev_shortcut": "Anterior (←)",
"next_shortcut": "Próximo (→)",
"disabled": "O recurso está desativado",
"version_history": {
"title": "Histórico de versões",
@@ -1200,6 +1249,9 @@
},
"edit": {
"accepted_answers_placeholder": "Respostas aceitas (separadas por vírgula)"
},
"review": {
"your_answer_label": "Enviado:"
}
},
"numeric": {
@@ -1217,6 +1269,11 @@
"tolerance_info": "Diferença permitida do valor correto (por exemplo, 0,5 aceita +/-0,5).",
"correct_value_placeholder": "Valor correto",
"tolerance_placeholder": "Tolerância"
},
"review": {
"your_answer_label": "Enviado:",
"in_range": "Dentro da tolerância",
"out_of_range": "Tolerância externa"
}
},
"short_answer": {
@@ -1228,6 +1285,10 @@
},
"edit": {
"instructions_placeholder": "Instruções opcionais"
},
"review": {
"your_answer_label": "Enviado:",
"accepted_label": "Respostas aceitas"
}
},
"true_false": {
@@ -1291,8 +1352,9 @@
"option_prefix": "Opção",
"remove": "Remover",
"add_option": "Adicionar opção",
"correct_badge": "(Correto)",
"not_set": "Não definido"
"correct_badge": "Correto",
"not_set": "Não definido",
"incorrect_badge": "Incorreto"
}
}
},
@@ -1473,7 +1535,10 @@
"cancel": "Cancelar"
},
"content_locked_title": "Este conteúdo está bloqueado",
"content_locked_description": "Seu instrutor ainda não desbloqueou este conteúdo. Conclua o conteúdo anterior ou volte mais tarde."
"content_locked_description": "Seu instrutor ainda não desbloqueou este conteúdo. Conclua o conteúdo anterior ou volte mais tarde.",
"saving": "Salvando…",
"saved": "Salvo",
"draft_recovery": "Um rascunho não salvo foi encontrado para esta lição. Você gostaria de restaurá-lo?"
},
"news_feed": {
"heading": "Feed de notícias",
@@ -1582,6 +1647,7 @@
"unpublished": "Não publicado",
"continue_course": "Continuar",
"learn_more": "Saiba mais",
"tags_overflow_aria": "Mais {count} tags",
"list_view": {
"title": "Título",
"description": "Descrição",
@@ -2245,7 +2311,8 @@
"email_password_disabled_message": "O login por e-mail/senha está desativado para esta organização.",
"google_auth_disabled": "A autenticação do Google está desativada.",
"signup_disabled_error": "A inscrição está desativada para esta organização. Entre em contato com seu administrador.",
"or_continue_with": "Ou continue com e-mail e senha"
"or_continue_with": "Ou continue com e-mail e senha",
"sso_enabled": "{provider} está ativado para esta organização"
},
"tabs": {
"general": "Geral",
@@ -2471,7 +2538,8 @@
"edit_group": "Editar grupo",
"edit_tag": "Editar etiqueta",
"save": "Salvar",
"cancel": "Cancelar"
"cancel": "Cancelar",
"actions_menu": "Ações de tags"
},
"common": {
"not_available": "N/A"
@@ -2480,9 +2548,13 @@
"invite": {
"organization": {
"page_title": "Junte-se a {orgName} no ClassroomIO",
"role_label": "Função: {função}",
"email_label": "E-mail convidado: {email}",
"join_button": "Junte-se à organização",
"invitation_student": "Você foi convidado para {orgName} como aluno.",
"invitation_teacher": "Você foi convidado para {orgName} como professor.",
"invitation_admin": "Você foi convidado para {orgName} como administrador.",
"invitation_fallback": "Você foi convidado para {orgName} como {role}.",
"email_line": "E-mail: {email}",
"accept_button": "Aceitar convite",
"go_to_dashboard": "Ir para o painel",
"messages": {
"email_mismatch": "Você está conectado com um e-mail diferente deste convite.",
"expired": "Este link de convite expirou.",
@@ -2520,6 +2592,17 @@
"cancel": "Cancel",
"save": "Create key"
}
},
"usage": {
"title": "Uso e limites",
"description": "O MCP está disponível em todos os planos, mas o uso é controlado com créditos mensais de automação e limites principais.",
"credits_title": "Créditos restantes",
"credits_description": "As ações mutantes do MCP consomem créditos. As ações de leitura são gratuitas.",
"keys_title": "Chaves ativas",
"keys_description": "Use uma chave MCP por integração para que o acesso possa ser alternado ou revogado de forma limpa.",
"rate_limits_title": "Limites de taxa",
"rate_limits_description": "Solicitações de leitura/gravação/publicação permitidas por minuto.",
"used_label": "Usado:"
}
},
"keys": {
@@ -2534,7 +2617,11 @@
"never_used": "Nunca",
"scopes_label": "Escopos:",
"revoke_confirm": "Revogar esta chave de automação?",
"rotate_confirm": "Girar esta chave de automação?"
"rotate_confirm": "Girar esta chave de automação?",
"table_key": "Chave",
"table_status": "Estado",
"table_created": "Criado",
"table_last_used": "Usado pela última vez"
},
"clients": {
"claude_code": "Código Claude",
@@ -475,7 +475,54 @@
"name": "Имя",
"email": "электронная почта",
"date_joined": "Дата присоединения",
"upgrade": "Обновите свой план, чтобы пригласить больше студентов"
"upgrade": "Обновите свой план, чтобы пригласить больше студентов",
"import_users": "Импортировать пользователей",
"search_placeholder": "Искать…",
"status": "Статус",
"status_active": "Активный",
"status_pending": "Ожидается",
"status_expired": "Срок действия истек",
"status_revoked": "Отозван",
"select_all": "Выбрать все",
"selected_count": "{count} выбрано",
"assign_courses": "Назначение курсам",
"invite": {
"row_actions_aria": "Открытые действия",
"resend": "Отправить приглашение повторно",
"revoke": "Отозвать ожидающее приглашение",
"resend_snackbar_success": "Письмо с приглашением отправлено",
"resend_snackbar_email_failed": "Приглашение было продлено, но письмо не удалось отправить.",
"revoke_snackbar_success": "Ожидаемое приглашение отозвано"
},
"assign": {
"title": "Назначение курсам",
"description": "Предоставьте выбранным пользователям доступ к курсам и, при необходимости, уведомите их по электронной почте.",
"select_courses": "Выберите курсы",
"select_courses_placeholder": "Выбирайте курсы...",
"send_email": "Отправить уведомление по электронной почте",
"submit": "Назначить",
"cancel": "Отмена",
"snackbar_success": "Назначены пользователи {assigned} для курсов ({alreadyEnrolled} уже зачислены, письма {emailsSent} отправлены)",
"snackbar_no_courses": "Пожалуйста, выберите хотя бы один курс",
"snackbar_failed": "Не удалось назначить курсы."
},
"import": {
"title": "Импортировать пользователей",
"description": "Добавьте студентов в свою организацию, введя их адреса электронной почты. При желании назначьте их на курсы и отправьте приглашения по электронной почте.",
"emails_label": "Адреса электронной почты",
"emails_placeholder": "Введите адреса электронной почты, разделенные запятыми, новой строкой или точкой с запятой.\nнапример alice@example.com, bob@example.com",
"course_access": "Доступ к курсу",
"no_courses": "Нет задания по курсу",
"all_courses": "Все курсы",
"select_courses": "Выберите конкретные курсы",
"select_courses_placeholder": "Выбирайте курсы...",
"send_email": "Отправить электронное письмо с приглашением импортированным пользователям",
"submit": "Импортировать пользователей",
"back": "Вернуться к аудитории",
"snackbar_success": "Импортированные пользователи: {imported} ({skiped} уже существует, писем отправлено: {emailsSent})",
"snackbar_no_emails": "Пожалуйста, введите хотя бы один адрес электронной почты",
"snackbar_failed": "Не удалось импортировать пользователей."
}
},
"community": {
"title": "Сообщество",
@@ -940,6 +987,8 @@
"complete": "Завершить",
"next": "Далее",
"prev": "Предыдущий",
"prev_shortcut": "Назад (←)",
"next_shortcut": "Далее (→)",
"disabled": "Функция отключена",
"version_history": {
"title": "История версий",
@@ -1200,6 +1249,9 @@
},
"edit": {
"accepted_answers_placeholder": "Принятые ответы (через запятую)"
},
"review": {
"your_answer_label": "Отправлено:"
}
},
"numeric": {
@@ -1217,6 +1269,11 @@
"tolerance_info": "Допустимое отклонение от правильного значения (например, 0,5 принимает +/-0,5).",
"correct_value_placeholder": "Правильное значение",
"tolerance_placeholder": "Толерантность"
},
"review": {
"your_answer_label": "Отправлено:",
"in_range": "В пределах допуска",
"out_of_range": "Внешняя толерантность"
}
},
"short_answer": {
@@ -1228,6 +1285,10 @@
},
"edit": {
"instructions_placeholder": "Дополнительные инструкции"
},
"review": {
"your_answer_label": "Отправлено:",
"accepted_label": "Принятые ответы"
}
},
"true_false": {
@@ -1291,8 +1352,9 @@
"option_prefix": "Вариант",
"remove": "Удалить",
"add_option": "Добавить вариант",
"correct_badge": "(Правильно)",
"not_set": "Не установлено"
"correct_badge": "Правильно",
"not_set": "Не установлено",
"incorrect_badge": "Неправильный"
}
}
},
@@ -1473,7 +1535,10 @@
"cancel": "Отмена"
},
"content_locked_title": "Этот контент заблокирован",
"content_locked_description": "Ваш преподаватель еще не разблокировал этот контент. Завершите предыдущий контент или зайдите позже."
"content_locked_description": "Ваш преподаватель еще не разблокировал этот контент. Завершите предыдущий контент или зайдите позже.",
"saving": "Сохранение…",
"saved": "Сохранено",
"draft_recovery": "Для этого урока найден несохраненный черновик. Хотели бы вы восстановить его?"
},
"news_feed": {
"heading": "Лента новостей",
@@ -1582,6 +1647,7 @@
"unpublished": "Неопубликовано",
"continue_course": "Продолжить",
"learn_more": "Узнать больше",
"tags_overflow_aria": "Ещё {count} тегов",
"list_view": {
"title": "Название",
"description": "Описание",
@@ -2245,7 +2311,8 @@
"email_password_disabled_message": "Для этой организации отключен вход по электронной почте и паролю.",
"google_auth_disabled": "Аутентификация Google отключена.",
"signup_disabled_error": "Регистрация для этой организации отключена. Пожалуйста, свяжитесь с вашим администратором.",
"or_continue_with": "Или продолжите, используя адрес электронной почты и пароль."
"or_continue_with": "Или продолжите, используя адрес электронной почты и пароль.",
"sso_enabled": "{provider} включен для этой организации"
},
"tabs": {
"general": "Общий",
@@ -2471,7 +2538,8 @@
"edit_group": "Редактировать группу",
"edit_tag": "Изменить тег",
"save": "Сохранить",
"cancel": "Отмена"
"cancel": "Отмена",
"actions_menu": "Действия с тегами"
},
"common": {
"not_available": "Н/Д"
@@ -2480,9 +2548,13 @@
"invite": {
"organization": {
"page_title": "Присоединяйтесь к {orgName} в ClassroomIO.",
"role_label": "Роль: {роль}",
"email_label": "Приглашенный адрес электронной почты: {email}",
"join_button": "Присоединиться к организации",
"invitation_student": "Вас пригласили в {orgName} в качестве ученика.",
"invitation_teacher": "Вас пригласили в {orgName} в качестве преподавателя.",
"invitation_admin": "Вас пригласили в {orgName} в качестве администратора.",
"invitation_fallback": "Вас пригласили в {orgName} в качестве {role}.",
"email_line": "Электронная почта: {email}",
"accept_button": "Принять приглашение",
"go_to_dashboard": "Перейти в панель управления",
"messages": {
"email_mismatch": "Вы вошли в систему с другим адресом электронной почты, указанным в этом приглашении.",
"expired": "Срок действия этой ссылки для приглашения истек.",
@@ -2520,6 +2592,17 @@
"cancel": "Cancel",
"save": "Create key"
}
},
"usage": {
"title": "Использование и ограничения",
"description": "MCP доступен в каждом плане, но использование контролируется с помощью ежемесячных кредитов на автоматизацию и ключевых лимитов.",
"credits_title": "Оставшиеся кредиты",
"credits_description": "Мутирующие действия MCP потребляют кредиты. Действия чтения бесплатны.",
"keys_title": "Активные ключи",
"keys_description": "Используйте один ключ MCP для каждой интеграции, чтобы можно было без проблем менять или отзывать доступ.",
"rate_limits_title": "Ограничения ставок",
"rate_limits_description": "Запросы на чтение/запись/публикацию разрешены в минуту.",
"used_label": "Использовано:"
}
},
"keys": {
@@ -2534,7 +2617,11 @@
"never_used": "Никогда",
"scopes_label": "Области применения:",
"revoke_confirm": "Отозвать этот ключ автоматизации?",
"rotate_confirm": "Повернуть этот ключ автоматизации?"
"rotate_confirm": "Повернуть этот ключ автоматизации?",
"table_key": "Ключ",
"table_status": "Статус",
"table_created": "Создано",
"table_last_used": "Последнее использование"
},
"clients": {
"claude_code": "Клод Код",
@@ -475,7 +475,54 @@
"name": "Tên",
"email": "Email",
"date_joined": "Ngày tham gia",
"upgrade": "Nâng cấp kế hoạch của bạn để mời thêm sinh viên"
"upgrade": "Nâng cấp kế hoạch của bạn để mời thêm sinh viên",
"import_users": "Nhập người dùng",
"search_placeholder": "Tìm kiếm…",
"status": "Trạng thái",
"status_active": "Đang hoạt động",
"status_pending": "Đang chờ xử lý",
"status_expired": "Đã hết hạn",
"status_revoked": "Đã thu hồi",
"select_all": "Chọn tất cả",
"selected_count": "đã chọn {count}",
"assign_courses": "Chỉ định cho các khóa học",
"invite": {
"row_actions_aria": "Mở hành động",
"resend": "Gửi lại lời mời",
"revoke": "Thu hồi lời mời đang chờ xử lý",
"resend_snackbar_success": "Đã gửi email mời",
"resend_snackbar_email_failed": "Lời mời đã được gia hạn nhưng không thể gửi email",
"revoke_snackbar_success": "Đã thu hồi lời mời đang chờ xử lý"
},
"assign": {
"title": "Chỉ định cho các khóa học",
"description": "Cấp cho người dùng đã chọn quyền truy cập vào các khóa học và tùy ý thông báo cho họ qua email.",
"select_courses": "Chọn khóa học",
"select_courses_placeholder": "Chọn khóa học...",
"send_email": "Gửi email thông báo",
"submit": "Chỉ định",
"cancel": "Hủy bỏ",
"snackbar_success": "Đã chỉ định người dùng {được chỉ định} cho các khóa học ({alreadyEnrolled} đã đăng ký, đã gửi {emailsSent} email)",
"snackbar_no_courses": "Vui lòng chọn ít nhất một khóa học",
"snackbar_failed": "Không thể chỉ định khóa học"
},
"import": {
"title": "Nhập người dùng",
"description": "Thêm sinh viên vào tổ chức của bạn bằng cách nhập địa chỉ email của họ. Tùy chọn chỉ định chúng cho các khóa học và gửi email mời.",
"emails_label": "Địa chỉ email",
"emails_placeholder": "Nhập các email được phân tách bằng dấu phẩy, dòng mới hoặc dấu chấm phẩy\nví dụ: alice@example.com, bob@example.com",
"course_access": "Truy cập khóa học",
"no_courses": "Không có bài tập khóa học",
"all_courses": "Tất cả các khóa học",
"select_courses": "Chọn các khóa học cụ thể",
"select_courses_placeholder": "Chọn khóa học...",
"send_email": "Gửi email lời mời tới người dùng đã nhập",
"submit": "Nhập người dùng",
"back": "Quay lại Đối tượng",
"snackbar_success": "Đã nhập {imported} người dùng ({skipped} đã tồn tại, đã gửi email {emailsSent})",
"snackbar_no_emails": "Vui lòng nhập ít nhất một địa chỉ email",
"snackbar_failed": "Không thể nhập người dùng"
}
},
"community": {
"title": "cộng đồng",
@@ -940,6 +987,8 @@
"complete": "Hoàn thành",
"next": "Tiếp theo",
"prev": "Trước đó",
"prev_shortcut": "Trước (←)",
"next_shortcut": "Tiếp (→)",
"disabled": "Tính năng bị vô hiệu hóa",
"version_history": {
"title": "Lịch sử phiên bản",
@@ -1200,6 +1249,9 @@
},
"edit": {
"accepted_answers_placeholder": "Câu trả lời được chấp nhận (được phân tách bằng dấu phẩy)"
},
"review": {
"your_answer_label": "Đã gửi:"
}
},
"numeric": {
@@ -1217,6 +1269,11 @@
"tolerance_info": "Chênh lệch được phép so với giá trị chính xác (ví dụ: 0,5 chấp nhận +/- 0,5).",
"correct_value_placeholder": "Giá trị đúng",
"tolerance_placeholder": "Dung sai"
},
"review": {
"your_answer_label": "Đã gửi:",
"in_range": "Trong phạm vi dung sai",
"out_of_range": "Dung sai bên ngoài"
}
},
"short_answer": {
@@ -1228,6 +1285,10 @@
},
"edit": {
"instructions_placeholder": "Hướng dẫn tùy chọn"
},
"review": {
"your_answer_label": "Đã gửi:",
"accepted_label": "Câu trả lời được chấp nhận"
}
},
"true_false": {
@@ -1291,8 +1352,9 @@
"option_prefix": "Tùy chọn",
"remove": "Xóa",
"add_option": "Thêm tùy chọn",
"correct_badge": "(Đúng)",
"not_set": "Chưa đặt"
"correct_badge": "Đúng",
"not_set": "Chưa đặt",
"incorrect_badge": "sai"
}
}
},
@@ -1473,7 +1535,10 @@
"cancel": "Hủy bỏ"
},
"content_locked_title": "Nội dung này đã bị khóa",
"content_locked_description": "Người hướng dẫn của bạn chưa mở khóa nội dung này. Hoàn thành nội dung trước đó hoặc kiểm tra lại sau."
"content_locked_description": "Người hướng dẫn của bạn chưa mở khóa nội dung này. Hoàn thành nội dung trước đó hoặc kiểm tra lại sau.",
"saving": "Đang lưu…",
"saved": "Đã lưu",
"draft_recovery": "Đã tìm thấy một bản nháp chưa được lưu cho bài học này. Bạn có muốn khôi phục nó không?"
},
"news_feed": {
"heading": "Nguồn cấp tin tức",
@@ -1582,6 +1647,7 @@
"unpublished": "Chưa được xuất bản",
"continue_course": "Tiếp tục",
"learn_more": "Tìm hiểu thêm",
"tags_overflow_aria": "Thêm {count} thẻ",
"list_view": {
"title": "Tiêu đề",
"description": "Mô tả",
@@ -2245,7 +2311,8 @@
"email_password_disabled_message": "Đăng nhập email/mật khẩu bị vô hiệu hóa đối với tổ chức này.",
"google_auth_disabled": "Xác thực Google bị vô hiệu hóa.",
"signup_disabled_error": "Đăng ký bị vô hiệu hóa cho tổ chức này. Vui lòng liên hệ với quản trị viên của bạn.",
"or_continue_with": "Hoặc tiếp tục với email và mật khẩu"
"or_continue_with": "Hoặc tiếp tục với email và mật khẩu",
"sso_enabled": "{provider} đã được bật cho tổ chức này"
},
"tabs": {
"general": "chung",
@@ -2471,7 +2538,8 @@
"edit_group": "Chỉnh sửa nhóm",
"edit_tag": "Chỉnh sửa thẻ",
"save": "Lưu",
"cancel": "Hủy bỏ"
"cancel": "Hủy bỏ",
"actions_menu": "Hành động gắn thẻ"
},
"common": {
"not_available": "không áp dụng"
@@ -2480,9 +2548,13 @@
"invite": {
"organization": {
"page_title": "Tham gia cùng {orgName} trên ClassroomIO",
"role_label": "Vai trò: {vai trò}",
"email_label": "Email được mời: {email}",
"join_button": "Tham gia tổ chức",
"invitation_student": "Bạn được mời vào {orgName} với vai trò học viên.",
"invitation_teacher": "Bạn được mời vào {orgName} với vai trò giáo viên.",
"invitation_admin": "Bạn được mời vào {orgName} với vai trò quản trị viên.",
"invitation_fallback": "Bạn được mời vào {orgName} với vai trò {role}.",
"email_line": "Email: {email}",
"accept_button": "Chấp nhận lời mời",
"go_to_dashboard": "Đi tới bảng điều khiển",
"messages": {
"email_mismatch": "Bạn đã đăng nhập bằng một email khác với lời mời này.",
"expired": "Liên kết mời này đã hết hạn.",
@@ -2520,6 +2592,17 @@
"cancel": "Cancel",
"save": "Create key"
}
},
"usage": {
"title": "Cách sử dụng và giới hạn",
"description": "MCP có sẵn trên mọi gói, nhưng việc sử dụng được kiểm soát bằng tín dụng tự động hóa hàng tháng và các giới hạn chính.",
"credits_title": "Tín dụng còn lại",
"credits_description": "Các hành động MCP đột biến sẽ tiêu tốn tín dụng. Hành động đọc là miễn phí.",
"keys_title": "Phím hoạt động",
"keys_description": "Sử dụng một khóa MCP cho mỗi lần tích hợp để có thể luân chuyển hoặc thu hồi quyền truy cập một cách dễ dàng.",
"rate_limits_title": "Giới hạn tỷ lệ",
"rate_limits_description": "Yêu cầu đọc/ghi/xuất bản được phép mỗi phút.",
"used_label": "Đã sử dụng:"
}
},
"keys": {
@@ -2534,7 +2617,11 @@
"never_used": "không bao giờ",
"scopes_label": "Phạm vi:",
"revoke_confirm": "Thu hồi khóa tự động hóa này?",
"rotate_confirm": "Xoay phím tự động hóa này?"
"rotate_confirm": "Xoay phím tự động hóa này?",
"table_key": "Chìa khóa",
"table_status": "Trạng thái",
"table_created": "Đã tạo",
"table_last_used": "Lần sử dụng cuối cùng"
},
"clients": {
"claude_code": "Mã Claude",