Frappe LMS 多语言配置:改 1 个字段、补 1 个 .po 文件,让界面跟随用户语言【免费下载链接】lmsEasy to Use, 100% Open Source Learning Management System项目地址: https://gitcode.com/GitHub_Trending/lms1/lms你刚部署的 Frappe LMS 界面全是英文,想让中文用户看到中文按钮和菜单。Frappe LMS 的多语言支持是"文件 + 接口 + 设置项"的固定链路,改 1 个 language 字段、补 1 个 .po 文件就能切换界面语言,不需要改业务代码,全程 4 步。🧩 翻译链路:谁负责读 .po,谁负责上屏仓库在 lms/locale/ 下放了 38 个语言文件(zh.po简体中文、de.po德语等),外加一个main.pot模板,里面是待翻译词条的清单。前端入口在 frontend/src/main.js:第 8 行导入translationPlugin,第 23 行执行app.use(translationPlugin)。这个插件干两件事:把__()挂到app.config.globalProperties和window上,模板里所有文案都走它(见 frontend/src/translation.js);调lms.lms.api.get_translations接口拉一份翻译字典,存进window.translatedMessages。__()的行为就一行逻辑:拿英文原文去字典里查,查到就显示译文,查不到回退显示原文。所以"没有翻译"不会报错,只会看到英文。⚙️ 设置系统默认语言(未登录用户用这份)语言选择有两级,先管系统级。登录后进 Settings 的 Preferences 页(frontend/src/components/Settings/Preferences.vue),找到 System Language 下拉框,选语言后保存。它写的是 System Settings 单例的language字段,备注文案写得很直白:"The language this site falls back to."👤 给登录用户设置个人语言登录用户走个人偏好,不走系统默认。后端接口在 lms/lms/api.py:@frappe.whitelist(allow_guest=True) def get_translations(): if frappe.session.user != "Guest": language = frappe.db.get_value("User", frappe.session.user, "language") else: language = frappe.db.get_single_value("System Settings", "language") return get_all_translations(language)也就是说:用户已登录就读 User 文档的language字段,Guest 才读 System Settings。get_all_translations来自frappe.translate(第 20 行导入),按传入语言把.po内容编成字典返回。✍️ 编辑 .po 文件补充翻译打开lms/locale/zh.po,每条形目长这样:msgid " designed as a learning path to guide your progress. ..." msgstr "设计为引导您进步的学习路径。..."msgid是英文原文,msgstr填你的译文。改完这一层,get_translations返回的字典就会跟着变。main.pot是词条模板,新文案先落进它,再同步到各语言.po;日常维护只需要动.po。✅ 验证翻译生效打开浏览器 DevTools 的网络面板,找get_translations请求,返回的 JSON 应该是{"英文原文": "中文译文"}结构;再刷新页面,侧边栏、按钮文案应变成中文。下面的课程界面里,左侧导航的 Courses、Quizzes,正文的 Invoicing、Share 都是__()覆盖范围,切语言后这些位置会先变。⚠️ 三个常见坑改了 .po 没重新编译:运行时读的是编译产物,源文件改了不生效,需要走框架的翻译重编译流程再刷新。msgstr 留空:查不到译文时__()静默回退英文,界面看起来"没生效",多半是这个。用户语言覆盖系统语言:接口优先读 User 的language字段,你只改了 System Language 却发现某位用户界面没变,就是他的个人偏好还在生效。课程正文是内容而非界面文案,不走__();如果要做多语言课程内容,那是另一套配置。【免费下载链接】lmsEasy to Use, 100% Open Source Learning Management System项目地址: https://gitcode.com/GitHub_Trending/lms1/lms创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
Frappe LMS 多语言配置:改 1 个字段、补 1 个 .po 文件,让界面跟随用户语言【免费下载链接】lmsEasy to Use, 100% Open Source Learning Management System项目地址: https://gitcode.com/GitHub_Trending/lms1/lms你刚部署的 Frappe LMS 界面全是英文,想让中文用户看到中文按钮和菜单。Frappe LMS 的多语言支持是"文件 + 接口 + 设置项"的固定链路,改 1 个 language 字段、补 1 个 .po 文件就能切换界面语言,不需要改业务代码,全程 4 步。🧩 翻译链路:谁负责读 .po,谁负责上屏仓库在 lms/locale/ 下放了 38 个语言文件(zh.po简体中文、de.po德语等),外加一个main.pot模板,里面是待翻译词条的清单。前端入口在 frontend/src/main.js:第 8 行导入translationPlugin,第 23 行执行app.use(translationPlugin)。这个插件干两件事:把__()挂到app.config.globalProperties和window上,模板里所有文案都走它(见 frontend/src/translation.js);调lms.lms.api.get_translations接口拉一份翻译字典,存进window.translatedMessages。__()的行为就一行逻辑:拿英文原文去字典里查,查到就显示译文,查不到回退显示原文。所以"没有翻译"不会报错,只会看到英文。⚙️ 设置系统默认语言(未登录用户用这份)语言选择有两级,先管系统级。登录后进 Settings 的 Preferences 页(frontend/src/components/Settings/Preferences.vue),找到 System Language 下拉框,选语言后保存。它写的是 System Settings 单例的language字段,备注文案写得很直白:"The language this site falls back to."👤 给登录用户设置个人语言登录用户走个人偏好,不走系统默认。后端接口在 lms/lms/api.py:@frappe.whitelist(allow_guest=True) def get_translations(): if frappe.session.user != "Guest": language = frappe.db.get_value("User", frappe.session.user, "language") else: language = frappe.db.get_single_value("System Settings", "language") return get_all_translations(language)也就是说:用户已登录就读 User 文档的language字段,Guest 才读 System Settings。get_all_translations来自frappe.translate(第 20 行导入),按传入语言把.po内容编成字典返回。✍️ 编辑 .po 文件补充翻译打开lms/locale/zh.po,每条形目长这样:msgid " designed as a learning path to guide your progress. ..." msgstr "设计为引导您进步的学习路径。..."msgid是英文原文,msgstr填你的译文。改完这一层,get_translations返回的字典就会跟着变。main.pot是词条模板,新文案先落进它,再同步到各语言.po;日常维护只需要动.po。✅ 验证翻译生效打开浏览器 DevTools 的网络面板,找get_translations请求,返回的 JSON 应该是{"英文原文": "中文译文"}结构;再刷新页面,侧边栏、按钮文案应变成中文。下面的课程界面里,左侧导航的 Courses、Quizzes,正文的 Invoicing、Share 都是__()覆盖范围,切语言后这些位置会先变。⚠️ 三个常见坑改了 .po 没重新编译:运行时读的是编译产物,源文件改了不生效,需要走框架的翻译重编译流程再刷新。msgstr 留空:查不到译文时__()静默回退英文,界面看起来"没生效",多半是这个。用户语言覆盖系统语言:接口优先读 User 的language字段,你只改了 System Language 却发现某位用户界面没变,就是他的个人偏好还在生效。课程正文是内容而非界面文案,不走__();如果要做多语言课程内容,那是另一套配置。【免费下载链接】lmsEasy to Use, 100% Open Source Learning Management System项目地址: https://gitcode.com/GitHub_Trending/lms1/lms创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考