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
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
1991 lines
77 KiB
JSON
1991 lines
77 KiB
JSON
{
|
||
"escalationManager": {
|
||
"unsavedChanges_one": "{{count}} unsaved change",
|
||
"unsavedChanges_other": "{{count}} unsaved changes"
|
||
},
|
||
"page": {
|
||
"title": "Admin Settings"
|
||
},
|
||
"tabs": {
|
||
"general": "General",
|
||
"experimentalFeatures": "Experimental Features",
|
||
"clientPortal": "Client Portal",
|
||
"users": "Users",
|
||
"teams": "Teams",
|
||
"language": "Language",
|
||
"ticketing": "Ticketing",
|
||
"projects": "Projects",
|
||
"interactions": "Interactions",
|
||
"notifications": "Notifications",
|
||
"timeEntry": "Time Entry",
|
||
"billing": "Billing",
|
||
"secrets": "Secrets",
|
||
"importExport": "Import/Export",
|
||
"email": "Email",
|
||
"integrations": "Integrations",
|
||
"extensions": "Extensions",
|
||
"ticketingSettings": "Ticketing Settings",
|
||
"loadingTicketing": "Loading ticketing configuration...",
|
||
"teamManagement": "Team Management",
|
||
"loadingTeam": "Loading team configuration...",
|
||
"loadingExperimental": "Loading experimental feature configuration...",
|
||
"loadingInteractions": "Loading interaction settings...",
|
||
"keyboardShortcuts": "Keyboard Shortcuts"
|
||
},
|
||
"unsavedChanges": {
|
||
"title": "Unsaved Changes",
|
||
"message": "You have unsaved changes. Are you sure you want to leave? Your changes will be lost."
|
||
},
|
||
"general": {
|
||
"title": "General Settings",
|
||
"description": "Manage your organization name and default client. The default client is used for configuration purposes and represents your MSP.",
|
||
"fields": {
|
||
"organizationName": {
|
||
"label": "Organization Name"
|
||
},
|
||
"defaultTimezone": {
|
||
"label": "Default Time Zone",
|
||
"help": "Used for emails and notifications when a user has not set their own timezone."
|
||
}
|
||
},
|
||
"actions": {
|
||
"saveOrganizationName": "Save Organization Name",
|
||
"saveDefaultTimezone": "Save Default Time Zone"
|
||
},
|
||
"clients": {
|
||
"title": "Clients",
|
||
"table": {
|
||
"name": "Name",
|
||
"default": "Default",
|
||
"actions": "Actions"
|
||
},
|
||
"placeholder": "Select a client to add",
|
||
"addClient": "Add Client"
|
||
},
|
||
"messages": {
|
||
"success": {
|
||
"tenantNameUpdated": "Tenant name updated successfully",
|
||
"timezoneUpdated": "Default timezone updated successfully",
|
||
"clientAdded": "Client added successfully",
|
||
"clientRemoved": "Client removed successfully",
|
||
"defaultClientUpdated": "Default client updated successfully"
|
||
},
|
||
"error": {
|
||
"loadTenantData": "Failed to load tenant data",
|
||
"updateTenantName": "Failed to update tenant name",
|
||
"updateTimezone": "Failed to update timezone",
|
||
"selectClient": "Please select a client",
|
||
"clientNotFound": "Client not found",
|
||
"addClient": "Failed to add client",
|
||
"removeClient": "Failed to remove client",
|
||
"setDefaultClient": "Failed to set default client",
|
||
"loadClients": "Failed to load clients"
|
||
}
|
||
}
|
||
},
|
||
"experimentalFeatures": {
|
||
"title": "Experimental Features",
|
||
"description": "Enable or disable experimental features for your tenant.",
|
||
"alert": {
|
||
"title": "Experimental",
|
||
"description": "Experimental features may change or be removed without notice."
|
||
},
|
||
"features": {
|
||
"aiAssistant": {
|
||
"name": "AI Assistant",
|
||
"description": "Enable AI-powered Quick Ask and Chat sidebar.",
|
||
"restriction": "Only available for whitelisted tenants."
|
||
}
|
||
},
|
||
"actions": {
|
||
"save": "Save",
|
||
"saving": "Saving...",
|
||
"retry": "Retry"
|
||
},
|
||
"loading": "Loading experimental features...",
|
||
"messages": {
|
||
"success": {
|
||
"saved": "Experimental feature settings saved. Reload the page to apply changes."
|
||
},
|
||
"error": {
|
||
"loadFailed": "Failed to load experimental feature settings.",
|
||
"saveFailed": "Failed to save experimental feature settings."
|
||
}
|
||
}
|
||
},
|
||
"users": {
|
||
"title": "User Management",
|
||
"description": {
|
||
"msp": "Manage MSP users and permissions",
|
||
"client": "Manage client portal users and their access"
|
||
},
|
||
"viewSwitcher": {
|
||
"msp": "MSP",
|
||
"clientPortal": "Client Portal"
|
||
},
|
||
"license": {
|
||
"usage": "MSP users: {{used}}{{limit}} licenses used",
|
||
"noLimit": " (No limit)",
|
||
"ofLimit": " of {{limit}}",
|
||
"addLicensePrompt": "To add a new user you must purchase additional licenses",
|
||
"addLicense": "Add License"
|
||
},
|
||
"search": "Search users",
|
||
"filter": {
|
||
"all": "All Users",
|
||
"active": "Active Users",
|
||
"inactive": "Inactive Users",
|
||
"selectStatus": "Select Status"
|
||
},
|
||
"tabs": {
|
||
"list": "List",
|
||
"structure": "Structure",
|
||
"listDescription": "Manage individual users, roles, and permissions.",
|
||
"structureDescription": "Visualize and manage the organizational reporting hierarchy."
|
||
},
|
||
"actions": {
|
||
"createNewUser": "Create New User",
|
||
"createNewClientUser": "Create New Client User",
|
||
"copyPortalLink": "Copy Portal Login Link",
|
||
"copying": "Copying...",
|
||
"createUser": "Create User",
|
||
"sendInvitation": "Send Portal Invitation",
|
||
"cancel": "Cancel"
|
||
},
|
||
"form": {
|
||
"title": {
|
||
"msp": "Create New MSP User",
|
||
"client": "Create New Client Portal User"
|
||
},
|
||
"fields": {
|
||
"firstName": "First Name",
|
||
"lastName": "Last Name",
|
||
"email": "Email",
|
||
"client": "Client",
|
||
"clientOptional": "(optional)",
|
||
"primaryRole": "Primary Role",
|
||
"selectRole": "Select Role",
|
||
"reportsTo": "Reports To",
|
||
"reportsToOptional": "(optional)",
|
||
"selectManager": "Select manager",
|
||
"existingContact": "Existing Contact",
|
||
"existingContactOptional": "(optional)",
|
||
"selectExistingContact": "Select existing contact (optional)",
|
||
"selectExistingContactRequired": "Select existing contact",
|
||
"selectContactToInvite": "Select contact to invite",
|
||
"password": "Password",
|
||
"passwordOptional": "(Leave blank to send invitation)",
|
||
"passwordPlaceholder": {
|
||
"msp": "Enter password",
|
||
"client": "Leave blank to send invitation"
|
||
},
|
||
"selectClient": "Select Client"
|
||
},
|
||
"passwordAlert": {
|
||
"withPassword": "Setting a password will create the user immediately. They can log in right away.",
|
||
"withoutPassword": "No password required — we will send a portal invitation for the user to set it."
|
||
},
|
||
"requirePasswordChange": "Require password change on first login"
|
||
},
|
||
"table": {
|
||
"firstName": "First Name",
|
||
"lastName": "Last Name",
|
||
"email": "Email",
|
||
"client": "Client",
|
||
"role": "Role",
|
||
"lastLogin": "Last Login",
|
||
"actions": "Actions",
|
||
"noClient": "No Client",
|
||
"noRole": "No Role",
|
||
"never": "Never",
|
||
"viaMethod": "via {{method}}",
|
||
"loading": "Loading...",
|
||
"openMenu": "Open menu",
|
||
"edit": "Edit",
|
||
"remove": "Remove"
|
||
},
|
||
"loading": "Loading users...",
|
||
"messages": {
|
||
"success": {
|
||
"portalInvitationSent": "Portal invitation sent successfully!",
|
||
"clientPortalUserCreated": "Client portal user created successfully!",
|
||
"copiedVanityLink": "Copied vanity portal login link to clipboard",
|
||
"copiedCanonicalLink": "Copied canonical portal login link to clipboard"
|
||
},
|
||
"error": {
|
||
"fetchUsers": "Failed to fetch users",
|
||
"fetchRoles": "Failed to fetch roles",
|
||
"fetchClients": "Failed to fetch clients",
|
||
"createUser": "Failed to create user",
|
||
"sendInvitation": "Failed to send invitation",
|
||
"sendInvitationManual": "Failed to send invitation. You can send it manually from the user list.",
|
||
"createClientPortalUser": "Failed to create client portal user",
|
||
"clipboardUnavailable": "Clipboard API is not available in this browser.",
|
||
"copyPortalLink": "Failed to copy portal login link",
|
||
"fillRequiredFields": "Please fill in all required fields",
|
||
"fixValidationErrors": "Please fix the validation errors before continuing",
|
||
"fixValidationBeforeInvitation": "Please fix the validation errors before sending the invitation",
|
||
"emailAlreadyInUse": "This email address is already in use. Please use a different email address.",
|
||
"portalUserExists": "A portal user already exists for this contact or email address.",
|
||
"portalUserExistsForContact": "A portal user already exists for this contact. Use password reset for the existing user.",
|
||
"selectAppropriateRole": "Please select an appropriate role for this user type",
|
||
"contactMissingEmail": "Contact \"{{name}}\" is missing an email address. Please update the contact's email before sending an invitation.",
|
||
"licenseLimit": "Cannot activate user: License limit reached. Please deactivate another user or upgrade your license.",
|
||
"permissionDeniedInvite": "You do not have permission to invite users.",
|
||
"permissionDeniedCreate": "You do not have permission to create users.",
|
||
"emailNotConfigured": "Email service is disabled or not configured.",
|
||
"contactNotFound": "Contact not found.",
|
||
"contactMissingEmailGeneric": "Contact does not have an email address. Please add an email address to the contact before sending an invitation.",
|
||
"contactInvalidEmail": "Contact has an invalid email address. Please update the contact with a valid email address before sending an invitation.",
|
||
"noDefaultClient": "No default client configured for this tenant. Please set a default client in General Settings.",
|
||
"noDefaultLocation": "Default client must have a default location configured to send portal invitations.",
|
||
"noLocationEmail": "Default client's location must have a contact email configured.",
|
||
"noBaseUrl": "Base URL is not configured for portal invitations.",
|
||
"passwordTooShort": "Password must be at least 8 characters long.",
|
||
"roleRequired": "Role is required",
|
||
"invalidRole": "Selected role is invalid",
|
||
"licenseLimitReached": "You've reached your MSP user license limit.",
|
||
"soloPlanLimit": "Solo plan is limited to 1 user. Upgrade to Pro to add more users."
|
||
}
|
||
}
|
||
},
|
||
"userDetails": {
|
||
"title": "User Details",
|
||
"fields": {
|
||
"firstName": {
|
||
"label": "First Name",
|
||
"placeholder": "Enter first name"
|
||
},
|
||
"lastName": {
|
||
"label": "Last Name",
|
||
"placeholder": "Enter last name"
|
||
},
|
||
"email": {
|
||
"label": "Email",
|
||
"placeholder": "Enter email"
|
||
},
|
||
"reportsTo": {
|
||
"label": "Reports To",
|
||
"placeholder": "Select manager"
|
||
},
|
||
"lastLogin": "Last Login",
|
||
"roles": "Roles",
|
||
"status": "Status",
|
||
"statusHelp": "Set user account status",
|
||
"newPassword": "New Password"
|
||
},
|
||
"status": {
|
||
"active": "Active",
|
||
"inactive": "Inactive",
|
||
"inactiveTag": "(Inactive)"
|
||
},
|
||
"actions": {
|
||
"addRole": "Add Role",
|
||
"selectRoleToAdd": "Select role to add",
|
||
"removeRole": "Remove",
|
||
"setPassword": "Set Password",
|
||
"cancel": "Cancel",
|
||
"saveChanges": "Save Changes"
|
||
},
|
||
"dialog": {
|
||
"setPassword": {
|
||
"title": "Set User Password (Admin)"
|
||
}
|
||
},
|
||
"messages": {
|
||
"success": {
|
||
"passwordChanged": "Password changed successfully",
|
||
"userUpdated": "User updated successfully",
|
||
"roleAdded": "Role added successfully",
|
||
"roleRemoved": "Role removed successfully"
|
||
},
|
||
"error": {
|
||
"userNotFound": "User not found",
|
||
"loadFailed": "Failed to load user details. Please try again.",
|
||
"addRoleFailed": "Failed to add role. Please try again.",
|
||
"removeRoleFailed": "Failed to remove role. Please try again.",
|
||
"updateUserNotFound": "Failed to update user. User not found.",
|
||
"updateFailed": "Failed to update user. Please try again.",
|
||
"emailAlreadyExists": "A user with this email address already exists",
|
||
"reportsToSelf": "A user cannot report to themselves",
|
||
"reportsToCycle": "This would create a circular reporting chain",
|
||
"passwordTooShort": "Password must be at least 8 characters long",
|
||
"passwordChangeFailed": "Failed to change password",
|
||
"passwordChangeError": "An error occurred while changing password",
|
||
"permissionDenied": "You do not have permission to change user roles."
|
||
}
|
||
},
|
||
"loading": "Loading user details..."
|
||
},
|
||
"teams": {
|
||
"title": "Team Management",
|
||
"description": "Create and manage teams, assign team leads, and organize members across your organization",
|
||
"loading": "Loading teams...",
|
||
"emptyState": "Please select a team to manage members",
|
||
"list": {
|
||
"title": "Teams",
|
||
"addNewTeam": "Add New Team",
|
||
"createTeam": "Create Team",
|
||
"cancel": "Cancel",
|
||
"delete": "Delete",
|
||
"placeholder": "Enter new team name",
|
||
"selectManager": "Select a manager"
|
||
},
|
||
"details": {
|
||
"loading": "Loading team details...",
|
||
"notFound": "No team found",
|
||
"fields": {
|
||
"teamLead": "Team Lead",
|
||
"addMember": "Add Member"
|
||
},
|
||
"placeholders": {
|
||
"teamName": "Enter team name",
|
||
"selectTeamLead": "Select a team lead",
|
||
"selectUserToAdd": "Select a user to add"
|
||
},
|
||
"alert": {
|
||
"unsavedChanges": "You have unsaved changes"
|
||
},
|
||
"actions": {
|
||
"discard": "Discard",
|
||
"saveChanges": "Save Changes",
|
||
"saveName": "Save name",
|
||
"cancel": "Cancel",
|
||
"editName": "Edit name",
|
||
"remove": "Remove"
|
||
},
|
||
"table": {
|
||
"teamMembers": "Team Members",
|
||
"member": "Member",
|
||
"role": "Role"
|
||
},
|
||
"badge": {
|
||
"new": "New",
|
||
"lead": "Lead"
|
||
},
|
||
"leadName": "Lead: {{name}}",
|
||
"memberCount_one": "{{count}} member",
|
||
"memberCount_other": "{{count}} members"
|
||
},
|
||
"messages": {
|
||
"error": {
|
||
"loadFailed": "Failed to load teams. Please try again.",
|
||
"fetchUsers": "Failed to fetch users",
|
||
"createFailed": "Failed to create team: {{error}}",
|
||
"deleteFailed": "Failed to delete team",
|
||
"updateName": "Failed to update team name",
|
||
"saveChanges": "Failed to save changes. Please try again."
|
||
}
|
||
}
|
||
},
|
||
"ticketing": {
|
||
"title": "Ticket Settings",
|
||
"tabs": {
|
||
"display": "Display",
|
||
"ticketNumbering": "Ticket Numbering",
|
||
"boards": "Boards",
|
||
"statuses": "Statuses",
|
||
"priorities": "Priorities",
|
||
"categories": "Categories",
|
||
"checklistTemplates": "Checklist Templates"
|
||
},
|
||
"numbering": {
|
||
"title": "Number Format",
|
||
"description": "Define the prefix, digit padding, and current sequence",
|
||
"fields": {
|
||
"prefix": {
|
||
"label": "Ticket Number Prefix",
|
||
"placeholder": "TK-",
|
||
"help": "Optional prefix for ticket numbers. Leave empty for no prefix or enter a custom prefix (e.g., 'TK-')"
|
||
},
|
||
"minimumDigits": {
|
||
"label": "Minimum Digits",
|
||
"help": "Minimum number of digits for the sequential number. For example, 6 makes '1' become '000001'"
|
||
},
|
||
"initialValue": {
|
||
"label": "Initial Value",
|
||
"placeholder": "Enter value",
|
||
"help": "Set the starting number for the sequence. This can only be set once."
|
||
},
|
||
"lastUsedNumber": {
|
||
"label": "Last Used Number",
|
||
"help": "The last number that was assigned. The next number will be one higher than this value."
|
||
},
|
||
"nextPreview": {
|
||
"label": "Next Ticket Number Preview",
|
||
"help": "This is the number that will be assigned to the next ticket"
|
||
}
|
||
},
|
||
"actions": {
|
||
"saveChanges": "Save Changes",
|
||
"cancel": "Cancel"
|
||
},
|
||
"dialog": {
|
||
"title": "Update Ticket Number Settings",
|
||
"message": "Changing these settings will affect how new ticket numbers are generated. This change will not affect existing tickets. Are you sure you want to proceed?",
|
||
"confirm": "Update Settings"
|
||
},
|
||
"loading": "Loading...",
|
||
"messages": {
|
||
"error": {
|
||
"noSettings": "No ticket numbering settings found. Please contact your administrator.",
|
||
"loadFailed": "Failed to load ticket numbering settings",
|
||
"updateFailed": "Failed to update settings",
|
||
"updatePaddingFailed": "Failed to update padding length",
|
||
"updateLastNumberFailed": "Failed to update last number",
|
||
"updateInitialValueFailed": "Failed to update initial value"
|
||
},
|
||
"success": {
|
||
"updated": "Ticket numbering settings updated successfully"
|
||
}
|
||
}
|
||
},
|
||
"statuses": {
|
||
"title": "Ticket Statuses",
|
||
"alert": "Default Status: When clients create tickets through the client portal, they will automatically be assigned the status marked as default. Only one status can be set as default at a time.",
|
||
"table": {
|
||
"name": "Name",
|
||
"status": "Status",
|
||
"default": "Default",
|
||
"order": "Order",
|
||
"actions": "Actions"
|
||
},
|
||
"statusLabels": {
|
||
"closed": "Closed",
|
||
"open": "Open",
|
||
"closedHelp": "Tickets with this status will be marked as closed",
|
||
"openHelp": "Tickets with this status will remain open",
|
||
"defaultHelp": "Default status for new tickets from client portal"
|
||
},
|
||
"actions": {
|
||
"addStatus": "Add Status",
|
||
"importStandard": "Import from Standard Statuses",
|
||
"edit": "Edit",
|
||
"delete": "Delete"
|
||
},
|
||
"retiredAlert": "Ticket statuses are now managed inside each board. Use the Boards tab to edit ticket lifecycles for a specific board.",
|
||
"messages": {
|
||
"success": {
|
||
"deleted": "Status deleted successfully",
|
||
"updated": "Status updated successfully"
|
||
},
|
||
"error": {
|
||
"lastClosed": "At least one status must remain marked as closed",
|
||
"deleteLastClosed": "Cannot delete the last closed status for this type.",
|
||
"removeDefault": "Cannot remove default status from the last default status"
|
||
}
|
||
}
|
||
},
|
||
"boards": {
|
||
"title": "Boards",
|
||
"alert": "Boards organize tickets into logical groups. Each board can have its own default agent, priority, and SLA policy.",
|
||
"table": {
|
||
"name": "Name",
|
||
"description": "Description",
|
||
"status": "Status",
|
||
"default": "Default",
|
||
"defaultAgent": "Default Agent",
|
||
"defaultPriority": "Default Priority",
|
||
"boardManager": "Board Manager",
|
||
"order": "Order",
|
||
"itilBoard": "ITIL Board",
|
||
"actions": "Actions"
|
||
},
|
||
"statusLabels": {
|
||
"active": "Active",
|
||
"inactive": "Inactive"
|
||
},
|
||
"actions": {
|
||
"addBoard": "Add Board",
|
||
"importStandard": "Import from Standard Boards",
|
||
"edit": "Edit",
|
||
"delete": "Delete",
|
||
"cancel": "Cancel",
|
||
"close": "Close",
|
||
"create": "Create",
|
||
"update": "Update",
|
||
"importSelected": "Import Selected",
|
||
"up": "Up",
|
||
"down": "Down",
|
||
"remove": "Remove",
|
||
"addStatus": "Add Status"
|
||
},
|
||
"fields": {
|
||
"boardName": {
|
||
"label": "Board Name",
|
||
"placeholder": "Enter board name"
|
||
},
|
||
"description": {
|
||
"label": "Description",
|
||
"placeholder": "Enter board description"
|
||
},
|
||
"displayOrder": {
|
||
"label": "Display Order",
|
||
"placeholder": "Enter display order",
|
||
"help": "Controls the order boards appear in the list"
|
||
},
|
||
"inactive": "Mark as inactive",
|
||
"itilCompliant": "ITIL Compliant",
|
||
"boardConfiguration": "Board Configuration",
|
||
"boardManager": {
|
||
"label": "Board Manager",
|
||
"placeholder": "Select a board manager",
|
||
"help": "The user responsible for managing this board"
|
||
},
|
||
"defaultAssignedAgent": {
|
||
"label": "Default Assigned Agent",
|
||
"placeholder": "Select default agent",
|
||
"help": "New tickets on this board will be assigned to this agent by default"
|
||
},
|
||
"defaultPriority": {
|
||
"label": "Default Priority",
|
||
"placeholder": "Select default priority",
|
||
"help": "New tickets on this board will use this priority by default",
|
||
"none": "None"
|
||
},
|
||
"slaPolicy": {
|
||
"label": "SLA Policy",
|
||
"placeholder": "Select SLA policy",
|
||
"help": "The SLA policy to apply to tickets on this board",
|
||
"none": "None"
|
||
},
|
||
"ticketStatusSetup": {
|
||
"label": "Ticket status setup",
|
||
"help": "Choose whether this board starts from an existing lifecycle or a new inline status list.",
|
||
"copyExisting": "Copy from existing board",
|
||
"createInline": "Create statuses inline"
|
||
},
|
||
"copyTicketStatuses": {
|
||
"label": "Copy ticket statuses from",
|
||
"help": "New boards clone their ticket lifecycle from an existing board.",
|
||
"selectSource": "Select a source board",
|
||
"noSourceAvailable": "No source boards available",
|
||
"unnamedBoard": "Unnamed board"
|
||
},
|
||
"ticketStatuses": {
|
||
"labelEditing": "Board ticket statuses",
|
||
"labelCopied": "Copied ticket statuses",
|
||
"labelInline": "Inline ticket statuses",
|
||
"helpEditing": "Edit the ticket lifecycle for this board only.",
|
||
"helpCopied": "Review and adjust the copied lifecycle before saving the new board.",
|
||
"helpInline": "Author the board's initial ticket lifecycle before saving.",
|
||
"loading": "Loading board ticket statuses…",
|
||
"statusName": "Status name",
|
||
"closed": "Closed",
|
||
"default": "Default"
|
||
},
|
||
"inboundReplyReopen": {
|
||
"enabledLabel": "Reopen closed tickets on inbound replies",
|
||
"enabledHelp": "Applies to threaded replies matched to already closed tickets on this board.",
|
||
"cutoffHoursLabel": "Reopen cutoff (hours)",
|
||
"cutoffHoursHelp": "Replies received after this window create new tickets instead of reopening old ones.",
|
||
"statusLabel": "Reopen status (optional)",
|
||
"statusPlaceholder": "Select reopen status",
|
||
"statusUseDefault": "Use board default open status",
|
||
"suppressAiLabel": "Suppress reopen for short ACK replies (AI)",
|
||
"suppressAiHelp": "Enterprise AI Assistant add-on only. If unavailable, replies reopen normally."
|
||
},
|
||
"liveTimer": {
|
||
"label": "Enable live ticket timer",
|
||
"help": "Shows the live timer and tracked intervals on tickets in this board. Manual time entry remains available."
|
||
}
|
||
},
|
||
"dialog": {
|
||
"addBoard": "Add Board",
|
||
"editBoard": "Edit Board",
|
||
"deleteBoardTitle": "Delete Board",
|
||
"deleteBoardMessage": "This will permanently delete the board.",
|
||
"cleanupItilTitle": "Clean Up ITIL Board",
|
||
"cleanupItilMessage": "This will remove the ITIL categories and priority matrix associated with this board.",
|
||
"deleteOnly": "Delete Only",
|
||
"deleteAndCleanup": "Delete & Clean Up",
|
||
"deleteAll": "Delete All",
|
||
"importTitle": "Import Standard Boards",
|
||
"importDescription": "Select standard boards to import into your organization:",
|
||
"importEmpty": "No standard boards available to import.",
|
||
"conflictsTitle": "Resolve Import Conflicts",
|
||
"conflictsDescription": "The following items have conflicts that need to be resolved:",
|
||
"nameConflict": "Name already exists",
|
||
"orderConflict": "Order {{order}} is already in use",
|
||
"skipItem": "Skip this item",
|
||
"importNewName": "Import with different name:",
|
||
"importWithOrder": "Import with order {{order}}",
|
||
"importWithResolutions": "Import with Resolutions"
|
||
},
|
||
"importTable": {
|
||
"active": "Active"
|
||
},
|
||
"itilInfo": {
|
||
"title": "ITIL Information",
|
||
"tooltip": "This board follows ITIL best practices",
|
||
"categoriesTitle": "ITIL Categories",
|
||
"priorityMatrixTitle": "Priority Matrix",
|
||
"impactDescription": "Impact levels define the scope of the issue",
|
||
"urgencyDescription": "Urgency levels define how quickly the issue needs resolution",
|
||
"priorityDescription": "Priority is calculated from impact and urgency",
|
||
"categories": {
|
||
"serviceRequest": "Service Request"
|
||
},
|
||
"priorityMatrix": {
|
||
"urgencyHeaderLine1": {
|
||
"high": "High",
|
||
"mediumHigh": "Medium-High",
|
||
"medium": "Medium",
|
||
"mediumLow": "Medium-Low",
|
||
"low": "Low"
|
||
},
|
||
"urgencyHeaderLine2": {
|
||
"high": "Urgency (1)",
|
||
"mediumHigh": "Urgency (2)",
|
||
"medium": "Urgency (3)",
|
||
"mediumLow": "Urgency (4)",
|
||
"low": "Urgency (5)"
|
||
},
|
||
"impact": {
|
||
"high": "High Impact (1)",
|
||
"mediumHigh": "Medium-High Impact (2)",
|
||
"medium": "Medium Impact (3)",
|
||
"mediumLow": "Medium-Low Impact (4)",
|
||
"low": "Low Impact (5)"
|
||
},
|
||
"priority": {
|
||
"critical": "Critical (1)",
|
||
"high": "High (2)",
|
||
"medium": "Medium (3)",
|
||
"low": "Low (4)",
|
||
"planning": "Planning (5)"
|
||
}
|
||
}
|
||
},
|
||
"messages": {
|
||
"success": {
|
||
"created": "Board created successfully",
|
||
"updated": "Board updated successfully",
|
||
"deleted": "Board deleted successfully",
|
||
"imported": "Boards imported successfully"
|
||
},
|
||
"error": {
|
||
"fetchFailed": "Failed to load boards",
|
||
"fetchAvailableFailed": "Failed to fetch available boards for import",
|
||
"nameRequired": "Board name is required",
|
||
"saveFailed": "Failed to save board",
|
||
"lastDefault": "Cannot remove the last default board",
|
||
"statusRequired": "Add at least one ticket status before saving the board.",
|
||
"duplicateStatusName": "Ticket status names must be unique within a board.",
|
||
"invalidOpenDefault": "Select exactly one open default ticket status before saving the board.",
|
||
"nameAlreadyExists": "A board with this name already exists.",
|
||
"selectBoardToCopy": "Select an existing board to copy ticket statuses from.",
|
||
"fetchStatusesFailed": "Failed to load board ticket statuses.",
|
||
"deleteFailed": "Failed to delete board",
|
||
"importFailed": "Failed to import boards",
|
||
"updateStatusFailed": "Failed to update board status",
|
||
"updateDefaultFailed": "Failed to update default board"
|
||
}
|
||
},
|
||
"closeRules": {
|
||
"enabledLabel": "Close rules",
|
||
"enabledHelp": "Require conditions to be met before tickets on this board can be closed.",
|
||
"requireResolutionCommentLabel": "Require a resolution comment",
|
||
"requireResolutionCommentHelp": "A resolution comment must exist before the ticket can close.",
|
||
"requireTimeEntryLabel": "Require a time entry",
|
||
"requireTimeEntryHelp": "At least one time entry must be logged before the ticket can close.",
|
||
"requireChecklistCompleteLabel": "Require checklist completion",
|
||
"requireChecklistCompleteHelp": "All required checklist items must be checked off before the ticket can close.",
|
||
"requireNoOpenChildrenLabel": "Require bundled tickets closed",
|
||
"requireNoOpenChildrenHelp": "A bundle master cannot close while bundled child tickets are still open.",
|
||
"requiredFieldsLabel": "Required fields at close",
|
||
"requiredFieldsHelp": "These ticket fields must be filled in before the ticket can close.",
|
||
"autoCloseLabel": "Auto-close rules",
|
||
"autoCloseHelp": "Automatically close tickets that sit in a status with no activity. An optional warning email goes to the contact before closing.",
|
||
"addAutoCloseRule": "Add rule",
|
||
"triggerStatusLabel": "When ticket is in status",
|
||
"triggerStatusPlaceholder": "Select status",
|
||
"targetStatusLabel": "Close to status",
|
||
"targetStatusPlaceholder": "Select closed status",
|
||
"inactivityDaysLabel": "Days of inactivity",
|
||
"warningDaysLabel": "Warn days before close",
|
||
"warningDaysPlaceholder": "No warning",
|
||
"ruleEnabledLabel": "Enabled",
|
||
"removeRule": "Remove",
|
||
"messages": {
|
||
"fetchFailed": "Failed to load close rules for this board",
|
||
"autoCloseStatusRequired": "Each auto-close rule needs a trigger status and a closed target status",
|
||
"autoCloseDaysInvalid": "Auto-close inactivity days must be a positive whole number",
|
||
"autoCloseWarningInvalid": "The warning lead time must be smaller than the inactivity days"
|
||
}
|
||
}
|
||
},
|
||
"priorities": {
|
||
"title": {
|
||
"ticket": "Ticket Priorities",
|
||
"projectTask": "Project Task Priorities"
|
||
},
|
||
"alert": {
|
||
"header": "Priority Management:",
|
||
"description": "Create custom priorities for your organization or import from standard templates.",
|
||
"itilNote": "ITIL standard priorities cannot be edited or deleted.",
|
||
"nonItilNote": "All priorities can be edited or deleted to fit your workflow."
|
||
},
|
||
"table": {
|
||
"name": "Name",
|
||
"type": "Type",
|
||
"color": "Color",
|
||
"order": "Order",
|
||
"actions": "Actions",
|
||
"standardTag": "(Standard)",
|
||
"itilProtected": "Protected"
|
||
},
|
||
"itemTypes": {
|
||
"ticket": "Ticket",
|
||
"projectTask": "Project Task"
|
||
},
|
||
"actions": {
|
||
"addPriority": "Add Priority",
|
||
"importStandard": "Import from Standard Priorities",
|
||
"openMenu": "Open menu",
|
||
"edit": "Edit",
|
||
"delete": "Delete",
|
||
"cancel": "Cancel"
|
||
},
|
||
"dialog": {
|
||
"addTitle": "Add New Priority",
|
||
"editTitle": "Edit Priority",
|
||
"submitAdd": "Add Priority",
|
||
"submitUpdate": "Update Priority"
|
||
},
|
||
"fields": {
|
||
"priorityName": {
|
||
"label": "Priority Name",
|
||
"placeholder": "e.g., Urgent"
|
||
},
|
||
"orderNumber": {
|
||
"label": "Order Number (1-100, higher numbers appear first)",
|
||
"help": "Controls the order in which priorities appear in dropdown menus throughout the platform. Higher numbers appear first for priorities.",
|
||
"used": "Used order numbers: {{numbers}}",
|
||
"noneUsed": "No order numbers used yet"
|
||
},
|
||
"color": {
|
||
"label": "Color",
|
||
"chooseButton": "Choose Color"
|
||
}
|
||
},
|
||
"import": {
|
||
"title": "Import Standard Priorities",
|
||
"submit": "Import ({{count}})",
|
||
"allImportedTicket": "All standard priorities have already been imported for tickets.",
|
||
"allImportedProjectTask": "All standard priorities have already been imported for project tasks.",
|
||
"instructions": "Select the standard priorities you want to import. These will be copied to your organization's priorities."
|
||
},
|
||
"messages": {
|
||
"success": {
|
||
"deleted": "Priority deleted successfully",
|
||
"imported": "Successfully imported {{count}} priorities",
|
||
"skipped": "Skipped {{count}} priorities (already exist)"
|
||
},
|
||
"error": {
|
||
"orderTaken": "Order number {{order}} is already taken by \"{{name}}\". Please choose a different order number.",
|
||
"uniqueConstraint": "This order number is already in use. Please choose a different order number.",
|
||
"saveFailed": "Failed to save priority",
|
||
"deleteFailed": "Failed to delete priority",
|
||
"deleteValidationFailed": "Failed to validate deletion. Please try again.",
|
||
"importFailed": "Failed to import priorities"
|
||
}
|
||
},
|
||
"entity": {
|
||
"fallback": "this priority"
|
||
}
|
||
},
|
||
"checklistTemplates": {
|
||
"title": "Checklist Templates",
|
||
"alert": "Checklist templates define reusable checklists for tickets. Template items are copied onto tickets when applied, so editing a template never changes checklists already on tickets.",
|
||
"table": {
|
||
"name": "Name",
|
||
"description": "Description",
|
||
"items": "Items",
|
||
"status": "Status",
|
||
"actions": "Actions"
|
||
},
|
||
"statusLabels": {
|
||
"active": "Active",
|
||
"inactive": "Inactive"
|
||
},
|
||
"actions": {
|
||
"addTemplate": "Add Template",
|
||
"edit": "Edit",
|
||
"delete": "Delete",
|
||
"cancel": "Cancel",
|
||
"close": "Close",
|
||
"create": "Create",
|
||
"update": "Update",
|
||
"up": "Up",
|
||
"down": "Down",
|
||
"remove": "Remove",
|
||
"addItem": "Add Item",
|
||
"addRule": "Add Rule"
|
||
},
|
||
"fields": {
|
||
"name": {
|
||
"label": "Template Name",
|
||
"placeholder": "Enter template name"
|
||
},
|
||
"description": {
|
||
"label": "Description",
|
||
"placeholder": "Enter description"
|
||
},
|
||
"active": "Active",
|
||
"items": {
|
||
"label": "Checklist Items",
|
||
"help": "Items are added to tickets in this order when the template is applied.",
|
||
"itemName": "Item Name",
|
||
"required": "Required",
|
||
"newItemLabel": "New Item",
|
||
"newItemPlaceholder": "Enter item name"
|
||
},
|
||
"rules": {
|
||
"label": "Auto-Apply Rules",
|
||
"help": "The template is automatically applied to new tickets matching any of these rules. Leave a field as \"Any\" to match all values.",
|
||
"empty": "No auto-apply rules. This template can still be applied to tickets manually.",
|
||
"board": "Board",
|
||
"category": "Category",
|
||
"subcategory": "Subcategory",
|
||
"priority": "Priority",
|
||
"any": "Any"
|
||
}
|
||
},
|
||
"dialog": {
|
||
"addTemplate": "Add Checklist Template",
|
||
"editTemplate": "Edit Checklist Template",
|
||
"createFirstHelp": "Create the template first, then add checklist items and auto-apply rules.",
|
||
"deleteTitle": "Delete Checklist Template",
|
||
"deleteMessage": "Are you sure you want to delete \"{{name}}\"? Checklists already added to tickets will not be affected."
|
||
},
|
||
"messages": {
|
||
"success": {
|
||
"created": "Checklist template created successfully",
|
||
"updated": "Checklist template updated successfully",
|
||
"deleted": "Checklist template deleted successfully"
|
||
},
|
||
"error": {
|
||
"fetchFailed": "Failed to fetch checklist templates",
|
||
"fetchRulesFailed": "Failed to fetch auto-apply rules",
|
||
"nameRequired": "Template name is required",
|
||
"saveFailed": "Failed to save checklist template",
|
||
"deleteFailed": "Failed to delete checklist template",
|
||
"updateStatusFailed": "Failed to update template status",
|
||
"itemSaveFailed": "Failed to save checklist item",
|
||
"ruleSaveFailed": "Failed to save auto-apply rule"
|
||
}
|
||
}
|
||
}
|
||
},
|
||
"interactions": {
|
||
"title": "Interaction Settings",
|
||
"tabs": {
|
||
"types": "Interaction Types",
|
||
"statuses": "Interaction Statuses"
|
||
},
|
||
"types": {
|
||
"title": "Interaction Types",
|
||
"loading": "Loading interaction types...",
|
||
"table": {
|
||
"name": "Name",
|
||
"order": "Order",
|
||
"actions": "Actions"
|
||
},
|
||
"actions": {
|
||
"addType": "Add Interaction Type",
|
||
"importStandard": "Import from Standard Interaction Types",
|
||
"edit": "Edit",
|
||
"delete": "Delete",
|
||
"cancel": "Cancel",
|
||
"importSelected": "Import Selected"
|
||
},
|
||
"dialog": {
|
||
"import": {
|
||
"title": "Import Standard Interaction Types",
|
||
"description": "Select standard interaction types to import into your organization:",
|
||
"empty": "No standard interaction types available to import."
|
||
},
|
||
"conflicts": {
|
||
"title": "Resolve Import Conflicts",
|
||
"description": "The following items have conflicts that need to be resolved:",
|
||
"nameConflict": "Name already exists",
|
||
"orderConflict": "Order {{order}} is already in use",
|
||
"skipItem": "Skip this item",
|
||
"importDifferentName": "Import with different name:",
|
||
"importDifferentOrder": "Import with order {{order}}",
|
||
"resolve": "Import with Resolutions"
|
||
}
|
||
},
|
||
"messages": {
|
||
"success": {
|
||
"deleted": "Interaction type deleted",
|
||
"imported_one": "Imported {{count}} interaction type",
|
||
"imported_other": "Imported {{count}} interaction types"
|
||
},
|
||
"error": {
|
||
"fetchFailed": "Failed to fetch interaction types",
|
||
"validateDeleteFailed": "Failed to validate interaction type deletion",
|
||
"deleteFailed": "Failed to delete interaction type",
|
||
"checkConflicts": "Failed to check conflicts",
|
||
"importFailed": "Failed to import interaction types",
|
||
"fetchAvailable": "Failed to fetch available interaction types for import"
|
||
}
|
||
}
|
||
},
|
||
"statuses": {
|
||
"title": "Interaction Statuses",
|
||
"alert": "Interaction Statuses: Track the state of customer interactions such as calls, emails, and meetings.",
|
||
"table": {
|
||
"name": "Name",
|
||
"status": "Status",
|
||
"order": "Order",
|
||
"actions": "Actions"
|
||
},
|
||
"statusLabels": {
|
||
"closedHelp": "Interactions with this status will be marked as closed",
|
||
"openHelp": "Interactions with this status will remain open"
|
||
},
|
||
"actions": {
|
||
"addStatus": "Add Status",
|
||
"importStandard": "Import from Standard",
|
||
"edit": "Edit",
|
||
"delete": "Delete"
|
||
},
|
||
"messages": {
|
||
"success": {
|
||
"updated": "Status updated successfully",
|
||
"deleted": "Status deleted successfully",
|
||
"imported": "Successfully imported {{count}} statuses"
|
||
},
|
||
"error": {
|
||
"lastClosed": "At least one status must remain marked as closed",
|
||
"deleteLastClosed": "Cannot delete the last closed status for this type.",
|
||
"skipped": "Skipped {{count}} statuses ({{reason}})",
|
||
"importFailed": "Failed to import statuses"
|
||
}
|
||
}
|
||
},
|
||
"quickAdd": {
|
||
"dialog": {
|
||
"createTitle": "Create Interaction Type",
|
||
"editTitle": "Edit Interaction Type"
|
||
},
|
||
"fields": {
|
||
"name": {
|
||
"label": "Interaction Type Name:",
|
||
"placeholder": "e.g., 'Client Onboarding Call', 'Sales Demo', 'Project Review'"
|
||
},
|
||
"displayOrder": {
|
||
"label": "Display Order:",
|
||
"placeholder": "e.g., 1, 2, 3..."
|
||
},
|
||
"icon": {
|
||
"label": "Choose an Icon:"
|
||
}
|
||
},
|
||
"preview": {
|
||
"title": "Preview:",
|
||
"empty": "Enter type name above"
|
||
},
|
||
"actions": {
|
||
"cancel": "Cancel",
|
||
"create": "Create Type",
|
||
"update": "Update Type",
|
||
"creating": "Creating...",
|
||
"updating": "Updating..."
|
||
},
|
||
"messages": {
|
||
"error": {
|
||
"nameRequired": "Please enter a name for the interaction type.",
|
||
"saveFailed": "Failed to {{action}} interaction type. Please try again."
|
||
}
|
||
}
|
||
},
|
||
"openMenu": "Open menu"
|
||
},
|
||
"clientPortal": {
|
||
"branding": {
|
||
"title": "Branding & Appearance",
|
||
"description": "Customize the look and feel of your client portal with your company branding.",
|
||
"fields": {
|
||
"companyName": "Company Name",
|
||
"companyLogo": "Company Logo",
|
||
"colorPalette": "Color Palette",
|
||
"primaryColor": "Primary Color",
|
||
"secondaryColor": "Secondary Color",
|
||
"supportEmail": "Support Email",
|
||
"supportPhone": "Support Phone"
|
||
},
|
||
"help": {
|
||
"companyName": "This will be displayed in the client portal header",
|
||
"companyLogo": "Recommended: PNG or SVG, max 2MB, transparent background",
|
||
"primaryColor": "Used for buttons, links, and highlights",
|
||
"secondaryColor": "Used for accents and secondary actions",
|
||
"supportEmail": "Shown to clients in appointment confirmations and other outbound emails as the address to contact for help.",
|
||
"supportPhone": "Optional. Shown alongside the support email in client-facing emails."
|
||
},
|
||
"preview": "Preview",
|
||
"previewDarkMode": "Preview dark mode",
|
||
"actions": {
|
||
"saveBranding": "Save Branding Settings",
|
||
"previewDashboard": "Preview Client Dashboard",
|
||
"hideDashboard": "Hide Client Dashboard",
|
||
"previewSignIn": "Preview Sign-in Page",
|
||
"hideSignIn": "Hide Sign-in Page"
|
||
},
|
||
"customDomainRequired": "Must have custom domain set up"
|
||
},
|
||
"dashboardPreview": {
|
||
"title": "Your Client Portal",
|
||
"welcome": "Welcome back!",
|
||
"subtitle": "Here's an overview of your account activity",
|
||
"openTickets": "Open Tickets",
|
||
"activeProjects": "Active Projects",
|
||
"invoices": "Invoices",
|
||
"urgent": "{{count}} urgent",
|
||
"nearDeadline": "{{count}} near deadline",
|
||
"dueThisMonth": "Due this month",
|
||
"recentActivity": "Recent Activity",
|
||
"ticketUpdated": "Ticket #1234 was updated",
|
||
"hoursAgo": "{{count}} hours ago",
|
||
"newInvoice": "New invoice generated",
|
||
"milestoneCompleted": "Project milestone completed",
|
||
"dayAgo": "1 day ago",
|
||
"createTicket": "Create Ticket",
|
||
"viewProjects": "View Projects",
|
||
"activeDevices": "Active devices",
|
||
"basicSupport": "Basic Support",
|
||
"dashboardTitle": "Dashboard",
|
||
"greeting": "Good morning, Alex 👋",
|
||
"navAppointments": "Appointments",
|
||
"navDashboard": "Dashboard",
|
||
"navDevices": "My devices",
|
||
"navProjects": "Projects",
|
||
"navServiceRequests": "Service Requests",
|
||
"navTickets": "Tickets",
|
||
"serviceRequests": "Service requests",
|
||
"upcomingShort": "Upcoming",
|
||
"upcomingVisits": "Upcoming visits",
|
||
"welcomeBack": "Welcome back",
|
||
"workspaceSection": "Workspace"
|
||
},
|
||
"signInPreview": {
|
||
"portalTitle": "Client Portal",
|
||
"welcome": "Welcome to Your Client Portal",
|
||
"subtitle": "Manage your support tickets and stay connected",
|
||
"features": {
|
||
"submitTickets": {
|
||
"title": "Submit Support Tickets",
|
||
"description": "Create and manage your support requests"
|
||
},
|
||
"trackStatus": {
|
||
"title": "Track Ticket Status",
|
||
"description": "Monitor progress in real-time"
|
||
},
|
||
"ticketHistory": {
|
||
"title": "Ticket History",
|
||
"description": "Access your complete support history"
|
||
},
|
||
"documentation": {
|
||
"title": "Documentation Access",
|
||
"description": "View shared documents and resources"
|
||
}
|
||
},
|
||
"signIn": {
|
||
"title": "Sign In",
|
||
"description": "Please enter your credentials to access your account.",
|
||
"email": "Email",
|
||
"emailPlaceholder": "Enter your email",
|
||
"password": "Password",
|
||
"passwordPlaceholder": "Enter your password",
|
||
"forgotPassword": "Forgot your password?",
|
||
"mspStaffLogin": "MSP Staff? Login here →"
|
||
}
|
||
},
|
||
"domain": {
|
||
"title": "Custom Domain",
|
||
"description": "Configure a branded hostname for your client portal. We will provision TLS certificates automatically once DNS is verified.",
|
||
"currentStatus": "Current status",
|
||
"noDomainConfigured": "No custom domain configured",
|
||
"defaultStatusMessage": "No custom domain registered yet.",
|
||
"lastChecked": "Last checked: {{value}}",
|
||
"updatingDomainPrefix": "Updating domain to ",
|
||
"updatingDomainSuffix": ". Provisioning will restart once you update.",
|
||
"editInstructions": "To change your domain, edit the value below and submit to kick off a new provisioning run.",
|
||
"actions": {
|
||
"refresh": "Refresh",
|
||
"refreshing": "Refreshing...",
|
||
"retry": "Retry",
|
||
"retrying": "Retrying…",
|
||
"removeDomain": "Remove Domain",
|
||
"saveDomain": "Save Domain",
|
||
"updateDomain": "Update Domain",
|
||
"submitting": "Submitting…",
|
||
"cancelEdit": "Cancel Edit"
|
||
},
|
||
"form": {
|
||
"label": "Custom domain",
|
||
"helpTextPrefix": "Add a CNAME record pointing to ",
|
||
"helpTextSuffix": " before submitting.",
|
||
"placeholder": "portal.example.com"
|
||
},
|
||
"checklist": {
|
||
"title": "Setup checklist",
|
||
"step1Prefix": "Create a CNAME record for your chosen host pointing to ",
|
||
"step1Suffix": ".",
|
||
"step2": "Click \"Save Domain\" to trigger DNS verification and certificate provisioning.",
|
||
"step3": "Use the Refresh button to poll provisioning progress. We will email your administrators if provisioning fails.",
|
||
"canonicalHostFallback": "canonical host"
|
||
},
|
||
"badges": {
|
||
"pending_dns": "Pending DNS",
|
||
"verifying_dns": "Verifying DNS",
|
||
"dns_failed": "DNS Failed",
|
||
"pending_certificate": "Pending Certificate",
|
||
"certificate_issuing": "Issuing Certificate",
|
||
"certificate_failed": "Certificate Failed",
|
||
"deploying": "Deploying",
|
||
"active": "Active",
|
||
"disabled": "Disabled",
|
||
"unknown": "Unknown"
|
||
},
|
||
"messages": {
|
||
"requestSubmitted": "Custom domain request submitted.",
|
||
"retryQueued": "Retry queued. Re-check status in a few moments.",
|
||
"removalRequested": "Custom domain removal requested.",
|
||
"enterDomainFirst": "Enter a domain before submitting.",
|
||
"confirmRemove": "Remove the current custom domain? Traffic will revert to the default hosted address.",
|
||
"loadFailed": "Unable to load portal domain status.",
|
||
"registerFailed": "Failed to register custom domain.",
|
||
"refreshFailed": "Failed to refresh domain status.",
|
||
"retryFailed": "Retry failed.",
|
||
"disableFailed": "Failed to disable custom domain."
|
||
}
|
||
},
|
||
"yourCompanyName": "Your Company Name",
|
||
"brandingPreviewMode": "Branding preview theme mode",
|
||
"brandingUpdated": "Branding settings updated"
|
||
},
|
||
"mspLanguage": {
|
||
"title": "Organization Language",
|
||
"description": "Set the default language for everyone in this workspace — MSP staff, client portal users, and email notifications. Individual users and clients can override this for themselves.",
|
||
"fields": {
|
||
"defaultLanguage": "Default Language",
|
||
"availableLanguages": "Available Languages"
|
||
},
|
||
"help": {
|
||
"defaultLanguage": "Applied everywhere unless overridden by a user's personal preference or a client's configured default.",
|
||
"availableLanguages": "Select which languages are available for users to choose from."
|
||
}
|
||
},
|
||
"notifications": {
|
||
"title": "Notification Settings",
|
||
"description": {
|
||
"email": "Configure how your tenant sends email notifications",
|
||
"internal": "Configure how your tenant sends internal notifications"
|
||
},
|
||
"viewSwitcher": {
|
||
"email": "Email Notifications",
|
||
"internal": "Internal Notifications"
|
||
},
|
||
"emailTabs": {
|
||
"settings": "Settings",
|
||
"emailTemplates": "Email Templates",
|
||
"categories": "Categories",
|
||
"telemetry": "Telemetry"
|
||
},
|
||
"internalTabs": {
|
||
"categories": "Categories",
|
||
"categoriesTypes": "Categories & Types"
|
||
},
|
||
"loading": {
|
||
"settings": "Loading settings...",
|
||
"templates": "Loading templates...",
|
||
"categories": "Loading categories..."
|
||
},
|
||
"unsaved": {
|
||
"title": "Unsaved Changes",
|
||
"message": "You have unsaved notification settings. Are you sure you want to leave? Your changes will be lost."
|
||
},
|
||
"tenantDescription": {
|
||
"email": "Configure tenant-wide email notification settings",
|
||
"internal": "Configure tenant-wide internal notification settings"
|
||
},
|
||
"sections": {
|
||
"globalSettings": {
|
||
"title": "Global Settings",
|
||
"description": "Configure global notification settings"
|
||
},
|
||
"emailTemplates": {
|
||
"title": "Email Templates",
|
||
"description": "Manage email notification templates"
|
||
},
|
||
"categories": {
|
||
"title": "Notification Categories",
|
||
"description": "Manage notification categories and types"
|
||
},
|
||
"internalCategories": {
|
||
"title": "Internal Notification Categories",
|
||
"description": "Manage internal notification categories and types"
|
||
},
|
||
"telemetry": {
|
||
"title": "Telemetry & Analytics",
|
||
"description": "Manage your telemetry and analytics preferences"
|
||
}
|
||
}
|
||
},
|
||
"timeEntry": {
|
||
"title": "Time Entry Settings",
|
||
"description": "Manage your time entry settings and time periods"
|
||
},
|
||
"billing": {
|
||
"title": "Billing Settings",
|
||
"description": "Manage your billing and subscription"
|
||
},
|
||
"secrets": {
|
||
"title": "Secrets Management",
|
||
"description": "Manage encrypted secrets for use in workflows. Secrets can be referenced in workflow actions using the $secret syntax.",
|
||
"list": {
|
||
"title": "Secrets",
|
||
"description": "Manage secrets for use in workflows. Secrets are encrypted and can be referenced using { $secret: \"SECRET_NAME\" }",
|
||
"search": "Search secrets...",
|
||
"createSecret": "Create Secret",
|
||
"table": {
|
||
"name": "Name",
|
||
"description": "Description",
|
||
"lastUpdated": "Last Updated",
|
||
"lastAccessed": "Last Accessed",
|
||
"actions": "Actions",
|
||
"never": "Never",
|
||
"empty": "-"
|
||
},
|
||
"tooltips": {
|
||
"edit": "Edit secret",
|
||
"delete": "Delete secret"
|
||
}
|
||
},
|
||
"dialog": {
|
||
"createTitle": "Create Secret",
|
||
"editTitle": "Edit Secret",
|
||
"deleteTitle": "Delete Secret",
|
||
"fields": {
|
||
"name": {
|
||
"label": "Name *",
|
||
"placeholder": "MY_API_KEY",
|
||
"help": "Use uppercase letters, numbers, and underscores only"
|
||
},
|
||
"value": {
|
||
"label": "Value *",
|
||
"placeholder": "Enter secret value",
|
||
"editPlaceholder": "Enter new value to update",
|
||
"editHelp": "Leave empty to keep the current value"
|
||
},
|
||
"description": {
|
||
"label": "Description",
|
||
"placeholder": "What is this secret used for?"
|
||
}
|
||
},
|
||
"delete": {
|
||
"confirmation": "Are you sure you want to delete the secret {{name}}?",
|
||
"usedByWorkflows": "This secret is used by {{count}} workflow(s)",
|
||
"usedByWarning": "Deleting it will cause those workflows to fail when they try to access this secret.",
|
||
"cannotUndo": "This action cannot be undone.",
|
||
"typeToConfirm": "Type {{name}} to confirm:",
|
||
"placeholder": "Enter secret name"
|
||
},
|
||
"actions": {
|
||
"cancel": "Cancel",
|
||
"create": "Create Secret",
|
||
"update": "Update Secret",
|
||
"delete": "Delete Secret",
|
||
"saving": "Saving...",
|
||
"deleting": "Deleting..."
|
||
}
|
||
},
|
||
"messages": {
|
||
"success": {
|
||
"created": "Secret \"{{name}}\" created",
|
||
"updated": "Secret \"{{name}}\" updated",
|
||
"deleted": "Secret \"{{name}}\" deleted"
|
||
},
|
||
"error": {
|
||
"loadFailed": "Failed to load secrets",
|
||
"deleteFailed": "Failed to delete secret",
|
||
"saveFailed": "Failed to save secret",
|
||
"nameRequired": "Secret name is required",
|
||
"valueRequired": "Secret value is required",
|
||
"noChanges": "No changes to save",
|
||
"fixValidation": "Please fix the validation errors"
|
||
}
|
||
}
|
||
},
|
||
"importExport": {
|
||
"title": "Import & Export Workspace",
|
||
"description": "Configure imports, exports, and automated data flows from a single control centre.",
|
||
"history": {
|
||
"title": "Import & Export History",
|
||
"description": "Review every import or export job in one place.",
|
||
"empty": "No import or export jobs found. Generate a preview to create the first job.",
|
||
"table": {
|
||
"date": "Date",
|
||
"source": "Source",
|
||
"file": "File",
|
||
"status": "Status",
|
||
"created": "Created",
|
||
"duplicates": "Duplicates",
|
||
"errors": "Errors"
|
||
}
|
||
},
|
||
"tabs": {
|
||
"assetImport": "Asset Import",
|
||
"assetExport": "Asset Export",
|
||
"templatesAutomation": "Templates & Automation"
|
||
},
|
||
"import": {
|
||
"fields": {
|
||
"importSource": "Import source",
|
||
"uploadFile": "Upload file",
|
||
"fieldMapping": "Field mapping",
|
||
"rememberMapping": "Remember this mapping for future imports"
|
||
},
|
||
"placeholders": {
|
||
"noSources": "No import sources available",
|
||
"selectSource": "Select an import source",
|
||
"sourceColumn": "Source column name",
|
||
"example": "e.g. {{example}}"
|
||
},
|
||
"help": {
|
||
"fieldMapping": "Enter the column names from your file that correspond to each required asset field. Leave optional fields blank to skip them."
|
||
},
|
||
"alerts": {
|
||
"selectSource": "Select an import source to continue.",
|
||
"chooseFile": "Choose a CSV or XLSX file to continue.",
|
||
"validationIssues": "Validation issues detected."
|
||
},
|
||
"actions": {
|
||
"generatePreview": "Generate Preview",
|
||
"preparingPreview": "Preparing Preview…",
|
||
"proceedWithImport": "Proceed with Import",
|
||
"startingImport": "Starting Import…",
|
||
"refresh": "Refresh",
|
||
"refreshing": "Refreshing…",
|
||
"cancel": "Cancel",
|
||
"importSelected": "Import Selected"
|
||
},
|
||
"preview": {
|
||
"title": "Import Preview",
|
||
"description": "Showing up to the first 10 rows from {{totalRows}} total records.",
|
||
"stats": {
|
||
"total": "Total",
|
||
"valid": "Valid",
|
||
"duplicates": "Duplicates",
|
||
"errors": "Errors"
|
||
},
|
||
"table": {
|
||
"row": "Row",
|
||
"values": "Values",
|
||
"issues": "Issues"
|
||
},
|
||
"empty": "No preview rows available."
|
||
}
|
||
},
|
||
"export": {
|
||
"comingSoon": "Asset export tooling is coming soon. Planned capabilities include exporting filtered asset lists, audit data, and mapping templates directly to CSV/XLSX."
|
||
},
|
||
"templates": {
|
||
"comingSoon": "Mapping templates and scheduled imports will live here. Save column mappings, share them across the team, and configure recurring jobs."
|
||
},
|
||
"jobDetails": {
|
||
"title": "Import Job Details",
|
||
"stats": {
|
||
"totalRows": "Total Rows",
|
||
"processed": "Processed",
|
||
"created": "Created",
|
||
"updated": "Updated",
|
||
"duplicates": "Duplicates",
|
||
"errors": "Errors"
|
||
},
|
||
"sections": {
|
||
"summary": "Summary",
|
||
"records": "Records ({{count}})",
|
||
"errors": "Errors ({{count}})",
|
||
"duplicates": "Duplicates ({{count}})"
|
||
},
|
||
"fields": {
|
||
"source": "Source",
|
||
"originalFileName": "Original file name",
|
||
"storedFileId": "Stored file ID",
|
||
"documentId": "Document ID",
|
||
"documentAssociation": "Document association",
|
||
"clientAssociation": "Client Association",
|
||
"associatedClient": "Associated client",
|
||
"defaultClientContext": "Default client context",
|
||
"tenantClientFallback": "Tenant client fallback",
|
||
"externalId": "External ID",
|
||
"status": "Status",
|
||
"sampleValues": "Sample Values",
|
||
"error": "Error",
|
||
"duplicateMatch": "Duplicate Match"
|
||
},
|
||
"empty": {
|
||
"noRecords": "No processed records yet.",
|
||
"noErrors": "No validation errors were recorded.",
|
||
"noDuplicates": "No duplicates were detected for this job.",
|
||
"noValues": "No values"
|
||
},
|
||
"truncated": "Showing the first {{count}} records. Download the job results for full history."
|
||
},
|
||
"messages": {
|
||
"error": {
|
||
"loadImportData": "Failed to load import data",
|
||
"createPreview": "Failed to create preview",
|
||
"selectPreviewFirst": "Select a preview to approve before importing.",
|
||
"startImportJob": "Failed to start import job",
|
||
"loadJobDetails": "Failed to load job details",
|
||
"refreshHistory": "Failed to refresh import history"
|
||
}
|
||
},
|
||
"selectJobHint": "Select an import job to inspect its results."
|
||
},
|
||
"email": {
|
||
"title": "Email Configuration",
|
||
"description": "Configure email providers, domains, and settings"
|
||
},
|
||
"extensions": {
|
||
"title": "Extension Management",
|
||
"description": "Install, configure, and manage extensions to extend Alga PSA functionality.",
|
||
"tabs": {
|
||
"manage": "Manage",
|
||
"install": "Install"
|
||
},
|
||
"enterpriseOnly": {
|
||
"title": "Enterprise feature",
|
||
"description": "Extensions are available in the Enterprise edition of Alga PSA."
|
||
},
|
||
"links": {
|
||
"needLogs": "Need extension logs?",
|
||
"debugConsole": "Open Service Proxy Demo Debug Console"
|
||
},
|
||
"loading": {
|
||
"extensions": "Loading extensions...",
|
||
"installer": "Loading installer..."
|
||
}
|
||
},
|
||
"security": {
|
||
"title": "Security Settings",
|
||
"tabs": {
|
||
"roles": "Roles",
|
||
"sessions": "Sessions",
|
||
"sso": "Single Sign-On",
|
||
"permissions": "Permissions",
|
||
"userRoles": "User Roles",
|
||
"policies": "Policies",
|
||
"apiKeys": "API Keys"
|
||
},
|
||
"loading": {
|
||
"roles": "Loading role configuration...",
|
||
"permissions": "Loading permissions configuration...",
|
||
"userRoles": "Loading user role configuration...",
|
||
"policies": "Loading policy configuration...",
|
||
"apiKeys": "Loading API key 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"
|
||
},
|
||
"noRolesAssigned": "No roles assigned",
|
||
"removeRole": "Remove {{role}}",
|
||
"emptyState": {
|
||
"noUsers": "No {{type}} users found",
|
||
"inactiveHidden": "(inactive users hidden)"
|
||
},
|
||
"inactiveTag": "(Inactive)"
|
||
},
|
||
"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}} ago",
|
||
"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": {
|
||
"loggingOut": "Logging out...",
|
||
"revoked": "Session revoked successfully"
|
||
},
|
||
"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"
|
||
}
|
||
},
|
||
"ssoBulk": {
|
||
"loading": {
|
||
"title": "Single Sign-On",
|
||
"description": "Loading SSO bulk assignment tools..."
|
||
},
|
||
"autoLink": {
|
||
"title": "Automatically set up SSO for new internal users",
|
||
"description": "Turn this on to provision every new staff account with your corporate SSO provider right away, so they never need a password-based sign-in.",
|
||
"body": "When enabled, newly added MSP users can sign in with Google or Microsoft using their work email. They will not have to manually link their account.",
|
||
"toggleLabel": "Toggle automatic SSO matching",
|
||
"disabledInfo": "Enable this toggle to let new and existing staff skip the “Connect SSO” flow when their email already matches a configured provider. We’ll still log every automatic link."
|
||
},
|
||
"bulk": {
|
||
"title": "Bulk Single Sign-On Assignment",
|
||
"description": "Select internal users from the list below and link them to a configured Google or Microsoft provider. Use preview to double-check the impact before executing.",
|
||
"noProviders": "No SSO providers are configured yet. Add OAuth credentials to continue with bulk assignments."
|
||
},
|
||
"errors": {
|
||
"loadProviders": "Unable to load SSO provider configuration.",
|
||
"updatePreferences": "Unable to update SSO preferences."
|
||
},
|
||
"form": {
|
||
"title": "Choose provider & select users",
|
||
"description": "Pick the configured SSO provider for your staff, then search and select the users who should be linked.",
|
||
"providerLabel": "Provider",
|
||
"notConfigured": "Not configured",
|
||
"providerNotConfiguredAlert": "Provide OAuth credentials for this provider before linking accounts.",
|
||
"actionLabel": "Action",
|
||
"linkSelected": "Link selected users",
|
||
"unlinkSelected": "Unlink selected users",
|
||
"actionPlaceholder": "Select SSO bulk action",
|
||
"actionDescription": "Linking adds the provider to each selected user. Unlinking removes the provider so the user returns to password/TOTP sign-in until they link again.",
|
||
"searchLabel": "Find internal users",
|
||
"searchPlaceholder": "Search by email or name",
|
||
"noneSelected": "No users selected yet.",
|
||
"selected_one": "{{count}} user selected.",
|
||
"selected_other": "{{count}} users selected.",
|
||
"clearSelection": "Clear selection",
|
||
"loadingUsers": "Loading users...",
|
||
"noMatch": "No users match this search.",
|
||
"noUsers": "No internal users found.",
|
||
"clientPortalComing": "Client portal bulk assignments are coming soon. For now, this tool applies only to internal MSP users.",
|
||
"loadUsersFailed": "Unable to load assignable users.",
|
||
"actions": {
|
||
"previewLink": "Preview assignment",
|
||
"previewUnlink": "Preview unlink",
|
||
"link": "Link accounts",
|
||
"unlink": "Unlink accounts",
|
||
"preparingPreview": "Preparing preview…",
|
||
"linking": "Linking accounts…",
|
||
"unlinking": "Unlinking accounts…",
|
||
"bulkLabel": "Bulk SSO actions {{location}}"
|
||
},
|
||
"table": {
|
||
"email": "Email",
|
||
"id": "ID",
|
||
"name": "Name",
|
||
"status": "Status",
|
||
"active": "Active",
|
||
"inactive": "Inactive",
|
||
"linkedProviders": "Linked providers",
|
||
"unlinked": "Unlinked",
|
||
"lastLogin": "Last login"
|
||
},
|
||
"toast": {
|
||
"providerRequiredTitle": "Provider required",
|
||
"providerRequiredDescription": "Select a configured provider before continuing.",
|
||
"noUsersTitle": "No users selected",
|
||
"noUsersDescription": "Select at least one user from the table.",
|
||
"failedTitle": "Bulk assignment failed",
|
||
"failedDescription": "Unable to process SSO bulk assignment.",
|
||
"linkCompleteTitle": "Link complete",
|
||
"unlinkCompleteTitle": "Unlink complete",
|
||
"previewReadyTitle": "Preview ready",
|
||
"linkedCount": "Linked {{count}} accounts via {{provider}}.",
|
||
"unlinkedCount": "Unlinked {{count}} accounts via {{provider}}.",
|
||
"previewUnlink_one": "Preview ready. We'll unlink {{count}} selected user.",
|
||
"previewUnlink_other": "Preview ready. We'll unlink {{count}} selected users.",
|
||
"previewLink": "Preview ready. Review the summary before linking accounts."
|
||
},
|
||
"results": {
|
||
"completeTitle": "Assignment complete",
|
||
"previewTitle": "Preview results",
|
||
"noneMatched": "None of the selected users matched the current filters.",
|
||
"processed_one": "Processed {{count}} user.",
|
||
"processed_other": "Processed {{count}} users.",
|
||
"candidatesSelected": "{{count}} selected",
|
||
"unlinked": "Unlinked",
|
||
"wouldUnlink": "Would unlink",
|
||
"linked": "Linked",
|
||
"wouldLink": "Would link",
|
||
"alreadyUnlinked": "Already unlinked",
|
||
"alreadyLinked": "Already linked",
|
||
"skippedInactive": "Skipped (inactive)"
|
||
},
|
||
"providerNames": {
|
||
"google": "Google Workspace",
|
||
"microsoft": "Microsoft 365"
|
||
}
|
||
}
|
||
},
|
||
"profile": {
|
||
"pageTitle": "Your Profile",
|
||
"tabs": {
|
||
"profile": "Profile",
|
||
"security": "Security",
|
||
"sso": "Single Sign-On",
|
||
"apiKeys": "API Keys",
|
||
"notifications": "Notifications",
|
||
"calendar": "Calendar"
|
||
},
|
||
"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",
|
||
"saveFailed": "Failed to save profile",
|
||
"emailAlreadyExists": "A user with this email address already exists",
|
||
"reportsToSelf": "A user cannot report to themselves",
|
||
"reportsToCycle": "This would create a circular reporting chain"
|
||
}
|
||
},
|
||
"validation": {
|
||
"firstNameRequired": "First name is required",
|
||
"lastNameRequired": "Last name is required"
|
||
}
|
||
},
|
||
"password": {
|
||
"changePassword": "Change Password",
|
||
"fields": {
|
||
"currentPassword": "Current Password",
|
||
"newPassword": "New Password",
|
||
"confirmNewPassword": "Confirm New Password"
|
||
},
|
||
"messages": {
|
||
"success": {
|
||
"changed": "Password changed successfully"
|
||
},
|
||
"error": {
|
||
"mismatch": "New passwords do not match",
|
||
"tooShort": "Password must be at least 8 characters long",
|
||
"changeFailed": "An error occurred while changing password"
|
||
}
|
||
}
|
||
},
|
||
"integrations": {
|
||
"betaNotice": "Some integrations are still in development. Please work in a sandbox environment when evaluating, and share your feedback to help us improve.",
|
||
"emptyCategory": "No integrations available in this category.",
|
||
"rmmEnterpriseNote": "RMM integrations are available in the Enterprise edition.",
|
||
"categoryHeading": "{{label}} Integrations",
|
||
"loading": {
|
||
"payments": "Loading payment settings..."
|
||
},
|
||
"categories": {
|
||
"accounting": {
|
||
"label": "Accounting",
|
||
"description": "Select an accounting package to configure synchronization for invoices, payments, and tax data."
|
||
},
|
||
"rmm": {
|
||
"label": "RMM",
|
||
"description": "Connect remote monitoring and management tools"
|
||
},
|
||
"itDocumentation": {
|
||
"label": "IT Documentation",
|
||
"description": "Connect IT documentation platforms to surface client documentation, assets, and credentials in context."
|
||
},
|
||
"communication": {
|
||
"label": "Communication",
|
||
"description": "Connect inbox and collaboration surfaces for ticket processing, operator workflows, and Microsoft Teams access."
|
||
},
|
||
"calendar": {
|
||
"label": "Calendar",
|
||
"description": "Enterprise-only calendar sync for Google and Outlook keeps dispatch and client appointments aligned."
|
||
},
|
||
"providers": {
|
||
"label": "Providers",
|
||
"description": {
|
||
"ee": "Configure shared provider credentials used by email, calendar, MSP SSO, and other integrations.",
|
||
"oss": "Configure shared provider credentials used by email, MSP SSO, and other integrations."
|
||
}
|
||
},
|
||
"identity": {
|
||
"label": "Identity",
|
||
"description": "Connect identity providers for tenant discovery and contact synchronization."
|
||
},
|
||
"payments": {
|
||
"label": "Payments",
|
||
"description": "Accept online payments for invoices"
|
||
}
|
||
},
|
||
"items": {
|
||
"accountingSetup": {
|
||
"name": "Accounting Integrations",
|
||
"description": "Configure accounting synchronization and exports"
|
||
},
|
||
"rmmSetup": {
|
||
"name": "RMM Integrations",
|
||
"description": "Select and configure your RMM provider"
|
||
},
|
||
"hudu": {
|
||
"name": "Hudu",
|
||
"description": "Connect a Hudu instance to view client documentation and credentials inside AlgaPSA."
|
||
},
|
||
"email": {
|
||
"name": "Inbound Email",
|
||
"description": "Process incoming emails into tickets",
|
||
"cardTitle": "Inbound Email Integration",
|
||
"cardDescription": "Configure email providers to automatically process incoming emails into tickets"
|
||
},
|
||
"teams": {
|
||
"name": "Microsoft Teams",
|
||
"description": "Configure Teams collaboration surfaces for MSP technicians",
|
||
"upgradeDescription": "Configure Microsoft Teams collaboration surfaces for MSP technicians. Upgrade to Pro to unlock this feature."
|
||
},
|
||
"calendarSync": {
|
||
"name": "Calendar Sync",
|
||
"description": "Sync schedule entries with Google or Microsoft calendars"
|
||
},
|
||
"google": {
|
||
"name": "Google",
|
||
"description": {
|
||
"ee": "Tenant-owned Google Cloud credentials for Gmail and Calendar",
|
||
"oss": "Tenant-owned Google Cloud credentials for Gmail and MSP SSO support flows"
|
||
},
|
||
"cardTitle": "Provider Credentials",
|
||
"cardDescription": {
|
||
"ee": "Configure Google and Microsoft first, then connect provider accounts from the Inbound Email and Calendar integration screens. MSP SSO domain discovery uses these provider credentials with tenant login-domain mappings.",
|
||
"oss": "Configure Google and Microsoft first, then connect provider accounts from the Inbound Email integration screen. MSP SSO domain discovery uses these provider credentials with tenant login-domain mappings."
|
||
}
|
||
},
|
||
"entra": {
|
||
"name": "Microsoft Entra",
|
||
"description": "Discover managed Microsoft tenants and sync users to contacts",
|
||
"upgradeDescription": "Discover managed Microsoft Entra tenants and sync users to contacts. Upgrade to Premium to unlock this feature."
|
||
},
|
||
"stripe": {
|
||
"name": "Stripe",
|
||
"description": "Accept credit card payments for invoices via Stripe"
|
||
}
|
||
}
|
||
},
|
||
"orgChart": {
|
||
"emptyState": "No users available.",
|
||
"roles": {
|
||
"client": "Client User",
|
||
"internal": "Internal User"
|
||
},
|
||
"badge": {
|
||
"inactive": "Inactive"
|
||
}
|
||
},
|
||
"permissions": {
|
||
"messages": {
|
||
"adminLocked": "Admin role permissions cannot be modified",
|
||
"permissionsUpdated": "Permissions updated successfully"
|
||
}
|
||
},
|
||
"sla": {
|
||
"messages": {
|
||
"scheduleNotFound": "Schedule not found",
|
||
"scheduleUpdated": "Schedule updated successfully",
|
||
"scheduleCreated": "Schedule created successfully",
|
||
"scheduleDeleted": "Schedule deleted successfully",
|
||
"defaultHoursCreated": "Default business hours schedule created",
|
||
"scheduleRequired": "Please select a schedule first",
|
||
"holidayNameRequired": "Holiday name is required",
|
||
"holidayDateRequired": "Holiday date is required",
|
||
"holidayAdded": "Holiday added successfully",
|
||
"holidayDeleted": "Holiday deleted successfully"
|
||
}
|
||
},
|
||
"clientPortalLanguage": {
|
||
"title": "Client Portal Language",
|
||
"description": "Override the default language for client portal users only. MSP staff keep the organization default.",
|
||
"fields": {
|
||
"defaultLanguage": "Default Language"
|
||
},
|
||
"help": {
|
||
"defaultLanguage": "When set, client portal users see this language unless their individual preference or their client's default overrides it."
|
||
},
|
||
"placeholder": "Select a language",
|
||
"inheritOption": "Use organization default ({{language}})",
|
||
"unsetHint": "To remove the client portal override, change the organization default under Settings → Language.",
|
||
"updated": "Client portal default language updated to {{language}}"
|
||
},
|
||
"language": {
|
||
"selectLanguage": "Select a language",
|
||
"languagesUpdated": "Available languages updated"
|
||
},
|
||
"settings": {
|
||
"assetTypes": {
|
||
"tab": "Assets",
|
||
"title": "Asset Types",
|
||
"description": "Manage the asset types available in your asset module. Custom types carry a field schema that drives their create/edit forms.",
|
||
"loading": "Loading asset types...",
|
||
"table": {
|
||
"name": "Name",
|
||
"builtin": "Built-in",
|
||
"slug": "Identifier",
|
||
"fieldCount": "Fields",
|
||
"order": "Order",
|
||
"actions": "Actions",
|
||
"openMenu": "Open menu"
|
||
},
|
||
"actions": {
|
||
"addType": "Add Asset Type",
|
||
"edit": "Edit",
|
||
"delete": "Delete",
|
||
"cancel": "Cancel",
|
||
"save": "Save",
|
||
"create": "Create",
|
||
"confirmDelete": "Delete"
|
||
},
|
||
"dialog": {
|
||
"createTitle": "Add Asset Type",
|
||
"editTitle": "Edit Asset Type",
|
||
"nameLabel": "Name",
|
||
"namePlaceholder": "e.g. Firewall",
|
||
"displayOrderLabel": "Display Order",
|
||
"iconLabel": "Icon",
|
||
"builtinSchemaHint": "Built-in types use fixed forms managed by AlgaPSA, so their field schema cannot be edited. You can still rename the type or change its icon."
|
||
},
|
||
"deleteDialog": {
|
||
"title": "Delete Asset Type",
|
||
"message": "This permanently removes \"{{name}}\" from your asset type registry."
|
||
},
|
||
"messages": {
|
||
"created": "Asset type created",
|
||
"updated": "Asset type updated",
|
||
"deleted": "Asset type deleted"
|
||
},
|
||
"errors": {
|
||
"fetchFailed": "Failed to load asset types.",
|
||
"saveFailed": "Failed to save asset type.",
|
||
"deleteFailed": "Failed to delete asset type.",
|
||
"invalidName": "Enter a name for this asset type.",
|
||
"invalidSchema": "The field schema is invalid. Fix the highlighted fields and try again.",
|
||
"reservedSlug": "The identifier \"{{slug}}\" is reserved for a built-in type. Choose another name.",
|
||
"slugConflict": "An asset type with the identifier \"{{slug}}\" already exists.",
|
||
"notFound": "This asset type no longer exists.",
|
||
"builtinImmutable": "Built-in types only allow name and icon changes.",
|
||
"builtinUndeletable": "Built-in types cannot be deleted.",
|
||
"inUse": "This type is still used by {{assetCount}} asset(s). Reassign those assets before deleting it.",
|
||
"unknown": "Something went wrong."
|
||
},
|
||
"editor": {
|
||
"title": "Fields",
|
||
"empty": "No fields yet. Add fields to build the create/edit form for this type.",
|
||
"addField": "Add field",
|
||
"fieldLabel": "Label",
|
||
"fieldLabelPlaceholder": "e.g. Serial Number",
|
||
"fieldKey": "Key",
|
||
"fieldKeyPlaceholder": "e.g. serial_number",
|
||
"fieldKind": "Kind",
|
||
"fieldRequired": "Required",
|
||
"fieldOptions": "Options (comma-separated)",
|
||
"fieldOptionsPlaceholder": "e.g. Gold, Silver, Bronze",
|
||
"moveUp": "Move field up",
|
||
"moveDown": "Move field down",
|
||
"removeField": "Remove field",
|
||
"kinds": {
|
||
"text": "Text",
|
||
"number": "Number",
|
||
"date": "Date",
|
||
"select": "Select",
|
||
"url": "URL",
|
||
"boolean": "Yes / No"
|
||
},
|
||
"errors": {
|
||
"invalidKey": "Key must start with a lowercase letter and use only lowercase letters, numbers, and underscores.",
|
||
"duplicateKey": "Each field key must be unique.",
|
||
"missingLabel": "Label is required.",
|
||
"invalidKind": "Choose a valid field kind.",
|
||
"invalidRequired": "Required must be on or off.",
|
||
"missingOptions": "Select fields need at least one option.",
|
||
"invalidOptions": "Options must be non-empty values.",
|
||
"invalidField": "This field is invalid."
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|