mirror of
https://github.com/chatwoot/chatwoot.git
synced 2026-06-04 21:02:35 +08:00
# Pull Request Template ## Description This PR adds support for inline image uploads in the reply editor for Email and Website (chat widget) channels. Agents can now insert images inline between text and resize them directly in the editor by dragging the bottom corner, similar to the help center editor experience. Image sizes are preserved through markdown using the `cw_image_width` URL param and render correctly in both outgoing emails and chat widget messages. Agents can also paste copied images directly into Email or Website replies using **Shift+Cmd+V** (Shift+Ctrl+V on Windows/Linux). The image gets inserted inline at the cursor position and supports resizing just like uploaded images. Regular **Cmd+V / Ctrl+V** behavior remains unchanged and continues to add images as attachments, so both inline and attachment flows are supported. ### Prosemirror repo PR: https://github.com/chatwoot/prosemirror-schema/pull/48 Fixes https://linear.app/chatwoot/issue/CW-7133/inline-images-in-live-chat-and-email https://linear.app/chatwoot/issue/CW-7225/ghsa-8j9w-jppp-xcfc-html-attribute-injection-via-unvalidated-cw-image ## Type of change - [x] New feature (non-breaking change which adds functionality) ## How Has This Been Tested? ### Screencast https://github.com/user-attachments/assets/a928f852-ab15-413a-9d35-6ea69b718ecf <img width="414" height="654" alt="image" src="https://github.com/user-attachments/assets/205e0729-8f2d-4cc5-9c55-7696f032eca4" /> ## Checklist: - [x] My code follows the style guidelines of this project - [x] I have performed a self-review of my code - [x] I have commented on my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [x] New and existing unit tests pass locally with my changes - [ ] Any dependent changes have been merged and published in downstream modules --------- Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com>
492 lines
20 KiB
JSON
492 lines
20 KiB
JSON
{
|
||
"CONVERSATION": {
|
||
"SELECT_A_CONVERSATION": "Please select a conversation from left pane",
|
||
"CSAT_REPLY_MESSAGE": "Please rate the conversation",
|
||
"404": "Sorry, we cannot find the conversation. Please try again",
|
||
"SWITCH_VIEW_LAYOUT": "Switch the layout",
|
||
"DASHBOARD_APP_TAB_MESSAGES": "Messages",
|
||
"UNVERIFIED_SESSION": "The identity of this user is not verified",
|
||
"NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.",
|
||
"NO_MESSAGE_2": " to send a message to your page!",
|
||
"NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.",
|
||
"NO_INBOX_2": " to get started",
|
||
"NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator",
|
||
"SEARCH_MESSAGES": "Search for messages in conversations",
|
||
"VIEW_ORIGINAL": "View original",
|
||
"VIEW_TRANSLATED": "View translated",
|
||
"EMPTY_STATE": {
|
||
"CMD_BAR": "to open command menu",
|
||
"KEYBOARD_SHORTCUTS": "to view keyboard shortcuts"
|
||
},
|
||
"SEARCH": {
|
||
"TITLE": "Search messages",
|
||
"RESULT_TITLE": "Search Results",
|
||
"LOADING_MESSAGE": "Crunching data...",
|
||
"PLACEHOLDER": "Type any text to search messages",
|
||
"NO_MATCHING_RESULTS": "No results found."
|
||
},
|
||
"UNREAD_MESSAGES": "Unread Messages",
|
||
"UNREAD_MESSAGE": "Unread Message",
|
||
"CLICK_HERE": "Click here",
|
||
"LOADING_INBOXES": "Loading inboxes",
|
||
"LOADING_CONVERSATIONS": "Loading Conversations",
|
||
"CANNOT_REPLY": "You cannot reply due to",
|
||
"24_HOURS_WINDOW": "24 hour message window restriction",
|
||
"48_HOURS_WINDOW": "48 hour message window restriction",
|
||
"API_HOURS_WINDOW": "You can only reply to this conversation within {hours} hours",
|
||
"NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?",
|
||
"ASSIGN_TO_ME": "Assign to me",
|
||
"BOT_HANDOFF_MESSAGE": "You are responding to a conversation which is currently handled by an assistant or a bot.",
|
||
"BOT_HANDOFF_ACTION": "Mark open and assign to you",
|
||
"BOT_HANDOFF_REOPEN_ACTION": "Mark conversation open",
|
||
"BOT_HANDOFF_SUCCESS": "Conversation has been handed over to you",
|
||
"BOT_HANDOFF_ERROR": "Failed to take over the conversation. Please try again.",
|
||
"TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to",
|
||
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction",
|
||
"OLD_INSTAGRAM_INBOX_REPLY_BANNER": "This Instagram account was migrated to the new Instagram channel inbox. All new messages will show up there. You won’t be able to send messages from this conversation anymore.",
|
||
"REPLYING_TO": "You are replying to:",
|
||
"REMOVE_SELECTION": "Remove Selection",
|
||
"DOWNLOAD": "Download",
|
||
"UNKNOWN_FILE_TYPE": "Unknown File",
|
||
"SAVE_CONTACT": "Save Contact",
|
||
"NO_CONTENT": "No content to display",
|
||
"SHARED_ATTACHMENT": {
|
||
"CONTACT": "{sender} has shared a contact",
|
||
"LOCATION": "{sender} has shared a location",
|
||
"FILE": "{sender} has shared a file",
|
||
"MEETING": "{sender} has started a meeting"
|
||
},
|
||
"UPLOADING_ATTACHMENTS": "Uploading attachments...",
|
||
"REPLIED_TO_STORY": "Replied to your story",
|
||
"UNSUPPORTED_MESSAGE": "This message is unsupported. To view it, please open it on the original platform.",
|
||
"UNSUPPORTED_MESSAGE_FACEBOOK": "This message is unsupported. You can view this message on the Facebook Messenger app.",
|
||
"UNSUPPORTED_MESSAGE_INSTAGRAM": "This message is unsupported. You can view this message on the Instagram app.",
|
||
"UNSUPPORTED_MESSAGE_TIKTOK": "This message is unsupported. You can view this message on the TikTok app.",
|
||
"UNSUPPORTED_MESSAGE_WHATSAPP": "This message is unsupported. You can view this message on the WhatsApp app.",
|
||
"SUCCESS_DELETE_MESSAGE": "Message deleted successfully",
|
||
"FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again",
|
||
"NO_RESPONSE": "No response",
|
||
"RESPONSE": "Response",
|
||
"RATING_TITLE": "Rating",
|
||
"FEEDBACK_TITLE": "Feedback",
|
||
"REPLY_MESSAGE_NOT_FOUND": "Message not available",
|
||
"CARD": {
|
||
"SHOW_LABELS": "Show labels",
|
||
"HIDE_LABELS": "Hide labels",
|
||
"LABELS_COUNT": "{count} labels"
|
||
},
|
||
"VOICE_CALL": {
|
||
"INCOMING_CALL": "Incoming call",
|
||
"OUTGOING_CALL": "Outgoing call",
|
||
"CALL_IN_PROGRESS": "Call in progress",
|
||
"NO_ANSWER": "No answer",
|
||
"NO_ANSWER_OUTBOUND_LABEL": "No answer",
|
||
"NO_ANSWER_OUTBOUND_SUBTEXT": "Contact didn't pick up",
|
||
"MISSED_CALL": "Missed call",
|
||
"MISSED_CALL_INBOUND_SUBTEXT": "No agent picked up",
|
||
"MISSED_CALL_DECLINED_BY": "Declined by {agentName}",
|
||
"CALL_ENDED": "Call ended",
|
||
"HANDLED_BY": "Handled by {agentName}",
|
||
"NOT_ANSWERED_YET": "Not answered yet",
|
||
"CALLING": "Calling…",
|
||
"THEY_ANSWERED": "They answered",
|
||
"YOU_ANSWERED": "You answered",
|
||
"AGENT_ANSWERED": "{agentName} answered",
|
||
"JOIN_CALL": "Join call",
|
||
"CALL_BACK": "Call back",
|
||
"TRANSCRIPT_SHOW_MORE": "Show more",
|
||
"TRANSCRIPT_SHOW_LESS": "Show less"
|
||
},
|
||
"HEADER": {
|
||
"RESOLVE_ACTION": "Resolve",
|
||
"REOPEN_ACTION": "Reopen",
|
||
"OPEN_ACTION": "Open",
|
||
"MORE_ACTIONS": "More actions",
|
||
"OPEN": "More",
|
||
"CLOSE": "Close",
|
||
"DETAILS": "details",
|
||
"COPY_ID_SUCCESS": "Conversation ID copied to clipboard",
|
||
"SNOOZED_UNTIL": "Snoozed until",
|
||
"SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow",
|
||
"SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week",
|
||
"SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply",
|
||
"WHATSAPP_CALL": "Start WhatsApp call",
|
||
"WHATSAPP_CALL_FAILED": "Could not start the WhatsApp call.",
|
||
"VOICE_CALL": "Start call",
|
||
"VOICE_CALL_FAILED": "Could not start the call.",
|
||
"WHATSAPP_CALL_PERMISSION_REQUESTED": "Sent a call permission request to the contact. Try again once they accept.",
|
||
"WHATSAPP_CALL_PERMISSION_PENDING": "Call permission request already sent recently. Try again once the contact accepts.",
|
||
"SLA_STATUS": {
|
||
"FRT": "FRT {status}",
|
||
"NRT": "NRT {status}",
|
||
"RT": "RT {status}",
|
||
"MISSED": "missed",
|
||
"DUE": "due"
|
||
}
|
||
},
|
||
"RESOLVE_DROPDOWN": {
|
||
"MARK_PENDING": "Mark as pending",
|
||
"SNOOZE_UNTIL": "Snooze",
|
||
"SNOOZE": {
|
||
"TITLE": "Snooze until",
|
||
"NEXT_REPLY": "Next reply",
|
||
"TOMORROW": "Tomorrow",
|
||
"NEXT_WEEK": "Next week"
|
||
}
|
||
},
|
||
"MENTION": {
|
||
"AGENTS": "Agents",
|
||
"TEAMS": "Teams"
|
||
},
|
||
"CUSTOM_SNOOZE": {
|
||
"TITLE": "Snooze until",
|
||
"APPLY": "Snooze",
|
||
"CANCEL": "Cancel"
|
||
},
|
||
"PRIORITY": {
|
||
"TITLE": "Priority",
|
||
"OPTIONS": {
|
||
"NONE": "None",
|
||
"URGENT": "Urgent",
|
||
"HIGH": "High",
|
||
"MEDIUM": "Medium",
|
||
"LOW": "Low"
|
||
},
|
||
"CHANGE_PRIORITY": {
|
||
"SELECT_PLACEHOLDER": "None",
|
||
"INPUT_PLACEHOLDER": "Select priority",
|
||
"NO_RESULTS": "No results found",
|
||
"SUCCESSFUL": "Changed priority of conversation id {conversationId} to {priority}",
|
||
"FAILED": "Couldn't change priority. Please try again."
|
||
}
|
||
},
|
||
"DELETE_CONVERSATION": {
|
||
"TITLE": "Delete conversation #{conversationId}",
|
||
"DESCRIPTION": "Are you sure you want to delete this conversation?",
|
||
"CONFIRM": "Delete"
|
||
},
|
||
"CARD_CONTEXT_MENU": {
|
||
"PENDING": "Mark as pending",
|
||
"RESOLVED": "Mark as resolved",
|
||
"MARK_AS_UNREAD": "Mark as unread",
|
||
"MARK_AS_READ": "Mark as read",
|
||
"REOPEN": "Reopen conversation",
|
||
"SNOOZE": {
|
||
"TITLE": "Snooze",
|
||
"NEXT_REPLY": "Until next reply",
|
||
"TOMORROW": "Until tomorrow",
|
||
"NEXT_WEEK": "Until next week"
|
||
},
|
||
"ASSIGN_AGENT": "Assign agent",
|
||
"ASSIGN_LABEL": "Assign label",
|
||
"AGENTS_LOADING": "Loading agents...",
|
||
"ASSIGN_TEAM": "Assign team",
|
||
"DELETE": "Delete conversation",
|
||
"OPEN_IN_NEW_TAB": "Open in new tab",
|
||
"COPY_LINK": "Copy conversation link",
|
||
"COPY_LINK_SUCCESS": "Conversation link copied to clipboard",
|
||
"API": {
|
||
"AGENT_ASSIGNMENT": {
|
||
"SUCCESFUL": "Conversation id {conversationId} assigned to \"{agentName}\"",
|
||
"FAILED": "Couldn't assign agent. Please try again."
|
||
},
|
||
"LABEL_ASSIGNMENT": {
|
||
"SUCCESFUL": "Assigned label #{labelName} to conversation id {conversationId}",
|
||
"FAILED": "Couldn't assign label. Please try again."
|
||
},
|
||
"LABEL_REMOVAL": {
|
||
"SUCCESFUL": "Removed label #{labelName} from conversation id {conversationId}",
|
||
"FAILED": "Couldn't remove label. Please try again."
|
||
},
|
||
"TEAM_ASSIGNMENT": {
|
||
"SUCCESFUL": "Assigned team \"{team}\" to conversation id {conversationId}",
|
||
"FAILED": "Couldn't assign team. Please try again."
|
||
}
|
||
}
|
||
},
|
||
"FOOTER": {
|
||
"MESSAGE_SIGN_TOOLTIP": "Message signature",
|
||
"ENABLE_SIGN_TOOLTIP": "Enable signature",
|
||
"DISABLE_SIGN_TOOLTIP": "Disable signature",
|
||
"MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.",
|
||
"PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents",
|
||
"MESSAGING_RESTRICTED": "You cannot reply to this conversation",
|
||
"MESSAGING_RESTRICTED_WHATSAPP": "You can only reply using a template message due to 24-hour message window restriction",
|
||
"MESSAGING_RESTRICTED_API": "You can only reply using a template message due to message window restriction",
|
||
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.",
|
||
"COPILOT_MSG_INPUT": "Give copilot additional prompts, or ask anything else... Press enter to send follow-up",
|
||
"CLICK_HERE": "Click here to update",
|
||
"WHATSAPP_TEMPLATES": "Whatsapp Templates"
|
||
},
|
||
"REPLYBOX": {
|
||
"REPLY": "Reply",
|
||
"PRIVATE_NOTE": "Private Note",
|
||
"SEND": "Send",
|
||
"CREATE": "Add Note",
|
||
"INSERT_READ_MORE": "Read more",
|
||
"DISMISS_REPLY": "Dismiss reply",
|
||
"REPLYING_TO": "Replying to:",
|
||
"TIP_EMOJI_ICON": "Show emoji selector",
|
||
"TIP_ATTACH_ICON": "Attach files",
|
||
"TIP_AUDIORECORDER_ICON": "Record audio",
|
||
"TIP_AUDIORECORDER_PERMISSION": "Allow access to audio",
|
||
"TIP_AUDIORECORDER_ERROR": "Could not open the audio",
|
||
"AUDIO_CONVERSION_FAILED": "Audio conversion failed. Please try again.",
|
||
"DRAG_DROP": "Drag and drop here to attach",
|
||
"IMAGE_UPLOAD_SUCCESS": "Image uploaded successfully",
|
||
"START_AUDIO_RECORDING": "Start audio recording",
|
||
"STOP_AUDIO_RECORDING": "Stop audio recording",
|
||
"COPILOT_THINKING": "Copilot is thinking",
|
||
"EMAIL_HEAD": {
|
||
"TO": "TO",
|
||
"ADD_BCC": "Add bcc",
|
||
"CC": {
|
||
"LABEL": "CC",
|
||
"PLACEHOLDER": "Emails separated by commas",
|
||
"ERROR": "Please enter valid email addresses"
|
||
},
|
||
"BCC": {
|
||
"LABEL": "BCC",
|
||
"PLACEHOLDER": "Emails separated by commas",
|
||
"ERROR": "Please enter valid email addresses"
|
||
}
|
||
},
|
||
"UNDEFINED_VARIABLES": {
|
||
"TITLE": "Undefined variables",
|
||
"MESSAGE": "You have {undefinedVariablesCount} undefined variables in your message: {undefinedVariables}. Would you like to send the message anyway?",
|
||
"CONFIRM": {
|
||
"YES": "Send",
|
||
"CANCEL": "Cancel"
|
||
}
|
||
},
|
||
"QUOTED_REPLY": {
|
||
"ENABLE_TOOLTIP": "Include quoted email thread",
|
||
"DISABLE_TOOLTIP": "Don't include quoted email thread",
|
||
"REMOVE_PREVIEW": "Remove quoted email thread",
|
||
"COLLAPSE": "Collapse preview",
|
||
"EXPAND": "Expand preview"
|
||
}
|
||
},
|
||
"VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team",
|
||
"CHANGE_STATUS": "Conversation status changed",
|
||
"CHANGE_STATUS_FAILED": "Conversation status change failed",
|
||
"CHANGE_AGENT": "Conversation Assignee changed",
|
||
"CHANGE_AGENT_FAILED": "Assignee change failed",
|
||
"ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully",
|
||
"ASSIGN_LABEL_FAILED": "Label assignment failed",
|
||
"CHANGE_TEAM": "Conversation team changed",
|
||
"SUCCESS_DELETE_CONVERSATION": "Conversation deleted successfully",
|
||
"FAIL_DELETE_CONVERSATION": "Couldn't delete conversation! Try again",
|
||
"FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit",
|
||
"FILE_TYPE_NOT_SUPPORTED": "This {fileName} file type is not supported in this conversation",
|
||
"MESSAGE_ERROR": "Unable to send this message, please try again later",
|
||
"SENT_BY": "Sent by:",
|
||
"BOT": "Bot",
|
||
"NATIVE_APP": "Native app",
|
||
"NATIVE_APP_ADVISORY": "This message was sent from the native app. Reply from Chatwoot to maintain the message window.",
|
||
"SEND_FAILED": "Couldn't send message! Try again",
|
||
"TRY_AGAIN": "retry",
|
||
"ASSIGNMENT": {
|
||
"SELECT_AGENT": "Select Agent",
|
||
"REMOVE": "Remove",
|
||
"ASSIGN": "Assign"
|
||
},
|
||
"CONTEXT_MENU": {
|
||
"COPY": "Copy",
|
||
"REPLY_TO": "Reply to this message",
|
||
"DELETE": "Delete",
|
||
"CREATE_A_CANNED_RESPONSE": "Add to canned responses",
|
||
"TRANSLATE": "Translate",
|
||
"COPY_PERMALINK": "Copy link to the message",
|
||
"LINK_COPIED": "Message URL copied to the clipboard",
|
||
"DELETE_CONFIRMATION": {
|
||
"TITLE": "Are you sure you want to delete this message?",
|
||
"MESSAGE": "You cannot undo this action",
|
||
"DELETE": "Delete",
|
||
"CANCEL": "Cancel"
|
||
}
|
||
},
|
||
"SIDEBAR": {
|
||
"CONTACT": "Contact",
|
||
"COPILOT": "Copilot"
|
||
},
|
||
"VOICE_WIDGET": {
|
||
"INCOMING_CALL": "Incoming call",
|
||
"OUTGOING_CALL": "Outgoing call",
|
||
"CALL_IN_PROGRESS": "Call in progress",
|
||
"NOT_ANSWERED_YET": "Not answered yet",
|
||
"HANDLED_IN_ANOTHER_TAB": "Being handled in another tab",
|
||
"REJECT_CALL": "Reject",
|
||
"DISMISS_CALL": "Dismiss",
|
||
"JOIN_CALL": "Join call",
|
||
"END_CALL": "End call",
|
||
"MUTE": "Mute mic",
|
||
"UNMUTE": "Unmute mic",
|
||
"VIEW_CHAT_HISTORY": "View chat history",
|
||
"GO_TO_CONVERSATION": "Go to conversation thread"
|
||
}
|
||
},
|
||
"EMAIL_TRANSCRIPT": {
|
||
"TITLE": "Send conversation transcript",
|
||
"DESC": "Send a copy of the conversation transcript to the specified email address",
|
||
"SUBMIT": "Submit",
|
||
"CANCEL": "Cancel",
|
||
"SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully",
|
||
"SEND_EMAIL_ERROR": "There was an error, please try again",
|
||
"SEND_EMAIL_PAYMENT_REQUIRED": "Email transcript is not available on your current plan. Please upgrade to use this feature.",
|
||
"FORM": {
|
||
"SEND_TO_CONTACT": "Send the transcript to the customer",
|
||
"SEND_TO_AGENT": "Send the transcript to the assigned agent",
|
||
"SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address",
|
||
"EMAIL": {
|
||
"PLACEHOLDER": "Enter an email address",
|
||
"ERROR": "Please enter a valid email address"
|
||
}
|
||
}
|
||
},
|
||
"ONBOARDING": {
|
||
"TITLE": "Hey 👋, Welcome to {installationName}!",
|
||
"DESCRIPTION": "Thanks for signing up. We want you to get the most out of {installationName}. Here are a few things you can do in {installationName} to make the experience delightful.",
|
||
"GREETING_MORNING": "👋 Good morning, {name}. Welcome to {installationName}.",
|
||
"GREETING_AFTERNOON": "👋 Good afternoon, {name}. Welcome to {installationName}.",
|
||
"GREETING_EVENING": "👋 Good evening, {name}. Welcome to {installationName}.",
|
||
"READ_LATEST_UPDATES": "Read our latest updates",
|
||
"ALL_CONVERSATION": {
|
||
"TITLE": "All your conversations in one place",
|
||
"DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status.",
|
||
"NEW_LINK": "Click here to create an inbox"
|
||
},
|
||
"TEAM_MEMBERS": {
|
||
"TITLE": "Invite your team members",
|
||
"DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.",
|
||
"NEW_LINK": "Click here to invite a team member"
|
||
},
|
||
"LABELS": {
|
||
"TITLE": "Organize conversations with labels",
|
||
"DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.",
|
||
"NEW_LINK": "Click here to create tags"
|
||
},
|
||
"CANNED_RESPONSES": {
|
||
"TITLE": "Create canned responses",
|
||
"DESCRIPTION": "Pre-written quick reply templates help you quickly respond to a conversation. Agents can type the '/' character followed by the shortcode to insert a response.",
|
||
"NEW_LINK": "Click here to create a canned response"
|
||
}
|
||
},
|
||
"CONVERSATION_SIDEBAR": {
|
||
"ASSIGNEE_LABEL": "Assigned Agent",
|
||
"SELF_ASSIGN": "Assign to me",
|
||
"TEAM_LABEL": "Assigned Team",
|
||
"SELECT": {
|
||
"PLACEHOLDER": "None"
|
||
},
|
||
"ACCORDION": {
|
||
"CONTACT_DETAILS": "Contact Details",
|
||
"CONVERSATION_ACTIONS": "Conversation Actions",
|
||
"CONVERSATION_LABELS": "Conversation Labels",
|
||
"CONVERSATION_INFO": "Conversation Information",
|
||
"CONTACT_NOTES": "Contact Notes",
|
||
"CONTACT_ATTRIBUTES": "Contact Attributes",
|
||
"PREVIOUS_CONVERSATION": "Previous Conversations",
|
||
"MACROS": "Macros",
|
||
"LINEAR_ISSUES": "Linked Linear Issues",
|
||
"SHOPIFY_ORDERS": "Shopify Orders",
|
||
"SHARED_FILES": "Attachments"
|
||
},
|
||
"SHARED_FILES": {
|
||
"EMPTY": "No attachments yet",
|
||
"DOWNLOAD": "Download file",
|
||
"DOWNLOAD_ERROR": "Could not download the file. Please try again.",
|
||
"MEDIA_HEADING": "Media",
|
||
"FILES_HEADING": "Files",
|
||
"VIEW_ALL": "View all",
|
||
"SHOW_LESS": "Show less",
|
||
"MORE_COUNT": "+{count}",
|
||
"UNTITLED_FILE": "Untitled file"
|
||
},
|
||
"SHOPIFY": {
|
||
"ORDER_ID": "Order #{id}",
|
||
"ERROR": "Error loading orders",
|
||
"NO_SHOPIFY_ORDERS": "No orders found",
|
||
"FINANCIAL_STATUS": {
|
||
"PENDING": "Pending",
|
||
"AUTHORIZED": "Authorized",
|
||
"PARTIALLY_PAID": "Partially Paid",
|
||
"PAID": "Paid",
|
||
"PARTIALLY_REFUNDED": "Partially Refunded",
|
||
"REFUNDED": "Refunded",
|
||
"VOIDED": "Voided"
|
||
},
|
||
"FULFILLMENT_STATUS": {
|
||
"FULFILLED": "Fulfilled",
|
||
"PARTIALLY_FULFILLED": "Partially Fulfilled",
|
||
"UNFULFILLED": "Unfulfilled"
|
||
}
|
||
}
|
||
},
|
||
"CONVERSATION_CUSTOM_ATTRIBUTES": {
|
||
"ADD_BUTTON_TEXT": "Create attribute",
|
||
"NO_RECORDS_FOUND": "No attributes found",
|
||
"UPDATE": {
|
||
"SUCCESS": "Attribute updated successfully",
|
||
"ERROR": "Unable to update attribute. Please try again later"
|
||
},
|
||
"ADD": {
|
||
"TITLE": "Add",
|
||
"SUCCESS": "Attribute added successfully",
|
||
"ERROR": "Unable to add attribute. Please try again later"
|
||
},
|
||
"DELETE": {
|
||
"SUCCESS": "Attribute deleted successfully",
|
||
"ERROR": "Unable to delete attribute. Please try again later"
|
||
},
|
||
"ATTRIBUTE_SELECT": {
|
||
"TITLE": "Add attributes",
|
||
"PLACEHOLDER": "Search attributes",
|
||
"NO_RESULT": "No attributes found"
|
||
}
|
||
},
|
||
"EMAIL_HEADER": {
|
||
"FROM": "From",
|
||
"TO": "To",
|
||
"BCC": "Bcc",
|
||
"CC": "Cc",
|
||
"SUBJECT": "Subject",
|
||
"EXPAND": "Expand email"
|
||
},
|
||
"CONVERSATION_PARTICIPANTS": {
|
||
"SIDEBAR_MENU_TITLE": "Participating",
|
||
"SIDEBAR_TITLE": "Conversation participants",
|
||
"NO_RECORDS_FOUND": "No results found",
|
||
"ADD_PARTICIPANTS": "Select participants",
|
||
"REMANING_PARTICIPANTS_TEXT": "+{count} others",
|
||
"REMANING_PARTICIPANT_TEXT": "+{count} other",
|
||
"TOTAL_PARTICIPANTS_TEXT": "{count} people are participating.",
|
||
"TOTAL_PARTICIPANT_TEXT": "{count} person is participating.",
|
||
"NO_PARTICIPANTS_TEXT": "No one is participating!.",
|
||
"WATCH_CONVERSATION": "Join conversation",
|
||
"YOU_ARE_WATCHING": "You are participating",
|
||
"API": {
|
||
"ERROR_MESSAGE": "Could not update, try again!",
|
||
"SUCCESS_MESSAGE": "Participants updated!"
|
||
}
|
||
},
|
||
"TRANSLATE_MODAL": {
|
||
"TITLE": "View translated content",
|
||
"DESC": "You can view the translated content in each langauge.",
|
||
"ORIGINAL_CONTENT": "Original Content",
|
||
"TRANSLATED_CONTENT": "Translated Content",
|
||
"NO_TRANSLATIONS_AVAILABLE": "No translations are available for this content"
|
||
},
|
||
"TYPING": {
|
||
"ONE": "{user} is typing",
|
||
"TWO": "{user} and {secondUser} are typing",
|
||
"MULTIPLE": "{user} and {count} others are typing"
|
||
},
|
||
"COPILOT": {
|
||
"TRY_THESE_PROMPTS": "Try these prompts"
|
||
},
|
||
"GALLERY_VIEW": {
|
||
"ERROR_DOWNLOADING": "Unable to download attachment. Please try again"
|
||
}
|
||
}
|