zengen 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.zen/meta.json +27 -18
- package/.zen/src/ar-SA/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +36 -36
- package/.zen/src/ar-SA/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/da-DK/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +29 -29
- package/.zen/src/da-DK/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/de-DE/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +24 -24
- package/.zen/src/de-DE/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/en-US/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +27 -27
- package/.zen/src/en-US/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/es-ES/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +34 -34
- package/.zen/src/es-ES/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/es-MX/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +31 -31
- package/.zen/src/es-MX/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/fi-FI/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +30 -30
- package/.zen/src/fi-FI/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/fr-FR/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +26 -26
- package/.zen/src/fr-FR/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/hi-IN/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +29 -29
- package/.zen/src/hi-IN/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/id-ID/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +27 -27
- package/.zen/src/id-ID/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/it-IT/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +38 -38
- package/.zen/src/it-IT/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/ja-JP/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +27 -27
- package/.zen/src/ja-JP/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/ko-KR/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +25 -25
- package/.zen/src/ko-KR/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/nl-NL/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +31 -31
- package/.zen/src/nl-NL/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/no-NO/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +32 -32
- package/.zen/src/no-NO/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/pl-PL/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +27 -27
- package/.zen/src/pl-PL/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/pt-BR/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +34 -34
- package/.zen/src/pt-BR/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/pt-PT/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +28 -28
- package/.zen/src/pt-PT/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/ru-RU/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +37 -37
- package/.zen/src/ru-RU/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/sv-SE/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +29 -29
- package/.zen/src/sv-SE/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/th-TH/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +30 -30
- package/.zen/src/th-TH/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/tr-TR/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +31 -31
- package/.zen/src/tr-TR/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/uk-UA/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +30 -30
- package/.zen/src/uk-UA/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/vi-VN/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +24 -24
- package/.zen/src/vi-VN/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +30 -0
- package/.zen/src/zh-Hans/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +14 -11
- package/.zen/src/zh-Hans/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +31 -0
- package/.zen/src/zh-Hant/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md +18 -15
- package/.zen/src/zh-Hant/9d0485c244a80b14dcc92ef91cf5ff82220ed774ebb5e09549929ac75200c7bc.md +31 -0
- package/dist/ai/extractMetadataFromMarkdown.js +3 -3
- package/dist/ai/extractMetadataFromMarkdown.js.map +1 -1
- package/dist/process/template.d.ts.map +1 -1
- package/dist/process/template.js +8 -5
- package/dist/process/template.js.map +1 -1
- package/dist/utils/frontmatter.js +1 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/docs/tricks.md +15 -0
- package/package.json +1 -1
- package/src/ai/extractMetadataFromMarkdown.ts +3 -3
- package/src/process/template.ts +10 -9
- package/src/utils/frontmatter.ts +1 -1
- package/.zen/src/de-DE/04319611d7cde718d0e82da8e034e04b15fb3bb37c3784d8f7313577c5178b06.md +0 -73
- package/.zen/src/de-DE/48eb2ad3e174cd06ed16c959fa58e0381dbc4a4147fa3456b21eea2b3d67c329.md +0 -81
- package/.zen/src/en-US/01d04f7c17b4a541ead9d759d877b30b403e15b849182a49eb1f62bd29ecd18c.md +0 -120
- package/.zen/src/en-US/04319611d7cde718d0e82da8e034e04b15fb3bb37c3784d8f7313577c5178b06.md +0 -73
- package/.zen/src/en-US/1b798c44a4f353e47296ca83d5905e37e6aba3e90bbd9bc3b3d34fc12059a2ca.md +0 -75
- package/.zen/src/en-US/1e96be58d76c60056b708eb5bd8b8b81d7b5845d9cfe0b879d85068a5f11df3a.md +0 -189
- package/.zen/src/en-US/48eb2ad3e174cd06ed16c959fa58e0381dbc4a4147fa3456b21eea2b3d67c329.md +0 -81
- package/.zen/src/en-US/5ec990146b35e00de2630559126ee07f7cdcddeb23b0e8cab3d85b4181353e26.md +0 -53
- package/.zen/src/en-US/6124ea88edec5bde737b26b21f71ecfeffe4e73151784856edf813ee231a4baa.md +0 -11
- package/.zen/src/en-US/80ae9bed74fc6348a7c1fe9f33e86b65f5d919169721f77bcf0e1bc29fbdb4f9.md +0 -61
- package/.zen/src/en-US/afbf4998656c97181d0edc711e388ad11e0f08f5c6f329861327202462a3a34a.md +0 -63
- package/.zen/src/en-US/f0c2799126931ccd113a0c45b1e623870b0d4f4f400becf6dd877da8f1011517.md +0 -40
- package/.zen/src/en-US/fdfca9b960d0eaa8b2b96fe988ead7481d2c0b16f66ebc94fb477139b4178cdc.md +0 -65
- package/.zen/src/es-ES/04319611d7cde718d0e82da8e034e04b15fb3bb37c3784d8f7313577c5178b06.md +0 -73
- package/.zen/src/es-ES/48eb2ad3e174cd06ed16c959fa58e0381dbc4a4147fa3456b21eea2b3d67c329.md +0 -81
- package/.zen/src/fr-FR/04319611d7cde718d0e82da8e034e04b15fb3bb37c3784d8f7313577c5178b06.md +0 -73
- package/.zen/src/fr-FR/48eb2ad3e174cd06ed16c959fa58e0381dbc4a4147fa3456b21eea2b3d67c329.md +0 -81
- package/.zen/src/ja-JP/04319611d7cde718d0e82da8e034e04b15fb3bb37c3784d8f7313577c5178b06.md +0 -71
- package/.zen/src/ja-JP/48eb2ad3e174cd06ed16c959fa58e0381dbc4a4147fa3456b21eea2b3d67c329.md +0 -81
- package/.zen/src/ko-KR/48eb2ad3e174cd06ed16c959fa58e0381dbc4a4147fa3456b21eea2b3d67c329.md +0 -81
- package/.zen/src/pt-PT/04319611d7cde718d0e82da8e034e04b15fb3bb37c3784d8f7313577c5178b06.md +0 -73
- package/.zen/src/pt-PT/48eb2ad3e174cd06ed16c959fa58e0381dbc4a4147fa3456b21eea2b3d67c329.md +0 -81
- package/.zen/src/ru-RU/04319611d7cde718d0e82da8e034e04b15fb3bb37c3784d8f7313577c5178b06.md +0 -73
- package/.zen/src/ru-RU/48eb2ad3e174cd06ed16c959fa58e0381dbc4a4147fa3456b21eea2b3d67c329.md +0 -81
- package/.zen/src/zh-Hans/01d04f7c17b4a541ead9d759d877b30b403e15b849182a49eb1f62bd29ecd18c.md +0 -120
- package/.zen/src/zh-Hans/04319611d7cde718d0e82da8e034e04b15fb3bb37c3784d8f7313577c5178b06.md +0 -73
- package/.zen/src/zh-Hans/084ef1f6a0167df8621c673c79211309d4af6c588e7bbe3e043f7c244edd0ac6.md +0 -80
- package/.zen/src/zh-Hans/1b798c44a4f353e47296ca83d5905e37e6aba3e90bbd9bc3b3d34fc12059a2ca.md +0 -77
- package/.zen/src/zh-Hans/1e96be58d76c60056b708eb5bd8b8b81d7b5845d9cfe0b879d85068a5f11df3a.md +0 -189
- package/.zen/src/zh-Hans/48eb2ad3e174cd06ed16c959fa58e0381dbc4a4147fa3456b21eea2b3d67c329.md +0 -81
- package/.zen/src/zh-Hans/5ec990146b35e00de2630559126ee07f7cdcddeb23b0e8cab3d85b4181353e26.md +0 -55
- package/.zen/src/zh-Hans/6124ea88edec5bde737b26b21f71ecfeffe4e73151784856edf813ee231a4baa.md +0 -11
- package/.zen/src/zh-Hans/80ae9bed74fc6348a7c1fe9f33e86b65f5d919169721f77bcf0e1bc29fbdb4f9.md +0 -63
- package/.zen/src/zh-Hans/afbf4998656c97181d0edc711e388ad11e0f08f5c6f329861327202462a3a34a.md +0 -63
- package/.zen/src/zh-Hans/f0c2799126931ccd113a0c45b1e623870b0d4f4f400becf6dd877da8f1011517.md +0 -40
- package/.zen/src/zh-Hans/fdfca9b960d0eaa8b2b96fe988ead7481d2c0b16f66ebc94fb477139b4178cdc.md +0 -65
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
'title': 'ZEN文档日期声明使用技巧'
|
|
3
|
+
'summary': '本文档介绍了ZEN工具中在正文中直接声明日期的使用技巧,与传统Markdown通过YAML
|
|
4
|
+
Frontmatter声明日期的方式对比,强调了ZEN的自动识别和智能处理功能,提升了用户体验,并适用于日记、博客等需要时间线的内容类型。'
|
|
5
|
+
'tags':
|
|
6
|
+
- 'ZEN'
|
|
7
|
+
- '日期声明'
|
|
8
|
+
- 'Markdown'
|
|
9
|
+
- 'AI处理'
|
|
10
|
+
- '时间线'
|
|
11
|
+
- '用户体验'
|
|
12
|
+
- '文档管理'
|
|
13
|
+
'inferred_date': '2026-01-08'
|
|
14
|
+
'inferred_lang': 'zh-Hans'
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# 使用技巧
|
|
18
|
+
|
|
19
|
+
## 在正文中声明日期
|
|
20
|
+
|
|
21
|
+
正文中可以使用 "今天是 2026 年 1 月 8 日" 这样的日期声明(格式风格自由),ZEN 会自动识别并处理。
|
|
22
|
+
|
|
23
|
+
传统 Markdown 文档是通过 YAML Frontmatter 声明日期,需要记住对应的字段,否则会导致日期无法正确识别。
|
|
24
|
+
|
|
25
|
+
ZEN 支持在正文中直接声明日期,避免了忘记填写 Frontmatter 字段的问题。
|
|
26
|
+
|
|
27
|
+
AI 会自动提取并推断正文中的日期信息,并将其作为文档的创建日期进行处理。
|
|
28
|
+
|
|
29
|
+
这种方式更加灵活和智能,提升了用户体验。
|
|
30
|
+
|
|
31
|
+
顺带一提,具有日期的文档,可以生成时间线视图,方便浏览和管理。特别适合日记、博客等需要时间线的内容类型。
|
package/.zen/src/zh-Hant/74541be9d53c64107a548e09847244d52bff803960942cd2bfbd2a8600afb805.md
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: ZEN - 極簡主義 Markdown + AI 靜態網站建構器
|
|
3
|
-
summary:
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
|
|
2
|
+
'title': 'ZEN - 極簡主義 Markdown + AI 靜態網站建構器'
|
|
3
|
+
'summary':
|
|
4
|
+
'ZEN 是一個結合 AI 功能的靜態網站生成器,旨在簡化文件寫作和網站建構過程。它允許使用者專注於用母語編寫 Markdown
|
|
5
|
+
內容,自動處理標題生成、分類導航和增量翻譯,支援多語言版本,無需複雜配置。工具基於 Node.js 和 OpenAI
|
|
6
|
+
API,透過命令列快速建構網站,適合追求高效和簡潔的寫作者。'
|
|
7
|
+
'tags':
|
|
8
|
+
- '靜態網站生成器'
|
|
9
|
+
- 'Markdown'
|
|
10
|
+
- 'AI'
|
|
11
|
+
- '極簡主義'
|
|
12
|
+
- '多語言翻譯'
|
|
13
|
+
- 'Node.js'
|
|
14
|
+
- 'OpenAI'
|
|
15
|
+
'inferred_lang': 'zh-Hans'
|
|
13
16
|
---
|
|
14
17
|
|
|
15
18
|
# ZEN - 極簡主義 Markdown + AI 靜態網站建構器
|
|
@@ -20,7 +23,7 @@ inferred_lang: zh-Hant
|
|
|
20
23
|
|
|
21
24
|
1. 📃 **靜態網站生成**:將任意一個包含 Markdown 的 git 資料夾建構成一個靜態 HTML 網站。
|
|
22
25
|
2. 🧭 **智慧分類導航**:使用 AI 進行內容分析,生成網站地圖和導航,原始檔案的位置不敏感。
|
|
23
|
-
3. 🌍 **自動增量翻譯**:使用 AI 進行增量翻譯,讓使用者使用母語編寫 Markdown
|
|
26
|
+
3. 🌍 **自動增量翻譯**:使用 AI 進行增量翻譯,讓使用者使用母語編寫 Markdown,但使用者可以是多語言的。
|
|
24
27
|
|
|
25
28
|
為什麼又搞了個 Markdown 靜態網站生成器?我重新思考了 AI 時代下,文件工具可以如何更好地服務於寫作者:
|
|
26
29
|
|
|
@@ -28,11 +31,11 @@ inferred_lang: zh-Hant
|
|
|
28
31
|
|
|
29
32
|
讓文件回歸本質,讓寫作回歸寧靜。
|
|
30
33
|
|
|
31
|
-
|
|
34
|
+
其一,我不想當圖書管理員。我有時想寫下一些內容,但我可能還沒想好它的標題,還沒有形成特別的組織。我希望 LLM 會自動幫我生成標題、做摘要、分類、導航等整理工作。
|
|
32
35
|
|
|
33
36
|
其二,我的書房必須打掃乾淨。我不想要配置複雜的建構工具,折騰複雜的文件配置,不喜歡複雜的結構。每次我看到 Docusaurus、VuePress、Astro 這些工具的配置檔案和專案結構,我就頭疼。現在,ZEN 選擇將所有的配置都隱藏到 .zen 目錄下,掃到角落裡,使用者只需要專注於寫作內容,其他的交給 ZEN 來處理。其他的目錄都是您的寫作空間,您可以隨意組織您的 Markdown 檔案。
|
|
34
37
|
|
|
35
|
-
-
|
|
38
|
+
- 回歸母語:用母語寫作,流暢建構多語言版本
|
|
36
39
|
|
|
37
40
|
人生苦短,我懶得翻譯。人在使用母語時,才是最能發揮自身思考深度的。但同時與世界保持連接又是必要的,我不想放棄多語言的交流。於是我希望有一個工具,能讓我用母語寫作,同時又能讓更多人看到我的內容。現在的 i18n 需要自己翻譯不說,還得自己維護內容更新,太麻煩了。我選擇使用 LLM 來幫我做翻譯,省下了我很多時間,並且可以一鍵完成多國語言翻譯。
|
|
38
41
|
|
|
@@ -57,7 +60,7 @@ export OPENAI_MODEL="gpt-3.5-turbo" # 可選,預設使用 gpt-3.5-turbo 模
|
|
|
57
60
|
建構網站,支援多語言翻譯。使用當前目錄作為來源目錄,輸出到 `.zen/dist` 目錄。
|
|
58
61
|
|
|
59
62
|
- 可以透過多次使用 `--lang` 參數指定需要生成的語言版本(例如 `--lang zh-Hans --lang en-US`)。
|
|
60
|
-
- 可以透過 `--base-url` 參數指定網站的基礎 URL 前綴(例如 GitHub Pages
|
|
63
|
+
- 可以透過 `--base-url` 參數指定網站的基礎 URL 前綴(例如 GitHub Pages 上的儲存庫名稱)。
|
|
61
64
|
- 不需要配置來源語言,ZEN 會自動偵測。
|
|
62
65
|
|
|
63
66
|
```bash
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
'title': 'ZEN文件日期聲明使用技巧'
|
|
3
|
+
'summary': '本文檔介紹了ZEN工具中在正文中直接聲明日期的使用技巧,與傳統Markdown透過YAML
|
|
4
|
+
Frontmatter聲明日期的方式對比,強調了ZEN的自動識別和智能處理功能,提升了使用者體驗,並適用於日記、部落格等需要時間線的內容類型。'
|
|
5
|
+
'tags':
|
|
6
|
+
- 'ZEN'
|
|
7
|
+
- '日期聲明'
|
|
8
|
+
- 'Markdown'
|
|
9
|
+
- 'AI處理'
|
|
10
|
+
- '時間線'
|
|
11
|
+
- '使用者體驗'
|
|
12
|
+
- '文件管理'
|
|
13
|
+
'inferred_date': '2026-01-08'
|
|
14
|
+
'inferred_lang': 'zh-Hans'
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
# 使用技巧
|
|
18
|
+
|
|
19
|
+
## 在正文中聲明日期
|
|
20
|
+
|
|
21
|
+
正文中可以使用「今天是 2026 年 1 月 8 日」這樣的日期聲明(格式風格自由),ZEN 會自動識別並處理。
|
|
22
|
+
|
|
23
|
+
傳統 Markdown 文件是透過 YAML Frontmatter 聲明日期,需要記住對應的欄位,否則會導致日期無法正確識別。
|
|
24
|
+
|
|
25
|
+
ZEN 支援在正文中直接聲明日期,避免了忘記填寫 Frontmatter 欄位的問題。
|
|
26
|
+
|
|
27
|
+
AI 會自動擷取並推斷正文中的日期資訊,並將其作為文件的建立日期進行處理。
|
|
28
|
+
|
|
29
|
+
這種方式更加靈活和智能,提升了使用者體驗。
|
|
30
|
+
|
|
31
|
+
順帶一提,具有日期的文件,可以生成時間線檢視,方便瀏覽和管理。特別適合日記、部落格等需要時間線的內容類型。
|
|
@@ -36,7 +36,7 @@ async function extractMetadataFromMarkdown(content) {
|
|
|
36
36
|
*/
|
|
37
37
|
function buildMetadataPrompt(content) {
|
|
38
38
|
// 限制内容长度以避免 token 超限
|
|
39
|
-
const maxContentLength =
|
|
39
|
+
const maxContentLength = Infinity; // 可根据需要调整长度限制
|
|
40
40
|
const truncatedContent = content.length > maxContentLength
|
|
41
41
|
? content.substring(0, maxContentLength) + '... [内容已截断]'
|
|
42
42
|
: content;
|
|
@@ -48,8 +48,8 @@ ${truncatedContent}
|
|
|
48
48
|
"""
|
|
49
49
|
|
|
50
50
|
请提取:
|
|
51
|
-
1. title: 文档的标题(简洁明了,不超过
|
|
52
|
-
2. summary: 文档摘要(控制在
|
|
51
|
+
1. title: 文档的标题(简洁明了,不超过 30 个字)
|
|
52
|
+
2. summary: 文档摘要(控制在 300 字以内,概括主要内容)
|
|
53
53
|
3. tags: 关键词列表(3-8 个关键词,使用中文或英文)
|
|
54
54
|
4. inferred_date: 文档中隐含的创建日期(如果有的话,格式:YYYY-MM-DD,没有就留空字符串)
|
|
55
55
|
5. inferred_lang: 文档使用的语言代码(例如:zh-Hans 表示简体中文,en-US 表示美式英语)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractMetadataFromMarkdown.js","sourceRoot":"","sources":["../../src/ai/extractMetadataFromMarkdown.ts"],"names":[],"mappings":";;AAQA,kEA4BC;AApCD,+CAAqE;AAGrE;;;;GAIG;AACI,KAAK,UAAU,2BAA2B,CAAC,OAAe;IAC/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAoB;QAChC;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EACL,mDAAmD;SACtD;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM;SAChB;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,yBAAgB,EAAC,QAAQ,EAAE;QAChD,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;KACzC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5E,iBAAiB;IACjB,QAAQ,CAAC,WAAW,GAAG;QACrB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;QACpC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB;QAC5C,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;KACnC,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAe;IAC1C,qBAAqB;IACrB,MAAM,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"extractMetadataFromMarkdown.js","sourceRoot":"","sources":["../../src/ai/extractMetadataFromMarkdown.ts"],"names":[],"mappings":";;AAQA,kEA4BC;AApCD,+CAAqE;AAGrE;;;;GAIG;AACI,KAAK,UAAU,2BAA2B,CAAC,OAAe;IAC/D,MAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAoB;QAChC;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EACL,mDAAmD;SACtD;QACD;YACE,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,MAAM;SAChB;KACF,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,yBAAgB,EAAC,QAAQ,EAAE;QAChD,eAAe,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE;KACzC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5E,iBAAiB;IACjB,QAAQ,CAAC,WAAW,GAAG;QACrB,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;QACpC,UAAU,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB;QAC5C,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;KACnC,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,OAAe;IAC1C,qBAAqB;IACrB,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,cAAc;IACjD,MAAM,gBAAgB,GACpB,OAAO,CAAC,MAAM,GAAG,gBAAgB;QAC/B,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,aAAa;QACxD,CAAC,CAAC,OAAO,CAAC;IAEd,OAAO;;;;EAIP,gBAAgB;;;;;;;;;;;;;;;;;EAiBhB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,eAAuB;IACpD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAE7C,UAAU;QACV,OAAO;YACL,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO;YACxC,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE;YACvC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;gBAChE,CAAC,CAAC,EAAE;YACN,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,SAAS;YAC1D,aAAa,EAAE,QAAQ,CAAC,aAAa,EAAE,IAAI,EAAE,IAAI,SAAS;SAC3D,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;QACrF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/process/template.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../src/process/template.ts"],"names":[],"mappings":"AA0LA;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAuCrD"}
|
package/dist/process/template.js
CHANGED
|
@@ -54,8 +54,9 @@ function generateLanguageSwitcher(templateData) {
|
|
|
54
54
|
const langName = languages_1.LANGUAGE_NAMES[lang] || lang;
|
|
55
55
|
const isCurrent = lang === templateData.lang;
|
|
56
56
|
const activeClass = isCurrent ? 'active' : '';
|
|
57
|
+
const link = path.join('..', lang, templateData.file.hash + '.html');
|
|
57
58
|
return `<li class="lang-item ${activeClass}">
|
|
58
|
-
<a href="${
|
|
59
|
+
<a href="${link}" class="lang-link">${langName}</a>
|
|
59
60
|
</li>`;
|
|
60
61
|
})
|
|
61
62
|
.join('');
|
|
@@ -80,13 +81,15 @@ async function generateNavigationHtml(data) {
|
|
|
80
81
|
const content = await fs.readFile(path.join(paths_1.ZEN_SRC_DIR, data.lang, file.hash + '.md'), 'utf-8');
|
|
81
82
|
const { frontmatter } = (0, frontmatter_1.parseFrontmatter)(content);
|
|
82
83
|
const title = frontmatter.title || file.metadata?.title || file.path; // 优先使用提取的标题
|
|
84
|
+
// 使用相对链接
|
|
85
|
+
const link = file.hash + '.html';
|
|
83
86
|
return {
|
|
84
87
|
title,
|
|
85
|
-
path:
|
|
88
|
+
path: link,
|
|
86
89
|
isActive: data.file.hash === file.hash,
|
|
87
90
|
};
|
|
88
91
|
}));
|
|
89
|
-
navigation.sort((a, b) =>
|
|
92
|
+
navigation.sort((a, b) => b.path.localeCompare(a.path));
|
|
90
93
|
return `<ul class="nav-list">${navigation
|
|
91
94
|
.map(item => {
|
|
92
95
|
const activeClass = item.isActive ? 'active' : '';
|
|
@@ -108,8 +111,8 @@ const replaceInnerLinks = (data, markdownContent) => {
|
|
|
108
111
|
console.warn(`⚠️ Link target not found for ${link} in file ${data.file.path}`);
|
|
109
112
|
continue;
|
|
110
113
|
}
|
|
111
|
-
// 替换链接
|
|
112
|
-
const targetLink = path.join(
|
|
114
|
+
// 替换链接 (使用相对链接)
|
|
115
|
+
const targetLink = path.join(targetFile.hash + '.html');
|
|
113
116
|
// 全局替换链接
|
|
114
117
|
const linksRegex = new RegExp(`\\]\\(${link.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\)`, 'g');
|
|
115
118
|
content = content.replace(linksRegex, `](${targetLink})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/process/template.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/process/template.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ const parseFrontmatter = (content) => {
|
|
|
15
15
|
exports.parseFrontmatter = parseFrontmatter;
|
|
16
16
|
const updateFrontmatter = (content, newFrontmatter) => {
|
|
17
17
|
const { body } = (0, exports.parseFrontmatter)(content);
|
|
18
|
-
const frontmatterContent = `---\n${(0, yaml_1.stringify)(newFrontmatter)}---\n\n`;
|
|
18
|
+
const frontmatterContent = `---\n${(0, yaml_1.stringify)(newFrontmatter, { defaultStringType: 'QUOTE_DOUBLE' })}---\n\n`;
|
|
19
19
|
return frontmatterContent + body;
|
|
20
20
|
};
|
|
21
21
|
exports.updateFrontmatter = updateFrontmatter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":";;;AAAA,+BAAwC;AAEjC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAsC,EAAE;IACtF,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC9C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO,EAAE,WAAW,EAAE,IAAA,YAAK,EAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC,CAAC;AATW,QAAA,gBAAgB,oBAS3B;AAEK,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,cAAmB,EAAU,EAAE;IAChF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,wBAAgB,EAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,kBAAkB,GAAG,QAAQ,IAAA,gBAAS,EAAC,cAAc,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":";;;AAAA,+BAAwC;AAEjC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAsC,EAAE;IACtF,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAC9C,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,kBAAkB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,OAAO,EAAE,WAAW,EAAE,IAAA,YAAK,EAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IACjE,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC5C,CAAC,CAAC;AATW,QAAA,gBAAgB,oBAS3B;AAEK,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAE,cAAmB,EAAU,EAAE;IAChF,MAAM,EAAE,IAAI,EAAE,GAAG,IAAA,wBAAgB,EAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,kBAAkB,GAAG,QAAQ,IAAA,gBAAS,EAAC,cAAc,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC,SAAS,CAAC;IAC7G,OAAO,kBAAkB,GAAG,IAAI,CAAC;AACnC,CAAC,CAAC;AAJW,QAAA,iBAAiB,qBAI5B"}
|
package/docs/tricks.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 使用技巧
|
|
2
|
+
|
|
3
|
+
## 在正文中声明日期
|
|
4
|
+
|
|
5
|
+
正文中可以使用 "今天是 2026 年 1 月 8 日" 这样的日期声明(格式风格自由),ZEN 会自动识别并处理。
|
|
6
|
+
|
|
7
|
+
传统 Markdown 文档是通过 YAML Frontmatter 声明日期,需要记住对应的字段,否则会导致日期无法正确识别。
|
|
8
|
+
|
|
9
|
+
ZEN 支持在正文中直接声明日期,避免了忘记填写 Frontmatter 字段的问题。
|
|
10
|
+
|
|
11
|
+
AI 会自动提取并推断正文中的日期信息,并将其作为文档的创建日期进行处理。
|
|
12
|
+
|
|
13
|
+
这种方式更加灵活和智能,提升了用户体验。
|
|
14
|
+
|
|
15
|
+
顺带一提,具有日期的文档,可以生成时间线视图,方便浏览和管理。特别适合日记、博客等需要时间线的内容类型。
|
package/package.json
CHANGED
|
@@ -41,7 +41,7 @@ export async function extractMetadataFromMarkdown(content: string): Promise<AIMe
|
|
|
41
41
|
*/
|
|
42
42
|
function buildMetadataPrompt(content: string): string {
|
|
43
43
|
// 限制内容长度以避免 token 超限
|
|
44
|
-
const maxContentLength =
|
|
44
|
+
const maxContentLength = Infinity; // 可根据需要调整长度限制
|
|
45
45
|
const truncatedContent =
|
|
46
46
|
content.length > maxContentLength
|
|
47
47
|
? content.substring(0, maxContentLength) + '... [内容已截断]'
|
|
@@ -55,8 +55,8 @@ ${truncatedContent}
|
|
|
55
55
|
"""
|
|
56
56
|
|
|
57
57
|
请提取:
|
|
58
|
-
1. title: 文档的标题(简洁明了,不超过
|
|
59
|
-
2. summary: 文档摘要(控制在
|
|
58
|
+
1. title: 文档的标题(简洁明了,不超过 30 个字)
|
|
59
|
+
2. summary: 文档摘要(控制在 300 字以内,概括主要内容)
|
|
60
60
|
3. tags: 关键词列表(3-8 个关键词,使用中文或英文)
|
|
61
61
|
4. inferred_date: 文档中隐含的创建日期(如果有的话,格式:YYYY-MM-DD,没有就留空字符串)
|
|
62
62
|
5. inferred_lang: 文档使用的语言代码(例如:zh-Hans 表示简体中文,en-US 表示美式英语)
|
package/src/process/template.ts
CHANGED
|
@@ -24,8 +24,10 @@ function generateLanguageSwitcher(templateData: TemplateData): string {
|
|
|
24
24
|
const isCurrent = lang === templateData.lang;
|
|
25
25
|
const activeClass = isCurrent ? 'active' : '';
|
|
26
26
|
|
|
27
|
+
const link = path.join('..', lang, templateData.file.hash + '.html');
|
|
28
|
+
|
|
27
29
|
return `<li class="lang-item ${activeClass}">
|
|
28
|
-
<a href="${
|
|
30
|
+
<a href="${link}" class="lang-link">${langName}</a>
|
|
29
31
|
</li>`;
|
|
30
32
|
})
|
|
31
33
|
.join('');
|
|
@@ -62,14 +64,17 @@ async function generateNavigationHtml(data: TemplateData): Promise<string> {
|
|
|
62
64
|
const { frontmatter } = parseFrontmatter(content);
|
|
63
65
|
const title = frontmatter.title || file.metadata?.title || file.path; // 优先使用提取的标题
|
|
64
66
|
|
|
67
|
+
// 使用相对链接
|
|
68
|
+
const link = file.hash + '.html';
|
|
69
|
+
|
|
65
70
|
return {
|
|
66
71
|
title,
|
|
67
|
-
path:
|
|
72
|
+
path: link,
|
|
68
73
|
isActive: data.file.hash === file.hash,
|
|
69
74
|
};
|
|
70
75
|
})
|
|
71
76
|
);
|
|
72
|
-
navigation.sort((a, b) =>
|
|
77
|
+
navigation.sort((a, b) => b.path.localeCompare(a.path));
|
|
73
78
|
|
|
74
79
|
return `<ul class="nav-list">${navigation
|
|
75
80
|
.map(item => {
|
|
@@ -97,12 +102,8 @@ const replaceInnerLinks = (data: TemplateData, markdownContent: string): string
|
|
|
97
102
|
console.warn(`⚠️ Link target not found for ${link} in file ${data.file.path}`);
|
|
98
103
|
continue;
|
|
99
104
|
}
|
|
100
|
-
// 替换链接
|
|
101
|
-
const targetLink = path.join(
|
|
102
|
-
MetaData.options.baseUrl ?? '/',
|
|
103
|
-
data.lang,
|
|
104
|
-
targetFile.hash + '.html'
|
|
105
|
-
);
|
|
105
|
+
// 替换链接 (使用相对链接)
|
|
106
|
+
const targetLink = path.join(targetFile.hash + '.html');
|
|
106
107
|
|
|
107
108
|
// 全局替换链接
|
|
108
109
|
const linksRegex = new RegExp(`\\]\\(${link.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\)`, 'g');
|
package/src/utils/frontmatter.ts
CHANGED
|
@@ -13,6 +13,6 @@ export const parseFrontmatter = (content: string): { frontmatter: any; body: str
|
|
|
13
13
|
|
|
14
14
|
export const updateFrontmatter = (content: string, newFrontmatter: any): string => {
|
|
15
15
|
const { body } = parseFrontmatter(content);
|
|
16
|
-
const frontmatterContent = `---\n${stringify(newFrontmatter)}---\n\n`;
|
|
16
|
+
const frontmatterContent = `---\n${stringify(newFrontmatter, { defaultStringType: 'QUOTE_DOUBLE' })}---\n\n`;
|
|
17
17
|
return frontmatterContent + body;
|
|
18
18
|
};
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: ZEN - Markdown-Dokumentationsseiten-Generator
|
|
3
|
-
summary: ZEN ist ein minimalistisches Tool zur Generierung statischer Seiten aus Markdown, das sich auf das Schreiben von Inhalten konzentriert. Es nutzt KI für Übersetzungen und Navigation, unterstützt den Aufbau mehrsprachiger Seiten und kommt ohne komplexe Konfiguration aus.
|
|
4
|
-
tags:
|
|
5
|
-
- Markdown
|
|
6
|
-
- Static Site Generator
|
|
7
|
-
- KI-Übersetzung
|
|
8
|
-
- Mehrsprachig
|
|
9
|
-
- Minimalismus
|
|
10
|
-
- Dokumentationstool
|
|
11
|
-
- ZEN
|
|
12
|
-
inferred_lang: de-DE
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# ZEN - Ein schlankes Tool zum Erstellen von Markdown-Dokumentationsseiten
|
|
16
|
-
|
|
17
|
-
[简体中文](https://zccz14.github.io/ZEN/zh-Hans) | [English](https://zccz14.github.io/ZEN/en-US)
|
|
18
|
-
|
|
19
|
-
Warum noch ein Markdown-Static-Site-Generator? Ich habe überlegt, wie Dokumentationstools im KI-Zeitalter Autoren besser dienen können:
|
|
20
|
-
|
|
21
|
-
- **Zurück zum Inhalt**: Minimale Ablenkung, Fokus auf das Schreiben
|
|
22
|
-
|
|
23
|
-
Lasst die Dokumentation wieder das Wesentliche sein und das Schreiben wieder ruhig.
|
|
24
|
-
|
|
25
|
-
Erstens: Ich möchte kein Bibliothekar sein. Manchmal möchte ich etwas aufschreiben, habe aber vielleicht noch keinen Titel oder eine klare Struktur. Ich wünsche mir, dass eine LLM automatisch Titel generiert, Zusammenfassungen erstellt, kategorisiert und Navigation erstellt – also die organisatorische Arbeit übernimmt.
|
|
26
|
-
|
|
27
|
-
Zweitens: Mein Arbeitsbereich muss aufgeräumt sein. Ich möchte keine komplexen Build-Tools konfigurieren, mich nicht mit komplizierten Dokumenteneinstellungen herumschlagen und keine komplexen Strukturen. Jedes Mal, wenn ich die Konfigurationsdateien und Projektstrukturen von Tools wie Docusaurus, VuePress oder Astro sehe, bekomme ich Kopfschmerzen. ZEN versteckt daher alle Konfigurationen im `.zen`-Verzeichnis – weg in die Ecke. Der Nutzer konzentriert sich nur auf den Inhalt, den Rest erledigt ZEN. Alle anderen Verzeichnisse sind Ihr Schreibbereich, Sie können Ihre Markdown-Dateien frei organisieren.
|
|
28
|
-
|
|
29
|
-
- **Zurück zur Muttersprache**: In der Muttersprache schreiben, mehrsprachige Versionen mühelos erstellen
|
|
30
|
-
|
|
31
|
-
Das Leben ist zu kurz für Übersetzungen. Man denkt am tiefsten in der Muttersprache. Gleichzeitig ist die Verbindung zur Welt wichtig, ich möchte den mehrsprachigen Austausch nicht aufgeben. Daher wünsche ich mir ein Tool, mit dem ich in meiner Muttersprache schreiben kann, aber dennoch viele Menschen meine Inhalte sehen können. Aktuelle i18n-Lösungen erfordern nicht nur eigene Übersetzungen, sondern auch die Pflege von Aktualisierungen – zu aufwändig. Ich nutze eine LLM für Übersetzungen, das spart viel Zeit und ermöglicht Übersetzungen in viele Sprachen mit einem Klick.
|
|
32
|
-
|
|
33
|
-
## Grundlegende Funktionen
|
|
34
|
-
|
|
35
|
-
1. **Generierung statischer Seiten**
|
|
36
|
-
- Erstellt aus einem beliebigen Ordner mit Markdown-Dateien eine statische HTML-Website.
|
|
37
|
-
|
|
38
|
-
2. **Intelligente Navigation**
|
|
39
|
-
- Erzeugt eine Sitemap und Navigation. Die ursprüngliche Verzeichnisstruktur der Markdown-Quelldateien muss nicht beibehalten werden; Dateien können frei verschoben werden.
|
|
40
|
-
|
|
41
|
-
3. **Inkrementelle i18n-Übersetzung**
|
|
42
|
-
- Nutzt LLM für inkrementelle i18n-Übersetzungen. Der Nutzer schreibt Markdown in seiner Muttersprache, kann aber mehrsprachige Inhalte bereitstellen.
|
|
43
|
-
|
|
44
|
-
## Designphilosophie
|
|
45
|
-
|
|
46
|
-
- **Minimalismus**: Minimale Konfiguration, maximale Flexibilität.
|
|
47
|
-
- **Inhaltsfokus**: Konzentration auf das Schreiben, nicht auf die Tool-Konfiguration.
|
|
48
|
-
- **KI-gestützt**: Nutzt KI für Übersetzungen und Inhaltsorganisation.
|
|
49
|
-
- **Mehrsprachig**: Unterstützt die Erstellung und Darstellung mehrsprachiger Inhalte.
|
|
50
|
-
|
|
51
|
-
## Schnellstart
|
|
52
|
-
|
|
53
|
-
### Empfohlene Verwendung
|
|
54
|
-
|
|
55
|
-
**Es wird empfohlen, in das Verzeichnis mit den Markdown-Dateien zu wechseln und direkt mit dem folgenden Befehl zu beginnen:**
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
# Umgebungsvariablen setzen (entsprechend Ihrer Umgebung anpassen)
|
|
59
|
-
export OPENAI_API_KEY="sk-xxxxxx" # Erforderlich: Bitte durch Ihren OpenAI API Key ersetzen
|
|
60
|
-
export OPENAI_BASE_URL="https://api.openai.com/v1" # Optional, standardmäßig wird die offizielle OpenAI-API verwendet
|
|
61
|
-
export OPENAI_MODEL="gpt-3.5-turbo" # Optional, standardmäßig wird das gpt-3.5-turbo Modell verwendet
|
|
62
|
-
|
|
63
|
-
# Website bauen, mit Unterstützung für mehrsprachige Übersetzungen
|
|
64
|
-
npx zengen@latest build --lang zh-Hans --lang en-US --verbose
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Weitere Parameter oder Hilfe anzeigen**:
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
npx zengen
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
**Hinweis**: ZEN erzwingt die Verwendung des aktuellen Verzeichnisses als Quellverzeichnis. Die Ausgabe erfolgt ins Verzeichnis `.zen/dist`. Das Angeben von Quell- und Ausgabeverzeichnissen als Parameter wird nicht unterstützt.
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: ZEN - Markdown-Dokumentationsseiten-Generator
|
|
3
|
-
summary: ZEN ist ein minimalistisches, statisches Site-Generierungstool für Markdown, das Inhalte priorisiert und Minimalismus betont. Es nutzt KI für intelligente Navigation und mehrsprachige Übersetzung, um Nutzern zu helfen, sich auf das Schreiben zu konzentrieren, ohne komplexe Konfigurationen.
|
|
4
|
-
tags:
|
|
5
|
-
- Markdown
|
|
6
|
-
- Statische Site-Generierung
|
|
7
|
-
- KI-Übersetzung
|
|
8
|
-
- Mehrsprachig
|
|
9
|
-
- Minimalismus
|
|
10
|
-
- Dokumentationstool
|
|
11
|
-
- ZEN
|
|
12
|
-
inferred_lang: de-DE
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
# ZEN - Minimalistisches Markdown-Dokumentationsseiten-Tool
|
|
16
|
-
|
|
17
|
-
[简体中文](https://zccz14.github.io/ZEN/zh-Hans) |
|
|
18
|
-
[English](https://zccz14.github.io/ZEN/en-US) |
|
|
19
|
-
[Español](https://zccz14.github.io/ZEN/es-ES) |
|
|
20
|
-
[Português](https://zccz14.github.io/ZEN/pt-PT) |
|
|
21
|
-
[Русский](https://zccz14.github.io/ZEN/ru-RU) |
|
|
22
|
-
[Français](https://zccz14.github.io/ZEN/fr-FR) |
|
|
23
|
-
[日本語](https://zccz14.github.io/ZEN/ja-JP) |
|
|
24
|
-
[한국어](https://zccz14.github.io/ZEN/ko-KR) |
|
|
25
|
-
[Deutsch](https://zccz14.github.io/ZEN/de-DE) |
|
|
26
|
-
|
|
27
|
-
Warum noch ein statischer Markdown-Site-Generator? Ich habe überlegt, wie Dokumentationstools im KI-Zeitalter Autoren besser dienen können:
|
|
28
|
-
|
|
29
|
-
- **Zurück zu den Inhalten**: Minimale Ablenkung, Fokus auf das Schreiben
|
|
30
|
-
|
|
31
|
-
Lasst die Dokumentation zu ihrem Wesen zurückkehren und das Schreiben zur Ruhe.
|
|
32
|
-
|
|
33
|
-
Erstens: Ich möchte kein Bibliothekar sein. Manchmal möchte ich etwas aufschreiben, aber vielleicht habe ich noch keinen Titel dafür oder es ist noch nicht besonders organisiert. Ich wünsche mir, dass eine LLM automatisch Titel generiert, Zusammenfassungen erstellt, kategorisiert, Navigation erstellt und andere organisatorische Aufgaben übernimmt.
|
|
34
|
-
|
|
35
|
-
Zweitens: Mein Arbeitszimmer muss aufgeräumt sein. Ich möchte keine komplexen Build-Tools konfigurieren, mich nicht mit komplizierten Dokumenteneinstellungen herumschlagen und keine komplexen Strukturen. Jedes Mal, wenn ich die Konfigurationsdateien und Projektstrukturen von Tools wie Docusaurus, VuePress oder Astro sehe, bekomme ich Kopfschmerzen. Jetzt versteckt ZEN alle Konfigurationen im `.zen`-Verzeichnis, schiebt sie in die Ecke. Der Nutzer muss sich nur auf den Inhalt konzentrieren, den Rest erledigt ZEN. Alle anderen Verzeichnisse sind Ihr Schreibbereich, Sie können Ihre Markdown-Dateien beliebig organisieren.
|
|
36
|
-
|
|
37
|
-
- **Zurück zur Muttersprache**: In der Muttersprache schreiben, nahtlos mehrsprachige Versionen erstellen
|
|
38
|
-
|
|
39
|
-
Das Leben ist kurz, ich bin zu faul zum Übersetzen. Man denkt am tiefsten in seiner Muttersprache. Gleichzeitig ist es notwendig, mit der Welt verbunden zu bleiben, ich möchte den mehrsprachigen Austausch nicht aufgeben. Daher wünsche ich mir ein Tool, mit dem ich in meiner Muttersprache schreiben kann, aber gleichzeitig mehr Menschen meine Inhalte zugänglich machen kann. Aktuelle i18n-Lösungen erfordern nicht nur eigene Übersetzungen, sondern auch die Pflege von Inhaltsaktualisierungen – das ist zu umständlich. Ich nutze LLMs für Übersetzungen, das spart mir viel Zeit und mehrsprachige Übersetzungen sind mit einem Klick erledigt.
|
|
40
|
-
|
|
41
|
-
## Grundlegende Funktionen
|
|
42
|
-
|
|
43
|
-
1. **Statische Site-Generierung**
|
|
44
|
-
- Erstellt aus einem beliebigen Ordner mit Markdown-Dateien eine statische HTML-Website.
|
|
45
|
-
|
|
46
|
-
2. **Intelligente Navigation**
|
|
47
|
-
- Generiert eine Sitemap und Navigation. Die ursprüngliche Verzeichnisstruktur der Markdown-Quelldateien muss nicht beibehalten werden, Quelldateien können beliebig verschoben werden.
|
|
48
|
-
|
|
49
|
-
3. **Inkrementelle i18n-Übersetzung**
|
|
50
|
-
- Nutzt LLMs für inkrementelle i18n-Übersetzungen. Nutzer schreiben Markdown in ihrer Muttersprache, können aber mehrsprachige Inhalte bereitstellen.
|
|
51
|
-
|
|
52
|
-
## Designphilosophie
|
|
53
|
-
|
|
54
|
-
- **Minimalismus**: Minimale Konfiguration, maximale Flexibilität.
|
|
55
|
-
- **Inhalte zuerst**: Fokus auf das Schreiben, nicht auf Tool-Konfiguration.
|
|
56
|
-
- **KI-gestützt**: Nutzt KI für Übersetzung und Inhaltsorganisation.
|
|
57
|
-
- **Mehrsprachig**: Unterstützt mehrsprachige Inhaltserstellung und -darstellung.
|
|
58
|
-
|
|
59
|
-
## Schnellstart
|
|
60
|
-
|
|
61
|
-
### Empfohlene Verwendung
|
|
62
|
-
|
|
63
|
-
**Es wird empfohlen, in das Verzeichnis mit den Markdown-Dateien zu wechseln und direkt mit dem folgenden Befehl mit dem Build zu beginnen:**
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
# Umgebungsvariablen setzen (an Ihre Situation anpassen)
|
|
67
|
-
export OPENAI_API_KEY="sk-xxxxxx" # Erforderlich: Bitte durch Ihren OpenAI API Key ersetzen
|
|
68
|
-
export OPENAI_BASE_URL="https://api.openai.com/v1" # Optional, standardmäßig wird die offizielle OpenAI-API verwendet
|
|
69
|
-
export OPENAI_MODEL="gpt-3.5-turbo" # Optional, standardmäßig wird das gpt-3.5-turbo-Modell verwendet
|
|
70
|
-
|
|
71
|
-
# Site bauen, mit mehrsprachiger Übersetzungsunterstützung
|
|
72
|
-
npx zengen@latest build --lang zh-Hans --lang en-US --verbose
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
**Weitere Parameter oder Hilfe anzeigen**:
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
npx zengen
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**Hinweis**: ZEN erzwingt die Verwendung des aktuellen Verzeichnisses als Quellverzeichnis und gibt die Dateien im Verzeichnis `.zen/dist` aus. Das Angeben von Quell- und Ausgabeverzeichnissen als Parameter wird nicht unterstützt.
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: GitHub Pages Deployment Configuration
|
|
3
|
-
summary: This document describes the GitHub Pages deployment configuration for the ZEN project documentation site, including workflow, trigger conditions, build steps, custom configuration, troubleshooting, and manual trigger methods.
|
|
4
|
-
tags:
|
|
5
|
-
- GitHub Pages
|
|
6
|
-
- Deployment Configuration
|
|
7
|
-
- Workflow
|
|
8
|
-
- Documentation Build
|
|
9
|
-
- Troubleshooting
|
|
10
|
-
- ZEN Project
|
|
11
|
-
inferred_lang: en-US
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
# GitHub Pages Deployment Configuration
|
|
15
|
-
|
|
16
|
-
This directory contains the GitHub Pages deployment configuration for the ZEN project documentation site.
|
|
17
|
-
|
|
18
|
-
## Workflow
|
|
19
|
-
|
|
20
|
-
### `pages.yml`
|
|
21
|
-
|
|
22
|
-
This workflow automatically builds the ZEN project documentation site and deploys it to GitHub Pages.
|
|
23
|
-
|
|
24
|
-
**Trigger Conditions:**
|
|
25
|
-
|
|
26
|
-
- Push to the `main` branch (when changes occur in `demo/src/`, `package.json`, or workflow files)
|
|
27
|
-
- Pull Request targeting the `main` branch
|
|
28
|
-
- Manual trigger
|
|
29
|
-
|
|
30
|
-
**Workflow Steps:**
|
|
31
|
-
|
|
32
|
-
1. **Checkout code**: Check out code from the remote branch to ensure code synchronization.
|
|
33
|
-
2. **Set up Node.js**: Configure the Node.js 20.x environment.
|
|
34
|
-
3. **Install dependencies**: Install project dependencies using `npm ci`.
|
|
35
|
-
4. **Build zengen**: Build the local zengen package.
|
|
36
|
-
5. **Install zengen**: Install the locally built zengen as a global tool.
|
|
37
|
-
6. **Test zengen CLI**: Verify the CLI tool functions correctly.
|
|
38
|
-
7. **Build documentation site**: Build the documentation using `cd demo/src && zengen build`, outputting to the `.zen/dist` directory.
|
|
39
|
-
8. **Configure Pages**: Set up GitHub Pages.
|
|
40
|
-
9. **Upload artifact**: Upload the built documentation site as a Pages artifact.
|
|
41
|
-
10. **Deploy to GitHub Pages**: Automatically deploy to GitHub Pages.
|
|
42
|
-
|
|
43
|
-
## Accessing the Documentation Site
|
|
44
|
-
|
|
45
|
-
After successful deployment, the documentation site will be accessible at the following URL:
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
https://[username].github.io/[repository-name]/
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Custom Configuration
|
|
52
|
-
|
|
53
|
-
### Custom Domain
|
|
54
|
-
|
|
55
|
-
If a custom domain is needed, you can add a CNAME file after the build step:
|
|
56
|
-
|
|
57
|
-
```yaml
|
|
58
|
-
# Create CNAME file (if a custom domain is needed)
|
|
59
|
-
echo "docs.example.com" > docs-dist/CNAME
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Build Options
|
|
63
|
-
|
|
64
|
-
Currently used build command:
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
cd demo/src
|
|
68
|
-
zengen build --verbose
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Available options:
|
|
72
|
-
|
|
73
|
-
- `--verbose`: Show verbose output.
|
|
74
|
-
- `--watch`: Watch mode (not suitable for CI/CD).
|
|
75
|
-
- `--template`: Specify a custom template file.
|
|
76
|
-
- `--config`: Specify a configuration file.
|
|
77
|
-
|
|
78
|
-
### Environment Variables
|
|
79
|
-
|
|
80
|
-
The workflow uses the following environment variables:
|
|
81
|
-
|
|
82
|
-
- `GITHUB_TOKEN`: Automatically provided GitHub token.
|
|
83
|
-
- `NODE_VERSION`: Node.js version (defaults to 20.x).
|
|
84
|
-
|
|
85
|
-
## Troubleshooting
|
|
86
|
-
|
|
87
|
-
### Build Failure
|
|
88
|
-
|
|
89
|
-
1. **Check Node.js version**: Ensure a supported Node.js version is used.
|
|
90
|
-
2. **Verify dependency installation**: Ensure `npm ci` executes successfully.
|
|
91
|
-
3. **Check build output**: Review the verbose output of `zengen build`.
|
|
92
|
-
4. **CLI output directory issue**: ZEN now forces output to the `.zen/dist` directory and no longer supports the `--out` parameter.
|
|
93
|
-
|
|
94
|
-
### Deployment Failure
|
|
95
|
-
|
|
96
|
-
1. **Check permissions**: Ensure the workflow has correct write permissions for Pages.
|
|
97
|
-
2. **Verify artifact**: Ensure the `.zen/dist` directory contains valid HTML files.
|
|
98
|
-
3. **Review logs**: Check GitHub Actions logs for detailed error messages.
|
|
99
|
-
|
|
100
|
-
### Documentation Not Updated
|
|
101
|
-
|
|
102
|
-
1. **Check trigger conditions**: Ensure files in the `demo/src/` directory were modified.
|
|
103
|
-
2. **Wait for deployment completion**: GitHub Pages deployment may take a few minutes.
|
|
104
|
-
3. **Clear browser cache**: The browser may be caching an old version.
|
|
105
|
-
|
|
106
|
-
## Manual Trigger
|
|
107
|
-
|
|
108
|
-
Deployment can be manually triggered via the GitHub Actions interface:
|
|
109
|
-
|
|
110
|
-
1. Go to the repository's "Actions" tab.
|
|
111
|
-
2. Select the "Deploy to GitHub Pages" workflow.
|
|
112
|
-
3. Click the "Run workflow" button.
|
|
113
|
-
4. Select the branch and run.
|
|
114
|
-
|
|
115
|
-
## Related Files
|
|
116
|
-
|
|
117
|
-
- `demo/src/`: Documentation source files (Markdown format).
|
|
118
|
-
- `package.json`: Project configuration and dependencies.
|
|
119
|
-
- `src/cli.ts`: zengen CLI tool implementation.
|
|
120
|
-
- `src/builder.ts`: Documentation builder implementation.
|