{ "app": { "brand": "Shell Agent", "metadataTitle": "AI Customer Support Admin", "metadataDescription": "AI Customer Support Admin" }, "common": { "language": "Language", "notSignedIn": "Not signed in", "guest": "guest", "loading": "Loading...", "loadingData": "Loading data...", "emptyData": "No data", "searchKeyword": "Search by keyword", "emptyOptions": "No options", "close": "Close", "fullscreen": "Enter fullscreen", "exitFullscreen": "Exit fullscreen" }, "pagination": { "pageSummary": "Page {page} of {totalPages}", "total": "{total} records", "pageSize": "{pageSize} per page", "previous": "Previous", "next": "Next" }, "confirm": { "title": "Confirm Action", "description": "This action will continue after you confirm.", "confirm": "Confirm", "cancel": "Cancel" }, "realtime": { "connecting": "Realtime channel connecting", "connected": "Realtime channel connected", "disconnected": "Realtime channel disconnected", "compactConnecting": "Realtime: connecting", "compactConnected": "Realtime: online", "compactDisconnected": "Realtime: disconnected" }, "notification": { "new": "New notification", "view": "View", "openFailed": "Could not open the notification.", "connectFailed": "Could not connect to the notification service.", "loadFailed": "Could not load notifications.", "all": "All", "unread": "Unread", "read": "Read", "refresh": "Refresh", "markAllRead": "Mark All as Read", "markAllReadSuccess": "All notifications marked as read.", "markAllReadFailed": "Could not mark all notifications as read.", "fallbackTitle": "Notification", "loading": "Loading notifications", "empty": "No notifications" }, "json": { "invalid": "Invalid JSON.", "valid": "Valid", "invalidLabel": "Invalid", "readyHint": "Enter valid JSON to test the tool call.", "empty": "No data" }, "api": { "requestFailed": "Request failed.", "authExpired": "Your session has expired. Please sign in again.", "customerSessionNotReady": "The support chat is not ready yet." }, "editor": { "placeholder": "Enter content...", "undo": "Undo", "redo": "Redo", "bold": "Bold", "underline": "Underline", "italic": "Italic", "strike": "Strikethrough", "heading1": "Heading 1", "heading2": "Heading 2", "inlineCode": "Inline Code", "codeBlock": "Code Block", "bulletList": "Bulleted List", "orderedList": "Numbered List", "quote": "Quote", "link": "Link", "image": "Image", "linkText": "link text", "promptLinkUrl": "Enter the link URL", "fullscreen": "Fullscreen", "exitFullscreen": "Exit fullscreen", "previewOnly": "Preview Only", "modeSwitchConfirm": "Switching to {mode} will try to convert the content automatically. Complex formatting may not be preserved. Continue?" }, "locale": { "zh-CN": "简体中文", "en-US": "English" }, "auth": { "checkingSession": "Checking your session", "syncingProfile": "Syncing your admin profile and permissions", "loginSuccess": "Signed in. Taking you to the dashboard.", "loginFailed": "Sign-in failed", "badge": "Shell AI", "welcome": "Welcome to Shell AI Support", "username": "Username", "usernamePlaceholder": "Username or email", "password": "Password", "passwordPlaceholder": "Enter your password", "signingIn": "Signing in...", "signIn": "Sign in", "wxworkSignIn": "Sign in with WeCom", "oidcSignIn": "Sign in with OIDC", "heroBadge": "Secure Admin Workspace", "heroTitle": "Shell AI Support", "heroSubtitle": "Understand every issue, respond faster, and turn support into accountable outcomes.", "heroPoint1": "Guide every conversation toward a trackable resolution.", "heroPoint2": "Keep intake, routing, handoff, and review in one workflow.", "heroPoint3": "Connect every channel, route intelligently, and help people work with AI.", "wxworkMissingTicket": "The WeCom sign-in ticket is missing.", "wxworkFailed": "WeCom sign-in failed.", "wxworkSigningIn": "Signing in with WeCom", "oidcMissingTicket": "The OIDC sign-in ticket is missing.", "oidcFailed": "OIDC sign-in failed.", "oidcSigningIn": "Signing in with OIDC", "checkingTicket": "Verifying your sign-in ticket and opening the dashboard." }, "account": { "passwordRequired": "Enter a new password.", "confirmPasswordRequired": "Confirm your new password.", "passwordMismatch": "The passwords do not match.", "passwordChanged": "Your password has been changed. Please sign in again.", "changePasswordFailed": "Could not change your password.", "changePassword": "Change Password", "changePasswordDescription": "Update the password for your current account. You will need to sign in again after submitting.", "cancel": "Cancel", "submitting": "Submitting...", "confirmChange": "Change Password", "newPassword": "New Password", "newPasswordPlaceholder": "Enter a new password", "confirmPassword": "Confirm Password", "confirmPasswordPlaceholder": "Re-enter your new password" }, "conversation": { "syncConversationDataFailed": "Could not sync conversation data.", "syncMessagesFailed": "Could not sync messages.", "syncConversationListFailed": "Could not sync the conversation list.", "realtimeConnectFailed": "Could not connect to the realtime service.", "newMessage": "New Message", "filterActive": "Active", "filterPending": "Waiting", "filterAiServing": "AI Handling", "filterClosed": "Closed", "filterPlaceholder": "Filter status", "loadListFailed": "Could not load conversations.", "loading": "Loading...", "empty": "No conversations yet", "customerFallback": "Customer #{id}", "noTime": "No time yet", "noLatestMessage": "No recent messages", "teamOnDuty": "Team on duty: {name}", "customerAvatar": "C", "customerOnline": "Customer online", "customerOffline": "Customer offline", "channelNumber": "Channel #{id}", "linkedCustomer": "Customer linked", "workbenchTitle": "Conversation Workspace", "openMenuSelectConversation": "Open the menu to choose a conversation", "selectConversationFromSidebar": "Select a conversation on the left to start handling messages", "conversationInfo": "Conversation Info", "createTicket": "Create Ticket", "transferConversation": "Transfer Conversation", "closeConversation": "Close Conversation", "expandConversationInfo": "Expand conversation info", "collapseConversationInfo": "Collapse conversation info", "closeConversationList": "Close conversation list", "markReadFailed": "Could not mark the conversation as read.", "emptyMessages": "No messages yet", "loadOlder": "Load earlier messages", "noConversationMobile": "Tap the menu in the top left to choose a conversation", "selectConversationToChat": "Select a conversation on the left to start chatting", "closedNotice": "This conversation is closed.", "aiServingNotice": "AI is handling this conversation. Transfer it to a human agent before replying.", "claim": "Claim", "sendAttachmentFailed": "Could not send the attachment.", "customerSender": "Customer", "agentSender": "Agent", "messageRecalledHtml": "This message was recalled.", "messageRecalled": "Recalled", "customerRead": "Read by customer", "customerUnread": "Unread by customer", "recallFailed": "Could not recall the message.", "recalling": "Recalling...", "recall": "Recall", "loadQuickRepliesFailed": "Could not load quick replies.", "tagRemoved": "Conversation tag removed.", "tagAdded": "Conversation tag added.", "tagUpdateFailed": "Could not update conversation tags.", "editTags": "Edit conversation tags", "edit": "Edit", "searchTags": "Search tags", "loadingTags": "Loading tags...", "emptyTags": "No tags available", "tagGroup": "Tags", "unlinkedCustomerTitle": "No CRM Customer Linked", "unlinkedCustomerDescription": "This conversation is not linked to a customer profile yet. Link one to manage company and contact details here.", "linkOrCreateCustomer": "Link or Create Customer", "missingCustomerTitle": "Customer deleted or unavailable", "missingCustomerDescription": "The customer profile linked to this conversation is no longer available. Link an existing customer again, or create a new one and attach it to this conversation.", "relinkOrCreateCustomer": "Relink or Create Customer", "conversationOwner": "Conversation Ownership", "channelId": "Channel ID", "customerId": "Customer ID", "selectConversationForInfo": "Select a conversation to view its details", "selectSidebarConversationForInfo": "Select a conversation on the left to view its details", "loadTagsFailed": "Could not load tags.", "conversationTags": "Conversation Tags", "noConversationTags": "No tags set for this conversation", "loadCustomerFailed": "Could not load customer details.", "loadingCustomer": "Loading customer details...", "unnamedCustomer": "Unnamed customer", "customerProfileEmpty": "A customer profile is linked, but its basic details are still empty. Click Edit to complete the profile.", "lastActive": "Last Active", "remark": "Notes", "createdAt": "Created", "updatedAt": "Updated", "noContacts": "No contact methods yet", "primaryContactBadge": "Primary", "verifiedContactBadge": "Verified", "companyUnavailable": "Company details could not be loaded, or the company was deleted.", "saved": "Saved.", "saveFailed": "Could not save.", "loadTicketsFailed": "Could not load linked tickets.", "relatedTickets": "Linked Tickets", "loadingTickets": "Loading tickets...", "noRelatedTickets": "No tickets linked to this conversation", "companyNameRequired": "Enter a company name.", "editCompany": "Edit Company", "companyName": "Company Name", "companyCode": "Company Code", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "genderMale": "Male", "genderFemale": "Female", "contactMobile": "Mobile", "contactEmail": "Email", "contactOther": "Other", "loadHistoryFailed": "Could not load earlier messages.", "sendMessageFailed": "Could not send the message.", "editorPlaceholder": "Type a message. Press Enter to send, Shift + Enter for a new line.", "imageUploading": "Image is uploading", "sendImage": "Send image", "attachmentUploading": "Attachment is uploading", "sendAttachment": "Send attachment", "searchQuickReplies": "Search quick replies", "emptyQuickReplies": "No quick replies yet", "enterToSend": "Enter to send", "send": "Send", "uploading": "Uploading...", "claimRequiresSignIn": "Your session has expired. Please sign in again.", "claimReason": "Claim conversation", "claimSuccess": "Conversation claimed.", "claimFailed": "Could not claim the conversation.", "claimTitle": "Claim Conversation", "claimConfirmPrefix": "Claim \"", "claimConfirmSuffix": "\"? It will move to your conversations.", "claimCurrent": "Claim the current conversation?", "customerFallbackPrefix": "Customer #", "cancel": "Cancel", "claiming": "Claiming...", "confirmClaim": "Claim" }, "kefu": { "title": "Support", "agentLabel": "Support", "customerSelf": "You", "customerFallback": "G", "newMessage": "New message", "justNow": "Just now", "todayAt": "Today {time}", "loadingOlder": "Loading...", "loadOlder": "Load earlier messages", "emptyPrompt": "Describe your issue and we will help as soon as possible.", "agentRead": "Seen by support", "agentUnread": "Not seen by support", "imageSummary": "[Image]", "attachmentSummary": "[Attachment]", "messageSummary": "[Message]", "closedTitle": "Conversation ended", "closedDescription": "This support conversation has been closed. Thanks for chatting with us.", "connecting": "Connecting", "connected": "Online support", "disconnected": "Disconnected", "retry": "Reconnect", "moreActions": "More actions", "minimize": "Minimize window", "maximize": "Maximize", "maximizeWindow": "Maximize chat window", "restoreWindow": "Restore window", "closeWindow": "Close window", "closeChatWindow": "Close chat window", "closeDialogTitle": "End this conversation?", "closeDialogDescription": "After ending the conversation, support agents will no longer be able to view this message history. Start a new chat if you need more help.", "continueConversation": "Continue Chat", "closing": "Ending...", "confirmClose": "End Conversation", "initFailed": "Could not start the chat.", "loadMessagesFailed": "Could not load messages.", "syncMessagesFailed": "Could not sync messages.", "loadHistoryFailed": "Could not load earlier messages.", "sendMessageFailed": "Could not send the message.", "uploadImageFailed": "Could not upload the image.", "sendAttachmentFailed": "Could not send the attachment.", "closeConversationFailed": "Could not close the conversation.", "refreshFailed": "Could not refresh the chat." }, "dashboardHome": { "rangeToday": "Today", "range7d": "Last 7 days", "range30d": "Last 30 days", "loadFailed": "Could not load the dashboard overview.", "title": "Dashboard", "description": "Track support conversations, tickets, agent capacity, and AI operations.", "updatedAt": ", updated at {time}", "refresh": "Refresh", "conversationTrend": "Conversation Trend", "conversationTrendDescription": "Track new and closed conversations to spot rising support pressure early.", "enabledAiAgents": "Active AI Agents", "enabledChannels": "Active Channels", "todayKnowledgeRetrieves": "Knowledge Searches Today", "todayKnowledgeRetrieveFailRate": "Search Failure Rate Today", "todaySkillRunFailCount": "Skill Failures Today", "todayAiHandoffCount": "AI-to-Human Handoffs Today", "empty": "No dashboard overview data yet.", "summaryTodayNewConversations": "New Conversations Today", "summaryTodayNewConversationsDescription": "New customer inquiries created today.", "summaryProcessingConversations": "Currently Active", "summaryProcessingConversationsDescription": "Conversations currently handled by AI or human agents.", "summaryPendingDispatchConversations": "Waiting for Assignment", "summaryPendingDispatchConversationsDescription": "Conversations still waiting in the assignment queue.", "summaryOnlineAgents": "Online Agents", "summaryOnlineAgentsDescription": "Agents with an active heartbeat in the last 15 minutes.", "summaryAiServiceRate": "AI Coverage", "summaryAiServiceRateDescription": "Share of active conversations where AI is helping.", "chartNew": "New", "chartClosed": "Closed", "chartCount": "Count", "statusDistribution": "Status Distribution", "statusDistributionDescription": "Current count by conversation status.", "statusAiServing": "AI Handling", "statusPending": "Queued", "statusActive": "Active", "statusClosed": "Closed", "teamLoad": "Team Load", "teamLoadDescription": "Online {online}, busy {busy}, offline {offline}", "noTeamData": "No team load data yet.", "scheduled": "On Schedule", "notScheduled": "No Current Schedule", "teamStats": "Total {total}, online {online}, busy {busy}, offline {offline}", "load": "Load {processing}/{capacity}", "waiting": "Waiting", "processing": "Active", "capacity": "Capacity", "busyAgents": "Busy Agents", "riskAlerts": "Risk Alerts", "riskAlertsDescription": "Prioritize issues that can affect support efficiency or AI reliability.", "noRiskTitle": "No high-priority risks right now", "noRiskDescription": "The dashboard will keep monitoring conversation backlogs, schedules, and AI configuration issues." }, "placeholder": { "nextSteps": "Recommended Next Steps", "status": "Status", "statusDescription": "This module currently has a page scaffold. It is ready for real APIs, form dialogs, and list queries.", "nextPhase": "Start Next Phase" }, "help": { "title": "Help Center Scaffold", "description": "The help center will collect product guidance, permission rules, channel integration workflows, and FAQs.", "step1": "Collect project development standards and admin usage guides.", "step2": "Add third-party integration flows and configuration checklists.", "step3": "Connect Markdown or a documentation center later." }, "settings": { "title": "System Settings Scaffold", "description": "System settings will manage authentication, uploads, basic site information, and runtime policies.", "step1": "Add APIs for reading and saving system settings.", "step2": "Split settings into security, storage, and sign-in policy sections.", "step3": "Add masked display and confirmation for sensitive settings." }, "status": { "all": "All statuses", "ok": "Enabled", "disabled": "Disabled", "deleted": "Deleted" }, "channel": { "allTypes": "All types", "typeWeb": "Web", "typeWechatMp": "WeChat Official Account", "typeWxworkKf": "WeCom Customer Service", "loadFailed": "Could not load channels.", "created": "Channel created: {name}", "updated": "Channel updated: {name}", "saveFailed": "Could not save the channel.", "statusEnabled": "Enabled: {name}", "statusDisabled": "Disabled: {name}", "statusUpdateFailed": "Could not update the channel status.", "deleted": "Channel deleted: {name}", "deleteFailed": "Could not delete the channel.", "refresh": "Refresh", "new": "New Channel", "filterName": "Filter by channel name", "filterChannelId": "Filter by channelId", "searchType": "Search channel types", "emptyType": "No channel types found", "searchStatus": "Search statuses", "emptyStatus": "No statuses found", "query": "Search", "columnChannel": "Channel", "columnType": "Type", "columnAgent": "AI Agent", "columnStatus": "Status", "columnActions": "Actions", "loading": "Loading channels...", "empty": "No channels yet", "toggleStatus": "Toggle status for {name}", "edit": "Edit", "moreActions": "More actions for {name}", "delete": "Delete", "typeRequired": "Select a channel type.", "agentRequired": "Select an AI Agent.", "searchAiAgent": "Search AI Agents", "emptyAiAgent": "No AI Agents found", "nameRequired": "Enter a channel name.", "wxworkAccountRequired": "Select a WeCom customer service account.", "positionRight": "Bottom right", "positionLeft": "Bottom left", "defaultTitleWeb": "Support", "defaultTitleWechat": "WeChat Support", "defaultSubtitle": "How can we help?", "loadWxworkAccountsFailed": "Could not load WeCom customer service accounts.", "resetSecretConfirm": "Resetting this secret will invalidate old userTokens after they expire. Continue?", "resetSecretSuccess": "User JWT Secret reset.", "resetSecretFailed": "Could not reset the User JWT Secret.", "copySecretSuccess": "User JWT Secret copied.", "copyFailed": "Copy failed.", "editTitle": "Edit Channel", "createTitle": "New Channel", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "loadingDetail": "Loading...", "name": "Channel Name", "channelType": "Channel Type", "selectChannelType": "Select a channel type", "searchChannelType": "Search channel types", "emptyChannelType": "No channel types found", "configTitle": "Channel Settings", "configWxworkDescription": "Configure the WeCom customer service account used to match callbacks and send outbound messages.", "configWechatDescription": "Configure the display settings for the WeChat menu chat page.", "configWebDescription": "Configure how the web support widget appears on your site.", "wxworkAccount": "WeCom Customer Service Account", "loadingWxworkAccount": "Loading service accounts", "selectWxworkAccount": "Select a service account", "searchWxworkAccount": "Search service accounts", "emptyWxworkAccount": "No WeCom customer service accounts found", "widgetTitle": "Widget Title", "widgetSubtitle": "Widget Subtitle", "themeColor": "Theme Color", "mountPosition": "Widget Position", "selectMountPosition": "Select a position", "searchMountPosition": "Search positions", "emptyMountPosition": "No positions found", "widgetWidth": "Widget Width", "userJwtSecret": "User JWT Secret", "userJwtSecretDescription": "Your business system uses this secret to sign userTokens. After resetting it, update your business system configuration as well.", "secretAfterSave": "Save the channel to generate a User JWT Secret.", "copy": "Copy", "reset": "Reset", "remark": "Notes", "webAccessInfo": "Web Integration", "webAccessReady": "Copy the link or embed code to connect this web channel.", "webAccessPending": "Save the channel to generate an integration link.", "newChannelPending": "This is a new channel. A channelId will be generated after you save it.", "directAccessUrl": "Direct Chat Link", "copyLink": "Copy link", "openLink": "Open link", "copiedAccessLink": "Integration link copied.", "embeddedSnippet": "Embed Code", "copiedSnippet": "Embed code copied.", "copyCode": "Copy Code", "accessGuide": "Integration Guide", "webGuide1": "1. Make sure this channel is enabled.", "webGuide2": "2. Paste the embed code before the closing body tag on your website.", "webGuide3": "3. Publish the site and refresh the page. The support entry will appear with this channel's settings.", "webGuide4": "4. For standalone pages or QR codes, use the direct chat link.", "openTestPage": "Open Test Page", "wechatAccessInfo": "WeChat Official Account Integration", "wechatAccessReady": "Add this link to a WeChat custom menu so users can open the support chat directly.", "wechatAccessPending": "Save the channel to generate the WeChat menu link.", "wechatMenuUrl": "WeChat Menu Link", "copiedWechatMenuUrl": "WeChat menu link copied.", "wechatGuide2": "2. Set your WeChat custom menu URL to the link above.", "wechatGuide3": "3. Users will open the support chat directly after tapping the menu item." }, "upload": { "imagePlaceholder": "Upload image", "chooseImage": "Choose an image file.", "imageTooLarge": "Image size must be under {maxSize} MB.", "imageUploaded": "Image uploaded.", "imageUploadFailed": "Could not upload the image.", "replaceImage": "Replace image", "uploadedImage": "Uploaded image", "uploading": "Uploading...", "deleteImage": "Delete image" }, "lightbox": { "providerError": "useImageLightbox must be used within ImageLightboxProvider", "loadFailed": "Could not load the image.", "openInNewTab": "Open in new tab", "previewImage": "Preview image", "imagePreview": "Image preview", "zoomIn": "Zoom in", "zoomOut": "Zoom out", "rotateLeft": "Rotate left", "rotateRight": "Rotate right", "reset": "Reset zoom, position, and rotation", "close": "Close", "help": "Use the mouse wheel or pinch gesture to zoom. Drag to pan the image. Use the toolbar to rotate left or right." }, "companyPicker": { "placeholder": "Select a company", "loadFailed": "Could not load companies.", "fallback": "Company #{id}", "created": "Company created: {name}", "createFailed": "Could not create the company.", "searchPlaceholder": "Search company name", "loading": "Loading...", "empty": "No matching companies found", "results": "Search Results", "none": "No company", "actions": "Actions", "create": "Create company \"{name}\"" }, "company": { "loadFailed": "Could not load companies.", "updated": "Company updated: {name}", "created": "Company created: {name}", "saveFailed": "Could not save the company.", "enabled": "Enabled: {name}", "disabled": "Disabled: {name}", "statusUpdateFailed": "Could not update the status.", "deleted": "Company deleted: {name}", "deleteFailed": "Could not delete the company.", "refresh": "Refresh", "new": "New Company", "filterName": "Filter by company name", "filterCode": "Filter by company code", "query": "Search", "columnName": "Company Name", "columnCode": "Company Code", "columnCustomerCount": "Customers", "columnStatus": "Status", "columnRemark": "Notes", "columnActions": "Actions", "unknownStatus": "Unknown", "loading": "Loading companies...", "empty": "No companies yet", "edit": "Edit", "moreActions": "More actions for {name}", "processing": "Working...", "enable": "Enable", "disable": "Disable", "delete": "Delete", "editTitle": "Edit Company", "createTitle": "New Company", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "create": "Create", "loadingDetail": "Loading...", "nameRequired": "Enter a company name.", "namePlaceholder": "Enter company name", "optional": "Optional", "remarkPlaceholder": "Optional" }, "customerForm": { "nameRequired": "Enter a customer name.", "genderRequired": "Select a gender.", "companyRequired": "Select a company.", "sectionCustomer": "Customer Details", "name": "Customer Name", "namePlaceholder": "Enter customer name", "gender": "Gender", "company": "Company", "remark": "Notes", "optional": "Optional", "sectionContacts": "Contact Methods", "type": "Type", "contact": "Contact", "primary": "Primary", "actions": "Actions", "emailPlaceholder": "Email", "contactPlaceholder": "Phone / account", "primaryContact": "Primary contact", "setPrimary": "Set as primary contact", "deleteContact": "Delete this contact method", "addContact": "Add Contact Method", "loading": "Loading...", "genderUnknown": "Unknown", "genderMale": "Male", "genderFemale": "Female", "contactMobile": "Mobile", "contactEmail": "Email", "contactOther": "Other", "editTitle": "Edit Customer", "createTitle": "New Customer", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "create": "Create" }, "customer": { "allGenders": "All genders", "allCompanies": "All companies", "select": "Select", "loadFailed": "Could not load customers.", "updated": "Customer updated: {name}", "created": "Customer created: {name}", "saveFailed": "Could not save the customer.", "enabled": "Enabled: {name}", "disabled": "Disabled: {name}", "statusUpdateFailed": "Could not update the status.", "deleted": "Customer deleted: {name}", "deleteFailed": "Could not delete the customer.", "new": "New", "keywordPlaceholder": "Name, phone, email, company, or contact", "searchCompany": "Search companies", "query": "Search", "columnName": "Customer Name", "columnGender": "Gender", "columnCompany": "Company", "columnMobile": "Mobile", "columnEmail": "Email", "columnStatus": "Status", "columnActions": "Actions", "loading": "Loading customers...", "empty": "No customers yet", "edit": "Edit", "moreActions": "More actions for {name}", "processing": "Working...", "enable": "Enable", "disable": "Disable", "delete": "Delete" }, "customerLink": { "keywordRequired": "Enter a keyword, such as a name, phone, email, company, or contact.", "noMatch": "No matching customers found. You can fill out a new customer below.", "searchFailed": "Search failed.", "selected": "Customer selected: {name}", "linked": "Customer linked.", "linkFailed": "Could not link the customer.", "createdAndLinkedConversation": "Customer created and linked to this conversation.", "createdAndLinkedTicket": "Customer created and linked to this ticket.", "created": "Customer created.", "saveFailed": "Could not save the customer.", "descriptionPrefix": "Search existing customers first. ", "descriptionLinkConversation": "Select a customer to link it to this conversation. ", "descriptionLinkTicket": "Select a customer to link it to this ticket. ", "descriptionNoContext": "Without a linked context, this will only create or select a customer. ", "descriptionCreatePrefix": "If there are no results, fill out a new customer below", "descriptionCreateConversation": "; it will be linked to the conversation after saving.", "descriptionCreateTicket": "; it will be linked to the ticket after saving.", "descriptionCreateNoContext": ".", "title": "Link or Create Customer", "close": "Close", "submitting": "Submitting...", "createAndLinkConversation": "Create and Link Conversation", "createAndLinkTicket": "Create and Link Ticket", "createCustomer": "Create Customer", "searchPlaceholder": "Name / phone / email / company / contact", "searching": "Searching...", "search": "Search", "fallbackName": "Customer #{id}", "processing": "Working...", "link": "Link", "select": "Select", "collapseCreate": "Hide new customer form", "showCreate": "Not found? Fill out a new customer" }, "conversationAction": { "closeReasonRequired": "Enter a close reason.", "conversationMissing": "Conversation not found.", "closed": "Conversation closed: #{id}", "closeFailed": "Could not close the conversation.", "closeTitle": "Close Conversation", "closeReason": "Close Reason", "closeReasonPlaceholder": "Enter the reason. It will be added to the activity log.", "cancel": "Cancel", "closing": "Closing...", "confirmClose": "Close Conversation", "targetAgentRequired": "Select a target agent.", "agentFallback": "Agent #{id}", "loadAgentsFailed": "Could not load agents.", "assigned": "Conversation assigned: #{id}", "transferred": "Conversation transferred: #{id}", "assignFailed": "Could not assign the conversation.", "transferFailed": "Could not transfer the conversation.", "assignTitle": "Assign Conversation", "transferTitle": "Transfer Conversation", "targetAgent": "Target Agent", "loading": "Loading...", "selectTargetAgent": "Select target agent", "searchAgent": "Search agents", "emptyAgents": "No agents available", "assignNote": "Assignment Note", "transferReason": "Transfer Reason", "assignPlaceholder": "Add a note for follow-up tracking.", "transferPlaceholder": "Enter the transfer reason for follow-up tracking.", "assigning": "Assigning...", "transferring": "Transferring...", "confirmAssign": "Assign", "confirmTransfer": "Transfer" }, "conversationMonitor": { "allStatuses": "All statuses", "unknown": "Unknown", "serviceAi": "AI handling", "serviceHuman": "Human handling", "serviceAiFirst": "AI first", "serviceUndefined": "Undefined", "allTags": "All tags", "allAssignees": "All assignees", "allTeams": "All teams", "loadListFailed": "Could not load conversations.", "loadFiltersFailed": "Could not load filters.", "realtimeConnectFailed": "Could not connect to the realtime service.", "loadDetailFailed": "Could not load conversation details.", "loadMoreMessagesFailed": "Could not load more messages.", "markedRead": "Marked as read: {name}", "markReadFailed": "Could not mark as read.", "dispatchTriggered": "Automatic assignment started: {name}", "dispatchFailed": "Automatic assignment failed.", "refresh": "Refresh", "keywordPlaceholder": "Filter by subject or summary", "selectTag": "Select tag", "searchTagPath": "Search tag path", "emptyTags": "No matching tags", "selectAssignee": "Select assignee", "searchAssignee": "Search assignees", "emptyAssignees": "No matching assignees", "selectTeam": "Select team", "searchTeam": "Search teams", "emptyTeams": "No matching teams", "query": "Search", "columnConversation": "Conversation", "columnStatus": "Status", "columnServiceMode": "Service Mode", "columnAssignee": "Current Agent", "columnUnread": "Unread", "columnLastActive": "Last Active", "columnActions": "Actions", "customerFallback": "Customer #{id}", "channelIdValue": "Channel ID: {id}", "noLatestSummary": "No recent message summary", "unreadSummary": "Agent {agent} / Customer {customer}", "view": "View", "moreActions": "More actions for {name}", "processing": "Working...", "assign": "Assign Conversation", "retryDispatch": "Retry Assignment", "markRead": "Mark as Read", "transfer": "Transfer Conversation", "close": "Close Conversation", "loadingRows": "Loading conversations...", "emptyRows": "No matching conversations", "detailFallbackTitle": "Conversation Details", "lastActivePrefix": "Last active: {time}", "noConversationInfo": "No conversation details yet", "loadingDetail": "Loading conversation details...", "currentAssignee": "Current Agent", "agentUnread": "Agent Unread", "customerUnread": "Customer Unread", "closedAt": "Closed At", "participants": "Participants", "participantCount": "{count} people", "participantIdentity": "ID: {value}", "participantJoinedAt": "Joined: {time}", "emptyParticipants": "No participant details yet", "loadingOlder": "Loading earlier messages...", "loadOlderHint": "Scroll up to load earlier messages", "messageRecalled": "Recalled", "messageRecalledBody": "This message was recalled.", "readStatus": "Agent {agent} / Customer {customer}", "read": "Read", "unread": "Unread", "emptyMessages": "No message history yet", "emptyDetail": "No conversation details to show", "imageFallback": "[Image]", "messageImageAlt": "Message image", "senderAgent": "Agent", "senderCustomer": "Customer", "senderSystem": "System" }, "user": { "loadFailed": "Could not load users.", "loadRoleAssignFailed": "Could not load role assignment data.", "created": "User created: {username}", "createFailed": "Could not create the user.", "updated": "Updated {username}", "fallbackUser": "user", "updateFailed": "Could not update the user.", "rolesUpdated": "Roles updated for {username}", "saveRolesFailed": "Could not save role assignments.", "passwordReset": "Password reset for {username}", "resetPasswordFailed": "Could not reset the password.", "statusUpdated": "{username} {status}", "statusUpdateFailed": "Could not update the status.", "addUser": "Add User", "filterUsername": "Filter by username", "query": "Search", "columnUser": "User", "columnRoles": "Roles", "columnStatus": "Status", "columnLastLogin": "Last Login", "columnContact": "Contact", "columnActions": "Actions", "unassigned": "Unassigned", "enabled": "Enabled", "disabled": "Disabled", "system": "System", "edit": "Edit", "moreActions": "More actions for {username}", "processing": "Working...", "assignRoles": "Assign Roles", "resetPassword": "Reset Password", "loadingRows": "Loading users...", "emptyRows": "No matching users", "nicknameRequired": "Enter a nickname.", "usernameRequired": "Enter a username.", "avatarInvalid": "Avatar URL must start with http or https.", "mobileInvalid": "Enter a valid phone number.", "emailInvalid": "Enter a valid email address.", "editTitle": "Edit User", "currentUser": "Current user: {username}", "loading": "Loading...", "nickname": "Nickname", "nicknamePlaceholder": "Enter nickname", "avatar": "Avatar URL", "avatarPlaceholder": "Enter avatar URL", "mobile": "Mobile", "mobilePlaceholder": "Enter mobile number", "email": "Email", "emailPlaceholder": "Enter email", "saving": "Saving...", "saveEdit": "Save Changes", "cancel": "Cancel", "createTitle": "Add User", "createDescription": "The system will generate an initial password after submission. It will only be shown once.", "username": "Username", "usernamePlaceholder": "Login name, required", "nicknameCreatePlaceholder": "Optional, defaults to username", "avatarCreatePlaceholder": "Optional, http(s) URL", "optional": "Optional", "remark": "Notes", "rolesOptional": "Roles (optional)", "searchRoles": "Search roles", "loadingRoles": "Loading roles...", "disabledBadge": "Disabled", "emptyRoles": "No roles yet", "creating": "Creating...", "createUser": "Create User", "copied": "Password copied.", "copyFailed": "Could not copy. Copy it manually.", "createdTitle": "User Created", "initialPasswordDescription": "The initial password for {username} has been generated. It will only be shown once, so copy it now and share it securely.", "initialPassword": "Initial Password", "copying": "Copying...", "copyPassword": "Copy Password", "close": "Close", "confirmResetTitle": "Reset Password?", "confirmResetDescription": "A new random password will be generated for {username}, and the user's current sessions will be invalidated.", "resetting": "Resetting...", "confirmReset": "Reset Password", "resetSuccessTitle": "Password Reset", "resetSuccessDescription": "A new password has been generated for {username}. Copy it now and share it securely.", "newPassword": "New Password", "assignedRoles": "Assigned Roles", "unassignedRoles": "No roles assigned", "roleList": "Role List", "searchRoleNameOrCode": "Search role name or code", "loadingRoleList": "Loading roles...", "noMatchedRoles": "No matching roles", "changes": "Changes", "addedRoles": "Added Roles", "removedRoles": "Removed Roles", "noneAdded": "None added", "noneRemoved": "None removed", "confirmAssign": "Assign Roles" }, "aiAgent": { "allStatuses": "All statuses", "enabled": "Enabled", "disabled": "Disabled", "loadFailed": "Could not load AI agents.", "updated": "AI agent updated: {name}", "created": "AI agent created: {name}", "saveFailed": "Could not save the AI agent.", "statusChanged": "{name} {status}", "statusUpdateFailed": "Could not update the AI agent status.", "deleted": "AI agent deleted: {name}", "deleteFailed": "Could not delete the AI agent.", "sortUpdated": "AI agent order updated.", "sortUpdateFailed": "Could not update the order.", "refresh": "Refresh", "new": "New AI Agent", "filterName": "Filter by name", "searchStatus": "Search status", "emptyStatus": "No matching status", "query": "Search", "columnAiConfig": "AI Config", "columnServiceMode": "Service Mode", "columnKnowledge": "Knowledge Bases", "columnSkills": "Skills", "columnCapabilities": "Capabilities", "columnStatus": "Status", "columnActions": "Actions", "dragSort": "Drag to reorder {name}", "notConfigured": "Not configured", "ragOnly": "RAG only", "noMcpServer": "No MCP server linked", "toggleStatus": "Toggle status for {name}", "edit": "Edit", "moreActions": "More actions for {name}", "stop": "Disable", "delete": "Delete", "loadingRows": "Loading AI agents...", "emptyRows": "No AI agents yet", "serviceAiOnly": "AI only", "serviceHumanOnly": "Human only", "serviceAiFirst": "AI first", "handoffWaitPool": "Send to waiting queue", "handoffDefaultTeamPool": "Send to default team queue", "handoffAiHoldAndNotify": "AI handles fallback and notifies agents", "fallbackNoAnswer": "Say no answer is available", "fallbackSuggestRetry": "Ask for more details", "nameRequired": "Enter a name.", "aiConfigRequired": "Select an AI config.", "serviceModeRequired": "Select a service mode.", "replyTimeoutInvalid": "Reply timeout must be an integer greater than or equal to 0.", "handoffModeRequired": "Select a human handoff mode.", "fallbackModeRequired": "Select a fallback strategy.", "loadDetailFailed": "Could not load AI agent details.", "loadAiConfigFailed": "Could not load AI configs.", "loadTeamsFailed": "Could not load support teams.", "loadKnowledgeFailed": "Could not load knowledge bases.", "loadSkillsFailed": "Could not load skills.", "loadDirectToolsFailed": "Could not load Direct Tools.", "builtinTools": "Built-in tools", "ungrouped": "Ungrouped", "notSelected": "Not selected", "createTitle": "New AI Agent", "editTitle": "Edit AI Agent", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "loading": "Loading...", "sectionBasic": "Basic Details", "name": "Name", "aiConfig": "AI Config", "selectAiConfig": "Select AI config", "searchAiConfig": "Search AI configs", "emptyAiConfig": "No AI configs found", "selectServiceMode": "Select service mode", "searchServiceMode": "Search service modes", "emptyServiceMode": "No service modes found", "description": "Description", "welcomeMessage": "Welcome Message", "systemPrompt": "System Prompt", "sectionStrategy": "Service Strategy", "handoffMode": "Human Handoff Mode", "selectHandoffMode": "Select handoff mode", "searchHandoffMode": "Search handoff modes", "emptyHandoffMode": "No handoff modes found", "replyTimeoutSeconds": "Reply Timeout (seconds)", "replyTimeoutHelp": "Timeout for async AI replies. Enter 0 to use the system default of 180 seconds.", "teams": "Support Teams", "currentHandoffMode": "Current handoff mode: {mode}", "handoffNeedsTeam": ". This mode requires at least one support team.", "handoffOnlyWhenNeeded": ". Applies only when human handoff is needed.", "selectTeam": "Select support team", "searchTeam": "Search support teams", "emptyTeam": "No support teams found", "noTeams": "No support teams configured", "removeTeam": "Remove team {name}", "sectionCapabilities": "Capabilities", "knowledgeTab": "Knowledge", "skillsTab": "Skills", "directToolsTab": "Direct Tools", "graphToolsTab": "Graph Tools", "knowledgeHint": "Select at least one knowledge base. You can adjust priority order.", "selectKnowledge": "Select and add knowledge base", "searchKnowledge": "Search knowledge bases", "emptyKnowledge": "No knowledge bases available", "add": "Add", "knowledgeRequired": "Select at least one knowledge base.", "fallbackMode": "Fallback Strategy", "selectFallbackMode": "Select fallback strategy", "searchFallbackMode": "Search fallback strategies", "emptyFallbackMode": "No fallback strategies found", "fallbackMessage": "Fallback Message", "fallbackMessageHint": "When the knowledge base has no strong match, the agent will use this strategy and message.", "skillsHint": "Use skills for fixed business workflows and multi-step tasks.", "selectSkill": "Select and add skill", "searchSkill": "Search skills", "emptySkill": "No skills available", "noSkillsHint": "Without skills, routing only uses knowledge bases or human handoff.", "removeSkill": "Remove skill {name}", "directToolsHint": "Use only for low-risk atomic lookups through external MCP tools.", "selectToolGroup": "Select tool group", "searchToolGroup": "Search tool groups", "emptyToolGroup": "No tool groups available", "selectDirectTool": "Select Direct Tool", "searchDirectTool": "Search Direct Tools", "emptyDirectTool": "No Direct Tools available", "noDirectToolsHint": "Without Direct Tools, the agent will not call external or built-in tools directly. It will rely on knowledge bases, skills, and normal replies.", "removeDirectTool": "Remove Direct Tool {name}", "graphToolsHint": "Use for built-in workflows such as ticket creation and human handoff. These are kept separate from Direct Tools.", "selectGraphTool": "Select Graph Tool", "searchGraphTool": "Search Graph Tools", "emptyGraphTool": "No Graph Tools available", "noGraphToolsHint": "Without Graph Tools, the agent will not expose built-in workflow tools such as ticket creation or human handoff.", "removeGraphTool": "Remove Graph Tool {name}" }, "aiConfig": { "allStatuses": "All statuses", "allProviders": "All providers", "allTypes": "All types", "providerOpenAI": "OpenAI", "modelTypeLlm": "Large language model", "modelTypeEmbedding": "Embedding model", "modelTypeRerank": "Reranker", "enabled": "Enabled", "disabled": "Disabled", "deletedStatus": "Deleted", "loadFailed": "Could not load AI configs.", "updated": "AI config updated: {name}", "created": "AI config created: {name}", "saveFailed": "Could not save the AI config.", "statusChanged": "{name} {status}", "statusUpdateFailed": "Could not update the status.", "activeDeleteBlocked": "Enabled AI configs cannot be deleted.", "deleted": "AI config deleted: {name}", "deleteFailed": "Could not delete the AI config.", "sortUpdated": "AI config order updated.", "sortUpdateFailed": "Could not update the order.", "refresh": "Refresh", "new": "New", "filterName": "Filter by config name", "searchModelType": "Search model types", "emptyModelType": "No matching model types", "searchProvider": "Search providers", "emptyProvider": "No matching providers", "searchStatus": "Search status", "emptyStatus": "No matching status", "query": "Search", "columnConfig": "Config", "columnProvider": "Provider", "columnModel": "Model", "columnAccess": "Access", "columnLimits": "Limits", "columnStatus": "Status", "columnActions": "Actions", "dragSort": "Drag to reorder {name}", "dimension": "{count} dims", "apiKey": "Key: {key}", "contextTokens": "Context {count}", "outputTokens": "Output {count}", "timeoutRetry": "Timeout {timeout}ms / retries {retries}", "toggleStatus": "Toggle status for {name}", "edit": "Edit", "moreActions": "More actions for {name}", "deleteDisabledActive": "Cannot delete while enabled", "deleting": "Deleting...", "delete": "Delete", "loadingRows": "Loading AI configs...", "emptyRows": "No AI configs yet", "confirmDeleteTitle": "Delete AI Config?", "confirmDeleteDescription": "Delete \"{name}\"? This action cannot be undone.", "deleteIrreversible": "This action cannot be undone.", "cancel": "Cancel", "confirmDelete": "Delete", "nameRequired": "Enter a config name.", "providerRequired": "Select a provider.", "baseUrlRequired": "Enter a base URL.", "modelTypeRequired": "Select a model type.", "modelNameRequired": "Enter a model name.", "dimensionInvalid": "Embedding dimension must be an integer greater than or equal to 0.", "maxContextInvalid": "Max context tokens must be an integer greater than or equal to 0.", "maxOutputInvalid": "Max output tokens must be an integer greater than or equal to 0.", "timeoutInvalid": "Timeout must be an integer greater than or equal to 0.", "retryInvalid": "Max retries must be an integer greater than or equal to 0.", "rpmInvalid": "RPM limit must be an integer greater than or equal to 0.", "tpmInvalid": "TPM limit must be an integer greater than or equal to 0.", "editTitle": "Edit AI Config", "createTitle": "New AI Config", "saving": "Saving...", "save": "Save", "create": "Create", "loading": "Loading...", "name": "Config Name", "namePlaceholder": "Example: OpenAI primary answer model", "provider": "Provider", "selectProvider": "Select provider", "modelType": "Model Type", "selectModelType": "Select model type", "baseUrl": "Base URL", "baseUrlPlaceholder": "Example: https://api.openai.com/v1", "apiKeyPlaceholder": "Enter API Key", "modelName": "Model Name", "modelNamePlaceholder": "Example: gpt-4o-mini", "dimensionLabel": "Embedding Dimension", "maxContextTokens": "Max Context Tokens", "maxOutputTokens": "Max Output Tokens", "timeoutMs": "Timeout (ms)", "maxRetryCount": "Max Retries", "rpmLimit": "RPM Limit", "tpmLimit": "TPM Limit", "remark": "Notes", "remarkPlaceholder": "Record usage, cost, or limit notes" }, "mcp": { "disabled": "disabled", "loadServersFailed": "Could not load MCP servers.", "connectSuccess": "MCP connection succeeded.", "connectFailed": "MCP connection failed.", "toolsLoaded": "Loaded {count} tools.", "loadToolsFailed": "Could not load tools.", "selectToolFirst": "Select a tool first.", "argumentsInvalid": "Arguments JSON is invalid.", "argumentsMustBeJson": "arguments must be valid JSON.", "toolReturnedError": "Tool returned an error result.", "toolCallSuccess": "Tool call succeeded.", "toolCallFailed": "Tool call failed.", "testConnection": "Test Connection", "listTools": "List Tools", "serverConfig": "Server Config", "selectServer": "Select an MCP server", "searchServer": "Search serverCode", "emptyServer": "No MCP servers available", "connected": "Connected", "emptyToolsHint": "No tool results yet. Click List Tools above.", "toolName": "Tool Name", "description": "Description", "actions": "Actions", "view": "View", "toolDetail": "Tool Details", "detailDescription": "Review tool details here and run a real test call against the selected MCP server.", "noDescription": "No description", "testTool": "Test Tool", "returnedError": "Returned Error", "callSuccess": "Call Succeeded", "close": "Close" }, "agentProfile": { "allStatuses": "All statuses", "all": "All", "statusIdle": "Idle", "statusBusy": "Busy", "enabled": "Enabled", "disabled": "Disabled", "loadFailed": "Could not load agent profiles.", "updated": "Agent profile updated: {name}", "created": "Agent profile created: {name}", "saveFailed": "Could not save the agent profile.", "deleted": "Agent profile deleted: {name}", "deleteFailed": "Could not delete the agent profile.", "expandTeams": "Expand team list", "collapseTeams": "Collapse team list", "new": "New", "filterDisplayName": "Filter by display name", "filterAgentCode": "Filter by agent code", "searchStatus": "Search status", "emptyStatus": "No matching status", "query": "Search", "columnAgent": "Agent", "columnRules": "Service Rules", "columnDispatch": "Assignment", "columnRecent": "Recent Activity", "columnActions": "Actions", "userFallback": "User #{id}", "agentCode": "Code: {code}", "capacityPriority": "Max chats {capacity} / priority {priority}", "autoAssign": "Auto-assign", "noAutoAssign": "No auto-assign", "offlineReceive": "Receives offline messages", "noOfflineReceive": "No offline messages", "onlineAt": "Online: {time}", "statusAt": "Status: {time}", "edit": "Edit", "moreActions": "More actions for {name}", "deleting": "Deleting...", "delete": "Delete", "loadingRows": "Loading agent profiles...", "emptyTeamRows": "No matching agent profiles in this team", "emptyRows": "No matching agent profiles", "userRequired": "Select a linked user.", "teamRequired": "Select a support team.", "agentCodeRequired": "Enter an agent code.", "displayNameRequired": "Enter a display name.", "statusRequired": "Select an agent status.", "maxConcurrentInvalid": "Max concurrent chats must be an integer greater than or equal to 0.", "priorityInvalid": "Priority must be an integer.", "loadOptionsFailed": "Could not load options.", "loadDetailFailed": "Could not load agent profile details.", "editTitle": "Edit Agent Profile", "createTitle": "New Agent Profile", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "loading": "Loading...", "linkedUser": "Linked User", "selectUser": "Select user", "searchUser": "Search users...", "emptyUser": "No matching users", "displayName": "Display Name", "displayNamePlaceholder": "Enter display name", "agentCodeLabel": "Agent Code", "agentCodePlaceholder": "Example: A1001", "avatar": "Avatar", "avatarUpload": "Upload avatar", "serviceStatus": "Agent Status", "maxConcurrent": "Max Concurrent Chats", "priority": "Priority", "autoAssignEnabled": "Include in auto-assignment", "receiveOfflineMessage": "Receive offline messages", "remark": "Notes", "remarkPlaceholder": "Enter notes", "teamTitle": "Support Teams", "searchTeams": "Search teams", "loadTeamsFailed": "Could not load support teams.", "teamUpdated": "Support team updated: {name}", "teamCreated": "Support team created: {name}", "teamSaveFailed": "Could not save the support team.", "teamDeleted": "Support team deleted: {name}", "teamDeleteFailed": "Could not delete the support team.", "noTeams": "No matching support teams", "teamNameRequired": "Enter a team name.", "leaderInvalid": "Team lead is invalid.", "teamStatusRequired": "Select a status.", "loadUsersFailed": "Could not load user options.", "loadTeamDetailFailed": "Could not load support team details.", "teamEditTitle": "Edit", "teamCreateTitle": "New", "teamName": "Team Name", "teamNamePlaceholder": "Enter team name", "leader": "Team Lead", "noLeader": "No lead", "selectLeader": "Select team lead", "status": "Status", "selectStatus": "Select status", "description": "Responsibilities", "descriptionPlaceholder": "Example: Handles presales questions and lead qualification" }, "agentTeamSchedule": { "loadFailed": "Could not load support team schedules.", "loadCalendarFailed": "Could not load the schedule calendar.", "loadTeamsFailed": "Could not load support team options.", "historyReadonly": "Past schedules cannot be changed.", "updated": "Support team schedule updated.", "created": "Support team schedule created.", "saveFailed": "Could not save the support team schedule.", "deleted": "Support team schedule deleted.", "deleteFailed": "Could not delete the support team schedule.", "updateFailed": "Could not update the support team schedule.", "month": "Month", "week": "Week", "list": "List", "prevMonth": "Previous month", "thisMonth": "This month", "nextMonth": "Next month", "prevWeek": "Previous week", "thisWeek": "This week", "nextWeek": "Next week", "today": "Today", "allTeams": "All teams", "filterTeam": "Filter by team", "searchTeam": "Search teams", "emptyTeam": "No matching teams", "query": "Search", "refresh": "Refresh", "batch": "Batch schedule", "new": "New", "team": "Team", "timeRange": "Time Range", "actions": "Actions", "teamFallback": "Team #{id}", "teamId": "Team ID: {id}", "edit": "Edit", "moreActions": "More actions for {name}", "deleting": "Deleting...", "delete": "Delete", "emptyRows": "No matching support team schedules", "teamRequired": "Select a support team.", "startRequired": "Start time is required.", "endRequired": "End time is required.", "endAfterStart": "End time must be later than start time.", "singleDayOnly": "A single schedule cannot cross days.", "loadOptionsFailed": "Could not load options.", "loadDetailFailed": "Could not load schedule details.", "editTitle": "Edit Support Team Schedule", "createTitle": "New Support Team Schedule", "loading": "Loading...", "startTime": "Start Time", "endTime": "End Time", "remark": "Notes", "remarkPlaceholder": "Enter notes", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "weekdayMon": "Mon", "weekdayTue": "Tue", "weekdayWed": "Wed", "weekdayThu": "Thu", "weekdayFri": "Fri", "weekdaySat": "Sat", "weekdaySun": "Sun", "weekdayShortMon": "Mon", "weekdayShortTue": "Tue", "weekdayShortWed": "Wed", "weekdayShortThu": "Thu", "weekdayShortFri": "Fri", "weekdayShortSat": "Sat", "weekdayShortSun": "Sun", "monthTitle": "{month}/{year}", "dropInsideCalendar": "Drop onto a calendar day.", "cannotMoveHere": "Cannot move here.", "resizeInvalid": "Cannot cross days or be shorter than 15 minutes.", "noTeamsCalendar": "No support teams are available for the calendar.", "moreItems": "{count} more", "batchDescription": "Select teams, a date range, and working hours. Preview before generating schedules.", "addTeam": "Add team", "loadingTeams": "Loading teams...", "noTeams": "No teams", "allTeamsSelected": "All teams selected", "removeTeam": "Remove {name}", "noSelectedTeams": "No teams selected", "startDate": "Start Date", "endDate": "End Date", "weekday": "Weekday", "previewFailed": "Could not preview batch schedules.", "previewFirst": "Preview the batch schedule first.", "conflictCannotSubmit": "Schedules with conflicts cannot be submitted.", "batchCreated": "{count} support team schedules created.", "batchRefreshFailed": "Schedules were generated, but refresh failed: {message}", "batchRefreshFailedFallback": "Schedules were generated, but refresh failed.", "generateFailed": "Could not generate batch schedules.", "selectAtLeastOneTeam": "Select at least one support team.", "selectDateRange": "Select a date range.", "startBeforeToday": "Start date cannot be earlier than today.", "endBeforeStart": "End date cannot be earlier than start date.", "selectAtLeastOneWeekday": "Select at least one weekday.", "selectStartEndTime": "Select start and end times.", "previewSummaryConflict": "{total} schedules, with conflicts. Go back and adjust them.", "previewSummaryReady": "{total} schedules. Generate after confirming there are no conflicts.", "hasConflict": "Has conflicts", "noConflict": "No conflicts", "date": "Date", "time": "Time", "status": "Status", "conflictFallback": "Schedule conflict", "canGenerate": "Ready", "emptyPreview": "No schedules to generate", "backToEdit": "Back to edit", "preview": "Preview", "generate": "Generate schedules" }, "ticket": { "allAssignees": "All assignees", "allTags": "All tags", "hours": "{hours} hours", "manual": "Manual", "conversation": "Conversation", "manualCreated": "Created manually", "conversationGenerated": "Created from conversation", "agentFallback": "Agent #{id}", "customerFallback": "Customer #{id}", "userFallback": "User #{id}", "unassigned": "Unassigned", "noCustomer": "No customer", "loadFailed": "Could not load tickets.", "loadFiltersFailed": "Could not load filters.", "created": "Ticket created.", "createFailed": "Could not create the ticket.", "quickAll": "All Tickets", "quickPending": "Pending", "quickInProgress": "In Progress", "quickDone": "Resolved", "quickUnassigned": "Unassigned", "quickMine": "My Tickets", "quickStale": "Stale", "refresh": "Refresh", "newTicket": "New Ticket", "searchPlaceholder": "Search ticket number, title, or description", "staleThreshold": "Stale after", "reset": "Reset", "query": "Search", "columnTicket": "Ticket", "columnStatus": "Status", "columnAssignee": "Assignee", "columnUpdated": "Last Updated", "columnActions": "Actions", "loadingRows": "Loading tickets...", "emptyRows": "No tickets yet", "detail": "Details", "statusPending": "Pending", "statusInProgress": "In Progress", "statusDone": "Resolved", "titleRequired": "Enter a ticket title.", "descriptionRequired": "Enter a problem description.", "selectedTags": "{count} tags selected", "selectTags": "Select ticket tags", "searchTags": "Search tags", "emptyTags": "No tags available", "tags": "Tags", "noAssignee": "No assignee", "editTitle": "Edit Ticket", "createTitle": "New Ticket", "dialogDescription": "Enter the basic ticket details.", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "create": "Create", "loading": "Loading...", "title": "Title", "titlePlaceholder": "Enter a ticket title", "description": "Description", "assignee": "Assignee", "selectAssignee": "Select assignee", "ticketTags": "Ticket Tags", "detailTitle": "Ticket Details", "creator": "Created by {name}", "loadDetailFailed": "Could not load ticket details.", "statusUpdated": "Ticket status updated.", "statusUpdateFailed": "Could not update ticket status.", "updating": "Updating...", "progressRequired": "Enter an update.", "progressRecorded": "Update added.", "progressCreateFailed": "Could not add the update.", "selectTicket": "Select a ticket.", "updated": "Ticket updated.", "updateFailed": "Could not update the ticket.", "noLinkedCustomer": "This ticket is not linked to a customer.", "saved": "Saved.", "saveFailed": "Could not save.", "noDescription": "No description", "assign": "Assign", "edit": "Edit", "linkOrCreate": "Link or create", "customerInfo": "Customer Info", "customer": "Customer", "contact": "Contact", "ticketInfo": "Ticket Info", "source": "Source", "channel": "Channel", "conversationId": "Conversation ID", "progress": "Updates", "addProgress": "Add Update", "noProgress": "No updates yet", "chooseTicket": "Select a ticket", "progressPlaceholder": "Write this update", "submitting": "Submitting...", "submit": "Submit", "assignTitle": "Assign Ticket", "assigneeRequired": "Select an assignee.", "loadAssigneesFailed": "Could not load assignees.", "assigneeUpdated": "Assignee updated.", "assignFailed": "Could not assign the ticket.", "selectHandler": "Select assignee", "assignReason": "Note", "assignReasonPlaceholder": "Add an assignment note", "confirmAssign": "Assign", "conversationToTicket": "Create Ticket from Conversation", "conversationToTicketDescription": "Create a ticket from the current conversation context.", "conversationMissing": "Conversation not found.", "createSuccess": "Ticket created." }, "skillDefinition": { "allStatus": "All statuses", "statusOk": "Enabled", "statusDisabled": "Disabled", "statusDeleted": "Deleted", "whitelistCount": "{count} whitelisted", "exampleCount": "{count} examples", "noDescription": "No description", "toggleStatus": "Toggle status for {name}", "debug": "Debug", "edit": "Edit", "moreActions": "More actions for {name}", "restoring": "Restoring...", "restore": "Restore", "deleting": "Deleting...", "delete": "Delete", "loadFailed": "Could not load skills.", "updated": "Skill updated: {name}", "created": "Skill created: {name}", "saveFailed": "Could not save the skill.", "enabled": "Enabled: {name}", "disabled": "Disabled: {name}", "statusUpdateFailed": "Could not update status.", "deleted": "Skill deleted: {name}", "deleteFailed": "Could not delete the skill.", "restored": "Skill restored: {name}", "restoreFailed": "Could not restore the skill.", "refresh": "Refresh", "new": "New", "filterName": "Filter by name", "filterCode": "Filter by code", "searchStatus": "Search statuses", "emptyStatus": "No matching statuses", "query": "Search", "status": "Status", "updatedAt": "Last Updated", "actions": "Actions", "loadingRows": "Loading skills...", "emptyRows": "No matching skills", "codeRequired": "Enter a skill code.", "codeInvalid": "Skill codes can contain letters, numbers, underscores, and hyphens only.", "nameRequired": "Enter a skill name.", "instructionRequired": "Enter skill instructions.", "editTitle": "Edit", "createTitle": "New", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "create": "Create", "loading": "Loading...", "code": "Code", "codePlaceholder": "Example: refund_skill", "name": "Name", "namePlaceholder": "Example: Refund Handling", "description": "Description", "descriptionPlaceholder": "Describe what this skill does, its boundaries, and when to use it.", "instruction": "Instructions", "instructionPlaceholder": "Enter the skill documentation, including goals, steps, tool rules, and boundaries.", "examples": "Example Phrases", "examplesPlaceholder": "One typical user phrase per line, for example:\nI need a refund\nCan you check my order?", "toolWhitelist": "Tool Allowlist", "selectTool": "Select tools this skill may use", "searchTool": "Search tool code or name", "emptyTool": "No tools can be added", "add": "Add", "inheritAgentTools": "Leave this empty to inherit the agent's available tools.", "remark": "Notes", "remarkPlaceholder": "Add internal notes or maintenance details", "agentRequired": "Select an AI agent.", "messageRequired": "Enter a user message.", "emptyData": "No data", "confirm": "Confirm", "reject": "Cancel", "debugFailed": "Skill debug failed.", "resumeMessageRequired": "Enter a resume message.", "resumeFailed": "Could not resume debugging.", "debugTitle": "Debug Skill · {name}", "debugDescription": "Force this skill and inspect routing, tools, graph execution, HITL, and the final reply.", "close": "Close", "debugging": "Debugging...", "startDebug": "Start Debug", "debugInput": "Debug Input", "selectAgent": "Select AI agent", "searchAgent": "Search AI agents", "emptyAgent": "No AI agents found", "conversationPlaceholder": "Optional. Enter an existing conversation ID to reuse context.", "matchedAgent": "Matched Agent", "noAgentSelected": "None selected", "userMessage": "User Message", "userMessagePlaceholder": "Enter a user message to debug this skill's routing, tools, and reply.", "debugSummary": "Debug Summary", "interrupted": "Interrupted", "notInterrupted": "Not interrupted", "skillName": "Skill Name", "none": "None", "errorMessage": "Error Message", "toolView": "Tool View", "skillToolWhitelist": "Skill Tool Allowlist", "exposedTools": "Tools Exposed This Run", "invokedTools": "Tools Called This Run", "resumeDebug": "Resume Debug", "currentCheckpoint": "Current Checkpoint", "resumeMessage": "Resume Message", "resumePlaceholder": "Enter confirm, cancel, or another resume message", "resuming": "Resuming...", "resumeDebugAction": "Resume Debug", "resumeResult": "Resume Result", "stillWaiting": "Still waiting for confirmation", "resumeCompleted": "Resume completed", "resumeReply": "Resume Reply" }, "agentRunLog": { "allActions": "All actions", "handoff": "Handoff", "reply": "Reply", "fallback": "Fallback", "allStatus": "All statuses", "allHitl": "All HITL", "hitlPending": "Pending approval", "hitlConfirmed": "Confirmed", "hitlCancelled": "Cancelled", "hitlExpired": "Expired", "hitlTriggered": "Triggered", "hitlPendingSummary": "A Graph Tool has requested confirmation and is waiting for the user.", "hitlConfirmedSummary": "The user confirmed the action, execution resumed, and the follow-up flow completed.", "hitlCancelledSummary": "The user cancelled the action, so the confirmation flow was stopped.", "hitlExpiredSummary": "The confirmation checkpoint has expired and needs to be started again.", "hitlTriggeredSummary": "This run involved a confirmation-based HITL flow.", "allAgents": "All agents", "loadFailed": "Could not load agent run logs.", "loadAgentsFailed": "Could not load AI agents.", "refresh": "Refresh", "filterUserMessage": "Filter by user message", "plannedAction": "Planned action", "finalAction": "Final action", "finalStatus": "Final status", "hitlStatus": "HITL status", "selectAgent": "Select agent", "searchAction": "Search actions", "emptyAction": "No matching actions", "searchStatus": "Search statuses", "emptyStatus": "No matching statuses", "searchHitl": "Search HITL status", "searchAgent": "Search agents", "emptyAgent": "No agents found", "query": "Search", "emptyRows": "No agent run logs yet", "time": "Time", "userMessage": "User Message", "skillTool": "Skill / Tool", "duration": "Duration", "actions": "Actions", "handoffReason": "Handoff reason: {reason}", "routingRecommendation": "Routing recommendation: {action}", "draftReady": "draft ready", "detail": "Details", "imageMessage": "[Image]", "richMessage": "[Rich text message]", "loadDetailFailed": "Could not load log details.", "detailTitle": "Agent Run Details", "detailDescription": "Inspect planner selection, final action, reply content, and errors.", "close": "Close", "loading": "Loading...", "logId": "Log ID", "conversationId": "Conversation ID", "messageId": "Message ID", "planningStage": "Planning Stage", "executionResult": "Execution Result", "dynamicTools": "Dynamic Tool Selection", "graphToolCall": "Graph Tool Call", "botReply": "Bot Reply", "errorMessage": "Error Message", "trace": "Trace", "notFound": "No details found" }, "knowledge": { "document": "Documents", "faq": "FAQ", "retrieveLogs": "Retrieval Logs", "expandList": "Expand knowledge base list", "collapseList": "Collapse knowledge base list", "refreshDocuments": "Refresh documents", "listLayout": "List layout", "gridLayout": "Grid layout", "openDebugPanel": "Open debug panel", "newDocument": "New document", "refreshFAQ": "Refresh FAQ", "importFAQ": "Import FAQ", "newFAQ": "New FAQ", "ragDebug": "RAG Debug", "title": "Knowledge Base", "allStatus": "All statuses", "statusOk": "Enabled", "statusDisabled": "Disabled", "statusDeleted": "Deleted", "typeDocument": "Document Knowledge Base", "typeFAQ": "FAQ Knowledge Base", "chunkFixed": "Fixed length", "chunkStructured": "Structured chunks", "chunkFAQ": "Q&A chunks", "chunkSemantic": "Semantic chunks", "answerStrict": "Strict mode", "answerAssist": "Assist mode", "loadBasesFailed": "Could not load knowledge bases.", "baseUpdated": "Knowledge base updated: {name}", "baseCreated": "Knowledge base created: {name}", "baseSaveFailed": "Could not save the knowledge base.", "baseDeleted": "Knowledge base deleted: {name}", "baseDeleteFailed": "Could not delete the knowledge base.", "rebuildStarted": "Knowledge base reindex started: {name}", "rebuildFailed": "Could not rebuild the knowledge base index.", "sortUpdated": "Knowledge base order updated.", "sortUpdateFailed": "Could not update knowledge base order.", "moreActions": "More actions for {name}", "edit": "Edit", "rebuilding": "Rebuilding...", "rebuildIndex": "Rebuild Index", "deleting": "Deleting...", "delete": "Delete", "searchBase": "Search knowledge bases", "query": "Search", "emptyBases": "No matching knowledge bases", "nameRequired": "Name is required.", "nameMax": "Name can be up to 100 characters.", "descriptionMax": "Description can be up to 500 characters.", "typeRequired": "Select a knowledge base type.", "topKRequired": "Enter a Top K value.", "scoreRequired": "Enter a score threshold.", "rerankRequired": "Enter a rerank limit.", "chunkProviderRequired": "Select a chunking strategy.", "targetTokensRequired": "Enter target token count.", "maxTokensRequired": "Enter maximum token count.", "overlapTokensRequired": "Enter overlap token count.", "answerModeRequired": "Select an answer mode.", "remarkMax": "Notes can be up to 500 characters.", "editBaseTitle": "Edit Knowledge Base", "createBaseTitle": "New Knowledge Base", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "create": "Create", "loading": "Loading...", "knowledgeType": "Knowledge Base Type", "selectKnowledgeType": "Select knowledge base type", "searchKnowledgeType": "Search knowledge base types", "emptyKnowledgeType": "No matching knowledge base types", "name": "Name", "namePlaceholder": "Knowledge base name", "description": "Description", "descriptionPlaceholder": "Knowledge base description", "chunkProvider": "Chunking Strategy", "selectChunkProvider": "Select chunking strategy", "searchChunkProvider": "Search chunking strategies", "emptyChunkProvider": "No matching chunking strategies", "targetToken": "Target Tokens", "maxToken": "Max Tokens", "overlapToken": "Overlap Tokens", "defaultTopK": "Default Top K", "defaultScoreThreshold": "Default Score Threshold", "defaultRerankLimit": "Default Rerank Limit", "answerMode": "Answer Mode", "selectAnswerMode": "Select answer mode", "searchAnswerMode": "Search answer modes", "emptyAnswerMode": "No matching answer modes", "remark": "Notes", "remarkPlaceholder": "Notes", "allIndexStatus": "All index statuses", "searchStatus": "Search statuses", "emptyStatus": "No matching statuses", "indexPending": "Pending", "indexIndexed": "Indexed", "indexFailed": "Index failed", "loadDocumentsFailed": "Could not load documents.", "documentUpdated": "Document updated: {title}", "documentCreated": "Document created: {title}", "documentSaveFailed": "Could not save the document.", "documentDeleted": "Document deleted: {title}", "documentDeleteFailed": "Could not delete the document.", "documentIndexRebuilt": "Index rebuilt: {title}", "documentIndexRebuildFailed": "Could not rebuild the index.", "selectKnowledgeBaseForDocuments": "Select a knowledge base to view documents.", "searchDocumentTitle": "Search document titles", "indexedAt": "Indexed {time}", "indexTime": "Indexed at {time}", "running": "Running...", "emptyDocuments": "No matching documents", "documentTitleRequired": "Title is required.", "documentTitleMax": "Title can be up to 255 characters.", "contentTypeRequired": "Select a content type.", "contentRequired": "Content is required.", "editDocumentTitle": "Edit Document", "createDocumentTitle": "New Document", "documentTitle": "Title", "documentTitlePlaceholder": "Document title", "content": "Content", "contentPlaceholder": "Enter document content", "loadFAQFailed": "Could not load FAQs.", "faqSaved": "FAQ saved.", "faqSaveFailed": "Could not save the FAQ.", "faqDeleted": "FAQ deleted.", "faqDeleteFailed": "Could not delete the FAQ.", "faqIndexRebuilt": "FAQ index rebuilt.", "faqIndexRebuildFailed": "Could not rebuild the FAQ index.", "selectFAQBase": "Select an FAQ knowledge base to view FAQs.", "searchFAQ": "Search FAQs by question", "question": "Question", "indexStatus": "Index Status", "similarQuestions": "Similar Questions", "updatedAt": "Updated", "actions": "Actions", "emptyFAQ": "This knowledge base has no FAQs yet", "faqQuestionRequired": "Question is required.", "faqQuestionMax": "Question can be up to 500 characters.", "faqAnswerRequired": "Answer is required.", "editFAQTitle": "Edit FAQ", "createFAQTitle": "New FAQ", "standardQuestion": "Primary Question", "questionPlaceholder": "Enter the primary question", "answer": "Answer", "answerPlaceholder": "Enter the FAQ answer", "similarQuestionsPlaceholder": "One similar question per line", "fileEmpty": "The file is empty.", "missingFAQColumns": "The import template must include question and answer columns.", "skipRowMissingFAQ": "Row {row} is missing a question or answer and was skipped.", "importNoRows": "No FAQ rows to import.", "parsedFAQRows": "{count} FAQ rows parsed.", "parseImportFailed": "Could not parse the import file.", "importRowFailed": "Row {row}: {message}", "importFailed": "Import failed.", "importSuccess": "{count} FAQs imported.", "importSomeFailed": "{count} FAQs failed to import.", "importFAQTitle": "Import FAQ", "importFAQDescription": "Upload a CSV file to import FAQs in bulk. Required columns: question and answer. Separate similarQuestions with | or line breaks.", "downloadTemplate": "Download Template", "importing": "Importing...", "startImport": "Start Import", "startImportWithCount": "Start Import ({count})", "importFile": "Import File", "chooseFile": "Choose File", "importFileDescription": "Supports UTF-8 CSV or tab-delimited text files.", "currentFile": "Current file: {name}", "importHint": "Import Notes", "importPreview": "Import Preview", "rowNumber": "Row {row}", "similarQuestionShort": "Similar: {value}", "none": "None", "previewAfterUpload": "Upload a file to preview the first 5 FAQs.", "allChannels": "All channels", "channelIM": "Support chat", "channelAgentAssist": "Agent assist", "channelAPI": "API", "channelDebug": "Debug", "allScenes": "All scenes", "sceneFirstResponse": "First response", "sceneAssist": "Assisted reply", "sceneQA": "Q&A", "allAnswerStatus": "All answer statuses", "answerNormal": "Normal", "answerNoAnswer": "No answer", "answerFallback": "Fallback reply", "answerBlocked": "Blocked", "allChunkProviders": "All chunking strategies", "allRerank": "All rerank", "rerankEnabled": "Rerank enabled", "rerankDisabled": "Rerank disabled", "loadRetrieveLogsFailed": "Could not load retrieval logs.", "selectBaseForLogs": "Select a knowledge base to view retrieval logs.", "loadingRetrieveLogs": "Loading retrieval logs...", "emptyRetrieveLogs": "This knowledge base has no retrieval logs yet", "filterQuestion": "Filter by question keyword", "selectChannel": "Select channel", "selectScene": "Select scene", "answerStatus": "Answer Status", "chunkStrategy": "Chunking Strategy", "filter": "Filter", "time": "Time", "hitCount": "Hits", "citations": "Citations", "duration": "Duration", "yes": "Yes", "no": "No", "loadRetrieveLogDetailFailed": "Could not load retrieval log details.", "noCitations": "No citation sources", "unrecordedSection": "Section not recorded", "retrieveLogDetail": "Retrieval Log Details", "retrieveLogNotFound": "Retrieval log not found", "loadingDetail": "Loading details...", "emptyDetail": "No details", "requestInfo": "Request Info", "createdAt": "Created At", "channelScene": "Channel / Scene", "originalQuestion": "Original Question", "rewriteQuestion": "Rewritten Question", "answerContent": "Answer", "retrieveStrategy": "Retrieval Strategy", "resultSummary": "Result Summary", "contextChunks": "Context Chunks", "retrieveMs": "Retrieval Time", "generateMs": "Generation Time", "totalMs": "Total Time", "model": "Model", "sessionId": "Session ID", "citationSources": "Citation Sources", "hitDetails": "Hit Details", "itemsCount": "{count} items", "usedInContext": "Used in context", "notUsedInContext": "Not used in context", "section": "Section: {section}", "selectKnowledgeBaseFirst": "Select a knowledge base first.", "debugQuestionRequired": "Enter a debug question.", "searchCompleted": "Search complete. {count} hits found.", "searchFailed": "Search failed.", "answerCompleted": "Answer generated. Status: {status}", "answerFailed": "Answer generation failed.", "debugQuestionPlaceholder": "Enter a question to test retrieval and answer quality.", "topKPlaceholder": "Number of hits", "scoreThreshold": "Similarity Threshold", "scoreThresholdPlaceholder": "Minimum score", "rerankLimitLabel": "Rerank Limit", "rerankLimitPlaceholder": "Items to rerank", "searching": "Searching...", "debugSearch": "Debug Search", "generating": "Generating...", "debugAnswer": "Debug Answer", "answerResult": "Answer Result", "searchHits": "Search Hits", "hitsSummary": "{count} hits · {latency}ms" }, "scaffold": { "moduleBoard": "Module Delivery Board", "moduleBoardDescription": "A first-phase admin scaffold. Replace it with real API-backed modules later.", "searchModule": "Search modules", "filter": "Filter", "moduleList": "Modules", "milestones": "Milestones", "phaseOneModules": "Phase One Modules", "phaseOneDescription": "Covers accounts, permissions, knowledge base, channels, and skill entry points.", "module": "Module", "owner": "Owner", "status": "Status", "progress": "Progress", "updatedAt": "Updated", "done": "Done", "nextMilestone": "Next Milestone", "nextMilestoneDescription": "The UI scaffold is ready. Next step: connect real APIs and business forms.", "milestoneLogin": "Connect sign-in, users, roles, and permissions APIs.", "milestoneForms": "Add form dialogs, paginated queries, and error handling.", "milestoneKnowledge": "Wire up real knowledge base and channel configuration.", "adminUsers": "Admin Users", "newAdminsThisWeek": "New admins this week", "accountSystemReady": "Account foundation is ready for real APIs", "permissions": "Permissions", "initialized": "Initialized", "permissionsPending": "Menu and API permissions are pending", "permissionModelReady": "Ready to connect the backend permission model", "knowledgeTasks": "Knowledge Tasks", "running": "Running", "ragReserved": "RAG integration placeholder", "docIndexSupport": "Supports document import and indexing flow", "channelAccess": "Channel Access", "pendingConfig": "Pending setup", "channelEntrances": "WeCom, DingTalk, and IM entry points", "waitingRealConfig": "Waiting for real connection settings", "recentActivity": "Recent Development Activity", "activityDescription": "Demo data showing conversation growth and knowledge base readiness.", "activeSessions": "Active Sessions", "indexedDocs": "Knowledge Docs", "last14Days": "Last 14 days", "last7Days": "Last 7 days", "selectTimeRange": "Select time range", "businessModules": "Business Modules", "open": "Open", "share": "Share", "delete": "Delete", "more": "More" }, "widgetDemo": { "defaultName": "Demo User", "missingUserId": "Enter userId.", "missingName": "Enter the user's name.", "missingSecret": "Enter the JWT secret.", "invalidTtl": "TTL must be greater than 0.", "missingChannel": "Enter channelId.", "mountedJwt": "Widget mounted in JWT user mode.", "mountedGuest": "Widget mounted in guest mode.", "mounted": "Widget mounted.", "mountFailed": "Could not mount the widget.", "linkFailed": "Could not generate the support link.", "unmounted": "Widget unmounted.", "title": "Widget Mount Test", "authMode": "Auth Mode", "guest": "Guest", "jwtUser": "JWT User", "ttlMinutes": "TTL (minutes)", "mount": "Mount", "unmount": "Unmount", "snippetTitle": "Embed Code", "jwtNotice": "This page is for local simulation only. In production, your backend should issue the userToken.", "copiedSnippet": "Embed code copied", "copySnippet": "Copy embed code", "copied": "Copied", "copyCode": "Copy code", "directChat": "Direct Customer Chat", "directChatPlaceholder": "Copy or open in a new window to generate the latest link", "copy": "Copy", "openNewWindow": "Open in New Window", "currentToken": "Current userToken" }, "quickReply": { "loadFailed": "Could not load quick replies.", "created": "Quick reply created: {title}", "updated": "Quick reply updated: {title}", "saveFailed": "Could not save the quick reply.", "enabled": "Enabled: {title}", "disabled": "Disabled: {title}", "statusUpdateFailed": "Could not update the status.", "deleted": "Quick reply deleted: {title}", "deleteFailed": "Could not delete the quick reply.", "refresh": "Refresh", "new": "New Quick Reply", "filterTitle": "Filter by title", "filterGroup": "Filter by group", "query": "Search", "columnQuickReply": "Quick Reply", "columnGroup": "Group", "columnStatus": "Status", "columnSort": "Sort", "columnCreator": "Created By", "columnActions": "Actions", "edit": "Edit", "moreActions": "More actions for {title}", "processing": "Working...", "enable": "Enable", "disable": "Disable", "deleting": "Deleting...", "delete": "Delete", "loading": "Loading quick replies...", "empty": "No matching quick replies", "editTitle": "Edit Quick Reply", "createTitle": "New Quick Reply", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "create": "Create", "loadingDetail": "Loading...", "groupName": "Group Name", "groupNameRequired": "Enter a group name.", "groupNamePlaceholder": "For example: Presales, Support, Follow-up", "title": "Title", "titleRequired": "Enter a title.", "titlePlaceholder": "Enter a quick reply title", "content": "Reply Content", "contentRequired": "Enter reply content.", "contentPlaceholder": "Enter the reply content", "statusRequired": "Select a status.", "sortRequired": "Enter a sort value.", "sortInvalid": "Sort value must be an integer greater than or equal to 0.", "sortPlaceholder": "Higher numbers appear first" }, "tag": { "loadFailed": "Could not load tags.", "updated": "Tag updated: {name}", "created": "Tag created: {name}", "saveFailed": "Could not save the tag.", "enabled": "Enabled: {name}", "disabled": "Disabled: {name}", "statusUpdateFailed": "Could not update the status.", "deleted": "Tag deleted: {name}", "deleteFailed": "Could not delete the tag.", "sameParentOnly": "Tags can only be reordered under the same parent tag.", "notFound": "Tag not found.", "sortUpdated": "Tag order updated.", "sortUpdateFailed": "Could not update tag order.", "refresh": "Refresh", "expandAll": "Expand All", "collapseAll": "Collapse All", "new": "New Tag", "filterName": "Filter by name", "searchStatus": "Search status", "emptyStatus": "No statuses found", "query": "Search", "columnName": "Tag Name", "columnStatus": "Status", "columnRemark": "Notes", "columnCreatedAt": "Created At", "columnActions": "Actions", "dragSort": "Drag to reorder {name}", "toggleStatus": "Toggle status for {name}", "edit": "Edit", "moreActions": "More actions for {name}", "deleting": "Deleting...", "delete": "Delete", "loading": "Loading tags...", "empty": "No matching tags", "editTitle": "Edit Tag", "createTitle": "New Tag", "cancel": "Cancel", "saving": "Saving...", "save": "Save", "create": "Create", "loadingDetail": "Loading...", "parent": "Parent Tag", "rootParent": "None (top-level tag)", "name": "Tag Name", "nameRequired": "Enter a tag name.", "namePlaceholder": "Enter tag name", "remark": "Notes", "remarkPlaceholder": "Optional notes", "searchParent": "Search parent tags", "emptyParent": "No parent tags found" }, "permission": { "loadFailed": "Could not load permissions.", "refresh": "Refresh", "filterKeyword": "Filter by permission name or code", "filterGroup": "Filter by group", "query": "Search", "columnPermission": "Permission", "columnCode": "Code", "columnGroup": "Group", "columnApi": "API", "columnStatus": "Status", "loading": "Loading permissions...", "empty": "No matching permissions" }, "role": { "dragSort": "Drag to reorder {name}", "system": "System", "processing": "Working...", "assignPermissions": "Assign Permissions", "loadFailed": "Could not load roles.", "created": "Role created: {name}", "createFailed": "Could not create the role.", "loadAssignFailed": "Could not load permission assignment data.", "sortUpdated": "Role order updated.", "sortUpdateFailed": "Could not update role order.", "permissionsUpdated": "Permissions updated for {name}.", "savePermissionsFailed": "Could not save permission assignments.", "add": "Add Role", "refresh": "Refresh", "dragHint": "Drag rows to reorder roles.", "pageSummary": "Page {page} / {limit} per page", "columnRole": "Role", "columnCode": "Code", "columnStatus": "Status", "columnSort": "Sort", "columnActions": "Actions", "loading": "Loading roles...", "empty": "No roles yet", "assignTitle": "Assign Permissions", "currentRole": "Current role: {name} {code}", "permissionList": "Permissions", "searchPermission": "Search by permission name, code, group, or API", "loadingPermissions": "Loading permissions...", "permissionCount": "{count} items", "noPermissions": "No matching permissions", "saving": "Saving...", "savePermissions": "Save Permissions", "cancel": "Cancel", "nameRequired": "Enter a role name.", "codeRequired": "Enter a role code.", "codeInvalid": "Role code must start with a letter and can only include letters, numbers, colons, underscores, and hyphens.", "createTitle": "Add Role", "createDescription": "After creating a role, you can assign permissions and adjust its order in the list.", "name": "Role Name", "namePlaceholder": "For example: Support Manager", "code": "Role Code", "codePlaceholder": "For example: support_manager", "remark": "Notes", "optional": "Optional", "creating": "Creating...", "create": "Create Role" }, "nav": { "overview": "Overview", "receptionCenter": "Support Desk", "conversations": "Conversations", "tickets": "Tickets", "conversationMonitor": "Conversation Monitor", "customers": "Customers", "companies": "Companies", "agentConfig": "Support Setup", "tags": "Tags", "quickReplies": "Quick Replies", "agents": "Agent Profiles", "agentTeamSchedules": "Team Schedules", "channels": "Channels", "aiCapabilities": "AI Capabilities", "knowledge": "Knowledge Base", "aiConfigs": "Model Settings", "aiAgents": "AI Agents", "skillDefinition": "Skill Orchestration", "mcp": "Tool Debugging", "agentRunLogs": "Run Logs", "system": "System", "users": "Users", "roles": "Roles", "permissions": "Permissions", "dashboardHome": "Dashboard", "notifications": "Notifications", "changePassword": "Change Password", "signOut": "Sign Out" }, "theme": { "toggle": "Change theme", "light": "Light", "dark": "Dark", "system": "System" }, "palette": { "toggle": "Change accent color", "green": "Service Green", "gray": "Neutral Gray", "blue": "Clear Blue" } }