mirror of
https://github.com/Luchexx/wacrm.git
synced 2026-11-02 09:19:51 +00:00
450 lines
17 KiB
JSON
450 lines
17 KiB
JSON
{
|
|
"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 <phoneCode>phone</phoneCode> column. Optional: <nameCode>name</nameCode>, <emailCode>email</emailCode>, <companyCode>company</companyCode>, <tagsCode>tags</tagsCode> (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}\"."
|
|
}
|
|
}
|
|
}
|