@adminiumjs/i18n 0.2.1 → 0.2.2

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 (232) hide show
  1. package/dist/a11y-keys.d.ts +1 -1
  2. package/dist/a11y-keys.d.ts.map +1 -1
  3. package/dist/a11y-keys.js +219 -4
  4. package/dist/a11y-keys.js.map +1 -1
  5. package/dist/create-i18n.d.ts.map +1 -1
  6. package/dist/create-i18n.js +1 -0
  7. package/dist/create-i18n.js.map +1 -1
  8. package/dist/editing.d.ts +1 -1
  9. package/dist/editing.d.ts.map +1 -1
  10. package/dist/editing.js +2 -1
  11. package/dist/editing.js.map +1 -1
  12. package/dist/fallback.d.ts.map +1 -1
  13. package/dist/fallback.js +1 -0
  14. package/dist/fallback.js.map +1 -1
  15. package/dist/format/index.d.ts.map +1 -1
  16. package/dist/format/index.js +1 -0
  17. package/dist/format/index.js.map +1 -1
  18. package/dist/format-errors.d.ts.map +1 -1
  19. package/dist/format-errors.js +1 -0
  20. package/dist/format-errors.js.map +1 -1
  21. package/dist/icu-format.d.ts.map +1 -1
  22. package/dist/icu-format.js +1 -0
  23. package/dist/icu-format.js.map +1 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +1 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/keys.d.ts.map +1 -1
  28. package/dist/keys.js +1 -0
  29. package/dist/keys.js.map +1 -1
  30. package/dist/locales.d.ts +6 -2
  31. package/dist/locales.d.ts.map +1 -1
  32. package/dist/locales.js +7 -2
  33. package/dist/locales.js.map +1 -1
  34. package/dist/overrides.d.ts.map +1 -1
  35. package/dist/overrides.js +1 -0
  36. package/dist/overrides.js.map +1 -1
  37. package/dist/react.d.ts.map +1 -1
  38. package/dist/react.js +1 -0
  39. package/dist/react.js.map +1 -1
  40. package/dist/resources/ar-eg/common.d.ts +858 -5
  41. package/dist/resources/ar-eg/common.d.ts.map +1 -1
  42. package/dist/resources/ar-eg/common.js +882 -28
  43. package/dist/resources/ar-eg/common.js.map +1 -1
  44. package/dist/resources/ar-eg/errors.d.ts +1 -0
  45. package/dist/resources/ar-eg/errors.d.ts.map +1 -1
  46. package/dist/resources/ar-eg/errors.js +2 -0
  47. package/dist/resources/ar-eg/errors.js.map +1 -1
  48. package/dist/resources/ar-eg/generated.d.ts.map +1 -1
  49. package/dist/resources/ar-eg/generated.js +1 -0
  50. package/dist/resources/ar-eg/generated.js.map +1 -1
  51. package/dist/resources/ar-eg/studio.d.ts.map +1 -1
  52. package/dist/resources/ar-eg/studio.js +1 -0
  53. package/dist/resources/ar-eg/studio.js.map +1 -1
  54. package/dist/resources/ar-eg/ui.d.ts +9 -0
  55. package/dist/resources/ar-eg/ui.d.ts.map +1 -1
  56. package/dist/resources/ar-eg/ui.js +18 -8
  57. package/dist/resources/ar-eg/ui.js.map +1 -1
  58. package/dist/resources/cs-cz/common.d.ts +858 -5
  59. package/dist/resources/cs-cz/common.d.ts.map +1 -1
  60. package/dist/resources/cs-cz/common.js +882 -28
  61. package/dist/resources/cs-cz/common.js.map +1 -1
  62. package/dist/resources/cs-cz/errors.d.ts +1 -0
  63. package/dist/resources/cs-cz/errors.d.ts.map +1 -1
  64. package/dist/resources/cs-cz/errors.js +2 -0
  65. package/dist/resources/cs-cz/errors.js.map +1 -1
  66. package/dist/resources/cs-cz/generated.d.ts.map +1 -1
  67. package/dist/resources/cs-cz/generated.js +1 -0
  68. package/dist/resources/cs-cz/generated.js.map +1 -1
  69. package/dist/resources/cs-cz/studio.d.ts.map +1 -1
  70. package/dist/resources/cs-cz/studio.js +1 -0
  71. package/dist/resources/cs-cz/studio.js.map +1 -1
  72. package/dist/resources/cs-cz/ui.d.ts +9 -0
  73. package/dist/resources/cs-cz/ui.d.ts.map +1 -1
  74. package/dist/resources/cs-cz/ui.js +18 -8
  75. package/dist/resources/cs-cz/ui.js.map +1 -1
  76. package/dist/resources/da-dk/common.d.ts +858 -5
  77. package/dist/resources/da-dk/common.d.ts.map +1 -1
  78. package/dist/resources/da-dk/common.js +882 -28
  79. package/dist/resources/da-dk/common.js.map +1 -1
  80. package/dist/resources/da-dk/errors.d.ts +1 -0
  81. package/dist/resources/da-dk/errors.d.ts.map +1 -1
  82. package/dist/resources/da-dk/errors.js +2 -0
  83. package/dist/resources/da-dk/errors.js.map +1 -1
  84. package/dist/resources/da-dk/generated.d.ts.map +1 -1
  85. package/dist/resources/da-dk/generated.js +1 -0
  86. package/dist/resources/da-dk/generated.js.map +1 -1
  87. package/dist/resources/da-dk/studio.d.ts.map +1 -1
  88. package/dist/resources/da-dk/studio.js +1 -0
  89. package/dist/resources/da-dk/studio.js.map +1 -1
  90. package/dist/resources/da-dk/ui.d.ts +9 -0
  91. package/dist/resources/da-dk/ui.d.ts.map +1 -1
  92. package/dist/resources/da-dk/ui.js +18 -8
  93. package/dist/resources/da-dk/ui.js.map +1 -1
  94. package/dist/resources/de-de/common.d.ts +858 -5
  95. package/dist/resources/de-de/common.d.ts.map +1 -1
  96. package/dist/resources/de-de/common.js +882 -28
  97. package/dist/resources/de-de/common.js.map +1 -1
  98. package/dist/resources/de-de/errors.d.ts +1 -0
  99. package/dist/resources/de-de/errors.d.ts.map +1 -1
  100. package/dist/resources/de-de/errors.js +2 -0
  101. package/dist/resources/de-de/errors.js.map +1 -1
  102. package/dist/resources/de-de/generated.d.ts.map +1 -1
  103. package/dist/resources/de-de/generated.js +1 -0
  104. package/dist/resources/de-de/generated.js.map +1 -1
  105. package/dist/resources/de-de/studio.d.ts.map +1 -1
  106. package/dist/resources/de-de/studio.js +1 -0
  107. package/dist/resources/de-de/studio.js.map +1 -1
  108. package/dist/resources/de-de/ui.d.ts +9 -0
  109. package/dist/resources/de-de/ui.d.ts.map +1 -1
  110. package/dist/resources/de-de/ui.js +18 -8
  111. package/dist/resources/de-de/ui.js.map +1 -1
  112. package/dist/resources/en-us/common.d.ts +858 -5
  113. package/dist/resources/en-us/common.d.ts.map +1 -1
  114. package/dist/resources/en-us/common.js +882 -28
  115. package/dist/resources/en-us/common.js.map +1 -1
  116. package/dist/resources/en-us/errors.d.ts +1 -0
  117. package/dist/resources/en-us/errors.d.ts.map +1 -1
  118. package/dist/resources/en-us/errors.js +2 -0
  119. package/dist/resources/en-us/errors.js.map +1 -1
  120. package/dist/resources/en-us/generated.d.ts.map +1 -1
  121. package/dist/resources/en-us/generated.js +1 -0
  122. package/dist/resources/en-us/generated.js.map +1 -1
  123. package/dist/resources/en-us/studio.d.ts.map +1 -1
  124. package/dist/resources/en-us/studio.js +1 -0
  125. package/dist/resources/en-us/studio.js.map +1 -1
  126. package/dist/resources/en-us/ui.d.ts +9 -0
  127. package/dist/resources/en-us/ui.d.ts.map +1 -1
  128. package/dist/resources/en-us/ui.js +18 -8
  129. package/dist/resources/en-us/ui.js.map +1 -1
  130. package/dist/resources/fr-fr/common.d.ts +858 -5
  131. package/dist/resources/fr-fr/common.d.ts.map +1 -1
  132. package/dist/resources/fr-fr/common.js +882 -28
  133. package/dist/resources/fr-fr/common.js.map +1 -1
  134. package/dist/resources/fr-fr/errors.d.ts +1 -0
  135. package/dist/resources/fr-fr/errors.d.ts.map +1 -1
  136. package/dist/resources/fr-fr/errors.js +2 -0
  137. package/dist/resources/fr-fr/errors.js.map +1 -1
  138. package/dist/resources/fr-fr/generated.d.ts.map +1 -1
  139. package/dist/resources/fr-fr/generated.js +1 -0
  140. package/dist/resources/fr-fr/generated.js.map +1 -1
  141. package/dist/resources/fr-fr/studio.d.ts.map +1 -1
  142. package/dist/resources/fr-fr/studio.js +1 -0
  143. package/dist/resources/fr-fr/studio.js.map +1 -1
  144. package/dist/resources/fr-fr/ui.d.ts +9 -0
  145. package/dist/resources/fr-fr/ui.d.ts.map +1 -1
  146. package/dist/resources/fr-fr/ui.js +18 -8
  147. package/dist/resources/fr-fr/ui.js.map +1 -1
  148. package/dist/resources/index.d.ts.map +1 -1
  149. package/dist/resources/index.js +1 -0
  150. package/dist/resources/index.js.map +1 -1
  151. package/dist/resources/lazy.d.ts.map +1 -1
  152. package/dist/resources/lazy.js.map +1 -1
  153. package/dist/resources/zh-cn/common.d.ts +858 -5
  154. package/dist/resources/zh-cn/common.d.ts.map +1 -1
  155. package/dist/resources/zh-cn/common.js +882 -28
  156. package/dist/resources/zh-cn/common.js.map +1 -1
  157. package/dist/resources/zh-cn/errors.d.ts +1 -0
  158. package/dist/resources/zh-cn/errors.d.ts.map +1 -1
  159. package/dist/resources/zh-cn/errors.js +2 -0
  160. package/dist/resources/zh-cn/errors.js.map +1 -1
  161. package/dist/resources/zh-cn/generated.d.ts.map +1 -1
  162. package/dist/resources/zh-cn/generated.js +1 -0
  163. package/dist/resources/zh-cn/generated.js.map +1 -1
  164. package/dist/resources/zh-cn/studio.d.ts.map +1 -1
  165. package/dist/resources/zh-cn/studio.js +1 -0
  166. package/dist/resources/zh-cn/studio.js.map +1 -1
  167. package/dist/resources/zh-cn/ui.d.ts +9 -0
  168. package/dist/resources/zh-cn/ui.d.ts.map +1 -1
  169. package/dist/resources/zh-cn/ui.js +18 -8
  170. package/dist/resources/zh-cn/ui.js.map +1 -1
  171. package/dist/resources/zh-tw/common.d.ts +858 -5
  172. package/dist/resources/zh-tw/common.d.ts.map +1 -1
  173. package/dist/resources/zh-tw/common.js +882 -28
  174. package/dist/resources/zh-tw/common.js.map +1 -1
  175. package/dist/resources/zh-tw/errors.d.ts +1 -0
  176. package/dist/resources/zh-tw/errors.d.ts.map +1 -1
  177. package/dist/resources/zh-tw/errors.js +2 -0
  178. package/dist/resources/zh-tw/errors.js.map +1 -1
  179. package/dist/resources/zh-tw/generated.d.ts.map +1 -1
  180. package/dist/resources/zh-tw/generated.js +1 -0
  181. package/dist/resources/zh-tw/generated.js.map +1 -1
  182. package/dist/resources/zh-tw/studio.d.ts.map +1 -1
  183. package/dist/resources/zh-tw/studio.js +1 -0
  184. package/dist/resources/zh-tw/studio.js.map +1 -1
  185. package/dist/resources/zh-tw/ui.d.ts +9 -0
  186. package/dist/resources/zh-tw/ui.d.ts.map +1 -1
  187. package/dist/resources/zh-tw/ui.js +18 -8
  188. package/dist/resources/zh-tw/ui.js.map +1 -1
  189. package/dist/review-status.d.ts.map +1 -1
  190. package/dist/review-status.js +8 -7
  191. package/dist/review-status.js.map +1 -1
  192. package/dist/revision.d.ts.map +1 -1
  193. package/dist/revision.js +1 -0
  194. package/dist/revision.js.map +1 -1
  195. package/dist/server.d.ts.map +1 -1
  196. package/dist/server.js +1 -0
  197. package/dist/server.js.map +1 -1
  198. package/dist/validate-message.d.ts.map +1 -1
  199. package/dist/validate-message.js +1 -0
  200. package/dist/validate-message.js.map +1 -1
  201. package/locales/ar-EG/.meta.json +5508 -2872
  202. package/locales/ar-EG/common.json +881 -28
  203. package/locales/ar-EG/errors.json +1 -0
  204. package/locales/ar-EG/ui.json +17 -8
  205. package/locales/cs-CZ/.meta.json +5542 -2906
  206. package/locales/cs-CZ/common.json +881 -28
  207. package/locales/cs-CZ/errors.json +1 -0
  208. package/locales/cs-CZ/ui.json +17 -8
  209. package/locales/da-DK/.meta.json +5613 -2977
  210. package/locales/da-DK/common.json +881 -28
  211. package/locales/da-DK/errors.json +1 -0
  212. package/locales/da-DK/ui.json +17 -8
  213. package/locales/de-DE/.meta.json +5600 -2964
  214. package/locales/de-DE/common.json +881 -28
  215. package/locales/de-DE/errors.json +1 -0
  216. package/locales/de-DE/ui.json +17 -8
  217. package/locales/en-US/common.json +881 -28
  218. package/locales/en-US/errors.json +1 -0
  219. package/locales/en-US/ui.json +17 -8
  220. package/locales/fr-FR/.meta.json +5644 -3008
  221. package/locales/fr-FR/common.json +881 -28
  222. package/locales/fr-FR/errors.json +1 -0
  223. package/locales/fr-FR/ui.json +17 -8
  224. package/locales/zh-CN/.meta.json +5504 -2868
  225. package/locales/zh-CN/common.json +881 -28
  226. package/locales/zh-CN/errors.json +1 -0
  227. package/locales/zh-CN/ui.json +17 -8
  228. package/locales/zh-TW/.meta.json +5507 -2871
  229. package/locales/zh-TW/common.json +881 -28
  230. package/locales/zh-TW/errors.json +1 -0
  231. package/locales/zh-TW/ui.json +17 -8
  232. package/package.json +2 -2
@@ -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);
@@ -22,6 +23,7 @@ export default {
22
23
  },
23
24
  "auth": {
24
25
  "headline": "Turn any database into a dashboard.",
26
+ "description": "Connect PostgreSQL and Adminium generates a themeable, permission-aware admin app — no code required.",
25
27
  "trust": "AGPL core · Self-hosted · Your data stays yours",
26
28
  "signIn": {
27
29
  "title": "Welcome back",
@@ -105,7 +107,12 @@ export default {
105
107
  "planning": "Planning",
106
108
  "people": "People",
107
109
  "account": "Account"
108
- }
110
+ },
111
+ "back": "Back",
112
+ "team": "Team",
113
+ "roles": "Roles & permissions",
114
+ "audit": "Audit log",
115
+ "security": "Password & sessions"
109
116
  },
110
117
  "topbar": {
111
118
  "search": "Search…",
@@ -128,8 +135,8 @@ export default {
128
135
  "askAi": "Ask AI",
129
136
  "shortcuts": "Keyboard shortcuts",
130
137
  "signOut": "Sign out",
131
- "themeDark": "Switch to dark theme",
132
- "themeLight": "Switch to light theme",
138
+ "themeDark": "Dark mode",
139
+ "themeLight": "Light mode",
133
140
  "footerNavigate": "navigate",
134
141
  "footerOpen": "select",
135
142
  "footerClose": "close",
@@ -238,6 +245,7 @@ export default {
238
245
  },
239
246
  "notFound": {
240
247
  "title": "This page went missing",
248
+ "body": "The page you're looking for doesn't exist or was moved. Check the URL, or head back to your dashboard.",
241
249
  "errorLine": "Error 404",
242
250
  "searchPlaceholder": "Search for a page…",
243
251
  "matches": "Matching pages",
@@ -255,10 +263,12 @@ export default {
255
263
  "title": "This page failed to render"
256
264
  },
257
265
  "tooNew": {
258
- "title": "This page needs a newer Adminium"
266
+ "title": "This page needs a newer Adminium",
267
+ "body": "This page was saved with config version {version}, but this build understands up to version {latest}. Upgrade Adminium to open it."
259
268
  },
260
269
  "unknownTemplate": {
261
- "title": "Unknown page template"
270
+ "title": "Unknown page template",
271
+ "body": "This page uses a template this build doesn’t recognize. It may come from a newer Adminium or an extension that isn’t installed."
262
272
  }
263
273
  },
264
274
  "mutation": {
@@ -347,6 +357,70 @@ export default {
347
357
  "emptyTitle": "Nothing to configure yet",
348
358
  "emptyBody": "Notification events appear here as producers ship.",
349
359
  "saveFailed": "Could not save this change."
360
+ },
361
+ "translations": {
362
+ "title": "Languages & translations",
363
+ "subtitle": "Change any wording in Adminium, choose which languages people can pick, and add languages of your own.",
364
+ "warning": "Error messages and sign-in text are editable too. Those are what people read when something goes wrong, so change them carefully.",
365
+ "editor": {
366
+ "heading": "Edit translations"
367
+ },
368
+ "localeLabel": "Language",
369
+ "groupLabel": "Area",
370
+ "allAreas": "All areas",
371
+ "stateLabel": "Show",
372
+ "state": {
373
+ "all": "Everything",
374
+ "overridden": "Customised only",
375
+ "untranslated": "Untranslated only",
376
+ "stale": "English changed since"
377
+ },
378
+ "searchLabel": "Search",
379
+ "searchPlaceholder": "Key or English text",
380
+ "loading": "Loading strings…",
381
+ "noMatches": "No strings match those filters.",
382
+ "count": "{total, plural, one {# string} other {# strings}}",
383
+ "badge": {
384
+ "custom": "Customised",
385
+ "stale": "English changed",
386
+ "a11y": "Accessible name"
387
+ },
388
+ "sourceLabel": "English source",
389
+ "valueLabel": "Translation",
390
+ "save": "Save",
391
+ "saved": "Translation saved",
392
+ "resetAction": "Reset to built-in",
393
+ "reset": "Reset to the built-in text",
394
+ "locales": {
395
+ "heading": "Available languages",
396
+ "help": "Turn a language off to remove it from every language picker. Anyone already using it keeps it until they choose another."
397
+ },
398
+ "locale": {
399
+ "builtin": "Built in",
400
+ "custom": "Custom",
401
+ "overrides": "{count, plural, =0 {no custom text} one {# custom string} other {# custom strings}}",
402
+ "enable": "Turn on",
403
+ "disable": "Turn off",
404
+ "delete": "Delete",
405
+ "deleted": "Language removed",
406
+ "deletedDetail": "{users, plural, one {# person} other {# people}} moved back to the workspace default; {strings, plural, one {# translation} other {# translations}} deleted.",
407
+ "deleteFailed": "Could not remove that language",
408
+ "add": "Add a language",
409
+ "added": "Language added",
410
+ "create": "Add language",
411
+ "id": "Language code",
412
+ "intlTag": "Formatting rules from",
413
+ "native": "Name in the language itself",
414
+ "english": "Name in English",
415
+ "dir": "Text direction",
416
+ "ltr": "Left to right",
417
+ "rtl": "Right to left",
418
+ "font": "Script",
419
+ "latin": "Latin",
420
+ "arabic": "Arabic",
421
+ "cjk": "Chinese / Japanese / Korean",
422
+ "intlHelp": "Formatting rules decide how numbers, dates and plurals behave. Pick the closest language that already has them — it does not have to match your language code."
423
+ }
350
424
  }
351
425
  },
352
426
  "studio": {
@@ -552,13 +626,31 @@ export default {
552
626
  "label": "Application name",
553
627
  "helper": "Shown in the sidebar, browser title, and emails.",
554
628
  "error": "Enter a name of at most 60 characters."
629
+ },
630
+ "logo": {
631
+ "label": "Logo",
632
+ "drop": "Drop an image here",
633
+ "helper": "PNG, JPEG, WebP, GIF or SVG, up to 1 MB. Replaces the built-in mark everywhere.",
634
+ "upload": "Upload logo",
635
+ "replace": "Replace logo",
636
+ "remove": "Remove",
637
+ "uploaded": "Logo updated",
638
+ "removed": "Logo removed",
639
+ "tooLarge": "That image is larger than 1 MB.",
640
+ "badType": "Choose a PNG, JPEG, WebP, GIF or SVG image.",
641
+ "undo": "Undo"
642
+ },
643
+ "showVersion": {
644
+ "label": "Version in the sidebar",
645
+ "helper": "The build number beside the logo. Off hides which version you run."
555
646
  }
556
647
  },
557
648
  "security": {
558
649
  "heading": "Security",
559
650
  "require2fa": {
560
651
  "label": "Require two-factor auth",
561
- "desc": "Every member must enable 2FA to sign in."
652
+ "desc": "Every member must enable 2FA to sign in.",
653
+ "note": "Advisory, not a barrier: members without 2FA are sent to set it up and can no longer turn it off, but their sign-in is never blocked, and API keys are unaffected."
562
654
  },
563
655
  "allowSignup": {
564
656
  "label": "Allow self-signup",
@@ -573,6 +665,41 @@ export default {
573
665
  "error": "Between {min, number} and {max, number} characters."
574
666
  }
575
667
  },
668
+ "email": {
669
+ "heading": "Email (SMTP)",
670
+ "unconfigured": "No mail server is set, so Adminium cannot send password resets, user invites or scheduled reports.",
671
+ "host": {
672
+ "label": "SMTP host",
673
+ "error": "A bare hostname or IP address — no scheme, port or credentials."
674
+ },
675
+ "port": {
676
+ "label": "Port",
677
+ "error": "Between {min, number} and {max, number}."
678
+ },
679
+ "user": {
680
+ "label": "Username",
681
+ "helper": "Leave empty for a relay that does not authenticate."
682
+ },
683
+ "pass": {
684
+ "label": "Password",
685
+ "helper": "Stored encrypted and never shown again. Leave blank to keep the current one.",
686
+ "error": "This username needs a password."
687
+ },
688
+ "from": {
689
+ "label": "From address",
690
+ "helper": "A bare address, or a display name in front of one.",
691
+ "error": "Enter an email address."
692
+ },
693
+ "secure": {
694
+ "label": "Implicit TLS",
695
+ "helper": "On for port 465. Off starts in cleartext and upgrades with STARTTLS, which is what port 587 expects."
696
+ },
697
+ "remove": "Remove mail server",
698
+ "review": {
699
+ "removed": "Removed",
700
+ "password": "Replaced"
701
+ }
702
+ },
576
703
  "review": {
577
704
  "title": "Save workspace settings",
578
705
  "subtitle": "Review your changes before saving.",
@@ -581,6 +708,8 @@ export default {
581
708
  "close": "Close",
582
709
  "on": "On",
583
710
  "off": "Off",
711
+ "shown": "Shown",
712
+ "hidden": "Hidden",
584
713
  "change": "{before} → {after}"
585
714
  },
586
715
  "defaultsCard": {
@@ -599,6 +728,16 @@ export default {
599
728
  "heading": "AI enrichment",
600
729
  "body": "Configure an AI provider (or the copy-paste round-trip) to enrich labels, groups and relations.",
601
730
  "cta": "Open AI settings"
731
+ },
732
+ "pagesCard": {
733
+ "heading": "Pages",
734
+ "body": "Add, edit and delete pages, change what each one shows, and reorder the sidebar.",
735
+ "cta": "Manage pages"
736
+ },
737
+ "translationsCard": {
738
+ "heading": "Languages & translations",
739
+ "body": "Reword anything in Adminium, choose which languages people can pick, and add your own.",
740
+ "cta": "Open translations"
602
741
  }
603
742
  },
604
743
  "settingsAi": {
@@ -964,7 +1103,20 @@ export default {
964
1103
  "testFailed": "Connection failed.",
965
1104
  "v1Note": {
966
1105
  "title": "About this install",
967
- "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)."
1106
+ "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)."
1107
+ },
1108
+ "move": {
1109
+ "title": "Moving Adminium’s tables",
1110
+ "copying": "Moving Adminium’s tables…",
1111
+ "restarting": "Restarting…",
1112
+ "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.",
1113
+ "restartingBody": "The copy is done. Adminium is restarting onto the new database — this page will continue by itself in a few seconds.",
1114
+ "failed": "Could not move Adminium’s tables — retry.",
1115
+ "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."
1116
+ },
1117
+ "willMove": {
1118
+ "title": "This will move Adminium’s tables",
1119
+ "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."
968
1120
  }
969
1121
  },
970
1122
  "intent": {
@@ -1119,7 +1271,64 @@ export default {
1119
1271
  "pii": "PII",
1120
1272
  "masked": "Masked"
1121
1273
  },
1122
- "unavailableTitle": "Schema remap editor not available"
1274
+ "unavailableTitle": "Schema remap editor not available",
1275
+ "unavailableBody": "This build does not include the remap editor yet (09-T12). Re-run generation after it lands to remap labels, types and relations."
1276
+ },
1277
+ "publicApi": {
1278
+ "error": "Something went wrong",
1279
+ "scopes": {
1280
+ "deleteTitle": "Delete this scope",
1281
+ "deleteBody": "Any page using a key bound to this scope stops loading data. Keys are not deleted — revoke them first if that is what you meant.",
1282
+ "deletePrompt": "Type the scope name to confirm",
1283
+ "deleteConfirm": "Delete scope",
1284
+ "issuesTitle": "This scope did not compile",
1285
+ "title": "Scopes",
1286
+ "subtitle": "A scope is the whole of what a key may reach — the tables, the exact columns, and a filter the caller can narrow but never remove.",
1287
+ "emptyTitle": "No scopes yet",
1288
+ "emptyBody": "Create one below. It is checked against your live schema before it is saved.",
1289
+ "keyCount": "{count, plural, =0 {no keys} one {# key} other {# keys}}",
1290
+ "delete": "Delete",
1291
+ "nameLabel": "Name",
1292
+ "connectionLabel": "Connection ID",
1293
+ "documentLabel": "Scope document",
1294
+ "documentHint": "Compiled against your schema when you save. Every column a caller can reach is listed here and nowhere else.",
1295
+ "create": "Create scope",
1296
+ "formLabel": "Create a scope"
1297
+ },
1298
+ "cancel": "Cancel",
1299
+ "close": "Close",
1300
+ "title": "Public API",
1301
+ "subtitle": "Let your own customer- or staff-facing pages read this database, through a scope you define.",
1302
+ "notRegistered": {
1303
+ "title": "Not enabled on this server",
1304
+ "body": "Set ADMINIUM_PUBLIC_API_ORIGINS to the exact origins allowed to call it, then restart. Until then these routes are not served at all."
1305
+ },
1306
+ "toggle": {
1307
+ "label": "Serve the public API",
1308
+ "hint": "Turning this off stops every public request immediately. Nothing is deleted — keys, scopes and data all survive."
1309
+ },
1310
+ "origins": {
1311
+ "label": "Origins allowed to call it"
1312
+ },
1313
+ "keys": {
1314
+ "title": "Keys",
1315
+ "subtitle": "These go in your page’s JavaScript, so anyone can read them. That is expected — a key can only ever do what its scope allows.",
1316
+ "emptyTitle": "No keys yet",
1317
+ "emptyBody": "Create a scope first, then mint a key for it.",
1318
+ "reveal": "Show key",
1319
+ "rotate": "Rotate",
1320
+ "revoke": "Revoke",
1321
+ "nameLabel": "Name",
1322
+ "scopeLabel": "Scope",
1323
+ "scopePlaceholder": "Choose a scope",
1324
+ "create": "Create key",
1325
+ "formLabel": "Create a key",
1326
+ "scopeIsAuthTitle": "The scope is the only permission",
1327
+ "scopeIsAuthBody": "A key can reach exactly what its scope lists and nothing else. It does not use roles or table permissions, and it cannot read anything through the rest of the API."
1328
+ },
1329
+ "status": {
1330
+ "heading": "Status"
1331
+ }
1123
1332
  }
1124
1333
  },
1125
1334
  "onboarding": {
@@ -1239,7 +1448,9 @@ export default {
1239
1448
  "duplicate": "Duplicate {name}",
1240
1449
  "remove": "Remove {name}",
1241
1450
  "removed": "{name} removed.",
1242
- "duplicated": "{name} duplicated."
1451
+ "duplicated": "{name} duplicated.",
1452
+ "unboundHint": "This widget shows sample data here and on the live page. Open Configure to connect it to a table.",
1453
+ "unbound": "Sample data"
1243
1454
  },
1244
1455
  "families": {
1245
1456
  "kpi": "KPIs",
@@ -1262,7 +1473,149 @@ export default {
1262
1473
  "saveVersionTitle": "Save a version",
1263
1474
  "saveVersionBody": "Snapshots the current document. Restore it any time from Versions.",
1264
1475
  "versionName": "Version name",
1265
- "versionNamePlaceholder": "e.g. Before Q3 rates change"
1476
+ "versionNamePlaceholder": "e.g. Before Q3 rates change",
1477
+ "discard": "Discard changes",
1478
+ "discardTitle": "Discard your changes?",
1479
+ "discardBody": "The dashboard goes back to how it looked when you opened the editor. Your data isn’t affected.",
1480
+ "discardConfirm": "Discard changes",
1481
+ "keepEditing": "Keep editing",
1482
+ "discarded": "Changes discarded.",
1483
+ "binding": {
1484
+ "addFilter": "Add filter",
1485
+ "brokenBody": "It no longer matches a query this version understands, so the widget shows an error on the live page.",
1486
+ "brokenTitle": "This widget’s query is broken",
1487
+ "bucketColumn": "Date column",
1488
+ "bucketRequired": "Pick the column that carries the date.",
1489
+ "bucketUnit": "Group time by",
1490
+ "columnNone": "None",
1491
+ "columnPlaceholder": "Choose a column…",
1492
+ "connect": "Connect to data",
1493
+ "edit": "Edit query",
1494
+ "event": {
1495
+ "category": "Category column (optional)",
1496
+ "date": "Start date column",
1497
+ "end": "End date column (optional)",
1498
+ "title": "Title column"
1499
+ },
1500
+ "filterColumnRequired": "Pick a column.",
1501
+ "filterColumn": "Column",
1502
+ "filterListHelper": "Separate values with commas.",
1503
+ "filterOp": "Condition",
1504
+ "filterValue": "Value",
1505
+ "fn": {
1506
+ "avg": "Average",
1507
+ "countDistinct": "Count of distinct values",
1508
+ "count": "Count of rows",
1509
+ "max": "Maximum",
1510
+ "min": "Minimum",
1511
+ "sum": "Sum"
1512
+ },
1513
+ "groupByColumns": "Columns",
1514
+ "groupByRequired": "This view needs a breakdown column.",
1515
+ "groupByRows": "Rows",
1516
+ "groupBy": "Group by",
1517
+ "incompleteBody": "Fill in the highlighted fields — a half-written query would fail on the live dashboard.",
1518
+ "incompleteTitle": "This query isn’t finished",
1519
+ "limit": "Most rows to fetch",
1520
+ "loadingSchema": "Loading tables…",
1521
+ "lossyBody": "Parts of it — extra measures, sorts or page-filter links — aren’t shown here and will be dropped if you save.",
1522
+ "lossyTitle": "This query is more advanced than the editor",
1523
+ "measureColumnRequired": "This calculation needs a column.",
1524
+ "measureColumn": "Of column",
1525
+ "measureFn": "Calculate",
1526
+ "noConnectionBody": "Widgets can only be bound on a page that belongs to a connection.",
1527
+ "noConnectionTitle": "This page has no database connection",
1528
+ "noDateColumns": "This table has no date or timestamp column.",
1529
+ "noFilters": "No filters — every row in the table is counted.",
1530
+ "noSnapshotBody": "Tables and columns come from the connection’s last introspection. Run introspection in Studio, then reopen this editor.",
1531
+ "noSnapshotTitle": "No schema snapshot for this connection",
1532
+ "op": {
1533
+ "between": "is between",
1534
+ "ilike": "contains (any case)",
1535
+ "in": "is one of",
1536
+ "isNull": "is empty",
1537
+ "like": "contains",
1538
+ "notNull": "is not empty"
1539
+ },
1540
+ "orderAsc": "Oldest / lowest first",
1541
+ "orderBy": "Sort by",
1542
+ "orderDesc": "Newest / highest first",
1543
+ "orderDir": "Direction",
1544
+ "orderNone": "Database order",
1545
+ "pickTableFirst": "Pick a table to choose its columns.",
1546
+ "removeFilter": "Remove filter",
1547
+ "remove": "Remove data source",
1548
+ "save": "Use this query",
1549
+ "sectionBreakdown": "Breakdown",
1550
+ "sectionColumns": "Columns",
1551
+ "sectionFilters": "Filters",
1552
+ "sectionMeasure": "Measure",
1553
+ "sectionRows": "Rows",
1554
+ "sectionSource": "Source",
1555
+ "sectionTime": "Time axis",
1556
+ "sectionWindow": "Period",
1557
+ "selectColumns": "Columns to show",
1558
+ "selectRequired": "Choose at least one column to show.",
1559
+ "shape": {
1560
+ "calendarEvents": "Dated events",
1561
+ "categorical": "A value per category",
1562
+ "distribution": "The spread of one column",
1563
+ "matrix": "A grid of rows by columns",
1564
+ "metricDelta": "A number, compared to the period before",
1565
+ "multiTimeseries": "One line over time per category",
1566
+ "recordList": "A list of rows",
1567
+ "record": "One row",
1568
+ "singleMetric": "A single number",
1569
+ "stream": "A live feed of recent rows",
1570
+ "timeseries": "A value over time",
1571
+ "tree": "A value per category, split in two levels",
1572
+ "geoPoints": "A value per place or region",
1573
+ "flows": "How much moves from one category to another",
1574
+ "ohlc": "Open, high, low and close per period",
1575
+ "booleanMap": "An on/off flag per key"
1576
+ },
1577
+ "shapeHelper": "Changing this changes which query controls apply.",
1578
+ "shapeLabel": "What this widget shows",
1579
+ "summaryColumns": "{count, plural, one {# column} other {# columns}}",
1580
+ "summaryFilters": "{count, plural, one {# filter} other {# filters}}",
1581
+ "tableEmpty": "No matching table.",
1582
+ "tablePlaceholder": "Search tables…",
1583
+ "tableRequired": "Pick a table to query.",
1584
+ "table": "Table or view",
1585
+ "title": "Data source",
1586
+ "unbindableBody": "It shows the shape of data the query engine doesn’t build yet, so it renders its own sample content.",
1587
+ "unbindableTitle": "This widget can’t query data yet",
1588
+ "unboundBody": "It shows sample numbers here AND on the live page. Connect it to a table to show real data.",
1589
+ "unboundTitle": "Not connected to your data",
1590
+ "unit": {
1591
+ "day": "Daily",
1592
+ "hour": "Hourly",
1593
+ "month": "Monthly",
1594
+ "quarter": "Quarterly",
1595
+ "week": "Weekly",
1596
+ "year": "Yearly"
1597
+ },
1598
+ "valueColumnRequired": "Pick the column to measure.",
1599
+ "valueColumn": "Value column",
1600
+ "windowColumn": "Date column",
1601
+ "windowLast": "Last",
1602
+ "windowNone": "All time",
1603
+ "windowRequired": "Comparing to the previous period needs a date column.",
1604
+ "windowUnit": {
1605
+ "day": "days",
1606
+ "hour": "hours",
1607
+ "month": "months",
1608
+ "quarter": "quarters",
1609
+ "week": "weeks",
1610
+ "year": "years"
1611
+ },
1612
+ "windowUnitLabel": "Unit",
1613
+ "role": {
1614
+ "flagKey": "Key column",
1615
+ "flagValue": "On/off column"
1616
+ },
1617
+ "roleColumnsRequired": "Fill every required column, and leave no gaps before one you filled — these columns are read in order."
1618
+ }
1266
1619
  },
1267
1620
  "setup": {
1268
1621
  "title": "Set up Adminium",
@@ -1615,7 +1968,8 @@ export default {
1615
1968
  "helpAbout": "About Adminium"
1616
1969
  },
1617
1970
  "settings": {
1618
- "explainer": "These settings apply to the Adminium app on this computer only. They are stored on this machine, not in your workspace."
1971
+ "explainer": "These settings apply to the Adminium app on this computer only. They are stored on this machine, not in your workspace.",
1972
+ "title": "Desktop settings"
1619
1973
  },
1620
1974
  "security": {
1621
1975
  "heading": "Sign-in"
@@ -1662,7 +2016,8 @@ export default {
1662
2016
  "mismatchBody": "Sharing is switched off, but the server has not released the network yet. Restart Adminium to close it.",
1663
2017
  "transportTitle": "Traffic on your local network is not encrypted.",
1664
2018
  "transportBody": "Share only on networks you trust. For remote access, use Adminium self-host behind HTTPS.",
1665
- "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."
2019
+ "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.",
2020
+ "manageTeam": "Manage users & roles"
1666
2021
  },
1667
2022
  "setup": {
1668
2023
  "title": "Welcome to Adminium",
@@ -1871,37 +2226,48 @@ export default {
1871
2226
  },
1872
2227
  "templates": {
1873
2228
  "crud": {
1874
- "title": "Records"
2229
+ "title": "Records",
2230
+ "description": "Rows in a searchable table."
1875
2231
  },
1876
2232
  "dashboard": {
1877
- "title": "Dashboard"
2233
+ "title": "Dashboard",
2234
+ "description": "Charts and figures you arrange."
1878
2235
  },
1879
2236
  "board": {
1880
- "title": "Board"
2237
+ "title": "Board",
2238
+ "description": "Cards in columns by status."
1881
2239
  },
1882
2240
  "calendar": {
1883
- "title": "Calendar"
2241
+ "title": "Calendar",
2242
+ "description": "Records on a month grid, by date."
1884
2243
  },
1885
2244
  "scheduler": {
1886
- "title": "Scheduler"
2245
+ "title": "Scheduler",
2246
+ "description": "A timeline per person."
1887
2247
  },
1888
2248
  "logViewer": {
1889
- "title": "Logs"
2249
+ "title": "Logs",
2250
+ "description": "Filterable event lines."
1890
2251
  },
1891
2252
  "files": {
1892
- "title": "Files"
2253
+ "title": "Files",
2254
+ "description": "Files and folders to browse."
1893
2255
  },
1894
2256
  "chat": {
1895
- "title": "Chat"
2257
+ "title": "Chat",
2258
+ "description": "Threaded conversations."
1896
2259
  },
1897
2260
  "builder": {
1898
- "title": "Builder"
2261
+ "title": "Builder",
2262
+ "description": "A drag-and-drop document canvas."
1899
2263
  },
1900
2264
  "wizard": {
1901
- "title": "Wizard"
2265
+ "title": "Wizard",
2266
+ "description": "Guided steps to finish a task."
1902
2267
  },
1903
2268
  "settings": {
1904
- "title": "Settings"
2269
+ "title": "Settings",
2270
+ "description": "Preference rows with toggles."
1905
2271
  },
1906
2272
  "directory": {
1907
2273
  "title": "Directory",
@@ -1915,7 +2281,8 @@ export default {
1915
2281
  "noMatchesBody": "Try a different search or remove a filter.",
1916
2282
  "errorTitle": "This directory failed to load",
1917
2283
  "loading": "Loading people",
1918
- "memberCount": "{count} people"
2284
+ "memberCount": "{count} people",
2285
+ "description": "People cards and an org chart."
1919
2286
  },
1920
2287
  "masterDetail": {
1921
2288
  "title": "List & detail",
@@ -1927,7 +2294,8 @@ export default {
1927
2294
  "noMatchesBody": "Try removing a filter.",
1928
2295
  "errorTitle": "This list failed to load",
1929
2296
  "loading": "Loading records",
1930
- "selectPrompt": "Select a record"
2297
+ "selectPrompt": "Select a record",
2298
+ "description": "A list, with the record beside it."
1931
2299
  },
1932
2300
  "queueInbox": {
1933
2301
  "title": "Queue",
@@ -1952,7 +2320,8 @@ export default {
1952
2320
  "errorTitle": "This queue failed to load",
1953
2321
  "loading": "Loading queue",
1954
2322
  "selectPrompt": "Select a request",
1955
- "daysUnit": "{count} days"
2323
+ "daysUnit": "{count} days",
2324
+ "description": "A work queue with approve and reject."
1956
2325
  }
1957
2326
  },
1958
2327
  "dataio": {
@@ -2056,8 +2425,493 @@ export default {
2056
2425
  }
2057
2426
  },
2058
2427
  "theme": {
2059
- "toLight": "Switch to light theme",
2060
- "toDark": "Switch to dark theme"
2428
+ "toLight": "Light mode",
2429
+ "toDark": "Dark mode"
2430
+ },
2431
+ "studioPages": {
2432
+ "title": "Pages",
2433
+ "subtitle": "Add, edit and organise the pages of your app, and the order they appear in the sidebar.",
2434
+ "createButton": "New page",
2435
+ "loadFailed": {
2436
+ "title": "Pages could not be loaded",
2437
+ "body": "Managing pages needs the “Manage pages” permission. Ask an administrator to grant it to one of your roles."
2438
+ },
2439
+ "tab": {
2440
+ "pages": "All pages",
2441
+ "sidebar": "Sidebar order"
2442
+ },
2443
+ "list": {
2444
+ "title": "Pages",
2445
+ "count": "{count, plural, one {# page} other {# pages}}"
2446
+ },
2447
+ "empty": {
2448
+ "title": "No pages yet",
2449
+ "body": "Connect a database to generate pages automatically, or create one by hand."
2450
+ },
2451
+ "status": {
2452
+ "live": "Live",
2453
+ "hidden": "Hidden"
2454
+ },
2455
+ "origin": {
2456
+ "generated": "Generated",
2457
+ "manifest": "Add-on",
2458
+ "llm": "Assistant",
2459
+ "system": "System",
2460
+ "user": "Custom"
2461
+ },
2462
+ "row": {
2463
+ "menu": "Actions for {title}"
2464
+ },
2465
+ "action": {
2466
+ "edit": "Edit page",
2467
+ "duplicate": "Duplicate",
2468
+ "hide": "Hide from sidebar",
2469
+ "show": "Show in sidebar",
2470
+ "delete": "Delete page"
2471
+ },
2472
+ "create": {
2473
+ "title": "New page",
2474
+ "failed": "The page could not be created",
2475
+ "submit": "Create page",
2476
+ "subtitle": "Pick what this page shows and how it looks."
2477
+ },
2478
+ "duplicate": {
2479
+ "title": "Duplicate page",
2480
+ "failed": "The page could not be duplicated",
2481
+ "submit": "Duplicate"
2482
+ },
2483
+ "delete": {
2484
+ "title": "Delete this page?",
2485
+ "body": "This cannot be undone. Saved views and personal layouts on this page are deleted for everyone.",
2486
+ "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.",
2487
+ "prompt": "Type {slug} to confirm",
2488
+ "confirm": "Delete page"
2489
+ },
2490
+ "field": {
2491
+ "title": "Title",
2492
+ "titleHint": "Shown in the sidebar and the page header.",
2493
+ "slug": "Page address",
2494
+ "slugHint": "Lowercase letters, numbers and dashes. Just the last part — the rest of the address is added for you.",
2495
+ "slugTaken": "Another page already uses this address.",
2496
+ "slugWarning": "Changing the address breaks existing links and bookmarks to this page.",
2497
+ "template": "Template",
2498
+ "templateHint": "Decides what the page can hold. You can change it later.",
2499
+ "group": "Sidebar group",
2500
+ "groupHint": "Which section of the sidebar it appears in.",
2501
+ "icon": "Icon",
2502
+ "iconHint": "Shown beside the page name in the sidebar.",
2503
+ "visible": "Show in sidebar",
2504
+ "visibleHint": "A hidden page stays reachable at its URL for anyone who has the link.",
2505
+ "table": "Table",
2506
+ "tableCreateHint": "The table this page reads. You can bind it later.",
2507
+ "tableNone": "Not bound",
2508
+ "tableNeedsConnection": "Pick a data source first.",
2509
+ "connection": "Data source",
2510
+ "connectionNone": "None",
2511
+ "iconPick": "Choose the page icon",
2512
+ "padding": "Page padding"
2513
+ },
2514
+ "editor": {
2515
+ "title": "Edit page",
2516
+ "save": "Save changes",
2517
+ "saveFailed": "Changes could not be saved",
2518
+ "openPage": "Open page",
2519
+ "generated": {
2520
+ "title": "This page was generated from your schema",
2521
+ "body": "Your changes survive regeneration. Deleting only lasts until the next run recreates it."
2522
+ },
2523
+ "contentUnavailable": "Page contents could not be loaded",
2524
+ "contentUnavailableBody": "The details above can still be saved.",
2525
+ "contentInvalid": "This page’s configuration is not readable",
2526
+ "contentInvalidBody": "It was written by a newer version, or it is malformed. Regenerate the page or delete it.",
2527
+ "data": "Data",
2528
+ "schemaFailed": "Tables could not be listed",
2529
+ "schemaFailedBody": "This connection may not have been analysed yet. Run introspection from Studio → Data connections.",
2530
+ "notBindable": "This template is not bound to one table",
2531
+ "notBindableBody": "Its contents are built widget by widget instead. Open the page and use Edit to add them.",
2532
+ "recompose": "This page will be rebuilt",
2533
+ "recomposeBody": "Saving rebuilds the contents. Column and widget edits here are lost.",
2534
+ "missing": "That page no longer exists",
2535
+ "missingBody": "It may have been deleted, or removed by a regeneration run.",
2536
+ "details": "Details",
2537
+ "itemsPending": "Save the change above first — the contents are rebuilt from it.",
2538
+ "columns": "Columns",
2539
+ "appearance": "Appearance"
2540
+ },
2541
+ "sidebar": {
2542
+ "help": "Reorder pages within a group, or move one to another group. Changes apply to every user.",
2543
+ "discard": "Discard",
2544
+ "save": "Save order",
2545
+ "saveFailed": "The new order could not be saved",
2546
+ "emptyGroup": "No pages in this group.",
2547
+ "moveUp": "Move {title} up",
2548
+ "moveDown": "Move {title} down",
2549
+ "moveTo": "Move {title} to a group",
2550
+ "ungrouped": {
2551
+ "title": "Some pages are in no sidebar group",
2552
+ "body": "These pages work at their URL but appear nowhere in the sidebar. Open each one and pick a group."
2553
+ }
2554
+ },
2555
+ "columns": {
2556
+ "help": "Reorder columns, rename their headers, and choose which are shown in the table.",
2557
+ "discard": "Discard",
2558
+ "save": "Save columns",
2559
+ "saveFailed": "Columns could not be saved",
2560
+ "pk": "Key",
2561
+ "pii": "PII",
2562
+ "header": "Header for {name}",
2563
+ "shown": "Shown",
2564
+ "toggle": "Show {name} in the table",
2565
+ "moveUp": "Move {name} up",
2566
+ "moveDown": "Move {name} down",
2567
+ "remove": "Remove {name}",
2568
+ "none": {
2569
+ "title": "This page has no columns yet",
2570
+ "body": "Columns are read from the table when the page is generated. Bind this page to a table and regenerate to fill them in."
2571
+ }
2572
+ },
2573
+ "icon": {
2574
+ "none": "Choose an icon",
2575
+ "search": "Search icons",
2576
+ "noMatches": "No icons match that search."
2577
+ },
2578
+ "preview": {
2579
+ "untitled": "Untitled page",
2580
+ "note": "An illustration of the layout, not your data."
2581
+ },
2582
+ "padding": {
2583
+ "default": "Default for this template",
2584
+ "none": "None",
2585
+ "standard": "Standard (28 × 24)",
2586
+ "custom": "Custom…",
2587
+ "x": "Sides (px)",
2588
+ "y": "Top and bottom (px)"
2589
+ }
2590
+ },
2591
+ "audit": {
2592
+ "action": {
2593
+ "view": "View"
2594
+ },
2595
+ "actor": {
2596
+ "apiKey": "API key",
2597
+ "automation": "Automation",
2598
+ "system": "System",
2599
+ "user": "User"
2600
+ },
2601
+ "category": {
2602
+ "auth": "Sign-in & accounts",
2603
+ "automation": "Automations",
2604
+ "connection": "Connections",
2605
+ "data": "Records",
2606
+ "export": "Imports & exports",
2607
+ "llm": "AI assist",
2608
+ "rbac": "Roles & permissions",
2609
+ "schema": "Schema",
2610
+ "settings": "Settings",
2611
+ "system": "System"
2612
+ },
2613
+ "column": {
2614
+ "action": "Action",
2615
+ "actor": "Actor",
2616
+ "category": "Category",
2617
+ "details": "Details",
2618
+ "when": "When"
2619
+ },
2620
+ "drawer": {
2621
+ "actorId": "Actor id",
2622
+ "actorKind": "Actor type",
2623
+ "after": "After",
2624
+ "before": "Before",
2625
+ "category": "Category",
2626
+ "changes": "Changes",
2627
+ "connection": "Connection",
2628
+ "field": "Field",
2629
+ "ip": "IP address",
2630
+ "noChanges": "This action recorded no before/after images.",
2631
+ "none": "None",
2632
+ "requestId": "Request id",
2633
+ "resource": "Resource",
2634
+ "subtitle": "{actor} · {when}",
2635
+ "truncated": "Truncated at 16 KB",
2636
+ "userAgent": "User agent"
2637
+ },
2638
+ "empty": {
2639
+ "body": "Changes to data, schema, settings and permissions land here as they happen.",
2640
+ "filtered": {
2641
+ "body": "Widen the date range or clear the category filter.",
2642
+ "title": "Nothing matches these filters"
2643
+ },
2644
+ "title": "Nothing has been logged yet"
2645
+ },
2646
+ "filterActor": "Actor id",
2647
+ "filterCategoryAny": "Any category",
2648
+ "filterCategory": "Filter by category",
2649
+ "filterFrom": "From",
2650
+ "filterTo": "To",
2651
+ "listFailed": {
2652
+ "title": "Could not load the audit log"
2653
+ },
2654
+ "loadMore": "Load older entries",
2655
+ "subtitle": "Every change made in this workspace, who made it, and what it changed.",
2656
+ "title": "Audit log"
2657
+ },
2658
+ "roles": {
2659
+ "action": {
2660
+ "delete": "Delete",
2661
+ "rename": "Rename"
2662
+ },
2663
+ "builtinLocked": "Built-in roles cannot be deleted.",
2664
+ "category": {
2665
+ "access": "Access",
2666
+ "data": "Data",
2667
+ "operations": "Operations",
2668
+ "workspace": "Workspace"
2669
+ },
2670
+ "column": {
2671
+ "actions": "Actions",
2672
+ "members": "Members",
2673
+ "name": "Role"
2674
+ },
2675
+ "create": {
2676
+ "descriptionLabel": "Description",
2677
+ "description": "A new role starts with no permissions at all.",
2678
+ "failed": "Could not create the role",
2679
+ "namePlaceholder": "e.g. Support agent",
2680
+ "name": "Name",
2681
+ "submit": "Create role",
2682
+ "title": "New role"
2683
+ },
2684
+ "createButton": "New role",
2685
+ "delete": {
2686
+ "confirm": "Delete role",
2687
+ "description": "The role and its permission rows are removed.",
2688
+ "failed": "Could not delete the role",
2689
+ "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.",
2690
+ "noMembers": "Nobody holds “{name}”, so nothing moves.",
2691
+ "reassignPlaceholder": "Choose a role…",
2692
+ "reassignTo": "Move members to",
2693
+ "title": "Delete role"
2694
+ },
2695
+ "list": {
2696
+ "title": "Roles"
2697
+ },
2698
+ "loadFailed": {
2699
+ "body": "The matrix below is incomplete, so saving it would clear permissions that are simply not loaded. Reload before making changes.",
2700
+ "title": "Some permissions could not be read"
2701
+ },
2702
+ "matrix": {
2703
+ "discard": "Discard",
2704
+ "empty": {
2705
+ "body": "This instance reported no grantable permissions at all, which should not happen — reload, and if it persists check the server log.",
2706
+ "title": "No permissions to show"
2707
+ },
2708
+ "label": "Role permissions",
2709
+ "noChanges": "No pending changes",
2710
+ "pending": "{count, plural, one {# pending change} other {# pending changes}}",
2711
+ "rowHeader": "Permission",
2712
+ "title": "Permissions"
2713
+ },
2714
+ "memberCount": "{count, plural, one {# user} other {# users}}",
2715
+ "permission": {
2716
+ "apiKeysManage": "Manage API keys",
2717
+ "auditRead": "Read the audit log",
2718
+ "connectionsManage": "Manage database connections",
2719
+ "exportsManage": "Manage everyone’s exports",
2720
+ "importsManage": "Manage everyone’s imports",
2721
+ "jobsManage": "Start and cancel background jobs",
2722
+ "jobsRead": "See all background jobs",
2723
+ "llmRun": "Run AI assist",
2724
+ "pagesManage": "Create and organize pages",
2725
+ "reportsManage": "Manage scheduled reports",
2726
+ "rolesManage": "Manage roles and permissions",
2727
+ "schemaRemap": "Edit schema labels and overrides",
2728
+ "settingsManage": "Manage workspace settings",
2729
+ "usersManage": "Manage users"
2730
+ },
2731
+ "rename": {
2732
+ "failed": "Could not rename the role",
2733
+ "title": "Rename role"
2734
+ },
2735
+ "saveFailed": {
2736
+ "title": "Could not save every role"
2737
+ },
2738
+ "subtitle": "What each role may do. A user gets the union of every role they hold.",
2739
+ "title": "Roles & permissions"
2740
+ },
2741
+ "security": {
2742
+ "password": {
2743
+ "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.",
2744
+ "changed": "Password changed",
2745
+ "confirm": "Confirm new password",
2746
+ "current": "Current password",
2747
+ "failed": "Could not change your password",
2748
+ "helper": "At least 8 characters.",
2749
+ "mismatch": "The two passwords do not match.",
2750
+ "new": "New password",
2751
+ "submit": "Change password",
2752
+ "title": "Password"
2753
+ },
2754
+ "sessions": {
2755
+ "expires": "Expires {at}",
2756
+ "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.",
2757
+ "failed": "Could not read your sessions",
2758
+ "ip": "IP {ip}",
2759
+ "loading": "Looking for other signed-in devices…",
2760
+ "noIp": "No IP recorded",
2761
+ "revokeBody": "The session ends immediately and whoever is using it has to sign in again.",
2762
+ "revokeFailed": "Could not sign that device out",
2763
+ "revokeTitle": "Sign this device out",
2764
+ "revoke": "Sign out",
2765
+ "seenUnknown": "Last seen: unknown",
2766
+ "seen": "Last seen {since}",
2767
+ "thisDevice": "This device",
2768
+ "title": "Signed in",
2769
+ "unknownDevice": "Unrecognised device"
2770
+ },
2771
+ "subtitle": "Your password, your second factor, and everywhere you are signed in.",
2772
+ "title": "Security",
2773
+ "twoFactor": {
2774
+ "activateFailed": "That code was not accepted",
2775
+ "activate": "Turn on two-factor",
2776
+ "body": "An authenticator app generates a 6-digit code that Adminium asks for after your password.",
2777
+ "code": "Code from your app",
2778
+ "copyKey": "Copy setup key",
2779
+ "copyLink": "Copy setup link",
2780
+ "disableBody": "Your account goes back to password-only, and your recovery codes stop working.",
2781
+ "disableConfirm": "Turn it off",
2782
+ "disableFailed": "Could not turn off two-factor",
2783
+ "disablePassword": "Your password",
2784
+ "disableTitle": "Turn off two-factor authentication",
2785
+ "disable": "Turn off two-factor",
2786
+ "enrollFailed": "Could not start setup",
2787
+ "enroll": "Set up two-factor",
2788
+ "hide": "Hide setup key",
2789
+ "off": "Off",
2790
+ "on": "On",
2791
+ "recovery": {
2792
+ "body": "Each code signs you in once if you lose your authenticator. They are shown only now.",
2793
+ "copy": "Copy codes",
2794
+ "title": "Save your recovery codes"
2795
+ },
2796
+ "reveal": "Show setup key",
2797
+ "secretHelper": "Paste the setup link into your authenticator, or type the key in by hand.",
2798
+ "secret": "Setup key",
2799
+ "title": "Two-factor authentication"
2800
+ }
2801
+ },
2802
+ "team": {
2803
+ "action": {
2804
+ "reactivate": "Reactivate",
2805
+ "remove": "Delete",
2806
+ "resend": "New link",
2807
+ "roles": "Roles",
2808
+ "suspend": "Suspend"
2809
+ },
2810
+ "column": {
2811
+ "actions": "Actions",
2812
+ "lastSeen": "Last seen",
2813
+ "person": "Person",
2814
+ "roles": "Roles",
2815
+ "status": "Status"
2816
+ },
2817
+ "counts": "{active} active · {invited} invited · {suspended} suspended",
2818
+ "empty": {
2819
+ "body": "Invite a teammate to give them their own sign-in and role.",
2820
+ "filtered": {
2821
+ "body": "Clear the filters to see the whole directory.",
2822
+ "title": "No one matches these filters"
2823
+ },
2824
+ "title": "Only you have an account"
2825
+ },
2826
+ "filterRoleAny": "Any role",
2827
+ "filterRole": "Filter by role",
2828
+ "filterStatusAny": "Any status",
2829
+ "filterStatus": "Filter by status",
2830
+ "invite": {
2831
+ "copied": "Copied",
2832
+ "copyLink": "Copy link",
2833
+ "created": {
2834
+ "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.",
2835
+ "title": "Invitation created"
2836
+ },
2837
+ "emailIt": "Email the invitation",
2838
+ "expiresRelative": "The link expires {at} ({relative}).",
2839
+ "expires": "The link expires {at}.",
2840
+ "noEmail": {
2841
+ "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.",
2842
+ "title": "Adminium did not email this link",
2843
+ "unknown": "Adminium could not check whether this instance can send mail. Share the link over a channel you already trust."
2844
+ }
2845
+ },
2846
+ "inviteButton": "Invite teammate",
2847
+ "inviteDialog": {
2848
+ "description": "Adminium creates the account and gives you a one-time activation link to pass on.",
2849
+ "emailPlaceholder": "name@example.com",
2850
+ "email": "Email",
2851
+ "failed": "Could not create the invitation",
2852
+ "namePlaceholder": "e.g. Dana Osei",
2853
+ "name": "Name",
2854
+ "rolesHelper": "Pick the least-privileged role that lets them do their job. You can change this later.",
2855
+ "roles": "Roles",
2856
+ "submit": "Create invitation",
2857
+ "title": "Invite a teammate"
2858
+ },
2859
+ "listFailed": {
2860
+ "title": "Could not load the directory"
2861
+ },
2862
+ "loadMore": "Load more",
2863
+ "neverSignedIn": "Never signed in",
2864
+ "noRoles": "No roles",
2865
+ "remove": {
2866
+ "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.",
2867
+ "confirm": "Delete permanently",
2868
+ "prompt": "Type “{email}” to confirm",
2869
+ "title": "Delete account permanently"
2870
+ },
2871
+ "roles": {
2872
+ "unavailable": "Roles are not visible to your account, so none can be assigned here."
2873
+ },
2874
+ "rolesDialog": {
2875
+ "description": "A user gets the union of every role they hold.",
2876
+ "failed": "Could not change the roles",
2877
+ "title": "Roles for {name}"
2878
+ },
2879
+ "rolesLocked": "Changing roles needs the “Manage roles” permission.",
2880
+ "search": "Search name or email",
2881
+ "status": {
2882
+ "active": "Active",
2883
+ "invited": "Invited",
2884
+ "suspended": "Suspended"
2885
+ },
2886
+ "subtitle": "Who has an account on this Adminium, and what each of them can do.",
2887
+ "title": "Team",
2888
+ "twoFactorOn": "Two-factor authentication is on",
2889
+ "twoFactorShort": "2FA"
2890
+ },
2891
+ "email": {
2892
+ "linkFallback": "If the button doesn’t work, paste this link into your browser: {url}",
2893
+ "notification": {
2894
+ "action": "Open {appName}",
2895
+ "footer": "You are receiving this because email notifications are on for your {appName} account. You can turn them off in your notification preferences.",
2896
+ "name": "Notification"
2897
+ },
2898
+ "passwordReset": {
2899
+ "action": "Choose a new password",
2900
+ "heading": "Reset your password",
2901
+ "intro": "Hi {name}, we received a request to reset the password for {email}.",
2902
+ "name": "Password reset",
2903
+ "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.",
2904
+ "subject": "Reset your {appName} password"
2905
+ },
2906
+ "userInvite": {
2907
+ "action": "Accept the invitation",
2908
+ "heading": "You’ve been invited",
2909
+ "intro": "{inviterName} invited you to join {appName}. Accept the invitation to set a password for {email} and sign in.",
2910
+ "inviterFallback": "An administrator",
2911
+ "name": "Team invitation",
2912
+ "notice": "This invitation works only once and expires in {expiresInDays} days. If you weren’t expecting it, you can ignore this email.",
2913
+ "subject": "You have been invited to {appName}"
2914
+ }
2061
2915
  }
2062
2916
  };
2063
2917
  //# sourceMappingURL=common.js.map