@jant/core 0.2.2 → 0.2.4

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.
Files changed (92) hide show
  1. package/dist/client.d.ts +4 -1
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +6 -2
  4. package/dist/lib/assets.d.ts +4 -3
  5. package/dist/lib/assets.d.ts.map +1 -1
  6. package/dist/lib/assets.js +1 -3
  7. package/dist/theme/layouts/BaseLayout.js +0 -5
  8. package/package.json +4 -5
  9. package/src/app.tsx +377 -0
  10. package/src/auth.ts +38 -0
  11. package/src/client.ts +7 -2
  12. package/src/db/index.ts +14 -0
  13. package/src/db/migrations/0000_solid_moon_knight.sql +118 -0
  14. package/src/db/migrations/0001_add_search_fts.sql +40 -0
  15. package/src/db/migrations/0002_collection_path.sql +2 -0
  16. package/src/db/migrations/0003_collection_path_nullable.sql +21 -0
  17. package/src/db/migrations/0004_media_uuid.sql +35 -0
  18. package/src/db/migrations/meta/0000_snapshot.json +784 -0
  19. package/src/db/migrations/meta/_journal.json +41 -0
  20. package/src/db/schema.ts +159 -0
  21. package/src/i18n/EXAMPLES.md +235 -0
  22. package/src/i18n/README.md +296 -0
  23. package/src/i18n/Trans.tsx +31 -0
  24. package/src/i18n/context.tsx +101 -0
  25. package/src/i18n/detect.ts +100 -0
  26. package/src/i18n/i18n.ts +62 -0
  27. package/src/i18n/index.ts +65 -0
  28. package/src/i18n/locales/en.po +875 -0
  29. package/src/i18n/locales/en.ts +1 -0
  30. package/src/i18n/locales/zh-Hans.po +875 -0
  31. package/src/i18n/locales/zh-Hans.ts +1 -0
  32. package/src/i18n/locales/zh-Hant.po +875 -0
  33. package/src/i18n/locales/zh-Hant.ts +1 -0
  34. package/src/i18n/locales.ts +14 -0
  35. package/src/i18n/middleware.ts +59 -0
  36. package/src/index.ts +42 -0
  37. package/src/lib/assets.ts +49 -0
  38. package/src/lib/constants.ts +67 -0
  39. package/src/lib/image.ts +107 -0
  40. package/src/lib/index.ts +9 -0
  41. package/src/lib/markdown.ts +93 -0
  42. package/src/lib/schemas.ts +92 -0
  43. package/src/lib/sqid.ts +79 -0
  44. package/src/lib/sse.ts +152 -0
  45. package/src/lib/time.ts +117 -0
  46. package/src/lib/url.ts +107 -0
  47. package/src/middleware/auth.ts +59 -0
  48. package/src/preset.css +2 -11
  49. package/src/routes/api/posts.ts +127 -0
  50. package/src/routes/api/search.ts +53 -0
  51. package/src/routes/api/upload.ts +240 -0
  52. package/src/routes/dash/collections.tsx +341 -0
  53. package/src/routes/dash/index.tsx +89 -0
  54. package/src/routes/dash/media.tsx +551 -0
  55. package/src/routes/dash/pages.tsx +245 -0
  56. package/src/routes/dash/posts.tsx +202 -0
  57. package/src/routes/dash/redirects.tsx +155 -0
  58. package/src/routes/dash/settings.tsx +93 -0
  59. package/src/routes/feed/rss.ts +119 -0
  60. package/src/routes/feed/sitemap.ts +75 -0
  61. package/src/routes/pages/archive.tsx +223 -0
  62. package/src/routes/pages/collection.tsx +79 -0
  63. package/src/routes/pages/home.tsx +93 -0
  64. package/src/routes/pages/page.tsx +64 -0
  65. package/src/routes/pages/post.tsx +81 -0
  66. package/src/routes/pages/search.tsx +162 -0
  67. package/src/services/collection.ts +180 -0
  68. package/src/services/index.ts +40 -0
  69. package/src/services/media.ts +97 -0
  70. package/src/services/post.ts +279 -0
  71. package/src/services/redirect.ts +74 -0
  72. package/src/services/search.ts +117 -0
  73. package/src/services/settings.ts +76 -0
  74. package/src/theme/components/ActionButtons.tsx +98 -0
  75. package/src/theme/components/CrudPageHeader.tsx +48 -0
  76. package/src/theme/components/DangerZone.tsx +77 -0
  77. package/src/theme/components/EmptyState.tsx +56 -0
  78. package/src/theme/components/ListItemRow.tsx +24 -0
  79. package/src/theme/components/PageForm.tsx +114 -0
  80. package/src/theme/components/Pagination.tsx +196 -0
  81. package/src/theme/components/PostForm.tsx +122 -0
  82. package/src/theme/components/PostList.tsx +68 -0
  83. package/src/theme/components/ThreadView.tsx +118 -0
  84. package/src/theme/components/TypeBadge.tsx +28 -0
  85. package/src/theme/components/VisibilityBadge.tsx +33 -0
  86. package/src/theme/components/index.ts +12 -0
  87. package/src/theme/index.ts +24 -0
  88. package/src/theme/layouts/BaseLayout.tsx +50 -0
  89. package/src/theme/layouts/DashLayout.tsx +108 -0
  90. package/src/theme/layouts/index.ts +2 -0
  91. package/src/types.ts +222 -0
  92. package/static/assets/datastar.min.js +0 -7
@@ -0,0 +1,875 @@
1
+ msgid ""
2
+ msgstr ""
3
+ "POT-Creation-Date: 2026-02-01 08:44:08+0000\n"
4
+ "MIME-Version: 1.0\n"
5
+ "Content-Type: text/plain; charset=utf-8\n"
6
+ "Content-Transfer-Encoding: 8bit\n"
7
+ "X-Generator: lingui-po-translate\n"
8
+ "Language: zh-Hans\n"
9
+ "Project-Id-Version: \n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "PO-Revision-Date: \n"
12
+ "Last-Translator: \n"
13
+ "Language-Team: \n"
14
+ "Plural-Forms: \n"
15
+
16
+ #: src/routes/pages/archive.tsx:135
17
+ #. @context: Archive post reply indicator - plural
18
+ msgid "{count} replies"
19
+ msgstr "{count} 条回复"
20
+
21
+ #: src/routes/dash/collections.tsx:196
22
+ #. @context: Navigation link
23
+ msgid "← Back to Collections"
24
+ msgstr "← 返回收藏夹"
25
+
26
+ #: src/routes/pages/collection.tsx:67
27
+ #: src/routes/pages/post.tsx:69
28
+ #. @context: Navigation link
29
+ #. @context: Navigation link
30
+ msgid "← Back to home"
31
+ msgstr "← 返回首页"
32
+
33
+ #: src/routes/pages/archive.tsx:134
34
+ #. @context: Archive post reply indicator - single
35
+ msgid "1 reply"
36
+ msgstr "1 条回复"
37
+
38
+ #: src/routes/dash/redirects.tsx:95
39
+ #. @context: Redirect type option
40
+ msgid "301 (Permanent)"
41
+ msgstr "301(永久)"
42
+
43
+ #: src/routes/dash/redirects.tsx:96
44
+ #. @context: Redirect type option
45
+ msgid "302 (Temporary)"
46
+ msgstr "302(临时)"
47
+
48
+ #: src/routes/pages/archive.tsx:85
49
+ #. @context: Archive filter - all types
50
+ msgid "All"
51
+ msgstr "所有"
52
+
53
+ #: src/routes/pages/archive.tsx:71
54
+ #: src/routes/pages/home.tsx:39
55
+ #. @context: Archive page title
56
+ #. @context: Navigation link to archive page
57
+ msgid "Archive"
58
+ msgstr "档案馆"
59
+
60
+ #: src/routes/pages/archive.tsx:169
61
+ #: src/theme/components/PostForm.tsx:32
62
+ #: src/theme/components/PostList.tsx:41
63
+ #. @context: Post type badge - article
64
+ #. @context: Post type label - article
65
+ #. @context: Post type option
66
+ msgid "Article"
67
+ msgstr "文章"
68
+
69
+ #: src/routes/pages/archive.tsx:181
70
+ #. @context: Post type label plural - articles
71
+ msgid "Articles"
72
+ msgstr "文章"
73
+
74
+ #: src/routes/dash/media.tsx:140
75
+ #. @context: Button to go back to media list
76
+ msgid "Back"
77
+ msgstr "返回"
78
+
79
+ #: src/routes/pages/archive.tsx:158
80
+ #: src/routes/pages/page.tsx:52
81
+ #: src/routes/pages/search.tsx:138
82
+ #. @context: Navigation link back to home page
83
+ #. @context: Navigation link back to home page
84
+ #. @context: Navigation link back to home page
85
+ msgid "Back to home"
86
+ msgstr "返回首页"
87
+
88
+ #: src/routes/dash/collections.tsx:103
89
+ #: src/routes/dash/collections.tsx:249
90
+ #: src/routes/dash/redirects.tsx:105
91
+ #: src/theme/components/PageForm.tsx:113
92
+ #: src/theme/components/PostForm.tsx:120
93
+ #. @context: Button to cancel and go back
94
+ #. @context: Button to cancel form
95
+ #. @context: Button to cancel form
96
+ #. @context: Button to cancel form
97
+ #. @context: Button to cancel form
98
+ msgid "Cancel"
99
+ msgstr "取消"
100
+
101
+ #: src/routes/dash/collections.tsx:24
102
+ #: src/routes/dash/collections.tsx:26
103
+ #: src/theme/layouts/DashLayout.tsx:31
104
+ #. @context: Dashboard heading
105
+ #. @context: Dashboard navigation - collections management
106
+ #. @context: Dashboard page title
107
+ msgid "Collections"
108
+ msgstr "收藏夹"
109
+
110
+ #: src/app.tsx:151
111
+ #. @context: Setup form submit button
112
+ msgid "Complete Setup"
113
+ msgstr "完成设置"
114
+
115
+ #: src/theme/components/PageForm.tsx:75
116
+ #: src/theme/components/PostForm.tsx:60
117
+ #. @context: Page form field label - content
118
+ #. @context: Post form field
119
+ msgid "Content"
120
+ msgstr "内容"
121
+
122
+ #: src/routes/dash/media.tsx:184
123
+ #: src/routes/dash/media.tsx:210
124
+ #. @context: Button to copy Markdown to clipboard
125
+ #. @context: Button to copy URL to clipboard
126
+ msgid "Copy"
127
+ msgstr "复制"
128
+
129
+ #: src/routes/dash/collections.tsx:100
130
+ #. @context: Button to save new collection
131
+ msgid "Create Collection"
132
+ msgstr "创建集合"
133
+
134
+ #: src/theme/components/PageForm.tsx:110
135
+ #. @context: Button to create new page
136
+ msgid "Create Page"
137
+ msgstr "创建页面"
138
+
139
+ #: src/routes/dash/redirects.tsx:102
140
+ #. @context: Button to save new redirect
141
+ msgid "Create Redirect"
142
+ msgstr "创建重定向"
143
+
144
+ #: src/routes/dash/pages.tsx:46
145
+ #. @context: Button in empty state to create first page
146
+ msgid "Create your first page"
147
+ msgstr "创建您的第一页"
148
+
149
+ #: src/theme/components/PostList.tsx:57
150
+ #. @context: Button in empty state to create first post
151
+ msgid "Create your first post"
152
+ msgstr "创建你的第一篇帖子"
153
+
154
+ #: src/theme/components/PostForm.tsx:104
155
+ #. @context: Post form field
156
+ msgid "Custom Path (optional)"
157
+ msgstr "自定义路径(可选)"
158
+
159
+ #: src/routes/dash/collections.tsx:255
160
+ #: src/routes/dash/media.tsx:220
161
+ #: src/routes/dash/pages.tsx:176
162
+ #. @context: Heading for destructive actions section
163
+ #. @context: Section heading for dangerous/destructive actions
164
+ #. @context: Section heading for dangerous/destructive actions
165
+ msgid "Danger Zone"
166
+ msgstr "危险区域"
167
+
168
+ #: src/routes/dash/index.tsx:26
169
+ #: src/routes/dash/index.tsx:28
170
+ #: src/theme/layouts/DashLayout.tsx:27
171
+ #. @context: Dashboard main heading
172
+ #. @context: Dashboard navigation - main dashboard page
173
+ #. @context: Dashboard page title
174
+ msgid "Dashboard"
175
+ msgstr "仪表板"
176
+
177
+ #: src/routes/dash/redirects.tsx:47
178
+ #. @context: Button to delete redirect
179
+ msgid "Delete"
180
+ msgstr "删除"
181
+
182
+ #: src/routes/dash/collections.tsx:258
183
+ #. @context: Button to delete collection
184
+ msgid "Delete Collection"
185
+ msgstr "删除收藏夹"
186
+
187
+ #: src/routes/dash/media.tsx:233
188
+ #. @context: Button to delete media
189
+ msgid "Delete Media"
190
+ msgstr "删除媒体"
191
+
192
+ #: src/routes/dash/pages.tsx:184
193
+ #. @context: Button to delete page
194
+ msgid "Delete Page"
195
+ msgstr "删除页面"
196
+
197
+ #: src/routes/dash/media.tsx:225
198
+ #. @context: Warning message before deleting media
199
+ msgid "Deleting this media will remove it permanently from storage."
200
+ msgstr "删除此媒体将永久从存储中移除。"
201
+
202
+ #: src/routes/dash/collections.tsx:94
203
+ #: src/routes/dash/collections.tsx:238
204
+ #. @context: Collection form field
205
+ #. @context: Collection form field
206
+ msgid "Description (optional)"
207
+ msgstr "描述(可选)"
208
+
209
+ #: src/routes/dash/pages.tsx:61
210
+ #: src/theme/components/PageForm.tsx:97
211
+ #: src/theme/components/PostForm.tsx:97
212
+ #: src/theme/components/PostList.tsx:31
213
+ #. @context: Page status badge - draft
214
+ #. @context: Page status option - draft
215
+ #. @context: Post visibility badge - draft
216
+ #. @context: Post visibility option
217
+ msgid "Draft"
218
+ msgstr "草稿"
219
+
220
+ #: src/routes/dash/index.tsx:43
221
+ #. @context: Dashboard stat card - draft posts count
222
+ msgid "Drafts"
223
+ msgstr "草稿"
224
+
225
+ #: src/routes/dash/collections.tsx:49
226
+ #: src/routes/dash/collections.tsx:150
227
+ #: src/routes/dash/pages.tsx:83
228
+ #: src/routes/dash/pages.tsx:157
229
+ #: src/routes/dash/posts.tsx:94
230
+ #: src/theme/components/PostList.tsx:92
231
+ #. @context: Button to edit collection
232
+ #. @context: Button to edit collection
233
+ #. @context: Button to edit page
234
+ #. @context: Button to edit page
235
+ #. @context: Button to edit post
236
+ #. @context: Button to edit post
237
+ msgid "Edit"
238
+ msgstr "编辑"
239
+
240
+ #: src/routes/dash/collections.tsx:217
241
+ #. @context: Page heading
242
+ msgid "Edit Collection"
243
+ msgstr "编辑集合"
244
+
245
+ #: src/routes/dash/pages.tsx:208
246
+ #. @context: Edit page main heading
247
+ msgid "Edit Page"
248
+ msgstr "编辑页面"
249
+
250
+ #: src/routes/dash/posts.tsx:126
251
+ #. @context: Page heading
252
+ msgid "Edit Post"
253
+ msgstr "编辑帖子"
254
+
255
+ #: src/routes/dash/collections.tsx:213
256
+ #: src/routes/dash/pages.tsx:203
257
+ #: src/routes/dash/posts.tsx:122
258
+ #. @context: Edit page page title
259
+ #. @context: Page title for editing collection
260
+ #. @context: Page title for editing post
261
+ msgid "Edit: {title}"
262
+ msgstr "编辑: {title}"
263
+
264
+ #: src/app.tsx:144
265
+ #: src/app.tsx:221
266
+ #. @context: Setup/signin form field - email
267
+ #. @context: Setup/signin form field - email
268
+ msgid "Email"
269
+ msgstr "电子邮件"
270
+
271
+ #: src/routes/pages/home.tsx:69
272
+ #: src/theme/components/PostForm.tsx:91
273
+ #: src/theme/components/PostList.tsx:28
274
+ #. @context: Post visibility badge
275
+ #. @context: Post visibility badge - featured
276
+ #. @context: Post visibility option
277
+ msgid "Featured"
278
+ msgstr "精选"
279
+
280
+ #: src/routes/pages/search.tsx:92
281
+ #. @context: Search results count - multiple
282
+ msgid "Found {count} results"
283
+ msgstr "找到 {count} 个结果"
284
+
285
+ #: src/routes/pages/search.tsx:91
286
+ #. @context: Search results count - single
287
+ msgid "Found 1 result"
288
+ msgstr "找到 1 个结果"
289
+
290
+ #: src/routes/dash/redirects.tsx:69
291
+ #. @context: Redirect form field
292
+ msgid "From Path"
293
+ msgstr "来源路径"
294
+
295
+ #: src/routes/dash/settings.tsx:30
296
+ #. @context: Settings section heading
297
+ msgid "General"
298
+ msgstr "常规"
299
+
300
+ #: src/routes/pages/archive.tsx:172
301
+ #: src/theme/components/PostForm.tsx:41
302
+ #: src/theme/components/PostList.tsx:44
303
+ #. @context: Post type badge - image
304
+ #. @context: Post type label - image
305
+ #. @context: Post type option
306
+ msgid "Image"
307
+ msgstr "图像"
308
+
309
+ #: src/routes/pages/archive.tsx:184
310
+ #. @context: Post type label plural - images
311
+ msgid "Images"
312
+ msgstr "图片"
313
+
314
+ #: src/routes/dash/settings.tsx:46
315
+ #. @context: Settings form field
316
+ msgid "Language"
317
+ msgstr "语言"
318
+
319
+ #: src/app.tsx:130
320
+ #. @context: Setup page description
321
+ msgid "Let's set up your site."
322
+ msgstr "让我们设置您的网站。"
323
+
324
+ #: src/routes/pages/archive.tsx:170
325
+ #: src/theme/components/PostForm.tsx:35
326
+ #: src/theme/components/PostList.tsx:42
327
+ #. @context: Post type badge - link
328
+ #. @context: Post type label - link
329
+ #. @context: Post type option
330
+ msgid "Link"
331
+ msgstr "链接"
332
+
333
+ #: src/routes/pages/archive.tsx:182
334
+ #. @context: Post type label plural - links
335
+ msgid "Links"
336
+ msgstr "链接"
337
+
338
+ #: src/theme/components/Pagination.tsx:111
339
+ #. @context: Pagination button - load more items
340
+ msgid "Load more"
341
+ msgstr "加载更多"
342
+
343
+ #: src/theme/components/PageForm.tsx:63
344
+ #. @context: Page path validation message
345
+ msgid "Lowercase letters, numbers, and hyphens only"
346
+ msgstr "仅允许小写字母、数字和连字符"
347
+
348
+ #: src/routes/dash/media.tsx:195
349
+ #. @context: Media detail section - Markdown snippet
350
+ msgid "Markdown"
351
+ msgstr "Markdown"
352
+
353
+ #: src/routes/dash/media.tsx:44
354
+ #: src/routes/dash/media.tsx:47
355
+ #: src/theme/layouts/DashLayout.tsx:30
356
+ #. @context: Dashboard navigation - media library
357
+ #. @context: Media main heading
358
+ #. @context: Media page title
359
+ msgid "Media"
360
+ msgstr "媒体"
361
+
362
+ #: src/app.tsx:137
363
+ #. @context: Setup site name placeholder
364
+ msgid "My Blog"
365
+ msgstr "我的博客"
366
+
367
+ #: src/routes/dash/collections.tsx:75
368
+ #. @context: Collection title placeholder
369
+ msgid "My Collection"
370
+ msgstr "我的收藏"
371
+
372
+ #: src/routes/dash/collections.tsx:28
373
+ #: src/routes/dash/collections.tsx:69
374
+ #: src/routes/dash/collections.tsx:70
375
+ #. @context: Button to create new collection
376
+ #. @context: Page heading
377
+ #. @context: Page title
378
+ msgid "New Collection"
379
+ msgstr "新收藏"
380
+
381
+ #: src/routes/dash/pages.tsx:38
382
+ #: src/routes/dash/pages.tsx:105
383
+ #: src/routes/dash/pages.tsx:107
384
+ #. @context: Button to create new page
385
+ #. @context: New page main heading
386
+ #. @context: New page page title
387
+ msgid "New Page"
388
+ msgstr "新页面"
389
+
390
+ #: src/routes/dash/index.tsx:56
391
+ #: src/routes/dash/posts.tsx:31
392
+ #: src/routes/dash/posts.tsx:45
393
+ #: src/routes/dash/posts.tsx:46
394
+ #. @context: Button to create new post
395
+ #. @context: Dashboard quick action button to create new post
396
+ #. @context: Page heading
397
+ #. @context: Page title
398
+ msgid "New Post"
399
+ msgstr "新帖子"
400
+
401
+ #: src/routes/dash/redirects.tsx:27
402
+ #: src/routes/dash/redirects.tsx:64
403
+ #: src/routes/dash/redirects.tsx:65
404
+ #. @context: Button to create new redirect
405
+ #. @context: Page heading
406
+ #. @context: Page title
407
+ msgid "New Redirect"
408
+ msgstr "新重定向"
409
+
410
+ #: src/theme/components/Pagination.tsx:50
411
+ #: src/theme/components/Pagination.tsx:164
412
+ #. @context: Pagination button - next page
413
+ #. @context: Pagination button - next page
414
+ msgid "Next"
415
+ msgstr "下一页"
416
+
417
+ #: src/routes/dash/collections.tsx:33
418
+ #. @context: Empty state message
419
+ msgid "No collections yet."
420
+ msgstr "尚未有任何收藏。"
421
+
422
+ #: src/routes/dash/media.tsx:74
423
+ #. @context: Empty state message when no media exists
424
+ msgid "No media uploaded yet."
425
+ msgstr "尚未上传任何媒体。"
426
+
427
+ #: src/routes/dash/pages.tsx:44
428
+ #. @context: Empty state message when no pages exist
429
+ msgid "No pages yet."
430
+ msgstr "还没有页面。"
431
+
432
+ #: src/routes/pages/archive.tsx:102
433
+ #. @context: Archive empty state
434
+ msgid "No posts found."
435
+ msgstr "未找到帖子。"
436
+
437
+ #: src/routes/dash/collections.tsx:168
438
+ #: src/routes/pages/collection.tsx:40
439
+ #. @context: Empty state message
440
+ #. @context: Empty state message
441
+ msgid "No posts in this collection."
442
+ msgstr "此集合中没有帖子。"
443
+
444
+ #: src/routes/pages/home.tsx:49
445
+ #: src/theme/components/PostList.tsx:55
446
+ #. @context: Empty state message on home page
447
+ #. @context: Empty state message when no posts exist
448
+ msgid "No posts yet."
449
+ msgstr "还没有帖子。"
450
+
451
+ #: src/routes/dash/redirects.tsx:32
452
+ #. @context: Empty state message
453
+ msgid "No redirects configured."
454
+ msgstr "未配置重定向。"
455
+
456
+ #: src/routes/pages/search.tsx:89
457
+ #. @context: Search empty results
458
+ msgid "No results found."
459
+ msgstr "未找到结果。"
460
+
461
+ #: src/routes/pages/archive.tsx:168
462
+ #: src/theme/components/PostForm.tsx:29
463
+ #: src/theme/components/PostList.tsx:40
464
+ #. @context: Post type badge - note
465
+ #. @context: Post type label - note
466
+ #. @context: Post type option
467
+ msgid "Note"
468
+ msgstr "注意"
469
+
470
+ #: src/routes/pages/archive.tsx:180
471
+ #. @context: Post type label plural - notes
472
+ msgid "Notes"
473
+ msgstr "笔记"
474
+
475
+ #: src/routes/dash/pages.tsx:147
476
+ #: src/routes/dash/pages.tsx:150
477
+ #: src/routes/dash/pages.tsx:202
478
+ #: src/routes/pages/archive.tsx:173
479
+ #: src/theme/components/PostList.tsx:45
480
+ #. @context: Default page heading when untitled
481
+ #. @context: Default page title when untitled
482
+ #. @context: Default page title when untitled
483
+ #. @context: Post type badge - page
484
+ #. @context: Post type label - page
485
+ msgid "Page"
486
+ msgstr "页面"
487
+
488
+ #: src/theme/components/Pagination.tsx:165
489
+ #. @context: Pagination - current page indicator
490
+ msgid "Page {page}"
491
+ msgstr "页面 {page}"
492
+
493
+ #: src/theme/components/PageForm.tsx:80
494
+ #. @context: Page content placeholder
495
+ msgid "Page content (Markdown supported)..."
496
+ msgstr "页面内容(支持Markdown)..."
497
+
498
+ #: src/theme/components/PageForm.tsx:43
499
+ #. @context: Page title placeholder
500
+ msgid "Page title..."
501
+ msgstr "页面标题..."
502
+
503
+ #: src/routes/dash/pages.tsx:32
504
+ #: src/routes/dash/pages.tsx:35
505
+ #: src/routes/pages/archive.tsx:185
506
+ #: src/theme/layouts/DashLayout.tsx:29
507
+ #. @context: Dashboard navigation - pages management
508
+ #. @context: Pages main heading
509
+ #. @context: Pages page title
510
+ #. @context: Post type label plural - pages
511
+ msgid "Pages"
512
+ msgstr "页面"
513
+
514
+ #: src/app.tsx:148
515
+ #: src/app.tsx:225
516
+ #. @context: Setup/signin form field - password
517
+ #. @context: Setup/signin form field - password
518
+ msgid "Password"
519
+ msgstr "密码"
520
+
521
+ #: src/theme/components/PageForm.tsx:52
522
+ #. @context: Page form field label - URL path
523
+ msgid "Path"
524
+ msgstr "路径"
525
+
526
+ #: src/routes/pages/post.tsx:62
527
+ #: src/theme/components/ThreadView.tsx:66
528
+ #. @context: Link to individual post in thread
529
+ #. @context: Link to permanent URL of post
530
+ msgid "Permalink"
531
+ msgstr "永久链接"
532
+
533
+ #: src/routes/dash/posts.tsx:85
534
+ #: src/routes/dash/posts.tsx:121
535
+ #. @context: Default post title
536
+ #. @context: Default post title
537
+ msgid "Post"
538
+ msgstr "帖子"
539
+
540
+ #: src/theme/components/PostForm.tsx:53
541
+ #. @context: Post title placeholder
542
+ msgid "Post title..."
543
+ msgstr "帖子标题..."
544
+
545
+ #: src/routes/dash/posts.tsx:27
546
+ #: src/routes/dash/posts.tsx:29
547
+ #: src/theme/layouts/DashLayout.tsx:28
548
+ #. @context: Dashboard heading
549
+ #. @context: Dashboard navigation - posts management
550
+ #. @context: Dashboard page title
551
+ msgid "Posts"
552
+ msgstr "帖子"
553
+
554
+ #: src/routes/dash/collections.tsx:139
555
+ #. @context: Collection posts section heading
556
+ msgid "Posts in Collection ({count})"
557
+ msgstr "集合中的帖子 ({count})"
558
+
559
+ #: src/routes/dash/media.tsx:148
560
+ #. @context: Media detail section - preview
561
+ msgid "Preview"
562
+ msgstr "预览"
563
+
564
+ #: src/theme/components/Pagination.tsx:49
565
+ #: src/theme/components/Pagination.tsx:163
566
+ #. @context: Pagination button - previous page
567
+ #. @context: Pagination button - previous page
568
+ msgid "Previous"
569
+ msgstr "上一页"
570
+
571
+ #: src/theme/components/PostForm.tsx:117
572
+ #. @context: Button to publish new post
573
+ msgid "Publish"
574
+ msgstr "发布"
575
+
576
+ #: src/routes/dash/index.tsx:34
577
+ #: src/routes/dash/pages.tsx:62
578
+ #: src/theme/components/PageForm.tsx:94
579
+ #. @context: Dashboard stat card - published posts count
580
+ #. @context: Page status badge - published
581
+ #. @context: Page status option - published
582
+ msgid "Published"
583
+ msgstr "已发布"
584
+
585
+ #: src/theme/components/PageForm.tsx:101
586
+ #. @context: Page status helper text
587
+ msgid "Published pages are accessible via their path. Drafts are not visible."
588
+ msgstr "已发布的页面可以通过其路径访问。草稿不可见。"
589
+
590
+ #: src/routes/dash/index.tsx:52
591
+ #. @context: Dashboard stat card - quick actions section
592
+ msgid "Quick Actions"
593
+ msgstr "快速操作"
594
+
595
+ #: src/theme/components/PostList.tsx:29
596
+ #. @context: Post visibility badge - normal
597
+ msgid "Quiet"
598
+ msgstr "安静"
599
+
600
+ #: src/theme/components/PostForm.tsx:88
601
+ #. @context: Post visibility option
602
+ msgid "Quiet (normal)"
603
+ msgstr "安静(正常)"
604
+
605
+ #: src/routes/pages/archive.tsx:171
606
+ #: src/theme/components/PostForm.tsx:38
607
+ #: src/theme/components/PostList.tsx:43
608
+ #. @context: Post type badge - quote
609
+ #. @context: Post type label - quote
610
+ #. @context: Post type option
611
+ msgid "Quote"
612
+ msgstr "引用"
613
+
614
+ #: src/routes/pages/archive.tsx:183
615
+ #. @context: Post type label plural - quotes
616
+ msgid "Quotes"
617
+ msgstr "引用"
618
+
619
+ #: src/routes/dash/redirects.tsx:23
620
+ #: src/routes/dash/redirects.tsx:25
621
+ #: src/theme/layouts/DashLayout.tsx:32
622
+ #. @context: Dashboard heading
623
+ #. @context: Dashboard navigation - URL redirects
624
+ #. @context: Dashboard page title
625
+ msgid "Redirects"
626
+ msgstr "重定向"
627
+
628
+ #: src/routes/dash/collections.tsx:184
629
+ #. @context: Button to remove post from collection
630
+ msgid "Remove"
631
+ msgstr "移除"
632
+
633
+ #: src/routes/dash/settings.tsx:63
634
+ #. @context: Button to save settings
635
+ msgid "Save Settings"
636
+ msgstr "保存设置"
637
+
638
+ #: src/routes/pages/search.tsx:53
639
+ #: src/routes/pages/search.tsx:72
640
+ #. @context: Search page title
641
+ #. @context: Search submit button
642
+ msgid "Search"
643
+ msgstr "搜索"
644
+
645
+ #: src/routes/pages/search.tsx:49
646
+ #. @context: Search error message
647
+ msgid "Search failed. Please try again."
648
+ msgstr "搜索失败。请再试一次。"
649
+
650
+ #: src/routes/pages/search.tsx:67
651
+ #. @context: Search input placeholder
652
+ msgid "Search posts..."
653
+ msgstr "搜索帖子..."
654
+
655
+ #: src/routes/dash/settings.tsx:24
656
+ #: src/routes/dash/settings.tsx:25
657
+ #: src/theme/layouts/DashLayout.tsx:33
658
+ #. @context: Dashboard heading
659
+ #. @context: Dashboard navigation - site settings
660
+ #. @context: Dashboard page title
661
+ msgid "Settings"
662
+ msgstr "设置"
663
+
664
+ #: src/app.tsx:125
665
+ #. @context: Setup page title
666
+ msgid "Setup"
667
+ msgstr "设置"
668
+
669
+ #: src/app.tsx:211
670
+ #: src/app.tsx:215
671
+ #: src/app.tsx:228
672
+ #. @context: Sign in form submit button
673
+ #. @context: Sign in page heading
674
+ #. @context: Sign in page title
675
+ msgid "Sign In"
676
+ msgstr "登录"
677
+
678
+ #: src/theme/layouts/DashLayout.tsx:64
679
+ #. @context: Dashboard header link to sign out
680
+ msgid "Sign Out"
681
+ msgstr "登出"
682
+
683
+ #: src/routes/dash/settings.tsx:39
684
+ #. @context: Settings form field
685
+ msgid "Site Description"
686
+ msgstr "网站描述"
687
+
688
+ #: src/app.tsx:136
689
+ #: src/routes/dash/settings.tsx:34
690
+ #. @context: Settings form field
691
+ #. @context: Setup form field - site name
692
+ msgid "Site Name"
693
+ msgstr "网站名称"
694
+
695
+ #: src/routes/dash/collections.tsx:79
696
+ #: src/routes/dash/collections.tsx:226
697
+ #. @context: Collection form field
698
+ #. @context: Collection form field
699
+ msgid "Slug"
700
+ msgstr "缩略名"
701
+
702
+ #: src/theme/components/PostForm.tsx:73
703
+ #. @context: Post form field
704
+ msgid "Source URL (optional)"
705
+ msgstr "源网址(可选)"
706
+
707
+ #: src/theme/components/PageForm.tsx:90
708
+ #. @context: Page form field label - publish status
709
+ msgid "Status"
710
+ msgstr "状态"
711
+
712
+ #: src/routes/dash/media.tsx:67
713
+ #. @context: Media upload instructions - supported formats
714
+ msgid "Supported formats: JPEG, PNG, GIF, WebP, SVG. Max size: 10MB."
715
+ msgstr "支持的格式:JPEG、PNG、GIF、WebP、SVG。最大大小:10MB。"
716
+
717
+ #: src/routes/dash/redirects.tsx:89
718
+ #. @context: Redirect to path help text
719
+ msgid "The destination path or URL"
720
+ msgstr "目标路径或 URL"
721
+
722
+ #: src/routes/dash/redirects.tsx:77
723
+ #. @context: Redirect from path help text
724
+ msgid "The path to redirect from"
725
+ msgstr "重定向的路径"
726
+
727
+ #: src/theme/components/PageForm.tsx:68
728
+ #. @context: Page path helper text
729
+ msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
730
+ msgstr "此页面的 URL 路径。使用小写字母、数字和连字符。"
731
+
732
+ #: src/theme/components/ThreadView.tsx:58
733
+ #. @context: Thread view indicator - first post in thread
734
+ msgid "Thread start"
735
+ msgstr "线程开始"
736
+
737
+ #: src/theme/components/ThreadView.tsx:92
738
+ #. @context: Thread view header - multiple posts
739
+ msgid "Thread with {count} posts"
740
+ msgstr "包含 {count} 条帖子的话题"
741
+
742
+ #: src/theme/components/ThreadView.tsx:91
743
+ #. @context: Thread view header - single post
744
+ msgid "Thread with 1 post"
745
+ msgstr "包含 1 条帖子的话题"
746
+
747
+ #: src/routes/dash/collections.tsx:74
748
+ #: src/routes/dash/collections.tsx:221
749
+ #: src/theme/components/PageForm.tsx:37
750
+ #. @context: Collection form field
751
+ #. @context: Collection form field
752
+ #. @context: Page form field label - title
753
+ msgid "Title"
754
+ msgstr "标题"
755
+
756
+ #: src/theme/components/PostForm.tsx:48
757
+ #. @context: Post form field
758
+ msgid "Title (optional)"
759
+ msgstr "标题(可选)"
760
+
761
+ #: src/routes/dash/redirects.tsx:81
762
+ #. @context: Redirect form field
763
+ msgid "To Path"
764
+ msgstr "到路径"
765
+
766
+ #: src/routes/dash/redirects.tsx:93
767
+ #: src/theme/components/PostForm.tsx:26
768
+ #. @context: Post form field - post type
769
+ #. @context: Redirect form field
770
+ msgid "Type"
771
+ msgstr "类型"
772
+
773
+ #: src/theme/components/PostForm.tsx:94
774
+ #: src/theme/components/PostList.tsx:30
775
+ #. @context: Post visibility badge - unlisted
776
+ #. @context: Post visibility option
777
+ msgid "Unlisted"
778
+ msgstr "未列出"
779
+
780
+ #: src/routes/dash/pages.tsx:72
781
+ #: src/theme/components/PostList.tsx:79
782
+ #. @context: Default title for untitled page
783
+ #. @context: Default title for untitled post
784
+ msgid "Untitled"
785
+ msgstr "无标题"
786
+
787
+ #: src/theme/components/PostForm.tsx:117
788
+ #. @context: Button to update existing post
789
+ msgid "Update"
790
+ msgstr "更新"
791
+
792
+ #: src/routes/dash/collections.tsx:246
793
+ #. @context: Button to save collection changes
794
+ msgid "Update Collection"
795
+ msgstr "更新收藏夹"
796
+
797
+ #: src/theme/components/PageForm.tsx:109
798
+ #. @context: Button to update existing page
799
+ msgid "Update Page"
800
+ msgstr "更新页面"
801
+
802
+ #: src/routes/dash/media.tsx:50
803
+ #. @context: Button to upload media file
804
+ msgid "Upload"
805
+ msgstr "上传"
806
+
807
+ #: src/routes/dash/media.tsx:64
808
+ #. @context: Media upload instructions - API usage
809
+ msgid "Upload images via the API: POST /api/upload with a file form field."
810
+ msgstr "通过 API 上传图像:POST /api/upload,使用文件表单字段。"
811
+
812
+ #: src/routes/dash/media.tsx:169
813
+ #. @context: Media detail section - URL
814
+ msgid "URL"
815
+ msgstr "网址"
816
+
817
+ #: src/routes/dash/collections.tsx:89
818
+ #. @context: Collection path help text
819
+ msgid "URL-safe identifier (lowercase, numbers, hyphens)"
820
+ msgstr "URL安全标识符(小写字母、数字、连字符)"
821
+
822
+ #: src/routes/dash/media.tsx:188
823
+ #. @context: Media URL helper text
824
+ msgid "Use this URL to embed the media in your posts."
825
+ msgstr "使用此 URL 将媒体嵌入到您的帖子中。"
826
+
827
+ #: src/routes/dash/collections.tsx:52
828
+ #: src/routes/dash/collections.tsx:153
829
+ #: src/routes/dash/pages.tsx:87
830
+ #: src/routes/dash/pages.tsx:161
831
+ #: src/routes/dash/posts.tsx:97
832
+ #: src/theme/components/PostList.tsx:95
833
+ #. @context: Button to view collection
834
+ #. @context: Button to view collection
835
+ #. @context: Button to view page on public site
836
+ #. @context: Button to view page on public site
837
+ #. @context: Button to view post
838
+ #. @context: Button to view post on public site
839
+ msgid "View"
840
+ msgstr "查看"
841
+
842
+ #: src/routes/pages/home.tsx:80
843
+ #. @context: Link to view all posts on archive page
844
+ msgid "View all posts →"
845
+ msgstr "查看所有帖子 →"
846
+
847
+ #: src/theme/layouts/DashLayout.tsx:61
848
+ #. @context: Dashboard header link to view the public site
849
+ msgid "View Site"
850
+ msgstr "查看网站"
851
+
852
+ #: src/theme/components/PostForm.tsx:85
853
+ #. @context: Post form field
854
+ msgid "Visibility"
855
+ msgstr "可见性"
856
+
857
+ #: src/app.tsx:129
858
+ #. @context: Setup page welcome heading
859
+ msgid "Welcome to Jant"
860
+ msgstr "欢迎来到Jant"
861
+
862
+ #: src/theme/components/PostForm.tsx:64
863
+ #. @context: Post content placeholder
864
+ msgid "What's on your mind?"
865
+ msgstr "你在想什么?"
866
+
867
+ #: src/routes/dash/collections.tsx:95
868
+ #. @context: Collection description placeholder
869
+ msgid "What's this collection about?"
870
+ msgstr "这个系列是关于什么的?"
871
+
872
+ #: src/app.tsx:140
873
+ #. @context: Setup form field - user name
874
+ msgid "Your Name"
875
+ msgstr "您的姓名"