feat(i18n & ux): auditoria, traduccion completa, correcciones ux y gestion de idioma en perfil
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# Resumen de Cambios - Sesión de Desarrollo (Rama `dev`)
|
||||
|
||||
**Fecha:** 2026-09-02 / 2026-09-03
|
||||
**Proyecto:** Admin Edu-Space (Flask + PostgreSQL)
|
||||
**Rama:** `dev`
|
||||
|
||||
---
|
||||
|
||||
## 1. Auditoría Git y Puesta en Producción
|
||||
* **Informe Técnico Completo (`DEPLOYMENT_AUDIT.md`):**
|
||||
* Análisis de ramas locales y remotas (`main`, `dev`, `origin/planning`, `origin/commissions`, `origin/spanish`).
|
||||
* Manual de despliegue en producción con arquitectura WSGI (Gunicorn), Nginx como proxy inverso, Systemd unit y contenedorización Docker / Docker Compose.
|
||||
* **Archivos Base:**
|
||||
* Creación de `.env.example` con todas las variables requeridas (PostgreSQL, Flask, Secret Key, Babel).
|
||||
* Creación de `init_db.py` para bootstrap inicial seguro de base de datos y usuario administrador por defecto (`admin@edu-space.com` / `admin123`).
|
||||
|
||||
---
|
||||
|
||||
## 2. Base de Datos y Modelos
|
||||
* **Preferencia de Idioma Persistente:**
|
||||
* Migración en PostgreSQL agregando la columna `preferred_language VARCHAR(10)` a la tabla `users`.
|
||||
* Actualización del modelo `User` en `app/models/user.py` con el campo `preferred_language`.
|
||||
|
||||
---
|
||||
|
||||
## 3. Implementación de Vistas y Plantillas Faltantes
|
||||
* **Perfil de Usuario (`app/templates/auth/profile.html`):**
|
||||
* Vista completa con datos del usuario, rol, estado, fecha de registro y reservas recientes.
|
||||
* Formulario interactivo para configurar la **Preferencia de Idioma** (*Detectar automáticamente del navegador*, *Español*, *English*).
|
||||
* **Cambio de Contraseña (`app/templates/auth/change_password.html`):**
|
||||
* Formulario seguro para actualización de credenciales.
|
||||
* **Manejo de Errores (`app/templates/auth/403.html`):**
|
||||
* Pantalla de error 403 Forbidden estilizada.
|
||||
|
||||
---
|
||||
|
||||
## 4. Correcciones de UX y Bugs de Rutas
|
||||
* **Navbar Limpio (`app/templates/base.html`):**
|
||||
* Eliminación del bloque duplicado del menú de usuario `System Administrator`.
|
||||
* **Corrección de BuildError en Comisiones:**
|
||||
* En `app/routes/classrooms.py`, se agregó el alias de ruta `@classrooms_bp.route('/', endpoint='index')` para resolver enlaces a `classrooms.index`.
|
||||
* En `app/templates/schedule/commissions.html`, se reemplazó el filtro inválido de Django `truncatewords(20)` por el filtro estándar de Jinja2 `truncate(100)`.
|
||||
* **Corrección Visual en `/genetic-optimizer` (`app/templates/genetic_optimizer.html`):**
|
||||
* Se agregó el espaciado `pt-5 mt-4` evitando que la barra de navegación fija superior (`fixed-top`) se monte sobre el contenido.
|
||||
* Rediseño de tarjeta hero con contraste óptimo y reemplazo de iconos faltantes por Bootstrap Icons (`bi bi-...`).
|
||||
* **Corrección en Calendario (`app/templates/schedule/calendar.html`):**
|
||||
* Inclusión de contenedor con espaciado superior y bundle de localización `locales-all.min.js` para FullCalendar.
|
||||
|
||||
---
|
||||
|
||||
## 5. Internacionalización (i18n) y Localización al Español
|
||||
* **Configuración del Motor Babel (`config/config.py` y `babel.cfg`):**
|
||||
* Configuración de `BABEL_TRANSLATION_DIRECTORIES` con ruta absoluta.
|
||||
* Actualización del método de extracción Jinja2 en `babel.cfg`.
|
||||
* **Formularios con Traducción Lazy (`lazy_gettext`):**
|
||||
* `app/forms/auth.py` (`LoginForm`).
|
||||
* `app/forms/classroom.py` (`ClassroomForm`, `ClassroomResourceForm`).
|
||||
* `app/forms/reservation.py` (`ReservationForm`).
|
||||
* **Traducción Integral de Plantillas:**
|
||||
* `app/templates/auth/login.html`: Pantalla de login traducida y con selector de idioma visible.
|
||||
* `app/templates/dashboard.html`: Todas las tarjetas estadísticas, acciones rápidas y tablas.
|
||||
* `app/templates/classrooms/list.html` y `add.html`: Filtros, estados vacíos, cabeceras y formularios.
|
||||
* `app/templates/schedule/today.html`: Horario del día, métricas y botones.
|
||||
* `app/templates/schedule/calendar.html`: Vistas, leyendas y eventos.
|
||||
* `app/templates/genetic_optimizer.html`: Estado del algoritmo y controles.
|
||||
* `app/templates/partials/language_switcher.html`: Muestra "Español" en lugar de "Spanish".
|
||||
* **Compilación de Catálogos:**
|
||||
* Compilación binaria de `messages.po` a `messages.mo` en `translations/es/` y `translations/en/` con 0 mensajes pendientes.
|
||||
|
||||
---
|
||||
|
||||
## 6. Lógica de Detección y Precedencia de Idiomas
|
||||
En `app/__init__.py` (`get_locale()`):
|
||||
1. **Parámetro URL (`?lang=`):** Máxima prioridad para cambio explícito.
|
||||
2. **Preferencia en Perfil del Usuario (`current_user.preferred_language`):** Sobrescribe la configuración del navegador en toda la sesión si el usuario está autenticado.
|
||||
3. **Preferencia de Sesión (`session['language']`):** Cambio manual mediante el dropdown.
|
||||
4. **Detección Automática del Navegador (`request.accept_languages.best_match()`):** Valor por defecto para visitantes no autenticados y pantalla de login.
|
||||
* Al cerrar sesión (`logout`), se limpia la sesión para que el login use el navegador.
|
||||
* Al cambiar el idioma en el selector siendo usuario autenticado, se sincroniza automáticamente con su perfil en base de datos.
|
||||
|
||||
---
|
||||
|
||||
## 7. Configuración del Entorno de Desarrollo
|
||||
* Se creó `.vscode/settings.json` apuntando al intérprete del entorno virtual (`venv\Scripts\python.exe`), solucionando falsos positivos del analizador estático para `flask_wtf` y `flask_babel`.
|
||||
Reference in New Issue
Block a user