Localizar modelos de tópicos de categorias

Seguindo meu pedido original com um esboço concreto de implementação — ficarei feliz em ajudar com um PR se a direção parecer razoável.

Problema: Os modelos de tópico das categorias (categories.topic_template) não são localizáveis. O modelo CategoryLocalization e a concern Localizable cobrem apenas name e description, e o pipeline de Localização de Conteúdo por IA ignora os modelos de acordo. O compositor sempre insere o modelo do locale base, independentemente do locale do usuário.

Caso de uso: Operamos uma comunidade bilíngue (DE/EN) no Discourse AI Content Localization com tradução automática em produção. A tradução de posts/tópicos funciona muito bem, mas os modelos de categoria para conteúdo estruturado — formulários de relatório de bugs com checklists, fluxos de RSVP via BBCode [event] — não podem ser duplicados por idioma, porque o BBCode funcional deve existir exatamente uma vez. A única solução alternativa é um único modelo com rótulos bilíngues desconfortáveis (“App-Version / App version:”), o que prejudica a legibilidade para todos.

Proposta:

  1. Adicionar uma coluna de texto topic_template anulável (nullable) em category_localizations
  2. Compositor: se existir uma localização para o locale atual do usuário, use o modelo dela; caso contrário, volte para category.topic_template
  3. Expor/persistir o campo por locale na interface administrativa de categorias (ao lado do nome/descrição localizados)
  4. Incluir topic_template no pipeline de Localização de Conteúdo por IA ao traduzir categorias (como description)

A migração é trivial (add_column :category_localizations, :topic_template, :text); o principal trabalho é a lógica de seleção do compositor e a interface administrativa.

Alternativas consideradas:

  • Modelo único bilíngue (solução alternativa atual) — falha com blocos de BBCode funcionais
  • Componente de tema injetando texto por locale — frágil, sem validação no servidor, quebra compositores de API