fix: placeholder names inside {…} were translated

This commit is contained in:
Rotimi Best
2026-05-27 14:57:21 +01:00
parent 9082cbebf4
commit d855b45eda
9 changed files with 347 additions and 329 deletions
@@ -7,17 +7,17 @@
},
"validations": {
"generic": {
"invalid_type": "Tipo no válido{esperado, seleccionado, indefinido{} otro{. Esperado {esperado}}}{recibido, seleccionado, indefinido{} otro{ (recibido {recibido})}}",
"too_big": "El valor es demasiado grande{máximo, selección, undefinido{} otro{. Máximo {máximo}}}",
"too_small": "El valor es demasiado pequeño{mínimo, seleccionado, undefinido{} otro{. Mínimo {mínimo}}}",
"invalid_format": "Formato no válido{validación, selección, indefinido{} otro{ para {validación}}}",
"invalid_type": "Tipo no válido{expected, select, undefined{} other{. Expected {expected}}}{received, select, undefined{} other{ (received {received})}}",
"too_big": "El valor es demasiado grande{maximum, select, undefined{} other{. Maximum {maximum}}}",
"too_small": "El valor es demasiado pequeño{minimum, select, undefined{} other{. Minimum {minimum}}}",
"invalid_format": "Formato no válido{validation, select, undefined{} other{ for {validation}}}",
"not_multiple_of": "El valor debe ser múltiplo de {multipleOf}",
"unrecognized_keys": "Contiene claves no reconocidas{keys, select, undefined{} other{: {keys}}}",
"invalid_union": "Valor no válido para las opciones proporcionadas{unionErrors, select, undefined{} other{. {unionErrors} opción(es) fallida(s)}}",
"invalid_key": "Clave no válida{clave, selección, undefinido{} otro{: {clave}}}",
"invalid_element": "Elemento no válido{índice, selección, undefinido{} otro{ en el índice {índice}}}",
"invalid_value": "Valor no válido{esperado, seleccionado, indefinido{} otro{. Esperado {esperado}}}{recibido, seleccionado, indefinido{} otro{ (recibido {recibido})}}",
"custom": "{mensaje}",
"invalid_key": "Clave no válida{key, select, undefined{} other{: {key}}}",
"invalid_element": "Elemento no válido{index, select, undefined{} other{ at index {index}}}",
"invalid_value": "Valor no válido{expected, select, undefined{} other{. Expected {expected}}}{received, select, undefined{} other{ (received {received})}}",
"custom": "{message}",
"required_field": "Este campo es obligatorio",
"invalid_field": "Valor no válido"
},
@@ -118,7 +118,7 @@
},
"exercise": {
"options": {
"custom": "{mensaje}"
"custom": "{message}"
},
"points": {
"too_small": "Los puntos deben ser al menos 0."
@@ -470,7 +470,7 @@
"title": "Analítica",
"courses": "Cursos",
"progress": "Progreso",
"progress_description": "{valor, número} de {total, número} completo",
"progress_description": "{value, number} de {total, number} completo",
"incomplete": "Incompleto",
"completed": "Completado",
"complete": "completo",
@@ -503,7 +503,7 @@
"view_details": "Ver detalles",
"no_students_found": "No se encontraron estudiantes",
"no_students_description": "Aún no hay estudiantes matriculados en este curso. Los estudiantes aparecerán aquí una vez que se unan al curso.",
"showing_students": "Mostrando del {inicio} al {fin} de {total} estudiantes",
"showing_students": "Mostrando del {start} al {end} de {total} estudiantes",
"no_analytics_data": "Sin datos analíticos",
"no_analytics_description": "No se pueden cargar datos analíticos para este curso. Inténtelo de nuevo más tarde o comuníquese con el soporte si el problema persiste.",
"student": "estudiante",
@@ -531,7 +531,7 @@
"description": "Inscripciones agrupadas por tipo de curso",
"subtitle": "{total} inscripciones en todos los tipos",
"empty": "Aún no hay datos de matrícula",
"course_count": "{count, plural, one {# curso} otro {# cursos}}",
"course_count": "{count, plural, one {# course} other {# courses}}",
"views_short": "vistas",
"types": {
"SELF_PACED": "a su propio ritmo",
@@ -589,8 +589,8 @@
"progress_distribution_card_description": "¿Cuántos alumnos se encuentran en cada banda de finalización?",
"grade_distribution_card_description": "Cuántos alumnos se encuentran en cada grupo de grado.",
"students_table_description": "Descripción general ordenable con enlaces a perfiles de alumnos.",
"kpi_team_tutors": "{count, plural, one {# tutor en el equipo del curso} other {# tutores en el equipo del curso}}",
"kpi_lessons_exercises": "{count, plural, one {# ejercicio} other {# ejercicios}} asignados a lecciones",
"kpi_team_tutors": "{count, plural, one {# tutor on the course team} other {# tutors on the course team}}",
"kpi_lessons_exercises": "{count, plural, one {# exercise} other {# exercises}} asignados a lecciones",
"kpi_progress_grade": "{grade}% de calificación promedio de ejercicio entre los estudiantes inscritos"
}
},
@@ -1109,7 +1109,7 @@
"snackbar_failed_revoke_invite": "No se pudo revocar la invitación",
"snackbar_failed_load_audit": "No se pudo cargar la auditoría de invitación",
"snackbar_metadata_copied": "Metadatos de invitación copiados",
"snackbar_email_invites_success": "Se crearon {count} invitaciones. Enviado {enviado}, falló {falló}. Se omitieron {duplicados} duplicados.",
"snackbar_email_invites_success": "Se crearon {count} invitaciones. Enviado {sent}, falló {failed}. Se omitieron {duplicates} duplicados.",
"select_at_least_one_student": "Select at least one existing student",
"presets": {
"one_time_24h": "Una vez (24h)",
@@ -1342,7 +1342,7 @@
"checking_submission": "Comprobando tu envío...",
"answer_required": "Por favor responda esta pregunta antes de continuar.",
"instructor_feedback": "Comentarios del instructor",
"attempt_counter": "Intento {actual} de {total}",
"attempt_counter": "Intento {current} de {total}",
"previous_try": "Intento anterior",
"next_try": "Próximo intento",
"try_again": "Inténtalo de nuevo",
@@ -1379,7 +1379,9 @@
},
"select_type": "Seleccionar tipo",
"question_type_auto_gradable": "Auto",
"question_type_auto_gradable_description": "Scored automatically by the system",
"question_type_manual_grading": "Manual",
"question_type_manual_grading_description": "Requires human review to score",
"premium_question_type": "Actualice para usar este tipo de pregunta"
},
"delete_confirmation": {
@@ -1439,7 +1441,7 @@
"helper": "Arrastra los elementos para definir el orden correcto.",
"add_step": "Agregar paso",
"empty": "Agregue pasos y luego arrastre para establecer el orden esperado.",
"step_placeholder": "Paso '{'índice'}'",
"step_placeholder": "Paso '{'index'}'",
"remove_step_tooltip": "Quitar paso"
}
},
@@ -1457,7 +1459,7 @@
"link": {
"preview": {
"empty": "No se enviaron enlaces.",
"item_label": "Enlace '{'índice'}'"
"item_label": "Enlace '{'index'}'"
},
"take": {
"helper": "Agregue uno o más enlaces. Sólo se aceptan URL http/https válidas.",
@@ -1781,7 +1783,7 @@
"upload_success": "¡Documento cargado exitosamente!",
"upload_error": "No se pudo cargar el documento",
"file_type_error": "Tipo de archivo no compatible. Cargue archivos PDF, DOCX o DOC.",
"file_size_error": "El tamaño del archivo es demasiado grande. El tamaño máximo es {tamaño}.",
"file_size_error": "El tamaño del archivo es demasiado grande. El tamaño máximo es {size}.",
"type": "Tipo",
"size": "Tamaño",
"upload_error_title": "Error de carga",
@@ -1795,7 +1797,7 @@
"view_pdf": "Ver PDF",
"remove_document": "Quitar documento",
"delete": "Eliminar",
"page_of": "Página {página} de {total}",
"page_of": "Página {page} de {total}",
"loading_pdf": "Cargando PDF...",
"failed_to_load_pdf": "No se pudo cargar el documento PDF",
"failed_to_render_pdf": "No se pudo renderizar la página PDF",
@@ -1837,8 +1839,8 @@
"add_from_library": "Agregar desde la biblioteca",
"cancel_upload": "Cancelar carga",
"upload_cancelled": "Subida cancelada por el usuario",
"max_files": "{count, plural, one {Puedes subir # archivo} other {Puedes subir # archivos}}",
"max_files_and_size": "(hasta {tamaño} cada uno)",
"max_files": "{count, plural, one {You can upload # file} other {You can upload # files}}",
"max_files_and_size": "(hasta {size} cada uno)",
"google_drive_choose": "Elige desde Google Drive",
"google_drive_opening": "Selector de apertura…",
"google_drive_hint": "Elija un vídeo de su cuenta de Google. Cualquiera que vea la lección necesita acceso; configure el uso compartido en Drive en \"Cualquier persona con el enlace puede ver\" (o el equivalente de su organización).",
@@ -2079,7 +2081,7 @@
"back_to_course": "volver al curso",
"content_count": {
"lessons": "{count} lecciones",
"exercises": "{contar} ejercicios"
"exercises": "{count} ejercicios"
},
"compliance": {
"title": "Cumplimiento",
@@ -2327,19 +2329,19 @@
"learner": "aprendiz",
"progress": "Progreso",
"pick_up_where_you_left_off": "Continua donde lo dejaste",
"course_awaits_you": "{título} te espera",
"course_awaits_you": "{title} te espera",
"learning_awaits_you": "Tu próximo curso te espera",
"lms_today_progress": "Estás {progresando}% en tu aprendizaje: cada paso cuenta.",
"lms_today_progress": "Estás {progress}% en tu aprendizaje: cada paso cuenta.",
"lms_today_empty": "Tu camino de aprendizaje estará listo cuando tú lo estés.",
"compliance_score": "Puntuación de cumplimiento",
"compliance": "Cumplimiento",
"compliance_score_subtitle": "{completado} de {total} cursos de cumplimiento actualmente satisfechos",
"compliance_score_subtitle": "{completed} de {total} cursos de cumplimiento actualmente satisfechos",
"compliance_score_empty": "Aún no se han asignado cursos de cumplimiento",
"compliance_met": "{completado} de {total} cumplido",
"required_courses_completed": "{completado} de {total} cursos requeridos completados",
"compliance_met": "{completed} de {total} cumplido",
"required_courses_completed": "{completed} de {total} cursos requeridos completados",
"streak": "racha",
"days_active": "dias activos",
"items_done": "{completado} de {total} hecho",
"items_done": "{completed} de {total} hecho",
"login_activity_title": "Actividad de inicio de sesión del estudiante",
"login_activity_description": "Días más activos de la semana (últimos 90 días)",
"login_activity_no_data": "Aún no hay actividad de inicio de sesión",
@@ -3050,7 +3052,7 @@
"field_theme": "Tema",
"field_hero": "Título del héroe",
"field_nav": "Navegación",
"field_nav_count_one": "{contar} enlace",
"field_nav_count_one": "{count} enlace",
"field_nav_count_other": "{count} enlaces",
"hero_empty": "—",
"customize": "Personalizar la página de destino"
@@ -3220,7 +3222,7 @@
"login": {
"sso_redirect_error": "El inicio de sesión SSO está mal configurado. Configure PUBLIC_SERVER_URL en su servidor API.",
"sso_required": "Inicie sesión con SSO. El inicio de sesión con contraseña está deshabilitado.",
"sign_in_with_sso": "Iniciar sesión con {proveedor}",
"sign_in_with_sso": "Iniciar sesión con {provider}",
"email_password_disabled": "El inicio de sesión por correo electrónico/contraseña está deshabilitado. Utilice SSO.",
"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.",
@@ -3266,8 +3268,8 @@
"title": "Compra más fichas",
"description": "Cada paquete agrega 5.000.000 de créditos por $5 USD. Elige cuántos paquetes necesitas.",
"quantity_hint": "paquetes",
"preview": "{cantidad} paquete(s) · {tokens} tokens · ${dollars}",
"buy_button": "Compra por ${dolares}"
"preview": "{quantity} paquete(s) · {tokens} tokens · ${dollars}",
"buy_button": "Compra por ${dollars}"
},
"leaderboard": {
"title": "Uso del equipo",
@@ -3294,7 +3296,7 @@
"included": {
"title": "Su uso incluido",
"subtitle": "Fichas mensuales incluidas en tu plan.",
"resets_on": "Restablece {fecha}"
"resets_on": "Restablece {date}"
}
}
},
@@ -3702,7 +3704,7 @@
"no_available_courses": "No hay cursos disponibles para agregar.",
"no_matching_courses": "Ningún curso coincide con tu búsqueda.",
"no_matching_program_courses": "Ningún programa de cursos coincide con su búsqueda.",
"pagination_status": "Página {página} de {totalPages}",
"pagination_status": "Página {page} de {totalPages}",
"published_access_callout_title": "Acceso de estudiantes",
"published_access_callout_description": "Los estudiantes solo tienen acceso a los cursos publicados. Los cursos pueden estar en este programa para su equipo mientras aún no están publicados, mientras que permanecen ocultos para los estudiantes hasta que los publique."
},
@@ -3967,10 +3969,10 @@
"rename_chat_placeholder": "Título de la conversación",
"rename_chat_failed": "No se pudo cambiar el nombre de esta conversación. Intentar otra vez.",
"error_rate_limit": "El servicio de IA está temporalmente ocupado. Inténtelo de nuevo en un momento.",
"error_rate_limit_with_wait": "El servicio de IA está temporalmente ocupado. Inténtalo de nuevo en {segundos} segundos.",
"error_rate_limit_with_wait": "El servicio de IA está temporalmente ocupado. Inténtalo de nuevo en {seconds} segundos.",
"error_context_too_long": "La conversación es demasiado larga. Intente iniciar un nuevo chat o acortar su mensaje.",
"error_network": "Error de red. Por favor verifique su conexión e inténtelo nuevamente.",
"context_usage_tooltip": "{usados} / {max} tokens usados",
"context_usage_tooltip": "{used} / {max} tokens usados",
"context_full_title": "La ventana de contexto está llena",
"context_full_description": "The assistant will summarize older messages automatically so you can keep working in this chat.",
"context_full_compact": "Conversación compacta",
@@ -3996,7 +3998,7 @@
"completed": "Ejecución completada.",
"completed_with_counts": "Ejecución completada: creada {counts}.",
"failed": "La ejecución falló.",
"failed_with_reason": "La ejecución falló: {motivo}.",
"failed_with_reason": "La ejecución falló: {reason}.",
"canceled": "Ejecución cancelada.",
"canceled_with_counts": "Ejecución cancelada: creó {counts} antes de detenerse.",
"paused": "Ejecución pausada. Reanudar para continuar.",
@@ -4260,7 +4262,7 @@
"subtitle": "Realice un seguimiento del estado de la certificación en todos los cursos de cumplimiento de su organización.",
"learners": {
"heading": "Estudiantes",
"subtitle": "{recuento, número} coincidente",
"subtitle": "{count, number} coincidente",
"empty": "Ningún alumno coincide con este filtro",
"learner": "aprendiz",
"course": "Curso",
@@ -4311,7 +4313,7 @@
"submit": "revisa mis respuestas",
"try_again": "Inténtalo de nuevo",
"practice_again": "Practica de nuevo",
"attempt_option": "Intento {númerointento} - {correcto}/{total}",
"attempt_option": "Intento {attemptNumber} - {correct}/{total}",
"attempts_select_aria": "Tus intentos",
"privacy_hint": "Calificado instantáneamente en su navegador: no se envía nada.",
"summary_template": "Obtuviste [[correcto]] / [[total]] correcto."
@@ -4334,7 +4336,7 @@
"page_title": "Espacios de trabajo",
"page_description": "Administre los espacios de trabajo de su cuenta. Los espacios de trabajo comparten una única suscripción y un uso conjunto.",
"create_cta": "Crear espacio de trabajo",
"create_cta_used": "{usado} de {asignación} usado",
"create_cta_used": "{used} de {allowance} usado",
"create_cta_disabled_limit": "Has alcanzado el límite del espacio de trabajo de {allowance}. Contáctanos para ampliar.",
"create_cta_disabled_upgrade": "El espacio de trabajo múltiple es una característica empresarial.",
"upgrade_link": "Actualizar",