Localizar plantillas de temas de categoría

Problema

La localización de contenido de Discourse (manual y automática mediante Discourse AI) realiza un gran trabajo al localizar títulos de temas, publicaciones, nombres de categorías y descripciones de categorías. Sin embargo, las plantillas de temas de las categorías (categories.topic_template) no pueden localizarse. En comunidades multilingües, la prellenado del compositor siempre aparece en el idioma predeterminado del sitio, para todos.

Comportamiento actual

  • CategoryLocalization almacena el name y la description por idioma (la preocupación Localizable proporciona “soporte para nombre/descripción multilingüe” para Topic/Post/Category).
  • El compositor siempre utiliza la topic_template no localizada, independientemente del idioma de la interfaz del miembro.

Solución propuesta

  • Añadir topic_template a CategoryLocalization (incluyendo la interfaz de usuario del editor de localización de administración).
  • Cuando un miembro abra el compositor en una categoría, utilizar la plantilla que coincida con su idioma de interfaz, con un respaldo a la plantilla predeterminada de la categoría si no existe una localización.
  • La misma carencia aplica a las más recientes plantillas de formulario por categoría: pueden diferir entre categorías, pero no existe una variante consciente del idioma dentro de una categoría — las configuraciones multilingües tendrían que dividir su comunidad en categorías separadas por idioma para sortearlo.

Caso de uso

Operamos una comunidad bilingüe (alemán por defecto, inglés mediante traducción automática de IA). Algunas categorías proporcionan plantillas estructuradas del compositor con elementos de lista de verificación y un bloque [event] para el selector de fecha integrado. Los miembros de habla inglesa actualmente reciben una plantilla solo en alemán. Nuestra solución alternativa es una plantilla bilingüe única (cada etiqueta duplicada como “alemán / inglés” en una línea), que funciona, pero es engorrosa tanto para editores como para miembros y duplica el contenido del compositor.

Relacionado

  • #32464 (ruta de categorías localizadas) — misma superficie de localización, categorías.
3 Me gusta

Siguiendo con mi solicitud original, aquí va un esbozo de implementación concreto; estaré encantado de ayudar con una PR si la dirección parece razonable.

Problema: Las plantillas de temas de categoría (categories.topic_template) no son localizables. El modelo CategoryLocalization y la preocupación Localizable solo cubren name y description, y el pipeline de Localización de Contenido con IA omite las plantillas en consecuencia. El compositor siempre inserta la plantilla de la lengua base, independientemente de la lengua del usuario.

Caso de uso: Operamos una comunidad bilingüe (DE/EN) en producción con Discourse AI Content Localization y traducción automática. La traducción de publicaciones/temas funciona muy bien, pero las plantillas de categoría para contenido estructurado — formularios de informes de errores con listas de verificación, flujos de confirmación de asistencia mediante BBCode [event] — no pueden duplicarse por idioma, porque el BBCode funcional debe existir exactamente una vez. La única solución alternativa es una única plantilla con etiquetas bilingües incómodas (“Versión de la app / App version:”), lo que perjudica la legibilidad para todos.

Propuesta:

  1. Añadir una columna de texto topic_template nula a category_localizations
  2. Compositor: si existe una localización para la lengua actual del usuario, usar su plantilla; en caso contrario, recurrir a category.topic_template
  3. Exponer/persistir el campo por idioma en la interfaz de administración de categorías (junto al nombre/descripción localizados)
  4. Incluir topic_template en el pipeline de Localización de Contenido con IA al traducir categorías (como description)

La migración es trivial (add_column :category_localizations, :topic_template, :text); el trabajo principal es la lógica de selección del compositor y la interfaz de administración.

Alternativas consideradas:

  • Plantilla única bilingüe (solución actual) — falla con bloques de BBCode funcionales
  • Componente de tema que inyecta texto por idioma — frágil, sin validación en el servidor, rompe los compositores de la API