接着我最初的请求,这里提供一个具体的实现草图——如果这个方向听起来合理,我很乐意帮忙提交 PR。
问题: 分类主题模板(categories.topic_template)无法本地化。CategoryLocalization 模型和 Localizable 关注点(concern)仅覆盖 name 和 description,因此 AI 内容本地化流水线会相应地跳过模板。无论用户处于哪种语言环境,编辑器(Composer)始终插入基础语言的模板。
使用场景: 我们在生产环境中运行一个双语(德/英)社区,使用 Discourse AI 内容本地化功能进行自动翻译。帖子和主题的翻译效果很好,但用于结构化内容的分类模板——例如带有检查清单的 Bug 报告表单、通过 [event] BBCode 实现的 RSVP 流程——无法按语言复制,因为功能性 BBCode 必须恰好存在一次。唯一的变通方法是使用包含生硬双语标签(如“App-Version / App version:”)的单一模板,这会降低所有人的可读性。
建议:
- 在
category_localizations中添加一个可空的topic_template文本列 - 编辑器逻辑:如果存在用户当前语言环境的本地化记录,则使用其模板;否则回退到
category.topic_template - 在分类管理界面中按语言环境暴露/持久化该字段(位于本地化名称/描述旁边)
- 在翻译分类时,将
topic_template纳入 AI 内容本地化流水线(类似description的处理方式)
迁移很简单(add_column :category_localizations, :topic_template, :text);主要工作在于编辑器选择逻辑和管理界面。
考虑过的替代方案:
- 双语单一模板(当前的变通方法)——在遇到功能性 BBCode 块时会失效
- 通过主题组件注入按语言区分的文本——脆弱,缺乏服务器端验证,会导致 API 编辑器出错