{ "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", "portal": "Portal", "notifications": "Notificações", "documents": "Documents", "knowledgeBase": "Knowledge Base", "requestServices": "Pedidos de serviço", "home": "Início", "myTickets": "Meus tickets", "newRequest": "Novo pedido", "schedule": "Agenda", "myDevices": "Meus dispositivos", "helpCenter": "Centro de ajuda", "organization": "Organização", "clientPortalLabel": "Portal do cliente", "supportCard": { "title": "Precisa de ajuda urgente?", "description": "Entre em contato a qualquer momento." }, "sections": { "workspace": "Área de trabalho", "resources": "Recursos", "more": "Mais", "apps": "Apps" }, "licenses": "Licenças" }, "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": "Próximas visitas", "activeDevices": "Dispositivos ativos", "openTicketsHint": "Suporte ativo", "activeProjectsHint": "Em andamento", "nextLabel": "Próximo: {{when}}", "noneScheduled": "Nada agendado", "deviceStatusHint": "Endpoints geridos", "serviceRequests": "Pedidos de serviço", "serviceRequestsHint": "Total de submissões", "openTicketsDescription": "Tickets de suporte em que ainda estamos a trabalhar.", "activeProjectsDescription": "Projetos que estamos a entregar à sua equipa.", "serviceRequestsDescription": "Pedidos estruturados que enviou a partir do catálogo.", "upcomingVisitsDescription": "Visitas agendadas com os nossos técnicos.", "activeDevicesDescription": "Equipamentos que gerimos e monitorizamos atualmente." }, "quickActions": { "title": "Quick Actions", "createTicket": "Criar ticket", "requestAppointment": "Pedir consulta", "viewLatestInvoice": "View Latest Invoice", "newServiceRequest": "Novo pedido de serviço" }, "appointments": { "title": "Upcoming Appointments", "noUpcoming": "No upcoming appointments. Request one now!", "requestButton": "Request Appointment", "viewAll": "View all appointments →", "technician": "Technician", "noUpcomingShort": "Nada na agenda", "countLabel": "{{count}} próximos" }, "recentActivity": { "title": "Recent Activity" }, "viewAll": "View all {{item}} →", "welcomeBack": "Bem-vindo de volta", "heroSubtitle": "Aqui está um resumo da sua atividade de suporte de TI. Nossa equipe está disponível para ajudar.", "greeting": { "morning": "Bom dia", "afternoon": "Boa tarde", "evening": "Boa noite" }, "nextToday": "Hoje", "nextTomorrow": "Amanhã", "recentTickets": { "title": "Tickets recentes", "viewAll": "Ver todos", "id": "ID", "subject": "Assunto", "status": "Status", "priority": "Prioridade", "updated": "Atualizado", "empty": "Sem tickets ativos — ótimo!", "countLabel": "{{count}} exibidos" }, "activity": { "title": "Atividade recente", "subtitle": "Atualizações recentes da sua conta", "empty": "Sem atividade ainda", "emptyHint": "Quando tickets forem atualizados ou faturas chegarem, você as verá aqui.", "viewTickets": "Ver todos os tickets", "titles": { "ticket": "Novo ticket: {{name}}", "invoice": "Fatura {{name}} gerada", "asset": "Manutenção do ativo: {{name}}", "project": "Projeto atualizado: {{name}}", "quote": { "_default": "Orçamento {{name}}", "sent": "Orçamento {{name}} enviado para revisão", "accepted": "Orçamento {{name}} aceite", "rejected": "Orçamento {{name}} rejeitado", "expired": "Orçamento {{name}} expirado" }, "service_request": { "_default": "Pedido de serviço: {{name}}", "pending": "Pedido de serviço submetido: {{name}}", "succeeded": "Pedido de serviço concluído: {{name}}", "failed": "Pedido de serviço falhou: {{name}}" }, "appointment": { "_default": "Agendamento: {{name}}", "pending": "Agendamento pedido: {{name}}", "approved": "Agendamento confirmado: {{name}}", "declined": "Agendamento recusado: {{name}}", "cancelled": "Agendamento cancelado: {{name}}" } }, "algadeskEmptyHint": "Quando os tickets forem atualizados, eles aparecerão aqui." }, "devices": { "title": "Seus dispositivos", "viewAll": "Ver todos", "countLabel": "{{count}} geridos", "emptyShort": "Ainda sem dispositivos", "emptyBody": "Os dispositivos geridos pelo seu fornecedor aparecerão aqui.", "healthy": "Saudável", "inactive": "Inativo", "active": "Ativo" }, "timeAgo": { "justNow": "agora mesmo", "minutes": "há {{count}} min", "hours": "há {{count}} h", "days": "há {{count}}d" } }, "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": "É necessário um token de convite válido.", "tokenAndPasswordRequired": "São necessários um token e uma palavra-passe para concluir a configuração.", "passwordTooShort": "A palavra-passe deve ter pelo menos 8 caracteres.", "invalidOrExpiredToken": "Este link de convite é inválido ou expirou.", "tenantContextRequired": "Falta o contexto da organização. Volte a abrir o link de convite.", "resetPasswordFailed": "Não foi possível redefinir a palavra-passe da conta existente. Tente novamente.", "createUserFailed": "Não foi possível criar a sua conta de utilizador. Tente novamente.", "setupFailed": "Não foi possível concluir a configuração do portal. Tente novamente.", "verificationFailed": "Não foi possível verificar o seu token de convite. Tente novamente.", "invitationFailed": "Não foi possível enviar o convite. Tente novamente.", "permissionDeniedInvite": "Não tens permissão para enviar convites do portal.", "permissionDeniedCreate": "Não tens permissão para criar contas de utilizador do portal.", "emailNotConfigured": "O serviço de e-mail não está configurado. Contacta o teu administrador.", "contactNotFound": "Contacto não encontrado.", "contactMissingEmail": "O contacto não tem um endereço de e-mail.", "contactInvalidEmail": "O contacto tem um endereço de e-mail inválido.", "userExistsForContact": "Já existe uma conta de utilizador para este contacto.", "portalUserAlreadyExists": "Já existe um utilizador do portal para este contacto.", "noDefaultClient": "Nenhum cliente predefinido está configurado para este inquilino.", "noDefaultLocation": "O cliente predefinido não tem uma localização predefinida configurada.", "noLocationEmail": "A localização do cliente não tem um e-mail de contacto configurado.", "baseUrlNotConfigured": "O URL base da aplicação não está configurado.", "invitationNotFound": "Convite não encontrado.", "revokeFailed": "Não foi possível revogar o convite. Tente novamente." } }, "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": "Contacto não encontrado.", "contactInactive": "Este contacto está inativo.", "emailAlreadyExists": "Já existe um utilizador com este endereço de e-mail.", "registrationFailed": "Não foi possível concluir o registo. Tente novamente." } }, "captchaRequired": "Conclua a verificação abaixo e depois faça login novamente.", "tooManyAttempts": "Muitas tentativas de login com falha. Aguarde alguns minutos antes de tentar novamente." }, "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": "Definições de notificações", "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": "Definições de notificações", "email": "Notificações por email", "ticketUpdates": "Ticket Updates", "projectUpdates": "Project Updates", "invoices": "Invoice Notifications", "announcements": "System Announcements", "emailPreferences": "Email", "internalPreferences": "Internas" }, "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", "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.", "emailAlreadyExists": "Já existe um utilizador com este endereço de e-mail", "reportsToSelf": "Um utilizador não pode reportar a si próprio", "reportsToCycle": "Isto criaria uma cadeia de reporte circular" }, "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", "createError": "Failed to create user", "deleteError": "Failed to delete user", "emailAlreadyExists": "Já existe um utilizador com este endereço de e-mail", "reportsToSelf": "Um utilizador não pode reportar a si próprio", "reportsToCycle": "Isto criaria uma cadeia de reporte circular" }, "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": "Não foi possível guardar o grupo de visibilidade", "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": "Notificações", "markAsRead": "Mark as read", "markAllAsRead": "Mark all as read", "noNotifications": "No new notifications", "settings": "Definições de notificações", "viewAll": "View all notifications", "tabs": { "unread": "Unread", "all": "All", "read": "Read" }, "preferences": { "title": "Preferências de notificações", "description": "Gerir as notificações internas que recebe", "loading": "A carregar preferências...", "loadError": "Falha ao carregar as preferências", "saveError": "Falha ao guardar a preferência", "noCategories": "Não há categorias de notificação disponíveis", "emailPreferences": "Preferências de email", "internalPreferences": "Preferências internas" }, "categories": { "tickets": "Tickets", "invoices": "Invoices", "messages": "Messages", "projects": "Projects", "system": "System" } }, "sidebar": { "goToDashboard": "Ir para o painel", "logoAlt": "Logotipo do portal do cliente", "expandSidebar": "Expandir barra lateral", "collapseSidebar": "Recolher barra lateral" }, "devices": { "pageTitle": "Meus dispositivos", "loading": "Carregando dispositivos…", "statusOkTitle": "Todos os dispositivos ativos", "statusOkBody": "{{count}} dispositivos reportando", "empty": { "title": "Ainda sem dispositivos", "body": "Os dispositivos geridos pelo seu fornecedor aparecerão aqui." }, "types": { "workstation": "Estações de trabalho", "server": "Servidores", "mobile": "Móvel", "printer": "Impressoras", "network": "Rede", "unknown": "Outros" }, "statusWarnTitle": "Alguns dispositivos inativos", "statusWarnBody": "{{active}} ativos · {{inactive}} inativos", "status": { "active": "Ativo", "inactive": "Inativo" }, "searchPlaceholder": "Pesquisar por nome, etiqueta ou série", "filters": { "allTypes": "Todos os tipos", "allStatuses": "Todos os estados" }, "clearFilters": "Limpar filtros", "columns": { "name": "Nome", "type": "Tipo", "status": "Estado", "location": "Localização", "updated": "Atualizado", "actions": "Ações" }, "notAvailable": "N/D", "detailsTitle": "Detalhes do ativo", "createTicket": "Criar ticket", "createTicketForDevice": "Criar ticket para este dispositivo", "rowActionsLabel": "Ações da linha" } }