ADD new frontend

This commit is contained in:
Urtzi Alfaro
2025-08-28 10:41:04 +02:00
parent 9c247a5f99
commit 0fd273cfce
492 changed files with 114979 additions and 1632 deletions

View File

@@ -0,0 +1,160 @@
{
"login": {
"title": "Inicia sesión en tu cuenta",
"subtitle": "Accede a tu panel de control de panadería",
"email": "Correo electrónico",
"password": "Contraseña",
"remember_me": "Recordarme",
"forgot_password": "¿Olvidaste tu contraseña?",
"login_button": "Iniciar sesión",
"logging_in": "Iniciando sesión...",
"no_account": "¿No tienes cuenta?",
"register_link": "Regístrate aquí",
"demo_account": "Usar cuenta de demo",
"welcome_back": "¡Bienvenido de vuelta!",
"invalid_credentials": "Credenciales inválidas",
"account_locked": "Cuenta bloqueada temporalmente",
"too_many_attempts": "Demasiados intentos fallidos"
},
"register": {
"title": "Crea tu cuenta",
"subtitle": "Únete a la plataforma de gestión para panaderías",
"personal_info": "Información personal",
"company_info": "Información de la empresa",
"account_setup": "Configuración de cuenta",
"first_name": "Nombre",
"last_name": "Apellido",
"email": "Correo electrónico",
"phone": "Teléfono",
"company_name": "Nombre de la panadería",
"company_type": "Tipo de negocio",
"employee_count": "Número de empleados",
"password": "Contraseña",
"confirm_password": "Confirmar contraseña",
"password_requirements": "Mínimo 8 caracteres, incluye mayúsculas, minúsculas y números",
"passwords_dont_match": "Las contraseñas no coinciden",
"accept_terms": "Acepto los términos y condiciones",
"accept_privacy": "Acepto la política de privacidad",
"marketing_consent": "Quiero recibir newsletters y novedades (opcional)",
"register_button": "Crear cuenta",
"registering": "Creando cuenta...",
"have_account": "¿Ya tienes cuenta?",
"login_link": "Inicia sesión aquí",
"terms_link": "Términos de Servicio",
"privacy_link": "Política de Privacidad",
"step_of": "Paso {{current}} de {{total}}",
"continue": "Continuar",
"back": "Atrás"
},
"forgot_password": {
"title": "Recuperar contraseña",
"subtitle": "Te enviaremos un enlace para restablecer tu contraseña",
"email": "Correo electrónico",
"send_reset_link": "Enviar enlace",
"sending": "Enviando...",
"reset_sent": "Enlace de recuperación enviado",
"reset_instructions": "Revisa tu correo electrónico para obtener las instrucciones de recuperación",
"back_to_login": "Volver al inicio de sesión",
"didnt_receive": "¿No recibiste el correo?",
"resend_link": "Reenviar enlace"
},
"reset_password": {
"title": "Restablecer contraseña",
"subtitle": "Ingresa tu nueva contraseña",
"new_password": "Nueva contraseña",
"confirm_new_password": "Confirmar nueva contraseña",
"reset_button": "Restablecer contraseña",
"resetting": "Restableciendo...",
"password_reset_success": "Contraseña restablecida exitosamente",
"password_reset_error": "Error al restablecer la contraseña",
"invalid_token": "Enlace de recuperación inválido o expirado",
"expired_token": "El enlace de recuperación ha expirado"
},
"profile": {
"title": "Mi Perfil",
"personal_information": "Información Personal",
"account_settings": "Configuración de Cuenta",
"security": "Seguridad",
"preferences": "Preferencias",
"notifications": "Notificaciones",
"first_name": "Nombre",
"last_name": "Apellido",
"email": "Correo electrónico",
"phone": "Teléfono",
"avatar": "Foto de perfil",
"change_avatar": "Cambiar foto",
"current_password": "Contraseña actual",
"new_password": "Nueva contraseña",
"confirm_password": "Confirmar contraseña",
"change_password": "Cambiar contraseña",
"two_factor_auth": "Autenticación de dos factores",
"enable_2fa": "Habilitar 2FA",
"disable_2fa": "Deshabilitar 2FA",
"language": "Idioma",
"timezone": "Zona horaria",
"theme": "Tema",
"theme_light": "Claro",
"theme_dark": "Oscuro",
"theme_auto": "Automático",
"email_notifications": "Notificaciones por email",
"push_notifications": "Notificaciones push",
"marketing_emails": "Emails de marketing",
"save_changes": "Guardar cambios",
"changes_saved": "Cambios guardados exitosamente",
"profile_updated": "Perfil actualizado exitosamente"
},
"logout": {
"title": "Cerrar sesión",
"confirm": "¿Estás seguro de que quieres cerrar sesión?",
"logout_button": "Cerrar sesión",
"logging_out": "Cerrando sesión...",
"logged_out": "Has cerrado sesión exitosamente",
"goodbye": "¡Hasta luego!"
},
"session": {
"expired": "Tu sesión ha expirado",
"expires_soon": "Tu sesión expirará pronto",
"extend_session": "Extender sesión",
"login_required": "Debes iniciar sesión para acceder a esta página",
"unauthorized": "No tienes permisos para acceder a esta página",
"forbidden": "Acceso denegado",
"session_timeout": "Sesión expirada por inactividad"
},
"validation": {
"email_required": "El correo electrónico es requerido",
"email_invalid": "Ingresa un correo electrónico válido",
"password_required": "La contraseña es requerida",
"password_min_length": "La contraseña debe tener al menos {{min}} caracteres",
"password_weak": "La contraseña es muy débil",
"passwords_must_match": "Las contraseñas deben coincidir",
"first_name_required": "El nombre es requerido",
"last_name_required": "El apellido es requerido",
"phone_required": "El teléfono es requerido",
"company_name_required": "El nombre de la empresa es requerido",
"terms_required": "Debes aceptar los términos y condiciones",
"field_required": "Este campo es requerido",
"invalid_format": "Formato inválido"
},
"roles": {
"admin": "Administrador",
"manager": "Gerente",
"baker": "Panadero",
"staff": "Personal",
"owner": "Propietario",
"supervisor": "Supervisor",
"cashier": "Cajero",
"assistant": "Asistente"
},
"permissions": {
"read": "Lectura",
"write": "Escritura",
"delete": "Eliminar",
"admin": "Administrador",
"manage_users": "Gestionar usuarios",
"manage_inventory": "Gestionar inventario",
"manage_production": "Gestionar producción",
"manage_sales": "Gestionar ventas",
"view_reports": "Ver reportes",
"manage_settings": "Gestionar configuración"
}
}

View File

@@ -0,0 +1,230 @@
{
"navigation": {
"dashboard": "Panel de Control",
"operations": "Operaciones",
"inventory": "Inventario",
"production": "Producción",
"recipes": "Recetas",
"orders": "Pedidos",
"procurement": "Compras",
"pos": "Punto de Venta",
"analytics": "Análisis",
"forecasting": "Predicción",
"sales": "Ventas",
"performance": "Rendimiento",
"insights": "Insights IA",
"data": "Datos",
"weather": "Clima",
"traffic": "Tráfico",
"events": "Eventos",
"communications": "Comunicaciones",
"notifications": "Notificaciones",
"alerts": "Alertas",
"preferences": "Preferencias",
"settings": "Configuración",
"team": "Equipo",
"bakery": "Panadería",
"training": "Formación",
"system": "Sistema",
"onboarding": "Configuración Inicial"
},
"actions": {
"save": "Guardar",
"cancel": "Cancelar",
"edit": "Editar",
"delete": "Eliminar",
"add": "Agregar",
"create": "Crear",
"update": "Actualizar",
"view": "Ver",
"search": "Buscar",
"filter": "Filtrar",
"export": "Exportar",
"import": "Importar",
"download": "Descargar",
"upload": "Subir",
"print": "Imprimir",
"refresh": "Actualizar",
"reset": "Restablecer",
"clear": "Limpiar",
"submit": "Enviar",
"close": "Cerrar",
"open": "Abrir",
"back": "Volver",
"next": "Siguiente",
"previous": "Anterior",
"finish": "Finalizar",
"continue": "Continuar",
"confirm": "Confirmar"
},
"status": {
"active": "Activo",
"inactive": "Inactivo",
"pending": "Pendiente",
"completed": "Completado",
"cancelled": "Cancelado",
"draft": "Borrador",
"published": "Publicado",
"archived": "Archivado",
"enabled": "Habilitado",
"disabled": "Deshabilitado",
"available": "Disponible",
"unavailable": "No disponible",
"in_progress": "En proceso",
"failed": "Fallido",
"success": "Éxito",
"warning": "Advertencia",
"error": "Error",
"info": "Información"
},
"time": {
"today": "Hoy",
"yesterday": "Ayer",
"tomorrow": "Mañana",
"this_week": "Esta semana",
"last_week": "Semana pasada",
"next_week": "Próxima semana",
"this_month": "Este mes",
"last_month": "Mes pasado",
"next_month": "Próximo mes",
"this_year": "Este año",
"last_year": "Año pasado",
"next_year": "Próximo año",
"morning": "Mañana",
"afternoon": "Tarde",
"evening": "Noche",
"night": "Madrugada",
"now": "Ahora",
"recently": "Recientemente",
"soon": "Pronto",
"later": "Más tarde"
},
"units": {
"kg": "kg",
"g": "g",
"l": "l",
"ml": "ml",
"pieces": "piezas",
"units": "unidades",
"portions": "porciones",
"minutes": "minutos",
"hours": "horas",
"days": "días",
"weeks": "semanas",
"months": "meses",
"years": "años"
},
"categories": {
"bread": "Panes",
"pastry": "Bollería",
"cake": "Tartas",
"cookie": "Galletas",
"other": "Otros",
"flour": "Harinas",
"dairy": "Lácteos",
"eggs": "Huevos",
"fats": "Grasas",
"sugar": "Azúcares",
"yeast": "Levaduras",
"spices": "Especias",
"salted": "Salados"
},
"priority": {
"low": "Baja",
"normal": "Normal",
"medium": "Media",
"high": "Alta",
"urgent": "Urgente",
"critical": "Crítica"
},
"difficulty": {
"easy": "Fácil",
"medium": "Medio",
"hard": "Difícil",
"expert": "Experto"
},
"payment_methods": {
"cash": "Efectivo",
"card": "Tarjeta",
"transfer": "Transferencia",
"other": "Otros"
},
"delivery_methods": {
"pickup": "Recogida",
"delivery": "Entrega a domicilio"
},
"weekdays": {
"monday": "Lunes",
"tuesday": "Martes",
"wednesday": "Miércoles",
"thursday": "Jueves",
"friday": "Viernes",
"saturday": "Sábado",
"sunday": "Domingo"
},
"months": {
"january": "Enero",
"february": "Febrero",
"march": "Marzo",
"april": "Abril",
"may": "Mayo",
"june": "Junio",
"july": "Julio",
"august": "Agosto",
"september": "Septiembre",
"october": "Octubre",
"november": "Noviembre",
"december": "Diciembre"
},
"forms": {
"required": "Requerido",
"optional": "Opcional",
"loading": "Cargando...",
"no_data": "No hay datos disponibles",
"no_results": "No se encontraron resultados",
"empty_state": "No hay elementos para mostrar",
"select_option": "Seleccionar opción",
"enter_text": "Ingresa texto",
"choose_file": "Elegir archivo",
"drag_drop": "Arrastra y suelta aquí",
"or": "o"
},
"table": {
"no_data": "No hay datos para mostrar",
"loading": "Cargando datos...",
"error": "Error al cargar datos",
"rows_per_page": "Filas por página",
"showing": "Mostrando",
"of": "de",
"entries": "entradas",
"page": "Página",
"first": "Primero",
"last": "Último",
"sort_asc": "Ordenar ascendente",
"sort_desc": "Ordenar descendente"
},
"alerts": {
"confirm_delete": "¿Estás seguro de que quieres eliminar este elemento?",
"confirm_action": "¿Estás seguro de que quieres realizar esta acción?",
"unsaved_changes": "Tienes cambios sin guardar. ¿Estás seguro de que quieres salir?",
"success_save": "Guardado exitosamente",
"success_delete": "Eliminado exitosamente",
"success_update": "Actualizado exitosamente",
"success_create": "Creado exitosamente",
"operation_completed": "Operación completada exitosamente"
},
"accessibility": {
"close": "Cerrar",
"menu": "Menú",
"open_menu": "Abrir menú",
"close_menu": "Cerrar menú",
"toggle": "Alternar",
"expand": "Expandir",
"collapse": "Contraer",
"loading": "Cargando",
"image": "Imagen",
"button": "Botón",
"link": "Enlace",
"tooltip": "Información adicional"
}
}

View File

@@ -0,0 +1,203 @@
{
"general": {
"unknown_error": "Ha ocurrido un error desconocido",
"network_error": "Error de conexión de red",
"server_error": "Error del servidor",
"timeout_error": "Tiempo de espera agotado",
"permission_denied": "Permisos insuficientes",
"not_found": "Recurso no encontrado",
"conflict": "Conflicto en la operación",
"bad_request": "Solicitud inválida",
"unauthorized": "No autorizado",
"forbidden": "Acceso prohibido",
"service_unavailable": "Servicio no disponible",
"maintenance_mode": "Sistema en mantenimiento"
},
"auth": {
"invalid_credentials": "Credenciales inválidas",
"account_locked": "Cuenta bloqueada temporalmente",
"account_disabled": "Cuenta deshabilitada",
"session_expired": "Sesión expirada",
"token_invalid": "Token inválido",
"token_expired": "Token expirado",
"password_incorrect": "Contraseña incorrecta",
"email_not_found": "Correo electrónico no encontrado",
"email_already_exists": "El correo electrónico ya está registrado",
"weak_password": "La contraseña es muy débil",
"password_mismatch": "Las contraseñas no coinciden",
"registration_failed": "Error en el registro",
"login_failed": "Error al iniciar sesión",
"logout_failed": "Error al cerrar sesión",
"password_reset_failed": "Error al restablecer contraseña",
"email_verification_failed": "Error en verificación de email",
"two_factor_required": "Autenticación de dos factores requerida",
"two_factor_invalid": "Código de verificación inválido"
},
"validation": {
"required_field": "Este campo es requerido",
"invalid_email": "Formato de email inválido",
"invalid_phone": "Número de teléfono inválido",
"invalid_date": "Fecha inválida",
"invalid_number": "Número inválido",
"invalid_url": "URL inválida",
"min_length": "Mínimo {{min}} caracteres",
"max_length": "Máximo {{max}} caracteres",
"min_value": "Valor mínimo: {{min}}",
"max_value": "Valor máximo: {{max}}",
"invalid_format": "Formato inválido",
"invalid_selection": "Selección inválida",
"file_too_large": "Archivo demasiado grande",
"invalid_file_type": "Tipo de archivo no válido",
"duplicate_value": "Valor duplicado",
"invalid_range": "Rango inválido"
},
"inventory": {
"item_not_found": "Artículo no encontrado",
"insufficient_stock": "Stock insuficiente",
"invalid_quantity": "Cantidad inválida",
"negative_stock": "El stock no puede ser negativo",
"expired_item": "Artículo caducado",
"item_already_exists": "El artículo ya existe",
"supplier_not_found": "Proveedor no encontrado",
"location_not_found": "Ubicación no encontrada",
"category_not_found": "Categoría no encontrada",
"barcode_duplicate": "Código de barras duplicado",
"movement_failed": "Error en movimiento de inventario",
"stock_update_failed": "Error al actualizar stock",
"reorder_failed": "Error al generar orden de compra",
"export_failed": "Error al exportar datos",
"import_failed": "Error al importar datos",
"invalid_csv": "Archivo CSV inválido",
"missing_required_columns": "Faltan columnas requeridas"
},
"production": {
"recipe_not_found": "Receta no encontrada",
"order_not_found": "Orden de producción no encontrada",
"invalid_production_date": "Fecha de producción inválida",
"insufficient_ingredients": "Ingredientes insuficientes",
"production_already_started": "La producción ya ha comenzado",
"production_already_completed": "La producción ya está completada",
"cannot_cancel_order": "No se puede cancelar la orden",
"invalid_batch_size": "Tamaño de lote inválido",
"equipment_unavailable": "Equipo no disponible",
"staff_unavailable": "Personal no disponible",
"quality_check_failed": "Control de calidad fallido",
"recipe_validation_failed": "Error en validación de receta",
"scheduling_conflict": "Conflicto en programación",
"production_limit_exceeded": "Límite de producción excedido"
},
"sales": {
"order_not_found": "Pedido no encontrado",
"customer_not_found": "Cliente no encontrado",
"product_not_available": "Producto no disponible",
"invalid_payment_method": "Método de pago inválido",
"payment_failed": "Error en el pago",
"insufficient_change": "Cambio insuficiente",
"order_already_processed": "Pedido ya procesado",
"order_cancelled": "Pedido cancelado",
"invalid_discount": "Descuento inválido",
"minimum_order_not_met": "No se alcanzó el pedido mínimo",
"delivery_address_invalid": "Dirección de entrega inválida",
"delivery_unavailable": "Entrega no disponible",
"customer_credit_limit": "Límite de crédito del cliente excedido",
"tax_calculation_error": "Error en cálculo de impuestos"
},
"analytics": {
"data_not_available": "Datos no disponibles",
"forecast_failed": "Error en predicción",
"report_generation_failed": "Error al generar reporte",
"invalid_date_range": "Rango de fechas inválido",
"insufficient_data": "Datos insuficientes para análisis",
"calculation_error": "Error en cálculo",
"chart_render_failed": "Error al renderizar gráfico",
"export_report_failed": "Error al exportar reporte",
"filter_error": "Error en filtros",
"aggregation_failed": "Error en agregación de datos"
},
"api": {
"connection_failed": "Error de conexión",
"request_timeout": "Tiempo de espera agotado",
"server_overloaded": "Servidor sobrecargado",
"rate_limit_exceeded": "Límite de peticiones excedido",
"invalid_response": "Respuesta inválida del servidor",
"api_key_invalid": "Clave API inválida",
"endpoint_not_found": "Endpoint no encontrado",
"method_not_allowed": "Método no permitido",
"payload_too_large": "Carga útil demasiado grande",
"unsupported_media_type": "Tipo de media no soportado",
"parsing_failed": "Error al procesar respuesta",
"serialization_failed": "Error en serialización"
},
"file": {
"upload_failed": "Error al subir archivo",
"file_not_found": "Archivo no encontrado",
"file_corrupted": "Archivo corrupto",
"invalid_format": "Formato de archivo inválido",
"file_too_large": "Archivo demasiado grande",
"insufficient_space": "Espacio insuficiente",
"permission_denied": "Sin permisos para acceder al archivo",
"virus_detected": "Virus detectado en archivo",
"download_failed": "Error al descargar archivo",
"compression_failed": "Error al comprimir archivo",
"extraction_failed": "Error al extraer archivo"
},
"database": {
"connection_failed": "Error de conexión a base de datos",
"query_failed": "Error en consulta",
"constraint_violation": "Violación de restricción",
"foreign_key_error": "Error de clave foránea",
"duplicate_entry": "Entrada duplicada",
"data_integrity_error": "Error de integridad de datos",
"transaction_failed": "Error en transacción",
"deadlock_detected": "Bloqueo detectado",
"table_locked": "Tabla bloqueada",
"database_full": "Base de datos llena"
},
"external": {
"weather_service_unavailable": "Servicio meteorológico no disponible",
"payment_gateway_error": "Error en pasarela de pago",
"email_service_failed": "Error en servicio de email",
"sms_service_failed": "Error en servicio SMS",
"notification_failed": "Error al enviar notificación",
"integration_error": "Error de integración",
"third_party_unavailable": "Servicio de terceros no disponible",
"api_quota_exceeded": "Cuota de API excedida",
"external_timeout": "Tiempo de espera de servicio externo"
},
"system": {
"maintenance_mode": "Sistema en mantenimiento",
"system_overload": "Sistema sobrecargado",
"memory_error": "Error de memoria",
"disk_full": "Disco lleno",
"backup_failed": "Error en respaldo",
"restore_failed": "Error en restauración",
"configuration_error": "Error de configuración",
"license_expired": "Licencia expirada",
"update_failed": "Error en actualización",
"migration_failed": "Error en migración"
},
"ui": {
"loading_failed": "Error al cargar",
"render_error": "Error de renderizado",
"component_crashed": "Componente falló",
"navigation_failed": "Error de navegación",
"state_error": "Error de estado",
"browser_not_supported": "Navegador no soportado",
"feature_not_available": "Característica no disponible",
"script_error": "Error de script",
"style_error": "Error de estilos",
"resource_not_found": "Recurso no encontrado"
},
"actions": {
"retry": "Reintentar",
"refresh": "Actualizar",
"go_back": "Volver",
"contact_support": "Contactar soporte",
"report_bug": "Reportar error",
"try_again_later": "Intentar más tarde",
"check_connection": "Verificar conexión",
"reload_page": "Recargar página",
"clear_cache": "Limpiar caché",
"check_permissions": "Verificar permisos"
}
}

View File

@@ -0,0 +1,231 @@
{
"title": "Gestión de Inventario",
"subtitle": "Controla el stock de ingredientes y materias primas",
"overview": {
"total_items": "Total Artículos",
"low_stock": "Stock Bajo",
"total_value": "Valor Total",
"needs_reorder": "Necesita Reorden",
"out_of_stock": "Sin Stock",
"expired_items": "Artículos Caducados",
"expiring_soon": "Caduca Pronto"
},
"actions": {
"add_item": "Nuevo Artículo",
"edit_item": "Editar Artículo",
"delete_item": "Eliminar Artículo",
"update_stock": "Actualizar Stock",
"restock": "Reabastecer",
"mark_expired": "Marcar Caducado",
"export_inventory": "Exportar Inventario",
"import_data": "Importar Datos",
"generate_report": "Generar Reporte",
"bulk_update": "Actualización Masiva"
},
"fields": {
"name": "Nombre",
"category": "Categoría",
"current_stock": "Stock Actual",
"min_stock": "Stock Mínimo",
"max_stock": "Stock Máximo",
"unit": "Unidad",
"cost": "Costo",
"price": "Precio",
"supplier": "Proveedor",
"last_restocked": "Último Reabastecimiento",
"expiration_date": "Fecha de Caducidad",
"batch_number": "Número de Lote",
"location": "Ubicación",
"barcode": "Código de Barras",
"description": "Descripción",
"notes": "Notas"
},
"categories": {
"all": "Todas las categorías",
"flour": "Harinas",
"dairy": "Lácteos",
"eggs": "Huevos",
"fats": "Grasas",
"sugar": "Azúcares",
"yeast": "Levaduras",
"spices": "Especias",
"additives": "Aditivos",
"packaging": "Embalaje",
"cleaning": "Limpieza",
"equipment": "Equipos",
"other": "Otros"
},
"status": {
"available": "Disponible",
"low_stock": "Stock Bajo",
"out_of_stock": "Sin Stock",
"expired": "Caducado",
"expiring_soon": "Caduca Pronto",
"discontinued": "Descontinuado",
"on_order": "En Pedido",
"reserved": "Reservado"
},
"units": {
"kg": "Kilogramos",
"g": "Gramos",
"l": "Litros",
"ml": "Mililitros",
"pieces": "Piezas",
"boxes": "Cajas",
"bags": "Bolsas",
"bottles": "Botellas",
"cans": "Latas",
"packets": "Paquetes"
},
"alerts": {
"low_stock_alert": "Alerta de Stock Bajo",
"out_of_stock_alert": "Alerta de Sin Stock",
"expiration_alert": "Alerta de Caducidad",
"reorder_reminder": "Recordatorio de Reorden",
"low_stock_message": "{{item}} tiene stock bajo ({{current}} / {{min}})",
"out_of_stock_message": "{{item}} está sin stock",
"expiring_message": "{{item}} caduca el {{date}}",
"expired_message": "{{item}} ha caducado",
"reorder_message": "Es hora de reordenar {{item}}"
},
"filters": {
"all_categories": "Todas las categorías",
"all_suppliers": "Todos los proveedores",
"all_locations": "Todas las ubicaciones",
"all_status": "Todos los estados",
"expiring_within": "Caduca en",
"stock_level": "Nivel de stock",
"cost_range": "Rango de costo",
"last_updated": "Última actualización"
},
"search": {
"placeholder": "Buscar artículos...",
"by_name": "Por nombre",
"by_category": "Por categoría",
"by_supplier": "Por proveedor",
"by_barcode": "Por código de barras",
"no_results": "No se encontraron artículos",
"clear_search": "Limpiar búsqueda"
},
"table": {
"item": "Artículo",
"category": "Categoría",
"stock": "Stock",
"status": "Estado",
"cost": "Costo",
"supplier": "Proveedor",
"expiration": "Caducidad",
"actions": "Acciones",
"last_updated": "Actualizado",
"location": "Ubicación"
},
"forms": {
"add_item": "Agregar Nuevo Artículo",
"edit_item": "Editar Artículo",
"item_details": "Detalles del Artículo",
"stock_information": "Información de Stock",
"supplier_information": "Información del Proveedor",
"additional_information": "Información Adicional",
"required_fields": "Campos requeridos",
"save_item": "Guardar Artículo",
"cancel": "Cancelar",
"delete_confirmation": "¿Estás seguro de que quieres eliminar este artículo?",
"bulk_update_confirmation": "¿Estás seguro de que quieres actualizar {{count}} artículos?"
},
"reports": {
"inventory_report": "Reporte de Inventario",
"low_stock_report": "Reporte de Stock Bajo",
"expiration_report": "Reporte de Caducidades",
"supplier_report": "Reporte de Proveedores",
"cost_analysis": "Análisis de Costos",
"movement_report": "Reporte de Movimientos",
"generate": "Generar Reporte",
"export_pdf": "Exportar PDF",
"export_excel": "Exportar Excel",
"export_csv": "Exportar CSV"
},
"movements": {
"title": "Movimientos de Inventario",
"in": "Entrada",
"out": "Salida",
"adjustment": "Ajuste",
"transfer": "Transferencia",
"waste": "Desperdicio",
"return": "Devolución",
"consumption": "Consumo",
"production": "Producción",
"sale": "Venta",
"purchase": "Compra",
"date": "Fecha",
"type": "Tipo",
"quantity": "Cantidad",
"reason": "Razón",
"user": "Usuario",
"reference": "Referencia"
},
"suppliers": {
"title": "Proveedores",
"add_supplier": "Agregar Proveedor",
"edit_supplier": "Editar Proveedor",
"name": "Nombre",
"contact": "Contacto",
"phone": "Teléfono",
"email": "Email",
"address": "Dirección",
"payment_terms": "Términos de Pago",
"lead_time": "Tiempo de Entrega",
"rating": "Valoración",
"active": "Activo",
"inactive": "Inactivo",
"view_items": "Ver Artículos",
"contact_supplier": "Contactar Proveedor"
},
"locations": {
"title": "Ubicaciones",
"add_location": "Agregar Ubicación",
"edit_location": "Editar Ubicación",
"name": "Nombre",
"code": "Código",
"description": "Descripción",
"capacity": "Capacidad",
"temperature": "Temperatura",
"humidity": "Humedad",
"type": "Tipo",
"warehouse": "Almacén",
"freezer": "Congelador",
"refrigerator": "Refrigerador",
"pantry": "Despensa",
"display": "Vitrina"
},
"validation": {
"name_required": "El nombre es requerido",
"category_required": "La categoría es requerida",
"unit_required": "La unidad es requerida",
"cost_required": "El costo es requerido",
"min_stock_required": "El stock mínimo es requerido",
"max_stock_required": "El stock máximo es requerido",
"current_stock_required": "El stock actual es requerido",
"supplier_required": "El proveedor es requerido",
"invalid_number": "Ingresa un número válido",
"min_greater_than_zero": "Debe ser mayor a 0",
"max_greater_than_min": "El stock máximo debe ser mayor al mínimo",
"current_cannot_be_negative": "El stock actual no puede ser negativo",
"expiration_future": "La fecha de caducidad debe ser futura",
"barcode_format": "Formato de código de barras inválido"
},
"messages": {
"item_created": "Artículo creado exitosamente",
"item_updated": "Artículo actualizado exitosamente",
"item_deleted": "Artículo eliminado exitosamente",
"stock_updated": "Stock actualizado exitosamente",
"bulk_update_completed": "Actualización masiva completada",
"import_successful": "Importación exitosa",
"export_successful": "Exportación exitosa",
"report_generated": "Reporte generado exitosamente",
"supplier_created": "Proveedor creado exitosamente",
"location_created": "Ubicación creada exitosamente",
"no_items_selected": "No hay artículos seleccionados",
"operation_cancelled": "Operación cancelada",
"changes_saved": "Cambios guardados"
}
}

View File

@@ -0,0 +1,53 @@
// Spanish translations
import commonEs from './es/common.json';
import authEs from './es/auth.json';
import inventoryEs from './es/inventory.json';
import errorsEs from './es/errors.json';
// Translation resources by language
export const resources = {
es: {
common: commonEs,
auth: authEs,
inventory: inventoryEs,
errors: errorsEs,
},
};
// Supported languages
export const supportedLanguages = ['es'] as const;
export type SupportedLanguage = typeof supportedLanguages[number];
// Default language
export const defaultLanguage: SupportedLanguage = 'es';
// Language configuration
export const languageConfig = {
es: {
name: 'Español',
nativeName: 'Español',
code: 'es',
flag: '🇪🇸',
rtl: false,
},
};
// Namespaces available in translations
export const namespaces = ['common', 'auth', 'inventory', 'errors'] as const;
export type Namespace = typeof namespaces[number];
// Helper function to get language display name
export const getLanguageDisplayName = (language: SupportedLanguage): string => {
return languageConfig[language]?.nativeName || language;
};
// Helper function to check if language is supported
export const isSupportedLanguage = (language: string): language is SupportedLanguage => {
return supportedLanguages.includes(language as SupportedLanguage);
};
// Export individual language modules for direct imports
export { commonEs, authEs, inventoryEs, errorsEs };
// Default export with all translations
export default resources;