Frappe LMS 多语言配置:改 1 个字段、补 1 个 .po 文件,让界面跟随用户语言

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)。这个插件干两件事:

  1. 把__()挂到app.config.globalProperties和window上,模板里所有文案都走它(见 frontend/src/translation.js);
  2. 调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),仅供参考

相关新闻

四步装好并验证 REA MCP 逆向工具:从安装到排障的完整路径

四步装好并验证 REA MCP 逆向工具:从安装到排障的完整路径

四步装好并验证 REA MCP 逆向工具:从安装到排障的完整路径 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea REA 安装:REA 是…

2026/10/20 1:24:58 阅读更多 →
Truncate节点详解:从截断机制到工作流实战与避坑指南

Truncate节点详解:从截断机制到工作流实战与避坑指南

1. 为什么一个“截断”操作值得单独做成节点1.1 我遇到的那次数据爆炸事故先说个真实经历。有次我在某个可视化工作流平台上搭一套数据处理流水线,上游接的是一堆历史日志文件,中游要对每条日志做关键词提取,下游再送进模型做聚合摘要。看起来…

2026/10/20 1:24:58 阅读更多 →
通达信主力监控指标公式源码解析:从数据原理到实战避坑

通达信主力监控指标公式源码解析:从数据原理到实战避坑

简介:一份通达信主力监控指标公式源码的解析文档,主要面向有一定技术分析基础、希望深入理解主力资金行为的投资者,以及需要自编或优化指标公式的通达信用户。文档基于WINNER、EMA、SMA、REF、BARSLAST等函数,构建了主力筹码、小筹…

2026/10/20 1:24:58 阅读更多 →

最新新闻

技能管理实战:识别、组合与迁移,打造个人核心竞争力

技能管理实战:识别、组合与迁移,打造个人核心竞争力

有一次帮一位朋友梳理简历,他接到一个面试问题——“你最擅长的三项技能是什么”。他愣了半天,最后写的是"Excel、PPT、沟通"。写完连他自己都不信,觉得这跟没说一样。那一刻我突然意识到一件事:我们几乎每天都在提&quo…

2026/10/20 3:50:14 阅读更多 →
VirtualBox中CentOS 7双网卡配置:NAT与Host-Only实战指南

VirtualBox中CentOS 7双网卡配置:NAT与Host-Only实战指南

1. 为什么要在虚拟机里折腾双网卡把一台最小化安装的 CentOS 7 跑在 VirtualBox 里,是很多人搭本地实验环境、跑中间件、练运维命令的常规操作。但真到联网这一步,不少人会卡住:默认的 NAT 模式确实能让虚拟机访问外网,可宿主机想…

2026/10/20 3:50:14 阅读更多 →
Flutter中StatelessWidget与StatefulWidget的正确选择指南

Flutter中StatelessWidget与StatefulWidget的正确选择指南

1. 为什么这个问题每天都在被问,却总得不到真正管用的答案“Flutter里该用 StatelessWidget 还是 StatefulWidget?”——这问题我见过太多次:刚学完 Dart 基础的新人在群里发截图问“为什么我改个按钮颜色要写一堆 setState”,某高…

2026/10/20 3:50:14 阅读更多 →
GPT-5.5接口401报错排查:Organization头强制校验的修复指南

GPT-5.5接口401报错排查:Organization头强制校验的修复指南

1. 这个报错的真实面目:Key没坏,是鉴权策略升级了最近不少开发者都在反馈同一个问题:代码没动、Key没换,只是把模型版本从GPT-5.4升到GPT-5.5,结果接口直接从200变成401。最让人头疼的是,服务端返回的错误信…

2026/10/20 3:50:14 阅读更多 →
安全数据集清洗与特征工程实战:从原始告警到有效特征

安全数据集清洗与特征工程实战:从原始告警到有效特征

数据清洗与特征工程,一直是安全数据建模这条流水线上最不性感却最决定成败的两个环节。我见过太多团队拿到一份号称"真实"的网络安全数据集,调参调得热火朝天,最后发现模型指标漂亮得离谱,一上真实流量就崩;…

2026/10/20 3:50:14 阅读更多 →
Cursor 详细使用指南:TaoToken 统一 Key 接入与 AI 辅助编程调试实战

Cursor 详细使用指南:TaoToken 统一 Key 接入与 AI 辅助编程调试实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 3:49:13 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →