ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

TeslaMate 中文完整指南:3步切换语言,翻译贡献全流程

2026/9/19 7:50:59 拓冰建站 浏览量
TeslaMate 中文完整指南:3步切换语言,翻译贡献全流程 TeslaMate 中文完整指南3步切换语言翻译贡献全流程【免费下载链接】teslamateA self-hosted data logger for your Tesla [main maintainerJakobLichterfeld]项目地址: https://gitcode.com/GitHub_Trending/te/teslamate新提了一台 Model 3第一次把 TeslaMate 跑起来打开网页却满眼英文车辆卡片上写着 Charging、State of Charge设置页里 Time to Try Sleeping、Preferred Range 一长串看不懂的选项。数据倒是记录了读起来费劲。这是不少新车主的第一道坎。好消息是 TeslaMate 内置多语言支持切到中文只要 3 步想让界面更好用还可以提交翻译。两条路径这篇文章都讲。3步把TeslaMate切成中文第一步进入设置。登录后点击顶部导航的 Settings 入口也可以直接访问应用内的/settings页面。第二步选择语言。在 General Settings 区域找到 Language 区块这里有两个下拉框Web App控制界面语言。列表内置 18 种语言选 Chinese (simplified) 即可Addresses控制地址反解语言的显示和界面语言互不影响。第三步验证生效。选择后页面会自动重载新语言立刻生效。如果个别位置还是英文这是正常的——未翻译的文本会回退显示英文不影响使用。 若界面没有立即刷新按CtrlShiftR强制刷新浏览器缓存。界面背后的机制Gettext本地化一图看懂TeslaMate 的多语言支持建立在 Gettext 国际化框架上由三类文件协作完成POT 模板文件位于 priv/gettext/ 下的default.pot。开发者运行mix gettext.extract扫描源码中所有gettext(...)调用把英文原文汇总成这份源清单只有条目、没有译文PO 翻译文件每种语言一份副本如zh_Hans/LC_MESSAGES/default.po。译者给每条msgid配上对应语言的msgstrMO 编译文件PO 的二进制编译产物是应用运行时真正加载的目录查字符串比解析文本快得多。打个比方msgid是原稿msgstr是译稿MO 文件则是排印出版的书——用户看到的永远是最终编译版本而不是手稿。简体中文翻译文件中的真实条目长这样#: lib/teslamate_web/live/car_live/summary.html.heex:422 #, elixir-autogen, elixir-format msgid State of Charge msgstr 当前电量#:那行标注了字符串在源码中的位置翻译时可以借它判断上下文。翻译贡献的完整路径环境准备先拿到代码并装好依赖git clone https://gitcode.com/gh_mirrors/te/teslamate cd teslamate mix deps.get依赖就绪后mix gettext.*系列命令即可使用。所有翻译文件集中在 priv/gettext/ 目录子目录按语言代码命名de是德语zh_Hans是简体中文ja是日语。找到并编辑翻译文件已有语言直接打开对应的default.po编辑。想新增一种语言时以英文版为底本mkdir -p priv/gettext/xx/LC_MESSAGES cp priv/gettext/en/LC_MESSAGES/default.po priv/gettext/xx/LC_MESSAGES/default.po然后把msgstr逐条补上。每个语言目录下通常还有errors.po存放表单校验的报错文案记得一并处理。翻译规范四条军规 动手前记住这几点术语一致同一个词全文件统一译法。例如 State of Charge 简体中文版用当前电量而非充电状态Sentry Mode 用哨兵模式简洁优先界面文本受布局宽度限制能短则短保留变量占位符文本里的%{count}、%{name}是运行时填数据的坑位翻译时名字和花括号一个字符都不能动只改周围的文字保留 HTML 标签原文里出现strong.../strong译文必须保留同样的标签结构可以调整位置不能删减。复数形式的处理单列一条。有复数规则的语言使用msgid_plural按形式逐条填写#: lib/teslamate_web/live/import_live/index.html.heex:10 #, elixir-format, elixir-autogen msgid Found %{count} file msgid_plural Found %{count} files msgstr[0] 找到了 %{count} 个文件 msgstr[1] 找到了 %{count} 个文件若目标语言的复数规则较复杂如俄语三种形式还要在 PO 文件头部声明Plural-Forms公式指明msgstr[N]各对应哪种情况。在本地验证翻译效果mix gettext.compile mix phx.server服务起来后打开http://localhost:4000在设置页把语言切到目标语言逐页对照实际渲染效果。改哪块、看哪块不用全量检查。提交要求把改好的 PO 文件以 Pull Request 形式提交。说明里写清三件事语言代码如zh_Hans翻译完成度如95% 已翻译验证环境浏览器及版本、TeslaMate 版本号。本地化排坑清单现象可能原因解决办法切换语言后界面没变化PO 文件放错目录或 MO 编译产物过期确认路径为priv/gettext/语言/LC_MESSAGES/用mix gettext.compile --force强制重编再清浏览器缓存或用隐私窗口测试界面直接显示%{xxx}原文翻译时改动或删除了变量名还原为原始占位符写法只允许修改周围文字加粗等格式丢失、排版错乱译文里删掉了strong等标签按原文结构补回标签位置可调、内容不可少单复数切换显示错误未按该语言的复数规则填写检查 PO 头部Plural-Forms声明与各msgstr[N]是否对应上游更新后部分条目变回英文模板中 msgid 已变更旧译文失去匹配运行mix gettext.merge priv/gettext --locale zh_Hans比对新增条目后补齐只有个别页面是英文新功能尚未翻译属正常回退优先补齐模板 diff 中新出现的字符串更多细节可参考项目文档中的配置章节。还差什么目前越南语完成度 38%、葡萄牙语62%、韩语71%缺口最大。如果你恰好会这些语言打开对应语言的 PO 文件从一条msgstr开始填起——每填一条界面就更可读一分。【免费下载链接】teslamateA self-hosted data logger for your Tesla [main maintainerJakobLichterfeld]项目地址: https://gitcode.com/GitHub_Trending/te/teslamate创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考