@jant/core 0.3.34 → 0.3.36

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 (156) hide show
  1. package/dist/client/assets/module-RjUF93sV.js +716 -0
  2. package/dist/client/assets/native-48B9X9Wg.js +1 -0
  3. package/dist/client/assets/url-8Dj-5CLW.js +1 -0
  4. package/dist/client/client.css +1 -1
  5. package/dist/client/client.js +3109 -2294
  6. package/dist/index.js +3327 -3031
  7. package/package.json +13 -4
  8. package/src/__tests__/helpers/app.ts +1 -1
  9. package/src/__tests__/helpers/db.ts +6 -0
  10. package/src/app.tsx +1 -5
  11. package/src/{lib → client}/avatar-upload.ts +1 -1
  12. package/src/{lib → client}/collection-form-bridge.ts +2 -2
  13. package/src/{ui → client}/components/__tests__/jant-collection-form.test.ts +26 -9
  14. package/src/{ui → client}/components/__tests__/jant-compose-dialog.test.ts +46 -14
  15. package/src/{ui → client}/components/__tests__/jant-compose-editor.test.ts +64 -24
  16. package/src/{ui → client}/components/__tests__/jant-post-form.test.ts +24 -14
  17. package/src/{ui → client}/components/__tests__/jant-settings-general.test.ts +3 -3
  18. package/src/client/components/collection-sidebar-types.ts +45 -0
  19. package/src/{ui → client}/components/collection-types.ts +3 -4
  20. package/src/{ui → client}/components/compose-types.ts +3 -1
  21. package/src/{ui → client}/components/jant-collection-form.ts +301 -182
  22. package/src/client/components/jant-collection-sidebar.ts +801 -0
  23. package/src/{ui → client}/components/jant-compose-dialog.ts +231 -1
  24. package/src/client/components/jant-compose-editor.ts +1249 -0
  25. package/src/client/components/jant-compose-fullscreen.ts +338 -0
  26. package/src/client/components/jant-media-lightbox.ts +257 -0
  27. package/src/{ui → client}/components/jant-nav-manager.ts +143 -84
  28. package/src/{ui → client}/components/jant-post-form.ts +57 -8
  29. package/src/{ui → client}/components/jant-settings-general.ts +2 -2
  30. package/src/{ui → client}/components/nav-manager-types.ts +3 -0
  31. package/src/{ui → client}/components/post-form-template.ts +35 -31
  32. package/src/{ui → client}/components/post-form-types.ts +7 -3
  33. package/src/{lib → client}/compose-bridge.ts +9 -7
  34. package/src/client/lazy-slugify.ts +51 -0
  35. package/src/{lib → client}/media-upload.ts +16 -3
  36. package/src/{lib → client}/nav-manager-bridge.ts +1 -1
  37. package/src/client/page-slug-bridge.ts +42 -0
  38. package/src/{lib → client}/post-form-bridge.ts +2 -2
  39. package/src/{lib → client}/settings-bridge.ts +3 -3
  40. package/src/client/tiptap/bubble-menu.ts +205 -0
  41. package/src/client/tiptap/create-editor.ts +40 -0
  42. package/src/client/tiptap/exitable-marks.ts +73 -0
  43. package/src/client/tiptap/extensions.ts +60 -0
  44. package/src/client/tiptap/image-node.ts +488 -0
  45. package/src/client/tiptap/link-toolbar.ts +371 -0
  46. package/src/client/tiptap/more-break.ts +50 -0
  47. package/src/client/tiptap/paste-image.ts +140 -0
  48. package/src/client/tiptap/slash-commands.ts +328 -0
  49. package/src/{types → client/types}/sortablejs.d.ts +1 -1
  50. package/src/client.ts +24 -17
  51. package/src/db/migrations/0012_add_tiptap_columns.sql +2 -0
  52. package/src/db/migrations/0013_replace_featured_with_visibility.sql +8 -0
  53. package/src/db/schema.ts +6 -1
  54. package/src/i18n/locales/en.po +641 -215
  55. package/src/i18n/locales/en.ts +1 -1
  56. package/src/i18n/locales/zh-Hans.po +642 -204
  57. package/src/i18n/locales/zh-Hans.ts +1 -1
  58. package/src/i18n/locales/zh-Hant.po +642 -204
  59. package/src/i18n/locales/zh-Hant.ts +1 -1
  60. package/src/lib/__tests__/resolve-config.test.ts +2 -2
  61. package/src/lib/__tests__/schemas.test.ts +9 -6
  62. package/src/lib/__tests__/url.test.ts +2 -2
  63. package/src/lib/__tests__/view.test.ts +9 -9
  64. package/src/lib/emoji-catalog.ts +146 -0
  65. package/src/lib/feed.ts +1 -1
  66. package/src/lib/media-helpers.ts +10 -9
  67. package/src/lib/render.tsx +4 -3
  68. package/src/lib/resolve-config.ts +8 -1
  69. package/src/lib/schemas.ts +2 -3
  70. package/src/lib/summary.ts +92 -0
  71. package/src/lib/timeline.ts +2 -0
  72. package/src/lib/tiptap-render.ts +196 -0
  73. package/src/lib/upload.ts +97 -9
  74. package/src/lib/url.ts +7 -23
  75. package/src/lib/view.ts +33 -19
  76. package/src/middleware/error-handler.ts +3 -3
  77. package/src/preset.css +38 -0
  78. package/src/routes/api/collections.ts +20 -3
  79. package/src/routes/api/posts.ts +48 -33
  80. package/src/routes/api/upload.ts +7 -5
  81. package/src/routes/auth/reset.tsx +5 -4
  82. package/src/routes/auth/setup.tsx +26 -11
  83. package/src/routes/auth/signin.tsx +10 -7
  84. package/src/routes/compose.tsx +20 -11
  85. package/src/routes/dash/__tests__/settings-avatar.test.ts +43 -8
  86. package/src/routes/dash/index.tsx +7 -1
  87. package/src/routes/dash/media.tsx +3 -0
  88. package/src/routes/dash/pages.tsx +8 -2
  89. package/src/routes/dash/posts.tsx +6 -2
  90. package/src/routes/dash/redirects.tsx +15 -9
  91. package/src/routes/dash/settings.tsx +336 -32
  92. package/src/routes/feed/__tests__/rss.test.ts +245 -6
  93. package/src/routes/feed/rss.ts +70 -6
  94. package/src/routes/pages/__tests__/featured.test.ts +6 -7
  95. package/src/routes/pages/archive.tsx +11 -7
  96. package/src/routes/pages/collection.tsx +32 -15
  97. package/src/routes/pages/collections.tsx +11 -2
  98. package/src/routes/pages/featured.tsx +1 -1
  99. package/src/routes/pages/home.tsx +1 -1
  100. package/src/services/__tests__/post.test.ts +124 -33
  101. package/src/services/__tests__/settings.test.ts +3 -3
  102. package/src/services/page.ts +16 -3
  103. package/src/services/post.ts +96 -37
  104. package/src/services/search.ts +4 -2
  105. package/src/services/settings.ts +6 -2
  106. package/src/styles/components.css +240 -60
  107. package/src/styles/tokens.css +10 -0
  108. package/src/styles/ui.css +1157 -81
  109. package/src/types/bindings.ts +5 -0
  110. package/src/types/config.ts +23 -1
  111. package/src/types/constants.ts +3 -0
  112. package/src/types/entities.ts +9 -2
  113. package/src/types/operations.ts +9 -3
  114. package/src/types/props.ts +3 -3
  115. package/src/types/views.ts +3 -2
  116. package/src/ui/compose/ComposeDialog.tsx +24 -7
  117. package/src/ui/dash/PageForm.tsx +2 -0
  118. package/src/ui/dash/PostList.tsx +5 -5
  119. package/src/ui/dash/StatusBadge.tsx +13 -5
  120. package/src/ui/dash/appearance/AdvancedContent.tsx +52 -61
  121. package/src/ui/dash/appearance/ColorThemeContent.tsx +30 -35
  122. package/src/ui/dash/appearance/FontThemeContent.tsx +65 -73
  123. package/src/ui/dash/appearance/NavigationContent.tsx +107 -96
  124. package/src/ui/dash/media/MediaListContent.tsx +9 -4
  125. package/src/ui/dash/media/ViewMediaContent.tsx +2 -2
  126. package/src/ui/dash/pages/PagesContent.tsx +2 -1
  127. package/src/ui/dash/posts/PostForm.tsx +19 -7
  128. package/src/ui/dash/settings/AccountContent.tsx +133 -138
  129. package/src/ui/dash/settings/AvatarContent.tsx +70 -0
  130. package/src/ui/dash/settings/GeneralContent.tsx +3 -62
  131. package/src/ui/dash/settings/SettingsRootContent.tsx +236 -0
  132. package/src/ui/layouts/DashLayout.tsx +157 -75
  133. package/src/ui/layouts/SiteLayout.tsx +13 -13
  134. package/src/ui/pages/ArchivePage.tsx +10 -7
  135. package/src/ui/pages/CollectionPage.tsx +6 -35
  136. package/src/ui/pages/CollectionsPage.tsx +2 -1
  137. package/src/ui/pages/FeaturedPage.tsx +2 -1
  138. package/src/ui/pages/HomePage.tsx +1 -1
  139. package/src/ui/pages/SearchPage.tsx +1 -1
  140. package/src/ui/shared/CollectionsSidebar.tsx +228 -3
  141. package/src/ui/shared/MediaGallery.tsx +179 -41
  142. package/src/lib/collections-reorder.ts +0 -28
  143. package/src/routes/dash/appearance.tsx +0 -240
  144. package/src/routes/dash/collections.tsx +0 -211
  145. package/src/ui/components/jant-compose-editor.ts +0 -814
  146. package/src/ui/dash/appearance/AppearanceNav.tsx +0 -60
  147. package/src/ui/dash/collections/CollectionForm.tsx +0 -166
  148. package/src/ui/dash/collections/CollectionsListContent.tsx +0 -146
  149. package/src/ui/dash/collections/IconPickerGrid.tsx +0 -50
  150. package/src/ui/dash/collections/ViewCollectionContent.tsx +0 -103
  151. package/src/ui/dash/settings/SettingsNav.tsx +0 -52
  152. /package/src/{ui → client}/components/__tests__/jant-settings-avatar.test.ts +0 -0
  153. /package/src/{ui → client}/components/jant-settings-avatar.ts +0 -0
  154. /package/src/{ui → client}/components/settings-types.ts +0 -0
  155. /package/src/{lib → client}/image-processor.ts +0 -0
  156. /package/src/{lib → client}/toast.ts +0 -0
@@ -20,8 +20,8 @@ msgstr "/* 您的自定义 CSS 在这里 */"
20
20
 
21
21
  #. @context: Navigation link
22
22
  #: src/ui/dash/collections/ViewCollectionContent.tsx
23
- msgid "← Back to Collections"
24
- msgstr "← 返回收藏夹"
23
+ #~ msgid "← Back to Collections"
24
+ #~ msgstr "← 返回收藏夹"
25
25
 
26
26
  #. @context: Add alt text label under attachment thumbnail
27
27
  #: src/ui/compose/ComposeDialog.tsx
@@ -38,6 +38,11 @@ msgstr "301(永久)"
38
38
  msgid "302 (Temporary)"
39
39
  msgstr "302(临时)"
40
40
 
41
+ #. @context: Error toast when display name is empty
42
+ #: src/routes/dash/settings.tsx
43
+ msgid "A display name is required."
44
+ msgstr ""
45
+
41
46
  #. @context: Help text for site description field
42
47
  #: src/ui/dash/settings/GeneralContent.tsx
43
48
  msgid "A short intro for search engines and feed readers. Plain text only."
@@ -48,8 +53,10 @@ msgstr "搜索引擎和订阅阅读器的简短介绍。仅限纯文本。"
48
53
  msgid "About this blog"
49
54
  msgstr "关于这个博客"
50
55
 
51
- #. @context: Settings sub-navigation tab
52
- #: src/ui/dash/settings/SettingsNav.tsx
56
+ #. @context: Settings group label for account settings
57
+ #. @context: Settings item — account settings
58
+ #: src/ui/dash/settings/SettingsRootContent.tsx
59
+ #: src/ui/dash/settings/SettingsRootContent.tsx
53
60
  msgid "Account"
54
61
  msgstr "账户"
55
62
 
@@ -83,6 +90,11 @@ msgstr "添加自定义 CSS 以覆盖任何样式。使用数据属性,如 [da
83
90
  msgid "Add custom link to navigation"
84
91
  msgstr ""
85
92
 
93
+ #. @context: Menu action to add a divider
94
+ #: src/ui/shared/CollectionsSidebar.tsx
95
+ msgid "Add Divider"
96
+ msgstr ""
97
+
86
98
  #. @context: Button and heading for adding custom link
87
99
  #: src/ui/dash/appearance/NavigationContent.tsx
88
100
  msgid "Add Link"
@@ -93,6 +105,11 @@ msgstr "添加链接"
93
105
  msgid "Add Media"
94
106
  msgstr "添加媒体"
95
107
 
108
+ #. @context: Add more attachments button
109
+ #: src/ui/compose/ComposeDialog.tsx
110
+ #~ msgid "Add More"
111
+ #~ msgstr ""
112
+
96
113
  #. @context: Card title for adding page to nav
97
114
  #: src/ui/dash/appearance/NavigationContent.tsx
98
115
  #~ msgid "Add Page"
@@ -108,8 +125,8 @@ msgstr ""
108
125
  #~ msgid "Add to navigation"
109
126
  #~ msgstr "添加到导航"
110
127
 
111
- #. @context: Appearance sub-navigation tab
112
- #: src/ui/dash/appearance/AppearanceNav.tsx
128
+ #. @context: Settings group label for advanced settings
129
+ #: src/ui/dash/settings/SettingsRootContent.tsx
113
130
  msgid "Advanced"
114
131
  msgstr "高级"
115
132
 
@@ -130,23 +147,28 @@ msgstr ""
130
147
 
131
148
  #. @context: Hint text in alt text panel
132
149
  #: src/ui/compose/ComposeDialog.tsx
133
- msgid "Alt text improves accessibility"
134
- msgstr "替代文本提高可访问性"
150
+ #~ msgid "Alt text improves accessibility"
151
+ #~ msgstr "替代文本提高可访问性"
135
152
 
136
153
  #. @context: Dashboard navigation - appearance settings
137
154
  #: src/ui/layouts/DashLayout.tsx
138
- msgid "Appearance"
139
- msgstr "外观"
155
+ #~ msgid "Appearance"
156
+ #~ msgstr "外观"
140
157
 
141
158
  #. @context: Archive page title
142
159
  #: src/ui/pages/ArchivePage.tsx
143
160
  msgid "Archive"
144
161
  msgstr "档案馆"
145
162
 
163
+ #. @context: Confirm dialog for deleting a collection
164
+ #: src/ui/shared/CollectionsSidebar.tsx
165
+ #~ msgid "Are you sure you want to delete this collection?"
166
+ #~ msgstr ""
167
+
146
168
  #. @context: Confirmation dialog when deleting a post from the list
147
169
  #: src/ui/dash/PostList.tsx
148
- msgid "Are you sure you want to delete this post? This cannot be undone."
149
- msgstr "您确定要删除此帖子吗?此操作无法撤销。"
170
+ #~ msgid "Are you sure you want to delete this post? This cannot be undone."
171
+ #~ msgstr "您确定要删除此帖子吗?此操作无法撤销。"
150
172
 
151
173
  #. @context: Attached text panel title
152
174
  #: src/ui/compose/ComposeDialog.tsx
@@ -155,33 +177,60 @@ msgstr "附加文本"
155
177
 
156
178
  #. @context: Error toast when authentication system is unavailable
157
179
  #: src/routes/auth/signin.tsx
158
- msgid "Auth not configured"
159
- msgstr "身份验证未配置"
180
+ #~ msgid "Auth not configured"
181
+ #~ msgstr "身份验证未配置"
182
+
183
+ #. @context: Error toast when authentication secret is missing from server config
184
+ #: src/routes/auth/setup.tsx
185
+ msgid "Auth secret is missing. Check your environment variables."
186
+ msgstr ""
160
187
 
161
188
  #. @context: Error toast when authentication secret is missing from server config
162
189
  #: src/routes/auth/setup.tsx
163
- msgid "AUTH_SECRET not configured"
164
- msgstr "AUTH_SECRET 未配置"
190
+ #~ msgid "AUTH_SECRET not configured"
191
+ #~ msgstr "AUTH_SECRET 未配置"
192
+
193
+ #. @context: Error toast when authentication system is unavailable
194
+ #: src/routes/auth/signin.tsx
195
+ msgid "Authentication isn't set up. Check your server config."
196
+ msgstr ""
165
197
 
166
198
  #. @context: Compose quote author placeholder
167
199
  #: src/ui/compose/ComposeDialog.tsx
168
200
  msgid "Author (optional)"
169
201
  msgstr "作者(可选)"
170
202
 
203
+ #. @context: Settings item — avatar settings
204
+ #: src/ui/dash/settings/SettingsRootContent.tsx
205
+ msgid "Avatar"
206
+ msgstr ""
207
+
171
208
  #. @context: Toast after saving avatar display preference
172
209
  #. @context: Toast after saving avatar display preference
173
210
  #: src/routes/dash/settings.tsx
174
211
  #: src/routes/dash/settings.tsx
175
- msgid "Avatar display setting saved successfully."
176
- msgstr "头像显示设置已成功保存。"
212
+ #~ msgid "Avatar display setting saved successfully."
213
+ #~ msgstr "头像显示设置已成功保存。"
214
+
215
+ #. @context: Toast after saving avatar display preference
216
+ #. @context: Toast after saving avatar display preference
217
+ #: src/routes/dash/settings.tsx
218
+ #: src/routes/dash/settings.tsx
219
+ msgid "Avatar display updated."
220
+ msgstr ""
177
221
 
178
222
  #. @context: Button to go back to media list
179
223
  #: src/ui/dash/media/ViewMediaContent.tsx
180
224
  msgid "Back"
181
225
  msgstr "返回"
182
226
 
227
+ #. @context: Dashboard header link to go back to the public site
228
+ #: src/ui/layouts/DashLayout.tsx
229
+ #~ msgid "Back to site"
230
+ #~ msgstr ""
231
+
183
232
  #. @context: Settings section heading for avatar
184
- #: src/ui/dash/settings/GeneralContent.tsx
233
+ #: src/ui/dash/settings/AvatarContent.tsx
185
234
  msgid "Blog Avatar"
186
235
  msgstr "博客头像"
187
236
 
@@ -193,10 +242,10 @@ msgstr "博客头像"
193
242
  #. @context: Close compose dialog
194
243
  #: src/routes/dash/redirects.tsx
195
244
  #: src/ui/compose/ComposeDialog.tsx
196
- #: src/ui/dash/collections/CollectionForm.tsx
197
245
  #: src/ui/dash/PageForm.tsx
198
246
  #: src/ui/dash/posts/PostForm.tsx
199
247
  #: src/ui/dash/settings/GeneralContent.tsx
248
+ #: src/ui/shared/CollectionsSidebar.tsx
200
249
  msgid "Cancel"
201
250
  msgstr "取消"
202
251
 
@@ -212,6 +261,11 @@ msgstr "更改密码"
212
261
  msgid "Choose a font pairing for your site. All options use system fonts for fast loading."
213
262
  msgstr "选择一个字体搭配用于您的网站。所有选项都使用系统字体以实现快速加载。"
214
263
 
264
+ #. @context: Password reset page description
265
+ #: src/routes/auth/reset.tsx
266
+ msgid "Choose a new password."
267
+ msgstr ""
268
+
215
269
  #. @context: Placeholder for page select combobox trigger
216
270
  #: src/ui/dash/appearance/NavigationContent.tsx
217
271
  msgid "Choose a page…"
@@ -219,20 +273,25 @@ msgstr ""
219
273
 
220
274
  #. @context: Button to open icon picker
221
275
  #. @context: Icon picker dialog title
222
- #: src/ui/dash/collections/CollectionForm.tsx
223
- #: src/ui/dash/collections/CollectionForm.tsx
224
- msgid "Choose Icon"
225
- msgstr "选择图标"
276
+ #: src/ui/shared/CollectionsSidebar.tsx
277
+ #: src/ui/shared/CollectionsSidebar.tsx
278
+ #~ msgid "Choose Icon"
279
+ #~ msgstr "选择图标"
226
280
 
227
281
  #. @context: Hint to click image for lightbox
228
282
  #: src/ui/dash/media/ViewMediaContent.tsx
229
283
  msgid "Click image to view full size"
230
284
  msgstr "点击图片查看完整尺寸"
231
285
 
286
+ #. @context: Tooltip hint on failed upload overlay, tells user clicking retries all failed uploads
287
+ #: src/ui/compose/ComposeDialog.tsx
288
+ msgid "Click to retry all"
289
+ msgstr ""
290
+
232
291
  #. @context: Button to close icon picker
233
- #: src/ui/dash/collections/CollectionForm.tsx
234
- msgid "Close"
235
- msgstr "关闭"
292
+ #: src/ui/shared/CollectionsSidebar.tsx
293
+ #~ msgid "Close"
294
+ #~ msgstr "关闭"
236
295
 
237
296
  #. @context: Compose collection selector trigger label
238
297
  #: src/ui/compose/ComposeDialog.tsx
@@ -240,11 +299,11 @@ msgid "Collection"
240
299
  msgstr "集合"
241
300
 
242
301
  #. @context: Collections page heading
243
- #. @context: Dashboard heading
244
302
  #. @context: Sidebar heading for collections nav
245
- #: src/ui/dash/collections/CollectionsListContent.tsx
303
+ #. @context: Sidebar heading for collections nav
246
304
  #: src/ui/pages/CollectionsPage.tsx
247
305
  #: src/ui/shared/CollectionsSidebar.tsx
306
+ #: src/ui/shared/CollectionsSidebar.tsx
248
307
  msgid "Collections"
249
308
  msgstr "收藏夹"
250
309
 
@@ -254,12 +313,14 @@ msgid "Collections (optional)"
254
313
  msgstr "集合(可选)"
255
314
 
256
315
  #. @context: Appearance settings heading
316
+ #. @context: Settings item description for color theme
257
317
  #: src/ui/dash/appearance/ColorThemeContent.tsx
318
+ #: src/ui/dash/settings/SettingsRootContent.tsx
258
319
  msgid "Color theme"
259
320
  msgstr "颜色主题"
260
321
 
261
- #. @context: Appearance sub-navigation tab
262
- #: src/ui/dash/appearance/AppearanceNav.tsx
322
+ #. @context: Settings item — color theme settings
323
+ #: src/ui/dash/settings/SettingsRootContent.tsx
263
324
  msgid "Color Theme"
264
325
  msgstr "颜色主题"
265
326
 
@@ -292,10 +353,44 @@ msgstr "内容"
292
353
  msgid "Copy"
293
354
  msgstr "复制"
294
355
 
356
+ #. @context: Error toast when account creation fails
357
+ #. @context: Error toast when account creation fails
358
+ #: src/routes/auth/setup.tsx
359
+ #: src/routes/auth/setup.tsx
360
+ msgid "Couldn't create your account. Check the details and try again."
361
+ msgstr ""
362
+
363
+ #. @context: Error toast when nav delete fails
364
+ #: src/ui/dash/appearance/NavigationContent.tsx
365
+ msgid "Couldn't delete. Try again in a moment."
366
+ msgstr ""
367
+
368
+ #. @context: Toast when post save fails
369
+ #: src/ui/dash/posts/PostForm.tsx
370
+ msgid "Couldn't save your post. Try again in a moment."
371
+ msgstr ""
372
+
373
+ #. @context: Error toast when nav save fails
374
+ #. @context: Toast when save fails
375
+ #: src/ui/dash/appearance/NavigationContent.tsx
376
+ #: src/ui/shared/CollectionsSidebar.tsx
377
+ msgid "Couldn't save. Try again in a moment."
378
+ msgstr ""
379
+
380
+ #. @context: Error toast when profile update fails
381
+ #: src/routes/dash/settings.tsx
382
+ msgid "Couldn't update your profile. Try again in a moment."
383
+ msgstr ""
384
+
295
385
  #. @context: Button to save new collection
296
386
  #: src/ui/dash/collections/CollectionForm.tsx
297
- msgid "Create Collection"
298
- msgstr "创建集合"
387
+ #~ msgid "Create Collection"
388
+ #~ msgstr "创建集合"
389
+
390
+ #. @context: Link at bottom of page combobox to create a new page
391
+ #: src/ui/dash/appearance/NavigationContent.tsx
392
+ msgid "Create page"
393
+ msgstr ""
299
394
 
300
395
  #. @context: Button to create new page
301
396
  #: src/ui/dash/PageForm.tsx
@@ -314,8 +409,8 @@ msgstr "创建您的管理员账户。"
314
409
 
315
410
  #. @context: Button in empty state to create first post
316
411
  #: src/ui/dash/PostList.tsx
317
- msgid "Create your first post"
318
- msgstr "创建你的第一篇帖子"
412
+ #~ msgid "Create your first post"
413
+ #~ msgstr "创建你的第一篇帖子"
319
414
 
320
415
  #. @context: Password form field
321
416
  #: src/ui/dash/settings/AccountContent.tsx
@@ -324,18 +419,35 @@ msgstr "当前密码"
324
419
 
325
420
  #. @context: Error toast when current password verification fails
326
421
  #: src/routes/dash/settings.tsx
327
- msgid "Current password is incorrect."
328
- msgstr "当前密码不正确。"
422
+ msgid "Current password doesn't match. Try again."
423
+ msgstr ""
424
+
425
+ #. @context: Error toast when current password verification fails
426
+ #: src/routes/dash/settings.tsx
427
+ #~ msgid "Current password is incorrect."
428
+ #~ msgstr "当前密码不正确。"
329
429
 
330
430
  #. @context: Appearance settings heading for custom CSS
431
+ #. @context: Settings item — custom CSS settings
331
432
  #: src/ui/dash/appearance/AdvancedContent.tsx
433
+ #: src/ui/dash/settings/SettingsRootContent.tsx
332
434
  msgid "Custom CSS"
333
435
  msgstr "自定义 CSS"
334
436
 
335
437
  #. @context: Toast after saving custom CSS
336
- #: src/routes/dash/appearance.tsx
337
- msgid "Custom CSS saved successfully."
338
- msgstr "自定义 CSS 保存成功。"
438
+ #: src/routes/dash/settings.tsx
439
+ #~ msgid "Custom CSS saved successfully."
440
+ #~ msgstr "自定义 CSS 保存成功。"
441
+
442
+ #. @context: Toast after saving custom CSS
443
+ #: src/routes/dash/settings.tsx
444
+ msgid "Custom CSS updated."
445
+ msgstr ""
446
+
447
+ #. @context: Settings item description for custom CSS
448
+ #: src/ui/dash/settings/SettingsRootContent.tsx
449
+ msgid "Custom styling"
450
+ msgstr ""
339
451
 
340
452
  #. @context: Section heading for dangerous/destructive actions
341
453
  #: src/ui/dash/DangerZone.tsx
@@ -343,7 +455,9 @@ msgid "Danger Zone"
343
455
  msgstr "危险区域"
344
456
 
345
457
  #. @context: Dashboard main heading
458
+ #. @context: Dashboard navigation - dashboard home
346
459
  #: src/routes/dash/index.tsx
460
+ #: src/ui/layouts/DashLayout.tsx
347
461
  msgid "Dashboard"
348
462
  msgstr "仪表板"
349
463
 
@@ -354,10 +468,12 @@ msgstr "仪表板"
354
468
 
355
469
  #. @context: Button to delete item
356
470
  #. @context: Button to delete redirect
471
+ #. @context: Delete collection action
357
472
  #. @context: Delete nav item
358
473
  #: src/routes/dash/redirects.tsx
359
474
  #: src/ui/dash/ActionButtons.tsx
360
475
  #: src/ui/dash/appearance/NavigationContent.tsx
476
+ #: src/ui/shared/CollectionsSidebar.tsx
361
477
  msgid "Delete"
362
478
  msgstr "删除"
363
479
 
@@ -371,15 +487,35 @@ msgstr "删除媒体"
371
487
  msgid "Delete Page"
372
488
  msgstr "删除页面"
373
489
 
490
+ #. @context: Confirm dialog for deleting a collection
491
+ #: src/ui/shared/CollectionsSidebar.tsx
492
+ msgid "Delete this collection permanently? Posts inside won't be removed."
493
+ msgstr ""
494
+
495
+ #. @context: Confirmation dialog when deleting a post from the list
496
+ #: src/ui/dash/PostList.tsx
497
+ msgid "Delete this post permanently? This can't be undone."
498
+ msgstr ""
499
+
500
+ #. @context: Toast after deleting a collection
501
+ #: src/ui/shared/CollectionsSidebar.tsx
502
+ msgid "Deleted"
503
+ msgstr ""
504
+
374
505
  #. @context: Warning message before deleting media
375
506
  #: src/ui/dash/media/ViewMediaContent.tsx
376
- msgid "Deleting this media will remove it permanently from storage."
377
- msgstr "删除此媒体将永久从存储中移除。"
507
+ #~ msgid "Deleting this media will remove it permanently from storage."
508
+ #~ msgstr "删除此媒体将永久从存储中移除。"
378
509
 
379
510
  #. @context: Hint shown on signin page when demo credentials are pre-filled
380
511
  #: src/routes/auth/signin.tsx
381
- msgid "Demo account pre-filled. Just click Sign In."
382
- msgstr "演示账户已预填。只需点击登录。"
512
+ #~ msgid "Demo account pre-filled. Just click Sign In."
513
+ #~ msgstr "演示账户已预填。只需点击登录。"
514
+
515
+ #. @context: Hint shown on signin page when demo credentials are pre-filled
516
+ #: src/routes/auth/signin.tsx
517
+ msgid "Demo credentials are pre-filled — hit Sign In to continue."
518
+ msgstr ""
383
519
 
384
520
  #. @context: Alt text textarea placeholder
385
521
  #: src/ui/compose/ComposeDialog.tsx
@@ -387,17 +523,22 @@ msgid "Describe this for people with visual impairments..."
387
523
  msgstr "为视力障碍人士描述这一内容..."
388
524
 
389
525
  #. @context: Collection form field
390
- #: src/ui/dash/collections/CollectionForm.tsx
526
+ #: src/ui/shared/CollectionsSidebar.tsx
391
527
  msgid "Description (optional)"
392
528
  msgstr "描述(可选)"
393
529
 
530
+ #. @context: Settings group label for design settings
531
+ #: src/ui/dash/settings/SettingsRootContent.tsx
532
+ msgid "Design"
533
+ msgstr ""
534
+
394
535
  #. @context: More menu - discard post
395
536
  #: src/ui/compose/ComposeDialog.tsx
396
537
  msgid "Discard"
397
538
  msgstr "丢弃"
398
539
 
399
540
  #. @context: Checkbox to show avatar in the site header
400
- #: src/ui/dash/settings/GeneralContent.tsx
541
+ #: src/ui/dash/settings/AvatarContent.tsx
401
542
  msgid "Display avatar in my site header"
402
543
  msgstr "在我的网站头部显示头像"
403
544
 
@@ -406,10 +547,12 @@ msgstr "在我的网站头部显示头像"
406
547
  msgid "Displayed at the bottom of all posts and pages. Markdown supported."
407
548
  msgstr "显示在所有帖子和页面的底部。支持Markdown。"
408
549
 
550
+ #. @context: Button to exit reorder mode
409
551
  #. @context: Close attached text panel
410
552
  #. @context: Close media picker button
411
553
  #: src/ui/compose/ComposeDialog.tsx
412
554
  #: src/ui/dash/posts/PostForm.tsx
555
+ #: src/ui/shared/CollectionsSidebar.tsx
413
556
  msgid "Done"
414
557
  msgstr "完成"
415
558
 
@@ -434,27 +577,25 @@ msgstr "草稿已保存。"
434
577
  msgid "Drafts"
435
578
  msgstr "草稿"
436
579
 
437
- #. @context: Button to edit collection
438
- #. @context: Button to edit collection
439
580
  #. @context: Button to edit item
440
581
  #. @context: Button to edit page
441
582
  #. @context: Button to edit page
442
583
  #. @context: Button to edit post
443
584
  #. @context: Button to edit post
585
+ #. @context: Per-collection edit action
444
586
  #: src/routes/dash/pages.tsx
445
587
  #: src/routes/dash/posts.tsx
446
588
  #: src/ui/dash/ActionButtons.tsx
447
- #: src/ui/dash/collections/CollectionsListContent.tsx
448
- #: src/ui/dash/collections/ViewCollectionContent.tsx
449
589
  #: src/ui/dash/pages/PagesContent.tsx
450
590
  #: src/ui/dash/PostList.tsx
591
+ #: src/ui/shared/CollectionsSidebar.tsx
451
592
  msgid "Edit"
452
593
  msgstr "编辑"
453
594
 
454
595
  #. @context: Page heading
455
596
  #: src/ui/dash/collections/CollectionForm.tsx
456
- msgid "Edit Collection"
457
- msgstr "编辑集合"
597
+ #~ msgid "Edit Collection"
598
+ #~ msgstr "编辑集合"
458
599
 
459
600
  #. @context: Edit page main heading
460
601
  #. @context: Link to edit the page
@@ -475,10 +616,20 @@ msgstr "编辑帖子"
475
616
  msgid "Email"
476
617
  msgstr "电子邮件"
477
618
 
619
+ #. @context: Compose toolbar - emoji picker tooltip
620
+ #: src/ui/compose/ComposeDialog.tsx
621
+ msgid "Emoji"
622
+ msgstr ""
623
+
624
+ #. @context: Emoji picker tab label
625
+ #: src/ui/shared/CollectionsSidebar.tsx
626
+ msgid "Emojis"
627
+ msgstr ""
628
+
478
629
  #. @context: Password reset page description
479
630
  #: src/routes/auth/reset.tsx
480
- msgid "Enter your new password."
481
- msgstr "输入您的新密码。"
631
+ #~ msgid "Enter your new password."
632
+ #~ msgstr "输入您的新密码。"
482
633
 
483
634
  #. @context: Plural entry count label
484
635
  #: src/ui/pages/CollectionsPage.tsx
@@ -494,28 +645,33 @@ msgstr "条目"
494
645
  #. @context: Error toast when account creation fails
495
646
  #: src/routes/auth/setup.tsx
496
647
  #: src/routes/auth/setup.tsx
497
- msgid "Failed to create account"
498
- msgstr "创建账户失败"
648
+ #~ msgid "Failed to create account"
649
+ #~ msgstr "创建账户失败"
499
650
 
500
651
  #. @context: Error toast when nav delete fails
501
652
  #: src/ui/dash/appearance/NavigationContent.tsx
502
- msgid "Failed to delete. Please try again."
503
- msgstr "删除失败。请再试一次。"
653
+ #~ msgid "Failed to delete. Please try again."
654
+ #~ msgstr "删除失败。请再试一次。"
504
655
 
505
656
  #. @context: Toast when post save fails
506
657
  #: src/ui/dash/posts/PostForm.tsx
507
- msgid "Failed to save post. Please try again."
508
- msgstr "保存帖子失败。请再试一次。"
658
+ #~ msgid "Failed to save post. Please try again."
659
+ #~ msgstr "保存帖子失败。请再试一次。"
509
660
 
510
661
  #. @context: Error toast when nav save fails
511
662
  #: src/ui/dash/appearance/NavigationContent.tsx
512
- msgid "Failed to save. Please try again."
513
- msgstr "保存失败。请再试一次。"
663
+ #~ msgid "Failed to save. Please try again."
664
+ #~ msgstr "保存失败。请再试一次。"
514
665
 
515
666
  #. @context: Error toast when profile update fails
516
667
  #: src/routes/dash/settings.tsx
517
- msgid "Failed to update profile."
518
- msgstr "更新个人资料失败。"
668
+ #~ msgid "Failed to update profile."
669
+ #~ msgstr "更新个人资料失败。"
670
+
671
+ #. @context: Settings item description for avatar
672
+ #: src/ui/dash/settings/SettingsRootContent.tsx
673
+ msgid "Favicon and header icon"
674
+ msgstr ""
519
675
 
520
676
  #. @context: Archive filter - featured posts
521
677
  #. @context: Browse filter for featured posts
@@ -523,7 +679,7 @@ msgstr "更新个人资料失败。"
523
679
  #. @context: Browse filter label
524
680
  #. @context: Browse filter label for featured posts
525
681
  #. @context: Post badge - featured
526
- #. @context: Post form checkbox - mark as featured
682
+ #. @context: Visibility option - highlighted on featured page
527
683
  #: src/ui/dash/appearance/NavigationContent.tsx
528
684
  #: src/ui/dash/appearance/NavigationContent.tsx
529
685
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -534,13 +690,25 @@ msgstr "更新个人资料失败。"
534
690
  msgid "Featured"
535
691
  msgstr "精选"
536
692
 
693
+ #. @context: Error toast when file storage is not set up
694
+ #. @context: Error when file storage is not set up
695
+ #: src/routes/api/upload.ts
696
+ #: src/routes/dash/settings.tsx
697
+ msgid "File storage isn't set up. Check your server config."
698
+ msgstr ""
699
+
700
+ #. @context: Toast after successful file upload
701
+ #: src/routes/api/upload.ts
702
+ msgid "File uploaded."
703
+ msgstr ""
704
+
537
705
  #. @context: Appearance settings heading for font theme
538
706
  #: src/ui/dash/appearance/FontThemeContent.tsx
539
707
  msgid "Font theme"
540
708
  msgstr "字体主题"
541
709
 
542
- #. @context: Appearance sub-navigation tab
543
- #: src/ui/dash/appearance/AppearanceNav.tsx
710
+ #. @context: Settings item — font theme settings
711
+ #: src/ui/dash/settings/SettingsRootContent.tsx
544
712
  msgid "Font Theme"
545
713
  msgstr "字体主题"
546
714
 
@@ -565,10 +733,10 @@ msgstr "找到 1 个结果"
565
733
  msgid "From Path"
566
734
  msgstr "来源路径"
567
735
 
736
+ #. @context: Settings item — general settings
568
737
  #. @context: Settings section heading
569
- #. @context: Settings sub-navigation tab
570
738
  #: src/ui/dash/settings/GeneralContent.tsx
571
- #: src/ui/dash/settings/SettingsNav.tsx
739
+ #: src/ui/dash/settings/SettingsRootContent.tsx
572
740
  msgid "General"
573
741
  msgstr "常规"
574
742
 
@@ -577,8 +745,18 @@ msgstr "常规"
577
745
  msgid "Give it a title..."
578
746
  msgstr "给它一个标题..."
579
747
 
748
+ #. @context: Settings item description for navigation
749
+ #: src/ui/dash/settings/SettingsRootContent.tsx
750
+ msgid "Header links, featured"
751
+ msgstr ""
752
+
753
+ #. @context: Hint text in alt text panel
754
+ #: src/ui/compose/ComposeDialog.tsx
755
+ msgid "Helps screen readers describe the image"
756
+ msgstr ""
757
+
580
758
  #. @context: Collection sort order option
581
- #: src/ui/dash/collections/CollectionForm.tsx
759
+ #: src/ui/shared/CollectionsSidebar.tsx
582
760
  msgid "Highest rated"
583
761
  msgstr "最高评分"
584
762
 
@@ -588,49 +766,51 @@ msgid "Home view saved"
588
766
  msgstr ""
589
767
 
590
768
  #. @context: Collection form field
591
- #: src/ui/dash/collections/CollectionForm.tsx
592
- msgid "Icon (optional)"
593
- msgstr "图标(可选)"
769
+ #: src/ui/shared/CollectionsSidebar.tsx
770
+ #~ msgid "Icon (optional)"
771
+ #~ msgstr "图标(可选)"
772
+
773
+ #. @context: Icon picker tab label
774
+ #: src/ui/shared/CollectionsSidebar.tsx
775
+ msgid "Icons"
776
+ msgstr ""
777
+
778
+ #. @context: Media upload instructions - auto optimization
779
+ #: src/ui/dash/media/MediaListContent.tsx
780
+ msgid "Images are automatically optimized (resized, converted to WebP). Video, audio, and PDF files are uploaded as-is (max 200MB)."
781
+ msgstr ""
594
782
 
595
783
  #. @context: Media upload instructions - auto optimization
596
784
  #: src/ui/dash/media/MediaListContent.tsx
597
- msgid "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
598
- msgstr "图像会自动优化:调整大小至最大 1920px,转换为 WebP,并去除元数据。"
785
+ #~ msgid "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
786
+ #~ msgstr "图像会自动优化:调整大小至最大 1920px,转换为 WebP,并去除元数据。"
599
787
 
600
788
  #. @context: Error toast when sign-in credentials are wrong
601
789
  #: src/routes/auth/signin.tsx
602
- msgid "Invalid email or password"
603
- msgstr "无效的电子邮件或密码"
790
+ #~ msgid "Invalid email or password"
791
+ #~ msgstr "无效的电子邮件或密码"
604
792
 
605
793
  #. @context: Error toast when selected font theme is not valid
606
- #: src/routes/dash/appearance.tsx
607
- msgid "Invalid font theme selected."
608
- msgstr "所选字体主题无效。"
794
+ #: src/routes/dash/settings.tsx
795
+ #~ msgid "Invalid font theme selected."
796
+ #~ msgstr "所选字体主题无效。"
609
797
 
610
- #. @context: Fallback validation error for compose form
611
798
  #. @context: Fallback validation error for page form
612
799
  #. @context: Fallback validation error for page form
613
- #. @context: Fallback validation error for password reset form
614
- #. @context: Fallback validation error for setup form
615
- #. @context: Fallback validation error for sign-in form
616
- #: src/routes/auth/reset.tsx
617
- #: src/routes/auth/setup.tsx
618
- #: src/routes/auth/signin.tsx
619
- #: src/routes/compose.tsx
620
800
  #: src/routes/dash/pages.tsx
621
801
  #: src/routes/dash/pages.tsx
622
- msgid "Invalid input"
623
- msgstr "无效输入"
802
+ #~ msgid "Invalid input"
803
+ #~ msgstr "无效输入"
624
804
 
625
805
  #. @context: Password reset error heading
626
806
  #: src/routes/auth/reset.tsx
627
- msgid "Invalid or Expired Link"
628
- msgstr "无效或过期的链接"
807
+ #~ msgid "Invalid or Expired Link"
808
+ #~ msgstr "无效或过期的链接"
629
809
 
630
810
  #. @context: Error toast when selected theme is not valid
631
- #: src/routes/dash/appearance.tsx
632
- msgid "Invalid theme selected."
633
- msgstr "所选主题无效。"
811
+ #: src/routes/dash/settings.tsx
812
+ #~ msgid "Invalid theme selected."
813
+ #~ msgstr "所选主题无效。"
634
814
 
635
815
  #. @context: Checkbox for allowing search engine indexing
636
816
  #: src/ui/dash/settings/GeneralContent.tsx
@@ -689,6 +869,16 @@ msgstr "链接"
689
869
  msgid "Links"
690
870
  msgstr "链接"
691
871
 
872
+ #. @context: Label for max visible nav links number input
873
+ #: src/ui/dash/appearance/NavigationContent.tsx
874
+ msgid "Links shown in header"
875
+ msgstr ""
876
+
877
+ #. @context: Visibility option - appears everywhere
878
+ #: src/ui/dash/posts/PostForm.tsx
879
+ msgid "Listed"
880
+ msgstr ""
881
+
692
882
  #. @context: Pagination button - load more items
693
883
  #: src/ui/shared/Pagination.tsx
694
884
  msgid "Load more"
@@ -705,7 +895,7 @@ msgid "Lowercase letters, numbers, and hyphens only"
705
895
  msgstr "仅允许小写字母、数字和连字符"
706
896
 
707
897
  #. @context: Collection sort order option
708
- #: src/ui/dash/collections/CollectionForm.tsx
898
+ #: src/ui/shared/CollectionsSidebar.tsx
709
899
  msgid "Lowest rated"
710
900
  msgstr "最低评分"
711
901
 
@@ -721,8 +911,8 @@ msgstr "支持Markdown"
721
911
 
722
912
  #. @context: Label for max visible nav links number input
723
913
  #: src/ui/dash/appearance/NavigationContent.tsx
724
- msgid "Max visible links"
725
- msgstr ""
914
+ #~ msgid "Max visible links"
915
+ #~ msgstr ""
726
916
 
727
917
  #. @context: Toast after saving max visible nav links setting
728
918
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -748,13 +938,18 @@ msgstr "媒体"
748
938
  msgid "Menu"
749
939
  msgstr "菜单"
750
940
 
941
+ #. @context: Aria-label for more button
942
+ #: src/ui/shared/CollectionsSidebar.tsx
943
+ msgid "More actions"
944
+ msgstr ""
945
+
751
946
  #. @context: Button to show overflow nav links
752
947
  #: src/ui/layouts/SiteLayout.tsx
753
948
  msgid "More links"
754
949
  msgstr "更多链接"
755
950
 
756
951
  #. @context: Collection title placeholder
757
- #: src/ui/dash/collections/CollectionForm.tsx
952
+ #: src/ui/shared/CollectionsSidebar.tsx
758
953
  msgid "My Collection"
759
954
  msgstr "我的收藏"
760
955
 
@@ -765,11 +960,16 @@ msgstr "姓名"
765
960
 
766
961
  #. @context: Error toast when display name is empty
767
962
  #: src/routes/dash/settings.tsx
768
- msgid "Name is required."
769
- msgstr "名称是必需的。"
963
+ #~ msgid "Name is required."
964
+ #~ msgstr "名称是必需的。"
965
+
966
+ #. @context: Settings item description for general
967
+ #: src/ui/dash/settings/SettingsRootContent.tsx
968
+ msgid "Name, description, language"
969
+ msgstr ""
770
970
 
771
- #. @context: Appearance sub-navigation tab
772
- #: src/ui/dash/appearance/AppearanceNav.tsx
971
+ #. @context: Settings item — navigation settings
972
+ #: src/ui/dash/settings/SettingsRootContent.tsx
773
973
  msgid "Navigation"
774
974
  msgstr "导航"
775
975
 
@@ -778,24 +978,27 @@ msgstr "导航"
778
978
  msgid "Navigation items"
779
979
  msgstr "导航项"
780
980
 
981
+ #. @context: Label for nav preview section
982
+ #. @context: Label for nav preview section
983
+ #: src/ui/dash/appearance/NavigationContent.tsx
984
+ #: src/ui/dash/appearance/NavigationContent.tsx
985
+ msgid "Navigation Preview"
986
+ msgstr ""
987
+
781
988
  #. @context: Help text with link
782
989
  #: src/routes/dash/index.tsx
783
990
  msgid "Need help? Visit the <0>documentation</0>"
784
991
  msgstr "需要帮助吗?访问<0>文档</0>。"
785
992
 
786
- #. @context: Button to create new collection
787
- #. @context: Button to create new collection
788
- #. @context: Page heading
789
- #: src/ui/dash/collections/CollectionForm.tsx
790
- #: src/ui/dash/collections/CollectionsListContent.tsx
791
- #: src/ui/dash/collections/CollectionsListContent.tsx
993
+ #. @context: Tooltip/aria for add collection button
994
+ #: src/ui/shared/CollectionsSidebar.tsx
792
995
  msgid "New Collection"
793
996
  msgstr "新收藏"
794
997
 
795
998
  #. @context: Button to add divider between collections
796
999
  #: src/ui/dash/collections/CollectionsListContent.tsx
797
- msgid "New Divider"
798
- msgstr "新分隔符"
1000
+ #~ msgid "New Divider"
1001
+ #~ msgstr "新分隔符"
799
1002
 
800
1003
  #. @context: Button to create new page
801
1004
  #. @context: New page main heading
@@ -830,7 +1033,7 @@ msgid "New Redirect"
830
1033
  msgstr "新重定向"
831
1034
 
832
1035
  #. @context: Collection sort order option
833
- #: src/ui/dash/collections/CollectionForm.tsx
1036
+ #: src/ui/shared/CollectionsSidebar.tsx
834
1037
  msgid "Newest first"
835
1038
  msgstr "最新优先"
836
1039
 
@@ -843,40 +1046,70 @@ msgstr "下一页"
843
1046
 
844
1047
  #. @context: Compose collection combobox empty state
845
1048
  #: src/ui/compose/ComposeDialog.tsx
846
- msgid "No collections found."
847
- msgstr "未找到任何收藏。"
1049
+ #~ msgid "No collections found."
1050
+ #~ msgstr "未找到任何收藏。"
848
1051
 
849
- #. @context: Empty state message
850
1052
  #. @context: Empty state message on collections page
851
- #: src/ui/dash/collections/CollectionsListContent.tsx
852
1053
  #: src/ui/pages/CollectionsPage.tsx
853
- msgid "No collections yet."
854
- msgstr "尚未有任何收藏。"
1054
+ #~ msgid "No collections yet."
1055
+ #~ msgstr "尚未有任何收藏。"
1056
+
1057
+ #. @context: Empty state message on collections page
1058
+ #: src/ui/pages/CollectionsPage.tsx
1059
+ msgid "No collections yet. Start one to organize posts by topic."
1060
+ msgstr ""
1061
+
1062
+ #. @context: Empty state message on featured page
1063
+ #: src/ui/pages/FeaturedPage.tsx
1064
+ #~ msgid "No featured posts yet."
1065
+ #~ msgstr "尚无精选帖子。"
855
1066
 
856
1067
  #. @context: Empty state message on featured page
857
1068
  #: src/ui/pages/FeaturedPage.tsx
858
- msgid "No featured posts yet."
859
- msgstr "尚无精选帖子。"
1069
+ msgid "No featured posts. Mark a post as featured to highlight it here."
1070
+ msgstr ""
860
1071
 
861
1072
  #. @context: Error when no file was selected for upload
862
1073
  #: src/routes/api/upload.ts
863
- msgid "No file provided"
864
- msgstr "未提供文件"
1074
+ #~ msgid "No file provided"
1075
+ #~ msgstr "未提供文件"
1076
+
1077
+ #. @context: Error toast when no file was selected for upload
1078
+ #: src/routes/dash/settings.tsx
1079
+ #~ msgid "No file provided."
1080
+ #~ msgstr "未提供文件。"
865
1081
 
866
1082
  #. @context: Error toast when no file was selected for upload
1083
+ #. @context: Error when no file was selected for upload
1084
+ #: src/routes/api/upload.ts
867
1085
  #: src/routes/dash/settings.tsx
868
- msgid "No file provided."
869
- msgstr "未提供文件。"
1086
+ msgid "No file selected. Choose a file to upload."
1087
+ msgstr ""
1088
+
1089
+ #. @context: Compose collection combobox empty state
1090
+ #: src/ui/compose/ComposeDialog.tsx
1091
+ msgid "No matching collections."
1092
+ msgstr ""
1093
+
1094
+ #. @context: Empty state when page search has no results
1095
+ #: src/ui/dash/appearance/NavigationContent.tsx
1096
+ msgid "No matching pages."
1097
+ msgstr ""
1098
+
1099
+ #. @context: Post form media empty state
1100
+ #: src/ui/dash/posts/PostForm.tsx
1101
+ msgid "No media attached."
1102
+ msgstr ""
870
1103
 
871
1104
  #. @context: Post form media empty state
872
1105
  #: src/ui/dash/posts/PostForm.tsx
873
- msgid "No media selected yet."
874
- msgstr "尚未选择任何媒体。"
1106
+ #~ msgid "No media selected yet."
1107
+ #~ msgstr "尚未选择任何媒体。"
875
1108
 
876
1109
  #. @context: Empty state message when no media exists
877
1110
  #: src/ui/dash/media/MediaListContent.tsx
878
- msgid "No media uploaded yet."
879
- msgstr "尚未上传任何媒体。"
1111
+ #~ msgid "No media uploaded yet."
1112
+ #~ msgstr "尚未上传任何媒体。"
880
1113
 
881
1114
  #. @context: Empty state for navigation items
882
1115
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -885,42 +1118,58 @@ msgstr "尚未有导航项。请在下面添加页面、链接或启用系统项
885
1118
 
886
1119
  #. @context: Empty state when page search has no results
887
1120
  #: src/ui/dash/appearance/NavigationContent.tsx
888
- msgid "No pages found."
1121
+ #~ msgid "No pages found."
1122
+ #~ msgstr ""
1123
+
1124
+ #. @context: Empty state for pages list
1125
+ #: src/ui/dash/pages/PagesContent.tsx
1126
+ msgid "No pages yet. Create one to add static content to your site."
889
1127
  msgstr ""
890
1128
 
891
1129
  #. @context: Empty state for pages list
892
1130
  #: src/ui/dash/pages/PagesContent.tsx
893
- msgid "No pages yet. Create your first page to get started."
894
- msgstr "还没有页面。创建您的第一个页面以开始。"
1131
+ #~ msgid "No pages yet. Create your first page to get started."
1132
+ #~ msgstr "还没有页面。创建您的第一个页面以开始。"
895
1133
 
896
1134
  #. @context: Archive empty state
897
1135
  #: src/ui/pages/ArchivePage.tsx
898
- msgid "No posts found."
899
- msgstr "未找到帖子。"
1136
+ #~ msgid "No posts found."
1137
+ #~ msgstr "未找到帖子。"
900
1138
 
901
1139
  #. @context: Empty state message
902
- #. @context: Empty state message
903
- #: src/ui/dash/collections/ViewCollectionContent.tsx
904
1140
  #: src/ui/pages/CollectionPage.tsx
905
- msgid "No posts in this collection."
906
- msgstr "此集合中没有帖子。"
1141
+ #~ msgid "No posts in this collection."
1142
+ #~ msgstr "此集合中没有帖子。"
1143
+
1144
+ #. @context: Archive empty state
1145
+ #: src/ui/pages/ArchivePage.tsx
1146
+ msgid "No posts match this filter."
1147
+ msgstr ""
907
1148
 
908
1149
  #. @context: Empty state message on home page
909
- #. @context: Empty state message when no posts exist
910
- #: src/ui/dash/PostList.tsx
911
1150
  #: src/ui/pages/HomePage.tsx
912
- msgid "No posts yet."
913
- msgstr "还没有帖子。"
1151
+ #~ msgid "No posts yet."
1152
+ #~ msgstr "还没有帖子。"
914
1153
 
915
1154
  #. @context: Empty state message
916
1155
  #: src/routes/dash/redirects.tsx
917
- msgid "No redirects configured."
918
- msgstr "未配置重定向。"
1156
+ #~ msgid "No redirects configured."
1157
+ #~ msgstr "未配置重定向。"
1158
+
1159
+ #. @context: Empty state message
1160
+ #: src/routes/dash/redirects.tsx
1161
+ msgid "No redirects yet. Create one to forward traffic from old URLs."
1162
+ msgstr ""
919
1163
 
920
1164
  #. @context: Search empty results
921
1165
  #: src/ui/pages/SearchPage.tsx
922
- msgid "No results found."
923
- msgstr "未找到结果。"
1166
+ #~ msgid "No results found."
1167
+ #~ msgstr "未找到结果。"
1168
+
1169
+ #. @context: Search empty results
1170
+ #: src/ui/pages/SearchPage.tsx
1171
+ msgid "No results. Try different keywords."
1172
+ msgstr ""
924
1173
 
925
1174
  #. @context: Compose format tab
926
1175
  #. @context: Post format badge - note
@@ -938,13 +1187,30 @@ msgstr "注意"
938
1187
  msgid "Notes"
939
1188
  msgstr "笔记"
940
1189
 
1190
+ #. @context: Empty state message on home page
1191
+ #: src/ui/pages/HomePage.tsx
1192
+ msgid "Nothing here yet."
1193
+ msgstr ""
1194
+
1195
+ #. @context: Empty state message when no posts exist
1196
+ #: src/ui/dash/PostList.tsx
1197
+ msgid "Nothing published yet. Write your first post to get started."
1198
+ msgstr ""
1199
+
941
1200
  #. @context: Collection sort order option
942
- #: src/ui/dash/collections/CollectionForm.tsx
1201
+ #: src/ui/shared/CollectionsSidebar.tsx
943
1202
  msgid "Oldest first"
944
1203
  msgstr "最旧的在前"
945
1204
 
1205
+ #. @context: Switch label for setting featured posts as default homepage
1206
+ #: src/ui/dash/appearance/NavigationContent.tsx
1207
+ msgid "Open with Featured posts"
1208
+ msgstr ""
1209
+
1210
+ #. @context: Toast after reordering collections
946
1211
  #. @context: Toast after saving navigation item order
947
1212
  #: src/ui/dash/appearance/NavigationContent.tsx
1213
+ #: src/ui/shared/CollectionsSidebar.tsx
948
1214
  msgid "Order saved"
949
1215
  msgstr "已保存顺序"
950
1216
 
@@ -989,13 +1255,23 @@ msgstr "密码"
989
1255
 
990
1256
  #. @context: Toast after changing account password
991
1257
  #: src/routes/dash/settings.tsx
992
- msgid "Password changed successfully."
993
- msgstr "密码更改成功。"
1258
+ #~ msgid "Password changed successfully."
1259
+ #~ msgstr "密码更改成功。"
1260
+
1261
+ #. @context: Toast after changing account password
1262
+ #: src/routes/dash/settings.tsx
1263
+ msgid "Password changed."
1264
+ msgstr ""
994
1265
 
995
1266
  #. @context: Error toast when new password and confirmation differ
996
1267
  #: src/routes/dash/settings.tsx
997
- msgid "Passwords do not match."
998
- msgstr "密码不匹配。"
1268
+ #~ msgid "Passwords do not match."
1269
+ #~ msgstr "密码不匹配。"
1270
+
1271
+ #. @context: Error toast when new password and confirmation differ
1272
+ #: src/routes/dash/settings.tsx
1273
+ msgid "Passwords don't match. Make sure both fields are identical."
1274
+ msgstr ""
999
1275
 
1000
1276
  #. @context: Attached text placeholder
1001
1277
  #: src/ui/compose/ComposeDialog.tsx
@@ -1036,8 +1312,13 @@ msgstr "帖子"
1036
1312
 
1037
1313
  #. @context: Toast after creating post
1038
1314
  #: src/ui/dash/posts/PostForm.tsx
1039
- msgid "Post published successfully."
1040
- msgstr "帖子发布成功。"
1315
+ #~ msgid "Post published successfully."
1316
+ #~ msgstr "帖子发布成功。"
1317
+
1318
+ #. @context: Toast after creating post
1319
+ #: src/ui/dash/posts/PostForm.tsx
1320
+ msgid "Post published."
1321
+ msgstr ""
1041
1322
 
1042
1323
  #. @context: Post title placeholder
1043
1324
  #: src/ui/dash/posts/PostForm.tsx
@@ -1046,8 +1327,13 @@ msgstr "帖子标题..."
1046
1327
 
1047
1328
  #. @context: Toast after editing post
1048
1329
  #: src/ui/dash/posts/PostForm.tsx
1049
- msgid "Post updated successfully."
1050
- msgstr "帖子更新成功。"
1330
+ #~ msgid "Post updated successfully."
1331
+ #~ msgstr "帖子更新成功。"
1332
+
1333
+ #. @context: Toast after editing post
1334
+ #: src/ui/dash/posts/PostForm.tsx
1335
+ msgid "Post updated."
1336
+ msgstr ""
1051
1337
 
1052
1338
  #. @context: Dashboard heading
1053
1339
  #: src/routes/dash/posts.tsx
@@ -1056,14 +1342,10 @@ msgstr "帖子"
1056
1342
 
1057
1343
  #. @context: Collection posts section heading
1058
1344
  #: src/ui/dash/collections/ViewCollectionContent.tsx
1059
- msgid "Posts in Collection ({count})"
1060
- msgstr "集合中的帖子 ({count})"
1345
+ #~ msgid "Posts in Collection ({count})"
1346
+ #~ msgstr "集合中的帖子 ({count})"
1061
1347
 
1062
- #. @context: Label for nav preview section
1063
- #. @context: Label for nav preview section
1064
1348
  #. @context: Media detail section - preview
1065
- #: src/ui/dash/appearance/NavigationContent.tsx
1066
- #: src/ui/dash/appearance/NavigationContent.tsx
1067
1349
  #: src/ui/dash/media/ViewMediaContent.tsx
1068
1350
  msgid "Preview"
1069
1351
  msgstr "预览"
@@ -1078,7 +1360,7 @@ msgstr "上一页"
1078
1360
  #. @context: Avatar upload button text while generating favicon variants
1079
1361
  #. @context: Upload status - processing
1080
1362
  #: src/ui/dash/media/MediaListContent.tsx
1081
- #: src/ui/dash/settings/GeneralContent.tsx
1363
+ #: src/ui/dash/settings/AvatarContent.tsx
1082
1364
  msgid "Processing..."
1083
1365
  msgstr "处理中..."
1084
1366
 
@@ -1089,8 +1371,18 @@ msgstr "个人资料"
1089
1371
 
1090
1372
  #. @context: Toast after saving user profile
1091
1373
  #: src/routes/dash/settings.tsx
1092
- msgid "Profile saved successfully."
1093
- msgstr "个人资料保存成功。"
1374
+ #~ msgid "Profile saved successfully."
1375
+ #~ msgstr "个人资料保存成功。"
1376
+
1377
+ #. @context: Toast after saving user profile
1378
+ #: src/routes/dash/settings.tsx
1379
+ msgid "Profile updated."
1380
+ msgstr ""
1381
+
1382
+ #. @context: Settings item description for account
1383
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1384
+ msgid "Profile, password"
1385
+ msgstr ""
1094
1386
 
1095
1387
  #. @context: Button to publish new post
1096
1388
  #: src/ui/dash/posts/PostForm.tsx
@@ -1144,10 +1436,15 @@ msgstr "引用文本"
1144
1436
  msgid "Quotes"
1145
1437
  msgstr "引用"
1146
1438
 
1439
+ #. @context: Compose toolbar - rate tooltip
1440
+ #: src/ui/compose/ComposeDialog.tsx
1441
+ msgid "Rate"
1442
+ msgstr "评分"
1443
+
1444
+ #. @context: Settings item — redirects settings
1147
1445
  #. @context: Settings section heading
1148
- #. @context: Settings sub-navigation tab
1149
1446
  #: src/routes/dash/redirects.tsx
1150
- #: src/ui/dash/settings/SettingsNav.tsx
1447
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1151
1448
  msgid "Redirects"
1152
1449
  msgstr "重定向"
1153
1450
 
@@ -1156,16 +1453,26 @@ msgstr "重定向"
1156
1453
  #. @context: Remove media attachment button
1157
1454
  #. @context: Remove page from navigation
1158
1455
  #: src/ui/dash/appearance/NavigationContent.tsx
1159
- #: src/ui/dash/collections/CollectionForm.tsx
1160
1456
  #: src/ui/dash/posts/PostForm.tsx
1161
- #: src/ui/dash/settings/GeneralContent.tsx
1457
+ #: src/ui/dash/settings/AvatarContent.tsx
1458
+ #: src/ui/shared/CollectionsSidebar.tsx
1162
1459
  msgid "Remove"
1163
1460
  msgstr "移除"
1164
1461
 
1165
1462
  #. @context: Button to delete a divider
1166
1463
  #: src/ui/dash/collections/CollectionsListContent.tsx
1167
- msgid "Remove divider"
1168
- msgstr "移除分隔符"
1464
+ #~ msgid "Remove divider"
1465
+ #~ msgstr "移除分隔符"
1466
+
1467
+ #. @context: Tooltip for divider delete button
1468
+ #: src/ui/shared/CollectionsSidebar.tsx
1469
+ msgid "Remove Divider"
1470
+ msgstr ""
1471
+
1472
+ #. @context: Menu action to reorder collections
1473
+ #: src/ui/shared/CollectionsSidebar.tsx
1474
+ msgid "Reorder"
1475
+ msgstr ""
1169
1476
 
1170
1477
  #. @context: Password reset form submit button
1171
1478
  #. @context: Password reset page heading
@@ -1174,10 +1481,12 @@ msgstr "移除分隔符"
1174
1481
  msgid "Reset Password"
1175
1482
  msgstr "重置密码"
1176
1483
 
1484
+ #. @context: Button to save collection
1177
1485
  #. @context: Button to save settings
1178
1486
  #. @context: Save nav item changes
1179
1487
  #: src/ui/dash/appearance/NavigationContent.tsx
1180
1488
  #: src/ui/dash/settings/GeneralContent.tsx
1489
+ #: src/ui/shared/CollectionsSidebar.tsx
1181
1490
  msgid "Save"
1182
1491
  msgstr "保存"
1183
1492
 
@@ -1201,10 +1510,10 @@ msgstr "保存 CSS"
1201
1510
  msgid "Save Profile"
1202
1511
  msgstr "保存个人资料"
1203
1512
 
1204
- #. @context: Compose toolbar - score tooltip
1205
- #: src/ui/compose/ComposeDialog.tsx
1206
- msgid "Score"
1207
- msgstr "得分"
1513
+ #. @context: Toast after saving a collection
1514
+ #: src/ui/shared/CollectionsSidebar.tsx
1515
+ msgid "Saved"
1516
+ msgstr ""
1208
1517
 
1209
1518
  #. @context: Search icon link in browse nav
1210
1519
  #. @context: Search page title
@@ -1215,8 +1524,13 @@ msgstr "得分"
1215
1524
  msgid "Search"
1216
1525
  msgstr "搜索"
1217
1526
 
1527
+ #. @context: Emoji picker search placeholder
1528
+ #: src/ui/shared/CollectionsSidebar.tsx
1529
+ msgid "Search emojis..."
1530
+ msgstr ""
1531
+
1218
1532
  #. @context: Icon picker search placeholder
1219
- #: src/ui/dash/collections/CollectionForm.tsx
1533
+ #: src/ui/shared/CollectionsSidebar.tsx
1220
1534
  msgid "Search icons..."
1221
1535
  msgstr "搜索图标..."
1222
1536
 
@@ -1249,20 +1563,32 @@ msgstr "搜索引擎优化"
1249
1563
  #. @context: Toast after saving SEO settings
1250
1564
  #: src/routes/dash/settings.tsx
1251
1565
  #: src/routes/dash/settings.tsx
1252
- msgid "SEO settings saved successfully."
1253
- msgstr "SEO设置已成功保存。"
1566
+ #~ msgid "SEO settings saved successfully."
1567
+ #~ msgstr "SEO设置已成功保存。"
1568
+
1569
+ #. @context: Toast after saving SEO settings
1570
+ #. @context: Toast after saving SEO settings
1571
+ #: src/routes/dash/settings.tsx
1572
+ #: src/routes/dash/settings.tsx
1573
+ msgid "SEO settings updated."
1574
+ msgstr ""
1254
1575
 
1255
1576
  #. @context: Dashboard navigation - site settings
1256
1577
  #: src/ui/layouts/DashLayout.tsx
1257
1578
  msgid "Settings"
1258
1579
  msgstr "设置"
1259
1580
 
1581
+ #. @context: Toast after saving general settings
1582
+ #: src/routes/dash/settings.tsx
1583
+ #~ msgid "Settings saved successfully."
1584
+ #~ msgstr "设置已成功保存。"
1585
+
1260
1586
  #. @context: Toast after saving general settings
1261
1587
  #. @context: Toast after saving general settings
1262
1588
  #: src/routes/dash/settings.tsx
1263
1589
  #: src/routes/dash/settings.tsx
1264
- msgid "Settings saved successfully."
1265
- msgstr "设置已成功保存。"
1590
+ msgid "Settings updated."
1591
+ msgstr ""
1266
1592
 
1267
1593
  #. @context: Link to show remaining thread replies
1268
1594
  #. placeholder {0}: remainingCount === 1 ? "reply" : "replies"
@@ -1282,6 +1608,11 @@ msgstr "登录"
1282
1608
  msgid "Sign Out"
1283
1609
  msgstr "登出"
1284
1610
 
1611
+ #. @context: Settings group label for site settings
1612
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1613
+ msgid "Site"
1614
+ msgstr ""
1615
+
1285
1616
  #. @context: Settings section heading for site footer
1286
1617
  #: src/ui/dash/settings/GeneralContent.tsx
1287
1618
  msgid "Site Footer"
@@ -1294,13 +1625,28 @@ msgstr "网站名称"
1294
1625
 
1295
1626
  #. @context: Collection form field
1296
1627
  #. @context: Page form field label - URL slug
1297
- #: src/ui/dash/collections/CollectionForm.tsx
1298
1628
  #: src/ui/dash/PageForm.tsx
1629
+ #: src/ui/shared/CollectionsSidebar.tsx
1299
1630
  msgid "Slug"
1300
1631
  msgstr "缩略名"
1301
1632
 
1633
+ #. @context: Fallback validation error for compose form
1634
+ #. @context: Fallback validation error for page form
1635
+ #. @context: Fallback validation error for page form
1636
+ #. @context: Fallback validation error for password reset form
1637
+ #. @context: Fallback validation error for setup form
1638
+ #. @context: Fallback validation error for sign-in form
1639
+ #: src/routes/auth/reset.tsx
1640
+ #: src/routes/auth/setup.tsx
1641
+ #: src/routes/auth/signin.tsx
1642
+ #: src/routes/compose.tsx
1643
+ #: src/routes/dash/pages.tsx
1644
+ #: src/routes/dash/pages.tsx
1645
+ msgid "Something doesn't look right. Check the form and try again."
1646
+ msgstr ""
1647
+
1302
1648
  #. @context: Collection form field
1303
- #: src/ui/dash/collections/CollectionForm.tsx
1649
+ #: src/ui/shared/CollectionsSidebar.tsx
1304
1650
  msgid "Sort Order"
1305
1651
  msgstr "排序顺序"
1306
1652
 
@@ -1318,13 +1664,13 @@ msgstr "状态"
1318
1664
 
1319
1665
  #. @context: Error when file storage is not set up
1320
1666
  #: src/routes/api/upload.ts
1321
- msgid "Storage not configured"
1322
- msgstr "存储未配置"
1667
+ #~ msgid "Storage not configured"
1668
+ #~ msgstr "存储未配置"
1323
1669
 
1324
1670
  #. @context: Error toast when file storage is not set up
1325
1671
  #: src/routes/dash/settings.tsx
1326
- msgid "Storage not configured."
1327
- msgstr "存储未配置。"
1672
+ #~ msgid "Storage not configured."
1673
+ #~ msgstr "存储未配置。"
1328
1674
 
1329
1675
  #. @context: Attached text panel hint
1330
1676
  #: src/ui/compose/ComposeDialog.tsx
@@ -1341,6 +1687,16 @@ msgstr "系统"
1341
1687
  msgid "System links"
1342
1688
  msgstr "系统链接"
1343
1689
 
1690
+ #. @context: Error toast when selected font theme is not valid
1691
+ #: src/routes/dash/settings.tsx
1692
+ msgid "That font theme isn't available. Pick another one."
1693
+ msgstr ""
1694
+
1695
+ #. @context: Error toast when selected theme is not valid
1696
+ #: src/routes/dash/settings.tsx
1697
+ msgid "That theme isn't available. Pick another one."
1698
+ msgstr ""
1699
+
1344
1700
  #. @context: Redirect to path help text
1345
1701
  #: src/routes/dash/redirects.tsx
1346
1702
  msgid "The destination path or URL"
@@ -1358,6 +1714,11 @@ msgstr "重定向的路径"
1358
1714
  msgid "The quick brown fox jumps over the lazy dog."
1359
1715
  msgstr "敏捷的棕色狐狸跳过懒狗。"
1360
1716
 
1717
+ #. @context: Description for max visible nav links, explains overflow behavior
1718
+ #: src/ui/dash/appearance/NavigationContent.tsx
1719
+ msgid "The rest will be tucked into a ··· menu"
1720
+ msgstr ""
1721
+
1361
1722
  #. @context: Quote text placeholder
1362
1723
  #: src/ui/dash/posts/PostForm.tsx
1363
1724
  msgid "The text being quoted..."
@@ -1368,15 +1729,35 @@ msgstr "被引用的文本..."
1368
1729
  msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
1369
1730
  msgstr "此页面的 URL 路径。使用小写字母、数字和连字符。"
1370
1731
 
1732
+ #. @context: Empty state message
1733
+ #: src/ui/pages/CollectionPage.tsx
1734
+ msgid "This collection is empty. Add posts from the editor."
1735
+ msgstr ""
1736
+
1737
+ #. @context: Warning message before deleting media
1738
+ #: src/ui/dash/media/ViewMediaContent.tsx
1739
+ msgid "This file will be permanently removed from storage. Posts using it will show a broken link."
1740
+ msgstr ""
1741
+
1371
1742
  #. @context: Help text for avatar upload
1372
- #: src/ui/dash/settings/GeneralContent.tsx
1743
+ #: src/ui/dash/settings/AvatarContent.tsx
1373
1744
  msgid "This is used for your favicon and apple-touch-icon. For best results, upload a square image at least 180x180 pixels."
1374
1745
  msgstr "这用于您的网站图标和苹果触控图标。为了获得最佳效果,请上传至少 180x180 像素的正方形图像。"
1375
1746
 
1747
+ #. @context: Password reset error heading
1748
+ #: src/routes/auth/reset.tsx
1749
+ msgid "This Link Has Expired"
1750
+ msgstr ""
1751
+
1752
+ #. @context: Password reset error description
1753
+ #: src/routes/auth/reset.tsx
1754
+ #~ msgid "This password reset link is invalid or has expired. Please generate a new one."
1755
+ #~ msgstr "此密码重置链接无效或已过期。请生成一个新的链接。"
1756
+
1376
1757
  #. @context: Password reset error description
1377
1758
  #: src/routes/auth/reset.tsx
1378
- msgid "This password reset link is invalid or has expired. Please generate a new one."
1379
- msgstr "此密码重置链接无效或已过期。请生成一个新的链接。"
1759
+ msgid "This reset link is no longer valid. Request a new one to continue."
1760
+ msgstr ""
1380
1761
 
1381
1762
  #. @context: Appearance settings description
1382
1763
  #: src/ui/dash/appearance/ColorThemeContent.tsx
@@ -1409,8 +1790,8 @@ msgstr "时区"
1409
1790
  #. @context: Page form field label - title
1410
1791
  #: src/ui/compose/ComposeDialog.tsx
1411
1792
  #: src/ui/compose/ComposeDialog.tsx
1412
- #: src/ui/dash/collections/CollectionForm.tsx
1413
1793
  #: src/ui/dash/PageForm.tsx
1794
+ #: src/ui/shared/CollectionsSidebar.tsx
1414
1795
  msgid "Title"
1415
1796
  msgstr "标题"
1416
1797
 
@@ -1444,6 +1825,18 @@ msgstr "类型"
1444
1825
  msgid "Type the quote..."
1445
1826
  msgstr "输入引用..."
1446
1827
 
1828
+ #. @context: Settings item description for font theme
1829
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1830
+ msgid "Typography"
1831
+ msgstr ""
1832
+
1833
+ #. @context: Post badge - unlisted
1834
+ #. @context: Visibility option - hidden from feeds
1835
+ #: src/ui/dash/posts/PostForm.tsx
1836
+ #: src/ui/dash/StatusBadge.tsx
1837
+ msgid "Unlisted"
1838
+ msgstr ""
1839
+
1447
1840
  #. @context: Default title for untitled page
1448
1841
  #. @context: Default title for untitled post
1449
1842
  #: src/ui/dash/pages/PagesContent.tsx
@@ -1458,8 +1851,8 @@ msgstr "更新"
1458
1851
 
1459
1852
  #. @context: Button to save collection changes
1460
1853
  #: src/ui/dash/collections/CollectionForm.tsx
1461
- msgid "Update Collection"
1462
- msgstr "更新收藏夹"
1854
+ #~ msgid "Update Collection"
1855
+ #~ msgstr "更新收藏夹"
1463
1856
 
1464
1857
  #. @context: Button to update existing page
1465
1858
  #: src/ui/dash/PageForm.tsx
@@ -1472,32 +1865,35 @@ msgid "Upload"
1472
1865
  msgstr "上传"
1473
1866
 
1474
1867
  #. @context: Button to upload avatar image
1475
- #: src/ui/dash/settings/GeneralContent.tsx
1868
+ #: src/ui/dash/settings/AvatarContent.tsx
1476
1869
  msgid "Upload Avatar"
1477
1870
  msgstr "上传头像"
1478
1871
 
1479
- #. @context: Error message when avatar upload fails
1480
1872
  #. @context: Error toast when avatar upload fails
1481
1873
  #. @context: Error when file upload fails
1482
1874
  #. @context: Upload error message
1483
1875
  #: src/routes/api/upload.ts
1484
1876
  #: src/routes/dash/settings.tsx
1485
1877
  #: src/ui/dash/media/MediaListContent.tsx
1486
- #: src/ui/dash/settings/GeneralContent.tsx
1878
+ msgid "Upload didn't go through. Try again in a moment."
1879
+ msgstr ""
1880
+
1881
+ #. @context: Error message when avatar upload fails
1882
+ #: src/ui/dash/settings/AvatarContent.tsx
1487
1883
  msgid "Upload failed. Please try again."
1488
1884
  msgstr "上传失败。请再试一次。"
1489
1885
 
1490
1886
  #. @context: Toast after successful file upload
1491
1887
  #: src/routes/api/upload.ts
1492
- msgid "Upload successful!"
1493
- msgstr "上传成功!"
1888
+ #~ msgid "Upload successful!"
1889
+ #~ msgstr "上传成功!"
1494
1890
 
1495
1891
  #. @context: Avatar upload button text while uploading
1496
1892
  #. @context: Toast shown during background upload
1497
1893
  #. @context: Upload status - uploading
1498
1894
  #: src/ui/compose/ComposeDialog.tsx
1499
1895
  #: src/ui/dash/media/MediaListContent.tsx
1500
- #: src/ui/dash/settings/GeneralContent.tsx
1896
+ #: src/ui/dash/settings/AvatarContent.tsx
1501
1897
  msgid "Uploading..."
1502
1898
  msgstr "上传中..."
1503
1899
 
@@ -1513,22 +1909,26 @@ msgstr "网址"
1513
1909
  msgid "URL (optional)"
1514
1910
  msgstr "网址(可选)"
1515
1911
 
1912
+ #. @context: Settings item description for redirects
1913
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1914
+ msgid "URL redirects"
1915
+ msgstr ""
1916
+
1516
1917
  #. @context: Collection path help text
1517
- #: src/ui/dash/collections/CollectionForm.tsx
1918
+ #: src/ui/shared/CollectionsSidebar.tsx
1518
1919
  msgid "URL-safe identifier (lowercase, numbers, hyphens). For CJK titles, slug will be auto-generated on the server."
1519
1920
  msgstr "URL安全标识符(小写字母、数字、连字符)。对于CJK标题,slug将在服务器上自动生成。"
1520
1921
 
1521
1922
  #. @context: Switch label for setting featured posts as default homepage
1522
1923
  #: src/ui/dash/appearance/NavigationContent.tsx
1523
- msgid "Use Featured as default home view"
1524
- msgstr ""
1924
+ #~ msgid "Use Featured as default home view"
1925
+ #~ msgstr ""
1525
1926
 
1526
1927
  #. @context: Media URL helper text
1527
1928
  #: src/ui/dash/media/ViewMediaContent.tsx
1528
1929
  msgid "Use this URL to embed the media in your posts."
1529
1930
  msgstr "使用此 URL 将媒体嵌入到您的帖子中。"
1530
1931
 
1531
- #. @context: Button to view collection
1532
1932
  #. @context: Button to view item on public site
1533
1933
  #. @context: Button to view page on public site
1534
1934
  #. @context: Button to view page on public site
@@ -1537,7 +1937,6 @@ msgstr "使用此 URL 将媒体嵌入到您的帖子中。"
1537
1937
  #: src/routes/dash/pages.tsx
1538
1938
  #: src/routes/dash/posts.tsx
1539
1939
  #: src/ui/dash/ActionButtons.tsx
1540
- #: src/ui/dash/collections/ViewCollectionContent.tsx
1541
1940
  #: src/ui/dash/pages/PagesContent.tsx
1542
1941
  #: src/ui/dash/PostList.tsx
1543
1942
  msgid "View"
@@ -1545,8 +1944,27 @@ msgstr "查看"
1545
1944
 
1546
1945
  #. @context: Dashboard header link to view the public site
1547
1946
  #: src/ui/layouts/DashLayout.tsx
1548
- msgid "View Site"
1549
- msgstr "查看网站"
1947
+ #~ msgid "View Site"
1948
+ #~ msgstr "查看网站"
1949
+
1950
+ #. @context: Post form field - post visibility
1951
+ #: src/ui/dash/posts/PostForm.tsx
1952
+ msgid "Visibility"
1953
+ msgstr ""
1954
+
1955
+ #. @context: Dashboard header link text to visit the public blog
1956
+ #. @context: Dashboard header link to visit the public blog
1957
+ #. @context: Dashboard header tooltip for visit blog icon on mobile
1958
+ #: src/ui/layouts/DashLayout.tsx
1959
+ #: src/ui/layouts/DashLayout.tsx
1960
+ #: src/ui/layouts/DashLayout.tsx
1961
+ msgid "Visit Blog"
1962
+ msgstr ""
1963
+
1964
+ #. @context: Dashboard menu item to visit the public site
1965
+ #: src/ui/layouts/DashLayout.tsx
1966
+ #~ msgid "Visit Site"
1967
+ #~ msgstr ""
1550
1968
 
1551
1969
  #. @context: Setup page welcome heading
1552
1970
  #: src/routes/auth/setup.tsx
@@ -1566,10 +1984,30 @@ msgid "What's on your mind..."
1566
1984
  msgstr "你在想什么..."
1567
1985
 
1568
1986
  #. @context: Collection description placeholder
1569
- #: src/ui/dash/collections/CollectionForm.tsx
1987
+ #: src/ui/shared/CollectionsSidebar.tsx
1570
1988
  msgid "What's this collection about?"
1571
1989
  msgstr "这个系列是关于什么的?"
1572
1990
 
1991
+ #. @context: Description for featured default toggle, explains what happens when off
1992
+ #: src/ui/dash/appearance/NavigationContent.tsx
1993
+ msgid "When off, visitors see your latest posts first"
1994
+ msgstr ""
1995
+
1996
+ #. @context: Button in empty state to create first post
1997
+ #: src/ui/dash/PostList.tsx
1998
+ msgid "Write your first post"
1999
+ msgstr ""
2000
+
2001
+ #. @context: Error toast when sign-in credentials are wrong
2002
+ #: src/routes/auth/signin.tsx
2003
+ msgid "Wrong email or password. Check your credentials and try again."
2004
+ msgstr ""
2005
+
2006
+ #. @context: Empty state message when no media exists
2007
+ #: src/ui/dash/media/MediaListContent.tsx
2008
+ msgid "Your media library is empty. Upload your first file to get started."
2009
+ msgstr ""
2010
+
1573
2011
  #. @context: Setup form field - user name
1574
2012
  #: src/routes/auth/setup.tsx
1575
2013
  msgid "Your Name"