@adminiumjs/i18n 0.1.0-rc.1
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.
- package/LICENSE +661 -0
- package/dist/create-i18n.d.ts +48 -0
- package/dist/create-i18n.d.ts.map +1 -0
- package/dist/create-i18n.js +98 -0
- package/dist/create-i18n.js.map +1 -0
- package/dist/format/index.d.ts +70 -0
- package/dist/format/index.d.ts.map +1 -0
- package/dist/format/index.js +217 -0
- package/dist/format/index.js.map +1 -0
- package/dist/icu-format.d.ts +17 -0
- package/dist/icu-format.d.ts.map +1 -0
- package/dist/icu-format.js +52 -0
- package/dist/icu-format.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/locales.d.ts +99 -0
- package/dist/locales.d.ts.map +1 -0
- package/dist/locales.js +55 -0
- package/dist/locales.js.map +1 -0
- package/dist/react.d.ts +26 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +61 -0
- package/dist/react.js.map +1 -0
- package/dist/resources/ar-eg/common.d.ts +1964 -0
- package/dist/resources/ar-eg/common.d.ts.map +1 -0
- package/dist/resources/ar-eg/common.js +1963 -0
- package/dist/resources/ar-eg/common.js.map +1 -0
- package/dist/resources/ar-eg/errors.d.ts +45 -0
- package/dist/resources/ar-eg/errors.d.ts.map +1 -0
- package/dist/resources/ar-eg/errors.js +44 -0
- package/dist/resources/ar-eg/errors.js.map +1 -0
- package/dist/resources/ar-eg/generated.d.ts +20 -0
- package/dist/resources/ar-eg/generated.d.ts.map +1 -0
- package/dist/resources/ar-eg/generated.js +19 -0
- package/dist/resources/ar-eg/generated.js.map +1 -0
- package/dist/resources/ar-eg/studio.d.ts +18 -0
- package/dist/resources/ar-eg/studio.d.ts.map +1 -0
- package/dist/resources/ar-eg/studio.js +17 -0
- package/dist/resources/ar-eg/studio.js.map +1 -0
- package/dist/resources/ar-eg/ui.d.ts +996 -0
- package/dist/resources/ar-eg/ui.d.ts.map +1 -0
- package/dist/resources/ar-eg/ui.js +995 -0
- package/dist/resources/ar-eg/ui.js.map +1 -0
- package/dist/resources/cs-cz/common.d.ts +1964 -0
- package/dist/resources/cs-cz/common.d.ts.map +1 -0
- package/dist/resources/cs-cz/common.js +1963 -0
- package/dist/resources/cs-cz/common.js.map +1 -0
- package/dist/resources/cs-cz/errors.d.ts +45 -0
- package/dist/resources/cs-cz/errors.d.ts.map +1 -0
- package/dist/resources/cs-cz/errors.js +44 -0
- package/dist/resources/cs-cz/errors.js.map +1 -0
- package/dist/resources/cs-cz/generated.d.ts +20 -0
- package/dist/resources/cs-cz/generated.d.ts.map +1 -0
- package/dist/resources/cs-cz/generated.js +19 -0
- package/dist/resources/cs-cz/generated.js.map +1 -0
- package/dist/resources/cs-cz/studio.d.ts +18 -0
- package/dist/resources/cs-cz/studio.d.ts.map +1 -0
- package/dist/resources/cs-cz/studio.js +17 -0
- package/dist/resources/cs-cz/studio.js.map +1 -0
- package/dist/resources/cs-cz/ui.d.ts +996 -0
- package/dist/resources/cs-cz/ui.d.ts.map +1 -0
- package/dist/resources/cs-cz/ui.js +995 -0
- package/dist/resources/cs-cz/ui.js.map +1 -0
- package/dist/resources/da-dk/common.d.ts +1964 -0
- package/dist/resources/da-dk/common.d.ts.map +1 -0
- package/dist/resources/da-dk/common.js +1963 -0
- package/dist/resources/da-dk/common.js.map +1 -0
- package/dist/resources/da-dk/errors.d.ts +45 -0
- package/dist/resources/da-dk/errors.d.ts.map +1 -0
- package/dist/resources/da-dk/errors.js +44 -0
- package/dist/resources/da-dk/errors.js.map +1 -0
- package/dist/resources/da-dk/generated.d.ts +20 -0
- package/dist/resources/da-dk/generated.d.ts.map +1 -0
- package/dist/resources/da-dk/generated.js +19 -0
- package/dist/resources/da-dk/generated.js.map +1 -0
- package/dist/resources/da-dk/studio.d.ts +18 -0
- package/dist/resources/da-dk/studio.d.ts.map +1 -0
- package/dist/resources/da-dk/studio.js +17 -0
- package/dist/resources/da-dk/studio.js.map +1 -0
- package/dist/resources/da-dk/ui.d.ts +996 -0
- package/dist/resources/da-dk/ui.d.ts.map +1 -0
- package/dist/resources/da-dk/ui.js +995 -0
- package/dist/resources/da-dk/ui.js.map +1 -0
- package/dist/resources/de-de/common.d.ts +1964 -0
- package/dist/resources/de-de/common.d.ts.map +1 -0
- package/dist/resources/de-de/common.js +1963 -0
- package/dist/resources/de-de/common.js.map +1 -0
- package/dist/resources/de-de/errors.d.ts +45 -0
- package/dist/resources/de-de/errors.d.ts.map +1 -0
- package/dist/resources/de-de/errors.js +44 -0
- package/dist/resources/de-de/errors.js.map +1 -0
- package/dist/resources/de-de/generated.d.ts +20 -0
- package/dist/resources/de-de/generated.d.ts.map +1 -0
- package/dist/resources/de-de/generated.js +19 -0
- package/dist/resources/de-de/generated.js.map +1 -0
- package/dist/resources/de-de/studio.d.ts +18 -0
- package/dist/resources/de-de/studio.d.ts.map +1 -0
- package/dist/resources/de-de/studio.js +17 -0
- package/dist/resources/de-de/studio.js.map +1 -0
- package/dist/resources/de-de/ui.d.ts +996 -0
- package/dist/resources/de-de/ui.d.ts.map +1 -0
- package/dist/resources/de-de/ui.js +995 -0
- package/dist/resources/de-de/ui.js.map +1 -0
- package/dist/resources/en-us/common.d.ts +1964 -0
- package/dist/resources/en-us/common.d.ts.map +1 -0
- package/dist/resources/en-us/common.js +1963 -0
- package/dist/resources/en-us/common.js.map +1 -0
- package/dist/resources/en-us/errors.d.ts +45 -0
- package/dist/resources/en-us/errors.d.ts.map +1 -0
- package/dist/resources/en-us/errors.js +44 -0
- package/dist/resources/en-us/errors.js.map +1 -0
- package/dist/resources/en-us/generated.d.ts +20 -0
- package/dist/resources/en-us/generated.d.ts.map +1 -0
- package/dist/resources/en-us/generated.js +19 -0
- package/dist/resources/en-us/generated.js.map +1 -0
- package/dist/resources/en-us/studio.d.ts +18 -0
- package/dist/resources/en-us/studio.d.ts.map +1 -0
- package/dist/resources/en-us/studio.js +17 -0
- package/dist/resources/en-us/studio.js.map +1 -0
- package/dist/resources/en-us/ui.d.ts +996 -0
- package/dist/resources/en-us/ui.d.ts.map +1 -0
- package/dist/resources/en-us/ui.js +995 -0
- package/dist/resources/en-us/ui.js.map +1 -0
- package/dist/resources/fr-fr/common.d.ts +1964 -0
- package/dist/resources/fr-fr/common.d.ts.map +1 -0
- package/dist/resources/fr-fr/common.js +1963 -0
- package/dist/resources/fr-fr/common.js.map +1 -0
- package/dist/resources/fr-fr/errors.d.ts +45 -0
- package/dist/resources/fr-fr/errors.d.ts.map +1 -0
- package/dist/resources/fr-fr/errors.js +44 -0
- package/dist/resources/fr-fr/errors.js.map +1 -0
- package/dist/resources/fr-fr/generated.d.ts +20 -0
- package/dist/resources/fr-fr/generated.d.ts.map +1 -0
- package/dist/resources/fr-fr/generated.js +19 -0
- package/dist/resources/fr-fr/generated.js.map +1 -0
- package/dist/resources/fr-fr/studio.d.ts +18 -0
- package/dist/resources/fr-fr/studio.d.ts.map +1 -0
- package/dist/resources/fr-fr/studio.js +17 -0
- package/dist/resources/fr-fr/studio.js.map +1 -0
- package/dist/resources/fr-fr/ui.d.ts +996 -0
- package/dist/resources/fr-fr/ui.d.ts.map +1 -0
- package/dist/resources/fr-fr/ui.js +995 -0
- package/dist/resources/fr-fr/ui.js.map +1 -0
- package/dist/resources/index.d.ts +8 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +21 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/lazy.d.ts +20 -0
- package/dist/resources/lazy.d.ts.map +1 -0
- package/dist/resources/lazy.js +49 -0
- package/dist/resources/lazy.js.map +1 -0
- package/dist/resources/zh-cn/common.d.ts +1964 -0
- package/dist/resources/zh-cn/common.d.ts.map +1 -0
- package/dist/resources/zh-cn/common.js +1963 -0
- package/dist/resources/zh-cn/common.js.map +1 -0
- package/dist/resources/zh-cn/errors.d.ts +45 -0
- package/dist/resources/zh-cn/errors.d.ts.map +1 -0
- package/dist/resources/zh-cn/errors.js +44 -0
- package/dist/resources/zh-cn/errors.js.map +1 -0
- package/dist/resources/zh-cn/generated.d.ts +20 -0
- package/dist/resources/zh-cn/generated.d.ts.map +1 -0
- package/dist/resources/zh-cn/generated.js +19 -0
- package/dist/resources/zh-cn/generated.js.map +1 -0
- package/dist/resources/zh-cn/studio.d.ts +18 -0
- package/dist/resources/zh-cn/studio.d.ts.map +1 -0
- package/dist/resources/zh-cn/studio.js +17 -0
- package/dist/resources/zh-cn/studio.js.map +1 -0
- package/dist/resources/zh-cn/ui.d.ts +996 -0
- package/dist/resources/zh-cn/ui.d.ts.map +1 -0
- package/dist/resources/zh-cn/ui.js +995 -0
- package/dist/resources/zh-cn/ui.js.map +1 -0
- package/dist/resources/zh-tw/common.d.ts +1964 -0
- package/dist/resources/zh-tw/common.d.ts.map +1 -0
- package/dist/resources/zh-tw/common.js +1963 -0
- package/dist/resources/zh-tw/common.js.map +1 -0
- package/dist/resources/zh-tw/errors.d.ts +45 -0
- package/dist/resources/zh-tw/errors.d.ts.map +1 -0
- package/dist/resources/zh-tw/errors.js +44 -0
- package/dist/resources/zh-tw/errors.js.map +1 -0
- package/dist/resources/zh-tw/generated.d.ts +20 -0
- package/dist/resources/zh-tw/generated.d.ts.map +1 -0
- package/dist/resources/zh-tw/generated.js +19 -0
- package/dist/resources/zh-tw/generated.js.map +1 -0
- package/dist/resources/zh-tw/studio.d.ts +18 -0
- package/dist/resources/zh-tw/studio.d.ts.map +1 -0
- package/dist/resources/zh-tw/studio.js +17 -0
- package/dist/resources/zh-tw/studio.js.map +1 -0
- package/dist/resources/zh-tw/ui.d.ts +996 -0
- package/dist/resources/zh-tw/ui.d.ts.map +1 -0
- package/dist/resources/zh-tw/ui.js +995 -0
- package/dist/resources/zh-tw/ui.js.map +1 -0
- package/locales/ar-EG/common.json +1954 -0
- package/locales/ar-EG/errors.json +35 -0
- package/locales/ar-EG/generated.json +10 -0
- package/locales/ar-EG/studio.json +8 -0
- package/locales/ar-EG/ui.json +986 -0
- package/locales/cs-CZ/common.json +1954 -0
- package/locales/cs-CZ/errors.json +35 -0
- package/locales/cs-CZ/generated.json +10 -0
- package/locales/cs-CZ/studio.json +8 -0
- package/locales/cs-CZ/ui.json +986 -0
- package/locales/da-DK/common.json +1954 -0
- package/locales/da-DK/errors.json +35 -0
- package/locales/da-DK/generated.json +10 -0
- package/locales/da-DK/studio.json +8 -0
- package/locales/da-DK/ui.json +986 -0
- package/locales/de-DE/common.json +1954 -0
- package/locales/de-DE/errors.json +35 -0
- package/locales/de-DE/generated.json +10 -0
- package/locales/de-DE/studio.json +8 -0
- package/locales/de-DE/ui.json +986 -0
- package/locales/en-US/common.json +1954 -0
- package/locales/en-US/errors.json +35 -0
- package/locales/en-US/generated.json +10 -0
- package/locales/en-US/studio.json +8 -0
- package/locales/en-US/ui.json +986 -0
- package/locales/fr-FR/common.json +1954 -0
- package/locales/fr-FR/errors.json +35 -0
- package/locales/fr-FR/generated.json +10 -0
- package/locales/fr-FR/studio.json +8 -0
- package/locales/fr-FR/ui.json +986 -0
- package/locales/zh-CN/common.json +1954 -0
- package/locales/zh-CN/errors.json +35 -0
- package/locales/zh-CN/generated.json +10 -0
- package/locales/zh-CN/studio.json +8 -0
- package/locales/zh-CN/ui.json +986 -0
- package/locales/zh-TW/common.json +1954 -0
- package/locales/zh-TW/errors.json +35 -0
- package/locales/zh-TW/generated.json +10 -0
- package/locales/zh-TW/studio.json +8 -0
- package/locales/zh-TW/ui.json +986 -0
- package/package.json +51 -0
|
@@ -0,0 +1,1963 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GENERATED MIRROR of ../../../locales/en-US/common.json — do not edit by hand.
|
|
3
|
+
* The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);
|
|
4
|
+
* this TS mirror exists so the runtime bundles en-US resources (and chunk-splits
|
|
5
|
+
* the other locales) without JSON import attributes (browser + NodeNext safe).
|
|
6
|
+
* Parity is enforced by src/resources/parity.test.ts. Regenerate with
|
|
7
|
+
* scripts/gen-resources.mjs.
|
|
8
|
+
*/
|
|
9
|
+
export default {
|
|
10
|
+
"common": {
|
|
11
|
+
"dismiss": "Dismiss",
|
|
12
|
+
"notifications": "Notifications",
|
|
13
|
+
"retry": "Retry",
|
|
14
|
+
"undo": "Undo",
|
|
15
|
+
"close": "Close",
|
|
16
|
+
"cancel": "Cancel",
|
|
17
|
+
"back": "Back",
|
|
18
|
+
"loading": "Loading",
|
|
19
|
+
"clearSearch": "Clear search",
|
|
20
|
+
"clear": "Clear",
|
|
21
|
+
"save": "Save"
|
|
22
|
+
},
|
|
23
|
+
"auth": {
|
|
24
|
+
"headline": "Turn any database into a dashboard.",
|
|
25
|
+
"trust": "AGPL core · Self-hosted · Your data stays yours",
|
|
26
|
+
"signIn": {
|
|
27
|
+
"title": "Welcome back",
|
|
28
|
+
"subtitle": "Sign in to your Adminium workspace.",
|
|
29
|
+
"email": "Email",
|
|
30
|
+
"emailInvalid": "Enter a valid email address.",
|
|
31
|
+
"password": "Password",
|
|
32
|
+
"passwordRequired": "Enter your password.",
|
|
33
|
+
"showPassword": "Show password",
|
|
34
|
+
"hidePassword": "Hide password",
|
|
35
|
+
"remember": "Keep me signed in",
|
|
36
|
+
"forgot": "Forgot?",
|
|
37
|
+
"submit": "Sign in",
|
|
38
|
+
"invalid": "Invalid email or password.",
|
|
39
|
+
"rateLimited": "Too many attempts — try again in a minute.",
|
|
40
|
+
"failed": "Sign-in failed. Check your connection and try again."
|
|
41
|
+
},
|
|
42
|
+
"forgot": {
|
|
43
|
+
"title": "Reset your password",
|
|
44
|
+
"email": "Email",
|
|
45
|
+
"emailInvalid": "Enter a valid email address.",
|
|
46
|
+
"submit": "Send reset link",
|
|
47
|
+
"sentTitle": "Check your email",
|
|
48
|
+
"resend": "Send it again",
|
|
49
|
+
"back": "Back to sign in",
|
|
50
|
+
"done": "Back to sign in",
|
|
51
|
+
"rateLimited": "Too many requests — try again later.",
|
|
52
|
+
"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
|
+
},
|
|
55
|
+
"reset": {
|
|
56
|
+
"title": "Set a new password",
|
|
57
|
+
"subtitle": "Must be at least 8 characters.",
|
|
58
|
+
"password": "New password",
|
|
59
|
+
"confirm": "Confirm password",
|
|
60
|
+
"showPassword": "Show password",
|
|
61
|
+
"hidePassword": "Hide password",
|
|
62
|
+
"strength": "Password strength",
|
|
63
|
+
"weak": "Weak",
|
|
64
|
+
"fair": "Fair",
|
|
65
|
+
"good": "Good",
|
|
66
|
+
"strong": "Strong",
|
|
67
|
+
"tooShort": "Use at least 8 characters.",
|
|
68
|
+
"submit": "Reset password",
|
|
69
|
+
"failed": "Reset failed. Try again."
|
|
70
|
+
},
|
|
71
|
+
"otp": {
|
|
72
|
+
"title": "Two-factor authentication",
|
|
73
|
+
"subtitle": "Enter the 6-digit code from your authenticator app.",
|
|
74
|
+
"code": "One-time code",
|
|
75
|
+
"recoveryCode": "Recovery code",
|
|
76
|
+
"useRecovery": "Lost your device? Use a recovery code",
|
|
77
|
+
"useAuthenticator": "Use your authenticator app instead",
|
|
78
|
+
"submit": "Verify",
|
|
79
|
+
"invalid": "That code didn’t work. Try again.",
|
|
80
|
+
"failed": "Verification failed. Check your connection and try again."
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"nav": {
|
|
84
|
+
"home": "Home",
|
|
85
|
+
"primary": "Primary",
|
|
86
|
+
"account": "Account",
|
|
87
|
+
"signOut": "Sign out",
|
|
88
|
+
"empty": "Pages appear here once a database is connected.",
|
|
89
|
+
"connection": {
|
|
90
|
+
"shared": "Shared",
|
|
91
|
+
"unnamed": "Connection"
|
|
92
|
+
},
|
|
93
|
+
"imports": "Import data",
|
|
94
|
+
"exports": "Data exports",
|
|
95
|
+
"emailTemplates": "Email templates",
|
|
96
|
+
"notificationSettings": "Notification settings",
|
|
97
|
+
"scheduledReports": "Scheduled reports",
|
|
98
|
+
"group": {
|
|
99
|
+
"workspace": "Workspace",
|
|
100
|
+
"library": "Library",
|
|
101
|
+
"planning": "Planning",
|
|
102
|
+
"people": "People",
|
|
103
|
+
"account": "Account"
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"topbar": {
|
|
107
|
+
"search": "Search…",
|
|
108
|
+
"notifications": "Notifications",
|
|
109
|
+
"notificationsLoading": "Loading notifications",
|
|
110
|
+
"notificationsError": "Couldn’t load notifications.",
|
|
111
|
+
"notificationsEmpty": "You’re all caught up.",
|
|
112
|
+
"theme": "Toggle light / dark",
|
|
113
|
+
"userMenu": "Account menu",
|
|
114
|
+
"profile": "Profile",
|
|
115
|
+
"preferences": "Preferences",
|
|
116
|
+
"signOut": "Sign out"
|
|
117
|
+
},
|
|
118
|
+
"palette": {
|
|
119
|
+
"dialog": "Command palette",
|
|
120
|
+
"placeholder": "Type a command or search…",
|
|
121
|
+
"navigate": "Navigate",
|
|
122
|
+
"actions": "Actions",
|
|
123
|
+
"askAi": "Ask AI",
|
|
124
|
+
"shortcuts": "Keyboard shortcuts",
|
|
125
|
+
"signOut": "Sign out",
|
|
126
|
+
"themeDark": "Switch to dark theme",
|
|
127
|
+
"themeLight": "Switch to light theme",
|
|
128
|
+
"footerNavigate": "navigate",
|
|
129
|
+
"footerOpen": "select",
|
|
130
|
+
"footerClose": "close"
|
|
131
|
+
},
|
|
132
|
+
"shortcuts": {
|
|
133
|
+
"title": "Keyboard shortcuts",
|
|
134
|
+
"subtitle": "Work faster across Adminium",
|
|
135
|
+
"close": "Close",
|
|
136
|
+
"dismiss": "Close or dismiss",
|
|
137
|
+
"palette": "Open command palette",
|
|
138
|
+
"panel": "Show shortcuts panel",
|
|
139
|
+
"search": "Focus search",
|
|
140
|
+
"sidebar": "Toggle sidebar",
|
|
141
|
+
"theme": "Toggle light / dark",
|
|
142
|
+
"then": "then",
|
|
143
|
+
"footerPre": "Press",
|
|
144
|
+
"footerPost": "anytime to open this panel."
|
|
145
|
+
},
|
|
146
|
+
"states": {
|
|
147
|
+
"checked": "checked 8s ago",
|
|
148
|
+
"diagnostics": "Diagnostics"
|
|
149
|
+
},
|
|
150
|
+
"notFound": {
|
|
151
|
+
"title": "This page went missing",
|
|
152
|
+
"errorLine": "Error 404",
|
|
153
|
+
"searchPlaceholder": "Search for a page…",
|
|
154
|
+
"matches": "Matching pages",
|
|
155
|
+
"popular": "Popular destinations",
|
|
156
|
+
"goBack": "Go back",
|
|
157
|
+
"backToDashboard": "Back to dashboard"
|
|
158
|
+
},
|
|
159
|
+
"page": {
|
|
160
|
+
"invalid": {
|
|
161
|
+
"title": "This page’s configuration is invalid",
|
|
162
|
+
"body": "The stored page document failed validation and cannot be rendered."
|
|
163
|
+
},
|
|
164
|
+
"renderError": {
|
|
165
|
+
"title": "This page failed to render"
|
|
166
|
+
},
|
|
167
|
+
"tooNew": {
|
|
168
|
+
"title": "This page needs a newer Adminium"
|
|
169
|
+
},
|
|
170
|
+
"unknownTemplate": {
|
|
171
|
+
"title": "Unknown page template"
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
"mutation": {
|
|
175
|
+
"created": "Record created",
|
|
176
|
+
"updated": "Record updated",
|
|
177
|
+
"deleted": "Record deleted"
|
|
178
|
+
},
|
|
179
|
+
"undo": {
|
|
180
|
+
"done": "Change undone",
|
|
181
|
+
"failed": "Could not undo this change"
|
|
182
|
+
},
|
|
183
|
+
"prefs": {
|
|
184
|
+
"theme": {
|
|
185
|
+
"label": "Theme",
|
|
186
|
+
"light": "Light",
|
|
187
|
+
"dark": "Dark",
|
|
188
|
+
"system": "System"
|
|
189
|
+
},
|
|
190
|
+
"accent": {
|
|
191
|
+
"label": "Accent color",
|
|
192
|
+
"indigo": "Indigo",
|
|
193
|
+
"blue": "Blue",
|
|
194
|
+
"teal": "Teal",
|
|
195
|
+
"violet": "Violet",
|
|
196
|
+
"rose": "Rose",
|
|
197
|
+
"red": "Red",
|
|
198
|
+
"orange": "Orange",
|
|
199
|
+
"black": "Black"
|
|
200
|
+
},
|
|
201
|
+
"density": {
|
|
202
|
+
"label": "Density",
|
|
203
|
+
"comfortable": "Comfortable",
|
|
204
|
+
"compact": "Compact"
|
|
205
|
+
},
|
|
206
|
+
"locale": {
|
|
207
|
+
"label": "Language",
|
|
208
|
+
"directionNote": "Text direction: right to left (set automatically by the language)"
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
"account": {
|
|
212
|
+
"title": "Account",
|
|
213
|
+
"subtitle": "The identity of your current session. Manage display preferences and notification settings on their dedicated pages.",
|
|
214
|
+
"preferencesLink": "Preferences",
|
|
215
|
+
"notificationsLink": "Notification settings",
|
|
216
|
+
"name": "Name",
|
|
217
|
+
"email": "Email",
|
|
218
|
+
"roles": "Roles",
|
|
219
|
+
"twoFactor": "Two-factor",
|
|
220
|
+
"on": "Enabled",
|
|
221
|
+
"off": "Off",
|
|
222
|
+
"preferences": {
|
|
223
|
+
"title": "Preferences",
|
|
224
|
+
"subtitle": "How Adminium looks and reads for you — on this and every device you sign in from.",
|
|
225
|
+
"workspaceDefault": "Workspace default",
|
|
226
|
+
"personal": "Personal",
|
|
227
|
+
"usingDefault": "Using workspace default ({value})",
|
|
228
|
+
"reset": "Reset to workspace default",
|
|
229
|
+
"resetFailed": "Could not reset this preference. Try again.",
|
|
230
|
+
"appliesInstantly": "Changes apply instantly and are saved to your profile."
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
"settings": {
|
|
234
|
+
"defaults": {
|
|
235
|
+
"title": "Global defaults",
|
|
236
|
+
"subtitle": "Workspace-wide appearance and language defaults.",
|
|
237
|
+
"explainer": "These defaults apply to all users unless they override them. Anyone can set their own preference under Profile → Preferences — personal preferences always win for that user.",
|
|
238
|
+
"appearanceHeading": "Appearance defaults",
|
|
239
|
+
"languageHeading": "Language & region defaults",
|
|
240
|
+
"adoption": "{following, number} of {total, plural, one {# user} other {# users}} follow this default.",
|
|
241
|
+
"weekStartNote": "Week start and number formats follow the language.",
|
|
242
|
+
"save": "Save defaults",
|
|
243
|
+
"saved": "Workspace defaults updated",
|
|
244
|
+
"saveFailed": "Could not save workspace defaults. Try again.",
|
|
245
|
+
"liveNote": "Saving broadcasts the change live — signed-in users who follow a default see it apply without a reload."
|
|
246
|
+
},
|
|
247
|
+
"notifications": {
|
|
248
|
+
"subtitle": "Choose what you’re notified about and how",
|
|
249
|
+
"matrixLabel": "Notify me about",
|
|
250
|
+
"rowHeader": "Event",
|
|
251
|
+
"saving": "Saving…",
|
|
252
|
+
"saved": "Saved",
|
|
253
|
+
"unavailable": "Not available yet",
|
|
254
|
+
"loading": "Loading preferences",
|
|
255
|
+
"errorTitle": "These settings failed to load",
|
|
256
|
+
"emptyTitle": "Nothing to configure yet",
|
|
257
|
+
"emptyBody": "Notification events appear here as producers ship.",
|
|
258
|
+
"saveFailed": "Could not save this change."
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
"studio": {
|
|
262
|
+
"source": {
|
|
263
|
+
"engine": {
|
|
264
|
+
"label": "Database engine",
|
|
265
|
+
"postgres": "PostgreSQL",
|
|
266
|
+
"mysql": "MySQL / MariaDB",
|
|
267
|
+
"sqlite": "SQLite"
|
|
268
|
+
},
|
|
269
|
+
"format": {
|
|
270
|
+
"label": "Schema format",
|
|
271
|
+
"helper": "Leave on auto-detect unless the detection gets it wrong.",
|
|
272
|
+
"auto": "Auto-detect",
|
|
273
|
+
"sql": "SQL DDL / pg_dump",
|
|
274
|
+
"prisma": "Prisma schema",
|
|
275
|
+
"drizzle": "Drizzle ORM",
|
|
276
|
+
"typeorm": "TypeORM entities",
|
|
277
|
+
"sequelize": "Sequelize models",
|
|
278
|
+
"rails": "Rails schema.rb",
|
|
279
|
+
"django": "Django models.py",
|
|
280
|
+
"json": "Adminium JSON"
|
|
281
|
+
},
|
|
282
|
+
"sqlite": {
|
|
283
|
+
"file": "Database file path",
|
|
284
|
+
"helper": "SQLite is a file, not a server — give the absolute path on the machine running Adminium."
|
|
285
|
+
},
|
|
286
|
+
"file": {
|
|
287
|
+
"detectedAs": "Detected: {format}",
|
|
288
|
+
"moreWarnings": "+{count} more warnings — the full list appears in the analyze step.",
|
|
289
|
+
"dropTitle": "Drop your schema file here, or browse",
|
|
290
|
+
"dropHint": "SQL DDL / pg_dump, Prisma, Drizzle, TypeORM, Sequelize, Rails schema.rb, Django models, Adminium JSON",
|
|
291
|
+
"pitch": "No database connection required — we parse your schema file and build the same dashboards.",
|
|
292
|
+
"parsing": "Reading uploaded schema file…",
|
|
293
|
+
"tables": "tables",
|
|
294
|
+
"columns": "columns",
|
|
295
|
+
"warnings": "warnings",
|
|
296
|
+
"errorTitle": "Could not parse the file",
|
|
297
|
+
"parseFailed": "We could not parse that file. If auto-detect guessed wrong, pick the format explicitly and retry.",
|
|
298
|
+
"unsupported": "That format is not recognized — SQL DDL, Prisma, Drizzle, TypeORM, Sequelize, Rails schema.rb, Django models and Adminium JSON are supported. Pick one explicitly and retry.",
|
|
299
|
+
"requestFailed": "Upload failed — check your connection and try again."
|
|
300
|
+
},
|
|
301
|
+
"title": "Connect your database",
|
|
302
|
+
"subtitle": "Point Adminium at a database and we'll generate an admin dashboard from its schema.",
|
|
303
|
+
"name": "Connection name",
|
|
304
|
+
"namePlaceholder": "Production Postgres",
|
|
305
|
+
"modeLabel": "Source input mode",
|
|
306
|
+
"mode": {
|
|
307
|
+
"dsn": "Connection string",
|
|
308
|
+
"fields": "Individual fields",
|
|
309
|
+
"file": "Schema file"
|
|
310
|
+
},
|
|
311
|
+
"dsn": {
|
|
312
|
+
"label": "Connection string",
|
|
313
|
+
"helper": "postgres://user:password@host:5432/database — mysql:// and sqlite: work too.",
|
|
314
|
+
"incomplete": "Add host and database, e.g. postgres://user@host:5432/db",
|
|
315
|
+
"invalidScheme": "Unrecognized scheme — expected postgres://, mysql://, mariadb:// or sqlite:",
|
|
316
|
+
"quickFill": "Quick fill:"
|
|
317
|
+
},
|
|
318
|
+
"fields": {
|
|
319
|
+
"host": "Host",
|
|
320
|
+
"port": "Port",
|
|
321
|
+
"database": "Database",
|
|
322
|
+
"user": "User",
|
|
323
|
+
"password": "Password",
|
|
324
|
+
"ssl": "SSL mode",
|
|
325
|
+
"preview": "Connection string preview:"
|
|
326
|
+
},
|
|
327
|
+
"readOnlyRole": {
|
|
328
|
+
"title": "Use a read-only role",
|
|
329
|
+
"body": "Adminium never writes to your database — setup uses schema metadata only. We recommend a dedicated user with SELECT-only grants; you can decide where Adminium keeps its own tables in the meta-storage step."
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
"capability": {
|
|
333
|
+
"mysqlApproxRows": "MySQL row counts are storage-engine estimates (they can drift up to ±40%) — shown with ≈.",
|
|
334
|
+
"mysqlFkEnum": "MySQL FK/enum metadata is weaker: MyISAM tables declare no foreign keys, enums are per-column enum(…) types, and CHECK constraints need MySQL 8.0.16+ / MariaDB 10.2+.",
|
|
335
|
+
"sqliteCheckEnums": "SQLite has no native enum type — enums are synthesized from CHECK (col IN (…)) constraints.",
|
|
336
|
+
"sqliteNoComments": "SQLite has no column comments — use the schema remap editor to add labels.",
|
|
337
|
+
"importNoRowCounts": "Schema files carry no row counts — the tables list shows — instead of made-up numbers.",
|
|
338
|
+
"importNoLiveHealth": "No live database connection — health checks and schema-drift detection are unavailable for this source.",
|
|
339
|
+
"rowsUnavailable": "Schema files have no live database — row counts are unknown until you connect one.",
|
|
340
|
+
"rowsRunAnalyze": "No estimate yet — run ANALYZE on the database for row counts.",
|
|
341
|
+
"rowsNoEstimate": "The engine reported no estimate for this table.",
|
|
342
|
+
"rowsApproximate": "Storage-engine estimate — can drift up to ±40% on InnoDB."
|
|
343
|
+
},
|
|
344
|
+
"test": {
|
|
345
|
+
"log": {
|
|
346
|
+
"moreWarnings": "+{count} more parser warnings",
|
|
347
|
+
"connecting": "Establishing secure connection…",
|
|
348
|
+
"connected": "Connected ({latency} ms) · read-only introspection",
|
|
349
|
+
"connectFailed": "Connection failed.",
|
|
350
|
+
"readingSchema": "Reading schema: public",
|
|
351
|
+
"readingFile": "Reading uploaded schema file…",
|
|
352
|
+
"parsingFile": "Parsing {file}…",
|
|
353
|
+
"detected": "Detected {tables} tables · {columns} columns",
|
|
354
|
+
"found": "Found {tables} tables · {columns} columns",
|
|
355
|
+
"mapping": "Mapping column types → input widgets",
|
|
356
|
+
"relations": "Detecting relations…",
|
|
357
|
+
"piiScan": "Scanning for PII columns…",
|
|
358
|
+
"piiDone": "PII scan complete — {count} columns masked by default",
|
|
359
|
+
"piiDoneUnknown": "PII scan complete",
|
|
360
|
+
"jobFailed": "Introspection failed.",
|
|
361
|
+
"networkFailed": "Request failed — check your connection and retry.",
|
|
362
|
+
"ready": "Ready"
|
|
363
|
+
},
|
|
364
|
+
"title": "Analyzing your schema",
|
|
365
|
+
"subtitle": "Introspecting tables, columns, and relationships. This takes a few seconds.",
|
|
366
|
+
"trust": "We only read your schema and data. Nothing is modified.",
|
|
367
|
+
"errorTitle": "Connection failed",
|
|
368
|
+
"retry": "Retry",
|
|
369
|
+
"logLabel": "Introspection log",
|
|
370
|
+
"hint": {
|
|
371
|
+
"auth": "Authentication failed — check the user name and password in your DSN.",
|
|
372
|
+
"hostUnreachable": "Host unreachable — check the hostname and port, and that the database accepts connections from this machine (allowlist our IPs).",
|
|
373
|
+
"metaPlacement": "This source cannot host Adminium’s meta tables — continue with a separate meta database.",
|
|
374
|
+
"permission": "The role connected but lacks schema-read privileges — grant USAGE on the schema to your introspection role.",
|
|
375
|
+
"timeout": "The database did not answer in time — check network path and load, then retry.",
|
|
376
|
+
"tls": "TLS negotiation failed — try sslmode=require, or upload the CA certificate your server expects.",
|
|
377
|
+
"unknown": "Connection failed — verify the DSN and retry."
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
"tables": {
|
|
381
|
+
"importNoCounts": "Schema files carry no row counts — the column shows — until a live database is connected.",
|
|
382
|
+
"title": "Choose your tables",
|
|
383
|
+
"subtitle": "Choose which to include. You can change this anytime.",
|
|
384
|
+
"search": "Filter tables…",
|
|
385
|
+
"listLabel": "Includable tables",
|
|
386
|
+
"emptyFilter": "No tables match your filter.",
|
|
387
|
+
"pii": "PII",
|
|
388
|
+
"highVolume": "high volume",
|
|
389
|
+
"highVolumeNote": "Tables over 100,000 rows start unchecked — ops tables rarely belong in a dashboard.",
|
|
390
|
+
"joinHidden": "{count} join/system tables are pre-hidden — they still power many-to-many relations."
|
|
391
|
+
},
|
|
392
|
+
"hub": {
|
|
393
|
+
"title": "Data connections",
|
|
394
|
+
"subtitle": "{healthy, number} of {total, plural, one {# connection} other {# connections}} healthy",
|
|
395
|
+
"connectNew": "New connection",
|
|
396
|
+
"stats": {
|
|
397
|
+
"connections": "Connections",
|
|
398
|
+
"healthy": "Healthy",
|
|
399
|
+
"tables": "Tables included",
|
|
400
|
+
"pages": "Generated pages"
|
|
401
|
+
},
|
|
402
|
+
"status": {
|
|
403
|
+
"connected": "Connected",
|
|
404
|
+
"error": "Error",
|
|
405
|
+
"unconfigured": "Draft",
|
|
406
|
+
"testing": "Testing…"
|
|
407
|
+
},
|
|
408
|
+
"card": {
|
|
409
|
+
"readOnly": "Read-only",
|
|
410
|
+
"tables": "Tables",
|
|
411
|
+
"pages": "Pages",
|
|
412
|
+
"latency": "Latency",
|
|
413
|
+
"latencyMs": "{latency, number} ms",
|
|
414
|
+
"lastIntrospected": "Last introspected",
|
|
415
|
+
"never": "Never"
|
|
416
|
+
},
|
|
417
|
+
"action": {
|
|
418
|
+
"test": "Test",
|
|
419
|
+
"reintrospect": "Re-introspect",
|
|
420
|
+
"reintrospectFile": "Schema-file sources have no live database — re-upload the file instead.",
|
|
421
|
+
"remap": "Remap schema",
|
|
422
|
+
"delete": "Delete"
|
|
423
|
+
},
|
|
424
|
+
"test": {
|
|
425
|
+
"ok": "Connection healthy · {latency, number} ms",
|
|
426
|
+
"failed": "Connection test failed"
|
|
427
|
+
},
|
|
428
|
+
"introspect": {
|
|
429
|
+
"noChanges": "Schema unchanged — no new snapshot.",
|
|
430
|
+
"updated": "Schema re-introspected",
|
|
431
|
+
"masksProposed": "{count, plural, one {# column} other {# columns}} proposed for masking — review in the remap editor.",
|
|
432
|
+
"failed": "Introspection failed. Try again."
|
|
433
|
+
},
|
|
434
|
+
"delete": {
|
|
435
|
+
"title": "Delete connection",
|
|
436
|
+
"body": "This deletes “{name}” and its generated pages. Your database itself is never touched.",
|
|
437
|
+
"prompt": "Type {name} to confirm",
|
|
438
|
+
"confirm": "Delete connection",
|
|
439
|
+
"cancel": "Cancel",
|
|
440
|
+
"close": "Close",
|
|
441
|
+
"success": "Connection “{name}” deleted",
|
|
442
|
+
"failed": "Could not delete the connection. Try again."
|
|
443
|
+
},
|
|
444
|
+
"empty": {
|
|
445
|
+
"title": "No data sources yet",
|
|
446
|
+
"body": "Connect a database and Adminium generates your admin panel from its schema.",
|
|
447
|
+
"cta": "Connect a database"
|
|
448
|
+
}
|
|
449
|
+
},
|
|
450
|
+
"settingsHub": {
|
|
451
|
+
"title": "Workspace settings",
|
|
452
|
+
"subtitle": "Identity, security and destructive actions for this workspace.",
|
|
453
|
+
"save": "Save changes",
|
|
454
|
+
"saved": "Workspace settings updated",
|
|
455
|
+
"saveFailed": "Could not save workspace settings. Try again.",
|
|
456
|
+
"superAdminOnlyTitle": "Super admin required",
|
|
457
|
+
"superAdminOnly": "Only a super admin can change workspace identity and security settings.",
|
|
458
|
+
"identity": {
|
|
459
|
+
"heading": "Workspace identity",
|
|
460
|
+
"appName": {
|
|
461
|
+
"label": "Application name",
|
|
462
|
+
"helper": "Shown in the sidebar, browser title, and emails.",
|
|
463
|
+
"error": "Enter a name of at most 60 characters."
|
|
464
|
+
}
|
|
465
|
+
},
|
|
466
|
+
"security": {
|
|
467
|
+
"heading": "Security",
|
|
468
|
+
"require2fa": {
|
|
469
|
+
"label": "Require two-factor auth",
|
|
470
|
+
"desc": "Every member must enable 2FA to sign in."
|
|
471
|
+
},
|
|
472
|
+
"allowSignup": {
|
|
473
|
+
"label": "Allow self-signup",
|
|
474
|
+
"desc": "Anyone can create an account — off keeps this workspace invite-only."
|
|
475
|
+
},
|
|
476
|
+
"sessionTtl": {
|
|
477
|
+
"label": "Session lifetime (hours)",
|
|
478
|
+
"error": "Between {min, number} and {max, number} hours."
|
|
479
|
+
},
|
|
480
|
+
"passwordMin": {
|
|
481
|
+
"label": "Minimum password length",
|
|
482
|
+
"error": "Between {min, number} and {max, number} characters."
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
"review": {
|
|
486
|
+
"title": "Save workspace settings",
|
|
487
|
+
"subtitle": "Review your changes before saving.",
|
|
488
|
+
"confirm": "Save changes",
|
|
489
|
+
"cancel": "Cancel",
|
|
490
|
+
"close": "Close",
|
|
491
|
+
"on": "On",
|
|
492
|
+
"off": "Off",
|
|
493
|
+
"change": "{before} → {after}"
|
|
494
|
+
},
|
|
495
|
+
"defaultsCard": {
|
|
496
|
+
"heading": "Appearance & language defaults",
|
|
497
|
+
"body": "Workspace-wide theme, accent, density and language live under Global defaults.",
|
|
498
|
+
"cta": "Open global defaults"
|
|
499
|
+
},
|
|
500
|
+
"danger": {
|
|
501
|
+
"heading": "Danger zone",
|
|
502
|
+
"subtitle": "Irreversible actions.",
|
|
503
|
+
"empty": "Nothing to delete — no connections yet.",
|
|
504
|
+
"deleteDesc": "Deletes the connection and its generated pages. Your database is not touched. Cannot be undone.",
|
|
505
|
+
"deleteCta": "Delete connection"
|
|
506
|
+
},
|
|
507
|
+
"aiCard": {
|
|
508
|
+
"heading": "AI enrichment",
|
|
509
|
+
"body": "Configure an AI provider (or the copy-paste round-trip) to enrich labels, groups and relations.",
|
|
510
|
+
"cta": "Open AI settings"
|
|
511
|
+
}
|
|
512
|
+
},
|
|
513
|
+
"settingsAi": {
|
|
514
|
+
"title": "AI enrichment",
|
|
515
|
+
"subtitle": "Connect a model to let Adminium suggest labels, groups, relations and more — always reviewed as a diff before anything applies.",
|
|
516
|
+
"saved": "AI provider saved",
|
|
517
|
+
"saveFailed": "Could not save the AI provider. Try again.",
|
|
518
|
+
"save": "Save provider",
|
|
519
|
+
"test": "Test connection",
|
|
520
|
+
"testHintDirty": "Save your changes before testing.",
|
|
521
|
+
"testing": "Pinging the provider…",
|
|
522
|
+
"testError": "Test failed",
|
|
523
|
+
"testErrorBody": "Could not reach the provider. Check the key and base URL.",
|
|
524
|
+
"testOk": "Connected to {model} in {latency} ms",
|
|
525
|
+
"testUnknownModel": "the provider",
|
|
526
|
+
"provider": {
|
|
527
|
+
"heading": "AI provider",
|
|
528
|
+
"subtitle": "Choose how Adminium reaches a model to enrich your schema. Keys are stored encrypted and never shown again.",
|
|
529
|
+
"active": "Active",
|
|
530
|
+
"anthropic": {
|
|
531
|
+
"label": "Anthropic",
|
|
532
|
+
"desc": "Claude models via the Anthropic API."
|
|
533
|
+
},
|
|
534
|
+
"openai": {
|
|
535
|
+
"label": "OpenAI",
|
|
536
|
+
"desc": "GPT models via the OpenAI API."
|
|
537
|
+
},
|
|
538
|
+
"openaiCompatible": {
|
|
539
|
+
"label": "OpenAI-compatible",
|
|
540
|
+
"desc": "Any endpoint that speaks the OpenAI wire format — Groq, Together, vLLM, LM Studio."
|
|
541
|
+
},
|
|
542
|
+
"ollama": {
|
|
543
|
+
"label": "Ollama (local)",
|
|
544
|
+
"desc": "Models running locally through Ollama — no key, no cloud."
|
|
545
|
+
},
|
|
546
|
+
"requiresNetwork": "Requires internet & an API key",
|
|
547
|
+
"networkDisabledTitle": "Direct AI providers are turned off on this install",
|
|
548
|
+
"networkDisabledBody": "This Adminium is configured with no outbound internet access, so it cannot reach a provider API. Use the copy-paste round-trip below — it needs no key and no network."
|
|
549
|
+
},
|
|
550
|
+
"configure": {
|
|
551
|
+
"heading": "Configure {provider}"
|
|
552
|
+
},
|
|
553
|
+
"field": {
|
|
554
|
+
"baseUrl": "Base URL",
|
|
555
|
+
"baseUrlOptional": "Leave as-is unless Ollama runs on another host.",
|
|
556
|
+
"baseUrlHelper": "The endpoint root that serves /chat/completions.",
|
|
557
|
+
"model": "Model",
|
|
558
|
+
"modelFreeText": "Enter the exact model id your endpoint serves.",
|
|
559
|
+
"modelLive": "Loaded live from the provider.",
|
|
560
|
+
"modelStatic": "A known-good list; type a custom id after saving to refresh it.",
|
|
561
|
+
"modelLoading": "Loading…",
|
|
562
|
+
"modelPlaceholder": "Select a model…",
|
|
563
|
+
"key": "API key",
|
|
564
|
+
"keyStored": "Stored encrypted. Replace it to use a different key.",
|
|
565
|
+
"keyMask": "sk-…{last4}",
|
|
566
|
+
"keyReplace": "Replace key",
|
|
567
|
+
"keyOptional": "Optional — some endpoints need no key.",
|
|
568
|
+
"keyWriteOnly": "Write-only: once saved it is never shown again.",
|
|
569
|
+
"noKeyTitle": "No API key needed",
|
|
570
|
+
"noKeyBody": "Ollama runs locally, so nothing leaves this machine."
|
|
571
|
+
},
|
|
572
|
+
"runStatus": {
|
|
573
|
+
"draft": "Draft",
|
|
574
|
+
"running": "Running",
|
|
575
|
+
"awaitingResponse": "Awaiting response",
|
|
576
|
+
"validated": "Validated",
|
|
577
|
+
"applied": "Applied",
|
|
578
|
+
"partiallyApplied": "Partially applied",
|
|
579
|
+
"failed": "Failed",
|
|
580
|
+
"discarded": "Discarded"
|
|
581
|
+
},
|
|
582
|
+
"byo": {
|
|
583
|
+
"heading": "No key? Use your own AI tool",
|
|
584
|
+
"subtitle": "The copy-paste round-trip — nothing leaves this machine.",
|
|
585
|
+
"body": "Studio can generate a self-contained prompt from your schema. Run it in Claude Code, ChatGPT, or any tool you like, then paste the JSON it returns back into the connect wizard. Same validation, same review, same result as the direct path.",
|
|
586
|
+
"guaranteeTitle": "Telemetry-free guarantee",
|
|
587
|
+
"guarantee1": "The prompt carries only your schema and aggregate stats — never row data by default.",
|
|
588
|
+
"guarantee2": "No credentials, instance URL, or identifiers are embedded.",
|
|
589
|
+
"guarantee3": "BYO runs make zero network calls.",
|
|
590
|
+
"promptVersion": "Prompt {version}",
|
|
591
|
+
"schemaVersion": "Schema {version}",
|
|
592
|
+
"headingRecommended": "Use your own AI tool — no key needed",
|
|
593
|
+
"recommended": "Recommended"
|
|
594
|
+
},
|
|
595
|
+
"history": {
|
|
596
|
+
"heading": "Run history",
|
|
597
|
+
"subtitle": "Past enrichment runs. Open one to review its suggestions.",
|
|
598
|
+
"tableLabel": "Enrichment runs",
|
|
599
|
+
"colDate": "Date",
|
|
600
|
+
"colSource": "Source",
|
|
601
|
+
"colStatus": "Status",
|
|
602
|
+
"colChunks": "Chunks",
|
|
603
|
+
"openReview": "Open review for the run from {date}",
|
|
604
|
+
"connection": "Connection",
|
|
605
|
+
"empty": "No enrichment runs yet. Enrich a schema from the connect wizard to see history here.",
|
|
606
|
+
"errorTitle": "Could not load runs",
|
|
607
|
+
"errorBody": "Refresh the page to try again.",
|
|
608
|
+
"noConnections": "Connect a database first — enrichment runs are recorded per connection.",
|
|
609
|
+
"byo": "BYO",
|
|
610
|
+
"directPath": "Direct"
|
|
611
|
+
}
|
|
612
|
+
},
|
|
613
|
+
"enrich": {
|
|
614
|
+
"title": "Enrich with AI",
|
|
615
|
+
"subtitle": "Optionally refine the generated labels, groups, enums and dashboards with an LLM. The heuristic baseline works without it — this only adds suggestions you review before anything applies.",
|
|
616
|
+
"intentLabel": "How would you like to enrich?",
|
|
617
|
+
"sectionsLegend": "What should the AI decide?",
|
|
618
|
+
"localesLegend": "Translate labels into",
|
|
619
|
+
"localeLocked": "(required)",
|
|
620
|
+
"samplingTitle": "Include sample values",
|
|
621
|
+
"samplingHint": "Includes up to 20 real values per non-PII column in the prompt.",
|
|
622
|
+
"samplingPreviewTitle": "What leaves this machine",
|
|
623
|
+
"samplingPreviewBody": "Up to 20 most-common values per non-PII column, plus min/max for numeric and date columns. PII-flagged columns are never sampled. Everything else stays aggregate-only. Review the exact prompt before copying (BYO) — nothing is sent without your action.",
|
|
624
|
+
"noSections": "Select at least one decision group to enrich.",
|
|
625
|
+
"generatePrompt": "Generate prompt",
|
|
626
|
+
"startProvider": "Start enrichment",
|
|
627
|
+
"startOver": "Start over",
|
|
628
|
+
"copied": "Copied",
|
|
629
|
+
"createFailed": "Could not build the enrichment prompt — retry.",
|
|
630
|
+
"createFailedTitle": "Could not start",
|
|
631
|
+
"providerFallback": "your AI provider",
|
|
632
|
+
"fileTitle": "AI enrichment needs a live database",
|
|
633
|
+
"fileBody": "Schema-file sources have no snapshot to enrich yet. Connect a live database to use AI enrichment, or continue — the heuristic baseline still generates a complete app.",
|
|
634
|
+
"section": {
|
|
635
|
+
"labels": "Labels & descriptions",
|
|
636
|
+
"groups": "Navigation groups",
|
|
637
|
+
"enums": "Enum semantics",
|
|
638
|
+
"relations": "Relations",
|
|
639
|
+
"keys": "Key columns",
|
|
640
|
+
"templates": "Page templates",
|
|
641
|
+
"widgets": "Dashboard widgets",
|
|
642
|
+
"pii": "PII & masking",
|
|
643
|
+
"icons": "Icons",
|
|
644
|
+
"microcopy": "Micro-copy"
|
|
645
|
+
},
|
|
646
|
+
"provider": {
|
|
647
|
+
"title": "Use my AI provider",
|
|
648
|
+
"description": "Run enrichment now against your configured provider. You review every suggestion as a diff.",
|
|
649
|
+
"unconfigured": "No AI provider is configured yet — copy a prompt to your own tool below, or configure a provider first.",
|
|
650
|
+
"settingsHint": "Want to run it directly?",
|
|
651
|
+
"settingsLink": "Configure a provider in Settings → AI",
|
|
652
|
+
"networkDisabled": "This Adminium has no outbound internet access, so it cannot reach a provider API. Use the copy-paste round-trip instead — same prompt, same review."
|
|
653
|
+
},
|
|
654
|
+
"byo": {
|
|
655
|
+
"cardTitle": "Copy a prompt to my own AI tool",
|
|
656
|
+
"cardDescription": "Copy a self-contained prompt into Claude Code, ChatGPT, anything — then paste the JSON back. No key needed, nothing leaves this machine automatically.",
|
|
657
|
+
"guidance": "Run this in any AI tool — Claude Code, ChatGPT, anything. Paste the JSON it returns below.",
|
|
658
|
+
"promptLabel": "Enrichment prompt",
|
|
659
|
+
"promptLabelN": "Enrichment prompt {index} of {total}",
|
|
660
|
+
"tokenChip": "≈ {tokens} tokens",
|
|
661
|
+
"copyPrompt": "Copy prompt",
|
|
662
|
+
"copyPromptDone": "Prompt copied",
|
|
663
|
+
"download": "Download .md",
|
|
664
|
+
"chunkTabs": "Prompt chunks",
|
|
665
|
+
"chunkTab": "Prompt {index}",
|
|
666
|
+
"chunkValid": "Chunk {index} validated",
|
|
667
|
+
"pasteLabel": "Paste the JSON response",
|
|
668
|
+
"pastePlaceholder": "Paste the JSON response here…",
|
|
669
|
+
"validate": "Validate",
|
|
670
|
+
"valid": "Response validated",
|
|
671
|
+
"mergedTitle": "All {count} chunks validated and merged",
|
|
672
|
+
"mergedTitleSingle": "Response validated",
|
|
673
|
+
"mergedBody": "Suggestions are ready to review against the heuristic baseline.",
|
|
674
|
+
"errorsTitle": "Validation found {count} issues",
|
|
675
|
+
"copyErrors": "Copy errors for your AI tool",
|
|
676
|
+
"copyErrorsDone": "Errors copied",
|
|
677
|
+
"copyErrorsHint": "Paste this back into your AI tool to get a corrected response.",
|
|
678
|
+
"droppedItems": "{count} suggestions were dropped during validation — review shows the rest.",
|
|
679
|
+
"pendingTitle": "Validate every prompt to continue",
|
|
680
|
+
"pendingBody": "Paste the JSON response above and validate it to continue to review.",
|
|
681
|
+
"pendingBodyChunked": "Each chunk must validate before the suggestions merge. Paste and validate every prompt above.",
|
|
682
|
+
"requestFailed": "Could not reach the server to validate — retry.",
|
|
683
|
+
"continueReview": "Continue to review",
|
|
684
|
+
"wholeDocument": "whole document",
|
|
685
|
+
"cardTitleRecommended": "Copy a prompt to my own AI tool — recommended"
|
|
686
|
+
},
|
|
687
|
+
"direct": {
|
|
688
|
+
"title": "Enriching with AI",
|
|
689
|
+
"subtitle": "Sending your schema to",
|
|
690
|
+
"building": "Building prompt…",
|
|
691
|
+
"logLabel": "Enrichment log",
|
|
692
|
+
"cancel": "Cancel",
|
|
693
|
+
"back": "Back to options",
|
|
694
|
+
"retry": "Retry",
|
|
695
|
+
"done": "Enrichment complete — review the suggestions.",
|
|
696
|
+
"continueReview": "Continue to review",
|
|
697
|
+
"failed": "The provider run failed. Check your AI settings and retry.",
|
|
698
|
+
"jobFailed": "The enrichment run did not finish.",
|
|
699
|
+
"startFailed": "Could not start the run — retry.",
|
|
700
|
+
"errorTitle": "Enrichment failed"
|
|
701
|
+
},
|
|
702
|
+
"skip": {
|
|
703
|
+
"title": "Skip — use heuristics only",
|
|
704
|
+
"description": "Generate from the heuristic baseline. You can enrich later from Settings → AI — skipping is never penalized.",
|
|
705
|
+
"confirmTitle": "Continuing with heuristics",
|
|
706
|
+
"confirmBody": "The generated app will use the heuristic labels, groups and dashboards. Continue to generate — you can run AI enrichment any time from Settings → AI."
|
|
707
|
+
}
|
|
708
|
+
},
|
|
709
|
+
"review": {
|
|
710
|
+
"unavailableTitle": "Review screen not available",
|
|
711
|
+
"unavailableBody": "This build does not include the enrichment review screen yet (06-T14). It lands with the diff-and-apply flow."
|
|
712
|
+
},
|
|
713
|
+
"llmRuns": {
|
|
714
|
+
"review": {
|
|
715
|
+
"header": {
|
|
716
|
+
"title": "Review AI suggestions",
|
|
717
|
+
"model": "Model",
|
|
718
|
+
"snapshot": "Snapshot",
|
|
719
|
+
"byo": "BYO",
|
|
720
|
+
"pathDirect": "Direct API",
|
|
721
|
+
"pathByo": "Copy-paste",
|
|
722
|
+
"agree": "{n} agree",
|
|
723
|
+
"conflict": "{n} conflict",
|
|
724
|
+
"new": "{n} new",
|
|
725
|
+
"rejects": "{n} rejects",
|
|
726
|
+
"countsAria": "Suggestion counts"
|
|
727
|
+
},
|
|
728
|
+
"bulk": {
|
|
729
|
+
"thresholdLabel": "Confidence threshold",
|
|
730
|
+
"thresholdAria": "Accept-all confidence threshold",
|
|
731
|
+
"acceptAll": "Accept all ≥ {pct}%",
|
|
732
|
+
"clear": "Clear selection"
|
|
733
|
+
},
|
|
734
|
+
"section": {
|
|
735
|
+
"selectAllAria": "Select all in {group}",
|
|
736
|
+
"acceptedCount": "{n} accepted"
|
|
737
|
+
},
|
|
738
|
+
"group": {
|
|
739
|
+
"labels": "Labels & translations",
|
|
740
|
+
"navigation": "Navigation & domains",
|
|
741
|
+
"enums": "Enum semantics",
|
|
742
|
+
"relations": "Relations",
|
|
743
|
+
"keys": "Key columns",
|
|
744
|
+
"templates": "Page templates",
|
|
745
|
+
"dashboards": "Dashboards & widgets",
|
|
746
|
+
"pii": "PII & masking",
|
|
747
|
+
"icons": "Icons",
|
|
748
|
+
"microcopy": "Micro-copy"
|
|
749
|
+
},
|
|
750
|
+
"status": {
|
|
751
|
+
"agree": "Agrees",
|
|
752
|
+
"conflict": "Conflict",
|
|
753
|
+
"new": "New",
|
|
754
|
+
"heuristicOnly": "Heuristic only",
|
|
755
|
+
"rejects": "Rejects heuristic",
|
|
756
|
+
"locked": "Locked"
|
|
757
|
+
},
|
|
758
|
+
"row": {
|
|
759
|
+
"acceptAria": "Accept {noun} suggestion for {target}",
|
|
760
|
+
"keptEdited": "kept — edited by you",
|
|
761
|
+
"rejectsCallout": "The AI rejects a heuristic decision — confirm before accepting.",
|
|
762
|
+
"showTranslations": "Show translations",
|
|
763
|
+
"hideTranslations": "Hide translations",
|
|
764
|
+
"confidenceAria": "Confidence {pct}%",
|
|
765
|
+
"noAi": "No AI suggestion"
|
|
766
|
+
},
|
|
767
|
+
"value": {
|
|
768
|
+
"none": "No value",
|
|
769
|
+
"absent": "None",
|
|
770
|
+
"dash": "—",
|
|
771
|
+
"display": "Display",
|
|
772
|
+
"key": "Key",
|
|
773
|
+
"rank": "rank {n}",
|
|
774
|
+
"span": "span {n}",
|
|
775
|
+
"tableCount": "{n} tables",
|
|
776
|
+
"widgetCount": "{n} widgets",
|
|
777
|
+
"enumWorkflow": "Workflow",
|
|
778
|
+
"enumCategory": "Category",
|
|
779
|
+
"notPii": "Not PII",
|
|
780
|
+
"label": "Label",
|
|
781
|
+
"description": "Description",
|
|
782
|
+
"subtitle": "Page subtitle",
|
|
783
|
+
"headline": "Empty-state headline",
|
|
784
|
+
"guidance": "Empty-state guidance"
|
|
785
|
+
},
|
|
786
|
+
"apply": {
|
|
787
|
+
"title": "Apply {n} suggestions",
|
|
788
|
+
"subtitle": "These changes are written in one transaction and can be undone.",
|
|
789
|
+
"empty": "Nothing selected to apply.",
|
|
790
|
+
"confirm": "Apply changes"
|
|
791
|
+
},
|
|
792
|
+
"footer": {
|
|
793
|
+
"count": "{n} suggestions selected",
|
|
794
|
+
"apply": "Apply {n} accepted suggestions",
|
|
795
|
+
"failed": "Apply failed"
|
|
796
|
+
},
|
|
797
|
+
"toast": {
|
|
798
|
+
"applied": "Applied {n} suggestions",
|
|
799
|
+
"appliedPartial": "Applied {n} suggestions (some skipped)",
|
|
800
|
+
"applyFailed": "Could not apply suggestions",
|
|
801
|
+
"undoFailed": "Could not undo this change"
|
|
802
|
+
},
|
|
803
|
+
"error": {
|
|
804
|
+
"title": "Could not load this run"
|
|
805
|
+
},
|
|
806
|
+
"notReady": {
|
|
807
|
+
"title": "This run has no suggestions to review yet",
|
|
808
|
+
"body": "A run must be validated before its suggestions can be reviewed. Generate or paste a response first."
|
|
809
|
+
},
|
|
810
|
+
"applied": {
|
|
811
|
+
"title": "This run has been applied",
|
|
812
|
+
"body": "The accepted suggestions below are read-only."
|
|
813
|
+
},
|
|
814
|
+
"empty": {
|
|
815
|
+
"title": "No suggestions",
|
|
816
|
+
"body": "This run produced no suggestions to review."
|
|
817
|
+
},
|
|
818
|
+
"cat": {
|
|
819
|
+
"label": "label",
|
|
820
|
+
"key": "key columns",
|
|
821
|
+
"enum": "enum",
|
|
822
|
+
"relation": "relation",
|
|
823
|
+
"pii": "PII",
|
|
824
|
+
"template": "page template",
|
|
825
|
+
"group": "navigation group",
|
|
826
|
+
"dashboard": "dashboard",
|
|
827
|
+
"widget": "widget",
|
|
828
|
+
"copy": "micro-copy"
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
},
|
|
832
|
+
"wizard": {
|
|
833
|
+
"title": "New connection",
|
|
834
|
+
"back": "Back",
|
|
835
|
+
"continue": "Continue",
|
|
836
|
+
"progress": "Setup progress",
|
|
837
|
+
"persistFailed": "Could not save your table selection — retry.",
|
|
838
|
+
"persistFailedTitle": "Save failed",
|
|
839
|
+
"step": {
|
|
840
|
+
"source": "Source",
|
|
841
|
+
"test": "Analyze",
|
|
842
|
+
"tables": "Tables",
|
|
843
|
+
"meta": "Meta storage",
|
|
844
|
+
"intent": "Intent",
|
|
845
|
+
"enrich": "Enrich",
|
|
846
|
+
"generate": "Generate"
|
|
847
|
+
}
|
|
848
|
+
},
|
|
849
|
+
"meta": {
|
|
850
|
+
"title": "Where should Adminium keep its own tables?",
|
|
851
|
+
"subtitle": "Pages, roles, audit log and settings live in adminium_-prefixed tables — never mixed into your data.",
|
|
852
|
+
"sameDb": {
|
|
853
|
+
"title": "Same database",
|
|
854
|
+
"description": "adminium_* tables are created beside your source tables. Simplest setup — needs a role with write and CREATE TABLE privileges.",
|
|
855
|
+
"disabledReadOnly": "Your role is read-only — Adminium never writes to this database. Choose a separate database for Adminium’s own tables.",
|
|
856
|
+
"disabledNoDdl": "This role cannot run DDL — Adminium migrations need CREATE TABLE. Choose a separate database for Adminium’s own tables.",
|
|
857
|
+
"disabledFile": "A schema file has no live database — choose a separate database for Adminium’s own tables."
|
|
858
|
+
},
|
|
859
|
+
"separate": {
|
|
860
|
+
"title": "Separate database",
|
|
861
|
+
"description": "Adminium keeps its tables in a different database. Your source stays untouched — required for read-only sources.",
|
|
862
|
+
"dsn": "Meta database connection string",
|
|
863
|
+
"helper": "Needs write + DDL privileges — Adminium runs its own migrations there.",
|
|
864
|
+
"test": "Test connection",
|
|
865
|
+
"ok": "Compatible — write ✓ · DDL ✓",
|
|
866
|
+
"insufficient": "This role cannot host the meta store — Adminium needs write and CREATE TABLE privileges there.",
|
|
867
|
+
"errorTitle": "Meta store not compatible"
|
|
868
|
+
},
|
|
869
|
+
"testFailed": "Connection failed.",
|
|
870
|
+
"v1Note": {
|
|
871
|
+
"title": "About this install",
|
|
872
|
+
"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)."
|
|
873
|
+
}
|
|
874
|
+
},
|
|
875
|
+
"intent": {
|
|
876
|
+
"title": "What do you need?",
|
|
877
|
+
"subtitle": "The intent shapes which pages get generated. You can change it later — changing it proposes a regeneration, never a silent rewrite.",
|
|
878
|
+
"trust": "We read your schema only — never your row data during setup.",
|
|
879
|
+
"fullAdmin": {
|
|
880
|
+
"title": "Full admin panel",
|
|
881
|
+
"description": "Dashboards, CRUD pages, search, imports and exports — everything your schema supports."
|
|
882
|
+
},
|
|
883
|
+
"analytics": {
|
|
884
|
+
"title": "Read-only analytics",
|
|
885
|
+
"description": "Dashboards, charts and read-only grids. No forms, no writes — every role capped at Viewer."
|
|
886
|
+
},
|
|
887
|
+
"crud": {
|
|
888
|
+
"title": "CRUD tables",
|
|
889
|
+
"description": "One editing page per table plus search and import/export — a minimal home, no dashboards."
|
|
890
|
+
},
|
|
891
|
+
"support": {
|
|
892
|
+
"title": "Support console",
|
|
893
|
+
"description": "Queues, ticket and customer detail pages first. Deletes off by default. (Queue templates land in M7 — the v1 page set matches Full admin.)"
|
|
894
|
+
}
|
|
895
|
+
},
|
|
896
|
+
"generate": {
|
|
897
|
+
"title": "Generate your app",
|
|
898
|
+
"subtitle": "One page per included table plus dashboards per domain — intent:",
|
|
899
|
+
"run": "Generate dashboard",
|
|
900
|
+
"openApp": "Open your app",
|
|
901
|
+
"logLabel": "Generation log",
|
|
902
|
+
"log": {
|
|
903
|
+
"classifying": "Classifying schema…",
|
|
904
|
+
"composing": "Composing templates…",
|
|
905
|
+
"writing": "Writing pages…",
|
|
906
|
+
"done": "{pages} pages generated across {groups} nav groups"
|
|
907
|
+
},
|
|
908
|
+
"successTitle": "Your dashboard is ready",
|
|
909
|
+
"successBody": "{pages} pages across {groups} navigation groups — generated from your schema, editable in Studio.",
|
|
910
|
+
"errorTitle": "Generation failed",
|
|
911
|
+
"failed": "Generation failed — retry, or re-run introspection first.",
|
|
912
|
+
"fileTitle": "Schema file parsed — generation needs a live database",
|
|
913
|
+
"fileBody": "Your schema parsed cleanly and the preview above is real. Generating a running app straight from a schema file (with placeholder rows) is not available yet — connect a live database to generate today."
|
|
914
|
+
},
|
|
915
|
+
"remap": {
|
|
916
|
+
"column": {
|
|
917
|
+
"nullable": "nullable",
|
|
918
|
+
"labelOverride": "Display label",
|
|
919
|
+
"labelHelper": "Inferred: {name}",
|
|
920
|
+
"logicalType": "Logical type",
|
|
921
|
+
"logicalTypeHelper": "Inferred: {type} (from {dbType}) — mapped by the adapter; not overridable in v1.",
|
|
922
|
+
"semantic": "Semantic type",
|
|
923
|
+
"unclassified": "Not classified yet.",
|
|
924
|
+
"semanticHelper": "Classifier: {tag} · {confidence}% confidence · source: {source}",
|
|
925
|
+
"semanticInferred": "inferred: {tag}",
|
|
926
|
+
"currency": "Currency",
|
|
927
|
+
"currencyHelper": "ISO 4217 code applied to money formatting.",
|
|
928
|
+
"pii": "Mask by default",
|
|
929
|
+
"piiHelper": "Masked values render redacted; unmasking requires the data.unmask_pii permission and is audit-logged.",
|
|
930
|
+
"enum": "Enum semantics",
|
|
931
|
+
"enumKind": "Enum kind",
|
|
932
|
+
"enumWorkflow": "Workflow",
|
|
933
|
+
"enumCategory": "Category",
|
|
934
|
+
"enumLabelFor": "Label for {value}",
|
|
935
|
+
"enumToneFor": "Tone for {value}",
|
|
936
|
+
"enumToneAuto": "auto",
|
|
937
|
+
"enumHelper": "Workflow enums drive status pills and board columns; tones map values onto the semantic tint scale."
|
|
938
|
+
},
|
|
939
|
+
"diff": {
|
|
940
|
+
"one": "1 change",
|
|
941
|
+
"count": "{count} changes",
|
|
942
|
+
"saved": "Overrides saved.",
|
|
943
|
+
"revertOne": "Revert {change}",
|
|
944
|
+
"regenerate": "Regenerate pages",
|
|
945
|
+
"revertAll": "Revert all",
|
|
946
|
+
"save": "Save overrides"
|
|
947
|
+
},
|
|
948
|
+
"table": {
|
|
949
|
+
"iconPicker": "Table icon",
|
|
950
|
+
"system": "System",
|
|
951
|
+
"labelOverride": "Display label",
|
|
952
|
+
"labelHelper": "Inferred: {name}",
|
|
953
|
+
"icon": "Icon",
|
|
954
|
+
"navGroup": "Nav group",
|
|
955
|
+
"navGroupHelper": "Nav placement is decided by the generator — a table.navGroup override is not in the v1 vocabulary.",
|
|
956
|
+
"include": "Include in generated app",
|
|
957
|
+
"includeHelper": "Excluded tables get no pages and disappear from nav.",
|
|
958
|
+
"shape": "Table shape (classified)",
|
|
959
|
+
"role": "Role",
|
|
960
|
+
"unclassified": "Not classified",
|
|
961
|
+
"kind": "Kind",
|
|
962
|
+
"hierarchy": "Hierarchy",
|
|
963
|
+
"selfFk": "Self-reference via {column}",
|
|
964
|
+
"polymorphic": "Polymorphic pairs",
|
|
965
|
+
"rows": "Row estimate",
|
|
966
|
+
"shapeHelper": "Classification is recomputed on every introspection; overrides layer on top and survive regeneration."
|
|
967
|
+
},
|
|
968
|
+
"relations": {
|
|
969
|
+
"declared": "Declared foreign keys",
|
|
970
|
+
"noneDeclared": "No declared foreign keys touch this table.",
|
|
971
|
+
"inferred": "Inferred relations",
|
|
972
|
+
"noneInferred": "Nothing inferred for this table.",
|
|
973
|
+
"confidence": "inferred · {pct}%",
|
|
974
|
+
"accepted": "Accepted",
|
|
975
|
+
"suppressed": "Suppressed",
|
|
976
|
+
"accept": "Accept",
|
|
977
|
+
"suppress": "Suppress",
|
|
978
|
+
"overrides": "Override relations (applied)",
|
|
979
|
+
"overrideBadge": "override",
|
|
980
|
+
"add": "Add virtual relation",
|
|
981
|
+
"fromColumn": "From column",
|
|
982
|
+
"noColumns": "No matching column",
|
|
983
|
+
"fromPlaceholder": "customer_id",
|
|
984
|
+
"toTable": "To table",
|
|
985
|
+
"noTables": "No matching table",
|
|
986
|
+
"toColumn": "To column",
|
|
987
|
+
"cardinality": "Cardinality",
|
|
988
|
+
"addButton": "Add relation"
|
|
989
|
+
},
|
|
990
|
+
"toast": {
|
|
991
|
+
"saved": "Schema overrides saved",
|
|
992
|
+
"savedDetail": "The applied schema below reflects your changes.",
|
|
993
|
+
"regenerated": "{created} created · {updated} updated · {unchanged} unchanged",
|
|
994
|
+
"regeneratedDetail": "Pages you edited by hand are preserved — only pages with an untouched generated_hash were regenerated in place.",
|
|
995
|
+
"regenerateFailed": "Regeneration failed"
|
|
996
|
+
},
|
|
997
|
+
"title": "Schema remap",
|
|
998
|
+
"subtitle": "{tables} tables · {applied} overrides applied",
|
|
999
|
+
"saveFailed": "Save failed: {message}",
|
|
1000
|
+
"loadFailed": "Could not load the schema for this connection.",
|
|
1001
|
+
"inspector": "Inspector",
|
|
1002
|
+
"empty": {
|
|
1003
|
+
"title": "Pick a table or column",
|
|
1004
|
+
"description": "Select something in the schema tree to remap its label, type, relations or masking."
|
|
1005
|
+
},
|
|
1006
|
+
"tabs": {
|
|
1007
|
+
"details": "Details",
|
|
1008
|
+
"relations": "Relations"
|
|
1009
|
+
},
|
|
1010
|
+
"tree": {
|
|
1011
|
+
"label": "Schema",
|
|
1012
|
+
"search": "Search tables and columns",
|
|
1013
|
+
"searchPlaceholder": "Search tables…",
|
|
1014
|
+
"noMatches": "No tables match your search.",
|
|
1015
|
+
"collapse": "Collapse table",
|
|
1016
|
+
"expand": "Expand table",
|
|
1017
|
+
"unsaved": "Unsaved change",
|
|
1018
|
+
"excluded": "Excluded"
|
|
1019
|
+
},
|
|
1020
|
+
"badge": {
|
|
1021
|
+
"pk": "PK",
|
|
1022
|
+
"fk": "FK",
|
|
1023
|
+
"unique": "UNIQUE",
|
|
1024
|
+
"pii": "PII",
|
|
1025
|
+
"masked": "Masked"
|
|
1026
|
+
}
|
|
1027
|
+
}
|
|
1028
|
+
},
|
|
1029
|
+
"onboarding": {
|
|
1030
|
+
"title": "Getting started",
|
|
1031
|
+
"subtitle": "A few steps to get your workspace ready.",
|
|
1032
|
+
"loading": "Loading your setup checklist…",
|
|
1033
|
+
"welcome": "Welcome to Adminium, {name} 👋",
|
|
1034
|
+
"progressBody": "You’ve completed {done} of {total} setup steps. Finish the rest to unlock the full workspace.",
|
|
1035
|
+
"completeBody": "You’re all set — your workspace is fully configured.",
|
|
1036
|
+
"ringLabel": "{done} of {total} steps complete",
|
|
1037
|
+
"done": "Done",
|
|
1038
|
+
"skip": "Skip for now",
|
|
1039
|
+
"goToWorkspace": "Go to workspace",
|
|
1040
|
+
"help": {
|
|
1041
|
+
"title": "Need a hand?",
|
|
1042
|
+
"body": "We’re here to help you get set up fast."
|
|
1043
|
+
},
|
|
1044
|
+
"steps": {
|
|
1045
|
+
"connectDatabase": {
|
|
1046
|
+
"title": "Connect a database",
|
|
1047
|
+
"desc": "Point Adminium at your Postgres, MySQL or SQLite — a read-only role is welcome.",
|
|
1048
|
+
"time": "5 min",
|
|
1049
|
+
"action": "Connect"
|
|
1050
|
+
},
|
|
1051
|
+
"chooseTables": {
|
|
1052
|
+
"title": "Choose your tables",
|
|
1053
|
+
"desc": "Pick which tables become pages — PII is masked by default.",
|
|
1054
|
+
"time": "2 min",
|
|
1055
|
+
"action": "Choose"
|
|
1056
|
+
},
|
|
1057
|
+
"inviteTeammates": {
|
|
1058
|
+
"title": "Invite teammates",
|
|
1059
|
+
"desc": "Bring your team in to explore and collaborate.",
|
|
1060
|
+
"time": "2 min",
|
|
1061
|
+
"action": "Invite"
|
|
1062
|
+
},
|
|
1063
|
+
"workspaceDefaults": {
|
|
1064
|
+
"title": "Set workspace defaults",
|
|
1065
|
+
"desc": "Theme, accent, density and language everyone starts with.",
|
|
1066
|
+
"time": "1 min",
|
|
1067
|
+
"action": "Set defaults"
|
|
1068
|
+
}
|
|
1069
|
+
},
|
|
1070
|
+
"entry": {
|
|
1071
|
+
"wayBack": "Getting started · {done}/{total}",
|
|
1072
|
+
"dismiss": "Dismiss setup checklist",
|
|
1073
|
+
"continue": "Continue setup",
|
|
1074
|
+
"banner": "Finish setting up your workspace — {done} of {total} steps done."
|
|
1075
|
+
}
|
|
1076
|
+
},
|
|
1077
|
+
"views": {
|
|
1078
|
+
"baseView": "All records",
|
|
1079
|
+
"menuLabel": "Saved views",
|
|
1080
|
+
"saveAs": "Save current as view…",
|
|
1081
|
+
"updateActive": "Update “{name}”",
|
|
1082
|
+
"rename": "Rename…",
|
|
1083
|
+
"setDefault": "Set as default",
|
|
1084
|
+
"delete": "Delete…",
|
|
1085
|
+
"saveTitle": "Save view",
|
|
1086
|
+
"save": "Save view",
|
|
1087
|
+
"renameTitle": "Rename view",
|
|
1088
|
+
"saveName": "Save name",
|
|
1089
|
+
"nameLabel": "View name",
|
|
1090
|
+
"namePlaceholder": "e.g. Active this month",
|
|
1091
|
+
"nameRequired": "Enter a name for this view.",
|
|
1092
|
+
"saveFailed": "Could not save the view.",
|
|
1093
|
+
"deleteTitle": "Delete view",
|
|
1094
|
+
"deleteBody": "This removes the saved view. Your data is not affected.",
|
|
1095
|
+
"deletePrompt": "Type the view name to confirm",
|
|
1096
|
+
"deleteConfirm": "Delete view",
|
|
1097
|
+
"savedToast": "View “{name}” saved.",
|
|
1098
|
+
"updatedToast": "View “{name}” updated.",
|
|
1099
|
+
"defaultToast": "“{name}” is now the default view.",
|
|
1100
|
+
"deletedToast": "View “{name}” deleted."
|
|
1101
|
+
},
|
|
1102
|
+
"builder": {
|
|
1103
|
+
"view": "View",
|
|
1104
|
+
"edit": "Edit",
|
|
1105
|
+
"done": "Done",
|
|
1106
|
+
"addWidget": "Add widget",
|
|
1107
|
+
"saveLayout": "Save layout",
|
|
1108
|
+
"saving": "Saving…",
|
|
1109
|
+
"savedShort": "Saved",
|
|
1110
|
+
"options": "Dashboard options",
|
|
1111
|
+
"resetLayout": "Reset layout",
|
|
1112
|
+
"resetTitle": "Reset to the shared layout?",
|
|
1113
|
+
"resetBody": "This removes your personal changes and restores the dashboard everyone sees. Your data isn’t affected.",
|
|
1114
|
+
"resetConfirm": "Reset layout",
|
|
1115
|
+
"resetDone": "Layout reset to the shared default.",
|
|
1116
|
+
"sharedNote": "You’re editing the shared dashboard everyone sees.",
|
|
1117
|
+
"personalNote": "You’re editing your personal layout — only you see these changes.",
|
|
1118
|
+
"savedShared": "Dashboard saved for everyone with access.",
|
|
1119
|
+
"empty": "This dashboard has no widgets yet.",
|
|
1120
|
+
"emptyAction": "Add a widget",
|
|
1121
|
+
"palette": {
|
|
1122
|
+
"title": "Add a widget",
|
|
1123
|
+
"count": "{count} widgets",
|
|
1124
|
+
"searchLabel": "Search widgets",
|
|
1125
|
+
"searchPlaceholder": "Search widgets…",
|
|
1126
|
+
"clear": "Clear search",
|
|
1127
|
+
"noResults": "No widgets match “{query}”.",
|
|
1128
|
+
"add": "Add {name}",
|
|
1129
|
+
"added": "{name} added."
|
|
1130
|
+
},
|
|
1131
|
+
"inspector": {
|
|
1132
|
+
"title": "Configure widget",
|
|
1133
|
+
"empty": "This widget has no options to configure.",
|
|
1134
|
+
"locked": "Locked",
|
|
1135
|
+
"lockedHint": "This field is set by the source and can’t be edited here.",
|
|
1136
|
+
"selectPlaceholder": "Select…",
|
|
1137
|
+
"increment": "Increase",
|
|
1138
|
+
"decrement": "Decrease",
|
|
1139
|
+
"done": "Done"
|
|
1140
|
+
},
|
|
1141
|
+
"item": {
|
|
1142
|
+
"configure": "Configure {name}",
|
|
1143
|
+
"duplicate": "Duplicate {name}",
|
|
1144
|
+
"remove": "Remove {name}",
|
|
1145
|
+
"removed": "{name} removed.",
|
|
1146
|
+
"duplicated": "{name} duplicated."
|
|
1147
|
+
},
|
|
1148
|
+
"families": {
|
|
1149
|
+
"kpi": "KPIs",
|
|
1150
|
+
"charts": "Charts",
|
|
1151
|
+
"tables": "Tables",
|
|
1152
|
+
"feeds": "Feeds",
|
|
1153
|
+
"calendar": "Calendar",
|
|
1154
|
+
"boards": "Boards",
|
|
1155
|
+
"geo": "Maps",
|
|
1156
|
+
"media": "Media",
|
|
1157
|
+
"communication": "Communication",
|
|
1158
|
+
"forms": "Forms",
|
|
1159
|
+
"chrome": "Navigation",
|
|
1160
|
+
"system": "System",
|
|
1161
|
+
"domain": "Domain"
|
|
1162
|
+
},
|
|
1163
|
+
"versions": "Versions",
|
|
1164
|
+
"versionsEmpty": "No saved versions yet",
|
|
1165
|
+
"saveAsVersion": "Save as version",
|
|
1166
|
+
"saveVersionTitle": "Save a version",
|
|
1167
|
+
"saveVersionBody": "Snapshots the current document. Restore it any time from Versions.",
|
|
1168
|
+
"versionName": "Version name",
|
|
1169
|
+
"versionNamePlaceholder": "e.g. Before Q3 rates change"
|
|
1170
|
+
},
|
|
1171
|
+
"setup": {
|
|
1172
|
+
"title": "Set up Adminium",
|
|
1173
|
+
"subtitle": "Create the first administrator. This happens once.",
|
|
1174
|
+
"progress": "Setup progress",
|
|
1175
|
+
"steps": {
|
|
1176
|
+
"account": "Admin account",
|
|
1177
|
+
"consent": "Privacy"
|
|
1178
|
+
},
|
|
1179
|
+
"account": {
|
|
1180
|
+
"name": "Your name",
|
|
1181
|
+
"email": "Email",
|
|
1182
|
+
"emailInvalid": "Enter a valid email address.",
|
|
1183
|
+
"password": "Password",
|
|
1184
|
+
"passwordHelper": "At least {min} characters.",
|
|
1185
|
+
"passwordTooShort": "Use at least {min} characters.",
|
|
1186
|
+
"confirm": "Confirm password",
|
|
1187
|
+
"passwordMismatch": "Passwords do not match.",
|
|
1188
|
+
"continue": "Continue",
|
|
1189
|
+
"strength": "Password strength",
|
|
1190
|
+
"strengthLevels": {
|
|
1191
|
+
"weak": "Weak",
|
|
1192
|
+
"fair": "Fair",
|
|
1193
|
+
"good": "Good",
|
|
1194
|
+
"strong": "Strong"
|
|
1195
|
+
}
|
|
1196
|
+
},
|
|
1197
|
+
"consent": {
|
|
1198
|
+
"telemetry": {
|
|
1199
|
+
"title": "Share anonymous usage data",
|
|
1200
|
+
"description": "Helps us see which database engines to prioritize. Off unless you turn it on."
|
|
1201
|
+
},
|
|
1202
|
+
"updates": {
|
|
1203
|
+
"title": "Check for new releases",
|
|
1204
|
+
"description": "Shows a notice when a new version — including a security fix — is available. This asks GitHub for the latest release, which reveals this instance’s IP address and version to GitHub. Nothing else is sent."
|
|
1205
|
+
},
|
|
1206
|
+
"sentTitle": "Exactly what is sent:",
|
|
1207
|
+
"sent": {
|
|
1208
|
+
"instanceId": "A random instance ID (a UUID generated here; not derived from your name, host, or database)",
|
|
1209
|
+
"version": "The Adminium version this instance runs",
|
|
1210
|
+
"engines": "Which database engine types are connected (e.g. \"postgres\") — types only"
|
|
1211
|
+
},
|
|
1212
|
+
"neverTitle": "Never sent:",
|
|
1213
|
+
"never": {
|
|
1214
|
+
"schema": "Your schema — no table, column, or enum names",
|
|
1215
|
+
"rows": "Your data — not a single row, ever",
|
|
1216
|
+
"connections": "Connection strings, hostnames, or credentials",
|
|
1217
|
+
"people": "User emails, names, or IDs",
|
|
1218
|
+
"llm": "AI prompts or run contents"
|
|
1219
|
+
},
|
|
1220
|
+
"reversible": "Both are off by default and you can change either one later in Settings.",
|
|
1221
|
+
"back": "Back",
|
|
1222
|
+
"finish": "Create admin account"
|
|
1223
|
+
},
|
|
1224
|
+
"error": {
|
|
1225
|
+
"alreadyCompleted": "This instance has already been set up. Sign in with the existing admin account.",
|
|
1226
|
+
"rejected": "The server rejected those details. Check the email and password and try again.",
|
|
1227
|
+
"failed": "Setup failed. Check your connection and try again."
|
|
1228
|
+
}
|
|
1229
|
+
},
|
|
1230
|
+
"about": {
|
|
1231
|
+
"title": "About Adminium",
|
|
1232
|
+
"subtitle": "Version, licence, and where this instance’s source code lives.",
|
|
1233
|
+
"version": "Version",
|
|
1234
|
+
"license": "Licence",
|
|
1235
|
+
"metaStore": "Meta store",
|
|
1236
|
+
"node": "Node.js",
|
|
1237
|
+
"engine": {
|
|
1238
|
+
"postgres": "PostgreSQL",
|
|
1239
|
+
"mysql": "MySQL / MariaDB",
|
|
1240
|
+
"sqlite": "SQLite"
|
|
1241
|
+
},
|
|
1242
|
+
"licenseCard": {
|
|
1243
|
+
"title": "Free and open source",
|
|
1244
|
+
"body": "Adminium is licensed under the GNU Affero General Public License v3.0. You are free to run, study, modify, and share it. If you offer a modified version to others over a network, the AGPL asks you to offer them its source code too."
|
|
1245
|
+
},
|
|
1246
|
+
"viewLicense": "Read the licence",
|
|
1247
|
+
"viewSource": "Get the source code",
|
|
1248
|
+
"updates": {
|
|
1249
|
+
"title": "Updates",
|
|
1250
|
+
"description": "Whether this instance checks for new releases."
|
|
1251
|
+
},
|
|
1252
|
+
"update": {
|
|
1253
|
+
"disabled": "Update checks are off, so this instance never contacts GitHub. Turn them on in Settings to hear about new releases.",
|
|
1254
|
+
"current": "You are on the latest release.",
|
|
1255
|
+
"available": "Adminium {version} is available",
|
|
1256
|
+
"availableBody": "You are running {version}.",
|
|
1257
|
+
"viewRelease": "View release notes"
|
|
1258
|
+
},
|
|
1259
|
+
"desktop": {
|
|
1260
|
+
"unknown": "Unknown",
|
|
1261
|
+
"appVersion": "App version",
|
|
1262
|
+
"serverVersion": "Server version",
|
|
1263
|
+
"migration": "Meta-store migration",
|
|
1264
|
+
"electron": "Electron",
|
|
1265
|
+
"chromium": "Chromium",
|
|
1266
|
+
"runtimeNode": "Node runtime",
|
|
1267
|
+
"system": {
|
|
1268
|
+
"title": "System"
|
|
1269
|
+
},
|
|
1270
|
+
"dataDir": "Data directory",
|
|
1271
|
+
"reveal": "Show in folder",
|
|
1272
|
+
"secret": {
|
|
1273
|
+
"title": "Secret storage",
|
|
1274
|
+
"safe": "Encrypted by your operating system",
|
|
1275
|
+
"plainWarning": "This computer has no system keychain available, so your Adminium secret is stored unencrypted on disk. Anyone who can read this machine’s files can read it. Set up a login keychain (or a Linux secret service) and restart Adminium to protect it."
|
|
1276
|
+
},
|
|
1277
|
+
"updates": {
|
|
1278
|
+
"title": "Updates",
|
|
1279
|
+
"mode": {
|
|
1280
|
+
"notify": "Notify me about new versions",
|
|
1281
|
+
"manual": "Only when I check",
|
|
1282
|
+
"disabled": "Off (air-gapped)"
|
|
1283
|
+
},
|
|
1284
|
+
"disabledBody": "Automatic updates are off (air-gapped). Install new versions manually.",
|
|
1285
|
+
"check": "Check for updates",
|
|
1286
|
+
"checking": "Checking…",
|
|
1287
|
+
"lastChecked": "Last checked {when}",
|
|
1288
|
+
"available": "Version {version} is available",
|
|
1289
|
+
"none": "You are on the latest version.",
|
|
1290
|
+
"unavailable": "Updates are turned off in this installation.",
|
|
1291
|
+
"error": "Could not check for updates.",
|
|
1292
|
+
"download": "Download update",
|
|
1293
|
+
"downloading": "Downloading… {percent}%",
|
|
1294
|
+
"downloaded": "Version {version} is ready to install",
|
|
1295
|
+
"restart": "Restart to install",
|
|
1296
|
+
"downloadError": "The download did not finish. You can try again.",
|
|
1297
|
+
"toast": {
|
|
1298
|
+
"available": "A new version of Adminium is available",
|
|
1299
|
+
"view": "View",
|
|
1300
|
+
"downloaded": "Update ready to install",
|
|
1301
|
+
"restart": "Restart now"
|
|
1302
|
+
}
|
|
1303
|
+
},
|
|
1304
|
+
"legal": {
|
|
1305
|
+
"title": "Licences",
|
|
1306
|
+
"agpl": "Adminium Desktop is free software under the GNU Affero General Public License v3.0.",
|
|
1307
|
+
"viewLicense": "View licence",
|
|
1308
|
+
"licenseTitle": "GNU Affero General Public License v3.0",
|
|
1309
|
+
"licenseUnavailable": "The bundled licence file is not available in this build.",
|
|
1310
|
+
"viewNotices": "Third-party licences",
|
|
1311
|
+
"noticesTitle": "Third-party notices",
|
|
1312
|
+
"noticesUnavailable": "Third-party notices are generated when the app is packaged and are not available in this build.",
|
|
1313
|
+
"source": "Source code",
|
|
1314
|
+
"close": "Close"
|
|
1315
|
+
},
|
|
1316
|
+
"telemetry": {
|
|
1317
|
+
"title": "Anonymous usage data",
|
|
1318
|
+
"label": "Share anonymous usage data",
|
|
1319
|
+
"description": "Helps us decide which database engines to prioritise. Off unless you turn it on; no schema, data, or personal information is ever sent.",
|
|
1320
|
+
"saveFailed": "Could not save that setting. Try again."
|
|
1321
|
+
},
|
|
1322
|
+
"diagnostics": {
|
|
1323
|
+
"title": "Diagnostics",
|
|
1324
|
+
"description": "Details that help when you report a problem. No schema or data is included.",
|
|
1325
|
+
"copy": "Copy diagnostic info",
|
|
1326
|
+
"copied": "Copied",
|
|
1327
|
+
"showLogs": "Show logs",
|
|
1328
|
+
"dataSize": "Data size: {size}"
|
|
1329
|
+
}
|
|
1330
|
+
}
|
|
1331
|
+
},
|
|
1332
|
+
"apiKeys": {
|
|
1333
|
+
"title": "API keys & tokens",
|
|
1334
|
+
"subtitle": "Manage programmatic access to your workspace.",
|
|
1335
|
+
"createButton": "Create key",
|
|
1336
|
+
"copy": "Copy",
|
|
1337
|
+
"copied": "Copied",
|
|
1338
|
+
"revoke": "Revoke key",
|
|
1339
|
+
"neverUsed": "Never used",
|
|
1340
|
+
"lastUsed": "Last used {since}",
|
|
1341
|
+
"scopesOverflow": "+{count} more",
|
|
1342
|
+
"status": {
|
|
1343
|
+
"active": "Active",
|
|
1344
|
+
"revoked": "Revoked",
|
|
1345
|
+
"expired": "Expired"
|
|
1346
|
+
},
|
|
1347
|
+
"list": {
|
|
1348
|
+
"title": "Keys",
|
|
1349
|
+
"activeCount": "{count, plural, one {# active key} other {# active keys}}"
|
|
1350
|
+
},
|
|
1351
|
+
"empty": {
|
|
1352
|
+
"title": "No API keys yet",
|
|
1353
|
+
"body": "Create one to call the Adminium API from your own code."
|
|
1354
|
+
},
|
|
1355
|
+
"revealed": {
|
|
1356
|
+
"title": "New key created",
|
|
1357
|
+
"body": "Copy it now — you won’t be able to see it again."
|
|
1358
|
+
},
|
|
1359
|
+
"rolesUnavailable": {
|
|
1360
|
+
"title": "Roles are not visible to you",
|
|
1361
|
+
"body": "Creating a key means choosing the role it acts as, and your account cannot read the role list. Ask an administrator for the “Manage roles” permission."
|
|
1362
|
+
},
|
|
1363
|
+
"quickStart": {
|
|
1364
|
+
"title": "Quick start",
|
|
1365
|
+
"body": "Authenticate requests with your key in the Authorization header."
|
|
1366
|
+
},
|
|
1367
|
+
"create": {
|
|
1368
|
+
"title": "Create API key",
|
|
1369
|
+
"description": "The key acts with the permissions of the role you pick.",
|
|
1370
|
+
"name": "Name",
|
|
1371
|
+
"namePlaceholder": "e.g. Analytics pipeline",
|
|
1372
|
+
"role": "Role",
|
|
1373
|
+
"roleHelper": "Pick the least-privileged role that can do the job.",
|
|
1374
|
+
"expires": "Expires",
|
|
1375
|
+
"expiresHelper": "Leave empty for a key that never expires.",
|
|
1376
|
+
"submit": "Create key",
|
|
1377
|
+
"failed": "Could not create the key"
|
|
1378
|
+
},
|
|
1379
|
+
"revokeConfirm": {
|
|
1380
|
+
"title": "Revoke API key",
|
|
1381
|
+
"body": "Any code still calling the API with “{name}” starts failing immediately. This cannot be undone.",
|
|
1382
|
+
"prompt": "Type “{name}” to confirm",
|
|
1383
|
+
"confirm": "Revoke key"
|
|
1384
|
+
}
|
|
1385
|
+
},
|
|
1386
|
+
"changelog": {
|
|
1387
|
+
"title": "Changelog",
|
|
1388
|
+
"subtitle": "Product updates & releases.",
|
|
1389
|
+
"allReleases": "All releases",
|
|
1390
|
+
"tag": {
|
|
1391
|
+
"new": "New",
|
|
1392
|
+
"improved": "Improved",
|
|
1393
|
+
"fixed": "Fixed",
|
|
1394
|
+
"security": "Security"
|
|
1395
|
+
},
|
|
1396
|
+
"filter": {
|
|
1397
|
+
"all": "All",
|
|
1398
|
+
"label": "Filter changes by type"
|
|
1399
|
+
},
|
|
1400
|
+
"empty": {
|
|
1401
|
+
"title": "Nothing under this filter",
|
|
1402
|
+
"body": "No release has carried a change of this kind yet.",
|
|
1403
|
+
"clear": "Show all changes"
|
|
1404
|
+
}
|
|
1405
|
+
},
|
|
1406
|
+
"kb": {
|
|
1407
|
+
"title": "Knowledge Base",
|
|
1408
|
+
"subtitle": "{count, plural, one {# guide} other {# guides}} · full docs at docs.adminium.dev",
|
|
1409
|
+
"openDocs": "Open the docs",
|
|
1410
|
+
"browse": "Browse by topic",
|
|
1411
|
+
"hero": {
|
|
1412
|
+
"title": "How can we help?",
|
|
1413
|
+
"subtitle": "Search guides, API docs and troubleshooting.",
|
|
1414
|
+
"placeholder": "Search the knowledge base…",
|
|
1415
|
+
"label": "Search the knowledge base",
|
|
1416
|
+
"clear": "Clear search"
|
|
1417
|
+
},
|
|
1418
|
+
"category": {
|
|
1419
|
+
"start": "Getting started",
|
|
1420
|
+
"connect": "Connecting data",
|
|
1421
|
+
"api": "API & developers",
|
|
1422
|
+
"security": "Security & access",
|
|
1423
|
+
"selfhost": "Self-hosting",
|
|
1424
|
+
"trouble": "Troubleshooting",
|
|
1425
|
+
"count": "{count, plural, one {# article} other {# articles}}",
|
|
1426
|
+
"selected": "Filtering"
|
|
1427
|
+
},
|
|
1428
|
+
"list": {
|
|
1429
|
+
"all": "All guides",
|
|
1430
|
+
"clear": "Clear filter"
|
|
1431
|
+
},
|
|
1432
|
+
"empty": {
|
|
1433
|
+
"title": "No guides match your search",
|
|
1434
|
+
"body": "Try a different word, or search the full documentation at docs.adminium.dev.",
|
|
1435
|
+
"openDocs": "Open the docs"
|
|
1436
|
+
},
|
|
1437
|
+
"article": {
|
|
1438
|
+
"install": {
|
|
1439
|
+
"title": "Install Adminium",
|
|
1440
|
+
"excerpt": "Run from a source checkout or with docker run, and reach the first-run wizard in a minute."
|
|
1441
|
+
},
|
|
1442
|
+
"firstAdmin": {
|
|
1443
|
+
"title": "Create your first super admin",
|
|
1444
|
+
"excerpt": "What the first-run wizard asks for, and why it can only run once."
|
|
1445
|
+
},
|
|
1446
|
+
"connectDb": {
|
|
1447
|
+
"title": "Connecting your first database",
|
|
1448
|
+
"excerpt": "Point Adminium at PostgreSQL, MySQL or SQLite and generate an admin app."
|
|
1449
|
+
},
|
|
1450
|
+
"schemaFile": {
|
|
1451
|
+
"title": "Generate from a schema file",
|
|
1452
|
+
"excerpt": "Upload a Prisma schema, a Django models.py, a Rails schema.rb or a .sql dump — no connection needed."
|
|
1453
|
+
},
|
|
1454
|
+
"readOnly": {
|
|
1455
|
+
"title": "Use a read-only role",
|
|
1456
|
+
"excerpt": "Introspection reads schema metadata only. Give Adminium the least privilege it needs."
|
|
1457
|
+
},
|
|
1458
|
+
"apiKeys": {
|
|
1459
|
+
"title": "Authenticating with API keys",
|
|
1460
|
+
"excerpt": "Create and revoke keys, and why a key is only ever shown to you once."
|
|
1461
|
+
},
|
|
1462
|
+
"rest": {
|
|
1463
|
+
"title": "REST API reference",
|
|
1464
|
+
"excerpt": "Every endpoint the generated app exposes, with request and response shapes."
|
|
1465
|
+
},
|
|
1466
|
+
"manifest": {
|
|
1467
|
+
"title": "The page manifest",
|
|
1468
|
+
"excerpt": "How a page is described as config, and how to hand-edit one."
|
|
1469
|
+
},
|
|
1470
|
+
"roles": {
|
|
1471
|
+
"title": "Roles & permissions",
|
|
1472
|
+
"excerpt": "Assign Viewer, Editor and Admin, and build your own roles from the permission matrix."
|
|
1473
|
+
},
|
|
1474
|
+
"audit": {
|
|
1475
|
+
"title": "Reading the audit log",
|
|
1476
|
+
"excerpt": "Who changed what, when, and from where."
|
|
1477
|
+
},
|
|
1478
|
+
"secrets": {
|
|
1479
|
+
"title": "How Adminium stores your secrets",
|
|
1480
|
+
"excerpt": "Connection credentials are encrypted at rest with ADMINIUM_SECRET. API keys are hashed."
|
|
1481
|
+
},
|
|
1482
|
+
"docker": {
|
|
1483
|
+
"title": "Self-host with Docker",
|
|
1484
|
+
"excerpt": "The official image, docker-compose, and running a separate meta database."
|
|
1485
|
+
},
|
|
1486
|
+
"backup": {
|
|
1487
|
+
"title": "Back up and move an instance",
|
|
1488
|
+
"excerpt": "export-zip bundles your server config; import it to replay the same setup elsewhere."
|
|
1489
|
+
},
|
|
1490
|
+
"telemetry": {
|
|
1491
|
+
"title": "Telemetry and update checks",
|
|
1492
|
+
"excerpt": "Both are opt-in and off by default. What is sent if you turn them on."
|
|
1493
|
+
},
|
|
1494
|
+
"connectionFails": {
|
|
1495
|
+
"title": "A database connection fails",
|
|
1496
|
+
"excerpt": "Read the diagnostics card: host, port, TLS, and the IP your database must allow."
|
|
1497
|
+
},
|
|
1498
|
+
"missingTables": {
|
|
1499
|
+
"title": "Tables are missing after introspection",
|
|
1500
|
+
"excerpt": "Schema visibility, excluded tables, and re-running generation."
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
},
|
|
1504
|
+
"desktop": {
|
|
1505
|
+
"menu": {
|
|
1506
|
+
"file": "File",
|
|
1507
|
+
"fileNewDatabase": "New local database…",
|
|
1508
|
+
"fileOpenSqlite": "Open SQLite file…",
|
|
1509
|
+
"fileBackupNow": "Back up now…",
|
|
1510
|
+
"fileRestore": "Restore from backup…",
|
|
1511
|
+
"edit": "Edit",
|
|
1512
|
+
"view": "View",
|
|
1513
|
+
"window": "Window",
|
|
1514
|
+
"help": "Help",
|
|
1515
|
+
"helpDocs": "Adminium Docs",
|
|
1516
|
+
"helpShortcuts": "Keyboard Shortcuts",
|
|
1517
|
+
"helpLogs": "Show Logs",
|
|
1518
|
+
"helpCheckForUpdates": "Check for Updates…",
|
|
1519
|
+
"helpAbout": "About Adminium"
|
|
1520
|
+
},
|
|
1521
|
+
"settings": {
|
|
1522
|
+
"explainer": "These settings apply to the Adminium app on this computer only. They are stored on this machine, not in your workspace."
|
|
1523
|
+
},
|
|
1524
|
+
"security": {
|
|
1525
|
+
"heading": "Sign-in"
|
|
1526
|
+
},
|
|
1527
|
+
"requireLogin": {
|
|
1528
|
+
"label": "Require login on this device",
|
|
1529
|
+
"description": "Adminium normally signs you in automatically on this computer. Turn this on to ask for your password at every launch — worth it if other people can use this machine. It takes effect the next time you open Adminium.",
|
|
1530
|
+
"savedOn": "Login required on the next launch",
|
|
1531
|
+
"savedOff": "Adminium will skip the login on this computer",
|
|
1532
|
+
"saveFailed": "Could not save that setting. Try again."
|
|
1533
|
+
},
|
|
1534
|
+
"chip": {
|
|
1535
|
+
"local": "Local",
|
|
1536
|
+
"lanShare": "Local · Sharing on LAN",
|
|
1537
|
+
"remoteDb": "Local + remote DB",
|
|
1538
|
+
"remoteDbOffline": "Remote DB offline",
|
|
1539
|
+
"remoteDbOfflineDetail": "Can't reach {names}. Pages for those connections show a reconnect state."
|
|
1540
|
+
},
|
|
1541
|
+
"lan": {
|
|
1542
|
+
"heading": "Share on local network",
|
|
1543
|
+
"label": "Let other devices on this network use Adminium",
|
|
1544
|
+
"description": "Other computers, tablets and phones on the same network can open Adminium in a browser and sign in with their own account. Adminium has to stay open on this computer for them to reach it.",
|
|
1545
|
+
"savedOn": "Sharing on your local network",
|
|
1546
|
+
"savedOff": "Sharing stopped — Adminium is back to this computer only",
|
|
1547
|
+
"saveFailed": "Could not change network sharing",
|
|
1548
|
+
"noUsers": "You're the only person with an account, so nobody else can sign in yet. Sharing still works — you'll just need to invite people before they can use it.",
|
|
1549
|
+
"usersUnknown": "Adminium couldn't check who else has an account on this computer. Sharing still works, and anyone with an account can sign in — this check is the only thing that failed.",
|
|
1550
|
+
"acknowledge": "I understand — I'll invite people next",
|
|
1551
|
+
"port": "Port",
|
|
1552
|
+
"portHelper": "Default {port}",
|
|
1553
|
+
"portInvalid": "Use a number between 1024 and 65535.",
|
|
1554
|
+
"applyPort": "Change port",
|
|
1555
|
+
"portInUse": "Port {port} is already in use by another program.",
|
|
1556
|
+
"portInUseHint": "Nothing was changed — sharing is still off.",
|
|
1557
|
+
"portInUseNoSuggestion": "Nothing was changed. Try a different port.",
|
|
1558
|
+
"tryPort": "Try {port}",
|
|
1559
|
+
"urlsHeading": "Open this on another device",
|
|
1560
|
+
"noUrls": "This computer isn't connected to a network right now, so there's no address to share. Connect to Wi-Fi or plug in a cable and this list will fill in.",
|
|
1561
|
+
"copyUrl": "Copy",
|
|
1562
|
+
"sessions": "{count, plural, =0 {No devices signed in from this network} one {# device signed in from this network} other {# devices signed in from this network}}",
|
|
1563
|
+
"sessionsUnknown": "Checking who is connected…",
|
|
1564
|
+
"pending": "Starting to share…",
|
|
1565
|
+
"mismatch": "Adminium is still reachable on this network",
|
|
1566
|
+
"mismatchBody": "Sharing is switched off, but the server has not released the network yet. Restart Adminium to close it.",
|
|
1567
|
+
"transportTitle": "Traffic on your local network is not encrypted.",
|
|
1568
|
+
"transportBody": "Share only on networks you trust. For remote access, use Adminium self-host behind HTTPS.",
|
|
1569
|
+
"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."
|
|
1570
|
+
},
|
|
1571
|
+
"setup": {
|
|
1572
|
+
"title": "Welcome to Adminium",
|
|
1573
|
+
"subtitle": "Four short steps and Adminium will have built an admin app from your database. Everything stays on this computer.",
|
|
1574
|
+
"progress": "Setup progress",
|
|
1575
|
+
"back": "Back",
|
|
1576
|
+
"continue": "Continue",
|
|
1577
|
+
"createAccount": "Create account and continue",
|
|
1578
|
+
"step": {
|
|
1579
|
+
"location": "Welcome",
|
|
1580
|
+
"database": "Your first database",
|
|
1581
|
+
"account": "Your account",
|
|
1582
|
+
"generate": "Generate"
|
|
1583
|
+
},
|
|
1584
|
+
"dataDir": {
|
|
1585
|
+
"heading": "Where should Adminium keep your data?",
|
|
1586
|
+
"description": "Your databases, settings and backups all live in this folder. Everything stays on this computer — nothing is uploaded anywhere.",
|
|
1587
|
+
"label": "Data folder",
|
|
1588
|
+
"loading": "Reading the current location…",
|
|
1589
|
+
"pending": "Adminium restarts when you continue, so it can move to this folder.",
|
|
1590
|
+
"change": "Change…",
|
|
1591
|
+
"revert": "Undo",
|
|
1592
|
+
"dialogTitle": "Choose where Adminium keeps your data",
|
|
1593
|
+
"cloudSyncTitle": "This folder is synced to the cloud",
|
|
1594
|
+
"cloudSyncWarning": "Adminium stores its data in SQLite files. {provider} syncs files in “{folder}” by copying them in the background, which can corrupt a database that is open — losing data with no warning. Pick a folder outside {provider}.",
|
|
1595
|
+
"chooseAnother": "Choose another folder",
|
|
1596
|
+
"useAnyway": "Use it anyway — I accept the risk",
|
|
1597
|
+
"unusableTitle": "Adminium cannot use that folder",
|
|
1598
|
+
"failed": "Adminium could not use that folder."
|
|
1599
|
+
},
|
|
1600
|
+
"source": {
|
|
1601
|
+
"heading": "What should Adminium build from?",
|
|
1602
|
+
"description": "Adminium reads a database’s schema and generates an admin app from it. You can add more databases later.",
|
|
1603
|
+
"groupLabel": "Database source",
|
|
1604
|
+
"local": {
|
|
1605
|
+
"title": "Create a new local database",
|
|
1606
|
+
"description": "Start from nothing, or from a schema file you already have. The database is created inside your data folder.",
|
|
1607
|
+
"name": "Database name",
|
|
1608
|
+
"namePlaceholder": "Operations",
|
|
1609
|
+
"nameUnusable": "Use at least one letter or number — the file name is built from this.",
|
|
1610
|
+
"fileHelper": "Creates {file}",
|
|
1611
|
+
"schemaLabel": "Start from",
|
|
1612
|
+
"blank": "Blank",
|
|
1613
|
+
"fromFile": "A schema file",
|
|
1614
|
+
"schemaFile": "Schema file",
|
|
1615
|
+
"schemaFileHelper": ".sql, pg_dump, Prisma, Drizzle, TypeORM, Sequelize, schema.rb, Django or Adminium JSON. Adminium translates it to SQLite.",
|
|
1616
|
+
"placeholder": "Auto-generate placeholder entries",
|
|
1617
|
+
"placeholderHelper": "You imported a schema with no rows. Seed each table with realistic sample data so your dashboards and charts render immediately."
|
|
1618
|
+
},
|
|
1619
|
+
"openSqlite": {
|
|
1620
|
+
"title": "Open an existing SQLite file",
|
|
1621
|
+
"description": "Point Adminium at a .sqlite file on this computer. It is opened where it is — nothing is copied or moved.",
|
|
1622
|
+
"browse": "Choose a .sqlite file…",
|
|
1623
|
+
"change": "Choose a different file…",
|
|
1624
|
+
"networkTitle": "That file is on a network share",
|
|
1625
|
+
"networkBody": "SQLite locking is unreliable over network file shares, and a dropped connection mid-write can corrupt the database. A copy on this computer’s own disk is safer."
|
|
1626
|
+
},
|
|
1627
|
+
"remote": {
|
|
1628
|
+
"title": "Connect to a server database",
|
|
1629
|
+
"description": "PostgreSQL or MySQL. Requires a reachable network database; Adminium’s own tables still stay on this computer.",
|
|
1630
|
+
"networkNote": "Requires a reachable network database",
|
|
1631
|
+
"metaNote": "Adminium’s own tables — your pages, settings and sign-in — stay in the data folder on this computer either way.",
|
|
1632
|
+
"engine": "Engine",
|
|
1633
|
+
"name": "Connection name",
|
|
1634
|
+
"namePlaceholder": "Production",
|
|
1635
|
+
"dsn": "Connection string",
|
|
1636
|
+
"dsnHelper": "Adminium tests this when it connects. Use a read-only role if you only want dashboards."
|
|
1637
|
+
},
|
|
1638
|
+
"demo": {
|
|
1639
|
+
"title": "Explore the demo database",
|
|
1640
|
+
"description": "A ready-made team-operations database, so you can see what Adminium builds before pointing it at your own data. Delete it whenever you like.",
|
|
1641
|
+
"unavailable": "This build does not include the demo data, so there is nothing to load. Pick one of the options above."
|
|
1642
|
+
}
|
|
1643
|
+
},
|
|
1644
|
+
"account": {
|
|
1645
|
+
"heading": "Create your account",
|
|
1646
|
+
"description": "This is the administrator account for this copy of Adminium. The password protects your backups and anyone you share with on your network — you will not be asked for it at every launch.",
|
|
1647
|
+
"name": "Your name",
|
|
1648
|
+
"email": "Email",
|
|
1649
|
+
"password": "Password",
|
|
1650
|
+
"passwordHelper": "At least {min} characters.",
|
|
1651
|
+
"confirm": "Confirm password",
|
|
1652
|
+
"strength": "Password strength",
|
|
1653
|
+
"strengthLevels": {
|
|
1654
|
+
"weak": "Weak",
|
|
1655
|
+
"fair": "Fair",
|
|
1656
|
+
"good": "Good",
|
|
1657
|
+
"strong": "Strong"
|
|
1658
|
+
},
|
|
1659
|
+
"singleUser": "Skip login on this computer",
|
|
1660
|
+
"singleUserHelper": "Adminium signs you in automatically when you open it here. Turn this off if other people use this machine. You can change it later in Settings → Desktop.",
|
|
1661
|
+
"locale": "Language",
|
|
1662
|
+
"theme": "Appearance",
|
|
1663
|
+
"alreadyExists": "This copy of Adminium already has an account. Sign in with it instead.",
|
|
1664
|
+
"failed": "Adminium could not create that account."
|
|
1665
|
+
},
|
|
1666
|
+
"generate": {
|
|
1667
|
+
"creating": "Setting up your database…",
|
|
1668
|
+
"introspecting": "Reading your schema — tables, columns and relationships…",
|
|
1669
|
+
"working": "Working…",
|
|
1670
|
+
"offlineNote": "All of this happens on this computer.",
|
|
1671
|
+
"failedTitle": "Adminium could not set that database up",
|
|
1672
|
+
"failedBody": "Something went wrong. Try again.",
|
|
1673
|
+
"retry": "Try again"
|
|
1674
|
+
}
|
|
1675
|
+
}
|
|
1676
|
+
},
|
|
1677
|
+
"capabilities": {
|
|
1678
|
+
"heading": "App permissions",
|
|
1679
|
+
"description": "Apps you install can ask to use this computer’s hardware. You approve each one, and can revoke access anytime.",
|
|
1680
|
+
"grantedTo": "Allowed for {app}",
|
|
1681
|
+
"status": {
|
|
1682
|
+
"available": "Available",
|
|
1683
|
+
"stub": "Not available yet",
|
|
1684
|
+
"unavailable": "Unavailable"
|
|
1685
|
+
},
|
|
1686
|
+
"allow": {
|
|
1687
|
+
"action": "Allow…"
|
|
1688
|
+
},
|
|
1689
|
+
"revoke": {
|
|
1690
|
+
"action": "Revoke",
|
|
1691
|
+
"saved": "Access revoked",
|
|
1692
|
+
"failed": "Could not revoke access. Try again."
|
|
1693
|
+
},
|
|
1694
|
+
"grant": {
|
|
1695
|
+
"saved": "Access allowed",
|
|
1696
|
+
"failed": "Could not allow access. Try again."
|
|
1697
|
+
},
|
|
1698
|
+
"catalog": {
|
|
1699
|
+
"printerEscpos": {
|
|
1700
|
+
"name": "Receipt printer (ESC/POS)",
|
|
1701
|
+
"scope": "Print to receipt printers and open a connected cash drawer"
|
|
1702
|
+
}
|
|
1703
|
+
},
|
|
1704
|
+
"consent": {
|
|
1705
|
+
"title": "Allow {app}?",
|
|
1706
|
+
"subtitle": "{app} is asking to use this computer’s hardware.",
|
|
1707
|
+
"willAllow": "This will allow {app} to:",
|
|
1708
|
+
"revokeNote": "You can revoke this at any time in Settings → Desktop. Only allow apps you trust.",
|
|
1709
|
+
"deny": "Not now",
|
|
1710
|
+
"approve": "Allow"
|
|
1711
|
+
}
|
|
1712
|
+
},
|
|
1713
|
+
"emailTemplates": {
|
|
1714
|
+
"title": "Email templates",
|
|
1715
|
+
"subtitle": "Transactional and lifecycle emails your workspace sends.",
|
|
1716
|
+
"search": "Search templates…",
|
|
1717
|
+
"loadFailed": "Couldn’t load templates",
|
|
1718
|
+
"empty": "No email templates yet",
|
|
1719
|
+
"emptyBody": "Templates appear here once the server seeds or you create them.",
|
|
1720
|
+
"noMatches": "No matching templates",
|
|
1721
|
+
"noMatchesBody": "Try a different search.",
|
|
1722
|
+
"live": "Live",
|
|
1723
|
+
"disabled": "Disabled",
|
|
1724
|
+
"name": "Template name",
|
|
1725
|
+
"subject": "Subject",
|
|
1726
|
+
"enabled": "Enabled"
|
|
1727
|
+
},
|
|
1728
|
+
"board": {
|
|
1729
|
+
"addCard": "Add card",
|
|
1730
|
+
"compose": {
|
|
1731
|
+
"placeholder": "Card title…",
|
|
1732
|
+
"add": "Add",
|
|
1733
|
+
"cancel": "Cancel"
|
|
1734
|
+
},
|
|
1735
|
+
"empty": {
|
|
1736
|
+
"title": "No board columns",
|
|
1737
|
+
"body": "Add a status field to group cards into columns."
|
|
1738
|
+
}
|
|
1739
|
+
},
|
|
1740
|
+
"calendar": {
|
|
1741
|
+
"dateRange": "Date range",
|
|
1742
|
+
"compose": {
|
|
1743
|
+
"placeholder": "Event title…",
|
|
1744
|
+
"add": "Add",
|
|
1745
|
+
"cancel": "Cancel",
|
|
1746
|
+
"open": "Add event"
|
|
1747
|
+
},
|
|
1748
|
+
"agenda": {
|
|
1749
|
+
"empty": "Nothing scheduled"
|
|
1750
|
+
}
|
|
1751
|
+
},
|
|
1752
|
+
"scheduler": {
|
|
1753
|
+
"prevWeek": "Previous week",
|
|
1754
|
+
"nextWeek": "Next week",
|
|
1755
|
+
"week": "Week",
|
|
1756
|
+
"month": "Month",
|
|
1757
|
+
"resource": "Resource",
|
|
1758
|
+
"coverage": "Coverage",
|
|
1759
|
+
"addShift": "Add shift",
|
|
1760
|
+
"shiftCount": "{n} shifts"
|
|
1761
|
+
},
|
|
1762
|
+
"planning": {
|
|
1763
|
+
"drawer": {
|
|
1764
|
+
"close": "Close",
|
|
1765
|
+
"loading": "Loading record",
|
|
1766
|
+
"error": "Could not load this record."
|
|
1767
|
+
}
|
|
1768
|
+
},
|
|
1769
|
+
"files": {
|
|
1770
|
+
"uploadsUnavailable": "Uploads are not available on this page yet."
|
|
1771
|
+
},
|
|
1772
|
+
"chat": {
|
|
1773
|
+
"messageSent": "Message sent",
|
|
1774
|
+
"sendFailed": "The message could not be sent."
|
|
1775
|
+
},
|
|
1776
|
+
"templates": {
|
|
1777
|
+
"crud": {
|
|
1778
|
+
"title": "Records"
|
|
1779
|
+
},
|
|
1780
|
+
"dashboard": {
|
|
1781
|
+
"title": "Dashboard"
|
|
1782
|
+
},
|
|
1783
|
+
"board": {
|
|
1784
|
+
"title": "Board"
|
|
1785
|
+
},
|
|
1786
|
+
"calendar": {
|
|
1787
|
+
"title": "Calendar"
|
|
1788
|
+
},
|
|
1789
|
+
"scheduler": {
|
|
1790
|
+
"title": "Scheduler"
|
|
1791
|
+
},
|
|
1792
|
+
"logViewer": {
|
|
1793
|
+
"title": "Logs"
|
|
1794
|
+
},
|
|
1795
|
+
"files": {
|
|
1796
|
+
"title": "Files"
|
|
1797
|
+
},
|
|
1798
|
+
"chat": {
|
|
1799
|
+
"title": "Chat"
|
|
1800
|
+
},
|
|
1801
|
+
"builder": {
|
|
1802
|
+
"title": "Builder"
|
|
1803
|
+
},
|
|
1804
|
+
"wizard": {
|
|
1805
|
+
"title": "Wizard"
|
|
1806
|
+
},
|
|
1807
|
+
"settings": {
|
|
1808
|
+
"title": "Settings"
|
|
1809
|
+
},
|
|
1810
|
+
"directory": {
|
|
1811
|
+
"title": "Directory",
|
|
1812
|
+
"searchPlaceholder": "Search people…",
|
|
1813
|
+
"allFilter": "All",
|
|
1814
|
+
"clearFilters": "Clear filters",
|
|
1815
|
+
"detailTitle": "Person",
|
|
1816
|
+
"emptyTitle": "No people yet",
|
|
1817
|
+
"emptyBody": "People appear here as rows land in the table.",
|
|
1818
|
+
"noMatchesTitle": "No matching people",
|
|
1819
|
+
"noMatchesBody": "Try a different search or remove a filter.",
|
|
1820
|
+
"errorTitle": "This directory failed to load",
|
|
1821
|
+
"loading": "Loading people",
|
|
1822
|
+
"memberCount": "{count} people"
|
|
1823
|
+
},
|
|
1824
|
+
"masterDetail": {
|
|
1825
|
+
"title": "List & detail",
|
|
1826
|
+
"allFilter": "All",
|
|
1827
|
+
"clearFilters": "Clear filters",
|
|
1828
|
+
"emptyTitle": "Nothing here yet",
|
|
1829
|
+
"emptyBody": "Records appear here as rows land in the table.",
|
|
1830
|
+
"noMatchesTitle": "No matching records",
|
|
1831
|
+
"noMatchesBody": "Try removing a filter.",
|
|
1832
|
+
"errorTitle": "This list failed to load",
|
|
1833
|
+
"loading": "Loading records",
|
|
1834
|
+
"selectPrompt": "Select a record"
|
|
1835
|
+
},
|
|
1836
|
+
"queueInbox": {
|
|
1837
|
+
"title": "Queue",
|
|
1838
|
+
"approve": "Approve",
|
|
1839
|
+
"reject": "Reject",
|
|
1840
|
+
"allSegment": "All",
|
|
1841
|
+
"approvedToast": "{count} approved.",
|
|
1842
|
+
"rejectedToast": "{count} rejected.",
|
|
1843
|
+
"undoneToast": "Decision undone.",
|
|
1844
|
+
"failedToast": "Decision failed.",
|
|
1845
|
+
"bulkFailed": "{failed} of {total} selected rows could not be updated.",
|
|
1846
|
+
"undoFailedToast": "Could not undo this decision.",
|
|
1847
|
+
"rejectTitle": "Reject requests",
|
|
1848
|
+
"rejectCount": "Selected · {count}",
|
|
1849
|
+
"rejectNote": "The requester will be notified with your note.",
|
|
1850
|
+
"rejectPlaceholder": "Add a note for the requester…",
|
|
1851
|
+
"rejectConfirm": "Reject",
|
|
1852
|
+
"emptyTitle": "Nothing in the queue",
|
|
1853
|
+
"emptyBody": "New requests appear here as they arrive.",
|
|
1854
|
+
"caughtUpTitle": "You’re all caught up",
|
|
1855
|
+
"caughtUpBody": "No requests in this tab right now.",
|
|
1856
|
+
"errorTitle": "This queue failed to load",
|
|
1857
|
+
"loading": "Loading queue",
|
|
1858
|
+
"selectPrompt": "Select a request",
|
|
1859
|
+
"daysUnit": "{count} days"
|
|
1860
|
+
}
|
|
1861
|
+
},
|
|
1862
|
+
"dataio": {
|
|
1863
|
+
"back": "Back",
|
|
1864
|
+
"import": {
|
|
1865
|
+
"title": "Import data",
|
|
1866
|
+
"stepUpload": "Upload",
|
|
1867
|
+
"stepMap": "Map columns",
|
|
1868
|
+
"stepValidate": "Validate",
|
|
1869
|
+
"stepRun": "Import & review",
|
|
1870
|
+
"targetLabel": "Target table",
|
|
1871
|
+
"targetPlaceholder": "Choose a table page…",
|
|
1872
|
+
"notATable": "That page is not a table — pick a table page to import into.",
|
|
1873
|
+
"dropTitle": "Drop a CSV file to import",
|
|
1874
|
+
"dropHint": "CSV up to 32 MB — the first row must be the header",
|
|
1875
|
+
"skipTarget": "Don’t import",
|
|
1876
|
+
"mapHint": "{count} data rows in {file} — choose a target for each column.",
|
|
1877
|
+
"validating": "Validating…",
|
|
1878
|
+
"toValidate": "Validate",
|
|
1879
|
+
"validateFailed": "Validation failed.",
|
|
1880
|
+
"validationSummary": "{valid} of {total} rows ready to import — {invalid} will be skipped.",
|
|
1881
|
+
"allValid": "All rows passed validation",
|
|
1882
|
+
"run": "Run import",
|
|
1883
|
+
"runSkipping": "Import {valid} rows (skip {invalid})",
|
|
1884
|
+
"progressLabel": "Import progress",
|
|
1885
|
+
"running": "Importing…",
|
|
1886
|
+
"kpiTotal": "Rows in file",
|
|
1887
|
+
"kpiCreated": "Created",
|
|
1888
|
+
"kpiUpdated": "Updated",
|
|
1889
|
+
"kpiSkipped": "Skipped",
|
|
1890
|
+
"inconsistent": "Import numbers are inconsistent — total must equal created + updated + skipped.",
|
|
1891
|
+
"downloadErrors": "Download the skipped-rows report (CSV)",
|
|
1892
|
+
"runFailed": "The import failed."
|
|
1893
|
+
},
|
|
1894
|
+
"exports": {
|
|
1895
|
+
"title": "Data exports",
|
|
1896
|
+
"tableLabel": "Table",
|
|
1897
|
+
"tablePlaceholder": "Choose a table…",
|
|
1898
|
+
"notATable": "That page is not a table — pick a table page to export.",
|
|
1899
|
+
"formatLabel": "Format",
|
|
1900
|
+
"create": "Export",
|
|
1901
|
+
"createFailed": "Could not request the export.",
|
|
1902
|
+
"retention": "Exports are kept for 30 days, then expire.",
|
|
1903
|
+
"statusProcessing": "Processing…",
|
|
1904
|
+
"statusReady": "Ready — {rows} rows · click to download",
|
|
1905
|
+
"statusFailed": "Failed — {error}",
|
|
1906
|
+
"statusCancelled": "Cancelled",
|
|
1907
|
+
"statusExpired": "Expired",
|
|
1908
|
+
"emptyTitle": "No exports yet",
|
|
1909
|
+
"emptyBody": "Request one above — artifacts appear here with their status."
|
|
1910
|
+
}
|
|
1911
|
+
},
|
|
1912
|
+
"reports": {
|
|
1913
|
+
"title": "Scheduled reports",
|
|
1914
|
+
"subtitle": "Recurring data snapshots of a page, delivered as in-app notifications.",
|
|
1915
|
+
"new": "New report",
|
|
1916
|
+
"loadFailed": "Could not load scheduled reports.",
|
|
1917
|
+
"saveFailed": "Could not save this report.",
|
|
1918
|
+
"nextRun": "Next run",
|
|
1919
|
+
"emptyTitle": "No scheduled reports yet",
|
|
1920
|
+
"emptyBody": "Create one to get a recurring data snapshot of any table page.",
|
|
1921
|
+
"createTitle": "New scheduled report",
|
|
1922
|
+
"editTitle": "Edit scheduled report",
|
|
1923
|
+
"nameLabel": "Name",
|
|
1924
|
+
"namePlaceholder": "e.g. Weekly revenue",
|
|
1925
|
+
"pageLabel": "Page",
|
|
1926
|
+
"pagePlaceholder": "Choose a page…",
|
|
1927
|
+
"frequencyLabel": "Frequency",
|
|
1928
|
+
"frequency": {
|
|
1929
|
+
"daily": "Daily",
|
|
1930
|
+
"weekly": "Weekly",
|
|
1931
|
+
"monthly": "Monthly"
|
|
1932
|
+
},
|
|
1933
|
+
"dayOfWeekLabel": "Day",
|
|
1934
|
+
"dayOfMonthLabel": "Day of month",
|
|
1935
|
+
"timeLabel": "Time",
|
|
1936
|
+
"timezoneLabel": "Timezone",
|
|
1937
|
+
"formatLabel": "Delivery",
|
|
1938
|
+
"formatHint": "Data snapshot (PDF/PNG rendering arrives in a later release) — each run produces a CSV snapshot and an in-app notification.",
|
|
1939
|
+
"recipientsLabel": "Recipients",
|
|
1940
|
+
"recipientsHint": "Stored with the report. Email delivery arrives in a later release — runs notify you in-app for now.",
|
|
1941
|
+
"deliveryBadge": "CSV snapshot",
|
|
1942
|
+
"delete": "Delete",
|
|
1943
|
+
"create": "Create",
|
|
1944
|
+
"cadence": {
|
|
1945
|
+
"daily": "Daily at {time} ({zone})",
|
|
1946
|
+
"weekly": "Weekly · {day} at {time} ({zone})",
|
|
1947
|
+
"monthly": "Monthly · day {day} at {time} ({zone})"
|
|
1948
|
+
}
|
|
1949
|
+
},
|
|
1950
|
+
"notifications": {
|
|
1951
|
+
"channel": {
|
|
1952
|
+
"inApp": "In-app",
|
|
1953
|
+
"email": "Email",
|
|
1954
|
+
"push": "Push"
|
|
1955
|
+
},
|
|
1956
|
+
"event": {
|
|
1957
|
+
"reportReady": "Scheduled report ready",
|
|
1958
|
+
"reportFailed": "Scheduled report failed",
|
|
1959
|
+
"backupCompleted": "Backup completed"
|
|
1960
|
+
}
|
|
1961
|
+
}
|
|
1962
|
+
};
|
|
1963
|
+
//# sourceMappingURL=common.js.map
|