@jant/core 0.3.36 → 0.3.37

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 (271) hide show
  1. package/bin/commands/export.js +1 -1
  2. package/bin/commands/import-site.js +529 -0
  3. package/bin/commands/reset-password.js +3 -2
  4. package/dist/client/assets/heic-to-DIRPI3VF.js +1 -0
  5. package/dist/client/assets/url-FWFqPJPb.js +1 -0
  6. package/dist/client/client.css +1 -1
  7. package/dist/client/client.js +4012 -3276
  8. package/dist/index.js +10285 -5809
  9. package/package.json +11 -3
  10. package/src/__tests__/helpers/app.ts +9 -9
  11. package/src/__tests__/helpers/db.ts +91 -93
  12. package/src/app.tsx +157 -27
  13. package/src/auth.ts +20 -2
  14. package/src/client/archive-nav.js +187 -0
  15. package/src/client/audio-player.ts +478 -0
  16. package/src/client/audio-processor.ts +84 -0
  17. package/src/client/avatar-upload.ts +3 -2
  18. package/src/client/components/__tests__/jant-compose-dialog.test.ts +645 -49
  19. package/src/client/components/__tests__/jant-compose-editor.test.ts +208 -16
  20. package/src/client/components/__tests__/jant-post-form.test.ts +19 -9
  21. package/src/client/components/__tests__/jant-settings-avatar.test.ts +2 -2
  22. package/src/client/components/__tests__/jant-settings-general.test.ts +3 -3
  23. package/src/client/components/collection-sidebar-types.ts +7 -9
  24. package/src/client/components/compose-types.ts +101 -4
  25. package/src/client/components/jant-collection-form.ts +43 -7
  26. package/src/client/components/jant-collection-sidebar.ts +88 -84
  27. package/src/client/components/jant-compose-dialog.ts +1655 -219
  28. package/src/client/components/jant-compose-editor.ts +732 -168
  29. package/src/client/components/jant-compose-fullscreen.ts +23 -78
  30. package/src/client/components/jant-media-lightbox.ts +2 -0
  31. package/src/client/components/jant-nav-manager.ts +24 -284
  32. package/src/client/components/jant-post-form.ts +89 -9
  33. package/src/client/components/jant-post-menu.ts +1019 -0
  34. package/src/client/components/jant-settings-avatar.ts +3 -3
  35. package/src/client/components/jant-settings-general.ts +38 -4
  36. package/src/client/components/jant-text-preview.ts +232 -0
  37. package/src/client/components/nav-manager-types.ts +4 -19
  38. package/src/client/components/post-form-template.ts +107 -12
  39. package/src/client/components/post-form-types.ts +11 -4
  40. package/src/client/compose-bridge.ts +410 -109
  41. package/src/client/image-processor.ts +26 -8
  42. package/src/client/media-metadata.ts +247 -0
  43. package/src/client/multipart-upload.ts +160 -0
  44. package/src/client/post-form-bridge.ts +52 -1
  45. package/src/client/settings-bridge.ts +0 -12
  46. package/src/client/thread-context.ts +140 -0
  47. package/src/client/tiptap/create-editor.ts +46 -0
  48. package/src/client/tiptap/extensions.ts +5 -0
  49. package/src/client/tiptap/image-node.ts +2 -8
  50. package/src/client/tiptap/paste-image.ts +2 -13
  51. package/src/client/tiptap/slash-commands.ts +173 -63
  52. package/src/client/toast.ts +101 -3
  53. package/src/client/types/sortablejs.d.ts +15 -0
  54. package/src/client/upload-with-metadata.ts +54 -0
  55. package/src/client/video-processor.ts +207 -0
  56. package/src/client.ts +5 -2
  57. package/src/db/__tests__/migrations.test.ts +118 -0
  58. package/src/db/index.ts +52 -0
  59. package/src/db/migrations/0000_baseline.sql +269 -0
  60. package/src/db/migrations/0001_fts_setup.sql +31 -0
  61. package/src/db/migrations/meta/0000_snapshot.json +703 -119
  62. package/src/db/migrations/meta/0001_snapshot.json +1337 -0
  63. package/src/db/migrations/meta/_journal.json +4 -39
  64. package/src/db/schema.ts +409 -145
  65. package/src/i18n/__tests__/detect.test.ts +115 -0
  66. package/src/i18n/context.tsx +2 -2
  67. package/src/i18n/detect.ts +85 -1
  68. package/src/i18n/i18n.ts +1 -1
  69. package/src/i18n/index.ts +2 -1
  70. package/src/i18n/locales/en.po +487 -1217
  71. package/src/i18n/locales/en.ts +1 -1
  72. package/src/i18n/locales/zh-Hans.po +613 -996
  73. package/src/i18n/locales/zh-Hans.ts +1 -1
  74. package/src/i18n/locales/zh-Hant.po +624 -1007
  75. package/src/i18n/locales/zh-Hant.ts +1 -1
  76. package/src/i18n/middleware.ts +6 -0
  77. package/src/index.ts +5 -7
  78. package/src/lib/__tests__/blurhash-placeholder.test.ts +75 -0
  79. package/src/lib/__tests__/constants.test.ts +0 -1
  80. package/src/lib/__tests__/markdown-to-tiptap.test.ts +358 -0
  81. package/src/lib/__tests__/nanoid.test.ts +26 -0
  82. package/src/lib/__tests__/schemas.test.ts +181 -63
  83. package/src/lib/__tests__/slug.test.ts +126 -0
  84. package/src/lib/__tests__/sse.test.ts +6 -6
  85. package/src/lib/__tests__/summary.test.ts +264 -0
  86. package/src/lib/__tests__/theme.test.ts +1 -1
  87. package/src/lib/__tests__/timeline.test.ts +33 -30
  88. package/src/lib/__tests__/tiptap-to-markdown.test.ts +346 -0
  89. package/src/lib/__tests__/view.test.ts +141 -66
  90. package/src/lib/blurhash-placeholder.ts +102 -0
  91. package/src/lib/constants.ts +3 -1
  92. package/src/lib/emoji-catalog.ts +885 -68
  93. package/src/lib/errors.ts +11 -8
  94. package/src/lib/feed.ts +78 -32
  95. package/src/lib/html.ts +2 -1
  96. package/src/lib/icon-catalog.ts +5033 -1
  97. package/src/lib/icons.ts +3 -2
  98. package/src/lib/index.ts +0 -1
  99. package/src/lib/markdown-to-tiptap.ts +286 -0
  100. package/src/lib/media-helpers.ts +12 -3
  101. package/src/lib/nanoid.ts +29 -0
  102. package/src/lib/navigation.ts +1 -1
  103. package/src/lib/render.tsx +20 -2
  104. package/src/lib/resolve-config.ts +6 -2
  105. package/src/lib/schemas.ts +224 -55
  106. package/src/lib/search-snippet.ts +34 -0
  107. package/src/lib/slug.ts +96 -0
  108. package/src/lib/sse.ts +6 -6
  109. package/src/lib/storage.ts +115 -7
  110. package/src/lib/summary.ts +66 -0
  111. package/src/lib/theme.ts +11 -8
  112. package/src/lib/timeline.ts +74 -34
  113. package/src/lib/tiptap-render.ts +5 -10
  114. package/src/lib/tiptap-to-markdown.ts +305 -0
  115. package/src/lib/upload.ts +190 -29
  116. package/src/lib/url.ts +31 -0
  117. package/src/lib/view.ts +204 -37
  118. package/src/middleware/__tests__/auth.test.ts +191 -11
  119. package/src/middleware/__tests__/onboarding.test.ts +12 -10
  120. package/src/middleware/auth.ts +63 -9
  121. package/src/middleware/onboarding.ts +1 -1
  122. package/src/middleware/secure-headers.ts +40 -0
  123. package/src/preset.css +45 -2
  124. package/src/routes/__tests__/compose.test.ts +17 -24
  125. package/src/routes/api/__tests__/collections.test.ts +109 -61
  126. package/src/routes/api/__tests__/nav-items.test.ts +46 -29
  127. package/src/routes/api/__tests__/posts.test.ts +132 -68
  128. package/src/routes/api/__tests__/search.test.ts +15 -2
  129. package/src/routes/api/__tests__/upload-multipart.test.ts +534 -0
  130. package/src/routes/api/collections.ts +51 -42
  131. package/src/routes/api/custom-urls.ts +80 -0
  132. package/src/routes/api/export.ts +31 -0
  133. package/src/routes/api/nav-items.ts +23 -19
  134. package/src/routes/api/posts.ts +43 -39
  135. package/src/routes/api/search.ts +3 -4
  136. package/src/routes/api/upload-multipart.ts +245 -0
  137. package/src/routes/api/upload.ts +85 -19
  138. package/src/routes/auth/__tests__/setup.test.ts +20 -60
  139. package/src/routes/auth/setup.tsx +26 -33
  140. package/src/routes/auth/signin.tsx +3 -7
  141. package/src/routes/compose.tsx +10 -55
  142. package/src/routes/dash/__tests__/settings-avatar.test.ts +1 -1
  143. package/src/routes/dash/custom-urls.tsx +414 -0
  144. package/src/routes/dash/settings.tsx +304 -232
  145. package/src/routes/feed/__tests__/rss.test.ts +27 -28
  146. package/src/routes/feed/rss.ts +6 -4
  147. package/src/routes/feed/sitemap.ts +2 -12
  148. package/src/routes/pages/__tests__/collections.test.ts +5 -6
  149. package/src/routes/pages/__tests__/featured.test.ts +41 -22
  150. package/src/routes/pages/archive.tsx +175 -39
  151. package/src/routes/pages/collection.tsx +22 -10
  152. package/src/routes/pages/collections.tsx +3 -3
  153. package/src/routes/pages/featured.tsx +28 -4
  154. package/src/routes/pages/home.tsx +16 -15
  155. package/src/routes/pages/latest.tsx +1 -11
  156. package/src/routes/pages/new.tsx +39 -0
  157. package/src/routes/pages/page.tsx +95 -49
  158. package/src/routes/pages/search.tsx +1 -1
  159. package/src/services/__tests__/api-token.test.ts +135 -0
  160. package/src/services/__tests__/collection.test.ts +275 -227
  161. package/src/services/__tests__/custom-url.test.ts +213 -0
  162. package/src/services/__tests__/media.test.ts +162 -22
  163. package/src/services/__tests__/navigation.test.ts +109 -68
  164. package/src/services/__tests__/post-timeline.test.ts +205 -32
  165. package/src/services/__tests__/post.test.ts +713 -234
  166. package/src/services/__tests__/search.test.ts +67 -10
  167. package/src/services/api-token.ts +166 -0
  168. package/src/services/auth.ts +17 -2
  169. package/src/services/collection.ts +397 -131
  170. package/src/services/custom-url.ts +188 -0
  171. package/src/services/export.ts +802 -0
  172. package/src/services/index.ts +26 -19
  173. package/src/services/media.ts +100 -22
  174. package/src/services/navigation.ts +158 -47
  175. package/src/services/path.ts +339 -0
  176. package/src/services/post.ts +687 -154
  177. package/src/services/search.ts +160 -75
  178. package/src/styles/components.css +58 -7
  179. package/src/styles/tokens.css +84 -6
  180. package/src/styles/ui.css +2964 -457
  181. package/src/types/bindings.ts +4 -1
  182. package/src/types/config.ts +12 -4
  183. package/src/types/constants.ts +15 -3
  184. package/src/types/entities.ts +74 -35
  185. package/src/types/operations.ts +11 -24
  186. package/src/types/props.ts +51 -16
  187. package/src/types/views.ts +45 -22
  188. package/src/ui/color-themes.ts +133 -23
  189. package/src/ui/compose/ComposeDialog.tsx +239 -17
  190. package/src/ui/compose/ComposePrompt.tsx +1 -1
  191. package/src/ui/dash/CrudPageHeader.tsx +1 -1
  192. package/src/ui/dash/ListItemRow.tsx +1 -1
  193. package/src/ui/dash/StatusBadge.tsx +3 -1
  194. package/src/ui/dash/appearance/AdvancedContent.tsx +22 -1
  195. package/src/ui/dash/appearance/ColorThemeContent.tsx +22 -2
  196. package/src/ui/dash/appearance/FontThemeContent.tsx +1 -1
  197. package/src/ui/dash/appearance/NavigationContent.tsx +5 -45
  198. package/src/ui/dash/index.ts +0 -3
  199. package/src/ui/dash/settings/AccountContent.tsx +3 -57
  200. package/src/ui/dash/settings/AccountMenuContent.tsx +147 -0
  201. package/src/ui/dash/settings/ApiTokensContent.tsx +232 -0
  202. package/src/ui/dash/settings/AvatarContent.tsx +8 -0
  203. package/src/ui/dash/settings/SessionsContent.tsx +159 -0
  204. package/src/ui/dash/settings/SettingsRootContent.tsx +45 -15
  205. package/src/ui/feed/LinkCard.tsx +89 -40
  206. package/src/ui/feed/NoteCard.tsx +39 -25
  207. package/src/ui/feed/PostStatusBadges.tsx +67 -0
  208. package/src/ui/feed/QuoteCard.tsx +38 -23
  209. package/src/ui/feed/ThreadPreview.tsx +90 -26
  210. package/src/ui/feed/TimelineFeed.tsx +3 -2
  211. package/src/ui/feed/TimelineItem.tsx +15 -6
  212. package/src/ui/feed/__tests__/thread-preview.test.ts +107 -0
  213. package/src/ui/feed/thread-preview-state.ts +61 -0
  214. package/src/ui/font-themes.ts +2 -2
  215. package/src/ui/layouts/BaseLayout.tsx +2 -2
  216. package/src/ui/layouts/SiteLayout.tsx +105 -92
  217. package/src/ui/pages/ArchivePage.tsx +923 -98
  218. package/src/ui/pages/ComposePage.tsx +54 -0
  219. package/src/ui/pages/PostPage.tsx +30 -45
  220. package/src/ui/pages/SearchPage.tsx +181 -37
  221. package/src/ui/shared/AdminBreadcrumb.tsx +29 -0
  222. package/src/ui/shared/CollectionsSidebar.tsx +47 -37
  223. package/src/ui/shared/MediaGallery.tsx +445 -149
  224. package/src/ui/shared/PostFooter.tsx +204 -0
  225. package/src/ui/shared/StarRating.tsx +27 -0
  226. package/src/ui/shared/__tests__/format-chars.test.ts +35 -0
  227. package/src/ui/shared/index.ts +0 -1
  228. package/dist/client/assets/url-8Dj-5CLW.js +0 -1
  229. package/src/client/media-upload.ts +0 -161
  230. package/src/client/page-slug-bridge.ts +0 -42
  231. package/src/db/migrations/0000_square_wallflower.sql +0 -118
  232. package/src/db/migrations/0001_add_search_fts.sql +0 -34
  233. package/src/db/migrations/0002_add_media_attachments.sql +0 -3
  234. package/src/db/migrations/0003_add_navigation_links.sql +0 -8
  235. package/src/db/migrations/0004_add_storage_provider.sql +0 -3
  236. package/src/db/migrations/0005_v2_schema_migration.sql +0 -268
  237. package/src/db/migrations/0006_rename_slug_to_path.sql +0 -5
  238. package/src/db/migrations/0007_post_collections_m2m.sql +0 -94
  239. package/src/db/migrations/0008_add_collection_dividers.sql +0 -8
  240. package/src/db/migrations/0009_drop_collection_show_divider.sql +0 -2
  241. package/src/db/migrations/0010_add_performance_indexes.sql +0 -16
  242. package/src/db/migrations/0011_add_path_registry.sql +0 -23
  243. package/src/db/migrations/0012_add_tiptap_columns.sql +0 -2
  244. package/src/db/migrations/0013_replace_featured_with_visibility.sql +0 -8
  245. package/src/db/migrations/meta/0003_snapshot.json +0 -821
  246. package/src/lib/__tests__/sqid.test.ts +0 -65
  247. package/src/lib/sqid.ts +0 -79
  248. package/src/routes/api/__tests__/pages.test.ts +0 -218
  249. package/src/routes/api/pages.ts +0 -73
  250. package/src/routes/dash/__tests__/pages.test.ts +0 -226
  251. package/src/routes/dash/index.tsx +0 -109
  252. package/src/routes/dash/media.tsx +0 -135
  253. package/src/routes/dash/pages.tsx +0 -245
  254. package/src/routes/dash/posts.tsx +0 -338
  255. package/src/routes/dash/redirects.tsx +0 -263
  256. package/src/routes/pages/post.tsx +0 -59
  257. package/src/services/__tests__/page.test.ts +0 -298
  258. package/src/services/__tests__/path-registry.test.ts +0 -165
  259. package/src/services/__tests__/redirect.test.ts +0 -159
  260. package/src/services/page.ts +0 -216
  261. package/src/services/path-registry.ts +0 -160
  262. package/src/services/redirect.ts +0 -97
  263. package/src/ui/dash/PageForm.tsx +0 -187
  264. package/src/ui/dash/PostList.tsx +0 -95
  265. package/src/ui/dash/media/MediaListContent.tsx +0 -206
  266. package/src/ui/dash/media/ViewMediaContent.tsx +0 -208
  267. package/src/ui/dash/pages/PagesContent.tsx +0 -75
  268. package/src/ui/dash/posts/PostForm.tsx +0 -260
  269. package/src/ui/layouts/DashLayout.tsx +0 -247
  270. package/src/ui/pages/SinglePage.tsx +0 -23
  271. package/src/ui/shared/ThreadView.tsx +0 -136
@@ -1,6 +1,6 @@
1
1
  msgid ""
2
2
  msgstr ""
3
- "POT-Creation-Date: 2026-02-01 08:44:08+0000\n"
3
+ "POT-Creation-Date: 2026-03-09 00:37+0800\n"
4
4
  "MIME-Version: 1.0\n"
5
5
  "Content-Type: text/plain; charset=utf-8\n"
6
6
  "Content-Transfer-Encoding: 8bit\n"
@@ -13,45 +13,46 @@ msgstr ""
13
13
  "Language-Team: \n"
14
14
  "Plural-Forms: \n"
15
15
 
16
+ #. @context: Link showing count of hidden thread posts between root and latest
17
+ #. placeholder {0}: hiddenCount === 1 ? "post" : "posts"
18
+ #: src/ui/feed/ThreadPreview.tsx
19
+ msgid "{hiddenCount} more {0}"
20
+ msgstr "{hiddenCount} 条隐藏的 {0}"
21
+
16
22
  #. @context: Custom CSS textarea placeholder
17
23
  #: src/ui/dash/appearance/AdvancedContent.tsx
18
24
  msgid "/* Your custom CSS here */"
19
- msgstr "/* 您的自定义 CSS 在这里 */"
25
+ msgstr "/* 在此添加自定义 CSS */"
20
26
 
21
- #. @context: Navigation link
22
- #: src/ui/dash/collections/ViewCollectionContent.tsx
23
- #~ msgid " Back to Collections"
24
- #~ msgstr "← 返回收藏夹"
27
+ #. @context: Compose collection trigger label when multiple collections selected. %name% is the first collection name, %count% is how many more
28
+ #: src/ui/compose/ComposeDialog.tsx
29
+ msgid "%name% + %count% more"
30
+ msgstr ""
25
31
 
26
32
  #. @context: Add alt text label under attachment thumbnail
27
33
  #: src/ui/compose/ComposeDialog.tsx
28
34
  msgid "+ ALT"
29
- msgstr "+ ALT"
35
+ msgstr "+ 替代文本"
30
36
 
31
37
  #. @context: Redirect type option
32
- #: src/routes/dash/redirects.tsx
38
+ #: src/routes/dash/custom-urls.tsx
33
39
  msgid "301 (Permanent)"
34
- msgstr "301(永久)"
40
+ msgstr "301 (永久)"
35
41
 
36
42
  #. @context: Redirect type option
37
- #: src/routes/dash/redirects.tsx
43
+ #: src/routes/dash/custom-urls.tsx
38
44
  msgid "302 (Temporary)"
39
- msgstr "302(临时)"
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
+ msgstr "302 (临时)"
45
46
 
46
47
  #. @context: Help text for site description field
47
48
  #: src/ui/dash/settings/GeneralContent.tsx
48
49
  msgid "A short intro for search engines and feed readers. Plain text only."
49
- msgstr "搜索引擎和订阅阅读器的简短介绍。仅限纯文本。"
50
+ msgstr "供搜索引擎和订阅源阅读器使用的简短简介。仅限纯文本。"
50
51
 
51
52
  #. @context: Settings form field for site description
52
53
  #: src/ui/dash/settings/GeneralContent.tsx
53
54
  msgid "About this blog"
54
- msgstr "关于这个博客"
55
+ msgstr "关于此博客"
55
56
 
56
57
  #. @context: Settings group label for account settings
57
58
  #. @context: Settings item — account settings
@@ -60,6 +61,16 @@ msgstr "关于这个博客"
60
61
  msgid "Account"
61
62
  msgstr "账户"
62
63
 
64
+ #. @context: Settings section heading for active sessions
65
+ #: src/ui/dash/settings/SessionsContent.tsx
66
+ msgid "Active Sessions"
67
+ msgstr ""
68
+
69
+ #. @context: Heading for list of active API tokens
70
+ #: src/ui/dash/settings/ApiTokensContent.tsx
71
+ msgid "Active Tokens"
72
+ msgstr "有效 API 令牌"
73
+
63
74
  #. @context: Add more attachments button
64
75
  #: src/ui/compose/ComposeDialog.tsx
65
76
  msgid "Add"
@@ -68,182 +79,154 @@ msgstr "添加"
68
79
  #. @context: Description in link popover form
69
80
  #: src/ui/dash/appearance/NavigationContent.tsx
70
81
  msgid "Add a custom link to any URL"
71
- msgstr "添加自定义链接到任何 URL"
82
+ msgstr "添加指向任意 URL 的自定义链接"
72
83
 
73
84
  #. @context: Alt text panel title
74
85
  #: src/ui/compose/ComposeDialog.tsx
75
86
  msgid "Add alt text"
76
87
  msgstr "添加替代文本"
77
88
 
78
- #. @context: Card description for page picker
79
- #: src/ui/dash/appearance/NavigationContent.tsx
80
- #~ msgid "Add an existing page to your navigation"
81
- #~ msgstr "将现有页面添加到您的导航中"
89
+ #. @context: Action to create a new collection from compose
90
+ #: src/ui/compose/ComposeDialog.tsx
91
+ msgid "Add Collection"
92
+ msgstr "添加集合"
82
93
 
83
94
  #. @context: Custom CSS settings description
84
95
  #: src/ui/dash/appearance/AdvancedContent.tsx
85
96
  msgid "Add custom CSS to override any styles. Use data attributes like [data-page], [data-post], [data-format] to target specific elements."
86
- msgstr "添加自定义 CSS 以覆盖任何样式。使用数据属性,如 [data-page][data-post][data-format] 来定位特定元素。"
97
+ msgstr "添加自定义 CSS 来覆盖任何样式。使用诸如 [data-page], [data-post], [data-format] 的数据属性来定位特定元素。"
87
98
 
88
99
  #. @context: Section heading for adding custom link to nav
89
100
  #: src/ui/dash/appearance/NavigationContent.tsx
90
101
  msgid "Add custom link to navigation"
91
- msgstr ""
102
+ msgstr "向导航添加自定义链接"
92
103
 
93
104
  #. @context: Menu action to add a divider
94
105
  #: src/ui/shared/CollectionsSidebar.tsx
95
106
  msgid "Add Divider"
96
- msgstr ""
107
+ msgstr "添加分隔线"
97
108
 
98
109
  #. @context: Button and heading for adding custom link
99
110
  #: src/ui/dash/appearance/NavigationContent.tsx
100
111
  msgid "Add Link"
101
112
  msgstr "添加链接"
102
113
 
103
- #. @context: Button to open media picker
104
- #: src/ui/dash/posts/PostForm.tsx
105
- msgid "Add Media"
106
- msgstr "添加媒体"
107
-
108
- #. @context: Add more attachments button
109
- #: src/ui/compose/ComposeDialog.tsx
110
- #~ msgid "Add More"
111
- #~ msgstr ""
112
-
113
- #. @context: Card title for adding page to nav
114
- #: src/ui/dash/appearance/NavigationContent.tsx
115
- #~ msgid "Add Page"
116
- #~ msgstr "添加页面"
117
-
118
- #. @context: Section heading for adding page to nav
119
- #: src/ui/dash/appearance/NavigationContent.tsx
120
- msgid "Add page to navigation"
121
- msgstr ""
122
-
123
- #. @context: Section heading for adding nav items
124
- #: src/ui/dash/appearance/NavigationContent.tsx
125
- #~ msgid "Add to navigation"
126
- #~ msgstr "添加到导航"
127
-
128
114
  #. @context: Settings group label for advanced settings
129
115
  #: src/ui/dash/settings/SettingsRootContent.tsx
130
116
  msgid "Advanced"
131
117
  msgstr "高级"
132
118
 
133
- #. @context: Archive filter - all formats
119
+ #. @context: Description after API reference link
120
+ #: src/ui/dash/settings/ApiTokensContent.tsx
121
+ msgid "all available endpoints and request formats."
122
+ msgstr "所有可用的端点和请求格式。"
123
+
124
+ #. @context: Archive filter - collection dropdown default
134
125
  #: src/ui/pages/ArchivePage.tsx
135
- msgid "All"
136
- msgstr "所有"
126
+ msgid "All collections"
127
+ msgstr "所有集合"
137
128
 
138
- #. @context: Message when no pages available to add
139
- #: src/ui/dash/appearance/NavigationContent.tsx
140
- msgid "All pages are already in navigation."
129
+ #. @context: Archive filter - all formats select option
130
+ #: src/ui/pages/ArchivePage.tsx
131
+ msgid "All formats"
132
+ msgstr "所有格式"
133
+
134
+ #. @context: Archive filter - all visibility select option
135
+ #: src/ui/pages/ArchivePage.tsx
136
+ msgid "All visibility"
141
137
  msgstr ""
142
138
 
143
- #. @context: Message when no pages available to add
144
- #: src/ui/dash/appearance/NavigationContent.tsx
145
- #~ msgid "All pages are in navigation"
146
- #~ msgstr "所有页面都在导航中"
139
+ #. @context: Archive filter - year dropdown default
140
+ #: src/ui/pages/ArchivePage.tsx
141
+ msgid "All years"
142
+ msgstr "所有年份"
147
143
 
148
- #. @context: Hint text in alt text panel
149
- #: src/ui/compose/ComposeDialog.tsx
150
- #~ msgid "Alt text improves accessibility"
151
- #~ msgstr "替代文本提高可访问性"
144
+ #. @context: Link to API documentation
145
+ #: src/ui/dash/settings/ApiTokensContent.tsx
146
+ msgid "API reference"
147
+ msgstr "API 文档"
148
+
149
+ #. @context: Settings item — API token settings
150
+ #. @context: Settings section heading
151
+ #: src/ui/dash/settings/ApiTokensContent.tsx
152
+ #: src/ui/dash/settings/SettingsRootContent.tsx
153
+ msgid "API Tokens"
154
+ msgstr "API 令牌"
152
155
 
153
- #. @context: Dashboard navigation - appearance settings
154
- #: src/ui/layouts/DashLayout.tsx
155
- #~ msgid "Appearance"
156
- #~ msgstr "外观"
156
+ #. @context: Appearance settings description
157
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
158
+ msgid "Applies to your entire site, including admin pages. All themes support dark mode."
159
+ msgstr "应用于整个站点,包括管理页面。所有主题都支持深色模式。"
157
160
 
158
161
  #. @context: Archive page title
159
162
  #: src/ui/pages/ArchivePage.tsx
160
163
  msgid "Archive"
161
- msgstr "档案馆"
164
+ msgstr "归档"
162
165
 
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
-
168
- #. @context: Confirmation dialog when deleting a post from the list
169
- #: src/ui/dash/PostList.tsx
170
- #~ msgid "Are you sure you want to delete this post? This cannot be undone."
171
- #~ msgstr "您确定要删除此帖子吗?此操作无法撤销。"
172
-
173
- #. @context: Attached text panel title
174
- #: src/ui/compose/ComposeDialog.tsx
175
- msgid "Attached Text"
176
- msgstr "附加文本"
177
-
178
- #. @context: Error toast when authentication system is unavailable
179
- #: src/routes/auth/signin.tsx
180
- #~ msgid "Auth not configured"
181
- #~ msgstr "身份验证未配置"
166
+ #. @context: Archive media filter - audio
167
+ #: src/ui/pages/ArchivePage.tsx
168
+ msgid "Audio"
169
+ msgstr "音频"
182
170
 
183
171
  #. @context: Error toast when authentication secret is missing from server config
184
172
  #: src/routes/auth/setup.tsx
185
173
  msgid "Auth secret is missing. Check your environment variables."
186
- msgstr ""
187
-
188
- #. @context: Error toast when authentication secret is missing from server config
189
- #: src/routes/auth/setup.tsx
190
- #~ msgid "AUTH_SECRET not configured"
191
- #~ msgstr "AUTH_SECRET 未配置"
174
+ msgstr "身份验证密钥缺失. 检查你的环境变量."
192
175
 
193
176
  #. @context: Error toast when authentication system is unavailable
194
177
  #: src/routes/auth/signin.tsx
195
178
  msgid "Authentication isn't set up. Check your server config."
196
- msgstr ""
179
+ msgstr "未设置身份验证。请检查您的服务器配置。"
197
180
 
198
181
  #. @context: Compose quote author placeholder
199
182
  #: src/ui/compose/ComposeDialog.tsx
200
183
  msgid "Author (optional)"
201
184
  msgstr "作者(可选)"
202
185
 
186
+ #. @context: Description after theming guide link on Custom CSS page
187
+ #: src/ui/dash/appearance/AdvancedContent.tsx
188
+ msgid "available CSS variables, data attributes, and examples."
189
+ msgstr ""
190
+
203
191
  #. @context: Settings item — avatar settings
204
192
  #: src/ui/dash/settings/SettingsRootContent.tsx
205
193
  msgid "Avatar"
206
- msgstr ""
207
-
208
- #. @context: Toast after saving avatar display preference
209
- #. @context: Toast after saving avatar display preference
210
- #: src/routes/dash/settings.tsx
211
- #: src/routes/dash/settings.tsx
212
- #~ msgid "Avatar display setting saved successfully."
213
- #~ msgstr "头像显示设置已成功保存。"
194
+ msgstr "头像"
214
195
 
215
196
  #. @context: Toast after saving avatar display preference
216
197
  #. @context: Toast after saving avatar display preference
217
198
  #: src/routes/dash/settings.tsx
218
199
  #: src/routes/dash/settings.tsx
219
200
  msgid "Avatar display updated."
220
- msgstr ""
201
+ msgstr "头像显示已更新。"
221
202
 
222
- #. @context: Button to go back to media list
223
- #: src/ui/dash/media/ViewMediaContent.tsx
203
+ #. @context: Link back from the new post page
204
+ #: src/ui/pages/ComposePage.tsx
224
205
  msgid "Back"
225
- msgstr "返回"
206
+ msgstr ""
226
207
 
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 ""
208
+ #. @context: Settings item description for API tokens
209
+ #: src/ui/dash/settings/SettingsRootContent.tsx
210
+ msgid "Bearer tokens for scripts and automation"
211
+ msgstr "用于脚本和自动化的 Bearer 令牌"
231
212
 
232
213
  #. @context: Settings section heading for avatar
233
214
  #: src/ui/dash/settings/AvatarContent.tsx
234
215
  msgid "Blog Avatar"
235
216
  msgstr "博客头像"
236
217
 
237
- #. @context: Button to cancel and go back
238
218
  #. @context: Button to cancel form
239
219
  #. @context: Button to cancel form
240
220
  #. @context: Button to cancel form
221
+ #. @context: Button to cancel settings changes
241
222
  #. @context: Button to cancel unsaved changes and revert to original values
242
223
  #. @context: Close compose dialog
243
- #: src/routes/dash/redirects.tsx
224
+ #. @context: Confirm close action sheet - cancel and return to editor
225
+ #: src/routes/dash/custom-urls.tsx
244
226
  #: src/ui/compose/ComposeDialog.tsx
245
- #: src/ui/dash/PageForm.tsx
246
- #: src/ui/dash/posts/PostForm.tsx
227
+ #: src/ui/compose/ComposeDialog.tsx
228
+ #: src/ui/compose/ComposeDialog.tsx
229
+ #: src/ui/dash/settings/AvatarContent.tsx
247
230
  #: src/ui/dash/settings/GeneralContent.tsx
248
231
  #: src/ui/shared/CollectionsSidebar.tsx
249
232
  msgid "Cancel"
@@ -254,46 +237,26 @@ msgstr "取消"
254
237
  #: src/ui/dash/settings/AccountContent.tsx
255
238
  #: src/ui/dash/settings/AccountContent.tsx
256
239
  msgid "Change Password"
257
- msgstr "更改密码"
240
+ msgstr "修改密码"
241
+
242
+ #. @context: Settings item description for password change
243
+ #: src/ui/dash/settings/AccountMenuContent.tsx
244
+ msgid "Change your sign-in password"
245
+ msgstr "更改您的登录密码"
258
246
 
259
247
  #. @context: Font theme settings description
260
248
  #: src/ui/dash/appearance/FontThemeContent.tsx
261
249
  msgid "Choose a font pairing for your site. All options use system fonts for fast loading."
262
- msgstr "选择一个字体搭配用于您的网站。所有选项都使用系统字体以实现快速加载。"
250
+ msgstr "为您的站点选择一种字体搭配。所有选项均使用系统字体以实现快速加载。"
263
251
 
264
252
  #. @context: Password reset page description
265
253
  #: src/routes/auth/reset.tsx
266
254
  msgid "Choose a new password."
267
- msgstr ""
268
-
269
- #. @context: Placeholder for page select combobox trigger
270
- #: src/ui/dash/appearance/NavigationContent.tsx
271
- msgid "Choose a page…"
272
- msgstr ""
273
-
274
- #. @context: Button to open icon picker
275
- #. @context: Icon picker dialog title
276
- #: src/ui/shared/CollectionsSidebar.tsx
277
- #: src/ui/shared/CollectionsSidebar.tsx
278
- #~ msgid "Choose Icon"
279
- #~ msgstr "选择图标"
280
-
281
- #. @context: Hint to click image for lightbox
282
- #: src/ui/dash/media/ViewMediaContent.tsx
283
- msgid "Click image to view full size"
284
- msgstr "点击图片查看完整尺寸"
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
-
291
- #. @context: Button to close icon picker
292
- #: src/ui/shared/CollectionsSidebar.tsx
293
- #~ msgid "Close"
294
- #~ msgstr "关闭"
255
+ msgstr "设置新密码."
295
256
 
296
257
  #. @context: Compose collection selector trigger label
258
+ #. @context: Custom URL type option
259
+ #: src/routes/dash/custom-urls.tsx
297
260
  #: src/ui/compose/ComposeDialog.tsx
298
261
  msgid "Collection"
299
262
  msgstr "集合"
@@ -305,12 +268,7 @@ msgstr "集合"
305
268
  #: src/ui/shared/CollectionsSidebar.tsx
306
269
  #: src/ui/shared/CollectionsSidebar.tsx
307
270
  msgid "Collections"
308
- msgstr "收藏夹"
309
-
310
- #. @context: Post form field - assign to collections
311
- #: src/ui/dash/posts/PostForm.tsx
312
- msgid "Collections (optional)"
313
- msgstr "集合(可选)"
271
+ msgstr "集合"
314
272
 
315
273
  #. @context: Appearance settings heading
316
274
  #. @context: Settings item description for color theme
@@ -339,78 +297,77 @@ msgstr "确认新密码"
339
297
  msgid "Confirm Password"
340
298
  msgstr "确认密码"
341
299
 
342
- #. @context: Page form field label - content
343
- #. @context: Post form field
344
- #: src/ui/dash/PageForm.tsx
345
- #: src/ui/dash/posts/PostForm.tsx
346
- msgid "Content"
347
- msgstr "内容"
300
+ #. @context: Feedback after copying API token
301
+ #: src/ui/dash/settings/ApiTokensContent.tsx
302
+ msgid "Copied"
303
+ msgstr "已复制"
304
+
305
+ #. @context: Button to copy API token to clipboard
306
+ #. @context: Button to copy API token to clipboard
307
+ #: src/ui/dash/settings/ApiTokensContent.tsx
308
+ #: src/ui/dash/settings/ApiTokensContent.tsx
309
+ msgid "Copy Token"
310
+ msgstr "复制令牌"
348
311
 
349
- #. @context: Button to copy Markdown to clipboard
350
- #. @context: Button to copy URL to clipboard
351
- #: src/ui/dash/media/ViewMediaContent.tsx
352
- #: src/ui/dash/media/ViewMediaContent.tsx
353
- msgid "Copy"
354
- msgstr "复制"
312
+ #. @context: Warning to copy newly created API token
313
+ #: src/ui/dash/settings/ApiTokensContent.tsx
314
+ msgid "Copy your token now — it won't be shown again."
315
+ msgstr "现在复制你的令牌 — 它将不再显示。"
355
316
 
356
317
  #. @context: Error toast when account creation fails
357
318
  #. @context: Error toast when account creation fails
358
319
  #: src/routes/auth/setup.tsx
359
320
  #: src/routes/auth/setup.tsx
360
321
  msgid "Couldn't create your account. Check the details and try again."
361
- msgstr ""
322
+ msgstr "无法创建您的账户. 请检查详细信息并重试."
362
323
 
363
324
  #. @context: Error toast when nav delete fails
364
325
  #: src/ui/dash/appearance/NavigationContent.tsx
365
326
  msgid "Couldn't delete. Try again in a moment."
366
- msgstr ""
327
+ msgstr "无法删除. 请稍后再试."
367
328
 
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 ""
329
+ #. @context: Toast when publish fails and post is auto-saved as draft
330
+ #: src/ui/compose/ComposeDialog.tsx
331
+ msgid "Couldn't publish. Saved as draft."
332
+ msgstr "无法发布. 已保存为草稿."
372
333
 
373
334
  #. @context: Error toast when nav save fails
374
335
  #. @context: Toast when save fails
375
336
  #: src/ui/dash/appearance/NavigationContent.tsx
376
337
  #: src/ui/shared/CollectionsSidebar.tsx
377
338
  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
-
385
- #. @context: Button to save new collection
386
- #: src/ui/dash/collections/CollectionForm.tsx
387
- #~ msgid "Create Collection"
388
- #~ msgstr "创建集合"
339
+ msgstr "保存失败。请稍后再试。"
389
340
 
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 ""
341
+ #. @context: Compose collection combobox empty state when no collections exist
342
+ #: src/ui/compose/ComposeDialog.tsx
343
+ msgid "Create a collection to get started."
344
+ msgstr "创建集合以开始。"
394
345
 
395
- #. @context: Button to create new page
396
- #: src/ui/dash/PageForm.tsx
397
- msgid "Create Page"
398
- msgstr "创建页面"
346
+ #. @context: Label for curl example
347
+ #: src/ui/dash/settings/ApiTokensContent.tsx
348
+ msgid "Create a post with curl:"
349
+ msgstr "使用 curl 创建帖子:"
399
350
 
400
- #. @context: Button to save new redirect
401
- #: src/routes/dash/redirects.tsx
402
- msgid "Create Redirect"
403
- msgstr "创建重定向"
351
+ #. @context: Button to save new custom URL
352
+ #: src/routes/dash/custom-urls.tsx
353
+ msgid "Create Custom URL"
354
+ msgstr "创建自定义 URL"
404
355
 
405
356
  #. @context: Setup page description
406
357
  #: src/routes/auth/setup.tsx
407
358
  msgid "Create your admin account."
408
359
  msgstr "创建您的管理员账户。"
409
360
 
410
- #. @context: Button in empty state to create first post
411
- #: src/ui/dash/PostList.tsx
412
- #~ msgid "Create your first post"
413
- #~ msgstr "创建你的第一篇帖子"
361
+ #. @context: Token creation date
362
+ #. placeholder {0}: formatDate(token.createdAt)
363
+ #: src/ui/dash/settings/ApiTokensContent.tsx
364
+ msgid "Created {0}"
365
+ msgstr "创建于 {0}"
366
+
367
+ #. @context: Badge indicating the current active session
368
+ #: src/ui/dash/settings/SessionsContent.tsx
369
+ msgid "Current"
370
+ msgstr ""
414
371
 
415
372
  #. @context: Password form field
416
373
  #: src/ui/dash/settings/AccountContent.tsx
@@ -420,109 +377,83 @@ msgstr "当前密码"
420
377
  #. @context: Error toast when current password verification fails
421
378
  #: src/routes/dash/settings.tsx
422
379
  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 "当前密码不正确。"
380
+ msgstr "当前密码不匹配。请重试。"
429
381
 
430
382
  #. @context: Appearance settings heading for custom CSS
383
+ #. @context: Link to Custom CSS settings from color theme page
431
384
  #. @context: Settings item — custom CSS settings
432
385
  #: src/ui/dash/appearance/AdvancedContent.tsx
386
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
433
387
  #: src/ui/dash/settings/SettingsRootContent.tsx
434
388
  msgid "Custom CSS"
435
389
  msgstr "自定义 CSS"
436
390
 
437
- #. @context: Toast after saving custom CSS
438
- #: src/routes/dash/settings.tsx
439
- #~ msgid "Custom CSS saved successfully."
440
- #~ msgstr "自定义 CSS 保存成功。"
441
-
442
391
  #. @context: Toast after saving custom CSS
443
392
  #: src/routes/dash/settings.tsx
444
393
  msgid "Custom CSS updated."
445
- msgstr ""
394
+ msgstr "自定义 CSS 已更新."
446
395
 
447
396
  #. @context: Settings item description for custom CSS
448
397
  #: src/ui/dash/settings/SettingsRootContent.tsx
449
398
  msgid "Custom styling"
450
- msgstr ""
399
+ msgstr "自定义样式"
400
+
401
+ #. @context: Settings item — custom URL settings
402
+ #. @context: Settings section heading
403
+ #: src/routes/dash/custom-urls.tsx
404
+ #: src/ui/dash/settings/SettingsRootContent.tsx
405
+ msgid "Custom URLs"
406
+ msgstr "自定义 URL"
451
407
 
452
408
  #. @context: Section heading for dangerous/destructive actions
453
409
  #: src/ui/dash/DangerZone.tsx
454
410
  msgid "Danger Zone"
455
- msgstr "危险区域"
411
+ msgstr "危险区"
456
412
 
457
- #. @context: Dashboard main heading
458
- #. @context: Dashboard navigation - dashboard home
459
- #: src/routes/dash/index.tsx
460
- #: src/ui/layouts/DashLayout.tsx
461
- msgid "Dashboard"
462
- msgstr "仪表板"
463
-
464
- #. @context: Settings form field
465
- #: src/ui/dash/settings/GeneralContent.tsx
466
- #~ msgid "Default Homepage View"
467
- #~ msgstr "默认主页视图"
413
+ #. @context: Settings group label for data export/import
414
+ #: src/ui/dash/settings/AccountMenuContent.tsx
415
+ msgid "Data"
416
+ msgstr ""
468
417
 
418
+ #. @context: Button to delete custom URL
469
419
  #. @context: Button to delete item
470
- #. @context: Button to delete redirect
471
420
  #. @context: Delete collection action
472
421
  #. @context: Delete nav item
473
- #: src/routes/dash/redirects.tsx
422
+ #: src/routes/dash/custom-urls.tsx
474
423
  #: src/ui/dash/ActionButtons.tsx
475
424
  #: src/ui/dash/appearance/NavigationContent.tsx
476
425
  #: src/ui/shared/CollectionsSidebar.tsx
477
426
  msgid "Delete"
478
427
  msgstr "删除"
479
428
 
480
- #. @context: Button to delete media
481
- #: src/ui/dash/media/ViewMediaContent.tsx
482
- msgid "Delete Media"
483
- msgstr "删除媒体"
484
-
485
- #. @context: Button to delete page
486
- #: src/routes/dash/pages.tsx
487
- msgid "Delete Page"
488
- msgstr "删除页面"
429
+ #. @context: Draft item action
430
+ #: src/ui/compose/ComposeDialog.tsx
431
+ msgid "Delete Draft"
432
+ msgstr "删除草稿"
489
433
 
490
434
  #. @context: Confirm dialog for deleting a collection
491
435
  #: src/ui/shared/CollectionsSidebar.tsx
492
436
  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 ""
437
+ msgstr "永久删除此收藏集?其中的帖子不会被删除。"
499
438
 
500
439
  #. @context: Toast after deleting a collection
501
440
  #: src/ui/shared/CollectionsSidebar.tsx
502
441
  msgid "Deleted"
503
- msgstr ""
504
-
505
- #. @context: Warning message before deleting media
506
- #: src/ui/dash/media/ViewMediaContent.tsx
507
- #~ msgid "Deleting this media will remove it permanently from storage."
508
- #~ msgstr "删除此媒体将永久从存储中移除。"
509
-
510
- #. @context: Hint shown on signin page when demo credentials are pre-filled
511
- #: src/routes/auth/signin.tsx
512
- #~ msgid "Demo account pre-filled. Just click Sign In."
513
- #~ msgstr "演示账户已预填。只需点击登录。"
442
+ msgstr "已删除"
514
443
 
515
444
  #. @context: Hint shown on signin page when demo credentials are pre-filled
516
445
  #: src/routes/auth/signin.tsx
517
446
  msgid "Demo credentials are pre-filled — hit Sign In to continue."
518
- msgstr ""
447
+ msgstr "演示凭证已预填 — 点击 登录 继续."
519
448
 
520
449
  #. @context: Alt text textarea placeholder
521
450
  #: src/ui/compose/ComposeDialog.tsx
522
451
  msgid "Describe this for people with visual impairments..."
523
- msgstr "为视力障碍人士描述这一内容..."
452
+ msgstr "为视力受限的人描述此图像..."
524
453
 
525
454
  #. @context: Collection form field
455
+ #. @context: Collection form field
456
+ #: src/ui/compose/ComposeDialog.tsx
526
457
  #: src/ui/shared/CollectionsSidebar.tsx
527
458
  msgid "Description (optional)"
528
459
  msgstr "描述(可选)"
@@ -530,83 +461,96 @@ msgstr "描述(可选)"
530
461
  #. @context: Settings group label for design settings
531
462
  #: src/ui/dash/settings/SettingsRootContent.tsx
532
463
  msgid "Design"
533
- msgstr ""
464
+ msgstr "设计"
465
+
466
+ #. @context: Redirect destination field
467
+ #: src/routes/dash/custom-urls.tsx
468
+ msgid "Destination"
469
+ msgstr "目标地址"
534
470
 
471
+ #. @context: Confirm close action sheet - discard changes button for editing published post
535
472
  #. @context: More menu - discard post
536
473
  #: src/ui/compose/ComposeDialog.tsx
474
+ #: src/ui/compose/ComposeDialog.tsx
537
475
  msgid "Discard"
538
- msgstr "丢弃"
476
+ msgstr "放弃"
539
477
 
540
478
  #. @context: Checkbox to show avatar in the site header
541
479
  #: src/ui/dash/settings/AvatarContent.tsx
542
480
  msgid "Display avatar in my site header"
543
- msgstr "在我的网站头部显示头像"
481
+ msgstr "在我的站点页眉显示头像"
544
482
 
545
483
  #. @context: Help text for site footer field
546
484
  #: src/ui/dash/settings/GeneralContent.tsx
547
485
  msgid "Displayed at the bottom of all posts and pages. Markdown supported."
548
- msgstr "显示在所有帖子和页面的底部。支持Markdown。"
486
+ msgstr "显示在所有文章和页面的底部。支持 Markdown。"
487
+
488
+ #. @context: Confirm close action sheet subtitle when editing a published post
489
+ #: src/ui/compose/ComposeDialog.tsx
490
+ msgid "Do you want to publish your changes or discard them?"
491
+ msgstr ""
492
+
493
+ #. @context: Confirm close action sheet - discard button
494
+ #: src/ui/compose/ComposeDialog.tsx
495
+ msgid "Don't save"
496
+ msgstr "不保存"
549
497
 
550
498
  #. @context: Button to exit reorder mode
551
499
  #. @context: Close attached text panel
552
- #. @context: Close media picker button
500
+ #. @context: Compose button - update existing post
501
+ #: src/ui/compose/ComposeDialog.tsx
553
502
  #: src/ui/compose/ComposeDialog.tsx
554
- #: src/ui/dash/posts/PostForm.tsx
555
503
  #: src/ui/shared/CollectionsSidebar.tsx
556
504
  msgid "Done"
557
505
  msgstr "完成"
558
506
 
559
- #. @context: Page status option - draft
507
+ #. @context: Settings item description for site export
508
+ #: src/ui/dash/settings/AccountMenuContent.tsx
509
+ msgid "Download as a Zola static site (.zip)"
510
+ msgstr ""
511
+
560
512
  #. @context: Post status badge - draft
561
- #. @context: Post status option
562
- #: src/ui/dash/PageForm.tsx
563
- #: src/ui/dash/posts/PostForm.tsx
564
513
  #: src/ui/dash/StatusBadge.tsx
565
514
  msgid "Draft"
566
515
  msgstr "草稿"
567
516
 
517
+ #. @context: Toast after draft deletion
518
+ #: src/ui/compose/ComposeDialog.tsx
519
+ msgid "Draft deleted."
520
+ msgstr "草稿已删除."
521
+
522
+ #. @context: Toast shown when a local draft is restored on compose open
523
+ #: src/ui/compose/ComposeDialog.tsx
524
+ msgid "Draft restored."
525
+ msgstr "草稿已恢复."
526
+
568
527
  #. @context: Toast after saving a draft post
569
528
  #. @context: Toast after saving a draft post
570
529
  #: src/routes/compose.tsx
571
530
  #: src/routes/compose.tsx
572
531
  msgid "Draft saved."
573
- msgstr "草稿已保存。"
532
+ msgstr "草稿已保存."
574
533
 
575
- #. @context: Post status label
576
- #: src/routes/dash/index.tsx
534
+ #. @context: Drafts panel title
535
+ #: src/ui/compose/ComposeDialog.tsx
577
536
  msgid "Drafts"
578
537
  msgstr "草稿"
579
538
 
539
+ #. @context: Placeholder for API token name input
540
+ #: src/ui/dash/settings/ApiTokensContent.tsx
541
+ msgid "e.g. iOS Shortcuts"
542
+ msgstr "例如 iOS Shortcuts"
543
+
580
544
  #. @context: Button to edit item
581
- #. @context: Button to edit page
582
- #. @context: Button to edit page
583
- #. @context: Button to edit post
584
- #. @context: Button to edit post
585
545
  #. @context: Per-collection edit action
586
- #: src/routes/dash/pages.tsx
587
- #: src/routes/dash/posts.tsx
588
546
  #: src/ui/dash/ActionButtons.tsx
589
- #: src/ui/dash/pages/PagesContent.tsx
590
- #: src/ui/dash/PostList.tsx
591
547
  #: src/ui/shared/CollectionsSidebar.tsx
592
548
  msgid "Edit"
593
549
  msgstr "编辑"
594
550
 
595
- #. @context: Page heading
596
- #: src/ui/dash/collections/CollectionForm.tsx
597
- #~ msgid "Edit Collection"
598
- #~ msgstr "编辑集合"
599
-
600
- #. @context: Edit page main heading
601
- #. @context: Link to edit the page
602
- #: src/routes/dash/pages.tsx
603
- #: src/ui/dash/appearance/NavigationContent.tsx
604
- msgid "Edit Page"
605
- msgstr "编辑页面"
606
-
607
- #. @context: Page heading
608
- #: src/routes/dash/posts.tsx
609
- msgid "Edit Post"
551
+ #. @context: Compose dialog header title in edit mode
552
+ #: src/ui/compose/ComposeDialog.tsx
553
+ msgid "Edit post"
610
554
  msgstr "编辑帖子"
611
555
 
612
556
  #. @context: Setup/signin form field - email
@@ -614,22 +558,19 @@ msgstr "编辑帖子"
614
558
  #: src/routes/auth/setup.tsx
615
559
  #: src/routes/auth/signin.tsx
616
560
  msgid "Email"
617
- msgstr "电子邮件"
561
+ msgstr "电子邮箱"
618
562
 
619
563
  #. @context: Compose toolbar - emoji picker tooltip
620
564
  #: src/ui/compose/ComposeDialog.tsx
621
565
  msgid "Emoji"
622
- msgstr ""
566
+ msgstr "表情"
623
567
 
624
568
  #. @context: Emoji picker tab label
569
+ #. @context: Emoji picker tab label
570
+ #: src/ui/compose/ComposeDialog.tsx
625
571
  #: src/ui/shared/CollectionsSidebar.tsx
626
572
  msgid "Emojis"
627
- msgstr ""
628
-
629
- #. @context: Password reset page description
630
- #: src/routes/auth/reset.tsx
631
- #~ msgid "Enter your new password."
632
- #~ msgstr "输入您的新密码。"
573
+ msgstr "表情"
633
574
 
634
575
  #. @context: Plural entry count label
635
576
  #: src/ui/pages/CollectionsPage.tsx
@@ -641,49 +582,25 @@ msgstr "条目"
641
582
  msgid "entry"
642
583
  msgstr "条目"
643
584
 
644
- #. @context: Error toast when account creation fails
645
- #. @context: Error toast when account creation fails
646
- #: src/routes/auth/setup.tsx
647
- #: src/routes/auth/setup.tsx
648
- #~ msgid "Failed to create account"
649
- #~ msgstr "创建账户失败"
650
-
651
- #. @context: Error toast when nav delete fails
652
- #: src/ui/dash/appearance/NavigationContent.tsx
653
- #~ msgid "Failed to delete. Please try again."
654
- #~ msgstr "删除失败。请再试一次。"
655
-
656
- #. @context: Toast when post save fails
657
- #: src/ui/dash/posts/PostForm.tsx
658
- #~ msgid "Failed to save post. Please try again."
659
- #~ msgstr "保存帖子失败。请再试一次。"
660
-
661
- #. @context: Error toast when nav save fails
662
- #: src/ui/dash/appearance/NavigationContent.tsx
663
- #~ msgid "Failed to save. Please try again."
664
- #~ msgstr "保存失败。请再试一次。"
665
-
666
- #. @context: Error toast when profile update fails
667
- #: src/routes/dash/settings.tsx
668
- #~ msgid "Failed to update profile."
669
- #~ msgstr "更新个人资料失败。"
585
+ #. @context: Settings item export site as Zola ZIP
586
+ #: src/ui/dash/settings/AccountMenuContent.tsx
587
+ msgid "Export Site"
588
+ msgstr ""
670
589
 
671
590
  #. @context: Settings item description for avatar
672
591
  #: src/ui/dash/settings/SettingsRootContent.tsx
673
592
  msgid "Favicon and header icon"
674
- msgstr ""
593
+ msgstr "Favicon 和页眉图标"
675
594
 
676
- #. @context: Archive filter - featured posts
595
+ #. @context: Archive visibility filter - featured posts
677
596
  #. @context: Browse filter for featured posts
678
597
  #. @context: Browse filter label
679
598
  #. @context: Browse filter label
680
599
  #. @context: Browse filter label for featured posts
681
600
  #. @context: Post badge - featured
682
- #. @context: Visibility option - highlighted on featured page
683
601
  #: src/ui/dash/appearance/NavigationContent.tsx
684
602
  #: src/ui/dash/appearance/NavigationContent.tsx
685
603
  #: src/ui/dash/appearance/NavigationContent.tsx
686
- #: src/ui/dash/posts/PostForm.tsx
687
604
  #: src/ui/dash/StatusBadge.tsx
688
605
  #: src/ui/layouts/SiteLayout.tsx
689
606
  #: src/ui/pages/ArchivePage.tsx
@@ -695,12 +612,17 @@ msgstr "精选"
695
612
  #: src/routes/api/upload.ts
696
613
  #: src/routes/dash/settings.tsx
697
614
  msgid "File storage isn't set up. Check your server config."
698
- msgstr ""
615
+ msgstr "未设置文件存储。请检查服务器配置。"
699
616
 
700
617
  #. @context: Toast after successful file upload
701
618
  #: src/routes/api/upload.ts
702
619
  msgid "File uploaded."
703
- msgstr ""
620
+ msgstr "文件已上传."
621
+
622
+ #. @context: Archive media filter - files/documents
623
+ #: src/ui/pages/ArchivePage.tsx
624
+ msgid "Files"
625
+ msgstr "文件"
704
626
 
705
627
  #. @context: Appearance settings heading for font theme
706
628
  #: src/ui/dash/appearance/FontThemeContent.tsx
@@ -712,110 +634,72 @@ msgstr "字体主题"
712
634
  msgid "Font Theme"
713
635
  msgstr "字体主题"
714
636
 
715
- #. @context: Post form field - post format
716
- #: src/ui/dash/posts/PostForm.tsx
717
- msgid "Format"
718
- msgstr "格式"
719
-
720
637
  #. @context: Search results count - multiple
721
638
  #. placeholder {0}: String(results.length)
722
639
  #: src/ui/pages/SearchPage.tsx
723
640
  msgid "Found {0} results"
724
- msgstr "找到 {0} 个结果"
641
+ msgstr "找到 {0} 条结果"
725
642
 
726
643
  #. @context: Search results count - single
727
644
  #: src/ui/pages/SearchPage.tsx
728
645
  msgid "Found 1 result"
729
- msgstr "找到 1 个结果"
730
-
731
- #. @context: Redirect form field
732
- #: src/routes/dash/redirects.tsx
733
- msgid "From Path"
734
- msgstr "来源路径"
646
+ msgstr "找到 1 条结果"
735
647
 
736
648
  #. @context: Settings item — general settings
737
649
  #. @context: Settings section heading
738
650
  #: src/ui/dash/settings/GeneralContent.tsx
739
651
  #: src/ui/dash/settings/SettingsRootContent.tsx
740
652
  msgid "General"
741
- msgstr "常规"
653
+ msgstr "通用"
654
+
655
+ #. @context: Button to create new API token
656
+ #: src/ui/dash/settings/ApiTokensContent.tsx
657
+ msgid "Generate Token"
658
+ msgstr "生成 API 令牌"
742
659
 
743
660
  #. @context: Compose link title placeholder
744
661
  #: src/ui/compose/ComposeDialog.tsx
745
662
  msgid "Give it a title..."
746
- msgstr "给它一个标题..."
663
+ msgstr "给它起个标题..."
747
664
 
748
665
  #. @context: Settings item description for navigation
749
666
  #: src/ui/dash/settings/SettingsRootContent.tsx
750
667
  msgid "Header links, featured"
751
- msgstr ""
668
+ msgstr "页眉链接,精选"
752
669
 
753
670
  #. @context: Hint text in alt text panel
754
671
  #: src/ui/compose/ComposeDialog.tsx
755
672
  msgid "Helps screen readers describe the image"
756
- msgstr ""
673
+ msgstr "帮助屏幕阅读器描述图片"
757
674
 
758
675
  #. @context: Collection sort order option
676
+ #. @context: Collection sort order option
677
+ #: src/ui/compose/ComposeDialog.tsx
759
678
  #: src/ui/shared/CollectionsSidebar.tsx
760
679
  msgid "Highest rated"
761
- msgstr "最高评分"
680
+ msgstr "评分最高"
762
681
 
763
682
  #. @context: Toast after saving home default view setting
764
683
  #: src/ui/dash/appearance/NavigationContent.tsx
765
684
  msgid "Home view saved"
766
- msgstr ""
767
-
768
- #. @context: Collection form field
769
- #: src/ui/shared/CollectionsSidebar.tsx
770
- #~ msgid "Icon (optional)"
771
- #~ msgstr "图标(可选)"
685
+ msgstr "主页视图已保存"
772
686
 
773
687
  #. @context: Icon picker tab label
688
+ #. @context: Icon picker tab label
689
+ #: src/ui/compose/ComposeDialog.tsx
774
690
  #: src/ui/shared/CollectionsSidebar.tsx
775
691
  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 ""
782
-
783
- #. @context: Media upload instructions - auto optimization
784
- #: src/ui/dash/media/MediaListContent.tsx
785
- #~ msgid "Images are automatically optimized: resized to max 1920px, converted to WebP, and metadata stripped."
786
- #~ msgstr "图像会自动优化:调整大小至最大 1920px,转换为 WebP,并去除元数据。"
787
-
788
- #. @context: Error toast when sign-in credentials are wrong
789
- #: src/routes/auth/signin.tsx
790
- #~ msgid "Invalid email or password"
791
- #~ msgstr "无效的电子邮件或密码"
792
-
793
- #. @context: Error toast when selected font theme is not valid
794
- #: src/routes/dash/settings.tsx
795
- #~ msgid "Invalid font theme selected."
796
- #~ msgstr "所选字体主题无效。"
692
+ msgstr "图标"
797
693
 
798
- #. @context: Fallback validation error for page form
799
- #. @context: Fallback validation error for page form
800
- #: src/routes/dash/pages.tsx
801
- #: src/routes/dash/pages.tsx
802
- #~ msgid "Invalid input"
803
- #~ msgstr "无效输入"
804
-
805
- #. @context: Password reset error heading
806
- #: src/routes/auth/reset.tsx
807
- #~ msgid "Invalid or Expired Link"
808
- #~ msgstr "无效或过期的链接"
809
-
810
- #. @context: Error toast when selected theme is not valid
811
- #: src/routes/dash/settings.tsx
812
- #~ msgid "Invalid theme selected."
813
- #~ msgstr "所选主题无效。"
694
+ #. @context: Archive media filter - images
695
+ #: src/ui/pages/ArchivePage.tsx
696
+ msgid "Images"
697
+ msgstr "图片"
814
698
 
815
699
  #. @context: Checkbox for allowing search engine indexing
816
700
  #: src/ui/dash/settings/GeneralContent.tsx
817
701
  msgid "It's OK for search engines to index my site"
818
- msgstr "允许搜索引擎索引我的网站是可以的"
702
+ msgstr "允许搜索引擎索引我的网站"
819
703
 
820
704
  #. @context: Nav item label field
821
705
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -825,18 +709,24 @@ msgstr "标签"
825
709
  #. @context: Error toast when nav link fields are empty
826
710
  #: src/ui/dash/appearance/NavigationContent.tsx
827
711
  msgid "Label and URL are required"
828
- msgstr "标签和 URL 是必填项"
712
+ msgstr "标签和 URL 为必填项"
829
713
 
830
714
  #. @context: Error toast when nav label is empty
831
715
  #: src/ui/dash/appearance/NavigationContent.tsx
832
716
  msgid "Label is required"
833
- msgstr "标签是必需的"
717
+ msgstr "标签为必填项"
834
718
 
835
719
  #. @context: Settings form field
836
720
  #: src/ui/dash/settings/GeneralContent.tsx
837
721
  msgid "Language"
838
722
  msgstr "语言"
839
723
 
724
+ #. @context: Token last used date
725
+ #. placeholder {0}: formatDate(token.lastUsedAt)
726
+ #: src/ui/dash/settings/ApiTokensContent.tsx
727
+ msgid "Last used {0}"
728
+ msgstr "上次使用 {0}"
729
+
840
730
  #. @context: Browse filter for latest posts
841
731
  #. @context: Browse filter label
842
732
  #. @context: Browse filter label
@@ -848,6 +738,11 @@ msgstr "语言"
848
738
  msgid "Latest"
849
739
  msgstr "最新"
850
740
 
741
+ #. @context: Suffix after Custom CSS link on color theme page
742
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
743
+ msgid "lets you override any theme variable."
744
+ msgstr ""
745
+
851
746
  #. @context: Nav item type badge
852
747
  #: src/ui/dash/appearance/NavigationContent.tsx
853
748
  msgid "link"
@@ -856,10 +751,8 @@ msgstr "链接"
856
751
  #. @context: Compose format tab
857
752
  #. @context: Post format badge - link
858
753
  #. @context: Post format label - link
859
- #. @context: Post format option
860
754
  #: src/ui/compose/ComposeDialog.tsx
861
755
  #: src/ui/dash/FormatBadge.tsx
862
- #: src/ui/dash/posts/PostForm.tsx
863
756
  #: src/ui/pages/ArchivePage.tsx
864
757
  msgid "Link"
865
758
  msgstr "链接"
@@ -872,76 +765,49 @@ msgstr "链接"
872
765
  #. @context: Label for max visible nav links number input
873
766
  #: src/ui/dash/appearance/NavigationContent.tsx
874
767
  msgid "Links shown in header"
875
- msgstr ""
768
+ msgstr "页眉显示的链接数"
876
769
 
877
- #. @context: Visibility option - appears everywhere
878
- #: src/ui/dash/posts/PostForm.tsx
879
- msgid "Listed"
880
- msgstr ""
770
+ #. @context: Label for list posts curl example
771
+ #: src/ui/dash/settings/ApiTokensContent.tsx
772
+ msgid "List posts:"
773
+ msgstr "列出帖子:"
881
774
 
882
775
  #. @context: Pagination button - load more items
883
776
  #: src/ui/shared/Pagination.tsx
884
777
  msgid "Load more"
885
778
  msgstr "加载更多"
886
779
 
887
- #. @context: Loading state for media picker
888
- #: src/ui/dash/posts/PostForm.tsx
889
- msgid "Loading..."
890
- msgstr "加载中..."
891
-
892
- #. @context: Page slug validation message
893
- #: src/ui/dash/PageForm.tsx
894
- msgid "Lowercase letters, numbers, and hyphens only"
895
- msgstr "仅允许小写字母、数字和连字符"
896
-
897
780
  #. @context: Collection sort order option
781
+ #. @context: Collection sort order option
782
+ #: src/ui/compose/ComposeDialog.tsx
898
783
  #: src/ui/shared/CollectionsSidebar.tsx
899
784
  msgid "Lowest rated"
900
- msgstr "最低评分"
785
+ msgstr "评分最低"
901
786
 
902
- #. @context: Media detail section - Markdown snippet
903
- #: src/ui/dash/media/ViewMediaContent.tsx
904
- msgid "Markdown"
905
- msgstr "Markdown"
787
+ #. @context: Settings item description for sessions
788
+ #: src/ui/dash/settings/AccountMenuContent.tsx
789
+ msgid "Manage active sign-in sessions"
790
+ msgstr ""
906
791
 
907
792
  #. @context: Placeholder hint for markdown-enabled textareas
908
793
  #: src/ui/dash/settings/GeneralContent.tsx
909
794
  msgid "Markdown supported"
910
- msgstr "支持Markdown"
911
-
912
- #. @context: Label for max visible nav links number input
913
- #: src/ui/dash/appearance/NavigationContent.tsx
914
- #~ msgid "Max visible links"
915
- #~ msgstr ""
795
+ msgstr "支持 Markdown"
916
796
 
917
797
  #. @context: Toast after saving max visible nav links setting
918
798
  #: src/ui/dash/appearance/NavigationContent.tsx
919
799
  msgid "Max visible links saved"
920
- msgstr ""
921
-
922
- #. @context: Settings form field for max visible nav links in header before overflow menu
923
- #: src/ui/dash/settings/GeneralContent.tsx
924
- #~ msgid "Max Visible Nav Links"
925
- #~ msgstr "最大可见导航链接"
800
+ msgstr "已保存最大可见链接数"
926
801
 
927
802
  #. @context: Compose toolbar - media tooltip
928
- #. @context: Media main heading
929
- #. @context: Post form field - media attachments
930
803
  #: src/ui/compose/ComposeDialog.tsx
931
- #: src/ui/dash/media/MediaListContent.tsx
932
- #: src/ui/dash/posts/PostForm.tsx
933
804
  msgid "Media"
934
805
  msgstr "媒体"
935
806
 
936
- #. @context: Dashboard header menu button
937
- #: src/ui/layouts/DashLayout.tsx
938
- msgid "Menu"
939
- msgstr "菜单"
940
-
941
807
  #. @context: Aria-label for more button
942
808
  #: src/ui/shared/CollectionsSidebar.tsx
943
809
  msgid "More actions"
944
- msgstr ""
810
+ msgstr "更多操作"
945
811
 
946
812
  #. @context: Button to show overflow nav links
947
813
  #: src/ui/layouts/SiteLayout.tsx
@@ -949,24 +815,16 @@ msgid "More links"
949
815
  msgstr "更多链接"
950
816
 
951
817
  #. @context: Collection title placeholder
818
+ #. @context: Collection title placeholder
819
+ #: src/ui/compose/ComposeDialog.tsx
952
820
  #: src/ui/shared/CollectionsSidebar.tsx
953
821
  msgid "My Collection"
954
822
  msgstr "我的收藏"
955
823
 
956
- #. @context: Account settings form field
957
- #: src/ui/dash/settings/AccountContent.tsx
958
- msgid "Name"
959
- msgstr "姓名"
960
-
961
- #. @context: Error toast when display name is empty
962
- #: src/routes/dash/settings.tsx
963
- #~ msgid "Name is required."
964
- #~ msgstr "名称是必需的。"
965
-
966
824
  #. @context: Settings item description for general
967
825
  #: src/ui/dash/settings/SettingsRootContent.tsx
968
826
  msgid "Name, description, language"
969
- msgstr ""
827
+ msgstr "名称、描述、语言"
970
828
 
971
829
  #. @context: Settings item — navigation settings
972
830
  #: src/ui/dash/settings/SettingsRootContent.tsx
@@ -983,29 +841,21 @@ msgstr "导航项"
983
841
  #: src/ui/dash/appearance/NavigationContent.tsx
984
842
  #: src/ui/dash/appearance/NavigationContent.tsx
985
843
  msgid "Navigation Preview"
986
- msgstr ""
987
-
988
- #. @context: Help text with link
989
- #: src/routes/dash/index.tsx
990
- msgid "Need help? Visit the <0>documentation</0>"
991
- msgstr "需要帮助吗?访问<0>文档</0>。"
844
+ msgstr "导航预览"
992
845
 
993
846
  #. @context: Tooltip/aria for add collection button
994
847
  #: src/ui/shared/CollectionsSidebar.tsx
995
848
  msgid "New Collection"
996
- msgstr "新收藏"
997
-
998
- #. @context: Button to add divider between collections
999
- #: src/ui/dash/collections/CollectionsListContent.tsx
1000
- #~ msgid "New Divider"
1001
- #~ msgstr "新分隔符"
849
+ msgstr "新建收藏夹"
1002
850
 
1003
- #. @context: Button to create new page
1004
- #. @context: New page main heading
1005
- #: src/routes/dash/pages.tsx
1006
- #: src/ui/dash/pages/PagesContent.tsx
1007
- msgid "New Page"
1008
- msgstr "新页面"
851
+ #. @context: Button to create new custom URL
852
+ #. @context: Button to create new custom URL
853
+ #. @context: Page heading
854
+ #: src/routes/dash/custom-urls.tsx
855
+ #: src/routes/dash/custom-urls.tsx
856
+ #: src/routes/dash/custom-urls.tsx
857
+ msgid "New Custom URL"
858
+ msgstr "新建自定义 URL"
1009
859
 
1010
860
  #. @context: Password form field
1011
861
  #. @context: Password reset form field
@@ -1014,28 +864,19 @@ msgstr "新页面"
1014
864
  msgid "New Password"
1015
865
  msgstr "新密码"
1016
866
 
1017
- #. @context: Button to create new post
1018
- #. @context: Button to create new post
1019
- #. @context: Page heading
1020
- #: src/routes/dash/index.tsx
1021
- #: src/routes/dash/posts.tsx
1022
- #: src/routes/dash/posts.tsx
1023
- msgid "New Post"
1024
- msgstr "新帖子"
1025
-
1026
- #. @context: Button to create new redirect
1027
- #. @context: Button to create new redirect
1028
- #. @context: Page heading
1029
- #: src/routes/dash/redirects.tsx
1030
- #: src/routes/dash/redirects.tsx
1031
- #: src/routes/dash/redirects.tsx
1032
- msgid "New Redirect"
1033
- msgstr "新重定向"
867
+ #. @context: Browser page title for the new post page
868
+ #. @context: Page title for the new post page
869
+ #: src/routes/pages/new.tsx
870
+ #: src/ui/pages/ComposePage.tsx
871
+ msgid "New post"
872
+ msgstr ""
1034
873
 
1035
874
  #. @context: Collection sort order option
875
+ #. @context: Collection sort order option
876
+ #: src/ui/compose/ComposeDialog.tsx
1036
877
  #: src/ui/shared/CollectionsSidebar.tsx
1037
878
  msgid "Newest first"
1038
- msgstr "最新优先"
879
+ msgstr "最新在前"
1039
880
 
1040
881
  #. @context: Pagination button - next page
1041
882
  #. @context: Pagination button - next page
@@ -1044,143 +885,66 @@ msgstr "最新优先"
1044
885
  msgid "Next"
1045
886
  msgstr "下一页"
1046
887
 
1047
- #. @context: Compose collection combobox empty state
1048
- #: src/ui/compose/ComposeDialog.tsx
1049
- #~ msgid "No collections found."
1050
- #~ msgstr "未找到任何收藏。"
1051
-
1052
- #. @context: Empty state message on collections page
1053
- #: src/ui/pages/CollectionsPage.tsx
1054
- #~ msgid "No collections yet."
1055
- #~ msgstr "尚未有任何收藏。"
888
+ #. @context: Empty state when no sessions exist (shouldn't normally appear)
889
+ #: src/ui/dash/settings/SessionsContent.tsx
890
+ msgid "No active sessions found."
891
+ msgstr ""
1056
892
 
1057
893
  #. @context: Empty state message on collections page
1058
894
  #: src/ui/pages/CollectionsPage.tsx
1059
895
  msgid "No collections yet. Start one to organize posts by topic."
1060
- msgstr ""
896
+ msgstr "还没有集合。创建一个集合以按主题整理帖子。"
1061
897
 
1062
- #. @context: Empty state message on featured page
1063
- #: src/ui/pages/FeaturedPage.tsx
1064
- #~ msgid "No featured posts yet."
1065
- #~ msgstr "尚无精选帖子。"
898
+ #. @context: Empty state message
899
+ #: src/routes/dash/custom-urls.tsx
900
+ msgid "No custom URLs yet. Create one to add redirects or custom paths for posts."
901
+ msgstr "还没有自定义 URL。创建一个以便为文章添加重定向或自定义路径。"
902
+
903
+ #. @context: Drafts panel empty state
904
+ #: src/ui/compose/ComposeDialog.tsx
905
+ msgid "No drafts yet. Save a draft to find it here."
906
+ msgstr "还没有草稿。保存草稿后会在此找到它。"
1066
907
 
1067
908
  #. @context: Empty state message on featured page
1068
909
  #: src/ui/pages/FeaturedPage.tsx
1069
910
  msgid "No featured posts. Mark a post as featured to highlight it here."
1070
- msgstr ""
1071
-
1072
- #. @context: Error when no file was selected for upload
1073
- #: src/routes/api/upload.ts
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 "未提供文件。"
911
+ msgstr "没有精选帖子。将帖子标记为精选即可在此突出显示。"
1081
912
 
1082
913
  #. @context: Error toast when no file was selected for upload
1083
914
  #. @context: Error when no file was selected for upload
1084
915
  #: src/routes/api/upload.ts
1085
916
  #: src/routes/dash/settings.tsx
1086
917
  msgid "No file selected. Choose a file to upload."
1087
- msgstr ""
918
+ msgstr "未选择文件。请选择要上传的文件。"
1088
919
 
1089
- #. @context: Compose collection combobox empty state
920
+ #. @context: Compose collection combobox empty state when search has no results
1090
921
  #: src/ui/compose/ComposeDialog.tsx
1091
922
  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 ""
1103
-
1104
- #. @context: Post form media empty state
1105
- #: src/ui/dash/posts/PostForm.tsx
1106
- #~ msgid "No media selected yet."
1107
- #~ msgstr "尚未选择任何媒体。"
1108
-
1109
- #. @context: Empty state message when no media exists
1110
- #: src/ui/dash/media/MediaListContent.tsx
1111
- #~ msgid "No media uploaded yet."
1112
- #~ msgstr "尚未上传任何媒体。"
923
+ msgstr "没有匹配的集合."
1113
924
 
1114
925
  #. @context: Empty state for navigation items
1115
926
  #: src/ui/dash/appearance/NavigationContent.tsx
1116
- msgid "No navigation items yet. Add pages, links, or enable system items below."
1117
- msgstr "尚未有导航项。请在下面添加页面、链接或启用系统项。"
1118
-
1119
- #. @context: Empty state when page search has no results
1120
- #: src/ui/dash/appearance/NavigationContent.tsx
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."
1127
- msgstr ""
1128
-
1129
- #. @context: Empty state for pages list
1130
- #: src/ui/dash/pages/PagesContent.tsx
1131
- #~ msgid "No pages yet. Create your first page to get started."
1132
- #~ msgstr "还没有页面。创建您的第一个页面以开始。"
1133
-
1134
- #. @context: Archive empty state
1135
- #: src/ui/pages/ArchivePage.tsx
1136
- #~ msgid "No posts found."
1137
- #~ msgstr "未找到帖子。"
927
+ msgid "No navigation items yet. Add links or enable system items below."
928
+ msgstr "还没有导航项目。添加链接或在下方启用系统项目。"
1138
929
 
1139
- #. @context: Empty state message
1140
- #: src/ui/pages/CollectionPage.tsx
1141
- #~ msgid "No posts in this collection."
1142
- #~ msgstr "此集合中没有帖子。"
1143
-
1144
- #. @context: Archive empty state
930
+ #. @context: Archive empty state with filters
1145
931
  #: src/ui/pages/ArchivePage.tsx
1146
- msgid "No posts match this filter."
1147
- msgstr ""
1148
-
1149
- #. @context: Empty state message on home page
1150
- #: src/ui/pages/HomePage.tsx
1151
- #~ msgid "No posts yet."
1152
- #~ msgstr "还没有帖子。"
1153
-
1154
- #. @context: Empty state message
1155
- #: src/routes/dash/redirects.tsx
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 ""
1163
-
1164
- #. @context: Search empty results
1165
- #: src/ui/pages/SearchPage.tsx
1166
- #~ msgid "No results found."
1167
- #~ msgstr "未找到结果。"
932
+ msgid "No posts match these filters. Try adjusting your selection or clear all filters."
933
+ msgstr "没有帖子符合这些筛选条件。尝试调整选择或清除所有筛选。"
1168
934
 
1169
935
  #. @context: Search empty results
1170
936
  #: src/ui/pages/SearchPage.tsx
1171
937
  msgid "No results. Try different keywords."
1172
- msgstr ""
938
+ msgstr "没有结果。尝试不同的关键词。"
1173
939
 
1174
940
  #. @context: Compose format tab
1175
941
  #. @context: Post format badge - note
1176
942
  #. @context: Post format label - note
1177
- #. @context: Post format option
1178
943
  #: src/ui/compose/ComposeDialog.tsx
1179
944
  #: src/ui/dash/FormatBadge.tsx
1180
- #: src/ui/dash/posts/PostForm.tsx
1181
945
  #: src/ui/pages/ArchivePage.tsx
1182
946
  msgid "Note"
1183
- msgstr "注意"
947
+ msgstr "笔记"
1184
948
 
1185
949
  #. @context: Post format label plural - notes
1186
950
  #: src/ui/pages/ArchivePage.tsx
@@ -1190,88 +954,50 @@ msgstr "笔记"
1190
954
  #. @context: Empty state message on home page
1191
955
  #: src/ui/pages/HomePage.tsx
1192
956
  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 ""
957
+ msgstr "这里还没有内容."
1199
958
 
1200
959
  #. @context: Collection sort order option
960
+ #. @context: Collection sort order option
961
+ #: src/ui/compose/ComposeDialog.tsx
1201
962
  #: src/ui/shared/CollectionsSidebar.tsx
1202
963
  msgid "Oldest first"
1203
- msgstr "最旧的在前"
964
+ msgstr "最旧优先"
1204
965
 
1205
966
  #. @context: Switch label for setting featured posts as default homepage
1206
967
  #: src/ui/dash/appearance/NavigationContent.tsx
1207
968
  msgid "Open with Featured posts"
1208
- msgstr ""
969
+ msgstr "以精选文章打开"
1209
970
 
1210
971
  #. @context: Toast after reordering collections
1211
972
  #. @context: Toast after saving navigation item order
1212
973
  #: src/ui/dash/appearance/NavigationContent.tsx
1213
974
  #: src/ui/shared/CollectionsSidebar.tsx
1214
975
  msgid "Order saved"
1215
- msgstr "已保存顺序"
1216
-
1217
- #. @context: Nav item type badge
1218
- #: src/ui/dash/appearance/NavigationContent.tsx
1219
- msgid "page"
1220
- msgstr "页面"
1221
-
1222
- #. @context: Default page heading when untitled
1223
- #: src/routes/dash/pages.tsx
1224
- msgid "Page"
1225
- msgstr "页面"
976
+ msgstr "排序已保存"
1226
977
 
1227
978
  #. @context: Pagination - current page indicator
1228
979
  #: src/ui/shared/Pagination.tsx
1229
980
  msgid "Page {page}"
1230
- msgstr "页面 {page}"
1231
-
1232
- #. @context: Page content placeholder
1233
- #: src/ui/dash/PageForm.tsx
1234
- msgid "Page content (Markdown supported)..."
1235
- msgstr "页面内容(支持Markdown)..."
1236
-
1237
- #. @context: Page title placeholder
1238
- #: src/ui/dash/PageForm.tsx
1239
- msgid "Page title..."
1240
- msgstr "页面标题..."
1241
-
1242
- #. @context: Dashboard navigation - pages management
1243
- #. @context: Pages main heading
1244
- #: src/ui/dash/pages/PagesContent.tsx
1245
- #: src/ui/layouts/DashLayout.tsx
1246
- msgid "Pages"
1247
- msgstr "页面"
981
+ msgstr " {page}"
1248
982
 
983
+ #. @context: Settings item — password settings
1249
984
  #. @context: Setup/signin form field - password
1250
985
  #. @context: Setup/signin form field - password
1251
986
  #: src/routes/auth/setup.tsx
1252
987
  #: src/routes/auth/signin.tsx
988
+ #: src/ui/dash/settings/AccountMenuContent.tsx
1253
989
  msgid "Password"
1254
990
  msgstr "密码"
1255
991
 
1256
- #. @context: Toast after changing account password
1257
- #: src/routes/dash/settings.tsx
1258
- #~ msgid "Password changed successfully."
1259
- #~ msgstr "密码更改成功。"
1260
-
1261
992
  #. @context: Toast after changing account password
1262
993
  #: src/routes/dash/settings.tsx
1263
994
  msgid "Password changed."
1264
- msgstr ""
1265
-
1266
- #. @context: Error toast when new password and confirmation differ
1267
- #: src/routes/dash/settings.tsx
1268
- #~ msgid "Passwords do not match."
1269
- #~ msgstr "密码不匹配。"
995
+ msgstr "密码已更改."
1270
996
 
1271
997
  #. @context: Error toast when new password and confirmation differ
1272
998
  #: src/routes/dash/settings.tsx
1273
999
  msgid "Passwords don't match. Make sure both fields are identical."
1274
- msgstr ""
1000
+ msgstr "密码不匹配。请确保两次输入相同。"
1275
1001
 
1276
1002
  #. @context: Attached text placeholder
1277
1003
  #: src/ui/compose/ComposeDialog.tsx
@@ -1280,75 +1006,51 @@ msgid ""
1280
1006
  "\n"
1281
1007
  "Markdown formatting will be preserved."
1282
1008
  msgstr ""
1283
- "粘贴一篇长文章、AI 响应或任何文本...\n"
1009
+ "粘贴一篇长文章、AI 回复或任何文本...\n"
1284
1010
  "\n"
1285
- "Markdown 格式将被保留。"
1011
+ "Markdown 格式将被保留."
1286
1012
 
1287
1013
  #. @context: Compose link URL placeholder
1288
1014
  #: src/ui/compose/ComposeDialog.tsx
1289
1015
  msgid "Paste a URL..."
1290
- msgstr "粘贴一个网址..."
1016
+ msgstr "粘贴链接..."
1017
+
1018
+ #. @context: Custom URL form field
1019
+ #: src/routes/dash/custom-urls.tsx
1020
+ msgid "Path"
1021
+ msgstr "路径"
1291
1022
 
1292
- #. @context: Link to individual post in thread
1293
1023
  #. @context: Link to permanent URL of post
1294
- #: src/ui/pages/PostPage.tsx
1295
- #: src/ui/shared/ThreadView.tsx
1024
+ #: src/ui/shared/PostFooter.tsx
1296
1025
  msgid "Permalink"
1297
1026
  msgstr "永久链接"
1298
1027
 
1299
1028
  #. @context: Post badge - pinned
1300
- #. @context: Post form checkbox - pin to top
1301
- #: src/ui/dash/posts/PostForm.tsx
1302
1029
  #: src/ui/dash/StatusBadge.tsx
1303
1030
  msgid "Pinned"
1304
- msgstr "已固定"
1031
+ msgstr "已置顶"
1305
1032
 
1306
1033
  #. @context: Compose button - publish post
1307
- #. @context: Default post title
1308
- #: src/routes/dash/posts.tsx
1034
+ #. @context: Custom URL type option
1035
+ #: src/routes/dash/custom-urls.tsx
1309
1036
  #: src/ui/compose/ComposeDialog.tsx
1310
1037
  msgid "Post"
1311
- msgstr "帖子"
1312
-
1313
- #. @context: Toast after creating post
1314
- #: src/ui/dash/posts/PostForm.tsx
1315
- #~ msgid "Post published successfully."
1316
- #~ msgstr "帖子发布成功。"
1038
+ msgstr "发布"
1317
1039
 
1318
- #. @context: Toast after creating post
1319
- #: src/ui/dash/posts/PostForm.tsx
1320
- msgid "Post published."
1040
+ #. @context: Compose dropdown option - publish post and mark it as featured
1041
+ #: src/ui/compose/ComposeDialog.tsx
1042
+ msgid "Post as Featured"
1321
1043
  msgstr ""
1322
1044
 
1323
- #. @context: Post title placeholder
1324
- #: src/ui/dash/posts/PostForm.tsx
1325
- msgid "Post title..."
1326
- msgstr "帖子标题..."
1327
-
1328
- #. @context: Toast after editing post
1329
- #: src/ui/dash/posts/PostForm.tsx
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."
1045
+ #. @context: Compose dropdown option - publish post visible only when logged in
1046
+ #: src/ui/compose/ComposeDialog.tsx
1047
+ msgid "Post as Private"
1336
1048
  msgstr ""
1337
1049
 
1338
- #. @context: Dashboard heading
1339
- #: src/routes/dash/posts.tsx
1340
- msgid "Posts"
1341
- msgstr "帖子"
1342
-
1343
- #. @context: Collection posts section heading
1344
- #: src/ui/dash/collections/ViewCollectionContent.tsx
1345
- #~ msgid "Posts in Collection ({count})"
1346
- #~ msgstr "集合中的帖子 ({count})"
1347
-
1348
- #. @context: Media detail section - preview
1349
- #: src/ui/dash/media/ViewMediaContent.tsx
1350
- msgid "Preview"
1351
- msgstr "预览"
1050
+ #. @context: Compose dropdown option - publish post with unlisted visibility, hidden from main feed
1051
+ #: src/ui/compose/ComposeDialog.tsx
1052
+ msgid "Post Unlisted"
1053
+ msgstr ""
1352
1054
 
1353
1055
  #. @context: Pagination button - previous page
1354
1056
  #. @context: Pagination button - previous page
@@ -1357,80 +1059,45 @@ msgstr "预览"
1357
1059
  msgid "Previous"
1358
1060
  msgstr "上一页"
1359
1061
 
1062
+ #. @context: Archive visibility filter - private posts
1063
+ #: src/ui/pages/ArchivePage.tsx
1064
+ msgid "Private"
1065
+ msgstr ""
1066
+
1360
1067
  #. @context: Avatar upload button text while generating favicon variants
1361
- #. @context: Upload status - processing
1362
- #: src/ui/dash/media/MediaListContent.tsx
1363
1068
  #: src/ui/dash/settings/AvatarContent.tsx
1364
1069
  msgid "Processing..."
1365
1070
  msgstr "处理中..."
1366
1071
 
1367
- #. @context: Account settings section heading
1368
- #: src/ui/dash/settings/AccountContent.tsx
1369
- msgid "Profile"
1370
- msgstr "个人资料"
1371
-
1372
- #. @context: Toast after saving user profile
1373
- #: src/routes/dash/settings.tsx
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"
1072
+ #. @context: Archive visibility filter - public posts
1073
+ #: src/ui/pages/ArchivePage.tsx
1074
+ msgid "Public"
1385
1075
  msgstr ""
1386
1076
 
1387
- #. @context: Button to publish new post
1388
- #: src/ui/dash/posts/PostForm.tsx
1077
+ #. @context: Confirm close action sheet - publish update button for editing published post
1078
+ #: src/ui/compose/ComposeDialog.tsx
1389
1079
  msgid "Publish"
1390
- msgstr "发布"
1080
+ msgstr ""
1391
1081
 
1392
- #. @context: Page status option - published
1393
1082
  #. @context: Post status badge - published
1394
- #. @context: Post status label
1395
- #. @context: Post status option
1396
- #: src/routes/dash/index.tsx
1397
- #: src/ui/dash/PageForm.tsx
1398
- #: src/ui/dash/posts/PostForm.tsx
1399
1083
  #: src/ui/dash/StatusBadge.tsx
1400
1084
  msgid "Published"
1401
1085
  msgstr "已发布"
1402
1086
 
1403
- #. @context: Page status helper text
1404
- #: src/ui/dash/PageForm.tsx
1405
- msgid "Published pages are accessible via their slug. Drafts are not visible."
1406
- msgstr "已发布的页面可以通过其别名访问。草稿不可见。"
1407
-
1408
1087
  #. @context: Toast shown after successful deferred publish
1409
1088
  #: src/ui/compose/ComposeDialog.tsx
1410
1089
  msgid "Published!"
1411
1090
  msgstr "已发布!"
1412
1091
 
1413
- #. @context: Dashboard section title
1414
- #: src/routes/dash/index.tsx
1415
- msgid "Quick Actions"
1416
- msgstr "快速操作"
1417
-
1418
1092
  #. @context: Compose format tab
1419
1093
  #. @context: Post format badge - quote
1420
1094
  #. @context: Post format label - quote
1421
- #. @context: Post format option
1422
1095
  #: src/ui/compose/ComposeDialog.tsx
1423
1096
  #: src/ui/dash/FormatBadge.tsx
1424
- #: src/ui/dash/posts/PostForm.tsx
1425
1097
  #: src/ui/pages/ArchivePage.tsx
1426
1098
  msgid "Quote"
1427
1099
  msgstr "引用"
1428
1100
 
1429
- #. @context: Post form field - quoted text
1430
- #: src/ui/dash/posts/PostForm.tsx
1431
- msgid "Quote Text"
1432
- msgstr "引用文本"
1433
-
1434
1101
  #. @context: Post format label plural - quotes
1435
1102
  #: src/ui/pages/ArchivePage.tsx
1436
1103
  msgid "Quotes"
@@ -1441,38 +1108,46 @@ msgstr "引用"
1441
1108
  msgid "Rate"
1442
1109
  msgstr "评分"
1443
1110
 
1444
- #. @context: Settings item redirects settings
1445
- #. @context: Settings section heading
1446
- #: src/routes/dash/redirects.tsx
1447
- #: src/ui/dash/settings/SettingsRootContent.tsx
1448
- msgid "Redirects"
1111
+ #. @context: Custom URL type option
1112
+ #: src/routes/dash/custom-urls.tsx
1113
+ msgid "Redirect"
1449
1114
  msgstr "重定向"
1450
1115
 
1116
+ #. @context: Redirect type field
1117
+ #: src/routes/dash/custom-urls.tsx
1118
+ msgid "Redirect Type"
1119
+ msgstr "重定向类型"
1120
+
1121
+ #. @context: Settings item description for custom URLs
1122
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1123
+ msgid "Redirects and custom paths"
1124
+ msgstr "重定向和自定义路径"
1125
+
1126
+ #. @context: Button to remove icon
1451
1127
  #. @context: Button to remove icon
1452
1128
  #. @context: Button to remove the blog avatar
1453
- #. @context: Remove media attachment button
1454
- #. @context: Remove page from navigation
1129
+ #. @context: Remove system item from navigation
1130
+ #: src/ui/compose/ComposeDialog.tsx
1455
1131
  #: src/ui/dash/appearance/NavigationContent.tsx
1456
- #: src/ui/dash/posts/PostForm.tsx
1457
1132
  #: src/ui/dash/settings/AvatarContent.tsx
1458
1133
  #: src/ui/shared/CollectionsSidebar.tsx
1459
1134
  msgid "Remove"
1460
1135
  msgstr "移除"
1461
1136
 
1462
- #. @context: Button to delete a divider
1463
- #: src/ui/dash/collections/CollectionsListContent.tsx
1464
- #~ msgid "Remove divider"
1465
- #~ msgstr "移除分隔符"
1466
-
1467
1137
  #. @context: Tooltip for divider delete button
1468
1138
  #: src/ui/shared/CollectionsSidebar.tsx
1469
1139
  msgid "Remove Divider"
1470
- msgstr ""
1140
+ msgstr "删除分隔线"
1471
1141
 
1472
1142
  #. @context: Menu action to reorder collections
1473
1143
  #: src/ui/shared/CollectionsSidebar.tsx
1474
1144
  msgid "Reorder"
1475
- msgstr ""
1145
+ msgstr "重新排序"
1146
+
1147
+ #. @context: Compose button - reply to post
1148
+ #: src/ui/compose/ComposeDialog.tsx
1149
+ msgid "Reply"
1150
+ msgstr "回复"
1476
1151
 
1477
1152
  #. @context: Password reset form submit button
1478
1153
  #. @context: Password reset page heading
@@ -1481,10 +1156,28 @@ msgstr ""
1481
1156
  msgid "Reset Password"
1482
1157
  msgstr "重置密码"
1483
1158
 
1159
+ #. @context: Button to revoke API token
1160
+ #. @context: Button to revoke a session
1161
+ #: src/ui/dash/settings/ApiTokensContent.tsx
1162
+ #: src/ui/dash/settings/SessionsContent.tsx
1163
+ msgid "Revoke"
1164
+ msgstr "撤销"
1165
+
1166
+ #. @context: Confirm dialog for revoking API token
1167
+ #: src/ui/dash/settings/ApiTokensContent.tsx
1168
+ msgid "Revoke this token? Any scripts using it will stop working."
1169
+ msgstr "撤销此令牌吗? 任何使用它的脚本将停止工作。"
1170
+
1171
+ #. @context: Button to save collection
1484
1172
  #. @context: Button to save collection
1485
1173
  #. @context: Button to save settings
1174
+ #. @context: Button to save settings changes
1175
+ #. @context: Confirm close action sheet - save draft button
1486
1176
  #. @context: Save nav item changes
1177
+ #: src/ui/compose/ComposeDialog.tsx
1178
+ #: src/ui/compose/ComposeDialog.tsx
1487
1179
  #: src/ui/dash/appearance/NavigationContent.tsx
1180
+ #: src/ui/dash/settings/AvatarContent.tsx
1488
1181
  #: src/ui/dash/settings/GeneralContent.tsx
1489
1182
  #: src/ui/shared/CollectionsSidebar.tsx
1490
1183
  msgid "Save"
@@ -1505,15 +1198,20 @@ msgstr "保存为草稿"
1505
1198
  msgid "Save CSS"
1506
1199
  msgstr "保存 CSS"
1507
1200
 
1508
- #. @context: Button to save profile
1509
- #: src/ui/dash/settings/AccountContent.tsx
1510
- msgid "Save Profile"
1511
- msgstr "保存个人资料"
1201
+ #. @context: Confirm close action sheet subtitle
1202
+ #: src/ui/compose/ComposeDialog.tsx
1203
+ msgid "Save to drafts to edit and post at a later time."
1204
+ msgstr "保存到草稿,以便稍后编辑并发布。"
1205
+
1206
+ #. @context: Confirm close action sheet title
1207
+ #: src/ui/compose/ComposeDialog.tsx
1208
+ msgid "Save to drafts?"
1209
+ msgstr "保存为草稿?"
1512
1210
 
1513
1211
  #. @context: Toast after saving a collection
1514
1212
  #: src/ui/shared/CollectionsSidebar.tsx
1515
1213
  msgid "Saved"
1516
- msgstr ""
1214
+ msgstr "已保存"
1517
1215
 
1518
1216
  #. @context: Search icon link in browse nav
1519
1217
  #. @context: Search page title
@@ -1525,20 +1223,19 @@ msgid "Search"
1525
1223
  msgstr "搜索"
1526
1224
 
1527
1225
  #. @context: Emoji picker search placeholder
1226
+ #. @context: Emoji picker search placeholder
1227
+ #: src/ui/compose/ComposeDialog.tsx
1528
1228
  #: src/ui/shared/CollectionsSidebar.tsx
1529
1229
  msgid "Search emojis..."
1530
- msgstr ""
1230
+ msgstr "搜索表情..."
1531
1231
 
1532
1232
  #. @context: Icon picker search placeholder
1233
+ #. @context: Icon picker search placeholder
1234
+ #: src/ui/compose/ComposeDialog.tsx
1533
1235
  #: src/ui/shared/CollectionsSidebar.tsx
1534
1236
  msgid "Search icons..."
1535
1237
  msgstr "搜索图标..."
1536
1238
 
1537
- #. @context: Placeholder for page search input in combobox
1538
- #: src/ui/dash/appearance/NavigationContent.tsx
1539
- msgid "Search pages…"
1540
- msgstr ""
1541
-
1542
1239
  #. @context: Search input placeholder
1543
1240
  #: src/ui/pages/SearchPage.tsx
1544
1241
  msgid "Search posts..."
@@ -1549,52 +1246,46 @@ msgstr "搜索帖子..."
1549
1246
  msgid "Search..."
1550
1247
  msgstr "搜索..."
1551
1248
 
1552
- #. @context: Media picker dialog title
1553
- #: src/ui/dash/posts/PostForm.tsx
1554
- msgid "Select Media"
1555
- msgstr "选择媒体"
1556
-
1557
1249
  #. @context: Settings section heading for SEO
1558
1250
  #: src/ui/dash/settings/GeneralContent.tsx
1559
1251
  msgid "SEO"
1560
- msgstr "搜索引擎优化"
1561
-
1562
- #. @context: Toast after saving SEO settings
1563
- #. @context: Toast after saving SEO settings
1564
- #: src/routes/dash/settings.tsx
1565
- #: src/routes/dash/settings.tsx
1566
- #~ msgid "SEO settings saved successfully."
1567
- #~ msgstr "SEO设置已成功保存。"
1252
+ msgstr "SEO"
1568
1253
 
1569
1254
  #. @context: Toast after saving SEO settings
1570
1255
  #. @context: Toast after saving SEO settings
1571
1256
  #: src/routes/dash/settings.tsx
1572
1257
  #: src/routes/dash/settings.tsx
1573
1258
  msgid "SEO settings updated."
1574
- msgstr ""
1259
+ msgstr "SEO 设置已更新."
1575
1260
 
1576
- #. @context: Dashboard navigation - site settings
1577
- #: src/ui/layouts/DashLayout.tsx
1578
- msgid "Settings"
1579
- msgstr "设置"
1261
+ #. @context: Settings item session management
1262
+ #: src/ui/dash/settings/AccountMenuContent.tsx
1263
+ msgid "Sessions"
1264
+ msgstr ""
1580
1265
 
1581
- #. @context: Toast after saving general settings
1582
- #: src/routes/dash/settings.tsx
1583
- #~ msgid "Settings saved successfully."
1584
- #~ msgstr "设置已成功保存。"
1266
+ #. @context: Settings item description for account
1267
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1268
+ msgid "Sessions, password, export"
1269
+ msgstr ""
1585
1270
 
1586
1271
  #. @context: Toast after saving general settings
1587
- #. @context: Toast after saving general settings
1588
- #: src/routes/dash/settings.tsx
1589
1272
  #: src/routes/dash/settings.tsx
1590
1273
  msgid "Settings updated."
1591
- msgstr ""
1274
+ msgstr "设置已更新。"
1592
1275
 
1593
- #. @context: Link to show remaining thread replies
1594
- #. placeholder {0}: remainingCount === 1 ? "reply" : "replies"
1276
+ #. @context: Button to collapse expanded thread context
1277
+ #. @context: Collapse reply context
1278
+ #: src/ui/compose/ComposeDialog.tsx
1595
1279
  #: src/ui/feed/ThreadPreview.tsx
1596
- msgid "Show {remainingCount} more {0}"
1597
- msgstr "显示 {remainingCount} 个更多 {0}"
1280
+ msgid "Show less"
1281
+ msgstr "收起"
1282
+
1283
+ #. @context: Button to expand faded thread context
1284
+ #. @context: Expand reply context
1285
+ #: src/ui/compose/ComposeDialog.tsx
1286
+ #: src/ui/feed/ThreadPreview.tsx
1287
+ msgid "Show more"
1288
+ msgstr "展开更多"
1598
1289
 
1599
1290
  #. @context: Sign in form submit button
1600
1291
  #. @context: Sign in page heading
@@ -1603,15 +1294,21 @@ msgstr "显示 {remainingCount} 个更多 {0}"
1603
1294
  msgid "Sign In"
1604
1295
  msgstr "登录"
1605
1296
 
1606
- #. @context: Dashboard menu item to sign out
1607
- #: src/ui/layouts/DashLayout.tsx
1297
+ #. @context: Settings link sign out action
1298
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1608
1299
  msgid "Sign Out"
1609
- msgstr "登出"
1300
+ msgstr "退出登录"
1301
+
1302
+ #. @context: Session creation date
1303
+ #. placeholder {0}: formatDate(session.createdAt)
1304
+ #: src/ui/dash/settings/SessionsContent.tsx
1305
+ msgid "Signed in {0}"
1306
+ msgstr ""
1610
1307
 
1611
1308
  #. @context: Settings group label for site settings
1612
1309
  #: src/ui/dash/settings/SettingsRootContent.tsx
1613
1310
  msgid "Site"
1614
- msgstr ""
1311
+ msgstr "站点"
1615
1312
 
1616
1313
  #. @context: Settings section heading for site footer
1617
1314
  #: src/ui/dash/settings/GeneralContent.tsx
@@ -1619,20 +1316,25 @@ msgid "Site Footer"
1619
1316
  msgstr "网站页脚"
1620
1317
 
1621
1318
  #. @context: Settings form field
1319
+ #. @context: Setup form field - site name
1320
+ #: src/routes/auth/setup.tsx
1622
1321
  #: src/ui/dash/settings/GeneralContent.tsx
1623
1322
  msgid "Site Name"
1624
- msgstr "网站名称"
1323
+ msgstr "站点名称"
1625
1324
 
1626
1325
  #. @context: Collection form field
1627
- #. @context: Page form field label - URL slug
1628
- #: src/ui/dash/PageForm.tsx
1326
+ #. @context: Collection form field
1327
+ #: src/ui/compose/ComposeDialog.tsx
1629
1328
  #: src/ui/shared/CollectionsSidebar.tsx
1630
1329
  msgid "Slug"
1631
- msgstr "缩略名"
1330
+ msgstr "URL 别名"
1331
+
1332
+ #. @context: Toast when uploads fail and post is auto-saved as draft
1333
+ #: src/ui/compose/ComposeDialog.tsx
1334
+ msgid "Some uploads failed. Saved as draft."
1335
+ msgstr "部分上传失败。已保存为草稿。"
1632
1336
 
1633
1337
  #. @context: Fallback validation error for compose form
1634
- #. @context: Fallback validation error for page form
1635
- #. @context: Fallback validation error for page form
1636
1338
  #. @context: Fallback validation error for password reset form
1637
1339
  #. @context: Fallback validation error for setup form
1638
1340
  #. @context: Fallback validation error for sign-in form
@@ -1640,12 +1342,12 @@ msgstr "缩略名"
1640
1342
  #: src/routes/auth/setup.tsx
1641
1343
  #: src/routes/auth/signin.tsx
1642
1344
  #: src/routes/compose.tsx
1643
- #: src/routes/dash/pages.tsx
1644
- #: src/routes/dash/pages.tsx
1645
1345
  msgid "Something doesn't look right. Check the form and try again."
1646
- msgstr ""
1346
+ msgstr "有些内容看起来不对。请检查表单并重试。"
1647
1347
 
1648
1348
  #. @context: Collection form field
1349
+ #. @context: Collection form field
1350
+ #: src/ui/compose/ComposeDialog.tsx
1649
1351
  #: src/ui/shared/CollectionsSidebar.tsx
1650
1352
  msgid "Sort Order"
1651
1353
  msgstr "排序顺序"
@@ -1653,29 +1355,12 @@ msgstr "排序顺序"
1653
1355
  #. @context: Compose quote source link placeholder
1654
1356
  #: src/ui/compose/ComposeDialog.tsx
1655
1357
  msgid "Source link (optional)"
1656
- msgstr "来源链接(可选)"
1657
-
1658
- #. @context: Page form field label - publish status
1659
- #. @context: Post form field
1660
- #: src/ui/dash/PageForm.tsx
1661
- #: src/ui/dash/posts/PostForm.tsx
1662
- msgid "Status"
1663
- msgstr "状态"
1664
-
1665
- #. @context: Error when file storage is not set up
1666
- #: src/routes/api/upload.ts
1667
- #~ msgid "Storage not configured"
1668
- #~ msgstr "存储未配置"
1669
-
1670
- #. @context: Error toast when file storage is not set up
1671
- #: src/routes/dash/settings.tsx
1672
- #~ msgid "Storage not configured."
1673
- #~ msgstr "存储未配置。"
1358
+ msgstr "来源链接 (可选)"
1674
1359
 
1675
1360
  #. @context: Attached text panel hint
1676
1361
  #: src/ui/compose/ComposeDialog.tsx
1677
1362
  msgid "Supplementary content attached to your post"
1678
- msgstr "附加在您帖子上的补充内容"
1363
+ msgstr "附加到您的帖子的补充内容"
1679
1364
 
1680
1365
  #. @context: Nav item type badge
1681
1366
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -1687,136 +1372,137 @@ msgstr "系统"
1687
1372
  msgid "System links"
1688
1373
  msgstr "系统链接"
1689
1374
 
1375
+ #. @context: Label on failed upload overlay button, tells user tapping retries the upload
1376
+ #: src/ui/compose/ComposeDialog.tsx
1377
+ msgid "Tap to retry"
1378
+ msgstr "点击重试"
1379
+
1380
+ #. @context: Custom URL target slug field
1381
+ #: src/routes/dash/custom-urls.tsx
1382
+ msgid "Target Slug"
1383
+ msgstr "目标别名"
1384
+
1385
+ #. @context: Archive media filter - posts without any media attachments
1386
+ #. @context: Archive media filter - posts without any media attachments
1387
+ #: src/ui/pages/ArchivePage.tsx
1388
+ #: src/ui/pages/ArchivePage.tsx
1389
+ msgid "Text"
1390
+ msgstr ""
1391
+
1392
+ #. @context: Archive media filter - text file attachments
1393
+ #. @context: Attached text panel title
1394
+ #: src/ui/compose/ComposeDialog.tsx
1395
+ #: src/ui/pages/ArchivePage.tsx
1396
+ msgid "Text attachment"
1397
+ msgstr "文本附件"
1398
+
1690
1399
  #. @context: Error toast when selected font theme is not valid
1691
1400
  #: src/routes/dash/settings.tsx
1692
1401
  msgid "That font theme isn't available. Pick another one."
1693
- msgstr ""
1402
+ msgstr "该字体主题不可用。请选择另一个。"
1694
1403
 
1695
1404
  #. @context: Error toast when selected theme is not valid
1696
1405
  #: src/routes/dash/settings.tsx
1697
1406
  msgid "That theme isn't available. Pick another one."
1698
- msgstr ""
1407
+ msgstr "该主题不可用。请选择另一个。"
1699
1408
 
1700
- #. @context: Redirect to path help text
1701
- #: src/routes/dash/redirects.tsx
1702
- msgid "The destination path or URL"
1703
- msgstr "目标路径或 URL"
1704
-
1705
- #. @context: Redirect from path help text
1706
- #: src/routes/dash/redirects.tsx
1707
- msgid "The path to redirect from"
1708
- msgstr "重定向的路径"
1409
+ #. @context: Custom URL path help text
1410
+ #: src/routes/dash/custom-urls.tsx
1411
+ msgid "The custom URL path (without leading slash)"
1412
+ msgstr "自定义 URL 路径(不含前导斜杠)"
1709
1413
 
1710
1414
  #. @context: Font theme preview sentence for body text
1711
1415
  #. @context: Font theme preview sentence for headings
1712
1416
  #: src/ui/dash/appearance/FontThemeContent.tsx
1713
1417
  #: src/ui/dash/appearance/FontThemeContent.tsx
1714
1418
  msgid "The quick brown fox jumps over the lazy dog."
1715
- msgstr "敏捷的棕色狐狸跳过懒狗。"
1419
+ msgstr "敏捷的棕色狐狸跳过了懒惰的狗。"
1716
1420
 
1717
1421
  #. @context: Description for max visible nav links, explains overflow behavior
1718
1422
  #: src/ui/dash/appearance/NavigationContent.tsx
1719
1423
  msgid "The rest will be tucked into a ··· menu"
1720
- msgstr ""
1424
+ msgstr "其余项目将被收进 ··· 菜单"
1721
1425
 
1722
- #. @context: Quote text placeholder
1723
- #: src/ui/dash/posts/PostForm.tsx
1724
- msgid "The text being quoted..."
1725
- msgstr "被引用的文本..."
1426
+ #. @context: Custom URL target slug help text
1427
+ #: src/routes/dash/custom-urls.tsx
1428
+ msgid "The slug of the target post or collection"
1429
+ msgstr "目标文章或集合的 slug"
1726
1430
 
1727
- #. @context: Page slug helper text
1728
- #: src/ui/dash/PageForm.tsx
1729
- msgid "The URL path for this page. Use lowercase letters, numbers, and hyphens."
1730
- msgstr "此页面的 URL 路径。使用小写字母、数字和连字符。"
1431
+ #. @context: Link to theming documentation on Custom CSS page
1432
+ #: src/ui/dash/appearance/AdvancedContent.tsx
1433
+ msgid "Theming guide"
1434
+ msgstr ""
1435
+
1436
+ #. @context: Description for session management
1437
+ #: src/ui/dash/settings/SessionsContent.tsx
1438
+ msgid "These devices are currently signed in to your account. Revoke any session you don't recognize."
1439
+ msgstr ""
1731
1440
 
1732
1441
  #. @context: Empty state message
1733
1442
  #: src/ui/pages/CollectionPage.tsx
1734
1443
  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 ""
1444
+ msgstr "该集合为空。从编辑器添加文章。"
1741
1445
 
1742
1446
  #. @context: Help text for avatar upload
1743
1447
  #: src/ui/dash/settings/AvatarContent.tsx
1744
1448
  msgid "This is used for your favicon and apple-touch-icon. For best results, upload a square image at least 180x180 pixels."
1745
- msgstr "这用于您的网站图标和苹果触控图标。为了获得最佳效果,请上传至少 180x180 像素的正方形图像。"
1449
+ msgstr "此图用于您的 favicon 和 apple-touch-icon。为获得最佳效果,请上传至少 180×180 像素的方形图像。"
1746
1450
 
1747
1451
  #. @context: Password reset error heading
1748
1452
  #: src/routes/auth/reset.tsx
1749
1453
  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 "此密码重置链接无效或已过期。请生成一个新的链接。"
1454
+ msgstr "此链接已过期"
1756
1455
 
1757
1456
  #. @context: Password reset error description
1758
1457
  #: src/routes/auth/reset.tsx
1759
1458
  msgid "This reset link is no longer valid. Request a new one to continue."
1760
- msgstr ""
1761
-
1762
- #. @context: Appearance settings description
1763
- #: src/ui/dash/appearance/ColorThemeContent.tsx
1764
- msgid "This will theme both your site and your dashboard. All color themes support dark mode."
1765
- msgstr "这将为您的网站和仪表板设置主题。所有颜色主题都支持暗黑模式。"
1766
-
1767
- #. @context: Thread view indicator - first post in thread
1768
- #: src/ui/shared/ThreadView.tsx
1769
- msgid "Thread start"
1770
- msgstr "线程开始"
1771
-
1772
- #. @context: Thread view header - multiple posts
1773
- #: src/ui/shared/ThreadView.tsx
1774
- msgid "Thread with {count} posts"
1775
- msgstr "包含 {count} 条帖子的话题"
1776
-
1777
- #. @context: Thread view header - single post
1778
- #: src/ui/shared/ThreadView.tsx
1779
- msgid "Thread with 1 post"
1780
- msgstr "包含 1 条帖子的话题"
1459
+ msgstr "该重置链接已失效。请求一个新的以继续。"
1781
1460
 
1782
1461
  #. @context: Settings form field
1783
1462
  #: src/ui/dash/settings/GeneralContent.tsx
1784
1463
  msgid "Time Zone"
1785
1464
  msgstr "时区"
1786
1465
 
1466
+ #. @context: Collection form field
1787
1467
  #. @context: Collection form field
1788
1468
  #. @context: Compose note title placeholder
1789
1469
  #. @context: Compose toolbar - title tooltip
1790
- #. @context: Page form field label - title
1791
1470
  #: src/ui/compose/ComposeDialog.tsx
1792
1471
  #: src/ui/compose/ComposeDialog.tsx
1793
- #: src/ui/dash/PageForm.tsx
1472
+ #: src/ui/compose/ComposeDialog.tsx
1794
1473
  #: src/ui/shared/CollectionsSidebar.tsx
1795
1474
  msgid "Title"
1796
1475
  msgstr "标题"
1797
1476
 
1798
- #. @context: Post form field
1799
- #: src/ui/dash/posts/PostForm.tsx
1800
- msgid "Title (optional)"
1801
- msgstr "标题(可选)"
1802
-
1803
- #. @context: Redirect form field
1804
- #: src/routes/dash/redirects.tsx
1805
- msgid "To Path"
1806
- msgstr "到路径"
1477
+ #. @context: Archive filter - notes that have a title
1478
+ #. @context: Archive filter - notes that have a title
1479
+ #: src/ui/pages/ArchivePage.tsx
1480
+ #: src/ui/pages/ArchivePage.tsx
1481
+ msgid "Titled"
1482
+ msgstr "有标题"
1807
1483
 
1808
1484
  #. @context: Description for system nav toggles
1809
1485
  #: src/ui/dash/appearance/NavigationContent.tsx
1810
- msgid "Toggle built-in navigation items. Enabled items appear in your navigation alongside pages and links."
1811
- msgstr "切换内置导航项。启用的项会与页面和链接一起出现在您的导航中。"
1486
+ msgid "Toggle built-in navigation items. Enabled items appear in your navigation alongside links."
1487
+ msgstr "切换内置导航项。启用的项会与链接一起显示在您的导航中。"
1812
1488
 
1813
1489
  #. @context: Button to expand/collapse nav item edit
1814
1490
  #: src/ui/dash/appearance/NavigationContent.tsx
1815
1491
  msgid "Toggle edit panel"
1816
- msgstr "切换编辑面板"
1492
+ msgstr "展开/收起编辑面板"
1493
+
1494
+ #. @context: API token name field label
1495
+ #: src/ui/dash/settings/ApiTokensContent.tsx
1496
+ msgid "Token name"
1497
+ msgstr "令牌名称"
1498
+
1499
+ #. @context: API tokens description
1500
+ #: src/ui/dash/settings/ApiTokensContent.tsx
1501
+ msgid "Tokens let you access the API from scripts, shortcuts, and other tools without signing in."
1502
+ msgstr "令牌可让您在不登录的情况下从脚本、快捷方式和其他工具访问 API。"
1817
1503
 
1818
- #. @context: Redirect form field
1819
- #: src/routes/dash/redirects.tsx
1504
+ #. @context: Custom URL form field
1505
+ #: src/routes/dash/custom-urls.tsx
1820
1506
  msgid "Type"
1821
1507
  msgstr "类型"
1822
1508
 
@@ -1828,42 +1514,27 @@ msgstr "输入引用..."
1828
1514
  #. @context: Settings item description for font theme
1829
1515
  #: src/ui/dash/settings/SettingsRootContent.tsx
1830
1516
  msgid "Typography"
1517
+ msgstr "排版"
1518
+
1519
+ #. @context: Fallback label when session device can't be identified
1520
+ #: src/ui/dash/settings/SessionsContent.tsx
1521
+ msgid "Unknown device"
1831
1522
  msgstr ""
1832
1523
 
1524
+ #. @context: Archive visibility filter - unlisted posts
1833
1525
  #. @context: Post badge - unlisted
1834
- #. @context: Visibility option - hidden from feeds
1835
- #: src/ui/dash/posts/PostForm.tsx
1836
1526
  #: src/ui/dash/StatusBadge.tsx
1527
+ #: src/ui/pages/ArchivePage.tsx
1837
1528
  msgid "Unlisted"
1838
- msgstr ""
1529
+ msgstr "未列出"
1839
1530
 
1840
- #. @context: Default title for untitled page
1841
- #. @context: Default title for untitled post
1842
- #: src/ui/dash/pages/PagesContent.tsx
1843
- #: src/ui/dash/PostList.tsx
1531
+ #. @context: Archive filter - notes without a title
1532
+ #. @context: Archive filter - notes without a title
1533
+ #: src/ui/pages/ArchivePage.tsx
1534
+ #: src/ui/pages/ArchivePage.tsx
1844
1535
  msgid "Untitled"
1845
1536
  msgstr "无标题"
1846
1537
 
1847
- #. @context: Button to update existing post
1848
- #: src/ui/dash/posts/PostForm.tsx
1849
- msgid "Update"
1850
- msgstr "更新"
1851
-
1852
- #. @context: Button to save collection changes
1853
- #: src/ui/dash/collections/CollectionForm.tsx
1854
- #~ msgid "Update Collection"
1855
- #~ msgstr "更新收藏夹"
1856
-
1857
- #. @context: Button to update existing page
1858
- #: src/ui/dash/PageForm.tsx
1859
- msgid "Update Page"
1860
- msgstr "更新页面"
1861
-
1862
- #. @context: Button to upload media file
1863
- #: src/ui/dash/media/MediaListContent.tsx
1864
- msgid "Upload"
1865
- msgstr "上传"
1866
-
1867
1538
  #. @context: Button to upload avatar image
1868
1539
  #: src/ui/dash/settings/AvatarContent.tsx
1869
1540
  msgid "Upload Avatar"
@@ -1871,149 +1542,95 @@ msgstr "上传头像"
1871
1542
 
1872
1543
  #. @context: Error toast when avatar upload fails
1873
1544
  #. @context: Error when file upload fails
1874
- #. @context: Upload error message
1875
1545
  #: src/routes/api/upload.ts
1876
1546
  #: src/routes/dash/settings.tsx
1877
- #: src/ui/dash/media/MediaListContent.tsx
1878
1547
  msgid "Upload didn't go through. Try again in a moment."
1879
- msgstr ""
1548
+ msgstr "上传失败。请稍后再试。"
1880
1549
 
1881
1550
  #. @context: Error message when avatar upload fails
1882
1551
  #: src/ui/dash/settings/AvatarContent.tsx
1883
1552
  msgid "Upload failed. Please try again."
1884
- msgstr "上传失败。请再试一次。"
1885
-
1886
- #. @context: Toast after successful file upload
1887
- #: src/routes/api/upload.ts
1888
- #~ msgid "Upload successful!"
1889
- #~ msgstr "上传成功!"
1553
+ msgstr "上传失败。请重试。"
1890
1554
 
1891
1555
  #. @context: Avatar upload button text while uploading
1892
1556
  #. @context: Toast shown during background upload
1893
- #. @context: Upload status - uploading
1894
1557
  #: src/ui/compose/ComposeDialog.tsx
1895
- #: src/ui/dash/media/MediaListContent.tsx
1896
1558
  #: src/ui/dash/settings/AvatarContent.tsx
1897
1559
  msgid "Uploading..."
1898
1560
  msgstr "上传中..."
1899
1561
 
1900
- #. @context: Media detail section - URL
1901
1562
  #. @context: Nav item URL field
1902
1563
  #: src/ui/dash/appearance/NavigationContent.tsx
1903
- #: src/ui/dash/media/ViewMediaContent.tsx
1904
1564
  msgid "URL"
1905
- msgstr "网址"
1906
-
1907
- #. @context: Post form field - source URL
1908
- #: src/ui/dash/posts/PostForm.tsx
1909
- msgid "URL (optional)"
1910
- msgstr "网址(可选)"
1911
-
1912
- #. @context: Settings item description for redirects
1913
- #: src/ui/dash/settings/SettingsRootContent.tsx
1914
- msgid "URL redirects"
1915
- msgstr ""
1565
+ msgstr "URL"
1916
1566
 
1917
1567
  #. @context: Collection path help text
1568
+ #. @context: Collection path help text
1569
+ #: src/ui/compose/ComposeDialog.tsx
1918
1570
  #: src/ui/shared/CollectionsSidebar.tsx
1919
1571
  msgid "URL-safe identifier (lowercase, numbers, hyphens). For CJK titles, slug will be auto-generated on the server."
1920
- msgstr "URL安全标识符(小写字母、数字、连字符)。对于CJK标题,slug将在服务器上自动生成。"
1572
+ msgstr "URL 安全的标识(小写、数字、连字符)。对于 CJK 标题,slug 将在服务器端自动生成。"
1921
1573
 
1922
- #. @context: Switch label for setting featured posts as default homepage
1923
- #: src/ui/dash/appearance/NavigationContent.tsx
1924
- #~ msgid "Use Featured as default home view"
1925
- #~ msgstr ""
1574
+ #. @context: Heading for API token usage examples
1575
+ #: src/ui/dash/settings/ApiTokensContent.tsx
1576
+ msgid "Usage"
1577
+ msgstr "用法"
1926
1578
 
1927
- #. @context: Media URL helper text
1928
- #: src/ui/dash/media/ViewMediaContent.tsx
1929
- msgid "Use this URL to embed the media in your posts."
1930
- msgstr "使用此 URL 将媒体嵌入到您的帖子中。"
1579
+ #. @context: Archive media filter - video
1580
+ #: src/ui/pages/ArchivePage.tsx
1581
+ msgid "Video"
1582
+ msgstr "视频"
1931
1583
 
1932
1584
  #. @context: Button to view item on public site
1933
- #. @context: Button to view page on public site
1934
- #. @context: Button to view page on public site
1935
- #. @context: Button to view post
1936
- #. @context: Button to view post on public site
1937
- #: src/routes/dash/pages.tsx
1938
- #: src/routes/dash/posts.tsx
1585
+ #. @context: Toast action button to view the published post
1586
+ #: src/ui/compose/ComposeDialog.tsx
1939
1587
  #: src/ui/dash/ActionButtons.tsx
1940
- #: src/ui/dash/pages/PagesContent.tsx
1941
- #: src/ui/dash/PostList.tsx
1942
1588
  msgid "View"
1943
1589
  msgstr "查看"
1944
1590
 
1945
- #. @context: Dashboard header link to view the public site
1946
- #: src/ui/layouts/DashLayout.tsx
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"
1591
+ #. @context: Prefix before Custom CSS link on color theme page
1592
+ #: src/ui/dash/appearance/ColorThemeContent.tsx
1593
+ msgid "Want more control?"
1962
1594
  msgstr ""
1963
1595
 
1964
- #. @context: Dashboard menu item to visit the public site
1965
- #: src/ui/layouts/DashLayout.tsx
1966
- #~ msgid "Visit Site"
1967
- #~ msgstr ""
1968
-
1969
1596
  #. @context: Setup page welcome heading
1970
1597
  #: src/routes/auth/setup.tsx
1971
1598
  msgid "Welcome to Jant"
1972
- msgstr "欢迎来到Jant"
1599
+ msgstr "欢迎使用 Jant"
1973
1600
 
1974
1601
  #. @context: Compose prompt placeholder text
1975
- #. @context: Post content placeholder
1976
1602
  #: src/ui/compose/ComposePrompt.tsx
1977
- #: src/ui/dash/posts/PostForm.tsx
1978
1603
  msgid "What's on your mind?"
1979
- msgstr "你在想什么?"
1604
+ msgstr "在想什么?"
1980
1605
 
1981
1606
  #. @context: Compose body placeholder
1982
1607
  #: src/ui/compose/ComposeDialog.tsx
1983
1608
  msgid "What's on your mind..."
1984
- msgstr "你在想什么..."
1609
+ msgstr "在想些什么..."
1985
1610
 
1986
1611
  #. @context: Collection description placeholder
1612
+ #. @context: Collection description placeholder
1613
+ #: src/ui/compose/ComposeDialog.tsx
1987
1614
  #: src/ui/shared/CollectionsSidebar.tsx
1988
1615
  msgid "What's this collection about?"
1989
- msgstr "这个系列是关于什么的?"
1616
+ msgstr "这个集合是关于什么?"
1990
1617
 
1991
1618
  #. @context: Description for featured default toggle, explains what happens when off
1992
1619
  #: src/ui/dash/appearance/NavigationContent.tsx
1993
1620
  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 ""
1621
+ msgstr "关闭时,访客会先看到你的最新文章"
2000
1622
 
2001
1623
  #. @context: Error toast when sign-in credentials are wrong
2002
1624
  #: src/routes/auth/signin.tsx
2003
1625
  msgid "Wrong email or password. Check your credentials and try again."
2004
- msgstr ""
1626
+ msgstr "邮箱或密码错误。请检查您的凭证并重试。"
2005
1627
 
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."
1628
+ #. @context: Confirm close action sheet title when editing a published post
1629
+ #: src/ui/compose/ComposeDialog.tsx
1630
+ msgid "You have unsaved changes"
2009
1631
  msgstr ""
2010
1632
 
2011
- #. @context: Setup form field - user name
2012
- #: src/routes/auth/setup.tsx
2013
- msgid "Your Name"
2014
- msgstr "您的姓名"
2015
-
2016
1633
  #. @context: Compose thoughts placeholder
2017
1634
  #: src/ui/compose/ComposeDialog.tsx
2018
1635
  msgid "Your thoughts (optional)"
2019
- msgstr "您的想法(可选)"
1636
+ msgstr "你的想法 (可选)"