Localiser les modèles de sujets par catégorie

Suite à ma demande initiale, voici un brouillon d’implémentation concret — je serai ravi de contribuer à une PR si la direction semble raisonnable.

Problème : Les modèles de sujets de catégorie (categories.topic_template) ne sont pas localisables. Le modèle CategoryLocalization et la préoccupation Localizable ne couvrent que les champs name et description, et le pipeline de localisation de contenu IA ignore en conséquence les modèles. Le composeur insère toujours le modèle de la locale de base, quelle que soit la locale de l’utilisateur.

Cas d’usage : Nous exploitons une communauté bilingue (DE/EN) sur Discourse avec la localisation de contenu IA et la traduction automatique en production. La traduction des publications/sujets fonctionne très bien, mais les modèles de catégorie pour le contenu structuré — formulaires de signalement de bugs avec listes de contrôle, flux RSVP via le BBCode [event] — ne peuvent pas être dupliqués par langue, car le BBCode fonctionnel doit exister exactement une fois. La seule solution de contournement est un modèle unique avec des libellés bilingues maladroits (« App-Version / App version : »), ce qui nuit à la lisibilité pour tout le monde.

Proposition :

  1. Ajouter une colonne de texte topic_template nullable à category_localizations
  2. Composeur : si une localisation pour la locale actuelle de l’utilisateur existe, utiliser son modèle ; sinon, revenir au category.topic_template
  3. Exposer/persister le champ par locale dans l’interface d’administration des catégories (à côté du nom/description localisés)
  4. Inclure topic_template dans le pipeline de localisation de contenu IA lors de la traduction des catégories (comme pour description)

La migration est triviale (add_column :category_localizations, :topic_template, :text) ; le travail principal concerne la logique de sélection du composeur et l’interface d’administration.

Alternatives envisagées :

  • Modèle unique bilingue (solution de contournement actuelle) — ne fonctionne pas avec les blocs BBCode fonctionnels
  • Composant de thème injectant du texte par locale — fragile, sans validation côté serveur, casse les composeurs API