@jant/core 0.3.26 → 0.3.28

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 (314) hide show
  1. package/dist/client/client.css +1 -0
  2. package/dist/client/client.js +31561 -0
  3. package/dist/index.js +15209 -15
  4. package/package.json +21 -15
  5. package/src/__tests__/helpers/app.ts +19 -3
  6. package/src/__tests__/helpers/db.ts +44 -0
  7. package/src/__tests__/helpers/lingui-core-macro-mock.ts +33 -0
  8. package/src/app.tsx +112 -173
  9. package/src/auth.ts +4 -1
  10. package/src/client.ts +13 -0
  11. package/src/db/migrations/0007_post_collections_m2m.sql +94 -0
  12. package/src/db/migrations/0008_add_collection_dividers.sql +8 -0
  13. package/src/db/migrations/0009_drop_collection_show_divider.sql +2 -0
  14. package/src/db/migrations/0010_add_performance_indexes.sql +16 -0
  15. package/src/db/schema.ts +24 -4
  16. package/src/i18n/locales/en.po +810 -385
  17. package/src/i18n/locales/en.ts +1 -1
  18. package/src/i18n/locales/zh-Hans.po +733 -522
  19. package/src/i18n/locales/zh-Hans.ts +1 -1
  20. package/src/i18n/locales/zh-Hant.po +733 -522
  21. package/src/i18n/locales/zh-Hant.ts +1 -1
  22. package/src/i18n/middleware.ts +7 -11
  23. package/src/index.ts +1 -1
  24. package/src/lib/__tests__/icons.test.ts +178 -0
  25. package/src/lib/__tests__/resolve-config.test.ts +184 -0
  26. package/src/lib/__tests__/schemas.test.ts +12 -6
  27. package/src/lib/__tests__/theme.test.ts +62 -0
  28. package/src/lib/__tests__/timezones.test.ts +1 -1
  29. package/src/lib/__tests__/url.test.ts +12 -0
  30. package/src/lib/__tests__/view.test.ts +1 -5
  31. package/src/lib/avatar-upload.ts +18 -10
  32. package/src/lib/collection-form-bridge.ts +52 -0
  33. package/src/lib/collections-reorder.ts +28 -0
  34. package/src/lib/compose-bridge.ts +251 -0
  35. package/src/lib/errors.ts +116 -0
  36. package/src/lib/excerpt.ts +1 -1
  37. package/src/lib/favicon.ts +3 -5
  38. package/src/lib/html.ts +22 -0
  39. package/src/lib/icon-catalog.ts +181 -0
  40. package/src/lib/icons.ts +202 -0
  41. package/src/lib/navigation.ts +18 -33
  42. package/src/lib/pagination.ts +3 -2
  43. package/src/lib/post-form-bridge.ts +136 -0
  44. package/src/lib/render.tsx +11 -4
  45. package/src/lib/resolve-config.ts +157 -0
  46. package/src/lib/schemas.ts +76 -12
  47. package/src/lib/settings-bridge.ts +139 -0
  48. package/src/lib/storage.ts +37 -16
  49. package/src/lib/theme.ts +5 -7
  50. package/src/lib/timeline.ts +4 -8
  51. package/src/lib/toast.ts +134 -0
  52. package/src/lib/upload.ts +71 -0
  53. package/src/lib/url.ts +9 -1
  54. package/src/lib/version.ts +16 -0
  55. package/src/lib/view.ts +9 -10
  56. package/src/middleware/__tests__/auth.test.ts +6 -28
  57. package/src/middleware/__tests__/onboarding.test.ts +1 -1
  58. package/src/middleware/auth.ts +6 -12
  59. package/src/middleware/config.ts +51 -0
  60. package/src/middleware/error-handler.ts +56 -0
  61. package/src/middleware/onboarding.ts +1 -1
  62. package/src/preset.css +6 -0
  63. package/src/routes/__tests__/compose.test.ts +104 -17
  64. package/src/routes/api/__tests__/collections.test.ts +93 -2
  65. package/src/routes/api/__tests__/posts.test.ts +2 -1
  66. package/src/routes/api/__tests__/settings.test.ts +1 -1
  67. package/src/routes/api/collections.ts +64 -68
  68. package/src/routes/api/nav-items.ts +21 -59
  69. package/src/routes/api/pages.ts +18 -46
  70. package/src/routes/api/posts.ts +64 -86
  71. package/src/routes/api/search.ts +6 -4
  72. package/src/routes/api/settings.ts +8 -24
  73. package/src/routes/api/upload.ts +55 -53
  74. package/src/routes/auth/__tests__/setup.test.ts +118 -0
  75. package/src/routes/auth/reset.tsx +17 -66
  76. package/src/routes/auth/setup.tsx +67 -11
  77. package/src/routes/auth/signin.tsx +44 -8
  78. package/src/routes/compose.tsx +194 -0
  79. package/src/routes/dash/__tests__/font-theme.test.ts +110 -0
  80. package/src/routes/dash/__tests__/pages.test.ts +2 -2
  81. package/src/routes/dash/__tests__/settings-avatar.test.ts +23 -12
  82. package/src/routes/dash/appearance.tsx +173 -0
  83. package/src/routes/dash/collections.tsx +80 -14
  84. package/src/routes/dash/index.tsx +12 -14
  85. package/src/routes/dash/media.tsx +46 -49
  86. package/src/routes/dash/pages.tsx +85 -37
  87. package/src/routes/dash/posts.tsx +60 -23
  88. package/src/routes/dash/redirects.tsx +43 -33
  89. package/src/routes/dash/settings.tsx +234 -214
  90. package/src/routes/feed/__tests__/rss.test.ts +7 -3
  91. package/src/routes/feed/rss.ts +11 -16
  92. package/src/routes/feed/sitemap.ts +15 -9
  93. package/src/routes/pages/__tests__/collections.test.ts +9 -8
  94. package/src/routes/pages/archive.tsx +2 -2
  95. package/src/routes/pages/collection.tsx +76 -9
  96. package/src/routes/pages/collections.tsx +3 -1
  97. package/src/routes/pages/featured.tsx +2 -2
  98. package/src/routes/pages/home.tsx +3 -3
  99. package/src/routes/pages/latest.tsx +2 -2
  100. package/src/routes/pages/page.tsx +2 -2
  101. package/src/routes/pages/post.tsx +2 -2
  102. package/src/routes/pages/search.tsx +2 -2
  103. package/src/services/__tests__/collection.test.ts +324 -34
  104. package/src/services/__tests__/media.test.ts +1 -1
  105. package/src/services/__tests__/page.test.ts +116 -1
  106. package/src/services/auth.ts +88 -0
  107. package/src/services/collection.ts +169 -30
  108. package/src/services/index.ts +8 -3
  109. package/src/services/media.ts +39 -12
  110. package/src/services/navigation.ts +17 -5
  111. package/src/services/page.ts +24 -4
  112. package/src/services/post.ts +87 -19
  113. package/src/services/search.ts +0 -1
  114. package/src/services/settings.ts +21 -13
  115. package/src/style.css +3 -0
  116. package/src/styles/components.css +42 -1
  117. package/src/styles/tokens.css +4 -0
  118. package/src/styles/ui.css +902 -73
  119. package/src/types/app-context.ts +25 -0
  120. package/src/types/bindings.ts +1 -0
  121. package/src/types/config.ts +60 -23
  122. package/src/types/entities.ts +12 -2
  123. package/src/types/lingui-react-macro.d.ts +3 -3
  124. package/src/types/operations.ts +2 -4
  125. package/src/types/views.ts +1 -3
  126. package/src/ui/__tests__/font-themes.test.ts +27 -8
  127. package/src/ui/color-themes.ts +1 -1
  128. package/src/ui/components/__tests__/jant-collection-form.test.ts +153 -0
  129. package/src/ui/components/__tests__/jant-compose-dialog.test.ts +512 -0
  130. package/src/ui/components/__tests__/jant-compose-editor.test.ts +272 -0
  131. package/src/ui/components/__tests__/jant-post-form.test.ts +172 -0
  132. package/src/ui/components/__tests__/jant-settings-avatar.test.ts +235 -0
  133. package/src/ui/components/__tests__/jant-settings-general.test.ts +319 -0
  134. package/src/ui/components/collection-types.ts +45 -0
  135. package/src/ui/components/compose-types.ts +75 -0
  136. package/src/ui/components/jant-collection-form.ts +512 -0
  137. package/src/ui/components/jant-compose-dialog.ts +494 -0
  138. package/src/ui/components/jant-compose-editor.ts +799 -0
  139. package/src/ui/components/jant-post-form.ts +290 -0
  140. package/src/ui/components/jant-settings-avatar.ts +231 -0
  141. package/src/ui/components/jant-settings-general.ts +436 -0
  142. package/src/ui/components/post-form-template.ts +260 -0
  143. package/src/ui/components/post-form-types.ts +87 -0
  144. package/src/ui/components/settings-types.ts +62 -0
  145. package/src/ui/compose/ComposeDialog.tsx +141 -385
  146. package/src/ui/compose/ComposePrompt.tsx +3 -3
  147. package/src/ui/dash/PostList.tsx +55 -61
  148. package/src/ui/dash/appearance/AdvancedContent.tsx +80 -0
  149. package/src/ui/dash/appearance/AppearanceNav.tsx +56 -0
  150. package/src/ui/dash/appearance/ColorThemeContent.tsx +129 -0
  151. package/src/ui/dash/appearance/FontThemeContent.tsx +98 -0
  152. package/src/ui/dash/collections/CollectionForm.tsx +130 -117
  153. package/src/ui/dash/collections/CollectionsListContent.tsx +102 -41
  154. package/src/ui/dash/collections/IconPickerGrid.tsx +50 -0
  155. package/src/ui/dash/collections/ViewCollectionContent.tsx +14 -3
  156. package/src/ui/dash/index.ts +1 -1
  157. package/src/ui/dash/posts/PostForm.tsx +248 -0
  158. package/src/ui/dash/settings/AccountContent.tsx +69 -80
  159. package/src/ui/dash/settings/GeneralContent.tsx +159 -478
  160. package/src/ui/dash/settings/SettingsNav.tsx +4 -4
  161. package/src/ui/font-themes.ts +115 -32
  162. package/src/ui/layouts/BaseLayout.tsx +49 -19
  163. package/src/ui/layouts/DashLayout.tsx +14 -9
  164. package/src/ui/layouts/SiteLayout.tsx +38 -23
  165. package/src/ui/pages/CollectionPage.tsx +12 -2
  166. package/src/ui/pages/CollectionsPage.tsx +27 -27
  167. package/src/ui/pages/HomePage.tsx +15 -6
  168. package/src/ui/pages/SearchPage.tsx +1 -2
  169. package/src/ui/shared/CollectionsSidebar.tsx +59 -0
  170. package/src/ui/shared/Pagination.tsx +2 -2
  171. package/dist/app.js +0 -265
  172. package/dist/auth.js +0 -36
  173. package/dist/client.js +0 -13
  174. package/dist/db/index.js +0 -10
  175. package/dist/db/schema.js +0 -224
  176. package/dist/i18n/Trans.js +0 -24
  177. package/dist/i18n/context.js +0 -58
  178. package/dist/i18n/detect.js +0 -26
  179. package/dist/i18n/i18n.js +0 -49
  180. package/dist/i18n/index.js +0 -44
  181. package/dist/i18n/locales/en.js +0 -1
  182. package/dist/i18n/locales/zh-Hans.js +0 -1
  183. package/dist/i18n/locales/zh-Hant.js +0 -1
  184. package/dist/i18n/locales.js +0 -13
  185. package/dist/i18n/middleware.js +0 -30
  186. package/dist/lib/avatar-upload.js +0 -134
  187. package/dist/lib/config.js +0 -143
  188. package/dist/lib/constants.js +0 -50
  189. package/dist/lib/excerpt.js +0 -76
  190. package/dist/lib/favicon.js +0 -102
  191. package/dist/lib/feed.js +0 -123
  192. package/dist/lib/image-processor.js +0 -187
  193. package/dist/lib/image.js +0 -97
  194. package/dist/lib/index.js +0 -7
  195. package/dist/lib/markdown.js +0 -83
  196. package/dist/lib/media-helpers.js +0 -49
  197. package/dist/lib/media-upload.js +0 -104
  198. package/dist/lib/nav-reorder.js +0 -27
  199. package/dist/lib/navigation.js +0 -79
  200. package/dist/lib/pagination.js +0 -44
  201. package/dist/lib/render.js +0 -53
  202. package/dist/lib/schemas.js +0 -174
  203. package/dist/lib/sqid.js +0 -72
  204. package/dist/lib/sse.js +0 -218
  205. package/dist/lib/storage.js +0 -164
  206. package/dist/lib/theme.js +0 -65
  207. package/dist/lib/time.js +0 -159
  208. package/dist/lib/timeline.js +0 -95
  209. package/dist/lib/timezones.js +0 -388
  210. package/dist/lib/url.js +0 -89
  211. package/dist/lib/view.js +0 -217
  212. package/dist/middleware/auth.js +0 -52
  213. package/dist/middleware/onboarding.js +0 -41
  214. package/dist/routes/api/collections.js +0 -124
  215. package/dist/routes/api/nav-items.js +0 -104
  216. package/dist/routes/api/pages.js +0 -91
  217. package/dist/routes/api/posts.js +0 -218
  218. package/dist/routes/api/search.js +0 -48
  219. package/dist/routes/api/settings.js +0 -68
  220. package/dist/routes/api/upload.js +0 -246
  221. package/dist/routes/auth/reset.js +0 -221
  222. package/dist/routes/auth/setup.js +0 -194
  223. package/dist/routes/auth/signin.js +0 -176
  224. package/dist/routes/compose.js +0 -48
  225. package/dist/routes/dash/collections.js +0 -115
  226. package/dist/routes/dash/index.js +0 -118
  227. package/dist/routes/dash/media.js +0 -106
  228. package/dist/routes/dash/pages.js +0 -294
  229. package/dist/routes/dash/posts.js +0 -244
  230. package/dist/routes/dash/redirects.js +0 -257
  231. package/dist/routes/dash/settings.js +0 -379
  232. package/dist/routes/feed/rss.js +0 -62
  233. package/dist/routes/feed/sitemap.js +0 -49
  234. package/dist/routes/pages/archive.js +0 -62
  235. package/dist/routes/pages/collection.js +0 -34
  236. package/dist/routes/pages/collections.js +0 -28
  237. package/dist/routes/pages/featured.js +0 -36
  238. package/dist/routes/pages/home.js +0 -64
  239. package/dist/routes/pages/latest.js +0 -45
  240. package/dist/routes/pages/page.js +0 -68
  241. package/dist/routes/pages/post.js +0 -44
  242. package/dist/routes/pages/search.js +0 -54
  243. package/dist/services/collection.js +0 -109
  244. package/dist/services/index.js +0 -24
  245. package/dist/services/media.js +0 -117
  246. package/dist/services/navigation.js +0 -91
  247. package/dist/services/page.js +0 -84
  248. package/dist/services/post.js +0 -229
  249. package/dist/services/redirect.js +0 -48
  250. package/dist/services/search.js +0 -67
  251. package/dist/services/settings.js +0 -68
  252. package/dist/types/bindings.js +0 -3
  253. package/dist/types/config.js +0 -147
  254. package/dist/types/constants.js +0 -27
  255. package/dist/types/entities.js +0 -3
  256. package/dist/types/lingui-react-macro.d.js +0 -9
  257. package/dist/types/operations.js +0 -3
  258. package/dist/types/props.js +0 -3
  259. package/dist/types/sortablejs.d.js +0 -5
  260. package/dist/types/views.js +0 -5
  261. package/dist/types.js +0 -11
  262. package/dist/ui/color-themes.js +0 -268
  263. package/dist/ui/compose/ComposeDialog.js +0 -467
  264. package/dist/ui/compose/ComposePrompt.js +0 -55
  265. package/dist/ui/dash/ActionButtons.js +0 -46
  266. package/dist/ui/dash/CrudPageHeader.js +0 -22
  267. package/dist/ui/dash/DangerZone.js +0 -36
  268. package/dist/ui/dash/FormatBadge.js +0 -27
  269. package/dist/ui/dash/ListItemRow.js +0 -21
  270. package/dist/ui/dash/PageForm.js +0 -195
  271. package/dist/ui/dash/PostForm.js +0 -395
  272. package/dist/ui/dash/PostList.js +0 -83
  273. package/dist/ui/dash/StatusBadge.js +0 -46
  274. package/dist/ui/dash/collections/CollectionForm.js +0 -152
  275. package/dist/ui/dash/collections/CollectionsListContent.js +0 -68
  276. package/dist/ui/dash/collections/ViewCollectionContent.js +0 -96
  277. package/dist/ui/dash/index.js +0 -10
  278. package/dist/ui/dash/media/MediaListContent.js +0 -166
  279. package/dist/ui/dash/media/ViewMediaContent.js +0 -212
  280. package/dist/ui/dash/pages/LinkFormContent.js +0 -130
  281. package/dist/ui/dash/pages/UnifiedPagesContent.js +0 -193
  282. package/dist/ui/dash/settings/AccountContent.js +0 -209
  283. package/dist/ui/dash/settings/AppearanceContent.js +0 -259
  284. package/dist/ui/dash/settings/GeneralContent.js +0 -536
  285. package/dist/ui/dash/settings/SettingsNav.js +0 -41
  286. package/dist/ui/feed/LinkCard.js +0 -72
  287. package/dist/ui/feed/NoteCard.js +0 -58
  288. package/dist/ui/feed/QuoteCard.js +0 -63
  289. package/dist/ui/feed/ThreadPreview.js +0 -48
  290. package/dist/ui/feed/TimelineFeed.js +0 -41
  291. package/dist/ui/feed/TimelineItem.js +0 -27
  292. package/dist/ui/font-themes.js +0 -36
  293. package/dist/ui/layouts/BaseLayout.js +0 -153
  294. package/dist/ui/layouts/DashLayout.js +0 -141
  295. package/dist/ui/layouts/SiteLayout.js +0 -169
  296. package/dist/ui/pages/ArchivePage.js +0 -143
  297. package/dist/ui/pages/CollectionPage.js +0 -70
  298. package/dist/ui/pages/CollectionsPage.js +0 -76
  299. package/dist/ui/pages/FeaturedPage.js +0 -24
  300. package/dist/ui/pages/HomePage.js +0 -24
  301. package/dist/ui/pages/PostPage.js +0 -55
  302. package/dist/ui/pages/SearchPage.js +0 -122
  303. package/dist/ui/pages/SinglePage.js +0 -23
  304. package/dist/ui/shared/EmptyState.js +0 -27
  305. package/dist/ui/shared/MediaGallery.js +0 -35
  306. package/dist/ui/shared/Pagination.js +0 -195
  307. package/dist/ui/shared/ThreadView.js +0 -108
  308. package/dist/ui/shared/index.js +0 -5
  309. package/dist/vendor/datastar.js +0 -1606
  310. package/src/lib/__tests__/config.test.ts +0 -192
  311. package/src/lib/config.ts +0 -167
  312. package/src/routes/compose.ts +0 -63
  313. package/src/ui/dash/PostForm.tsx +0 -360
  314. package/src/ui/dash/settings/AppearanceContent.tsx +0 -254
@@ -13,121 +13,148 @@ msgstr ""
13
13
  "Language-Team: \n"
14
14
  "Plural-Forms: \n"
15
15
 
16
- #. @context: Archive post reply indicator - plural
17
- #: src/theme/pages/ArchivePage.tsx:168
18
- #~ msgid "{count} replies"
19
- #~ msgstr "{count} 条回复"
20
-
21
16
  #. @context: Custom CSS textarea placeholder
22
- #: src/ui/dash/settings/AppearanceContent.tsx:218
17
+ #: src/ui/dash/appearance/AdvancedContent.tsx
23
18
  msgid "/* Your custom CSS here */"
24
- msgstr ""
19
+ msgstr "/* 您的自定义 CSS 在这里 */"
25
20
 
26
21
  #. @context: Navigation link
27
- #: src/ui/dash/collections/ViewCollectionContent.tsx:84
22
+ #: src/ui/dash/collections/ViewCollectionContent.tsx
28
23
  msgid "← Back to Collections"
29
24
  msgstr "← 返回收藏夹"
30
25
 
31
- #. @context: Archive post reply indicator - single
32
- #: src/theme/pages/ArchivePage.tsx:163
33
- #~ msgid "1 reply"
34
- #~ msgstr "1 条回复"
26
+ #. @context: Add alt text label under attachment thumbnail
27
+ #: src/ui/compose/ComposeDialog.tsx
28
+ msgid "+ ALT"
29
+ msgstr ""
35
30
 
36
31
  #. @context: Redirect type option
37
- #: src/routes/dash/redirects.tsx:146
32
+ #: src/routes/dash/redirects.tsx
38
33
  msgid "301 (Permanent)"
39
34
  msgstr "301(永久)"
40
35
 
41
36
  #. @context: Redirect type option
42
- #: src/routes/dash/redirects.tsx:152
37
+ #: src/routes/dash/redirects.tsx
43
38
  msgid "302 (Temporary)"
44
39
  msgstr "302(临时)"
45
40
 
46
41
  #. @context: Settings form field for site description
47
- #: src/ui/dash/settings/GeneralContent.tsx:324
42
+ #: src/ui/dash/settings/GeneralContent.tsx
48
43
  msgid "About this blog"
49
- msgstr ""
44
+ msgstr "关于这个博客"
50
45
 
51
46
  #. @context: Settings sub-navigation tab
52
- #: src/ui/dash/settings/SettingsNav.tsx:31
47
+ #: src/ui/dash/settings/SettingsNav.tsx
53
48
  msgid "Account"
54
49
  msgstr "账户"
55
50
 
51
+ #. @context: Add more attachments button
52
+ #: src/ui/compose/ComposeDialog.tsx
53
+ msgid "Add"
54
+ msgstr ""
55
+
56
+ #. @context: Alt text panel title
57
+ #: src/ui/compose/ComposeDialog.tsx
58
+ msgid "Add alt text"
59
+ msgstr ""
60
+
56
61
  #. @context: Custom CSS settings description
57
- #: src/ui/dash/settings/AppearanceContent.tsx:208
62
+ #: src/ui/dash/appearance/AdvancedContent.tsx
58
63
  msgid "Add custom CSS to override any styles. Use data attributes like [data-page], [data-post], [data-format] to target specific elements."
59
- msgstr ""
64
+ msgstr "添加自定义 CSS 以覆盖任何样式。使用数据属性,如 [data-page]、[data-post]、[data-format] 来定位特定元素。"
60
65
 
61
66
  #. @context: Button to add a navigation link
62
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:28
67
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
63
68
  msgid "Add Link"
64
- msgstr ""
69
+ msgstr "添加链接"
65
70
 
66
71
  #. @context: Button to open media picker
67
- #. @context: Compose toolbar - add media
68
- #: src/ui/compose/ComposeDialog.tsx:219
69
- #: src/ui/dash/PostForm.tsx:211
72
+ #: src/ui/dash/posts/PostForm.tsx
70
73
  msgid "Add Media"
71
74
  msgstr "添加媒体"
72
75
 
73
76
  #. @context: Button to add page to navigation
74
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:163
77
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
75
78
  msgid "Add to nav"
79
+ msgstr "添加到导航"
80
+
81
+ #. @context: Appearance sub-navigation tab
82
+ #: src/ui/dash/appearance/AppearanceNav.tsx
83
+ msgid "Advanced"
76
84
  msgstr ""
77
85
 
78
86
  #. @context: Archive filter - all formats
79
- #: src/ui/pages/ArchivePage.tsx:71
87
+ #: src/ui/pages/ArchivePage.tsx
80
88
  msgid "All"
81
89
  msgstr "所有"
82
90
 
83
91
  #. @context: Empty state when all pages are in nav
84
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:146
92
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
85
93
  msgid "All pages are in your navigation."
94
+ msgstr "所有页面都在您的导航中。"
95
+
96
+ #. @context: Hint text in alt text panel
97
+ #: src/ui/compose/ComposeDialog.tsx
98
+ msgid "Alt text improves accessibility"
86
99
  msgstr ""
87
100
 
88
- #. @context: Settings sub-navigation tab
89
- #: src/ui/dash/settings/SettingsNav.tsx:23
101
+ #. @context: Dashboard heading
102
+ #. @context: Dashboard heading
103
+ #. @context: Dashboard heading
104
+ #. @context: Dashboard navigation - appearance settings
105
+ #: src/ui/dash/appearance/AdvancedContent.tsx
106
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
107
+ #: src/ui/dash/appearance/FontThemeContent.tsx
108
+ #: src/ui/layouts/DashLayout.tsx
90
109
  msgid "Appearance"
91
110
  msgstr "外观"
92
111
 
93
112
  #. @context: Archive page title
94
- #: src/ui/pages/ArchivePage.tsx:55
113
+ #: src/ui/pages/ArchivePage.tsx
95
114
  msgid "Archive"
96
115
  msgstr "档案馆"
97
116
 
98
117
  #. @context: Confirmation dialog when deleting a post from the list
99
- #: src/ui/dash/PostList.tsx:60
118
+ #: src/ui/dash/PostList.tsx
100
119
  msgid "Are you sure you want to delete this post? This cannot be undone."
101
- msgstr ""
102
-
103
- #. @context: Post type badge - article
104
- #. @context: Post type label - article
105
- #. @context: Post type option
106
- #: src/theme/components/PostForm.tsx:74
107
- #: src/theme/components/TypeBadge.tsx:20
108
- #: src/themes/threads/pages/ArchivePage.tsx:17
109
- #~ msgid "Article"
110
- #~ msgstr "文章"
111
-
112
- #. @context: Post type label plural - articles
113
- #: src/themes/threads/pages/ArchivePage.tsx:42
114
- #~ msgid "Articles"
115
- #~ msgstr "文章"
116
-
117
- #. @context: Hint for image post type media requirement
118
- #: src/theme/components/PostForm.tsx:137
119
- #~ msgid "At least 1 image required for image posts."
120
- #~ msgstr "图像帖子至少需要 1 张图片。"
120
+ msgstr "您确定要删除此帖子吗?此操作无法撤销。"
121
+
122
+ #. @context: Attached text panel title
123
+ #: src/ui/compose/ComposeDialog.tsx
124
+ msgid "Attached Text"
125
+ msgstr "附加文本"
126
+
127
+ #. @context: Error toast when authentication system is unavailable
128
+ #: src/routes/auth/signin.tsx
129
+ msgid "Auth not configured"
130
+ msgstr "身份验证未配置"
131
+
132
+ #. @context: Error toast when authentication secret is missing from server config
133
+ #: src/routes/auth/setup.tsx
134
+ msgid "AUTH_SECRET not configured"
135
+ msgstr "AUTH_SECRET 未配置"
136
+
137
+ #. @context: Compose quote author placeholder
138
+ #: src/ui/compose/ComposeDialog.tsx
139
+ msgid "Author (optional)"
140
+ msgstr "作者(可选)"
141
+
142
+ #. @context: Toast after saving avatar display preference
143
+ #. @context: Toast after saving avatar display preference
144
+ #: src/routes/dash/settings.tsx
145
+ #: src/routes/dash/settings.tsx
146
+ msgid "Avatar display setting saved successfully."
147
+ msgstr "头像显示设置已成功保存。"
121
148
 
122
149
  #. @context: Button to go back to media list
123
- #: src/ui/dash/media/ViewMediaContent.tsx:57
150
+ #: src/ui/dash/media/ViewMediaContent.tsx
124
151
  msgid "Back"
125
152
  msgstr "返回"
126
153
 
127
154
  #. @context: Settings section heading for avatar
128
- #: src/ui/dash/settings/GeneralContent.tsx:160
155
+ #: src/ui/dash/settings/GeneralContent.tsx
129
156
  msgid "Blog Avatar"
130
- msgstr ""
157
+ msgstr "博客头像"
131
158
 
132
159
  #. @context: Button to cancel and go back
133
160
  #. @context: Button to cancel form
@@ -135,246 +162,265 @@ msgstr ""
135
162
  #. @context: Button to cancel form
136
163
  #. @context: Button to cancel form
137
164
  #. @context: Button to cancel unsaved changes and revert to original values
138
- #: src/routes/dash/redirects.tsx:183
139
- #: src/ui/dash/collections/CollectionForm.tsx:144
140
- #: src/ui/dash/PageForm.tsx:177
141
- #: src/ui/dash/pages/LinkFormContent.tsx:110
142
- #: src/ui/dash/PostForm.tsx:318
143
- #: src/ui/dash/settings/GeneralContent.tsx:86
165
+ #. @context: Close compose dialog
166
+ #: src/routes/dash/redirects.tsx
167
+ #: src/ui/compose/ComposeDialog.tsx
168
+ #: src/ui/dash/collections/CollectionForm.tsx
169
+ #: src/ui/dash/PageForm.tsx
170
+ #: src/ui/dash/pages/LinkFormContent.tsx
171
+ #: src/ui/dash/posts/PostForm.tsx
172
+ #: src/ui/dash/settings/GeneralContent.tsx
144
173
  msgid "Cancel"
145
174
  msgstr "取消"
146
175
 
147
176
  #. @context: Button to change password
148
177
  #. @context: Settings section heading
149
- #: src/ui/dash/settings/AccountContent.tsx:88
150
- #: src/ui/dash/settings/AccountContent.tsx:167
178
+ #: src/ui/dash/settings/AccountContent.tsx
179
+ #: src/ui/dash/settings/AccountContent.tsx
151
180
  msgid "Change Password"
152
181
  msgstr "更改密码"
153
182
 
154
183
  #. @context: Font theme settings description
155
- #: src/ui/dash/settings/AppearanceContent.tsx:153
156
- msgid "Choose a font for your site. All options use system fonts for fast loading."
157
- msgstr ""
184
+ #: src/ui/dash/appearance/FontThemeContent.tsx
185
+ msgid "Choose a font pairing for your site. All options use system fonts for fast loading."
186
+ msgstr "选择一个字体搭配用于您的网站。所有选项都使用系统字体以实现快速加载。"
187
+
188
+ #. @context: Button to open icon picker
189
+ #. @context: Icon picker dialog title
190
+ #: src/ui/dash/collections/CollectionForm.tsx
191
+ #: src/ui/dash/collections/CollectionForm.tsx
192
+ msgid "Choose Icon"
193
+ msgstr "选择图标"
158
194
 
159
195
  #. @context: Hint to click image for lightbox
160
- #: src/ui/dash/media/ViewMediaContent.tsx:90
196
+ #: src/ui/dash/media/ViewMediaContent.tsx
161
197
  msgid "Click image to view full size"
162
198
  msgstr "点击图片查看完整尺寸"
163
199
 
164
- #. @context: Compose collection field
165
- #. @context: Compose toolbar - toggle collection
166
- #: src/ui/compose/ComposeDialog.tsx:191
167
- #: src/ui/compose/ComposeDialog.tsx:272
168
- msgid "Collection"
169
- msgstr ""
200
+ #. @context: Button to close icon picker
201
+ #: src/ui/dash/collections/CollectionForm.tsx
202
+ msgid "Close"
203
+ msgstr "关闭"
170
204
 
171
- #. @context: Post form field - assign to collection
172
- #: src/ui/dash/PostForm.tsx:264
173
- msgid "Collection (optional)"
174
- msgstr ""
205
+ #. @context: Compose collection selector trigger label
206
+ #: src/ui/compose/ComposeDialog.tsx
207
+ msgid "Collection"
208
+ msgstr "集合"
175
209
 
176
210
  #. @context: Collections page heading
177
211
  #. @context: Dashboard heading
178
212
  #. @context: Dashboard navigation - collections management
179
- #: src/ui/dash/collections/CollectionsListContent.tsx:24
180
- #: src/ui/layouts/DashLayout.tsx:114
181
- #: src/ui/pages/CollectionsPage.tsx:18
213
+ #. @context: Sidebar heading for collections nav
214
+ #: src/ui/dash/collections/CollectionsListContent.tsx
215
+ #: src/ui/layouts/DashLayout.tsx
216
+ #: src/ui/pages/CollectionsPage.tsx
217
+ #: src/ui/shared/CollectionsSidebar.tsx
182
218
  msgid "Collections"
183
219
  msgstr "收藏夹"
184
220
 
185
221
  #. @context: Post form field - assign to collections
186
- #: src/theme/components/PostForm.tsx:273
187
- #~ msgid "Collections (optional)"
188
- #~ msgstr "集合(可选)"
222
+ #: src/ui/dash/posts/PostForm.tsx
223
+ msgid "Collections (optional)"
224
+ msgstr "集合(可选)"
189
225
 
190
226
  #. @context: Appearance settings heading
191
- #: src/ui/dash/settings/AppearanceContent.tsx:112
227
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
192
228
  msgid "Color theme"
193
229
  msgstr "颜色主题"
194
230
 
231
+ #. @context: Appearance sub-navigation tab
232
+ #: src/ui/dash/appearance/AppearanceNav.tsx
233
+ msgid "Color Theme"
234
+ msgstr ""
235
+
195
236
  #. @context: Setup form submit button
196
- #: src/routes/auth/setup.tsx:108
237
+ #: src/routes/auth/setup.tsx
197
238
  msgid "Complete Setup"
198
239
  msgstr "完成设置"
199
240
 
200
241
  #. @context: Password form field
201
- #: src/ui/dash/settings/AccountContent.tsx:130
242
+ #: src/ui/dash/settings/AccountContent.tsx
202
243
  msgid "Confirm New Password"
203
244
  msgstr "确认新密码"
204
245
 
205
246
  #. @context: Password reset form field
206
- #: src/routes/auth/reset.tsx:70
247
+ #: src/routes/auth/reset.tsx
207
248
  msgid "Confirm Password"
208
249
  msgstr "确认密码"
209
250
 
210
251
  #. @context: Page form field label - content
211
252
  #. @context: Post form field
212
- #: src/ui/dash/PageForm.tsx:96
213
- #: src/ui/dash/PostForm.tsx:104
253
+ #: src/ui/dash/PageForm.tsx
254
+ #: src/ui/dash/posts/PostForm.tsx
214
255
  msgid "Content"
215
256
  msgstr "内容"
216
257
 
217
258
  #. @context: Button to copy Markdown to clipboard
218
259
  #. @context: Button to copy URL to clipboard
219
- #: src/ui/dash/media/ViewMediaContent.tsx:128
220
- #: src/ui/dash/media/ViewMediaContent.tsx:165
260
+ #: src/ui/dash/media/ViewMediaContent.tsx
261
+ #: src/ui/dash/media/ViewMediaContent.tsx
221
262
  msgid "Copy"
222
263
  msgstr "复制"
223
264
 
224
265
  #. @context: Button to save new collection
225
- #: src/ui/dash/collections/CollectionForm.tsx:36
266
+ #: src/ui/dash/collections/CollectionForm.tsx
226
267
  msgid "Create Collection"
227
268
  msgstr "创建集合"
228
269
 
229
270
  #. @context: Button to save new navigation link
230
- #: src/ui/dash/pages/LinkFormContent.tsx:104
271
+ #: src/ui/dash/pages/LinkFormContent.tsx
231
272
  msgid "Create Link"
232
273
  msgstr "创建链接"
233
274
 
234
275
  #. @context: Button to create new page
235
- #: src/ui/dash/PageForm.tsx:171
276
+ #: src/ui/dash/PageForm.tsx
236
277
  msgid "Create Page"
237
278
  msgstr "创建页面"
238
279
 
239
280
  #. @context: Button to save new redirect
240
- #: src/routes/dash/redirects.tsx:177
281
+ #: src/routes/dash/redirects.tsx
241
282
  msgid "Create Redirect"
242
283
  msgstr "创建重定向"
243
284
 
244
285
  #. @context: Setup page description
245
- #: src/routes/auth/setup.tsx:33
286
+ #: src/routes/auth/setup.tsx
246
287
  msgid "Create your admin account."
247
288
  msgstr "创建您的管理员账户。"
248
289
 
249
- #. @context: Button in empty state to create first page
250
- #: src/routes/dash/pages.tsx:48
251
- #~ msgid "Create your first page"
252
- #~ msgstr "创建您的第一页"
253
-
254
290
  #. @context: Button in empty state to create first post
255
- #: src/ui/dash/PostList.tsx:29
291
+ #: src/ui/dash/PostList.tsx
256
292
  msgid "Create your first post"
257
293
  msgstr "创建你的第一篇帖子"
258
294
 
259
295
  #. @context: Password form field
260
- #: src/ui/dash/settings/AccountContent.tsx:97
296
+ #: src/ui/dash/settings/AccountContent.tsx
261
297
  msgid "Current Password"
262
298
  msgstr "当前密码"
263
299
 
300
+ #. @context: Error toast when current password verification fails
301
+ #: src/routes/dash/settings.tsx
302
+ msgid "Current password is incorrect."
303
+ msgstr "当前密码不正确。"
304
+
264
305
  #. @context: Appearance settings heading for custom CSS
265
- #: src/ui/dash/settings/AppearanceContent.tsx:202
306
+ #: src/ui/dash/appearance/AdvancedContent.tsx
266
307
  msgid "Custom CSS"
267
- msgstr ""
308
+ msgstr "自定义 CSS"
268
309
 
269
- #. @context: Post form field
270
- #: src/theme/components/PostForm.tsx:297
271
- #~ msgid "Custom Path (optional)"
272
- #~ msgstr "自定义路径(可选)"
273
-
274
- #. @context: Post form field
275
- #: src/theme/components/PostForm.tsx:293
276
- #~ msgid "Custom Slug (optional)"
277
- #~ msgstr ""
278
-
279
- #. @context: Slug help text
280
- #: src/theme/components/PostForm.tsx:306
281
- #~ msgid "Custom URL path. Leave empty to use default /p/ID format."
282
- #~ msgstr ""
310
+ #. @context: Toast after saving custom CSS
311
+ #: src/routes/dash/appearance.tsx
312
+ msgid "Custom CSS saved successfully."
313
+ msgstr "自定义 CSS 保存成功。"
283
314
 
284
315
  #. @context: Section heading for dangerous/destructive actions
285
- #: src/ui/dash/DangerZone.tsx:55
316
+ #: src/ui/dash/DangerZone.tsx
286
317
  msgid "Danger Zone"
287
318
  msgstr "危险区域"
288
319
 
289
320
  #. @context: Dashboard main heading
290
321
  #. @context: Dashboard navigation - main dashboard page
291
- #: src/routes/dash/index.tsx:36
292
- #: src/ui/layouts/DashLayout.tsx:78
322
+ #: src/routes/dash/index.tsx
323
+ #: src/ui/layouts/DashLayout.tsx
293
324
  msgid "Dashboard"
294
325
  msgstr "仪表板"
295
326
 
296
327
  #. @context: Settings form field
297
- #: src/ui/dash/settings/GeneralContent.tsx:374
328
+ #: src/ui/dash/settings/GeneralContent.tsx
298
329
  msgid "Default Homepage View"
299
- msgstr ""
330
+ msgstr "默认主页视图"
300
331
 
301
332
  #. @context: Button to delete item
302
333
  #. @context: Button to delete link
303
334
  #. @context: Button to delete redirect
304
- #: src/routes/dash/redirects.tsx:60
305
- #: src/ui/dash/ActionButtons.tsx:80
306
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:98
335
+ #: src/routes/dash/redirects.tsx
336
+ #: src/ui/dash/ActionButtons.tsx
337
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
307
338
  msgid "Delete"
308
339
  msgstr "删除"
309
340
 
310
- #. @context: Button to delete collection
311
- #: src/routes/dash/collections.tsx:363
312
- #~ msgid "Delete Collection"
313
- #~ msgstr "删除收藏夹"
314
-
315
341
  #. @context: Button to delete media
316
- #: src/ui/dash/media/ViewMediaContent.tsx:176
342
+ #: src/ui/dash/media/ViewMediaContent.tsx
317
343
  msgid "Delete Media"
318
344
  msgstr "删除媒体"
319
345
 
320
346
  #. @context: Button to delete page
321
- #: src/routes/dash/pages.tsx:77
347
+ #: src/routes/dash/pages.tsx
322
348
  msgid "Delete Page"
323
349
  msgstr "删除页面"
324
350
 
325
351
  #. @context: Warning message before deleting media
326
- #: src/ui/dash/media/ViewMediaContent.tsx:182
352
+ #: src/ui/dash/media/ViewMediaContent.tsx
327
353
  msgid "Deleting this media will remove it permanently from storage."
328
354
  msgstr "删除此媒体将永久从存储中移除。"
329
355
 
330
356
  #. @context: Hint shown on signin page when demo credentials are pre-filled
331
- #: src/routes/auth/signin.tsx:40
357
+ #: src/routes/auth/signin.tsx
332
358
  msgid "Demo account pre-filled. Just click Sign In."
333
359
  msgstr "演示账户已预填。只需点击登录。"
334
360
 
361
+ #. @context: Alt text textarea placeholder
362
+ #: src/ui/compose/ComposeDialog.tsx
363
+ msgid "Describe this for people with visual impairments..."
364
+ msgstr ""
365
+
335
366
  #. @context: Collection form field
336
- #: src/ui/dash/collections/CollectionForm.tsx:102
367
+ #: src/ui/dash/collections/CollectionForm.tsx
337
368
  msgid "Description (optional)"
338
369
  msgstr "描述(可选)"
339
370
 
371
+ #. @context: More menu - discard post
372
+ #: src/ui/compose/ComposeDialog.tsx
373
+ msgid "Discard"
374
+ msgstr "丢弃"
375
+
340
376
  #. @context: Checkbox to show avatar in the site header
341
- #: src/ui/dash/settings/GeneralContent.tsx:274
377
+ #: src/ui/dash/settings/GeneralContent.tsx
342
378
  msgid "Display avatar in my site header"
343
- msgstr ""
379
+ msgstr "在我的网站头部显示头像"
344
380
 
345
381
  #. @context: Navigation label help text
346
- #: src/ui/dash/pages/LinkFormContent.tsx:52
382
+ #: src/ui/dash/pages/LinkFormContent.tsx
347
383
  msgid "Display text for the link"
348
384
  msgstr "链接的显示文本"
349
385
 
386
+ #. @context: Help text for site description field
387
+ #: src/ui/dash/settings/GeneralContent.tsx
388
+ msgid "Displayed above your blog posts on the home page. Also used as the meta description. Markdown supported."
389
+ msgstr ""
390
+
391
+ #. @context: Help text for site footer field
392
+ #: src/ui/dash/settings/GeneralContent.tsx
393
+ msgid "Displayed at the bottom of all posts and pages. Markdown supported."
394
+ msgstr ""
395
+
396
+ #. @context: Close attached text panel
350
397
  #. @context: Close media picker button
351
- #. @context: Close media picker button
352
- #: src/ui/compose/ComposeDialog.tsx:394
353
- #: src/ui/dash/PostForm.tsx:340
398
+ #: src/ui/compose/ComposeDialog.tsx
399
+ #: src/ui/dash/posts/PostForm.tsx
354
400
  msgid "Done"
355
401
  msgstr "完成"
356
402
 
357
- #. @context: Compose button - save as draft
358
403
  #. @context: Page status option - draft
359
404
  #. @context: Post status badge - draft
360
405
  #. @context: Post status option
361
- #: src/ui/compose/ComposeDialog.tsx:340
362
- #: src/ui/dash/PageForm.tsx:133
363
- #: src/ui/dash/PostForm.tsx:234
364
- #: src/ui/dash/StatusBadge.tsx:34
406
+ #: src/ui/dash/PageForm.tsx
407
+ #: src/ui/dash/posts/PostForm.tsx
408
+ #: src/ui/dash/StatusBadge.tsx
365
409
  msgid "Draft"
366
410
  msgstr "草稿"
367
411
 
412
+ #. @context: Toast after saving a draft post
413
+ #. @context: Toast after saving a draft post
414
+ #: src/routes/compose.tsx
415
+ #: src/routes/compose.tsx
416
+ msgid "Draft saved."
417
+ msgstr "草稿已保存。"
418
+
368
419
  #. @context: Post status label
369
- #: src/routes/dash/index.tsx:55
420
+ #: src/routes/dash/index.tsx
370
421
  msgid "Drafts"
371
422
  msgstr "草稿"
372
423
 
373
- #. @context: Source name placeholder
374
- #: src/theme/components/PostForm.tsx:226
375
- #~ msgid "e.g. The Verge, John Doe"
376
- #~ msgstr "例如:The Verge,John Doe"
377
-
378
424
  #. @context: Button to edit collection
379
425
  #. @context: Button to edit collection
380
426
  #. @context: Button to edit item
@@ -384,500 +430,622 @@ msgstr "草稿"
384
430
  #. @context: Button to edit page
385
431
  #. @context: Button to edit post
386
432
  #. @context: Button to edit post
387
- #: src/routes/dash/pages.tsx:55
388
- #: src/routes/dash/posts.tsx:140
389
- #: src/ui/dash/ActionButtons.tsx:72
390
- #: src/ui/dash/collections/CollectionsListContent.tsx:55
391
- #: src/ui/dash/collections/ViewCollectionContent.tsx:33
392
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:72
393
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:93
394
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:170
395
- #: src/ui/dash/PostList.tsx:50
433
+ #: src/routes/dash/pages.tsx
434
+ #: src/routes/dash/posts.tsx
435
+ #: src/ui/dash/ActionButtons.tsx
436
+ #: src/ui/dash/collections/CollectionsListContent.tsx
437
+ #: src/ui/dash/collections/ViewCollectionContent.tsx
438
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
439
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
440
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
441
+ #: src/ui/dash/PostList.tsx
396
442
  msgid "Edit"
397
443
  msgstr "编辑"
398
444
 
399
445
  #. @context: Page heading
400
- #: src/ui/dash/collections/CollectionForm.tsx:28
446
+ #: src/ui/dash/collections/CollectionForm.tsx
401
447
  msgid "Edit Collection"
402
448
  msgstr "编辑集合"
403
449
 
404
450
  #. @context: Page heading
405
- #: src/ui/dash/pages/LinkFormContent.tsx:17
451
+ #: src/ui/dash/pages/LinkFormContent.tsx
406
452
  msgid "Edit Link"
407
453
  msgstr "编辑链接"
408
454
 
409
455
  #. @context: Edit page main heading
410
- #: src/routes/dash/pages.tsx:93
456
+ #: src/routes/dash/pages.tsx
411
457
  msgid "Edit Page"
412
458
  msgstr "编辑页面"
413
459
 
414
460
  #. @context: Page heading
415
- #: src/routes/dash/posts.tsx:183
461
+ #: src/routes/dash/posts.tsx
416
462
  msgid "Edit Post"
417
463
  msgstr "编辑帖子"
418
464
 
419
465
  #. @context: Setup/signin form field - email
420
466
  #. @context: Setup/signin form field - email
421
- #: src/routes/auth/setup.tsx:64
422
- #: src/routes/auth/signin.tsx:55
467
+ #: src/routes/auth/setup.tsx
468
+ #: src/routes/auth/signin.tsx
423
469
  msgid "Email"
424
470
  msgstr "电子邮件"
425
471
 
426
472
  #. @context: Password reset page description
427
- #: src/routes/auth/reset.tsx:39
473
+ #: src/routes/auth/reset.tsx
428
474
  msgid "Enter your new password."
429
475
  msgstr "输入您的新密码。"
430
476
 
477
+ #. @context: Plural entry count label
478
+ #: src/ui/pages/CollectionsPage.tsx
479
+ msgid "entries"
480
+ msgstr "条目"
481
+
482
+ #. @context: Singular entry count label
483
+ #: src/ui/pages/CollectionsPage.tsx
484
+ msgid "entry"
485
+ msgstr "条目"
486
+
487
+ #. @context: Error toast when account creation fails
488
+ #. @context: Error toast when account creation fails
489
+ #: src/routes/auth/setup.tsx
490
+ #: src/routes/auth/setup.tsx
491
+ msgid "Failed to create account"
492
+ msgstr "创建账户失败"
493
+
494
+ #. @context: Toast when post save fails
495
+ #: src/ui/dash/posts/PostForm.tsx
496
+ msgid "Failed to save post. Please try again."
497
+ msgstr "保存帖子失败。请再试一次。"
498
+
499
+ #. @context: Error toast when profile update fails
500
+ #: src/routes/dash/settings.tsx
501
+ msgid "Failed to update profile."
502
+ msgstr "更新个人资料失败。"
503
+
431
504
  #. @context: Archive filter - featured posts
432
505
  #. @context: Browse filter for featured posts
433
- #. @context: Compose checkbox - mark as featured
434
506
  #. @context: Homepage view option - show featured posts
435
507
  #. @context: Post badge - featured
436
508
  #. @context: Post form checkbox - mark as featured
437
- #: src/ui/compose/ComposeDialog.tsx:305
438
- #: src/ui/dash/PostForm.tsx:246
439
- #: src/ui/dash/settings/GeneralContent.tsx:398
440
- #: src/ui/dash/StatusBadge.tsx:45
441
- #: src/ui/layouts/SiteLayout.tsx:55
442
- #: src/ui/pages/ArchivePage.tsx:92
509
+ #: src/ui/dash/posts/PostForm.tsx
510
+ #: src/ui/dash/settings/GeneralContent.tsx
511
+ #: src/ui/dash/StatusBadge.tsx
512
+ #: src/ui/layouts/SiteLayout.tsx
513
+ #: src/ui/pages/ArchivePage.tsx
443
514
  msgid "Featured"
444
515
  msgstr "精选"
445
516
 
446
517
  #. @context: Appearance settings heading for font theme
447
- #: src/ui/dash/settings/AppearanceContent.tsx:147
518
+ #: src/ui/dash/appearance/FontThemeContent.tsx
448
519
  msgid "Font theme"
520
+ msgstr "字体主题"
521
+
522
+ #. @context: Appearance sub-navigation tab
523
+ #: src/ui/dash/appearance/AppearanceNav.tsx
524
+ msgid "Font Theme"
449
525
  msgstr ""
450
526
 
527
+ #. @context: Toast after saving site footer
528
+ #. @context: Toast after saving site footer
529
+ #: src/routes/dash/settings.tsx
530
+ #: src/routes/dash/settings.tsx
531
+ #~ msgid "Footer saved successfully."
532
+ #~ msgstr "页脚保存成功。"
533
+
451
534
  #. @context: Post form field - post format
452
- #: src/ui/dash/PostForm.tsx:64
535
+ #: src/ui/dash/posts/PostForm.tsx
453
536
  msgid "Format"
454
- msgstr ""
537
+ msgstr "格式"
455
538
 
456
539
  #. @context: Search results count - multiple
457
- #: src/ui/pages/SearchPage.tsx:73
458
- msgid "Found {count} results"
459
- msgstr "找到 {count} 个结果"
540
+ #. placeholder {0}: String(results.length)
541
+ #: src/ui/pages/SearchPage.tsx
542
+ msgid "Found {0} results"
543
+ msgstr "找到 {0} 个结果"
460
544
 
461
545
  #. @context: Search results count - single
462
- #: src/ui/pages/SearchPage.tsx:69
546
+ #: src/ui/pages/SearchPage.tsx
463
547
  msgid "Found 1 result"
464
548
  msgstr "找到 1 个结果"
465
549
 
466
550
  #. @context: Redirect form field
467
- #: src/routes/dash/redirects.tsx:98
551
+ #: src/routes/dash/redirects.tsx
468
552
  msgid "From Path"
469
553
  msgstr "来源路径"
470
554
 
471
555
  #. @context: Settings section heading
472
556
  #. @context: Settings sub-navigation tab
473
- #: src/ui/dash/settings/GeneralContent.tsx:299
474
- #: src/ui/dash/settings/SettingsNav.tsx:15
557
+ #: src/ui/dash/settings/GeneralContent.tsx
558
+ #: src/ui/dash/settings/SettingsNav.tsx
475
559
  msgid "General"
476
560
  msgstr "常规"
477
561
 
478
- #. @context: Post type badge - image
479
- #. @context: Post type label - image
480
- #. @context: Post type option
481
- #: src/theme/components/PostForm.tsx:83
482
- #: src/theme/components/TypeBadge.tsx:29
483
- #: src/themes/threads/pages/ArchivePage.tsx:26
484
- #~ msgid "Image"
485
- #~ msgstr "图像"
562
+ #. @context: Compose link title placeholder
563
+ #: src/ui/compose/ComposeDialog.tsx
564
+ msgid "Give it a title..."
565
+ msgstr "给它一个标题..."
486
566
 
487
- #. @context: Post type label plural - images
488
- #: src/themes/threads/pages/ArchivePage.tsx:54
489
- #~ msgid "Images"
490
- #~ msgstr "图片"
567
+ #. @context: Collection sort order option
568
+ #: src/ui/dash/collections/CollectionForm.tsx
569
+ msgid "Highest rated"
570
+ msgstr "最高评分"
571
+
572
+ #. @context: Collection form field
573
+ #: src/ui/dash/collections/CollectionForm.tsx
574
+ msgid "Icon (optional)"
575
+ msgstr "图标(可选)"
491
576
 
492
577
  #. @context: Media upload instructions - auto optimization
493
- #: src/ui/dash/media/MediaListContent.tsx:147
578
+ #: src/ui/dash/media/MediaListContent.tsx
494
579
  msgid "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
495
580
  msgstr "图像会自动优化:调整大小至最大 1920px,转换为 WebP,并去除元数据。"
496
581
 
582
+ #. @context: Error toast when sign-in credentials are wrong
583
+ #: src/routes/auth/signin.tsx
584
+ msgid "Invalid email or password"
585
+ msgstr "无效的电子邮件或密码"
586
+
587
+ #. @context: Error toast when selected font theme is not valid
588
+ #: src/routes/dash/appearance.tsx
589
+ msgid "Invalid font theme selected."
590
+ msgstr "所选字体主题无效。"
591
+
592
+ #. @context: Fallback validation error for compose form
593
+ #. @context: Fallback validation error for page form
594
+ #. @context: Fallback validation error for page form
595
+ #. @context: Fallback validation error for password reset form
596
+ #. @context: Fallback validation error for setup form
597
+ #. @context: Fallback validation error for sign-in form
598
+ #: src/routes/auth/reset.tsx
599
+ #: src/routes/auth/setup.tsx
600
+ #: src/routes/auth/signin.tsx
601
+ #: src/routes/compose.tsx
602
+ #: src/routes/dash/pages.tsx
603
+ #: src/routes/dash/pages.tsx
604
+ msgid "Invalid input"
605
+ msgstr "无效输入"
606
+
497
607
  #. @context: Password reset error heading
498
- #: src/routes/auth/reset.tsx:120
608
+ #: src/routes/auth/reset.tsx
499
609
  msgid "Invalid or Expired Link"
500
610
  msgstr "无效或过期的链接"
501
611
 
612
+ #. @context: Error toast when reorder request is malformed
613
+ #: src/routes/dash/pages.tsx
614
+ msgid "Invalid request"
615
+ msgstr "无效的请求"
616
+
617
+ #. @context: Error toast when selected theme is not valid
618
+ #: src/routes/dash/appearance.tsx
619
+ msgid "Invalid theme selected."
620
+ msgstr "所选主题无效。"
621
+
502
622
  #. @context: Checkbox for allowing search engine indexing
503
- #: src/ui/dash/settings/GeneralContent.tsx:515
623
+ #: src/ui/dash/settings/GeneralContent.tsx
504
624
  msgid "It's OK for search engines to index my site"
505
- msgstr ""
625
+ msgstr "允许搜索引擎索引我的网站是可以的"
506
626
 
507
627
  #. @context: Navigation link form field
508
- #: src/ui/dash/pages/LinkFormContent.tsx:39
628
+ #: src/ui/dash/pages/LinkFormContent.tsx
509
629
  msgid "Label"
510
630
  msgstr "标签"
511
631
 
632
+ #. @context: Error toast when nav link fields are empty
633
+ #. @context: Error toast when nav link fields are empty
634
+ #: src/routes/dash/pages.tsx
635
+ #: src/routes/dash/pages.tsx
636
+ msgid "Label and URL are required"
637
+ msgstr "标签和 URL 是必填项"
638
+
512
639
  #. @context: Settings form field
513
- #: src/ui/dash/settings/GeneralContent.tsx:350
640
+ #: src/ui/dash/settings/GeneralContent.tsx
514
641
  msgid "Language"
515
642
  msgstr "语言"
516
643
 
517
644
  #. @context: Browse filter for latest posts
518
645
  #. @context: Homepage view option - show latest posts
519
- #: src/ui/dash/settings/GeneralContent.tsx:388
520
- #: src/ui/layouts/SiteLayout.tsx:48
646
+ #: src/ui/dash/settings/GeneralContent.tsx
647
+ #: src/ui/layouts/SiteLayout.tsx
521
648
  msgid "Latest"
522
- msgstr ""
649
+ msgstr "最新"
523
650
 
524
651
  #. @context: Nav item type badge
525
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:123
652
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
526
653
  msgid "link"
527
- msgstr ""
654
+ msgstr "链接"
528
655
 
529
656
  #. @context: Compose format tab
530
657
  #. @context: Post format badge - link
531
658
  #. @context: Post format label - link
532
659
  #. @context: Post format option
533
- #: src/ui/compose/ComposeDialog.tsx:101
534
- #: src/ui/dash/FormatBadge.tsx:20
535
- #: src/ui/dash/PostForm.tsx:74
536
- #: src/ui/pages/ArchivePage.tsx:17
660
+ #: src/ui/compose/ComposeDialog.tsx
661
+ #: src/ui/dash/FormatBadge.tsx
662
+ #: src/ui/dash/posts/PostForm.tsx
663
+ #: src/ui/pages/ArchivePage.tsx
537
664
  msgid "Link"
538
665
  msgstr "链接"
539
666
 
540
667
  #. @context: Post format label plural - links
541
- #: src/ui/pages/ArchivePage.tsx:33
668
+ #: src/ui/pages/ArchivePage.tsx
542
669
  msgid "Links"
543
670
  msgstr "链接"
544
671
 
545
672
  #. @context: Pagination button - load more items
546
- #: src/ui/shared/Pagination.tsx:104
673
+ #: src/ui/shared/Pagination.tsx
547
674
  msgid "Load more"
548
675
  msgstr "加载更多"
549
676
 
550
677
  #. @context: Loading state for media picker
551
- #. @context: Loading state for media picker
552
- #: src/ui/compose/ComposeDialog.tsx:405
553
- #: src/ui/dash/PostForm.tsx:351
678
+ #: src/ui/dash/posts/PostForm.tsx
554
679
  msgid "Loading..."
555
680
  msgstr "加载中..."
556
681
 
557
682
  #. @context: Page slug validation message
558
- #: src/ui/dash/PageForm.tsx:77
683
+ #: src/ui/dash/PageForm.tsx
559
684
  msgid "Lowercase letters, numbers, and hyphens only"
560
685
  msgstr "仅允许小写字母、数字和连字符"
561
686
 
687
+ #. @context: Collection sort order option
688
+ #: src/ui/dash/collections/CollectionForm.tsx
689
+ msgid "Lowest rated"
690
+ msgstr "最低评分"
691
+
562
692
  #. @context: Media detail section - Markdown snippet
563
- #: src/ui/dash/media/ViewMediaContent.tsx:146
693
+ #: src/ui/dash/media/ViewMediaContent.tsx
564
694
  msgid "Markdown"
565
695
  msgstr "Markdown"
566
696
 
567
- #. @context: Placeholder for footer textarea
568
- #: src/ui/dash/settings/GeneralContent.tsx:466
697
+ #. @context: Placeholder hint for markdown-enabled textareas
698
+ #: src/ui/dash/settings/GeneralContent.tsx
569
699
  msgid "Markdown supported"
570
- msgstr ""
700
+ msgstr "支持Markdown"
571
701
 
702
+ #. @context: Compose toolbar - media tooltip
572
703
  #. @context: Dashboard navigation - media library
573
704
  #. @context: Media main heading
574
705
  #. @context: Post form field - media attachments
575
- #: src/ui/dash/media/MediaListContent.tsx:127
576
- #: src/ui/dash/PostForm.tsx:158
577
- #: src/ui/layouts/DashLayout.tsx:105
706
+ #: src/ui/compose/ComposeDialog.tsx
707
+ #: src/ui/dash/media/MediaListContent.tsx
708
+ #: src/ui/dash/posts/PostForm.tsx
709
+ #: src/ui/layouts/DashLayout.tsx
578
710
  msgid "Media"
579
711
  msgstr "媒体"
580
712
 
581
713
  #. @context: Collection title placeholder
582
- #: src/ui/dash/collections/CollectionForm.tsx:70
714
+ #: src/ui/dash/collections/CollectionForm.tsx
583
715
  msgid "My Collection"
584
716
  msgstr "我的收藏"
585
717
 
586
718
  #. @context: Account settings form field
587
- #: src/ui/dash/settings/AccountContent.tsx:38
719
+ #: src/ui/dash/settings/AccountContent.tsx
588
720
  msgid "Name"
589
721
  msgstr "姓名"
590
722
 
591
- #. @context: Dashboard heading
592
- #. @context: Dashboard navigation - navigation links management
593
- #: src/routes/dash/navigation.tsx:29
594
- #: src/theme/layouts/DashLayout.tsx:133
595
- #~ msgid "Navigation"
596
- #~ msgstr "导航"
723
+ #. @context: Error toast when display name is empty
724
+ #: src/routes/dash/settings.tsx
725
+ msgid "Name is required."
726
+ msgstr "名称是必需的。"
597
727
 
598
728
  #. @context: Help text with link
599
- #: src/routes/dash/index.tsx:78
729
+ #: src/routes/dash/index.tsx
600
730
  msgid "Need help? Visit the <0>documentation</0>"
601
731
  msgstr "需要帮助吗?访问<0>文档</0>。"
602
732
 
603
733
  #. @context: Button to create new collection
604
734
  #. @context: Button to create new collection
605
735
  #. @context: Page heading
606
- #: src/ui/dash/collections/CollectionForm.tsx:29
607
- #: src/ui/dash/collections/CollectionsListContent.tsx:28
608
- #: src/ui/dash/collections/CollectionsListContent.tsx:41
736
+ #: src/ui/dash/collections/CollectionForm.tsx
737
+ #: src/ui/dash/collections/CollectionsListContent.tsx
738
+ #: src/ui/dash/collections/CollectionsListContent.tsx
609
739
  msgid "New Collection"
610
740
  msgstr "新收藏"
611
741
 
742
+ #. @context: Button to add divider between collections
743
+ #: src/ui/dash/collections/CollectionsListContent.tsx
744
+ msgid "New Divider"
745
+ msgstr "新分隔符"
746
+
612
747
  #. @context: Page heading
613
- #: src/ui/dash/pages/LinkFormContent.tsx:18
748
+ #: src/ui/dash/pages/LinkFormContent.tsx
614
749
  msgid "New Link"
615
750
  msgstr "新链接"
616
751
 
617
752
  #. @context: Button to create new page
618
753
  #. @context: New page main heading
619
- #: src/routes/dash/pages.tsx:31
620
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:34
754
+ #: src/routes/dash/pages.tsx
755
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
621
756
  msgid "New Page"
622
757
  msgstr "新页面"
623
758
 
624
759
  #. @context: Password form field
625
760
  #. @context: Password reset form field
626
- #: src/routes/auth/reset.tsx:54
627
- #: src/ui/dash/settings/AccountContent.tsx:113
761
+ #: src/routes/auth/reset.tsx
762
+ #: src/ui/dash/settings/AccountContent.tsx
628
763
  msgid "New Password"
629
764
  msgstr "新密码"
630
765
 
631
766
  #. @context: Button to create new post
632
767
  #. @context: Button to create new post
633
- #. @context: Compose dialog title
634
768
  #. @context: Page heading
635
- #: src/routes/dash/index.tsx:68
636
- #: src/routes/dash/posts.tsx:30
637
- #: src/routes/dash/posts.tsx:46
638
- #: src/ui/compose/ComposeDialog.tsx:66
769
+ #: src/routes/dash/index.tsx
770
+ #: src/routes/dash/posts.tsx
771
+ #: src/routes/dash/posts.tsx
639
772
  msgid "New Post"
640
773
  msgstr "新帖子"
641
774
 
642
775
  #. @context: Button to create new redirect
643
776
  #. @context: Button to create new redirect
644
777
  #. @context: Page heading
645
- #: src/routes/dash/redirects.tsx:33
646
- #: src/routes/dash/redirects.tsx:46
647
- #: src/routes/dash/redirects.tsx:87
778
+ #: src/routes/dash/redirects.tsx
779
+ #: src/routes/dash/redirects.tsx
780
+ #: src/routes/dash/redirects.tsx
648
781
  msgid "New Redirect"
649
782
  msgstr "新重定向"
650
783
 
784
+ #. @context: Collection sort order option
785
+ #: src/ui/dash/collections/CollectionForm.tsx
786
+ msgid "Newest first"
787
+ msgstr "最新优先"
788
+
651
789
  #. @context: Pagination button - next page
652
790
  #. @context: Pagination button - next page
653
- #: src/ui/shared/Pagination.tsx:50
654
- #: src/ui/shared/Pagination.tsx:167
791
+ #: src/ui/shared/Pagination.tsx
792
+ #: src/ui/shared/Pagination.tsx
655
793
  msgid "Next"
656
794
  msgstr "下一页"
657
795
 
796
+ #. @context: Compose collection combobox empty state
797
+ #: src/ui/compose/ComposeDialog.tsx
798
+ msgid "No collections found."
799
+ msgstr ""
800
+
658
801
  #. @context: Empty state message
659
802
  #. @context: Empty state message on collections page
660
- #: src/ui/dash/collections/CollectionsListContent.tsx:37
661
- #: src/ui/pages/CollectionsPage.tsx:28
803
+ #: src/ui/dash/collections/CollectionsListContent.tsx
804
+ #: src/ui/pages/CollectionsPage.tsx
662
805
  msgid "No collections yet."
663
806
  msgstr "尚未有任何收藏。"
664
807
 
665
808
  #. @context: Empty state message on featured page
666
- #: src/ui/pages/FeaturedPage.tsx:20
809
+ #: src/ui/pages/FeaturedPage.tsx
667
810
  msgid "No featured posts yet."
668
- msgstr ""
811
+ msgstr "尚无精选帖子。"
812
+
813
+ #. @context: Error when no file was selected for upload
814
+ #: src/routes/api/upload.ts
815
+ msgid "No file provided"
816
+ msgstr "未提供文件"
817
+
818
+ #. @context: Error toast when no file was selected for upload
819
+ #: src/routes/dash/settings.tsx
820
+ msgid "No file provided."
821
+ msgstr "未提供文件。"
822
+
823
+ #. @context: Post form media empty state
824
+ #: src/ui/dash/posts/PostForm.tsx
825
+ msgid "No media selected yet."
826
+ msgstr "尚未选择任何媒体。"
669
827
 
670
828
  #. @context: Empty state message when no media exists
671
- #: src/ui/dash/media/MediaListContent.tsx:162
829
+ #: src/ui/dash/media/MediaListContent.tsx
672
830
  msgid "No media uploaded yet."
673
831
  msgstr "尚未上传任何媒体。"
674
832
 
675
- #. @context: Empty state message
676
- #: src/routes/dash/navigation.tsx:42
677
- #~ msgid "No navigation links configured."
678
- #~ msgstr "未配置导航链接。"
679
-
680
833
  #. @context: Empty state for navigation section
681
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:52
834
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
682
835
  msgid "No navigation links yet. Add pages to navigation or create links."
683
- msgstr ""
684
-
685
- #. @context: Empty state message when no pages exist
686
- #: src/routes/dash/pages.tsx:44
687
- #~ msgid "No pages yet."
688
- #~ msgstr "还没有页面。"
836
+ msgstr "尚未有导航链接。请将页面添加到导航或创建链接。"
689
837
 
690
838
  #. @context: Archive empty state
691
- #: src/ui/pages/ArchivePage.tsx:103
839
+ #: src/ui/pages/ArchivePage.tsx
692
840
  msgid "No posts found."
693
841
  msgstr "未找到帖子。"
694
842
 
695
843
  #. @context: Empty state message
696
844
  #. @context: Empty state message
697
- #: src/ui/dash/collections/ViewCollectionContent.tsx:56
698
- #: src/ui/pages/CollectionPage.tsx:29
845
+ #: src/ui/dash/collections/ViewCollectionContent.tsx
846
+ #: src/ui/pages/CollectionPage.tsx
699
847
  msgid "No posts in this collection."
700
848
  msgstr "此集合中没有帖子。"
701
849
 
702
850
  #. @context: Empty state message on home page
703
851
  #. @context: Empty state message when no posts exist
704
- #: src/ui/dash/PostList.tsx:25
705
- #: src/ui/pages/HomePage.tsx:23
852
+ #: src/ui/dash/PostList.tsx
853
+ #: src/ui/pages/HomePage.tsx
706
854
  msgid "No posts yet."
707
855
  msgstr "还没有帖子。"
708
856
 
709
857
  #. @context: Empty state message
710
- #: src/routes/dash/redirects.tsx:42
858
+ #: src/routes/dash/redirects.tsx
711
859
  msgid "No redirects configured."
712
860
  msgstr "未配置重定向。"
713
861
 
714
862
  #. @context: Search empty results
715
- #: src/ui/pages/SearchPage.tsx:64
863
+ #: src/ui/pages/SearchPage.tsx
716
864
  msgid "No results found."
717
865
  msgstr "未找到结果。"
718
866
 
719
- #. @context: No collection selected
720
- #. @context: No collection selected
721
- #. @context: No rating selected
722
- #: src/ui/compose/ComposeDialog.tsx:174
723
- #: src/ui/compose/ComposeDialog.tsx:198
724
- #: src/ui/dash/PostForm.tsx:271
725
- msgid "None"
726
- msgstr ""
727
-
728
867
  #. @context: Compose format tab
729
868
  #. @context: Post format badge - note
730
869
  #. @context: Post format label - note
731
870
  #. @context: Post format option
732
- #: src/ui/compose/ComposeDialog.tsx:90
733
- #: src/ui/dash/FormatBadge.tsx:19
734
- #: src/ui/dash/PostForm.tsx:71
735
- #: src/ui/pages/ArchivePage.tsx:16
871
+ #: src/ui/compose/ComposeDialog.tsx
872
+ #: src/ui/dash/FormatBadge.tsx
873
+ #: src/ui/dash/posts/PostForm.tsx
874
+ #: src/ui/pages/ArchivePage.tsx
736
875
  msgid "Note"
737
876
  msgstr "注意"
738
877
 
739
878
  #. @context: Post format label plural - notes
740
- #: src/ui/pages/ArchivePage.tsx:29
879
+ #: src/ui/pages/ArchivePage.tsx
741
880
  msgid "Notes"
742
881
  msgstr "笔记"
743
882
 
883
+ #. @context: Collection sort order option
884
+ #: src/ui/dash/collections/CollectionForm.tsx
885
+ msgid "Oldest first"
886
+ msgstr "最旧的在前"
887
+
888
+ #. @context: Toast after saving navigation item order
889
+ #: src/routes/dash/pages.tsx
890
+ msgid "Order saved"
891
+ msgstr "已保存顺序"
892
+
744
893
  #. @context: Section heading for pages not in navigation
745
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:139
894
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
746
895
  msgid "Other pages"
747
- msgstr ""
896
+ msgstr "其他页面"
748
897
 
749
898
  #. @context: Nav item type badge
750
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:119
899
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
751
900
  msgid "page"
752
- msgstr ""
901
+ msgstr "页面"
753
902
 
754
903
  #. @context: Default page heading when untitled
755
- #: src/routes/dash/pages.tsx:46
904
+ #: src/routes/dash/pages.tsx
756
905
  msgid "Page"
757
906
  msgstr "页面"
758
907
 
759
908
  #. @context: Pagination - current page indicator
760
- #: src/ui/shared/Pagination.tsx:227
909
+ #: src/ui/shared/Pagination.tsx
761
910
  msgid "Page {page}"
762
911
  msgstr "页面 {page}"
763
912
 
764
913
  #. @context: Page content placeholder
765
- #: src/ui/dash/PageForm.tsx:104
914
+ #: src/ui/dash/PageForm.tsx
766
915
  msgid "Page content (Markdown supported)..."
767
916
  msgstr "页面内容(支持Markdown)..."
768
917
 
769
918
  #. @context: Page title placeholder
770
- #: src/ui/dash/PageForm.tsx:53
919
+ #: src/ui/dash/PageForm.tsx
771
920
  msgid "Page title..."
772
921
  msgstr "页面标题..."
773
922
 
774
923
  #. @context: Dashboard navigation - pages management
775
924
  #. @context: Pages main heading
776
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:21
777
- #: src/ui/layouts/DashLayout.tsx:96
925
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
926
+ #: src/ui/layouts/DashLayout.tsx
778
927
  msgid "Pages"
779
928
  msgstr "页面"
780
929
 
781
930
  #. @context: Setup/signin form field - password
782
931
  #. @context: Setup/signin form field - password
783
- #: src/routes/auth/setup.tsx:79
784
- #: src/routes/auth/signin.tsx:64
932
+ #: src/routes/auth/setup.tsx
933
+ #: src/routes/auth/signin.tsx
785
934
  msgid "Password"
786
935
  msgstr "密码"
787
936
 
788
- #. @context: Page form field label - URL path
789
- #: src/theme/components/PageForm.tsx:64
790
- #~ msgid "Path"
791
- #~ msgstr "路径"
937
+ #. @context: Toast after changing account password
938
+ #: src/routes/dash/settings.tsx
939
+ msgid "Password changed successfully."
940
+ msgstr "密码更改成功。"
941
+
942
+ #. @context: Error toast when new password and confirmation differ
943
+ #: src/routes/dash/settings.tsx
944
+ msgid "Passwords do not match."
945
+ msgstr "密码不匹配。"
946
+
947
+ #. @context: Attached text placeholder
948
+ #: src/ui/compose/ComposeDialog.tsx
949
+ msgid ""
950
+ "Paste a long article, AI response, or any text...\n"
951
+ "\n"
952
+ "Markdown formatting will be preserved."
953
+ msgstr ""
954
+ "粘贴一篇长文章、AI 响应或任何文本...\n"
955
+ "\n"
956
+ "Markdown 格式将被保留。"
957
+
958
+ #. @context: Compose link URL placeholder
959
+ #: src/ui/compose/ComposeDialog.tsx
960
+ msgid "Paste a URL..."
961
+ msgstr "粘贴一个网址..."
792
962
 
793
963
  #. @context: Navigation URL help text
794
- #: src/ui/dash/pages/LinkFormContent.tsx:74
964
+ #: src/ui/dash/pages/LinkFormContent.tsx
795
965
  msgid "Path (e.g. /archive) or full URL (e.g. https://example.com)"
796
966
  msgstr "路径(例如 /archive)或完整 URL(例如 https://example.com)"
797
967
 
798
968
  #. @context: Link to individual post in thread
799
969
  #. @context: Link to permanent URL of post
800
- #: src/ui/pages/PostPage.tsx:48
801
- #: src/ui/shared/ThreadView.tsx:71
970
+ #: src/ui/pages/PostPage.tsx
971
+ #: src/ui/shared/ThreadView.tsx
802
972
  msgid "Permalink"
803
973
  msgstr "永久链接"
804
974
 
805
- #. @context: Compose checkbox - pin to top
806
975
  #. @context: Post badge - pinned
807
976
  #. @context: Post form checkbox - pin to top
808
- #: src/ui/compose/ComposeDialog.tsx:312
809
- #: src/ui/dash/PostForm.tsx:253
810
- #: src/ui/dash/StatusBadge.tsx:53
977
+ #: src/ui/dash/posts/PostForm.tsx
978
+ #: src/ui/dash/StatusBadge.tsx
811
979
  msgid "Pinned"
812
- msgstr ""
813
-
814
- #. @context: Singular post count label
815
- #: src/ui/pages/CollectionsPage.tsx:56
816
- msgid "post"
817
- msgstr ""
980
+ msgstr "已固定"
818
981
 
819
982
  #. @context: Compose button - publish post
820
983
  #. @context: Compose prompt post button
821
984
  #. @context: Default post title
822
- #: src/routes/dash/posts.tsx:128
823
- #: src/ui/compose/ComposeDialog.tsx:365
824
- #: src/ui/compose/ComposePrompt.tsx:48
985
+ #: src/routes/dash/posts.tsx
986
+ #: src/ui/compose/ComposeDialog.tsx
987
+ #: src/ui/compose/ComposePrompt.tsx
825
988
  msgid "Post"
826
989
  msgstr "帖子"
827
990
 
991
+ #. @context: Toast after creating post
992
+ #: src/ui/dash/posts/PostForm.tsx
993
+ msgid "Post published successfully."
994
+ msgstr "帖子发布成功。"
995
+
828
996
  #. @context: Post title placeholder
829
- #: src/ui/dash/PostForm.tsx:94
997
+ #: src/ui/dash/posts/PostForm.tsx
830
998
  msgid "Post title..."
831
999
  msgstr "帖子标题..."
832
1000
 
833
- #. @context: Compose loading text while posting
834
- #: src/ui/compose/ComposeDialog.tsx:345
835
- #~ msgid "Posting..."
836
- #~ msgstr ""
837
-
838
- #. @context: Plural post count label
839
- #: src/ui/pages/CollectionsPage.tsx:60
840
- msgid "posts"
841
- msgstr ""
1001
+ #. @context: Toast after editing post
1002
+ #: src/ui/dash/posts/PostForm.tsx
1003
+ msgid "Post updated successfully."
1004
+ msgstr "帖子更新成功。"
842
1005
 
843
1006
  #. @context: Dashboard heading
844
1007
  #. @context: Dashboard navigation - posts management
845
- #: src/routes/dash/posts.tsx:29
846
- #: src/ui/layouts/DashLayout.tsx:87
1008
+ #: src/routes/dash/posts.tsx
1009
+ #: src/ui/layouts/DashLayout.tsx
847
1010
  msgid "Posts"
848
1011
  msgstr "帖子"
849
1012
 
850
1013
  #. @context: Collection posts section heading
851
- #: src/ui/dash/collections/ViewCollectionContent.tsx:18
1014
+ #: src/ui/dash/collections/ViewCollectionContent.tsx
852
1015
  msgid "Posts in Collection ({count})"
853
1016
  msgstr "集合中的帖子 ({count})"
854
1017
 
855
1018
  #. @context: Media detail section - preview
856
- #: src/ui/dash/media/ViewMediaContent.tsx:69
1019
+ #: src/ui/dash/media/ViewMediaContent.tsx
857
1020
  msgid "Preview"
858
1021
  msgstr "预览"
859
1022
 
860
1023
  #. @context: Pagination button - previous page
861
1024
  #. @context: Pagination button - previous page
862
- #: src/ui/shared/Pagination.tsx:46
863
- #: src/ui/shared/Pagination.tsx:163
1025
+ #: src/ui/shared/Pagination.tsx
1026
+ #: src/ui/shared/Pagination.tsx
864
1027
  msgid "Previous"
865
1028
  msgstr "上一页"
866
1029
 
867
1030
  #. @context: Avatar upload button text while generating favicon variants
868
1031
  #. @context: Upload status - processing
869
- #: src/ui/dash/media/MediaListContent.tsx:95
870
- #: src/ui/dash/settings/GeneralContent.tsx:215
1032
+ #: src/ui/dash/media/MediaListContent.tsx
1033
+ #: src/ui/dash/settings/GeneralContent.tsx
871
1034
  msgid "Processing..."
872
1035
  msgstr "处理中..."
873
1036
 
874
1037
  #. @context: Account settings section heading
875
- #: src/ui/dash/settings/AccountContent.tsx:29
1038
+ #: src/ui/dash/settings/AccountContent.tsx
876
1039
  msgid "Profile"
877
1040
  msgstr "个人资料"
878
1041
 
1042
+ #. @context: Toast after saving user profile
1043
+ #: src/routes/dash/settings.tsx
1044
+ msgid "Profile saved successfully."
1045
+ msgstr "个人资料保存成功。"
1046
+
879
1047
  #. @context: Button to publish new post
880
- #: src/ui/dash/PostForm.tsx:312
1048
+ #: src/ui/dash/posts/PostForm.tsx
881
1049
  msgid "Publish"
882
1050
  msgstr "发布"
883
1051
 
@@ -885,437 +1053,480 @@ msgstr "发布"
885
1053
  #. @context: Post status badge - published
886
1054
  #. @context: Post status label
887
1055
  #. @context: Post status option
888
- #: src/routes/dash/index.tsx:45
889
- #: src/ui/dash/PageForm.tsx:127
890
- #: src/ui/dash/PostForm.tsx:228
891
- #: src/ui/dash/StatusBadge.tsx:30
1056
+ #: src/routes/dash/index.tsx
1057
+ #: src/ui/dash/PageForm.tsx
1058
+ #: src/ui/dash/posts/PostForm.tsx
1059
+ #: src/ui/dash/StatusBadge.tsx
892
1060
  msgid "Published"
893
1061
  msgstr "已发布"
894
1062
 
895
1063
  #. @context: Page status helper text
896
- #: src/theme/components/PageForm.tsx:140
897
- #~ msgid "Published pages are accessible via their path. Drafts are not visible."
898
- #~ msgstr "已发布的页面可以通过其路径访问。草稿不可见。"
899
-
900
- #. @context: Page status helper text
901
- #: src/ui/dash/PageForm.tsx:140
1064
+ #: src/ui/dash/PageForm.tsx
902
1065
  msgid "Published pages are accessible via their slug. Drafts are not visible."
1066
+ msgstr "已发布的页面可以通过其别名访问。草稿不可见。"
1067
+
1068
+ #. @context: Toast shown after successful deferred publish
1069
+ #: src/ui/compose/ComposeDialog.tsx
1070
+ msgid "Published!"
903
1071
  msgstr ""
904
1072
 
905
1073
  #. @context: Dashboard section title
906
- #: src/routes/dash/index.tsx:62
1074
+ #: src/routes/dash/index.tsx
907
1075
  msgid "Quick Actions"
908
1076
  msgstr "快速操作"
909
1077
 
910
- #. @context: Post visibility badge - normal
911
- #: src/theme/components/VisibilityBadge.tsx:30
912
- #~ msgid "Quiet"
913
- #~ msgstr "安静"
914
-
915
- #. @context: Post visibility option
916
- #: src/theme/components/PostForm.tsx:243
917
- #~ msgid "Quiet (normal)"
918
- #~ msgstr "安静(正常)"
919
-
920
1078
  #. @context: Compose format tab
921
1079
  #. @context: Post format badge - quote
922
1080
  #. @context: Post format label - quote
923
1081
  #. @context: Post format option
924
- #: src/ui/compose/ComposeDialog.tsx:112
925
- #: src/ui/dash/FormatBadge.tsx:21
926
- #: src/ui/dash/PostForm.tsx:77
927
- #: src/ui/pages/ArchivePage.tsx:18
1082
+ #: src/ui/compose/ComposeDialog.tsx
1083
+ #: src/ui/dash/FormatBadge.tsx
1084
+ #: src/ui/dash/posts/PostForm.tsx
1085
+ #: src/ui/pages/ArchivePage.tsx
928
1086
  msgid "Quote"
929
1087
  msgstr "引用"
930
1088
 
931
1089
  #. @context: Post form field - quoted text
932
- #: src/ui/dash/PostForm.tsx:137
1090
+ #: src/ui/dash/posts/PostForm.tsx
933
1091
  msgid "Quote Text"
934
- msgstr ""
1092
+ msgstr "引用文本"
935
1093
 
936
1094
  #. @context: Post format label plural - quotes
937
- #: src/ui/pages/ArchivePage.tsx:37
1095
+ #: src/ui/pages/ArchivePage.tsx
938
1096
  msgid "Quotes"
939
1097
  msgstr "引用"
940
1098
 
941
- #. @context: Compose rating field
942
- #. @context: Compose toolbar - toggle rating
943
- #: src/ui/compose/ComposeDialog.tsx:167
944
- #: src/ui/compose/ComposeDialog.tsx:246
945
- msgid "Rating"
946
- msgstr ""
947
-
948
- #. @context: Dashboard heading
949
- #. @context: Dashboard navigation - URL redirects
950
- #: src/routes/dash/redirects.tsx:29
951
- #: src/ui/layouts/DashLayout.tsx:124
1099
+ #. @context: Settings section heading
1100
+ #. @context: Settings sub-navigation tab
1101
+ #: src/routes/dash/redirects.tsx
1102
+ #: src/ui/dash/settings/SettingsNav.tsx
952
1103
  msgid "Redirects"
953
1104
  msgstr "重定向"
954
1105
 
1106
+ #. @context: Button to remove icon
955
1107
  #. @context: Button to remove the blog avatar
956
1108
  #. @context: Remove media attachment button
957
- #: src/ui/dash/PostForm.tsx:194
958
- #: src/ui/dash/settings/GeneralContent.tsx:243
1109
+ #: src/ui/dash/collections/CollectionForm.tsx
1110
+ #: src/ui/dash/posts/PostForm.tsx
1111
+ #: src/ui/dash/settings/GeneralContent.tsx
959
1112
  msgid "Remove"
960
1113
  msgstr "移除"
961
1114
 
1115
+ #. @context: Button to delete a divider
1116
+ #: src/ui/dash/collections/CollectionsListContent.tsx
1117
+ msgid "Remove divider"
1118
+ msgstr "移除分隔符"
1119
+
962
1120
  #. @context: Password reset form submit button
963
1121
  #. @context: Password reset page heading
964
- #: src/routes/auth/reset.tsx:33
965
- #: src/routes/auth/reset.tsx:100
1122
+ #: src/routes/auth/reset.tsx
1123
+ #: src/routes/auth/reset.tsx
966
1124
  msgid "Reset Password"
967
1125
  msgstr "重置密码"
968
1126
 
969
1127
  #. @context: Button to save settings
970
- #: src/ui/dash/settings/GeneralContent.tsx:74
1128
+ #: src/ui/dash/settings/GeneralContent.tsx
971
1129
  msgid "Save"
972
- msgstr ""
1130
+ msgstr "保存"
1131
+
1132
+ #. @context: More menu - save draft
1133
+ #: src/ui/compose/ComposeDialog.tsx
1134
+ msgid "Save as draft"
1135
+ msgstr "保存为草稿"
1136
+
1137
+ #. @context: Header draft button tooltip
1138
+ #: src/ui/compose/ComposeDialog.tsx
1139
+ msgid "Save as Draft"
1140
+ msgstr "保存为草稿"
973
1141
 
974
1142
  #. @context: Button to save edited navigation link
975
- #: src/ui/dash/pages/LinkFormContent.tsx:100
1143
+ #: src/ui/dash/pages/LinkFormContent.tsx
976
1144
  msgid "Save Changes"
977
1145
  msgstr "保存更改"
978
1146
 
979
1147
  #. @context: Button to save custom CSS
980
- #: src/ui/dash/settings/AppearanceContent.tsx:246
1148
+ #: src/ui/dash/appearance/AdvancedContent.tsx
981
1149
  msgid "Save CSS"
982
- msgstr ""
1150
+ msgstr "保存 CSS"
983
1151
 
984
1152
  #. @context: Button to save profile
985
- #: src/ui/dash/settings/AccountContent.tsx:73
1153
+ #: src/ui/dash/settings/AccountContent.tsx
986
1154
  msgid "Save Profile"
987
1155
  msgstr "保存个人资料"
988
1156
 
989
- #. @context: Button to save settings
990
- #: src/ui/dash/settings/GeneralContent.tsx:142
991
- #~ msgid "Save Settings"
992
- #~ msgstr "保存设置"
1157
+ #. @context: Compose toolbar - score tooltip
1158
+ #: src/ui/compose/ComposeDialog.tsx
1159
+ msgid "Score"
1160
+ msgstr "得分"
993
1161
 
994
1162
  #. @context: Search icon link in browse nav
995
1163
  #. @context: Search page title
996
1164
  #. @context: Search submit button
997
- #: src/ui/layouts/SiteLayout.tsx:67
998
- #: src/ui/pages/SearchPage.tsx:20
999
- #: src/ui/pages/SearchPage.tsx:44
1165
+ #: src/ui/layouts/SiteLayout.tsx
1166
+ #: src/ui/pages/SearchPage.tsx
1167
+ #: src/ui/pages/SearchPage.tsx
1000
1168
  msgid "Search"
1001
1169
  msgstr "搜索"
1002
1170
 
1171
+ #. @context: Icon picker search placeholder
1172
+ #: src/ui/dash/collections/CollectionForm.tsx
1173
+ msgid "Search icons..."
1174
+ msgstr "搜索图标..."
1175
+
1003
1176
  #. @context: Search input placeholder
1004
- #: src/ui/pages/SearchPage.tsx:36
1177
+ #: src/ui/pages/SearchPage.tsx
1005
1178
  msgid "Search posts..."
1006
1179
  msgstr "搜索帖子..."
1007
1180
 
1181
+ #. @context: Compose collection combobox search placeholder
1182
+ #: src/ui/compose/ComposeDialog.tsx
1183
+ msgid "Search..."
1184
+ msgstr ""
1185
+
1008
1186
  #. @context: Media picker dialog title
1009
- #. @context: Media picker dialog title
1010
- #: src/ui/compose/ComposeDialog.tsx:384
1011
- #: src/ui/dash/PostForm.tsx:330
1187
+ #: src/ui/dash/posts/PostForm.tsx
1012
1188
  msgid "Select Media"
1013
1189
  msgstr "选择媒体"
1014
1190
 
1015
1191
  #. @context: Settings section heading for SEO
1016
- #: src/ui/dash/settings/GeneralContent.tsx:498
1192
+ #: src/ui/dash/settings/GeneralContent.tsx
1017
1193
  msgid "SEO"
1018
- msgstr ""
1194
+ msgstr "搜索引擎优化"
1195
+
1196
+ #. @context: Toast after saving SEO settings
1197
+ #. @context: Toast after saving SEO settings
1198
+ #: src/routes/dash/settings.tsx
1199
+ #: src/routes/dash/settings.tsx
1200
+ msgid "SEO settings saved successfully."
1201
+ msgstr "SEO设置已成功保存。"
1019
1202
 
1020
1203
  #. @context: Dashboard heading
1021
1204
  #. @context: Dashboard heading
1022
1205
  #. @context: Dashboard heading
1206
+ #. @context: Dashboard heading
1023
1207
  #. @context: Dashboard navigation - site settings
1024
- #: src/ui/dash/settings/AccountContent.tsx:16
1025
- #: src/ui/dash/settings/AppearanceContent.tsx:101
1026
- #: src/ui/dash/settings/GeneralContent.tsx:151
1027
- #: src/ui/layouts/DashLayout.tsx:133
1208
+ #: src/routes/dash/redirects.tsx
1209
+ #: src/routes/dash/redirects.tsx
1210
+ #: src/ui/dash/settings/AccountContent.tsx
1211
+ #: src/ui/dash/settings/GeneralContent.tsx
1212
+ #: src/ui/layouts/DashLayout.tsx
1028
1213
  msgid "Settings"
1029
1214
  msgstr "设置"
1030
1215
 
1216
+ #. @context: Toast after saving general settings
1217
+ #. @context: Toast after saving general settings
1218
+ #: src/routes/dash/settings.tsx
1219
+ #: src/routes/dash/settings.tsx
1220
+ msgid "Settings saved successfully."
1221
+ msgstr "设置已成功保存。"
1222
+
1031
1223
  #. @context: Link to show remaining thread replies
1032
1224
  #. placeholder {0}: remainingCount === 1 ? "reply" : "replies"
1033
- #: src/ui/feed/ThreadPreview.tsx:37
1225
+ #: src/ui/feed/ThreadPreview.tsx
1034
1226
  msgid "Show {remainingCount} more {0}"
1035
1227
  msgstr "显示 {remainingCount} 个更多 {0}"
1036
1228
 
1037
1229
  #. @context: Sign in form submit button
1038
1230
  #. @context: Sign in page heading
1039
- #: src/routes/auth/signin.tsx:31
1040
- #: src/routes/auth/signin.tsx:92
1231
+ #: src/routes/auth/signin.tsx
1232
+ #: src/routes/auth/signin.tsx
1041
1233
  msgid "Sign In"
1042
1234
  msgstr "登录"
1043
1235
 
1044
1236
  #. @context: Dashboard header link to sign out
1045
- #: src/ui/layouts/DashLayout.tsx:63
1237
+ #: src/ui/layouts/DashLayout.tsx
1046
1238
  msgid "Sign Out"
1047
1239
  msgstr "登出"
1048
1240
 
1049
- #. @context: Settings form field
1050
- #: src/ui/dash/settings/GeneralContent.tsx:72
1051
- #~ msgid "Site Description"
1052
- #~ msgstr "网站描述"
1053
-
1054
1241
  #. @context: Settings section heading for site footer
1055
- #: src/ui/dash/settings/GeneralContent.tsx:454
1242
+ #: src/ui/dash/settings/GeneralContent.tsx
1056
1243
  msgid "Site Footer"
1057
- msgstr ""
1244
+ msgstr "网站页脚"
1058
1245
 
1059
1246
  #. @context: Settings form field
1060
- #: src/ui/dash/settings/GeneralContent.tsx:308
1247
+ #: src/ui/dash/settings/GeneralContent.tsx
1061
1248
  msgid "Site Name"
1062
1249
  msgstr "网站名称"
1063
1250
 
1064
1251
  #. @context: Collection form field
1065
1252
  #. @context: Page form field label - URL slug
1066
- #: src/ui/dash/collections/CollectionForm.tsx:80
1067
- #: src/ui/dash/PageForm.tsx:64
1253
+ #: src/ui/dash/collections/CollectionForm.tsx
1254
+ #: src/ui/dash/PageForm.tsx
1068
1255
  msgid "Slug"
1069
1256
  msgstr "缩略名"
1070
1257
 
1071
- #. @context: Post form field - name of the source website or author
1072
- #: src/theme/components/PostForm.tsx:216
1073
- #~ msgid "Source Name (optional)"
1074
- #~ msgstr "来源名称(可选)"
1258
+ #. @context: Collection form field
1259
+ #: src/ui/dash/collections/CollectionForm.tsx
1260
+ msgid "Sort Order"
1261
+ msgstr "排序顺序"
1075
1262
 
1076
- #. @context: Post form field
1077
- #: src/theme/components/PostForm.tsx:200
1078
- #~ msgid "Source URL (optional)"
1079
- #~ msgstr "源网址(可选)"
1263
+ #. @context: Compose quote source link placeholder
1264
+ #: src/ui/compose/ComposeDialog.tsx
1265
+ msgid "Source link (optional)"
1266
+ msgstr "来源链接(可选)"
1080
1267
 
1081
1268
  #. @context: Page form field label - publish status
1082
1269
  #. @context: Post form field
1083
- #: src/ui/dash/PageForm.tsx:117
1084
- #: src/ui/dash/PostForm.tsx:221
1270
+ #: src/ui/dash/PageForm.tsx
1271
+ #: src/ui/dash/posts/PostForm.tsx
1085
1272
  msgid "Status"
1086
1273
  msgstr "状态"
1087
1274
 
1275
+ #. @context: Error when file storage is not set up
1276
+ #: src/routes/api/upload.ts
1277
+ msgid "Storage not configured"
1278
+ msgstr "存储未配置"
1279
+
1280
+ #. @context: Error toast when file storage is not set up
1281
+ #: src/routes/dash/settings.tsx
1282
+ msgid "Storage not configured."
1283
+ msgstr "存储未配置。"
1284
+
1285
+ #. @context: Attached text panel hint
1286
+ #: src/ui/compose/ComposeDialog.tsx
1287
+ msgid "Supplementary content attached to your post"
1288
+ msgstr "附加在您帖子上的补充内容"
1289
+
1088
1290
  #. @context: Redirect to path help text
1089
- #: src/routes/dash/redirects.tsx:133
1291
+ #: src/routes/dash/redirects.tsx
1090
1292
  msgid "The destination path or URL"
1091
1293
  msgstr "目标路径或 URL"
1092
1294
 
1093
1295
  #. @context: Redirect from path help text
1094
- #: src/routes/dash/redirects.tsx:111
1296
+ #: src/routes/dash/redirects.tsx
1095
1297
  msgid "The path to redirect from"
1096
1298
  msgstr "重定向的路径"
1097
1299
 
1098
- #. @context: Compose quote text placeholder
1300
+ #. @context: Font theme preview sentence for body text
1301
+ #. @context: Font theme preview sentence for headings
1302
+ #: src/ui/dash/appearance/FontThemeContent.tsx
1303
+ #: src/ui/dash/appearance/FontThemeContent.tsx
1304
+ msgid "The quick brown fox jumps over the lazy dog."
1305
+ msgstr "敏捷的棕色狐狸跳过懒狗。"
1306
+
1099
1307
  #. @context: Quote text placeholder
1100
- #: src/ui/compose/ComposeDialog.tsx:156
1101
- #: src/ui/dash/PostForm.tsx:145
1308
+ #: src/ui/dash/posts/PostForm.tsx
1102
1309
  msgid "The text being quoted..."
1103
- msgstr ""
1310
+ msgstr "被引用的文本..."
1104
1311
 
1105
1312
  #. @context: Page slug helper text
1106
- #: src/ui/dash/PageForm.tsx:85
1313
+ #: src/ui/dash/PageForm.tsx
1107
1314
  msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
1108
1315
  msgstr "此页面的 URL 路径。使用小写字母、数字和连字符。"
1109
1316
 
1110
1317
  #. @context: Help text for site description field
1111
- #: src/ui/dash/settings/GeneralContent.tsx:340
1112
- msgid "This is displayed above your blog posts on your default home page. This is also used for the meta description on your home page."
1113
- msgstr ""
1318
+ #: src/ui/dash/settings/GeneralContent.tsx
1319
+ #~ msgid "This is displayed above your blog posts on your default home page. This is also used for the meta description on your home page."
1320
+ #~ msgstr "这将在您的默认主页上显示在博客文章上方。这也用于您主页上的元描述。"
1114
1321
 
1115
1322
  #. @context: Help text for site footer field
1116
- #: src/ui/dash/settings/GeneralContent.tsx:474
1117
- msgid "This is displayed at the bottom of all of your posts and pages. Markdown is supported."
1118
- msgstr ""
1323
+ #: src/ui/dash/settings/GeneralContent.tsx
1324
+ #~ msgid "This is displayed at the bottom of all of your posts and pages. Markdown is supported."
1325
+ #~ msgstr "这将在您所有的帖子和页面底部显示。支持Markdown。"
1119
1326
 
1120
1327
  #. @context: Help text for avatar upload
1121
- #: src/ui/dash/settings/GeneralContent.tsx:253
1328
+ #: src/ui/dash/settings/GeneralContent.tsx
1122
1329
  msgid "This is used for your favicon and apple-touch-icon. For best results, upload a square image at least 180x180 pixels."
1123
- msgstr ""
1124
-
1125
- #. @context: Help text for avatar upload
1126
- #: src/ui/dash/settings/GeneralContent.tsx:238
1127
- #~ msgid "This is used for your favicon."
1128
- #~ msgstr ""
1330
+ msgstr "这用于您的网站图标和苹果触控图标。为了获得最佳效果,请上传至少 180x180 像素的正方形图像。"
1129
1331
 
1130
1332
  #. @context: Password reset error description
1131
- #: src/routes/auth/reset.tsx:128
1333
+ #: src/routes/auth/reset.tsx
1132
1334
  msgid "This password reset link is invalid or has expired. Please generate a new one."
1133
1335
  msgstr "此密码重置链接无效或已过期。请生成一个新的链接。"
1134
1336
 
1135
1337
  #. @context: Appearance settings description
1136
- #: src/ui/dash/settings/AppearanceContent.tsx:118
1338
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1137
1339
  msgid "This will theme both your site and your dashboard. All color themes support dark mode."
1138
1340
  msgstr "这将为您的网站和仪表板设置主题。所有颜色主题都支持暗黑模式。"
1139
1341
 
1140
1342
  #. @context: Thread view indicator - first post in thread
1141
- #: src/ui/shared/ThreadView.tsx:60
1343
+ #: src/ui/shared/ThreadView.tsx
1142
1344
  msgid "Thread start"
1143
1345
  msgstr "线程开始"
1144
1346
 
1145
1347
  #. @context: Thread view header - multiple posts
1146
- #: src/ui/shared/ThreadView.tsx:105
1348
+ #: src/ui/shared/ThreadView.tsx
1147
1349
  msgid "Thread with {count} posts"
1148
1350
  msgstr "包含 {count} 条帖子的话题"
1149
1351
 
1150
1352
  #. @context: Thread view header - single post
1151
- #: src/ui/shared/ThreadView.tsx:101
1353
+ #: src/ui/shared/ThreadView.tsx
1152
1354
  msgid "Thread with 1 post"
1153
1355
  msgstr "包含 1 条帖子的话题"
1154
1356
 
1155
1357
  #. @context: Settings form field
1156
- #: src/ui/dash/settings/GeneralContent.tsx:409
1358
+ #: src/ui/dash/settings/GeneralContent.tsx
1157
1359
  msgid "Time Zone"
1158
- msgstr ""
1360
+ msgstr "时区"
1159
1361
 
1160
1362
  #. @context: Collection form field
1363
+ #. @context: Compose note title placeholder
1364
+ #. @context: Compose toolbar - title tooltip
1161
1365
  #. @context: Page form field label - title
1162
- #: src/ui/dash/collections/CollectionForm.tsx:57
1163
- #: src/ui/dash/PageForm.tsx:44
1366
+ #: src/ui/compose/ComposeDialog.tsx
1367
+ #: src/ui/compose/ComposeDialog.tsx
1368
+ #: src/ui/dash/collections/CollectionForm.tsx
1369
+ #: src/ui/dash/PageForm.tsx
1164
1370
  msgid "Title"
1165
1371
  msgstr "标题"
1166
1372
 
1167
- #. @context: Compose title placeholder
1168
1373
  #. @context: Post form field
1169
- #: src/ui/compose/ComposeDialog.tsx:124
1170
- #: src/ui/dash/PostForm.tsx:85
1374
+ #: src/ui/dash/posts/PostForm.tsx
1171
1375
  msgid "Title (optional)"
1172
1376
  msgstr "标题(可选)"
1173
1377
 
1174
1378
  #. @context: Redirect form field
1175
- #: src/routes/dash/redirects.tsx:120
1379
+ #: src/routes/dash/redirects.tsx
1176
1380
  msgid "To Path"
1177
1381
  msgstr "到路径"
1178
1382
 
1179
1383
  #. @context: Redirect form field
1180
- #: src/routes/dash/redirects.tsx:142
1384
+ #: src/routes/dash/redirects.tsx
1181
1385
  msgid "Type"
1182
1386
  msgstr "类型"
1183
1387
 
1388
+ #. @context: Compose quote text placeholder
1389
+ #: src/ui/compose/ComposeDialog.tsx
1390
+ msgid "Type the quote..."
1391
+ msgstr "输入引用..."
1392
+
1184
1393
  #. @context: Button to remove page from navigation
1185
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:82
1394
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
1186
1395
  msgid "Un-nav"
1187
- msgstr ""
1188
-
1189
- #. @context: Post visibility badge - unlisted
1190
- #. @context: Post visibility option
1191
- #: src/theme/components/PostForm.tsx:255
1192
- #: src/theme/components/VisibilityBadge.tsx:34
1193
- #~ msgid "Unlisted"
1194
- #~ msgstr "未列出"
1396
+ msgstr "取消导航"
1195
1397
 
1196
1398
  #. @context: Default title for untitled page
1197
1399
  #. @context: Default title for untitled post
1198
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:190
1199
- #: src/ui/dash/PostList.tsx:86
1400
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
1401
+ #: src/ui/dash/PostList.tsx
1200
1402
  msgid "Untitled"
1201
1403
  msgstr "无标题"
1202
1404
 
1203
1405
  #. @context: Button to update existing post
1204
- #: src/ui/dash/PostForm.tsx:308
1406
+ #: src/ui/dash/posts/PostForm.tsx
1205
1407
  msgid "Update"
1206
1408
  msgstr "更新"
1207
1409
 
1208
1410
  #. @context: Button to save collection changes
1209
- #: src/ui/dash/collections/CollectionForm.tsx:32
1411
+ #: src/ui/dash/collections/CollectionForm.tsx
1210
1412
  msgid "Update Collection"
1211
1413
  msgstr "更新收藏夹"
1212
1414
 
1213
1415
  #. @context: Button to update existing page
1214
- #: src/ui/dash/PageForm.tsx:167
1416
+ #: src/ui/dash/PageForm.tsx
1215
1417
  msgid "Update Page"
1216
1418
  msgstr "更新页面"
1217
1419
 
1218
1420
  #. @context: Button to upload media file
1219
- #: src/ui/dash/media/MediaListContent.tsx:103
1421
+ #: src/ui/dash/media/MediaListContent.tsx
1220
1422
  msgid "Upload"
1221
1423
  msgstr "上传"
1222
1424
 
1223
1425
  #. @context: Button to upload avatar image
1224
- #: src/ui/dash/settings/GeneralContent.tsx:205
1426
+ #: src/ui/dash/settings/GeneralContent.tsx
1225
1427
  msgid "Upload Avatar"
1226
- msgstr ""
1428
+ msgstr "上传头像"
1227
1429
 
1228
1430
  #. @context: Error message when avatar upload fails
1431
+ #. @context: Error toast when avatar upload fails
1432
+ #. @context: Error when file upload fails
1229
1433
  #. @context: Upload error message
1230
- #: src/ui/dash/media/MediaListContent.tsx:107
1231
- #: src/ui/dash/settings/GeneralContent.tsx:225
1434
+ #: src/routes/api/upload.ts
1435
+ #: src/routes/dash/settings.tsx
1436
+ #: src/ui/dash/media/MediaListContent.tsx
1437
+ #: src/ui/dash/settings/GeneralContent.tsx
1232
1438
  msgid "Upload failed. Please try again."
1233
1439
  msgstr "上传失败。请再试一次。"
1234
1440
 
1441
+ #. @context: Toast after successful file upload
1442
+ #: src/routes/api/upload.ts
1443
+ msgid "Upload successful!"
1444
+ msgstr "上传成功!"
1445
+
1235
1446
  #. @context: Avatar upload button text while uploading
1447
+ #. @context: Toast shown during background upload
1236
1448
  #. @context: Upload status - uploading
1237
- #: src/ui/dash/media/MediaListContent.tsx:99
1238
- #: src/ui/dash/settings/GeneralContent.tsx:220
1449
+ #: src/ui/compose/ComposeDialog.tsx
1450
+ #: src/ui/dash/media/MediaListContent.tsx
1451
+ #: src/ui/dash/settings/GeneralContent.tsx
1239
1452
  msgid "Uploading..."
1240
1453
  msgstr "上传中..."
1241
1454
 
1242
1455
  #. @context: Media detail section - URL
1243
1456
  #. @context: Navigation link form field
1244
- #: src/ui/dash/media/ViewMediaContent.tsx:109
1245
- #: src/ui/dash/pages/LinkFormContent.tsx:61
1457
+ #: src/ui/dash/media/ViewMediaContent.tsx
1458
+ #: src/ui/dash/pages/LinkFormContent.tsx
1246
1459
  msgid "URL"
1247
1460
  msgstr "网址"
1248
1461
 
1249
1462
  #. @context: Post form field - source URL
1250
- #: src/ui/dash/PostForm.tsx:121
1463
+ #: src/ui/dash/posts/PostForm.tsx
1251
1464
  msgid "URL (optional)"
1252
- msgstr ""
1465
+ msgstr "网址(可选)"
1253
1466
 
1254
1467
  #. @context: Collection path help text
1255
- #: src/ui/dash/collections/CollectionForm.tsx:92
1256
- msgid "URL-safe identifier (lowercase, numbers, hyphens)"
1257
- msgstr "URL安全标识符(小写字母、数字、连字符)"
1468
+ #: src/ui/dash/collections/CollectionForm.tsx
1469
+ msgid "URL-safe identifier (lowercase, numbers, hyphens). For CJK titles, slug will be auto-generated on the server."
1470
+ msgstr "URL安全标识符(小写字母、数字、连字符)。对于CJK标题,slug将在服务器上自动生成。"
1258
1471
 
1259
1472
  #. @context: Media URL helper text
1260
- #: src/ui/dash/media/ViewMediaContent.tsx:135
1473
+ #: src/ui/dash/media/ViewMediaContent.tsx
1261
1474
  msgid "Use this URL to embed the media in your posts."
1262
1475
  msgstr "使用此 URL 将媒体嵌入到您的帖子中。"
1263
1476
 
1264
- #. @context: Button to view collection
1265
1477
  #. @context: Button to view collection
1266
1478
  #. @context: Button to view item on public site
1267
1479
  #. @context: Button to view page on public site
1268
1480
  #. @context: Button to view page on public site
1269
1481
  #. @context: Button to view post
1270
1482
  #. @context: Button to view post on public site
1271
- #: src/routes/dash/pages.tsx:60
1272
- #: src/routes/dash/posts.tsx:145
1273
- #: src/ui/dash/ActionButtons.tsx:76
1274
- #: src/ui/dash/collections/CollectionsListContent.tsx:60
1275
- #: src/ui/dash/collections/ViewCollectionContent.tsx:38
1276
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:177
1277
- #: src/ui/dash/PostList.tsx:55
1483
+ #: src/routes/dash/pages.tsx
1484
+ #: src/routes/dash/posts.tsx
1485
+ #: src/ui/dash/ActionButtons.tsx
1486
+ #: src/ui/dash/collections/ViewCollectionContent.tsx
1487
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
1488
+ #: src/ui/dash/PostList.tsx
1278
1489
  msgid "View"
1279
1490
  msgstr "查看"
1280
1491
 
1281
1492
  #. @context: Dashboard header link to view the public site
1282
- #: src/ui/layouts/DashLayout.tsx:53
1493
+ #: src/ui/layouts/DashLayout.tsx
1283
1494
  msgid "View Site"
1284
1495
  msgstr "查看网站"
1285
1496
 
1286
- #. @context: Post form field
1287
- #: src/theme/components/PostForm.tsx:236
1288
- #~ msgid "Visibility"
1289
- #~ msgstr "可见性"
1290
-
1291
1497
  #. @context: Setup page welcome heading
1292
- #: src/routes/auth/setup.tsx:27
1498
+ #: src/routes/auth/setup.tsx
1293
1499
  msgid "Welcome to Jant"
1294
1500
  msgstr "欢迎来到Jant"
1295
1501
 
1296
1502
  #. @context: Compose prompt placeholder text
1297
- #: src/ui/compose/ComposePrompt.tsx:37
1298
- msgid "What's new?"
1299
- msgstr ""
1300
-
1301
- #. @context: Compose body placeholder
1302
1503
  #. @context: Post content placeholder
1303
- #: src/ui/compose/ComposeDialog.tsx:134
1304
- #: src/ui/dash/PostForm.tsx:109
1504
+ #: src/ui/compose/ComposePrompt.tsx
1505
+ #: src/ui/dash/posts/PostForm.tsx
1305
1506
  msgid "What's on your mind?"
1306
1507
  msgstr "你在想什么?"
1307
1508
 
1509
+ #. @context: Compose body placeholder
1510
+ #: src/ui/compose/ComposeDialog.tsx
1511
+ msgid "What's on your mind..."
1512
+ msgstr "你在想什么..."
1513
+
1308
1514
  #. @context: Collection description placeholder
1309
- #: src/ui/dash/collections/CollectionForm.tsx:114
1515
+ #: src/ui/dash/collections/CollectionForm.tsx
1310
1516
  msgid "What's this collection about?"
1311
1517
  msgstr "这个系列是关于什么的?"
1312
1518
 
1313
1519
  #. @context: Setup form field - user name
1314
- #: src/routes/auth/setup.tsx:49
1520
+ #: src/routes/auth/setup.tsx
1315
1521
  msgid "Your Name"
1316
1522
  msgstr "您的姓名"
1317
1523
 
1318
1524
  #. @context: Section heading for navigation items
1319
- #: src/ui/dash/pages/UnifiedPagesContent.tsx:45
1525
+ #: src/ui/dash/pages/UnifiedPagesContent.tsx
1320
1526
  msgid "Your site navigation"
1321
- msgstr ""
1527
+ msgstr "您的网站导航"
1528
+
1529
+ #. @context: Compose thoughts placeholder
1530
+ #: src/ui/compose/ComposeDialog.tsx
1531
+ msgid "Your thoughts (optional)"
1532
+ msgstr "您的想法(可选)"