182 lines
8.9 KiB
JavaScript
182 lines
8.9 KiB
JavaScript
export const lang = {
|
|
//title for each page
|
|
title: 'AI Customer Service',
|
|
|
|
// ====== Common ======
|
|
cancel: 'Cancel',
|
|
save: 'Save',
|
|
send: 'Send',
|
|
retry: 'Retry',
|
|
|
|
// ====== Time Format ======
|
|
timeFormatToday: 'Today',
|
|
timeFormatYesterday: 'Yesterday',
|
|
timeFormatBeforeYesterday: 'Day before yesterday',
|
|
// PR-CHAT-UI-CONFIG-V3 (2026-09-24): Humanized relative time (ui_time_humanize)
|
|
timeJustNow: 'Just now',
|
|
timeMinutesAgo: '{n} min ago',
|
|
timeHoursAgo: '{n} h ago',
|
|
timeMonthDay: '{m}/{d}',
|
|
timeYearMonthDay: '{y}/{m}/{d}',
|
|
|
|
// ====== ai-chat-message ======
|
|
aiNickname: 'AI Assistant',
|
|
defaultNickname: 'Me',
|
|
// PR-FRONTEND-VOICE-INPUT (2026-09-24): query text for attachment-only messages
|
|
// audioMessage / videoMessage: short label for the user-bubble filename fallback (still used by bubble template)
|
|
// *Instruction* keys: explicit directive sent to the AI as the query.
|
|
// Just a label gets ignored — the AI needs an explicit "please listen/look"
|
|
// to actually invoke STT/vision/file parsing on the attachment payload.
|
|
audioMessage: 'Voice Message',
|
|
videoMessage: 'Video Message',
|
|
audioInstruction: 'I sent a voice message. Please listen to it and reply.',
|
|
audioInstructionWithDuration: 'I sent a voice message ({seconds}s). Please listen to it and reply.',
|
|
imageInstruction: 'I sent an image. Please look at it and reply.',
|
|
videoInstruction: 'I sent a video. Please watch it and reply.',
|
|
fileInstruction: 'I sent a file. Please review it and reply.',
|
|
attachmentInstruction: 'I sent attachments. Please review them and reply.',
|
|
inputPlaceholder: 'Please enter your question...',
|
|
expandEditorTitle: 'Edit Content',
|
|
loadMoreHistory: 'Load more history',
|
|
loadingHistory: 'Loading history...',
|
|
aiThinking: 'AI is thinking',
|
|
receivingReply: 'Thinking',
|
|
aiThinkingStatus1: 'AI is thinking',
|
|
aiThinkingStatus2: 'AI is analyzing',
|
|
aiThinkingStatus3: 'AI is searching',
|
|
aiThinkingStatus4: 'AI is generating',
|
|
serviceUnavailable: 'Sorry, the AI service is temporarily unavailable. Please try again later.',
|
|
serviceTemporaryUnavailable: 'Sorry, the service is temporarily unavailable. Please try again later.',
|
|
noContentToCopy: 'No content to copy',
|
|
copySuccess: 'Copied',
|
|
copySelected: 'Copied selected content',
|
|
copyFail: 'Copy failed',
|
|
copyFailWithReason: 'Copy failed: {reason}',
|
|
copyFailPrivacyReason: 'clipboard permission not declared, copy unavailable',
|
|
openingFile: 'Opening file...',
|
|
openingFileName: 'Opening file: {name}',
|
|
openingFileTitle: 'Opening: {title}',
|
|
fileOpenFail: 'Failed to open file',
|
|
loadHistoryFail: 'Failed to load history',
|
|
about: '0B',
|
|
|
|
// ====== ai-chat-message - Auto Reply Templates ======
|
|
autoReplyGreeting: 'Hello! I am the AI customer service assistant, glad to serve you! How can I help you?',
|
|
autoReplyPrice: 'Our product prices vary by model and configuration. Please check the product detail page for specific prices.',
|
|
autoReplyShipping: 'Generally, orders are shipped within 24 hours. Please check the logistics information for specific timelines.',
|
|
autoReplyReturn: '7-day no-reason return is supported. Please ensure the product is in good condition.',
|
|
autoReplyService: 'Our customer service hours are 9:00-18:00. Feel free to contact us if you have any questions.',
|
|
autoReplyDefault: 'Thank you for your inquiry! Regarding your question about "{question}", our professional customer service will answer you as soon as possible. You can also check our help documentation for more information.',
|
|
|
|
// ====== ai-chat-search ======
|
|
searchEntrance: 'Search',
|
|
searchPlaceholder: 'Search chat history',
|
|
searchClose: 'Done',
|
|
noMatchResult: 'No matching results',
|
|
searchAtTop: 'Already at top',
|
|
searchAtBottom: 'Already at bottom',
|
|
|
|
// ====== index.vue ======
|
|
settingsTitle: 'Settings',
|
|
fallbackWelcome: 'Hello! I am an AI customer service assistant, glad to serve you!\n\nI can help you with:\n• Product-related questions\n• Order issues\n• Technical support\n• Product recommendations\n\nPlease tell me how I can assist you?',
|
|
changeAvatar: 'Change Avatar',
|
|
changeAvatarDesc: 'Customize your chat avatar',
|
|
changeNickname: 'Change Nickname',
|
|
changeNicknameDesc: 'Customize your nickname',
|
|
clearChat: 'Clear Chat',
|
|
exportChat: 'Export Records',
|
|
help: 'Help',
|
|
confirmClearChat: 'Are you sure you want to clear the chat?',
|
|
chatCleared: 'Chat history has been cleared. How can I help you?',
|
|
featureDeveloping: 'Feature under development',
|
|
thanksFeedback: 'Thank you for your feedback!',
|
|
improveService: 'We will improve our service',
|
|
openLink: 'Open Link',
|
|
confirmOpenLink: 'Are you sure you want to open this link: ',
|
|
confirmOpenLinkText: 'Are you sure you want to open this link: {url}?',
|
|
operationFailed: 'Operation failed, please try again',
|
|
prompt: 'Prompt',
|
|
serviceTypeNotSupported: 'Current service type does not support this page',
|
|
|
|
// ====== index.vue - Help Content ======
|
|
helpContent: '# Help Guide\n\n## Basic Features\n- **Send Message**: Type in the input box and send\n- **Voice Input**: Tap the microphone icon for voice input\n- **Attachments**: Tap + to send images, files, locations\n\n## Message Types\n- **Text Message**: Regular text conversation\n- **Markdown**: Supports formatted document content\n- **File**: Supports various file format previews\n- **Audio**: Supports voice message playback\n- **Video**: Supports video playback\n- **Link**: Supports web link navigation\n- **Product**: Supports product card display\n\n## Actions\n- **Like/Dislike**: Rate AI responses\n- **Copy**: Long press a message to copy content\n- **Forward**: Supports message forwarding',
|
|
|
|
// ====== index.vue - AI Response Templates ======
|
|
aiResponseTemplate1: 'I understand your needs, let me provide you with a detailed answer.',
|
|
aiResponseTemplate2: 'Thank you for your question, that is a great question.',
|
|
aiResponseTemplate3: 'Based on your question, I suggest you consider the following aspects:',
|
|
aiResponseTemplate4: 'This is a common question, let me provide you with some solutions.',
|
|
aiResponseTemplate5: 'I understand your confusion, let me help you analyze it.',
|
|
aiProcessingMessage: 'I have received your question "{question}" and am working on it...',
|
|
|
|
// ====== index.vue - Product Inquiry ======
|
|
productInquiryTemplate: 'I would like to learn more about the following product:\nProduct Name: {name}\nPrice: ¥{price}\nProduct ID: {id}',
|
|
|
|
// ====== ai-chat-avatar-selector ======
|
|
avatarSelectorTitle: 'Change Avatar',
|
|
chooseFromAlbum: 'Choose from Album',
|
|
avatarChangeSuccess: 'Avatar changed successfully',
|
|
enableAlbumPermission: 'Please enable album permission',
|
|
|
|
// ====== ai-chat-emoji-panel ======
|
|
emojiTitle: 'Emoji',
|
|
|
|
// ====== ai-chat-nickname-editor ======
|
|
editNickname: 'Edit Nickname',
|
|
newNicknamePlaceholder: 'Please enter your new nickname',
|
|
nicknameTip: 'Nickname length 1-12 characters, visible only to you',
|
|
nicknameChangeSuccess: 'Nickname changed successfully',
|
|
|
|
// ====== ai-chat-tools-panel ======
|
|
moreFunctions: 'More Features',
|
|
image: 'Image',
|
|
video: 'Video/Audio',
|
|
file: 'File',
|
|
voice: 'Voice',
|
|
recordVoice: 'Record Voice',
|
|
uploadAudio: 'Upload Audio',
|
|
pickVideo: 'Choose Video',
|
|
pickAudio: 'Choose Audio',
|
|
chooseAudioFail: 'Failed to select audio',
|
|
chooseVideoFail: 'Failed to select video',
|
|
audioNotReady: 'Audio not ready',
|
|
location: 'Location',
|
|
|
|
// ====== ai-chat-voice-panel ======
|
|
voiceInputTitle: 'Voice Input',
|
|
recordingTip: 'Recording, release to end',
|
|
startRecordTip: 'Tap to start recording',
|
|
voiceInputFailed: 'Voice input failed',
|
|
// PR-FRONTEND-VOICE-INPUT (2026-09-24): press-and-hold gesture + recorder error messages
|
|
holdToTalk: 'Hold to talk',
|
|
releaseToSend: 'Release to send',
|
|
releaseToCancel: 'Release to cancel',
|
|
slideUpToCancel: '↑ Slide up to cancel',
|
|
slideUpToCancelHint: '↑ Release to cancel',
|
|
voiceStartFailed: 'Cannot start recording',
|
|
voiceStopFailed: 'Recording failed, please try again',
|
|
voiceNotSupported: 'Voice input is not supported on this platform',
|
|
// PR-FRONTEND-VOICE-INPUT (2026-09-24): upload error (recorder result -> cloud)
|
|
uploadFailed: 'Upload failed',
|
|
uploadFailedWithReason: 'Upload failed: {reason}',
|
|
|
|
// ====== index.vue - Menu ======
|
|
menuClearChat: 'Clear Chat',
|
|
menuExport: 'Export Records',
|
|
menuSettings: 'Settings',
|
|
menuHelp: 'Help',
|
|
|
|
// ====== index.vue - Console Logs (for debugging) ======
|
|
logOnShowTriggered: '[AI Chat Page] onShow triggered',
|
|
logOnUnloadTriggered: '[AI Chat Page] onUnload triggered',
|
|
logKeyboardChangeUnavailable: 'onKeyboardHeightChange unavailable',
|
|
logEventHandleError: 'Event handling error',
|
|
logInitNavbarFailed: 'Failed to initialize navigation bar',
|
|
logChatComponentNotInit: 'Chat component not initialized',
|
|
logServicerConfigNotLoaded: '[AI Customer Service] servicerConfig not loaded, retrying after 200ms...',
|
|
|
|
// ====== AI Agent general copy (customer service is the first agent) ======
|
|
aiAgentDefaultTitle: 'AI Agent',
|
|
aiAgentOpenFailed: 'Failed to open AI Agent, please try again later',
|
|
aiAgentNotConfigured: 'This AI Agent is not enabled'}
|