Sistema De Internacionalizacion

Objetivo

Preparar OPS para operar en varios idiomas sin introducir complejidad innecesaria ni reescribir la interfaz de golpe.

Idiomas iniciales:

  • es: idioma por defecto.
  • en: primer idioma internacional.

Contrato Actual

  • La preferencia se guarda en localStorage con la clave ops_lang.
  • El atributo lang del documento se sincroniza con el idioma activo.
  • Los textos estaticos se traducen con atributos declarativos:

- data-i18n para texto visible.

- data-i18n-title para title.

- data-i18n-aria para aria-label.

- data-i18n-placeholder para placeholder.

  • El diccionario vive en public/i18n/es.json y public/i18n/en.json, cargado por public/js/ops-i18n.js.
  • Si falta una traduccion, se usa primero el texto de es, despues el texto original.
  • Las pantallas dinamicas tienen una red de compatibilidad con claves phrase.*: ops-i18n.js traduce frases exactas conocidas en texto visible, placeholder, title y aria-label.
  • La capa phrase.* no actua sobre Markdown, code, pre, textarea, contenido editable ni el log del asistente para no reescribir texto de usuario.

Criterio De Implementacion

  • No mezclar internacionalizacion con cambios de negocio.
  • No traducir pantallas dinamicas completas hasta estabilizar el contrato base.
  • Todo texto nuevo visible debe nacer con clave i18n si forma parte de navegacion, acciones principales, formularios o estados.
  • Las claves deben ser estables y descriptivas, por ejemplo nav.queue o topbar.newTask.
  • npm run verify:frontend valida que toda clave declarativa data-i18n* exista en public/i18n/es.json y public/i18n/en.json.
  • npm run verify:frontend valida que las claves phrase.* existan de forma simetrica en es y en, con una cobertura minima.
  • Evitar frameworks o loaders externos hasta que el volumen de textos lo justifique.

Estado

Implementado:

  • selector ES/EN en la barra superior;
  • navegacion lateral;
  • acciones principales de la barra superior;
  • etiqueta dinamica de vista lista/Kanban;
  • persistencia de idioma;
  • capa phrase.* para frases dinamicas frecuentes en login, tareas, credenciales, despliegues, flujos, proyectos, bloqueos y SaaS/workspaces.

Pendiente:

  • migrar pantallas dinamicas por bloques a claves explicitas i18nText/data-i18n cuando se refactoricen los modulos;
  • anadir pruebas de humo visuales para es y en;
  • revisar copy final antes de abrir fase beta.