@adminiumjs/i18n 0.1.2 → 0.2.2-rc.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 (241) hide show
  1. package/dist/a11y-keys.d.ts +17 -0
  2. package/dist/a11y-keys.d.ts.map +1 -0
  3. package/dist/a11y-keys.js +479 -0
  4. package/dist/a11y-keys.js.map +1 -0
  5. package/dist/create-i18n.d.ts.map +1 -1
  6. package/dist/create-i18n.js +38 -4
  7. package/dist/create-i18n.js.map +1 -1
  8. package/dist/editing.d.ts +17 -0
  9. package/dist/editing.d.ts.map +1 -0
  10. package/dist/editing.js +17 -0
  11. package/dist/editing.js.map +1 -0
  12. package/dist/fallback.d.ts +24 -0
  13. package/dist/fallback.d.ts.map +1 -0
  14. package/dist/fallback.js +41 -0
  15. package/dist/fallback.js.map +1 -0
  16. package/dist/format/index.d.ts.map +1 -1
  17. package/dist/format/index.js +1 -0
  18. package/dist/format/index.js.map +1 -1
  19. package/dist/format-errors.d.ts +41 -0
  20. package/dist/format-errors.d.ts.map +1 -0
  21. package/dist/format-errors.js +64 -0
  22. package/dist/format-errors.js.map +1 -0
  23. package/dist/icu-format.d.ts +4 -0
  24. package/dist/icu-format.d.ts.map +1 -1
  25. package/dist/icu-format.js +44 -3
  26. package/dist/icu-format.js.map +1 -1
  27. package/dist/index.d.ts +10 -2
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +15 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/keys.d.ts +33 -0
  32. package/dist/keys.d.ts.map +1 -0
  33. package/dist/keys.js +78 -0
  34. package/dist/keys.js.map +1 -0
  35. package/dist/locales.d.ts +106 -13
  36. package/dist/locales.d.ts.map +1 -1
  37. package/dist/locales.js +147 -17
  38. package/dist/locales.js.map +1 -1
  39. package/dist/overrides.d.ts +62 -0
  40. package/dist/overrides.d.ts.map +1 -0
  41. package/dist/overrides.js +113 -0
  42. package/dist/overrides.js.map +1 -0
  43. package/dist/react.d.ts +6 -0
  44. package/dist/react.d.ts.map +1 -1
  45. package/dist/react.js +18 -26
  46. package/dist/react.js.map +1 -1
  47. package/dist/resources/ar-eg/common.d.ts +786 -3
  48. package/dist/resources/ar-eg/common.d.ts.map +1 -1
  49. package/dist/resources/ar-eg/common.js +813 -29
  50. package/dist/resources/ar-eg/common.js.map +1 -1
  51. package/dist/resources/ar-eg/errors.d.ts +1 -0
  52. package/dist/resources/ar-eg/errors.d.ts.map +1 -1
  53. package/dist/resources/ar-eg/errors.js +2 -0
  54. package/dist/resources/ar-eg/errors.js.map +1 -1
  55. package/dist/resources/ar-eg/generated.d.ts.map +1 -1
  56. package/dist/resources/ar-eg/generated.js +1 -0
  57. package/dist/resources/ar-eg/generated.js.map +1 -1
  58. package/dist/resources/ar-eg/studio.d.ts.map +1 -1
  59. package/dist/resources/ar-eg/studio.js +1 -0
  60. package/dist/resources/ar-eg/studio.js.map +1 -1
  61. package/dist/resources/ar-eg/ui.d.ts +586 -586
  62. package/dist/resources/ar-eg/ui.d.ts.map +1 -1
  63. package/dist/resources/ar-eg/ui.js +587 -586
  64. package/dist/resources/ar-eg/ui.js.map +1 -1
  65. package/dist/resources/cs-cz/common.d.ts +786 -3
  66. package/dist/resources/cs-cz/common.d.ts.map +1 -1
  67. package/dist/resources/cs-cz/common.js +811 -27
  68. package/dist/resources/cs-cz/common.js.map +1 -1
  69. package/dist/resources/cs-cz/errors.d.ts +1 -0
  70. package/dist/resources/cs-cz/errors.d.ts.map +1 -1
  71. package/dist/resources/cs-cz/errors.js +2 -0
  72. package/dist/resources/cs-cz/errors.js.map +1 -1
  73. package/dist/resources/cs-cz/generated.d.ts.map +1 -1
  74. package/dist/resources/cs-cz/generated.js +1 -0
  75. package/dist/resources/cs-cz/generated.js.map +1 -1
  76. package/dist/resources/cs-cz/studio.d.ts.map +1 -1
  77. package/dist/resources/cs-cz/studio.js +1 -0
  78. package/dist/resources/cs-cz/studio.js.map +1 -1
  79. package/dist/resources/cs-cz/ui.d.ts +582 -582
  80. package/dist/resources/cs-cz/ui.d.ts.map +1 -1
  81. package/dist/resources/cs-cz/ui.js +583 -582
  82. package/dist/resources/cs-cz/ui.js.map +1 -1
  83. package/dist/resources/da-dk/common.d.ts +787 -4
  84. package/dist/resources/da-dk/common.d.ts.map +1 -1
  85. package/dist/resources/da-dk/common.js +814 -30
  86. package/dist/resources/da-dk/common.js.map +1 -1
  87. package/dist/resources/da-dk/errors.d.ts +1 -0
  88. package/dist/resources/da-dk/errors.d.ts.map +1 -1
  89. package/dist/resources/da-dk/errors.js +2 -0
  90. package/dist/resources/da-dk/errors.js.map +1 -1
  91. package/dist/resources/da-dk/generated.d.ts.map +1 -1
  92. package/dist/resources/da-dk/generated.js +1 -0
  93. package/dist/resources/da-dk/generated.js.map +1 -1
  94. package/dist/resources/da-dk/studio.d.ts.map +1 -1
  95. package/dist/resources/da-dk/studio.js +1 -0
  96. package/dist/resources/da-dk/studio.js.map +1 -1
  97. package/dist/resources/da-dk/ui.d.ts +568 -568
  98. package/dist/resources/da-dk/ui.d.ts.map +1 -1
  99. package/dist/resources/da-dk/ui.js +569 -568
  100. package/dist/resources/da-dk/ui.js.map +1 -1
  101. package/dist/resources/de-de/common.d.ts +790 -7
  102. package/dist/resources/de-de/common.d.ts.map +1 -1
  103. package/dist/resources/de-de/common.js +817 -33
  104. package/dist/resources/de-de/common.js.map +1 -1
  105. package/dist/resources/de-de/errors.d.ts +1 -0
  106. package/dist/resources/de-de/errors.d.ts.map +1 -1
  107. package/dist/resources/de-de/errors.js +2 -0
  108. package/dist/resources/de-de/errors.js.map +1 -1
  109. package/dist/resources/de-de/generated.d.ts.map +1 -1
  110. package/dist/resources/de-de/generated.js +1 -0
  111. package/dist/resources/de-de/generated.js.map +1 -1
  112. package/dist/resources/de-de/studio.d.ts.map +1 -1
  113. package/dist/resources/de-de/studio.js +1 -0
  114. package/dist/resources/de-de/studio.js.map +1 -1
  115. package/dist/resources/de-de/ui.d.ts +569 -569
  116. package/dist/resources/de-de/ui.d.ts.map +1 -1
  117. package/dist/resources/de-de/ui.js +570 -569
  118. package/dist/resources/de-de/ui.js.map +1 -1
  119. package/dist/resources/en-us/common.d.ts +786 -3
  120. package/dist/resources/en-us/common.d.ts.map +1 -1
  121. package/dist/resources/en-us/common.js +813 -29
  122. package/dist/resources/en-us/common.js.map +1 -1
  123. package/dist/resources/en-us/errors.d.ts +1 -0
  124. package/dist/resources/en-us/errors.d.ts.map +1 -1
  125. package/dist/resources/en-us/errors.js +2 -0
  126. package/dist/resources/en-us/errors.js.map +1 -1
  127. package/dist/resources/en-us/generated.d.ts.map +1 -1
  128. package/dist/resources/en-us/generated.js +1 -0
  129. package/dist/resources/en-us/generated.js.map +1 -1
  130. package/dist/resources/en-us/studio.d.ts.map +1 -1
  131. package/dist/resources/en-us/studio.js +1 -0
  132. package/dist/resources/en-us/studio.js.map +1 -1
  133. package/dist/resources/en-us/ui.d.ts.map +1 -1
  134. package/dist/resources/en-us/ui.js +1 -0
  135. package/dist/resources/en-us/ui.js.map +1 -1
  136. package/dist/resources/fr-fr/common.d.ts +788 -5
  137. package/dist/resources/fr-fr/common.d.ts.map +1 -1
  138. package/dist/resources/fr-fr/common.js +815 -31
  139. package/dist/resources/fr-fr/common.js.map +1 -1
  140. package/dist/resources/fr-fr/errors.d.ts +1 -0
  141. package/dist/resources/fr-fr/errors.d.ts.map +1 -1
  142. package/dist/resources/fr-fr/errors.js +2 -0
  143. package/dist/resources/fr-fr/errors.js.map +1 -1
  144. package/dist/resources/fr-fr/generated.d.ts.map +1 -1
  145. package/dist/resources/fr-fr/generated.js +1 -0
  146. package/dist/resources/fr-fr/generated.js.map +1 -1
  147. package/dist/resources/fr-fr/studio.d.ts.map +1 -1
  148. package/dist/resources/fr-fr/studio.js +1 -0
  149. package/dist/resources/fr-fr/studio.js.map +1 -1
  150. package/dist/resources/fr-fr/ui.d.ts +559 -559
  151. package/dist/resources/fr-fr/ui.d.ts.map +1 -1
  152. package/dist/resources/fr-fr/ui.js +560 -559
  153. package/dist/resources/fr-fr/ui.js.map +1 -1
  154. package/dist/resources/index.d.ts.map +1 -1
  155. package/dist/resources/index.js +1 -0
  156. package/dist/resources/index.js.map +1 -1
  157. package/dist/resources/lazy.d.ts.map +1 -1
  158. package/dist/resources/lazy.js.map +1 -1
  159. package/dist/resources/zh-cn/common.d.ts +787 -4
  160. package/dist/resources/zh-cn/common.d.ts.map +1 -1
  161. package/dist/resources/zh-cn/common.js +814 -30
  162. package/dist/resources/zh-cn/common.js.map +1 -1
  163. package/dist/resources/zh-cn/errors.d.ts +1 -0
  164. package/dist/resources/zh-cn/errors.d.ts.map +1 -1
  165. package/dist/resources/zh-cn/errors.js +2 -0
  166. package/dist/resources/zh-cn/errors.js.map +1 -1
  167. package/dist/resources/zh-cn/generated.d.ts.map +1 -1
  168. package/dist/resources/zh-cn/generated.js +1 -0
  169. package/dist/resources/zh-cn/generated.js.map +1 -1
  170. package/dist/resources/zh-cn/studio.d.ts.map +1 -1
  171. package/dist/resources/zh-cn/studio.js +1 -0
  172. package/dist/resources/zh-cn/studio.js.map +1 -1
  173. package/dist/resources/zh-cn/ui.d.ts +575 -575
  174. package/dist/resources/zh-cn/ui.d.ts.map +1 -1
  175. package/dist/resources/zh-cn/ui.js +576 -575
  176. package/dist/resources/zh-cn/ui.js.map +1 -1
  177. package/dist/resources/zh-tw/common.d.ts +786 -3
  178. package/dist/resources/zh-tw/common.d.ts.map +1 -1
  179. package/dist/resources/zh-tw/common.js +813 -29
  180. package/dist/resources/zh-tw/common.js.map +1 -1
  181. package/dist/resources/zh-tw/errors.d.ts +1 -0
  182. package/dist/resources/zh-tw/errors.d.ts.map +1 -1
  183. package/dist/resources/zh-tw/errors.js +2 -0
  184. package/dist/resources/zh-tw/errors.js.map +1 -1
  185. package/dist/resources/zh-tw/generated.d.ts.map +1 -1
  186. package/dist/resources/zh-tw/generated.js +1 -0
  187. package/dist/resources/zh-tw/generated.js.map +1 -1
  188. package/dist/resources/zh-tw/studio.d.ts.map +1 -1
  189. package/dist/resources/zh-tw/studio.js +1 -0
  190. package/dist/resources/zh-tw/studio.js.map +1 -1
  191. package/dist/resources/zh-tw/ui.d.ts +575 -575
  192. package/dist/resources/zh-tw/ui.d.ts.map +1 -1
  193. package/dist/resources/zh-tw/ui.js +576 -575
  194. package/dist/resources/zh-tw/ui.js.map +1 -1
  195. package/dist/review-status.d.ts +55 -0
  196. package/dist/review-status.d.ts.map +1 -0
  197. package/dist/review-status.js +60 -0
  198. package/dist/review-status.js.map +1 -0
  199. package/dist/revision.d.ts +35 -0
  200. package/dist/revision.d.ts.map +1 -0
  201. package/dist/revision.js +56 -0
  202. package/dist/revision.js.map +1 -0
  203. package/dist/server.d.ts +36 -0
  204. package/dist/server.d.ts.map +1 -0
  205. package/dist/server.js +36 -0
  206. package/dist/server.js.map +1 -0
  207. package/dist/validate-message.d.ts +57 -0
  208. package/dist/validate-message.d.ts.map +1 -0
  209. package/dist/validate-message.js +179 -0
  210. package/dist/validate-message.js.map +1 -0
  211. package/locales/ar-EG/.meta.json +13246 -0
  212. package/locales/ar-EG/common.json +812 -29
  213. package/locales/ar-EG/errors.json +1 -0
  214. package/locales/ar-EG/ui.json +586 -586
  215. package/locales/cs-CZ/.meta.json +13246 -0
  216. package/locales/cs-CZ/common.json +810 -27
  217. package/locales/cs-CZ/errors.json +1 -0
  218. package/locales/cs-CZ/ui.json +582 -582
  219. package/locales/da-DK/.meta.json +13246 -0
  220. package/locales/da-DK/common.json +813 -30
  221. package/locales/da-DK/errors.json +1 -0
  222. package/locales/da-DK/ui.json +568 -568
  223. package/locales/de-DE/.meta.json +13246 -0
  224. package/locales/de-DE/common.json +816 -33
  225. package/locales/de-DE/errors.json +1 -0
  226. package/locales/de-DE/ui.json +569 -569
  227. package/locales/en-US/common.json +812 -29
  228. package/locales/en-US/errors.json +1 -0
  229. package/locales/fr-FR/.meta.json +13246 -0
  230. package/locales/fr-FR/common.json +814 -31
  231. package/locales/fr-FR/errors.json +1 -0
  232. package/locales/fr-FR/ui.json +559 -559
  233. package/locales/zh-CN/.meta.json +13246 -0
  234. package/locales/zh-CN/common.json +813 -30
  235. package/locales/zh-CN/errors.json +1 -0
  236. package/locales/zh-CN/ui.json +575 -575
  237. package/locales/zh-TW/.meta.json +13246 -0
  238. package/locales/zh-TW/common.json +812 -29
  239. package/locales/zh-TW/errors.json +1 -0
  240. package/locales/zh-TW/ui.json +575 -575
  241. package/package.json +11 -3
@@ -1,3 +1,4 @@
1
+ // SPDX-License-Identifier: AGPL-3.0-only
1
2
  /**
2
3
  * GENERATED MIRROR of ../../../locales/en-US/common.json — do not edit by hand.
3
4
  * The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);
@@ -50,7 +51,10 @@ export default {
50
51
  "done": "Back to sign in",
51
52
  "rateLimited": "Too many requests — try again later.",
52
53
  "failed": "Something went wrong. Try again.",
53
- "smtpUnconfigured": "This Adminium has no email server configured, so it cannot send a reset link. Ask an administrator to reset your password for you."
54
+ "smtpUnconfigured": "This Adminium has no email server configured, so it cannot send a reset link. Ask an administrator to reset your password for you.",
55
+ "subtitle": "Enter your email and we'll send you a reset link.",
56
+ "sentBody": "We sent a reset link to {email}. It expires in 15 minutes.",
57
+ "resendHint": "Didn't get it?"
54
58
  },
55
59
  "reset": {
56
60
  "title": "Set a new password",
@@ -66,7 +70,8 @@ export default {
66
70
  "strong": "Strong",
67
71
  "tooShort": "Use at least 8 characters.",
68
72
  "submit": "Reset password",
69
- "failed": "Reset failed. Try again."
73
+ "failed": "Reset failed. Try again.",
74
+ "mismatch": "Passwords don't match."
70
75
  },
71
76
  "otp": {
72
77
  "title": "Two-factor authentication",
@@ -101,7 +106,12 @@ export default {
101
106
  "planning": "Planning",
102
107
  "people": "People",
103
108
  "account": "Account"
104
- }
109
+ },
110
+ "back": "Back",
111
+ "team": "Team",
112
+ "roles": "Roles & permissions",
113
+ "audit": "Audit log",
114
+ "security": "Password & sessions"
105
115
  },
106
116
  "topbar": {
107
117
  "search": "Search…",
@@ -113,6 +123,7 @@ export default {
113
123
  "userMenu": "Account menu",
114
124
  "profile": "Profile",
115
125
  "preferences": "Preferences",
126
+ "studio": "Studio",
116
127
  "signOut": "Sign out"
117
128
  },
118
129
  "palette": {
@@ -123,11 +134,15 @@ export default {
123
134
  "askAi": "Ask AI",
124
135
  "shortcuts": "Keyboard shortcuts",
125
136
  "signOut": "Sign out",
126
- "themeDark": "Switch to dark theme",
127
- "themeLight": "Switch to light theme",
137
+ "themeDark": "Dark mode",
138
+ "themeLight": "Light mode",
128
139
  "footerNavigate": "navigate",
129
140
  "footerOpen": "select",
130
- "footerClose": "close"
141
+ "footerClose": "close",
142
+ "recent": "Recent",
143
+ "searching": "Searching records…",
144
+ "records": "Records",
145
+ "empty": "No results for \"{query}\""
131
146
  },
132
147
  "shortcuts": {
133
148
  "title": "Keyboard shortcuts",
@@ -138,6 +153,7 @@ export default {
138
153
  "panel": "Show shortcuts panel",
139
154
  "search": "Focus search",
140
155
  "sidebar": "Toggle sidebar",
156
+ "studio": "Go to Studio",
141
157
  "theme": "Toggle light / dark",
142
158
  "then": "then",
143
159
  "footerPre": "Press",
@@ -145,7 +161,86 @@ export default {
145
161
  },
146
162
  "states": {
147
163
  "checked": "checked 8s ago",
148
- "diagnostics": "Diagnostics"
164
+ "diagnostics": "Diagnostics",
165
+ "reference": {
166
+ "label": "Reference",
167
+ "copy": "Copy reference",
168
+ "copied": "Copied",
169
+ "hint": "Quote this when reporting the problem — your server log records the same id."
170
+ },
171
+ "notFound": {
172
+ "title": "Page not found",
173
+ "body": "We couldn't find that page. It may have been moved or the link is broken.",
174
+ "primary": "Back to dashboard",
175
+ "secondary": "Contact support"
176
+ },
177
+ "forbidden": {
178
+ "title": "You don’t have access",
179
+ "body": "This dashboard is restricted. Ask a workspace admin to grant you access.",
180
+ "primary": "Request access",
181
+ "secondary": "Go back"
182
+ },
183
+ "error": {
184
+ "title": "Something went wrong",
185
+ "body": "Adminium hit an unexpected error handling this request. The details are in the server log.",
186
+ "primary": "Try again"
187
+ },
188
+ "dbUnreachable": {
189
+ "title": "Database unreachable",
190
+ "body": "We couldn't connect to prod-db. Your dashboards will resume once the connection is restored.",
191
+ "primary": "Retry connection",
192
+ "secondary": "Edit connection",
193
+ "diag": {
194
+ "status": "connection timed out (10s)",
195
+ "hint": "allowlist 52.9.14.2, then retry"
196
+ }
197
+ },
198
+ "maintenance": {
199
+ "title": "Scheduled maintenance",
200
+ "body": "Adminium is undergoing maintenance and will be back shortly. Thanks for your patience.",
201
+ "primary": "View status"
202
+ },
203
+ "rateLimited": {
204
+ "title": "Rate limit reached",
205
+ "body": "Too many requests in a short time. Wait a few minutes and try again.",
206
+ "primary": "Try again",
207
+ "secondary": "Go back"
208
+ },
209
+ "offline": {
210
+ "title": "You're offline",
211
+ "body": "Check your internet connection. Adminium will reconnect automatically when you’re back.",
212
+ "primary": "Retry now",
213
+ "banner": "You're offline — trying to reconnect…"
214
+ },
215
+ "expiredLink": {
216
+ "title": "This link has expired",
217
+ "body": "Magic sign-in links expire after 10 minutes. Request a fresh one to continue.",
218
+ "primary": "Send a new link",
219
+ "secondary": "Back to sign in"
220
+ },
221
+ "expiredSession": {
222
+ "title": "Your session expired",
223
+ "body": "For your security you were signed out after a period of inactivity. Sign in to pick up where you left off.",
224
+ "primary": "Sign in again"
225
+ },
226
+ "emptyNoSources": {
227
+ "title": "No data sources yet",
228
+ "body": "Connect a PostgreSQL database and Adminium will generate your first admin dashboard.",
229
+ "primary": "Connect a database",
230
+ "secondary": "Import sample data"
231
+ },
232
+ "readOnly": {
233
+ "title": "Read-only mode",
234
+ "body": "You have Viewer access to this workspace. You can explore dashboards, but editing and destructive actions are disabled.",
235
+ "primary": "Request edit access",
236
+ "secondary": "Got it"
237
+ },
238
+ "suspended": {
239
+ "title": "This workspace is suspended",
240
+ "body": "This workspace has been suspended by an administrator. Your data is preserved — contact the workspace owner to restore access.",
241
+ "primary": "Contact owner",
242
+ "secondary": "Go back"
243
+ }
149
244
  },
150
245
  "notFound": {
151
246
  "title": "This page went missing",
@@ -154,7 +249,8 @@ export default {
154
249
  "matches": "Matching pages",
155
250
  "popular": "Popular destinations",
156
251
  "goBack": "Go back",
157
- "backToDashboard": "Back to dashboard"
252
+ "backToDashboard": "Back to dashboard",
253
+ "noMatches": "No pages match \"{query}\""
158
254
  },
159
255
  "page": {
160
256
  "invalid": {
@@ -205,7 +301,8 @@ export default {
205
301
  },
206
302
  "locale": {
207
303
  "label": "Language",
208
- "directionNote": "Text direction: right to left (set automatically by the language)"
304
+ "directionNote": "Text direction: right to left (set automatically by the language)",
305
+ "communityDraft": "This translation is a community draft — it has not been reviewed by a native speaker yet."
209
306
  }
210
307
  },
211
308
  "account": {
@@ -461,6 +558,23 @@ export default {
461
558
  "label": "Application name",
462
559
  "helper": "Shown in the sidebar, browser title, and emails.",
463
560
  "error": "Enter a name of at most 60 characters."
561
+ },
562
+ "logo": {
563
+ "label": "Logo",
564
+ "drop": "Drop an image here",
565
+ "helper": "PNG, JPEG, WebP, GIF or SVG, up to 1 MB. Replaces the built-in mark everywhere.",
566
+ "upload": "Upload logo",
567
+ "replace": "Replace logo",
568
+ "remove": "Remove",
569
+ "uploaded": "Logo updated",
570
+ "removed": "Logo removed",
571
+ "tooLarge": "That image is larger than 1 MB.",
572
+ "badType": "Choose a PNG, JPEG, WebP, GIF or SVG image.",
573
+ "undo": "Undo"
574
+ },
575
+ "showVersion": {
576
+ "label": "Version in the sidebar",
577
+ "helper": "The build number beside the logo. Off hides which version you run."
464
578
  }
465
579
  },
466
580
  "security": {
@@ -490,6 +604,8 @@ export default {
490
604
  "close": "Close",
491
605
  "on": "On",
492
606
  "off": "Off",
607
+ "shown": "Shown",
608
+ "hidden": "Hidden",
493
609
  "change": "{before} → {after}"
494
610
  },
495
611
  "defaultsCard": {
@@ -508,6 +624,11 @@ export default {
508
624
  "heading": "AI enrichment",
509
625
  "body": "Configure an AI provider (or the copy-paste round-trip) to enrich labels, groups and relations.",
510
626
  "cta": "Open AI settings"
627
+ },
628
+ "pagesCard": {
629
+ "heading": "Pages",
630
+ "body": "Add, edit and delete pages, change what each one shows, and reorder the sidebar.",
631
+ "cta": "Manage pages"
511
632
  }
512
633
  },
513
634
  "settingsAi": {
@@ -873,7 +994,20 @@ export default {
873
994
  "testFailed": "Connection failed.",
874
995
  "v1Note": {
875
996
  "title": "About this install",
876
- "body": "This server chose its meta store at first boot. This step validates that your choice is compatible with this connection and records it — the server enforces the same rule independently (409 META_PLACEMENT_INVALID). Moving an existing meta store is an ops task (M10)."
997
+ "body": "This server already keeps its own tables in a configured database, and this step does not move them. It validates that your choice is compatible with this connection — the server enforces the same rule independently (409 META_PLACEMENT_INVALID)."
998
+ },
999
+ "move": {
1000
+ "title": "Moving Adminium’s tables",
1001
+ "copying": "Moving Adminium’s tables…",
1002
+ "restarting": "Restarting…",
1003
+ "copyingBody": "Copying every adminium_ table into the new database. Your source data is not touched, and nothing is switched over until the copy is verified.",
1004
+ "restartingBody": "The copy is done. Adminium is restarting onto the new database — this page will continue by itself in a few seconds.",
1005
+ "failed": "Could not move Adminium’s tables — retry.",
1006
+ "timeout": "Adminium moved its tables but has not come back yet. Your data is safe in the new database — reload this page in a moment."
1007
+ },
1008
+ "willMove": {
1009
+ "title": "This will move Adminium’s tables",
1010
+ "body": "Adminium is currently using its built-in SQLite store. Continue copies that store into the database you picked and restarts onto it — accounts, pages and settings come with it, so you stay signed in."
877
1011
  }
878
1012
  },
879
1013
  "intent": {
@@ -1027,7 +1161,8 @@ export default {
1027
1161
  "unique": "UNIQUE",
1028
1162
  "pii": "PII",
1029
1163
  "masked": "Masked"
1030
- }
1164
+ },
1165
+ "unavailableTitle": "Schema remap editor not available"
1031
1166
  }
1032
1167
  },
1033
1168
  "onboarding": {
@@ -1147,7 +1282,9 @@ export default {
1147
1282
  "duplicate": "Duplicate {name}",
1148
1283
  "remove": "Remove {name}",
1149
1284
  "removed": "{name} removed.",
1150
- "duplicated": "{name} duplicated."
1285
+ "duplicated": "{name} duplicated.",
1286
+ "unboundHint": "This widget shows sample data here and on the live page. Open Configure to connect it to a table.",
1287
+ "unbound": "Sample data"
1151
1288
  },
1152
1289
  "families": {
1153
1290
  "kpi": "KPIs",
@@ -1170,7 +1307,149 @@ export default {
1170
1307
  "saveVersionTitle": "Save a version",
1171
1308
  "saveVersionBody": "Snapshots the current document. Restore it any time from Versions.",
1172
1309
  "versionName": "Version name",
1173
- "versionNamePlaceholder": "e.g. Before Q3 rates change"
1310
+ "versionNamePlaceholder": "e.g. Before Q3 rates change",
1311
+ "discard": "Discard changes",
1312
+ "discardTitle": "Discard your changes?",
1313
+ "discardBody": "The dashboard goes back to how it looked when you opened the editor. Your data isn’t affected.",
1314
+ "discardConfirm": "Discard changes",
1315
+ "keepEditing": "Keep editing",
1316
+ "discarded": "Changes discarded.",
1317
+ "binding": {
1318
+ "addFilter": "Add filter",
1319
+ "brokenBody": "It no longer matches a query this version understands, so the widget shows an error on the live page.",
1320
+ "brokenTitle": "This widget’s query is broken",
1321
+ "bucketColumn": "Date column",
1322
+ "bucketRequired": "Pick the column that carries the date.",
1323
+ "bucketUnit": "Group time by",
1324
+ "columnNone": "None",
1325
+ "columnPlaceholder": "Choose a column…",
1326
+ "connect": "Connect to data",
1327
+ "edit": "Edit query",
1328
+ "event": {
1329
+ "category": "Category column (optional)",
1330
+ "date": "Start date column",
1331
+ "end": "End date column (optional)",
1332
+ "title": "Title column"
1333
+ },
1334
+ "filterColumnRequired": "Pick a column.",
1335
+ "filterColumn": "Column",
1336
+ "filterListHelper": "Separate values with commas.",
1337
+ "filterOp": "Condition",
1338
+ "filterValue": "Value",
1339
+ "fn": {
1340
+ "avg": "Average",
1341
+ "countDistinct": "Count of distinct values",
1342
+ "count": "Count of rows",
1343
+ "max": "Maximum",
1344
+ "min": "Minimum",
1345
+ "sum": "Sum"
1346
+ },
1347
+ "groupByColumns": "Columns",
1348
+ "groupByRequired": "This view needs a breakdown column.",
1349
+ "groupByRows": "Rows",
1350
+ "groupBy": "Group by",
1351
+ "incompleteBody": "Fill in the highlighted fields — a half-written query would fail on the live dashboard.",
1352
+ "incompleteTitle": "This query isn’t finished",
1353
+ "limit": "Most rows to fetch",
1354
+ "loadingSchema": "Loading tables…",
1355
+ "lossyBody": "Parts of it — extra measures, sorts or page-filter links — aren’t shown here and will be dropped if you save.",
1356
+ "lossyTitle": "This query is more advanced than the editor",
1357
+ "measureColumnRequired": "This calculation needs a column.",
1358
+ "measureColumn": "Of column",
1359
+ "measureFn": "Calculate",
1360
+ "noConnectionBody": "Widgets can only be bound on a page that belongs to a connection.",
1361
+ "noConnectionTitle": "This page has no database connection",
1362
+ "noDateColumns": "This table has no date or timestamp column.",
1363
+ "noFilters": "No filters — every row in the table is counted.",
1364
+ "noSnapshotBody": "Tables and columns come from the connection’s last introspection. Run introspection in Studio, then reopen this editor.",
1365
+ "noSnapshotTitle": "No schema snapshot for this connection",
1366
+ "op": {
1367
+ "between": "is between",
1368
+ "ilike": "contains (any case)",
1369
+ "in": "is one of",
1370
+ "isNull": "is empty",
1371
+ "like": "contains",
1372
+ "notNull": "is not empty"
1373
+ },
1374
+ "orderAsc": "Oldest / lowest first",
1375
+ "orderBy": "Sort by",
1376
+ "orderDesc": "Newest / highest first",
1377
+ "orderDir": "Direction",
1378
+ "orderNone": "Database order",
1379
+ "pickTableFirst": "Pick a table to choose its columns.",
1380
+ "removeFilter": "Remove filter",
1381
+ "remove": "Remove data source",
1382
+ "save": "Use this query",
1383
+ "sectionBreakdown": "Breakdown",
1384
+ "sectionColumns": "Columns",
1385
+ "sectionFilters": "Filters",
1386
+ "sectionMeasure": "Measure",
1387
+ "sectionRows": "Rows",
1388
+ "sectionSource": "Source",
1389
+ "sectionTime": "Time axis",
1390
+ "sectionWindow": "Period",
1391
+ "selectColumns": "Columns to show",
1392
+ "selectRequired": "Choose at least one column to show.",
1393
+ "shape": {
1394
+ "calendarEvents": "Dated events",
1395
+ "categorical": "A value per category",
1396
+ "distribution": "The spread of one column",
1397
+ "matrix": "A grid of rows by columns",
1398
+ "metricDelta": "A number, compared to the period before",
1399
+ "multiTimeseries": "One line over time per category",
1400
+ "recordList": "A list of rows",
1401
+ "record": "One row",
1402
+ "singleMetric": "A single number",
1403
+ "stream": "A live feed of recent rows",
1404
+ "timeseries": "A value over time",
1405
+ "tree": "A value per category, split in two levels",
1406
+ "geoPoints": "A value per place or region",
1407
+ "flows": "How much moves from one category to another",
1408
+ "ohlc": "Open, high, low and close per period",
1409
+ "booleanMap": "An on/off flag per key"
1410
+ },
1411
+ "shapeHelper": "Changing this changes which query controls apply.",
1412
+ "shapeLabel": "What this widget shows",
1413
+ "summaryColumns": "{count, plural, one {# column} other {# columns}}",
1414
+ "summaryFilters": "{count, plural, one {# filter} other {# filters}}",
1415
+ "tableEmpty": "No matching table.",
1416
+ "tablePlaceholder": "Search tables…",
1417
+ "tableRequired": "Pick a table to query.",
1418
+ "table": "Table or view",
1419
+ "title": "Data source",
1420
+ "unbindableBody": "It shows the shape of data the query engine doesn’t build yet, so it renders its own sample content.",
1421
+ "unbindableTitle": "This widget can’t query data yet",
1422
+ "unboundBody": "It shows sample numbers here AND on the live page. Connect it to a table to show real data.",
1423
+ "unboundTitle": "Not connected to your data",
1424
+ "unit": {
1425
+ "day": "Daily",
1426
+ "hour": "Hourly",
1427
+ "month": "Monthly",
1428
+ "quarter": "Quarterly",
1429
+ "week": "Weekly",
1430
+ "year": "Yearly"
1431
+ },
1432
+ "valueColumnRequired": "Pick the column to measure.",
1433
+ "valueColumn": "Value column",
1434
+ "windowColumn": "Date column",
1435
+ "windowLast": "Last",
1436
+ "windowNone": "All time",
1437
+ "windowRequired": "Comparing to the previous period needs a date column.",
1438
+ "windowUnit": {
1439
+ "day": "days",
1440
+ "hour": "hours",
1441
+ "month": "months",
1442
+ "quarter": "quarters",
1443
+ "week": "weeks",
1444
+ "year": "years"
1445
+ },
1446
+ "windowUnitLabel": "Unit",
1447
+ "role": {
1448
+ "flagKey": "Key column",
1449
+ "flagValue": "On/off column"
1450
+ },
1451
+ "roleColumnsRequired": "Fill every required column, and leave no gaps before one you filled — these columns are read in order."
1452
+ }
1174
1453
  },
1175
1454
  "setup": {
1176
1455
  "title": "Set up Adminium",
@@ -1523,7 +1802,8 @@ export default {
1523
1802
  "helpAbout": "About Adminium"
1524
1803
  },
1525
1804
  "settings": {
1526
- "explainer": "These settings apply to the Adminium app on this computer only. They are stored on this machine, not in your workspace."
1805
+ "explainer": "These settings apply to the Adminium app on this computer only. They are stored on this machine, not in your workspace.",
1806
+ "title": "Desktop settings"
1527
1807
  },
1528
1808
  "security": {
1529
1809
  "heading": "Sign-in"
@@ -1570,7 +1850,8 @@ export default {
1570
1850
  "mismatchBody": "Sharing is switched off, but the server has not released the network yet. Restart Adminium to close it.",
1571
1851
  "transportTitle": "Traffic on your local network is not encrypted.",
1572
1852
  "transportBody": "Share only on networks you trust. For remote access, use Adminium self-host behind HTTPS.",
1573
- "firewall": "The first time you share, your operating system will ask whether to allow incoming connections — choose Allow, or other devices will not be able to reach Adminium."
1853
+ "firewall": "The first time you share, your operating system will ask whether to allow incoming connections — choose Allow, or other devices will not be able to reach Adminium.",
1854
+ "manageTeam": "Manage users & roles"
1574
1855
  },
1575
1856
  "setup": {
1576
1857
  "title": "Welcome to Adminium",
@@ -1779,37 +2060,48 @@ export default {
1779
2060
  },
1780
2061
  "templates": {
1781
2062
  "crud": {
1782
- "title": "Records"
2063
+ "title": "Records",
2064
+ "description": "Rows in a searchable table."
1783
2065
  },
1784
2066
  "dashboard": {
1785
- "title": "Dashboard"
2067
+ "title": "Dashboard",
2068
+ "description": "Charts and figures you arrange."
1786
2069
  },
1787
2070
  "board": {
1788
- "title": "Board"
2071
+ "title": "Board",
2072
+ "description": "Cards in columns by status."
1789
2073
  },
1790
2074
  "calendar": {
1791
- "title": "Calendar"
2075
+ "title": "Calendar",
2076
+ "description": "Records on a month grid, by date."
1792
2077
  },
1793
2078
  "scheduler": {
1794
- "title": "Scheduler"
2079
+ "title": "Scheduler",
2080
+ "description": "A timeline per person."
1795
2081
  },
1796
2082
  "logViewer": {
1797
- "title": "Logs"
2083
+ "title": "Logs",
2084
+ "description": "Filterable event lines."
1798
2085
  },
1799
2086
  "files": {
1800
- "title": "Files"
2087
+ "title": "Files",
2088
+ "description": "Files and folders to browse."
1801
2089
  },
1802
2090
  "chat": {
1803
- "title": "Chat"
2091
+ "title": "Chat",
2092
+ "description": "Threaded conversations."
1804
2093
  },
1805
2094
  "builder": {
1806
- "title": "Builder"
2095
+ "title": "Builder",
2096
+ "description": "A drag-and-drop document canvas."
1807
2097
  },
1808
2098
  "wizard": {
1809
- "title": "Wizard"
2099
+ "title": "Wizard",
2100
+ "description": "Guided steps to finish a task."
1810
2101
  },
1811
2102
  "settings": {
1812
- "title": "Settings"
2103
+ "title": "Settings",
2104
+ "description": "Preference rows with toggles."
1813
2105
  },
1814
2106
  "directory": {
1815
2107
  "title": "Directory",
@@ -1823,7 +2115,8 @@ export default {
1823
2115
  "noMatchesBody": "Try a different search or remove a filter.",
1824
2116
  "errorTitle": "This directory failed to load",
1825
2117
  "loading": "Loading people",
1826
- "memberCount": "{count} people"
2118
+ "memberCount": "{count} people",
2119
+ "description": "People cards and an org chart."
1827
2120
  },
1828
2121
  "masterDetail": {
1829
2122
  "title": "List & detail",
@@ -1835,7 +2128,8 @@ export default {
1835
2128
  "noMatchesBody": "Try removing a filter.",
1836
2129
  "errorTitle": "This list failed to load",
1837
2130
  "loading": "Loading records",
1838
- "selectPrompt": "Select a record"
2131
+ "selectPrompt": "Select a record",
2132
+ "description": "A list, with the record beside it."
1839
2133
  },
1840
2134
  "queueInbox": {
1841
2135
  "title": "Queue",
@@ -1860,7 +2154,8 @@ export default {
1860
2154
  "errorTitle": "This queue failed to load",
1861
2155
  "loading": "Loading queue",
1862
2156
  "selectPrompt": "Select a request",
1863
- "daysUnit": "{count} days"
2157
+ "daysUnit": "{count} days",
2158
+ "description": "A work queue with approve and reject."
1864
2159
  }
1865
2160
  },
1866
2161
  "dataio": {
@@ -1962,6 +2257,495 @@ export default {
1962
2257
  "reportFailed": "Scheduled report failed",
1963
2258
  "backupCompleted": "Backup completed"
1964
2259
  }
2260
+ },
2261
+ "theme": {
2262
+ "toLight": "Light mode",
2263
+ "toDark": "Dark mode"
2264
+ },
2265
+ "studioPages": {
2266
+ "title": "Pages",
2267
+ "subtitle": "Add, edit and organise the pages of your app, and the order they appear in the sidebar.",
2268
+ "createButton": "New page",
2269
+ "loadFailed": {
2270
+ "title": "Pages could not be loaded",
2271
+ "body": "Managing pages needs the “Manage pages” permission. Ask an administrator to grant it to one of your roles."
2272
+ },
2273
+ "tab": {
2274
+ "pages": "All pages",
2275
+ "sidebar": "Sidebar order"
2276
+ },
2277
+ "list": {
2278
+ "title": "Pages",
2279
+ "count": "{count, plural, one {# page} other {# pages}}"
2280
+ },
2281
+ "empty": {
2282
+ "title": "No pages yet",
2283
+ "body": "Connect a database to generate pages automatically, or create one by hand."
2284
+ },
2285
+ "status": {
2286
+ "live": "Live",
2287
+ "hidden": "Hidden"
2288
+ },
2289
+ "origin": {
2290
+ "generated": "Generated",
2291
+ "manifest": "Add-on",
2292
+ "llm": "Assistant",
2293
+ "system": "System",
2294
+ "user": "Custom"
2295
+ },
2296
+ "row": {
2297
+ "menu": "Actions for {title}"
2298
+ },
2299
+ "action": {
2300
+ "edit": "Edit page",
2301
+ "duplicate": "Duplicate",
2302
+ "hide": "Hide from sidebar",
2303
+ "show": "Show in sidebar",
2304
+ "delete": "Delete page"
2305
+ },
2306
+ "create": {
2307
+ "title": "New page",
2308
+ "failed": "The page could not be created",
2309
+ "submit": "Create page",
2310
+ "subtitle": "Pick what this page shows and how it looks."
2311
+ },
2312
+ "duplicate": {
2313
+ "title": "Duplicate page",
2314
+ "failed": "The page could not be duplicated",
2315
+ "submit": "Duplicate"
2316
+ },
2317
+ "delete": {
2318
+ "title": "Delete this page?",
2319
+ "body": "This cannot be undone. Saved views and personal layouts on this page are deleted for everyone.",
2320
+ "bodyGenerated": "This page was created by schema generation, so it will come back the next time you regenerate. Saved views and personal layouts on it are deleted for everyone.",
2321
+ "prompt": "Type {slug} to confirm",
2322
+ "confirm": "Delete page"
2323
+ },
2324
+ "field": {
2325
+ "title": "Title",
2326
+ "titleHint": "Shown in the sidebar and the page header.",
2327
+ "slug": "Page address",
2328
+ "slugHint": "Lowercase letters, numbers and dashes. Just the last part — the rest of the address is added for you.",
2329
+ "slugTaken": "Another page already uses this address.",
2330
+ "slugWarning": "Changing the address breaks existing links and bookmarks to this page.",
2331
+ "template": "Template",
2332
+ "templateHint": "Decides what the page can hold. You can change it later.",
2333
+ "group": "Sidebar group",
2334
+ "groupHint": "Which section of the sidebar it appears in.",
2335
+ "icon": "Icon",
2336
+ "iconHint": "Shown beside the page name in the sidebar.",
2337
+ "visible": "Show in sidebar",
2338
+ "visibleHint": "A hidden page stays reachable at its URL for anyone who has the link.",
2339
+ "table": "Table",
2340
+ "tableCreateHint": "The table this page reads. You can bind it later.",
2341
+ "tableNone": "Not bound",
2342
+ "tableNeedsConnection": "Pick a data source first.",
2343
+ "connection": "Data source",
2344
+ "connectionNone": "None",
2345
+ "iconPick": "Choose the page icon",
2346
+ "padding": "Page padding"
2347
+ },
2348
+ "editor": {
2349
+ "title": "Edit page",
2350
+ "save": "Save changes",
2351
+ "saveFailed": "Changes could not be saved",
2352
+ "openPage": "Open page",
2353
+ "generated": {
2354
+ "title": "This page was generated from your schema",
2355
+ "body": "Your changes survive regeneration. Deleting only lasts until the next run recreates it."
2356
+ },
2357
+ "contentUnavailable": "Page contents could not be loaded",
2358
+ "contentUnavailableBody": "The details above can still be saved.",
2359
+ "contentInvalid": "This page’s configuration is not readable",
2360
+ "contentInvalidBody": "It was written by a newer version, or it is malformed. Regenerate the page or delete it.",
2361
+ "data": "Data",
2362
+ "schemaFailed": "Tables could not be listed",
2363
+ "schemaFailedBody": "This connection may not have been analysed yet. Run introspection from Studio → Data connections.",
2364
+ "notBindable": "This template is not bound to one table",
2365
+ "notBindableBody": "Its contents are built widget by widget instead. Open the page and use Edit to add them.",
2366
+ "recompose": "This page will be rebuilt",
2367
+ "recomposeBody": "Saving rebuilds the contents. Column and widget edits here are lost.",
2368
+ "missing": "That page no longer exists",
2369
+ "missingBody": "It may have been deleted, or removed by a regeneration run.",
2370
+ "details": "Details",
2371
+ "itemsPending": "Save the change above first — the contents are rebuilt from it.",
2372
+ "columns": "Columns",
2373
+ "appearance": "Appearance"
2374
+ },
2375
+ "sidebar": {
2376
+ "help": "Reorder pages within a group, or move one to another group. Changes apply to every user.",
2377
+ "discard": "Discard",
2378
+ "save": "Save order",
2379
+ "saveFailed": "The new order could not be saved",
2380
+ "emptyGroup": "No pages in this group.",
2381
+ "moveUp": "Move {title} up",
2382
+ "moveDown": "Move {title} down",
2383
+ "moveTo": "Move {title} to a group",
2384
+ "ungrouped": {
2385
+ "title": "Some pages are in no sidebar group",
2386
+ "body": "These pages work at their URL but appear nowhere in the sidebar. Open each one and pick a group."
2387
+ }
2388
+ },
2389
+ "columns": {
2390
+ "help": "Reorder columns, rename their headers, and choose which are shown in the table.",
2391
+ "discard": "Discard",
2392
+ "save": "Save columns",
2393
+ "saveFailed": "Columns could not be saved",
2394
+ "pk": "Key",
2395
+ "pii": "PII",
2396
+ "header": "Header for {name}",
2397
+ "shown": "Shown",
2398
+ "toggle": "Show {name} in the table",
2399
+ "moveUp": "Move {name} up",
2400
+ "moveDown": "Move {name} down",
2401
+ "remove": "Remove {name}",
2402
+ "none": {
2403
+ "title": "This page has no columns yet",
2404
+ "body": "Columns are read from the table when the page is generated. Bind this page to a table and regenerate to fill them in."
2405
+ }
2406
+ },
2407
+ "icon": {
2408
+ "none": "Choose an icon",
2409
+ "search": "Search icons",
2410
+ "noMatches": "No icons match that search."
2411
+ },
2412
+ "preview": {
2413
+ "untitled": "Untitled page",
2414
+ "note": "An illustration of the layout, not your data."
2415
+ },
2416
+ "padding": {
2417
+ "default": "Default for this template",
2418
+ "none": "None",
2419
+ "standard": "Standard (28 × 24)",
2420
+ "custom": "Custom…",
2421
+ "x": "Sides (px)",
2422
+ "y": "Top and bottom (px)"
2423
+ }
2424
+ },
2425
+ "audit": {
2426
+ "action": {
2427
+ "view": "View"
2428
+ },
2429
+ "actor": {
2430
+ "apiKey": "API key",
2431
+ "automation": "Automation",
2432
+ "system": "System",
2433
+ "user": "User"
2434
+ },
2435
+ "category": {
2436
+ "auth": "Sign-in & accounts",
2437
+ "automation": "Automations",
2438
+ "connection": "Connections",
2439
+ "data": "Records",
2440
+ "export": "Imports & exports",
2441
+ "llm": "AI assist",
2442
+ "rbac": "Roles & permissions",
2443
+ "schema": "Schema",
2444
+ "settings": "Settings",
2445
+ "system": "System"
2446
+ },
2447
+ "column": {
2448
+ "action": "Action",
2449
+ "actor": "Actor",
2450
+ "category": "Category",
2451
+ "details": "Details",
2452
+ "when": "When"
2453
+ },
2454
+ "drawer": {
2455
+ "actorId": "Actor id",
2456
+ "actorKind": "Actor type",
2457
+ "after": "After",
2458
+ "before": "Before",
2459
+ "category": "Category",
2460
+ "changes": "Changes",
2461
+ "connection": "Connection",
2462
+ "field": "Field",
2463
+ "ip": "IP address",
2464
+ "noChanges": "This action recorded no before/after images.",
2465
+ "none": "None",
2466
+ "requestId": "Request id",
2467
+ "resource": "Resource",
2468
+ "subtitle": "{actor} · {when}",
2469
+ "truncated": "Truncated at 16 KB",
2470
+ "userAgent": "User agent"
2471
+ },
2472
+ "empty": {
2473
+ "body": "Changes to data, schema, settings and permissions land here as they happen.",
2474
+ "filtered": {
2475
+ "body": "Widen the date range or clear the category filter.",
2476
+ "title": "Nothing matches these filters"
2477
+ },
2478
+ "title": "Nothing has been logged yet"
2479
+ },
2480
+ "filterActor": "Actor id",
2481
+ "filterCategoryAny": "Any category",
2482
+ "filterCategory": "Filter by category",
2483
+ "filterFrom": "From",
2484
+ "filterTo": "To",
2485
+ "listFailed": {
2486
+ "title": "Could not load the audit log"
2487
+ },
2488
+ "loadMore": "Load older entries",
2489
+ "subtitle": "Every change made in this workspace, who made it, and what it changed.",
2490
+ "title": "Audit log"
2491
+ },
2492
+ "roles": {
2493
+ "action": {
2494
+ "delete": "Delete",
2495
+ "rename": "Rename"
2496
+ },
2497
+ "builtinLocked": "Built-in roles cannot be deleted.",
2498
+ "category": {
2499
+ "access": "Access",
2500
+ "data": "Data",
2501
+ "operations": "Operations",
2502
+ "workspace": "Workspace"
2503
+ },
2504
+ "column": {
2505
+ "actions": "Actions",
2506
+ "members": "Members",
2507
+ "name": "Role"
2508
+ },
2509
+ "create": {
2510
+ "descriptionLabel": "Description",
2511
+ "description": "A new role starts with no permissions at all.",
2512
+ "failed": "Could not create the role",
2513
+ "namePlaceholder": "e.g. Support agent",
2514
+ "name": "Name",
2515
+ "submit": "Create role",
2516
+ "title": "New role"
2517
+ },
2518
+ "createButton": "New role",
2519
+ "delete": {
2520
+ "confirm": "Delete role",
2521
+ "description": "The role and its permission rows are removed.",
2522
+ "failed": "Could not delete the role",
2523
+ "hasMembers": "“{name}” still has {count, plural, one {# member} other {# members}}. Choose the role they move to — Adminium will not leave an account with no role.",
2524
+ "noMembers": "Nobody holds “{name}”, so nothing moves.",
2525
+ "reassignPlaceholder": "Choose a role…",
2526
+ "reassignTo": "Move members to",
2527
+ "title": "Delete role"
2528
+ },
2529
+ "list": {
2530
+ "title": "Roles"
2531
+ },
2532
+ "loadFailed": {
2533
+ "body": "The matrix below is incomplete, so saving it would clear permissions that are simply not loaded. Reload before making changes.",
2534
+ "title": "Some permissions could not be read"
2535
+ },
2536
+ "matrix": {
2537
+ "discard": "Discard",
2538
+ "empty": {
2539
+ "body": "This instance reported no grantable permissions at all, which should not happen — reload, and if it persists check the server log.",
2540
+ "title": "No permissions to show"
2541
+ },
2542
+ "label": "Role permissions",
2543
+ "noChanges": "No pending changes",
2544
+ "pending": "{count, plural, one {# pending change} other {# pending changes}}",
2545
+ "rowHeader": "Permission",
2546
+ "title": "Permissions"
2547
+ },
2548
+ "memberCount": "{count, plural, one {# user} other {# users}}",
2549
+ "permission": {
2550
+ "apiKeysManage": "Manage API keys",
2551
+ "auditRead": "Read the audit log",
2552
+ "connectionsManage": "Manage database connections",
2553
+ "exportsManage": "Manage everyone’s exports",
2554
+ "importsManage": "Manage everyone’s imports",
2555
+ "jobsManage": "Start and cancel background jobs",
2556
+ "jobsRead": "See all background jobs",
2557
+ "llmRun": "Run AI assist",
2558
+ "pagesManage": "Create and organize pages",
2559
+ "reportsManage": "Manage scheduled reports",
2560
+ "rolesManage": "Manage roles and permissions",
2561
+ "schemaRemap": "Edit schema labels and overrides",
2562
+ "settingsManage": "Manage workspace settings",
2563
+ "usersManage": "Manage users"
2564
+ },
2565
+ "rename": {
2566
+ "failed": "Could not rename the role",
2567
+ "title": "Rename role"
2568
+ },
2569
+ "saveFailed": {
2570
+ "title": "Could not save every role"
2571
+ },
2572
+ "subtitle": "What each role may do. A user gets the union of every role they hold.",
2573
+ "title": "Roles & permissions"
2574
+ },
2575
+ "security": {
2576
+ "password": {
2577
+ "changedBody": "Use the new password the next time you sign in. Sessions on other devices are unaffected — revoke them below if you want them signed out.",
2578
+ "changed": "Password changed",
2579
+ "confirm": "Confirm new password",
2580
+ "current": "Current password",
2581
+ "failed": "Could not change your password",
2582
+ "helper": "At least 8 characters.",
2583
+ "mismatch": "The two passwords do not match.",
2584
+ "new": "New password",
2585
+ "submit": "Change password",
2586
+ "title": "Password"
2587
+ },
2588
+ "sessions": {
2589
+ "expires": "Expires {at}",
2590
+ "failedBody": "This list is the only place that shows where your account is signed in, so treat an empty one as unknown rather than as none.",
2591
+ "failed": "Could not read your sessions",
2592
+ "ip": "IP {ip}",
2593
+ "loading": "Looking for other signed-in devices…",
2594
+ "noIp": "No IP recorded",
2595
+ "revokeBody": "The session ends immediately and whoever is using it has to sign in again.",
2596
+ "revokeFailed": "Could not sign that device out",
2597
+ "revokeTitle": "Sign this device out",
2598
+ "revoke": "Sign out",
2599
+ "seenUnknown": "Last seen: unknown",
2600
+ "seen": "Last seen {since}",
2601
+ "thisDevice": "This device",
2602
+ "title": "Signed in",
2603
+ "unknownDevice": "Unrecognised device"
2604
+ },
2605
+ "subtitle": "Your password, your second factor, and everywhere you are signed in.",
2606
+ "title": "Security",
2607
+ "twoFactor": {
2608
+ "activateFailed": "That code was not accepted",
2609
+ "activate": "Turn on two-factor",
2610
+ "body": "An authenticator app generates a 6-digit code that Adminium asks for after your password.",
2611
+ "code": "Code from your app",
2612
+ "copyKey": "Copy setup key",
2613
+ "copyLink": "Copy setup link",
2614
+ "disableBody": "Your account goes back to password-only, and your recovery codes stop working.",
2615
+ "disableConfirm": "Turn it off",
2616
+ "disableFailed": "Could not turn off two-factor",
2617
+ "disablePassword": "Your password",
2618
+ "disableTitle": "Turn off two-factor authentication",
2619
+ "disable": "Turn off two-factor",
2620
+ "enrollFailed": "Could not start setup",
2621
+ "enroll": "Set up two-factor",
2622
+ "hide": "Hide setup key",
2623
+ "off": "Off",
2624
+ "on": "On",
2625
+ "recovery": {
2626
+ "body": "Each code signs you in once if you lose your authenticator. They are shown only now.",
2627
+ "copy": "Copy codes",
2628
+ "title": "Save your recovery codes"
2629
+ },
2630
+ "reveal": "Show setup key",
2631
+ "secretHelper": "Paste the setup link into your authenticator, or type the key in by hand.",
2632
+ "secret": "Setup key",
2633
+ "title": "Two-factor authentication"
2634
+ }
2635
+ },
2636
+ "team": {
2637
+ "action": {
2638
+ "reactivate": "Reactivate",
2639
+ "remove": "Delete",
2640
+ "resend": "New link",
2641
+ "roles": "Roles",
2642
+ "suspend": "Suspend"
2643
+ },
2644
+ "column": {
2645
+ "actions": "Actions",
2646
+ "lastSeen": "Last seen",
2647
+ "person": "Person",
2648
+ "roles": "Roles",
2649
+ "status": "Status"
2650
+ },
2651
+ "counts": "{active} active · {invited} invited · {suspended} suspended",
2652
+ "empty": {
2653
+ "body": "Invite a teammate to give them their own sign-in and role.",
2654
+ "filtered": {
2655
+ "body": "Clear the filters to see the whole directory.",
2656
+ "title": "No one matches these filters"
2657
+ },
2658
+ "title": "Only you have an account"
2659
+ },
2660
+ "filterRoleAny": "Any role",
2661
+ "filterRole": "Filter by role",
2662
+ "filterStatusAny": "Any status",
2663
+ "filterStatus": "Filter by status",
2664
+ "invite": {
2665
+ "copied": "Copied",
2666
+ "copyLink": "Copy link",
2667
+ "created": {
2668
+ "body": "Send this link to {email} yourself. It is shown once — Adminium stores only a hash of it, so if you lose it you will have to delete the invitation and issue a new one.",
2669
+ "title": "Invitation created"
2670
+ },
2671
+ "emailIt": "Email the invitation",
2672
+ "expiresRelative": "The link expires {at} ({relative}).",
2673
+ "expires": "The link expires {at}.",
2674
+ "noEmail": {
2675
+ "smtp": "No SMTP server is configured on this instance, so there is nothing to send mail with. Share the link over a channel you already trust.",
2676
+ "title": "Adminium did not email this link",
2677
+ "unknown": "Adminium could not check whether this instance can send mail. Share the link over a channel you already trust."
2678
+ }
2679
+ },
2680
+ "inviteButton": "Invite teammate",
2681
+ "inviteDialog": {
2682
+ "description": "Adminium creates the account and gives you a one-time activation link to pass on.",
2683
+ "emailPlaceholder": "name@example.com",
2684
+ "email": "Email",
2685
+ "failed": "Could not create the invitation",
2686
+ "namePlaceholder": "e.g. Dana Osei",
2687
+ "name": "Name",
2688
+ "rolesHelper": "Pick the least-privileged role that lets them do their job. You can change this later.",
2689
+ "roles": "Roles",
2690
+ "submit": "Create invitation",
2691
+ "title": "Invite a teammate"
2692
+ },
2693
+ "listFailed": {
2694
+ "title": "Could not load the directory"
2695
+ },
2696
+ "loadMore": "Load more",
2697
+ "neverSignedIn": "Never signed in",
2698
+ "noRoles": "No roles",
2699
+ "remove": {
2700
+ "body": "This erases {name}’s account, their preferences and their sign-in sessions, and blanks their name from the record of settings they changed. Suspending instead keeps all of it and only stops them signing in. This cannot be undone.",
2701
+ "confirm": "Delete permanently",
2702
+ "prompt": "Type “{email}” to confirm",
2703
+ "title": "Delete account permanently"
2704
+ },
2705
+ "roles": {
2706
+ "unavailable": "Roles are not visible to your account, so none can be assigned here."
2707
+ },
2708
+ "rolesDialog": {
2709
+ "description": "A user gets the union of every role they hold.",
2710
+ "failed": "Could not change the roles",
2711
+ "title": "Roles for {name}"
2712
+ },
2713
+ "rolesLocked": "Changing roles needs the “Manage roles” permission.",
2714
+ "search": "Search name or email",
2715
+ "status": {
2716
+ "active": "Active",
2717
+ "invited": "Invited",
2718
+ "suspended": "Suspended"
2719
+ },
2720
+ "subtitle": "Who has an account on this Adminium, and what each of them can do.",
2721
+ "title": "Team",
2722
+ "twoFactorOn": "Two-factor authentication is on",
2723
+ "twoFactorShort": "2FA"
2724
+ },
2725
+ "email": {
2726
+ "linkFallback": "If the button doesn’t work, paste this link into your browser: {url}",
2727
+ "notification": {
2728
+ "action": "Open {appName}",
2729
+ "footer": "You are receiving this because email notifications are on for your {appName} account. You can turn them off in your notification preferences.",
2730
+ "name": "Notification"
2731
+ },
2732
+ "passwordReset": {
2733
+ "action": "Choose a new password",
2734
+ "heading": "Reset your password",
2735
+ "intro": "Hi {name}, we received a request to reset the password for {email}.",
2736
+ "name": "Password reset",
2737
+ "notice": "This link works only once and expires in {expiresInMinutes} minutes. If you didn’t ask to reset your password, you can ignore this email — your current password stays active.",
2738
+ "subject": "Reset your {appName} password"
2739
+ },
2740
+ "userInvite": {
2741
+ "action": "Accept the invitation",
2742
+ "heading": "You’ve been invited",
2743
+ "intro": "{inviterName} invited you to join {appName}. Accept the invitation to set a password for {email} and sign in.",
2744
+ "inviterFallback": "An administrator",
2745
+ "name": "Team invitation",
2746
+ "notice": "This invitation works only once and expires in {expiresInDays} days. If you weren’t expecting it, you can ignore this email.",
2747
+ "subject": "You have been invited to {appName}"
2748
+ }
1965
2749
  }
1966
2750
  };
1967
2751
  //# sourceMappingURL=common.js.map