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

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

655 lines
24 KiB
JSON

{
"common": {
"actions": {
"add": "Add",
"back": "Back",
"cancel": "Cancel",
"close": "Close",
"create": "Create",
"delete": "Delete",
"downloadCsv": "Download CSV",
"edit": "Edit",
"import": "Import",
"reactivate": "Reactivate",
"remove": "Remove",
"retry": "Retry",
"save": "Save",
"saving": "Saving...",
"search": "Search",
"select": "Select",
"update": "Update",
"uploadCsv": "Upload CSV",
"view": "View"
},
"states": {
"active": "Active",
"inactive": "Inactive",
"loading": "Loading...",
"na": "N/A",
"none": "None"
},
"no": "No",
"yes": "Yes"
},
"contactsPage": {
"title": "Contacts Page",
"description": "Main contacts management page with search, filters, list view, and bulk actions",
"heading": "Contacts",
"addContact": "+ Add Contact",
"actions": "Actions",
"searchPlaceholder": "Search contacts, notes, and interactions",
"resetFilters": "Reset",
"unknownClient": "Unknown Client",
"noClient": "No Client",
"thisContact": "this contact",
"actionsMenuSrOnly": "Open menu",
"quickView": "Quick View",
"deleteValidationError": "Failed to validate deletion. Please try again.",
"deleteSuccess": "{{name}} has been deleted successfully.",
"deleteError": "Failed to delete contact. Please try again.",
"markInactiveSuccess": "{{name}} has been marked as inactive successfully.",
"markInactiveError": "An error occurred while marking the contact as inactive. Please try again.",
"statusOptions": {
"all": "All contacts",
"active": "Active contacts",
"inactive": "Inactive contacts"
},
"table": {
"name": "Name",
"created": "Created",
"email": "Email",
"phoneNumber": "Phone Number",
"client": "Client",
"tags": "Tags",
"actions": "Actions"
},
"lastPhoneTypeUsage": {
"title": "Last Phone Type Usage",
"message_one": "The following custom phone type is no longer used by any contact: {{labels}}. Delete the type definition, or keep it for future use?",
"message_other": "The following custom phone types are no longer used by any contact: {{labels}}. Delete the type definitions, or keep them for future use?",
"deleteType": "Delete Type",
"keepType": "Keep Type"
},
"print": {
"title": "Contatos",
"subtitle": "{{count}} contatos",
"noContacts": "Nenhum contato para imprimir",
"emptyValue": "-",
"columns": {
"name": "Nome",
"email": "E-mail",
"phone": "Telefone",
"client": "Cliente",
"status": "Status"
},
"optionsDialog": {
"title": "Opções de impressão",
"description": "Escolha quais colunas incluir ao imprimir os contatos."
}
},
"shareTooltip": "Imprimir, importar e exportar"
},
"contactDetails": {
"title": "Contact Details",
"description": "Contact detail view with tabs, inline editing, portal access, tags, and notes",
"backToContacts": "Back to Contacts",
"inactiveBadge": "inactive",
"actions": {
"goToContact": "Go to contact",
"saveChanges": "Save Changes"
},
"tabs": {
"details": "Details",
"tickets": "Tickets",
"documents": "Documents",
"interactions": "Interactions",
"notes": "Notes",
"portal": "Portal"
},
"fields": {
"fullName": "Full Name",
"client": "Client",
"email": "Email",
"role": "Role",
"inboundTicketDestinationOverride": "Inbound ticket destination override",
"useClientDestination": "Use client destination",
"inboundTicketDestinationHelp": "If set, this overrides the client destination for this exact sender contact. Precedence: Contact override -> Client destination -> Provider default.",
"tags": "Tags",
"notes": "Notes",
"status": "Status",
"phone": "Telefone"
},
"status": {
"label": "Status",
"helper": "Set contact status as active or inactive",
"active": "Active",
"inactive": "Inactive"
},
"loading": {
"destinations": "Loading destinations...",
"ticketFilters": "Loading ticket filters..."
},
"empty": {
"notSet": "Not set",
"unknownClient": "Unknown Client"
},
"client": {
"noClientAssigned": "No client assigned"
},
"delete": {
"successTitle": "Contact Deleted",
"successDescription": "Contact has been deleted successfully.",
"validationFailed": "Failed to validate deletion. Please try again.",
"failed": "Failed to delete contact. Please try again."
},
"deactivate": {
"successTitle": "Contact Deactivated",
"successDescription": "Contact has been marked as inactive successfully."
},
"reactivate": {
"successTitle": "Contact Reactivated",
"successDescription": "Contact has been reactivated successfully."
},
"update": {
"successTitle": "Contact Updated",
"successDescription": "Contact details have been saved successfully."
},
"saveFailed": {
"title": "Save Failed",
"description": "Could not save contact details. Please try again."
},
"error": {
"title": "Error"
},
"errors": {
"permissionDenied": "Permission denied. Please contact your administrator if you need additional access.",
"markInactiveFailed": "An error occurred while marking the contact as inactive. Please try again.",
"reactivateFailed": "An error occurred while reactivating the contact. Please try again."
}
},
"contactsImportDialog": {
"title": "Import Contacts",
"description": "CSV import dialog for contact mapping, preview, validation, and results",
"fields": {
"name": "Name *",
"email": "Email *",
"defaultPhoneNumber": "Default Phone Number",
"client": "Client",
"tags": "Tags",
"role": "Role",
"notes": "Notes",
"primaryEmailLabel": "Primary Email Label",
"additionalEmails": "Additional Email Addresses"
},
"unassigned": "Select field",
"errors": {
"emptyCsv": "CSV file is empty or invalid",
"readingCsv": "Error reading CSV file: {{message}}",
"unknownError": "Unknown error",
"requiredFieldNotMapped": "Required field \"{{field}}\" is not mapped",
"nameRequired": "Name is required",
"emailRequired": "Email is required",
"invalidEmail": "Invalid email format",
"processingCsv": "Error processing CSV data",
"importFailed": "Import failed"
},
"importOptions": {
"updateExisting": {
"title": "Update existing contacts",
"description": "Replace data for existing contacts"
},
"skipInvalid": {
"title": "Skip invalid records",
"description": "Continue import even if some records have validation errors"
}
},
"results": {
"title": "Import Results",
"downloadFailedRecords": "Download Failed Records"
},
"table": {
"status": "Status",
"name": "Name",
"email": "Email",
"message": "Message",
"exists": "Exists",
"issues": "Issues"
},
"tooltips": {
"importSuccessful": "Import successful",
"importFailed": "Import failed",
"validReady": "Valid - Ready to import",
"invalidHasErrors": "Invalid - Has errors"
},
"upload": {
"help": "Upload a CSV file with contact data",
"requiredLabel": "Required:",
"contactFieldsLabel": "Contact fields:",
"contactFieldsDescription": "phone_number (imports as the default work phone), role, notes, tags",
"clientFieldLabel": "Client field:",
"clientFieldDescription": "client (matches existing clients by name)",
"noteLabel": "Note:",
"noteDescription": "CSV import/export in v1 handles one default phone number per contact. Tags should be comma-separated values.",
"downloadTemplate": "Download CSV Template",
"emailFieldsLabel": "Email fields:",
"emailFieldsDescription": "primary_email_type (work/personal/billing/other or a custom label), additional_email_addresses (use `label:email@example.com | label:email@example.com`)",
"hybridEmailNote": "CSV import/export keeps `email` as the primary/default contact email. Tags should be comma-separated values."
},
"mapping": {
"title": "Map Contact Fields to CSV Columns",
"description": "Select which CSV column contains the data for each contact field. Fields marked with * are required.",
"contactFieldHeader": "Contact Field",
"csvColumnHeader": "Select CSV Column",
"notMapped": "Not mapped",
"requiredFieldsNote": "* Required fields must be mapped for import to proceed",
"largeImportWarning": "You are importing {{count}} records. Processing may take a moment.",
"processing": "Processing...",
"preview": "Preview"
},
"preview": {
"title": "Preview Import",
"totalRecords": "Total records:",
"valid": "Valid:",
"invalid": "Invalid:"
},
"importing": {
"title": "Importing Contacts",
"processing": "Processing: {{current}} of {{total}}",
"currentItem": "Currently processing: {{item}}"
},
"complete": {
"title": "Import Complete",
"successMessage": "Successfully imported {{count}} contacts"
},
"confirmUpdate": {
"title": "Update Existing Contacts",
"message": "{{count}} contacts already exist. Do you want to update them with the new data?"
}
},
"contactPhoneNumbersEditor": {
"title": "Phone Numbers",
"description": "Phone number editor with type management, validation, defaults, and extension support",
"actions": {
"addPhone": "Add phone"
},
"empty": "No phone numbers yet.",
"phoneTypes": {
"work": "Trabalho",
"mobile": "Telemóvel",
"home": "Casa",
"fax": "Fax",
"other": "Outro",
"custom": "Personalizado"
},
"row": {
"title": "Phone {{number}}",
"defaultDescription": "Default phone number",
"secondaryDescription": "Secondary phone number",
"defaultLabel": "Default",
"moveUp": "Move phone {{number}} up",
"moveDown": "Move phone {{number}} down",
"remove": "Remove phone {{number}}"
},
"fields": {
"phoneNumber": "Phone Number",
"phoneType": "Phone Type",
"customPhoneType": "Custom Phone Type",
"customTypePlaceholder": "Select or enter a custom phone type",
"customTypeSearchPlaceholder": "Search or enter a custom phone type...",
"customTypeEmpty": "No matching custom phone types.",
"customTypeUseValue": "Use \"{{value}}\""
},
"validation": {
"selectExactlyOneDefault": "Select exactly one default phone number.",
"phoneRow": "Phone {{number}}",
"enterCompletePhoneNumber": "Enter a complete phone number.",
"enterCustomPhoneType": "Enter a custom phone type.",
"customTypesUnique": "Custom phone type labels must be unique."
},
"lastTypeUsage": {
"title": "Last Phone Type Usage",
"message": "This is the last use of custom phone type \"{{label}}\". Delete the type definition, or keep it for future use?",
"removeAndDelete": "Remove & Delete Type",
"removeAndKeep": "Remove & Keep Type"
}
},
"contactPortalTab": {
"boardCount_one": "{{count}} board",
"boardCount_other": "{{count}} boards",
"title": "Portal Access",
"description": "Client portal access management for a contact, including invitations and role updates",
"loadingDescription": "Loading portal information...",
"information": "Invitation emails will be sent from your organization's email system. Replies will go to your client's default location email address.",
"activeAccess": "Portal access active",
"noAccess": {
"title": "No Portal Access",
"description": "This contact does not have client portal access yet"
},
"portalAdmin": {
"label": "Portal Administrator",
"helper": "When enabled, the user will be created with Client Admin role. When disabled, they'll get Client User role."
},
"roles": {
"label": "Portal Roles",
"none": "No roles assigned",
"placeholder": "Select role to add",
"addButton": "Add Role"
},
"userStatus": {
"label": "User Status",
"active": "User is currently active",
"inactive": "User is currently inactive"
},
"lastLogin": {
"label": "Last Login",
"via": "via {{method}}"
},
"history": {
"title": "Invitation History",
"description": "Recent portal invitations sent to this contact",
"empty": "No portal invitations have been sent to this contact yet.",
"sentPrefix": "Sent:",
"expiresPrefix": "Expires:",
"usedPrefix": "Used:",
"status": {
"pending": "Pending",
"used": "Used",
"expired": "Expired",
"revoked": "Revoked"
}
},
"actions": {
"sendInvitation": "Send Portal Invitation",
"sending": "Sending...",
"refresh": "Refresh",
"refreshing": "Refreshing...",
"resend": "Resend",
"resending": "Resending...",
"revoke": "Revoke"
},
"toast": {
"successTitle": "Success",
"errorTitle": "Error",
"permissionDeniedTitle": "Permission Denied",
"loadError": "Failed to load portal information",
"refreshHistoryError": "Failed to refresh invitation history",
"sendInvitePermissionDenied": "You do not have permission to send invitations",
"sendInviteSuccess": "Portal invitation sent successfully!",
"sendInviteFailed": "Failed to send invitation",
"revokeInviteSuccess": "Invitation revoked successfully",
"revokeInviteFailed": "Failed to revoke invitation",
"resendInviteSuccess": "Portal invitation resent successfully!",
"resendInviteFailed": "Failed to resend invitation",
"updatePortalSettingsPermissionDenied": "You do not have permission to update client settings",
"portalAdminEnabled": "Contact marked as admin for client portal",
"portalAdminDisabled": "Contact unmarked as admin for client portal",
"updatePortalAdminFailed": "Failed to update status",
"updateAdminFailed": "Failed to update admin flag",
"updateRolesPermissionDenied": "You do not have permission to update user roles",
"roleAdded": "Role added successfully",
"addRoleFailed": "Failed to add role",
"roleRemoved": "Role removed successfully",
"removeRoleFailed": "Failed to remove role",
"updateStatusPermissionDenied": "You do not have permission to update user status",
"userActivated": "User activated successfully",
"userDeactivated": "User deactivated successfully",
"updateUserStatusFailed": "Failed to update user status",
"errors": {
"permissionDeniedInvite": "Não tem permissão para convidar utilizadores.",
"emailNotConfigured": "O serviço de e-mail está desativado ou não configurado.",
"contactNotFound": "Contacto não encontrado.",
"contactMissingEmail": "O contacto não tem um endereço de e-mail. Adicione um endereço de e-mail ao contacto antes de enviar um convite.",
"contactInvalidEmail": "O contacto tem um endereço de e-mail inválido. Atualize o contacto com um endereço de e-mail válido antes de enviar um convite.",
"userExistsForContact": "Já existe uma conta de utilizador para este contacto. Utilize a redefinição de palavra-passe em vez de enviar um convite.",
"noDefaultClient": "Nenhum cliente predefinido configurado para este inquilino. Defina um cliente predefinido nas Definições Gerais.",
"noDefaultLocation": "O cliente predefinido deve ter uma localização predefinida configurada para enviar convites do portal.",
"noLocationEmail": "A localização do cliente predefinido deve ter um e-mail de contacto configurado.",
"noBaseUrl": "O URL base não está configurado para convites do portal.",
"invitationNotFound": "Convite não encontrado ou já utilizado."
}
}
},
"quickAddContact": {
"title": "Add New Contact",
"description": "Quick-add form for creating a contact with client, role, phone, and tag fields",
"dialog": {
"title": "Add New Contact"
},
"errorFallback": {
"title": "Something went wrong:",
"tryAgain": "Try again"
},
"actions": {
"submit": "Add Contact"
},
"fields": {
"fullName": "Full Name *",
"email": "Email *",
"clientOptional": "Client (Optional)",
"role": "Role",
"rolePlaceholder": "e.g., Manager, Developer, etc.",
"notes": "Notes",
"notesPlaceholder": "Add any additional notes about the contact..."
},
"status": {
"label": "Status",
"active": "Active",
"inactive": "Inactive"
},
"validation": {
"alertIntro": "Please fix the following errors:",
"fullNameRequired": "Full name is required",
"fullNameEmpty": "Full name cannot be empty",
"fullNameSpaces": "Full name cannot contain only spaces",
"emailRequired": "Email address is required",
"emailSpaces": "Email address cannot contain only spaces",
"roleSpaces": "Role cannot contain only spaces",
"roleLength": "Role must be 100 characters or less",
"roleCharacters": "Role must contain letters or numbers",
"notesSpaces": "Notes cannot contain only spaces"
},
"toasts": {
"warningTitle": "Warning",
"tagsFailed": "{{count}} tag(s) could not be created",
"contactCreated": "Contact created",
"contactAdded": "{{name}} has been added successfully."
},
"errors": {
"createContactTitle": "Error creating contact",
"unexpected": "An unexpected error occurred. Please try again.",
"validationTitle": "Validation Error",
"emailExistsTitle": "Email Already Exists",
"invalidReferenceTitle": "Invalid Reference",
"systemTitle": "System Error",
"genericTitle": "Error",
"closeMessage": "Close error message",
"createContactHeading": "Error creating contact:",
"validationPrefix": "Please fix the following:",
"emailExistsPrefix": "Email already exists:",
"invalidReferencePrefix": "Invalid reference:",
"systemPrefix": "System error:"
}
},
"contactDetailsEdit": {
"title": "Edit Contact - {{name}}",
"heading": "Edit Contact: {{name}}",
"inactiveBadge": "inactive",
"description": "Editable contact form used from the detail view and drawer flows",
"validation": {
"fullNameRequired": "Full name is required",
"emailRequired": "Email address is required",
"invalidEmail": "Please enter a valid email address"
},
"errors": {
"validationPrefix": "Please fix the following:",
"emailExists": "Email already exists: A contact with this email address already exists in the system",
"invalidReferencePrefix": "Invalid reference:",
"systemPrefix": "System error:",
"saveFailed": "An error occurred while saving. Please try again.",
"unexpected": "An unexpected error occurred. Please try again."
},
"fields": {
"fullName": "Full Name",
"email": "Email",
"role": "Role",
"rolePlaceholder": "e.g., Manager, Developer, etc.",
"phoneNumbers": "Phone numbers:",
"inboundTicketDestinationOverride": "Inbound ticket destination override:",
"inboundTicketDestinationHelp": "Precedence: Contact override -> Client destination -> Provider default.",
"useClientDestination": "Use client destination",
"client": "Client:",
"status": "Status:",
"notes": "Notes:",
"notesPlaceholder": "Add any additional notes about the contact...",
"tags": "Tags:",
"emailAddresses": "Email addresses:"
},
"loading": {
"destinations": "Loading destinations..."
},
"status": {
"active": "Active",
"inactive": "Inactive"
}
},
"contactDetailsView": {
"title": "Contact Details - {{name}}",
"description": "Read-oriented contact summary with associated client, phones, and metadata",
"actions": {
"goToContact": "Go to contact"
},
"empty": {
"notSet": "Not set",
"unknownClient": "Unknown Client"
},
"phoneTypes": {
"work": "Trabalho",
"mobile": "Telemóvel",
"home": "Casa",
"fax": "Fax",
"other": "Outro"
},
"fields": {
"fullName": "Full Name",
"email": "Email",
"phone": "Phone:",
"defaultPhone": "Default",
"client": "Client:",
"noClientAssigned": "No client assigned",
"role": "Role",
"status": "Status",
"createdAt": "Created At",
"updatedAt": "Updated At",
"notes": "Notes:",
"tags": "Tags:",
"emailAddresses": "Email addresses:",
"defaultEmail": "Default"
},
"status": {
"active": "Active",
"inactive": "Inactive"
},
"sections": {
"documents": "Documents"
},
"errors": {
"loadTagsSystem": "An unexpected error occurred while loading tags. Please try again or contact support.",
"loadTagsFailed": "Failed to load tags. Please try refreshing the page.",
"unexpected": "An unexpected error occurred. Please try again.",
"clientNotFound": "Client not found. The client may have been deleted.",
"loadClientSystem": "An unexpected error occurred while loading client details. Please try again or contact support.",
"clientMissing": "The client no longer exists in the system.",
"loadClientFailed": "Failed to load client details. Please try again.",
"updateClientFailedWithMessage": "Failed to update client: {{message}}",
"updateClientFailed": "Failed to update client. Please try again."
}
},
"clientContactsList": {
"title": "Client Contacts",
"description": "Embedded client-specific contacts list with filters and row actions",
"table": {
"name": "Name",
"email": "Email",
"phoneNumber": "Phone Number",
"actions": "Actions"
},
"filter": {
"show": "Show:",
"active": "Active Contacts",
"inactive": "Inactive Contacts",
"all": "All Contacts"
},
"actions": {
"openMenu": "Open menu",
"quickView": "Quick View",
"addNewContact": "Add New Contact"
},
"errors": {
"loadFailed": "Failed to load contacts.",
"loadingTitle": "Error loading contacts",
"retryFailed": "Failed to load contacts. Please try again."
}
},
"contactsLayout": {
"title": "Contacts Layout",
"description": "Contacts route shell and page chrome"
},
"contactsSkeleton": {
"title": "Contacts Loading State",
"description": "Loading placeholders for contacts list and detail surfaces"
},
"contactAvatarUpload": {
"title": "Contact Avatar Upload",
"description": "Avatar upload affordance for contact profile images"
},
"contactNotesPanel": {
"title": "Notes & Quick Info",
"description": "Rich text notes panel with legacy note display and save/retry actions",
"legacy": {
"initialNote": "Initial Note"
},
"errors": {
"loadTitle": "Notes failed to load",
"unknown": "Unknown error"
},
"lastUpdated": "Last updated: {{date}}"
},
"notes": {
"messages": {
"saveSuccess": "Notas guardadas",
"saveFailed": "Falha ao guardar as notas"
}
},
"actions": {
"print": "Imprimir",
"printOptions": "Opções de impressão"
},
"contactTabs": {
"tickets": {
"addTicket": "Adicionar ticket",
"empty": "Nenhum ticket encontrado para este contacto",
"filters": {
"allAssignees": "Todos os responsáveis",
"allPriorities": "Todas as prioridades",
"categoryPlaceholder": "Filtrar por categoria",
"reset": "Repor",
"searchPlaceholder": "Pesquisar tickets...",
"statusPlaceholder": "Selecionar estado"
},
"loadMore": {
"label": "Carregar mais tickets",
"loading": "A carregar..."
},
"loading": "A carregar...",
"title": "Tickets do contacto",
"toasts": {
"clientNotFound": "Cliente não encontrado",
"loadClientFailed": "Falha ao carregar os detalhes do cliente",
"loadTicketFailed": "Falha ao carregar o ticket",
"openTicketFailed": "Falha ao abrir o ticket",
"userNotAuthenticated": "Utilizador não autenticado"
}
}
}
}