@jant/core 0.3.27 → 0.3.28

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