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