357 lines
15 KiB
TypeScript
357 lines
15 KiB
TypeScript
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;
|