Files
agent-desk-ng/web/messages/en-US.json
mono 63e0457886 fix: harden identity, live access, drafts and setup (review only)
Source-reviewed hardening changes and regression tests. UNBUILT / UNTESTED: not a deployable release. Go formatting, compilation, automated regression tests, full frontend validation and staging acceptance remain required. See docs/hardening/VALIDATION.md. Main remains the original clean snapshot; no upstream Git history imported.
2026-10-16 12:15:20 +00:00

3586 lines
154 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"app": {
"brand": "Agent Desk",
"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",
"selectedCount": "{count} selected",
"expand": "Expand",
"collapse": "Collapse",
"cancel": "Cancel",
"status": "Status",
"save": "Save",
"confirm": "Confirm",
"actions": "Actions",
"name": "Name",
"saving": "Saving...",
"reset": "Reset"
},
"language": {
"enUS": "English",
"zhCN": "中文 (Chinese)",
"ruRU": "Русский (Russian)",
"viVN": "Tiếng Việt",
"selectLanguage": "Select Interface Language"
},
"organization": {
"createTitle": "Create Organization",
"createDescription": "Create a new organization / workspace for your team.",
"name": "Organization Name",
"namePlaceholder": "e.g. Acme Corp",
"code": "Slug / Code (Optional)",
"codePlaceholder": "e.g. acme-corp",
"create": "Create Organization",
"creating": "Creating...",
"created": "Organization \"{name}\" created successfully",
"createFailed": "Failed to create organization",
"nameRequired": "Organization name is required",
"manageTitle": "Manage Organization",
"general": "General Settings",
"members": "Team Members",
"addMember": "Add Member",
"emailOrUsername": "User Email or Username",
"emailOrUsernamePlaceholder": "e.g. user@company.com or username",
"role": "Role",
"owner": "Owner",
"admin": "Admin",
"member": "Member",
"add": "Add",
"adding": "Adding...",
"remove": "Remove",
"removeConfirm": "Are you sure you want to remove this member?",
"memberAdded": "Member added successfully",
"memberRemoved": "Member removed",
"updated": "Organization settings updated",
"save": "Save Changes",
"saving": "Saving..."
},
"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",
"ticketAssignedTitle": "Ticket assigned",
"ticketAssignedLine": "Ticket {ticketNo} has been assigned to you.",
"assignmentReason": "Assignment reason: {reason}",
"conversationTransferredTitle": "Conversation transferred",
"conversationAutoAssignedTitle": "Conversation auto-assigned",
"conversationAssignedTitle": "Conversation assigned",
"conversationAssignedLine": "Conversation #{conversationId} has been assigned to you.",
"transferReason": "Transfer reason: {reason}"
},
"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.",
"supportAuthenticationRequired": "Your support identity could not be verified. Reload the chat to retry; no guest session was opened."
},
"supportHelpWorkbench": {
"title": "Help Center",
"createPage": "New page",
"createChildPage": "New child page",
"createDescription": "The page appears in the help navigation and can also contain content.",
"createAndEdit": "Create and edit",
"creating": "Creating...",
"created": "Page created",
"pageTitle": "Page title",
"searchPlaceholder": "Search pages",
"filterAll": "All",
"filterDraft": "Draft",
"filterPublished": "Published",
"filterHidden": "Hidden",
"sortDisabledDuringSearch": "Sorting is unavailable in search results",
"loading": "Loading pages...",
"empty": "No help pages",
"selectPrompt": "Select a page on the left or create a new page",
"pageSettings": "Page settings",
"parentPage": "Parent page",
"selectParentPage": "Select a parent page",
"rootDirectory": "Root",
"slug": "Slug",
"slugFormatHint": "Use letters, numbers, and hyphens (-) only.",
"slugChangeWarning": "Changing the slug breaks the previous URL. Update any external references.",
"status": "Status",
"selectStatus": "Select a status",
"statusDraft": "Draft",
"statusPublished": "Published",
"statusHidden": "Hidden",
"summary": "Page summary",
"summaryPlaceholder": "Used in help navigation, recommendations, and search results",
"contentPlaceholder": "Write the page content",
"save": "Save",
"saving": "Saving...",
"saved": "Page saved",
"settingsSaved": "Page settings saved",
"savedState": "All changes saved",
"unsaved": "Unsaved changes",
"unsavedLeaveConfirm": "This page has unsaved changes. Leave anyway?",
"unsavedLeaveTitle": "Discard unsaved changes?",
"discardChanges": "Discard changes",
"continueEditing": "Continue editing",
"publishedSaveWarning": "Saving a published page updates the public content immediately",
"saveBeforeStatusChange": "Save your changes before changing the publication status",
"publishedAction": "Publish",
"publishedConfirmTitle": "Publish “{title}”?",
"publishedConfirmDescription": "The page will become publicly available immediately.",
"publishedSuccess": "Page published",
"draftAction": "Withdraw",
"draftConfirmTitle": "Withdraw “{title}”?",
"draftConfirmDescription": "The page will no longer be available from the public help center.",
"draftSuccess": "Page withdrawn to draft",
"withdrawAction": "Withdraw",
"hiddenAction": "Hide",
"hiddenConfirmTitle": "Hide “{title}”?",
"hiddenConfirmDescription": "The page will no longer be publicly available, but its content will remain in the admin.",
"hiddenSuccess": "Page hidden",
"openPublicPage": "Open public page",
"collapse": "Collapse child pages",
"expand": "Expand child pages",
"dragPage": "Drag page “{title}” to reorder",
"dragDisabled": "Sorting is unavailable in the current state",
"sameLevelOnly": "Pages can only be reordered under the same parent",
"sortSaved": "Page order updated",
"pageActions": "Page actions: {title}",
"deletePage": "Delete page",
"deleteConfirm": "Delete “{title}”? Pages with children cannot be deleted.",
"deleteConfirmTitle": "Delete “{title}”?",
"deleted": "Page deleted",
"cancel": "Cancel"
},
"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",
"modeLabelMarkdown": "Markdown",
"modeLabelRichText": "Rich Text",
"modeSwitchTitle": "Switch to {mode}?",
"modeSwitchDescription": "Rich Text content will be converted to Markdown. Complex styles, embedded content, or some structure may not be preserved.",
"modeSwitchAction": "Convert and switch",
"modeSwitchCancel": "Keep current mode",
"modeSwitchLabel": "Editor mode"
},
"locale": {
"zh-CN": "简体中文",
"en-US": "English",
"ru-RU": "Русский"
},
"auth": {
"checkingSession": "Checking your session",
"syncingProfile": "Syncing your admin profile and permissions",
"loginSuccess": "Signed in. Taking you to the dashboard.",
"loginFailed": "Sign-in failed",
"loadingOptions": "Loading sign-in options...",
"optionsLoadFailed": "Could not load sign-in options.",
"welcome": "Welcome back",
"loginDescription": "Login to your {brand} account",
"username": "Username",
"usernamePlaceholder": "Username or email",
"password": "Password",
"passwordPlaceholder": "Enter your password",
"forgotPassword": "Forgot your password?",
"signingIn": "Signing in...",
"signIn": "Login",
"continueWith": "Or continue with",
"wxworkSignIn": "Sign in with WeCom",
"oidcSignIn": "Sign in with DOS ID",
"redirectingToOidc": "Redirecting to DOS ID...",
"noAccount": "Don't have an account?",
"signUp": "Sign up",
"termsPrefix": "By clicking continue, you agree to our",
"termsOfService": "Terms of Service",
"termsJoiner": "and",
"privacyPolicy": "Privacy Policy",
"imageAlt": "Image",
"wxworkMissingTicket": "The WeCom sign-in ticket is missing.",
"wxworkFailed": "WeCom sign-in failed.",
"wxworkSigningIn": "Signing in with WeCom",
"oidcMissingTicket": "The DOS ID sign-in ticket is missing.",
"oidcFailed": "DOS ID sign-in failed.",
"oidcSigningIn": "Signing in with DOS ID",
"checkingTicket": "Verifying your sign-in ticket and opening the dashboard."
},
"legal": {
"terms": {
"title": "Terms of Service",
"description": "These terms describe the basic rules for accessing and using this system. This is general product text and may be replaced by formal legal terms from the service provider.",
"updatedAt": "Last updated: 2026-05-30",
"relatedLabel": "Also read",
"relatedLink": "Privacy Policy",
"sections": [
{
"title": "1. Service Description",
"body": "This system helps support teams manage conversations, tickets, knowledge bases, AI capabilities, and related operational data. You may access and use it only within your authorized business scope."
},
{
"title": "2. Accounts and Access",
"body": "You are responsible for protecting your account, password, tokens, and third-party sign-in credentials. Activity caused by shared, leaked, or misused credentials may be treated as activity by the account holder."
},
{
"title": "3. Acceptable Use",
"body": "You must not use the system for unlawful activity, rights infringement, service disruption, privilege bypassing, malicious code, unrelated data, or unauthorized sensitive information."
},
{
"title": "4. Data and Content Responsibility",
"body": "Content you create, upload, sync, or process in the system should be lawful, accurate, and aligned with internal management requirements. Necessary activity records may be retained for security, audit, operations, and compliance."
},
{
"title": "5. Service Changes and Availability",
"body": "System features may change due to product iteration, maintenance, security fixes, or third-party service changes. The service provider aims to keep the service stable but does not promise that any feature will remain unchanged or uninterrupted."
},
{
"title": "6. Disclaimer",
"body": "AI-generated content, automatic assignment, summaries, and suggestions are assistive only. Final business judgment, response content, and handling outcomes should be confirmed by authorized personnel."
},
{
"title": "7. Contact and Updates",
"body": "If you have questions about these terms, contact your system administrator or the service provider through published contact channels. The latest version displayed on this page applies after updates."
}
]
},
"privacy": {
"title": "Privacy Policy",
"description": "This policy explains the types of information this system may process when providing support administration capabilities, why it is used, and how it is protected. This is general product text and may be replaced by formal legal text from the service provider.",
"updatedAt": "Last updated: 2026-05-30",
"relatedLabel": "Also read",
"relatedLink": "Terms of Service",
"sections": [
{
"title": "1. Information We Process",
"body": "The system may process account profiles, roles and permissions, sign-in records, activity logs, support conversations, ticket content, customer contact information, knowledge base content, and operational diagnostics."
},
{
"title": "2. Purposes of Use",
"body": "This information is used for authentication, access control, support collaboration, issue follow-up, quality review, security audit, operations, feature improvement, and applicable compliance requirements."
},
{
"title": "3. Storage and Protection",
"body": "The system uses access control, audit logging, transport protection, and appropriate data isolation measures to protect information. You should also avoid entering sensitive personal information unless there is a clear business need."
},
{
"title": "4. Third-Party Services and Integrations",
"body": "When WeCom, OIDC, messaging channels, AI models, or other external integrations are enabled, relevant information may be sent to those services according to configuration. Processing is also governed by integration provider rules and organizational settings."
},
{
"title": "5. User and Administrator Rights",
"body": "Authorized administrators may query, correct, export, or delete relevant business data according to organizational rules. Other users can contact their system administrator for personal-information requests."
},
{
"title": "6. Cookies and Local Storage",
"body": "The system may use browser local storage to keep session state, language, theme, and interface preferences in order to maintain access, support security, and improve the user experience."
},
{
"title": "7. Contact and Updates",
"body": "If you have questions about privacy protection, contact your system administrator or the service provider through published contact channels. The latest version displayed on this page applies after updates."
}
]
}
},
"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"
},
"operatorPresence": {
"viewing": "{name} is viewing this conversation",
"typing": "{name} is typing a reply...",
"multipleViewing": "{count} operators are viewing this conversation",
"collisionWarning": "Another operator is active here to avoid duplicate replies."
},
"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",
"conversationId": "Conversation ID",
"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",
"quickReplySlashHint": "Type / for quick replies",
"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 #",
"claiming": "Claiming...",
"confirmClaim": "Claim"
},
"csat": {
"title": "How would you rate our support?",
"score1": "Very dissatisfied",
"score2": "Dissatisfied",
"score3": "Neutral",
"score4": "Satisfied",
"score5": "Very satisfied",
"commentPlaceholder": "Tell us what could be improved... (optional)",
"submit": "Submit Rating",
"submitting": "Submitting...",
"thankYou": "Thank you for your feedback!",
"alreadyRated": "You rated this conversation {score}/5"
},
"promptStarters": {
"title": "Frequently Asked Questions"
},
"supportChat": {
"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.",
"crashTitle": "Something went wrong",
"crashDescription": "The chat hit an unexpected problem. Your messages are safe.",
"crashReload": "Reload 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.",
"pageTitle": "Live Support",
"pageDescription": "Ask your question here. Your request history is kept in this browser.",
"refreshFailed": "Could not refresh the chat.",
"myRequests": "My requests",
"newRequest": "New request",
"switchRequest": "Switch request",
"requestFallbackTitle": "Support request",
"statusAiServing": "AI handling",
"statusPending": "Waiting for an agent",
"statusActive": "In progress",
"statusClosed": "Closed",
"requestsUnreadCount": "{count} unread",
"noRequests": "No requests yet",
"noRequestsDescription": "Start a request and we will get back to you shortly.",
"newRequestDialogTitle": "New request",
"newRequestDialogDescription": "Briefly describe your issue so we can help faster.",
"newRequestSubjectLabel": "Subject",
"newRequestSubjectPlaceholder": "For example: cannot complete payment",
"newRequestSubjectHint": "Optional. We will settle the subject from your first message if you leave it empty.",
"newRequestSubjectTooLong": "The subject can be at most 255 characters.",
"createRequest": "Create request",
"creatingRequest": "Creating...",
"startFirstRequest": "Start your first request",
"openRequestCount": "{open} open of {total}",
"loadConversationsFailed": "Could not load your requests",
"createConversationFailed": "Could not create the request",
"dismissedTitle": "Chat window closed",
"dismissedDescription": "Your support request has not been ended. You can return to continue the conversation.",
"returnToChat": "Return to chat",
"sendUnavailable": "This conversation is unavailable. Return to it or retry before sending.",
"sendInProgress": "A message is already being sent."
},
"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",
"todayAgentRunFailCount": "Agent Run 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.",
"brandingTitle": "Platform branding",
"brandingDescription": "Change the platform name and logo. They apply to the visitor portal, the dashboard and page titles.",
"brandingSaved": "Platform branding updated",
"brandingSaveFailed": "Could not save the platform branding",
"brandingLoadFailed": "Could not load the platform branding",
"brandingConfiguredFallback": "The current name comes from configuration ({name}). Clear this field to fall back to it."
},
"status": {
"all": "All statuses",
"ok": "Enabled",
"disabled": "Disabled",
"deleted": "Deleted"
},
"channel": {
"allTypes": "All types",
"typeWeb": "Web",
"typeTelegram": "Telegram Bot",
"typeZaloOa": "Zalo Official Account",
"typeWechatMp": "WeChat Official Account",
"typeWxworkKf": "WeCom Customer Service",
"botToken": "Telegram Bot Token",
"botTokenRequired": "Telegram Bot Token is required",
"botUsername": "Bot Username",
"webhookSecret": "Webhook Secret Token",
"telegramAutoConnectTitle": "Automatic Telegram Bot Connection",
"telegramAutoConnectDescription": "Enter your Bot Token from @BotFather. Crove Desk automatically connects to Telegram and syncs inbound/outbound customer conversations seamlessly.",
"zaloAccessToken": "Zalo OA Access Token",
"zaloOaId": "OA ID",
"zaloAppId": "App ID",
"zaloAutoConnectTitle": "Zalo Official Account Connection",
"zaloAutoConnectDescription": "Connect your Zalo Official Account using the Access Token to automatically receive customer messages and dispatch replies.",
"typeSlack": "Slack",
"typeLark": "Lark",
"slackBotToken": "Bot User OAuth Token",
"slackBotTokenRequired": "Slack Bot User OAuth Token is required",
"slackSigningSecret": "Signing Secret",
"slackSigningSecretHint": "Required to verify inbound events. Without it the webhook accepts unsigned requests, so anyone who learns the URL can post into a conversation.",
"slackAppId": "App ID",
"slackTeamId": "Workspace ID",
"slackTeamName": "Workspace Name",
"slackDefaultChannel": "Default Channel ID",
"slackSetupTitle": "Slack App Connection",
"slackSetupDescription": "Create a Slack app, install it to the workspace, and copy the Bot User OAuth Token and Signing Secret from Basic Information. Subscribe to message.events, then set the Request URL below in Event Subscriptions.",
"slackRequestUrl": "Request URL",
"typeDiscord": "Discord",
"larkSetupDescription": "Create a Lark custom app (or the Feishu equivalent), add the IM message-receive event, and point the event request URL at the webhook below. The verification token is echoed by every event so the desk can prove deliveries came from Lark.",
"larkSetupTitle": "Lark Bot Connection",
"larkCredentialsRequired": "Lark App ID and App Secret are required",
"larkVerificationToken": "Lark Verification Token",
"larkAppSecret": "Lark App Secret",
"larkAppId": "Lark App ID",
"discordGuildId": "Guild / Server ID",
"discordGuildName": "Guild / Server Name",
"discordBotToken": "Bot Token",
"discordSetupTitle": "Discord Bot Connection",
"discordSetupDescription": "Create a bot in the Discord Developer Portal, enable the Message Content privileged intent, invite it to your server, and point an interaction or bridge endpoint at the webhook URL below. Leave the bot token empty to use the deployment-wide DISCORD_BOT_TOKEN.",
"inboundWebhookUrl": "Inbound Webhook Endpoint",
"typeEmail": "Email Support",
"emailAddress": "Support Email Address",
"senderName": "Sender Display Name",
"emailProvider": "Email Delivery Service",
"emailProviderDefault": "System Default (.env / config.yaml)",
"emailProviderSmtp": "Custom SMTP Server",
"emailProviderBrevo": "Brevo API",
"emailProviderSendGrid": "SendGrid API",
"emailProviderResend": "Resend API",
"emailProviderPostmark": "Postmark API",
"emailProviderMailgun": "Mailgun API",
"emailApiKey": "API Key",
"emailAutoConnectTitle": "Automatic Inbound Email Ingestion",
"emailAutoConnectDescription": "Forward emails sent to your support address to the Inbound Webhook endpoint to automatically convert incoming emails into tickets and trigger AI agent responses.",
"configEmailDescription": "Configure inbound email webhook ingestion and outbound delivery across SMTP, Brevo, SendGrid, Resend, Postmark, or Mailgun.",
"emailAddressRequired": "Support email address is required",
"smtpHost": "SMTP Host",
"smtpPort": "SMTP Port",
"smtpUser": "SMTP Username",
"smtpPassword": "SMTP Password",
"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.",
"processing": "Working...",
"smtpUseTls": "Use TLS",
"smtpUseTlsHint": "Encrypt the connection to the mail server. Leave off to inherit the system setting.",
"smtpAllowInsecure": "Allow insecure connection",
"smtpAllowInsecureHint": "Accept a self-signed certificate, for binding a local test SMTP server. Never enable for a real mailbox.",
"smtpTest": "Test mail server connection",
"smtpTesting": "Testing...",
"smtpTestSuccess": "Connected to {host}",
"smtpTestFailed": "Could not reach the mail server",
"smtpTestSaveFirst": "Save the channel before testing the connection."
},
"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",
"previous": "View previous image",
"next": "View next image",
"position": "{current} / {total}",
"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.",
"galleryHelp": "Use the left and right arrow keys to switch images. Use the mouse wheel or pinch gesture to zoom, and drag to pan."
},
"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",
"refresh": "Refresh",
"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": "Invalid avatar.",
"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",
"avatarPlaceholder": "Upload avatar",
"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": "Upload avatar",
"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",
"columnUserType": "Type",
"userTypeStaff": "Staff",
"userTypeVisitor": "Visitor",
"filterUserType": "Account type",
"filterUserTypeAll": "All",
"filterUserTypeStaff": "Staff",
"filterUserTypeVisitor": "Visitors"
},
"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}",
"processing": "Working...",
"stop": "Disable",
"workflow": "Workflow",
"configure": "Configure",
"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.",
"loadMCPToolsFailed": "Could not load MCP Tools.",
"builtinTools": "Built-in tools",
"ungrouped": "Ungrouped",
"notSelected": "Not selected",
"sectionSetup": "Identity & Runtime",
"sectionPersona": "Persona & Replies",
"sectionCapability": "Knowledge & Skills",
"sectionService": "Routing & Fallback",
"basicDescription": "Configure the agent internal name, service mode, and description.",
"sectionModel": "Model & Response",
"modelDescription": "Select the reasoning model and set reply timeout.",
"replyTimeout": "Reply Timeout",
"seconds": "s",
"sectionRole": "System Prompt",
"personaDescription": "Define the role, instructions, and reply boundaries for the agent (supports Markdown).",
"sectionGreeting": "Greeting Message",
"greetingDescription": "Initial reply sent when entering the conversation. Leave empty to not send.",
"sectionKnowledge": "Knowledge Bases",
"knowledgeDescription": "Knowledge sources the agent can retrieve when answering.",
"sectionSkill": "Skills",
"skillDescription": "Standard capabilities and workflows the agent can invoke.",
"sectionWorkflow": "Workflows",
"workflowDescription": "Published fixed workflows from Workflow Studio.",
"selectWorkflow": "Select published workflow",
"emptyWorkflow": "No published workflows",
"sectionMcp": "MCP Tools",
"mcpDescription": "Select MCP Tools the agent is allowed to call.",
"sectionHandoff": "Human Handoff",
"handoffDescription": "Configure routing method and support teams for human intervention.",
"sectionFallback": "Low Confidence / Fallback",
"fallbackDescription": "Configure handling strategy and fallback message when the answer is uncertain.",
"publishAgent": "Publish Agent",
"saveConfig": "Save Configuration",
"publishedNote": "Published version is active; publishing again applies current config",
"unpublishedNote": "Publishing will save the current configuration first",
"readOnly": "Read-only",
"writeAction": "Write (requires confirm)",
"systemDefined": "System defined",
"activeRevision": "Currently active",
"rollback": "Rollback",
"versionHistory": "Version History",
"notCreated": "Not Created",
"published": "Published",
"unpublished": "Unpublished",
"noRevisions": "No published agent revisions.",
"createTitle": "New AI Agent",
"editTitle": "Edit AI Agent",
"cancel": "Cancel",
"saving": "Saving...",
"save": "Save",
"loading": "Loading...",
"namePrompt": "Please enter an agent name",
"savedActiveNote": "Configuration saved. Currently published revision remains active.",
"savedNote": "AI Agent configuration saved.",
"createdNote": "AI Agent created successfully.",
"publishedSuccess": "AI Agent saved and published successfully.",
"publishFailed": "Failed to save and publish AI Agent.",
"rollbackSuccess": "Rolled back to the selected AI Agent revision.",
"rollbackFailed": "Failed to rollback AI Agent revision.",
"fixedVersion": "Fixed Version #{version}",
"publishStatus": "Publish Status",
"configuredWorkflows": "{count} Workflows configured",
"directAutonomous": "Autonomous reasoning without fixed workflows",
"channelRolloutTitle": "AI Rollout Percentage (%)",
"channelRolloutRestored": "Restored previous channel rollout percentage",
"channelRolloutRestoreFailed": "Failed to restore channel rollout percentage",
"channelRolloutRestoreBtn": "Restore {percent}%",
"agentNotPublishedWarning": "This Agent is not yet published. AI will not auto-reply. Please publish a revision in Agent settings first.",
"agentNotPublishedShort": "Unpublished",
"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",
"mcpToolsTab": "MCP 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}",
"mcpToolsHint": "Select the MCP Tools this Agent is allowed to call.",
"selectToolGroup": "Select tool group",
"searchToolGroup": "Search tool groups",
"emptyToolGroup": "No tool groups available",
"selectMCPTool": "Select MCP Tool",
"searchMCPTool": "Search MCP Tools",
"emptyMCPTool": "No MCP Tools available",
"noMCPToolsHint": "Without MCP Tools, the Agent will not call external MCP Tools.",
"removeMCPTool": "Remove MCP Tool {name}",
"sectionContextCosts": "Context & Cost Optimization",
"contextCostsDescription": "Manage context window size, reasoning step limits, and tool payload sizes.",
"contextWindow": "Context Window (messages)",
"contextWindowHelp": "Number of recent conversation messages included in context (2–30). Smaller window reduces token usage.",
"maxSteps": "Max Reasoning Steps",
"maxStepsHelp": "Max tool call steps allowed per turn (1–8). Lower limits prevent runaway agent loops.",
"autoHandoffOnFailure": "Auto-handoff on AI failure or missing answer",
"autoHandoffOnFailureHelp": "When the AI model errors, exhausts steps, or has no knowledge, immediately transfer the customer to a human agent.",
"handoffMessage": "Customer Notice upon Handoff",
"handoffMessageHelp": "Sent to the customer so they know they have been transferred to an operator and are not being ignored.",
"handoffMessagePlaceholder": "We are connecting you to a human support agent. Please wait.",
"offHoursMessage": "Off-hours notification message",
"offHoursMessageHelp": "Custom message sent when a customer is queued outside operator working hours or when no operators are available. Leave empty for system default.",
"offHoursMessagePlaceholder": "Support is currently offline. Your request has been queued and will be reviewed by an operator later."
},
"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"
},
"supportFaqCategory": {
"allStatuses": "All statuses",
"enabled": "Enabled",
"disabled": "Disabled",
"name": "Category name",
"searchName": "Search category names",
"noDescription": "No description",
"status": "Status",
"confirmDeleteTitle": "Delete FAQ Category?",
"confirmDeleteDescription": "Delete \"{name}\"? Categories used by questions cannot be deleted.",
"delete": "Delete",
"sortUpdated": "FAQ category order updated.",
"sortUpdateFailed": "Could not update the order.",
"dragSort": "Drag to reorder {name}",
"create": "Create",
"save": "Save",
"saving": "Saving...",
"cancel": "Cancel",
"loadingDetail": "Loading details...",
"required": "This field is required.",
"invalidNumber": "Enter a valid number.",
"minValue": "Must be at least {min}",
"maxValue": "Must be no more than {max}",
"namePlaceholder": "Enter a category name",
"slugPlaceholder": "Example: account-security",
"slugPatternMessage": "Use letters, numbers, and hyphens (-) only.",
"description": "Description",
"descriptionPlaceholder": "Describe the questions covered by this category",
"remark": "Notes",
"remarkPlaceholder": "Visible to dashboard users only",
"createTitle": "New FAQ Category",
"editTitle": "Edit FAQ Category",
"refresh": "Refresh",
"new": "New category",
"query": "Search",
"loading": "Loading categories...",
"empty": "No FAQ categories yet",
"actions": "Actions",
"edit": "Edit",
"processing": "Processing...",
"moreActions": "More actions for {name}",
"loadFailed": "Could not load categories.",
"saveFailed": "Could not save the category.",
"deleteFailed": "Could not delete the category.",
"created": "Category created: {name}",
"updated": "Category updated: {name}",
"deleted": "Category deleted: {name}"
},
"supportQuestionAdmin": {
"allCategories": "All Categories",
"allStatuses": "All Statuses",
"statusPending": "Pending Review",
"statusNormal": "Normal",
"statusResolved": "Resolved",
"statusClosed": "Closed",
"statusHidden": "Hidden",
"statusUpdated": "Question status updated.",
"answerPublished": "Answer published successfully.",
"answersCount": "{count} answers",
"votesAndViews": "{votes} votes · {views} views",
"moderateNormal": "Restore Normal",
"moderateClose": "Close Question",
"moderateHide": "Hide Question",
"setBest": "Set as Best",
"bestAnswer": "Best Answer",
"replyPlaceholder": "Enter agent response...",
"publishReply": "Publish Answer",
"empty": "No matching questions found.",
"loading": "Loading questions...",
"title": "Process Question",
"userFallback": "User",
"uncategorized": "Uncategorized"
},
"aiWorkflow": {
"filterName": "Workflow Name",
"searchName": "Search workflow name",
"columnWorkflow": "Workflow",
"noDescription": "No description provided",
"columnStatus": "Status",
"published": "Published",
"draft": "Draft",
"currentVersion": "Current Version",
"publishedVersion": "Published #{version}",
"versionHistory": "Version History",
"usage": "Usage",
"editTitle": "Edit Workflow",
"createTitle": "New Workflow",
"refresh": "Refresh",
"create": "Create Workflow",
"query": "Search",
"loading": "Loading workflows...",
"empty": "No workflows yet",
"actions": "Actions",
"edit": "Edit",
"delete": "Delete",
"processing": "Processing...",
"moreActions": "More actions for {name}",
"loadFailed": "Failed to load workflows",
"saveFailed": "Failed to save workflow",
"deleteFailed": "Failed to delete workflow",
"created": "Workflow created: {name}",
"updated": "Workflow updated: {name}",
"deleted": "Workflow deleted: {name}",
"nameRequired": "Please enter a workflow name",
"nameSaved": "Name saved",
"descriptionSaved": "Description saved",
"savedSuccess": "Saved successfully",
"saveFirst": "Please save first",
"publishedVersionSuccess": "Published v{version}",
"publishFailed": "Publish failed",
"nameLabel": "Workflow Name",
"loadingNodeCapabilities": "Loading node capabilities...",
"nodeStart": "Start",
"nodeEnd": "End",
"usageTitle": "Usage",
"loadingUsage": "Loading usage...",
"fixedBoundVersion": "Bound to v{version}",
"enabledStatus": "Enabled",
"disabledStatus": "Disabled",
"notUsedByAnyAgent": "Not used by any AI Agent yet",
"versionsTitle": "Version History",
"loadingVersions": "Loading version history...",
"publisher": "Publisher: {name}",
"restoring": "Restoring...",
"restoreToDraft": "Restore as Draft",
"restoredDraftSuccess": "Restored v{version} as draft",
"restoreFailed": "Failed to restore version",
"noVersionsYet": "No published versions yet",
"editorTitle": "FlowGram Workflow Editor",
"loadDetailFailed": "Failed to load execution audit details",
"executedCount": "Executed {count}",
"errorStatus": "Error",
"nodeTraceTitle": "Node Trace",
"nodeTraceHint": "Click to inspect inputs, outputs, and errors",
"noNodeRuns": "No node execution records yet.",
"inputTitle": "Input",
"outputTitle": "Output",
"noneValue": "None"
},
"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.",
"refresh": "Refresh",
"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",
"linkedTeam": "Support Team",
"selectTeam": "Select support team",
"searchTeam": "Search teams...",
"emptyTeam": "No matching support teams",
"noTeamsAvailable": "Please create a support team in the sidebar first.",
"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",
"createTeamAction": "Create Team",
"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",
"currentStatus": "Current Status",
"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.",
"statusChangeConfirmTitle": "Confirm Status Change",
"statusChangeConfirmDescription": "Change ticket status from \"{from}\" to \"{to}\"?",
"statusChangeConfirm": "Confirm Change",
"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...",
"processing": "Working...",
"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",
"searchStatus": "Search statuses",
"emptyStatus": "No matching statuses",
"query": "Search",
"status": "Status",
"updatedAt": "Last Updated",
"actions": "Actions",
"loadingRows": "Loading skills...",
"emptyRows": "No matching skills",
"nameRequired": "Enter a skill name.",
"instructionRequired": "Enter skill instructions.",
"editTitle": "Edit",
"createTitle": "New",
"cancel": "Cancel",
"saving": "Saving...",
"save": "Save",
"create": "Create",
"loading": "Loading...",
"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",
"traceData": "Trace Data",
"resumeTraceData": "Resume Trace 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 capability calls and reply inside the Agent Loop.",
"debugSummary": "Debug Summary",
"interrupted": "Interrupted",
"notInterrupted": "Not interrupted",
"skillName": "Skill Name",
"none": "None",
"errorMessage": "Error Message",
"toolView": "Tool View",
"skillToolWhitelist": "Skill Tool Allowlist",
"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"
},
"knowledge": {
"document": "Documents",
"faq": "FAQ",
"retrieveLogs": "Retrieval Logs",
"expandList": "Expand knowledge base list",
"collapseList": "Collapse knowledge base list",
"resizeList": "Resize 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",
"columnBase": "Knowledge base",
"columnType": "Type",
"columnContent": "Items",
"columnStatus": "Status",
"columnUpdatedAt": "Last updated",
"columnActions": "Actions",
"sortHandle": "Drag to reorder",
"processing": "Processing...",
"noDescription": "No description",
"refreshBases": "Refresh knowledge bases",
"backToList": "Back to knowledge bases",
"baseNotFound": "This knowledge base was not found or has been deleted.",
"loadBaseFailed": "Could not load the knowledge base.",
"allStatus": "All statuses",
"status": "Status",
"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.",
"loadDirectoriesFailed": "Could not load directories.",
"directoryCreated": "Directory created: {name}",
"directoryUpdated": "Directory updated: {name}",
"directoryDeleted": "Directory deleted: {name}",
"directorySaveFailed": "Could not save the directory.",
"directoryDeleteFailed": "Could not delete the directory.",
"directoryMoved": "Directory moved.",
"directoryMoveFailed": "Could not move directory.",
"directorySortUpdated": "Directory order updated.",
"directorySortUpdateFailed": "Could not update directory order.",
"directoryNameRequired": "Directory name is required.",
"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}",
"view": "View",
"edit": "Edit",
"rebuilding": "Rebuilding...",
"rebuildIndex": "Rebuild Index",
"deleting": "Deleting...",
"delete": "Delete",
"move": "Move",
"moving": "Moving...",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection",
"selectCurrentPage": "Select current page",
"selectItem": "Select {name}",
"batchMove": "Move selected",
"batchMoveDescription": "Move {count} selected items to a directory.",
"batchMoved": "{count} items moved.",
"batchMoveFailed": "Could not move selected items.",
"batchDelete": "Delete selected",
"batchDeleteConfirm": "Delete {count} selected items? This cannot be undone.",
"batchDeleted": "{count} items deleted.",
"batchDeleteFailed": "Could not delete selected items.",
"targetDirectory": "Target directory",
"directory": "Directory",
"resizeDirectoryPanel": "Resize directory panel",
"allContent": "All content",
"rootContent": "Root content",
"rootDirectory": "Root directory",
"parentDirectory": "Parent directory",
"createDirectory": "New directory",
"createSubDirectory": "New subdirectory",
"editDirectory": "Edit directory",
"expandDirectory": "Expand directory",
"collapseDirectory": "Collapse directory",
"selectDirectory": "Select directory",
"searchDirectory": "Search directories",
"emptyDirectory": "No matching directories",
"directoryName": "Directory name",
"directoryNamePlaceholder": "Enter directory name",
"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",
"viewDocumentTitle": "View Document",
"documentTitle": "Title",
"documentTitlePlaceholder": "Document title",
"content": "Content",
"contentPlaceholder": "Enter document content",
"loadFAQFailed": "Could not load FAQs.",
"loadingFAQ": "Loading 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",
"indexedAtLabel": "Indexed At",
"similarQuestions": "Similar Questions",
"updatedAt": "Updated",
"createUser": "Created By",
"updateUser": "Updated By",
"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",
"viewFAQTitle": "View FAQ",
"standardQuestion": "Primary Question",
"questionPlaceholder": "Enter the primary question",
"answer": "Answer",
"answerPlaceholder": "Enter the FAQ answer",
"similarQuestionsPlaceholder": "One similar question per line",
"importRowFailed": "Row {row}: {message}",
"importFailed": "Import failed.",
"importFAQTitle": "Import FAQ",
"importFAQDescription": "Upload an Excel file to import FAQs in bulk. Required columns: primary question and answer. Put one similar question per line in the same cell.",
"downloadTemplate": "Download Template",
"downloadTemplateFailed": "Could not download the template.",
"importing": "Importing...",
"startImport": "Start Import",
"importFile": "Import File",
"chooseFile": "Choose File",
"importFileDescription": "Only .xlsx files are supported.",
"currentFile": "Current file: {name}",
"importHint": "Import Notes",
"importXlsxHint": "The template columns are primary question, answer, similar questions, and remark. Put one similar question per line inside the cell.",
"importXlsxOnly": "Only .xlsx files are supported.",
"importMode": "Import Mode",
"selectImportMode": "Select import mode",
"searchImportMode": "Search import mode",
"emptyImportMode": "No import modes found",
"importModeAppend": "Append Import",
"importModeOverwrite": "Overwrite Import",
"importModeAppendDescription": "Only creates primary questions that do not already exist. Existing primary questions are skipped.",
"importModeOverwriteDescription": "Matches by primary question and updates existing FAQs. Missing primary questions are created.",
"importResult": "Import Result",
"importTotal": "Total",
"importCreated": "Created",
"importUpdated": "Updated",
"importSkipped": "Skipped",
"importFailedCount": "Failed",
"importFAQResultToast": "Created {created}, updated {updated}, skipped {skipped}, failed {failed}",
"exportFAQ": "Export FAQ",
"exportFAQSuccess": "FAQ export download started.",
"exportFAQFailed": "Could not export FAQs.",
"none": "None",
"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",
"sync": "Sync Permissions",
"syncing": "Syncing...",
"syncTitle": "Sync Built-in Permissions",
"syncDescription": "Sync built-in permissions from code and add missing permissions to built-in roles. Existing role permissions will not be removed.",
"syncSuccess": "Permissions synced: {created} created, {updated} updated, {rolePermissionsAdded} role permissions added",
"syncFailed": "Could not sync permissions.",
"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"
},
"workflowRun": {
"allStatus": "All statuses",
"completed": "Completed",
"interrupted": "Interrupted",
"failed": "Failed",
"allAgents": "All agents",
"loadAgentsFailed": "Could not load AI agents.",
"loadDetailFailed": "Could not load execution details.",
"loadConversationFailed": "Could not load conversation details.",
"conversationId": "Conversation ID",
"messageId": "Message ID",
"workflowVersionId": "Workflow Version ID",
"agent": "Agent",
"searchAgent": "Search agents",
"emptyAgent": "No agents found",
"status": "Status",
"startedAt": "Started At",
"endedAt": "Ended At",
"workflow": "Workflow",
"version": "Version",
"message": "Message",
"conversationShort": "Conversation #{id}",
"messageShort": "Message #{id}",
"duration": "Duration",
"error": "Error",
"refresh": "Refresh",
"query": "Search",
"loading": "Loading workflow runs",
"empty": "No workflow runs yet",
"loadFailed": "Could not load workflow runs.",
"detailTitle": "Execution Details",
"detailDescription": "Inspect workflow execution path",
"close": "Close",
"loadingDetail": "Loading execution details...",
"interruptNode": "Interrupt Node",
"nodeDetails": "Node Run Details",
"emptyNodes": "No node execution records",
"notFound": "Workflow run not found",
"input": "Input",
"output": "Output",
"recordsTitle": "AI Execution Logs",
"loadingLogs": "Loading execution logs...",
"emptyLogs": "No AI execution logs",
"description": "Workflow Execution Trace",
"emptyDetail": "Execution record not found.",
"loadLogsFailed": "Failed to load AI execution logs",
"labelConversation": "Conversation",
"labelMessage": "Message",
"labelAgent": "Agent",
"labelStatus": "Status",
"labelStartedAt": "Started At",
"labelEndedAt": "Ended At",
"labelInterruptNode": "Interrupt Node",
"labelWorkflow": "Workflow",
"viewDetails": "Execution Details"
},
"agentRun": {
"conversation": "Conversation",
"agent": "Agent",
"engine": "Engine",
"status": "Status",
"startedAt": "Started",
"duration": "Duration",
"tokens": "Input/Output Tokens",
"error": "Error",
"refresh": "Refresh",
"query": "Query",
"loading": "Loading agent runs",
"empty": "No agent runs",
"loadFailed": "Failed to load agent runs",
"loadDetailFailed": "Failed to load agent run detail",
"detailTitle": "Agent Run Detail",
"detailDescription": "View the unified run audit",
"loadingDetail": "Loading agent run detail",
"close": "Close",
"revision": "Revision",
"trace": "Trace",
"steps": "Steps",
"emptySteps": "No steps recorded",
"toolCalls": "Tool Calls",
"emptyToolCalls": "No tool calls recorded",
"input": "Input Preview",
"output": "Output Preview",
"arguments": "Arguments Preview",
"result": "Result Preview",
"notFound": "Agent run not found",
"metricCompletionRate": "Completion Rate",
"metricResolutionRate": "Resolution Rate",
"metricUnsupportedRate": "No Evidence Rate",
"metricToolSuccessRate": "Tool Success Rate",
"metricAvgSteps": "Average Steps",
"metricP95Latency": "P95 Latency",
"metricToken": "Token Usage",
"metricHandoffRate": "Human Handoff Rate",
"metricFallbackRate": "Knowledge Fallback Rate",
"metricInterruptRecoveryRate": "Interrupt Recovery Rate",
"qualityTitle": "Run Quality Inspection",
"qualityDescription": "Resolution and unsupported rates are calculated from inspected runs only.",
"selectResolution": "Select resolution status",
"selectEvidence": "Select evidence status",
"qualityCommentPlaceholder": "Inspection notes...",
"saveQuality": "Save Inspection",
"qualitySaved": "Inspection result saved",
"workflowAudit": "Workflow Node Audit",
"viewWorkflowAudit": "View Node Audit"
},
"agentActivity": {
"thinking": "AI Agent is thinking...",
"searchingKnowledge": "Searching knowledge base...",
"callingTool": "Executing action: {name}...",
"runningWorkflow": "Running workflow: {name}...",
"default": "AI Agent is working on your request...",
"customerThinking": "AI agent is thinking...",
"customerSearching": "Searching for information...",
"customerProcessing": "AI agent is preparing a response...",
"customerDefault": "AI agent is preparing a response...",
"toolAnalyzeConversation": "Analyze conversation",
"toolTriageServiceRequest": "Triage service request",
"toolCreateTicket": "Create ticket",
"toolHandoff": "Human handoff"
},
"wxworkOutbox": {
"statusFailed": "Failed",
"statusIgnored": "Ignored",
"statusAll": "All",
"retrySuccess": "Re-queued message for sending",
"ignoreSuccess": "Ignored failed record",
"actionFailed": "Action failed",
"retry": "Retry",
"ignore": "Ignore",
"columnStatus": "Status",
"conversationId": "Conversation ID",
"messageId": "Message ID",
"columnMessage": "Message",
"conversationLine": "Chat #{id}",
"messageLine": "Message #{id}",
"columnRetry": "Retries",
"retriesCount": "{count} times",
"nextRetry": "Next: {time}",
"columnError": "Failure Reason",
"columnUpdatedAt": "Updated At",
"columnActions": "Actions",
"refresh": "Refresh",
"query": "Search",
"loading": "Loading outbox messages...",
"empty": "No failed outbox messages",
"loadFailed": "Failed to load outbox messages"
},
"supportPublic": {
"brand": "AgentDesk Support",
"nav": {
"home": "Home",
"help": "Help",
"questions": "FAQ",
"login": "Log In",
"community": "Community",
"siteNavigation": "Site navigation"
},
"home": {
"badge": "Support Center",
"title": "Docs, community answers, and live support in one place.",
"description": "Capture recurring questions like a community and organize guidance like a docs site. Search first, then contact support when needed.",
"searchPlaceholder": "Search help pages or questions",
"helpTitle": "Help Center",
"helpDescription": "Official guides, deployment notes, and troubleshooting.",
"questionsTitle": "FAQ Community",
"questionsDescription": "Browse questions, then log in to ask or answer.",
"chatTitle": "Live Support",
"chatDescription": "Open a support conversation when self-service is not enough.",
"quickPanelTitle": "Quick Links",
"quickPanelDescription": "Continue by task",
"unsolvedQuestions": "View unsolved questions",
"browseDocs": "Browse help docs",
"askQuestion": "Ask a question",
"recommendedPages": "Recommended Pages",
"hotQuestions": "Popular Questions",
"postsTitle": "Community Q&A",
"postsDescription": "See what other users asked and answered."
},
"help": {
"title": "Help Center",
"description": "Read official guides, deployment notes, and troubleshooting docs.",
"searchPlaceholder": "Search help docs",
"openPage": "Open help page",
"childPages": "Pages in this section",
"navigation": "Documentation",
"toc": "On this page",
"noToc": "No sections",
"updatedAt": "Updated {date}",
"feedbackTitle": "Was this page helpful?",
"feedbackDescription": "Your feedback helps us improve the documentation.",
"copyCode": "Copy code",
"mermaidDiagram": "Documentation diagram",
"mermaidPreview": "Enlarge diagram",
"mermaidLoading": "Rendering diagram...",
"mermaidError": "The diagram syntax is invalid and cannot be displayed.",
"previous": "Previous",
"next": "Next"
},
"questions": {
"title": "FAQ Community",
"description": "Signed-in users can ask, answer, vote, and accept best answers.",
"categoryNavigation": "Question categories",
"moreCategories": "More categories",
"more": "More",
"categoriesFailed": "Could not load categories. Click to retry.",
"searchPlaceholder": "Search question titles",
"detailTitle": "Question Detail",
"answers": "Answers",
"votes": "Votes",
"views": "Views",
"askedBy": "Asked by {name}",
"updatedAt": "Updated {date}"
},
"ask": {
"title": "Ask a Question",
"description": "Sign in to submit a question. Community members and support agents can answer.",
"formTitle": "Publish a question",
"category": "Category",
"categoryPlaceholder": "Select category",
"categorySearch": "Search categories",
"categoryEmpty": "No categories",
"categoriesFailed": "Could not load categories. Click to retry.",
"categoryRequired": "Select a category",
"questionTitle": "Question title",
"questionTitlePlaceholder": "Describe the question in one sentence",
"titleRequired": "Enter a question title",
"content": "Details",
"contentPlaceholder": "Describe the issue, environment, and what you have already tried",
"contentRequired": "Add the question details",
"tags": "Tags",
"tagsPlaceholder": "Separate tags with commas"
},
"answer": {
"title": "Submit Answer",
"placeholder": "Write your answer",
"best": "Best Answer"
},
"login": {
"title": "Log In to Support",
"description": "Log in to ask, answer, vote, and accept best answers.",
"name": "Name",
"namePlaceholder": "Enter your name",
"email": "Email",
"emailPlaceholder": "Enter your email",
"password": "Password",
"passwordPlaceholder": "At least 8 characters",
"loginAction": "Log In",
"registerAction": "Register and Log In",
"switchToRegister": "No account? Register",
"switchToLogin": "Already have an account? Log in",
"account": "Account",
"accountPlaceholder": "Enter your account",
"noMethodsDescription": "No sign-in method has been configured yet. Please try again later.",
"noMethodsTitle": "No sign-in method available",
"welcomeBack": "Welcome back"
},
"account": {
"loading": "Loading sign-in status",
"openMenu": "Open account menu",
"signOut": "Sign out",
"signingOut": "Signing out...",
"profile": "Profile",
"editProfile": "Edit profile"
},
"actions": {
"search": "Search",
"viewAll": "View all",
"helpful": "Helpful",
"notHelpful": "Not helpful",
"openStandalone": "Open separately",
"askQuestion": "Ask Question",
"publishQuestion": "Publish Question",
"publishAnswer": "Publish Answer",
"publishing": "Publishing...",
"processing": "Processing...",
"accept": "Accept",
"retry": "Retry",
"loadMore": "Load more",
"viewDiscussion": "View discussion",
"answerQuestion": "Answer",
"cancel": "Cancel",
"copyLink": "Copy link",
"createPost": "New post",
"delete": "Delete",
"edit": "Edit",
"noMore": "No more",
"publishComment": "Post comment",
"publishPost": "Publish post",
"publishReply": "Post reply",
"reply": "Reply",
"report": "Report",
"save": "Save",
"viewReplies": "View replies"
},
"status": {
"all": "All",
"normal": "Unsolved",
"resolved": "Resolved",
"closed": "Closed"
},
"common": {
"allCategories": "All categories",
"uncategorized": "Uncategorized",
"user": "User"
},
"empty": {
"noPages": "No published pages yet",
"noQuestions": "No community questions yet",
"noPagesMatched": "No pages found",
"pageNotFound": "This page does not exist, is not published, or has been withdrawn",
"pagesFailed": "Could not load the documentation. Try again later.",
"noQuestionsMatched": "No questions found",
"questionsFailed": "Could not load questions. Try again later.",
"noAnswers": "No answers yet",
"selectPage": "Select a page on the left",
"noComments": "No comments yet",
"noPostsMatched": "No posts found",
"postsFailed": "Could not load posts. Try again later."
},
"loading": {
"categories": "Loading categories…",
"navigation": "Loading documentation...",
"page": "Loading page...",
"question": "Loading question...",
"questions": "Loading questions...",
"session": "Checking sign-in status...",
"comments": "Loading comments...",
"post": "Loading post...",
"posts": "Loading posts..."
},
"toast": {
"feedbackSaved": "Thanks for the feedback",
"codeCopied": "Code copied",
"answerCreated": "Answer published",
"questionCreated": "Question published",
"loggedIn": "Logged in",
"commentCreated": "Comment published",
"commentDeleted": "Comment deleted",
"commentReported": "Comment reported",
"commentUpdated": "Comment updated",
"linkCopied": "Link copied",
"postCreated": "Post published",
"profileUpdated": "Profile updated",
"replyCreated": "Reply published"
},
"a11y": {
"openNavigation": "Open documentation navigation",
"closeNavigation": "Close documentation navigation",
"collapse": "Collapse child pages",
"expand": "Expand child pages",
"openMenu": "Open menu",
"closeMenu": "Close menu"
},
"comment": {
"accepted": "Accepted",
"authorBadge": "Author",
"count": "{count} comments",
"deleteConfirm": "Delete this comment?",
"deleted": "Comment deleted",
"placeholder": "Write your comment...",
"replyPlaceholder": "Write your reply...",
"sort": {
"default": "Default",
"hot": "Hot",
"latest": "Latest"
},
"title": "Comments"
},
"createPost": {
"categoriesFailed": "Could not load categories. Click to retry.",
"category": "Category",
"categoryRequired": "Select a category",
"content": "Details",
"contentPlaceholder": "Describe your question or share what you know",
"contentRequired": "Add the post details",
"formTitle": "Publish a post",
"postTitle": "Title",
"postTitlePlaceholder": "Summarize your topic in one sentence",
"tags": "Tags",
"tagsPlaceholder": "Separate tags with commas",
"titleRequired": "Enter a title"
},
"posts": {
"categoriesFailed": "Could not load categories. Click to retry.",
"categoryNavigation": "Post categories",
"comments": "Comments",
"createdBy": "Posted by {name}",
"likes": "Likes",
"title": "Posts",
"updatedAt": "Updated {date}",
"views": "Views"
},
"profile": {
"avatar": "Avatar",
"avatarPlaceholder": "Upload avatar",
"communityDescription": "Review the posts you published in the community.",
"communityTitle": "Community activity",
"edit": "Edit profile",
"editDescription": "Update your avatar, nickname, and email.",
"editTitle": "Edit profile",
"email": "Email",
"emailPlaceholder": "Enter your email",
"emailUnset": "Not set",
"nickname": "Nickname",
"nicknamePlaceholder": "Enter your nickname",
"nicknameRequired": "Enter a nickname",
"noPosts": "You have not published any posts yet",
"username": "Username"
}
},
"nav": {
"overview": "Overview",
"setupWizard": "Setup & Diagnostics",
"receptionCenter": "Support Desk",
"conversations": "Conversations",
"tickets": "Tickets",
"conversationMonitor": "Conversation Monitor",
"customers": "Customers",
"companies": "Companies",
"agentConfig": "Support Setup",
"tags": "Tags",
"quickReplies": "Quick Replies",
"agents": "Human Agents",
"agentTeamSchedules": "Team Schedules",
"channels": "Channels",
"wxworkOutbox": "WeCom Outbox",
"aiCapabilities": "AI Capabilities",
"knowledge": "Knowledge Base",
"support": "Support Center",
"supportCenter": "Support Center",
"supportHelp": "Help Center",
"supportFaq": "FAQ Community",
"supportFaqCategories": "FAQ Categories",
"aiConfigs": "Model Settings",
"aiAgents": "Agents",
"aiWorkflows": "AI Workflows",
"workflowRuns": "Workflow Audit",
"workflows": "Workflows",
"agentRuns": "Agent Audit",
"skillDefinition": "Skills",
"mcp": "MCP tools",
"system": "System",
"users": "Users",
"roles": "Roles",
"permissions": "Permissions",
"dashboardHome": "Dashboard",
"notifications": "Notifications",
"preferences": "Preferences",
"changePassword": "Change Password",
"signOut": "Sign Out",
"supportDocs": "Help Center",
"supportCommunity": "Community Q&A",
"supportCommunityCategories": "Community Categories",
"supportConfig": "Support Configuration"
},
"workspace": {
"dashboard": "Admin Dashboard",
"workbench": "Support Workbench",
"switchWorkspace": "Switch workspace"
},
"theme": {
"toggle": "Change theme",
"light": "Light",
"dark": "Dark",
"system": "System"
},
"palette": {
"toggle": "Change accent color",
"plain": "Default",
"green": "Service Green",
"gray": "Neutral Gray",
"blue": "Clear Blue"
},
"supportCommunityCategory": {
"allStatuses": "All statuses",
"enabled": "Enabled",
"disabled": "Disabled",
"name": "Category name",
"searchName": "Search category names",
"noDescription": "No description",
"status": "Status",
"confirmDeleteTitle": "Delete community category?",
"confirmDeleteDescription": "Delete \"{name}\"? Categories used by posts cannot be deleted.",
"delete": "Delete",
"sortUpdated": "community category order updated.",
"sortUpdateFailed": "Could not update the order.",
"dragSort": "Drag to reorder {name}",
"create": "Create",
"save": "Save",
"saving": "Saving...",
"cancel": "Cancel",
"loadingDetail": "Loading details...",
"required": "This field is required.",
"invalidNumber": "Enter a valid number.",
"minValue": "Must be at least {min}",
"maxValue": "Must be no more than {max}",
"namePlaceholder": "Enter a category name",
"slugPlaceholder": "Example: account-security",
"slugPatternMessage": "Use letters, numbers, and hyphens (-) only.",
"description": "Description",
"descriptionPlaceholder": "Describe the posts this category covers",
"remark": "Notes",
"remarkPlaceholder": "Visible to dashboard users only",
"createTitle": "New community Category",
"editTitle": "Edit community Category",
"refresh": "Refresh",
"new": "New category",
"query": "Search",
"loading": "Loading categories...",
"empty": "No community categories yet",
"actions": "Actions",
"edit": "Edit",
"processing": "Processing...",
"moreActions": "More actions for {name}",
"loadFailed": "Could not load categories.",
"saveFailed": "Could not save the category.",
"deleteFailed": "Could not delete the category.",
"created": "Category created: {name}",
"updated": "Category updated: {name}",
"deleted": "Category deleted: {name}"
},
"supportConfig": {
"actions": "Actions",
"description": "Configure navigation, entry points, and display options for the support center portal.",
"loadFailed": "Failed to load the navigation configuration.",
"loading": "Loading navigation configuration...",
"refresh": "Refresh",
"save": "Save",
"saveFailed": "Failed to save the navigation configuration.",
"saving": "Saving...",
"title": "Support Center Configuration",
"navigationTitle": "Navigation Menu",
"navigationDescription": "Menu items shown in the support center header and on mobile.",
"addNavigation": "Add navigation item",
"sort": "Sort",
"menuTitle": "Menu Title",
"menuURL": "Menu URL",
"target": "Open In",
"visible": "Visible",
"emptyNavigation": "No navigation items yet",
"saved": "Configuration saved",
"validationFailed": "Configuration validation failed",
"titlePlaceholder": "Enter a menu title",
"untitled": "Untitled menu item",
"targetSelf": "Same window",
"targetBlank": "New window",
"openURL": "Open link",
"confirmDelete": "Delete the menu item \"{title}\"?",
"deleteNavigation": "Delete menu item {title}",
"dragNavigation": "Drag menu item {title} to reorder",
"toggleNavigation": "Toggle visibility of menu item {title}"
},
"dashboard": {
"sidebar": {
"navSection": "Navigation"
}
},
"docs": {
"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."
},
"supportCommunityAdmin": {
"postStatusUpdated": "Post status updated.",
"allStatuses": "All statuses",
"statusPending": "Pending",
"statusNormal": "Normal",
"statusResolved": "Resolved",
"statusClosed": "Closed",
"statusHidden": "Hidden",
"allCategories": "All categories",
"uncategorized": "Uncategorized",
"refresh": "Refresh",
"defaultUser": "User",
"commentCount": "{count} comments",
"noMatchingPosts": "No matching posts found",
"loadingPosts": "Loading posts...",
"moderateDialogTitle": "Moderate Post",
"likesAndViews": "{likes} likes · {views} views",
"restoreNormalAction": "Restore",
"closePostAction": "Close Post",
"hidePostAction": "Hide Post",
"commentsTitle": "Comments ({count})",
"acceptedBadge": "Accepted",
"acceptAnswerAction": "Accept as answer",
"commentPlaceholder": "Write a support comment...",
"publishCommentAction": "Post comment",
"commentSuccess": "Comment posted."
},
"systemConfig": {
"branding": {
"companyName": {
"title": "Platform name",
"description": "Shown in the portal header, the dashboard and page titles."
},
"companyLogoUrl": {
"title": "Platform logo",
"description": "Leave empty to keep the bundled logo."
}
}
},
"aiCopilot": {
"suggestReply": "AI Suggest",
"generating": "Generating reply...",
"insertReply": "Use this reply",
"discardReply": "Dismiss",
"summarize": "AI Summary",
"summarizing": "Summarizing...",
"summaryTitle": "Conversation Summary",
"noSummary": "No summary available yet",
"errorGenerating": "Failed to generate AI suggestion",
"copy": "Copy",
"copied": "Copied",
"summaryGenerated": "Summary generated successfully"
},
"setupWizard": {
"title": "Step-by-Step Setup & Operator Routing Diagnostics",
"description": "Verify every stage of the customer-to-operator routing chain, fix blockers in one click, and simulate live conversation dispatch.",
"statusReady": "Ready to Receive Requests",
"statusNeedsSetup": "Setup Incomplete ({ready}/{total} steps ready)",
"stepsProgress": "{ready} of {total} steps ready",
"quickSetupAll": "Review missing defaults",
"quickSetupRunning": "Preparing preview...",
"quickFixSuccess": "Configuration updated and routing re-checked",
"refresh": "Re-check Readiness",
"openSettings": "Open Settings",
"openSetupWizard": "Step-by-Step Setup",
"stepBadgeOk": "Ready",
"stepBadgeWarning": "Warning",
"stepBadgeError": "Not Ready",
"readyCountLabel": "{ready} / {total} ready",
"currentOperatorTitle": "My Operator Reception Status",
"currentOperatorReady": "You are online and ready to receive customer chats right now.",
"currentOperatorBlocked": "Customer requests cannot reach you right now:",
"currentOperatorLoad": "Active chats: {active} / {max}",
"currentOperatorTeam": "Team: {team}",
"currentOperatorNoTeam": "Not assigned",
"enableMyReceptionBtn": "Enable My Reception in 1 Click",
"checklistSectionTitle": "6-Step Routing Chain Checklist",
"steps": {
"teams": {
"title": "Operator Teams",
"description": "At least one active operator team is required to group agents and define shift schedules."
},
"schedules": {
"title": "Shift Schedules (Active Now)",
"description": "Teams require an active schedule covering the current time; off-hours requests stay in queue."
},
"operators": {
"title": "Operator Profiles & Capacity",
"description": "Operators must have an enabled profile, belong to an active team, have auto-assign on, be idle, and have free capacity."
},
"ai_agents": {
"title": "AI Agents & Human Handoff",
"description": "The AI agent must allow human handoff (AIFirst with auto-handoff or HumanOnly) and be linked to active teams."
},
"channels": {
"title": "Inbound Customer Channels",
"description": "At least one active channel (Web, API, WeCom) must route to an active AI agent with rollout > 0%."
},
"end_to_end": {
"title": "End-to-End Routing Path",
"description": "Verifies that an incoming message from a channel can traverse the entire chain and reach a live operator right now."
}
},
"issues": {
"no_active_team": "No active operator teams found. At least one team is required.",
"team_no_schedule_configured": "Team has no shift schedule configured.",
"team_off_hours_now": "Team is currently off-hours (no shift schedule active right now).",
"no_operator_profile": "No operator profiles exist. Operators cannot be assigned.",
"operator_profile_disabled": "Operator profile is disabled.",
"operator_user_disabled": "Operator user account is disabled or deleted.",
"operator_no_active_team": "Operator is not assigned to an active team.",
"operator_auto_assign_off": "Operator has auto-assign disabled.",
"operator_busy": "Operator is currently set to Busy.",
"operator_at_capacity": "Operator is at full concurrent conversation capacity.",
"no_active_ai_agent": "No active AI agents found.",
"agent_ai_only_mode": "AI agent is set to AI-Only mode and cannot hand off to human operators.",
"agent_no_teams": "AI agent has no active teams assigned for human handoff.",
"agent_auto_handoff_disabled": "AI agent has automatic handoff on failure disabled.",
"no_active_channel": "No active customer channels found.",
"channel_no_agent": "Channel is not connected to an AI agent.",
"channel_agent_disabled": "Channel points to a disabled or missing AI agent.",
"channel_zero_rollout": "Channel has a 0% AI agent rollout rate.",
"no_end_to_end_path": "No channel can successfully route to an available human operator right now.",
"agent_unpublished": "The agent has no published revision. Publish it in agent settings before using it for a channel.",
"channel_agent_unpublished": "The channel points to an unpublished agent. Publish the agent or deliberately choose a published one."
},
"operatorBlockers": {
"not_authenticated": "You are not signed in.",
"missing_profile": "No operator profile created for your account.",
"profile_disabled": "Your operator profile is disabled.",
"no_team": "You are not assigned to an active operator team.",
"team_off_hours": "Your team is currently off-hours (no active shift schedule).",
"auto_assign_disabled": "Automatic conversation assignment is disabled for your profile.",
"status_busy": "Your status is set to Busy.",
"at_capacity": "You have reached your maximum active conversation limit."
},
"quickFixLabels": {
"quick_setup_all": "Review missing defaults",
"ensure_team_and_schedule": "Review team setup",
"enable_my_operator_profile": "Enable My Reception & Set Idle",
"fix_ai_agent_handoff": "Fix AI Agent Handoff & Bind Teams",
"ensure_default_channel": "Create/Fix Default Web Channel"
},
"simulator": {
"title": "Operator Route Simulator",
"description": "Read-only check of current human-only routing eligibility. AI behavior and partial rollout are not simulated, and no message is sent.",
"selectChannelPlaceholder": "Select a channel to simulate...",
"runSimulation": "Simulate Dispatch",
"running": "Simulating...",
"outcomeSuccess": "Eligible operator now: {operator}",
"outcomeBlocked": "Operator delivery not confirmed",
"outcomes": {
"assigned_to_operator": "Human-only routing currently has an eligible operator. This is a read-only check, not a delivery guarantee.",
"blocked_no_channel": "Blocked: No channels exist or the requested channel was not found.",
"blocked_channel_disabled": "Blocked: This channel is disabled.",
"blocked_zero_rollout": "Blocked: Channel AI agent rollout rate is set to 0%.",
"blocked_missing_ai_agent": "Blocked: The AI agent bound to this channel is missing or disabled.",
"blocked_ai_only_mode": "Blocked: AI agent is set to AI-Only mode and never hands off to human operators.",
"blocked_agent_no_teams": "Blocked: AI agent has no valid operator teams assigned for handoff.",
"queued_off_hours_no_schedule": "Queued: Target teams have no active shift schedule right now (Off-Hours).",
"queued_no_eligible_operator": "Queued: Shift is active, but no idle operators with available capacity are online.",
"ai_execution_not_simulated": "AI behavior is not simulated; operator delivery is unverified.",
"partial_rollout_not_simulated": "Partial rollout is not simulated; operator delivery is unverified.",
"blocked_agent_unpublished": "Operator routing is not verified for an unpublished agent. Publish the agent first."
},
"hops": {
"channel": "Channel",
"ai_agent": "AI Agent",
"teams": "Target Teams",
"schedules": "Shift Schedule",
"operators": "Operator Dispatch"
},
"hopReasons": {
"ok": "Node is configured and ready",
"ok_human_only": "Human-Only reception: directly passes through to operators",
"ok_ai_first_handoff": "AI-First reception: customer can request human or auto-handoff triggers",
"warning_auto_handoff_off": "AI-First mode active, but auto-handoff on failure is disabled",
"blocked_no_channel": "No channels found",
"blocked_channel_disabled": "Channel is disabled",
"blocked_zero_rollout": "Channel rollout is set to 0%",
"blocked_missing_ai_agent": "AI agent is missing or disabled",
"blocked_ai_only_mode": "AI agent is configured as AI-Only (human routing blocked)",
"blocked_agent_no_teams": "No active teams assigned to this agent",
"queued_off_hours_no_schedule": "No active shift schedule covers the current time (Off-Hours)",
"queued_no_eligible_operator": "No idle operators with available capacity in active teams",
"assigned_to_operator": "Assigned to eligible operator",
"ai_execution_not_simulated": "AI behavior is not simulated; operator delivery is unverified.",
"partial_rollout_not_simulated": "Partial rollout is not simulated; operator delivery is unverified.",
"blocked_agent_unpublished": "Operator routing is not verified for an unpublished agent. Publish the agent first."
},
"candidateTableTitle": "Evaluated Operator Candidates",
"colOperator": "Operator",
"colTeam": "Team",
"colStatus": "Status",
"colAutoAssign": "Auto Assign",
"colLoad": "Active Load",
"colResult": "Dispatch Result",
"statusIdle": "Idle",
"statusBusy": "Busy",
"eligibleBadge": "Eligible",
"skipReasons": {
"profile_disabled": "Profile disabled",
"user_disabled": "User account disabled",
"team_not_in_agent": "Team not in agent scope",
"team_off_hours": "Team off-hours",
"auto_assign_off": "Auto-assign disabled",
"status_busy": "Status is Busy",
"at_capacity": "At maximum capacity"
}
},
"banner": {
"title": "Operator Routing Setup Incomplete",
"description": "Customer messages cannot currently reach human operators until all routing steps are ready."
},
"headerIndicator": {
"readyLabel": "Ready for Chats",
"blockedLabel": "Routing Blocked ({count})"
},
"preview": {
"review": "Review setup changes",
"title": "Review exact changes before applying",
"description": "Only the named records and fields below will change. No shifts are added. Unlisted configurations and rollout percentages remain unchanged. Applying may dispatch pending conversations after the changes commit.",
"noChanges": "No safe automatic changes are available. Use the relevant settings to choose a team, route or working hours.",
"apply": "Apply reviewed changes",
"create": "Create",
"update": "Update",
"notApplied": "The reviewed changes were not applied.",
"manageSchedules": "Manage explicit working hours"
},
"repairFields": {
"name": "Name",
"leader_user_id": "Team leader ID",
"status": "Enabled status (0 enabled, 1 disabled)",
"user_id": "User ID",
"team_id": "Team ID / new team name",
"team_ids": "Routing teams",
"service_status": "Availability (0 idle, 1 busy)",
"auto_assign_enabled": "Automatic assignment",
"max_concurrent_count": "Concurrent conversation limit",
"priority_level": "Assignment priority",
"receive_offline_message": "Receive offline messages",
"service_mode": "Service mode (1 AI only, 2 human only, 3 AI first)",
"rollout_percent": "Agent rollout (%)",
"handoff_mode": "Handoff mode (2 team queue)",
"fallback_mode": "Fallback mode",
"auto_handoff_on_failure": "Automatic handoff on failure",
"reply_timeout_seconds": "Reply timeout (seconds)",
"max_steps": "Maximum AI steps",
"channel_id": "Channel identifier",
"channel_type": "Channel type",
"ai_agent_id": "Agent ID / new agent name",
"ai_agent_rollout_percent": "Channel rollout (%)",
"config_json": "Channel configuration"
},
"repairWarnings": {
"schedules_unchanged": "Working hours were not changed. Configure shifts explicitly; being off duty is not a setup error.",
"active_team_required": "Select or enable a team in team settings before linking new records.",
"disabled_configuration_preserved": "The selected configuration is disabled or has zero rollout and was left unchanged.",
"agent_team_selection_required": "Choose the agent’s intended teams in agent settings; no teams were added automatically.",
"channel_selection_required": "Choose the intended agent and rollout in channel settings. Existing channel routing was preserved.",
"existing_configuration_preserved": "Existing configuration was preserved. Review any remaining readiness issues in the relevant settings.",
"dispatch_failed": "Changes were saved, but pending conversation dispatch failed. Review the queue; do not reapply the repair.",
"readiness_refresh_failed": "The readiness refresh failed. Reload diagnostics to see the current state; committed changes are not rolled back.",
"agent_publication_required": "Publish the intended agent in agent settings before creating a channel. Setup does not publish agents or bypass the publication requirement."
}
}
}