ADD new frontend
This commit is contained in:
160
frontend/src/locales/es/auth.json
Normal file
160
frontend/src/locales/es/auth.json
Normal 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"
|
||||
}
|
||||
}
|
||||
230
frontend/src/locales/es/common.json
Normal file
230
frontend/src/locales/es/common.json
Normal 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"
|
||||
}
|
||||
}
|
||||
203
frontend/src/locales/es/errors.json
Normal file
203
frontend/src/locales/es/errors.json
Normal 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"
|
||||
}
|
||||
}
|
||||
231
frontend/src/locales/es/inventory.json
Normal file
231
frontend/src/locales/es/inventory.json
Normal 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"
|
||||
}
|
||||
}
|
||||
53
frontend/src/locales/index.ts
Normal file
53
frontend/src/locales/index.ts
Normal 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;
|
||||
Reference in New Issue
Block a user