retypeset-odyssey 0.1.0 → 0.1.2

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.
@@ -8,12 +8,19 @@
8
8
  site:
9
9
  # Site title.
10
10
  title: Life Odyssey
11
- # Site subtitle (tagline).
12
- subtitle: 人生若只如初见
11
+ # Site subtitle (tagline). Either a single string (used for all languages)
12
+ # or a per-language map, e.g.
13
+ # subtitle:
14
+ # zh: 你的中文副标题
15
+ # en: Your English subtitle
16
+ # ja: あなたの日本語サブタイトル
17
+ # When omitted (or empty) and `i18nTitle: true`, the per-language defaults
18
+ # in src/i18n/ui.ts are used.
19
+ subtitle: ''
13
20
  # Site description (for SEO + RSS).
14
21
  description: A personal blog about life, technology, and reflections.
15
- # Use i18n title/subtitle/description from src/i18n/ui.ts instead of the
16
- # static strings above.
22
+ # When true, title/subtitle/description fall back to src/i18n/ui.ts for the
23
+ # current locale whenever the values above are not set as per-language maps.
17
24
  i18nTitle: true
18
25
  # Author name.
19
26
  author: Zhenjia
@@ -123,8 +130,19 @@ collections:
123
130
  enabled: true
124
131
  notes:
125
132
  enabled: true
133
+ # Optional per-language tagline shown under the Notes title on /notes.
134
+ # Omit to fall back to ui.ts (notesIntro).
135
+ # intro:
136
+ # zh: 我的笔记本
137
+ # en: My notes
138
+ # ja: 私のノート
126
139
  journals:
127
140
  enabled: true
141
+ # Optional per-language tagline for /journals. See `notes.intro` above.
142
+ # intro:
143
+ # zh: 一段旅程
144
+ # en: A journey
145
+ # ja: ある旅
128
146
 
129
147
  # ---- PRELOAD ----------------------------------------------------------------
130
148
  preload:
package/integration.ts CHANGED
@@ -363,6 +363,15 @@ export const dynamicCollections = ${JSON.stringify(dynamicFolders)}
363
363
  return virtualConfigCode
364
364
  if (id === RESOLVED_DYNAMIC_VIRTUAL_ID)
365
365
  return dynamicCollectionsCode
366
+ // Astro 6 / Vite 7's built-in alias plugin (also
367
+ // `enforce: 'pre'`) rewrites `@/config` to the absolute
368
+ // path of the standalone fallback before our resolveId
369
+ // sees the unresolved specifier. Intercept the load by
370
+ // file path too so the consumer-merged config always wins
371
+ // over the inline TS defaults in src/config.ts.
372
+ const configFile = themePath('./src/config.ts')
373
+ if (id === configFile || id.startsWith(`${configFile}?`))
374
+ return virtualConfigCode
366
375
  return null
367
376
  },
368
377
  },
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "retypeset-odyssey",
3
3
  "type": "module",
4
- "version": "0.1.0",
4
+ "version": "0.1.2",
5
5
  "packageManager": "pnpm@10.26.0",
6
6
  "repository": "https://github.com/lifeodyssey/retypeset-odyssey",
7
7
  "exports": {
package/public/_redirects CHANGED
@@ -1,819 +1,2 @@
1
1
  # AUTO-GENERATED FILE. DO NOT EDIT MANUALLY.
2
2
  # Generated by: pnpm generate-legacy-redirects
3
- /en/notes/cousera机器学习基石第一周笔记-machine-learning-foudation-nweek-1-note-in-cousera.html /en/notes/cousera机器学习基石第一周笔记-machine-learning-foudation-nweek-1-note-in-cousera 301
4
- /en/notes/cousera机器学习基石第三周笔记-machine-learning-foundation-week-3-note-in-cousera.html /en/notes/cousera机器学习基石第三周笔记-machine-learning-foundation-week-3-note-in-cousera 301
5
- /en/notes/cousera机器学习基石第四周笔记-machine-learning-foundation-week-4-note-in-cousera.html /en/notes/cousera机器学习基石第四周笔记-machine-learning-foundation-week-4-note-in-cousera 301
6
- /en/notes/leetcode面试高频题分类刷题总结.html /en/notes/leetcode面试高频题分类刷题总结 301
7
- /en/notes/recursive.html /en/notes/recursive 301
8
- /en/notes/two-pointers.html /en/notes/two-pointers 301
9
- /en/notes/机器学习基石第二周笔记machine-learning-foundation-week-2-note.html /en/notes/机器学习基石第二周笔记machine-learning-foundation-week-2-note 301
10
- /en/posts/149c7e00 /en/posts/carbon-flux-by-bai 301
11
- /en/posts/149c7e00.html /en/posts/carbon-flux-by-bai 301
12
- /en/posts/179aa5a3 /en/posts/annotated-bibliography-2020-11-17-11-201 301
13
- /en/posts/179aa5a3.html /en/posts/annotated-bibliography-2020-11-17-11-201 301
14
- /en/posts/26d5d570 /en/posts/jpgu-agu-joint-meeting-2020-poster 301
15
- /en/posts/26d5d570.html /en/posts/jpgu-agu-joint-meeting-2020-poster 301
16
- /en/posts/2adc6f01 /en/posts/book-reading-note 301
17
- /en/posts/2adc6f01.html /en/posts/book-reading-note 301
18
- /en/posts/2b01b12c /en/posts/tennary-plot 301
19
- /en/posts/2b01b12c.html /en/posts/tennary-plot 301
20
- /en/posts/2c9001a2 /en/notes/机器学习基石第二周笔记machine-learning-foundation-week-2-note 301
21
- /en/posts/2c9001a2.html /en/notes/机器学习基石第二周笔记machine-learning-foundation-week-2-note 301
22
- /en/posts/31f16e8d /en/posts/esa-oceanic-carbon-from-space-2022 301
23
- /en/posts/31f16e8d.html /en/posts/esa-oceanic-carbon-from-space-2022 301
24
- /en/posts/33f4c7b7 /en/posts/book-reading-note3 301
25
- /en/posts/33f4c7b7.html /en/posts/book-reading-note3 301
26
- /en/posts/34c938fb /en/posts/agentic-ai-note 301
27
- /en/posts/34c938fb.html /en/posts/agentic-ai-note 301
28
- /en/posts/39e89397 /en/posts/np-ma-mask 301
29
- /en/posts/39e89397.html /en/posts/np-ma-mask 301
30
- /en/posts/3d8d27aa /en/posts/annotated-bibliography-2020-10-5-10-11 301
31
- /en/posts/3d8d27aa.html /en/posts/annotated-bibliography-2020-10-5-10-11 301
32
- /en/posts/442707f1 /en/posts/lfs 301
33
- /en/posts/442707f1.html /en/posts/lfs 301
34
- /en/posts/44f3f721 /en/posts/book-reading-note2 301
35
- /en/posts/44f3f721.html /en/posts/book-reading-note2 301
36
- /en/posts/4668cbbb /en/posts/amf 301
37
- /en/posts/4668cbbb.html /en/posts/amf 301
38
- /en/posts/49ca7bc7 /en/posts/absorption-measurement 301
39
- /en/posts/49ca7bc7.html /en/posts/absorption-measurement 301
40
- /en/posts/4cc6684d /en/posts/super-x-roadmap 301
41
- /en/posts/4cc6684d.html /en/posts/super-x-roadmap 301
42
- /en/posts/4df973c2 /en/notes/cousera机器学习基石第三周笔记-machine-learning-foundation-week-3-note-in-cousera 301
43
- /en/posts/4df973c2.html /en/notes/cousera机器学习基石第三周笔记-machine-learning-foundation-week-3-note-in-cousera 301
44
- /en/posts/4e596c51 /en/posts/agentic-ai-note 301
45
- /en/posts/4e596c51.html /en/posts/agentic-ai-note 301
46
- /en/posts/50bcdc38 /en/posts/pandas基础 301
47
- /en/posts/50bcdc38.html /en/posts/pandas基础 301
48
- /en/posts/56104174 /en/posts/keras-tuner 301
49
- /en/posts/56104174.html /en/posts/keras-tuner 301
50
- /en/posts/5ab69b8e /en/posts/book-reading-note-4 301
51
- /en/posts/5ab69b8e.html /en/posts/book-reading-note-4 301
52
- /en/posts/5ce7c25 /en/posts/matplotlib-xarray-h5py-conflict 301
53
- /en/posts/5ce7c25.html /en/posts/matplotlib-xarray-h5py-conflict 301
54
- /en/posts/5ea02cae /en/posts/detection-and-tracking-of-chattonella-spp-and-skeletonema-spp-blooms-using-geostationary-ocean-color-imager-goci-in-ariake-sea-japan 301
55
- /en/posts/5ea02cae.html /en/posts/detection-and-tracking-of-chattonella-spp-and-skeletonema-spp-blooms-using-geostationary-ocean-color-imager-goci-in-ariake-sea-japan 301
56
- /en/posts/5ffd7c75 /en/posts/clean-code-refactoring-and-test-driven-development 301
57
- /en/posts/5ffd7c75.html /en/posts/clean-code-refactoring-and-test-driven-development 301
58
- /en/posts/60b81fb7 /en/posts/wsl 301
59
- /en/posts/60b81fb7.html /en/posts/wsl 301
60
- /en/posts/62469dc9 /en/posts/probabilistic-method-in-machine-learning 301
61
- /en/posts/62469dc9.html /en/posts/probabilistic-method-in-machine-learning 301
62
- /en/posts/68e8e2be /en/posts/uv-properties-1 301
63
- /en/posts/68e8e2be.html /en/posts/uv-properties-1 301
64
- /en/posts/6d590b83 /en/posts/agent-coding-experience-and-future 301
65
- /en/posts/6d590b83.html /en/posts/agent-coding-experience-and-future 301
66
- /en/posts/715050f6 /en/posts/tdd 301
67
- /en/posts/715050f6.html /en/posts/tdd 301
68
- /en/posts/720e5580 /en/posts/python学术绘图 301
69
- /en/posts/720e5580.html /en/posts/python学术绘图 301
70
- /en/posts/72cf705 /en/posts/agentic-ai-note 301
71
- /en/posts/72cf705.html /en/posts/agentic-ai-note 301
72
- /en/posts/73362798 /en/posts/kotlin 301
73
- /en/posts/73362798.html /en/posts/kotlin 301
74
- /en/posts/750388a9 /en/posts/retrieving-using-uv-propoteis 301
75
- /en/posts/750388a9.html /en/posts/retrieving-using-uv-propoteis 301
76
- /en/posts/789fd60c /en/posts/how-i-understand-react-as-a-backend-developer 301
77
- /en/posts/789fd60c.html /en/posts/how-i-understand-react-as-a-backend-developer 301
78
- /en/posts/7c5b3027 /en/posts/awoc-kjwoc-online-2020-presentation 301
79
- /en/posts/7c5b3027.html /en/posts/awoc-kjwoc-online-2020-presentation 301
80
- /en/posts/7decea87 /en/posts/scipy-optimize 301
81
- /en/posts/7decea87.html /en/posts/scipy-optimize 301
82
- /en/posts/7f1ae6d2 /en/posts/java 301
83
- /en/posts/7f1ae6d2.html /en/posts/java 301
84
- /en/posts/7ff46c3b /en/posts/robust-fit 301
85
- /en/posts/7ff46c3b.html /en/posts/robust-fit 301
86
- /en/posts/84ea90f7 /en/posts/javascript 301
87
- /en/posts/84ea90f7.html /en/posts/javascript 301
88
- /en/posts/8636bca2 /en/posts/modis-l2-oc-batch-download 301
89
- /en/posts/8636bca2.html /en/posts/modis-l2-oc-batch-download 301
90
- /en/posts/8bb8e4ec /en/posts/mixture-density-network-2 301
91
- /en/posts/8bb8e4ec.html /en/posts/mixture-density-network-2 301
92
- /en/posts/8bf3d056 /en/posts/一个神奇的kotlin-springboot-docker启动bug 301
93
- /en/posts/8bf3d056.html /en/posts/一个神奇的kotlin-springboot-docker启动bug 301
94
- /en/posts/8f8ed91a /en/notes/two-pointers 301
95
- /en/posts/8f8ed91a.html /en/notes/two-pointers 301
96
- /en/posts/947599bf /en/posts/html-css 301
97
- /en/posts/947599bf.html /en/posts/html-css 301
98
- /en/posts/99c2b0bb /en/posts/the-optics-of-backscattering 301
99
- /en/posts/99c2b0bb.html /en/posts/the-optics-of-backscattering 301
100
- /en/posts/a31ba57b /en/posts/chla-retrieval 301
101
- /en/posts/a31ba57b.html /en/posts/chla-retrieval 301
102
- /en/posts/absorption-measurement.html /en/posts/absorption-measurement 301
103
- /en/posts/ad479b93 /en/posts/agent-coding-experience-and-future 301
104
- /en/posts/ad479b93.html /en/posts/agent-coding-experience-and-future 301
105
- /en/posts/adc0cb59 /en/posts/annotated-bibliography-2020-11-30-12-6 301
106
- /en/posts/adc0cb59.html /en/posts/annotated-bibliography-2020-11-30-12-6 301
107
- /en/posts/aec625cb /en/posts/evaluating-gpto1-preview-and-claude-3-5-sonnet 301
108
- /en/posts/aec625cb.html /en/posts/evaluating-gpto1-preview-and-claude-3-5-sonnet 301
109
- /en/posts/agent-coding-experience-and-future.html /en/posts/agent-coding-experience-and-future 301
110
- /en/posts/agentic-ai-note.html /en/posts/agentic-ai-note 301
111
- /en/posts/amf.html /en/posts/amf 301
112
- /en/posts/annotated-bibliography-2020-10-5-10-11.html /en/posts/annotated-bibliography-2020-10-5-10-11 301
113
- /en/posts/annotated-bibliography-2020-11-17-11-201.html /en/posts/annotated-bibliography-2020-11-17-11-201 301
114
- /en/posts/annotated-bibliography-2020-11-24-11-29.html /en/posts/annotated-bibliography-2020-11-24-11-29 301
115
- /en/posts/annotated-bibliography-2020-11-30-12-6.html /en/posts/annotated-bibliography-2020-11-30-12-6 301
116
- /en/posts/annotated-bibliography-2020-9-28-10-4.html /en/posts/annotated-bibliography-2020-9-28-10-4 301
117
- /en/posts/annotated-bibliography-2021-1-8-1-17.html /en/posts/annotated-bibliography-2021-1-8-1-17 301
118
- /en/posts/assert.html /en/posts/assert 301
119
- /en/posts/awoc-kjwoc-online-2020-presentation.html /en/posts/awoc-kjwoc-online-2020-presentation 301
120
- /en/posts/aws-inspector-mystery-cycle.html /en/posts/aws-inspector-mystery-cycle 301
121
- /en/posts/b1ef4fab /en/posts/assert 301
122
- /en/posts/b1ef4fab.html /en/posts/assert 301
123
- /en/posts/b6e8cccb /en/posts/mixture-density-network-3 301
124
- /en/posts/b6e8cccb.html /en/posts/mixture-density-network-3 301
125
- /en/posts/b8c59cfd /en/notes/recursive 301
126
- /en/posts/b8c59cfd.html /en/notes/recursive 301
127
- /en/posts/bc80cb40 /en/notes/cousera机器学习基石第一周笔记-machine-learning-foudation-nweek-1-note-in-cousera 301
128
- /en/posts/bc80cb40.html /en/notes/cousera机器学习基石第一周笔记-machine-learning-foudation-nweek-1-note-in-cousera 301
129
- /en/posts/bebb8f89 /en/posts/plot 301
130
- /en/posts/bebb8f89.html /en/posts/plot 301
131
- /en/posts/bf6c0df1 /en/posts/matplotlib-subplot 301
132
- /en/posts/bf6c0df1.html /en/posts/matplotlib-subplot 301
133
- /en/posts/book-reading-note-4.html /en/posts/book-reading-note-4 301
134
- /en/posts/book-reading-note.html /en/posts/book-reading-note 301
135
- /en/posts/book-reading-note2.html /en/posts/book-reading-note2 301
136
- /en/posts/book-reading-note3.html /en/posts/book-reading-note3 301
137
- /en/posts/c23e0e6e /en/posts/machine-learning-on-sever 301
138
- /en/posts/c23e0e6e.html /en/posts/machine-learning-on-sever 301
139
- /en/posts/c6b8edee /en/posts/cartopy 301
140
- /en/posts/c6b8edee.html /en/posts/cartopy 301
141
- /en/posts/c7f63b06 /en/notes/cousera机器学习基石第四周笔记-machine-learning-foundation-week-4-note-in-cousera 301
142
- /en/posts/c7f63b06.html /en/notes/cousera机器学习基石第四周笔记-machine-learning-foundation-week-4-note-in-cousera 301
143
- /en/posts/c958af43 /en/posts/jupyer-lab 301
144
- /en/posts/c958af43.html /en/posts/jupyer-lab 301
145
- /en/posts/ca51402d /en/posts/aws-inspector-mystery-cycle 301
146
- /en/posts/ca51402d.html /en/posts/aws-inspector-mystery-cycle 301
147
- /en/posts/carbon-flux-by-bai.html /en/posts/carbon-flux-by-bai 301
148
- /en/posts/cartopy.html /en/posts/cartopy 301
149
- /en/posts/cb8288cd /en/posts/agent-coding-experience-and-future 301
150
- /en/posts/cb8288cd.html /en/posts/agent-coding-experience-and-future 301
151
- /en/posts/cd046c9b /en/posts/publishable-plot-using-python-r 301
152
- /en/posts/cd046c9b.html /en/posts/publishable-plot-using-python-r 301
153
- /en/posts/chla-retrieval.html /en/posts/chla-retrieval 301
154
- /en/posts/clean-code-refactoring-and-test-driven-development.html /en/posts/clean-code-refactoring-and-test-driven-development 301
155
- /en/posts/cli.html /en/posts/cli 301
156
- /en/posts/d1210079 /en/posts/annotated-bibliography-2020-11-24-11-29 301
157
- /en/posts/d1210079.html /en/posts/annotated-bibliography-2020-11-24-11-29 301
158
- /en/posts/d39dff82 /en/posts/lambda 301
159
- /en/posts/d39dff82.html /en/posts/lambda 301
160
- /en/posts/da4a7e8b /en/posts/pandas-cheat-sheet 301
161
- /en/posts/da4a7e8b.html /en/posts/pandas-cheat-sheet 301
162
- /en/posts/dbd66adf /en/posts/sql 301
163
- /en/posts/dbd66adf.html /en/posts/sql 301
164
- /en/posts/de5113b6 /en/posts/cli 301
165
- /en/posts/de5113b6.html /en/posts/cli 301
166
- /en/posts/detection-and-tracking-of-chattonella-spp-and-skeletonema-spp-blooms-using-geostationary-ocean-color-imager-goci-in-ariake-sea-japan.html /en/posts/detection-and-tracking-of-chattonella-spp-and-skeletonema-spp-blooms-using-geostationary-ocean-color-imager-goci-in-ariake-sea-japan 301
167
- /en/posts/e4bb9d98 /en/posts/annotated-bibliography-2020-9-28-10-4 301
168
- /en/posts/e4bb9d98.html /en/posts/annotated-bibliography-2020-9-28-10-4 301
169
- /en/posts/e7dbe30e /en/posts/my-core-agentic-coding-workflow-on-2025-12-8 301
170
- /en/posts/e7dbe30e.html /en/posts/my-core-agentic-coding-workflow-on-2025-12-8 301
171
- /en/posts/eaba55e /en/posts/how-to-follow-the-nearst-research-in-oceanography 301
172
- /en/posts/eaba55e.html /en/posts/how-to-follow-the-nearst-research-in-oceanography 301
173
- /en/posts/ed08fed2 /en/posts/hyperspectral-and-phytoplankton 301
174
- /en/posts/ed08fed2.html /en/posts/hyperspectral-and-phytoplankton 301
175
- /en/posts/eff06e8d /en/posts/ocean-color-environment-on-server 301
176
- /en/posts/eff06e8d.html /en/posts/ocean-color-environment-on-server 301
177
- /en/posts/esa-oceanic-carbon-from-space-2022.html /en/posts/esa-oceanic-carbon-from-space-2022 301
178
- /en/posts/evaluating-gpto1-preview-and-claude-3-5-sonnet.html /en/posts/evaluating-gpto1-preview-and-claude-3-5-sonnet 301
179
- /en/posts/f36cc8b7 /en/posts/obsidian-daily-record-system 301
180
- /en/posts/f36cc8b7.html /en/posts/obsidian-daily-record-system 301
181
- /en/posts/f4af350 /en/posts/kriging 301
182
- /en/posts/f4af350.html /en/posts/kriging 301
183
- /en/posts/f5ee8139 /en/posts/qaa 301
184
- /en/posts/f5ee8139.html /en/posts/qaa 301
185
- /en/posts/fbd0b1b0 /en/posts/mixture-density-network 301
186
- /en/posts/fbd0b1b0.html /en/posts/mixture-density-network 301
187
- /en/posts/fc1cc4fb /en/notes/leetcode面试高频题分类刷题总结 301
188
- /en/posts/fc1cc4fb.html /en/notes/leetcode面试高频题分类刷题总结 301
189
- /en/posts/fd169b9d /en/posts/tensorflow 301
190
- /en/posts/fd169b9d.html /en/posts/tensorflow 301
191
- /en/posts/fee729e7 /en/posts/pytorch 301
192
- /en/posts/fee729e7.html /en/posts/pytorch 301
193
- /en/posts/ff413d6a /en/posts/annotated-bibliography-2021-1-8-1-17 301
194
- /en/posts/ff413d6a.html /en/posts/annotated-bibliography-2021-1-8-1-17 301
195
- /en/posts/how-i-understand-react-as-a-backend-developer.html /en/posts/how-i-understand-react-as-a-backend-developer 301
196
- /en/posts/how-to-follow-the-nearst-research-in-oceanography.html /en/posts/how-to-follow-the-nearst-research-in-oceanography 301
197
- /en/posts/html-css.html /en/posts/html-css 301
198
- /en/posts/hyperspectral-and-phytoplankton.html /en/posts/hyperspectral-and-phytoplankton 301
199
- /en/posts/java.html /en/posts/java 301
200
- /en/posts/javascript.html /en/posts/javascript 301
201
- /en/posts/jpgu-agu-joint-meeting-2020-poster.html /en/posts/jpgu-agu-joint-meeting-2020-poster 301
202
- /en/posts/jupyer-lab.html /en/posts/jupyer-lab 301
203
- /en/posts/keras-tuner.html /en/posts/keras-tuner 301
204
- /en/posts/kotlin.html /en/posts/kotlin 301
205
- /en/posts/kriging.html /en/posts/kriging 301
206
- /en/posts/lambda.html /en/posts/lambda 301
207
- /en/posts/lfs.html /en/posts/lfs 301
208
- /en/posts/machine-learning-on-sever.html /en/posts/machine-learning-on-sever 301
209
- /en/posts/matplotlib-subplot.html /en/posts/matplotlib-subplot 301
210
- /en/posts/matplotlib-xarray-h5py-conflict.html /en/posts/matplotlib-xarray-h5py-conflict 301
211
- /en/posts/mixture-density-network-2.html /en/posts/mixture-density-network-2 301
212
- /en/posts/mixture-density-network-3.html /en/posts/mixture-density-network-3 301
213
- /en/posts/mixture-density-network.html /en/posts/mixture-density-network 301
214
- /en/posts/modis-l2-oc-batch-download.html /en/posts/modis-l2-oc-batch-download 301
215
- /en/posts/my-core-agentic-coding-workflow-on-2025-12-8.html /en/posts/my-core-agentic-coding-workflow-on-2025-12-8 301
216
- /en/posts/np-ma-mask.html /en/posts/np-ma-mask 301
217
- /en/posts/obsidian-daily-record-system.html /en/posts/obsidian-daily-record-system 301
218
- /en/posts/ocean-color-environment-on-server.html /en/posts/ocean-color-environment-on-server 301
219
- /en/posts/pandas-cheat-sheet.html /en/posts/pandas-cheat-sheet 301
220
- /en/posts/pandas基础.html /en/posts/pandas基础 301
221
- /en/posts/plot.html /en/posts/plot 301
222
- /en/posts/probabilistic-method-in-machine-learning.html /en/posts/probabilistic-method-in-machine-learning 301
223
- /en/posts/publishable-plot-using-python-r.html /en/posts/publishable-plot-using-python-r 301
224
- /en/posts/python学术绘图.html /en/posts/python学术绘图 301
225
- /en/posts/pytorch.html /en/posts/pytorch 301
226
- /en/posts/qaa.html /en/posts/qaa 301
227
- /en/posts/retrieving-using-uv-propoteis.html /en/posts/retrieving-using-uv-propoteis 301
228
- /en/posts/robust-fit.html /en/posts/robust-fit 301
229
- /en/posts/scipy-optimize.html /en/posts/scipy-optimize 301
230
- /en/posts/sql.html /en/posts/sql 301
231
- /en/posts/super-x-roadmap.html /en/posts/super-x-roadmap 301
232
- /en/posts/tdd.html /en/posts/tdd 301
233
- /en/posts/tennary-plot.html /en/posts/tennary-plot 301
234
- /en/posts/tensorflow.html /en/posts/tensorflow 301
235
- /en/posts/the-optics-of-backscattering.html /en/posts/the-optics-of-backscattering 301
236
- /en/posts/uv-properties-1.html /en/posts/uv-properties-1 301
237
- /en/posts/wsl.html /en/posts/wsl 301
238
- /en/posts/一个神奇的kotlin-springboot-docker启动bug.html /en/posts/一个神奇的kotlin-springboot-docker启动bug 301
239
- /ja/notes/leetcode面试高频题分类刷题总结.html /ja/notes/leetcode面试高频题分类刷题总结 301
240
- /ja/notes/recursive.html /ja/notes/recursive 301
241
- /ja/notes/two-pointers.html /ja/notes/two-pointers 301
242
- /ja/posts/2b01b12c /ja/posts/tennary-plot 301
243
- /ja/posts/2b01b12c.html /ja/posts/tennary-plot 301
244
- /ja/posts/34c938fb /ja/posts/agentic-ai-note 301
245
- /ja/posts/34c938fb.html /ja/posts/agentic-ai-note 301
246
- /ja/posts/39e89397 /ja/posts/np-ma-mask 301
247
- /ja/posts/39e89397.html /ja/posts/np-ma-mask 301
248
- /ja/posts/442707f1 /ja/posts/lfs 301
249
- /ja/posts/442707f1.html /ja/posts/lfs 301
250
- /ja/posts/4668cbbb /ja/posts/amf 301
251
- /ja/posts/4668cbbb.html /ja/posts/amf 301
252
- /ja/posts/4cc6684d /ja/posts/super-x-roadmap 301
253
- /ja/posts/4cc6684d.html /ja/posts/super-x-roadmap 301
254
- /ja/posts/4e596c51 /ja/posts/agentic-ai-note 301
255
- /ja/posts/4e596c51.html /ja/posts/agentic-ai-note 301
256
- /ja/posts/50bcdc38 /ja/posts/pandas基础 301
257
- /ja/posts/50bcdc38.html /ja/posts/pandas基础 301
258
- /ja/posts/56104174 /ja/posts/keras-tuner 301
259
- /ja/posts/56104174.html /ja/posts/keras-tuner 301
260
- /ja/posts/5ce7c25 /ja/posts/matplotlib-xarray-h5py-conflict 301
261
- /ja/posts/5ce7c25.html /ja/posts/matplotlib-xarray-h5py-conflict 301
262
- /ja/posts/5ffd7c75 /ja/posts/clean-code-refactoring-and-test-driven-development 301
263
- /ja/posts/5ffd7c75.html /ja/posts/clean-code-refactoring-and-test-driven-development 301
264
- /ja/posts/60b81fb7 /ja/posts/wsl 301
265
- /ja/posts/60b81fb7.html /ja/posts/wsl 301
266
- /ja/posts/62469dc9 /ja/posts/probabilistic-method-in-machine-learning 301
267
- /ja/posts/62469dc9.html /ja/posts/probabilistic-method-in-machine-learning 301
268
- /ja/posts/6d590b83 /ja/posts/agent-coding-experience-and-future 301
269
- /ja/posts/6d590b83.html /ja/posts/agent-coding-experience-and-future 301
270
- /ja/posts/715050f6 /ja/posts/tdd 301
271
- /ja/posts/715050f6.html /ja/posts/tdd 301
272
- /ja/posts/720e5580 /ja/posts/python学术绘图 301
273
- /ja/posts/720e5580.html /ja/posts/python学术绘图 301
274
- /ja/posts/72cf705 /ja/posts/agentic-ai-note 301
275
- /ja/posts/72cf705.html /ja/posts/agentic-ai-note 301
276
- /ja/posts/73362798 /ja/posts/kotlin 301
277
- /ja/posts/73362798.html /ja/posts/kotlin 301
278
- /ja/posts/789fd60c /ja/posts/how-i-understand-react-as-a-backend-developer 301
279
- /ja/posts/789fd60c.html /ja/posts/how-i-understand-react-as-a-backend-developer 301
280
- /ja/posts/7decea87 /ja/posts/scipy-optimize 301
281
- /ja/posts/7decea87.html /ja/posts/scipy-optimize 301
282
- /ja/posts/7f1ae6d2 /ja/posts/java 301
283
- /ja/posts/7f1ae6d2.html /ja/posts/java 301
284
- /ja/posts/7ff46c3b /ja/posts/robust-fit 301
285
- /ja/posts/7ff46c3b.html /ja/posts/robust-fit 301
286
- /ja/posts/84ea90f7 /ja/posts/javascript 301
287
- /ja/posts/84ea90f7.html /ja/posts/javascript 301
288
- /ja/posts/8bb8e4ec /ja/posts/mixture-density-network-2 301
289
- /ja/posts/8bb8e4ec.html /ja/posts/mixture-density-network-2 301
290
- /ja/posts/8bf3d056 /ja/posts/一个神奇的kotlin-springboot-docker启动bug 301
291
- /ja/posts/8bf3d056.html /ja/posts/一个神奇的kotlin-springboot-docker启动bug 301
292
- /ja/posts/8f8ed91a /ja/notes/two-pointers 301
293
- /ja/posts/8f8ed91a.html /ja/notes/two-pointers 301
294
- /ja/posts/947599bf /ja/posts/html-css 301
295
- /ja/posts/947599bf.html /ja/posts/html-css 301
296
- /ja/posts/a31ba57b /ja/posts/chla-retrieval 301
297
- /ja/posts/a31ba57b.html /ja/posts/chla-retrieval 301
298
- /ja/posts/ad479b93 /ja/posts/agent-coding-experience-and-future 301
299
- /ja/posts/ad479b93.html /ja/posts/agent-coding-experience-and-future 301
300
- /ja/posts/agent-coding-experience-and-future.html /ja/posts/agent-coding-experience-and-future 301
301
- /ja/posts/agentic-ai-note.html /ja/posts/agentic-ai-note 301
302
- /ja/posts/amf.html /ja/posts/amf 301
303
- /ja/posts/assert.html /ja/posts/assert 301
304
- /ja/posts/aws-inspector-mystery-cycle.html /ja/posts/aws-inspector-mystery-cycle 301
305
- /ja/posts/b1ef4fab /ja/posts/assert 301
306
- /ja/posts/b1ef4fab.html /ja/posts/assert 301
307
- /ja/posts/b6e8cccb /ja/posts/mixture-density-network-3 301
308
- /ja/posts/b6e8cccb.html /ja/posts/mixture-density-network-3 301
309
- /ja/posts/b8c59cfd /ja/notes/recursive 301
310
- /ja/posts/b8c59cfd.html /ja/notes/recursive 301
311
- /ja/posts/bebb8f89 /ja/posts/plot 301
312
- /ja/posts/bebb8f89.html /ja/posts/plot 301
313
- /ja/posts/bf6c0df1 /ja/posts/matplotlib-subplot 301
314
- /ja/posts/bf6c0df1.html /ja/posts/matplotlib-subplot 301
315
- /ja/posts/c23e0e6e /ja/posts/machine-learning-on-sever 301
316
- /ja/posts/c23e0e6e.html /ja/posts/machine-learning-on-sever 301
317
- /ja/posts/c6b8edee /ja/posts/cartopy 301
318
- /ja/posts/c6b8edee.html /ja/posts/cartopy 301
319
- /ja/posts/c958af43 /ja/posts/jupyer-lab 301
320
- /ja/posts/c958af43.html /ja/posts/jupyer-lab 301
321
- /ja/posts/ca51402d /ja/posts/aws-inspector-mystery-cycle 301
322
- /ja/posts/ca51402d.html /ja/posts/aws-inspector-mystery-cycle 301
323
- /ja/posts/cartopy.html /ja/posts/cartopy 301
324
- /ja/posts/cb8288cd /ja/posts/agent-coding-experience-and-future 301
325
- /ja/posts/cb8288cd.html /ja/posts/agent-coding-experience-and-future 301
326
- /ja/posts/cd046c9b /ja/posts/publishable-plot-using-python-r 301
327
- /ja/posts/cd046c9b.html /ja/posts/publishable-plot-using-python-r 301
328
- /ja/posts/chla-retrieval.html /ja/posts/chla-retrieval 301
329
- /ja/posts/clean-code-refactoring-and-test-driven-development.html /ja/posts/clean-code-refactoring-and-test-driven-development 301
330
- /ja/posts/cli.html /ja/posts/cli 301
331
- /ja/posts/d39dff82 /ja/posts/lambda 301
332
- /ja/posts/d39dff82.html /ja/posts/lambda 301
333
- /ja/posts/da4a7e8b /ja/posts/pandas-cheat-sheet 301
334
- /ja/posts/da4a7e8b.html /ja/posts/pandas-cheat-sheet 301
335
- /ja/posts/dbd66adf /ja/posts/sql 301
336
- /ja/posts/dbd66adf.html /ja/posts/sql 301
337
- /ja/posts/de5113b6 /ja/posts/cli 301
338
- /ja/posts/de5113b6.html /ja/posts/cli 301
339
- /ja/posts/e7dbe30e /ja/posts/my-core-agentic-coding-workflow-on-2025-12-8 301
340
- /ja/posts/e7dbe30e.html /ja/posts/my-core-agentic-coding-workflow-on-2025-12-8 301
341
- /ja/posts/eff06e8d /ja/posts/ocean-color-environment-on-server 301
342
- /ja/posts/eff06e8d.html /ja/posts/ocean-color-environment-on-server 301
343
- /ja/posts/f36cc8b7 /ja/posts/obsidian-daily-record-system 301
344
- /ja/posts/f36cc8b7.html /ja/posts/obsidian-daily-record-system 301
345
- /ja/posts/fbd0b1b0 /ja/posts/mixture-density-network 301
346
- /ja/posts/fbd0b1b0.html /ja/posts/mixture-density-network 301
347
- /ja/posts/fc1cc4fb /ja/notes/leetcode面试高频题分类刷题总结 301
348
- /ja/posts/fc1cc4fb.html /ja/notes/leetcode面试高频题分类刷题总结 301
349
- /ja/posts/fd169b9d /ja/posts/tensorflow 301
350
- /ja/posts/fd169b9d.html /ja/posts/tensorflow 301
351
- /ja/posts/fee729e7 /ja/posts/pytorch 301
352
- /ja/posts/fee729e7.html /ja/posts/pytorch 301
353
- /ja/posts/how-i-understand-react-as-a-backend-developer.html /ja/posts/how-i-understand-react-as-a-backend-developer 301
354
- /ja/posts/html-css.html /ja/posts/html-css 301
355
- /ja/posts/java.html /ja/posts/java 301
356
- /ja/posts/javascript.html /ja/posts/javascript 301
357
- /ja/posts/jupyer-lab.html /ja/posts/jupyer-lab 301
358
- /ja/posts/keras-tuner.html /ja/posts/keras-tuner 301
359
- /ja/posts/kotlin.html /ja/posts/kotlin 301
360
- /ja/posts/lambda.html /ja/posts/lambda 301
361
- /ja/posts/lfs.html /ja/posts/lfs 301
362
- /ja/posts/machine-learning-on-sever.html /ja/posts/machine-learning-on-sever 301
363
- /ja/posts/matplotlib-subplot.html /ja/posts/matplotlib-subplot 301
364
- /ja/posts/matplotlib-xarray-h5py-conflict.html /ja/posts/matplotlib-xarray-h5py-conflict 301
365
- /ja/posts/mixture-density-network-2.html /ja/posts/mixture-density-network-2 301
366
- /ja/posts/mixture-density-network-3.html /ja/posts/mixture-density-network-3 301
367
- /ja/posts/mixture-density-network.html /ja/posts/mixture-density-network 301
368
- /ja/posts/my-core-agentic-coding-workflow-on-2025-12-8.html /ja/posts/my-core-agentic-coding-workflow-on-2025-12-8 301
369
- /ja/posts/np-ma-mask.html /ja/posts/np-ma-mask 301
370
- /ja/posts/obsidian-daily-record-system.html /ja/posts/obsidian-daily-record-system 301
371
- /ja/posts/ocean-color-environment-on-server.html /ja/posts/ocean-color-environment-on-server 301
372
- /ja/posts/pandas-cheat-sheet.html /ja/posts/pandas-cheat-sheet 301
373
- /ja/posts/pandas基础.html /ja/posts/pandas基础 301
374
- /ja/posts/plot.html /ja/posts/plot 301
375
- /ja/posts/probabilistic-method-in-machine-learning.html /ja/posts/probabilistic-method-in-machine-learning 301
376
- /ja/posts/publishable-plot-using-python-r.html /ja/posts/publishable-plot-using-python-r 301
377
- /ja/posts/python学术绘图.html /ja/posts/python学术绘图 301
378
- /ja/posts/pytorch.html /ja/posts/pytorch 301
379
- /ja/posts/robust-fit.html /ja/posts/robust-fit 301
380
- /ja/posts/scipy-optimize.html /ja/posts/scipy-optimize 301
381
- /ja/posts/sql.html /ja/posts/sql 301
382
- /ja/posts/super-x-roadmap.html /ja/posts/super-x-roadmap 301
383
- /ja/posts/tdd.html /ja/posts/tdd 301
384
- /ja/posts/tennary-plot.html /ja/posts/tennary-plot 301
385
- /ja/posts/tensorflow.html /ja/posts/tensorflow 301
386
- /ja/posts/wsl.html /ja/posts/wsl 301
387
- /ja/posts/一个神奇的kotlin-springboot-docker启动bug.html /ja/posts/一个神奇的kotlin-springboot-docker启动bug 301
388
- /journals/2020.html /journals/2020 301
389
- /journals/2021年终总结.html /journals/2021年终总结 301
390
- /journals/it-is-ok-to-quit-your-ph-d.html /journals/it-is-ok-to-quit-your-ph-d 301
391
- /journals/my-grind.html /journals/my-grind 301
392
- /journals/passion.html /journals/passion 301
393
- /journals/peer-pressur-and-experience.html /journals/peer-pressur-and-experience 301
394
- /journals/what-i-really-like.html /journals/what-i-really-like 301
395
- /journals/ギターと孤独と蒼い惑星.html /journals/ギターと孤独と蒼い惑星 301
396
- /journals/上班原来真的好累啊.html /journals/上班原来真的好累啊 301
397
- /journals/二周目.html /journals/二周目 301
398
- /journals/人生は最高の暇つぶし.html /journals/人生は最高の暇つぶし 301
399
- /journals/人生实验室.html /journals/人生实验室 301
400
- /journals/北京某遥感公司.html /journals/北京某遥感公司 301
401
- /journals/北京某遥感公司2.html /journals/北京某遥感公司2 301
402
- /journals/君の名は希望.html /journals/君の名は希望 301
403
- /journals/在我成为井井有条的大人之前.html /journals/在我成为井井有条的大人之前 301
404
- /journals/我为什么喜欢做科研.html /journals/我为什么喜欢做科研 301
405
- /journals/我对国内水色遥感的看法.html /journals/我对国内水色遥感的看法 301
406
- /journals/新的春天.html /journals/新的春天 301
407
- /journals/未选择的路.html /journals/未选择的路 301
408
- /journals/本科总结-1.html /journals/本科总结-1 301
409
- /journals/樱花和桂花.html /journals/樱花和桂花 301
410
- /journals/清华苏州环境创新研究员面试经历.html /journals/清华苏州环境创新研究员面试经历 301
411
- /journals/游戏人生.html /journals/游戏人生 301
412
- /journals/湖州某遥感公司.html /journals/湖州某遥感公司 301
413
- /journals/硕士一年.html /journals/硕士一年 301
414
- /journals/秋招进程记录.html /journals/秋招进程记录 301
415
- /journals/精致的利己主义者.html /journals/精致的利己主义者 301
416
- /journals/苏州某小公司实习生.html /journals/苏州某小公司实习生 301
417
- /notes/leetcode面试高频题分类刷题总结.html /notes/leetcode面试高频题分类刷题总结 301
418
- /notes/recursive.html /notes/recursive 301
419
- /notes/two-pointers.html /notes/two-pointers 301
420
- /notes/日本語ノート-1.html /notes/日本語ノート-1 301
421
- /notes/易混カタカナ.html /notes/易混カタカナ 301
422
- /posts/149c7e00 /en/posts/carbon-flux-by-bai 301
423
- /posts/149c7e00.html /en/posts/carbon-flux-by-bai 301
424
- /posts/17683e80 /posts/广义加性模型-1 301
425
- /posts/17683e80.html /posts/广义加性模型-1 301
426
- /posts/179aa5a3 /en/posts/annotated-bibliography-2020-11-17-11-201 301
427
- /posts/179aa5a3.html /en/posts/annotated-bibliography-2020-11-17-11-201 301
428
- /posts/182a5f48 /posts/seadas-ocssw及大气矫正-2022年使用指北 301
429
- /posts/182a5f48.html /posts/seadas-ocssw及大气矫正-2022年使用指北 301
430
- /posts/2021-10-13-goci-ii-data-is-available-now.html /posts/2021-10-13-goci-ii-data-is-available-now 301
431
- /posts/23b76a18 /posts/atmospheric-correction-by-he 301
432
- /posts/23b76a18.html /posts/atmospheric-correction-by-he 301
433
- /posts/26d5d570 /en/posts/jpgu-agu-joint-meeting-2020-poster 301
434
- /posts/26d5d570.html /en/posts/jpgu-agu-joint-meeting-2020-poster 301
435
- /posts/27dde70e /posts/日本留学申请经验贴-一 301
436
- /posts/27dde70e.html /posts/日本留学申请经验贴-一 301
437
- /posts/2adc6f01 /en/posts/book-reading-note 301
438
- /posts/2adc6f01.html /en/posts/book-reading-note 301
439
- /posts/2b01b12c /posts/tennary-plot 301
440
- /posts/2b01b12c.html /posts/tennary-plot 301
441
- /posts/2c9001a2 /en/notes/机器学习基石第二周笔记machine-learning-foundation-week-2-note 301
442
- /posts/2c9001a2.html /en/notes/机器学习基石第二周笔记machine-learning-foundation-week-2-note 301
443
- /posts/2cb8508a /journals/秋招进程记录 301
444
- /posts/2cb8508a.html /journals/秋招进程记录 301
445
- /posts/307feb93 /posts/清华大学-研究生学位论文的选题方法-讲座实录 301
446
- /posts/307feb93.html /posts/清华大学-研究生学位论文的选题方法-讲座实录 301
447
- /posts/3198f1de /posts/stay-alive-at-academic 301
448
- /posts/3198f1de.html /posts/stay-alive-at-academic 301
449
- /posts/31f16e8d /en/posts/esa-oceanic-carbon-from-space-2022 301
450
- /posts/31f16e8d.html /en/posts/esa-oceanic-carbon-from-space-2022 301
451
- /posts/33f4c7b7 /en/posts/book-reading-note3 301
452
- /posts/33f4c7b7.html /en/posts/book-reading-note3 301
453
- /posts/34c938fb /posts/agentic-ai-note 301
454
- /posts/34c938fb.html /posts/agentic-ai-note 301
455
- /posts/3593fd75 /journals/北京某遥感公司 301
456
- /posts/3593fd75.html /journals/北京某遥感公司 301
457
- /posts/361a6d0d /posts/博客定制优化 301
458
- /posts/361a6d0d.html /posts/博客定制优化 301
459
- /posts/39e89397 /posts/np-ma-mask 301
460
- /posts/39e89397.html /posts/np-ma-mask 301
461
- /posts/3a8fa843 /journals/北京某遥感公司2 301
462
- /posts/3a8fa843.html /journals/北京某遥感公司2 301
463
- /posts/3aa0ed1a /posts/material-for-ocean-color 301
464
- /posts/3aa0ed1a.html /posts/material-for-ocean-color 301
465
- /posts/3d8d27aa /en/posts/annotated-bibliography-2020-10-5-10-11 301
466
- /posts/3d8d27aa.html /en/posts/annotated-bibliography-2020-10-5-10-11 301
467
- /posts/3da0aceb /posts/note-in-writing-and-presentation 301
468
- /posts/3da0aceb.html /posts/note-in-writing-and-presentation 301
469
- /posts/3fc48bd7 /posts/游戏策划笔试整理 301
470
- /posts/3fc48bd7.html /posts/游戏策划笔试整理 301
471
- /posts/40e83800 /posts/日本留学申请-四-经管类申请 301
472
- /posts/40e83800.html /posts/日本留学申请-四-经管类申请 301
473
- /posts/4321dd6d /posts/在日本买手机和手机卡 301
474
- /posts/4321dd6d.html /posts/在日本买手机和手机卡 301
475
- /posts/442707f1 /posts/lfs 301
476
- /posts/442707f1.html /posts/lfs 301
477
- /posts/44f3f721 /en/posts/book-reading-note2 301
478
- /posts/44f3f721.html /en/posts/book-reading-note2 301
479
- /posts/46164445 /posts/sgli-user-tool 301
480
- /posts/46164445.html /posts/sgli-user-tool 301
481
- /posts/4668cbbb /posts/amf 301
482
- /posts/4668cbbb.html /posts/amf 301
483
- /posts/490b1360 /journals/我为什么喜欢做科研 301
484
- /posts/490b1360.html /journals/我为什么喜欢做科研 301
485
- /posts/49ca7bc7 /en/posts/absorption-measurement 301
486
- /posts/49ca7bc7.html /en/posts/absorption-measurement 301
487
- /posts/49d62bf8 /journals/passion 301
488
- /posts/49d62bf8.html /journals/passion 301
489
- /posts/49e48baa /posts/如何在国内拥有一个能够接受境外短信的手机号 301
490
- /posts/49e48baa.html /posts/如何在国内拥有一个能够接受境外短信的手机号 301
491
- /posts/4c54cf6c /posts/write-thesis-with-markdown 301
492
- /posts/4c54cf6c.html /posts/write-thesis-with-markdown 301
493
- /posts/4cc6684d /posts/super-x-roadmap 301
494
- /posts/4cc6684d.html /posts/super-x-roadmap 301
495
- /posts/4ce7830b /posts/文献管理 301
496
- /posts/4ce7830b.html /posts/文献管理 301
497
- /posts/4df973c2 /en/notes/cousera机器学习基石第三周笔记-machine-learning-foundation-week-3-note-in-cousera 301
498
- /posts/4df973c2.html /en/notes/cousera机器学习基石第三周笔记-machine-learning-foundation-week-3-note-in-cousera 301
499
- /posts/4dfc84d2 /journals/my-grind 301
500
- /posts/4dfc84d2.html /journals/my-grind 301
501
- /posts/4e596c51 /posts/agentic-ai-note 301
502
- /posts/4e596c51.html /posts/agentic-ai-note 301
503
- /posts/50bcdc38 /posts/pandas基础 301
504
- /posts/50bcdc38.html /posts/pandas基础 301
505
- /posts/514b9dac /posts/py6s 301
506
- /posts/514b9dac.html /posts/py6s 301
507
- /posts/56104174 /posts/keras-tuner 301
508
- /posts/56104174.html /posts/keras-tuner 301
509
- /posts/577f7527 /journals/硕士一年 301
510
- /posts/577f7527.html /journals/硕士一年 301
511
- /posts/5ab69b8e /en/posts/book-reading-note-4 301
512
- /posts/5ab69b8e.html /en/posts/book-reading-note-4 301
513
- /posts/5b03337d /journals/what-i-really-like 301
514
- /posts/5b03337d.html /journals/what-i-really-like 301
515
- /posts/5ce7c25 /posts/matplotlib-xarray-h5py-conflict 301
516
- /posts/5ce7c25.html /posts/matplotlib-xarray-h5py-conflict 301
517
- /posts/5ea02cae /en/posts/detection-and-tracking-of-chattonella-spp-and-skeletonema-spp-blooms-using-geostationary-ocean-color-imager-goci-in-ariake-sea-japan 301
518
- /posts/5ea02cae.html /en/posts/detection-and-tracking-of-chattonella-spp-and-skeletonema-spp-blooms-using-geostationary-ocean-color-imager-goci-in-ariake-sea-japan 301
519
- /posts/5ffd7c75 /posts/clean-code-refactoring-and-test-driven-development 301
520
- /posts/5ffd7c75.html /posts/clean-code-refactoring-and-test-driven-development 301
521
- /posts/60b81fb7 /posts/wsl 301
522
- /posts/60b81fb7.html /posts/wsl 301
523
- /posts/6153578 /posts/在日本买游戏本 301
524
- /posts/6153578.html /posts/在日本买游戏本 301
525
- /posts/61b56df3 /posts/2021-10-13-goci-ii-data-is-available-now 301
526
- /posts/61b56df3.html /posts/2021-10-13-goci-ii-data-is-available-now 301
527
- /posts/62469dc9 /posts/probabilistic-method-in-machine-learning 301
528
- /posts/62469dc9.html /posts/probabilistic-method-in-machine-learning 301
529
- /posts/661d51c5 /journals/人生は最高の暇つぶし 301
530
- /posts/661d51c5.html /journals/人生は最高の暇つぶし 301
531
- /posts/68e8e2be /en/posts/uv-properties-1 301
532
- /posts/68e8e2be.html /en/posts/uv-properties-1 301
533
- /posts/696b3f33 /posts/water-classification 301
534
- /posts/696b3f33.html /posts/water-classification 301
535
- /posts/6c4d8823 /posts/没有大气校正和实测数据怎么搞水色 301
536
- /posts/6c4d8823.html /posts/没有大气校正和实测数据怎么搞水色 301
537
- /posts/6d590b83 /posts/agent-coding-experience-and-future 301
538
- /posts/6d590b83.html /posts/agent-coding-experience-and-future 301
539
- /posts/6ef15720 /journals/新的春天 301
540
- /posts/6ef15720.html /journals/新的春天 301
541
- /posts/6fbb792 /journals/樱花和桂花 301
542
- /posts/6fbb792.html /journals/樱花和桂花 301
543
- /posts/6fe52848 /journals/游戏人生 301
544
- /posts/6fe52848.html /journals/游戏人生 301
545
- /posts/6ff151e3 /posts/狼总访谈 301
546
- /posts/6ff151e3.html /posts/狼总访谈 301
547
- /posts/715050f6 /posts/tdd 301
548
- /posts/715050f6.html /posts/tdd 301
549
- /posts/720e5580 /posts/python学术绘图 301
550
- /posts/720e5580.html /posts/python学术绘图 301
551
- /posts/722bb233 /journals/it-is-ok-to-quit-your-ph-d 301
552
- /posts/722bb233.html /journals/it-is-ok-to-quit-your-ph-d 301
553
- /posts/726664aa /journals/本科总结-1 301
554
- /posts/726664aa.html /journals/本科总结-1 301
555
- /posts/72cf705 /posts/agentic-ai-note 301
556
- /posts/72cf705.html /posts/agentic-ai-note 301
557
- /posts/73362798 /posts/kotlin 301
558
- /posts/73362798.html /posts/kotlin 301
559
- /posts/750388a9 /en/posts/retrieving-using-uv-propoteis 301
560
- /posts/750388a9.html /en/posts/retrieving-using-uv-propoteis 301
561
- /posts/751458a5 /posts/经验贴-三-申请准备及流程 301
562
- /posts/751458a5.html /posts/经验贴-三-申请准备及流程 301
563
- /posts/78604782 /posts/particle-backscattering 301
564
- /posts/78604782.html /posts/particle-backscattering 301
565
- /posts/789fd60c /posts/how-i-understand-react-as-a-backend-developer 301
566
- /posts/789fd60c.html /posts/how-i-understand-react-as-a-backend-developer 301
567
- /posts/7c5b3027 /en/posts/awoc-kjwoc-online-2020-presentation 301
568
- /posts/7c5b3027.html /en/posts/awoc-kjwoc-online-2020-presentation 301
569
- /posts/7decea87 /posts/scipy-optimize 301
570
- /posts/7decea87.html /posts/scipy-optimize 301
571
- /posts/7f1ae6d2 /posts/java 301
572
- /posts/7f1ae6d2.html /posts/java 301
573
- /posts/7f4ddd0d /journals/peer-pressur-and-experience 301
574
- /posts/7f4ddd0d.html /journals/peer-pressur-and-experience 301
575
- /posts/7ff46c3b /posts/robust-fit 301
576
- /posts/7ff46c3b.html /posts/robust-fit 301
577
- /posts/84ea90f7 /posts/javascript 301
578
- /posts/84ea90f7.html /posts/javascript 301
579
- /posts/85253d2a /journals/苏州某小公司实习生 301
580
- /posts/85253d2a.html /journals/苏州某小公司实习生 301
581
- /posts/8636bca2 /en/posts/modis-l2-oc-batch-download 301
582
- /posts/8636bca2.html /en/posts/modis-l2-oc-batch-download 301
583
- /posts/8aa48f64 /posts/文凭社会 301
584
- /posts/8aa48f64.html /posts/文凭社会 301
585
- /posts/8abcc3ae /journals/未选择的路 301
586
- /posts/8abcc3ae.html /journals/未选择的路 301
587
- /posts/8bb8e4ec /posts/mixture-density-network-2 301
588
- /posts/8bb8e4ec.html /posts/mixture-density-network-2 301
589
- /posts/8bf3d056 /posts/一个神奇的kotlin-springboot-docker启动bug 301
590
- /posts/8bf3d056.html /posts/一个神奇的kotlin-springboot-docker启动bug 301
591
- /posts/8c33e681 /journals/君の名は希望 301
592
- /posts/8c33e681.html /journals/君の名は希望 301
593
- /posts/8cacdaad /journals/上班原来真的好累啊 301
594
- /posts/8cacdaad.html /journals/上班原来真的好累啊 301
595
- /posts/8f8ed91a /notes/two-pointers 301
596
- /posts/8f8ed91a.html /notes/two-pointers 301
597
- /posts/947599bf /posts/html-css 301
598
- /posts/947599bf.html /posts/html-css 301
599
- /posts/94a46e7b /journals/2020 301
600
- /posts/94a46e7b.html /journals/2020 301
601
- /posts/99c2b0bb /en/posts/the-optics-of-backscattering 301
602
- /posts/99c2b0bb.html /en/posts/the-optics-of-backscattering 301
603
- /posts/a23e5172 /journals/2021年终总结 301
604
- /posts/a23e5172.html /journals/2021年终总结 301
605
- /posts/a31ba57b /posts/chla-retrieval 301
606
- /posts/a31ba57b.html /posts/chla-retrieval 301
607
- /posts/a41520c0 /journals/二周目 301
608
- /posts/a41520c0.html /journals/二周目 301
609
- /posts/a451b089 /posts/cmds-summer-course-day1 301
610
- /posts/a451b089.html /posts/cmds-summer-course-day1 301
611
- /posts/a5da9b38 /journals/我对国内水色遥感的看法 301
612
- /posts/a5da9b38.html /journals/我对国内水色遥感的看法 301
613
- /posts/aaf90768 /posts/博客更换主题-子页面设置及乱码解决 301
614
- /posts/aaf90768.html /posts/博客更换主题-子页面设置及乱码解决 301
615
- /posts/ad479b93 /posts/agent-coding-experience-and-future 301
616
- /posts/ad479b93.html /posts/agent-coding-experience-and-future 301
617
- /posts/adc0cb59 /en/posts/annotated-bibliography-2020-11-30-12-6 301
618
- /posts/adc0cb59.html /en/posts/annotated-bibliography-2020-11-30-12-6 301
619
- /posts/aec625cb /en/posts/evaluating-gpto1-preview-and-claude-3-5-sonnet 301
620
- /posts/aec625cb.html /en/posts/evaluating-gpto1-preview-and-claude-3-5-sonnet 301
621
- /posts/agent-coding-experience-and-future.html /posts/agent-coding-experience-and-future 301
622
- /posts/agentic-ai-note.html /posts/agentic-ai-note 301
623
- /posts/amf.html /posts/amf 301
624
- /posts/assert.html /posts/assert 301
625
- /posts/atmospheric-correction-by-he.html /posts/atmospheric-correction-by-he 301
626
- /posts/aws-inspector-mystery-cycle.html /posts/aws-inspector-mystery-cycle 301
627
- /posts/b1322f4c /posts/游戏策划面试总结 301
628
- /posts/b1322f4c.html /posts/游戏策划面试总结 301
629
- /posts/b1ef4fab /posts/assert 301
630
- /posts/b1ef4fab.html /posts/assert 301
631
- /posts/b1f5683b /posts/hello-world 301
632
- /posts/b1f5683b.html /posts/hello-world 301
633
- /posts/b25cb4c7 /journals/ギターと孤独と蒼い惑星 301
634
- /posts/b25cb4c7.html /journals/ギターと孤独と蒼い惑星 301
635
- /posts/b30efee3 /notes/易混カタカナ 301
636
- /posts/b30efee3.html /notes/易混カタカナ 301
637
- /posts/b5654816 /journals/精致的利己主义者 301
638
- /posts/b5654816.html /journals/精致的利己主义者 301
639
- /posts/b58cbef5 /posts/obsidian 301
640
- /posts/b58cbef5.html /posts/obsidian 301
641
- /posts/b6e8cccb /posts/mixture-density-network-3 301
642
- /posts/b6e8cccb.html /posts/mixture-density-network-3 301
643
- /posts/b8c59cfd /notes/recursive 301
644
- /posts/b8c59cfd.html /notes/recursive 301
645
- /posts/bc80cb40 /en/notes/cousera机器学习基石第一周笔记-machine-learning-foudation-nweek-1-note-in-cousera 301
646
- /posts/bc80cb40.html /en/notes/cousera机器学习基石第一周笔记-machine-learning-foudation-nweek-1-note-in-cousera 301
647
- /posts/bc9381 /posts/某公司从零自学过笔试 301
648
- /posts/bc9381.html /posts/某公司从零自学过笔试 301
649
- /posts/bcb6c0dc /journals/清华苏州环境创新研究员面试经历 301
650
- /posts/bcb6c0dc.html /journals/清华苏州环境创新研究员面试经历 301
651
- /posts/bd7e58b0 /posts/data-fusion-series-note 301
652
- /posts/bd7e58b0.html /posts/data-fusion-series-note 301
653
- /posts/bebb8f89 /posts/plot 301
654
- /posts/bebb8f89.html /posts/plot 301
655
- /posts/bf6c0df1 /posts/matplotlib-subplot 301
656
- /posts/bf6c0df1.html /posts/matplotlib-subplot 301
657
- /posts/c07919ba /notes/日本語ノート-1 301
658
- /posts/c07919ba.html /notes/日本語ノート-1 301
659
- /posts/c17fab82 /journals/人生实验室 301
660
- /posts/c17fab82.html /journals/人生实验室 301
661
- /posts/c23e0e6e /posts/machine-learning-on-sever 301
662
- /posts/c23e0e6e.html /posts/machine-learning-on-sever 301
663
- /posts/c38ba18c /journals/湖州某遥感公司 301
664
- /posts/c38ba18c.html /journals/湖州某遥感公司 301
665
- /posts/c6b8edee /posts/cartopy 301
666
- /posts/c6b8edee.html /posts/cartopy 301
667
- /posts/c7945378 /posts/经验贴-二-日日本留学制度介绍 301
668
- /posts/c7945378.html /posts/经验贴-二-日日本留学制度介绍 301
669
- /posts/c7f63b06 /en/notes/cousera机器学习基石第四周笔记-machine-learning-foundation-week-4-note-in-cousera 301
670
- /posts/c7f63b06.html /en/notes/cousera机器学习基石第四周笔记-machine-learning-foundation-week-4-note-in-cousera 301
671
- /posts/c958af43 /posts/jupyer-lab 301
672
- /posts/c958af43.html /posts/jupyer-lab 301
673
- /posts/ca51402d /posts/aws-inspector-mystery-cycle 301
674
- /posts/ca51402d.html /posts/aws-inspector-mystery-cycle 301
675
- /posts/cartopy.html /posts/cartopy 301
676
- /posts/cb8288cd /posts/agent-coding-experience-and-future 301
677
- /posts/cb8288cd.html /posts/agent-coding-experience-and-future 301
678
- /posts/cd046c9b /posts/publishable-plot-using-python-r 301
679
- /posts/cd046c9b.html /posts/publishable-plot-using-python-r 301
680
- /posts/ce08f3a2 /posts/modis水色数据处理教程 301
681
- /posts/ce08f3a2.html /posts/modis水色数据处理教程 301
682
- /posts/cfa4e4d8 /posts/国内网络问题 301
683
- /posts/cfa4e4d8.html /posts/国内网络问题 301
684
- /posts/chla-retrieval.html /posts/chla-retrieval 301
685
- /posts/clean-code-refactoring-and-test-driven-development.html /posts/clean-code-refactoring-and-test-driven-development 301
686
- /posts/cli.html /posts/cli 301
687
- /posts/cmds-summer-course-day1.html /posts/cmds-summer-course-day1 301
688
- /posts/d040ebe8 /journals/在我成为井井有条的大人之前 301
689
- /posts/d040ebe8.html /journals/在我成为井井有条的大人之前 301
690
- /posts/d1210079 /en/posts/annotated-bibliography-2020-11-24-11-29 301
691
- /posts/d1210079.html /en/posts/annotated-bibliography-2020-11-24-11-29 301
692
- /posts/d39dff82 /posts/lambda 301
693
- /posts/d39dff82.html /posts/lambda 301
694
- /posts/d464ecc8 /posts/fy4a 301
695
- /posts/d464ecc8.html /posts/fy4a 301
696
- /posts/d7f3beca /posts/树莓派nas 301
697
- /posts/d7f3beca.html /posts/树莓派nas 301
698
- /posts/da4a7e8b /posts/pandas-cheat-sheet 301
699
- /posts/da4a7e8b.html /posts/pandas-cheat-sheet 301
700
- /posts/da4d42a2 /posts/ml-foundation-week-6 301
701
- /posts/da4d42a2.html /posts/ml-foundation-week-6 301
702
- /posts/data-fusion-series-note.html /posts/data-fusion-series-note 301
703
- /posts/dbd66adf /posts/sql 301
704
- /posts/dbd66adf.html /posts/sql 301
705
- /posts/de5113b6 /posts/cli 301
706
- /posts/de5113b6.html /posts/cli 301
707
- /posts/e45539ea /posts/two-r2 301
708
- /posts/e45539ea.html /posts/two-r2 301
709
- /posts/e4bb9d98 /en/posts/annotated-bibliography-2020-9-28-10-4 301
710
- /posts/e4bb9d98.html /en/posts/annotated-bibliography-2020-9-28-10-4 301
711
- /posts/e7dbe30e /posts/my-core-agentic-coding-workflow-on-2025-12-8 301
712
- /posts/e7dbe30e.html /posts/my-core-agentic-coding-workflow-on-2025-12-8 301
713
- /posts/eaba55e /en/posts/how-to-follow-the-nearst-research-in-oceanography 301
714
- /posts/eaba55e.html /en/posts/how-to-follow-the-nearst-research-in-oceanography 301
715
- /posts/ed08fed2 /en/posts/hyperspectral-and-phytoplankton 301
716
- /posts/ed08fed2.html /en/posts/hyperspectral-and-phytoplankton 301
717
- /posts/eff06e8d /posts/ocean-color-environment-on-server 301
718
- /posts/eff06e8d.html /posts/ocean-color-environment-on-server 301
719
- /posts/f08904cf /posts/gdal 301
720
- /posts/f08904cf.html /posts/gdal 301
721
- /posts/f157bdd2 /posts/ocean-color-data-download-script 301
722
- /posts/f157bdd2.html /posts/ocean-color-data-download-script 301
723
- /posts/f36cc8b7 /posts/obsidian-daily-record-system 301
724
- /posts/f36cc8b7.html /posts/obsidian-daily-record-system 301
725
- /posts/f43786f7 /posts/怎么写研究计划书 301
726
- /posts/f43786f7.html /posts/怎么写研究计划书 301
727
- /posts/f4626862 /posts/python-step-wise-mlr 301
728
- /posts/f4626862.html /posts/python-step-wise-mlr 301
729
- /posts/f4af350 /en/posts/kriging 301
730
- /posts/f4af350.html /en/posts/kriging 301
731
- /posts/f5ee8139 /en/posts/qaa 301
732
- /posts/f5ee8139.html /en/posts/qaa 301
733
- /posts/f71631a2 /posts/乡土中国-摘录与笔记 301
734
- /posts/f71631a2.html /posts/乡土中国-摘录与笔记 301
735
- /posts/fbd0b1b0 /posts/mixture-density-network 301
736
- /posts/fbd0b1b0.html /posts/mixture-density-network 301
737
- /posts/fc1cc4fb /notes/leetcode面试高频题分类刷题总结 301
738
- /posts/fc1cc4fb.html /notes/leetcode面试高频题分类刷题总结 301
739
- /posts/fd169b9d /posts/tensorflow 301
740
- /posts/fd169b9d.html /posts/tensorflow 301
741
- /posts/fee729e7 /posts/pytorch 301
742
- /posts/fee729e7.html /posts/pytorch 301
743
- /posts/ff413d6a /en/posts/annotated-bibliography-2021-1-8-1-17 301
744
- /posts/ff413d6a.html /en/posts/annotated-bibliography-2021-1-8-1-17 301
745
- /posts/fy4a.html /posts/fy4a 301
746
- /posts/gdal.html /posts/gdal 301
747
- /posts/hello-world.html /posts/hello-world 301
748
- /posts/how-i-understand-react-as-a-backend-developer.html /posts/how-i-understand-react-as-a-backend-developer 301
749
- /posts/html-css.html /posts/html-css 301
750
- /posts/java.html /posts/java 301
751
- /posts/javascript.html /posts/javascript 301
752
- /posts/jupyer-lab.html /posts/jupyer-lab 301
753
- /posts/keras-tuner.html /posts/keras-tuner 301
754
- /posts/kotlin.html /posts/kotlin 301
755
- /posts/lambda.html /posts/lambda 301
756
- /posts/lfs.html /posts/lfs 301
757
- /posts/machine-learning-on-sever.html /posts/machine-learning-on-sever 301
758
- /posts/material-for-ocean-color.html /posts/material-for-ocean-color 301
759
- /posts/matplotlib-subplot.html /posts/matplotlib-subplot 301
760
- /posts/matplotlib-xarray-h5py-conflict.html /posts/matplotlib-xarray-h5py-conflict 301
761
- /posts/mixture-density-network-2.html /posts/mixture-density-network-2 301
762
- /posts/mixture-density-network-3.html /posts/mixture-density-network-3 301
763
- /posts/mixture-density-network.html /posts/mixture-density-network 301
764
- /posts/ml-foundation-week-6.html /posts/ml-foundation-week-6 301
765
- /posts/modis水色数据处理教程.html /posts/modis水色数据处理教程 301
766
- /posts/my-core-agentic-coding-workflow-on-2025-12-8.html /posts/my-core-agentic-coding-workflow-on-2025-12-8 301
767
- /posts/note-in-writing-and-presentation.html /posts/note-in-writing-and-presentation 301
768
- /posts/np-ma-mask.html /posts/np-ma-mask 301
769
- /posts/obsidian-daily-record-system.html /posts/obsidian-daily-record-system 301
770
- /posts/obsidian.html /posts/obsidian 301
771
- /posts/ocean-color-data-download-script.html /posts/ocean-color-data-download-script 301
772
- /posts/ocean-color-environment-on-server.html /posts/ocean-color-environment-on-server 301
773
- /posts/pandas-cheat-sheet.html /posts/pandas-cheat-sheet 301
774
- /posts/pandas基础.html /posts/pandas基础 301
775
- /posts/particle-backscattering.html /posts/particle-backscattering 301
776
- /posts/plot.html /posts/plot 301
777
- /posts/probabilistic-method-in-machine-learning.html /posts/probabilistic-method-in-machine-learning 301
778
- /posts/publishable-plot-using-python-r.html /posts/publishable-plot-using-python-r 301
779
- /posts/py6s.html /posts/py6s 301
780
- /posts/python-step-wise-mlr.html /posts/python-step-wise-mlr 301
781
- /posts/python学术绘图.html /posts/python学术绘图 301
782
- /posts/pytorch.html /posts/pytorch 301
783
- /posts/robust-fit.html /posts/robust-fit 301
784
- /posts/scipy-optimize.html /posts/scipy-optimize 301
785
- /posts/seadas-ocssw及大气矫正-2022年使用指北.html /posts/seadas-ocssw及大气矫正-2022年使用指北 301
786
- /posts/sgli-user-tool.html /posts/sgli-user-tool 301
787
- /posts/sql.html /posts/sql 301
788
- /posts/stay-alive-at-academic.html /posts/stay-alive-at-academic 301
789
- /posts/super-x-roadmap.html /posts/super-x-roadmap 301
790
- /posts/tdd.html /posts/tdd 301
791
- /posts/tennary-plot.html /posts/tennary-plot 301
792
- /posts/tensorflow.html /posts/tensorflow 301
793
- /posts/two-r2.html /posts/two-r2 301
794
- /posts/water-classification.html /posts/water-classification 301
795
- /posts/write-thesis-with-markdown.html /posts/write-thesis-with-markdown 301
796
- /posts/wsl.html /posts/wsl 301
797
- /posts/一个神奇的kotlin-springboot-docker启动bug.html /posts/一个神奇的kotlin-springboot-docker启动bug 301
798
- /posts/博客定制优化.html /posts/博客定制优化 301
799
- /posts/博客更换主题-子页面设置及乱码解决.html /posts/博客更换主题-子页面设置及乱码解决 301
800
- /posts/国内网络问题.html /posts/国内网络问题 301
801
- /posts/在日本买手机和手机卡.html /posts/在日本买手机和手机卡 301
802
- /posts/在日本买游戏本.html /posts/在日本买游戏本 301
803
- /posts/如何在国内拥有一个能够接受境外短信的手机号.html /posts/如何在国内拥有一个能够接受境外短信的手机号 301
804
- /posts/乡土中国-摘录与笔记.html /posts/乡土中国-摘录与笔记 301
805
- /posts/广义加性模型-1.html /posts/广义加性模型-1 301
806
- /posts/怎么写研究计划书.html /posts/怎么写研究计划书 301
807
- /posts/文凭社会.html /posts/文凭社会 301
808
- /posts/文献管理.html /posts/文献管理 301
809
- /posts/日本留学申请-四-经管类申请.html /posts/日本留学申请-四-经管类申请 301
810
- /posts/日本留学申请经验贴-一.html /posts/日本留学申请经验贴-一 301
811
- /posts/某公司从零自学过笔试.html /posts/某公司从零自学过笔试 301
812
- /posts/树莓派nas.html /posts/树莓派nas 301
813
- /posts/没有大气校正和实测数据怎么搞水色.html /posts/没有大气校正和实测数据怎么搞水色 301
814
- /posts/清华大学-研究生学位论文的选题方法-讲座实录.html /posts/清华大学-研究生学位论文的选题方法-讲座实录 301
815
- /posts/游戏策划笔试整理.html /posts/游戏策划笔试整理 301
816
- /posts/游戏策划面试总结.html /posts/游戏策划面试总结 301
817
- /posts/狼总访谈.html /posts/狼总访谈 301
818
- /posts/经验贴-三-申请准备及流程.html /posts/经验贴-三-申请准备及流程 301
819
- /posts/经验贴-二-日日本留学制度介绍.html /posts/经验贴-二-日日本留学制度介绍 301
@@ -9,7 +9,12 @@ const { title, subtitle, i18nTitle } = themeConfig.site
9
9
 
10
10
  const currentUI = ui[currentLang as keyof typeof ui] ?? {}
11
11
  const headerTitle = i18nTitle ? currentUI.title : title
12
- const headerSubtitle = i18nTitle ? currentUI.subtitle : subtitle
12
+ // subtitle may be a plain string (legacy) or a per-language map. When it is
13
+ // a map, the current locale's value takes priority over ui.ts; otherwise fall
14
+ // back to the existing i18nTitle behaviour.
15
+ const headerSubtitle = typeof subtitle === 'object' && subtitle !== null
16
+ ? ((subtitle as Record<string, string>)[currentLang] || currentUI.subtitle)
17
+ : (i18nTitle ? currentUI.subtitle : subtitle)
13
18
 
14
19
  const TitleTag = isArticle ? 'h2' : 'h1'
15
20
  const SubtitleTag = isArticle ? 'div' : 'h2'
@@ -26,10 +26,18 @@ const LanguageCode = z.enum([
26
26
  'zh-tw',
27
27
  ])
28
28
 
29
+ // A string that can either be a single value (used for all languages) or a
30
+ // per-language map. When a map is given, the value for the current locale is
31
+ // preferred; missing locales fall back to the i18n defaults in src/i18n/ui.ts.
32
+ const LocalizedString = z.union([
33
+ z.string(),
34
+ z.record(LanguageCode, z.string()),
35
+ ])
36
+
29
37
  export const ThemeConfigSchema = z.object({
30
38
  site: z.object({
31
39
  title: z.string(),
32
- subtitle: z.string().optional().default(''),
40
+ subtitle: LocalizedString.optional().default(''),
33
41
  description: z.string().optional().default(''),
34
42
  i18nTitle: z.boolean().default(true),
35
43
  author: z.string(),
@@ -145,15 +153,19 @@ export const ThemeConfigSchema = z.object({
145
153
  })
146
154
  .optional()
147
155
  .default({}),
148
- // Collection toggles. Keys are collection names (built-in or auto-discovered
149
- // folders under `content/`); values control whether the collection is built
150
- // and routed. Folders not listed here default to `enabled: true`.
156
+ // Collection settings. Keys are collection names (built-in or auto-discovered
157
+ // folders under `content/`). `enabled` controls whether the collection is
158
+ // built and routed (folders not listed here default to `enabled: true`).
159
+ // `intro` is an optional per-language tagline shown under the collection
160
+ // title on its list page; when omitted, the page falls back to the i18n
161
+ // defaults in src/i18n/ui.ts (e.g. notesIntro, journalsIntro).
151
162
  collections: z
152
163
  .record(
153
164
  z.string(),
154
165
  z
155
166
  .object({
156
167
  enabled: z.boolean().optional().default(true),
168
+ intro: z.record(LanguageCode, z.string()).optional(),
157
169
  })
158
170
  .passthrough(),
159
171
  )
package/src/config.ts CHANGED
@@ -33,7 +33,7 @@ import { ThemeConfigSchema } from './config-schema'
33
33
  const defaults = {
34
34
  site: {
35
35
  title: 'Life Odyssey',
36
- subtitle: '人生若只如初见',
36
+ subtitle: '',
37
37
  description: 'A personal blog about life, technology, and reflections.',
38
38
  i18nTitle: true,
39
39
  author: 'Zhenjia',
package/src/i18n/ui.ts CHANGED
@@ -169,14 +169,14 @@ export const ui: Record<Language, Translation> = {
169
169
  },
170
170
  'zh': {
171
171
  title: 'Life Odyssey',
172
- subtitle: '人生若只如初见',
172
+ subtitle: '记录生活、技术与思考的个人博客',
173
173
  description: '关于生活、技术与思考的个人博客。',
174
174
  posts: '文章',
175
175
  notes: '笔记',
176
- notesIntro: '这里主要是我学习、刷题时的随手记录,偏自用,可能不完整或随时修改。',
176
+ notesIntro: '个人学习笔记(粗糙、不完整,可能随时更新)。',
177
177
  notesEmpty: '还没有笔记。',
178
178
  journals: '日记',
179
- journalsIntro: 'this is my odyssey',
179
+ journalsIntro: '个人日记(未整理的随笔)。',
180
180
  journalsEmpty: '还没有日记。',
181
181
  tags: '标签',
182
182
  about: '关于',
@@ -28,7 +28,10 @@ const { customGoogleAnalyticsJS = '', customUmamiAnalyticsJS = '' } = themeConfi
28
28
  // Site Metadata
29
29
  const metaTheme = defaultMode === 'dark' ? darkMode : lightMode
30
30
  const siteTitle = i18nTitle ? currentUI.title : title
31
- const siteSubtitle = i18nTitle ? currentUI.subtitle : subtitle
31
+ // subtitle may be a plain string (legacy) or a per-language map; see Header.astro.
32
+ const siteSubtitle = typeof subtitle === 'object' && subtitle !== null
33
+ ? ((subtitle as Record<string, string>)[currentLang] || currentUI.subtitle)
34
+ : (i18nTitle ? currentUI.subtitle : subtitle)
32
35
  const siteDescription = i18nTitle ? currentUI.description : description
33
36
 
34
37
  // Page Metadata
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  import JournalList from '@/components/JournalList.astro'
3
3
  import Pagination from '@/components/Pagination.astro'
4
- import { JOURNALS_PER_PAGE, allLocales } from '@/config'
4
+ import { JOURNALS_PER_PAGE, allLocales, themeConfig } from '@/config'
5
5
  import { getLangFromLocale, getLangRouteParam } from '@/i18n/lang'
6
6
  import { getLocalizedPath } from '@/i18n/path'
7
7
  import { ui } from '@/i18n/ui'
@@ -20,19 +20,21 @@ const allJournals = await getJournals(currentLang)
20
20
  const totalPages = Math.max(1, Math.ceil(allJournals.length / JOURNALS_PER_PAGE))
21
21
  const journals = allJournals.slice(0, JOURNALS_PER_PAGE)
22
22
  const baseUrl = getLocalizedPath('/journals/', currentLang)
23
+ const intro = (themeConfig.collections?.journals as { intro?: Record<string, string> } | undefined)?.intro?.[currentLang]
24
+ ?? currentUI.journalsIntro
23
25
  ---
24
26
 
25
27
  <Layout
26
28
  postTitle={currentUI.journals ?? 'Journal'}
27
- postDescription={currentUI.journalsIntro}
29
+ postDescription={intro}
28
30
  >
29
31
  <section class="mb-7.5">
30
32
  <h1 class="mb-2 text-5 font-bold cjk:tracking-wide lg:text-6">
31
33
  {currentUI.journals ?? 'Journal'}
32
34
  </h1>
33
- {currentUI.journalsIntro && (
35
+ {intro && (
34
36
  <p class="mb-6 text-3.5 c-secondary">
35
- {currentUI.journalsIntro}
37
+ {intro}
36
38
  </p>
37
39
  )}
38
40
  <div class="uno-decorative-line" />
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  import NoteList from '@/components/NoteList.astro'
3
3
  import Pagination from '@/components/Pagination.astro'
4
- import { NOTES_PER_PAGE, allLocales } from '@/config'
4
+ import { NOTES_PER_PAGE, allLocales, themeConfig } from '@/config'
5
5
  import { getLangFromLocale, getLangRouteParam } from '@/i18n/lang'
6
6
  import { getLocalizedPath } from '@/i18n/path'
7
7
  import { ui } from '@/i18n/ui'
@@ -20,19 +20,21 @@ const allNotes = await getNotes(currentLang)
20
20
  const totalPages = Math.max(1, Math.ceil(allNotes.length / NOTES_PER_PAGE))
21
21
  const notes = allNotes.slice(0, NOTES_PER_PAGE)
22
22
  const baseUrl = getLocalizedPath('/notes/', currentLang)
23
+ const intro = (themeConfig.collections?.notes as { intro?: Record<string, string> } | undefined)?.intro?.[currentLang]
24
+ ?? currentUI.notesIntro
23
25
  ---
24
26
 
25
27
  <Layout
26
28
  postTitle={currentUI.notes ?? 'Notes'}
27
- postDescription={currentUI.notesIntro}
29
+ postDescription={intro}
28
30
  >
29
31
  <section class="mb-7.5">
30
32
  <h1 class="mb-2 text-5 font-bold cjk:tracking-wide lg:text-6">
31
33
  {currentUI.notes ?? 'Notes'}
32
34
  </h1>
33
- {currentUI.notesIntro && (
35
+ {intro && (
34
36
  <p class="mb-6 text-3.5 c-secondary">
35
- {currentUI.notesIntro}
37
+ {intro}
36
38
  </p>
37
39
  )}
38
40
  <div class="uno-decorative-line" />
@@ -25,7 +25,8 @@ export type Journal = CollectionEntry<'journals'> & {
25
25
  export interface ThemeConfig {
26
26
  site: {
27
27
  title: string
28
- subtitle: string
28
+ // Either a single subtitle for all languages, or a per-language map.
29
+ subtitle: string | Partial<Record<Language, string>>
29
30
  description: string
30
31
  i18nTitle: boolean
31
32
  author: string
@@ -108,4 +109,9 @@ export interface ThemeConfig {
108
109
  customGoogleAnalyticsJS?: string
109
110
  customUmamiAnalyticsJS?: string
110
111
  }
112
+ collections?: Record<string, {
113
+ enabled?: boolean
114
+ intro?: Partial<Record<Language, string>>
115
+ [key: string]: unknown
116
+ }>
111
117
  }
@@ -1,21 +0,0 @@
1
- ---
2
- lang: en
3
- ---
4
-
5
- # About Me
6
-
7
- Thank you for visiting my blog.
8
-
9
- I'm working as a software engineer.
10
-
11
- Please feel free to contact me: zhenjiazhou0127@outlook.com
12
-
13
- # Privacy & Analytics
14
-
15
- I use Google Analytics to better understand my visitors. The data collection is based on Google's standard practices. Thank you for your understanding.
16
-
17
- I'm very happy to receive any type of message. Please feel free to reach out.
18
-
19
- # The End
20
-
21
- Sometimes, this ocean of starlight seems to have reached the edge of darkness; I thought beyond it lay only endless void. Yet, with just a glance upward, there are still stars everywhere.
@@ -1,21 +0,0 @@
1
- ---
2
- lang: ja
3
- ---
4
-
5
- # 私について
6
-
7
- ブログをご覧いただきありがとうございます。
8
-
9
- 私はSoftware Engineerで働いています。
10
-
11
- お気軽にご連絡ください:zhenjiazhou0127@outlook.com
12
-
13
- # プライバシーと分析
14
-
15
- 訪問者をより理解するために、Google Analyticsを使用しています。データ収集はGoogleの標準的な方法に基づいています。ご理解いただきありがとうございます。
16
-
17
- どんなメッセージでも大歓迎です。
18
-
19
- # 終わりに
20
-
21
- 時々、この星の海は闇の果てに達したように見える。その先には無限の暗黒しかないと思っていた。しかし、ふと見上げれば、そこにはまだ星々が輝いている。
@@ -1,24 +0,0 @@
1
- ---
2
- lang: zh
3
- ---
4
-
5
- # 关于我
6
-
7
- 欢迎你来我的博客,希望我写的东西能够帮到你。
8
-
9
- 我目前是一名软件开发人员。
10
-
11
- 如果有任何问题,或者想和我交流的话,欢迎联系我的邮件:zhenjiazhou0127@outlook.com
12
-
13
- # 隐私统计与使用
14
-
15
- 我在博客里加入了谷歌的统计,会根据浏览器标识搜集一部分访客信息。
16
-
17
- 我很开心收到任何信息,请随意联系我。
18
-
19
- # 结语
20
-
21
- 有时候,这星光的海洋似乎已经达到了黑暗的边缘;我满以为,在此之外,已是无边无际的大黑暗了。然而,只要一转瞬,再往上一看,依然是一片星光。
22
-
23
- 我志在寥阔,畴昔梦登天。摩挲素月,人世俯仰已千年。有客骖鸾并凤,云遇青山赤壁,相约上高寒。酌酒援北斗,我亦虱其间。
24
- 少歌曰:神甚放,形如眠。鸿鹄一再高举,天地睹方圆。欲重歌兮梦觉,推枕惘然独念,人事底亏全?有美人可语,秋水隔婵娟。