ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

ERPNext界面汉化完整指南:从翻译机制到时区字体排查

ERPNext界面汉化完整指南:从翻译机制到时区字体排查 简介ERPNext界面汉化资源包适用于需要在中文环境下使用ERPNext的企业实施人员与开发者解决系统界面英文为主、操作门槛高的问题。资源内含translations/zh.csv核心翻译文件配合Python脚本、JS脚本及说明文档完成界面汉化的装载与调整可覆盖绝大部分标准功能界面并保留二次修改空间。压缩包共33个文件以py、csv、js、txt等类型为主整体仅315KB体量轻巧便于直接部署或对照学习。已有1579人学习下载适合正在搭建ERPNext中文环境、希望快速降低员工使用成本的技术人员。通过该资源可获取完整的汉化文件结构、翻译条目清单及插件加载方式节省自行逐项翻译的工作量尤其适合中小型企业的快速上线场景。 自己本地装ERPNext的人十有八九第一件事都是想把界面换成中文。这个想法本身没毛病但如果你以为这就是在设置里切个语言那么简单那大概率会在半小时后回来搜ERPNext 界面汉化 不完整这种关键词。我一开始就是那个半小时后回来搜的人。这台装好的系统菜单确实变中文了但字段、报表、通知邮件还是一堆英文。后来完整折腾一遍才摸清ERPNext的界面汉化至少涉及三层框架通用文字、应用业务标签、自定义内容每一层的处理方式都不一样。这篇就把我从语言设置到自定义翻译再到时区、字体这些配套坑的整个流程整理出来给同样在本地安装使用ERPNext的朋友一份可以直接照着做的清单。1. 先把汉化拆清楚ERPNext界面里的英文来自三层1.1 框架、应用、内容三套完全不同的机制最开始调整翻译时我一度疑惑为什么同一个英文单词在有的页面改了翻译就生效在另外的页面改了却没反应后来才反应过来ERPNext基于Frappe框架界面英文大体来自三个层面Frappe框架层。登录页、保存/取消/新建这类按钮、分页、权限提示、全局搜索框这些都是框架自带的通用文本。它们对应的是frappe应用里的翻译文件。ERPNext业务应用层。销售订单、采购发票、物料清单这种模块字段标签和报表标题来自erpnext应用本身的翻译文件。自定义内容层。你后来通过自定义表单加的自定义字段、自己配置的打印格式、审批通知邮件模板这些本质上是你的配置内容不走翻译文件只能直接改中文。这三层处理方式完全不同搞清楚之后很多为什么汉化不彻底的疑问就能解开。1.2 翻译机制按精确匹配运行Frappe的翻译原理很简单界面渲染时拿当前语言去查匹配的词条表源英文文本是key目标语言文本是value。查得到就显示中文查不到就原样显示英文。问题的关键是这个匹配是逐字符精确匹配的多一个空格、大小写不同、引号是弯的还是直的都会导致匹配失败。这也是为什么社区里常有人说我明明在翻译文档里加了词条就是不生效大概率就是Source Text和你界面上的原文没有完全一致。1.3 本地安装版和SaaS版的差别这一点对你本地安装使用尤其重要。SaaS版比如Frappe Cloud的用户你只能通过后台的翻译文档做自定义改不了任何源码文件。而本地版等于拿到了最终解释权翻译文件可以手动替换、缓存可以随时清、默认语言可以直接写进系统设置。这意味着你可以在本地把企业自己的术语习惯固化进去比如把Customer统一翻成客户而不是顾客全公司看到的界面都保持一致这是在线版很难做到的。2. 语言设置与翻译文件落地三分钟改到基本全中文2.1 先改个人语言再改系统默认最快生效的操作是点击右上角头像在弹出菜单里选择Language / 语言选简体中文。这个只对当前登录用户生效适合自己先试看。要让整个系统默认就是中文去设置 系统设置在本地化Localization区域里找到Language改成简体中文这样之后新建的用户默认就是中文界面。注意在不少版本里这个选项叫zh选它就行。2.2 确认翻译文件到底在不在如果你发现切换语言后大量界面还是英文先检查本地安装的应用目录里有没有中文翻译包。使用bench方式部署的话翻译文件在cd /path/to/bench find apps/frappe/frappe/translations -iname zh* -o -iname *Hans* find apps/erpnext/erpnext/translations -iname zh* -o -iname *Hans*正常情况下会看到若干csv文件文件名可能是zh.csv、zh_Hans_CN.csv这类。找不到的话从frappe和erpnext对应版本的git分支里把翻译文件放进去再清缓存。如果你是用Docker容器装的进入容器后也是查同样路径。2.3 改完翻译文件必须清缓存这是绝大多数人第一次会踩的坑文件放对了刷新页面还是英文。因为Frappe有个翻译缓存旧值被缓存住了。清一下就好bench --site 你的站点名 clear-cache开发模式跑的话再bench restart生产环境用supervisor管理的执行supervisorctl restart all或者干脆重启对应的服务。清完缓存后别忘了浏览器强制刷新CtrlF5或CmdShiftR。2.4 用户登录态也可能缓存了旧翻译还有一个隐蔽点即使服务端缓存清了已经登录的用户session里可能还带着旧语言设置表现是管理员切到中文了另一个用户登录还是英文。这种情况让用户退出重新登录一次或者我习惯用无痕窗口验证避免被本地cookies误导。这一步虽然简单但是排查时能帮你省下很多时间。3. 官方翻译没覆盖的边边角角自定义翻译的两套打法3.1 在后台用Translation文档一条条补遇到某个词条没翻译或翻译不满意直接在页面左上角搜索框输入翻译列表英文环境输入Translation List回车进入列表。新建一条记录LanguagezhSource Text界面显示的英文原文复制粘贴别手打Translated Text你要显示的中文保存后刷新页面就能看到效果。这个方式的优点是不动源码ERPNext升级不影响缺点是一条条录太慢适合零星补几个词条。3.2 行业术语多的时候用数据导入批量上如果你要一次性统一一批行业术语建议用数据导入。我的做法是先在系统里找到数据导入下载一份Translation的CSV模板按列填好Language、Source Text、Translated Text再把整理好的200多条术语一次性导进去。这里有个小经验Source Text尽量用英文界面截图里复制出来的真实文本不要凭记忆写不然精确匹配会失败。导入后同样清缓存再验证几条高频词条。我之前整理过一批高频词条参考格式大概是这样的Source TextTranslated TextCustomer客户Supplier供应商Item Code物料编码Stock Balance库存余额Warehouse仓库这只是一个示例真正的列表要结合你们自己系统里的界面实际显示的文本一张张抄下来术语才会统一。3.3 定位未翻译字符串的实用技巧补翻译最快的方式是反过来做先把某个用户的界面语言临时切成英文找到你认为该汉化的英文原文再新建对应翻译词条。如果遇到那种怎么都对不上的字符串打开浏览器开发者工具右键检查对应文字看HTML元素里实际渲染的文本有些字符串前后带着空格或特殊引号只有从渲染结果里复制才能保证匹配。还有一类要特别注意带占位符的动态消息比如Total {0} Items翻译时保留占位符写成共 {0} 项否则运行时会报错或显示异常。3.4 自定义字段的标签别在翻译里折腾很多人会忽略你自己在自定义表单里新建的字段它的标签不是一个翻译字符串而是字段元数据。去翻译文档里加词条是没用的正确做法是回到自定义表单里把字段的Label直接改成中文。另外一个容易忽视的自定义层是打印格式和通知邮件模板它们的文字属于模板内容要在模板编辑界面里直接改成中文这跟界面翻译是两个体系。4. 汉化后最容易翻车的三个细节时区、日期与字体4.1 时区没改单子日期永远少一天这是本地安装用户最常碰到的问题界面全中文了但每天凌晨下的单据系统里显示的日期是前一天。原因是本地服务器默认站点时区是UTC北京时间比UTC早八个小时凌晨0点到8点之间打单UTC时间还是前一天。改法很简单设置 系统设置 本地化把Time Zone改成Asia/Shanghai。改完新单据就正常了历史数据的时间戳本身不会坏但显示日期会按新时区重新计算所以尽早改。4.2 日期格式不改2024-05-03会被看成3月5日还是5月3日日期格式是另一个体验分水岭。Frappe默认日期格式可能是DD-MM-YYYY对国内用户来说很容易看错。在系统设置里把date_format改成yyyy-mm-dd全系统所有日期控件、列表显示、报表导出都会统一成年-月-日格式。这个字段在系统设置里一般是英文下拉选项注意别选成mm/dd/yyyy不然反而更乱。4.3 PDF打印中文变方块是服务器缺字体如果你用内置打印功能生成PDF中文可能变成一个个方块特别是Linux服务器上很常见就是系统里没有可用的中文字体。Debian/Ubuntu系安装apt install -y fonts-noto-cjk fc-cache -fvCentOS/RHEL系则装wqy-microhei-fonts或类似的CJK字体包。装完重新生成一次PDF就能看到效果。另外如果你定制过打印格式最好在自定义CSS里显式指定字体例如font-family: Noto Sans CJK SC, sans-serif;防止某些浏览器或渲染器选到不合适的fallback字体。4.4 导出CSV用Excel打开乱码顺带说一个跟汉化周边强相关的问题在ERPNext里导出CSV用Excel直接打开经常是乱码因为系统默认导出UTF-8编码而Excel默认把无BOM的UTF-8当成ANSI解析。临时办法是用编辑器打开后另存为带BOM的UTF-8或者用Excel的数据 从文本/CSV导入并选择UTF-8编码。如果团队里经常要导出数据可以写个简单脚本统一转码一劳永逸。5. 从看得懂到用得好本地化的最后几步收尾5.1 让所有新用户默认就是中文系统设置里的默认语言改完后新建用户会自动带出这个默认值不用每个用户手动设置。老用户如果想统一改可以在用户列表里批量选择后直接改语言字段不过要注意这样会覆盖人家自己设的偏好最好先跟同事打个招呼。5.2 通知邮件模板也值得顺手汉化汉化如果只做了界面同事第一次收到系统自动发出的审批邮件标题还是英文体验就很割裂。到通知设置里找到对应的通知文档把邮件标题和消息体直接改成中文模板配合Jinja变量保留动态信息比如单据号、申请人效果跟商业软件一样。这一步不麻烦但实际完成之后整套系统的本地化才真正闭环。5.3 不要轻易直接改源码里的翻译CSV我见过有人图省事直接改apps目录里官方翻译CSV文件。这种方式的致命问题是版本升级时这些修改极容易丢或者被覆盖有时候还会造成git合并冲突让后续bench更新直接失败。除非你有能力每次升级后都用脚本重新apply否则老老实实走后台翻译文档或数据导入把自定义词条沉淀在数据库里升级不丢。5.4 实体数据本身就是汉化的一部分最后说一个容易忽略的点公司、客户、供应商、物料等主数据在新建时直接用中文填写名称。这样打印格式、报表、下拉选择器里显示出来的天然就是中文。搭配把默认币种设为CNY货币符号和千分位格式也会一起变化。所有设置做完再用无痕窗口从外部用户视角完整跑一遍销售订单流程基本就能把本地安装使用中遇到的英文死角全部找出来。这套操作走完整个系统才算是真正交给业务同事去用。本文还有配套的精品资源点击获取
返回列表