{ "LoginPage": { "titleAccept": "Sign in to accept", "titleWelcome": "Welcome back", "descAccept": "Sign in and we'll take you to the invitation.", "descWelcome": "Sign in to your account", "emailLabel": "Email", "emailPlaceholder": "you@example.com", "passwordLabel": "Password", "forgotPassword": "Forgot password?", "passwordPlaceholder": "Enter your password", "signingIn": "Signing in...", "signIn": "Sign in", "noAccount": "Don't have an account?", "createAccount": "Create account" }, "Sidebar": { "title": "CRM Template for WhatsApp", "dashboard": "Dashboard", "inbox": "Inbox", "notifications": "Notifications", "contacts": "Contacts", "pipelines": "Pipelines", "broadcasts": "Broadcasts", "automations": "Automations", "flows": "Flows", "aiAgents": "AI Agents", "settings": "Settings", "beta": "Beta", "unreadConversations": "{count} unread {count, plural, =1 {conversation} other {conversations}}", "unreadNotifications": "{count} unread {count, plural, =1 {notification} other {notifications}}", "roleOwner": "Owner", "roleAdmin": "Admin", "roleAgent": "Agent", "roleViewer": "Viewer", "closeMenu": "Close menu", "defaultUser": "User", "defaultAvatar": "Avatar", "menuProfile": "Profile", "menuSettings": "Settings", "menuSignOut": "Sign out" }, "Header": { "dashboard": "Dashboard", "inbox": "Inbox", "notifications": "Notifications", "contacts": "Contacts", "pipelines": "Pipelines", "broadcasts": "Broadcasts", "automations": "Automations", "settings": "Settings", "openMenu": "Open menu", "openAccountMenu": "Open account menu", "defaultUser": "User", "defaultAvatar": "Avatar", "menuProfile": "Profile", "menuSettings": "Settings", "menuSignOut": "Sign out" }, "ModeToggle": { "switchMode": "Switch to {mode} mode" }, "Dashboard": { "page": { "title": "Dashboard", "description": "Live analytics across conversations, contacts, deals, broadcasts, and automations.", "activeConversations": "Active Conversations", "newContactsToday": "New Contacts Today", "openDealsValue": "Open Deals Value", "messagesSentToday": "Messages Sent Today", "newTodayVsYesterday": "new today vs yesterday", "vsYesterday": "vs yesterday", "openDeals": "{count} open {count, plural, =1 {deal} other {deals}}", "noChange": "No change {suffix}" }, "quickActions": { "newContact": "New Contact", "newDeal": "New Deal", "newBroadcast": "New Broadcast", "newAutomation": "New Automation" }, "activityFeed": { "title": "Recent Activity", "viewAll": "View all →", "noActivity": "No activity yet", "noActivityHint": "Activity from messages, deals, broadcasts, and automations will appear here.", "showingOf": "Showing {visible} of {totalLoaded}{plus}", "show": "Show", "timeS": "{sec}s ago", "timeM": "{min}m ago", "timeH": "{hr}h ago", "timeD": "{day}d ago" }, "conversationsChart": { "title": "Conversations Over Time", "description": "Daily message volume by direction", "days": "{count} days", "noActivity": "No message activity in this range", "noActivityHint": "Send or receive messages to start populating this chart.", "incoming": "Incoming", "outgoing": "Outgoing", "tooltipIncoming": "{count} incoming", "tooltipOutgoing": "{count} outgoing", "ariaLabel": "Conversations per day" }, "pipelineDonut": { "title": "Pipeline Value", "description": "Open deals by stage", "noOpenDeals": "No open deals yet", "noOpenDealsHint": "Create deals in Pipelines to see stage breakdowns here.", "dealCount": "{count} {count, plural, =1 {deal} other {deals}}", "total": "Total", "ariaLabel": "Pipeline value by stage" }, "responseTimeChart": { "title": "Average First Response Time", "description": "Minutes to reply to a customer's first unreplied message, by weekday", "target": "target {minutes}m", "thisWeek": "This week:", "lastWeek": "Last week:", "noReplies": "No replies recorded yet", "noRepliesHint": "This chart fills in as you reply to customer messages." }, "emptyState": { "title": "Not enough data yet" } }, "Inbox": { "page": { "whatsappNotConnected": "WhatsApp® is not connected. Go to Settings to connect your account." }, "conversationList": { "searchPlaceholder": "Search conversations...", "filterAll": "All", "filterUnread": "Unread", "filterOpen": "Open", "filterPending": "Pending", "filterClosed": "Closed", "tags": "Tags", "company": "Company", "allCompanies": "All companies", "clearAll": "Clear all", "noConversations": "No conversations found", "noMessagesYet": "No messages yet", "unknown": "Unknown" }, "messageThread": { "backToConversations": "Back to conversations", "hideContactPanel": "Hide contact panel", "showContactPanel": "Show contact panel", "hideContact": "Hide contact", "showContact": "Show contact", "refresh": "Refresh", "refreshConversation": "Refresh conversation", "status": "Status", "statusOpen": "Open", "statusPending": "Pending", "statusClosed": "Closed", "assign": "Assign", "assigned": "Assigned", "unassign": "Unassign", "noTeammates": "No teammates available", "me": " (me)", "noMessagesYet": "No messages yet", "sendTemplateHint": "Send a template to start the conversation", "selectConversation": "Select a conversation", "selectConversationHint": "Choose a conversation from the left to start messaging", "today": "Today", "yesterday": "Yesterday" }, "sessionTimer": { "expired": "Expired", "xhRemaining": "{hours}h remaining", "xmRemaining": "{minutes}m remaining", "noCustomerMessages": "No customer messages" }, "composer": { "draftHint": "Tap the ✨ to draft a reply with AI — you can edit it before sending", "sessionExpiredHint": "24-hour session expired. Use a template to re-engage.", "templates": "Templates", "readOnlyPlaceholder": "Read-only — viewers can browse but not reply", "sessionExpiredPlaceholder": "Session expired - use a template", "typeMessagePlaceholder": "Type a message... (Shift+Enter for new line)", "readOnlyTitle": "Read-only — your role can't send messages", "recording": "Recording… {current} / {max}", "cancel": "Cancel", "stopAndAttach": "Stop and attach", "attachMedia": "Attach media", "photo": "Photo", "video": "Video", "document": "Document", "voiceNote": "Voice note", "sendTemplate": "Send template", "draftWithAI": "Draft a reply with AI", "addCaption": "Add a caption…", "removeAttachment": "Remove attachment" }, "bubble": { "photo": "Photo", "video": "Video", "audio": "Audio", "unavailable": "{label} unavailable", "document": "Document", "locationShared": "Location shared", "template": "Template", "buttonReply": "Button reply", "interactiveReply": "[Interactive reply]", "unsupported": "[Unsupported message type]" }, "actions": { "reply": "Reply", "copyText": "Copy text", "delete": "Delete", "react": "React", "reactWith": "React with {emoji}", "nothingToCopy": "Nothing to copy", "copied": "Copied", "copyFailed": "Copy failed" }, "replyQuote": { "photo": "[Photo]", "video": "[Video]", "document": "[Document]", "audio": "[Audio]", "voiceMessage": "[Voice message]", "location": "[Location]", "template": "[Template]", "message": "[Message]", "cancelReply": "Cancel reply" }, "templatePicker": { "sendTemplate": "Send template", "fillPlaceholders": "Fill in the placeholders to render this template. Meta requires every variable to be set.", "pickTemplate": "Pick an approved WhatsApp template to send to this contact.", "noApprovedTemplates": "No approved templates", "noApprovedTemplatesHint": "Approve a template in Meta WhatsApp Manager, then sync it from Settings → Templates.", "preview": "Preview", "headerValuePlaceholder": "Value for the header variable", "bodyValuePlaceholder": "Value for {val}", "urlSuffixValuePlaceholder": "URL suffix value", "finalUrl": "Final URL: {url}", "back": "Back", "cancel": "Cancel", "send": "Send template" }, "sidebar": { "contactInfo": "Contact info", "tags": "Tags", "notes": "Notes", "deals": "Deals" } }, "Contacts": { "page": { "title": "Contacts", "subtitle": "Manage your contact list. {count} total contacts.", "subtitleZero": "Manage your contact list.", "customFieldsBtn": "Custom fields", "importBtn": "Import", "addContactBtn": "Add Contact", "searchPlaceholder": "Search by name, phone, or email...", "filterByTags": "Filter by tags", "clearAll": "Clear all", "noTagsYet": "No tags yet.", "selectedCount": "{count} selected", "clearSelection": "Clear", "deleteSelected": "Delete selected", "tableColumns": { "name": "Name", "phone": "Phone", "email": "Email", "company": "Company", "tags": "Tags", "createdAt": "Created" }, "loading": "Loading contacts...", "noContactsMatch": "No contacts match your filters.", "noContactsYet": "No contacts yet.", "addFirstContact": "Add your first contact", "unnamed": "Unnamed", "editAction": "Edit", "deleteAction": "Delete", "showingPagination": "Showing {start}-{end} of {total}", "pageCount": "Page {page} of {total}", "deleteContactTitle": "Delete Contact", "deleteContactDesc": "Are you sure you want to delete {name}? This action cannot be undone.", "cancel": "Cancel", "deleteBtn": "Delete", "deleteBulkTitle": "Delete Contacts", "deleteBulkDesc": "Are you sure you want to delete {count} selected contacts? This action cannot be undone.", "toastFailedLoad": "Failed to load contacts", "toastFailedDelete": "Failed to delete contact", "toastDeleted": "Contact deleted", "toastBulkFailedDelete": "Failed to delete contacts", "toastBulkDeleted": "{count} contacts deleted" }, "form": { "addTitle": "Add Contact", "addDesc": "Create a new contact. Name is required.", "editTitle": "Edit Contact", "editDesc": "Update contact details and tags.", "nameLabel": "Name", "namePlaceholder": "Jane Doe", "phoneLabel": "Phone Number", "phonePlaceholder": "+1234567890", "phoneHint": "Include country code, e.g. +1 for US", "emailLabel": "Email", "emailPlaceholder": "jane@example.com", "companyLabel": "Company", "companyPlaceholder": "Acme Corp", "tagsLabel": "Tags", "tagsPlaceholder": "Select tags...", "noTagsFound": "No tags found.", "createTagAction": "Create tag \"{value}\"", "cancel": "Cancel", "save": "Save Contact", "update": "Update", "create": "Create", "toastSuccessAdd": "Contact created successfully", "toastSuccessEdit": "Contact updated successfully", "toastError": "Failed to save contact", "toastConflict": "A contact with this phone number already exists", "viewExisting": "View {name}", "dupExact": "A contact with this phone number already exists.", "dupSimilar": "A contact with a very similar number already exists.", "loadingTags": "Loading tags...", "noTagsAvailable": "No tags available. Create tags in Settings.", "phoneRequired": "Phone number is required" }, "detailView": { "tabs": { "details": "Details", "activity": "Activity", "notes": "Notes", "custom": "Custom Fields", "deals": "Deals" }, "actions": { "edit": "Edit", "message": "Message", "delete": "Delete" }, "contactInfo": "Contact Information", "unnamed": "Unknown", "contactDetailsDesc": "Contact details", "phone": "Phone", "email": "Email", "company": "Company", "createdAt": "Created At", "customFields": "Custom Fields", "noCustomFields": "No custom fields defined. Create them in Settings.", "manageFields": "Manage fields", "enterCustomField": "Enter {name}...", "activityTab": { "title": "Activity History", "noActivity": "No activity yet." }, "notesTab": { "title": "Internal Notes", "placeholder": "Write a note...", "save": "Add Note", "noNotes": "No notes yet." }, "dealsTab": { "noDeals": "No deals yet" }, "tagsTab": { "clickTagDesc": "Click a tag to add or remove it from this contact.", "noTagsAvailable": "No tags available. Create tags in Settings." }, "sendTemplateBtn": "Send template", "saveChangesBtn": "Save Changes", "saveCustomFieldsBtn": "Save Custom Fields", "toastPhoneRequired": "Phone number is required", "toastUpdateFailed": "Failed to update contact", "toastUpdated": "Contact updated", "toastNotAuthenticated": "Not authenticated", "toastNoteAddFailed": "Failed to add note", "toastNoteAdded": "Note added", "toastNoteDeleteFailed": "Failed to delete note", "toastNoteDeleted": "Note deleted", "toastCustomFieldsSaved": "Custom fields saved", "toastCustomFieldsFailed": "Failed to save custom fields", "toastTemplateSent": "Template \"{name}\" sent", "toastTemplateFailed": "Failed to send template: {reason}" }, "importModal": { "title": "Import Contacts", "desc": "Upload a CSV with a required phone column. Optional: name, email, company, tags (comma-separated; quote multi-tag cells).", "uploadDropzone": "Click to choose a CSV file", "uploadHint": ".csv up to your browser limit", "rowsReady": "{count} row ready", "rowsReady_plural": "{count} rows ready", "preview": "Preview · first {count}", "previewTags": "{tags} tag · {contacts} contact", "previewTags_plural": "{tags} tags · {contacts} contacts", "moreRows": "+ {count} more row not shown", "moreRows_plural": "+ {count} more rows not shown", "importComplete": "Import complete", "resultImported": "{count} imported", "resultTags": "{count} tag assigned", "resultTags_plural": "{count} tags assigned", "resultSkipped": "{count} skipped", "resultFailed": "{count} failed", "willBeCreated": "{name} (will be created on import)", "columns": { "phone": "Phone", "name": "Name", "email": "Email", "company": "Company", "tags": "Tags" }, "cancel": "Cancel", "close": "Close", "importBtn": "Import {count} contact", "importBtn_plural": "Import {count} contacts", "toastNoValidRows": "No valid rows found. Ensure CSV has a \"phone\" column header.", "toastTagsWarning": "Contacts imported, but some tag assignments failed.", "toastImported": "{count} contact imported", "toastImported_plural": "{count} contacts imported", "toastTagsAssigned": "{count} tag assignment applied", "toastTagsAssigned_plural": "{count} tag assignments applied", "toastTagsSkipped": "Unknown tags skipped (create them in Settings first): {sample}{more}", "toastSkipped": "{count} duplicate skipped", "toastSkipped_plural": "{count} duplicates skipped", "toastFailed": "{count} contact failed to import", "toastFailed_plural": "{count} contacts failed to import", "toastError": "Import failed" }, "customFields": { "title": "Custom fields", "desc": "Define extra contact fields (e.g. ZIP code, lead source). They appear on every contact and in the “Update Contact Field” automation action.", "addField": "Add", "fieldName": "New field name…", "loading": "Loading…", "empty": "No custom fields yet.", "renameAria": "Rename {name}", "deleteTitle": "Delete field", "deleteConfirm": "Delete \"{name}\"? This also removes its stored value on every contact. This cannot be undone.", "toastNoAccount": "Your profile is not linked to an account.", "toastDuplicate": "A field named \"{name}\" already exists.", "toastCreateFailed": "Could not create field. You may not have permission.", "toastCreated": "Created \"{name}\".", "toastRenameFailed": "Could not rename field.", "toastDeleteFailed": "Could not delete field.", "toastDeleted": "Deleted \"{name}\"." } } }