카테고리 주제 템플릿 현지화

문제

Discourse의 콘텐츠 로컬라이제이션(수동 및 Discourse AI를 통한 자동 처리)은 토픽 제목, 게시물, 카테고리 이름 및 카테고리 설명을 훌륭하게 로컬라이제이션합니다. 그러나 카테고리 토픽 템플릿(categories.topic_template)은 로컬라이제이션할 수 없습니다. 다국어 커뮤니티에서 작성기(Composer)의 사전 입력 내용은 항상 사이트의 기본 언어로 표시됩니다 — 모든 사용자에게 동일하게.

현재 동작

  • CategoryLocalization은 로케일별로 namedescription을 저장합니다(Localizable 관심사(Concern)는 Topic/Post/Category에 대해 "다중 로케일 이름/설명 지원"을 제공합니다).
  • 작성기는 항상 멤버의 인터페이스 로케일에 관계없이 로컬라이제이션되지 않은 topic_template을 사용합니다.

제안된 해결책

  • CategoryLocalizationtopic_template을 추가합니다(관리자 로컬라이제이션 편집기 UI 포함).
  • 멤버가 카테고리에서 작성기를 열 때, 해당 멤버의 인터페이스 로케일에 맞는 템플릿을 사용하고, 로컬라이제이션이 없으면 카테고리의 기본 템플릿으로 폴백합니다.
  • 동일한 문제가 새로운 카테고리별 폼 템플릿에도 적용됩니다: 폼 템플릿은 카테고리 사이에서 다를 수 있지만, 하나의 카테고리 내부에서는 로케일 인식 변형이 없습니다 — 다국어 환경에서는 이를 우회하기 위해 커뮤니티를 언어별 별도 카테고리로 분리해야 합니다.

사용 사례

저희는 이중 언어 커뮤니티(기본 언어 독일어, 자동 AI 번역을 통한 영어)를 운영합니다. 일부 카테고리는 체크리스트 항목과 내장된 날짜 선택기를 위한 [event] 블록이 포함된 구조화된 작성기 템플릿을 제공합니다. 영어 사용 멤버는 현재 독일어 전용 템플릿만 받고 있습니다. 저희의 우회 방법은 단일 이중 언어 템플릿(각 라벨을 "독일어 / 영어"로 한 줄에 중복 표시)인데, 이는 작동하지만 편집자와 멤버 모두에게 번거롭고 작성기 내용을 두 배로 늘립니다.

관련 항목

  • #32464 (로컬라이제이션된 카테고리 경로) — 동일한 로컬라이제이션 영역, 카테고리.
3개의 좋아요

원래 요청에 대해 구체적인 구현 초안을 추가로 제시합니다. 방향성이 합리적이라고 판단되시면 PR 작성에 기꺼이 도움을 드리겠습니다.

문제: 카테고리 주제 템플릿(categories.topic_template)은 로컬라이즈할 수 없습니다. CategoryLocalization 모델과 Localizable concern은 namedescription만 처리하며, AI 콘텐츠 로컬라이제이션 파이프라인도 이에 따라 템플릿을 건너뜁니다. 컴포저는 사용자의 로케일과 무관하게 항상 기본 로케일의 템플릿을 삽입합니다.

사용 사례: 우리는 프로덕션 환경에서 자동 번역을 사용하여 Discourse AI 콘텐츠 로컬라이제이션으로 이중 언어(독일어/영어) 커뮤니티를 운영하고 있습니다. 게시물/주제 번역은 잘 작동하지만, 구조화된 콘텐츠의 카테고리 템플릿 — 체크리스트가 있는 버그 리포트 양식, [event] BBCode를 통한 RSVP 플로우 — 은 기능적 BBCode가 정확히 한 번만 존재해야 하므로 언어별로 복제할 수 없습니다. 유일한 우회 방법은 어색한 이중 언어 라벨(“App-Version / App version:”)을 가진 단일 템플릿을 사용하는 것이며, 이는 모든 사용자의 가독성을 해칩니다.

제안:

  1. category_localizations에 nullable한 topic_template 텍스트 컬럼 추가
  2. 컴포저: 사용자의 현재 로케일에 대한 로컬라이제이션이 존재하면 해당 템플릿을 사용하고, 없으면 category.topic_template로 폴백
  3. 카테고리 관리 UI에서 로케일별 필드를 노출/영속화(로컬라이즈된 이름/설명 옆에 배치)
  4. AI 콘텐츠 로컬라이제이션 파이프라인에서 카테고리를 번역할 때 topic_template을 포함(description과 동일하게 처리)

마이그레이션은 자명합니다(add_column :category_localizations, :topic_template, :text). 주요 작업은 컴포저 선택 로직과 관리 UI입니다.

고려된 대안:

  • 이중 언어 단일 템플릿(현재 우회 방법) — 기능적 BBCode 블록에서는 작동하지 않음
  • 로케일별 텍스트를 주입하는 테마 컴포넌트 — 취약하며, 서버 측 검증이 없고 API 컴포저를 깨뜨림