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
984 lines
42 KiB
JSON
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"
|
|
}
|
|
}
|
|
}
|