Frappe LMS 多语言配置指南:3步跑通国际化

Frappe LMS 多语言配置指南:3步跑通国际化

【免费下载链接】lmsEasy to Use, 100% Open Source Learning Management System项目地址: https://gitcode.com/GitHub_Trending/lms1/lms

给学员上线一门课,界面却全是英文,海外用户基本留不住。Frappe LMS 自带多语言支持,从翻译文件到前端取词都是现成的,你要做的只是挑好语言、把文案填进去。

🌍 什么时候会用到多语言

  • 企业给不同国家团队开同一个培训站点,希望每人按母语看界面
  • 你把课程输出到海外机构,对方要求界面至少支持本地语言
  • 学员没登录直接看课程页,希望看到系统默认语言,而不是全英文

📚 机制速览:翻译是怎么生效的

  • 翻译文件:所有文案存在 lms/locale/ 目录。main.pot是文案源文件,每种语言一个.po文件,如zh.po对应简体中文,目前内置 39 种语言。
  • 后端下发:lms/lms/api.py 里的get_translations()负责取词,登录用户读个人语言偏好,访客则回退到 System Settings 里配置的站点默认语言。
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)
  • 前端取词:frontend/src/translation.js 里的 Vue 插件把__()挂到全局,页面组件统一用__('Save')这样的写法取词;首次加载时前端自动拉取翻译字典,没匹配到的文案直接显示原文。

🛠️ 3步跑通多语言配置

  1. 克隆仓库:git clone https://gitcode.com/GitHub_Trending/lms1/lms,装好 Frappe 环境再启动站点。
  2. 管理员进 Settings → Preferences,把 System Language 设成站点默认语言,访客看到的界面就跟随它。
  3. 学员在个人资料里选择个人语言,登录后整站界面按该语言显示。
  4. 界面出现新文案没翻译?在 Frappe 项目目录跑bench --site your-site extract-message,新文案会写进main.pot和各语言.po文件。
  5. 把.po文件交给译者填好翻译,再跑bench --site your-site translate编译,刷新页面即可生效。

⚠️ 进阶与边界

.po 文件怎么维护

各.po文件由 Crowdin 协作翻译,文件头带有语言标识,比如zh.po里是Language: zh_CN。你本地直接改翻译时,保持msgid/msgstr的对应关系即可,别动文件头。

空翻译回退原文

msgstr为空的条目,界面直接显示英文原文,不会报空白。翻译没做完也能上线,缺哪条就回退哪条。

占位符要原样保留

前端支持__('Row {0}', [7])这种带占位符的文案,翻译时把{0}完整保留,否则数字、用户名填不进去。

✅ 收尾

多语言配置的核心就三件事:.po文件管翻译、get_translations按语言下发、前端__()统一取词。下一步:先在 Settings 里把 System Language 设成你的目标语言,再把课程名、章节这些高频文案翻译出来,效果立竿见影。

【免费下载链接】lmsEasy to Use, 100% Open Source Learning Management System项目地址: https://gitcode.com/GitHub_Trending/lms1/lms

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

TwitchDropsMiner 完整指南:零带宽挖完 Twitch 掉落的 199 频道自动切换免费教程

TwitchDropsMiner 完整指南:零带宽挖完 Twitch 掉落的 199 频道自动切换免费教程

TwitchDropsMiner 完整指南:零带宽挖完 Twitch 掉落的 199 频道自动切换免费教程 【免费下载链接】TwitchDropsMiner An app that allows you to AFK mine timed Twitch drops, with automatic drop claiming and channel switching. 项目地址: https://gitcode.c…

2026/10/20 10:35:16 阅读更多 →
VCU整车控制器源码与PCB设计:从状态机到故障分级的技术拆解

VCU整车控制器源码与PCB设计:从状态机到故障分级的技术拆解

简介:面向电动汽车整车控制器(VCU)研发与学习者,是一套覆盖软硬件与文档的完整开发套件,内含VCU全套控制源码、PCB原理图、控制策略说明书与硬件说明书,帮助嵌入式工程师、BMS/MCU开发者及车辆控制方向学生…

2026/10/20 10:34:16 阅读更多 →
字母异位词分组:三种解法与哈希表key设计详解

字母异位词分组:三种解法与哈希表key设计详解

LeetCode hot100里的第2题“字母异位词分组”,说实话是一道让人又爱又恨的题。爱的是它思路清晰,入门友好,最适合用来建立“哈希表映射”的直觉;恨的是,如果你只盯着一种解法背代码,面试官稍一变形你就容易…

2026/10/20 10:34:16 阅读更多 →

最新新闻

BERT与GPT架构差异全解析:注意力掩码、预训练任务与选型指南

BERT与GPT架构差异全解析:注意力掩码、预训练任务与选型指南

1. 从架构分水岭说起:为什么BERT和GPT走上了两条路很多人学完Transformer之后,觉得BERT和GPT就是“一个用Encoder、一个用Decoder”这么简单。我一开始也这么想,直到自己动手复现了一遍才明白,这个区别背后牵扯到的是训练目标、注…

2026/10/20 23:35:20 阅读更多 →
单片机数码管显示实战:动态扫描原理与常见坑点排查

单片机数码管显示实战:动态扫描原理与常见坑点排查

1. 作业需求拆解:数码管显示到底在考什么 拿到“文理单片机课堂作业_数码管显示_0311”这个题目的时候,我第一反应是:这不就是一个数码管显示的小作业嘛,能有什么难度?真正动手之后才发现,这个题目里塞进去…

2026/10/20 23:35:20 阅读更多 →
告别A100租金幻觉:Mistral托管API如何重构大模型推理成本

告别A100租金幻觉:Mistral托管API如何重构大模型推理成本

“1万亿”这个词放在模型身上确实唬人,但真正让我决定写下这篇东西的,是前几天跟一个做SaaS的朋友对账。他们的AI功能跑在自建的GPU集群上,一个月光是A100租金和配套运维就花掉十几万,峰值吞吐还经常扛不住。后来我们把推理全部切…

2026/10/20 23:35:20 阅读更多 →
提高Tesseract-OCR验证码识别率:图像预处理与参数调优实战

提高Tesseract-OCR验证码识别率:图像预处理与参数调优实战

我是一个数据模型,无法接入真实浏览器来查询最新热词,但是我理解您的意图是希望我生成一篇关于“提高Tesseract-OCR验证码识别率”的深度原创技术博客。标题结合了原始输入(OCR、提高准确率)和泛化的安全、图像处理、自动化技术等…

2026/10/20 23:35:20 阅读更多 →
Python零基础入门实战路径:从环境搭建到自动化脚本

Python零基础入门实战路径:从环境搭建到自动化脚本

简介:本资源是一套面向编程初学者的Python入门基础教程PPT课件,覆盖语法基础、核心概念与典型应用场景,特别适合零基础学生、转行新人及高校计算机通识课教学使用。压缩包共860个文件,总大小120.67MB,主体为348个C源码…

2026/10/20 23:35:20 阅读更多 →
Delphi 12.3富文本渲染解决方案:TRichView 21.6+ScaleRichView 8高DPI适配指南

Delphi 12.3富文本渲染解决方案:TRichView 21.6+ScaleRichView 8高DPI适配指南

简介:本资源是面向Delphi及CBuilder开发者的专业富文本处理控件集成包,适用于Delphi 12.3开发环境,主要解决复杂文档渲染、缩放排版与跨平台富文本交互等核心需求,特别适合开发电子病历、技术文档编辑器、教学课件系统等需高精度格…

2026/10/20 23:34:16 阅读更多 →

日新闻

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/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →