@adminiumjs/i18n 0.2.2-rc.0 → 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 (95) 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 +218 -4
  4. package/dist/a11y-keys.js.map +1 -1
  5. package/dist/editing.d.ts +1 -1
  6. package/dist/editing.js +1 -1
  7. package/dist/resources/ar-eg/common.d.ts +166 -0
  8. package/dist/resources/ar-eg/common.d.ts.map +1 -1
  9. package/dist/resources/ar-eg/common.js +170 -4
  10. package/dist/resources/ar-eg/common.js.map +1 -1
  11. package/dist/resources/ar-eg/ui.d.ts +9 -0
  12. package/dist/resources/ar-eg/ui.d.ts.map +1 -1
  13. package/dist/resources/ar-eg/ui.js +17 -8
  14. package/dist/resources/ar-eg/ui.js.map +1 -1
  15. package/dist/resources/cs-cz/common.d.ts +166 -0
  16. package/dist/resources/cs-cz/common.d.ts.map +1 -1
  17. package/dist/resources/cs-cz/common.js +170 -4
  18. package/dist/resources/cs-cz/common.js.map +1 -1
  19. package/dist/resources/cs-cz/ui.d.ts +9 -0
  20. package/dist/resources/cs-cz/ui.d.ts.map +1 -1
  21. package/dist/resources/cs-cz/ui.js +17 -8
  22. package/dist/resources/cs-cz/ui.js.map +1 -1
  23. package/dist/resources/da-dk/common.d.ts +166 -0
  24. package/dist/resources/da-dk/common.d.ts.map +1 -1
  25. package/dist/resources/da-dk/common.js +170 -4
  26. package/dist/resources/da-dk/common.js.map +1 -1
  27. package/dist/resources/da-dk/ui.d.ts +9 -0
  28. package/dist/resources/da-dk/ui.d.ts.map +1 -1
  29. package/dist/resources/da-dk/ui.js +17 -8
  30. package/dist/resources/da-dk/ui.js.map +1 -1
  31. package/dist/resources/de-de/common.d.ts +166 -0
  32. package/dist/resources/de-de/common.d.ts.map +1 -1
  33. package/dist/resources/de-de/common.js +170 -4
  34. package/dist/resources/de-de/common.js.map +1 -1
  35. package/dist/resources/de-de/ui.d.ts +9 -0
  36. package/dist/resources/de-de/ui.d.ts.map +1 -1
  37. package/dist/resources/de-de/ui.js +17 -8
  38. package/dist/resources/de-de/ui.js.map +1 -1
  39. package/dist/resources/en-us/common.d.ts +166 -0
  40. package/dist/resources/en-us/common.d.ts.map +1 -1
  41. package/dist/resources/en-us/common.js +170 -4
  42. package/dist/resources/en-us/common.js.map +1 -1
  43. package/dist/resources/en-us/ui.d.ts +9 -0
  44. package/dist/resources/en-us/ui.d.ts.map +1 -1
  45. package/dist/resources/en-us/ui.js +17 -8
  46. package/dist/resources/en-us/ui.js.map +1 -1
  47. package/dist/resources/fr-fr/common.d.ts +166 -0
  48. package/dist/resources/fr-fr/common.d.ts.map +1 -1
  49. package/dist/resources/fr-fr/common.js +170 -4
  50. package/dist/resources/fr-fr/common.js.map +1 -1
  51. package/dist/resources/fr-fr/ui.d.ts +9 -0
  52. package/dist/resources/fr-fr/ui.d.ts.map +1 -1
  53. package/dist/resources/fr-fr/ui.js +17 -8
  54. package/dist/resources/fr-fr/ui.js.map +1 -1
  55. package/dist/resources/zh-cn/common.d.ts +166 -0
  56. package/dist/resources/zh-cn/common.d.ts.map +1 -1
  57. package/dist/resources/zh-cn/common.js +170 -4
  58. package/dist/resources/zh-cn/common.js.map +1 -1
  59. package/dist/resources/zh-cn/ui.d.ts +9 -0
  60. package/dist/resources/zh-cn/ui.d.ts.map +1 -1
  61. package/dist/resources/zh-cn/ui.js +17 -8
  62. package/dist/resources/zh-cn/ui.js.map +1 -1
  63. package/dist/resources/zh-tw/common.d.ts +166 -0
  64. package/dist/resources/zh-tw/common.d.ts.map +1 -1
  65. package/dist/resources/zh-tw/common.js +170 -4
  66. package/dist/resources/zh-tw/common.js.map +1 -1
  67. package/dist/resources/zh-tw/ui.d.ts +9 -0
  68. package/dist/resources/zh-tw/ui.d.ts.map +1 -1
  69. package/dist/resources/zh-tw/ui.js +17 -8
  70. package/dist/resources/zh-tw/ui.js.map +1 -1
  71. package/dist/review-status.js +7 -7
  72. package/locales/ar-EG/.meta.json +597 -73
  73. package/locales/ar-EG/common.json +170 -4
  74. package/locales/ar-EG/ui.json +17 -8
  75. package/locales/cs-CZ/.meta.json +657 -133
  76. package/locales/cs-CZ/common.json +170 -4
  77. package/locales/cs-CZ/ui.json +17 -8
  78. package/locales/da-DK/.meta.json +751 -227
  79. package/locales/da-DK/common.json +170 -4
  80. package/locales/da-DK/ui.json +17 -8
  81. package/locales/de-DE/.meta.json +742 -218
  82. package/locales/de-DE/common.json +170 -4
  83. package/locales/de-DE/ui.json +17 -8
  84. package/locales/en-US/common.json +170 -4
  85. package/locales/en-US/ui.json +17 -8
  86. package/locales/fr-FR/.meta.json +784 -260
  87. package/locales/fr-FR/common.json +170 -4
  88. package/locales/fr-FR/ui.json +17 -8
  89. package/locales/zh-CN/.meta.json +591 -67
  90. package/locales/zh-CN/common.json +170 -4
  91. package/locales/zh-CN/ui.json +17 -8
  92. package/locales/zh-TW/.meta.json +599 -75
  93. package/locales/zh-TW/common.json +170 -4
  94. package/locales/zh-TW/ui.json +17 -8
  95. package/package.json +1 -1
@@ -14,6 +14,7 @@
14
14
  },
15
15
  "auth": {
16
16
  "headline": "Machen Sie aus jeder Datenbank ein Dashboard.",
17
+ "description": "Verbinden Sie PostgreSQL, und Adminium erzeugt eine gestaltbare, rechtebewusste Admin-App — ganz ohne Code.",
17
18
  "trust": "AGPL-Kern · Selbst gehostet · Ihre Daten bleiben Ihre",
18
19
  "signIn": {
19
20
  "title": "Willkommen zurück",
@@ -235,6 +236,7 @@
235
236
  },
236
237
  "notFound": {
237
238
  "title": "Diese Seite ist verschwunden",
239
+ "body": "Die gesuchte Seite existiert nicht oder wurde verschoben. Prüfen Sie die URL oder kehren Sie zu Ihrem Dashboard zurück.",
238
240
  "errorLine": "Fehler 404",
239
241
  "searchPlaceholder": "Nach einer Seite suchen…",
240
242
  "matches": "Passende Seiten",
@@ -252,10 +254,12 @@
252
254
  "title": "Diese Seite konnte nicht dargestellt werden"
253
255
  },
254
256
  "tooNew": {
255
- "title": "Diese Seite benötigt ein neueres Adminium"
257
+ "title": "Diese Seite benötigt ein neueres Adminium",
258
+ "body": "Diese Seite wurde mit Konfigurationsversion {version} gespeichert, dieser Build versteht aber höchstens Version {latest}. Aktualisieren Sie Adminium, um sie zu öffnen."
256
259
  },
257
260
  "unknownTemplate": {
258
- "title": "Unbekannte Seitenvorlage"
261
+ "title": "Unbekannte Seitenvorlage",
262
+ "body": "Diese Seite verwendet eine Vorlage, die dieser Build nicht kennt. Sie stammt womöglich aus einem neueren Adminium oder aus einer nicht installierten Erweiterung."
259
263
  }
260
264
  },
261
265
  "mutation": {
@@ -344,6 +348,70 @@
344
348
  "emptyTitle": "Noch nichts zu konfigurieren",
345
349
  "emptyBody": "Benachrichtigungsereignisse erscheinen hier, sobald ihre Produzenten ausgeliefert werden.",
346
350
  "saveFailed": "Diese Änderung konnte nicht gespeichert werden."
351
+ },
352
+ "translations": {
353
+ "title": "Sprachen & Übersetzungen",
354
+ "subtitle": "Ändern Sie jede Formulierung in Adminium, legen Sie fest, welche Sprachen zur Auswahl stehen, und fügen Sie eigene hinzu.",
355
+ "warning": "Fehlermeldungen und Anmeldetexte lassen sich ebenfalls bearbeiten. Genau die liest man, wenn etwas schiefgeht — ändern Sie sie also mit Bedacht.",
356
+ "editor": {
357
+ "heading": "Übersetzungen bearbeiten"
358
+ },
359
+ "localeLabel": "Sprache",
360
+ "groupLabel": "Bereich",
361
+ "allAreas": "Alle Bereiche",
362
+ "stateLabel": "Anzeigen",
363
+ "state": {
364
+ "all": "Alles",
365
+ "overridden": "Nur angepasste",
366
+ "untranslated": "Nur unübersetzte",
367
+ "stale": "Englisch seitdem geändert"
368
+ },
369
+ "searchLabel": "Suchen",
370
+ "searchPlaceholder": "Schlüssel oder englischer Text",
371
+ "loading": "Texte werden geladen…",
372
+ "noMatches": "Keine Texte entsprechen diesen Filtern.",
373
+ "count": "{total, plural, one {# Text} other {# Texte}}",
374
+ "badge": {
375
+ "custom": "Angepasst",
376
+ "stale": "Englisch geändert",
377
+ "a11y": "Barrierefreier Name"
378
+ },
379
+ "sourceLabel": "Englisches Original",
380
+ "valueLabel": "Übersetzung",
381
+ "save": "Speichern",
382
+ "saved": "Übersetzung gespeichert",
383
+ "resetAction": "Auf eingebauten Text zurücksetzen",
384
+ "reset": "Auf den eingebauten Text zurückgesetzt",
385
+ "locales": {
386
+ "heading": "Verfügbare Sprachen",
387
+ "help": "Schalten Sie eine Sprache aus, um sie aus allen Sprachauswahlen zu entfernen. Wer sie bereits nutzt, behält sie, bis er eine andere wählt."
388
+ },
389
+ "locale": {
390
+ "builtin": "Eingebaut",
391
+ "custom": "Eigene",
392
+ "overrides": "{count, plural, =0 {kein eigener Text} one {# eigener Text} other {# eigene Texte}}",
393
+ "enable": "Einschalten",
394
+ "disable": "Ausschalten",
395
+ "delete": "Löschen",
396
+ "deleted": "Sprache entfernt",
397
+ "deletedDetail": "{users, plural, one {# Person wurde} other {# Personen wurden}} auf den Workspace-Standard zurückgesetzt; {strings, plural, one {# Übersetzung} other {# Übersetzungen}} gelöscht.",
398
+ "deleteFailed": "Diese Sprache konnte nicht entfernt werden",
399
+ "add": "Sprache hinzufügen",
400
+ "added": "Sprache hinzugefügt",
401
+ "create": "Sprache anlegen",
402
+ "id": "Sprachcode",
403
+ "intlTag": "Formatierungsregeln von",
404
+ "native": "Name in der Sprache selbst",
405
+ "english": "Name auf Englisch",
406
+ "dir": "Textrichtung",
407
+ "ltr": "Links nach rechts",
408
+ "rtl": "Rechts nach links",
409
+ "font": "Schrift",
410
+ "latin": "Lateinisch",
411
+ "arabic": "Arabisch",
412
+ "cjk": "Chinesisch / Japanisch / Koreanisch",
413
+ "intlHelp": "Die Formatierungsregeln bestimmen, wie Zahlen, Datumsangaben und Pluralformen behandelt werden. Wählen Sie die nächstliegende Sprache, die sie bereits hat — sie muss nicht zu Ihrem Sprachcode passen."
414
+ }
347
415
  }
348
416
  },
349
417
  "studio": {
@@ -572,7 +640,8 @@
572
640
  "heading": "Sicherheit",
573
641
  "require2fa": {
574
642
  "label": "Zwei-Faktor-Authentifizierung verlangen",
575
- "desc": "Jedes Mitglied muss 2FA aktivieren, um sich anzumelden."
643
+ "desc": "Jedes Mitglied muss 2FA aktivieren, um sich anzumelden.",
644
+ "note": "Hinweis, keine Sperre: Mitglieder ohne 2FA werden zur Einrichtung geleitet und können sie danach nicht mehr abschalten, ihre Anmeldung wird aber nie blockiert, und API-Schlüssel sind nicht betroffen."
576
645
  },
577
646
  "allowSignup": {
578
647
  "label": "Selbstregistrierung erlauben",
@@ -587,6 +656,41 @@
587
656
  "error": "Zwischen {min, number} und {max, number} Zeichen."
588
657
  }
589
658
  },
659
+ "email": {
660
+ "heading": "E-Mail (SMTP)",
661
+ "unconfigured": "Es ist kein Mailserver eingerichtet, daher kann Adminium keine Passwort-Zurücksetzungen, Einladungen oder geplanten Berichte versenden.",
662
+ "host": {
663
+ "label": "SMTP-Host",
664
+ "error": "Nur ein Hostname oder eine IP-Adresse — ohne Schema, Port oder Zugangsdaten."
665
+ },
666
+ "port": {
667
+ "label": "Port",
668
+ "error": "Zwischen {min, number} und {max, number}."
669
+ },
670
+ "user": {
671
+ "label": "Benutzername",
672
+ "helper": "Leer lassen, wenn das Relay keine Anmeldung verlangt."
673
+ },
674
+ "pass": {
675
+ "label": "Passwort",
676
+ "helper": "Verschlüsselt gespeichert und nie wieder angezeigt. Leer lassen, um das aktuelle zu behalten.",
677
+ "error": "Zu diesem Benutzernamen gehört ein Passwort."
678
+ },
679
+ "from": {
680
+ "label": "Absenderadresse",
681
+ "helper": "Nur die Adresse oder ein Anzeigename davor.",
682
+ "error": "Geben Sie eine E-Mail-Adresse ein."
683
+ },
684
+ "secure": {
685
+ "label": "Implizites TLS",
686
+ "helper": "An für Port 465. Aus beginnt unverschlüsselt und wechselt per STARTTLS — so erwartet es Port 587."
687
+ },
688
+ "remove": "Mailserver entfernen",
689
+ "review": {
690
+ "removed": "Entfernt",
691
+ "password": "Ersetzt"
692
+ }
693
+ },
590
694
  "review": {
591
695
  "title": "Workspace-Einstellungen speichern",
592
696
  "subtitle": "Prüfen Sie Ihre Änderungen vor dem Speichern.",
@@ -620,6 +724,11 @@
620
724
  "heading": "Seiten",
621
725
  "body": "Seiten hinzufügen, bearbeiten und löschen, ihre Inhalte ändern und die Seitenleiste neu ordnen.",
622
726
  "cta": "Seiten verwalten"
727
+ },
728
+ "translationsCard": {
729
+ "heading": "Sprachen & Übersetzungen",
730
+ "body": "Formulieren Sie beliebige Texte in Adminium neu, legen Sie fest, welche Sprachen zur Auswahl stehen, und fügen Sie eigene hinzu.",
731
+ "cta": "Übersetzungen öffnen"
623
732
  }
624
733
  },
625
734
  "settingsAi": {
@@ -1153,7 +1262,64 @@
1153
1262
  "pii": "PII",
1154
1263
  "masked": "Maskiert"
1155
1264
  },
1156
- "unavailableTitle": "Editor zum Neuzuordnen des Schemas nicht verfügbar"
1265
+ "unavailableTitle": "Editor zum Neuzuordnen des Schemas nicht verfügbar",
1266
+ "unavailableBody": "Dieser Build enthält den Editor zum Neuzuordnen noch nicht (09-T12). Führen Sie die Generierung erneut aus, sobald er da ist, um Bezeichnungen, Typen und Beziehungen neu zuzuordnen."
1267
+ },
1268
+ "publicApi": {
1269
+ "error": "Something went wrong",
1270
+ "scopes": {
1271
+ "deleteTitle": "Delete this scope",
1272
+ "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.",
1273
+ "deletePrompt": "Type the scope name to confirm",
1274
+ "deleteConfirm": "Delete scope",
1275
+ "issuesTitle": "This scope did not compile",
1276
+ "title": "Scopes",
1277
+ "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.",
1278
+ "emptyTitle": "No scopes yet",
1279
+ "emptyBody": "Create one below. It is checked against your live schema before it is saved.",
1280
+ "keyCount": "{count, plural, =0 {no keys} one {# key} other {# keys}}",
1281
+ "delete": "Delete",
1282
+ "nameLabel": "Name",
1283
+ "connectionLabel": "Connection ID",
1284
+ "documentLabel": "Scope document",
1285
+ "documentHint": "Compiled against your schema when you save. Every column a caller can reach is listed here and nowhere else.",
1286
+ "create": "Create scope",
1287
+ "formLabel": "Create a scope"
1288
+ },
1289
+ "cancel": "Cancel",
1290
+ "close": "Close",
1291
+ "title": "Public API",
1292
+ "subtitle": "Let your own customer- or staff-facing pages read this database, through a scope you define.",
1293
+ "notRegistered": {
1294
+ "title": "Not enabled on this server",
1295
+ "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."
1296
+ },
1297
+ "toggle": {
1298
+ "label": "Serve the public API",
1299
+ "hint": "Turning this off stops every public request immediately. Nothing is deleted — keys, scopes and data all survive."
1300
+ },
1301
+ "origins": {
1302
+ "label": "Origins allowed to call it"
1303
+ },
1304
+ "keys": {
1305
+ "title": "Keys",
1306
+ "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.",
1307
+ "emptyTitle": "No keys yet",
1308
+ "emptyBody": "Create a scope first, then mint a key for it.",
1309
+ "reveal": "Show key",
1310
+ "rotate": "Rotate",
1311
+ "revoke": "Revoke",
1312
+ "nameLabel": "Name",
1313
+ "scopeLabel": "Scope",
1314
+ "scopePlaceholder": "Choose a scope",
1315
+ "create": "Create key",
1316
+ "formLabel": "Create a key",
1317
+ "scopeIsAuthTitle": "The scope is the only permission",
1318
+ "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."
1319
+ },
1320
+ "status": {
1321
+ "heading": "Status"
1322
+ }
1157
1323
  }
1158
1324
  },
1159
1325
  "onboarding": {
@@ -291,17 +291,20 @@
291
291
  },
292
292
  "cohortMatrix": {
293
293
  "chartLabel": "Kohortenbindung",
294
- "description": "Kohortenzeilen gegen Zeitraumspalten; jede Zelle ist nach Bindung oder Umsatz eingefärbt."
294
+ "description": "Kohortenzeilen gegen Zeitraumspalten; jede Zelle ist nach Bindung oder Umsatz eingefärbt.",
295
+ "regionLabel": "Cohort matrix"
295
296
  },
296
297
  "heatmapCalendar": {
297
298
  "chartLabel": "Aktivitätskalender",
298
299
  "legendLessLabel": "Weniger",
299
300
  "legendMoreLabel": "Mehr",
300
- "description": "Ein Jahr täglicher Aktivität als Raster aus Wochen und Tagen, eingefärbt nach Intensität."
301
+ "description": "Ein Jahr täglicher Aktivität als Raster aus Wochen und Tagen, eingefärbt nach Intensität.",
302
+ "regionLabel": "Activity calendar"
301
303
  },
302
304
  "heatMonth": {
303
305
  "chartLabel": "Monatsaktivität",
304
- "description": "Ein Kalendermonat als Tagesraster, eingefärbt nach dem Wert des jeweiligen Tages."
306
+ "description": "Ein Kalendermonat als Tagesraster, eingefärbt nach dem Wert des jeweiligen Tages.",
307
+ "regionLabel": "Monthly heat map"
305
308
  },
306
309
  "choroplethGrid": {
307
310
  "chartLabel": "Regionale Aufschlüsselung",
@@ -416,12 +419,14 @@
416
419
  "description": "Ereigniskategorien mit Anzahl; ein Klick filtert den Kalender daneben.",
417
420
  "emptyTitle": "Noch keine Kategorien",
418
421
  "emptyBody": "Ereigniskategorien erscheinen hier, sobald Termine vorhanden sind.",
419
- "uncategorizedLabel": "Ohne Kategorie"
422
+ "uncategorizedLabel": "Ohne Kategorie",
423
+ "listLabel": "Categories"
420
424
  },
421
425
  "upcomingEventsList": {
422
426
  "description": "Die nächsten Termine in zeitlicher Reihenfolge, mit Verantwortlichen und Status.",
423
427
  "emptyTitle": "Nichts anstehend",
424
- "emptyBody": "Geplante Termine erscheinen hier, sobald sie angelegt werden."
428
+ "emptyBody": "Geplante Termine erscheinen hier, sobald sie angelegt werden.",
429
+ "listLabel": "Upcoming events"
425
430
  },
426
431
  "dateRangePicker": {
427
432
  "description": "Ein Datumsbereich mit Schnellauswahl, der die übrige Seite filtert.",
@@ -443,7 +448,8 @@
443
448
  "emptyBody": "Wiederkehrende Berichte und Exporte erscheinen hier, sobald sie geplant sind.",
444
449
  "nextRunLabel": "Nächste Ausführung",
445
450
  "toggleLabel": "Zeitplan aktivieren",
446
- "recipientsLabel": "Empfänger"
451
+ "recipientsLabel": "Empfänger",
452
+ "listLabel": "Scheduled jobs"
447
453
  }
448
454
  },
449
455
  "tables": {
@@ -618,7 +624,8 @@
618
624
  "sendLabel": "Senden",
619
625
  "attachLabel": "Anhang hinzufügen",
620
626
  "typingLabel": "tippt…",
621
- "composerLabel": "Nachricht"
627
+ "composerLabel": "Nachricht",
628
+ "transcriptLabel": "Conversation"
622
629
  },
623
630
  "aiChatPanel": {
624
631
  "description": "Ein Assistenz-Panel für Fragen zu Ihrem Schema und Ihren Daten.",
@@ -631,7 +638,8 @@
631
638
  "configureBody": "Fügen Sie einen Anthropic- oder OpenAI-Schlüssel hinzu — oder verweisen Sie Adminium auf Ihren eigenen Endpunkt —, um Fragen zu Ihrem Schema zu stellen.",
632
639
  "configureCtaLabel": "Anbieter konfigurieren",
633
640
  "assistantLabel": "Assistent",
634
- "composerLabel": "Frage stellen"
641
+ "composerLabel": "Frage stellen",
642
+ "transcriptLabel": "Assistant transcript"
635
643
  },
636
644
  "typingIndicator": {
637
645
  "description": "Ein Avatar und eine kursive Zeile „tippt …“, gebunden an einen Live-Status pro Unterhaltung.",
@@ -1444,6 +1452,7 @@
1444
1452
  "deleteFailed": "Löschen fehlgeschlagen.",
1445
1453
  "bulkDeleted": "{count, plural, one {{n} Zeile gelöscht.} other {{n} Zeilen gelöscht.}}",
1446
1454
  "bulkDeleteFailed": "Sammellöschung fehlgeschlagen.",
1455
+ "exportIncomplete": "{written, number} von {selected, number} ausgewählten Zeilen exportiert — neu laden und erneut versuchen.",
1447
1456
  "undone": "Änderung rückgängig gemacht.",
1448
1457
  "undoFailed": "Rückgängig machen fehlgeschlagen."
1449
1458
  },
@@ -14,6 +14,7 @@
14
14
  },
15
15
  "auth": {
16
16
  "headline": "Turn any database into a dashboard.",
17
+ "description": "Connect PostgreSQL and Adminium generates a themeable, permission-aware admin app — no code required.",
17
18
  "trust": "AGPL core · Self-hosted · Your data stays yours",
18
19
  "signIn": {
19
20
  "title": "Welcome back",
@@ -235,6 +236,7 @@
235
236
  },
236
237
  "notFound": {
237
238
  "title": "This page went missing",
239
+ "body": "The page you're looking for doesn't exist or was moved. Check the URL, or head back to your dashboard.",
238
240
  "errorLine": "Error 404",
239
241
  "searchPlaceholder": "Search for a page…",
240
242
  "matches": "Matching pages",
@@ -252,10 +254,12 @@
252
254
  "title": "This page failed to render"
253
255
  },
254
256
  "tooNew": {
255
- "title": "This page needs a newer Adminium"
257
+ "title": "This page needs a newer Adminium",
258
+ "body": "This page was saved with config version {version}, but this build understands up to version {latest}. Upgrade Adminium to open it."
256
259
  },
257
260
  "unknownTemplate": {
258
- "title": "Unknown page template"
261
+ "title": "Unknown page template",
262
+ "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."
259
263
  }
260
264
  },
261
265
  "mutation": {
@@ -344,6 +348,70 @@
344
348
  "emptyTitle": "Nothing to configure yet",
345
349
  "emptyBody": "Notification events appear here as producers ship.",
346
350
  "saveFailed": "Could not save this change."
351
+ },
352
+ "translations": {
353
+ "title": "Languages & translations",
354
+ "subtitle": "Change any wording in Adminium, choose which languages people can pick, and add languages of your own.",
355
+ "warning": "Error messages and sign-in text are editable too. Those are what people read when something goes wrong, so change them carefully.",
356
+ "editor": {
357
+ "heading": "Edit translations"
358
+ },
359
+ "localeLabel": "Language",
360
+ "groupLabel": "Area",
361
+ "allAreas": "All areas",
362
+ "stateLabel": "Show",
363
+ "state": {
364
+ "all": "Everything",
365
+ "overridden": "Customised only",
366
+ "untranslated": "Untranslated only",
367
+ "stale": "English changed since"
368
+ },
369
+ "searchLabel": "Search",
370
+ "searchPlaceholder": "Key or English text",
371
+ "loading": "Loading strings…",
372
+ "noMatches": "No strings match those filters.",
373
+ "count": "{total, plural, one {# string} other {# strings}}",
374
+ "badge": {
375
+ "custom": "Customised",
376
+ "stale": "English changed",
377
+ "a11y": "Accessible name"
378
+ },
379
+ "sourceLabel": "English source",
380
+ "valueLabel": "Translation",
381
+ "save": "Save",
382
+ "saved": "Translation saved",
383
+ "resetAction": "Reset to built-in",
384
+ "reset": "Reset to the built-in text",
385
+ "locales": {
386
+ "heading": "Available languages",
387
+ "help": "Turn a language off to remove it from every language picker. Anyone already using it keeps it until they choose another."
388
+ },
389
+ "locale": {
390
+ "builtin": "Built in",
391
+ "custom": "Custom",
392
+ "overrides": "{count, plural, =0 {no custom text} one {# custom string} other {# custom strings}}",
393
+ "enable": "Turn on",
394
+ "disable": "Turn off",
395
+ "delete": "Delete",
396
+ "deleted": "Language removed",
397
+ "deletedDetail": "{users, plural, one {# person} other {# people}} moved back to the workspace default; {strings, plural, one {# translation} other {# translations}} deleted.",
398
+ "deleteFailed": "Could not remove that language",
399
+ "add": "Add a language",
400
+ "added": "Language added",
401
+ "create": "Add language",
402
+ "id": "Language code",
403
+ "intlTag": "Formatting rules from",
404
+ "native": "Name in the language itself",
405
+ "english": "Name in English",
406
+ "dir": "Text direction",
407
+ "ltr": "Left to right",
408
+ "rtl": "Right to left",
409
+ "font": "Script",
410
+ "latin": "Latin",
411
+ "arabic": "Arabic",
412
+ "cjk": "Chinese / Japanese / Korean",
413
+ "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."
414
+ }
347
415
  }
348
416
  },
349
417
  "studio": {
@@ -572,7 +640,8 @@
572
640
  "heading": "Security",
573
641
  "require2fa": {
574
642
  "label": "Require two-factor auth",
575
- "desc": "Every member must enable 2FA to sign in."
643
+ "desc": "Every member must enable 2FA to sign in.",
644
+ "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."
576
645
  },
577
646
  "allowSignup": {
578
647
  "label": "Allow self-signup",
@@ -587,6 +656,41 @@
587
656
  "error": "Between {min, number} and {max, number} characters."
588
657
  }
589
658
  },
659
+ "email": {
660
+ "heading": "Email (SMTP)",
661
+ "unconfigured": "No mail server is set, so Adminium cannot send password resets, user invites or scheduled reports.",
662
+ "host": {
663
+ "label": "SMTP host",
664
+ "error": "A bare hostname or IP address — no scheme, port or credentials."
665
+ },
666
+ "port": {
667
+ "label": "Port",
668
+ "error": "Between {min, number} and {max, number}."
669
+ },
670
+ "user": {
671
+ "label": "Username",
672
+ "helper": "Leave empty for a relay that does not authenticate."
673
+ },
674
+ "pass": {
675
+ "label": "Password",
676
+ "helper": "Stored encrypted and never shown again. Leave blank to keep the current one.",
677
+ "error": "This username needs a password."
678
+ },
679
+ "from": {
680
+ "label": "From address",
681
+ "helper": "A bare address, or a display name in front of one.",
682
+ "error": "Enter an email address."
683
+ },
684
+ "secure": {
685
+ "label": "Implicit TLS",
686
+ "helper": "On for port 465. Off starts in cleartext and upgrades with STARTTLS, which is what port 587 expects."
687
+ },
688
+ "remove": "Remove mail server",
689
+ "review": {
690
+ "removed": "Removed",
691
+ "password": "Replaced"
692
+ }
693
+ },
590
694
  "review": {
591
695
  "title": "Save workspace settings",
592
696
  "subtitle": "Review your changes before saving.",
@@ -620,6 +724,11 @@
620
724
  "heading": "Pages",
621
725
  "body": "Add, edit and delete pages, change what each one shows, and reorder the sidebar.",
622
726
  "cta": "Manage pages"
727
+ },
728
+ "translationsCard": {
729
+ "heading": "Languages & translations",
730
+ "body": "Reword anything in Adminium, choose which languages people can pick, and add your own.",
731
+ "cta": "Open translations"
623
732
  }
624
733
  },
625
734
  "settingsAi": {
@@ -1153,7 +1262,64 @@
1153
1262
  "pii": "PII",
1154
1263
  "masked": "Masked"
1155
1264
  },
1156
- "unavailableTitle": "Schema remap editor not available"
1265
+ "unavailableTitle": "Schema remap editor not available",
1266
+ "unavailableBody": "This build does not include the remap editor yet (09-T12). Re-run generation after it lands to remap labels, types and relations."
1267
+ },
1268
+ "publicApi": {
1269
+ "error": "Something went wrong",
1270
+ "scopes": {
1271
+ "deleteTitle": "Delete this scope",
1272
+ "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.",
1273
+ "deletePrompt": "Type the scope name to confirm",
1274
+ "deleteConfirm": "Delete scope",
1275
+ "issuesTitle": "This scope did not compile",
1276
+ "title": "Scopes",
1277
+ "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.",
1278
+ "emptyTitle": "No scopes yet",
1279
+ "emptyBody": "Create one below. It is checked against your live schema before it is saved.",
1280
+ "keyCount": "{count, plural, =0 {no keys} one {# key} other {# keys}}",
1281
+ "delete": "Delete",
1282
+ "nameLabel": "Name",
1283
+ "connectionLabel": "Connection ID",
1284
+ "documentLabel": "Scope document",
1285
+ "documentHint": "Compiled against your schema when you save. Every column a caller can reach is listed here and nowhere else.",
1286
+ "create": "Create scope",
1287
+ "formLabel": "Create a scope"
1288
+ },
1289
+ "cancel": "Cancel",
1290
+ "close": "Close",
1291
+ "title": "Public API",
1292
+ "subtitle": "Let your own customer- or staff-facing pages read this database, through a scope you define.",
1293
+ "notRegistered": {
1294
+ "title": "Not enabled on this server",
1295
+ "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."
1296
+ },
1297
+ "toggle": {
1298
+ "label": "Serve the public API",
1299
+ "hint": "Turning this off stops every public request immediately. Nothing is deleted — keys, scopes and data all survive."
1300
+ },
1301
+ "origins": {
1302
+ "label": "Origins allowed to call it"
1303
+ },
1304
+ "keys": {
1305
+ "title": "Keys",
1306
+ "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.",
1307
+ "emptyTitle": "No keys yet",
1308
+ "emptyBody": "Create a scope first, then mint a key for it.",
1309
+ "reveal": "Show key",
1310
+ "rotate": "Rotate",
1311
+ "revoke": "Revoke",
1312
+ "nameLabel": "Name",
1313
+ "scopeLabel": "Scope",
1314
+ "scopePlaceholder": "Choose a scope",
1315
+ "create": "Create key",
1316
+ "formLabel": "Create a key",
1317
+ "scopeIsAuthTitle": "The scope is the only permission",
1318
+ "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."
1319
+ },
1320
+ "status": {
1321
+ "heading": "Status"
1322
+ }
1157
1323
  }
1158
1324
  },
1159
1325
  "onboarding": {
@@ -291,17 +291,20 @@
291
291
  },
292
292
  "cohortMatrix": {
293
293
  "chartLabel": "Cohort retention",
294
- "description": "Cohort rows against period columns, each cell shaded by retention or revenue."
294
+ "description": "Cohort rows against period columns, each cell shaded by retention or revenue.",
295
+ "regionLabel": "Cohort matrix"
295
296
  },
296
297
  "heatmapCalendar": {
297
298
  "chartLabel": "Activity calendar",
298
299
  "legendLessLabel": "Less",
299
300
  "legendMoreLabel": "More",
300
- "description": "A year of daily activity as a week-by-day grid shaded by intensity."
301
+ "description": "A year of daily activity as a week-by-day grid shaded by intensity.",
302
+ "regionLabel": "Activity calendar"
301
303
  },
302
304
  "heatMonth": {
303
305
  "chartLabel": "Monthly activity",
304
- "description": "One calendar month as a day grid shaded by each day's value."
306
+ "description": "One calendar month as a day grid shaded by each day's value.",
307
+ "regionLabel": "Monthly heat map"
305
308
  },
306
309
  "choroplethGrid": {
307
310
  "chartLabel": "Regional breakdown",
@@ -416,12 +419,14 @@
416
419
  "description": "Event categories with counts; toggling one filters the calendar beside it.",
417
420
  "emptyTitle": "No categories yet",
418
421
  "emptyBody": "Event categories will appear here once events exist.",
419
- "uncategorizedLabel": "Uncategorized"
422
+ "uncategorizedLabel": "Uncategorized",
423
+ "listLabel": "Categories"
420
424
  },
421
425
  "upcomingEventsList": {
422
426
  "description": "The next scheduled events, date-ascending, with owner and status.",
423
427
  "emptyTitle": "Nothing upcoming",
424
- "emptyBody": "Scheduled events will appear here as they are planned."
428
+ "emptyBody": "Scheduled events will appear here as they are planned.",
429
+ "listLabel": "Upcoming events"
425
430
  },
426
431
  "dateRangePicker": {
427
432
  "description": "A start/end date range with quick presets that filters the rest of the page.",
@@ -443,7 +448,8 @@
443
448
  "emptyBody": "Recurring reports and exports will appear here once scheduled.",
444
449
  "nextRunLabel": "Next run",
445
450
  "toggleLabel": "Enable schedule",
446
- "recipientsLabel": "Recipients"
451
+ "recipientsLabel": "Recipients",
452
+ "listLabel": "Scheduled jobs"
447
453
  }
448
454
  },
449
455
  "tables": {
@@ -618,7 +624,8 @@
618
624
  "sendLabel": "Send",
619
625
  "attachLabel": "Add attachment",
620
626
  "typingLabel": "typing…",
621
- "composerLabel": "Message"
627
+ "composerLabel": "Message",
628
+ "transcriptLabel": "Conversation"
622
629
  },
623
630
  "aiChatPanel": {
624
631
  "description": "An assistant panel for asking questions about your schema and data.",
@@ -631,7 +638,8 @@
631
638
  "configureBody": "Add an Anthropic or OpenAI key — or point Adminium at your own endpoint — to ask questions about your schema.",
632
639
  "configureCtaLabel": "Configure a provider",
633
640
  "assistantLabel": "Assistant",
634
- "composerLabel": "Ask a question"
641
+ "composerLabel": "Ask a question",
642
+ "transcriptLabel": "Assistant transcript"
635
643
  },
636
644
  "typingIndicator": {
637
645
  "description": "An avatar and an italic “typing…” row, bound to a live per-conversation boolean.",
@@ -1444,6 +1452,7 @@
1444
1452
  "deleteFailed": "Delete failed.",
1445
1453
  "bulkDeleted": "{count, plural, one {{n} row deleted.} other {{n} rows deleted.}}",
1446
1454
  "bulkDeleteFailed": "Bulk delete failed.",
1455
+ "exportIncomplete": "Exported {written, number} of {selected, number} selected rows — reload and try again.",
1447
1456
  "undone": "Change undone.",
1448
1457
  "undoFailed": "Undo failed."
1449
1458
  },