ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

多语言快速上线:Wagtail 多语言内容管理完整清单

多语言快速上线:Wagtail 多语言内容管理完整清单 多语言快速上线Wagtail 多语言内容管理完整清单【免费下载链接】wagtailA Django content management system focused on flexibility and user experience项目地址: https://gitcode.com/GitHub_Trending/wa/wagtail产品下周一要在德国和日本同时上线站点内容却只有一份中文。编辑想在 Wagtail 里做出日语版首页翻遍页面动作菜单也没找到翻译按钮。这不是按钮缺失Wagtail 多语言内容管理靠的是一套明确的机制从配置语言开始按步骤走下来即可。✅ 确认适用性适合与不适合Wagtail 走的是每种语言一棵独立页面树的路线并非万金油。动手前先对照边界适合页面、Snippet 需要整体译成多种语言且各语言版本独立发布、独立排期不同语言由不同编辑维护权限按语言隔离前端 URL 需要 /en/、/ja/ 这类语言前缀不适合只翻译模板和 JS 里的静态文案那属于 Django i18n 的范畴期望所有语言共享同一条数据库记录、做字段级翻译依赖机器翻译 API 自动回填译文Wagtail 核心不含此能力需第三方扩展 弄清 Wagtail 翻译的三个核心概念只需理解三件事其余都是细节Locale 语言登记一个内容允许使用的语言代码。添加语言后 Wagtail 会为它新开一棵页面树新语言树的首页与原首页是兄弟节点。translation_key 译文关联translation_key 相同的页面互为翻译locale 与 translation_key 组合唯一保证同一语言下最多一份译文。语言切换Django 的 LocaleMiddleware 检测请求语言i18n_patterns 给 URL 加前缀Wagtail 把请求路由到对应语言树的首页找不到就回退到默认语言。这种结构在页面浏览器里直观可见各语言内容各归其树每页的草稿与发布状态互不牵连。️ 跑通一次完整翻译流程按配置语言 → 挂翻译 → 切换访问 → 上线前自检四步走。1. 配置语言打开 i18n 开关并声明语言白名单# settings.py USE_I18N True WAGTAIL_I18N_ENABLED True WAGTAIL_CONTENT_LANGUAGES LANGUAGES [ (zh, Chinese), (ja, Japanese), ] INSTALLED_APPS [ # ... wagtail.locales, # 语言管理界面 wagtail.contrib.simple_translation, # 翻译入口 ]迁移后到后台设置 → 语言里添加日语。列表的Usage一列会统计每种语言正在使用的内容数量。2. 给页面挂上翻译打开首页的编辑页在动作菜单点Translate to...选日语。生成的是与中文版同内容的草稿副本逐条改写后发布即可两个版本互不影响。3. 切换语言访问前端 URL 要认识语言前缀用 i18n_patterns 包住 Wagtail 路由# urls.py from django.conf.urls.i18n import i18n_patterns urlpatterns i18n_patterns( path(search/, search_views.search, namesearch), path(, include(wagtail_urls)), prefix_default_languageFalse, # 默认语言不加前缀 )再把 LocaleMiddleware 加进 MIDDLEWARE访问根路径就会按浏览器语言自动跳转。4. 上线前自检逐项确认各语言首页是否已发布未发布会回退默认语言页面语言切换链接是否齐全模板写法见官方文档示例API 的?locale过滤是否返回正确语言。⚠️ 看三个典型坑坑一开启 i18n 后根路径打不开现象URL 包进 i18n_patterns 后原有根地址全部 404。原因加了前缀后只有 /zh/、/ja/ 这类地址有效根路径没有可路由的语言。解法启用 LocaleMiddleware 让根路径自动跳转默认语言若想免前缀传 prefix_default_languageFalse。坑二给存量 Snippet 开翻译时迁移报错现象有数据的 Snippet 加上 TranslatableMixin 后makemigrations 报字段非空或唯一约束冲突。原因mixin 新增的 locale 与 translation_key 都是必填字段存量记录没有值。解法先用 BootstrapTranslatableMixin 加无约束字段跑数据迁移为每条记录补值再换回 TranslatableMixin 加约束四步流程见国际化文档。坑三语言记录删不掉现象后台删除某语言时报错被拦下。原因删除逻辑会检查该语言下是否还有页面或其他内容以及它是不是最后一个语言。解法先看Usage列定位残留内容迁移或删除后该语言才可删。 找三个延伸方向国际化官方文档完整配置、语言切换模板与 API 过滤参考。simple_translation 模块后台翻译复制入口可整体替换为第三方翻译工作流。发布说明跟踪每个版本的多语言新特性与行为变化。Wagtail 多语言的答案不是给每份内容加翻译字段而是给每种语言种一棵独立页面树翻译、权限、发布从此复用既有机制。深入配置与模板写法见docs/advanced_topics/i18n.md版本动态见发布说明。【免费下载链接】wagtailA Django content management system focused on flexibility and user experience项目地址: https://gitcode.com/GitHub_Trending/wa/wagtail创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进