贡献¶
首先,感谢您想为 Spaced Repetition 插件做出贡献!
报告Bug & 功能请求¶
翻译¶
在 Obsidian 社区的帮助下,插件已支持如下语言。😄
- Arabic / العربية
- Chinese (Simplified) / 简体中文
- Chinese (Traditional) / 繁體中文
- Czech / čeština
- French / français
- German / Deutsch
- Italian / Italiano
- Korean / 한국어
- Japanese / 日本語
- Polish / Polski
- Portuguese (Brazil) / Português do Brasil
- Spanish / Español
- Russian / русский
- Turkish / Türkçe
步骤¶
若要添加对您语言的支持,请按如下步骤操作:
- Fork 代码仓库。
- 将
src/lang/locale/en.ts
中的内容复制到src/lang/locale/
目录下对应的文件 (例如:fr.ts
对应法语,sw.ts
对应斯瓦希里语)。 本地化代码应符合 IETF 语言标签规范。 - 进行翻译。
- 提交Pull Request。
示例¶
样例en.ts
文件:
// English
export default {
EASY: "Easy",
SHOW_ANSWER: "Show Answer",
DAYS_STR_IVL: "${interval} days",
CHECK_ALGORITHM_WIKI:
'For more information, check the <a href="${algoUrl}">algorithm implementation</a>.',
};
对应的sw.ts
文件:
// Swahili
export default {
EASY: "Rahisi",
SHOW_ANSWER: "Onyesha Jibu",
DAYS_STR_IVL: "Siku ${interval}",
CHECK_ALGORITHM_WIKI:
'Kwa habari zaidi, angalia <a href="${algoUrl}">utekelezaji wa algorithm</a>.',
};
最后一部分,呃...其实用了谷歌翻译。虽然我对斯瓦希里语有实际理解,但还不足以写计算机术语哈哈。
请注意:
- 只需翻译键名右侧的字符串(模板)。
- 不要翻译
${}
里的内容。这个占位符用于代码变量替换。例如:如果 interval = 4,英语会显示4 days
,斯瓦希里语则会是Siku 4
。是不是很巧妙?
代码¶
常规更改¶
- 修改代码。
- 运行
pnpm dev
来查看变化和自动重构插件。 -
您可以在 构建文件 和 Obsidian vault 间创建符号链接,如:
# 从 Obsidian vault 移除现有插件文件 rm ~/notes/.obsidian/plugins/obsidian-spaced-repetition/main.js ~/notes/.obsidian/plugins/obsidian-spaced-repetition/manifest.json ~/notes/.obsidian/plugins/obsidian-spaced-repetition/styles.css # 使用绝对路径 ln -s /home/stephen/obsidian-spaced-repetition/build/main.js /home/stephen/notes/.obsidian/plugins/obsidian-spaced-repetition ln -s /home/stephen/obsidian-spaced-repetition/manifest.json /home/stephen/notes/.obsidian/plugins/obsidian-spaced-repetition ln -s /home/stephen/obsidian-spaced-repetition/styles.css /home/stephen/notes/.obsidian/plugins/obsidian-spaced-repetition
- 此过程可搭配 Hot Reload 插件。
-
请记录“面向用户”的修改,如:新增功能,UI调整,等等。
- 如果您的“业务逻辑”与 Obsidian APIs 充分解耦,请写一些单元测试。
- 本项目使用 jest, 测试文件存放在
tests/
目录。 pnpm test
- 本项目使用 jest, 测试文件存放在
- 在推送您的修改前,请执行 linter:
pnpm lint
- 如果出现任何警告,请格式化代码:
pnpm format
- 如果出现任何警告,请格式化代码:
- 提交 Pull Request。
UI 修改¶
-
所有 UI 修改都应当在
src/gui/
目录内完成。 -
将修改放在正确的区域 (参考代码中的 "MARK:" 或 "#region" 注释)。
-
用 JSDoc 为你的函数和类编写文档。
-
您可以在开发者控制台中输入以下代码来切换桌面端和移动端视图。
-
在以下所有布局中测试您的 UI 修改:
- 桌面端
- 移动端竖屏模式
- 小尺寸移动设备
- 移动端横屏模式
- 平板横屏模式
- 平板竖屏模式
- 上述所有场景 + 启用标签视图
- 上述所有场景 + 禁用标签视图
- 上述所有场景 + 禁用标签视图 + 卡片不同长宽比
文档¶
文档由 Markdown 文件构成,并通过MkDocs 转换为静态网页。 特别地,本项目采用 MkDocs Material。
这些文件存放于docs/docs/
相应的语言文件夹内。例如,英文文档位于 docs/docs/en/
目录下。
文档托管于https://www.stephenmwangi.com/obsidian-spaced-repetition/。
对于微小改动,您可以仅提交 Pull Request 来合并(针对 master
分支)。
这些修改将在新发行版发布时生效。
对于大幅改动,您必须如下所述,检查文档外观。
本地查看文档¶
初始化¶
- 创建虚拟环境:
python3 -m venv venv
- 激活虚拟环境:
. venv/bin/activate
- 安装项目依赖:
pip install -r requirements.txt
查看¶
- 激活虚拟环境:
. venv/bin/activate
- 部署文档网页:
mkdocs serve
- 打开http://127.0.0.1:8000/obsidian-spaced-repetition/以在本地查看文档,您的任何修改都会立即在浏览器上反映。
翻译文档¶
- 如果您的语言未出现在
docs/docs/
中,请为您的语言创建一个新文件夹。使用这里提供的语言代码为文件夹命名。 - 将 (1) 中的语言代码添加到 MkDocs 配置中(
mkdocs.yml
-plugins.i18n.languages
)。 - 将
en
目录下的英文文档复制到新文件夹中。 - 翻译,再提交 Pull Request 。
维护¶
发行版¶
以 v1.9.2
为例:
- 创建一个新分支:
git switch -c release-v1.9.2
- 在
manifest.json
和package.json
中更新版本号(遵循Semantic Versioning)。- Semantic Versioning 速览:版本号格式为
MAJOR.MINOR.PATCH
,增加:MAJOR
(主版本号),当进行不兼容的 API 更改MINOR
(次版本号),当添加向后兼容的新功能PATCH
(修订版本号),当进行向后兼容的 bug 修复
- 如果新版本使用新的 Obsidian APIs,请更新
minAppVersion
和versions.json
以反映这一点。
- Semantic Versioning 速览:版本号格式为
- 运行
pnpm changelog
以更新 CHANGELOG。 -
提交并推送您的修改:
-
提交合并到
master
分支的 Pull Request。 - 在本地,切换到
master
分支并拉取修改:git switch master && git pull
- 以版本号创建 git 标签:
git tag -a 1.9.2 -m "1.9.2"
- 推送标签:
git push --tags
.
您已经完成了所有流程! 这个 GitHub action 会自动触发,创建一个发行版并发布,同时更新在线文档。