import type { MessageSchema } from './es'; const en: MessageSchema = { nav: { dashboard: 'Dashboard', clients: 'OAuth Clients', tokens: 'Personal Access Tokens', authorizedApps: 'Authorized Apps', security: 'Security', users: 'Users', analytics: 'Analytics', auditLog: 'Audit log', apiDocs: 'API Docs', logout: 'Sign out', }, common: { loading: 'Loading…', creating: 'Creating…', create: 'Create', save: 'Save', cancel: 'Cancel', close: 'Close', edit: 'Edit', delete: 'Delete', none: '(none)', }, login: { title: 'Sign in', subtitle: 'OAuth2 server — admin panel.', email: 'Email', password: 'Password', submit: 'Sign in', submitting: 'Signing in…', noAccount: "Don't have an account?", signUp: 'Sign up', invalidCredentials: 'Invalid credentials.', twoFactorTitle: 'Two-factor verification', twoFactorSubtitle: 'Enter the code from your authenticator app (or a recovery code).', twoFactorCode: 'Code', twoFactorSubmit: 'Verify', invalidTwoFactorCode: 'Invalid code.', backToLogin: 'Back to sign in', forgotPassword: 'Forgot your password?', }, forgotPassword: { title: 'Reset password', subtitle: "Enter your email and we'll send you a link to choose a new password.", email: 'Email', submit: 'Send link', submitting: 'Sending…', sent: "If an account exists with that email, we've sent a link to reset the password. Check your inbox.", backToLogin: 'Back to sign in', }, resetPassword: { title: 'Choose a new password', subtitle: "Almost done — confirm the new password for your account.", password: 'New password', passwordConfirm: 'Confirm password', submit: 'Reset password', submitting: 'Resetting…', success: 'Your password has been reset. You can sign in with the new one now — we closed your active sessions for security.', goToLogin: 'Go to sign in', invalidLink: 'This link is invalid or has expired. Request a new one.', missingParams: 'This link is missing information. Request a new one from "Forgot your password?".', }, register: { title: 'Create account', name: 'Name', email: 'Email', password: 'Password', passwordConfirm: 'Confirm password', submit: 'Create account', submitFirstUser: 'Create admin account', submitting: 'Creating…', haveAccount: 'Already have an account?', signIn: 'Sign in', firstUserBanner: "There are no users yet. This account will be the administrator, with immediate access (no approval needed).", pendingTitle: 'Account created', pendingBody: 'An administrator has to approve your account before you can sign in. You may be notified outside the app once it is ready.', backToLogin: 'Back to sign in', }, dashboard: { greeting: 'Hi, {name}', subtitle: "This is the OAuth2 server's admin panel.", clientsTitle: 'OAuth Clients', clientsDesc: 'Register apps (Authorization Code+PKCE, Client Credentials or Password Grant).', tokensTitle: 'Personal Access Tokens', tokensDesc: 'Generate tokens for direct API access, like API keys.', appsTitle: 'Authorized Apps', appsDesc: "Third-party apps you've granted access to your account.", securityTitle: 'Security', securityDesc: 'Enable two-factor authentication (2FA) for your account.', usersTitle: 'Users', usersDesc: 'Create, edit role/status and delete accounts (admins only).', analyticsTitle: 'Analytics', analyticsDesc: 'Active sessions, logins by app and most active users (admins only).', apiTitle: 'REST API', apiDesc: 'This server exposes the {resource} resource (scopes {read}/{write}) so third-party apps can manage users via OAuth2. Requires a Passport access token. Interactive docs at {link}.', }, clients: { title: 'OAuth Clients', subtitle: 'Registered apps that can request tokens from this server.', secretWarning: "Save this client secret now, you won't be able to see it again:", clientIdLabel: 'client_id:', clientSecretLabel: 'client_secret:', newClient: 'New client', name: 'Name', grantType: 'Grant type', grantAuthCode: 'Authorization Code + PKCE', grantClientCredentials: 'Client Credentials', grantPassword: 'Password Grant', redirectUris: 'Redirect URIs (comma-separated)', confidentialLabel: 'Confidential client (with secret). Uncheck for a public client that only uses PKCE.', create: 'Create client', empty: "You haven't created any clients yet.", revoke: 'Revoke', revokeConfirm: 'Revoke client "{name}"? Its tokens will stop working.', clientIdShort: 'client_id', redirectLabel: 'redirect', webhooksTitle: 'Webhooks', hideWebhooks: 'Hide webhooks', webhooksDesc: 'Outgoing notifications to your app when something relevant happens — no polling needed.', webhookSecretWarning: 'Save this secret now, it cannot be shown again. Use it to verify the HMAC-SHA256 signature in the X-Webhook-Signature header.', webhookSecretLabel: 'secret:', webhookPaused: 'paused', lastDelivery: 'last delivery', pending: 'pending', pause: 'Pause', resume: 'Resume', viewHistory: 'View history', hideHistory: 'Hide history', noDeliveries: 'No deliveries for this webhook yet.', attempts: 'attempts: {count}', retryDelivery: 'Retry', retrying: 'Retrying…', noWebhooks: "You haven't registered any webhooks for this app yet.", webhookUrl: 'Webhook URL', addWebhook: 'Add webhook', webhookDeleteConfirm: 'Delete the webhook "{url}"?', eventTokenRevoked: 'Token revoked', eventUserDeactivated: 'User deactivated', rotateSecret: 'Rotate secret', rotateSecretConfirm: 'Rotate the secret for "{name}"? The current secret will keep working for 48 more hours so integrations that haven\'t updated yet don\'t break.', rotateSecretFailed: 'Could not rotate the secret.', previousSecretStillValid: 'The previous secret stays valid until {date}.', }, tokens: { title: 'Personal Access Tokens', subtitle: 'Direct API access tokens, without going through the authorize flow (like an API key).', tokenWarning: "Save this token now, you won't be able to see it again:", newToken: 'New token', name: 'Name', namePlaceholder: 'My script', scopes: 'Scopes', create: 'Create token', empty: "You haven't created any tokens yet.", revoke: 'Revoke', revokeConfirm: 'Revoke token "{name}"?', scopesLabel: 'scopes', }, authorizedApps: { title: 'Authorized Apps', subtitle: "Third-party apps you've granted access to your account.", empty: "You haven't authorized any app yet.", revoke: 'Revoke access', revokeConfirm: 'Revoke access for "{name}"?', scopesLabel: 'scopes', }, authorize: { title: 'Authorize application', wantsAccess: '{client} wants to access your account ({email}) with the following permissions:', noScopes: 'No additional permissions requested (basic access).', approve: 'Authorize', cancel: 'Cancel', notFoundTitle: 'Request not found', notFoundBody: 'This screen only works when you arrive here redirected by a client application via {path}. Try again from that app.', goDashboard: 'Go to dashboard', }, adminUsers: { title: 'Users', subtitle: 'Create, edit role/status and delete accounts.', newUser: 'New user', name: 'Name', email: 'Email', password: 'Password', role: 'Role', roleUser: 'User', roleAdmin: 'Admin', create: 'Create user', colName: 'Name', colEmail: 'Email', colRole: 'Role', colStatus: 'Status', active: 'Active', inactive: 'Deactivated', noRole: '(no role)', edit: 'Edit', delete: 'Delete', deleteConfirm: "Delete user \"{name}\"? They'll go to the trash and can be restored.", deleteFailed: 'Could not delete the user.', newPassword: 'New password', noChange: '(no change)', save: 'Save', cancel: 'Cancel', appRolesTitle: 'Roles per app', appRolesDesc: 'The global role above rules this panel. Here you set what role {name} has inside each app when that app asks for their user via API.', noAppRoles: 'No roles assigned in any app yet.', chooseApp: 'Choose app…', assign: 'Assign', assignFailed: 'Could not assign the role.', trashTitle: 'Trash', viewTrash: 'View trash', viewActive: 'View active', trashEmpty: 'No deleted users.', deletedAt: 'Deleted on {date}', restore: 'Restore', restoreFailed: 'Could not restore the user.', forceDelete: 'Delete permanently', forceDeleteConfirm: 'Permanently delete "{name}"? This action cannot be undone.', forceDeleteFailed: 'Could not permanently delete the user.', pendingTitle: 'Pending', viewPending: 'Pending', pendingEmpty: 'No registrations pending approval.', registeredAt: 'Registered on {date}', approve: 'Approve', approveFailed: 'Could not approve the user.', reject: 'Reject', rejectConfirm: 'Reject the registration for "{name}"? It will go to the trash and can be restored later.', rejectFailed: 'Could not reject the registration.', sessionsTitle: 'Active sessions', sessionsDesc: 'Active OAuth tokens for this user — apps with access to their account right now.', noSessions: 'No active sessions.', sessionUnknownClient: '(deleted app)', revokeSession: 'Revoke', revokeSessionConfirm: 'Revoke the session for "{name}"? That app will lose access.', revokeAllSessions: 'Revoke all', revokeAllSessionsConfirm: 'Revoke all active sessions for "{name}"? All their OAuth tokens will be revoked.', }, analytics: { title: 'Analytics', subtitle: 'Sessions, logins by app and user activity.', last7: 'Last 7 days', last30: 'Last 30 days', last90: 'Last 90 days', exportPdf: 'Export PDF', totalUsers: 'Total users', activeSessions: 'Active sessions', activeSessionsHint: 'valid OAuth tokens', loginsToday: 'Logins today', logins7d: 'Logins last 7 days', loginsByDay: 'Logins by day', appsOAuth: 'Apps (OAuth)', panelAdmin: 'Admin panel', loginsByApp: 'Logins by app', topUsers: 'Most active users', noAppLogins: 'No app logins in this period yet.', noUserActivity: 'No activity in this period yet.', recentActivity: 'Recent activity', hide: 'Hide', viewAll: 'View all', colUser: 'User', colApp: 'App', colType: 'Type', colIp: 'IP', colWhen: 'When', serviceNoUser: '(service, no user)', deletedApp: '(deleted app)', recentCount: '{count} recent events — click "View all" for the full table.', chartAriaLabel: 'Logins by day, stacked by type', tooltipAppLabel: 'Apps (OAuth):', tooltipSessionLabel: 'Admin panel:', barAriaLabel: '{date}: {oauth} app logins, {session} to admin panel', loginFailureRate: 'Login failure rate', loginFailureRateHint: '{count} failed in the last 7 days', oauthApprovalRate: 'OAuth approval rate', oauthApprovalRateHint: '{approved}/{attempted} in this period', funnelTitle: 'OAuth authorization funnel', funnelEmpty: 'No authorization attempts in this period yet.', colClient: 'Client', colAttempted: 'Attempts', colApproved: 'Approved', colDenied: 'Denied', colApprovalRate: 'Approval', activeTokensByClient: 'Active tokens by client', noActiveTokens: 'No active tokens right now.', scopeUsageTitle: 'Scope usage', noScopeUsage: 'No scopes granted in this period yet.', }, auditLog: { title: 'Audit log', subtitle: 'Permission changes, user and OAuth client create/delete events.', allSubjects: 'All subjects', subjectUser: 'Users', subjectClient: 'OAuth clients', allActions: 'All actions', empty: 'No events recorded yet.', colWhen: 'When', colActor: 'Who', colAction: 'Action', colSubject: 'Subject', colDetails: 'Details', colIp: 'IP', systemActor: '(system)', fieldChanged: '{field} changed', prevPage: 'Previous', nextPage: 'Next', pageInfo: 'Page {page} of {lastPage} — {total} events', actions: { userCreated: 'User created', userUpdated: 'User updated', userDeleted: 'User deleted', userRestored: 'User restored', userForceDeleted: 'User permanently deleted', userApproved: 'User approved', appRoleAssigned: 'App role assigned', appRoleRevoked: 'App role revoked', clientCreated: 'OAuth client created', clientRevoked: 'OAuth client revoked', twoFactorEnabled: '2FA enabled', twoFactorDisabled: '2FA disabled', twoFactorRecoveryRegenerated: 'Recovery codes regenerated', sessionRevoked: 'Session revoked', sessionsRevokedAll: 'All sessions revoked', webhookCreated: 'Webhook created', webhookDeleted: 'Webhook deleted', secretRotated: 'Secret rotated', passwordReset: 'Password reset', }, }, security: { title: 'Security', subtitle: 'Two-factor authentication (2FA) for your account.', enabled: '2FA enabled', enabledDesc: 'Your account asks for a code from your authenticator app every time you sign in.', disabled: '2FA disabled', disabledDesc: 'Add an extra layer of security: a code from your phone in addition to your password.', enable: 'Enable 2FA', disable: 'Disable', disableConfirm: 'Confirm disable', regenerateCodes: 'Regenerate recovery codes', confirmPassword: 'Confirm your password', confirm: 'Confirm', setupTitle: 'Scan the QR code', setupDesc: 'Use Google Authenticator, Authy, or any TOTP-compatible app.', manualEntry: "Can't scan? Enter this code manually:", enterCode: '6-digit code', invalidCode: 'Invalid code. Try again.', invalidPassword: 'Incorrect password.', setupFailed: 'Could not start 2FA setup.', qrAlt: 'QR code to set up 2FA', recoveryCodesTitle: 'Save these recovery codes', recoveryCodesWarning: "Each one works once. Use them if you lose access to your authenticator app. They won't be shown again.", }, }; export default en;