@podosoft/podokit 0.11.2 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -3
- package/dist/dev.d.ts +26 -0
- package/dist/dev.js +297 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +82 -2
- package/dist/lib.d.ts +2 -0
- package/dist/lib.js +7 -1
- package/dist/locale.d.ts +22 -0
- package/dist/locale.js +184 -0
- package/dist/lockfile.js +4 -0
- package/dist/templates/fullstack-nest-svelte/README.md +42 -0
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/i18n/README.md +7 -5
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/i18n/catalogs/app/en.json +1 -0
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/i18n/catalogs/app/ko.json +1 -0
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/i18n/locales/en.json +6 -0
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/i18n/locales/ko.json +6 -0
- package/dist/templates/fullstack-nest-svelte/apps/web/vite.config.ts +3 -9
- package/dist/templates/fullstack-nest-svelte/compose.dev.yaml +6 -11
- package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-add-locale/SKILL.md +63 -0
- package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-add-locale/agents/openai.yaml +4 -0
- package/dist/templates/fullstack-nest-svelte/dot-claude/skills/podokit-add-locale/references/catalog-format.md +49 -0
- package/dist/templates/fullstack-nest-svelte/dot-env.docker +2 -2
- package/dist/templates/fullstack-nest-svelte/dot-gitignore +3 -0
- package/dist/templates/fullstack-nest-svelte/dot-podokit/dev.json +4 -0
- package/dist/templates/fullstack-nest-svelte/tests/README.md +10 -4
- package/dist/templates/modules/admin-dashboard/files/apps/api/src/site-settings/site-settings.controller.ts +9 -0
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/hooks.server.ts +5 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/auth-errors.ts +3 -0
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/auth-redirect.ts +27 -0
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/account-menu.svelte +8 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/components/sidebar-user-menu.svelte +1 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/i18n/catalogs/admin-dashboard/en.json +564 -0
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/i18n/catalogs/admin-dashboard/ko.json +564 -0
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/i18n/index.ts +13 -12
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/i18n/messages.ts +90 -722
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/lib/site.svelte.ts +8 -1
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/admin/audit/+page.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/admin/organizations/+page.svelte +2 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/admin/sessions/+page.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/admin/settings/+page.svelte +8 -2
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/admin/settings/general-settings.svelte +15 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(app)/admin/users/+page.svelte +4 -4
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/login/+page.svelte +32 -35
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/(auth)/signup/+page.svelte +10 -3
- package/dist/templates/modules/admin-dashboard/files/apps/web/src/routes/+layout.server.ts +11 -7
- package/dist/templates/modules/admin-dashboard/files/tests/api/auth-config.api.spec.ts +78 -0
- package/dist/templates/modules/admin-dashboard/files/tests/ui/auth.ui.spec.ts +28 -1
- package/dist/templates/modules/admin-dashboard/files/tests/ui/email.ui.spec.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/tests/ui/general-effects.ui.spec.ts +15 -0
- package/dist/templates/modules/admin-dashboard/files/tests/ui/i18n.ui.spec.ts +59 -6
- package/dist/templates/modules/admin-dashboard/files/tests/ui/login-methods.ui.spec.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/tests/ui/passkey.ui.spec.ts +1 -1
- package/dist/templates/modules/admin-dashboard/files/tests/ui/settings-dialogs.ui.spec.ts +5 -0
- package/dist/templates/modules/admin-dashboard/files/tests/ui/two-factor.ui.spec.ts +2 -2
- package/dist/templates/modules/admin-dashboard/module.manifest.json +4 -0
- package/dist/templates/modules/auth/files/apps/api/scripts/configure-auth.mjs +22 -11
- package/dist/templates/modules/auth/files/apps/api/src/auth/auth.ts +6 -2
- package/dist/templates/modules/auth/files/apps/api/src/auth/feature-gate.ts +50 -25
- package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/SKILL.md +1 -1
- package/dist/templates/modules/auth/files/dot-claude/skills/podokit-configure-auth/references/google.md +44 -0
- package/dist/templates/todo/README.md +42 -0
- package/dist/templates/todo/apps/web/src/lib/i18n/README.md +7 -5
- package/dist/templates/todo/apps/web/src/lib/i18n/catalogs/app/en.json +1 -0
- package/dist/templates/todo/apps/web/src/lib/i18n/catalogs/app/ko.json +1 -0
- package/dist/templates/todo/apps/web/src/lib/i18n/locales/en.json +6 -0
- package/dist/templates/todo/apps/web/src/lib/i18n/locales/ko.json +6 -0
- package/dist/templates/todo/apps/web/vite.config.ts +3 -9
- package/dist/templates/todo/compose.dev.yaml +6 -11
- package/dist/templates/todo/dot-claude/skills/podokit-add-locale/SKILL.md +63 -0
- package/dist/templates/todo/dot-claude/skills/podokit-add-locale/agents/openai.yaml +4 -0
- package/dist/templates/todo/dot-claude/skills/podokit-add-locale/references/catalog-format.md +49 -0
- package/dist/templates/todo/dot-env.docker +2 -2
- package/dist/templates/todo/dot-gitignore +3 -0
- package/dist/templates/todo/dot-podokit/dev.json +4 -0
- package/dist/templates/todo/tests/README.md +10 -4
- package/dist/update.js +23 -5
- package/package.json +1 -1
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/i18n/en.ts +0 -10
- package/dist/templates/fullstack-nest-svelte/apps/web/src/lib/i18n/ko.ts +0 -11
- package/dist/templates/todo/apps/web/src/lib/i18n/en.ts +0 -10
- package/dist/templates/todo/apps/web/src/lib/i18n/ko.ts +0 -11
|
@@ -0,0 +1,564 @@
|
|
|
1
|
+
{
|
|
2
|
+
"common": {
|
|
3
|
+
"appName": "Admin"
|
|
4
|
+
},
|
|
5
|
+
"landing": {
|
|
6
|
+
"title": "Welcome",
|
|
7
|
+
"subtitle": "This is your app's home page. Replace it with your own content — the admin area lives under /admin.",
|
|
8
|
+
"openAdmin": "Open admin"
|
|
9
|
+
},
|
|
10
|
+
"footer": {
|
|
11
|
+
"support": "Support",
|
|
12
|
+
"terms": "Terms",
|
|
13
|
+
"privacy": "Privacy"
|
|
14
|
+
},
|
|
15
|
+
"maintenance": {
|
|
16
|
+
"title": "Under maintenance",
|
|
17
|
+
"subtitle": "The site is temporarily unavailable. Please check back soon.",
|
|
18
|
+
"adminHint": "Administrators can sign in to manage the site.",
|
|
19
|
+
"signIn": "Admin sign in"
|
|
20
|
+
},
|
|
21
|
+
"language": {
|
|
22
|
+
"label": "Language"
|
|
23
|
+
},
|
|
24
|
+
"toolbar": {
|
|
25
|
+
"filter": "Filter",
|
|
26
|
+
"search": "Search",
|
|
27
|
+
"searchButton": "Search",
|
|
28
|
+
"all": "All"
|
|
29
|
+
},
|
|
30
|
+
"theme": {
|
|
31
|
+
"toggle": "Toggle theme",
|
|
32
|
+
"light": "Light",
|
|
33
|
+
"dark": "Dark",
|
|
34
|
+
"system": "System"
|
|
35
|
+
},
|
|
36
|
+
"setup2fa": {
|
|
37
|
+
"title": "Set up two-factor authentication",
|
|
38
|
+
"subtitle": "This site requires two-factor authentication. Add an authenticator app to continue.",
|
|
39
|
+
"passwordLabel": "Confirm your password",
|
|
40
|
+
"begin": "Continue",
|
|
41
|
+
"step1": "1. Scan with your authenticator app",
|
|
42
|
+
"step2": "2. Save your backup codes",
|
|
43
|
+
"step3": "3. Enter the 6-digit code",
|
|
44
|
+
"savedConfirm": "I've saved my backup codes",
|
|
45
|
+
"activate": "Activate and continue",
|
|
46
|
+
"signOut": "Sign out",
|
|
47
|
+
"wrongPassword": "That password is incorrect.",
|
|
48
|
+
"enableFailed": "Couldn't start setup. Please try again."
|
|
49
|
+
},
|
|
50
|
+
"auth": {
|
|
51
|
+
"signInTitle": "Sign in",
|
|
52
|
+
"signInDesc": "Enter your credentials to continue.",
|
|
53
|
+
"email": "Email",
|
|
54
|
+
"emailOrUsername": "Email or username",
|
|
55
|
+
"password": "Password",
|
|
56
|
+
"forgot": "Forgot?",
|
|
57
|
+
"signIn": "Sign in",
|
|
58
|
+
"signingIn": "Signing in…",
|
|
59
|
+
"magicLinkButton": "Email me a sign-in link",
|
|
60
|
+
"passkeyButton": "Use a passkey",
|
|
61
|
+
"magicLinkSent": "Check your email for a sign-in link.",
|
|
62
|
+
"magicLinkNeedsEmail": "Enter your email first.",
|
|
63
|
+
"otpButton": "Email me a code",
|
|
64
|
+
"otpCode": "One-time code",
|
|
65
|
+
"otpVerify": "Verify code",
|
|
66
|
+
"verify": "Verify",
|
|
67
|
+
"twoFactorPrompt": "Enter the 6-digit code from your authenticator app.",
|
|
68
|
+
"twoFactorBackupPrompt": "Enter one of your backup codes.",
|
|
69
|
+
"twoFactorCodeLabel": "Authentication code",
|
|
70
|
+
"backupCodeLabel": "Backup code",
|
|
71
|
+
"twoFactorUseBackup": "Use a backup code instead",
|
|
72
|
+
"twoFactorUseAuthenticator": "Use your authenticator app instead",
|
|
73
|
+
"twoFactorInvalidCode": "That code isn't valid. Check it and try again.",
|
|
74
|
+
"twoFactorLocked": "Too many attempts. Please wait a moment and try again.",
|
|
75
|
+
"noAccount": "No account?",
|
|
76
|
+
"signUp": "Sign up",
|
|
77
|
+
"signInFailed": "Sign in failed",
|
|
78
|
+
"createTitle": "Create account",
|
|
79
|
+
"createDesc": "Sign up to get started.",
|
|
80
|
+
"name": "Name",
|
|
81
|
+
"create": "Create account",
|
|
82
|
+
"creating": "Creating…",
|
|
83
|
+
"haveAccount": "Have an account?",
|
|
84
|
+
"signUpFailed": "Sign up failed",
|
|
85
|
+
"publicSignupDisabled": "Public sign-up is closed. Existing users can still sign in.",
|
|
86
|
+
"resetTitle": "Reset password",
|
|
87
|
+
"resetDesc": "We'll send a reset link to your email.",
|
|
88
|
+
"sendReset": "Send reset link",
|
|
89
|
+
"sending": "Sending…",
|
|
90
|
+
"resetSent": "If that email exists, a reset link is on its way.",
|
|
91
|
+
"backToSignIn": "Back to sign in",
|
|
92
|
+
"requestFailed": "Request failed",
|
|
93
|
+
"newTitle": "Set a new password",
|
|
94
|
+
"newPassword": "New password",
|
|
95
|
+
"updatePassword": "Update password",
|
|
96
|
+
"updating": "Updating…",
|
|
97
|
+
"missingToken": "Missing or invalid reset token.",
|
|
98
|
+
"resetFailed": "Reset failed",
|
|
99
|
+
"verifyTitle": "Verify your email",
|
|
100
|
+
"verifyDesc": "We sent a verification link to {email}. Open it to activate your account.",
|
|
101
|
+
"verifyDescNoEmail": "Enter your email to receive a new verification link.",
|
|
102
|
+
"verifySent": "Verification email sent — check your inbox.",
|
|
103
|
+
"verifyLinkError": "That verification link is invalid or has expired. Request a new one below.",
|
|
104
|
+
"resendVerification": "Resend verification email",
|
|
105
|
+
"emailNotVerified": "Verify your email before signing in.",
|
|
106
|
+
"approvalPendingTitle": "Waiting for approval",
|
|
107
|
+
"approvalPendingDesc": "Your account was created and is waiting for an administrator to approve it. Try signing in again after approval.",
|
|
108
|
+
"approvalPending": "Your account is waiting for administrator approval.",
|
|
109
|
+
"continueWith": "Continue with {provider}"
|
|
110
|
+
},
|
|
111
|
+
"nav": {
|
|
112
|
+
"overview": "Overview",
|
|
113
|
+
"users": "Users",
|
|
114
|
+
"sessions": "Sessions",
|
|
115
|
+
"organizations": "Organizations",
|
|
116
|
+
"audit": "Audit log",
|
|
117
|
+
"account": "Account",
|
|
118
|
+
"settings": "Settings",
|
|
119
|
+
"home": "Back to home",
|
|
120
|
+
"signOut": "Sign out"
|
|
121
|
+
},
|
|
122
|
+
"passkeys": {
|
|
123
|
+
"title": "Passkeys",
|
|
124
|
+
"subtitle": "Passwordless sign-in with your device (Face ID, fingerprint, security key).",
|
|
125
|
+
"name": "Name",
|
|
126
|
+
"namePlaceholder": "e.g. MacBook",
|
|
127
|
+
"add": "Add passkey",
|
|
128
|
+
"remove": "Remove",
|
|
129
|
+
"untitled": "Passkey",
|
|
130
|
+
"added": "Passkey added",
|
|
131
|
+
"addFailed": "Failed to add passkey",
|
|
132
|
+
"removed": "Passkey removed",
|
|
133
|
+
"removeFailed": "Failed to remove passkey",
|
|
134
|
+
"empty": "No passkeys yet.",
|
|
135
|
+
"created": "Created",
|
|
136
|
+
"total": "{count} passkeys"
|
|
137
|
+
},
|
|
138
|
+
"acceptInvitation": {
|
|
139
|
+
"title": "Organization invitation",
|
|
140
|
+
"pending": "Accepting your invitation…",
|
|
141
|
+
"ok": "You have joined the organization.",
|
|
142
|
+
"error": "This invitation is invalid or has expired.",
|
|
143
|
+
"goToOrgs": "Go to organizations"
|
|
144
|
+
},
|
|
145
|
+
"organizations": {
|
|
146
|
+
"title": "Organizations",
|
|
147
|
+
"subtitle": "Multi-tenant teams. Create organizations and invite members.",
|
|
148
|
+
"create": "New organization",
|
|
149
|
+
"createTitle": "Create organization",
|
|
150
|
+
"name": "Name",
|
|
151
|
+
"slug": "Slug",
|
|
152
|
+
"created": "Created",
|
|
153
|
+
"delete": "Delete",
|
|
154
|
+
"cancel": "Cancel",
|
|
155
|
+
"empty": "No organizations yet.",
|
|
156
|
+
"total": "{count} organizations",
|
|
157
|
+
"submit": "Create",
|
|
158
|
+
"createdMsg": "Organization created",
|
|
159
|
+
"deletedMsg": "Organization deleted",
|
|
160
|
+
"actionFailed": "Action failed",
|
|
161
|
+
"manage": "Manage",
|
|
162
|
+
"membersDesc": "Members and pending invitations.",
|
|
163
|
+
"members": "Members",
|
|
164
|
+
"pending": "Pending invitations",
|
|
165
|
+
"parent": "Parent organization",
|
|
166
|
+
"noParent": "None (top level)",
|
|
167
|
+
"managers": "Managers",
|
|
168
|
+
"managersHint": "Existing users to add as managers (any number).",
|
|
169
|
+
"inviteEmail": "Invite by email",
|
|
170
|
+
"invite": "Invite",
|
|
171
|
+
"invited": "Invitation sent",
|
|
172
|
+
"remove": "Remove",
|
|
173
|
+
"cancelInvite": "Cancel"
|
|
174
|
+
},
|
|
175
|
+
"consent": {
|
|
176
|
+
"title": "Authorize access",
|
|
177
|
+
"subtitle": "An application is requesting access to your account.",
|
|
178
|
+
"requests": "It will be able to access:",
|
|
179
|
+
"allow": "Allow",
|
|
180
|
+
"deny": "Deny"
|
|
181
|
+
},
|
|
182
|
+
"apiKeys": {
|
|
183
|
+
"title": "API keys",
|
|
184
|
+
"subtitle": "Personal keys for programmatic access. Send as an x-api-key header.",
|
|
185
|
+
"name": "Name",
|
|
186
|
+
"namePlaceholder": "e.g. CI pipeline",
|
|
187
|
+
"create": "Create key",
|
|
188
|
+
"keyColumn": "Key",
|
|
189
|
+
"created": "Created",
|
|
190
|
+
"untitled": "Untitled",
|
|
191
|
+
"revoke": "Revoke",
|
|
192
|
+
"revoked": "Key revoked",
|
|
193
|
+
"revokeFailed": "Failed to revoke key",
|
|
194
|
+
"empty": "No API keys yet.",
|
|
195
|
+
"total": "{count} API keys",
|
|
196
|
+
"createdTitle": "API key created",
|
|
197
|
+
"createdDesc": "Copy it now — you will not be able to see it again.",
|
|
198
|
+
"copy": "Copy",
|
|
199
|
+
"copied": "Copied to clipboard",
|
|
200
|
+
"done": "Done"
|
|
201
|
+
},
|
|
202
|
+
"general": {
|
|
203
|
+
"tab": "General",
|
|
204
|
+
"brandingTitle": "Branding",
|
|
205
|
+
"brandingDesc": "The site name and icon shown in the browser and across the app.",
|
|
206
|
+
"siteName": "Site name",
|
|
207
|
+
"siteNamePlaceholder": "My App",
|
|
208
|
+
"siteNameHint": "Used as the browser tab title and wherever the app name appears.",
|
|
209
|
+
"favicon": "Browser icon (favicon)",
|
|
210
|
+
"faviconHint": "SVG (recommended) or a square PNG 512×512, ≤ 1 MB. Applied to every page.",
|
|
211
|
+
"iconSaved": "Icon updated.",
|
|
212
|
+
"iconError": "Failed to upload the icon.",
|
|
213
|
+
"iconTooBig": "Icon must be 1 MB or smaller.",
|
|
214
|
+
"brandColor": "Brand color",
|
|
215
|
+
"appearanceTitle": "Appearance",
|
|
216
|
+
"appearanceDesc": "Choose the base colors and corner style for the app. Changes apply after you save.",
|
|
217
|
+
"themePreset": "Base theme",
|
|
218
|
+
"featuredThemes": "Featured themes",
|
|
219
|
+
"moreThemes": "Show more themes",
|
|
220
|
+
"hideThemes": "Show fewer themes",
|
|
221
|
+
"quickSettings": "Quick settings",
|
|
222
|
+
"accentColor": "Brand color",
|
|
223
|
+
"accentColorHint": "Replaces the theme's primary color. Leave it empty to use the theme color.",
|
|
224
|
+
"clearColor": "Clear brand color",
|
|
225
|
+
"radius": "Corner style",
|
|
226
|
+
"radiusDefault": "App default",
|
|
227
|
+
"radiusNone": "Square",
|
|
228
|
+
"radiusSmall": "Small",
|
|
229
|
+
"radiusMedium": "Medium",
|
|
230
|
+
"radiusLarge": "Large",
|
|
231
|
+
"advanced": "Fine-tune colors",
|
|
232
|
+
"advancedHide": "Close color settings",
|
|
233
|
+
"resetTheme": "Clear color adjustments",
|
|
234
|
+
"saveTheme": "Save changes",
|
|
235
|
+
"restoreDefaults": "Restore defaults",
|
|
236
|
+
"preview": "Preview",
|
|
237
|
+
"previewLight": "Light",
|
|
238
|
+
"previewDark": "Dark",
|
|
239
|
+
"previewApp": "Workspace",
|
|
240
|
+
"previewNav": "Overview",
|
|
241
|
+
"previewSettings": "Settings",
|
|
242
|
+
"previewHeading": "Theme preview",
|
|
243
|
+
"previewBody": "Colors and corner styles are shown here before you save.",
|
|
244
|
+
"previewPrimary": "Save",
|
|
245
|
+
"previewOutline": "Cancel",
|
|
246
|
+
"previewBadge": "Active",
|
|
247
|
+
"themeTokens": {
|
|
248
|
+
"background": "Background",
|
|
249
|
+
"card": "Card",
|
|
250
|
+
"foreground": "Foreground",
|
|
251
|
+
"mutedForeground": "Muted text",
|
|
252
|
+
"border": "Border",
|
|
253
|
+
"secondary": "Secondary",
|
|
254
|
+
"accent": "Accent",
|
|
255
|
+
"primary": "Primary",
|
|
256
|
+
"primaryForeground": "Primary text"
|
|
257
|
+
},
|
|
258
|
+
"infoTitle": "Site info",
|
|
259
|
+
"infoDesc": "Optional details used in meta tags, the footer, and links.",
|
|
260
|
+
"description": "Description",
|
|
261
|
+
"descriptionPlaceholder": "A short tagline for your site",
|
|
262
|
+
"supportEmail": "Support email",
|
|
263
|
+
"footerText": "Footer text",
|
|
264
|
+
"termsUrl": "Terms URL",
|
|
265
|
+
"privacyUrl": "Privacy URL",
|
|
266
|
+
"locale": "Default language",
|
|
267
|
+
"timezone": "Default timezone",
|
|
268
|
+
"opsTitle": "Operations",
|
|
269
|
+
"maintenance": "Maintenance mode",
|
|
270
|
+
"maintenanceDesc": "Show a maintenance page to non-admins.",
|
|
271
|
+
"allowSignup": "Allow public sign-up",
|
|
272
|
+
"allowSignupDesc": "Turn off to make the app invite-only.",
|
|
273
|
+
"save": "Save changes",
|
|
274
|
+
"saving": "Saving…",
|
|
275
|
+
"saved": "General settings saved.",
|
|
276
|
+
"saveError": "Failed to save settings."
|
|
277
|
+
},
|
|
278
|
+
"settings": {
|
|
279
|
+
"tab": "Authentication",
|
|
280
|
+
"title": "Settings",
|
|
281
|
+
"subtitle": "Which authentication features are enabled, and how they are configured.",
|
|
282
|
+
"authFeaturesTitle": "Authentication features",
|
|
283
|
+
"authFeaturesSubtitle": "Toggle sign-in methods and security features. Changes apply immediately.",
|
|
284
|
+
"serverConfigTitle": "Server configuration",
|
|
285
|
+
"serverConfigSubtitle": "Set through environment variables and applied at startup (read-only).",
|
|
286
|
+
"enabled": "Enabled",
|
|
287
|
+
"disabled": "Disabled",
|
|
288
|
+
"configuredVia": "Configured via {env}",
|
|
289
|
+
"manage": "Manage",
|
|
290
|
+
"saved": "Setting updated",
|
|
291
|
+
"saveFailed": "Failed to update setting",
|
|
292
|
+
"emailPassword": "Email & password",
|
|
293
|
+
"emailPasswordDesc": "Sign in with an email address and password.",
|
|
294
|
+
"emailVerification": "Email verification",
|
|
295
|
+
"emailVerificationDesc": "Require new sign-ups to confirm their address.",
|
|
296
|
+
"signupApproval": "Sign-up approval",
|
|
297
|
+
"signupApprovalDesc": "Require an administrator to approve new self-registered users. Disabling this only affects future registrations.",
|
|
298
|
+
"magicLink": "Magic link",
|
|
299
|
+
"magicLinkDesc": "Passwordless sign-in via an emailed link.",
|
|
300
|
+
"emailOtp": "Email one-time code",
|
|
301
|
+
"emailOtpDesc": "Passwordless sign-in with an emailed code.",
|
|
302
|
+
"username": "Username sign-in",
|
|
303
|
+
"usernameDesc": "Let users sign in with a username instead of an email.",
|
|
304
|
+
"multiSession": "Multi-account sessions",
|
|
305
|
+
"multiSessionDesc": "Let one browser stay signed into several accounts and switch between them.",
|
|
306
|
+
"phoneNumber": "Phone number",
|
|
307
|
+
"phoneNumberDesc": "Register and verify a phone number via SMS (configure a provider for real delivery).",
|
|
308
|
+
"apiKey": "API keys",
|
|
309
|
+
"apiKeyDesc": "Let users create personal API keys for programmatic access.",
|
|
310
|
+
"passkey": "Passkeys",
|
|
311
|
+
"passkeyDesc": "Let users register passkeys for passwordless sign-in.",
|
|
312
|
+
"organization": "Organizations",
|
|
313
|
+
"organizationDesc": "Multi-tenant organizations with members and email invitations.",
|
|
314
|
+
"oidcProvider": "OIDC provider",
|
|
315
|
+
"oidcProviderDesc": "Act as an identity provider so other apps can sign in with this one.",
|
|
316
|
+
"twoFactor": "Two-factor authentication",
|
|
317
|
+
"twoFactorDesc": "TOTP second factor with backup codes.",
|
|
318
|
+
"require2fa": "Require two-factor",
|
|
319
|
+
"require2faDesc": "Every user must enrol in 2FA after signing up before using the app.",
|
|
320
|
+
"socialProviders": "Social providers",
|
|
321
|
+
"socialProvidersDesc": "OAuth sign-in (Google, GitHub).",
|
|
322
|
+
"breachCheck": "Breached-password check",
|
|
323
|
+
"breachCheckDesc": "Reject passwords found in known breaches (Have I Been Pwned).",
|
|
324
|
+
"accountDeletion": "Account deletion",
|
|
325
|
+
"accountDeletionDesc": "Let users delete their own account.",
|
|
326
|
+
"auditLog": "Audit log",
|
|
327
|
+
"auditLogDesc": "Record security-relevant actions.",
|
|
328
|
+
"signInTitle": "Sign-in methods",
|
|
329
|
+
"signInSubtitle": "How users authenticate. Toggle methods on/off; social providers open a popup for credentials.",
|
|
330
|
+
"emailTitle": "Email",
|
|
331
|
+
"emailSubtitle": "Outgoing mail (SMTP) and the email-verification policy.",
|
|
332
|
+
"securityTitle": "Security & policy",
|
|
333
|
+
"securitySubtitle": "Second factor, breached-password rejection, account deletion, and audit logging.",
|
|
334
|
+
"advancedTitle": "Advanced",
|
|
335
|
+
"advancedSubtitle": "API keys, organizations, and acting as an OIDC identity provider.",
|
|
336
|
+
"socialTitle": "Social login",
|
|
337
|
+
"socialSubtitle": "Paste OAuth credentials to enable sign-in with a provider. Applied immediately — no restart. Secrets are stored encrypted.",
|
|
338
|
+
"smtpTitle": "SMTP (email delivery)",
|
|
339
|
+
"smtpSubtitle": "Outgoing mail for sign-in links, verification, and invitations. Applied immediately.",
|
|
340
|
+
"google": "Google",
|
|
341
|
+
"github": "GitHub",
|
|
342
|
+
"clientId": "Client ID",
|
|
343
|
+
"clientSecret": "Client secret",
|
|
344
|
+
"redirectUri": "Redirect URI",
|
|
345
|
+
"secretSet": "•••••••• (saved — leave blank to keep)",
|
|
346
|
+
"save": "Save",
|
|
347
|
+
"cancel": "Cancel",
|
|
348
|
+
"configure": "Configure",
|
|
349
|
+
"notConfigured": "Not configured",
|
|
350
|
+
"configuredOff": "Configured (off)",
|
|
351
|
+
"socialDialogDesc": "Paste the OAuth client ID and secret from the provider's console, then enable it. Applied immediately.",
|
|
352
|
+
"smtpEnabled": "Enabled",
|
|
353
|
+
"smtpHost": "Host",
|
|
354
|
+
"smtpPort": "Port",
|
|
355
|
+
"smtpUser": "Username",
|
|
356
|
+
"smtpPass": "Password",
|
|
357
|
+
"smtpFrom": "From address",
|
|
358
|
+
"smtpSecure": "TLS (secure)",
|
|
359
|
+
"addProvider": "Add provider",
|
|
360
|
+
"provider": "Provider",
|
|
361
|
+
"remove": "Remove",
|
|
362
|
+
"smtpConfigure": "SMTP settings",
|
|
363
|
+
"edit": "Edit",
|
|
364
|
+
"close": "Close",
|
|
365
|
+
"back": "Back",
|
|
366
|
+
"noProviders": "No providers added yet.",
|
|
367
|
+
"socialCardDesc": "Sign in with Google, GitHub, Apple and other OAuth providers."
|
|
368
|
+
},
|
|
369
|
+
"dashboard": {
|
|
370
|
+
"title": "Dashboard",
|
|
371
|
+
"welcome": "Welcome back, {name}.",
|
|
372
|
+
"yourRole": "Your role",
|
|
373
|
+
"signedInAs": "Signed in as",
|
|
374
|
+
"unverifiedUsers": "Unverified users"
|
|
375
|
+
},
|
|
376
|
+
"audit": {
|
|
377
|
+
"title": "Audit log",
|
|
378
|
+
"when": "When",
|
|
379
|
+
"actor": "Actor",
|
|
380
|
+
"action": "Action",
|
|
381
|
+
"target": "Target",
|
|
382
|
+
"ip": "IP",
|
|
383
|
+
"empty": "No audit entries.",
|
|
384
|
+
"loadFailed": "Failed to load audit log",
|
|
385
|
+
"total": "{count} entries",
|
|
386
|
+
"searchField": "Actor or target"
|
|
387
|
+
},
|
|
388
|
+
"users": {
|
|
389
|
+
"title": "Users",
|
|
390
|
+
"search": "Search by email…",
|
|
391
|
+
"name": "Name",
|
|
392
|
+
"email": "Email",
|
|
393
|
+
"role": "Role",
|
|
394
|
+
"status": "Status",
|
|
395
|
+
"active": "Active",
|
|
396
|
+
"banned": "Banned",
|
|
397
|
+
"makeUser": "Make user",
|
|
398
|
+
"makeAdmin": "Make admin",
|
|
399
|
+
"ban": "Ban",
|
|
400
|
+
"unban": "Unban",
|
|
401
|
+
"empty": "No users.",
|
|
402
|
+
"total": "{count} users",
|
|
403
|
+
"previous": "Previous",
|
|
404
|
+
"next": "Next",
|
|
405
|
+
"roleSet": "Role set to {role}",
|
|
406
|
+
"userBanned": "User banned",
|
|
407
|
+
"userUnbanned": "User unbanned",
|
|
408
|
+
"loadFailed": "Failed to load users",
|
|
409
|
+
"actionFailed": "Action failed",
|
|
410
|
+
"addUser": "Add user",
|
|
411
|
+
"createTitle": "Create user",
|
|
412
|
+
"password": "Password",
|
|
413
|
+
"create": "Create",
|
|
414
|
+
"cancel": "Cancel",
|
|
415
|
+
"close": "Close",
|
|
416
|
+
"roleAdmin": "Admin",
|
|
417
|
+
"roleUser": "User",
|
|
418
|
+
"roleModerator": "Moderator",
|
|
419
|
+
"userCreated": "User created",
|
|
420
|
+
"setPassword": "Set password",
|
|
421
|
+
"newPassword": "New password",
|
|
422
|
+
"save": "Save",
|
|
423
|
+
"passwordSet": "Password updated",
|
|
424
|
+
"delete": "Delete",
|
|
425
|
+
"deleteTitle": "Delete user",
|
|
426
|
+
"deleteConfirm": "Delete {email}? This cannot be undone.",
|
|
427
|
+
"userDeleted": "User deleted",
|
|
428
|
+
"confirmPassword": "Confirm password",
|
|
429
|
+
"confirmNewPassword": "Confirm new password",
|
|
430
|
+
"passwordMismatch": "Passwords do not match",
|
|
431
|
+
"edit": "Edit",
|
|
432
|
+
"editTitle": "Edit user",
|
|
433
|
+
"userUpdated": "User updated",
|
|
434
|
+
"impersonate": "Impersonate",
|
|
435
|
+
"banTitle": "Ban user",
|
|
436
|
+
"banReason": "Reason (optional)",
|
|
437
|
+
"banExpiryDays": "Expires in (days, optional)",
|
|
438
|
+
"banExpiry": "Ban expires",
|
|
439
|
+
"banPermanent": "Permanent ban",
|
|
440
|
+
"joined": "Joined",
|
|
441
|
+
"stopImpersonating": "Stop impersonating",
|
|
442
|
+
"impersonatingAs": "Impersonating {email}",
|
|
443
|
+
"manage": "Manage",
|
|
444
|
+
"revokeSession": "Revoke",
|
|
445
|
+
"verified": "Verified",
|
|
446
|
+
"unverified": "Unverified",
|
|
447
|
+
"sendVerification": "Send verification email",
|
|
448
|
+
"verificationSent": "Verification email sent",
|
|
449
|
+
"markVerified": "Mark verified",
|
|
450
|
+
"markedVerified": "Marked as verified",
|
|
451
|
+
"sendResetEmail": "Send password reset email",
|
|
452
|
+
"resetEmailSent": "Password reset email sent",
|
|
453
|
+
"sendVerificationOnCreate": "Send verification email",
|
|
454
|
+
"pendingApproval": "Pending approval",
|
|
455
|
+
"approve": "Approve sign-up",
|
|
456
|
+
"approved": "Sign-up approved"
|
|
457
|
+
},
|
|
458
|
+
"sessions": {
|
|
459
|
+
"title": "Active sessions",
|
|
460
|
+
"device": "Device",
|
|
461
|
+
"ip": "IP",
|
|
462
|
+
"since": "Since",
|
|
463
|
+
"revoke": "Revoke",
|
|
464
|
+
"unknown": "Unknown",
|
|
465
|
+
"empty": "No active sessions.",
|
|
466
|
+
"revoked": "Session revoked",
|
|
467
|
+
"loadFailed": "Failed to load sessions",
|
|
468
|
+
"revokeFailed": "Failed to revoke",
|
|
469
|
+
"status": "Status",
|
|
470
|
+
"current": "Current",
|
|
471
|
+
"signOutOthers": "Sign out other sessions",
|
|
472
|
+
"accountsTitle": "Signed-in accounts",
|
|
473
|
+
"switchAccount": "Switch",
|
|
474
|
+
"switchFailed": "Failed to switch account",
|
|
475
|
+
"othersRevoked": "Signed out other sessions",
|
|
476
|
+
"total": "{count} sessions"
|
|
477
|
+
},
|
|
478
|
+
"adminSessions": {
|
|
479
|
+
"title": "User sessions",
|
|
480
|
+
"user": "User",
|
|
481
|
+
"device": "Device",
|
|
482
|
+
"ip": "IP",
|
|
483
|
+
"since": "Since",
|
|
484
|
+
"expires": "Expires",
|
|
485
|
+
"impersonated": "Impersonated",
|
|
486
|
+
"revoke": "Revoke session",
|
|
487
|
+
"revokeAll": "Revoke all for user",
|
|
488
|
+
"unknown": "Unknown",
|
|
489
|
+
"empty": "No active sessions.",
|
|
490
|
+
"revoked": "Session revoked",
|
|
491
|
+
"allRevoked": "All sessions revoked for user",
|
|
492
|
+
"loadFailed": "Failed to load sessions",
|
|
493
|
+
"total": "{count} sessions"
|
|
494
|
+
},
|
|
495
|
+
"account": {
|
|
496
|
+
"title": "Account",
|
|
497
|
+
"profile": "Profile",
|
|
498
|
+
"name": "Name",
|
|
499
|
+
"username": "Username",
|
|
500
|
+
"phone": "Phone number",
|
|
501
|
+
"phoneCode": "Verification code",
|
|
502
|
+
"phoneSendCode": "Send code",
|
|
503
|
+
"phoneVerify": "Verify",
|
|
504
|
+
"phoneCodeSent": "Code sent",
|
|
505
|
+
"phoneVerified": "Phone verified",
|
|
506
|
+
"email": "Email",
|
|
507
|
+
"role": "Role",
|
|
508
|
+
"changePassword": "Change password",
|
|
509
|
+
"currentPassword": "Current password",
|
|
510
|
+
"newPassword": "New password",
|
|
511
|
+
"update": "Update password",
|
|
512
|
+
"updating": "Updating…",
|
|
513
|
+
"changed": "Password changed",
|
|
514
|
+
"changeFailed": "Failed to change password",
|
|
515
|
+
"nav": {
|
|
516
|
+
"profile": "Profile",
|
|
517
|
+
"security": "Security",
|
|
518
|
+
"connected": "Connected",
|
|
519
|
+
"sessions": "Sessions",
|
|
520
|
+
"apiKeys": "API keys",
|
|
521
|
+
"danger": "Danger zone"
|
|
522
|
+
},
|
|
523
|
+
"twoFactorTitle": "Two-factor authentication",
|
|
524
|
+
"twoFactorDesc": "Add a one-time code from your authenticator app at sign-in.",
|
|
525
|
+
"twoFactorOn": "Enabled",
|
|
526
|
+
"twoFactorOff": "Disabled",
|
|
527
|
+
"enable": "Enable",
|
|
528
|
+
"disable": "Disable",
|
|
529
|
+
"password": "Password",
|
|
530
|
+
"scanHint": "Add this to your authenticator app, then enter the 6-digit code.",
|
|
531
|
+
"setupKey": "Setup key (otpauth URI)",
|
|
532
|
+
"backupCodes": "Backup codes — store them somewhere safe",
|
|
533
|
+
"backupCodesHint": "Each code works once if you lose your authenticator. Save them now — they won't be shown again.",
|
|
534
|
+
"downloadBackupCodes": "Download",
|
|
535
|
+
"regenerateBackupCodes": "Regenerate backup codes",
|
|
536
|
+
"regenerateBackupCodesHint": "Generating a new set invalidates your previous backup codes.",
|
|
537
|
+
"backupCodesRegenerated": "New backup codes generated",
|
|
538
|
+
"code": "Verification code",
|
|
539
|
+
"verify": "Verify",
|
|
540
|
+
"twoFactorEnabled": "Two-factor enabled",
|
|
541
|
+
"twoFactorDisabled": "Two-factor disabled",
|
|
542
|
+
"connectedTitle": "Connected accounts",
|
|
543
|
+
"connectedDesc": "Link social accounts to sign in with them.",
|
|
544
|
+
"connect": "Connect",
|
|
545
|
+
"disconnect": "Disconnect",
|
|
546
|
+
"connected": "Connected",
|
|
547
|
+
"notConnected": "Not connected",
|
|
548
|
+
"disconnected": "Disconnected",
|
|
549
|
+
"dangerTitle": "Delete account",
|
|
550
|
+
"dangerDesc": "Permanently delete your account and all associated data.",
|
|
551
|
+
"deleteAccount": "Delete account",
|
|
552
|
+
"deleteAccountConfirm": "This permanently deletes your account and cannot be undone. Enter your password to confirm.",
|
|
553
|
+
"accountDeleted": "Account deleted",
|
|
554
|
+
"save": "Save changes",
|
|
555
|
+
"saved": "Profile updated",
|
|
556
|
+
"saveFailed": "Failed to save profile",
|
|
557
|
+
"saving": "Saving…",
|
|
558
|
+
"changeEmail": "Change email",
|
|
559
|
+
"emailChanged": "Email address updated",
|
|
560
|
+
"emailChangePending": "Check your current inbox to approve the change",
|
|
561
|
+
"verified": "Verified",
|
|
562
|
+
"unverified": "Unverified"
|
|
563
|
+
}
|
|
564
|
+
}
|