PSA/server/public/locales/en/msp/profile.json
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

667 lines
24 KiB
JSON

{
"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"
}
}
}