PSA/server/public/locales/en/msp/email-providers.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

984 lines
42 KiB
JSON

{
"configuration": {
"loading": "Loading email providers...",
"feedback": {
"testingConnection": "Testing connection for {{providerName}}...",
"connectionSuccess": "Connected to {{providerName}}.",
"connectionError": "Connection test failed",
"refreshWatchError": "Failed to refresh watch subscription",
"renewalError": "Renewal failed",
"initiateOauthError": "Failed to initiate IMAP OAuth",
"resyncing": "Resyncing {{providerName}}...",
"resyncError": "Failed to resync IMAP provider",
"resyncStarted": "Resync started for {{providerName}}.",
"enterpriseOnly": "Microsoft 365 inbound email is only available in Enterprise Edition."
},
"editDrawer": {
"title": "Edit Email Provider",
"description": "Update configuration for {{providerName}}"
},
"header": {
"title": "Email Provider Configuration",
"description": {
"enterprise": "Configure Gmail, Microsoft 365, or IMAP providers to receive and process inbound emails as tickets",
"standard": "Configure Gmail or IMAP providers to receive and process inbound emails as tickets"
},
"counts": {
"enterprise": "Gmail: {{gmail}} · Microsoft: {{microsoft}} · IMAP: {{imap}}",
"standard": "Gmail: {{gmail}} · IMAP: {{imap}}"
}
},
"actions": {
"addProvider": "Add Email Provider"
},
"nav": {
"providers": "Providers",
"defaults": "Defaults",
"inboundRules": "Inbound Rules"
},
"setup": {
"title": "Setup Instructions",
"microsoft": {
"title": "Microsoft 365 Setup",
"steps": {
"registerApp": "Register an application in Azure AD",
"permissions": "Configure API permissions for Mail.Read",
"redirectUrl": "Set up the redirect URL in your app registration",
"credentials": "Use the Client ID and Client Secret in the form above"
}
},
"gmail": {
"title": "Gmail Setup",
"enterpriseSteps": {
"enterAddress": "Enter your Gmail address and provider name",
"connect": "Click \"Connect Gmail\" to authorize access",
"preferences": "Configure email processing preferences",
"save": "Save to complete setup"
},
"standardSteps": {
"project": "Create a project in Google Cloud Console",
"oauth": "Enable Gmail API and create OAuth2 credentials",
"pubsub": "Set up Pub/Sub topic for push notifications",
"consent": "Configure the OAuth consent screen and add test users"
}
}
}
},
"list": {
"header": {
"title": "Email Providers ({{count}})"
},
"filters": {
"searchPlaceholder": "Search providers...",
"allProviders": "All Providers"
},
"actions": {
"refresh": "Refresh"
}
},
"selector": {
"header": {
"title": "Choose Your Email Provider",
"description": "Select the email service you want to use for inbound email processing. You can configure multiple email providers per account."
},
"cards": {
"google": {
"title": "Gmail",
"description": "Google Workspace / Gmail Integration",
"features": {
"accounts": "✓ Gmail and Google Workspace accounts",
"filtering": "✓ Label-based email filtering",
"processing": "✓ Real-time email processing",
"authentication": "✓ Automatic OAuth authentication"
},
"action": "Set up Gmail"
},
"microsoft": {
"title": "Microsoft 365",
"description": "Microsoft 365 / Outlook Integration",
"features": {
"accounts": "✓ Microsoft 365 and Outlook accounts",
"filtering": "✓ Folder-based email filtering",
"processing": "✓ Real-time email processing",
"authentication": "✓ Azure AD OAuth integration"
},
"action": "Set up Microsoft 365"
},
"imap": {
"title": "IMAP",
"description": "Custom IMAP Server Integration",
"features": {
"accounts": "✓ Any IMAP-compliant mailbox",
"filtering": "✓ Folder-based email filtering",
"authentication": "✓ OAuth2 or password authentication",
"listener": "✓ Real-time IDLE listener"
},
"action": "Set up IMAP"
}
},
"actions": {
"cancel": "Cancel"
},
"help": {
"enterprise": "Choose the provider your organization already uses. If you use Google Workspace, pick Gmail; if you use Microsoft 365, pick Microsoft 365. You can change this later by removing and reconfiguring your email provider.",
"standard": "Choose the provider your organization already uses. If you use Google Workspace, pick Gmail; otherwise choose IMAP. You can change this later by removing and reconfiguring your email provider."
}
},
"wizard": {
"title": {
"select": "Choose Email Provider",
"setup": "{{provider}} Configuration"
},
"actions": {
"cancel": "Cancel",
"back": "Back",
"close": "Close"
}
},
"providerCard": {
"subscription": {
"expired": "Expired",
"expiresInHours": "Expires in {{count}}h",
"expiresInDays": "Expires in {{count}}d"
},
"badges": {
"disabled": "Disabled",
"connected": "Connected",
"disconnected": "Disconnected",
"error": "Error",
"configuring": "Configuring",
"unknown": "Unknown"
},
"lastSync": {
"never": "Never",
"justNow": "Just now",
"minutesAgo": "{{count}}m ago",
"hoursAgo": "{{count}}h ago",
"daysAgo": "{{count}}d ago"
},
"actions": {
"edit": "Edit Configuration",
"testing": "Testing…",
"testConnection": "Test Connection",
"refreshWatch": "Refresh Pub/Sub & Watch",
"retryRenewal": "Retry Renewal",
"runDiagnostics": "Run Microsoft 365 Diagnostics",
"reconnectOauth": "Reconnect OAuth",
"resyncing": "Resyncing…",
"resyncMailbox": "Resync Mailbox",
"delete": "Delete Provider"
},
"fields": {
"status": "Status",
"lastSync": "Last Sync",
"created": "Created",
"subscription": "Subscription",
"defaults": "Ticket Defaults",
"error": "Error:"
},
"values": {
"active": "Active",
"inactive": "Inactive",
"disabled": "Disabled",
"error": "Error"
},
"types": {
"google": "Gmail",
"microsoft": "Microsoft 365",
"imap": "IMAP"
},
"filters": {
"folders": "Folders: {{filters}}",
"labels": "Labels: {{filters}}"
},
"warnings": {
"inboundDefaults": "Inbound ticket defaults are required and emails won't process until one is selected."
},
"defaults": {
"placeholder": "Select defaults...",
"empty": "No defaults available"
},
"empty": {
"title": "No Email Providers Configured",
"description": "Add an email provider to start receiving and processing inbound emails as tickets.",
"action": "Add Email Provider"
}
},
"forms": {
"common": {
"actions": {
"cancel": "Cancel",
"saving": "Saving...",
"updateProvider": "Update Provider",
"addProvider": "Add Provider",
"createProvider": "Create Provider",
"manageDefaults": "Manage defaults",
"refreshList": "Refresh list",
"openProvidersSettings": "Open Providers Settings"
},
"validation": {
"requiredFieldsTitle": "Please fill in the required fields:",
"fixHighlightedFields": "Please fix the highlighted fields and try again."
},
"ticketDefaults": {
"title": "Ticket Defaults",
"description": "Select defaults to apply to email-created tickets",
"label": "Inbound Ticket Defaults",
"placeholder": "Select defaults (optional)",
"empty": "No defaults available"
},
"oauth": {
"authorizing": "Authorizing...",
"authorized": "Authorized",
"authorizeAccess": "Authorize Access"
}
},
"microsoft": {
"validation": {
"providerNameRequired": "Configuration name is required",
"emailRequired": "Valid email address is required",
"redirectRequired": "Valid redirect URI is required",
"authorizeRequiresValid": "Please fill in all required fields before authorizing",
"oauthInitiateFailed": "Failed to initiate OAuth",
"popupBlocked": "Failed to open OAuth popup. Please allow popups for this site.",
"closedEarly": "Authorization window closed before completing. Please try again.",
"authorizationFailed": "Authorization failed",
"senderDisplayNameInvalid": "Display name cannot contain quotes, angle brackets, or line breaks"
},
"requiredFields": {
"providerName": "Configuration Name",
"emailAddress": "Email Address",
"redirectUri": "Redirect URI"
},
"basic": {
"title": "Basic Configuration",
"description": "Basic settings for your Microsoft 365 email provider",
"providerNameLabel": "Configuration Name *",
"providerNamePlaceholder": "e.g., Support Mailbox (internal)",
"emailLabel": "Email Address *",
"emailPlaceholder": "support@client.com",
"enableProvider": "Enable this provider",
"providerNameHelp": "Internal name used to identify this configuration. Not shown in outbound emails.",
"senderDisplayNameLabel": "Sender Display Name",
"senderDisplayNamePlaceholder": "e.g., Acme Support",
"senderDisplayNameHelp": "Display name shown in the From header on outbound ticket emails (replies, closures). Applied only when this mailbox matches the tenant's outbound ticketing-from address. Leave blank to fall back to the ticket's board name."
},
"oauth": {
"sectionTitle": "Microsoft OAuth Configuration",
"sectionDescription": "Microsoft app credentials are configured in Providers settings and reused here.",
"setupLabel": "Microsoft Entra",
"notConfigured": "Microsoft provider settings are not configured.",
"setupHelp": "Configure Providers first in Settings → Integrations → Providers, then return here to authorize this mailbox.",
"redirectUriLabel": "Redirect URI *",
"redirectUriPlaceholder": "https://yourapp.com/api/auth/microsoft/callback",
"authorizationTitle": "OAuth Authorization",
"authorizationDescription": "Complete OAuth flow to grant access to the mailbox"
},
"advanced": {
"title": "Advanced Settings",
"description": "Configure advanced email processing options",
"folderFiltersLabel": "Folder Filters",
"folderFiltersPlaceholder": "Inbox, Support, Custom Folder",
"folderFiltersHelp": "Comma-separated list of folders to monitor (default: Inbox)",
"maxEmailsPerSync": "Max Emails Per Sync"
}
},
"gmail": {
"validation": {
"providerNameRequired": "Configuration name is required",
"gmailAddressRequired": "Valid Gmail address is required",
"authorizeRequiresValid": "Please fill in all required fields before authorizing",
"googleNotConfigured": "Google integration is not configured for this tenant. Configure Google first, then retry.",
"oauthInitiateFailed": "Failed to initiate OAuth",
"popupBlocked": "Failed to open OAuth popup. Please allow popups for this site.",
"closedEarly": "Authorization window was closed before completing.",
"authorizationFailed": "Authorization failed",
"popupFailed": "OAuth popup failed"
},
"messages": {
"setupIncomplete": "Provider saved but setup incomplete: {{error}}",
"warningsTitle": "Setup completed with warnings:",
"settingUp": "Setting up Gmail notifications..."
},
"requiredFields": {
"providerName": "Configuration Name",
"gmailAddress": "Gmail Address"
},
"basic": {
"title": "Basic Configuration",
"description": "Basic settings for your Gmail email provider",
"providerNameLabel": "Configuration Name *",
"providerNamePlaceholder": "e.g., Support Gmail (internal)",
"mailboxLabel": "Gmail Address *",
"mailboxPlaceholder": "support@client.com",
"enableProvider": "Enable this provider",
"providerNameHelp": "Internal name used to identify this configuration. Not shown in outbound emails.",
"senderDisplayNameLabel": "Sender Display Name",
"senderDisplayNamePlaceholder": "e.g., Acme Support",
"senderDisplayNameHelp": "Display name shown in the From header on outbound ticket emails (replies, closures). Applied only when this mailbox matches the tenant's outbound ticketing-from address. Leave blank to fall back to the ticket's board name."
},
"oauth": {
"sectionTitle": "Google OAuth",
"sectionDescription": "Uses the tenant-owned Google app configured in Settings → Integrations → Providers.",
"setupLabel": "Google Cloud Console",
"notConfigured": "Google integration is not configured for this tenant.",
"setupHelp": "Configure tenant-owned Google OAuth + Pub/Sub first: Settings → Integrations → Providers.",
"openSettings": "Open Google Settings",
"requiredTitle": "OAuth Authorization Required",
"requiredDescriptionAdd": "You must complete OAuth authorization above before adding the provider to enable Gmail notifications.",
"requiredDescriptionUpdate": "You must complete OAuth authorization above before updating the provider to enable Gmail notifications.",
"stepTitle": "Step 1: OAuth Authorization",
"stepDescription": "Complete OAuth flow to grant access to Gmail",
"buttonSuccessSaving": "Successfully authorized! Saving your settings..."
},
"advanced": {
"title": "Advanced Settings",
"description": "Configure advanced email processing options",
"completeSetupSuffix": " & Complete Setup"
},
"processing": {
"labelFiltersLabel": "Gmail Labels to Monitor",
"labelFiltersPlaceholder": "INBOX, Support, Custom Label",
"labelFiltersHelp": "Comma-separated list of Gmail labels to monitor (default: INBOX)"
}
},
"imap": {
"validation": {
"providerNameRequired": "Configuration name is required",
"mailboxRequired": "Mailbox is required",
"mailboxInvalid": "Valid mailbox is required (e.g. user@domain.com, user@localhost, user@test-server, or user)",
"hostRequired": "IMAP host is required",
"usernameRequired": "IMAP username is required",
"oauthInitiateFailed": "Failed to initiate IMAP OAuth",
"senderDisplayNameInvalid": "Display name cannot contain quotes, angle brackets, or line breaks"
},
"basic": {
"title": "Basic Settings",
"description": "Define the IMAP mailbox connection details.",
"providerName": "Configuration Name",
"mailboxAddress": "Mailbox Address",
"host": "IMAP Host",
"port": "Port",
"useTls": "Use TLS/SSL",
"allowStarttls": "Allow STARTTLS Upgrade",
"providerNamePlaceholder": "e.g., Support IMAP (internal)",
"providerNameHelp": "Internal name used to identify this configuration. Not shown in outbound emails.",
"senderDisplayName": "Sender Display Name",
"senderDisplayNamePlaceholder": "e.g., Acme Support",
"senderDisplayNameHelp": "Display name shown in the From header on outbound ticket emails (replies, closures). Applied only when this mailbox matches the tenant's outbound ticketing-from address. Leave blank to fall back to the ticket's board name."
},
"auth": {
"title": "Authentication",
"description": "Choose password or OAuth2 authentication.",
"typeLabel": "Authentication Type",
"passwordOption": "Password",
"oauth2Option": "OAuth2 (XOAUTH2)",
"username": "Username",
"password": "Password / App Password",
"passwordHelp": "Passwords are stored securely and will not be displayed. Leave blank to keep the existing password.",
"oauthStatus": "OAuth Status",
"connected": "Connected",
"notConnected": "Not connected",
"reconnectOauth": "Reconnect OAuth",
"authorizeUrl": "Authorize URL",
"tokenUrl": "Token URL",
"clientId": "OAuth Client ID",
"clientSecret": "OAuth Client Secret",
"scopes": "OAuth Scopes",
"scopesPlaceholder": "space-delimited scopes"
},
"processing": {
"title": "Processing Settings",
"description": "Choose folders and processing behavior.",
"folderFilters": "Folder Filters",
"folderFiltersPlaceholder": "Inbox, Support, Tickets",
"active": "Active"
}
}
},
"inboundDefaultsForm": {
"feedback": {
"loadOptionsError": "Failed to load field options",
"loading": "Loading form options..."
},
"validation": {
"nameRequired": "Short name and display name are required",
"boardRequired": "Board is required",
"statusRequired": "Status is required",
"priorityRequired": "Priority is required",
"clientRequired": "Company is required"
},
"fields": {
"shortName": {
"label": "Short Name *",
"placeholder": "email-general",
"help": "Unique identifier (e.g., email-general, support-billing)"
},
"displayName": {
"label": "Display Name *",
"placeholder": "General Email Support"
},
"description": {
"label": "Description",
"placeholder": "Optional description of when these defaults are used"
},
"active": {
"label": "Active"
},
"board": {
"label": "Board *",
"placeholder": "Select Board"
},
"status": {
"label": "Status *",
"placeholder": "Select status",
"selectBoardFirst": "Select board first",
"loading": "Loading statuses..."
},
"priority": {
"label": "Priority *",
"placeholder": "Select priority"
},
"client": {
"label": "Client *",
"placeholder": "Select Client",
"help": "Required: used as a catch-all when no client can be matched from the email."
},
"category": {
"label": "Category",
"placeholder": "Select category",
"placeholderNoBoard": "Select board first",
"empty": "No categories found for the selected board."
},
"location": {
"label": "Location",
"placeholder": "Select location",
"placeholderNoClient": "Select client first (optional)",
"help": "Only applied when the catch-all client is used (no match case)."
},
"enteredBy": {
"label": "Entered By",
"placeholder": "System (null)",
"help": "Used only when we cannot match a contact or client. System tickets will show \"System\" as creator."
}
},
"section": {
"ticketDefaults": "Ticket Defaults"
},
"optionSuffix": {
"default": "(Default)"
},
"actions": {
"cancel": "Cancel",
"updating": "Updating...",
"creating": "Creating...",
"update": "Update Defaults",
"create": "Create Defaults"
}
},
"imapForm": {
"sections": {
"basic": {
"title": "Basic Settings",
"description": "Define the IMAP mailbox connection details."
},
"auth": {
"title": "Authentication",
"description": "Choose password or OAuth2 authentication."
},
"processing": {
"title": "Processing Settings",
"description": "Choose folders and processing behavior."
}
},
"fields": {
"providerName": "Configuration Name",
"mailboxAddress": "Mailbox Address",
"imapHost": "IMAP Host",
"port": "Port",
"useTls": "Use TLS/SSL",
"allowStarttls": "Allow STARTTLS Upgrade",
"authenticationType": "Authentication Type",
"username": "Username",
"passwordLabel": "Password / App Password",
"authorizeUrl": "Authorize URL",
"tokenUrl": "Token URL",
"oauthClientId": "OAuth Client ID",
"oauthClientSecret": "OAuth Client Secret",
"oauthScopes": "OAuth Scopes",
"oauthScopesPlaceholder": "space-delimited scopes",
"folderFilters": "Folder Filters",
"folderFiltersPlaceholder": "Inbox, Support, Tickets",
"active": "Active",
"ticketDefaultsLabel": "Ticket Defaults",
"ticketDefaultsPlaceholder": "Select defaults...",
"ticketDefaultsEmpty": "No defaults available",
"providerNamePlaceholder": "e.g., Support IMAP (internal)",
"providerNameHelp": "Internal name used to identify this configuration. Not shown in outbound emails.",
"senderDisplayName": "Sender Display Name",
"senderDisplayNamePlaceholder": "e.g., Acme Support",
"senderDisplayNameHelp": "Display name shown in the From header on outbound ticket emails (replies, closures). Applied only when this mailbox matches the tenant's outbound ticketing-from address. Leave blank to fall back to the ticket's board name."
},
"authOptions": {
"password": "Password",
"oauth2": "OAuth2 (XOAUTH2)"
},
"password": {
"editHelp": "Passwords are stored securely and will not be displayed. Leave blank to keep the existing password."
},
"oauth": {
"statusLabel": "OAuth Status",
"connected": "Connected",
"notConnected": "Not connected",
"authorizing": "Authorizing...",
"reconnect": "Reconnect OAuth"
},
"validation": {
"fixHighlightedFields": "Please fix the highlighted fields and try again."
},
"actions": {
"cancel": "Cancel",
"saving": "Saving...",
"updateProvider": "Update Provider",
"createProvider": "Create Provider"
}
},
"microsoftForm": {
"header": {
"title": "Microsoft 365 Integration",
"description": "Simply connect your Microsoft 365 account and configure your email processing preferences to get started."
},
"sections": {
"accountSetup": {
"title": "Microsoft 365 Account Setup",
"description": "Configure your Microsoft 365 account for inbound email processing"
},
"authentication": {
"title": "Microsoft 365 Authentication",
"description": "Connect your Microsoft 365 account to enable email processing"
},
"processing": {
"title": "Email Processing Settings",
"description": "Configure how emails are processed and imported"
},
"ticketDefaults": {
"title": "Ticket Defaults",
"description": "Select defaults to apply to email-created tickets"
}
},
"fields": {
"providerNameLabel": "Configuration Name *",
"providerNamePlaceholder": "e.g., Support Mailbox (internal)",
"mailboxLabel": "Microsoft 365 Address *",
"mailboxPlaceholder": "support@client.com",
"enableProvider": "Enable this provider",
"foldersLabel": "Folders to Monitor",
"foldersPlaceholder": "Inbox, Support, Custom Folder",
"foldersHelp": "Comma-separated list of folders to monitor (default: Inbox)",
"maxEmailsLabel": "Max Emails Per Sync",
"maxEmailsHelp": "Maximum number of emails to process in each sync (1-1000)",
"inboundDefaultsLabel": "Inbound Ticket Defaults",
"inboundDefaultsPlaceholder": "Select defaults (optional)",
"providerNameHelp": "Internal name used to identify this configuration. Not shown in outbound emails.",
"senderDisplayNameLabel": "Sender Display Name",
"senderDisplayNamePlaceholder": "e.g., Acme Support",
"senderDisplayNameHelp": "Display name shown in the From header on outbound ticket emails (replies, closures). Applied only when this mailbox matches the tenant's outbound ticketing-from address. Leave blank to fall back to the ticket's board name."
},
"oauth": {
"connectionTitle": "Microsoft 365 Connection",
"descriptionIdle": "Authorize access to your Microsoft 365 account",
"descriptionSuccess": "Successfully connected! Complete setup by saving below.",
"connecting": "Connecting...",
"connected": "Connected",
"connectButton": "Connect Microsoft 365",
"requiredTitle": "Microsoft 365 Connection Required",
"requiredDescriptionUpdate": "You must connect your Microsoft 365 account above before updating the provider.",
"requiredDescriptionAdd": "You must connect your Microsoft 365 account above before adding the provider.",
"authError": "Please fill in all required fields before authorizing",
"popupBlocked": "Failed to open OAuth popup. Please allow popups for this site.",
"authorizationFailed": "Authorization failed",
"initiateFailed": "Failed to initiate OAuth",
"hostedConfigIncomplete": "Hosted Microsoft configuration not available or incomplete",
"hostedCredentialsMissing": "Hosted Microsoft client credentials not available"
},
"nextStep": {
"title": "Complete Setup",
"autoSubmit": "Auto-completing in",
"secondsSuffix": "seconds, or click",
"clickNow": "below now.",
"manualInstruction": "Click",
"manualSuffix": "below to finish configuration.",
"cancelAutoSubmit": "Cancel Auto-Submit"
},
"buttons": {
"updateProvider": "Update Provider",
"addProvider": "Add Provider",
"manageDefaults": "Manage defaults",
"refreshList": "Refresh list",
"cancel": "Cancel",
"completeSetupSuffix": "& Complete Setup",
"settingUp": "Setting up Microsoft 365 integration..."
},
"validation": {
"requiredFieldsTitle": "Please fill in the required fields:",
"providerName": "Configuration Name",
"mailbox": "Microsoft 365 Address"
}
},
"gmailForm": {
"header": {
"title": "Gmail Integration",
"description": "Connect your Gmail account and configure your email processing preferences."
},
"basicConfig": {
"title": "Gmail Account Setup",
"description": "Configure your Gmail account for inbound email processing"
},
"authentication": {
"title": "Gmail Authentication",
"description": "Connect your Gmail account to enable email processing",
"connectionTitle": "Gmail Connection",
"descriptionIdle": "Authorize access to your Gmail account",
"descriptionSuccess": "Successfully connected! Saving your settings...",
"buttonIdle": "Connect Gmail",
"buttonAuthorizing": "Connecting...",
"buttonSuccess": "Connected"
},
"processing": {
"title": "Email Processing Settings",
"description": "Configure how emails are processed and imported"
},
"ticketDefaults": {
"title": "Ticket Defaults",
"description": "Select defaults to apply to email-created tickets",
"manageDefaults": "Manage defaults",
"inboundDefaultsLabel": "Inbound Ticket Defaults",
"inboundDefaultsPlaceholder": "Select defaults (optional)",
"refreshList": "Refresh list"
},
"googleConfig": {
"notConfigured": "Google integration is not configured for this tenant.",
"configureHint": "Configure tenant-owned Google OAuth + Pub/Sub first:",
"settingsPath": "Settings → Integrations → Providers",
"openSettings": "Open Google Settings"
},
"oauth": {
"requiredTitle": "Gmail Connection Required",
"requiredDescriptionUpdate": "You must connect your Gmail account above before updating the provider.",
"requiredDescriptionAdd": "You must connect your Gmail account above before adding the provider.",
"fillRequiredFields": "Please fill in all required fields before authorizing",
"notConfiguredTenant": "Google integration is not configured for this tenant. Configure Google first, then retry.",
"initiateFailed": "Failed to initiate OAuth"
},
"validation": {
"requiredFieldsTitle": "Please fill in the required fields:",
"providerName": "Provider Name",
"mailbox": "Gmail Address"
},
"warnings": {
"setupIncomplete": "Provider saved but setup incomplete: {{error}}",
"setupWarningsTitle": "Setup completed with warnings:"
},
"buttons": {
"updateProvider": "Update Provider",
"addProvider": "Add Provider",
"completeSetupSuffix": "& Complete Setup",
"cancel": "Cancel",
"settingUp": "Setting up Gmail integration..."
}
},
"managed": {
"messages": {
"loadDomainsFailed": "Failed to load managed domains",
"loadOutboundSettingsFailed": "Failed to load outbound email settings",
"ticketingFromUpdated": "Ticketing from address updated",
"ticketingFromSaveFailed": "Failed to save ticketing from address",
"ticketingFromCleared": "Ticketing from address cleared",
"ticketingFromClearFailed": "Failed to clear ticketing from address",
"switchProviderFailed": "Failed to switch provider",
"smtpHostRequired": "SMTP host is required",
"fromAddressRequired": "From address is required",
"smtpSaved": "SMTP settings saved",
"smtpSaveFailed": "Failed to save SMTP settings",
"domainRequired": "Enter a domain name",
"domainSubmitted": "Domain request submitted",
"domainRequestFailed": "Failed to request domain",
"verificationRecheckScheduled": "Verification re-check scheduled",
"refreshStatusFailed": "Failed to refresh domain status",
"domainRemovalScheduled": "Domain removal scheduled",
"domainRemovalScheduledWithClear": "Domain removal scheduled and ticketing From address cleared",
"removeDomainFailed": "Failed to remove domain"
},
"tabs": {
"inboundEmail": "Inbound Email",
"outboundEmail": "Outbound Email"
},
"outbound": {
"intro": "Configure outbound email for your organization.",
"providerTitle": "Outbound Provider",
"providerDescription": "Choose how outbound emails are sent from your organization.",
"providerPlaceholder": "Select outbound provider",
"providerOptions": {
"resend": "Nine Minds Managed",
"smtp": "SMTP"
},
"resendDescription": "Emails are sent through Nine Minds managed infrastructure. Add and verify a custom domain below.",
"smtpDescription": "Emails are sent through your own SMTP server.",
"smtpLabel": "SMTP",
"upgradeNotice": "Managed email domains are not available on your current plan. Upgrade to use Nine Minds managed outbound infrastructure with custom domains.",
"domainsTitle": "Managed Domains",
"domainsDescription": "Add a custom domain and follow the DNS instructions to verify ownership.",
"domainLabel": "Domain",
"domainPlaceholder": "example.com",
"addDomainButton": "Add Domain",
"smtpConfigTitle": "SMTP Configuration",
"smtpConfigDescription": "Enter your SMTP server details to send outbound email.",
"smtp": {
"hostLabel": "SMTP Host",
"hostPlaceholder": "smtp.example.com",
"portLabel": "Port",
"usernameLabel": "Username",
"usernamePlaceholder": "your-email@example.com",
"passwordLabel": "Password",
"passwordPlaceholder": "Enter password",
"fromLabel": "From Address",
"fromPlaceholder": "noreply@example.com",
"fromHelp": "The default sender address for outbound emails.",
"savingButton": "Saving...",
"saveButton": "Save SMTP Settings"
},
"ticketingFrom": {
"title": "Ticketing From Address",
"description": "Choose the email address that will appear in the From header on ticket notifications.",
"smtpHint": "Address should use a domain associated with your SMTP server ({{domain}}). Replies work best when you use a connected inbound inbox.",
"managedHint": "Address must use your outbound domain ({{domain}}). Replies work best when you use a connected inbound inbox.",
"domainNotSet": "not set",
"outboundRequiredTitle": "Outbound domain required",
"smtpRequiredMessage": "Save your SMTP configuration with a from address before selecting a ticketing from address.",
"managedRequiredMessage": "Add and verify a managed domain before selecting a ticketing from address.",
"connectedInboxLabel": "Connected inbox",
"customOptionLabel": "Other address on {{domain}}",
"selectPlaceholder": "Select from address",
"connectedInboxHelp": "Select a connected inbox to keep inbound replies threaded.",
"customLabel": "From address",
"customPlaceholder": "support@{{domain}}",
"customSmtpHelp": "Use a domain your SMTP server is authorized to send from. Using a mismatched domain may cause delivery failures or spam filtering.",
"customManagedHelp": "Must match {{domain}}. If this isn't one of your inbound inboxes, inbound ticket processing may not work.",
"warningTitle": "Heads up",
"errorTitle": "Fix the from address",
"clearButton": "Clear From Address",
"savingButton": "Saving...",
"saveButton": "Save From Address"
}
},
"inbound": {
"intro": "Configure inbound email routing and provider-specific automation."
},
"dialogs": {
"clearTicketingFrom": {
"title": "Clear Ticketing From Address",
"message": "Clear the saved ticketing From address? Ticket notifications will stop using a custom From address until you save a new one.",
"confirm": "Clear From Address"
},
"removeDomain": {
"title": "Remove Managed Domain",
"messageWithClear": "Remove {{domain}}? This will also clear the saved ticketing From address because this domain is currently active for outbound email.",
"message": "Remove {{domain}}?",
"fallbackDomain": "this domain",
"confirm": "Remove Domain"
},
"cancel": "Cancel"
},
"validation": {
"enterFromAddress": "Enter a from email address",
"saveSmtpFirst": "Save your SMTP configuration with a from address first",
"addOutboundFirst": "Add and verify an outbound domain before choosing a from address",
"invalidEmail": "Enter a valid email address",
"mustMatchDomain": "From address must use @{{domain}}",
"customAddressThreadWarning": "Using a custom address may prevent inbound ticket replies from threading correctly.",
"smtpDomainMismatchWarning": "This domain does not match your SMTP from address domain ({{domain}}). Emails may fail to deliver or be flagged as spam if your SMTP server is not authorized to send from this domain.",
"notConnectedWarning": "Inbound ticket processing may not work with this address because it is not one of your connected inboxes."
},
"domainList": {
"loading": "Loading domains…",
"empty": "No managed domains yet. Add one to get started.",
"providerDomainId": "Provider domain ID: {{id}}",
"providerFallback": "Managed via Resend",
"failureReason": "Failure reason: {{reason}}",
"recheckButton": "Re-check DNS",
"removeButton": "Remove Domain",
"dnsRecordsHeading": "DNS Records",
"dnsRecordsHelp": "Copy each record below into your DNS provider (GoDaddy, Cloudflare, etc.). We cannot change your DNS for you.",
"dnsEmpty": {
"pending": "We asked Resend to generate the DNS records for this domain. Once they show up, copy them into your DNS provider because we cannot update it automatically.",
"failed": "We still need DNS instructions from Resend. Click Re-check DNS and, when the records load, publish them inside your DNS provider.",
"default": "DNS instructions are not available yet. Re-check DNS and copy each record into your DNS provider as soon as it appears."
}
},
"dnsRecords": {
"status": {
"matched": "Detected",
"mismatch": "Mismatch",
"missing": "Not Found",
"unknown": "Waiting for Check"
},
"detectedValues": "Detected values",
"defaultEmpty": "We are preparing the DNS records for this domain. As soon as they appear, copy them into your DNS provider because we cannot update it for you.",
"summary": "Matched {{matched}} of {{total}} required DNS records",
"summaryWithCheckedAt": "Matched {{matched}} of {{total}} required DNS records • Last checked {{checkedAt}}.",
"lastCheckedNoRecords": "Last checked {{checkedAt}}. We have not detected any records yet.",
"copyButton": "Copy",
"copyAriaLabel": "Copy DNS value",
"copied": "Copied to clipboard",
"copyFailed": "Failed to copy",
"checkedAt": "Checked {{checkedAt}}",
"ttlLabel": "TTL:",
"priorityLabel": "Priority:",
"missingHelp": "We have not detected this record in DNS yet. Double-check that it exists in your DNS provider with the exact value shown above.",
"mismatchHelp": "The DNS record exists, but the value does not match what Resend expects.",
"matchedHelp": "Detected value matches what we expected.",
"unknownHelp": "We have not checked DNS yet. Re-check DNS to run verification."
}
},
"inboundRules": {
"actions": {
"addRule": "Add Rule",
"aiClassify": "Classify with AI",
"aiClassifyUpsell": "Requires the AI Assistant add-on",
"extractAssign": "Assign client from extracted text",
"setDestination": "Route to destination",
"skip": "Skip email (no ticket)"
},
"badges": {
"allMailboxes": "All mailboxes"
},
"empty": {
"description": "Create a rule to skip status-update emails or assign tickets to clients named in the subject line.",
"title": "No inbound rules configured"
},
"errors": {
"aliasAdd": "Failed to add alias",
"delete": "Failed to delete rule",
"load": "Failed to load inbound rules",
"reorder": "Failed to reorder rules",
"save": "Failed to save rule",
"test": "Failed to test rule",
"update": "Failed to update rule"
},
"extraction": {
"after": "Text after marker",
"before": "Text before marker",
"between": "Text between delimiters",
"regex": "Regular expression (advanced)"
},
"fields": {
"bodyText": "Body text",
"fromAddress": "From address",
"fromDomain": "From domain",
"subject": "Subject",
"toAddress": "To/CC address"
},
"form": {
"action": "Action",
"active": "Active",
"addCondition": "Add condition",
"aiAllowAssign": "May assign clients",
"aiAllowSkip": "May skip emails",
"aiInstruction": "Instruction",
"aiInstructionPlaceholder": "e.g. Determine which customer this monitoring alert is about.",
"aiUpsell": "Classify with AI is available with the Enterprise AI Assistant add-on — emails are classified by intent with no patterns to maintain.",
"cancel": "Cancel",
"conditions": "Conditions (all must match)",
"create": "Create rule",
"createTitle": "Create Inbound Rule",
"description": "Define when the rule matches and what happens to the email. Use the tester below to verify against a sample before saving.",
"destination": "Destination (ticket defaults)",
"destinationPlaceholder": "Select a defaults set",
"editTitle": "Edit Inbound Rule",
"endDelimiter": "End delimiter",
"extractFrom": "Extract from",
"extractionTemplate": "Extraction",
"fallbackDestination": "Fallback destination",
"first": "First",
"last": "Last",
"mailboxes": "Apply to mailboxes",
"mailboxesHint": "Leave all unchecked to apply this rule to every mailbox.",
"marker": "Marker text",
"markerPlaceholder": "e.g. Customer:",
"matchHint": "The extracted text is matched against client names and client aliases (case-insensitive).",
"name": "Rule name",
"namePlaceholder": "e.g. Huntress customer routing",
"noMailboxes": "No mailboxes configured yet.",
"noMatchFallback": "Route to a fallback destination",
"noMatchProceed": "Continue with later rules / normal processing",
"noMatchSkip": "Skip the email",
"occurrence": "Occurrence",
"onNoMatch": "If no client matches",
"pattern": "Pattern (capture group 1 is the client name)",
"regexPlaceholder": "Regular expression",
"saving": "Saving…",
"startDelimiter": "Start delimiter",
"update": "Update rule",
"valuePlaceholder": "Value"
},
"header": {
"description": "Match inbound email by sender or subject to skip noise, assign the right client, or route to a destination. Rules run in order; the first match wins.",
"title": "Inbound Email Rules"
},
"help": {
"items": {
"aliases": "• Extracted names match client names and aliases. Manage aliases on the client record, or add them from the rule tester.",
"audit": "• Skipped emails stay auditable in email processing diagnostics, tagged with the rule that skipped them.",
"order": "• Rules run top to bottom on new inbound email; the first matching rule applies.",
"replies": "• Replies to existing tickets always become comments — rules never touch them."
},
"title": "How It Works"
},
"loading": "Loading inbound rules...",
"menu": {
"delete": "Delete",
"deleting": "Deleting…",
"edit": "Edit"
},
"operators": {
"contains": "contains",
"endsWith": "ends with",
"equals": "equals",
"matchesRegex": "matches regex",
"startsWith": "starts with"
},
"summary": {
"aiClassify": "Classify with AI",
"extractAssign": "Assign client from {{source}}",
"setDestination": "Route to destination",
"skip": "Skip email (no ticket)"
},
"tester": {
"alias": "alias",
"aliasAdd": "Add alias",
"aliasAdded": "Alias added. Run the test again to see it match.",
"aliasAdding": "Adding…",
"aliasClientPlaceholder": "Select a client",
"aliasLabel": "Add \"{{value}}\" as an alias of",
"body": "Body text",
"clientMatched": "Matched client via {{source}}",
"clientName": "client name",
"extracted": "Extracted value:",
"from": "From",
"noClient": "No client matched",
"outcome": {
"assignClient": "Ticket assigned to client \"{{client}}\"",
"fallback": "No client matched — ticket routed to the fallback destination",
"none": "Rule did not resolve — normal processing continues",
"setDestination": "Ticket routed to the selected destination",
"skip": "Email skipped — no ticket created"
},
"run": "Run test",
"running": "Testing…",
"subject": "Subject",
"title": "Test this rule",
"to": "To"
}
}
}