{ "nav": { "dashboard": "Dashboard", "tickets": "Tickets", "projects": "Projects", "appointments": "Appointments", "billing": "Billing", "assets": "Assets", "clientSettings": "Client Settings", "profile": "Profile", "account": "Account", "signOut": "Sign out", "clientPortal": "Client Portal", "clientPortalLabel": "Client portal", "portal": "Portal", "notifications": "Notifications", "documents": "Documents", "knowledgeBase": "Knowledge Base", "requestServices": "Service Requests", "home": "Home", "myTickets": "My tickets", "newRequest": "New request", "schedule": "Schedule", "myDevices": "My devices", "helpCenter": "Help center", "organization": "Organization", "supportCard": { "title": "Need urgent help?", "description": "Reach out any time for assistance." }, "sections": { "workspace": "Workspace", "resources": "Resources", "more": "More", "apps": "Apps" }, "licenses": "Licenses" }, "sidebar": { "goToDashboard": "Go to dashboard", "logoAlt": "Client Portal Logo", "expandSidebar": "Expand sidebar", "collapseSidebar": "Collapse sidebar" }, "devices": { "pageTitle": "My devices", "loading": "Loading devices…", "statusOkTitle": "All devices active", "statusOkBody": "{{count}} devices reporting in", "empty": { "title": "No devices yet", "body": "Devices your provider manages will appear here." }, "types": { "workstation": "Workstations", "server": "Servers", "mobile": "Mobile", "printer": "Printers", "network": "Network", "unknown": "Other" }, "statusWarnTitle": "Some devices inactive", "statusWarnBody": "{{active}} active · {{inactive}} inactive", "status": { "active": "Active", "inactive": "Inactive" }, "searchPlaceholder": "Search by name, tag, or serial", "filters": { "allTypes": "All types", "allStatuses": "All statuses" }, "clearFilters": "Clear filters", "columns": { "name": "Name", "type": "Type", "status": "Status", "location": "Location", "updated": "Updated", "actions": "Actions" }, "notAvailable": "N/A", "detailsTitle": "Asset details", "createTicket": "Create ticket", "createTicketForDevice": "Create a ticket for this device", "rowActionsLabel": "Row actions" }, "dashboard": { "title": "Dashboard", "welcome": "Welcome back! Here's an overview of your account.", "loading": "Loading dashboard...", "error": "There was an error loading the dashboard. Please try again later.", "metrics": { "openTickets": "Open Support Tickets", "activeProjects": "Open Projects", "pendingInvoices": "Pending Invoices", "activeAssets": "Active Assets", "upcomingVisits": "Upcoming visits", "activeDevices": "Active devices", "openTicketsHint": "Active support", "activeProjectsHint": "In progress", "nextLabel": "Next: {{when}}", "noneScheduled": "None scheduled", "deviceStatusHint": "Managed endpoints", "serviceRequests": "Service requests", "serviceRequestsHint": "Total submissions", "openTicketsDescription": "Support tickets we are still working on.", "activeProjectsDescription": "Projects we are delivering for your team.", "serviceRequestsDescription": "Structured requests you have submitted from the catalog.", "upcomingVisitsDescription": "Scheduled appointments with our technicians.", "activeDevicesDescription": "Endpoints we currently manage and monitor." }, "welcomeBack": "Welcome back", "heroSubtitle": "Here's a snapshot of your IT support activity. Our team is standing by to help you stay productive.", "greeting": { "morning": "Good morning", "afternoon": "Good afternoon", "evening": "Good evening" }, "nextToday": "Today", "nextTomorrow": "Tomorrow", "recentTickets": { "title": "Recent tickets", "viewAll": "View all", "id": "ID", "subject": "Subject", "status": "Status", "priority": "Priority", "updated": "Updated", "empty": "No active tickets — nice!", "countLabel": "{{count}} shown" }, "activity": { "title": "Recent activity", "subtitle": "Latest updates across your account", "empty": "No recent activity yet", "emptyHint": "When tickets are updated or invoices arrive, you will see them here.", "viewTickets": "View all tickets", "titles": { "ticket": "New ticket: {{name}}", "invoice": "Invoice {{name}} generated", "asset": "Asset maintenance: {{name}}", "project": "Project updated: {{name}}", "quote": { "_default": "Quote {{name}}", "sent": "Quote {{name}} sent for review", "accepted": "Quote {{name}} accepted", "rejected": "Quote {{name}} rejected", "expired": "Quote {{name}} expired" }, "service_request": { "_default": "Service request: {{name}}", "pending": "Service request submitted: {{name}}", "succeeded": "Service request fulfilled: {{name}}", "failed": "Service request failed: {{name}}" }, "appointment": { "_default": "Appointment: {{name}}", "pending": "Appointment requested: {{name}}", "approved": "Appointment confirmed: {{name}}", "declined": "Appointment declined: {{name}}", "cancelled": "Appointment cancelled: {{name}}" } }, "algadeskEmptyHint": "When tickets are updated, you will see them here." }, "devices": { "title": "Your devices", "viewAll": "View all", "countLabel": "{{count}} managed", "emptyShort": "No devices yet", "emptyBody": "Devices your provider manages will appear here.", "healthy": "Healthy", "inactive": "Inactive", "active": "Active" }, "quickActions": { "title": "Quick Actions", "createTicket": "Create ticket", "requestAppointment": "Request appointment", "viewLatestInvoice": "View Latest Invoice", "newServiceRequest": "New service request" }, "appointments": { "title": "Upcoming Appointments", "noUpcoming": "No upcoming appointments. Request one now!", "noUpcomingShort": "Nothing on the calendar", "countLabel": "{{count}} upcoming", "requestButton": "Request Appointment", "viewAll": "View all appointments →", "technician": "Technician" }, "recentActivity": { "title": "Recent Activity" }, "viewAll": "View all {{item}} →", "timeAgo": { "justNow": "just now", "minutes": "{{count}} min ago", "hours": "{{count}} h ago", "days": "{{count}}d ago" } }, "auth": { "signIn": "Sign In", "signOut": "Sign Out", "email": "Email", "password": "Password", "emailPlaceholder": "Enter your email", "passwordPlaceholder": "Enter your password", "signingIn": "Signing in...", "rememberMe": "Remember me", "forgotPasswordLink": "Forgot your password?", "forgotPasswordPage": { "title": "Forgot password?", "subtitle": "No worries, we'll send you reset instructions.", "logoAlt": "Client Portal Logo", "emailLabel": "Email", "emailPlaceholder": "Enter your email", "sendResetButton": "Send Reset Link", "backToLogin": "← Back to log in", "resetLinkSent": "If an account exists with this email, a password reset link has been sent." }, "resetPassword": "Reset Password", "backToSignIn": "Back to sign in", "sendResetLink": "Send reset link", "resetLinkSent": "Password reset link has been sent to your email", "invalidCredentials": "Invalid email or password", "loginError": "An error occurred during login", "sessionExpired": "Your session has expired. Please sign in again.", "welcomeTitle": "Welcome to Your Client Portal", "welcomeSubtitle": "Manage your support tickets and stay connected", "signInDescription": "Please enter your credentials to access your account.", "clientLogin": "Client Login", "mspStaffLogin": "MSP Staff? Login here →", "accessDeniedTitle": "Access Denied", "accessDeniedMessage": "You do not have permission to access the client portal.", "registrationSuccessTitle": "Registration Successful", "registrationSuccessMessage": "Your account has been created. Please sign in.", "portalSetup": { "title": "Set Up Portal Access", "subtitle": "Complete your client portal account setup", "loading": "Loading...", "invalidInvitation": "Invalid Invitation", "invalidInvitationDescription": "There was a problem with your portal invitation", "invalidTokenMessage": "The invitation token is invalid or has expired. Please contact your service provider for a new invitation.", "noTokenProvided": "No invitation token provided", "invalidOrExpiredToken": "Invalid or expired invitation token", "verificationFailed": "Failed to verify invitation token", "goToPortalSignIn": "Go to Portal Sign In", "accountInformation": "Account Information", "name": "Name:", "email": "Email:", "client": "Client:", "password": "Password", "passwordPlaceholder": "Enter your password", "confirmPassword": "Confirm Password", "confirmPasswordPlaceholder": "Confirm your password", "passwordRequirements": "Password Requirements", "requirements": { "minLength": "At least 8 characters", "hasUppercase": "One uppercase letter", "hasLowercase": "One lowercase letter", "hasNumber": "One number", "hasSpecialChar": "One special character", "passwordsMatch": "Passwords match" }, "createAccount": "Create Portal Account", "creatingAccount": "Creating Account...", "alreadyHaveAccount": "Already have an account?", "signInToPortal": "Sign in to portal", "requirementsNotMet": "Please ensure all password requirements are met", "accountReady": "Account ready. Please sign in.", "accountCreatedSuccess": "Account created successfully. Please sign in.", "welcome": "Welcome to the client portal!", "createFailed": "Failed to create account", "errors": { "tokenRequired": "A valid invitation token is required.", "tokenAndPasswordRequired": "A token and password are required to complete setup.", "passwordTooShort": "Password must be at least 8 characters long.", "invalidOrExpiredToken": "This invitation link is invalid or has expired.", "tenantContextRequired": "Missing organization context. Please reopen the invitation link.", "resetPasswordFailed": "We couldn't reset the password for the existing account. Please try again.", "createUserFailed": "We couldn't create your user account. Please try again.", "setupFailed": "We couldn't complete the portal setup. Please try again.", "verificationFailed": "We couldn't verify your invitation token. Please try again.", "invitationFailed": "We couldn't send the invitation. Please try again.", "permissionDeniedInvite": "You don't have permission to send portal invitations.", "permissionDeniedCreate": "You don't have permission to create portal user accounts.", "emailNotConfigured": "Email service is not configured. Please contact your administrator.", "contactNotFound": "Contact not found.", "contactMissingEmail": "The contact doesn't have an email address.", "contactInvalidEmail": "The contact has an invalid email address.", "userExistsForContact": "A user account already exists for this contact.", "portalUserAlreadyExists": "A portal user already exists for this contact.", "noDefaultClient": "No default client is configured for this tenant.", "noDefaultLocation": "The default client has no default location configured.", "noLocationEmail": "The client location has no contact email configured.", "baseUrlNotConfigured": "The application base URL is not configured.", "invitationNotFound": "Invitation not found.", "revokeFailed": "Failed to revoke the invitation. Please try again." } }, "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" } }, "forgotPassword": "Forgot password?", "sessionEndedTitle": "Session Ended", "sessionEndedMessage": "Your session has been signed out. Please sign in again.", "clientRegistration": { "errors": { "contactNotFound": "Contact not found.", "contactInactive": "This contact is inactive.", "emailAlreadyExists": "A user with this email address already exists.", "registrationFailed": "We couldn't complete the registration. Please try again." } }, "captchaRequired": "Please complete the verification below, then sign in again.", "tooManyAttempts": "Too many failed sign-in attempts. Please wait a few minutes before trying again." }, "account": { "title": "Account", "licenseManagement": { "title": "Account", "subtitle": "License management is available in the MSP Portal", "howToPurchaseTitle": "How to Purchase Additional Licenses:", "step1": "Sign in to the MSP Portal (if you have admin access)", "step2": "Navigate to Settings → Account Management", "step3": "Click \"Add Licenses\" to purchase more licenses", "step4": "Complete the checkout process", "needHelpTitle": "Need Help?", "needHelpDescription": "Only users with Account Management permissions can purchase licenses. If you don't have access, please contact your AlgaPSA administrator.", "backToDashboard": "Back to Dashboard", "goToMSPPortal": "Go to MSP Portal", "signingOut": "Signing out..." }, "services": { "loadError": "Failed to load services", "loadContractLinesError": "Failed to load service contract lines", "updateError": "Failed to update service", "loading": "Loading services...", "activeTitle": "Active Services", "empty": "No active services found", "columns": { "service": "Service", "description": "Description", "status": "Status", "currentContractLine": "Current Contract Line", "nextBilling": "Next Billing" }, "actions": { "manage": "Manage", "upgrade": "Upgrade", "downgrade": "Downgrade" }, "manageTitle": "Manage {{service}}", "genericServiceLabel": "Service", "currentContractLine": "Current Contract Line", "availableContractLines": "Available Contract Lines", "catalog": { "title": "Available Services", "learnMore": "Learn More", "managedIt": { "title": "Managed IT Support", "description": "24/7 IT support and monitoring for your business. Includes proactive maintenance, security updates, and dedicated technical support.", "price": "Starting at $299/mo" }, "cloudBackup": { "title": "Cloud Backup", "description": "Secure cloud backup and disaster recovery solutions. Automated backups, quick recovery options, and data encryption included.", "price": "Starting at $99/mo" }, "cybersecurity": { "title": "Cybersecurity", "description": "Advanced security monitoring and threat prevention. Includes firewall management, endpoint protection, and regular security assessments.", "price": "Starting at $199/mo" } } }, "billing": { "loadError": "Failed to load billing data", "addPaymentError": "Failed to add payment method", "removePaymentError": "Failed to remove payment method", "setDefaultError": "Failed to set default payment method", "loadingBillingInfo": "Loading billing information...", "overviewTitle": "Billing Overview", "paymentMethodsTitle": "Payment Methods", "noPaymentMethods": "No payment methods on file", "billingCycleTitle": "Billing Cycle", "noBillingCycle": "No billing cycle found", "recentInvoicesTitle": "Recent Invoices", "billingHistoryTitle": "Billing History", "labels": { "defaultTag": "(Default)" }, "actions": { "setDefault": "Set Default", "remove": "Remove", "addPaymentMethod": "Add Payment Method", "adding": "Adding...", "view": "View" }, "fields": { "cardNumber": "Card Number", "expiryMonth": "Month", "expiryYear": "Year", "cvv": "CVV", "setAsDefault": "Set as default payment method" }, "history": { "period": "Period", "startDate": "Start Date", "endDate": "End Date", "status": "Status", "empty": "No billing history available" }, "validation": { "cardNumber": "Please enter a valid 16-digit card number", "expMonth": "Please enter a valid month (01-12)", "expYear": "Please enter a valid year (2024-2099)", "cvv": "Please enter a valid CVV" } } }, "profile": { "title": "My Profile", "personalInfo": "Personal Information", "contactInfo": "Contact Information", "clientInfo": "Client Information", "preferences": "Preferences", "security": "Security", "activity": "Activity", "notificationSettings": "Notification Settings", "fields": { "firstName": "First Name", "lastName": "Last Name", "email": "Email Address", "phone": "Phone Number", "mobile": "Mobile Phone", "title": "Job Title", "department": "Department", "client": "Client", "address": "Address", "city": "City", "state": "State/Province", "postalCode": "Postal Code", "country": "Country", "timezone": "Time Zone", "language": "Language Preference", "dateFormat": "Date Format", "avatar": "Profile Picture", "notes": "Notes" }, "changePassword": { "title": "Change Password", "current": "Current Password", "new": "New Password", "confirm": "Confirm New Password", "requirements": "Password must be at least 8 characters", "submit": "Update Password", "success": "Password updated successfully", "error": "Failed to update password", "passwordMismatch": "New passwords do not match", "unknownError": "An error occurred while changing password" }, "twoFactorAuth": { "title": "Two-Factor Authentication", "enable": "Enable 2FA", "disable": "Disable 2FA", "status": "Status", "enabled": "Enabled", "disabled": "Disabled" }, "notifications": { "unreadCount_one": "{{count}} unread notification", "unreadCount_other": "{{count}} unread notifications", "title": "Notification Settings", "email": "Email Notifications", "ticketUpdates": "Ticket Updates", "projectUpdates": "Project Updates", "invoices": "Invoice Notifications", "announcements": "System Announcements", "emailPreferences": "Email", "internalPreferences": "Internal" }, "actions": { "save": "Save Changes", "cancel": "Cancel", "edit": "Edit Profile", "uploadPhoto": "Upload Photo", "removePhoto": "Remove Photo" }, "messages": { "updateSuccess": "Profile updated successfully", "updateError": "Failed to update 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", "photoUploaded": "Photo uploaded successfully", "photoRemoved": "Photo removed successfully", "userNotFound": "User not found", "loadError": "Failed to load profile", "loading": "Loading profile...", "avatarDescription": "This avatar is shown to MSP staff when they view your contact information." }, "imageUpload": { "uploadAvatar": "Upload Avatar", "uploadLogo": "Upload Logo", "uploadingAvatar": "Uploading Avatar...", "uploadingLogo": "Uploading Logo...", "deleteAvatar": "Delete Profile Picture", "deleteLogo": "Delete Client Logo", "deleteProfilePicture": "Delete Profile Picture", "delete": "Delete", "deleting": "Deleting...", "deleteLogoConfirm": "Are you sure you want to delete the logo? This action cannot be undone.", "deleteAvatarConfirm": "Are you sure you want to delete the profile picture? This action cannot be undone.", "edit": "Edit", "invalidType": "Please select an image file.", "sizeLimit": "Image size must be less than 2MB.", "maxSize": "Max 2MB (PNG, JPG, GIF)", "uploadSuccess": "Uploaded successfully.", "uploadError": "Failed to upload. Please try again.", "deleteSuccess": "Deleted successfully.", "deleteError": "Failed to delete.", "deleteConfirm": "Are you sure you want to delete this? This action cannot be undone.", "linking": "Linking...", "linkDocument": "Link Document" }, "validation": { "clientNameRequired": "Client name is required", "emailRequired": "Email is required", "emailInvalid": "Please enter a valid email address", "phoneInvalid": "Please enter a valid phone number", "addressInvalid": "Address cannot be empty if provided" } }, "clientSettings": { "title": "Client Settings", "details": "Client Details", "billing": "Billing Information", "description": "Manage your client settings and configurations.", "tabs": { "account": "Account", "clientDetails": "Client Details", "userManagement": "User Management", "visibilityGroups": "Visibility Groups" }, "fields": { "clientLogo": "Client Logo", "clientName": "Client Name", "clientLocations": "Client Locations", "manageLocations": "Manage Locations", "mainOffice": "Main Office", "warehouse": "Warehouse", "website": "Website", "industry": "Industry", "companySize": "Company Size", "company_size": "Company Size", "annualRevenue": "Annual Revenue", "size": "Company Size", "taxId": "Tax ID", "billingAddress": "Billing Address", "primaryContact": "Primary Contact", "uploadLogo": "Upload Logo", "deleteLogo": "Delete Client Logo" }, "users": { "title": "User Management", "searchUsers": "Search users", "addNewUser": "Add New User", "addUser": "Add User", "editUser": "Edit User", "removeUser": "Remove User", "firstName": "First Name", "lastName": "Last Name", "email": "Email", "phone": "Phone", "roles": "Roles", "status": "Status", "actions": "Actions", "active": "Active", "inactive": "Inactive", "selectRole": "Select a role (optional)", "createUser": "Create User", "invite": "Send Invitation", "resendInvite": "Resend Invitation", "lastLogin": "Last Login", "never": "Never", "via": "via", "userNotFound": "User not found", "failedToLoad": "Failed to load user details", "failedToUpdate": "Failed to update user", "failedToAssignRole": "Failed to assign role", "failedToRemoveRole": "Failed to remove role", "statusDescription": "Set user account status", "noRolesAssigned": "No roles assigned", "assignRole": "Assign Role", "resetPassword": "Reset User Password", "clientNotFound": "Client not found", "permissionError": "You do not have permission to manage users", "loadError": "Failed to load users", "emailExists": "A contact with this email address already exists", "emailAlreadyExists": "A user with this email address already exists", "reportsToSelf": "A user cannot report to themselves", "reportsToCycle": "This would create a circular reporting chain", "createError": "Failed to create user", "deleteError": "Failed to delete user" }, "messages": { "saveChanges": "Save Changes", "failedToLoad": "Failed to load account information", "updateSuccess": "Client settings updated successfully", "userAdded": "User added successfully", "userRemoved": "User removed successfully", "inviteSent": "Invitation sent successfully", "noPermission": "You do not have permission to access client settings", "clientNotFound": "Client not found", "detailsLoadError": "Failed to load client details", "updateError": "Failed to update client details" }, "visibilityGroups": { "title": "Visibility Groups", "description": "Manage which ticket boards each client portal contact can access.", "nameLabel": "Name", "descriptionLabel": "Description", "boardLabel": "Boards", "noBoards": "No boards are available", "loadError": "Unable to load visibility groups", "empty": "No visibility groups yet.", "loading": "Loading groups...", "boardCount": "boards", "assignmentCount": "assigned contacts", "edit": "Edit", "delete": "Delete", "deleteDialogTitle": "Delete visibility group", "deleteConfirm": "Delete this visibility group?", "deleteAssignedError": "This visibility group is still assigned to one or more contacts.", "deleteMissingError": "This visibility group no longer exists.", "deleteSuccess": "Visibility group deleted", "deleteError": "Unable to delete visibility group", "save": "Save group", "create": "Create group", "nameRequired": "Visibility group name is required", "saveError": "Unable to save visibility group", "updateSuccess": "Visibility group updated", "createSuccess": "Visibility group created", "assignmentsTitle": "Contact assignments", "assignmentsDescription": "Assign each contact a visibility group or keep full access.", "noContacts": "No contacts available.", "assignmentLabel": "Assigned group", "fullAccess": "Full access", "cancel": "Cancel", "assignSuccess": "Contact visibility assignment updated", "assignError": "Unable to assign visibility group" } }, "notifications": { "title": "Notifications", "markAsRead": "Mark as read", "markAllAsRead": "Mark all as read", "noNotifications": "No new notifications", "settings": "Notification Settings", "viewAll": "View all notifications", "tabs": { "unread": "Unread", "all": "All", "read": "Read" }, "preferences": { "title": "Notification Preferences", "description": "Manage which internal notifications you receive", "loading": "Loading preferences...", "loadError": "Failed to load preferences", "saveError": "Failed to save preference", "noCategories": "No notification categories available", "emailPreferences": "Email preferences", "internalPreferences": "Internal preferences" }, "categories": { "tickets": "Tickets", "invoices": "Invoices", "messages": "Messages", "projects": "Projects", "system": "System" } } }