@jant/core 0.6.16 → 0.7.0

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 (508) hide show
  1. package/README.md +11 -11
  2. package/bin/commands/assets/upload.js +192 -15
  3. package/bin/commands/import-site.js +60 -4
  4. package/bin/commands/reset-password.js +21 -8
  5. package/bin/commands/site/snapshot/export.js +1 -1
  6. package/bin/commands/site/snapshot/import.js +1 -1
  7. package/bin/lib/d1-query.js +5 -16
  8. package/bin/lib/node-env.js +40 -4
  9. package/bin/lib/site-selection.js +85 -29
  10. package/bin/lib/wrangler-cli.js +28 -2
  11. package/bin/lib/wrangler-json.js +35 -0
  12. package/dist/{app-C7_4oab9.js → app-K_Aa1MMn.js} +52476 -13330
  13. package/dist/client/.vite/manifest.json +255 -90
  14. package/dist/client/_assets/chunks/confirm-D7GrwsCN.js +45 -0
  15. package/dist/client/_assets/chunks/create-editor-CD3FhrOB.js +257 -0
  16. package/dist/client/_assets/chunks/{native-DpcrFAPh.js → emoji-mart-C4RpRKcU.js} +716 -1
  17. package/dist/client/_assets/chunks/footnote-rail-CmeoVtnU.js +1 -0
  18. package/dist/client/_assets/chunks/heic-to-CuP2Qlsw.js +1 -0
  19. package/dist/client/_assets/chunks/jant-locale-picker-DL6mIOT5.js +69 -0
  20. package/dist/client/_assets/chunks/lit-DW8VmJAT.js +2 -0
  21. package/dist/client/_assets/chunks/mediabunny-DRaCQ1r-.js +31 -0
  22. package/dist/client/_assets/chunks/rolldown-runtime-hePW80VL.js +1 -0
  23. package/dist/client/_assets/chunks/settings-paths-BcdySNx6.js +84 -0
  24. package/dist/client/_assets/chunks/site-header-nav-DzXsFk05.js +1 -0
  25. package/dist/client/_assets/chunks/slug-format-CRXO1AL5.js +1 -0
  26. package/dist/client/_assets/chunks/slugify-373citbs.js +1 -0
  27. package/dist/client/_assets/chunks/sortable-list-CgaL2jCs.js +2 -0
  28. package/dist/client/_assets/chunks/types-D5iF3H1a.js +1 -0
  29. package/dist/client/_assets/chunks/unsafe-html-B5ZEXaxg.js +1 -0
  30. package/dist/client/_assets/chunks/unsafe-svg-0QCkP0vZ.js +2 -0
  31. package/dist/client/_assets/client-GiYENVw8.css +2 -0
  32. package/dist/client/_assets/client-VnFxJN7G.js +295 -0
  33. package/dist/client/_assets/client-auth-k8gJ6QJj.js +828 -0
  34. package/dist/client/_assets/client-author-DQ8R-8KR.css +2 -0
  35. package/dist/client/_assets/client-compose-B_kDtWkW.js +2004 -0
  36. package/dist/client/_assets/client-manage-M90aSTOk.js +2170 -0
  37. package/dist/client/_assets/client-settings-DfYs9n1F.js +1112 -0
  38. package/dist/{export-Dl5KCiEs.js → github-sync-BPAvT999.js} +2254 -107
  39. package/dist/index.js +2 -5
  40. package/dist/node.js +5 -7
  41. package/package.json +3 -3
  42. package/src/__tests__/auth-session-freshness.test.ts +57 -0
  43. package/src/__tests__/basecoat-variants.test.ts +121 -0
  44. package/src/__tests__/bin/assets-upload.test.ts +68 -0
  45. package/src/__tests__/export-hugo-build.test.ts +260 -0
  46. package/src/__tests__/export-service.test.ts +231 -0
  47. package/src/__tests__/helpers/component-css.ts +91 -0
  48. package/src/__tests__/helpers/db.ts +33 -0
  49. package/src/__tests__/helpers/export-fixtures.ts +3 -0
  50. package/src/__tests__/stylesheet-audience.test.ts +159 -0
  51. package/src/__tests__/stylesheet-breakpoints.test.ts +183 -0
  52. package/src/app.tsx +71 -16
  53. package/src/auth.ts +18 -1
  54. package/src/client/__tests__/collection-page-actions.test.ts +51 -2
  55. package/src/client/__tests__/compose-bridge-image-upload.test.ts +196 -0
  56. package/src/client/__tests__/compose-bridge-video-poster.test.ts +159 -0
  57. package/src/client/__tests__/compose-bridge.test.ts +272 -0
  58. package/src/client/__tests__/compose-launch.test.ts +62 -1
  59. package/src/client/__tests__/compose-shortcuts.test.ts +38 -9
  60. package/src/client/__tests__/compose-triggers.test.ts +90 -0
  61. package/src/client/__tests__/copy-field.test.ts +162 -0
  62. package/src/client/__tests__/custom-url-menu.test.ts +127 -6
  63. package/src/client/__tests__/image-processor.test.ts +324 -2
  64. package/src/client/__tests__/lazy-entries.test.ts +92 -0
  65. package/src/client/__tests__/media-scroll-hint.test.ts +155 -0
  66. package/src/client/__tests__/runtime-paths.test.ts +84 -0
  67. package/src/client/__tests__/smart-collection-page-actions.test.ts +158 -0
  68. package/src/client/__tests__/toast.test.ts +23 -0
  69. package/src/client/__tests__/video-processor-probe.test.ts +175 -0
  70. package/src/client/__tests__/video-processor.test.ts +181 -0
  71. package/src/client/audio-processor.ts +24 -15
  72. package/src/client/audio-waveform.ts +49 -0
  73. package/src/client/collection-dialog-host.ts +72 -0
  74. package/src/client/collection-navigation.ts +51 -16
  75. package/src/client/collection-page-actions.ts +26 -0
  76. package/src/client/components/__tests__/jant-collection-dialog.test.ts +329 -0
  77. package/src/client/components/__tests__/jant-collection-directory.test.ts +274 -10
  78. package/src/client/components/__tests__/jant-collection-form.test.ts +59 -178
  79. package/src/client/components/__tests__/jant-command-palette.test.ts +28 -0
  80. package/src/client/components/__tests__/jant-compose-dialog-draft-storage.test.ts +340 -0
  81. package/src/client/components/__tests__/jant-compose-dialog.test.ts +1250 -53
  82. package/src/client/components/__tests__/jant-compose-editor.test.ts +544 -40
  83. package/src/client/components/__tests__/jant-compose-fullscreen.test.ts +0 -1
  84. package/src/client/components/__tests__/jant-locale-picker.test.ts +207 -0
  85. package/src/client/components/__tests__/jant-nav-manager.test.ts +234 -15
  86. package/src/client/components/__tests__/jant-post-menu.test.ts +413 -2
  87. package/src/client/components/__tests__/jant-post-picker.test.ts +197 -0
  88. package/src/client/components/__tests__/jant-settings-avatar.test.ts +15 -12
  89. package/src/client/components/__tests__/jant-settings-general.test.ts +541 -172
  90. package/src/client/components/__tests__/jant-settings-language.test.ts +851 -0
  91. package/src/client/components/__tests__/jant-smart-collection-dialog.test.ts +665 -0
  92. package/src/client/components/collection-dialog-types.ts +49 -0
  93. package/src/client/components/collection-manager-types.ts +32 -1
  94. package/src/client/components/collection-types.ts +1 -15
  95. package/src/client/components/compose-types.ts +75 -1
  96. package/src/client/components/jant-collection-dialog.ts +722 -0
  97. package/src/client/components/jant-collection-directory.ts +567 -182
  98. package/src/client/components/jant-collection-form.ts +53 -232
  99. package/src/client/components/jant-command-palette.ts +100 -49
  100. package/src/client/components/jant-compose-dialog.ts +1486 -707
  101. package/src/client/components/jant-compose-editor.ts +673 -336
  102. package/src/client/components/jant-compose-fullscreen.ts +51 -43
  103. package/src/client/components/jant-config-editor.ts +65 -53
  104. package/src/client/components/jant-confirm-dialog.ts +13 -11
  105. package/src/client/components/jant-locale-picker.ts +418 -0
  106. package/src/client/components/jant-media-lightbox.ts +146 -136
  107. package/src/client/components/jant-nav-manager.ts +690 -366
  108. package/src/client/components/jant-post-menu.ts +1086 -282
  109. package/src/client/components/jant-post-picker.ts +324 -0
  110. package/src/client/components/jant-repo-picker.ts +138 -106
  111. package/src/client/components/jant-settings-avatar.ts +31 -27
  112. package/src/client/components/jant-settings-general.ts +617 -543
  113. package/src/client/components/jant-settings-language.ts +1087 -0
  114. package/src/client/components/jant-smart-collection-dialog.ts +1021 -0
  115. package/src/client/components/jant-text-preview.ts +94 -86
  116. package/src/client/components/nav-manager-types.ts +62 -1
  117. package/src/client/components/settings-types.ts +14 -29
  118. package/src/client/components/smart-collection-conditions.ts +285 -0
  119. package/src/client/components/smart-collection-dialog-types.ts +68 -0
  120. package/src/client/compose-bridge.ts +214 -141
  121. package/src/client/compose-launch.ts +76 -2
  122. package/src/client/compose-shortcuts.ts +6 -8
  123. package/src/client/compose-triggers.ts +50 -0
  124. package/src/client/copy-field.ts +108 -0
  125. package/src/client/custom-url-menu.ts +60 -4
  126. package/src/client/icons.ts +14 -0
  127. package/src/client/image-plan.ts +165 -0
  128. package/src/client/image-processor.ts +195 -117
  129. package/src/client/image-worker-client.ts +45 -0
  130. package/src/client/image-worker.ts +135 -0
  131. package/src/client/lazy-entries.ts +95 -0
  132. package/src/client/lazy-slugify.ts +2 -2
  133. package/src/client/media-scroll-hint.ts +43 -2
  134. package/src/client/mediabunny.ts +29 -0
  135. package/src/client/post-picker.ts +41 -0
  136. package/src/client/runtime-paths.ts +74 -1
  137. package/src/client/settings-bridge.ts +4 -10
  138. package/src/client/site-header-nav.js +18 -6
  139. package/src/client/smart-collection-dialog-host.ts +116 -0
  140. package/src/client/smart-collection-page-actions.ts +208 -0
  141. package/src/client/tiptap/__tests__/bubble-menu.test.ts +110 -0
  142. package/src/client/tiptap/__tests__/floating-position.test.ts +136 -1
  143. package/src/client/tiptap/__tests__/inline-image-upload.test.ts +37 -0
  144. package/src/client/tiptap/bubble-menu.ts +47 -16
  145. package/src/client/tiptap/floating-position.ts +216 -2
  146. package/src/client/tiptap/inline-image-upload.ts +7 -3
  147. package/src/client/tiptap/link-toolbar.ts +22 -9
  148. package/src/client/toast.ts +13 -0
  149. package/src/client/types/vite-worker.d.ts +12 -0
  150. package/src/client/upload-with-metadata.ts +3 -13
  151. package/src/client/video-processor.ts +351 -107
  152. package/src/client-auth.ts +14 -31
  153. package/src/client-compose.ts +19 -0
  154. package/src/client-manage.ts +13 -0
  155. package/src/client-settings.ts +14 -0
  156. package/src/client-site.ts +10 -3
  157. package/src/client.ts +4 -0
  158. package/src/db/__tests__/backfill-nav-label-mirrors.test.ts +149 -0
  159. package/src/db/__tests__/schema-enum-sources.test.ts +33 -0
  160. package/src/db/__tests__/smart-collection-placement.test.ts +402 -0
  161. package/src/db/backfills/0006_clear_mirrored_page_nav_labels.sql +31 -0
  162. package/src/db/migrations/0032_married_tomas.sql +3 -0
  163. package/src/db/migrations/0033_busy_johnny_storm.sql +198 -0
  164. package/src/db/migrations/0034_cheerful_rumiko_fujikawa.sql +35 -0
  165. package/src/db/migrations/meta/0032_snapshot.json +2582 -0
  166. package/src/db/migrations/meta/0033_snapshot.json +2816 -0
  167. package/src/db/migrations/meta/0034_snapshot.json +2816 -0
  168. package/src/db/migrations/meta/_journal.json +21 -0
  169. package/src/db/migrations/pg/0030_abandoned_nighthawk.sql +3 -0
  170. package/src/db/migrations/pg/0031_strong_ultimatum.sql +128 -0
  171. package/src/db/migrations/pg/0032_furry_multiple_man.sql +6 -0
  172. package/src/db/migrations/pg/meta/0030_snapshot.json +3329 -0
  173. package/src/db/migrations/pg/meta/0031_snapshot.json +3660 -0
  174. package/src/db/migrations/pg/meta/0032_snapshot.json +3660 -0
  175. package/src/db/migrations/pg/meta/_journal.json +21 -0
  176. package/src/db/pg/schema.ts +195 -27
  177. package/src/db/post-visibility.ts +117 -0
  178. package/src/db/schema.ts +222 -27
  179. package/src/i18n/__tests__/detect.test.ts +26 -81
  180. package/src/i18n/__tests__/supported-locales.test.ts +83 -0
  181. package/src/i18n/context.tsx +12 -2
  182. package/src/i18n/detect.ts +7 -66
  183. package/src/i18n/locales/glossary.zh-Hans.yml +44 -4
  184. package/src/i18n/locales/glossary.zh-Hant.yml +44 -4
  185. package/src/i18n/locales/public/en.po +490 -158
  186. package/src/i18n/locales/public/en.ts +1 -1
  187. package/src/i18n/locales/public/zh-Hans.po +487 -155
  188. package/src/i18n/locales/public/zh-Hans.ts +1 -1
  189. package/src/i18n/locales/public/zh-Hant.po +487 -155
  190. package/src/i18n/locales/public/zh-Hant.ts +1 -1
  191. package/src/i18n/locales/settings/en.po +551 -69
  192. package/src/i18n/locales/settings/en.ts +1 -1
  193. package/src/i18n/locales/settings/zh-Hans.po +597 -115
  194. package/src/i18n/locales/settings/zh-Hans.ts +1 -1
  195. package/src/i18n/locales/settings/zh-Hant.po +610 -128
  196. package/src/i18n/locales/settings/zh-Hant.ts +1 -1
  197. package/src/i18n/locales.ts +94 -0
  198. package/src/i18n/middleware.ts +12 -2
  199. package/src/i18n/supported-locales.ts +80 -0
  200. package/src/lib/__tests__/api-settings.test.ts +11 -2
  201. package/src/lib/__tests__/asset-path.test.ts +92 -0
  202. package/src/lib/__tests__/deferred.test.ts +90 -0
  203. package/src/lib/__tests__/discover-ping.test.ts +89 -0
  204. package/src/lib/__tests__/discover.test.ts +410 -0
  205. package/src/lib/__tests__/feed-policy.test.ts +26 -0
  206. package/src/lib/__tests__/feed.test.ts +1526 -15
  207. package/src/lib/__tests__/filter-dimensions.test.ts +341 -0
  208. package/src/lib/__tests__/hosted-signin.test.ts +1 -1
  209. package/src/lib/__tests__/http-cache.test.ts +162 -0
  210. package/src/lib/__tests__/jant-docs-dev.test.ts +21 -0
  211. package/src/lib/__tests__/jant-docs.test.ts +23 -0
  212. package/src/lib/__tests__/lang-detect.test.ts +231 -0
  213. package/src/lib/__tests__/media-helpers.test.ts +81 -0
  214. package/src/lib/__tests__/navigation.test.ts +135 -1
  215. package/src/lib/__tests__/resolve-config.test.ts +64 -3
  216. package/src/lib/__tests__/schemas.test.ts +42 -4
  217. package/src/lib/__tests__/site-unavailable-page.test.ts +25 -0
  218. package/src/lib/__tests__/slug.test.ts +70 -0
  219. package/src/lib/__tests__/slugify.test.ts +85 -0
  220. package/src/lib/__tests__/storage.test.ts +32 -0
  221. package/src/lib/__tests__/thread-fold.test.ts +113 -0
  222. package/src/lib/__tests__/upload-sideload.test.ts +14 -0
  223. package/src/lib/__tests__/url-fetch.test.ts +1 -2
  224. package/src/lib/__tests__/url.test.ts +78 -72
  225. package/src/lib/__tests__/view-language.test.ts +413 -0
  226. package/src/lib/__tests__/worker-response-cache.test.ts +90 -0
  227. package/src/lib/address.ts +57 -0
  228. package/src/lib/api-posts.ts +12 -0
  229. package/src/lib/asset-path.ts +98 -1
  230. package/src/lib/build-env.ts +16 -0
  231. package/src/lib/collection-groups.ts +5 -1
  232. package/src/lib/collection-paths.ts +3 -10
  233. package/src/lib/constants.ts +28 -3
  234. package/src/lib/copy-field.ts +36 -0
  235. package/src/lib/crypto.ts +40 -0
  236. package/src/lib/csp-builder.ts +2 -1
  237. package/src/lib/deferred.ts +79 -0
  238. package/src/lib/discover-ping.ts +141 -0
  239. package/src/lib/discover.ts +437 -0
  240. package/src/lib/env.ts +134 -0
  241. package/src/lib/errors.ts +33 -0
  242. package/src/lib/feed-policy.ts +236 -2
  243. package/src/lib/feed.ts +926 -73
  244. package/src/lib/filter-dimensions.ts +1349 -0
  245. package/src/lib/github-sync-site-config.ts +3 -0
  246. package/src/lib/hosted-signin.ts +1 -1
  247. package/src/lib/http-cache.ts +148 -0
  248. package/src/lib/hugo-markdown.ts +16 -0
  249. package/src/lib/icons.ts +9 -2
  250. package/src/lib/ids.ts +3 -0
  251. package/src/lib/jant-docs.ts +42 -0
  252. package/src/lib/lang-detect.ts +308 -0
  253. package/src/lib/media-helpers.ts +13 -1
  254. package/src/lib/navigation.ts +78 -11
  255. package/src/lib/pagination.ts +28 -24
  256. package/src/lib/per-language-surfaces.ts +67 -0
  257. package/src/lib/post-meta.ts +19 -0
  258. package/src/lib/render.tsx +55 -7
  259. package/src/lib/resolve-config.ts +53 -5
  260. package/src/lib/schemas.ts +201 -10
  261. package/src/lib/site-header-fragment.tsx +2 -1
  262. package/src/lib/site-unavailable-page.ts +47 -0
  263. package/src/lib/slug.ts +51 -7
  264. package/src/lib/slugify.ts +113 -0
  265. package/src/lib/startup-config.ts +4 -6
  266. package/src/lib/storage.ts +7 -0
  267. package/src/lib/summary.ts +50 -0
  268. package/src/lib/thread-fold.ts +161 -0
  269. package/src/lib/time.ts +32 -0
  270. package/src/lib/timeline.ts +42 -1
  271. package/src/lib/tiptap-render.ts +1 -2
  272. package/src/lib/upload.ts +16 -13
  273. package/src/lib/url.ts +139 -86
  274. package/src/lib/version.ts +10 -8
  275. package/src/lib/view-language.ts +436 -0
  276. package/src/lib/view.ts +51 -23
  277. package/src/lib/viewer-context.ts +62 -0
  278. package/src/middleware/__tests__/auth.test.ts +70 -2
  279. package/src/middleware/__tests__/cache-control.test.ts +71 -3
  280. package/src/middleware/__tests__/onboarding.test.ts +76 -5
  281. package/src/middleware/__tests__/secure-headers.test.ts +1 -1
  282. package/src/middleware/__tests__/session.test.ts +181 -33
  283. package/src/middleware/auth.ts +50 -31
  284. package/src/middleware/cache-control.ts +75 -10
  285. package/src/middleware/config.ts +6 -6
  286. package/src/middleware/error-handler.ts +12 -0
  287. package/src/middleware/onboarding.ts +32 -10
  288. package/src/middleware/secure-headers.ts +1 -1
  289. package/src/middleware/session.ts +96 -8
  290. package/src/node/__tests__/cli-migrate.test.ts +21 -19
  291. package/src/node/__tests__/cli-reset-password.test.ts +81 -8
  292. package/src/node/__tests__/cli-runtime-target.test.ts +48 -1
  293. package/src/node/__tests__/cli-site-selection.test.ts +128 -38
  294. package/src/node/__tests__/runtime.test.ts +37 -0
  295. package/src/node/index.ts +1 -0
  296. package/src/preset.css +76 -22
  297. package/src/routes/__tests__/feed-validator.test.ts +156 -0
  298. package/src/routes/api/__tests__/collections.test.ts +114 -0
  299. package/src/routes/api/__tests__/discover.test.ts +222 -0
  300. package/src/routes/api/__tests__/nav-items.test.ts +212 -2
  301. package/src/routes/api/__tests__/post-translations.test.ts +829 -0
  302. package/src/routes/api/__tests__/settings.test.ts +24 -3
  303. package/src/routes/api/__tests__/telegram.test.ts +6 -5
  304. package/src/routes/api/collections.ts +49 -6
  305. package/src/routes/api/custom-urls.ts +0 -1
  306. package/src/routes/api/discover.ts +95 -0
  307. package/src/routes/api/export.ts +3 -0
  308. package/src/routes/api/internal/__tests__/sites.test.ts +42 -2
  309. package/src/routes/api/nav-items.ts +55 -8
  310. package/src/routes/api/posts.ts +159 -0
  311. package/src/routes/api/public/__tests__/archive.test.ts +111 -0
  312. package/src/routes/api/public/archive.ts +77 -81
  313. package/src/routes/api/public/posts.ts +23 -6
  314. package/src/routes/api/smart-collections.ts +132 -0
  315. package/src/routes/api/telegram.ts +2 -40
  316. package/src/routes/api/uploads.ts +1 -2
  317. package/src/routes/auth/__tests__/setup-auth.test.ts +137 -0
  318. package/src/routes/auth/__tests__/setup-discover.test.ts +204 -0
  319. package/src/routes/auth/__tests__/setup-flow.test.ts +270 -0
  320. package/src/routes/auth/__tests__/setup-page.test.tsx +329 -0
  321. package/src/routes/auth/__tests__/setup-steps.test.ts +310 -0
  322. package/src/routes/auth/__tests__/setup.test.ts +278 -26
  323. package/src/routes/auth/__tests__/signin.test.ts +135 -0
  324. package/src/routes/auth/setup.tsx +934 -186
  325. package/src/routes/auth/signin.tsx +10 -8
  326. package/src/routes/compose.tsx +5 -0
  327. package/src/routes/dash/__tests__/custom-urls-archive.test.ts +44 -0
  328. package/src/routes/dash/__tests__/custom-urls-page.test.ts +49 -0
  329. package/src/routes/dash/__tests__/delete-account.test.ts +106 -0
  330. package/src/routes/dash/__tests__/settings-discover.test.ts +213 -0
  331. package/src/routes/dash/custom-urls.tsx +1 -37
  332. package/src/routes/dash/settings.tsx +502 -41
  333. package/src/routes/discover-announce.ts +96 -0
  334. package/src/routes/feed/__tests__/feed.test.ts +165 -2
  335. package/src/routes/feed/feed.ts +69 -40
  336. package/src/routes/feed/sitemap.ts +95 -11
  337. package/src/routes/pages/__tests__/archive-indexing.test.ts +200 -0
  338. package/src/routes/pages/__tests__/archive-params.test.ts +370 -6
  339. package/src/routes/pages/__tests__/collection-routing.test.ts +16 -0
  340. package/src/routes/pages/__tests__/collections-feed-links.test.ts +72 -0
  341. package/src/routes/pages/__tests__/collections.test.ts +9 -3
  342. package/src/routes/pages/__tests__/custom-archive-url.test.ts +119 -0
  343. package/src/routes/pages/__tests__/feed-autodiscovery.test.ts +148 -0
  344. package/src/routes/pages/__tests__/language-routing.test.ts +679 -0
  345. package/src/routes/pages/__tests__/post-preview-partial.test.ts +96 -0
  346. package/src/routes/pages/__tests__/smart-collection.test.ts +298 -0
  347. package/src/routes/pages/__tests__/subscribe.test.ts +248 -0
  348. package/src/routes/pages/archive.tsx +471 -369
  349. package/src/routes/pages/collection.tsx +94 -96
  350. package/src/routes/pages/collections.tsx +38 -50
  351. package/src/routes/pages/featured.tsx +32 -13
  352. package/src/routes/pages/home.tsx +25 -6
  353. package/src/routes/pages/language.tsx +113 -0
  354. package/src/routes/pages/latest.tsx +26 -16
  355. package/src/routes/pages/new.tsx +3 -0
  356. package/src/routes/pages/page.tsx +178 -17
  357. package/src/routes/pages/partials.tsx +41 -0
  358. package/src/routes/pages/search.tsx +18 -3
  359. package/src/routes/pages/smart-collection.tsx +340 -0
  360. package/src/routes/pages/subscribe.tsx +182 -0
  361. package/src/runtime/__tests__/index.test.ts +19 -0
  362. package/src/runtime/__tests__/node.test.ts +129 -4
  363. package/src/runtime/cloudflare.ts +21 -2
  364. package/src/runtime/index.ts +27 -1
  365. package/src/runtime/node.ts +18 -1
  366. package/src/runtime/site.ts +95 -24
  367. package/src/services/__tests__/auth.test.ts +116 -7
  368. package/src/services/__tests__/collection.test.ts +108 -4
  369. package/src/services/__tests__/language.test.ts +495 -0
  370. package/src/services/__tests__/navigation.test.ts +213 -10
  371. package/src/services/__tests__/path.test.ts +180 -0
  372. package/src/services/__tests__/post-language.test.ts +830 -0
  373. package/src/services/__tests__/post.test.ts +46 -9
  374. package/src/services/__tests__/settings.test.ts +228 -17
  375. package/src/services/__tests__/site-admin.test.ts +5 -5
  376. package/src/services/__tests__/smart-collection.test.ts +651 -0
  377. package/src/services/about-page.ts +22 -1
  378. package/src/services/auth.ts +51 -49
  379. package/src/services/bootstrap.ts +188 -38
  380. package/src/services/collection-directory-position.ts +76 -0
  381. package/src/services/collection.ts +331 -46
  382. package/src/services/custom-url.ts +27 -22
  383. package/src/services/export-theme/assets/client-site.css +1 -1
  384. package/src/services/export-theme/assets/client-site.js +123 -123
  385. package/src/services/export-theme/layouts/_default/rss.xml +77 -1
  386. package/src/services/export-theme/layouts/partials/feed-post-content.xml +105 -2
  387. package/src/services/export-theme/layouts/partials/media-gallery.html +35 -21
  388. package/src/services/export-theme/layouts/partials/pagination.html +14 -13
  389. package/src/services/export-theme/layouts/partials/post-card.html +8 -4
  390. package/src/services/export-theme/layouts/partials/reply.html +2 -1
  391. package/src/services/export-theme/layouts/partials/thread-preview.html +40 -30
  392. package/src/services/export-theme/styles/main.css +13 -1
  393. package/src/services/export.ts +278 -19
  394. package/src/services/index.ts +34 -3
  395. package/src/services/language.ts +412 -0
  396. package/src/services/mcp.ts +3 -1
  397. package/src/services/media.ts +14 -6
  398. package/src/services/navigation.ts +429 -67
  399. package/src/services/path.ts +221 -6
  400. package/src/services/post.ts +1021 -152
  401. package/src/services/search.ts +39 -2
  402. package/src/services/settings.ts +238 -43
  403. package/src/services/site-admin.ts +24 -7
  404. package/src/services/site.ts +77 -1
  405. package/src/services/smart-collection.ts +636 -0
  406. package/src/services/telegram.ts +20 -22
  407. package/src/services/upload-session.ts +1 -3
  408. package/src/style-author.css +27 -0
  409. package/src/styles/components-author.css +1622 -0
  410. package/src/styles/components.css +24 -1571
  411. package/src/styles/site-media.css +16 -2
  412. package/src/styles/tokens.css +82 -12
  413. package/src/styles/ui-author.css +7602 -0
  414. package/src/styles/ui.css +1087 -7219
  415. package/src/types/app-context.ts +7 -0
  416. package/src/types/bindings.ts +3 -0
  417. package/src/types/config.ts +94 -15
  418. package/src/types/constants.ts +188 -16
  419. package/src/types/entities.ts +87 -1
  420. package/src/types/operations.ts +64 -2
  421. package/src/types/props.ts +157 -31
  422. package/src/types/views.ts +55 -1
  423. package/src/ui/__tests__/font-themes.test.ts +52 -12
  424. package/src/ui/compose/ComposeDialog.tsx +201 -7
  425. package/src/ui/compose/ComposePrompt.tsx +1 -5
  426. package/src/ui/compose/__tests__/ComposeDialog.test.tsx +125 -0
  427. package/src/ui/dash/appearance/AdvancedContent.tsx +2 -2
  428. package/src/ui/dash/appearance/CodeInjectionContent.tsx +12 -16
  429. package/src/ui/dash/appearance/NavigationContent.tsx +117 -16
  430. package/src/ui/dash/appearance/__tests__/NavigationContent.test.tsx +33 -11
  431. package/src/ui/dash/appearance/__tests__/system-nav-descriptions.test.ts +44 -0
  432. package/src/ui/dash/appearance/system-nav-descriptions.ts +75 -0
  433. package/src/ui/dash/settings/AccountMenuContent.tsx +2 -2
  434. package/src/ui/dash/settings/ApiTokensContent.tsx +2 -1
  435. package/src/ui/dash/settings/ConfigEditorContent.tsx +35 -16
  436. package/src/ui/dash/settings/GeneralContent.tsx +275 -113
  437. package/src/ui/dash/settings/LanguageContent.tsx +409 -0
  438. package/src/ui/dash/settings/SettingsRootContent.tsx +19 -1
  439. package/src/ui/dash/settings/__tests__/GeneralContent.test.tsx +324 -4
  440. package/src/ui/dash/settings/__tests__/LanguageContent.test.tsx +144 -0
  441. package/src/ui/dash/settings/__tests__/discover-copy.test.ts +66 -0
  442. package/src/ui/dash/settings/discover-copy.ts +116 -0
  443. package/src/ui/feed/LinkCard.tsx +55 -45
  444. package/src/ui/feed/NoteCard.tsx +9 -4
  445. package/src/ui/feed/PostStatusBadges.tsx +90 -43
  446. package/src/ui/feed/QuoteCard.tsx +55 -30
  447. package/src/ui/feed/ThreadPreview.tsx +6 -2
  448. package/src/ui/feed/__tests__/thread-preview.test.ts +13 -16
  449. package/src/ui/feed/__tests__/timeline-cards.test.ts +314 -49
  450. package/src/ui/feed/thread-preview-state.ts +20 -6
  451. package/src/ui/font-themes.ts +39 -29
  452. package/src/ui/layouts/BaseLayout.tsx +155 -10
  453. package/src/ui/layouts/SiteLayout.tsx +192 -34
  454. package/src/ui/layouts/__tests__/BaseLayout.test.tsx +196 -17
  455. package/src/ui/layouts/__tests__/SiteLayout.test.tsx +109 -85
  456. package/src/ui/pages/ArchivePage.tsx +282 -289
  457. package/src/ui/pages/CollectionPage.tsx +86 -76
  458. package/src/ui/pages/CollectionsPage.tsx +5 -0
  459. package/src/ui/pages/ComposePage.tsx +8 -0
  460. package/src/ui/pages/PostPage.tsx +47 -0
  461. package/src/ui/pages/SearchPage.tsx +3 -3
  462. package/src/ui/pages/SmartCollectionPage.tsx +434 -0
  463. package/src/ui/pages/SubscribePage.tsx +236 -0
  464. package/src/ui/pages/__tests__/ArchivePage.test.tsx +65 -9
  465. package/src/ui/pages/__tests__/collections-directory-rows.test.tsx +92 -0
  466. package/src/ui/pages/__tests__/collections-view-links.test.tsx +81 -0
  467. package/src/ui/shared/CollectionDirectory.tsx +178 -3
  468. package/src/ui/shared/CollectionsManager.tsx +70 -17
  469. package/src/ui/shared/CopyField.tsx +127 -0
  470. package/src/ui/shared/EmptyPostContent.tsx +23 -0
  471. package/src/ui/shared/MediaGallery.tsx +125 -46
  472. package/src/ui/shared/Pagination.tsx +20 -5
  473. package/src/ui/shared/PostFooter.tsx +20 -11
  474. package/src/ui/shared/__tests__/archive-labels.test.ts +100 -0
  475. package/src/ui/shared/__tests__/media-gallery.test.ts +210 -2
  476. package/src/ui/shared/__tests__/navigation-labels.test.ts +16 -22
  477. package/src/ui/shared/__tests__/pagination.test.ts +38 -24
  478. package/src/ui/shared/__tests__/post-footer.test.ts +32 -0
  479. package/src/ui/shared/archive-labels.ts +98 -0
  480. package/src/ui/shared/collection-management-labels.ts +94 -16
  481. package/src/ui/shared/navigation-labels.ts +45 -71
  482. package/src/ui/shared/post-article-attributes.ts +2 -0
  483. package/src/ui/shared/smart-collection-labels.ts +343 -0
  484. package/dist/app-C75Zc8dD.js +0 -6
  485. package/dist/client/_assets/chunks/heic-to-DUUaO23q.js +0 -1
  486. package/dist/client/_assets/chunks/module-DcsAZQZ_.js +0 -716
  487. package/dist/client/_assets/chunks/url-CU9pEbk5.js +0 -1
  488. package/dist/client/_assets/client-Bq0vre8Y.js +0 -296
  489. package/dist/client/_assets/client-D3VZyG4L.css +0 -2
  490. package/dist/client/_assets/client-auth-F2rb9WfF.js +0 -5571
  491. package/dist/env-BPYViDJJ.js +0 -281
  492. package/dist/github-api-BNF35Lkx.js +0 -176
  493. package/dist/github-app-DdiD-bC4.js +0 -275
  494. package/dist/github-sync-Bqg62IvV.js +0 -4
  495. package/dist/github-sync-HdK2EgvJ.js +0 -431
  496. package/dist/url-CbLAtlZe.js +0 -900
  497. package/src/client/__tests__/collection-created-notice.test.ts +0 -36
  498. package/src/client/__tests__/collection-form-bridge.test.ts +0 -216
  499. package/src/client/__tests__/post-form-bridge.test.ts +0 -82
  500. package/src/client/collection-created-notice.ts +0 -66
  501. package/src/client/collection-form-bridge.ts +0 -191
  502. package/src/client/components/__tests__/jant-post-form.test.ts +0 -193
  503. package/src/client/components/jant-post-form.ts +0 -422
  504. package/src/client/components/post-form-template.ts +0 -352
  505. package/src/client/components/post-form-types.ts +0 -96
  506. package/src/client/media-metadata.ts +0 -247
  507. package/src/client/post-form-bridge.ts +0 -193
  508. package/src/ui/pages/CollectionEditorPage.tsx +0 -175
@@ -13,15 +13,50 @@ msgstr ""
13
13
  "Language-Team: \n"
14
14
  "Plural-Forms: \n"
15
15
 
16
+ #. @context: Help text under the Jant Discover checkbox on the settings page. {about} is the sentence saying what the directory is, translated on its own and shown alone on the setup screen; keep it, and join it to what follows as your language joins two sentences. {links} and {quotes} are the directory's two list names, which stay in English, and {rules} is the name of its rules page; each is rendered as a link, so keep every placeholder as one run of text. {hours} is how long the directory waits before showing a post, which is the time left to edit it. 'Featured' is the mark on a post, as this site's own UI spells it; the lowercase 'link and quote' are the post formats, not the lists.
17
+ #: src/ui/dash/settings/discover-copy.ts
18
+ msgid "{about} A post you mark Featured appears on the Discover home page {hours} hours later, and link and quote posts appear on the {links} and {quotes} lists {hours} hours after they are published. You can keep editing them in the meantime. See the {rules}."
19
+ msgstr "{about}帖子设为 Featured {hours} 小时后会出现在 Discover 首页,Link 和 Quote 类型的帖子发布 {hours} 小时后出现在 {links} 和 {quotes} 列表。这段时间里你可以继续修改,详见 {rules}。"
20
+
21
+ #. @context: Warning in the multilingual dialog about stamping posts that have no language
22
+ #: src/ui/dash/settings/LanguageContent.tsx
23
+ msgid "{count, plural, one {# existing post} other {# existing posts}} with no language yet will be marked as {language}."
24
+ msgstr "{count, plural, other {其中 # 篇还没有语言,会标记为「{language}」。}}"
25
+
26
+ #. @context: Error when a content language that posts still use would be dropped
27
+ #: src/routes/dash/settings.tsx
28
+ msgid "{count, plural, one {# post is} other {# posts are}} still written in {language}. Change their language, or keep the language."
29
+ msgstr "{count, plural, other {还有 # 篇{language}帖子。先修改它们的语言,或保留该语言。}}"
30
+
31
+ #. @context: Refusal in the multilingual dialog when the list drops a language that posts still use
32
+ #: src/routes/dash/settings.tsx
33
+ msgid "{count, plural, one {# post is} other {# posts are}} written in {language}, which is not on this list. Add it back, or change their language first."
34
+ msgstr "{count, plural, other {还有 # 篇{language}帖子,但列表里没有这个语言。把它加回列表,或先修改这些帖子的语言。}}"
35
+
16
36
  #. @context: Config Editor live search result count
17
37
  #: src/ui/dash/settings/ConfigEditorContent.tsx
18
38
  msgid "{count} settings shown"
19
39
  msgstr "{count} 个设置已显示"
20
40
 
41
+ #. @context: Body of the dialog confirming removal of the last additional language
42
+ #: src/ui/dash/settings/LanguageContent.tsx
43
+ msgid "{language} is the only other language on this site, so removing it turns multilingual content off. The root address goes back to showing every language, {prefix} stops working, and each post keeps the language it is written in."
44
+ msgstr "移除 {language} 后就只剩主语言了,多语言会一并关闭。根地址将恢复显示所有语言,{prefix} 不再可用,每篇帖子的语言保持不变。"
45
+
46
+ #. @context: What the Jant Discover directory is, in one sentence. The whole help line under the Discover checkbox on the first-run setup screen, and the opening of the settings page's longer one. {name} is the directory's name and is rendered as the link to it, so keep it as one run of text.
47
+ #: src/ui/dash/settings/discover-copy.ts
48
+ msgid "{name} is a directory of Jant blogs, curated by hand by the Jant community to help people find new Jant blogs and posts."
49
+ msgstr "{name} 是 Jant 社区人工维护的目录,旨在帮助用户发现新的 Jant 博客和内容。"
50
+
51
+ #. @context: Body of the change-primary-language dialog
52
+ #: src/ui/dash/settings/LanguageContent.tsx
53
+ msgid "{next} will be served at the root address (/, /feed, /archive), and {previous} moves to {prefix}. Post addresses do not change, but anyone subscribed to /feed starts receiving {next} posts."
54
+ msgstr "根地址(/、/feed、/archive)将改为提供「{next}」的内容,「{previous}」移至 {prefix}。帖子地址不会改变,但订阅了 /feed 的读者从此收到的是「{next}」的帖子。"
55
+
21
56
  #. @context: Custom CSS textarea placeholder
22
57
  #: src/ui/dash/appearance/AdvancedContent.tsx
23
58
  msgid "/* Your custom CSS here */"
24
- msgstr "/* 在此填写您的自定义 CSS */"
59
+ msgstr "/* 在此填写你的自定义 CSS */"
25
60
 
26
61
  #. @context: Compact conflict message when /about is occupied
27
62
  #: src/ui/dash/settings/GeneralContent.tsx
@@ -31,7 +66,7 @@ msgstr "/about 已被占用。重命名该项目后再创建 About 页面。"
31
66
  #. @context: GitHub sync picker — entry at the bottom of the owner dropdown that starts a new install flow
32
67
  #: src/routes/dash/settings.tsx
33
68
  msgid "+ Install on another account"
34
- msgstr "+ 在其他帐户上安装"
69
+ msgstr "+ 在其他账户上安装"
35
70
 
36
71
  #. @context: Redirect type option
37
72
  #: src/routes/dash/custom-urls.tsx
@@ -51,7 +86,7 @@ msgstr "沉静、偏冷的底色。"
51
86
  #. @context: Help text for site description field
52
87
  #: src/ui/dash/settings/GeneralContent.tsx
53
88
  msgid "A short intro shown on your home page."
54
- msgstr "在您的主页上显示的简短介绍."
89
+ msgstr "在你的主页上显示的简短介绍。"
55
90
 
56
91
  #. @context: Parchment color theme preview help line
57
92
  #: src/ui/dash/appearance/ColorThemeContent.tsx
@@ -109,11 +144,26 @@ msgstr "活动令牌"
109
144
  msgid "Add"
110
145
  msgstr "添加"
111
146
 
147
+ #. @context: One-click fix in the multilingual dialog, putting a language with posts back on the list
148
+ #: src/ui/dash/settings/LanguageContent.tsx
149
+ msgid "Add {language}"
150
+ msgstr "添加 {language}"
151
+
112
152
  #. @context: Description in link popover form
113
153
  #: src/ui/dash/appearance/NavigationContent.tsx
114
154
  msgid "Add a custom link to any URL"
115
155
  msgstr "向任意 URL 添加自定义链接"
116
156
 
157
+ #. @context: Button that opens the link form with the pasted address filled in
158
+ #: src/ui/dash/appearance/NavigationContent.tsx
159
+ msgid "Add as link"
160
+ msgstr "添加为链接"
161
+
162
+ #. @context: Validation message when the multilingual dialog has no second language
163
+ #: src/ui/dash/settings/LanguageContent.tsx
164
+ msgid "Add at least one more language to turn this on."
165
+ msgstr "至少再添加一种语言才能启用。"
166
+
117
167
  #. @context: Button for adding a collection to nav
118
168
  #: src/ui/dash/appearance/NavigationContent.tsx
119
169
  msgid "Add Collection"
@@ -132,7 +182,7 @@ msgstr "添加站点中已经存在的常用入口。"
132
182
  #. @context: Custom CSS settings description
133
183
  #: src/ui/dash/appearance/AdvancedContent.tsx
134
184
  msgid "Add custom CSS to override any styles. Use data attributes like [data-page], [data-post], [data-format] to target specific elements."
135
- msgstr "添加自定义 CSS 以覆盖任何样式. 使用数据属性如 [data-page], [data-post], [data-format] 来定位特定元素."
185
+ msgstr "添加自定义 CSS 以覆盖任何样式。使用数据属性如 [data-page], [data-post], [data-format] 来定位特定元素。"
136
186
 
137
187
  #. @context: Section heading for adding custom link to nav
138
188
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -149,6 +199,11 @@ msgstr "现在添加到导航,或打开编辑器补充内容。"
149
199
  msgid "Add it to navigation now or open the editor to add details."
150
200
  msgstr "现在添加到导航,或打开编辑器补充详细信息。"
151
201
 
202
+ #. @context: Button that adds another content language
203
+ #: src/ui/dash/settings/LanguageContent.tsx
204
+ msgid "Add language"
205
+ msgstr "添加语言"
206
+
152
207
  #. @context: Button and heading for adding custom link
153
208
  #: src/ui/dash/appearance/NavigationContent.tsx
154
209
  msgid "Add Link"
@@ -197,7 +252,17 @@ msgstr "所有可用的端点和请求格式。"
197
252
  #. @context: Message when every collection is already added to nav
198
253
  #: src/ui/dash/appearance/NavigationContent.tsx
199
254
  msgid "All collections are already in your navigation."
200
- msgstr "所有合集已在您的导航中。"
255
+ msgstr "所有合集已在你的导航中。"
256
+
257
+ #. @context: Link text to the feeds documentation, under the fixed feed URLs in General settings
258
+ #: src/ui/dash/settings/GeneralContent.tsx
259
+ msgid "All feed addresses"
260
+ msgstr "全部 feed 地址"
261
+
262
+ #. @context: Checkbox for joining the Jant Discover directory, on the settings page and once on the first-run setup screen. {name} is the directory's name, kept as one run of text.
263
+ #: src/ui/dash/settings/discover-copy.ts
264
+ msgid "Allow {name} to list my site"
265
+ msgstr "允许我的博客出现在 {name} 中"
201
266
 
202
267
  #. @context: Config Editor setting description
203
268
  #: src/ui/dash/settings/ConfigEditorContent.tsx
@@ -209,10 +274,15 @@ msgstr "允许无需 API 令牌读取已发布内容。"
209
274
  msgid "Allow search engines to index my site"
210
275
  msgstr "允许搜索引擎索引我的网站"
211
276
 
277
+ #. @context: Shown when a pasted address is already a navigation item
278
+ #: src/ui/dash/appearance/NavigationContent.tsx
279
+ msgid "Already in navigation. Drag it in the list above to move it."
280
+ msgstr "已在导航中。将其在上方列表中拖动以移动。"
281
+
212
282
  #. @context: Theme mode option description
213
283
  #: src/ui/dash/appearance/ColorThemeContent.tsx
214
284
  msgid "Always show the dark version of the theme."
215
- msgstr "始终显示暗色主题."
285
+ msgstr "始终显示暗色主题。"
216
286
 
217
287
  #. @context: Theme mode option description
218
288
  #: src/ui/dash/appearance/ColorThemeContent.tsx
@@ -224,6 +294,21 @@ msgstr "始终显示浅色主题。"
224
294
  msgid "An earthier, warmer tone."
225
295
  msgstr "更偏暖、偏土的色调。"
226
296
 
297
+ #. @context: Button sending the Discover announcement, shown when the site has never announced itself or when the announcement failed
298
+ #: src/ui/dash/settings/GeneralContent.tsx
299
+ msgid "Announce my site"
300
+ msgstr "提交我的站点"
301
+
302
+ #. @context: Toast after sending the Discover announcement. It runs in the background, so the page does not yet know how it went.
303
+ #: src/routes/dash/settings.tsx
304
+ msgid "Announcing your site. Reload to see the result."
305
+ msgstr "正在提交站点,刷新后可以看到结果。"
306
+
307
+ #. @context: Follow-up hint under the stamping warning
308
+ #: src/ui/dash/settings/LanguageContent.tsx
309
+ msgid "Any post written in another language can be corrected from its own menu afterwards."
310
+ msgstr "若有别的语言的帖子,之后可以在那篇帖子的菜单里单独更正。"
311
+
227
312
  #. @context: Code Injection security warning body
228
313
  #: src/ui/dash/appearance/CodeInjectionContent.tsx
229
314
  msgid "Anything you paste here has full access to your visitors' browsers. Only use code from sources you trust."
@@ -254,10 +339,8 @@ msgid "Applies to your entire site, including admin pages. Pick a palette, then
254
339
  msgstr "应用于整个站点,包括管理页面。选择一个调色板,然后选择它是随系统变化还是保持固定。"
255
340
 
256
341
  #. @context: Custom URL target type badge for an archive view
257
- #. @context: Custom URL type option for filtered archive view
258
342
  #. @context: Suggested navigation link target type
259
343
  #: src/routes/dash/custom-urls.tsx
260
- #: src/routes/dash/custom-urls.tsx
261
344
  #: src/ui/dash/appearance/NavigationContent.tsx
262
345
  msgid "Archive"
263
346
  msgstr "归档"
@@ -267,16 +350,21 @@ msgstr "归档"
267
350
  msgid "Archive feed"
268
351
  msgstr "归档订阅源"
269
352
 
270
- #. @context: Help text for archive custom URL query params
271
- #: src/routes/dash/custom-urls.tsx
272
- msgid "Archive filter parameters (e.g. format=note&view=list)"
273
- msgstr "归档 筛选参数 (例如 format=笔记&view=list)"
274
-
275
353
  #. @context: Config Editor setting description
276
354
  #: src/ui/dash/settings/ConfigEditorContent.tsx
277
355
  msgid "Ask search engines not to index public pages or include them in results."
278
356
  msgstr "请求搜索引擎不要对公开页面建立索引或将其包含在搜索结果中。"
279
357
 
358
+ #. @context: Heading above the page a pasted address resolved to
359
+ #: src/ui/dash/appearance/NavigationContent.tsx
360
+ msgid "At that address"
361
+ msgstr "在该地址"
362
+
363
+ #. @context: Error toast when authentication secret is missing from server config
364
+ #: src/routes/auth/setup.tsx
365
+ msgid "Auth secret is missing. Check your environment variables."
366
+ msgstr "缺少认证密钥,检查环境变量配置。"
367
+
280
368
  #. @context: Theme mode option label
281
369
  #: src/ui/dash/appearance/ColorThemeContent.tsx
282
370
  msgid "Auto"
@@ -285,7 +373,7 @@ msgstr "自动"
285
373
  #. @context: Description after theming guide link on Custom CSS page
286
374
  #: src/ui/dash/appearance/AdvancedContent.tsx
287
375
  msgid "available CSS variables, data attributes, and examples."
288
- msgstr "可用的 CSS 变量, 数据属性, 和 示例."
376
+ msgstr "可用的 CSS 变量,数据属性,和 示例。"
289
377
 
290
378
  #. @context: Breadcrumb label
291
379
  #. @context: Settings item — avatar settings
@@ -299,7 +387,7 @@ msgstr "头像"
299
387
  #: src/routes/dash/settings.tsx
300
388
  #: src/routes/dash/settings.tsx
301
389
  msgid "Avatar display updated."
302
- msgstr "头像显示已更新."
390
+ msgstr "头像显示已更新。"
303
391
 
304
392
  #. @context: Button returning from page creation to page search
305
393
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -369,6 +457,7 @@ msgstr "平静自然,看着舒服。"
369
457
  #. @context: Button to cancel form
370
458
  #. @context: Button to cancel settings changes
371
459
  #. @context: Button to cancel unsaved changes and revert to original values
460
+ #. @context: Dialog cancel button
372
461
  #. @context: GitHub sync picker — cancel action
373
462
  #: src/routes/dash/custom-urls.tsx
374
463
  #: src/routes/dash/custom-urls.tsx
@@ -381,6 +470,7 @@ msgstr "平静自然,看着舒服。"
381
470
  #: src/ui/dash/settings/DeleteAccountContent.tsx
382
471
  #: src/ui/dash/settings/GeneralContent.tsx
383
472
  #: src/ui/dash/settings/GitHubSyncContent.tsx
473
+ #: src/ui/dash/settings/LanguageContent.tsx
384
474
  #: src/ui/dash/settings/SessionsContent.tsx
385
475
  #: src/ui/dash/settings/TelegramContent.tsx
386
476
  #: src/ui/dash/settings/TelegramContent.tsx
@@ -394,6 +484,11 @@ msgstr "取消"
394
484
  msgid "Change Password"
395
485
  msgstr "更改密码"
396
486
 
487
+ #. @context: Title of the change-primary-language dialog
488
+ #: src/ui/dash/settings/LanguageContent.tsx
489
+ msgid "Change the primary language?"
490
+ msgstr "把主语言改为其他语言?"
491
+
397
492
  #. @context: Warning shown when changing the canonical RSS feed selection
398
493
  #: src/ui/dash/settings/GeneralContent.tsx
399
494
  msgid "Changing this updates what subscribers get from /feed."
@@ -417,7 +512,7 @@ msgstr "选择一篇尚未添加到导航的有标题笔记,或创建新页面
417
512
  #. @context: Font theme settings description
418
513
  #: src/ui/dash/appearance/FontThemeContent.tsx
419
514
  msgid "Choose a typographic direction for your site. Each theme changes both the font pairing and the reading rhythm."
420
- msgstr "为您的网站选择一种排版方向。每个主题都会同时改变字体搭配和阅读节奏。"
515
+ msgstr "为你的网站选择一种排版方向。每个主题都会同时改变字体搭配和阅读节奏。"
421
516
 
422
517
  #. @context: Config Editor linked setting description
423
518
  #: src/ui/dash/settings/ConfigEditorContent.tsx
@@ -449,11 +544,6 @@ msgstr "选择用于显示日期和时间的时区。"
449
544
  msgid "Choose the typography used across Jant."
450
545
  msgstr "选择 Jant 全局使用的字体。"
451
546
 
452
- #. @context: Settings field for a manual Chinese, Japanese, or Korean font fallback
453
- #: src/ui/dash/settings/GeneralContent.tsx
454
- msgid "CJK fallback"
455
- msgstr "CJK 字体回退"
456
-
457
547
  #. @context: Paper color theme preview help line
458
548
  #: src/ui/dash/appearance/ColorThemeContent.tsx
459
549
  msgid "Clean and high-contrast, close to white."
@@ -548,7 +638,7 @@ msgstr "连接"
548
638
  #. @context: Intro text on GitHub Sync settings page when not connected
549
639
  #: src/ui/dash/settings/GitHubSyncContent.tsx
550
640
  msgid "Connect a GitHub repository to automatically back up your posts as Markdown files. Edits on GitHub sync back to your site."
551
- msgstr "将 GitHub 仓库连接以自动将您的文章备份为 Markdown 文件。您在 GitHub 上的编辑会同步回您的网站。"
641
+ msgstr "连接 GitHub 仓库,自动把帖子备份成 Markdown。在 GitHub 上的修改会同步回站点。"
552
642
 
553
643
  #. @context: Intro text on the Telegram settings page when no bot is set up
554
644
  #: src/ui/dash/settings/TelegramContent.tsx
@@ -605,11 +695,25 @@ msgstr "连接后会将你的网站同步到 {repo} 的默认分支,并追加
605
695
  msgid "Connecting…"
606
696
  msgstr "连接中…"
607
697
 
608
- #. @context: Settings form field for the public content language
609
- #: src/ui/dash/settings/GeneralContent.tsx
698
+ #. @context: Language settings field — the site's language
699
+ #. @context: Setup form field - site content language
700
+ #. @context: Setup form field - site content language
701
+ #: src/routes/auth/setup.tsx
702
+ #: src/routes/auth/setup.tsx
703
+ #: src/ui/dash/settings/LanguageContent.tsx
610
704
  msgid "Content language"
611
705
  msgstr "内容语言"
612
706
 
707
+ #. @context: Settings item description for language
708
+ #: src/ui/dash/settings/SettingsRootContent.tsx
709
+ msgid "Content language, dashboard language, multilingual"
710
+ msgstr "内容语言、界面语言、多语言"
711
+
712
+ #. @context: Setup submit button on the first screen, which is followed by the site screen
713
+ #: src/routes/auth/setup.tsx
714
+ msgid "Continue"
715
+ msgstr "继续"
716
+
613
717
  #. @context: Slate color theme preview title
614
718
  #: src/ui/dash/appearance/ColorThemeContent.tsx
615
719
  msgid "Cool blue-gray"
@@ -648,7 +752,7 @@ msgstr "复制令牌"
648
752
  #. @context: Warning to copy newly created API token
649
753
  #: src/ui/dash/settings/ApiTokensContent.tsx
650
754
  msgid "Copy your token now — it won't be shown again."
651
- msgstr "现在复制您的令牌 — 它不会再次显示。"
755
+ msgstr "现在复制你的令牌 — 它不会再次显示。"
652
756
 
653
757
  #. @context: Error toast when copying text to the clipboard fails
654
758
  #: src/ui/dash/settings/GeneralContent.tsx
@@ -670,6 +774,11 @@ msgstr "无法创建合集。请检查信息后重试。"
670
774
  msgid "Couldn't create the page. Check the details and try again."
671
775
  msgstr "无法创建页面。请检查详情并重试。"
672
776
 
777
+ #. @context: Error toast when account creation fails
778
+ #: src/routes/auth/setup.tsx
779
+ msgid "Couldn't create your account. Check the details and try again."
780
+ msgstr "账户创建失败,检查填写内容后重试。"
781
+
673
782
  #. @context: Error toast when nav delete fails
674
783
  #: src/ui/dash/appearance/NavigationContent.tsx
675
784
  msgid "Couldn't delete. Try again in a moment."
@@ -755,6 +864,11 @@ msgstr "在 GitHub 上创建一个"
755
864
  msgid "Create Page"
756
865
  msgstr "创建页面"
757
866
 
867
+ #. @context: Setup page description on the first screen, which asks only for credentials
868
+ #: src/routes/auth/setup.tsx
869
+ msgid "Create the account you write from."
870
+ msgstr "创建账户"
871
+
758
872
  #. @context: Help text for GitHub repository input on GitHub Sync settings, telling users they must create the repo themselves
759
873
  #: src/ui/dash/settings/GitHubSyncContent.tsx
760
874
  msgid "Create the repository on GitHub first — it can be empty."
@@ -804,7 +918,7 @@ msgstr "自定义 CSS"
804
918
  #. @context: Toast after saving custom CSS
805
919
  #: src/routes/dash/settings.tsx
806
920
  msgid "Custom CSS updated."
807
- msgstr "自定义 CSS 已更新."
921
+ msgstr "自定义 CSS 已更新。"
808
922
 
809
923
  #. @context: Settings item — custom URL settings
810
924
  #. @context: Settings section heading
@@ -825,8 +939,13 @@ msgstr "危险操作"
825
939
  msgid "Dark"
826
940
  msgstr "深色"
827
941
 
828
- #. @context: Settings form field for the admin interface language
829
- #: src/ui/dash/settings/GeneralContent.tsx
942
+ #. @context: Language settings section for author-facing settings
943
+ #: src/ui/dash/settings/LanguageContent.tsx
944
+ msgid "Dashboard"
945
+ msgstr "后台"
946
+
947
+ #. @context: Language settings field — the admin UI language
948
+ #: src/ui/dash/settings/LanguageContent.tsx
830
949
  msgid "Dashboard language"
831
950
  msgstr "后台语言"
832
951
 
@@ -886,13 +1005,18 @@ msgstr "演示限制"
886
1005
  #. @context: Notice shown on the account page when demo restrictions are enabled
887
1006
  #: src/ui/dash/settings/AccountMenuContent.tsx
888
1007
  msgid "Demo mode hides sessions, password changes, and account deletion. Export still works."
889
- msgstr "演示模式会隐藏会话、密码更改和账号删除。导出仍然可用."
1008
+ msgstr "演示模式会隐藏会话、密码更改和账号删除。导出仍然可用。"
890
1009
 
891
1010
  #. @context: Help text explaining that SEO indexing is locked in demo mode
892
1011
  #: src/ui/dash/settings/GeneralContent.tsx
893
1012
  msgid "Demo sites always stay hidden from search engines."
894
1013
  msgstr "演示站点始终对搜索引擎隐藏。"
895
1014
 
1015
+ #. @context: Help text explaining that Discover is locked off in demo mode
1016
+ #: src/ui/dash/settings/GeneralContent.tsx
1017
+ msgid "Demo sites are never listed in Discover."
1018
+ msgstr "演示站点不会出现在 Discover 中。"
1019
+
896
1020
  #. @context: Color theme preview collection label
897
1021
  #: src/ui/dash/appearance/ColorThemeContent.tsx
898
1022
  msgid "Design"
@@ -915,12 +1039,22 @@ msgstr "断开连接"
915
1039
  #. @context: Confirmation message when disconnecting GitHub Sync
916
1040
  #: src/ui/dash/settings/GitHubSyncContent.tsx
917
1041
  msgid "Disconnect from GitHub? The webhook will be removed. Your repository content will not be deleted."
918
- msgstr "要与 GitHub 断开连接吗?该 webhook 将被移除。您的仓库内容不会被删除。"
1042
+ msgstr "要与 GitHub 断开连接吗?该 webhook 将被移除。你的仓库内容不会被删除。"
919
1043
 
920
1044
  #. @context: Confirmation message when disconnecting Telegram
921
1045
  #: src/ui/dash/settings/TelegramContent.tsx
922
1046
  msgid "Disconnect Telegram? You can reconnect any time with a new binding code."
923
- msgstr "断开 Telegram?您可以随时使用新的绑定码重新连接。"
1047
+ msgstr "断开 Telegram?你可以随时使用新的绑定码重新连接。"
1048
+
1049
+ #. @context: Link text at the end of the help line under the Discover checkbox, leading to the directory's page on how blogs are listed: joining, review, and what takes a blog off. This run of text is rendered as the link, so translate it as it should read inside that sentence.
1050
+ #: src/ui/dash/settings/discover-copy.ts
1051
+ msgid "Discover community rules"
1052
+ msgstr "Discover 社区规则"
1053
+
1054
+ #. @context: Help text explaining that Discover cannot work while Atom feeds are disabled
1055
+ #: src/ui/dash/settings/GeneralContent.tsx
1056
+ msgid "Discover reads your Atom feed, so it needs feeds turned on."
1057
+ msgstr "Discover 读取的是 Atom 订阅源,需要先开启订阅源。"
924
1058
 
925
1059
  #. @context: Checkbox to show avatar in the site header
926
1060
  #: src/ui/dash/settings/AvatarContent.tsx
@@ -930,7 +1064,7 @@ msgstr "在我的站点顶部显示头像"
930
1064
  #. @context: Help text for site footer field
931
1065
  #: src/ui/dash/settings/GeneralContent.tsx
932
1066
  msgid "Displayed at the bottom of all posts and pages."
933
- msgstr "显示在所有文章和页面的底部。"
1067
+ msgstr "显示在所有帖子和页面的底部。"
934
1068
 
935
1069
  #. @context: Settings item description for the hosted site management external link
936
1070
  #: src/ui/dash/settings/SettingsRootContent.tsx
@@ -1007,6 +1141,11 @@ msgstr "在完整表单中编辑显示在公共页面底部的多行页脚。"
1007
1141
  msgid "Edit the multi-line introduction used on your home page and in metadata."
1008
1142
  msgstr "在完整表单中编辑首页和元数据使用的多行简介。"
1009
1143
 
1144
+ #. @context: Setup/signin form field - email
1145
+ #: src/routes/auth/setup.tsx
1146
+ msgid "Email"
1147
+ msgstr "邮箱"
1148
+
1010
1149
  #. @context: GitHub sync picker — shown when the selected repo has no commits
1011
1150
  #: src/routes/dash/settings.tsx
1012
1151
  msgid "Empty repository. Ready to connect."
@@ -1020,7 +1159,7 @@ msgstr "请输入页面标题。"
1020
1159
  #. @context: Help text under the archive feed URL, explaining it is the complete feed
1021
1160
  #: src/ui/dash/settings/GeneralContent.tsx
1022
1161
  msgid "Every published post, including ones hidden from Latest."
1023
- msgstr "已发布的全部帖子,包括从 Latest 中隐藏的那些。"
1162
+ msgstr "已发布的全部帖子,包括从 Latest 中隐藏的帖子。"
1024
1163
 
1025
1164
  #. @context: Placeholder link label shown in color theme preview cards
1026
1165
  #: src/ui/dash/appearance/ColorThemeContent.tsx
@@ -1030,7 +1169,7 @@ msgstr "示例链接"
1030
1169
  #. @context: Confirmation text after downloading the site export in delete flow
1031
1170
  #: src/ui/dash/settings/DeleteAccountContent.tsx
1032
1171
  msgid "Export downloaded."
1033
- msgstr "导出文件已下载."
1172
+ msgstr "导出文件已下载。"
1034
1173
 
1035
1174
  #. @context: Settings item — export the site as a Hugo archive
1036
1175
  #: src/ui/dash/settings/AccountMenuContent.tsx
@@ -1049,17 +1188,22 @@ msgstr "Favicon 和站点顶部的个人标识"
1049
1188
  #: src/ui/dash/settings/GeneralContent.tsx
1050
1189
  #: src/ui/dash/StatusBadge.tsx
1051
1190
  msgid "Featured"
1052
- msgstr "精选"
1191
+ msgstr "Featured"
1053
1192
 
1054
1193
  #. @context: Label for the explicit featured RSS feed URL
1055
1194
  #: src/ui/dash/settings/GeneralContent.tsx
1056
1195
  msgid "Featured feed"
1057
- msgstr "精选订阅源"
1196
+ msgstr "Featured 订阅源"
1058
1197
 
1059
1198
  #. @context: Config Editor RSS feed enum option
1060
1199
  #: src/ui/dash/settings/ConfigEditorContent.tsx
1061
1200
  msgid "Featured posts"
1062
- msgstr "精选文章"
1201
+ msgstr "Featured 帖子"
1202
+
1203
+ #. @context: Discover status line right after a successful announcement, while the first crawl is still due
1204
+ #: src/ui/dash/settings/GeneralContent.tsx
1205
+ msgid "Feed address sent. A directory reads a newly announced feed within {hours} hours."
1206
+ msgstr "订阅源地址已送达。目录会在 {hours} 小时内首次读取。"
1063
1207
 
1064
1208
  #. @context: Toast after saving feed settings
1065
1209
  #: src/routes/dash/settings.tsx
@@ -1091,12 +1235,10 @@ msgstr "细粒度样式覆盖"
1091
1235
  msgid "Fixed feed URLs"
1092
1236
  msgstr "固定订阅源 URL"
1093
1237
 
1094
- #. @context: CJK font fallback option that uses the configured content language
1095
- #. @context: Config Editor enum option for automatic CJK font fallback
1096
1238
  #. @context: Config Editor enum option for no explicit dashboard language
1239
+ #. @context: Dashboard language option that follows the site language
1097
1240
  #: src/ui/dash/settings/ConfigEditorContent.tsx
1098
- #: src/ui/dash/settings/ConfigEditorContent.tsx
1099
- #: src/ui/dash/settings/GeneralContent.tsx
1241
+ #: src/ui/dash/settings/LanguageContent.tsx
1100
1242
  msgid "Follow content language"
1101
1243
  msgstr "跟随内容语言"
1102
1244
 
@@ -1122,6 +1264,11 @@ msgstr "字体主题"
1122
1264
  msgid "Font Theme"
1123
1265
  msgstr "字体主题"
1124
1266
 
1267
+ #. @context: Config Editor archive layout enum option
1268
+ #: src/ui/dash/settings/ConfigEditorContent.tsx
1269
+ msgid "Full posts"
1270
+ msgstr "完整帖子"
1271
+
1125
1272
  #. @context: Breadcrumb label
1126
1273
  #. @context: Settings item — general settings
1127
1274
  #. @context: Settings section heading
@@ -1150,6 +1297,11 @@ msgstr "获取新绑定码"
1150
1297
  msgid "GitHub Sync"
1151
1298
  msgstr "GitHub 同步"
1152
1299
 
1300
+ #. @context: Help text for the multilingual content toggle
1301
+ #: src/ui/dash/settings/LanguageContent.tsx
1302
+ msgid "Give each language its own home page, archive, and feed. Once it's on, you pick a language when you publish, and can link an existing post to a version of it in another language."
1303
+ msgstr "每种语言都有独立的首页、归档和订阅源。启用后,发布时可以选择不同的语言,也可以为已有的帖子关联一篇其他语言的帖子。"
1304
+
1153
1305
  #. @context: Section label for nav items shown in header
1154
1306
  #: src/ui/dash/appearance/NavigationContent.tsx
1155
1307
  msgid "Header"
@@ -1160,11 +1312,6 @@ msgstr "导航栏"
1160
1312
  msgid "Header links, built-in destinations, and overflow menu"
1161
1313
  msgstr "导航链接、内置目标和更多菜单"
1162
1314
 
1163
- #. @context: Description for the RSS system navigation toggle. {feed} is either Latest or Featured.
1164
- #: src/ui/dash/appearance/NavigationContent.tsx
1165
- msgid "Header RSS points to your {feed} feed (/feed). Change what /feed returns in General."
1166
- msgstr "导航栏 RSS 指向你的 {feed} 订阅源 (/feed)。在“常规”中更改 /feed 返回的内容。"
1167
-
1168
1315
  #. @context: Fallback color theme preview body
1169
1316
  #: src/ui/dash/appearance/ColorThemeContent.tsx
1170
1317
  msgid "Headings, body text, and links in this theme."
@@ -1173,7 +1320,7 @@ msgstr "这个主题下的标题、正文和链接。"
1173
1320
  #. @context: Post badge for posts hidden from Latest
1174
1321
  #: src/ui/dash/StatusBadge.tsx
1175
1322
  msgid "Hidden from Latest"
1176
- msgstr "从最新中隐藏 (不出现在 Latest 中,但仍可通过固定链接和集合访问的状态。)"
1323
+ msgstr "Hidden from Latest"
1177
1324
 
1178
1325
  #. @context: Settings subsection heading for home page settings
1179
1326
  #: src/ui/dash/settings/GeneralContent.tsx
@@ -1183,7 +1330,7 @@ msgstr "首页"
1183
1330
  #. @context: Toast after auto-saving home settings
1184
1331
  #: src/routes/dash/settings.tsx
1185
1332
  msgid "Home settings updated."
1186
- msgstr "主页设置已更新."
1333
+ msgstr "主页设置已更新。"
1187
1334
 
1188
1335
  #. @context: Generic hosted auth provider label when no explicit provider name is configured
1189
1336
  #. @context: Generic hosted auth provider label when no explicit provider name is configured
@@ -1222,6 +1369,11 @@ msgstr "安装 GitHub App 以在无需管理个人令牌的情况下授予访问
1222
1369
  msgid "Integrations"
1223
1370
  msgstr "集成"
1224
1371
 
1372
+ #. @context: Name of the Jant blog directory. Appears inside the Discover checkbox label, and in the help line under it as the link to the directory.
1373
+ #: src/ui/dash/settings/discover-copy.ts
1374
+ msgid "Jant Discover"
1375
+ msgstr "Jant Discover"
1376
+
1225
1377
  #. @context: Validation error for a long page slug
1226
1378
  #: src/ui/dash/appearance/NavigationContent.tsx
1227
1379
  msgid "Keep the page address under 200 characters."
@@ -1247,15 +1399,37 @@ msgstr "标签和 URL 为必填项"
1247
1399
  msgid "Label is required"
1248
1400
  msgstr "标签为必填项"
1249
1401
 
1250
- #. @context: Settings subsection heading for language and time zone fields
1251
- #: src/ui/dash/settings/GeneralContent.tsx
1252
- msgid "Language & Time"
1253
- msgstr "语言与时间"
1402
+ #. @context: Breadcrumb label
1403
+ #. @context: Settings item — language settings
1404
+ #: src/routes/dash/settings.tsx
1405
+ #: src/ui/dash/settings/SettingsRootContent.tsx
1406
+ msgid "Language"
1407
+ msgstr "语言"
1408
+
1409
+ #. @context: Toast after adding a content language
1410
+ #: src/routes/dash/settings.tsx
1411
+ msgid "Language added."
1412
+ msgstr "语言已添加。"
1413
+
1414
+ #. @context: Toast after removing a content language
1415
+ #: src/routes/dash/settings.tsx
1416
+ msgid "Language removed."
1417
+ msgstr "语言已移除。"
1254
1418
 
1255
- #. @context: Toast after saving language and time settings
1419
+ #. @context: Toast after removing the last additional content language
1256
1420
  #: src/routes/dash/settings.tsx
1257
- msgid "Language and time updated."
1258
- msgstr "语言和时间已更新。"
1421
+ msgid "Language removed. Multilingual content is off."
1422
+ msgstr "语言已移除,多语言已关闭。"
1423
+
1424
+ #. @context: Toast after saving a language setting
1425
+ #: src/routes/dash/settings.tsx
1426
+ msgid "Language updated."
1427
+ msgstr "语言已更新。"
1428
+
1429
+ #. @context: Label above the list of the site's languages
1430
+ #: src/ui/dash/settings/LanguageContent.tsx
1431
+ msgid "Languages"
1432
+ msgstr "语言"
1259
1433
 
1260
1434
  #. @context: Label for last push commit SHA on GitHub Sync status
1261
1435
  #: src/ui/dash/settings/GitHubSyncContent.tsx
@@ -1282,22 +1456,22 @@ msgstr "上次使用 {date}"
1282
1456
  #: src/ui/dash/appearance/NavigationContent.tsx
1283
1457
  #: src/ui/dash/settings/GeneralContent.tsx
1284
1458
  msgid "Latest"
1285
- msgstr "最新"
1459
+ msgstr "Latest"
1286
1460
 
1287
1461
  #. @context: Label for the explicit latest RSS feed URL
1288
1462
  #: src/ui/dash/settings/GeneralContent.tsx
1289
1463
  msgid "Latest feed"
1290
- msgstr "最新订阅源"
1464
+ msgstr "Latest 订阅源"
1291
1465
 
1292
1466
  #. @context: Config Editor RSS feed enum option
1293
1467
  #: src/ui/dash/settings/ConfigEditorContent.tsx
1294
1468
  msgid "Latest posts"
1295
- msgstr "最新文章"
1469
+ msgstr "Latest 帖子"
1296
1470
 
1297
1471
  #. @context: Suffix after Custom CSS link on color theme page
1298
1472
  #: src/ui/dash/appearance/ColorThemeContent.tsx
1299
1473
  msgid "lets you override any theme variable."
1300
- msgstr "允许您覆盖任何主题变量."
1474
+ msgstr "允许你覆盖任何主题变量。"
1301
1475
 
1302
1476
  #. @context: Theme mode option label
1303
1477
  #: src/ui/dash/appearance/ColorThemeContent.tsx
@@ -1344,6 +1518,36 @@ msgstr "链接"
1344
1518
  msgid "Link added to navigation."
1345
1519
  msgstr "链接已添加到导航。"
1346
1520
 
1521
+ #. @context: Description for the featured system navigation toggle
1522
+ #: src/ui/dash/appearance/system-nav-descriptions.ts
1523
+ msgid "Link to posts you've marked as featured."
1524
+ msgstr "链接到你标为 Featured 的帖子。"
1525
+
1526
+ #. @context: Description for the archive system navigation toggle
1527
+ #: src/ui/dash/appearance/system-nav-descriptions.ts
1528
+ msgid "Link to the post archive"
1529
+ msgstr "链接到帖子归档。"
1530
+
1531
+ #. @context: Description for the collections system navigation toggle
1532
+ #: src/ui/dash/appearance/system-nav-descriptions.ts
1533
+ msgid "Link to your collections page"
1534
+ msgstr "链接到合集页。"
1535
+
1536
+ #. @context: Description for the latest system navigation toggle
1537
+ #: src/ui/dash/appearance/system-nav-descriptions.ts
1538
+ msgid "Link to your latest posts. Your homepage shows this feed."
1539
+ msgstr "链接到 Latest。首页展示的就是这个列表。"
1540
+
1541
+ #. @context: Description for the RSS system navigation toggle. {feed} is either Latest or Featured. Pairs with the Subscribe toggle's description.
1542
+ #: src/ui/dash/appearance/system-nav-descriptions.ts
1543
+ msgid "Links straight to /feed — the raw Atom file, currently your {feed} feed. Best for readers who already use a feed reader."
1544
+ msgstr "直接指向 /feed,即 Atom 原始文件,目前返回的是「{feed}」。适合已经在用阅读器的读者。"
1545
+
1546
+ #. @context: Description for the Subscribe system navigation toggle. Pairs with the RSS toggle's description.
1547
+ #: src/ui/dash/appearance/system-nav-descriptions.ts
1548
+ msgid "Links to /subscribe, a page listing your feeds with copy buttons. Best for readers who don't already use one."
1549
+ msgstr "指向 /subscribe,一个列出你所有 feed 地址、带复制按钮的页面。适合还没在用阅读器的读者。"
1550
+
1347
1551
  #. @context: Label for list posts curl example
1348
1552
  #: src/ui/dash/settings/ApiTokensContent.tsx
1349
1553
  msgid "List posts:"
@@ -1369,6 +1573,11 @@ msgstr "主订阅源"
1369
1573
  msgid "Main RSS feed"
1370
1574
  msgstr "主 RSS 源"
1371
1575
 
1576
+ #. @context: Button that moves a language to the site's root address
1577
+ #: src/ui/dash/settings/LanguageContent.tsx
1578
+ msgid "Make primary"
1579
+ msgstr "设为主语言"
1580
+
1372
1581
  #. @context: Settings item label for opening the hosted account management page
1373
1582
  #: src/ui/dash/settings/AccountMenuContent.tsx
1374
1583
  msgid "Manage Account"
@@ -1439,6 +1648,31 @@ msgstr "更多操作"
1439
1648
  msgid "More options are available after you create it."
1440
1649
  msgstr "创建后可以设置更多选项。"
1441
1650
 
1651
+ #. @context: Language settings toggle for multilingual content
1652
+ #: src/ui/dash/settings/LanguageContent.tsx
1653
+ msgid "Multilingual content"
1654
+ msgstr "多语言"
1655
+
1656
+ #. @context: Toast after turning multilingual content off
1657
+ #: src/routes/dash/settings.tsx
1658
+ msgid "Multilingual content is off. Your languages are still saved."
1659
+ msgstr "多语言已关闭。你的语言设置仍然保留。"
1660
+
1661
+ #. @context: Toast after turning multilingual content on with no existing posts
1662
+ #: src/routes/dash/settings.tsx
1663
+ msgid "Multilingual content is on."
1664
+ msgstr "多语言已启用。"
1665
+
1666
+ #. @context: Toast after turning multilingual content on with existing posts
1667
+ #: src/routes/dash/settings.tsx
1668
+ msgid "Multilingual content is on. {count, plural, one {# post was marked} other {# posts were marked}} as {language}."
1669
+ msgstr "多语言已启用。{count, plural, other {# 篇帖子}}已标记为「{language}」。"
1670
+
1671
+ #. @context: Link to multilingual documentation on the Language settings page
1672
+ #: src/ui/dash/settings/LanguageContent.tsx
1673
+ msgid "Multilingual guide"
1674
+ msgstr "多语言指南"
1675
+
1442
1676
  #. @context: Clay color theme preview body
1443
1677
  #: src/ui/dash/appearance/ColorThemeContent.tsx
1444
1678
  msgid "Muted red-brown background, earthy and warm."
@@ -1451,8 +1685,8 @@ msgstr "我的合集"
1451
1685
 
1452
1686
  #. @context: Settings item description for general
1453
1687
  #: src/ui/dash/settings/SettingsRootContent.tsx
1454
- msgid "Name, metadata, language, and search defaults"
1455
- msgstr "名称、元数据、语言和搜索默认设置"
1688
+ msgid "Name, visibility, feeds, and time zone"
1689
+ msgstr "站名、可见性、订阅源与时区"
1456
1690
 
1457
1691
  #. @context: Breadcrumb label
1458
1692
  #. @context: Settings item — navigation settings
@@ -1461,6 +1695,11 @@ msgstr "名称、元数据、语言和搜索默认设置"
1461
1695
  msgid "Navigation"
1462
1696
  msgstr "导航栏"
1463
1697
 
1698
+ #. @context: Shown for a page on the site that can only be a link, such as an archive URL
1699
+ #: src/ui/dash/appearance/NavigationContent.tsx
1700
+ msgid "Navigation holds that address as a link."
1701
+ msgstr "导航将该地址作为链接保存。"
1702
+
1464
1703
  #. @context: Section heading for nav items
1465
1704
  #: src/ui/dash/appearance/NavigationContent.tsx
1466
1705
  msgid "Navigation items"
@@ -1474,7 +1713,7 @@ msgstr "导航顺序已更新。"
1474
1713
  #. @context: Toast after moving nav item between header/more
1475
1714
  #: src/ui/dash/appearance/NavigationContent.tsx
1476
1715
  msgid "Navigation placement updated."
1477
- msgstr "导航位置已更新."
1716
+ msgstr "导航位置已更新。"
1478
1717
 
1479
1718
  #. @context: Label for nav preview section
1480
1719
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -1533,15 +1772,17 @@ msgstr "还没有合集。在这里创建一个并添加到导航。"
1533
1772
  #. @context: Empty state message
1534
1773
  #: src/routes/dash/custom-urls.tsx
1535
1774
  msgid "No custom URLs yet. Create one to add redirects or custom paths for posts."
1536
- msgstr "尚无自定义 URL。创建一个以便为文章添加重定向或自定义路径。"
1775
+ msgstr "还没有自定义 URL。新建一个,给帖子加重定向或自定义路径。"
1537
1776
 
1538
1777
  #. @context: Error toast when no file was selected for upload
1539
1778
  #: src/routes/dash/settings.tsx
1540
1779
  msgid "No file selected. Choose a file to upload."
1541
1780
  msgstr "未选择文件。请选择要上传的文件。"
1542
1781
 
1543
- #. @context: Empty state shown when the language search filters out every entry
1544
- #: src/ui/dash/settings/GeneralContent.tsx
1782
+ #. @context: Empty state in the language picker
1783
+ #. @context: Empty state in the language picker
1784
+ #: src/routes/auth/setup.tsx
1785
+ #: src/ui/dash/settings/LanguageContent.tsx
1545
1786
  msgid "No matches."
1546
1787
  msgstr "无匹配结果。"
1547
1788
 
@@ -1565,6 +1806,11 @@ msgstr "没有可添加的页面。创建一个页面后即可添加到导航。
1565
1806
  msgid "No repositories match."
1566
1807
  msgstr "没有匹配的仓库。"
1567
1808
 
1809
+ #. @context: Discover status line before the site has ever announced itself. The button under the lines is how it is sent.
1810
+ #: src/ui/dash/settings/GeneralContent.tsx
1811
+ msgid "Not announced yet. No directory has been told this site exists."
1812
+ msgstr "尚未提交。还没有目录知道这个站点存在。"
1813
+
1568
1814
  #. @context: Config Editor linked setting status
1569
1815
  #. @context: Config Editor linked setting status
1570
1816
  #: src/ui/dash/settings/ConfigEditorContent.tsx
@@ -1584,20 +1830,40 @@ msgstr "尚未同步"
1584
1830
  msgid "Note"
1585
1831
  msgstr "笔记"
1586
1832
 
1833
+ #. @context: Shown when a pasted address matches no page on the site
1834
+ #: src/ui/dash/appearance/NavigationContent.tsx
1835
+ msgid "Nothing at {address}. Check it, or search by title."
1836
+ msgstr "在 {address} 没有任何内容。检查它,或按标题搜索。"
1837
+
1587
1838
  #. @context: Config Editor empty search state
1588
1839
  #: src/ui/dash/settings/ConfigEditorContent.tsx
1589
1840
  msgid "Nothing matches this search. Try a different name or description."
1590
1841
  msgstr "没有匹配此搜索的结果。试试其他名称或描述。"
1591
1842
 
1843
+ #. @context: Discover status line when the site does not meet the directory's threshold yet. Stated as jant.me's rule, because a directory of your own may decide differently.
1844
+ #: src/ui/dash/settings/GeneralContent.tsx
1845
+ msgid "Nothing published yet. jant.me lists a blog once it has {minCount, plural, one {one public post} other {# public posts}}."
1846
+ msgstr "还没有公开帖子。jant.me 的收录条件是{minCount, plural, other {满 # 篇}}。"
1847
+
1592
1848
  #. @context: Tufte color theme preview body
1593
1849
  #: src/ui/dash/appearance/ColorThemeContent.tsx
1594
1850
  msgid "Off-white paper with a deep forest-green accent."
1595
1851
  msgstr "米白纸底,配深森绿。"
1596
1852
 
1853
+ #. @context: Status badge — multilingual content is on
1854
+ #: src/ui/dash/settings/LanguageContent.tsx
1855
+ msgid "On"
1856
+ msgstr "已启用"
1857
+
1858
+ #. @context: Title of the stamping warning in the multilingual dialog
1859
+ #: src/ui/dash/settings/LanguageContent.tsx
1860
+ msgid "One-time change to your existing posts"
1861
+ msgstr "启用时会一次性标记已有帖子"
1862
+
1597
1863
  #. @context: Caption inside the manual Telegram binding fallback. {linkOpen}/{linkClose} wrap the bot username as a t.me link — keep them around the @username token in translations.
1598
1864
  #: src/ui/dash/settings/TelegramContent.tsx
1599
1865
  msgid "Open {linkOpen}@{botUsername}{linkClose} and send:"
1600
- msgstr "打开 {linkOpen}@{botUsername}{linkClose} 并发送:"
1866
+ msgstr "打开 {linkOpen}@{botUsername}{linkClose} 并发送:"
1601
1867
 
1602
1868
  #. @context: Config Editor link to a dedicated settings page
1603
1869
  #. @context: Config Editor link to a dedicated settings page
@@ -1614,18 +1880,33 @@ msgstr "打开 Telegram 以连接"
1614
1880
  #. @context: Instructions on the Telegram settings page for connecting an account
1615
1881
  #: src/ui/dash/settings/TelegramContent.tsx
1616
1882
  msgid "Open the bot and send the binding code, then anything you message it becomes a note."
1617
- msgstr "打开机器人并发送绑定码, 然后你发送给它的任何消息都会变成一条笔记。"
1883
+ msgstr "打开机器人并发送绑定码,然后你发送给它的任何消息都会变成一条笔记。"
1884
+
1885
+ #. @context: Accessible label on a language row's actions menu trigger
1886
+ #: src/ui/dash/settings/LanguageContent.tsx
1887
+ msgid "Options for {language}"
1888
+ msgstr "{language}的操作"
1618
1889
 
1619
1890
  #. @context: Separator between the QR code and the deep-link button on the Telegram connect page
1620
1891
  #: src/ui/dash/settings/TelegramContent.tsx
1621
1892
  msgid "or"
1622
1893
  msgstr "或"
1623
1894
 
1895
+ #. @context: Link to the directory's manual submission form, shown only when the automatic announcement failed
1896
+ #: src/ui/dash/settings/GeneralContent.tsx
1897
+ msgid "Or submit your address by hand"
1898
+ msgstr "或手动提交地址"
1899
+
1624
1900
  #. @context: Ember color theme preview body
1625
1901
  #: src/ui/dash/appearance/ColorThemeContent.tsx
1626
1902
  msgid "Orange-tinted background. The warmest palette."
1627
1903
  msgstr "带橘调的底色。最暖的一套。"
1628
1904
 
1905
+ #. @context: Label for the list of non-primary languages
1906
+ #: src/ui/dash/settings/LanguageContent.tsx
1907
+ msgid "Other languages"
1908
+ msgstr "其他语言"
1909
+
1629
1910
  #. @context: GitHub sync picker — placeholder text showing the expected input shape
1630
1911
  #: src/routes/dash/settings.tsx
1631
1912
  msgid "owner/repo"
@@ -1673,6 +1954,8 @@ msgstr "调色板、表面色调与整体氛围"
1673
1954
 
1674
1955
  #. @context: Breadcrumb label
1675
1956
  #. @context: Settings item — password settings
1957
+ #. @context: Setup/signin form field - password
1958
+ #: src/routes/auth/setup.tsx
1676
1959
  #: src/routes/dash/settings.tsx
1677
1960
  #: src/ui/dash/settings/AccountMenuContent.tsx
1678
1961
  msgid "Password"
@@ -1681,7 +1964,7 @@ msgstr "密码"
1681
1964
  #. @context: Toast after changing account password
1682
1965
  #: src/routes/dash/settings.tsx
1683
1966
  msgid "Password changed."
1684
- msgstr "密码已更改."
1967
+ msgstr "密码已更改。"
1685
1968
 
1686
1969
  #. @context: Error shown when password changes are blocked in demo mode
1687
1970
  #: src/routes/dash/settings.tsx
@@ -1738,13 +2021,33 @@ msgstr "已置顶"
1738
2021
  #: src/routes/dash/custom-urls.tsx
1739
2022
  #: src/routes/dash/custom-urls.tsx
1740
2023
  msgid "Post"
1741
- msgstr "文章"
2024
+ msgstr "帖子"
2025
+
2026
+ #. @context: Reassurance line at the bottom of the multilingual dialog
2027
+ #: src/ui/dash/settings/LanguageContent.tsx
2028
+ msgid "Post addresses do not change, and you can turn this off again at any time."
2029
+ msgstr "所有帖子的地址都不会改变,也可以随时再关闭。"
1742
2030
 
1743
2031
  #. @context: Settings item description for Telegram integration
1744
2032
  #: src/ui/dash/settings/SettingsRootContent.tsx
1745
2033
  msgid "Post notes by messaging a Telegram bot"
1746
2034
  msgstr "通过向 Telegram 机器人发送消息来发布笔记"
1747
2035
 
2036
+ #. @context: Badge on the language served at the root address
2037
+ #: src/ui/dash/settings/LanguageContent.tsx
2038
+ msgid "Primary"
2039
+ msgstr "主语言"
2040
+
2041
+ #. @context: Label the content language field takes once multilingual is on
2042
+ #: src/ui/dash/settings/LanguageContent.tsx
2043
+ msgid "Primary language"
2044
+ msgstr "主语言"
2045
+
2046
+ #. @context: Toast after changing the primary language
2047
+ #: src/routes/dash/settings.tsx
2048
+ msgid "Primary language changed."
2049
+ msgstr "主语言已更改。"
2050
+
1748
2051
  #. @context: GitHub sync picker — badge next to private repos
1749
2052
  #: src/routes/dash/settings.tsx
1750
2053
  msgid "Private"
@@ -1778,28 +2081,18 @@ msgstr "纯白底配中性灰。不带任何色偏。"
1778
2081
  #. @context: Description for manual push action on GitHub Sync settings
1779
2082
  #: src/ui/dash/settings/GitHubSyncContent.tsx
1780
2083
  msgid "Push all posts to GitHub right now instead of waiting for the next automatic sync."
1781
- msgstr "立即将所有文章推送到 GitHub,而不是等待下一次自动同步。"
2084
+ msgstr "立即将所有帖子推送到 GitHub,而不是等待下一次自动同步。"
1782
2085
 
1783
2086
  #. @context: Accessible label for the Telegram connect QR code
1784
2087
  #: src/ui/dash/settings/TelegramContent.tsx
1785
2088
  msgid "QR code linking to the Telegram bot"
1786
2089
  msgstr "链接到 Telegram 机器人的二维码"
1787
2090
 
1788
- #. @context: Archive custom URL query params field
1789
- #: src/routes/dash/custom-urls.tsx
1790
- msgid "Query Parameters"
1791
- msgstr "查询参数"
1792
-
1793
2091
  #. @context: Post format badge - quote
1794
2092
  #: src/ui/dash/FormatBadge.tsx
1795
2093
  msgid "Quote"
1796
2094
  msgstr "引用"
1797
2095
 
1798
- #. @context: Lead text before a live <html lang> preview of the content language
1799
- #: src/ui/dash/settings/GeneralContent.tsx
1800
- msgid "Readers and search engines see"
1801
- msgstr "读者和搜索引擎看到的是"
1802
-
1803
2096
  #. @context: Heading above recent pages in the page picker
1804
2097
  #: src/ui/dash/appearance/NavigationContent.tsx
1805
2098
  msgid "Recently updated"
@@ -1834,6 +2127,16 @@ msgstr "刷新仓库列表"
1834
2127
  msgid "Remove"
1835
2128
  msgstr "移除"
1836
2129
 
2130
+ #. @context: Accessible label on the button removing a language
2131
+ #: src/ui/dash/settings/LanguageContent.tsx
2132
+ msgid "Remove {language}"
2133
+ msgstr "移除「{language}」"
2134
+
2135
+ #. @context: Confirm button when removing the last additional language
2136
+ #: src/ui/dash/settings/LanguageContent.tsx
2137
+ msgid "Remove and turn off"
2138
+ msgstr "移除并关闭"
2139
+
1837
2140
  #. @context: Button to remove the saved Telegram bot token
1838
2141
  #: src/ui/dash/settings/TelegramContent.tsx
1839
2142
  msgid "Remove bot"
@@ -1847,7 +2150,7 @@ msgstr "删除保存的机器人令牌?其 webhook 会被删除,任何已连
1847
2150
  #. @context: Description for disconnect action on GitHub Sync settings
1848
2151
  #: src/ui/dash/settings/GitHubSyncContent.tsx
1849
2152
  msgid "Remove the webhook and stop syncing. Your repository content will not be deleted."
1850
- msgstr "移除 webhook 并停止同步。您的仓库内容不会被删除。"
2153
+ msgstr "移除 webhook 并停止同步。你的仓库内容不会被删除。"
1851
2154
 
1852
2155
  #. @context: Confirm dialog for removing the blog avatar
1853
2156
  #: src/ui/dash/settings/AvatarContent.tsx
@@ -1893,7 +2196,7 @@ msgstr "撤销"
1893
2196
  #. @context: Confirm dialog for revoking an active session
1894
2197
  #: src/ui/dash/settings/SessionsContent.tsx
1895
2198
  msgid "Revoke this session? That device will need to sign in again."
1896
- msgstr "撤销此会话? 该设备需要重新登录."
2199
+ msgstr "撤销此会话?该设备需要重新登录。"
1897
2200
 
1898
2201
  #. @context: Confirm dialog for revoking API token
1899
2202
  #: src/ui/dash/settings/ApiTokensContent.tsx
@@ -1914,10 +2217,12 @@ msgstr "沙色底,配绿色点缀。"
1914
2217
  #. @context: Button to save settings
1915
2218
  #. @context: Button to save settings changes
1916
2219
  #. @context: Save nav item changes
2220
+ #. @context: Settings save button
1917
2221
  #: src/ui/dash/appearance/CodeInjectionContent.tsx
1918
2222
  #: src/ui/dash/appearance/NavigationContent.tsx
1919
2223
  #: src/ui/dash/settings/AvatarContent.tsx
1920
2224
  #: src/ui/dash/settings/GeneralContent.tsx
2225
+ #: src/ui/dash/settings/LanguageContent.tsx
1921
2226
  msgid "Save"
1922
2227
  msgstr "保存"
1923
2228
 
@@ -1937,25 +2242,32 @@ msgid "Saved"
1937
2242
  msgstr "已保存"
1938
2243
 
1939
2244
  #. @context: Config Editor row save status
2245
+ #. @context: Settings save in progress
1940
2246
  #: src/ui/dash/settings/ConfigEditorContent.tsx
2247
+ #: src/ui/dash/settings/LanguageContent.tsx
1941
2248
  msgid "Saving…"
1942
2249
  msgstr "正在保存…"
1943
2250
 
1944
- #. @context: Settings section heading for search engine indexing settings
1945
- #: src/ui/dash/settings/GeneralContent.tsx
1946
- msgid "Search"
1947
- msgstr "搜索"
1948
-
1949
2251
  #. @context: Config Editor page description
1950
2252
  #: src/ui/dash/settings/ConfigEditorContent.tsx
1951
2253
  msgid "Search and edit runtime settings. Changes apply immediately; reset restores the environment or built-in default."
1952
2254
  msgstr "搜索和编辑运行时设置。更改会立即生效;重置会恢复环境变量或内置默认值。"
1953
2255
 
2256
+ #. @context: Shown under the Jant Discover checkbox when the site has turned search engines away and has never answered Discover itself, which is what unticks the box. Says why the box moved, and that it is still the owner's to tick.
2257
+ #: src/ui/dash/settings/GeneralContent.tsx
2258
+ msgid "Search engine indexing is off, so this site is not listed by default. Ticking the box above lists it anyway."
2259
+ msgstr "已关闭搜索引擎索引,所以默认不出现在 Jant Discover。勾选上面的选项仍会加入。"
2260
+
1954
2261
  #. @context: Placeholder for the navigation page search
1955
2262
  #: src/ui/dash/appearance/NavigationContent.tsx
1956
2263
  msgid "Search pages"
1957
2264
  msgstr "搜索页面"
1958
2265
 
2266
+ #. @context: Placeholder for the navigation page search, which also accepts a pasted URL or path
2267
+ #: src/ui/dash/appearance/NavigationContent.tsx
2268
+ msgid "Search pages, or paste an address"
2269
+ msgstr "搜索页面,或粘贴地址"
2270
+
1959
2271
  #. @context: GitHub sync picker — search input placeholder
1960
2272
  #: src/routes/dash/settings.tsx
1961
2273
  msgid "Search repositories"
@@ -1980,8 +2292,10 @@ msgstr "搜索设置"
1980
2292
  msgid "Search settings updated."
1981
2293
  msgstr "搜索设置已更新。"
1982
2294
 
1983
- #. @context: Placeholder inside the language combobox search field
1984
- #: src/ui/dash/settings/GeneralContent.tsx
2295
+ #. @context: Placeholder in the language picker search box
2296
+ #. @context: Placeholder in the language picker search box
2297
+ #: src/routes/auth/setup.tsx
2298
+ #: src/ui/dash/settings/LanguageContent.tsx
1985
2299
  msgid "Search…"
1986
2300
  msgstr "搜索…"
1987
2301
 
@@ -2047,6 +2361,11 @@ msgstr "设置每页搜索结果数;重置后继承默认分页大小。"
2047
2361
  msgid "Set the default number of items shown per page."
2048
2362
  msgstr "设置默认每页显示的条目数。"
2049
2363
 
2364
+ #. @context: Setup heading on the second self-hosted screen, which asks for the site's name and language
2365
+ #: src/routes/auth/setup.tsx
2366
+ msgid "Set up your site"
2367
+ msgstr "设置你的站点"
2368
+
2050
2369
  #. @context: Breadcrumb label
2051
2370
  #. @context: Page title for the settings home page
2052
2371
  #: src/routes/dash/settings.tsx
@@ -2054,6 +2373,11 @@ msgstr "设置默认每页显示的条目数。"
2054
2373
  msgid "Settings"
2055
2374
  msgstr "设置"
2056
2375
 
2376
+ #. @context: Name of the first-run setup screen — shown above the setup card and as the browser tab title
2377
+ #: src/routes/auth/setup.tsx
2378
+ msgid "Setup"
2379
+ msgstr "初始设置"
2380
+
2057
2381
  #. @context: Checkbox for showing the optional Jant credit link on the home page
2058
2382
  #: src/ui/dash/settings/GeneralContent.tsx
2059
2383
  msgid "Show \"Build with Jant\" at the bottom of the home page"
@@ -2084,6 +2408,11 @@ msgstr "在公共页眉中显示站点头像。"
2084
2408
  msgid "Showing {shown} of {total}"
2085
2409
  msgstr "显示 {shown} 共 {total}"
2086
2410
 
2411
+ #. @context: Description for the settings system navigation toggle
2412
+ #: src/ui/dash/appearance/system-nav-descriptions.ts
2413
+ msgid "Shows 'Settings' when logged in, 'Sign in' when logged out"
2414
+ msgstr "登录后显示「设置」,未登录时显示「登录」。"
2415
+
2087
2416
  #. @context: Settings link — sign out action
2088
2417
  #: src/ui/dash/settings/SettingsRootContent.tsx
2089
2418
  msgid "Sign Out"
@@ -2099,9 +2428,11 @@ msgstr "登录、导出和删除"
2099
2428
  msgid "Signed in {date}"
2100
2429
  msgstr "于 {date} 登录"
2101
2430
 
2431
+ #. @context: Language settings section for reader-facing settings
2102
2432
  #. @context: Settings group label for site settings
2103
2433
  #. @context: Settings subsection heading for basic site fields
2104
2434
  #: src/ui/dash/settings/GeneralContent.tsx
2435
+ #: src/ui/dash/settings/LanguageContent.tsx
2105
2436
  #: src/ui/dash/settings/SettingsRootContent.tsx
2106
2437
  msgid "Site"
2107
2438
  msgstr "站点"
@@ -2119,6 +2450,8 @@ msgid "Site Header"
2119
2450
  msgstr "网站头部"
2120
2451
 
2121
2452
  #. @context: Settings form field
2453
+ #. @context: Setup form field - site name
2454
+ #: src/routes/auth/setup.tsx
2122
2455
  #: src/ui/dash/settings/GeneralContent.tsx
2123
2456
  msgid "Site Name"
2124
2457
  msgstr "站点名称"
@@ -2126,7 +2459,19 @@ msgstr "站点名称"
2126
2459
  #. @context: Toast after saving site settings
2127
2460
  #: src/routes/dash/settings.tsx
2128
2461
  msgid "Site settings updated."
2129
- msgstr "站点设置已更新."
2462
+ msgstr "站点设置已更新。"
2463
+
2464
+ #. @context: Settings section heading covering search engine indexing and the Jant Discover directory
2465
+ #: src/ui/dash/settings/GeneralContent.tsx
2466
+ msgid "Site visibility"
2467
+ msgstr "站点可见性"
2468
+
2469
+ #. @context: Toast after saving the site visibility settings
2470
+ #. @context: Toast after saving the site visibility settings
2471
+ #: src/routes/dash/settings.tsx
2472
+ #: src/routes/dash/settings.tsx
2473
+ msgid "Site visibility updated."
2474
+ msgstr "站点可见性已更新。"
2130
2475
 
2131
2476
  #. @context: Settings item description for code injection
2132
2477
  #: src/ui/dash/settings/SettingsRootContent.tsx
@@ -2148,16 +2493,36 @@ msgstr "柔绿"
2148
2493
  msgid "Soft ivory"
2149
2494
  msgstr "柔象牙白"
2150
2495
 
2496
+ #. @context: Fallback validation error for setup form
2497
+ #: src/routes/auth/setup.tsx
2498
+ msgid "Something doesn't look right. Check the form and try again."
2499
+ msgstr "有内容填写不正确,检查后重试。"
2500
+
2501
+ #. @context: Setup submit button on the last screen, after which the site is live
2502
+ #: src/routes/auth/setup.tsx
2503
+ msgid "Start writing"
2504
+ msgstr "开始写作"
2505
+
2506
+ #. @context: How far along first-run setup is, shown beside the screen's name on a self-hosted install
2507
+ #: src/routes/auth/setup.tsx
2508
+ msgid "Step {current} of {total}"
2509
+ msgstr "第 {current} 步,共 {total} 步"
2510
+
2151
2511
  #. @context: Description for the Telegram disconnect action
2152
2512
  #: src/ui/dash/settings/TelegramContent.tsx
2153
2513
  msgid "Stop accepting posts from Telegram. Your existing notes stay published."
2154
- msgstr "停止接受来自 Telegram 的帖子。您的现有笔记将保持已发布。"
2514
+ msgstr "停止接受来自 Telegram 的帖子。你的现有笔记将保持已发布。"
2155
2515
 
2156
2516
  #. @context: Section heading for suggested nav links
2157
2517
  #: src/ui/dash/appearance/NavigationContent.tsx
2158
2518
  msgid "Suggested links"
2159
2519
  msgstr "建议添加的链接"
2160
2520
 
2521
+ #. @context: Confirm button in the change-primary-language dialog
2522
+ #: src/ui/dash/settings/LanguageContent.tsx
2523
+ msgid "Switch"
2524
+ msgstr "切换"
2525
+
2161
2526
  #. @context: Button to trigger a full content push to GitHub on GitHub Sync settings
2162
2527
  #: src/ui/dash/settings/GitHubSyncContent.tsx
2163
2528
  msgid "Sync Now"
@@ -2199,6 +2564,11 @@ msgstr "Telegram 已设置,但无法连接到机器人。请检查机器人令
2199
2564
  msgid "That address is already in use. Choose another one."
2200
2565
  msgstr "此地址已被使用。请选择其他地址。"
2201
2566
 
2567
+ #. @context: Shown when a pasted address points off the site
2568
+ #: src/ui/dash/appearance/NavigationContent.tsx
2569
+ msgid "That address is on another site. Navigation holds it as a link."
2570
+ msgstr "该地址在另一个网站上。Navigation 将其保留为链接。"
2571
+
2202
2572
  #. @context: Validation error for a reserved page slug
2203
2573
  #: src/ui/dash/appearance/NavigationContent.tsx
2204
2574
  msgid "That address is reserved. Choose another one."
@@ -2209,6 +2579,21 @@ msgstr "此地址为保留地址。请选择其他地址。"
2209
2579
  msgid "That font theme isn't available. Pick another one."
2210
2580
  msgstr "该字体主题不可用。请选择另一个。"
2211
2581
 
2582
+ #. @context: Shown when a pasted address resolves to an untitled post
2583
+ #: src/ui/dash/appearance/NavigationContent.tsx
2584
+ msgid "That page has no title yet, so a menu has nothing to show."
2585
+ msgstr "该页面尚无标题,因此菜单没有可显示的内容。"
2586
+
2587
+ #. @context: Shown when a pasted address resolves to a draft
2588
+ #: src/ui/dash/appearance/NavigationContent.tsx
2589
+ msgid "That page is a draft. Publish it, then add it."
2590
+ msgstr "该页面是草稿 (未发布内容)。先发布它,然后再添加。"
2591
+
2592
+ #. @context: Shown when a pasted address resolves to a private page
2593
+ #: src/ui/dash/appearance/NavigationContent.tsx
2594
+ msgid "That page is private, so nobody could open it from a menu."
2595
+ msgstr "该页面是私有的,因此任何人都无法通过菜单打开它。"
2596
+
2212
2597
  #. @context: Error toast when selected theme is not valid
2213
2598
  #: src/routes/dash/settings.tsx
2214
2599
  msgid "That theme isn't available. Pick another one."
@@ -2224,20 +2609,35 @@ msgstr "最干净、最中性的一档。"
2224
2609
  msgid "The default. Calm and easy for long reading."
2225
2610
  msgstr "默认主题。沉静,适合长时间阅读。"
2226
2611
 
2227
- #. @context: Help text under the dashboard language picker
2612
+ #. @context: Discover status line when the announcement failed. {reason} is the error, such as an HTTP status or a network message.
2228
2613
  #: src/ui/dash/settings/GeneralContent.tsx
2229
- msgid "The language this admin dashboard shows in. Available in English, 简体中文, and 繁體中文."
2230
- msgstr "后台界面显示的语言。可选 English、简体中文 和 繁體中文。"
2614
+ msgid "The directory could not be reached: {reason}"
2615
+ msgstr "无法连接目录:{reason}"
2616
+
2617
+ #. @context: Help text for the dashboard language field
2618
+ #: src/ui/dash/settings/LanguageContent.tsx
2619
+ msgid "The language of your admin pages. Only you see this."
2620
+ msgstr "管理后台的显示语言,只有你能看到。"
2231
2621
 
2232
2622
  #. @context: Config Editor setting description
2233
2623
  #: src/ui/dash/settings/ConfigEditorContent.tsx
2234
2624
  msgid "The language used by the private Jant dashboard."
2235
2625
  msgstr "私有 Jant 仪表板使用的语言。"
2236
2626
 
2237
- #. @context: Help text under the content language picker
2238
- #: src/ui/dash/settings/GeneralContent.tsx
2239
- msgid "The language your posts are written in. Announced to readers and search engines through HTML lang and your RSS feed. Any BCP 47 tag works."
2240
- msgstr "你撰写内容所用的语言。通过 HTML lang 和 RSS 向读者与搜索引擎声明。支持任意 BCP 47 标签。"
2627
+ #. @context: Help text for the content language field
2628
+ #: src/ui/dash/settings/LanguageContent.tsx
2629
+ msgid "The language you write in."
2630
+ msgstr "你写作使用的语言。"
2631
+
2632
+ #. @context: Setup form help text under the content language field
2633
+ #: src/routes/auth/setup.tsx
2634
+ msgid "The language your readers and search engines see."
2635
+ msgstr "搜索引擎看到的语言。"
2636
+
2637
+ #. @context: Config Editor linked setting description
2638
+ #: src/ui/dash/settings/ConfigEditorContent.tsx
2639
+ msgid "The languages served under a URL prefix. Managed on the Language page."
2640
+ msgstr "以 URL 前缀提供的语言。在「语言」页管理。"
2241
2641
 
2242
2642
  #. @context: Linen color theme preview help line
2243
2643
  #: src/ui/dash/appearance/ColorThemeContent.tsx
@@ -2249,15 +2649,20 @@ msgstr "Jant 最初的配色,日常稳妥之选。"
2249
2649
  msgid "The page is public but stays out of Latest."
2250
2650
  msgstr "页面是公开的,但不会出现在 Latest。"
2251
2651
 
2252
- #. @context: Config Editor setting description
2253
- #: src/ui/dash/settings/ConfigEditorContent.tsx
2254
- msgid "The serif fallback used when the content language has no built-in profile."
2255
- msgstr "当内容语言没有内置配置时使用的衬线回退字体。"
2652
+ #. @context: Help text for the primary language field
2653
+ #: src/ui/dash/settings/LanguageContent.tsx
2654
+ msgid "The root address (/, /feed) shows this language."
2655
+ msgstr "根地址(/、/feed)显示这个语言的内容。"
2656
+
2657
+ #. @context: Body of the disable-multilingual dialog
2658
+ #: src/ui/dash/settings/LanguageContent.tsx
2659
+ msgid "The root address goes back to showing every language, and addresses like {prefix} redirect to it, so existing links and feed subscriptions keep working. Post addresses and each post's language are unchanged, so you can turn this back on any time."
2660
+ msgstr "根地址将恢复显示所有语言,{prefix} 这类地址会重定向到它,已有的链接和订阅仍然有效。帖子地址和每篇帖子的语言都不受影响,随时可以重新启用。"
2256
2661
 
2257
2662
  #. @context: Custom URL target slug help text
2258
2663
  #: src/routes/dash/custom-urls.tsx
2259
2664
  msgid "The slug of the target post or collection"
2260
- msgstr "目标文章或合集的 slug"
2665
+ msgstr "目标帖子或合集的 slug"
2261
2666
 
2262
2667
  #. @context: Config Editor setting description
2263
2668
  #: src/ui/dash/settings/ConfigEditorContent.tsx
@@ -2272,7 +2677,7 @@ msgstr "主题指南"
2272
2677
  #. @context: Description for session management
2273
2678
  #: src/ui/dash/settings/SessionsContent.tsx
2274
2679
  msgid "These devices are currently signed in to your account. Revoke any session you don't recognize."
2275
- msgstr "以下设备当前已登录到您的帐户。撤销任何您不认识的会话。"
2680
+ msgstr "以下设备当前已登录到你的账户。撤销任何你不认识的会话。"
2276
2681
 
2277
2682
  #. @context: Generic fallback blog name in the delete-account confirmation phrase when the site name is unavailable
2278
2683
  #: src/ui/dash/settings/DeleteAccountContent.tsx
@@ -2282,7 +2687,7 @@ msgstr "此博客"
2282
2687
  #. @context: Code Injection security warning headline
2283
2688
  #: src/ui/dash/appearance/CodeInjectionContent.tsx
2284
2689
  msgid "This code runs on every page of your site."
2285
- msgstr "此代码将在您网站的每个页面上运行。"
2690
+ msgstr "此代码将在你网站的每个页面上运行。"
2286
2691
 
2287
2692
  #. @context: Help text for choosing whether /feed points to latest or featured posts
2288
2693
  #: src/ui/dash/settings/GeneralContent.tsx
@@ -2302,7 +2707,7 @@ msgstr "这是合集链接的最后一部分。"
2302
2707
  #. @context: Help text for avatar upload
2303
2708
  #: src/ui/dash/settings/AvatarContent.tsx
2304
2709
  msgid "This is used for your favicon and apple-touch-icon. For best results, upload a square PNG with a solid background at least 512x512 pixels."
2305
- msgstr "此图用于您的 favicon 和 apple-touch-icon。为获得最佳效果,请上传至少 512×512 像素、纯色背景的方形 PNG。"
2710
+ msgstr "此图用于你的 favicon 和 apple-touch-icon。为获得最佳效果,请上传至少 512×512 像素、纯色背景的方形 PNG。"
2306
2711
 
2307
2712
  #. @context: Reserved collection slug error in Navigation settings
2308
2713
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -2339,16 +2744,41 @@ msgstr "此仓库已在备份此站点。"
2339
2744
  msgid "This setting wasn't saved. Check the value and try again."
2340
2745
  msgstr "此设置未保存。请检查该值并重试。"
2341
2746
 
2747
+ #. @context: Toast when the Discover announcement cannot be sent because no directory is configured, or the site cannot be listed at all
2748
+ #: src/routes/dash/settings.tsx
2749
+ msgid "This site has no directory to announce to."
2750
+ msgstr "这个站点没有可提交的目录。"
2751
+
2752
+ #. @context: Discover status line for a site that chose the old featured-only mode and has no featured posts. Says how to move to the current setting, which reads every public post.
2753
+ #: src/ui/dash/settings/GeneralContent.tsx
2754
+ msgid "This site still limits Discover to featured posts, and no post is marked Featured, so your feed carries nothing to show. Untick and tick the box to let Discover read every public post."
2755
+ msgstr "当前仍只向 Discover 提供精选帖子,但没有任何帖子标为 Featured,订阅源里没有可展示的内容。取消勾选再重新勾选,即可让 Discover 读取全部公开帖子。"
2756
+
2342
2757
  #. @context: Warning text on account deletion page
2343
2758
  #: src/ui/dash/settings/DeleteAccountContent.tsx
2344
2759
  msgid "This will permanently delete all your data — posts, media, collections, settings, and your account. Your blog will be reset to its initial setup state. This cannot be undone."
2345
- msgstr "这将永久删除您所有的数据 — 帖子、媒体、合集、设置和您的账户。您的博客将重置为初始设置状态。此操作不可撤销。"
2760
+ msgstr "这会永久删除你的全部数据——帖子、媒体、合集、设置和账户。博客会重置为初始设置状态。此操作无法撤销。"
2761
+
2762
+ #. @context: Config Editor archive layout enum option
2763
+ #: src/ui/dash/settings/ConfigEditorContent.tsx
2764
+ msgid "Tile grid"
2765
+ msgstr "卡片网格"
2766
+
2767
+ #. @context: Settings subsection heading for the time zone field
2768
+ #: src/ui/dash/settings/GeneralContent.tsx
2769
+ msgid "Time"
2770
+ msgstr "时间"
2346
2771
 
2347
2772
  #. @context: Settings form field
2348
2773
  #: src/ui/dash/settings/GeneralContent.tsx
2349
2774
  msgid "Time Zone"
2350
2775
  msgstr "时区"
2351
2776
 
2777
+ #. @context: Toast after saving the time zone
2778
+ #: src/routes/dash/settings.tsx
2779
+ msgid "Time zone updated."
2780
+ msgstr "时区已更新。"
2781
+
2352
2782
  #. @context: Collection title field in Navigation settings
2353
2783
  #. @context: Title field label in quick page creation
2354
2784
  #: src/ui/dash/appearance/NavigationContent.tsx
@@ -2369,7 +2799,7 @@ msgstr "令牌名称"
2369
2799
  #. @context: API tokens description
2370
2800
  #: src/ui/dash/settings/ApiTokensContent.tsx
2371
2801
  msgid "Tokens let you access the API from scripts, shortcuts, and other tools without signing in."
2372
- msgstr "令牌让您无需登录即可从脚本、快捷方式和其他工具访问 API。"
2802
+ msgstr "令牌让你无需登录即可从脚本、快捷方式和其他工具访问 API。"
2373
2803
 
2374
2804
  #. @context: GitHub sync picker — retry button
2375
2805
  #: src/routes/dash/settings.tsx
@@ -2381,6 +2811,28 @@ msgstr "重试"
2381
2811
  msgid "Tune how your site looks, reads, and runs."
2382
2812
  msgstr "调整你的网站的外观、阅读体验和运行方式。"
2383
2813
 
2814
+ #. @context: Confirm button in the disable-multilingual dialog
2815
+ #: src/ui/dash/settings/LanguageContent.tsx
2816
+ msgid "Turn off"
2817
+ msgstr "关闭"
2818
+
2819
+ #. @context: Title of the dialog confirming removal of the last additional language
2820
+ #. @context: Title of the disable-multilingual dialog
2821
+ #: src/ui/dash/settings/LanguageContent.tsx
2822
+ #: src/ui/dash/settings/LanguageContent.tsx
2823
+ msgid "Turn off multilingual content?"
2824
+ msgstr "关闭多语言?"
2825
+
2826
+ #. @context: Link in the multilingual section that opens the setup dialog
2827
+ #: src/ui/dash/settings/LanguageContent.tsx
2828
+ msgid "Turn on"
2829
+ msgstr "启用"
2830
+
2831
+ #. @context: Title of the dialog that configures languages and turns multilingual on
2832
+ #: src/ui/dash/settings/LanguageContent.tsx
2833
+ msgid "Turn on multilingual content"
2834
+ msgstr "启用多语言"
2835
+
2384
2836
  #. @context: Custom URL form field
2385
2837
  #: src/routes/dash/custom-urls.tsx
2386
2838
  msgid "Type"
@@ -2414,7 +2866,7 @@ msgstr "未知设备"
2414
2866
  #. @context: Settings item description for password change
2415
2867
  #: src/ui/dash/settings/AccountMenuContent.tsx
2416
2868
  msgid "Update the password you use to sign in"
2417
- msgstr "更新您用于登录的密码"
2869
+ msgstr "更新你用于登录的密码"
2418
2870
 
2419
2871
  #. @context: Button to upload avatar image
2420
2872
  #: src/ui/dash/settings/AvatarContent.tsx
@@ -2446,6 +2898,11 @@ msgstr "正在上传..."
2446
2898
  msgid "URL"
2447
2899
  msgstr "网址"
2448
2900
 
2901
+ #. @context: Description of the multilingual documentation link
2902
+ #: src/ui/dash/settings/LanguageContent.tsx
2903
+ msgid "URL structure, per-language feeds, and linking translations."
2904
+ msgstr "URL 结构、每种语言的订阅源,以及译本关联。"
2905
+
2449
2906
  #. @context: Heading for API token usage examples
2450
2907
  #: src/ui/dash/settings/ApiTokensContent.tsx
2451
2908
  msgid "Usage"
@@ -2466,15 +2923,10 @@ msgstr "使用小写字母、数字和连字符。"
2466
2923
  msgid "Use these when you want a feed URL that never changes."
2467
2924
  msgstr "当你想要一个永远不变的订阅源 URL 时使用它们。"
2468
2925
 
2469
- #. @context: Help text for the manual CJK font fallback setting
2470
- #: src/ui/dash/settings/GeneralContent.tsx
2471
- msgid "Used when the content language has no built-in font profile. Your font theme still controls serif and sans styling."
2472
- msgstr "当内容语言没有内置字体配置时使用。字体主题仍会决定衬线和无衬线样式。"
2473
-
2474
2926
  #. @context: Description for choosing featured posts as the main RSS feed
2475
2927
  #: src/ui/dash/settings/GeneralContent.tsx
2476
2928
  msgid "Uses featured posts for /feed."
2477
- msgstr "将精选文章用于 /feed。"
2929
+ msgstr "将 Featured 帖子用于 /feed。"
2478
2930
 
2479
2931
  #. @context: Description for choosing the latest posts as the main RSS feed
2480
2932
  #: src/ui/dash/settings/GeneralContent.tsx
@@ -2491,6 +2943,11 @@ msgstr "极浅的象牙底,配淡淡的茶绿。"
2491
2943
  msgid "View"
2492
2944
  msgstr "查看"
2493
2945
 
2946
+ #. @context: Link in the cannot-remove-language error, leading to that language's archive
2947
+ #: src/ui/dash/settings/LanguageContent.tsx
2948
+ msgid "View these posts"
2949
+ msgstr "查看这些帖子"
2950
+
2494
2951
  #. @context: Prefix before Custom CSS link on color theme page
2495
2952
  #: src/ui/dash/appearance/ColorThemeContent.tsx
2496
2953
  msgid "Want more control?"
@@ -2561,6 +3018,16 @@ msgstr "暖中性,适合长读。"
2561
3018
  msgid "We'll prefill the name {name}. The list refreshes on return."
2562
3019
  msgstr "我们会预先填充名称 {name}。返回时列表会刷新。"
2563
3020
 
3021
+ #. @context: Setup page welcome heading
3022
+ #: src/routes/auth/setup.tsx
3023
+ msgid "Welcome to Jant"
3024
+ msgstr "欢迎使用 Jant"
3025
+
3026
+ #. @context: Setup heading on a hosted site, where the language is all that is left to ask
3027
+ #: src/routes/auth/setup.tsx
3028
+ msgid "What language do you write in?"
3029
+ msgstr "你写作的主要语言是?"
3030
+
2564
3031
  #. @context: Description for backup and restore documentation link in account settings
2565
3032
  #: src/ui/dash/settings/AccountMenuContent.tsx
2566
3033
  msgid "When to use site export, database backups, and recovery drills."
@@ -2571,6 +3038,16 @@ msgstr "何时使用站点导出、数据库备份和恢复演练。"
2571
3038
  msgid "When you want a cooler, sharper look."
2572
3039
  msgstr "想要更冷、更利落的观感时。"
2573
3040
 
3041
+ #. @context: Config Editor linked setting description
3042
+ #: src/ui/dash/settings/ConfigEditorContent.tsx
3043
+ msgid "Whether each language gets its own home page, archive, and feed. Managed on the Language page."
3044
+ msgstr "每种语言是否拥有独立的首页、归档和订阅源。在「语言」页管理。"
3045
+
3046
+ #. @context: Config Editor setting description
3047
+ #: src/ui/dash/settings/ConfigEditorContent.tsx
3048
+ msgid "Which layout /archive opens with. Readers can switch layouts from the page."
3049
+ msgstr "/archive 打开时用哪种版式。读者可以在页面上自行切换。"
3050
+
2574
3051
  #. @context: Config Editor setting description
2575
3052
  #: src/ui/dash/settings/ConfigEditorContent.tsx
2576
3053
  msgid "Which post stream the canonical /feed URL returns."
@@ -2581,6 +3058,11 @@ msgstr "规范的 /feed URL 返回哪个帖子流。"
2581
3058
  msgid "Yellow-tinted paper with an olive-green accent."
2582
3059
  msgstr "微黄的纸底,配橄榄绿。"
2583
3060
 
3061
+ #. @context: Note at the foot of the last setup screen, after the submit button
3062
+ #: src/routes/auth/setup.tsx
3063
+ msgid "You can change all of this later in Settings."
3064
+ msgstr "之后可以在设置中更改。"
3065
+
2584
3066
  #. @context: Fallback name when a connected Telegram account has no username
2585
3067
  #: src/ui/dash/settings/TelegramContent.tsx
2586
3068
  msgid "your Telegram account"