@allbluecn/admin-app 0.1.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 (276) hide show
  1. package/package.json +86 -0
  2. package/src/client.tsx +31 -0
  3. package/src/components/admin/admin-user-menu.tsx +90 -0
  4. package/src/components/admin/developer-log.tsx +356 -0
  5. package/src/components/ai-provider/model-list-editor.tsx +147 -0
  6. package/src/components/ai-provider/provider-form.tsx +434 -0
  7. package/src/components/ai-provider/provider-icon.tsx +43 -0
  8. package/src/components/ai-provider/provider-logo.tsx +87 -0
  9. package/src/components/ai-provider/provider-table.tsx +258 -0
  10. package/src/components/auth/admin-login-form.tsx +214 -0
  11. package/src/components/auth/auth-brand-panel.tsx +60 -0
  12. package/src/components/auth/auth-header.tsx +38 -0
  13. package/src/components/auth/auth-layout.tsx +66 -0
  14. package/src/components/auth/auth-providers.tsx +34 -0
  15. package/src/components/auth/icon-input.tsx +46 -0
  16. package/src/components/auth/oauth-section.tsx +51 -0
  17. package/src/components/auth/password-input.tsx +67 -0
  18. package/src/components/common/page-header.tsx +42 -0
  19. package/src/components/common/placeholder-page.tsx +42 -0
  20. package/src/components/component/component-form-dialog.tsx +348 -0
  21. package/src/components/component/component-import-dialog.tsx +235 -0
  22. package/src/components/component/component-table.tsx +153 -0
  23. package/src/components/data-table/data-table-pagination.tsx +114 -0
  24. package/src/components/data-table/data-table.tsx +218 -0
  25. package/src/components/data-table/table-detail-layout.tsx +99 -0
  26. package/src/components/dependency/changelog-dialog.tsx +108 -0
  27. package/src/components/dependency/columns.tsx +232 -0
  28. package/src/components/dependency/dependency-table.tsx +368 -0
  29. package/src/components/dependency/edit-dialog.tsx +200 -0
  30. package/src/components/knowledge-public/bookmark-form-dialog.tsx +215 -0
  31. package/src/components/knowledge-public/compliance-form-dialog.tsx +308 -0
  32. package/src/components/knowledge-public/legal-form-dialog.tsx +315 -0
  33. package/src/components/layout/sidebar-02/app-sidebar.tsx +160 -0
  34. package/src/components/layout/sidebar-02/index.tsx +33 -0
  35. package/src/components/layout/sidebar-02/logo.tsx +40 -0
  36. package/src/components/layout/sidebar-02/nav-main.tsx +153 -0
  37. package/src/components/layout/sidebar-02/nav-notifications.tsx +78 -0
  38. package/src/components/layout/sidebar-02/team-switcher.tsx +106 -0
  39. package/src/components/magicui/animated-theme-toggler.tsx +272 -0
  40. package/src/components/magicui/rainbow-button.tsx +78 -0
  41. package/src/components/market/columns.tsx +151 -0
  42. package/src/components/market/market-app-form.tsx +237 -0
  43. package/src/components/market/market-app-list.tsx +156 -0
  44. package/src/components/monitoring/error-list.tsx +143 -0
  45. package/src/components/monitoring/health-cards.tsx +152 -0
  46. package/src/components/monitoring/metrics-stats.tsx +184 -0
  47. package/src/components/monitoring/request-log-table.tsx +179 -0
  48. package/src/components/providers/theme-toggle.tsx +59 -0
  49. package/src/components/settings/avatar/avatar-config.ts +46 -0
  50. package/src/components/ui/alert-dialog.tsx +216 -0
  51. package/src/components/ui/alert.tsx +76 -0
  52. package/src/components/ui/avatar.tsx +129 -0
  53. package/src/components/ui/badge.tsx +66 -0
  54. package/src/components/ui/button.tsx +84 -0
  55. package/src/components/ui/card.tsx +120 -0
  56. package/src/components/ui/checkbox.tsx +50 -0
  57. package/src/components/ui/collapsible.tsx +50 -0
  58. package/src/components/ui/dialog.tsx +185 -0
  59. package/src/components/ui/dropdown-menu.tsx +286 -0
  60. package/src/components/ui/field.tsx +255 -0
  61. package/src/components/ui/input-group.tsx +171 -0
  62. package/src/components/ui/input.tsx +36 -0
  63. package/src/components/ui/label.tsx +41 -0
  64. package/src/components/ui/pagination.tsx +146 -0
  65. package/src/components/ui/select.tsx +209 -0
  66. package/src/components/ui/separator.tsx +45 -0
  67. package/src/components/ui/sheet.tsx +164 -0
  68. package/src/components/ui/sidebar.tsx +719 -0
  69. package/src/components/ui/skeleton.tsx +30 -0
  70. package/src/components/ui/sonner.tsx +37 -0
  71. package/src/components/ui/switch.tsx +48 -0
  72. package/src/components/ui/table.tsx +133 -0
  73. package/src/components/ui/textarea.tsx +35 -0
  74. package/src/components/ui/tooltip.tsx +74 -0
  75. package/src/components/user/columns.tsx +153 -0
  76. package/src/components/user/settings-activity-log.tsx +358 -0
  77. package/src/components/user/settings-profile/constants.ts +42 -0
  78. package/src/components/user/settings-profile/types.ts +47 -0
  79. package/src/components/user/settings-profile.tsx +664 -0
  80. package/src/components/user/user-create-dialog.tsx +137 -0
  81. package/src/components/user/user-filters.tsx +117 -0
  82. package/src/hooks/use-mobile.ts +36 -0
  83. package/src/instrument.client.ts +34 -0
  84. package/src/lib/anyhub/capabilities.ts +59 -0
  85. package/src/lib/anyhub/types.ts +43 -0
  86. package/src/lib/auth-client.ts +83 -0
  87. package/src/lib/auth-utils.ts +24 -0
  88. package/src/lib/auth.config.ts +264 -0
  89. package/src/lib/avatar.ts +41 -0
  90. package/src/lib/i18n/client.ts +32 -0
  91. package/src/lib/i18n/config.ts +40 -0
  92. package/src/lib/i18n/detect.ts +43 -0
  93. package/src/lib/i18n/locales/en/admin-ai.json +128 -0
  94. package/src/lib/i18n/locales/en/admin-billing.json +56 -0
  95. package/src/lib/i18n/locales/en/admin-users.json +88 -0
  96. package/src/lib/i18n/locales/en/common.json +877 -0
  97. package/src/lib/i18n/locales/en/enterprise.json +208 -0
  98. package/src/lib/i18n/locales/zh/admin-ai.json +128 -0
  99. package/src/lib/i18n/locales/zh/admin-billing.json +56 -0
  100. package/src/lib/i18n/locales/zh/admin-users.json +88 -0
  101. package/src/lib/i18n/locales/zh/common.json +877 -0
  102. package/src/lib/i18n/locales/zh/enterprise.json +208 -0
  103. package/src/lib/i18n/server.ts +18 -0
  104. package/src/lib/i18n/types.ts +5 -0
  105. package/src/lib/monitoring-benchmarks.ts +85 -0
  106. package/src/lib/monitoring-descriptions.ts +78 -0
  107. package/src/lib/prisma.ts +18 -0
  108. package/src/lib/router-context.ts +38 -0
  109. package/src/lib/session.ts +38 -0
  110. package/src/lib/utils.ts +23 -0
  111. package/src/providers/index.tsx +45 -0
  112. package/src/routeTree.gen.ts +1199 -0
  113. package/src/router.tsx +51 -0
  114. package/src/routes/__root.tsx +170 -0
  115. package/src/routes/_nav/ai-providers/$id/edit/route.lazy.tsx +74 -0
  116. package/src/routes/_nav/ai-providers/$id/edit/route.tsx +35 -0
  117. package/src/routes/_nav/ai-providers/index/route.lazy.tsx +33 -0
  118. package/src/routes/_nav/ai-providers/new/route.lazy.tsx +31 -0
  119. package/src/routes/_nav/ai-providers/new/route.tsx +20 -0
  120. package/src/routes/_nav/ai-providers/route.lazy.tsx +26 -0
  121. package/src/routes/_nav/ai-providers/route.tsx +31 -0
  122. package/src/routes/_nav/apps/route.lazy.tsx +30 -0
  123. package/src/routes/_nav/apps/route.tsx +20 -0
  124. package/src/routes/_nav/audit/route.lazy.tsx +100 -0
  125. package/src/routes/_nav/audit/route.tsx +25 -0
  126. package/src/routes/_nav/billing/invoices/route.lazy.tsx +86 -0
  127. package/src/routes/_nav/billing/invoices/route.tsx +25 -0
  128. package/src/routes/_nav/billing/route.lazy.tsx +48 -0
  129. package/src/routes/_nav/billing/route.tsx +27 -0
  130. package/src/routes/_nav/billing/subscriptions/$subscriptionId/route.lazy.tsx +160 -0
  131. package/src/routes/_nav/billing/subscriptions/$subscriptionId/route.tsx +25 -0
  132. package/src/routes/_nav/billing/subscriptions/route.lazy.tsx +113 -0
  133. package/src/routes/_nav/billing/subscriptions/route.tsx +28 -0
  134. package/src/routes/_nav/compliance/route.lazy.tsx +184 -0
  135. package/src/routes/_nav/compliance/route.tsx +25 -0
  136. package/src/routes/_nav/components/route.lazy.tsx +184 -0
  137. package/src/routes/_nav/components/route.tsx +40 -0
  138. package/src/routes/_nav/dashboard/route.lazy.tsx +33 -0
  139. package/src/routes/_nav/dashboard/route.tsx +20 -0
  140. package/src/routes/_nav/dependencies/route.lazy.tsx +66 -0
  141. package/src/routes/_nav/dependencies/route.tsx +32 -0
  142. package/src/routes/_nav/developer-logs/route.lazy.tsx +6 -0
  143. package/src/routes/_nav/developer-logs/route.tsx +14 -0
  144. package/src/routes/_nav/docs/route.lazy.tsx +30 -0
  145. package/src/routes/_nav/docs/route.tsx +20 -0
  146. package/src/routes/_nav/knowledge-public/bookmarks/route.lazy.tsx +355 -0
  147. package/src/routes/_nav/knowledge-public/bookmarks/route.tsx +40 -0
  148. package/src/routes/_nav/knowledge-public/compliance/route.lazy.tsx +245 -0
  149. package/src/routes/_nav/knowledge-public/compliance/route.tsx +40 -0
  150. package/src/routes/_nav/knowledge-public/legal/route.lazy.tsx +242 -0
  151. package/src/routes/_nav/knowledge-public/legal/route.tsx +40 -0
  152. package/src/routes/_nav/licenses/$licenseId/route.lazy.tsx +235 -0
  153. package/src/routes/_nav/licenses/$licenseId/route.tsx +25 -0
  154. package/src/routes/_nav/licenses/new/route.lazy.tsx +237 -0
  155. package/src/routes/_nav/licenses/route.lazy.tsx +143 -0
  156. package/src/routes/_nav/licenses/route.tsx +25 -0
  157. package/src/routes/_nav/market/route.lazy.tsx +31 -0
  158. package/src/routes/_nav/market/route.tsx +20 -0
  159. package/src/routes/_nav/monitoring/ai-usage/route.lazy.tsx +305 -0
  160. package/src/routes/_nav/monitoring/ai-usage/route.tsx +3 -0
  161. package/src/routes/_nav/monitoring/errors/route.lazy.tsx +111 -0
  162. package/src/routes/_nav/monitoring/health/route.lazy.tsx +260 -0
  163. package/src/routes/_nav/monitoring/logs/route.lazy.tsx +165 -0
  164. package/src/routes/_nav/monitoring/metrics/route.lazy.tsx +240 -0
  165. package/src/routes/_nav/monitoring/overview/route.lazy.tsx +138 -0
  166. package/src/routes/_nav/monitoring/route.lazy.tsx +68 -0
  167. package/src/routes/_nav/monitoring/route.tsx +20 -0
  168. package/src/routes/_nav/monitoring/sentry/route.lazy.tsx +399 -0
  169. package/src/routes/_nav/monitoring/sentry/route.tsx +20 -0
  170. package/src/routes/_nav/permissions/route.lazy.tsx +504 -0
  171. package/src/routes/_nav/permissions/route.tsx +26 -0
  172. package/src/routes/_nav/route.lazy.tsx +31 -0
  173. package/src/routes/_nav/route.tsx +34 -0
  174. package/src/routes/_nav/settings/route.lazy.tsx +30 -0
  175. package/src/routes/_nav/settings/route.tsx +20 -0
  176. package/src/routes/_nav/sso/route.lazy.tsx +145 -0
  177. package/src/routes/_nav/sso/route.tsx +25 -0
  178. package/src/routes/_nav/users/$userId/route.lazy.tsx +432 -0
  179. package/src/routes/_nav/users/$userId/route.tsx +27 -0
  180. package/src/routes/_nav/users/-components/users-table.tsx +38 -0
  181. package/src/routes/_nav/users/route.lazy.tsx +74 -0
  182. package/src/routes/_nav/users/route.tsx +43 -0
  183. package/src/routes/api/compliance-download/$jobId.ts +35 -0
  184. package/src/routes/api/observability/errors.ts +41 -0
  185. package/src/routes/api/observability/health.ts +30 -0
  186. package/src/routes/api.auth.$.ts +31 -0
  187. package/src/routes/api.sentry-test.ts +33 -0
  188. package/src/routes/index/route.lazy.tsx +22 -0
  189. package/src/routes/index/route.tsx +24 -0
  190. package/src/routes/login/route.lazy.tsx +46 -0
  191. package/src/routes/login/route.tsx +28 -0
  192. package/src/routes/sentry-tunnel.ts +61 -0
  193. package/src/routes/setup/route.lazy.tsx +94 -0
  194. package/src/routes/setup/route.tsx +28 -0
  195. package/src/server/__tests__/admin-ai-alerts.test.ts +113 -0
  196. package/src/server/__tests__/licenses-issue.test.ts +98 -0
  197. package/src/server/admin-ai-alerts.ts +177 -0
  198. package/src/server/admin-ai-usage.ts +134 -0
  199. package/src/server/auth-helpers.ts +51 -0
  200. package/src/server/entitlements.ts +24 -0
  201. package/src/server/knowledge-public/canonical-id.ts +55 -0
  202. package/src/server/knowledge-public/github-sync.ts +86 -0
  203. package/src/server/license-issue.ts +78 -0
  204. package/src/server/middlewares/request.ts +26 -0
  205. package/src/server/observability/debug-middleware.ts +39 -0
  206. package/src/server/observability/error-reporter.ts +99 -0
  207. package/src/server/observability/health-check.ts +140 -0
  208. package/src/server/observability/index.ts +33 -0
  209. package/src/server/observability/logger.ts +49 -0
  210. package/src/server/observability/metrics.ts +105 -0
  211. package/src/server/observability/request-middleware.ts +125 -0
  212. package/src/server/observability/timing.ts +42 -0
  213. package/src/server/pro-services.ts +32 -0
  214. package/src/server/serverFns/admin-billing.ts +94 -0
  215. package/src/server/serverFns/ai-provider/create.ts +92 -0
  216. package/src/server/serverFns/ai-provider/delete.ts +42 -0
  217. package/src/server/serverFns/ai-provider/get.ts +35 -0
  218. package/src/server/serverFns/ai-provider/list.ts +92 -0
  219. package/src/server/serverFns/ai-provider/update.ts +73 -0
  220. package/src/server/serverFns/anyhub/market.ts +64 -0
  221. package/src/server/serverFns/audit.ts +57 -0
  222. package/src/server/serverFns/auth/session.ts +26 -0
  223. package/src/server/serverFns/auth/setup.ts +73 -0
  224. package/src/server/serverFns/compliance.ts +85 -0
  225. package/src/server/serverFns/components/import.ts +197 -0
  226. package/src/server/serverFns/components/list.ts +51 -0
  227. package/src/server/serverFns/components/mutations.ts +84 -0
  228. package/src/server/serverFns/dependency/helpers.ts +245 -0
  229. package/src/server/serverFns/dependency/list.ts +127 -0
  230. package/src/server/serverFns/dependency/sync.ts +123 -0
  231. package/src/server/serverFns/dependency/update.ts +51 -0
  232. package/src/server/serverFns/developer-log-auto-generate.ts +176 -0
  233. package/src/server/serverFns/developer-logs.ts +132 -0
  234. package/src/server/serverFns/knowledge-public/bookmarks/create.ts +53 -0
  235. package/src/server/serverFns/knowledge-public/bookmarks/delete.ts +31 -0
  236. package/src/server/serverFns/knowledge-public/bookmarks/detail.ts +32 -0
  237. package/src/server/serverFns/knowledge-public/bookmarks/list.ts +66 -0
  238. package/src/server/serverFns/knowledge-public/bookmarks/sync-all-github.ts +56 -0
  239. package/src/server/serverFns/knowledge-public/bookmarks/update.ts +50 -0
  240. package/src/server/serverFns/knowledge-public/compliance/create.ts +58 -0
  241. package/src/server/serverFns/knowledge-public/compliance/delete.ts +31 -0
  242. package/src/server/serverFns/knowledge-public/compliance/detail.ts +32 -0
  243. package/src/server/serverFns/knowledge-public/compliance/list.ts +59 -0
  244. package/src/server/serverFns/knowledge-public/compliance/update.ts +53 -0
  245. package/src/server/serverFns/knowledge-public/legal/create.ts +62 -0
  246. package/src/server/serverFns/knowledge-public/legal/delete.ts +31 -0
  247. package/src/server/serverFns/knowledge-public/legal/detail.ts +32 -0
  248. package/src/server/serverFns/knowledge-public/legal/list.ts +60 -0
  249. package/src/server/serverFns/knowledge-public/legal/update.ts +55 -0
  250. package/src/server/serverFns/licenses.ts +92 -0
  251. package/src/server/serverFns/locale.ts +10 -0
  252. package/src/server/serverFns/monitoring/check-ai-alerts.ts +13 -0
  253. package/src/server/serverFns/monitoring/get-ai-usage-overview.ts +25 -0
  254. package/src/server/serverFns/monitoring/get-errors.ts +43 -0
  255. package/src/server/serverFns/monitoring/get-health-settings.ts +35 -0
  256. package/src/server/serverFns/monitoring/get-health.ts +55 -0
  257. package/src/server/serverFns/monitoring/get-metrics.ts +46 -0
  258. package/src/server/serverFns/monitoring/get-request-logs.ts +66 -0
  259. package/src/server/serverFns/monitoring/report-error.ts +55 -0
  260. package/src/server/serverFns/monitoring/reset.ts +70 -0
  261. package/src/server/serverFns/permissions.ts +214 -0
  262. package/src/server/serverFns/sentry/config.ts +88 -0
  263. package/src/server/serverFns/sso-config.ts +83 -0
  264. package/src/server/serverFns/user/create.ts +40 -0
  265. package/src/server/serverFns/user/delete.ts +29 -0
  266. package/src/server/serverFns/user/detail.ts +45 -0
  267. package/src/server/serverFns/user/list.ts +56 -0
  268. package/src/server/serverFns/user/reset-password.ts +28 -0
  269. package/src/server/serverFns/user/update-role.ts +26 -0
  270. package/src/server/serverFns/user/update-status.ts +26 -0
  271. package/src/server.ts +27 -0
  272. package/src/start.ts +85 -0
  273. package/src/styles/_keyframe-animations.scss +91 -0
  274. package/src/styles/_variables.scss +296 -0
  275. package/src/styles/globals.css +200 -0
  276. package/src/types/start-authjs.d.ts +27 -0
@@ -0,0 +1,877 @@
1
+ {
2
+ "errorPage": {
3
+ "notFound": "Page not found",
4
+ "goLogin": "Back to login",
5
+ "error": "Something went wrong",
6
+ "errorMessage": "{{message}}"
7
+ },
8
+ "button": {
9
+ "save": "Save",
10
+ "cancel": "Cancel",
11
+ "delete": "Delete",
12
+ "confirm": "Confirm",
13
+ "close": "Close",
14
+ "back": "Back",
15
+ "next": "Next",
16
+ "submit": "Submit",
17
+ "reset": "Reset",
18
+ "edit": "Edit",
19
+ "create": "Create",
20
+ "search": "Search"
21
+ },
22
+ "status": {
23
+ "loading": "Loading…",
24
+ "saving": "Saving…",
25
+ "deleting": "Deleting...",
26
+ "success": "Success",
27
+ "error": "Error",
28
+ "empty": "No data"
29
+ },
30
+ "market": {
31
+ "title": "Market Management",
32
+ "addApp": "Add App",
33
+ "fetchFailed": "Failed to fetch app list",
34
+ "operationFailed": "Operation failed",
35
+ "deleted": "Deleted",
36
+ "deleteFailed": "Delete failed",
37
+ "statusUpdated": "{{status}} updated",
38
+ "deleteConfirmTitle": "Confirm Delete",
39
+ "deleteConfirmDesc": "Are you sure you want to delete 「{{name}}」? This cannot be undone.",
40
+ "statusLabel": {
41
+ "published": "Published",
42
+ "draft": "Draft",
43
+ "unpublished": "Unpublished"
44
+ },
45
+ "publish": "Publish",
46
+ "unpublish": "Unpublish",
47
+ "columns": {
48
+ "appName": "App Name",
49
+ "category": "Category",
50
+ "entryUrl": "Entry URL",
51
+ "downloads": "Downloads",
52
+ "status": "Status",
53
+ "createdAt": "Created At"
54
+ },
55
+ "form": {
56
+ "create": "Add App",
57
+ "edit": "Edit App",
58
+ "submitting": "Submitting...",
59
+ "fillRequired": "Please fill in required fields",
60
+ "operationFailed": "Operation failed",
61
+ "created": "App created",
62
+ "updated": "App updated",
63
+ "name": "App ID *",
64
+ "namePlaceholder": "Unique identifier, e.g. my-app",
65
+ "displayName": "Display Name *",
66
+ "displayNamePlaceholder": "Name shown to users",
67
+ "entryUrl": "Entry URL *",
68
+ "description": "Description",
69
+ "descriptionPlaceholder": "App summary",
70
+ "icon": "Icon URL",
71
+ "iconPlaceholder": "Icon address",
72
+ "category": "Category",
73
+ "categoryPlaceholder": "Select category",
74
+ "tags": "Tags",
75
+ "tagsPlaceholder": "Comma separated, e.g. AI,Productivity",
76
+ "capabilities": "Capabilities"
77
+ },
78
+ "categories": {
79
+ "productivity": "Productivity",
80
+ "ai-assistant": "AI Assistant",
81
+ "project-mgmt": "Project Management",
82
+ "docs-collab": "Docs Collaboration",
83
+ "data-analysis": "Data Analysis",
84
+ "other": "Other"
85
+ },
86
+ "table": {
87
+ "addApp": "Add App",
88
+ "deleteConfirmTitle": "Confirm Delete",
89
+ "deleteConfirmDesc": "Are you sure you want to delete app 「{{name}}」? This cannot be undone."
90
+ }
91
+ },
92
+ "requestLogTable": {
93
+ "columns": {
94
+ "time": "Time",
95
+ "path": "Path",
96
+ "description": "Description",
97
+ "method": "Method",
98
+ "status": "Status",
99
+ "duration": "Duration"
100
+ },
101
+ "compareBenchmark": "Compare with benchmarks"
102
+ },
103
+ "settings": {
104
+ "language": "Language",
105
+ "languageDescription": "Select the interface display language. Changes take effect immediately.",
106
+ "languageChanged": "Language changed",
107
+ "languageChangeFailed": "Failed to change language",
108
+ "title": "System Settings"
109
+ },
110
+ "common": {
111
+ "edit": "Edit",
112
+ "delete": "Delete",
113
+ "create": "Create",
114
+ "search": "Search",
115
+ "cancel": "Cancel",
116
+ "refresh": "Refresh",
117
+ "none": "None",
118
+ "empty": "No data",
119
+ "deleting": "Deleting...",
120
+ "deleteFailed": "Delete failed",
121
+ "deleted": "{{name}} deleted",
122
+ "comingSoon": "Coming soon, stay tuned.",
123
+ "backToList": "Back to list",
124
+ "timeAgo": {
125
+ "seconds": "{{count}}s ago",
126
+ "minutes": "{{count}}m ago",
127
+ "hours": "{{count}}h ago",
128
+ "days": "{{count}}d ago"
129
+ },
130
+ "role": {
131
+ "SUPER_ADMIN": "Super Admin",
132
+ "ADMIN": "Admin",
133
+ "USER": "User",
134
+ "GUEST": "Guest",
135
+ "OPERATOR": "Operator"
136
+ }
137
+ },
138
+ "login": {
139
+ "adminPanel": "Admin Console",
140
+ "subtitle": "Enter admin credentials to log in",
141
+ "admin": "Admin",
142
+ "loginAdmin": "Login to Admin",
143
+ "loggingIn": "Logging in...",
144
+ "loading": "Verifying...",
145
+ "rememberMe": "Stay logged in today",
146
+ "switchAccount": "Switch Account",
147
+ "logout": "Logout",
148
+ "switchAndLogin": "Switch account and login to admin",
149
+ "backToWorkspace": "Back to Workspace",
150
+ "noPermission": "No Access",
151
+ "notAdmin": "Current account {{name}} is not an admin",
152
+ "exitAdmin": "Exit admin",
153
+ "showPassword": "Show password",
154
+ "hidePassword": "Hide password",
155
+ "action": "Login",
156
+ "oauthWith": "Continue with {{provider}}",
157
+ "email": {
158
+ "label": "Email",
159
+ "placeholder": "Email"
160
+ },
161
+ "password": {
162
+ "label": "Password",
163
+ "placeholder": "Enter password"
164
+ },
165
+ "success": "Login successful",
166
+ "error": {
167
+ "enterEmail": "Please enter your email",
168
+ "validEmail": "Please enter a valid email address",
169
+ "enterPassword": "Please enter your password",
170
+ "invalidCredentials": "Invalid email or password"
171
+ }
172
+ },
173
+ "nav": {
174
+ "dashboard": "Dashboard",
175
+ "users": "User Management",
176
+ "docs": "PRD Management",
177
+ "apps": "App Management",
178
+ "knowledgePublic": {
179
+ "title": "Public Knowledge Base",
180
+ "laws": "Laws & Regulations",
181
+ "compliance": "Compliance",
182
+ "bookmarks": "Bookmarks"
183
+ },
184
+ "aiProviders": "AI Providers",
185
+ "components": "Component Management",
186
+ "dependencies": "Dependency Management",
187
+ "developerLogs": "Developer Logs",
188
+ "market": "Plugin Market",
189
+ "billing": {
190
+ "title": "Billing",
191
+ "subscriptions": "Subscriptions",
192
+ "invoices": "Invoices"
193
+ },
194
+ "enterprise": {
195
+ "title": "Enterprise Governance",
196
+ "licenses": "License Management",
197
+ "audit": "Audit Log",
198
+ "sso": "SSO Config",
199
+ "permissions": "Permissions",
200
+ "compliance": "Compliance Export"
201
+ },
202
+ "monitoring": {
203
+ "title": "System Monitoring",
204
+ "overview": "Overview",
205
+ "logs": "Request Logs",
206
+ "errors": "Error Reports",
207
+ "metrics": "Performance Metrics",
208
+ "health": "Health Check",
209
+ "sentry": "Sentry Config"
210
+ },
211
+ "settings": "System Settings"
212
+ },
213
+ "pagination": {
214
+ "total": "{{total}} items, page {{page}}/{{totalPages}}",
215
+ "prev": "Previous",
216
+ "next": "Next"
217
+ },
218
+ "dashboard": {
219
+ "title": "Dashboard",
220
+ "subtitle": "Admin console"
221
+ },
222
+ "docs": {
223
+ "title": "PRD Management"
224
+ },
225
+ "apps": {
226
+ "title": "App Management"
227
+ },
228
+ "dependencies": {
229
+ "title": "Third-Party Dependency Management",
230
+ "description": "Aggregates package.json from all monorepo packages, compares with latest npm registry versions, and assists upgrade decisions",
231
+ "hint": {
232
+ "currentVersion": "「Current Version」reads ",
233
+ "currentVersionSuffix": " package.json files in real time;",
234
+ "latestVersion": "「Latest Version」is cached from npm registry. Click refresh or 「Sync All」 to update.",
235
+ "watchList": "The watch list contains preset core packages, adjustable in edit mode."
236
+ }
237
+ },
238
+ "developerLogs": {
239
+ "title": "Developer Log Management",
240
+ "description": "Manage AllBlue changelog entries shown on /changelog page",
241
+ "autoGenerate": "Generate from Git commits",
242
+ "addEntry": "Add Entry",
243
+ "editEntry": "Edit Entry",
244
+ "deleteConfirm": "Are you sure you want to delete this entry? This cannot be undone.",
245
+ "deleteSuccess": "Entry deleted",
246
+ "saveSuccess": "Entry saved",
247
+ "columns": {
248
+ "date": "Date",
249
+ "title": "Title",
250
+ "desc": "Description",
251
+ "tags": "Tags",
252
+ "createdAt": "Created At",
253
+ "actions": "Actions"
254
+ },
255
+ "form": {
256
+ "date": {
257
+ "label": "Date",
258
+ "placeholder": "Aug 23, 2026"
259
+ },
260
+ "title": {
261
+ "label": "Title",
262
+ "placeholder": "Feature name"
263
+ },
264
+ "desc": {
265
+ "label": "Description",
266
+ "placeholder": "Brief description of this update"
267
+ },
268
+ "tags": {
269
+ "label": "Tags",
270
+ "placeholder": "feat, fix, refactor"
271
+ },
272
+ "commitSha": {
273
+ "label": "Commit SHA",
274
+ "placeholder": "Optional"
275
+ },
276
+ "fillRequired": "Please fill in required fields"
277
+ },
278
+ "tagFilter": "Filter by tag",
279
+ "allTags": "All",
280
+ "searchPlaceholder": "Search logs...",
281
+ "empty": "No developer logs yet",
282
+ "autoGenerating": "Generating developer logs from Git commits...",
283
+ "autoGenerateSuccess": "Successfully generated {{count}} entries",
284
+ "autoGenerateFailed": "Generation failed",
285
+ "backfillDetails": "Backfill Details",
286
+ "backfillSuccess": "Backfilled details for {{count}} entries",
287
+ "backfillFailed": "Backfill failed"
288
+ },
289
+ "setup": {
290
+ "form": {
291
+ "title": "Create Super Admin Account",
292
+ "subtitle": "System Initialization",
293
+ "username": {
294
+ "label": "Username",
295
+ "placeholder": "3-20 characters"
296
+ },
297
+ "email": {
298
+ "label": "Email",
299
+ "placeholder": "admin@example.com"
300
+ },
301
+ "password": {
302
+ "label": "Password",
303
+ "placeholder": "At least 8 characters"
304
+ },
305
+ "confirmPassword": {
306
+ "label": "Confirm Password",
307
+ "placeholder": "Re-enter password"
308
+ },
309
+ "loading": "Creating...",
310
+ "submit": "Create Super Admin"
311
+ },
312
+ "validation": {
313
+ "fillAllFields": "Please fill in all fields",
314
+ "passwordMismatch": "Passwords do not match"
315
+ },
316
+ "success": "Super admin created successfully! Redirecting to login...",
317
+ "error": "Creation failed",
318
+ "brand": {
319
+ "title": "AllBlue Admin Console",
320
+ "subtitle": "First-time setup. Create your super admin account."
321
+ },
322
+ "brandFeatures": {
323
+ "superAdmin": {
324
+ "label": "Super Admin",
325
+ "desc": "Full privileges"
326
+ },
327
+ "dataMgmt": {
328
+ "label": "Data Management",
329
+ "desc": "Full control"
330
+ },
331
+ "accountSecurity": {
332
+ "label": "Account Security",
333
+ "desc": "Encrypted storage"
334
+ }
335
+ }
336
+ },
337
+ "knowledgePublic": {
338
+ "jurisdictionLabel": "Law",
339
+ "legal": {
340
+ "title": "Laws & Regulations",
341
+ "subtitle": "{{total}} records",
342
+ "placeholder": "Search title or summary",
343
+ "columns": {
344
+ "title": "Title",
345
+ "jurisdiction": "Jurisdiction",
346
+ "category": "Category",
347
+ "tags": "Tags",
348
+ "createdAt": "Created At"
349
+ },
350
+ "deleteConfirmTitle": "Confirm Delete",
351
+ "deleteConfirmDesc": "Are you sure you want to delete 「{{title}}」? This is a soft delete. Contact admin to restore."
352
+ },
353
+ "bookmarks": {
354
+ "title": "Bookmarks",
355
+ "subtitle": "{{total}} records",
356
+ "placeholder": "Search title, summary, or URL",
357
+ "deleted": "Bookmark deleted",
358
+ "syncing": "Syncing...",
359
+ "syncGithub": "Batch Sync GitHub",
360
+ "syncComplete": "Sync complete: {{total}} total, {{success}} success, {{failed}} failed",
361
+ "syncFailed": "Sync failed",
362
+ "deleteConfirmTitle": "Confirm Delete",
363
+ "deleteConfirmDesc": "Are you sure you want to delete 「{{title}}」? This is a soft delete. Contact admin to restore.",
364
+ "columns": {
365
+ "website": "Website",
366
+ "url": "URL",
367
+ "category": "Category",
368
+ "tags": "Tags",
369
+ "createdAt": "Created At"
370
+ }
371
+ },
372
+ "compliance": {
373
+ "title": "Compliance Requirements",
374
+ "subtitle": "{{total}} records",
375
+ "placeholder": "Search title or summary",
376
+ "deleted": "Compliance requirement deleted",
377
+ "deleteConfirmTitle": "Confirm Delete",
378
+ "deleteConfirmDesc": "Are you sure you want to delete 「{{title}}」? This is a soft delete. Contact admin to restore.",
379
+ "columns": {
380
+ "title": "Title",
381
+ "industry": "Industry",
382
+ "regulatoryBody": "Regulatory Body",
383
+ "tags": "Tags",
384
+ "createdAt": "Created At"
385
+ }
386
+ }
387
+ },
388
+ "monitoring": {
389
+ "nav": {
390
+ "overview": "Overview",
391
+ "logs": "Request Logs",
392
+ "errors": "Error Reports",
393
+ "metrics": "Performance Metrics",
394
+ "health": "Health Check",
395
+ "sentry": "Sentry Config",
396
+ "aiUsage": "AI Usage"
397
+ },
398
+ "overview": {
399
+ "title": "System Monitoring",
400
+ "description": "Real-time view of service status and performance metrics",
401
+ "requestStats": {
402
+ "title": "Request Stats",
403
+ "totalRequests": "Total Requests",
404
+ "avgDuration": "Avg Duration",
405
+ "maxDuration": "Slowest Request",
406
+ "errorTypes": "Error Types"
407
+ },
408
+ "recentErrors": {
409
+ "title": "Recent Errors",
410
+ "empty": "No error records"
411
+ },
412
+ "metricsSnapshot": {
413
+ "title": "Metrics Snapshot",
414
+ "empty": "No metrics data, waiting for requests"
415
+ }
416
+ },
417
+ "logs": {
418
+ "title": "Request Logs",
419
+ "description": "View service request records",
420
+ "query": "Query",
421
+ "clear7Days": "Clear 7 Days",
422
+ "clearSuccess": "Cleared request logs older than 7 days",
423
+ "clearFailed": "Clear failed",
424
+ "empty": "No request logs",
425
+ "filterMonitoring": "Filter monitoring requests",
426
+ "filter": {
427
+ "allMethods": "All Methods",
428
+ "allStatus": "All Status",
429
+ "searchPath": "Search path..."
430
+ }
431
+ },
432
+ "errors": {
433
+ "title": "Error Reports",
434
+ "description": "Record and aggregate all uncaught errors",
435
+ "clearData": "Clear Data",
436
+ "clearSuccess": "Error reports cleared",
437
+ "clearFailed": "Clear failed",
438
+ "empty": "No error records",
439
+ "stats": {
440
+ "errorTypes": "Error Types",
441
+ "totalOccurrences": "Total Occurrences",
442
+ "recentError": "Recent Error"
443
+ }
444
+ },
445
+ "metrics": {
446
+ "title": "Performance Metrics",
447
+ "description": "Request latency and memory usage statistics",
448
+ "clearData": "Clear Data",
449
+ "clearSuccess": "Metrics cleared",
450
+ "clearFailed": "Clear failed",
451
+ "empty": "No metrics data, waiting for requests",
452
+ "memoryUsage": "Memory Usage (Real-time)",
453
+ "history": "History Snapshots",
454
+ "columns": {
455
+ "time": "Time",
456
+ "metricName": "Metric",
457
+ "count": "Calls",
458
+ "avg": "Avg"
459
+ }
460
+ },
461
+ "health": {
462
+ "title": "Health Check",
463
+ "description": "Monitor service runtime status",
464
+ "autoCheck": "Auto Check",
465
+ "checkNow": "Check Now",
466
+ "autoEnabled": "Auto health check enabled",
467
+ "autoDisabled": "Auto health check disabled",
468
+ "operationFailed": "Operation failed",
469
+ "runningTime": "Uptime {{hours}}h {{minutes}}m",
470
+ "nextCheck": "Next auto check: {{countdown}}s",
471
+ "status": {
472
+ "normal": "Normal",
473
+ "abnormal": "Abnormal"
474
+ },
475
+ "database": {
476
+ "title": "Database Connection",
477
+ "connected": "Connected (latency {{latency}}ms)",
478
+ "failed": "Connection failed",
479
+ "unknownError": "Unknown error"
480
+ },
481
+ "memory": {
482
+ "title": "Memory Usage"
483
+ },
484
+ "history": "History Snapshots",
485
+ "historyColumns": {
486
+ "time": "Time",
487
+ "status": "Status",
488
+ "dbLatency": "DB Latency",
489
+ "uptime": "Uptime"
490
+ }
491
+ },
492
+ "aiUsage": {
493
+ "title": "AI Usage Monitoring",
494
+ "description": "Managed and BYOK AI usage for the last 30 days",
495
+ "totalCalls": "Total Calls",
496
+ "totalCost": "Total Cost (USD)",
497
+ "byokVsManaged": "BYOK vs Managed",
498
+ "dailyTrend": "Daily Trend",
499
+ "top10Workspaces": "Top 10 Workspaces",
500
+ "top10Users": "Top 10 Users",
501
+ "workspace": "Workspace",
502
+ "user": "User",
503
+ "count": "Count",
504
+ "cost": "Cost",
505
+ "totalItems": "{{total}} items",
506
+ "alert": {
507
+ "threshold": "Threshold {{threshold}}",
508
+ "affected": "{{count}} affected"
509
+ },
510
+ "trend": {
511
+ "calls": "Calls",
512
+ "callsAria": "AI call count daily trend",
513
+ "cost": "Cost (USD)",
514
+ "costAria": "AI cost daily trend"
515
+ }
516
+ },
517
+ "sentry": {
518
+ "title": "Sentry Monitoring",
519
+ "subtitle": "Error tracking and performance monitoring",
520
+ "openSentry": "Open Sentry",
521
+ "loadFailed": "Failed to load Sentry config",
522
+ "saveSuccess": "Sentry config saved, effective immediately",
523
+ "saveFailed": "Save failed",
524
+ "saveConfig": "Save Config",
525
+ "unsaved": "Unsaved changes",
526
+ "config": {
527
+ "title": "Configuration",
528
+ "description": "Config is saved to database. Effective on client and server immediately after save. Empty fields use env var values."
529
+ },
530
+ "fields": {
531
+ "dsn": {
532
+ "instruction": {
533
+ "step1": "Log in to Sentry.io → go to your project",
534
+ "step2": "Left nav → Settings → Client Keys (DSN)",
535
+ "step3": "Copy DSN here",
536
+ "step4": "DSN supports runtime switching, effective immediately after save"
537
+ }
538
+ },
539
+ "org": {
540
+ "label": "Organization Slug",
541
+ "instruction": {
542
+ "step1": "Log in to Sentry.io",
543
+ "step2": "Left sidebar → Settings → General Settings",
544
+ "step3": "Copy Organization Slug"
545
+ }
546
+ },
547
+ "project": {
548
+ "label": "Project Slug",
549
+ "instruction": {
550
+ "step1": "Log in to Sentry.io → go to your project",
551
+ "step2": "Settings → Projects → select project → General Settings",
552
+ "step3": "Copy Slug"
553
+ }
554
+ },
555
+ "authToken": {
556
+ "instruction": {
557
+ "step1": "Log in to Sentry.io → Settings → Developer Settings",
558
+ "step2": "Click Auth Tokens → Create New Token",
559
+ "step3": "Select permissions: project:read, project:releases, org:read",
560
+ "step4": "Copy the generated Token here",
561
+ "step5": "Used for automatic source map upload during production build"
562
+ }
563
+ },
564
+ "obtainMethod": "How to obtain:"
565
+ },
566
+ "statusCards": {
567
+ "dsn": {
568
+ "title": "DSN Status",
569
+ "configured": "DSN configured",
570
+ "notConfigured": "DSN not configured"
571
+ },
572
+ "errors": {
573
+ "title": "Error Monitoring",
574
+ "enabled": "Auto error capture enabled",
575
+ "disabled": "Enabled after DSN config"
576
+ },
577
+ "performance": {
578
+ "title": "Performance Tracing",
579
+ "enabled": "Tracing sample rate 100%",
580
+ "disabled": "Enabled after DSN config"
581
+ },
582
+ "replay": {
583
+ "enabled": "100% recording on errors",
584
+ "disabled": "Enabled after DSN config"
585
+ }
586
+ },
587
+ "validate": {
588
+ "empty": "DSN is empty",
589
+ "httpsPrefix": "DSN must start with https://",
590
+ "notSentryIo": "DSN domain is not sentry.io",
591
+ "missingAt": "DSN is missing @ separator, format should be https://<key>@o<orgId>.ingest.sentry.io/<projectId>",
592
+ "missingProjectId": "DSN is missing a valid projectId (number) at the end",
593
+ "valid": "DSN format is valid"
594
+ },
595
+ "verify": {
596
+ "title": "Config Verification",
597
+ "description": "Verify DSN format and Sentry server reachability.",
598
+ "note": "In Sentry → Project → View All Issues, you will see: type \"Error\", title \"Sentry config validation - test error\". If multiple verification events are sent, the Events count will accumulate.",
599
+ "button": "Verify Config",
600
+ "notInitialized": "Sentry not initialized, cannot send test event. Please save config first.",
601
+ "success": "Test event successfully delivered to Sentry (eventId: {{eventId}})",
602
+ "timeout": "Test event timed out (5s). DSN may be invalid or network unreachable.",
603
+ "error": "Verification error: {{message}}"
604
+ }
605
+ },
606
+ "healthCards": {
607
+ "database": "Database",
608
+ "connected": "Connected",
609
+ "disconnected": "Disconnected",
610
+ "latency": "Latency {{latency}}",
611
+ "memoryRSS": "Memory RSS",
612
+ "heapUsage": "Heap Usage",
613
+ "cpuCores": "CPU {{cores}} cores",
614
+ "systemLoad": "System Load",
615
+ "diskUsage": "Memory Usage",
616
+ "available": "Available {{free}} / {{total}}",
617
+ "runtime": "Runtime"
618
+ }
619
+ },
620
+ "errorList": {
621
+ "columns": {
622
+ "lastSeen": "Last Seen",
623
+ "errorName": "Error Name",
624
+ "errorMessage": "Error Message",
625
+ "count": "Occurrences",
626
+ "firstSeen": "First Seen"
627
+ },
628
+ "detail": {
629
+ "title": "Error Details",
630
+ "context": "Context"
631
+ }
632
+ },
633
+ "metricsStats": {
634
+ "benchmarkSource": "Benchmark values based on Google Cloud, AWS, Stripe, Cloudflare public SLA and best practices",
635
+ "compareBenchmark": "Compare with industry benchmarks",
636
+ "columns": {
637
+ "metricName": "Metric",
638
+ "description": "Description",
639
+ "count": "Calls",
640
+ "avg": "Avg",
641
+ "min": "Min",
642
+ "max": "Max"
643
+ }
644
+ },
645
+ "dependency": {
646
+ "statusLabel": {
647
+ "latest": "Latest",
648
+ "patch": "Patch behind",
649
+ "minor": "Minor behind",
650
+ "major": "Major behind",
651
+ "unknown": "Not synced"
652
+ },
653
+ "timeAgo": {
654
+ "justNow": "Just now",
655
+ "minutes": "{{count}}m ago",
656
+ "hours": "{{count}}h ago",
657
+ "days": "{{count}}d ago"
658
+ },
659
+ "edit": {
660
+ "dialogTitle": "Edit {{name}}",
661
+ "saved": "Saved",
662
+ "saveFailed": "Save failed",
663
+ "untracked": "Untracked package, please sync first to create a record",
664
+ "displayName": "Display Name",
665
+ "description": "Description",
666
+ "descriptionPlaceholder": "What this dependency does",
667
+ "homepage": "Website / Repository",
668
+ "category": "Category",
669
+ "priority": "Priority",
670
+ "watched": "Add to watchlist (pin to top)",
671
+ "notes": "Notes",
672
+ "notesPlaceholder": "Upgrade notes, Breaking Changes, etc."
673
+ },
674
+ "table": {
675
+ "statusFilter": {
676
+ "all": "All Status",
677
+ "latest": "Latest",
678
+ "patch": "Patch behind",
679
+ "minor": "Minor behind",
680
+ "major": "Major behind",
681
+ "unknown": "Not synced"
682
+ },
683
+ "searchPlaceholder": "Search dependencies…",
684
+ "viewFilter": {
685
+ "watched": "Watchlist",
686
+ "all": "All Dependencies"
687
+ },
688
+ "allCategory": "All",
689
+ "toast": {
690
+ "updated": "{{name}} updated to {{version}}",
691
+ "syncFailed": "{{name}} sync failed: {{error}}",
692
+ "noSyncable": "No dependencies to sync in current filter",
693
+ "syncSuccess": "Successfully synced {{count}} dependencies",
694
+ "syncFailedCount": "{{count}} dependencies sync failed",
695
+ "unknown": "Unknown error"
696
+ },
697
+ "stats": {
698
+ "watched": "Watching {{count}}",
699
+ "outdated": "{{count}} upgradable"
700
+ },
701
+ "syncAll": "Sync all ({{count}})",
702
+ "empty": "No matching dependencies",
703
+ "columns": {
704
+ "dependency": "Dependency",
705
+ "description": "Description",
706
+ "category": "Category",
707
+ "currentVersion": "Current Version",
708
+ "latestVersion": "Latest Version",
709
+ "changelog": "Changelog",
710
+ "status": "Status",
711
+ "lastSync": "Last Synced",
712
+ "actions": "Actions"
713
+ },
714
+ "cell": {
715
+ "untracked": "Untracked",
716
+ "highPriority": "High Priority",
717
+ "notInstalled": "Not installed",
718
+ "syncTooltip": "Sync latest version",
719
+ "changelogBtn": "Log",
720
+ "viewChangelog": "View changelog"
721
+ },
722
+ "pagination": {
723
+ "total": "{{total}} total, page {{page}}/{{totalPages}}",
724
+ "prev": "Previous",
725
+ "next": "Next"
726
+ }
727
+ }
728
+ },
729
+ "component": {
730
+ "categories": {
731
+ "base": "Base Component",
732
+ "block": "Content Block",
733
+ "template": "Page Template"
734
+ },
735
+ "types": {
736
+ "base": "Base Component (component)",
737
+ "block": "Content Block (block)",
738
+ "template": "Page Template (template)"
739
+ },
740
+ "form": {
741
+ "create": "New Component",
742
+ "edit": "Edit Component",
743
+ "saving": "Saving...",
744
+ "nameRequired": "Please enter component name",
745
+ "updated": "Component updated",
746
+ "created": "Component created",
747
+ "saveFailed": "Save failed",
748
+ "previewUnavailable": "Preview available after saving",
749
+ "defaultProps": "Default Props",
750
+ "preview": "Preview",
751
+ "name": "Name *",
752
+ "namePlaceholder": "Component name",
753
+ "description": "Description",
754
+ "descriptionPlaceholder": "Component description (optional)",
755
+ "category": "Category",
756
+ "type": "Type",
757
+ "subCategory": "Subcategory",
758
+ "subCategoryPlaceholder": "e.g. Form, Navigation",
759
+ "tags": "Tags (comma separated)",
760
+ "tagsPlaceholder": "e.g. Input, Form",
761
+ "path": "Group Path",
762
+ "pathPlaceholder": "e.g. Base/Form/Input",
763
+ "pathHint": "Use slashes to separate hierarchy; the sidebar orders by this path.",
764
+ "defaultWidth": "Default Width",
765
+ "defaultHeight": "Default Height",
766
+ "sortOrder": "Sort Weight",
767
+ "hidden": "Hidden"
768
+ },
769
+ "table": {
770
+ "empty": "No components",
771
+ "columns": {
772
+ "component": "Component",
773
+ "category": "Category",
774
+ "type": "Type",
775
+ "tags": "Tags",
776
+ "source": "Source",
777
+ "status": "Status",
778
+ "actions": "Actions"
779
+ },
780
+ "status": {
781
+ "hidden": "Hidden",
782
+ "visible": "Visible"
783
+ }
784
+ }
785
+ },
786
+ "activityLog": {
787
+ "title": "Activity Log",
788
+ "description": "View account activity and audit records",
789
+ "search": "Search",
790
+ "searchPlaceholder": "Search by description, IP, or location...",
791
+ "actionType": "Action Type",
792
+ "startDate": "Start Date",
793
+ "endDate": "End Date",
794
+ "actionTypes": {
795
+ "all": "All Actions",
796
+ "login": "Login",
797
+ "logout": "Logout",
798
+ "password_change": "Password Change",
799
+ "profile_update": "Profile Update",
800
+ "settings_change": "Settings Change",
801
+ "export": "Data Export",
802
+ "delete": "Delete Operation"
803
+ },
804
+ "total": "{{count}} records total",
805
+ "exporting": "Exporting…",
806
+ "exportLog": "Export Log",
807
+ "empty": "No activity records",
808
+ "emptyHint": {
809
+ "filtered": "Try adjusting filters",
810
+ "default": "Activity records will appear here"
811
+ },
812
+ "status": {
813
+ "success": "Success",
814
+ "failed": "Failed"
815
+ },
816
+ "unknown": "Unknown",
817
+ "justNow": "Just now"
818
+ },
819
+ "userFilters": {
820
+ "searchPlaceholder": "Search email or username...",
821
+ "rolePlaceholder": "Role",
822
+ "role": {
823
+ "all": "All Roles",
824
+ "SUPER_ADMIN": "Super Admin",
825
+ "ADMIN": "Admin",
826
+ "USER": "User"
827
+ },
828
+ "statusPlaceholder": "Status",
829
+ "status": {
830
+ "all": "All Status",
831
+ "ACTIVE": "Active",
832
+ "INACTIVE": "Inactive",
833
+ "BANNED": "Banned"
834
+ },
835
+ "clearFilters": "Clear Filters"
836
+ },
837
+ "socialPlatform": {
838
+ "website": "Website"
839
+ },
840
+ "legalForm": {
841
+ "create": "New Law",
842
+ "edit": "Edit Law",
843
+ "saving": "Saving...",
844
+ "titleRequired": "Please enter title",
845
+ "categoryRequired": "Please enter category",
846
+ "loadFailed": "Failed to load",
847
+ "updated": "Law updated",
848
+ "created": "Law created",
849
+ "saveFailed": "Save failed",
850
+ "title": "Title *",
851
+ "titlePlaceholder": "e.g. Personal Information Protection Law",
852
+ "code": "Document Code",
853
+ "codePlaceholder": "e.g. Presidential Decree No.91",
854
+ "jurisdiction": "Jurisdiction",
855
+ "category": "Category",
856
+ "categoryPlaceholder": "e.g. Data Compliance",
857
+ "region": "Region",
858
+ "regionPlaceholder": "e.g. Beijing",
859
+ "country": "Country",
860
+ "countryPlaceholder": "e.g. China",
861
+ "issuingAuthority": "Issuing Authority",
862
+ "issuingAuthorityPlaceholder": "e.g. Standing Committee of NPC",
863
+ "effectiveDate": "Effective Date",
864
+ "summary": "Summary",
865
+ "summaryPlaceholder": "One-sentence summary",
866
+ "content": "Full Text",
867
+ "contentPlaceholder": "Legal text",
868
+ "sourceUrl": "Source URL",
869
+ "tags": "Tags (comma separated)",
870
+ "tagsPlaceholder": "e.g. Privacy, Data",
871
+ "jurisdictions": {
872
+ "CN_NATIONAL": "China · National",
873
+ "CN_LOCAL": "China · Local",
874
+ "OVERSEAS": "Overseas"
875
+ }
876
+ }
877
+ }