{ "message": { "hello": "Hola" }, "loginPage": { "emailLabel": "Correo electrónico", "passwordLabel": "Contraseña", "togglePasswordVisibilityLabel": "Alternar visibilidad de contraseña", "loginButton": "Iniciar sesión", "signupLink": "¿No tienes una cuenta? Regístrate", "errors": { "emailRequired": "El correo electrónico es obligatorio", "emailInvalid": "Formato de correo electrónico inválido", "passwordRequired": "La contraseña es obligatoria", "loginFailed": "Inicio de sesión fallido. Por favor, comprueba tus credenciales." }, "notifications": { "loginSuccess": "Inicio de sesión exitoso" } }, "listsPage": { "retryButton": "Reintentar", "emptyState": { "noListsForGroup": "No se encontraron listas para este grupo.", "noListsYet": "Aún no tienes listas.", "personalGlobalInfo": "Crea una lista personal o únete a un grupo para ver listas compartidas.", "groupSpecificInfo": "Este grupo aún no tiene listas." }, "createNewListButton": "Crear nueva lista", "loadingLists": "Cargando listas...", "noDescription": "Sin descripción", "addItemPlaceholder": "Añadir nuevo artículo...", "createCard": { "title": "+ Lista" }, "pageTitle": { "forGroup": "Listas para {groupName}", "forGroupId": "Listas para el Grupo {groupId}", "myLists": "Mis Listas" }, "errors": { "fetchFailed": "Error al obtener las listas." } }, "groupsPage": { "retryButton": "Reintentar", "emptyState": { "title": "¡Aún no hay grupos!", "description": "Aún no eres miembro de ningún grupo. Crea uno o únete usando un código de invitación.", "createButton": "Crear nuevo grupo" }, "groupCard": { "newListButton": "Lista" }, "createCard": { "title": "+ Grupo" }, "joinGroup": { "title": "Unirse a un grupo con código de invitación", "inputLabel": "Ingresar código de invitación", "inputPlaceholder": "Ingresar código de invitación", "joinButton": "Unirse" }, "createDialog": { "title": "Crear nuevo grupo", "closeButtonLabel": "Cerrar", "groupNameLabel": "Nombre del grupo", "cancelButton": "Cancelar", "createButton": "Crear" }, "errors": { "fetchFailed": "Error al cargar los grupos", "groupNameRequired": "El nombre del grupo es obligatorio", "createFailed": "Error al crear el grupo. Por favor, inténtalo de nuevo.", "inviteCodeRequired": "El código de invitación es obligatorio", "joinFailed": "Error al unirse al grupo. Por favor, comprueba el código de invitación e inténtalo de nuevo.", "invalidDataFromServer": "Datos inválidos recibidos del servidor.", "createFailedConsole": "Error creando grupo:", "joinFailedConsole": "Error al unirse al grupo:" }, "notifications": { "groupCreatedSuccess": "Grupo '{groupName}' creado exitosamente.", "joinSuccessNamed": "Te uniste exitosamente al grupo '{groupName}'.", "joinSuccessGeneric": "Te uniste exitosamente al grupo.", "listCreatedSuccess": "Lista '{listName}' creada exitosamente." } }, "authCallbackPage": { "redirecting": "Redirigiendo...", "errors": { "authenticationFailed": "Autenticación fallida", "noTokenProvided": "No se proporcionó ningún token" } }, "choresPage": { "title": "Tareas", "tabs": { "overdue": "Vencidas", "today": "Hoy", "upcoming": "Próximas", "allPending": "Todas pendientes", "completed": "Completadas" }, "viewToggle": { "calendarLabel": "Vista de calendario", "calendarText": "Calendario", "listLabel": "Vista de lista", "listText": "Lista" }, "newChoreButtonLabel": "Nueva tarea", "newChoreButtonText": "Nueva tarea", "loadingState": { "loadingChores": "Cargando tareas..." }, "calendar": { "prevMonthLabel": "Mes anterior", "nextMonthLabel": "Mes siguiente", "weekdays": { "sun": "Dom", "mon": "Lun", "tue": "Mar", "wed": "Mié", "thu": "Jue", "fri": "Vie", "sat": "Sáb" }, "addChoreToDayLabel": "Añadir tarea a este día", "emptyState": "No hay tareas para mostrar en este período." }, "listView": { "choreTypePersonal": "Personal", "choreTypeGroupFallback": "Grupo", "completedDatePrefix": "Completada:", "actions": { "doneTitle": "Marcar como hecha", "doneText": "Hecha", "undoTitle": "Marcar como no hecha", "undoText": "Deshacer", "editTitle": "Editar", "editLabel": "Editar tarea", "editText": "Editar", "deleteTitle": "Eliminar", "deleteLabel": "Eliminar tarea", "deleteText": "Eliminar" }, "emptyState": { "message": "No hay tareas en esta vista. ¡Bien hecho!", "viewAllButton": "Ver todas las pendientes" } }, "choreModal": { "editTitle": "Editar tarea", "newTitle": "Nueva tarea", "closeButtonLabel": "Cerrar modal", "nameLabel": "Nombre", "namePlaceholder": "Ingresar nombre de la tarea", "typeLabel": "Tipo", "typePersonal": "Personal", "typeGroup": "Grupo", "groupLabel": "Grupo", "groupSelectDefault": "Seleccionar un grupo", "descriptionLabel": "Descripción", "descriptionPlaceholder": "Añadir una descripción (opcional)", "frequencyLabel": "Frecuencia", "intervalLabel": "Intervalo (días)", "intervalPlaceholder": "p.ej. 10", "dueDateLabel": "Fecha de vencimiento", "quickDueDateToday": "Hoy", "quickDueDateTomorrow": "Mañana", "quickDueDateNextWeek": "Próxima semana", "cancelButton": "Cancelar", "saveButton": "Guardar" }, "consoleErrors": { "loadFailed": "Error al cargar todas las tareas:", "loadGroupsFailed": "Error al cargar grupos", "createAssignmentForNewChoreFailed": "Error al crear asignación para nueva tarea:", "saveFailed": "Error al guardar tarea:", "deleteFailed": "Error al eliminar tarea:", "createAssignmentFailed": "Error al crear asignación:", "updateCompletionStatusFailed": "Error al actualizar estado de finalización de la tarea:" }, "deleteDialog": { "title": "Eliminar tarea", "confirmationText": "¿Estás seguro de que quieres eliminar esta tarea? Esta acción no se puede deshacer.", "deleteButton": "Eliminar" }, "shortcutsModal": { "title": "Atajos de teclado", "descNewChore": "Nueva tarea", "descToggleView": "Alternar vista (Lista/Calendario)", "descToggleShortcuts": "Mostrar/Ocultar atajos", "descCloseModal": "Cerrar cualquier Modal/Diálogo abierto" }, "frequencyOptions": { "oneTime": "Una vez", "daily": "Diariamente", "weekly": "Semanalmente", "monthly": "Mensualmente", "custom": "Personalizado" }, "frequency": { "customInterval": "Cada {n} día | Cada {n} días" }, "formatters": { "noDueDate": "Sin fecha de vencimiento", "dueToday": "Vence hoy", "dueTomorrow": "Vence mañana", "overdueFull": "Vencida: {date}", "dueFull": "Vence el {date}", "invalidDate": "Fecha inválida" }, "notifications": { "loadFailed": "Error al cargar las tareas.", "loadGroupsFailed": "Error al cargar los grupos.", "updateSuccess": "Tarea '{name}' actualizada exitosamente.", "createSuccess": "Tarea '{name}' creada exitosamente.", "updateFailed": "Error al actualizar la tarea.", "createFailed": "Error al crear la tarea.", "deleteSuccess": "Tarea '{name}' eliminada exitosamente.", "deleteFailed": "Error al eliminar la tarea.", "markedDone": "{name} marcada como hecha.", "markedNotDone": "{name} marcada como no hecha.", "statusUpdateFailed": "Error al actualizar el estado de la tarea.", "createAssignmentFailed": "Error al crear la asignación para la tarea." }, "validation": { "nameRequired": "El nombre de la tarea es obligatorio.", "groupRequired": "Por favor, selecciona un grupo para tareas grupales.", "intervalRequired": "El intervalo personalizado debe ser de al menos 1 día.", "dueDateRequired": "La fecha de vencimiento es obligatoria.", "invalidDueDate": "Formato de fecha de vencimiento inválido." }, "unsavedChangesConfirmation": "Tienes cambios sin guardar en el formulario de la tarea. ¿Estás seguro de que quieres salir?" }, "errorNotFoundPage": { "errorCode": "404", "errorMessage": "Vaya. Aquí no hay nada...", "goHomeButton": "Ir al inicio" }, "groupDetailPage": { "loadingLabel": "Cargando detalles del grupo...", "retryButton": "Reintentar", "groupNotFound": "Grupo no encontrado o se produjo un error.", "members": { "title": "Miembros del grupo", "defaultRole": "Miembro", "removeButton": "Eliminar", "emptyState": "No se encontraron miembros.", "closeMenuLabel": "Cerrar menú" }, "invites": { "title": "Invitar miembros", "description": "Invita a nuevos miembros generando un código compartible.", "addMemberButtonLabel": "Añadir miembro", "closeInviteLabel": "Cerrar invitación", "regenerateButton": "Regenerar código de invitación", "generateButton": "Generar código de invitación", "activeCodeLabel": "Código de invitación activo actual:", "copyButtonLabel": "Copiar código de invitación", "copySuccess": "¡Código de invitación copiado al portapapeles!", "emptyState": "No hay código de invitación activo. Haz clic en el botón de arriba para generar uno.", "errors": { "newDataInvalid": "Los datos del nuevo código de invitación son inválidos." } }, "errors": { "failedToFetchActiveInvite": "Error al obtener el código de invitación activo.", "failedToFetchGroupDetails": "Error al obtener los detalles del grupo.", "failedToLoadUpcomingChores": "Error al cargar las próximas tareas:", "failedToLoadRecentExpenses": "Error al cargar los gastos recientes:" }, "console": { "noActiveInvite": "No se encontró ningún código de invitación activo para este grupo." }, "chores": { "title": "Tareas del grupo", "manageButton": "Gestionar tareas", "duePrefix": "Vence:", "emptyState": "No hay tareas programadas. ¡Haz clic en \"Gestionar tareas\" para crear algunas!" }, "expenses": { "title": "Gastos del grupo", "manageButton": "Gestionar gastos", "emptyState": "No hay gastos registrados. ¡Haz clic en \"Gestionar gastos\" para añadir algunos!", "paidBy": "Pagado por:", "owes": "debe", "paidAmount": "Pagado:", "onDate": "el", "settleShareButton": "Saldar mi parte", "activityLabel": "Actividad:", "byUser": "por", "fallbackUserName": "ID de usuario: {userId}", "activityByUserFallback": "Usuario {userId}", "splitTypes": { "equal": "Igual", "exactAmounts": "Cantidades exactas", "percentage": "Porcentaje", "shares": "Partes", "itemBased": "Basado en artículos" } }, "notifications": { "fetchDetailsFailed": "Error al obtener los detalles del grupo.", "fetchInviteFailed": "Error al obtener el código de invitación activo.", "generateInviteSuccess": "¡Nuevo código de invitación generado exitosamente!", "generateInviteError": "Error al generar el código de invitación.", "clipboardNotSupported": "Portapapeles no compatible o no hay código para copiar.", "copyInviteFailed": "Error al copiar el código de invitación.", "removeMemberSuccess": "Miembro eliminado exitosamente", "removeMemberFailed": "Error al eliminar miembro", "loadExpensesFailed": "Error al cargar los gastos recientes.", "cannotSettleOthersShares": "Solo puedes saldar tus propias partes.", "settlementDataMissing": "No se puede procesar el saldo: faltan datos.", "settleShareSuccess": "¡Parte saldada exitosamente!", "settleShareFailed": "Error al saldar la parte." }, "loading": { "settlement": "Procesando saldo..." }, "settleShareModal": { "title": "Saldar parte", "settleAmountFor": "Saldar cantidad para {userName}:", "amountLabel": "Cantidad", "cancelButton": "Cancelar", "confirmButton": "Confirmar", "errors": { "enterAmount": "Por favor, ingresa una cantidad.", "positiveAmount": "Por favor, ingresa una cantidad positiva.", "exceedsRemaining": "La cantidad no puede exceder el restante: {amount}.", "noSplitSelected": "Error: No se seleccionó ninguna división." } }, "status": { "settled": "Saldado", "partiallySettled": "Parcialmente saldado", "unsettled": "Pendiente", "paid": "Pagado", "partiallyPaid": "Parcialmente pagado", "unpaid": "No pagado", "unknown": "Estado desconocido" } }, "accountPage": { "title": "Configuración de la cuenta", "loadingProfile": "Cargando perfil...", "retryButton": "Reintentar", "profileSection": { "header": "Información del perfil", "nameLabel": "Nombre", "emailLabel": "Correo electrónico", "saveButton": "Guardar cambios" }, "passwordSection": { "header": "Cambiar contraseña", "currentPasswordLabel": "Contraseña actual", "newPasswordLabel": "Nueva contraseña", "changeButton": "Cambiar contraseña" }, "notificationsSection": { "header": "Preferencias de notificación", "emailNotificationsLabel": "Notificaciones por correo electrónico", "emailNotificationsDescription": "Recibir notificaciones por correo electrónico para actualizaciones importantes", "listUpdatesLabel": "Actualizaciones de listas", "listUpdatesDescription": "Recibir notificaciones cuando se actualicen las listas", "groupActivitiesLabel": "Actividades de grupo", "groupActivitiesDescription": "Recibir notificaciones para actividades de grupo" }, "notifications": { "profileLoadFailed": "Error al cargar el perfil", "profileUpdateSuccess": "Perfil actualizado exitosamente", "profileUpdateFailed": "Error al actualizar el perfil", "passwordFieldsRequired": "Por favor, completa los campos de contraseña actual y nueva.", "passwordTooShort": "La nueva contraseña debe tener al menos 8 caracteres.", "passwordChangeSuccess": "Contraseña cambiada exitosamente", "passwordChangeFailed": "Error al cambiar la contraseña", "preferencesUpdateSuccess": "Preferencias actualizadas exitosamente", "preferencesUpdateFailed": "Error al actualizar las preferencias" }, "saving": "Guardando..." }, "signupPage": { "header": "Regístrate", "fullNameLabel": "Nombre completo", "emailLabel": "Correo electrónico", "passwordLabel": "Contraseña", "confirmPasswordLabel": "Confirmar contraseña", "togglePasswordVisibility": "Alternar visibilidad de contraseña", "submitButton": "Regístrate", "loginLink": "¿Ya tienes una cuenta? Iniciar sesión", "validation": { "nameRequired": "El nombre es obligatorio", "emailRequired": "El correo electrónico es obligatorio", "emailInvalid": "Formato de correo electrónico inválido", "passwordRequired": "La contraseña es obligatoria", "passwordLength": "La contraseña debe tener al menos 8 caracteres", "confirmPasswordRequired": "Por favor, confirma tu contraseña", "passwordsNoMatch": "Las contraseñas no coinciden" }, "notifications": { "signupFailed": "Registro fallido. Por favor, inténtalo de nuevo.", "signupSuccess": "Cuenta creada exitosamente. Por favor, inicia sesión." } }, "listDetailPage": { "loading": { "list": "Cargando lista...", "items": "Cargando artículos...", "ocrProcessing": "Procesando imagen...", "addingOcrItems": "Añadiendo artículos OCR...", "costSummary": "Cargando resumen...", "expenses": "Cargando gastos...", "settlement": "Procesando saldo..." }, "errors": { "fetchFailed": "Error al cargar los detalles de la lista.", "genericLoadFailure": "Grupo no encontrado o se produjo un error.", "ocrNoItems": "No se extrajeron artículos de la imagen.", "ocrFailed": "Error al procesar la imagen.", "addItemFailed": "Error al añadir el artículo.", "updateItemFailed": "Error al actualizar el artículo.", "updateItemPriceFailed": "Error al actualizar el precio del artículo.", "deleteItemFailed": "Error al eliminar el artículo.", "addOcrItemsFailed": "Error al añadir artículos OCR.", "fetchItemsFailed": "Error al cargar artículos: {errorMessage}", "loadCostSummaryFailed": "Error al cargar el resumen de costos." }, "retryButton": "Reintentar", "buttons": { "addViaOcr": "Añadir vía OCR", "addItem": "Añadir", "addItems": "Añadir artículos", "cancel": "Cancelar", "confirm": "Confirmar", "saveChanges": "Guardar cambios", "close": "Cerrar", "costSummary": "Resumen de costos" }, "badges": { "groupList": "Lista de grupo", "personalList": "Lista personal" }, "items": { "emptyState": { "title": "¡Aún no hay artículos!", "message": "Añade algunos artículos usando el formulario de abajo." }, "addItemForm": { "placeholder": "Añadir un nuevo artículo", "quantityPlaceholder": "Cant.", "itemNameSrLabel": "Nombre del nuevo artículo", "quantitySrLabel": "Cantidad" }, "pricePlaceholder": "Precio", "editItemAriaLabel": "Editar artículo", "deleteItemAriaLabel": "Eliminar artículo" }, "modals": { "ocr": { "title": "Añadir artículos vía OCR", "uploadLabel": "Subir imagen" }, "confirmation": { "title": "Confirmación" }, "editItem": { "title": "Editar artículo", "nameLabel": "Nombre del artículo", "quantityLabel": "Cantidad" }, "costSummary": { "title": "Resumen de costos de la lista", "totalCostLabel": "Costo total de la lista:", "equalShareLabel": "Parte igual por usuario:", "participantsLabel": "Usuarios participantes:", "userBalancesHeader": "Saldos de usuarios", "tableHeaders": { "user": "Usuario", "itemsAddedValue": "Valor de los artículos añadidos", "amountDue": "Cantidad debida", "balance": "Saldo" }, "emptyState": "No hay resumen de costos disponible." }, "settleShare": { "title": "Saldar parte", "settleAmountFor": "Saldar cantidad para {userName}:", "amountLabel": "Cantidad", "errors": { "enterAmount": "Por favor, ingresa una cantidad.", "positiveAmount": "Por favor, ingresa una cantidad positiva.", "exceedsRemaining": "La cantidad no puede exceder el restante: {amount}.", "noSplitSelected": "Error: No se seleccionó ninguna división." } } }, "confirmations": { "updateMessage": "¿Marcar '{itemName}' como {status}?", "statusComplete": "completado", "statusIncomplete": "incompleto", "deleteMessage": "¿Eliminar '{itemName}'? Esto no se puede deshacer." }, "notifications": { "itemAddedSuccess": "Artículo añadido exitosamente.", "itemsAddedSuccessOcr": "{count} artículo(s) añadido(s) exitosamente desde OCR.", "itemUpdatedSuccess": "Artículo actualizado exitosamente.", "itemDeleteSuccess": "Artículo eliminado exitosamente.", "enterItemName": "Por favor, ingresa un nombre de artículo.", "costSummaryLoadFailed": "Error al cargar el resumen de costos.", "cannotSettleOthersShares": "Solo puedes saldar tus propias partes.", "settlementDataMissing": "No se puede procesar el saldo: faltan datos.", "settleShareSuccess": "¡Parte saldada exitosamente!", "settleShareFailed": "Error al saldar la parte." }, "expensesSection": { "title": "Gastos", "addExpenseButton": "Añadir gasto", "loading": "Cargando gastos...", "emptyState": "Aún no hay gastos registrados para esta lista.", "paidBy": "Pagado por:", "onDate": "el", "owes": "debe", "paidAmount": "Pagado:", "activityLabel": "Actividad:", "byUser": "por", "settleShareButton": "Saldar mi parte", "retryButton": "Reintentar" }, "status": { "settled": "Saldado", "partiallySettled": "Parcialmente saldado", "unsettled": "Pendiente", "paid": "Pagado", "partiallyPaid": "Parcialmente pagado", "unpaid": "No pagado", "unknown": "Estado desconocido" } }, "myChoresPage": { "title": "Mis tareas asignadas", "showCompletedToggle": "Mostrar completadas", "timelineHeaders": { "overdue": "Vencidas", "today": "Vencen hoy", "thisWeek": "Esta semana", "later": "Más tarde", "completed": "Completadas" }, "choreCard": { "personal": "Personal", "group": "Grupo", "duePrefix": "Vence", "completedPrefix": "Completada", "dueToday": "Vence hoy", "markCompleteButton": "Marcar como completada" }, "frequencies": { "one_time": "Una vez", "daily": "Diariamente", "weekly": "Semanalmente", "monthly": "Mensualmente", "custom": "Personalizado", "unknown": "Frecuencia desconocida" }, "dates": { "invalidDate": "Fecha inválida", "unknownDate": "Fecha desconocida" }, "emptyState": { "title": "¡Aún no hay asignaciones!", "noAssignmentsPending": "No tienes asignaciones de tareas pendientes.", "noAssignmentsAll": "No tienes asignaciones de tareas (completadas o pendientes).", "viewAllChoresButton": "Ver todas las tareas" }, "notifications": { "loadFailed": "Error al cargar las asignaciones", "markedComplete": "¡Se marcó \"{choreName}\" como completada!", "markCompleteFailed": "Error al marcar la asignación como completada" } }, "personalChoresPage": { "title": "Tareas personales", "newChoreButton": "Nueva tarea", "editButton": "Editar", "deleteButton": "Eliminar", "cancelButton": "Cancelar", "saveButton": "Guardar", "modals": { "editChoreTitle": "Editar tarea", "newChoreTitle": "Nueva tarea", "deleteChoreTitle": "Eliminar tarea" }, "form": { "nameLabel": "Nombre", "descriptionLabel": "Descripción", "frequencyLabel": "Frecuencia", "intervalLabel": "Intervalo (días)", "dueDateLabel": "Próxima fecha de vencimiento" }, "deleteDialog": { "confirmationText": "¿Estás seguro de que quieres eliminar esta tarea?" }, "frequencies": { "one_time": "Una vez", "daily": "Diariamente", "weekly": "Semanalmente", "monthly": "Mensualmente", "custom": "Personalizado", "unknown": "Frecuencia desconocida" }, "dates": { "invalidDate": "Fecha inválida", "duePrefix": "Vence" }, "notifications": { "loadFailed": "Error al cargar las tareas personales", "updateSuccess": "Tarea personal actualizada exitosamente", "createSuccess": "Tarea personal creada exitosamente", "saveFailed": "Error al guardar la tarea personal", "deleteSuccess": "Tarea personal eliminada exitosamente", "deleteFailed": "Error al eliminar la tarea personal" } }, "indexPage": { "welcomeMessage": "Bienvenido a la aplicación Valerie UI", "mainPageInfo": "Esta es la página de índice principal.", "sampleTodosHeader": "Tareas de ejemplo (de datos de IndexPage)", "totalCountLabel": "Recuento total de meta:", "noTodos": "No hay tareas para mostrar." }, "languageSelector": { "title": "Idioma", "languages": { "en": "English", "de": "Deutsch", "nl": "Nederlands", "fr": "Français", "es": "Español" } } }