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
1330 lines
61 KiB
JSON
1330 lines
61 KiB
JSON
{
|
||
"common": {
|
||
"actions": {
|
||
"add": "Add",
|
||
"assign": "Assign",
|
||
"back": "Back",
|
||
"cancel": "Cancel",
|
||
"close": "Close",
|
||
"create": "Create",
|
||
"delete": "Delete",
|
||
"dismiss": "Dismiss",
|
||
"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",
|
||
"archived": "Archived",
|
||
"draft": "Draft",
|
||
"expired": "Expired",
|
||
"published": "Published",
|
||
"terminated": "Terminated"
|
||
},
|
||
"no": "No",
|
||
"yes": "Yes"
|
||
},
|
||
"clientsPage": {
|
||
"title": "Clients Page",
|
||
"description": "Main clients management page with search, filters, and client grid/list view",
|
||
"searchPlaceholder": "Search clients, notes, documents, and interactions",
|
||
"createClient": "Create Client",
|
||
"createClientShort": "+ Create Client",
|
||
"allClients": "All Clients",
|
||
"activeClients": "Active Clients",
|
||
"inactiveClients": "Inactive Clients",
|
||
"allTypes": "All Types",
|
||
"companies": "Companies",
|
||
"individuals": "Individuals",
|
||
"filterByStatus": "Filter by status",
|
||
"filterByType": "Filter by type",
|
||
"statusFilterLabel": "Status Filter",
|
||
"clientTypeFilterLabel": "Client Type Filter",
|
||
"cardsView": "Cards",
|
||
"tableView": "Table",
|
||
"loadingClients": "Loading clients...",
|
||
"actionsMenu": "Actions Menu",
|
||
"deleteClient": "Delete Client",
|
||
"deleteSelected": "Delete Selected",
|
||
"deleteSelectedClients": "Delete Selected Clients",
|
||
"markAsInactive": "Mark as Inactive",
|
||
"markShort": "Mark",
|
||
"reset": "Reset",
|
||
"deleteResults": "Delete Results",
|
||
"associatedRecords": "Associated Records",
|
||
"deleteBlockedSingle": "Unable to delete this client due to the following associated records:",
|
||
"deleteBlockedPlural": "These clients have associated records that must be removed first.",
|
||
"deleteBlockedHelp": "Please remove or reassign these items before the client can be deleted.",
|
||
"alreadyInactive": "This client is already marked as inactive.",
|
||
"bulkInactivePrompt": "Mark these clients as inactive. They will be hidden from most views but retain all their data.",
|
||
"singleDeletePrompt": "This client has the following associated records:",
|
||
"deactivateContactsPrompt": "Would you like to also deactivate the {{count}} associated contact(s)?",
|
||
"bulkDeleteError": "An error occurred while deleting clients. Please try again.",
|
||
"singleDeleteError": "An error occurred while deleting the client. Please try again.",
|
||
"deleteSingleSuccess": "{{name}} has been deleted successfully.",
|
||
"markInactiveFailed": "Failed to mark client as inactive",
|
||
"bulkInactiveError": "An error occurred while marking clients as inactive. Please try again.",
|
||
"singleInactiveError": "An error occurred while marking the client as inactive. Please try again.",
|
||
"bulkReactivateError": "An error occurred while reactivating clients. Please try again.",
|
||
"exportError": "Failed to export clients to CSV",
|
||
"unknownClient": "Unknown Client",
|
||
"unknownError": "Unknown error",
|
||
"actions": "Actions",
|
||
"allSelected": "All {{count}} clients selected",
|
||
"selectedSingle": "{{count}} Selected",
|
||
"selectedPlural": "{{count}} Selected",
|
||
"createSuccess": "{{name}} has been created successfully.",
|
||
"exportSuccess_one": "Exported {{count}} client to CSV",
|
||
"exportSuccess_other": "Exported {{count}} clients to CSV",
|
||
"bulkDeleteSuccess_one": "{{count}} client has been deleted successfully.",
|
||
"bulkDeleteSuccess_other": "{{count}} clients have been deleted successfully.",
|
||
"bulkInactiveFailed_one": "{{count}} client could not be marked as inactive.",
|
||
"bulkInactiveFailed_other": "{{count}} clients could not be marked as inactive.",
|
||
"bulkInactiveWithContactsSuccess": "{{clientCount}} {{clientsLabel}} and {{contactCount}} {{contactsLabel}} have been marked as inactive successfully.",
|
||
"singleInactiveSuccess": "{{name}} has been marked as inactive successfully.",
|
||
"singleInactiveWithContactsSuccess_one": "{{name}} and {{count}} contact have been deactivated successfully.",
|
||
"singleInactiveWithContactsSuccess_other": "{{name}} and {{count}} contacts have been deactivated successfully.",
|
||
"bulkInactiveSuccess_one": "{{count}} client has been marked as inactive successfully.",
|
||
"bulkInactiveSuccess_other": "{{count}} clients have been marked as inactive successfully.",
|
||
"bulkInactiveShortSuccess_one": "{{count}} client has been marked as inactive.",
|
||
"bulkInactiveShortSuccess_other": "{{count}} clients have been marked as inactive.",
|
||
"bulkInactiveWithContactsShortSuccess": "{{clientCount}} {{clientsLabel}} and {{contactCount}} {{contactsLabel}} have been marked as inactive.",
|
||
"bulkInactiveShortError": "An error occurred while marking clients as inactive.",
|
||
"bulkReactivateFailed_one": "{{count}} client could not be reactivated.",
|
||
"bulkReactivateFailed_other": "{{count}} clients could not be reactivated.",
|
||
"bulkReactivateWithContactsSuccess": "{{clientCount}} {{clientsLabel}} and {{contactCount}} {{contactsLabel}} have been reactivated successfully.",
|
||
"bulkReactivateSuccess_one": "{{count}} client has been reactivated successfully.",
|
||
"bulkReactivateSuccess_other": "{{count}} clients have been reactivated successfully.",
|
||
"deleteClientUnable": "Unable to delete this client.",
|
||
"deleteSinglePrompt": "Are you sure you want to delete {{name}}? This action cannot be undone.",
|
||
"markFailedAsInactive": "Mark {{count}} as Inactive",
|
||
"multiDeleteSuccessSummary_one": "{{count}} client was successfully deleted.",
|
||
"multiDeleteSuccessSummary_other": "{{count}} clients were successfully deleted.",
|
||
"multiDeleteFailedSummary_one": "{{count}} client could not be deleted",
|
||
"multiDeleteFailedSummary_other": "{{count}} clients could not be deleted",
|
||
"inactiveAlternative": "You can mark this client as inactive instead. Inactive clients are hidden from most views but retain all their data and can be marked as active later.",
|
||
"table": {
|
||
"client": "Client"
|
||
},
|
||
"entities": {
|
||
"client_one": "client",
|
||
"client_other": "clients",
|
||
"contact_one": "contact",
|
||
"contact_other": "contacts"
|
||
},
|
||
"dependency": {
|
||
"contact": "contact",
|
||
"contacts": "contacts",
|
||
"ticket": "ticket",
|
||
"tickets": "tickets",
|
||
"project": "project",
|
||
"projects": "projects",
|
||
"invoice": "invoice",
|
||
"invoices": "invoices",
|
||
"document": "document",
|
||
"documents": "documents",
|
||
"interaction": "interaction",
|
||
"interactions": "interactions",
|
||
"asset": "asset",
|
||
"assets": "assets",
|
||
"serviceUsageRecord": "service usage record",
|
||
"serviceUsageRecords": "service usage records",
|
||
"bucketUsageRecord": "bucket usage record",
|
||
"bucketUsageRecords": "bucket usage records"
|
||
},
|
||
"deleteSelectedPrompt_one": "Are you sure you want to delete {{count}} selected client? This action cannot be undone.",
|
||
"deleteSelectedPrompt_other": "Are you sure you want to delete {{count}} selected clients? This action cannot be undone.",
|
||
"clientTypes": {
|
||
"company": "Company",
|
||
"individual": "Individual"
|
||
},
|
||
"print": {
|
||
"title": "Clients",
|
||
"selectedTitle": "Selected Clients",
|
||
"subtitle": "{{count}} clients",
|
||
"noClients": "No clients to print",
|
||
"emptyValue": "-",
|
||
"columns": {
|
||
"name": "Client",
|
||
"type": "Type",
|
||
"phone": "Phone",
|
||
"address": "Address",
|
||
"status": "Status"
|
||
},
|
||
"optionsDialog": {
|
||
"title": "Print options",
|
||
"description": "Choose which columns to include when printing clients."
|
||
}
|
||
},
|
||
"shareTooltip": "Print, import and export",
|
||
"defaultClientDeleteError": "Cannot delete the default client. Please set another client as default in General Settings first.",
|
||
"clientNotFound": "Client not found.",
|
||
"deletePermissionDenied": "Permission denied: Cannot delete clients."
|
||
},
|
||
"clientDetails": {
|
||
"title": "Client Details",
|
||
"backToClients": "Back to Clients",
|
||
"openInNewTab": "Open in new tab",
|
||
"addTicket": "Add Ticket",
|
||
"details": "Details",
|
||
"contacts": "Contacts",
|
||
"assets": "Assets",
|
||
"documents": "Documents",
|
||
"billing": "Billing",
|
||
"interactions": "Interactions",
|
||
"notes": "Notes",
|
||
"huduTab": "Hudu",
|
||
"huduPasswordsTab": "Passwords",
|
||
"clientLocations": "Client Locations",
|
||
"billingDashboard": "Billing Dashboard",
|
||
"clientAndContacts": "Client & Contacts",
|
||
"clientOnly": "Client Only",
|
||
"accountManager": "Account Manager",
|
||
"clientName": "Client Name",
|
||
"clientNameRequired": "Client name is required",
|
||
"clientType": "Client Type",
|
||
"industry": "Industry",
|
||
"companySize": "Company Size",
|
||
"annualRevenue": "Annual Revenue",
|
||
"lastContactDate": "Last Contact Date",
|
||
"paymentTerms": "Payment Terms",
|
||
"parentClient": "Parent Client",
|
||
"defaultContact": "Default contact",
|
||
"providerDefault": "Provider default",
|
||
"inboundEmailDomains": "Inbound email domains",
|
||
"inboundEmailDomainsHelp": "Only these domains will be used for inbound email domain matching (e.g. acme.com). Domains must be unique across clients.",
|
||
"noInboundDomains": "No inbound email domains configured. Domain matching will not be used.",
|
||
"inboundTicketDestination": "Inbound ticket destination",
|
||
"inboundDestinationPrecedence": "Precedence: Contact override -> Client destination -> Provider default.",
|
||
"manageLocations": "Manage Locations",
|
||
"loadingUsers": "Loading users...",
|
||
"loadingPolicies": "Loading policies...",
|
||
"loadingDestinations": "Loading destinations...",
|
||
"loadingTaxSettings": "Loading tax settings...",
|
||
"loadingTicketFilters": "Loading ticket filters...",
|
||
"saveSuccess": "Client details saved successfully.",
|
||
"saveError": "Failed to save client details. Please try again.",
|
||
"deleteSuccess": "Client has been deleted successfully.",
|
||
"inactiveSuccess": "Client has been marked as inactive successfully.",
|
||
"reactivateSuccess": "Client has been reactivated successfully.",
|
||
"refreshError": "Could not fetch latest client data.",
|
||
"deleteValidationError": "Failed to validate deletion. Please try again.",
|
||
"deactivateError": "An error occurred while deactivating the client. Please try again.",
|
||
"markInactiveError": "An error occurred while marking the client as inactive. Please try again.",
|
||
"reactivateError": "An error occurred while reactivating the client. Please try again.",
|
||
"entraSyncError": "Failed to start Entra sync.",
|
||
"entraSyncStarted": "Entra sync started. Run ID: {{runId}}",
|
||
"entraSyncStatusUnknown": "Sync status unavailable",
|
||
"inboundDomainAdded": "Inbound email domain added",
|
||
"inboundDomainAddFailed": "Failed to add domain",
|
||
"inboundDomainRemoved": "Inbound email domain removed",
|
||
"inboundDomainRemoveFailed": "Failed to remove domain",
|
||
"deleteError": "Failed to delete client. Please try again.",
|
||
"deactivateWithContactsSuccess_one": "Client and {{count}} contact have been deactivated successfully.",
|
||
"deactivateWithContactsSuccess_other": "Client and {{count}} contacts have been deactivated successfully.",
|
||
"reactivateWithContactsSuccess_one": "Client and {{count}} contact have been reactivated successfully.",
|
||
"reactivateWithContactsSuccess_other": "Client and {{count}} contacts have been reactivated successfully.",
|
||
"singleInactiveSuccess": "{{name}} has been marked as inactive successfully.",
|
||
"slaPolicy": "SLA Policy",
|
||
"defaultPolicy": "{{name}} (Default)",
|
||
"selectSlaPolicy": "Select SLA Policy",
|
||
"selectDefaultContact": "Select default contact",
|
||
"noActiveContacts": "No active contacts",
|
||
"timezone": "Timezone",
|
||
"timezoneHelper": "Select the timezone for this client",
|
||
"taxSettings": "Tax Settings",
|
||
"additionalInfo": "Additional Info",
|
||
"tickets": "Tickets",
|
||
"saveChanges": "Save Changes",
|
||
"requiredFields": "Please fill in all required fields",
|
||
"syncEntraNow": "Sync Entra Now",
|
||
"deactivateClient": "Deactivate Client",
|
||
"reactivateClient": "Reactivate Client",
|
||
"deactivateClientAndContacts": "Deactivate Client & Contacts",
|
||
"reactivateClientAndContacts": "Reactivate Client & Contacts",
|
||
"deactivatePrompt": "This client has {{count}} active contact(s). Would you like to deactivate them as well?",
|
||
"reactivatePrompt": "This client has {{count}} inactive contact(s). Would you like to reactivate them as well?",
|
||
"deactivatePortalWarning": "Deactivated users will not be able to log into the client portal.",
|
||
"activeContacts": "Active contacts:",
|
||
"inactiveContacts": "Inactive contacts:",
|
||
"selectClientType": "Select client type",
|
||
"status": {
|
||
"label": "Status",
|
||
"helper": "Set client status as active or inactive"
|
||
},
|
||
"fields": {
|
||
"accountManager": "Account Manager",
|
||
"url": "URL",
|
||
"status": "Status"
|
||
},
|
||
"deactivateClientDescription": "Deactivates the record without deleting its data.",
|
||
"deactivateClientOnlyDescription": "Deactivate the client but leave its contacts active.",
|
||
"nameAliasAddFailed": "Failed to add alias",
|
||
"nameAliasAdded": "Alias added",
|
||
"nameAliasRemoveFailed": "Failed to remove alias",
|
||
"nameAliasRemoved": "Alias removed",
|
||
"nameAliases": "Matching aliases",
|
||
"noNameAliases": "No aliases configured. The client name itself always matches."
|
||
},
|
||
"quickAddClient": {
|
||
"title": "Add New Client",
|
||
"clientDetails": "Client Details",
|
||
"clientLocation": "Client Location",
|
||
"contactInformation": "Contact Information",
|
||
"clientName": "Client Name *",
|
||
"clientType": "Client Type",
|
||
"company": "Company",
|
||
"individual": "Individual",
|
||
"companyNamePlaceholder": "Company name",
|
||
"enterClientName": "Enter client name",
|
||
"websiteUrl": "Website URL",
|
||
"accountManager": "Account Manager",
|
||
"selectAccountManager": "Select Account Manager",
|
||
"industry": "Industry",
|
||
"notes": "Notes",
|
||
"notesPlaceholder": "Add any initial notes (optional)",
|
||
"address": "Address",
|
||
"streetAddress": "Street Address",
|
||
"city": "City",
|
||
"state": "State",
|
||
"stateProvince": "State/Province",
|
||
"postalCode": "Postal code",
|
||
"zipCode": "Zip Code",
|
||
"country": "Country",
|
||
"selectCountry": "Select Country",
|
||
"mainOffice": "Main Office",
|
||
"contactName": "Contact name",
|
||
"contactEmail": "Contact email",
|
||
"contactPhone": "Contact phone",
|
||
"email": "Email",
|
||
"emailPlaceholder": "Email address",
|
||
"phone": "Phone",
|
||
"phonePlaceholder": "Phone number",
|
||
"name": "Name",
|
||
"creating": "Creating...",
|
||
"createClient": "Create Client",
|
||
"loadingUsers": "Loading users...",
|
||
"loadingCountries": "Loading countries...",
|
||
"validationHeader": "Please correct the following errors:",
|
||
"clientCreatedLocationFailed": "Client created but failed to add location.",
|
||
"clientCreatedContactFailed": "Client created but failed to add contact.",
|
||
"usersLoadError": "Failed to load users for Account Manager selection.",
|
||
"countriesLoadError": "Failed to load countries.",
|
||
"phoneTypeSuggestionsError": "Failed to load contact phone type suggestions.",
|
||
"created": "\"{{name}}\" created. Add another client below.",
|
||
"createAndAddAnother": "Create + Add Another",
|
||
"createAndView": "Create + View Client",
|
||
"additionalDetails": "Additional Details"
|
||
},
|
||
"clientCreatedDialog": {
|
||
"title": "Client Created",
|
||
"viewClient": "View Client",
|
||
"addAnother": "Add Another",
|
||
"createdMessage": "\"{{name}}\" has been created successfully.",
|
||
"unknownClient": "Client"
|
||
},
|
||
"clientLocations": {
|
||
"title": "Client Locations Manager",
|
||
"listTitle": "Locations",
|
||
"addLocation": "Add Location",
|
||
"addNewLocation": "Add New Location",
|
||
"editLocation": "Edit Location",
|
||
"deleteLocation": "Delete Location",
|
||
"emptyTitle": "No locations yet",
|
||
"emptyDescription": "Click \"Add Location\" to get started",
|
||
"locationName": "Location Name",
|
||
"locationNamePlaceholder": "e.g., Main Office, Warehouse",
|
||
"address": "Address",
|
||
"addressLine1": "Address Line 1",
|
||
"addressLine2": "Address Line 2",
|
||
"addressLine3": "Address Line 3",
|
||
"city": "City",
|
||
"stateProvince": "State/Province",
|
||
"postalCode": "Postal Code",
|
||
"country": "Country",
|
||
"phone": "Phone",
|
||
"email": "Email",
|
||
"notes": "Notes",
|
||
"billingAddress": "Billing Address",
|
||
"shippingAddress": "Shipping Address",
|
||
"defaultLocation": "Default Location",
|
||
"defaultSetSuccess": "Default location updated",
|
||
"createSuccess": "Location created successfully",
|
||
"updateSuccess": "Location updated successfully",
|
||
"deleteSuccess": "Location deleted successfully",
|
||
"loadError": "Failed to load client locations",
|
||
"saveError": "Failed to save location",
|
||
"deleteError": "Failed to delete location",
|
||
"setDefaultError": "Failed to set default location",
|
||
"countriesLoadError": "Failed to load countries",
|
||
"taxRegionsLoadError": "Failed to load tax regions",
|
||
"confirmDelete": "Are you sure you want to delete the location \"{{name}}\"? This action cannot be undone."
|
||
},
|
||
"billingConfigForm": {
|
||
"billingContactInformation": "Billing Contact Information",
|
||
"billingContact": "Billing Contact",
|
||
"alternativeBillingEmail": "Alternative Billing Email",
|
||
"alternativeBillingEmailHelp": "Or enter a specific billing email",
|
||
"invoiceDeliveryMethod": "Invoice Delivery Method",
|
||
"invoiceTemplate": "Invoice Template",
|
||
"invoiceTemplateHelp": "Select a template or use default",
|
||
"paymentTerms": {
|
||
"dueOnReceipt": "Due on Receipt",
|
||
"net15": "Net 15",
|
||
"net30": "Net 30"
|
||
},
|
||
"preferredPaymentMethod": "Preferred Payment Method",
|
||
"defaultCurrency": "Default Currency",
|
||
"selectTaxRegion": "Select Tax Region (Optional)",
|
||
"loadingRegions": "Loading regions...",
|
||
"taxRegionLoadError": "Failed to load tax regions.",
|
||
"defaultTaxRegion": "Default Tax Region",
|
||
"defaultTemplateLabel": "(Default)",
|
||
"deliveryMethods": {
|
||
"both": "Both",
|
||
"email": "Email",
|
||
"mail": "Mail"
|
||
},
|
||
"paymentMethods": {
|
||
"bankTransfer": "Bank Transfer",
|
||
"check": "Check",
|
||
"creditCard": "Credit Card"
|
||
},
|
||
"paymentTermsLabel": "Payment Terms",
|
||
"standardTemplateLabel": "(Standard)",
|
||
"taxRegionsLoadError": "Failed to load tax regions.",
|
||
"usingDefaultTemplate": "Using default template: {{name}}"
|
||
},
|
||
"billingConfiguration": {
|
||
"general": "General",
|
||
"contractLines": "Contract Lines",
|
||
"contractLineOverlaps": "Contract Line Overlaps",
|
||
"taxRates": "Tax Rates",
|
||
"save": "Save Billing Configuration",
|
||
"errorDialogTitle": "Error",
|
||
"saveSuccess": "Billing configuration saved successfully",
|
||
"saveError": "Failed to save billing configuration",
|
||
"serviceTypeRequired": "Please select a service type",
|
||
"contractLineAddSuccess": "Contract line added successfully",
|
||
"contractLineSaveSuccess": "Contract line saved successfully",
|
||
"contractLineSaveError": "Failed to save changes. Please try again.",
|
||
"contractLineUpdateSuccess": "Contract line updated successfully",
|
||
"contractLineRemoveSuccess": "Contract line removed successfully",
|
||
"contractLineAddError": "Failed to add contract line. Please try again.",
|
||
"contractLineUpdateError": "Failed to update contract line. Please try again.",
|
||
"contractLineRemoveError": "Failed to remove contract line. Please try again.",
|
||
"serviceAddSuccess": "Service added successfully",
|
||
"serviceUpdateSuccess": "Service updated successfully",
|
||
"serviceDeleteSuccess": "Service deleted successfully",
|
||
"serviceCategoryUpdateSuccess": "Service category updated successfully",
|
||
"serviceAddError": "Failed to add service. Please try again.",
|
||
"serviceUpdateError": "Failed to update service. Please try again.",
|
||
"serviceCategoryUpdateError": "Failed to update service category. Please try again.",
|
||
"serviceDeleteError": "Failed to delete service. Please try again.",
|
||
"defaultTaxAssignedSuccess": "Default tax rate assigned successfully",
|
||
"defaultTaxChangedSuccess": "Default tax rate changed successfully",
|
||
"defaultTaxAssignError": "Failed to assign default tax rate",
|
||
"defaultTaxChangeError": "Failed to change default tax rate",
|
||
"taxRatesRefreshError": "Failed to refresh tax rates list.",
|
||
"taxRateCreatedSuccess": "Tax rate created successfully",
|
||
"invalidDateFormat": "Invalid Date Format",
|
||
"invalidDate": "Invalid Date",
|
||
"formattingError": "Formatting Error",
|
||
"removeAssignmentTitle": "Remove Contract Line Assignment",
|
||
"removeAssignmentMessage": "Are you sure you want to remove this contract line assignment from the client? The contract line itself will not be deleted.",
|
||
"contracts": "Contracts"
|
||
},
|
||
"clientBillingSchedule": {
|
||
"title": "Billing Schedule",
|
||
"edit": "Edit Schedule",
|
||
"save": "Save Schedule",
|
||
"saveSuccess": "Billing schedule saved",
|
||
"saveError": "Failed to save billing schedule",
|
||
"loadError": "Failed to load billing schedule",
|
||
"previewError": "Failed to preview billing periods",
|
||
"historyPreviewError": "Failed to preview billing history bootstrap",
|
||
"createNextCycle": "Create Next Cycle",
|
||
"createNextCycleSuccess": "Created next billing cycle",
|
||
"createNextCycleError": "Failed to create next billing cycle",
|
||
"cycleType": "Cycle Type",
|
||
"selectBillingCycle": "Select billing cycle...",
|
||
"dayOfMonth": "Day of month (1–28)",
|
||
"selectDay": "Select day...",
|
||
"weekday": "Weekday",
|
||
"selectWeekday": "Select weekday...",
|
||
"firstCycleStartDate": "First cycle start date (UTC)",
|
||
"firstCycleStartHelp": "Used to establish stable parity; leave blank for rolling bi-weekly cycles.",
|
||
"startMonth": "Start month",
|
||
"selectMonth": "Select month...",
|
||
"historyStartDate": "Billing History Start Date (optional)",
|
||
"historyStartHelp": "If set, historical client billing cycles are generated from the containing billing-cycle boundary through today.",
|
||
"billingPeriodsSemantics": "Billing periods use [start, end) semantics. The end date is the start of the next period.",
|
||
"rollingNoAnchor": "Rolling (no anchor)",
|
||
"weeklyRolling": "Weekly (rolling)",
|
||
"biWeeklyRolling": "Bi-weekly (rolling)",
|
||
"createInProgress": "Creating...",
|
||
"previewLoading": "Loading client-cadence preview...",
|
||
"currentScheduleLoading": "Loading current schedule...",
|
||
"updatingHistoryPreview": "Updating billing history bootstrap preview...",
|
||
"updatingCadencePreview": "Updating client-cadence preview...",
|
||
"normalizedHistoryBoundary": "Normalized history boundary: {{date}}",
|
||
"earliestInvoicedBoundary": "Earliest invoiced boundary: {{date}}",
|
||
"uninvoicedCyclesToRegenerate": "Uninvoiced cycles to regenerate: {{count}}",
|
||
"cycleOptions": {
|
||
"weekly": "Weekly",
|
||
"bi-weekly": "Bi-Weekly",
|
||
"monthly": "Monthly",
|
||
"quarterly": "Quarterly",
|
||
"semi-annually": "Semi-Annually",
|
||
"annually": "Annually"
|
||
},
|
||
"summary": {
|
||
"weeklyAnchored": "Weekly (weekday={{dayOfWeek}})",
|
||
"biWeeklyAnchored": "Bi-weekly (starts {{referenceDate}})",
|
||
"monthly": "Monthly (day {{dayOfMonth}})",
|
||
"quarterly": "Quarterly ({{monthOfYear}}/{{dayOfMonth}})",
|
||
"semiAnnually": "Semi-annually ({{monthOfYear}}/{{dayOfMonth}})",
|
||
"annually": "Annually ({{monthOfYear}}/{{dayOfMonth}})"
|
||
},
|
||
"months": {
|
||
"1": "January",
|
||
"2": "February",
|
||
"3": "March",
|
||
"4": "April",
|
||
"5": "May",
|
||
"6": "June",
|
||
"7": "July",
|
||
"8": "August",
|
||
"9": "September",
|
||
"10": "October",
|
||
"11": "November",
|
||
"12": "December"
|
||
},
|
||
"weekdays": {
|
||
"1": "Monday",
|
||
"2": "Tuesday",
|
||
"3": "Wednesday",
|
||
"4": "Thursday",
|
||
"5": "Friday",
|
||
"6": "Saturday",
|
||
"7": "Sunday"
|
||
}
|
||
},
|
||
"clientContractAssignment": {
|
||
"title": "Contracts",
|
||
"assignContract": "Assign Contract",
|
||
"contracts": "Contracts",
|
||
"contractName": "Contract Name",
|
||
"contractLines": "Contract Lines",
|
||
"description": "Description",
|
||
"startDate": "Start Date",
|
||
"endDate": "End Date",
|
||
"renewal": "Renewal",
|
||
"status": "Status",
|
||
"actions": "Actions",
|
||
"openMenu": "Open menu",
|
||
"unassign": "Unassign",
|
||
"loading": "Loading contracts...",
|
||
"empty": "No contracts have been assigned to this client yet.",
|
||
"loadError": "Failed to load contracts data",
|
||
"selectContract": "Select contract...",
|
||
"noDescription": "No description",
|
||
"ongoing": "Ongoing",
|
||
"autoRenew": "Auto-renew",
|
||
"nonRenewing": "Non-renewing",
|
||
"manualRenewal": "Manual renewal",
|
||
"manualDue": "Manual (due {{date}})",
|
||
"addError": "Failed to add contract to client",
|
||
"deactivateError": "Failed to deactivate contract",
|
||
"updateError": "Failed to update contract",
|
||
"createContract": "Create Contract",
|
||
"quickAdd": "Quick Add"
|
||
},
|
||
"clientContractDialog": {
|
||
"assignTitle": "Assign Contract to Client",
|
||
"editTitle": "Edit Contract Assignment",
|
||
"renewalSettings": "Renewal Settings",
|
||
"renewalSettingsHelp": "Set how this fixed-term assignment should be handled at renewal.",
|
||
"renewalSettingsSubtext": "Renewal settings appear for fixed-term assignments with an end date.",
|
||
"tenantDefaults": "Use tenant renewal defaults",
|
||
"tenantDefaultsHelp": "Renewal mode and notice period will follow your organization billing defaults.",
|
||
"autoRenew": "Auto-renew",
|
||
"manualRenewal": "Manual renewal",
|
||
"nonRenewing": "Non-renewing",
|
||
"ongoing": "Ongoing (no end date)",
|
||
"noticePeriodDays": "Notice Period (Days)",
|
||
"renewalTermMonths": "Renewal Term (Months)",
|
||
"includedContractLines": "Included Contract Lines:",
|
||
"unexpectedError": "An unexpected error occurred.",
|
||
"assignContract": "Assign Contract",
|
||
"cancel": "Cancel",
|
||
"endDate": "End Date",
|
||
"endDateAfterStart": "End date must be after start date",
|
||
"endDateRequired": "End date is required when not ongoing",
|
||
"noticePeriodInvalid": "Notice period days must be a non-negative whole number",
|
||
"noticePeriodPlaceholder": "e.g., 30",
|
||
"renewalMode": "Renewal Mode",
|
||
"renewalTermInvalid": "Renewal term months must be a positive whole number for auto-renew contracts",
|
||
"renewalTermPlaceholder": "e.g., 12",
|
||
"startDate": "Start Date",
|
||
"startDateRequired": "Start date is required",
|
||
"updateAssignment": "Update Assignment",
|
||
"useTenantRenewalDefaults": "Use tenant renewal defaults"
|
||
},
|
||
"clientContractLineDashboard": {
|
||
"title": "Usage Metrics (Last 30 Days)",
|
||
"usageChart": "Usage Chart",
|
||
"hoursByService": "Hours by Service (Last 30 Days)",
|
||
"recentInvoices": "Recent Invoices",
|
||
"bucketUsage": "Bucket Usage",
|
||
"invoiceNumber": "Invoice #",
|
||
"invoiceDate": "Invoice Date",
|
||
"dueDate": "Due Date",
|
||
"status": "Status",
|
||
"totalAmount": "Total Amount",
|
||
"serviceName": "Service Name",
|
||
"totalDurationHours": "Total Duration (Hours)",
|
||
"totalQuantity": "Total Quantity",
|
||
"unit": "Unit",
|
||
"hoursUsed": "hours used",
|
||
"hoursUsedSummary": "{{used}} / {{total}} hours used",
|
||
"noActiveBucketPlans": "No active bucket plans found.",
|
||
"noHours": "No hours recorded in the selected period.",
|
||
"noInvoices": "No recent invoices found.",
|
||
"noUsage": "No usage data found in the selected period."
|
||
},
|
||
"clientContractLineGuide": {
|
||
"title": "Contract Line Disambiguation Guide",
|
||
"overviewTitle": "Overview",
|
||
"bestPracticesTitle": "Best Practices",
|
||
"troubleshootingTitle": "Troubleshooting",
|
||
"commonScenariosTitle": "Common Scenarios",
|
||
"bestPractices": {
|
||
"clearNamingDescription": "Name contract lines in a way that clearly indicates their purpose and scope for this client.",
|
||
"clearNamingItem1": "Include the contract line type in the name (e.g., \"Monthly Support Bucket\", \"Project-Based Plan\")",
|
||
"clearNamingItem2": "Consider including dates or version numbers for contract lines that change over time",
|
||
"clearNamingItem3": "Use consistent naming patterns across all contract lines for this client",
|
||
"clearNamingTitle": "2. Use Clear Plan Naming Conventions",
|
||
"description": "Follow these best practices to ensure accurate billing and minimize confusion when managing multiple contract lines for this client.",
|
||
"documentRulesDescription": "Clearly document how service overlaps should be handled for this specific client.",
|
||
"documentRulesItem1": "Create client-specific guidelines for which contract line to use in different scenarios",
|
||
"documentRulesItem2": "Share these guidelines with all team members who work with this client",
|
||
"documentRulesItem3": "Include examples of common situations and how they should be handled",
|
||
"documentRulesTitle": "3. Document Disambiguation Rules",
|
||
"minimizeOverlapsDescription": "Whenever possible, avoid having the same service in multiple contract lines for this client. This simplifies billing and reporting.",
|
||
"minimizeOverlapsItem1": "Review the Service Overlap Matrix to identify overlapping services",
|
||
"minimizeOverlapsItem2": "Consider consolidating contract lines or reorganizing services",
|
||
"minimizeOverlapsItem3": "If overlaps are necessary, ensure clear documentation of which contract line should be used when",
|
||
"minimizeOverlapsTitle": "1. Minimize Service Overlaps",
|
||
"title": "Best Practices for Contract Line Disambiguation"
|
||
},
|
||
"overview": {
|
||
"benefitBilling": "Accurate billing and revenue recognition",
|
||
"benefitReporting": "Clear reporting and analytics",
|
||
"benefitsTitle": "Benefits of Proper Disambiguation",
|
||
"benefitTracking": "Simplified time entry and usage tracking",
|
||
"benefitTransparency": "Improved client transparency",
|
||
"bucketPriorityDescription": "Bucket contract lines are given priority when disambiguating services for this client.",
|
||
"bucketPriorityLabel": "Bucket Priority:",
|
||
"description": "When a client has multiple contract lines that include the same service, the system needs to determine which contract line to use for time entries and usage records. This guide explains how to manage this situation for this specific client.",
|
||
"explicitAssignmentDescription": "When a service appears in multiple contract lines, users must choose the intended assignment context instead of relying on implicit fallback.",
|
||
"explicitAssignmentLabel": "Explicit Assignment Required:",
|
||
"explicitSelectionDescription": "When users must manually choose which contract line to bill against for this client.",
|
||
"explicitSelectionLabel": "Explicit Selection:",
|
||
"issueIncorrectBilling": "Incorrect billing when assignment context is ambiguous",
|
||
"issueReporting": "Reporting inconsistencies across different contract lines",
|
||
"issueUnexpectedBilling": "Unexpected billing behavior for this client",
|
||
"issueUserConfusion": "User confusion when selecting contract lines for time entry",
|
||
"keyConceptsTitle": "Key Concepts:",
|
||
"potentialIssuesTitle": "Potential Issues for This Client",
|
||
"serviceOverlapDescription": "When the same service appears in multiple contract lines for this client.",
|
||
"serviceOverlapLabel": "Service Overlap:",
|
||
"title": "Understanding Contract Line Disambiguation for This Client"
|
||
},
|
||
"scenarios": {
|
||
"description": "These examples illustrate how contract line disambiguation works in common scenarios for this client.",
|
||
"scenario1Description": "When a service appears in both a bucket contract line and a standard contract line for this client:",
|
||
"scenario1Item1": "The bucket contract line is selected by default",
|
||
"scenario1Item2": "Time entries and usage consume the bucket's included amount, then continue on the same bucket contract line as overage at its configured overage rate",
|
||
"scenario1Item3": "Billing does not switch to the standard contract line automatically when the bucket is depleted",
|
||
"scenario1Item4": "Users can manually override this default by selecting a different contract line during time entry",
|
||
"scenario1Title": "Scenario 1: Bucket Plan + Standard Plan",
|
||
"scenario2Description": "When a service appears in multiple standard contract lines for this client:",
|
||
"scenario2Item1": "Users will be prompted to select which contract line to bill against during time entry",
|
||
"scenario2Item2": "If no contract line is explicitly selected, billing should stop with an ambiguity error that requires user choice",
|
||
"scenario2Item3": "Consider consolidating these contract lines to avoid confusion",
|
||
"scenario2Title": "Scenario 2: Multiple Standard Plans",
|
||
"scenario3Description": "When a service appears in multiple bucket contract lines for this client:",
|
||
"scenario3Item1": "Users will be prompted to select which bucket to bill against during time entry",
|
||
"scenario3Item2": "If no bucket is explicitly selected, billing should stop with an ambiguity error that requires user choice",
|
||
"scenario3Item3": "Teams can define internal guidance for choosing between overlapping buckets",
|
||
"scenario3Title": "Scenario 3: Multiple Bucket Plans",
|
||
"title": "Common Disambiguation Scenarios"
|
||
},
|
||
"tabs": {
|
||
"bestPractices": "Best Practices",
|
||
"overview": "Overview",
|
||
"scenarios": "Common Scenarios",
|
||
"troubleshooting": "Troubleshooting"
|
||
},
|
||
"troubleshooting": {
|
||
"description": "Solutions for common issues related to contract line disambiguation for this client.",
|
||
"issueReportingDescription": "If you're seeing inconsistent reporting for services that appear in multiple contract lines for this client:",
|
||
"issueReportingItem1": "Use the contract_line_id filter in reports to see data for specific contract lines",
|
||
"issueReportingItem2": "Check if time entries or usage records have explicit contract line assignments",
|
||
"issueReportingItem3": "Review historical data to see if contract line assignments have changed over time",
|
||
"issueReportingItem4": "Consider updating the client's contract line configuration to reduce overlaps",
|
||
"issueReportingTitle": "Issue: Inconsistent Reporting",
|
||
"issueSelectionMissingDescription": "If the contract line selection dropdown is not appearing during time entry for this client:",
|
||
"issueSelectionMissingItem1": "Verify that the service is actually included in multiple active contract lines",
|
||
"issueSelectionMissingItem2": "Check if one of the contract lines has expired or is not yet active",
|
||
"issueSelectionMissingItem3": "Ensure that the client and service selections are made before expecting the contract line dropdown",
|
||
"issueSelectionMissingItem4": "Try refreshing the page or clearing the browser cache",
|
||
"issueSelectionMissingTitle": "Issue: Plan Selection Not Appearing",
|
||
"issueWrongPlanDescription": "If time entries are being billed to the wrong contract line for this client:",
|
||
"issueWrongPlanItem1": "Check if the time entry has an explicit contract_line_id assigned",
|
||
"issueWrongPlanItem2": "Verify that the service is included in the expected contract line",
|
||
"issueWrongPlanItem3": "Review the disambiguation rules to understand why a particular contract line was selected",
|
||
"issueWrongPlanItem4": "Update the time entry to explicitly select the correct contract line",
|
||
"issueWrongPlanItem5": "Consider updating the client's contract line configuration to avoid future issues",
|
||
"issueWrongPlanTitle": "Issue: Time Entry Billed to Wrong Plan",
|
||
"title": "Troubleshooting Contract Line Disambiguation"
|
||
}
|
||
},
|
||
"clientCreditExpirationSettings": {
|
||
"title": "Credit Expiration Settings",
|
||
"enable": "Enable Credit Expiration",
|
||
"useDefault": "Use Default Settings",
|
||
"useDefaultHelp": "Use the system-wide default settings for credit expiration",
|
||
"expirationPeriodDays": "Expiration Period (Days)",
|
||
"expirationPeriodHelp": "Number of days after which credits will expire",
|
||
"notificationDays": "Notification Days",
|
||
"notificationDaysHelp": "Days before expiration to send notifications (comma-separated)",
|
||
"placeholder": "e.g., 30, 7, 1",
|
||
"enabledHelp": "When enabled, credits will expire after the specified period",
|
||
"loadError": "Failed to load settings",
|
||
"saveError": "Failed to save settings",
|
||
"clientSpecificEnabled": "Client-specific credit expiration settings enabled.",
|
||
"notificationsUpdatedSuccess": "Notification days have been updated.",
|
||
"periodUpdatedSuccess": "Credit expiration period has been updated.",
|
||
"save": "Save",
|
||
"updatedSuccess": "Credit expiration settings have been updated.",
|
||
"updateError": "Failed to update settings",
|
||
"useDefaultSuccess": "Client will now use default credit expiration settings."
|
||
},
|
||
"clientGridCard": {
|
||
"actions": "Client Actions",
|
||
"quickView": "Quick View",
|
||
"defaultClient": "Default Client",
|
||
"taxExempt": "Tax Exempt",
|
||
"taxExemptTooltip": "This client is tax exempt - no taxes will be applied to their invoices",
|
||
"type": "Type:",
|
||
"address": "Address:",
|
||
"phone": "Phone:",
|
||
"url": "URL:",
|
||
"clientActions": "Client Actions",
|
||
"default": "Default",
|
||
"selectClient": "Select client {{name}}"
|
||
},
|
||
"clientLanguagePreference": {
|
||
"title": "Client Language Settings",
|
||
"label": "Default Language for Contacts",
|
||
"description": "Applies to every portal user from {{clientName}} unless they have set their own preference in their profile.",
|
||
"selectPlaceholder": "Select a language",
|
||
"updating": "Updating language preference...",
|
||
"loadError": "Failed to load client language preference:",
|
||
"saveError": "Failed to update client language preference",
|
||
"cardDescription": "Set the default language for all contacts in {{clientName}}.",
|
||
"saveSuccess": "Default language for {{clientName}} contacts updated to {{language}}",
|
||
"thisClient": "client"
|
||
},
|
||
"clientQuickView": {
|
||
"notFound": "Client not found",
|
||
"loadError": "Failed to load client details",
|
||
"unknownError": "Something went wrong"
|
||
},
|
||
"clientServiceOverlapMatrix": {
|
||
"title": "Service Overlap Matrix",
|
||
"description": "This matrix shows which services appear in multiple contract lines for this client.",
|
||
"showAllServices": "Show All Services",
|
||
"showOverlappingOnly": "Show Overlapping Only",
|
||
"service": "Service",
|
||
"count": "Count",
|
||
"serviceCountSuffix": "service(s)",
|
||
"legendTitle": "Matrix Legend",
|
||
"legendIncluded": "Service is included in contract line (no overlap)",
|
||
"legendOverlap": "Service is included in contract line (with overlap)",
|
||
"legendMultiple": "Service appears in multiple contract lines",
|
||
"noContractLines": "No contract lines assigned to this client",
|
||
"noOverlaps": "No service overlaps detected for this client",
|
||
"loadError": "Failed to load data for client service overlap matrix",
|
||
"unknown": "Unknown",
|
||
"countColumn": "Count",
|
||
"legendMultipleLines": "Service appears in multiple contract lines",
|
||
"legendNoOverlap": "Service is included in contract line (no overlap)",
|
||
"legendWithOverlap": "Service is included in contract line (with overlap)",
|
||
"loading": "Loading service overlap matrix...",
|
||
"overlapCount": "{{count}} service(s)",
|
||
"overlapSummary": "appear in multiple contract lines for this client. This matrix shows which services are included in each line.",
|
||
"overlapTooltip": "This service appears in multiple contract lines",
|
||
"serviceColumn": "Service",
|
||
"unknownType": "Unknown",
|
||
"unnamedPlan": "Unnamed Plan"
|
||
},
|
||
"clientSideDetails": {
|
||
"address": "Address:",
|
||
"phone": "Phone:",
|
||
"email": "Email:",
|
||
"url": "URL:"
|
||
},
|
||
"clientTaxRates": {
|
||
"title": "Default Client Tax Rate",
|
||
"assignDefaultRate": "Assign Default Rate",
|
||
"createNewRate": "Create New Tax Rate",
|
||
"selectAssign": "Select Tax Rate to Assign",
|
||
"selectChange": "Select New Default Rate",
|
||
"description": "Description:",
|
||
"region": "Region:",
|
||
"taxPercentage": "Tax Percentage:",
|
||
"noDefaultRate": "No default tax rate assigned.",
|
||
"loadingRates": "Loading rates...",
|
||
"loadingDetails": "Loading tax details...",
|
||
"assigning": "Assigning...",
|
||
"saveChange": "Save Change",
|
||
"cancel": "Cancel",
|
||
"change": "Change",
|
||
"createDrawerDescription": "Enter the details for the new tax rate.",
|
||
"createDrawerTitle": "Create New Tax Rate",
|
||
"loadingTaxDetails": "Loading tax details...",
|
||
"loadTaxRegionsError": "Failed to load tax regions.",
|
||
"na": "N/A",
|
||
"noDefaultAssigned": "No default tax rate assigned.",
|
||
"noDescription": "No Description",
|
||
"saving": "Saving...",
|
||
"selectNewDefaultRate": "Select New Default Rate",
|
||
"selectRateToAssign": "Select Tax Rate to Assign",
|
||
"taxRateCreatedSuccess": "Tax rate created successfully.",
|
||
"taxRateCreateError": "Failed to create tax rate: {{message}}",
|
||
"taxRateOption": "{{regionLabel}} - {{percentage}}% ({{description}})",
|
||
"unknownRegion": "Unknown Region"
|
||
},
|
||
"clientZeroDollarInvoiceSettings": {
|
||
"title": "Zero-Dollar Invoice Settings",
|
||
"invoiceHandling": "Invoice Handling",
|
||
"selectHandling": "Select handling option",
|
||
"suppressEmptyInvoices": "Suppress Empty Invoices",
|
||
"suppressHelp": "Skip creation of invoices with no line items",
|
||
"createAsDraft": "Create as Draft",
|
||
"createAndFinalize": "Create and Finalize",
|
||
"useDefault": "Use Default Settings",
|
||
"useDefaultHelp": "Use the system-wide default settings for zero-dollar invoices",
|
||
"updated": "Zero-dollar invoice settings have been updated.",
|
||
"clientSpecificEnabled": "Client-specific zero-dollar invoice settings enabled.",
|
||
"handling": {
|
||
"finalized": "Create and Finalize",
|
||
"normal": "Create as Draft"
|
||
},
|
||
"handlingHelp": "Choose how zero-dollar invoices should be handled when generated",
|
||
"loadError": "Failed to load settings",
|
||
"saveError": "Failed to save settings",
|
||
"suppressEmptyHelp": "Skip creation of invoices with no line items",
|
||
"updatedSuccess": "Zero-dollar invoice settings have been updated.",
|
||
"updateError": "Failed to update settings",
|
||
"useDefaultSuccess": "Client will now use default zero-dollar invoice settings."
|
||
},
|
||
"clientsImportDialog": {
|
||
"title": "Import Clients",
|
||
"uploadDescription": "Upload a CSV file with client data",
|
||
"mapFieldsTitle": "Map Client Fields to CSV Columns",
|
||
"mapFieldsDescription": "Select which CSV column contains the data for each client field. Fields marked with * are required.",
|
||
"previewTitle": "Preview Import",
|
||
"importComplete": "Import Complete",
|
||
"downloadTemplate": "Download CSV Template",
|
||
"replaceExisting": "Replace data for existing clients",
|
||
"skipInvalidRecords": "Skip invalid records",
|
||
"continueOnValidationErrors": "Continue import even if some records have validation errors",
|
||
"updateExisting": "Update Existing Clients",
|
||
"clientFields": "Client fields:",
|
||
"locationFields": "Location fields:",
|
||
"requiredHelp": "* Required fields must be mapped for import to proceed",
|
||
"recordsPrefix": "You are importing",
|
||
"recordsSuffix": "records. Processing may take a moment.",
|
||
"validReady": "Valid - Ready to import",
|
||
"invalidHasErrors": "Invalid - Has errors",
|
||
"notMapped": "Not mapped",
|
||
"selectCsvColumn": "Select CSV Column",
|
||
"selectField": "Select field",
|
||
"required": "Required:",
|
||
"issues": "Issues",
|
||
"status": "Status",
|
||
"totalRecords": "Total records:",
|
||
"processing": "Processing...",
|
||
"importing": "Importing...",
|
||
"clientNameRequired": "Client name is required",
|
||
"invalidEmail": "Invalid email format",
|
||
"creditLimitNumber": "Credit limit must be a number",
|
||
"clientField": "Client Field",
|
||
"recordsMessage": "You are importing {{count}} records. Processing may take a moment.",
|
||
"updateExistingLabel": "Update existing clients",
|
||
"exists": "Exists",
|
||
"email": "Email",
|
||
"clientName": "Client Name",
|
||
"importCompleteMessage": "Successfully imported {{count}} clients",
|
||
"updateExistingTitle": "Update Existing Clients",
|
||
"updateExistingMessage": "{{count}} clients already exist. Do you want to update them with the new data?"
|
||
},
|
||
"clientsList": {
|
||
"name": "Name",
|
||
"type": "Type",
|
||
"address": "Address",
|
||
"phone": "Phone",
|
||
"created": "Created",
|
||
"accountManager": "Account Manager",
|
||
"tags": "Tags",
|
||
"actions": "Actions",
|
||
"openMenu": "Open menu",
|
||
"quickView": "Quick View",
|
||
"selectClient": "Select Client",
|
||
"defaultClient": "Default Client",
|
||
"taxExempt": "Tax Exempt",
|
||
"clickThisButton": "Click this button",
|
||
"default": "Default",
|
||
"taxExemptTooltip": "This client is tax exempt - no taxes will be applied to their invoices",
|
||
"url": "URL"
|
||
},
|
||
"contractLinePickerDialog": {
|
||
"addPlan": "Add Plan",
|
||
"updatePlan": "Update Plan",
|
||
"contractLine": "Contract Line",
|
||
"serviceCategory": "Service Category",
|
||
"allCategories": "All Categories",
|
||
"allCategoriesHelp": "Selecting 'All Categories' means this plan applies regardless of the service category.",
|
||
"selectContractLine": "Select a Contract Line",
|
||
"selectCategory": "Select category...",
|
||
"selectContractLinePlaceholder": "Select contract line...",
|
||
"startDate": "Start Date",
|
||
"endDate": "End Date",
|
||
"ongoing": "Ongoing",
|
||
"cancel": "Cancel",
|
||
"title": "Select a Contract Line"
|
||
},
|
||
"contractLines": {
|
||
"title": "Contract Lines",
|
||
"addNewPlan": "Add New Plan",
|
||
"plan": "Plan",
|
||
"category": "Category",
|
||
"startDate": "Start Date",
|
||
"endDate": "End Date",
|
||
"actions": "Actions",
|
||
"selectAssignment": "Select assignment...",
|
||
"unknownCategory": "Unknown Category",
|
||
"unknownPlan": "Unknown Plan",
|
||
"removePlan": "Remove Plan",
|
||
"allCategories": "All categories",
|
||
"assignmentLabel": "Assignment {{assignmentId}} • Contract {{contractId}} ({{startDate}} → {{endDate}})",
|
||
"edit": "Edit",
|
||
"ongoing": "Ongoing",
|
||
"openMenu": "Open menu"
|
||
},
|
||
"serviceCatalog": {
|
||
"title": "Service Catalog",
|
||
"addNewService": "Add New Service",
|
||
"serviceName": "Service Name",
|
||
"category": "Category",
|
||
"defaultRate": "Default Rate",
|
||
"unitOfMeasure": "Unit of Measure",
|
||
"deleteService": "Delete Service",
|
||
"deleteConfirm": "Are you sure you want to delete this service? This action cannot be undone.",
|
||
"actions": "Actions",
|
||
"delete": "Delete",
|
||
"deleteMessage": "Are you sure you want to delete this service? This action cannot be undone.",
|
||
"deleteTitle": "Delete Service"
|
||
},
|
||
"taxRateCreateForm": {
|
||
"title": "Create Tax Rate",
|
||
"description": "Description",
|
||
"descriptionOptional": "Description (Optional)",
|
||
"startDate": "Start Date *",
|
||
"endDate": "End Date (Optional)",
|
||
"percentage": "Percentage (%) *",
|
||
"taxRegion": "Tax Region *",
|
||
"create": "Create Tax Rate",
|
||
"creating": "Creating...",
|
||
"validationHeader": "Please fill in the required fields:",
|
||
"regionsLoading": "Loading regions...",
|
||
"cancel": "Cancel",
|
||
"descriptionLabel": "Description (Optional)",
|
||
"descriptionPlaceholder": "e.g., California State Tax",
|
||
"endDateLabel": "End Date (Optional)",
|
||
"loadingRegions": "Loading regions...",
|
||
"loadTaxRegionsError": "Failed to load tax regions.",
|
||
"percentageLabel": "Percentage (%) *",
|
||
"percentagePlaceholder": "e.g., 8.25 *",
|
||
"regionLabel": "Tax Region *",
|
||
"selectRegion": "Select Tax Region *",
|
||
"startDateLabel": "Start Date *",
|
||
"unknownError": "An unknown error occurred",
|
||
"validation": {
|
||
"description": "Description",
|
||
"descriptionLength": "Description cannot exceed 255 characters",
|
||
"endDateAfterStart": "End date must be after start date",
|
||
"endDateValid": "End date must be a valid date",
|
||
"percentage": "percentage",
|
||
"percentageMax": "Tax percentage cannot exceed 100%",
|
||
"percentageNonNegative": "Tax percentage cannot be negative",
|
||
"percentageNumber": "Tax percentage must be a valid number",
|
||
"percentageRequired": "Tax percentage is required",
|
||
"regionRequired": "Tax region is required",
|
||
"startDateRequired": "Start date is required",
|
||
"startDateValid": "Start date must be a valid date"
|
||
}
|
||
},
|
||
"taxSettingsForm": {
|
||
"title": "Tax Calculation Settings",
|
||
"description": "Configure how taxes are calculated for this client.",
|
||
"createDefault": "Create Default Tax Settings",
|
||
"goToBillingTaxSettings": "Go to Billing Tax Settings",
|
||
"taxExemptStatus": "Tax Exempt Status",
|
||
"taxExempt": "Tax Exempt",
|
||
"taxExemptHelp": "When enabled, taxes will not be applied to invoices for this client.",
|
||
"taxExemptionCertificate": "Tax Exemption Certificate",
|
||
"certificatePlaceholder": "Certificate number (optional)",
|
||
"taxSource": "Tax Source",
|
||
"effectiveTaxSource": "Effective tax source:",
|
||
"reverseChargeApplicable": "Reverse Charge Applicable",
|
||
"reverseChargeHelp": "Reverse charge shifts tax liability to the buyer (common in B2B cross-border transactions).",
|
||
"noSettings": "No tax settings found for this client.",
|
||
"save": "Save Tax Settings",
|
||
"saveSuccess": "Tax settings updated successfully",
|
||
"defaultCreatedSuccess": "Default tax settings created successfully",
|
||
"taxExemptSuccess": "Tax exempt status updated successfully",
|
||
"certificateSuccess": "Tax exemption certificate updated successfully",
|
||
"saveError": "Failed to update tax settings",
|
||
"defaultCreateError": "Error creating default tax settings",
|
||
"certificateLabel": "Tax Exemption Certificate",
|
||
"certificateUpdatedSuccess": "Tax exemption certificate updated successfully",
|
||
"certificateUpdateError": "Failed to update tax exemption certificate",
|
||
"createDefaultSettings": "Create Default Tax Settings",
|
||
"dismiss": "Dismiss",
|
||
"fetchError": "Error fetching tax settings",
|
||
"reverseCharge": "Reverse Charge Applicable",
|
||
"reverseChargeTooltip": "Reverse charge shifts tax liability to the buyer (common in B2B cross-border transactions).",
|
||
"saveTaxSettings": "Save Tax Settings",
|
||
"saving": "Saving...",
|
||
"taxCalculationDescription": "Configure how taxes are calculated for this client.",
|
||
"taxCalculationSettings": "Tax Calculation Settings",
|
||
"taxExemptDescription": "Mark this client as tax exempt and optionally store a certificate number.",
|
||
"taxExemptTooltip": "When enabled, taxes will not be applied to invoices for this client.",
|
||
"taxExemptUpdatedSuccess": "Tax exempt status updated successfully",
|
||
"taxExemptUpdateError": "Failed to update tax exempt status",
|
||
"taxSourceExternal": "External",
|
||
"taxSourceHelp": "Manage default client tax rates in Client Settings → Tax Rates, and manage global rates in Billing → Tax Settings.",
|
||
"taxSourceInternal": "Internal"
|
||
},
|
||
"clientNotesPanel": {
|
||
"title": "Notes & Quick Info",
|
||
"initialNote": "Initial Note",
|
||
"lastUpdated": "Last updated:",
|
||
"save": "Save",
|
||
"retry": "Retry",
|
||
"loadError": "Notes failed to load",
|
||
"unknownError": "Unknown error",
|
||
"loadErrorTitle": "Notes failed to load"
|
||
},
|
||
"actions": {
|
||
"cancel": "Cancel",
|
||
"delete": "Delete",
|
||
"print": "Print",
|
||
"printOptions": "Print options",
|
||
"printSelected": "Print selected ({{count}})"
|
||
},
|
||
"clients": {
|
||
"locations": {
|
||
"buttons": {
|
||
"add": "Add Location",
|
||
"save": "Save Location"
|
||
},
|
||
"card": {
|
||
"addressHelper": "Full address for this location",
|
||
"addressLabel": "Address",
|
||
"billingTag": "Billing",
|
||
"delete": "Delete location",
|
||
"edit": "Edit location",
|
||
"emailHelper": "Email address for this location",
|
||
"emailLabel": "Email",
|
||
"notesHelper": "Additional notes for this location",
|
||
"notesLabel": "Notes",
|
||
"phoneHelper": "Phone number for this location",
|
||
"phoneLabel": "Phone",
|
||
"setDefault": "Set as default",
|
||
"shippingTag": "Shipping",
|
||
"unnamed": "Unnamed Location"
|
||
},
|
||
"dialog": {
|
||
"addTitle": "Add New Location",
|
||
"deleteMessage": "Are you sure you want to delete the location \"{{name}}\"? This action cannot be undone.",
|
||
"deleteTitle": "Delete Location",
|
||
"editTitle": "Edit Location"
|
||
},
|
||
"empty": {
|
||
"description": "Click \"Add Location\" to get started",
|
||
"title": "No locations added yet"
|
||
},
|
||
"errors": {
|
||
"delete": "Failed to delete location",
|
||
"loadCountries": "Failed to load countries",
|
||
"loadLocations": "Failed to load client locations",
|
||
"loadTaxRegions": "Failed to load tax regions",
|
||
"save": "Failed to save location",
|
||
"setDefault": "Failed to set default location"
|
||
},
|
||
"form": {
|
||
"addressLine1": "Address Line 1",
|
||
"addressLine1Helper": "Primary address line (required)",
|
||
"addressLine2": "Address Line 2",
|
||
"addressLine2Helper": "Additional address information (optional)",
|
||
"addressLine3": "Address Line 3",
|
||
"billingAddress": "Billing Address",
|
||
"billingAddressHelper": "Use this location as the billing address",
|
||
"city": "City",
|
||
"cityHelper": "City name (required)",
|
||
"country": "Country",
|
||
"countryHelper": "Select country (required)",
|
||
"defaultLocation": "Default Location",
|
||
"defaultLocationHelper": "Mark this as the default location for the client",
|
||
"email": "Email",
|
||
"emailHelper": "Email address for this location",
|
||
"locationName": "Location Name",
|
||
"locationNameHelper": "Name for this location (e.g., Main Office, Warehouse)",
|
||
"notes": "Notes",
|
||
"notesHelper": "Additional notes about this location",
|
||
"phone": "Phone",
|
||
"phoneHelper": "Phone number for this location",
|
||
"placeholder": {
|
||
"addressLine1": "Enter address *",
|
||
"city": "Enter city *",
|
||
"country": "Select Country *",
|
||
"loadingCountries": "Loading countries...",
|
||
"locationName": "e.g., Main Office, Warehouse",
|
||
"taxRegion": "Select a tax region...",
|
||
"taxRegionOption": "Select a tax region..."
|
||
},
|
||
"postalCode": "Postal Code",
|
||
"postalCodeHelper": "ZIP or postal code",
|
||
"shippingAddress": "Shipping Address",
|
||
"shippingAddressHelper": "Use this location as the shipping address",
|
||
"stateProvince": "State/Province",
|
||
"stateProvinceHelper": "State or province name",
|
||
"taxRegion": "Tax Region",
|
||
"taxRegionHelper": "Select the applicable tax region"
|
||
},
|
||
"listTitle": "Locations",
|
||
"loading": "Loading locations...",
|
||
"managerLabel": "Client Locations Manager",
|
||
"success": {
|
||
"create": "Location created successfully",
|
||
"delete": "Location deleted successfully",
|
||
"setDefault": "Default location updated",
|
||
"update": "Location updated successfully"
|
||
},
|
||
"validation": {
|
||
"title": "Please fill in the required fields:"
|
||
}
|
||
}
|
||
},
|
||
"clientsGrid": {
|
||
"itemLabel": "clients",
|
||
"itemsPerPage18": "18 cards/page",
|
||
"itemsPerPage27": "27 cards/page",
|
||
"itemsPerPage36": "36 cards/page",
|
||
"itemsPerPage9": "9 cards/page"
|
||
},
|
||
"status": {
|
||
"error": "Error",
|
||
"saving": "Saving...",
|
||
"success": "Success"
|
||
},
|
||
"notes": {
|
||
"messages": {
|
||
"saveSuccess": "Notes saved",
|
||
"saveFailed": "Failed to save notes"
|
||
}
|
||
},
|
||
"interactions": {
|
||
"onlineMeeting": {
|
||
"downloadRecording": "Download recording",
|
||
"join": "Join",
|
||
"noArtifacts": "No recordings or transcripts are available yet.",
|
||
"recordingArtifact": "Recording",
|
||
"refreshFailed": "Failed to refresh recordings. Please try again.",
|
||
"refreshRecordings": "Refresh recordings",
|
||
"sectionTitle": "Online Meeting",
|
||
"transcriptArtifact": "Transcript",
|
||
"viewTranscript": "View transcript"
|
||
},
|
||
"quickAdd": {
|
||
"teams": {
|
||
"attendees": {
|
||
"add": "Add",
|
||
"addContact": "Select contacts...",
|
||
"addUser": "Select internal users...",
|
||
"badge": {
|
||
"clientLocation": "Client location",
|
||
"contact": "Contact",
|
||
"email": "Email",
|
||
"internal": "Internal"
|
||
},
|
||
"duplicateEmail": "That email is already on the attendee list.",
|
||
"emailPlaceholder": "name@example.com",
|
||
"empty": "No attendees added yet.",
|
||
"helper": "Attendees receive a Teams calendar invite from the meeting organizer.",
|
||
"invalidEmail": "Enter a valid email address.",
|
||
"label": "Attendees",
|
||
"remove": "Remove {{name}}",
|
||
"tabs": {
|
||
"contacts": "Contacts",
|
||
"email": "Email",
|
||
"users": "Users"
|
||
}
|
||
},
|
||
"checkingCapability": "Checking Teams meeting availability...",
|
||
"createFailed": "Failed to create Teams meeting",
|
||
"createToggle": "Create Teams meeting",
|
||
"endRequired": "End time is required to create a Teams meeting",
|
||
"startRequired": "Start time is required to create a Teams meeting",
|
||
"unavailable": "Teams meeting creation is not available for this tenant."
|
||
}
|
||
},
|
||
"feed": {
|
||
"addInteraction": "Add Interaction",
|
||
"allTypes": "All Types",
|
||
"applyFilters": "Apply Filters",
|
||
"endDate": "End Date",
|
||
"filter": "Filter",
|
||
"filterDialogTitle": "Filter Interactions",
|
||
"reset": "Reset",
|
||
"searchPlaceholder": "Search interactions",
|
||
"startDate": "Start Date",
|
||
"title": "Interactions",
|
||
"typePlaceholder": "Interaction Type"
|
||
},
|
||
"overall": {
|
||
"allContacts": "All Contacts",
|
||
"allStatuses": "All Statuses",
|
||
"allUsers": "All Users",
|
||
"byUser": "By {{name}}",
|
||
"collapse": "Collapse Recent Interactions",
|
||
"contactsFromClient": "Contacts from selected client",
|
||
"endTime": "End Time",
|
||
"endTimeLabel": "Interaction End Time",
|
||
"endTimePlaceholder": "Filter until this end time",
|
||
"expand": "Expand Recent Interactions",
|
||
"startTime": "Start Time",
|
||
"startTimeLabel": "Interaction Start Time",
|
||
"startTimePlaceholder": "Filter from this start time",
|
||
"statusPlaceholder": "Status",
|
||
"title": "Recent Interactions"
|
||
}
|
||
},
|
||
"clientDrawer": {
|
||
"loadFailed": "Failed to load client details.",
|
||
"loading": "Loading...",
|
||
"notFound": "Client not found."
|
||
},
|
||
"clientTabs": {
|
||
"assets": {
|
||
"columns": {
|
||
"assetTag": "Asset Tag",
|
||
"details": "Details",
|
||
"location": "Location",
|
||
"name": "Name",
|
||
"purchaseDate": "Purchase Date",
|
||
"serialNumber": "Serial Number",
|
||
"status": "Status",
|
||
"type": "Type",
|
||
"warrantyEnd": "Warranty End"
|
||
},
|
||
"details": {
|
||
"local": "Local",
|
||
"network": "Network",
|
||
"noIp": "No IP",
|
||
"none": "No details available"
|
||
},
|
||
"drawerLoadError": "Unable to load asset details right now. Please try again.",
|
||
"expiredSuffix": "(Expired)",
|
||
"filterByType": "Filter by Type",
|
||
"inventory": {
|
||
"subtitle": "Manage and track all client assets",
|
||
"title": "Asset Inventory"
|
||
},
|
||
"loading": "Loading assets...",
|
||
"loadingHint": "Please wait while we fetch your data",
|
||
"maintenanceTypes": {
|
||
"subtitle": "Breakdown by category",
|
||
"title": "Maintenance Types"
|
||
},
|
||
"overview": {
|
||
"assetsWithMaintenance": "Assets with Maintenance",
|
||
"coverageRate": "Coverage Rate",
|
||
"subtitle": "Maintenance statistics",
|
||
"title": "Asset Overview",
|
||
"totalSchedules": "Total Schedules"
|
||
},
|
||
"summary": {
|
||
"activeBadge": "Active",
|
||
"maintenanceRate": "Maintenance Rate",
|
||
"needsAttention": "Needs attention",
|
||
"overdueMaintenance": "Overdue Maintenance",
|
||
"scheduledBadge": "Scheduled",
|
||
"totalAssets": "Total Assets",
|
||
"upcomingMaintenance": "Upcoming Maintenance"
|
||
},
|
||
"typePlaceholder": "All asset types...",
|
||
"types": {
|
||
"all": "All Asset Types",
|
||
"mobileDevice": "Mobile Device",
|
||
"networkDevice": "Network Device",
|
||
"printer": "Printer",
|
||
"server": "Server",
|
||
"workstation": "Workstation"
|
||
}
|
||
},
|
||
"tickets": {
|
||
"addTicket": "Add Ticket",
|
||
"filters": {
|
||
"allAssignees": "All Assignees",
|
||
"allPriorities": "All Priorities",
|
||
"categoryPlaceholder": "Filter by category",
|
||
"reset": "Reset",
|
||
"searchPlaceholder": "Search tickets...",
|
||
"statusPlaceholder": "Select Status"
|
||
},
|
||
"loadMore": {
|
||
"label": "Load More Tickets",
|
||
"loading": "Loading..."
|
||
},
|
||
"loading": "Loading tickets...",
|
||
"title": "Client Tickets",
|
||
"toasts": {
|
||
"loadTicketFailed": "Failed to load ticket",
|
||
"openTicketFailed": "Failed to open ticket",
|
||
"userNotAuthenticated": "User not authenticated"
|
||
}
|
||
}
|
||
}
|
||
}
|