Локализация шаблонов тем категорий

Проблема

Локализация контента в Discourse (ручная и автоматическая через Discourse AI) отлично справляется с переводом заголовков тем, сообщений, названий категорий и описаний категорий. Однако шаблоны тем для категорий (categories.topic_template) локализовать невозможно. В многоязычных сообществах предзаполнение редактора всегда отображается на языке по умолчанию сайта — для всех пользователей.

Текущее поведение

  • CategoryLocalization хранит name и description для каждой локали (черт Localizable обеспечивает поддержку «названий/описаний для нескольких локалей» для Тем/Сообщений/Категорий).
  • Редактор всегда использует нелокализованный topic_template, независимо от интерфейсной локали пользователя.

Предлагаемое решение

  • Добавить topic_template в CategoryLocalization (включая интерфейс редактора локализации в админ-панели).
  • Когда пользователь открывает редактор в категории, использовать шаблон, соответствующий его интерфейсной локали, с откатом к шаблону по умолчанию категории, если локализация отсутствует.
  • Аналогичная проблема существует и для более новых шаблонов форм для категорий: они могут различаться между категориями, но не существует вариантов, учитывающих локаль внутри одной категории — в многоязычных настройках пришлось бы разделять сообщество на отдельные категории для каждого языка, чтобы обойти это ограничение.

Сценарий использования

Мы управляем двуязычным сообществом (по умолчанию немецкий, английский через автоматический AI-перевод). В некоторых категориях используются структурированные шаблоны редактора с пунктами чек-листов и блоком [event] для встроенного выбора даты. Англоязычные пользователи в настоящее время получают шаблон только на немецком языке. Нашим временным решением является единый двуязычный шаблон (каждая метка дублируется в формате «немецкий / английский» в одной строке), что работает, но неудобно как для редакторов, так и для пользователей, и удваивает содержимое редактора.

Связанные темы

  • #32464 (маршрут локализованных категорий) — та же область локализации, категории.
3 лайка

Возвращаюсь к моему первоначальному запросу с конкретным наброском реализации — готов помочь с PR, если направление кажется разумным.

Проблема: Шаблоны тем категорий (categories.topic_template) не локализуемы. Модель CategoryLocalization и concern Localizable покрывают только name и description, а конвейер AI Content Localization соответственно пропускает шаблоны. Композер всегда вставляет шаблон базового локали, независимо от локали пользователя.

Сценарий использования: Мы ведём двуязычное (DE/EN) сообщество на Discourse AI Content Localization с автопереводом в продакшене. Перевод постов/тем работает отлично, но шаблоны категорий для структурированного контента — формы отчётов об ошибках с чек-листами, RSVP-потоки через BBCode [event] — нельзя дублировать для каждого языка, поскольку функциональный BBCode должен существовать ровно один раз. Единственный обходной путь — один шаблон с неловкими двуязычными подписями (“App-Version / App version:”), что ухудшает читаемость для всех.

Предложение:

  1. Добавить nullable текстовую колонку topic_template в category_localizations
  2. Композер: если для текущей локали пользователя существует локализация, использовать её шаблон; в противном случае откатываться к category.topic_template
  3. Экспонировать/сохранять поле для каждой локали в административном интерфейсе категории (рядом с локализованными name/description)
  4. Включить topic_template в конвейер AI Content Localization при переводе категорий (как description)

Миграция тривиальна (add_column :category_localizations, :topic_template, :text); основная работа — логика выбора в композере и административный интерфейс.

Рассмотренные альтернативы:

  • Двуязычный единый шаблон (текущий обходной путь) — не работает с функциональными блоками BBCode
  • Компонент темы, внедряющий текст для каждой локали — хрупкое решение, нет серверной валидации, ломает API-композеры