{ "profile": { "pageTitle": "Your Profile", "tabs": { "profile": "Profile", "security": "Security", "sso": "Single Sign-On", "apiKeys": "API Keys", "notifications": "Notifications", "calendar": "Calendar", "keyboardShortcuts": "Keyboard Shortcuts" }, "basicInfo": { "title": "Basic Information" }, "fields": { "firstName": { "label": "First Name *" }, "lastName": { "label": "Last Name *" }, "email": { "label": "Email *" }, "phoneNumber": { "label": "Phone Number" }, "timeZone": { "label": "Time Zone" } }, "actions": { "saveChanges": "Save Changes" }, "notifications": { "title": "Notification Preferences", "viewSwitcher": { "email": "Email", "internal": "Internal" } }, "loading": "Loading profile...", "messages": { "success": { "profileUpdated": "Profile updated successfully" }, "error": { "userNotFound": "User not found", "fillRequiredFields": "Please fill in all required fields", "loadFailed": "Failed to load profile", "saveFailed": "Failed to save profile", "errorPrefix": "Error: {{error}}" } }, "validation": { "firstNameRequired": "First name is required", "lastNameRequired": "Last name is required" }, "changePassword": { "title": "Change Password", "current": "Current Password", "new": "New Password", "confirm": "Confirm New Password", "validationFailed": "Password does not meet all requirements", "requirements": "Password must be at least 8 characters", "submit": "Change Password", "success": "Password changed successfully", "error": "Failed to change password", "passwordMismatch": "New passwords do not match", "unknownError": "An error occurred while changing password" }, "loadingStates": { "sso": { "title": "Single Sign-On", "description": "Loading SSO settings..." }, "calendar": { "title": "Calendar", "description": "Loading calendar settings..." } } }, "security": { "title": "Security Settings", "tabs": { "roles": "Roles", "sessions": "Sessions", "sso": "Single Sign-On", "permissions": "Permissions", "userRoles": "User Roles", "policies": "Policies", "apiKeys": "API Keys", "webhooks": "Webhooks" }, "loading": { "roles": "Loading role configuration...", "permissions": "Loading permissions configuration...", "userRoles": "Loading user role configuration...", "policies": "Loading policy configuration...", "apiKeys": "Loading API key configuration...", "webhooks": "Loading webhook configuration...", "sso": "Loading SSO management tools...", "sessions": "Loading active sessions..." }, "userRoles": { "title": "Assign Roles to Users", "description": { "msp": "Manage user role assignments for MSP users", "client": "Manage user role assignments for Client Portal users" }, "viewSwitcher": { "msp": "MSP", "clientPortal": "Client Portal" }, "showInactive": "Show Inactive Users", "fields": { "selectUser": "Select User", "selectRole": "Select Role" }, "actions": { "assignRole": "Assign Role" }, "table": { "user": "User", "email": "Email", "roles": "Roles", "actions": "Actions" }, "unnamedUser": "Unnamed User", "noRolesAssigned": "No roles assigned", "removeRole": "Remove {{role}}", "emptyState": { "noUsers": "No {{type}} users found", "inactiveHidden": "(inactive users hidden)" }, "inactiveTag": "(Inactive)", "messages": { "success": { "roleAssigned": "Role assigned successfully", "roleRemoved": "Role removed successfully" }, "error": { "assignFailed": "Failed to assign role. Please try again.", "removeFailed": "Failed to remove role. Please try again.", "permissionDenied": "You do not have permission to change user roles." } } }, "sessions": { "title": "All User Sessions", "filters": { "search": "Search", "searchPlaceholder": "Search by name, email, device, or IP...", "user": "User", "allUsers": "All Users", "loginMethod": "Login Method", "allMethods": "All Methods", "userType": "User Type", "allTypes": "All Types", "from": "From", "to": "To", "selectDate": "Select date", "reset": "Reset" }, "loginMethods": { "password": "Password", "google": "Google OAuth", "microsoft": "Microsoft OAuth", "keycloak": "Keycloak" }, "userTypes": { "internal": "Internal", "client": "Client" }, "session": { "yourSession": "Your Session", "unknownDevice": "Unknown Device", "lastActive": "Last active {{time}}", "logout": "Logout", "revoke": "Revoke", "revoking": "Revoking..." }, "oauthWarning": "Revoking this session will not revoke {{provider}} OAuth access. Revoke access from your {{provider}} account settings.", "confirmLogout": "Are you sure you want to logout from this device?", "messages": { "loadFailed": "Failed to load sessions", "loggingOut": "Logging out...", "revoked": "Session revoked successfully", "revokeFailed": "Failed to revoke session" }, "emptyState": { "loading": "Loading sessions...", "noMatch": "No sessions match your search", "noSessions": "No active sessions found" }, "subtitle_one": "{{sessionCount}} active session across {{userCount}} user", "subtitle_other": "{{sessionCount}} active sessions across {{userCount}} users" }, "webhooks": { "title": "Outbound Webhooks", "description": "Create signed ticket lifecycle subscriptions, filter them to specific ticket IDs, inspect delivery history, and rotate secrets without leaving settings.", "newWebhook": "New Webhook", "tabs": { "configuration": "Configuration", "deliveries": "Deliveries", "inbound": "Inbound", "outbound": "Outbound" }, "inbound": { "title": "Inbound Webhooks", "description": "Accept authenticated requests from external systems and dispatch them to direct actions or workflows.", "placeholder": "Configure incoming webhook endpoints that verify requests, deduplicate deliveries, and dispatch to actions or workflows.", "newWebhook": "New Webhook", "list": { "title": "Configured Inbound Webhooks", "loading": "Loading…", "configuredCount": "{{count}} configured", "empty": "No inbound webhooks configured yet.", "columns": { "name": "Name", "handler": "Handler", "lastDelivery": "Last Delivery", "active": "Active", "actions": "Actions" } }, "handlers": { "directAction": "Direct action", "workflow": "Workflow" }, "status": { "active": "Active", "inactive": "Inactive" }, "messages": { "loadFailed": "Failed to load inbound webhooks.", "nameRequired": "Name is required.", "slugRequired": "Slug is required.", "actionRequired": "Select an action before saving.", "workflowRequired": "Select a workflow before saving.", "missingRequiredFields": "Map a value for required fields: {{fields}}" }, "dialog": { "createTitle": "Create Inbound Webhook", "editTitle": "Edit Inbound Webhook", "cancel": "Cancel", "create": "Create Webhook", "save": "Save Changes", "saveUnavailable": "Continue" }, "identity": { "title": "Identity", "help": "Name the webhook and choose the URL-safe slug used in its receiver endpoint.", "name": "Name", "namePlaceholder": "RMM critical alerts", "slug": "Slug", "slugPlaceholder": "rmm-critical-alerts", "description": "Description", "descriptionPlaceholder": "Optional notes about the source system and payload." }, "auth": { "title": "Auth", "help": "Choose how incoming requests prove they are allowed to use this endpoint.", "method": "Auth Method", "types": { "hmacSha256": "HMAC-SHA256", "bearer": "Bearer token", "ipAllowlist": "IP allowlist", "pathToken": "Shared secret in path" }, "signatureHeader": "Signature Header", "signatureHeaderPlaceholder": "X-Alga-Signature", "bearerToken": "Bearer Token", "bearerTokenPlaceholder": "Paste token or leave blank to generate one", "secretUnchangedPlaceholder": "Leave blank to keep the current secret", "ipCidrs": "Allowed IPs / CIDRs", "ipCidrsPlaceholder": "203.0.113.10\n198.51.100.0/24", "queryParam": "Query Parameter", "queryParamPlaceholder": "token", "pathToken": "Path Token", "pathTokenPlaceholder": "Paste token or leave blank to generate one" }, "secret": { "label": "Webhook secret", "warning": "This value is shown only now. Store it in the source system before you close this dialog.", "copy": "Copy", "download": "Download as .txt", "close": "Close" }, "idempotency": { "title": "Idempotency", "help": "Use a stable key to detect duplicate deliveries inside the configured window.", "source": "Key Source", "types": { "header": "HTTP header", "jsonata": "JSONata expression" }, "headerName": "Header Name", "headerNamePlaceholder": "X-Idempotency-Key", "jsonataExpression": "JSONata Expression", "jsonataExpressionPlaceholder": "alert.id", "windowSeconds": "Duplicate Window (seconds)" }, "active": { "title": "Active State", "help": "Pause the endpoint without deleting its URL, mappings, or delivery history.", "toggle": "Webhook is active", "autoDisabled": "Auto-disabled at {{date}} after repeated failures.", "updateFailed": "Failed to update inbound webhook state." }, "handler": { "title": "Handler", "help": "Choose what Alga should do after the request is verified and deduplicated.", "type": "Handler Type", "types": { "directAction": "Direct action", "workflow": "Workflow" }, "directActionTitle": "Direct action", "directActionHelp": "Select an inbound action and map payload fields to its target fields.", "action": "Action", "actionPlaceholder": "Select an action", "actionEmpty": "No inbound actions are registered. Ensure the server has bootstrapped the action registry before saving.", "targetFields": "Target fields", "required": "Required", "optional": "Optional", "mappingPlaceholder": "Type a JSONata expression, e.g. payload.field", "workflowTitle": "Workflow", "workflowHelp": "Select a workflow to start with the normalized webhook envelope.", "workflow": "Workflow", "workflowPlaceholder": "Select a workflow", "workflowEmpty": "No workflows are visible in this tenant. Publish or unhide a workflow to use the workflow handler.", "envelopeTitle": "Workflow input envelope", "fieldTypes": { "string": "string", "int": "integer", "number": "number", "boolean": "boolean", "enum": "enum", "json": "json", "ref": "reference" } }, "sample": { "title": "Sample payload", "help": "Capture the next verified request for mapping autocomplete.", "createFirst": "Save the webhook before capturing a sample request.", "captureButton": "Capture sample request", "captureActive": "Capture window active until {{expiresAt}}.", "sampleAvailable": "Sample payload captured.", "noSample": "No sample captured yet.", "captureFailed": "Failed to enable sample capture." }, "sampleTree": { "title": "Sample paths", "help": "Click a path to insert it into {{field}}.", "focusHelp": "Focus a mapping field, then click a path to insert it.", "empty": "Capture a sample payload to browse fields." }, "mapping": { "modeStatic": "Static value", "modeExpression": "Map from payload", "unknownReference": "unknown reference", "loading": "Loading…", "errors": { "INVALID_INT": "Value \"{{value}}\" must be an integer.", "INVALID_NUMBER": "Value \"{{value}}\" must be a number.", "INVALID_BOOLEAN": "Value must be \"true\" or \"false\".", "INVALID_JSON": "Value must be valid JSON." } }, "deliveryLog": { "title": "Delivery log", "help": "Recent verified deliveries for this inbound webhook.", "empty": "No deliveries recorded yet.", "loadFailed": "Failed to load inbound webhook deliveries.", "pageSummary": "Page {{page}} of {{total}}", "durationMs": "{{duration}} ms", "allStatuses": "All Statuses", "columns": { "received": "Received", "status": "Status", "response": "Response", "duration": "Duration", "actions": "Actions" }, "view": "View", "status": { "pending": "pending", "dispatched": "dispatched", "duplicate": "duplicate", "failed": "failed" } }, "deliveryDetail": { "title": "Delivery detail", "close": "Close", "replay": "Replay", "replayConfirm": "Re-dispatch this delivery through the current webhook configuration? Any side effects (ticket creation, status changes, etc.) will run again.", "replayFailed": "Failed to replay delivery.", "received": "Received", "status": "Status", "responseStatus": "Response status", "duration": "Duration", "sections": { "headers": "Request headers", "requestBody": "Request body", "responseBody": "Response body", "handlerOutcome": "Handler outcome" } }, "test": { "openButton": "Send test", "title": "Send Test Request", "body": "Request Body JSON", "headers": "Headers", "cancel": "Cancel", "send": "Send Test", "sendFailed": "Failed to send inbound webhook test." } }, "stats": { "total": "Total webhooks", "active": "Active", "autoDisabled": "Auto-disabled" }, "secret": { "label": "Signing secret", "warning": "This value is shown only now. Store it in the receiver before you navigate away.", "copy": "Copy", "copied": "Signing secret copied to clipboard", "copyFailed": "Failed to copy signing secret to clipboard", "close": "Close", "download": "Download as .txt" }, "form": { "createTitle": "Create Webhook", "editTitle": "Edit Webhook", "helper": "Retry config is stored as JSON; delivery cadence still uses the platform's standard backoff schedule in v1.", "name": "Name", "namePlaceholder": "Ticket assignment feed", "url": "URL", "urlPlaceholder": "https://example.com/hooks/alga", "events": "Events", "customHeaders": "Custom Headers", "customHeadersPlaceholder": "Authorization: Bearer abc123\nX-Source: alga-psa", "ticketFilter": "Ticket Filter", "ticketFilterPlaceholder": "One ticket UUID per line. Leave blank to receive all matching ticket events.", "retryConfig": "Retry Config JSON", "verifySsl": "Verify SSL certificates", "webhookActive": "Webhook is active", "save": "Save Changes", "saving": "Saving…", "create": "Create Webhook", "clear": "Clear", "delete": "Delete", "payloadFields": "Delivered fields", "payloadFieldsHelp": "All fields are sent by default. Uncheck to exclude a field from delivery. The entity correlation key (e.g. ticket_id) is always included.", "payloadFieldsSelectAll": "Select all", "payloadFieldsClear": "Clear" }, "list": { "title": "Configured Webhooks", "loading": "Loading…", "configuredCount": "{{count}} configured", "empty": "No webhooks configured yet.", "columns": { "name": "Name", "status": "Status", "lastDelivery": "Last Delivery", "success": "Success", "actions": "Actions" }, "actions": { "selected": "Selected", "manage": "Manage", "pause": "Pause", "resume": "Resume", "view": "View", "edit": "Edit" } }, "detail": { "summary": "{{total}} deliveries, {{successful}} successful, {{failed}} failed.", "sendTest": "Send Test", "sending": "Sending…", "rotateSecret": "Rotate Secret", "rotating": "Rotating…", "back": "Back to webhooks" }, "deliveries": { "title": "Delivery History", "page": "Page {{page}} of {{total}}", "empty": "No deliveries recorded yet.", "columns": { "event": "Event", "status": "Status", "attempted": "Attempted", "response": "Response", "action": "Action" }, "testBadge": "Test delivery", "attempt": "Attempt {{number}}", "noResponseCode": "n/a", "noResponseBody": "No response body captured.", "retry": "Retry", "previous": "Previous", "next": "Next" }, "messages": { "loadFailed": "Failed to load webhook settings.", "loadDeliveriesFailed": "Failed to load webhook deliveries.", "saveFailed": "Failed to save webhook.", "createSuccess": "Webhook created.", "updateSuccess": "Webhook updated.", "deleteConfirm": "Delete webhook \"{{name}}\"?", "deleteSuccess": "Webhook deleted.", "deleteFailed": "Failed to delete webhook.", "testSuccess": "Test sent successfully ({{statusCode}}).", "testFailed": "Test failed: {{message}}", "testRunFailed": "Failed to send webhook test.", "unknownError": "Unknown error", "secretRotated": "Signing secret rotated.", "rotateFailed": "Failed to rotate webhook secret.", "resumed": "Webhook resumed.", "paused": "Webhook paused.", "stateChangeFailed": "Failed to update webhook state.", "retryQueued": "Retry queued for event {{eventId}}.", "retryFailed": "Failed to retry delivery.", "invalidHeaderLine": "Invalid header line: \"{{line}}\"", "invalidRetryConfig": "Retry config must be a JSON object" }, "common": { "never": "Never" }, "health": { "healthy": "healthy", "failing": "failing", "disabled": "disabled" }, "deliveryStatus": { "delivered": "delivered", "retrying": "retrying", "abandoned": "abandoned", "pending": "pending" } }, "apiKeys": { "rateLimit": { "columnTitle": "Rate Limit", "loading": "Loading…", "summary": "{{maxTokens}} burst / {{refillPerMin}} per min", "source": "Source: {{label}}", "sourceLabels": { "key": "Override", "tenant": "Tenant default", "default": "System default" }, "remaining": " • Remaining: {{remaining}}/{{maxTokens}}", "remainingUnavailable": " • Remaining: unavailable", "actions": { "edit": "Edit", "override": "Override", "save": "Save", "cancel": "Cancel", "reset": "Reset" }, "errors": { "saveFailed": "Failed to save API rate limit override.", "clearFailed": "Failed to clear API rate limit override." } }, "generate": { "title": "Generate API Key", "description": "Description", "descriptionPlaceholder": "e.g., Development API Key", "expiration": "Expiration Date (Optional)", "submit": "Generate New API Key" }, "list": { "title": "Your API Keys", "searchPlaceholder": "Search by description", "filters": { "allStatuses": "All Statuses", "active": "Active", "inactive": "Inactive", "lastUsedAfter": "Last used after", "expiresBefore": "Expires before", "reset": "Reset" }, "columns": { "description": "Description", "created": "Created", "lastUsed": "Last Used", "expires": "Expires", "status": "Status", "actions": "Actions" }, "never": "Never", "status": { "active": "Active", "inactive": "Inactive" }, "deactivate": "Deactivate" }, "newKeyDialog": { "title": "API Key Generated", "warning": "Please copy your API key now. For security reasons, it will not be shown again.", "copy": "Copy to Clipboard", "download": "Download as .txt", "copySuccess": "API key copied to clipboard!", "copyFailed": "Failed to copy API key to clipboard", "downloadFailed": "Failed to download API key" } } }, "platformUpdates": { "detail": { "back": "Back", "labels": { "info": "Info", "warning": "Warning", "destructive": "Critical", "success": "Success", "default": "Notice" } } }, "connectSso": { "verify": { "title": "Secure your account with SSO", "description": "Link Azure AD or Google Workspace to reuse organizational policies and skip local two-factor prompts.", "signedInAs": "Signed in as", "currentPassword": "Current password", "twoFactorCode": "Two-factor code", "twoFactorPlaceholder": "123456", "verifyCredentials": "Verify Credentials", "verifying": "Verifying...", "reset": "Reset", "linkedSuccess": "Provider linked successfully.", "credentialsVerified": "Credentials verified. Choose a provider below to finish linking your account.", "verifyFailed": "Unable to verify credentials.", "verifyBeforeProvider": "Verify your password (and two-factor code if required) before connecting a provider." }, "providers": { "title": "Connect a provider", "description": "Choose a provider to finish the SSO link. You'll be redirected through the provider's login flow.", "noneConfigured": "No SSO providers are configured for this environment. Ask your administrator to configure Google or Microsoft credentials.", "notConfigured": "Not configured", "branding": { "google": "Continue with Google", "microsoft": "Continue with Microsoft", "default": "Continue" } }, "linked": { "title": "Linked accounts", "description": "We'll refresh the link the next time you sign in through a connected provider.", "empty": "No SSO providers linked yet. Complete the steps above to connect one.", "linkedAt": "Linked {{date}}", "lastUsed": "Last used {{date}}", "notUsedYet": "Not used yet" } } }