从零开始为remotely-save贡献多语言支持:开发者指南
remotely-save作为一款非官方的Obsidian同步插件,支持多种云服务,让用户能在本地和云端之间无缝同步知识库。为这样的开源项目贡献多语言支持,不仅能帮助全球非英语用户更好地使用插件,还能扩大项目影响力,同时为自己积累开源协作经验。本文将从价值认知到实际操作,全面指导开发者完成多语言支持的贡献流程。
🔤 为什么多语言支持至关重要
在全球化背景下,多语言支持是开源项目走向国际的关键一步。为remotely-save添加新的语言翻译,意味着:
- 打破语言壁垒,让更多用户能够以母语配置和使用插件
- 提升项目的包容性,吸引更广泛的用户群体和贡献者
- 增强插件在国际市场的竞争力和可用性
- 为自己的技术履历增添国际化项目经验
🌐 准备工作:了解项目结构与环境
1. 环境搭建
首先需要准备开发环境,克隆项目仓库到本地:
git clone https://gitcode.com/gh_mirrors/re/remotely-save
cd remotely-save
2. 语言文件组织
remotely-save采用清晰的语言文件结构,主要分为核心插件和专业版两个部分:
核心插件语言文件:位于src/langs/目录下,包含:
en.json- 英语基础翻译zh_cn.json- 简体中文翻译zh_tw.json- 繁体中文翻译
专业版语言文件:位于pro/src/langs/目录下,包含对应语言的专业功能翻译文件。
这些JSON文件采用键值对格式存储翻译内容,是添加新语言的主要工作对象。
📝 实施步骤:从零创建新语言支持
1. 创建语言文件
在相应的langs目录下创建新的JSON文件,文件名采用语言代码命名(如fr.json表示法语,de.json表示德语)。建议以英语文件为模板开始翻译:
{
"confirm": "确认", // 操作确认按钮
"disable": "关闭", // 功能禁用选项
"enable": "开启", // 功能启用选项
"syncrun_step1": "1/8 Remotely Save 准备同步({{serviceType}})" // 同步步骤提示,保留变量
}
2. 翻译注意事项
翻译过程中需注意以下几点:
- 保留所有
{{variable}}格式的变量,确保动态内容正常显示 - 保持术语一致性,如"同步"应统一翻译,避免混淆
- 注意文本长度,过长长文本可能导致UI布局问题
- 考虑文化差异,确保翻译符合目标语言的表达习惯
3. 注册新语言
完成翻译后,需要在语言索引文件中注册新语言。分别修改核心插件和专业版的index.ts文件:
// src/langs/index.ts 或 pro/src/langs/index.ts
import fr from "./fr.json"; // 导入新创建的语言文件
export const LANGS = {
en: en,
zh_cn: zh_cn,
zh_tw: zh_tw,
fr: fr // 添加新语言到导出对象
};
✅ 质量保障:测试与验证
1. 完整性检查
确保翻译文件包含所有必要的键值对,没有遗漏或拼写错误。可以使用简单的脚本比较新翻译文件与英语文件的键集合:
# 比较两个JSON文件的键差异(需安装jq工具)
jq -r 'keys[]' src/langs/en.json > en_keys.txt
jq -r 'keys[]' src/langs/fr.json > fr_keys.txt
diff en_keys.txt fr_keys.txt
2. 功能测试
在Obsidian中安装开发版本的插件,测试以下场景:
- 界面语言切换是否正常
- 所有翻译文本是否正确显示
- 包含变量的文本是否正确替换
- 不同尺寸屏幕下的文本布局是否正常
🚀 贡献流程:提交你的翻译
1. 提交规范
遵循项目的提交规范,提交信息应清晰描述贡献内容:
git checkout -b feature/add-french-translation
git add src/langs/fr.json src/langs/index.ts
git add pro/src/langs/fr.json pro/src/langs/index.ts
git commit -m "feat(i18n): add French translation"
2. 提交流程
通过项目的Pull Request流程提交你的贡献:
- 将特性分支推送到你的fork仓库
- 在项目页面创建新的Pull Request
- 描述翻译的语言和主要内容
- 响应代码审查中的反馈和建议
❓ 常见问题
Q: 发现翻译错误或需要更新怎么办?
A: 可以创建新的Pull Request,标题使用fix(i18n): correct {language} translation格式,清晰说明修改内容。
Q: 如何处理专业术语的翻译?
A: 参考项目现有翻译中的术语使用,保持一致性。如有不确定的术语,可在提交时注明或在社区讨论。
Q: 语言文件中的注释会被保留吗?
A: 建议不要在JSON文件中添加注释,如需说明可在Pull Request描述中提及。
通过以上步骤,你已经完成了为remotely-save贡献多语言支持的全过程。这不仅是对开源社区的宝贵贡献,也是提升自身国际化开发能力的绝佳机会。开始你的第一个翻译贡献,让更多用户体验到母语版本的remotely-save吧!
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0139- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
MiniCPM-V-4.6这是 MiniCPM-V 系列有史以来效率与性能平衡最佳的模型。它以仅 1.3B 的参数规模,实现了性能与效率的双重突破,在全球同尺寸模型中登顶,全面超越了阿里 Qwen3.5-0.8B 与谷歌 Gemma4-E2B-it。Jinja00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
MusicFreeDesktop插件化、定制化、无广告的免费音乐播放器TypeScript00