dify
This commit is contained in:
98
dify/web/i18n/en-US/app-annotation.ts
Normal file
98
dify/web/i18n/en-US/app-annotation.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
const translation = {
|
||||
title: 'Annotations',
|
||||
name: 'Annotation Reply',
|
||||
editBy: 'Answer edited by {{author}}',
|
||||
noData: {
|
||||
title: 'No annotations',
|
||||
description: 'You can edit annotations during app debugging or import annotations in bulk here for a high-quality response.',
|
||||
},
|
||||
table: {
|
||||
header: {
|
||||
question: 'question',
|
||||
answer: 'answer',
|
||||
createdAt: 'created at',
|
||||
hits: 'hits',
|
||||
actions: 'actions',
|
||||
addAnnotation: 'Add Annotation',
|
||||
bulkImport: 'Bulk Import',
|
||||
bulkExport: 'Bulk Export',
|
||||
clearAll: 'Delete All',
|
||||
clearAllConfirm: 'Delete all annotations?',
|
||||
},
|
||||
},
|
||||
editModal: {
|
||||
title: 'Edit Annotation Reply',
|
||||
queryName: 'User Query',
|
||||
answerName: 'Storyteller Bot',
|
||||
yourAnswer: 'Your Answer',
|
||||
answerPlaceholder: 'Type your answer here',
|
||||
yourQuery: 'Your Query',
|
||||
queryPlaceholder: 'Type your query here',
|
||||
removeThisCache: 'Remove this Annotation',
|
||||
createdAt: 'Created At',
|
||||
},
|
||||
addModal: {
|
||||
title: 'Add Annotation Reply',
|
||||
queryName: 'Question',
|
||||
answerName: 'Answer',
|
||||
answerPlaceholder: 'Type answer here',
|
||||
queryPlaceholder: 'Type query here',
|
||||
createNext: 'Add another annotated response',
|
||||
},
|
||||
batchModal: {
|
||||
title: 'Bulk Import',
|
||||
csvUploadTitle: 'Drag and drop your CSV file here, or ',
|
||||
browse: 'browse',
|
||||
tip: 'The CSV file must conform to the following structure:',
|
||||
question: 'question',
|
||||
answer: 'answer',
|
||||
contentTitle: 'chunk content',
|
||||
content: 'content',
|
||||
template: 'Download the template here',
|
||||
cancel: 'Cancel',
|
||||
run: 'Run Batch',
|
||||
runError: 'Run batch failed',
|
||||
processing: 'In batch processing',
|
||||
completed: 'Import completed',
|
||||
error: 'Import Error',
|
||||
ok: 'OK',
|
||||
},
|
||||
list: {
|
||||
delete: {
|
||||
title: 'Are you sure Delete?',
|
||||
},
|
||||
},
|
||||
batchAction: {
|
||||
selected: 'Selected',
|
||||
delete: 'Delete',
|
||||
cancel: 'Cancel',
|
||||
},
|
||||
errorMessage: {
|
||||
answerRequired: 'Answer is required',
|
||||
queryRequired: 'Question is required',
|
||||
},
|
||||
viewModal: {
|
||||
annotatedResponse: 'Annotation Reply',
|
||||
hitHistory: 'Hit History',
|
||||
hit: 'Hit',
|
||||
hits: 'Hits',
|
||||
noHitHistory: 'No hit history',
|
||||
},
|
||||
hitHistoryTable: {
|
||||
query: 'Query',
|
||||
match: 'Match',
|
||||
response: 'Response',
|
||||
source: 'Source',
|
||||
score: 'Score',
|
||||
time: 'Time',
|
||||
},
|
||||
initSetup: {
|
||||
title: 'Annotation Reply Initial Setup',
|
||||
configTitle: 'Annotation Reply Setup',
|
||||
confirmBtn: 'Save & Enable',
|
||||
configConfirmBtn: 'Save',
|
||||
},
|
||||
embeddingModelSwitchTip: 'Annotation text vectorization model, switching models will be re-embedded, resulting in additional costs.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
85
dify/web/i18n/en-US/app-api.ts
Normal file
85
dify/web/i18n/en-US/app-api.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
const translation = {
|
||||
apiServer: 'API Server',
|
||||
apiKey: 'API Key',
|
||||
status: 'Status',
|
||||
disabled: 'Disabled',
|
||||
ok: 'In Service',
|
||||
copy: 'Copy',
|
||||
copied: 'Copied',
|
||||
regenerate: 'Regenerate',
|
||||
play: 'Play',
|
||||
pause: 'Pause',
|
||||
playing: 'Playing',
|
||||
loading: 'Loading',
|
||||
merMaid: {
|
||||
rerender: 'Redo Rerender',
|
||||
},
|
||||
never: 'Never',
|
||||
apiKeyModal: {
|
||||
apiSecretKey: 'API Secret key',
|
||||
apiSecretKeyTips: 'To prevent API abuse, protect your API Key. Avoid using it as plain text in front-end code. :)',
|
||||
createNewSecretKey: 'Create new Secret key',
|
||||
secretKey: 'Secret Key',
|
||||
created: 'CREATED',
|
||||
lastUsed: 'LAST USED',
|
||||
generateTips: 'Keep this key in a secure and accessible place.',
|
||||
},
|
||||
actionMsg: {
|
||||
deleteConfirmTitle: 'Delete this secret key?',
|
||||
deleteConfirmTips: 'This action cannot be undone.',
|
||||
ok: 'OK',
|
||||
},
|
||||
completionMode: {
|
||||
title: 'Completion App API',
|
||||
info: 'For high-quality text generation, such as articles, summaries, and translations, use the completion-messages API with user input. Text generation relies on the model parameters and prompt templates set in Dify Prompt Engineering.',
|
||||
createCompletionApi: 'Create Completion Message',
|
||||
createCompletionApiTip: 'Create a Completion Message to support the question-and-answer mode.',
|
||||
inputsTips: '(Optional) Provide user input fields as key-value pairs, corresponding to variables in Prompt Eng. Key is the variable name, Value is the parameter value. If the field type is Select, the submitted Value must be one of the preset choices.',
|
||||
queryTips: 'User input text content.',
|
||||
blocking: 'Blocking type, waiting for execution to complete and returning results. (Requests may be interrupted if the process is long)',
|
||||
streaming: 'streaming returns. Implementation of streaming return based on SSE (Server-Sent Events).',
|
||||
messageFeedbackApi: 'Message feedback (like)',
|
||||
messageFeedbackApiTip: 'Rate received messages on behalf of end-users with likes or dislikes. This data is visible in the Logs & Annotations page and used for future model fine-tuning.',
|
||||
messageIDTip: 'Message ID',
|
||||
ratingTip: 'like or dislike, null is undo',
|
||||
parametersApi: 'Obtain application parameter information',
|
||||
parametersApiTip: 'Retrieve configured Input parameters, including variable names, field names, types, and default values. Typically used for displaying these fields in a form or filling in default values after the client loads.',
|
||||
},
|
||||
chatMode: {
|
||||
title: 'Chat App API',
|
||||
info: 'For versatile conversational apps using a Q&A format, call the chat-messages API to initiate dialogue. Maintain ongoing conversations by passing the returned conversation_id. Response parameters and templates depend on Dify Prompt Eng. settings.',
|
||||
createChatApi: 'Create chat message',
|
||||
createChatApiTip: 'Create a new conversation message or continue an existing dialogue.',
|
||||
inputsTips: '(Optional) Provide user input fields as key-value pairs, corresponding to variables in Prompt Eng. Key is the variable name, Value is the parameter value. If the field type is Select, the submitted Value must be one of the preset choices.',
|
||||
queryTips: 'User input/question content',
|
||||
blocking: 'Blocking type, waiting for execution to complete and returning results. (Requests may be interrupted if the process is long)',
|
||||
streaming: 'streaming returns. Implementation of streaming return based on SSE (Server-Sent Events).',
|
||||
conversationIdTip: '(Optional) Conversation ID: leave empty for first-time conversation; pass conversation_id from context to continue dialogue.',
|
||||
messageFeedbackApi: 'Message terminal user feedback, like',
|
||||
messageFeedbackApiTip: 'Rate received messages on behalf of end-users with likes or dislikes. This data is visible in the Logs & Annotations page and used for future model fine-tuning.',
|
||||
messageIDTip: 'Message ID',
|
||||
ratingTip: 'like or dislike, null is undo',
|
||||
chatMsgHistoryApi: 'Get the chat history message',
|
||||
chatMsgHistoryApiTip: 'The first page returns the latest `limit` bar, which is in reverse order.',
|
||||
chatMsgHistoryConversationIdTip: 'Conversation ID',
|
||||
chatMsgHistoryFirstId: 'ID of the first chat record on the current page. The default is none.',
|
||||
chatMsgHistoryLimit: 'How many chats are returned in one request',
|
||||
conversationsListApi: 'Get conversation list',
|
||||
conversationsListApiTip: 'Gets the session list of the current user. By default, the last 20 sessions are returned.',
|
||||
conversationsListFirstIdTip: 'The ID of the last record on the current page, default none.',
|
||||
conversationsListLimitTip: 'How many chats are returned in one request',
|
||||
conversationRenamingApi: 'Conversation renaming',
|
||||
conversationRenamingApiTip: 'Rename conversations; the name is displayed in multi-session client interfaces.',
|
||||
conversationRenamingNameTip: 'New name',
|
||||
parametersApi: 'Obtain application parameter information',
|
||||
parametersApiTip: 'Retrieve configured Input parameters, including variable names, field names, types, and default values. Typically used for displaying these fields in a form or filling in default values after the client loads.',
|
||||
},
|
||||
develop: {
|
||||
requestBody: 'Request Body',
|
||||
pathParams: 'Path Params',
|
||||
query: 'Query',
|
||||
toc: 'Contents',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
575
dify/web/i18n/en-US/app-debug.ts
Normal file
575
dify/web/i18n/en-US/app-debug.ts
Normal file
@@ -0,0 +1,575 @@
|
||||
const translation = {
|
||||
pageTitle: {
|
||||
line1: 'PROMPT',
|
||||
line2: 'Engineering',
|
||||
},
|
||||
orchestrate: 'Orchestrate',
|
||||
promptMode: {
|
||||
simple: 'Switch to Expert Mode to edit the whole PROMPT',
|
||||
advanced: 'Expert Mode',
|
||||
switchBack: 'Switch back',
|
||||
advancedWarning: {
|
||||
title: 'You have switched to Expert Mode, and once you modify the PROMPT, you CANNOT return to the basic mode.',
|
||||
description: 'In Expert Mode, you can edit whole PROMPT.',
|
||||
learnMore: 'Learn more',
|
||||
ok: 'OK',
|
||||
},
|
||||
operation: {
|
||||
addMessage: 'Add Message',
|
||||
},
|
||||
contextMissing: 'Context component missed, the effectiveness of the prompt may not be good.',
|
||||
},
|
||||
operation: {
|
||||
applyConfig: 'Publish',
|
||||
resetConfig: 'Reset',
|
||||
debugConfig: 'Debug',
|
||||
addFeature: 'Add Feature',
|
||||
automatic: 'Generate',
|
||||
stopResponding: 'Stop responding',
|
||||
agree: 'like',
|
||||
disagree: 'dislike',
|
||||
cancelAgree: 'Cancel like',
|
||||
cancelDisagree: 'Cancel dislike',
|
||||
userAction: 'User ',
|
||||
},
|
||||
notSetAPIKey: {
|
||||
title: 'LLM provider key has not been set',
|
||||
trailFinished: 'Trail finished',
|
||||
description: 'The LLM provider key has not been set, and it needs to be set before debugging.',
|
||||
settingBtn: 'Go to settings',
|
||||
},
|
||||
trailUseGPT4Info: {
|
||||
title: 'Does not support gpt-4 now',
|
||||
description: 'Use gpt-4, please set API Key.',
|
||||
},
|
||||
feature: {
|
||||
groupChat: {
|
||||
title: 'Chat enhance',
|
||||
description: 'Add pre-conversation settings for apps can enhance user experience.',
|
||||
},
|
||||
groupExperience: {
|
||||
title: 'Experience enhance',
|
||||
},
|
||||
conversationOpener: {
|
||||
title: 'Conversation Opener',
|
||||
description: 'In a chat app, the first sentence that the AI actively speaks to the user is usually used as a welcome.',
|
||||
},
|
||||
suggestedQuestionsAfterAnswer: {
|
||||
title: 'Follow-up',
|
||||
description: 'Setting up next questions suggestion can give users a better chat.',
|
||||
resDes: '3 suggestions for user next question.',
|
||||
tryToAsk: 'Try to ask',
|
||||
},
|
||||
moreLikeThis: {
|
||||
title: 'More like this',
|
||||
description: 'Generate multiple texts at once, and then edit and continue to generate',
|
||||
generateNumTip: 'Number of each generated times',
|
||||
tip: 'Using this feature will incur additional tokens overhead',
|
||||
},
|
||||
speechToText: {
|
||||
title: 'Speech to Text',
|
||||
description: 'Voice input can be used in chat.',
|
||||
resDes: 'Voice input is enabled',
|
||||
},
|
||||
textToSpeech: {
|
||||
title: 'Text to Speech',
|
||||
description: 'Conversation messages can be converted to speech.',
|
||||
resDes: 'Text to Audio is enabled',
|
||||
},
|
||||
citation: {
|
||||
title: 'Citations and Attributions',
|
||||
description: 'Show source document and attributed section of the generated content.',
|
||||
resDes: 'Citations and Attributions is enabled',
|
||||
},
|
||||
annotation: {
|
||||
title: 'Annotation Reply',
|
||||
description: 'You can manually add high-quality response to the cache for prioritized matching with similar user questions.',
|
||||
resDes: 'Annotation Response is enabled',
|
||||
scoreThreshold: {
|
||||
title: 'Score Threshold',
|
||||
description: 'Used to set the similarity threshold for annotation reply.',
|
||||
easyMatch: 'Easy Match',
|
||||
accurateMatch: 'Accurate Match',
|
||||
},
|
||||
matchVariable: {
|
||||
title: 'Match Variable',
|
||||
choosePlaceholder: 'Choose match variable',
|
||||
},
|
||||
cacheManagement: 'Annotations',
|
||||
cached: 'Annotated',
|
||||
remove: 'Remove',
|
||||
removeConfirm: 'Delete this annotation ?',
|
||||
add: 'Add annotation',
|
||||
edit: 'Edit annotation',
|
||||
},
|
||||
dataSet: {
|
||||
title: 'Knowledge',
|
||||
noData: 'You can import Knowledge as context',
|
||||
selectTitle: 'Select reference Knowledge',
|
||||
selected: 'Knowledge selected',
|
||||
noDataSet: 'No Knowledge found',
|
||||
toCreate: 'Go to create',
|
||||
notSupportSelectMulti: 'Currently only support one Knowledge',
|
||||
queryVariable: {
|
||||
title: 'Query variable',
|
||||
tip: 'This variable will be used as the query input for context retrieval, obtaining context information related to the input of this variable.',
|
||||
choosePlaceholder: 'Choose query variable',
|
||||
noVar: 'No variables',
|
||||
noVarTip: 'please create a variable under the Variables section',
|
||||
unableToQueryDataSet: 'Unable to query the Knowledge',
|
||||
unableToQueryDataSetTip: 'Unable to query the Knowledge successfully, please choose a context query variable in the context section.',
|
||||
ok: 'OK',
|
||||
contextVarNotEmpty: 'context query variable can not be empty',
|
||||
deleteContextVarTitle: 'Delete variable “{{varName}}”?',
|
||||
deleteContextVarTip: 'This variable has been set as a context query variable, and removing it will impact the normal use of the Knowledge. If you still need to delete it, please reselect it in the context section.',
|
||||
},
|
||||
},
|
||||
tools: {
|
||||
title: 'Tools',
|
||||
tips: 'Tools provide a standard API call method, taking user input or variables as request parameters for querying external data as context.',
|
||||
toolsInUse: '{{count}} tools in use',
|
||||
modal: {
|
||||
title: 'Tool',
|
||||
toolType: {
|
||||
title: 'Tool Type',
|
||||
placeholder: 'Please select the tool type',
|
||||
},
|
||||
name: {
|
||||
title: 'Name',
|
||||
placeholder: 'Please enter the name',
|
||||
},
|
||||
variableName: {
|
||||
title: 'Variable Name',
|
||||
placeholder: 'Please enter the variable name',
|
||||
},
|
||||
},
|
||||
},
|
||||
conversationHistory: {
|
||||
title: 'Conversation History',
|
||||
description: 'Set prefix names for conversation roles',
|
||||
tip: 'The Conversation History is not enabled, please add <histories> in the prompt above.',
|
||||
learnMore: 'Learn more',
|
||||
editModal: {
|
||||
title: 'Edit Conversation Role Names',
|
||||
userPrefix: 'User prefix',
|
||||
assistantPrefix: 'Assistant prefix',
|
||||
},
|
||||
},
|
||||
toolbox: {
|
||||
title: 'TOOLBOX',
|
||||
},
|
||||
moderation: {
|
||||
title: 'Content moderation',
|
||||
description: 'Secure model output by using moderation API or maintaining a sensitive word list.',
|
||||
contentEnableLabel: 'Content moderation enabled',
|
||||
allEnabled: 'INPUT & OUTPUT',
|
||||
inputEnabled: 'INPUT',
|
||||
outputEnabled: 'OUTPUT',
|
||||
modal: {
|
||||
title: 'Content moderation settings',
|
||||
provider: {
|
||||
title: 'Provider',
|
||||
openai: 'OpenAI Moderation',
|
||||
openaiTip: {
|
||||
prefix: 'OpenAI Moderation requires an OpenAI API key configured in the ',
|
||||
suffix: '.',
|
||||
},
|
||||
keywords: 'Keywords',
|
||||
},
|
||||
keywords: {
|
||||
tip: 'One per line, separated by line breaks. Up to 100 characters per line.',
|
||||
placeholder: 'One per line, separated by line breaks',
|
||||
line: 'Line',
|
||||
},
|
||||
content: {
|
||||
input: 'Moderate INPUT Content',
|
||||
output: 'Moderate OUTPUT Content',
|
||||
preset: 'Preset replies',
|
||||
placeholder: 'Preset replies content here',
|
||||
condition: 'Moderate INPUT and OUTPUT Content enabled at least one',
|
||||
fromApi: 'Preset replies are returned by API',
|
||||
errorMessage: 'Preset replies cannot be empty',
|
||||
supportMarkdown: 'Markdown supported',
|
||||
},
|
||||
openaiNotConfig: {
|
||||
before: 'OpenAI Moderation requires an OpenAI API key configured in the',
|
||||
after: '',
|
||||
},
|
||||
},
|
||||
},
|
||||
fileUpload: {
|
||||
title: 'File Upload',
|
||||
description: 'The chat input box allows uploading of images, documents, and other files.',
|
||||
supportedTypes: 'Support File Types',
|
||||
numberLimit: 'Max uploads',
|
||||
modalTitle: 'File Upload Setting',
|
||||
},
|
||||
imageUpload: {
|
||||
title: 'Image Upload',
|
||||
description: 'Allow uploading images.',
|
||||
supportedTypes: 'Support File Types',
|
||||
numberLimit: 'Max uploads',
|
||||
modalTitle: 'Image Upload Setting',
|
||||
},
|
||||
bar: {
|
||||
empty: 'Enable feature to enhance web app user experience',
|
||||
enableText: 'Features Enabled',
|
||||
manage: 'Manage',
|
||||
},
|
||||
documentUpload: {
|
||||
title: 'Document',
|
||||
description: 'Enable Document will allows the model to take in documents and answer questions about them.',
|
||||
},
|
||||
audioUpload: {
|
||||
title: 'Audio',
|
||||
description: 'Enable Audio will allow the model to process audio files for transcription and analysis.',
|
||||
},
|
||||
},
|
||||
codegen: {
|
||||
title: 'Code Generator',
|
||||
description: 'The Code Generator uses configured models to generate high-quality code based on your instructions. Please provide clear and detailed instructions.',
|
||||
instruction: 'Instructions',
|
||||
instructionPlaceholder: 'Enter detailed description of the code you want to generate.',
|
||||
noDataLine1: 'Describe your use case on the left,',
|
||||
noDataLine2: 'the code preview will show here.',
|
||||
generate: 'Generate',
|
||||
generatedCodeTitle: 'Generated Code',
|
||||
loading: 'Generating code...',
|
||||
apply: 'Apply',
|
||||
applyChanges: 'Apply Changes',
|
||||
resTitle: 'Generated Code',
|
||||
overwriteConfirmTitle: 'Overwrite existing code?',
|
||||
overwriteConfirmMessage: 'This action will overwrite the existing code. Do you want to continue?',
|
||||
},
|
||||
generate: {
|
||||
title: 'Prompt Generator',
|
||||
description: 'The Prompt Generator uses the configured model to optimize prompts for higher quality and better structure. Please write clear and detailed instructions.',
|
||||
tryIt: 'Try it',
|
||||
instruction: 'Instructions',
|
||||
instructionPlaceHolderTitle: 'Describe how you would like to improve this Prompt. For example:',
|
||||
instructionPlaceHolderLine1: 'Make the output more concise, retaining the core points.',
|
||||
instructionPlaceHolderLine2: 'The output format is incorrect, please strictly follow the JSON format.',
|
||||
instructionPlaceHolderLine3: 'The tone is too harsh, please make it more friendly.',
|
||||
codeGenInstructionPlaceHolderLine: 'The more detailed the feedback, such as the data types of input and output as well as how variables are processed, the more accurate the code generation will be.',
|
||||
idealOutput: 'Ideal Output',
|
||||
idealOutputPlaceholder: 'Describe your ideal response format, length, tone, and content requirements...',
|
||||
optional: 'Optional',
|
||||
dismiss: 'Dismiss',
|
||||
generate: 'Generate',
|
||||
resTitle: 'Generated Prompt',
|
||||
newNoDataLine1: 'Write a instruction in the left column, and click Generate to see response. ',
|
||||
apply: 'Apply',
|
||||
loading: 'Orchestrating the application for you...',
|
||||
overwriteTitle: 'Override existing configuration?',
|
||||
overwriteMessage: 'Applying this prompt will override existing configuration.',
|
||||
template: {
|
||||
pythonDebugger: {
|
||||
name: 'Python debugger',
|
||||
instruction: 'A bot that can generate and debug your code based on your instruction',
|
||||
},
|
||||
translation: {
|
||||
name: 'Translation',
|
||||
instruction: 'A translator that can translate multiple languages',
|
||||
},
|
||||
professionalAnalyst: {
|
||||
name: 'Professional analyst',
|
||||
instruction: 'Extract insights, identify risk and distill key information from long reports into single memo',
|
||||
},
|
||||
excelFormulaExpert: {
|
||||
name: 'Excel formula expert',
|
||||
instruction: 'A chatbot that can help novice users understand, use and create Excel formulas based on user instructions',
|
||||
},
|
||||
travelPlanning: {
|
||||
name: 'Travel planning',
|
||||
instruction: 'The Travel Planning Assistant is an intelligent tool designed to help users effortlessly plan their trips',
|
||||
},
|
||||
SQLSorcerer: {
|
||||
name: 'SQL sorcerer',
|
||||
instruction: 'Transform everyday language into SQL queries',
|
||||
},
|
||||
GitGud: {
|
||||
name: 'Git gud',
|
||||
instruction: 'Generate appropriate Git commands based on user described version control actions',
|
||||
},
|
||||
meetingTakeaways: {
|
||||
name: 'Meeting takeaways',
|
||||
instruction: 'Distill meetings into concise summaries including discussion topics, key takeaways, and action items',
|
||||
},
|
||||
writingsPolisher: {
|
||||
name: 'Writing polisher',
|
||||
instruction: 'Use advanced copyediting techniques to improve your writings',
|
||||
},
|
||||
},
|
||||
press: 'Press',
|
||||
to: 'to ',
|
||||
insertContext: 'insert context',
|
||||
optimizePromptTooltip: 'Optimize in Prompt Generator',
|
||||
optimizationNote: 'Optimization Note',
|
||||
versions: 'Versions',
|
||||
version: 'Version',
|
||||
latest: 'Latest',
|
||||
},
|
||||
resetConfig: {
|
||||
title: 'Confirm reset?',
|
||||
message:
|
||||
'Reset discards changes, restoring the last published configuration.',
|
||||
},
|
||||
errorMessage: {
|
||||
nameOfKeyRequired: 'name of the key: {{key}} required',
|
||||
valueOfVarRequired: '{{key}} value can not be empty',
|
||||
queryRequired: 'Request text is required.',
|
||||
waitForResponse:
|
||||
'Please wait for the response to the previous message to complete.',
|
||||
waitForBatchResponse:
|
||||
'Please wait for the response to the batch task to complete.',
|
||||
notSelectModel: 'Please choose a model',
|
||||
waitForImgUpload: 'Please wait for the image to upload',
|
||||
waitForFileUpload: 'Please wait for the file/files to upload',
|
||||
},
|
||||
warningMessage: {
|
||||
timeoutExceeded: 'Results are not displayed due to timeout. Please refer to the logs to gather complete results.',
|
||||
},
|
||||
chatSubTitle: 'Instructions',
|
||||
completionSubTitle: 'Prefix Prompt',
|
||||
promptTip:
|
||||
'Prompts guide AI responses with instructions and constraints. Insert variables like {{input}}. This prompt won\'t be visible to users.',
|
||||
formattingChangedTitle: 'Formatting changed',
|
||||
formattingChangedText:
|
||||
'Modifying the formatting will reset the debug area, are you sure?',
|
||||
variableTitle: 'Variables',
|
||||
variableTip:
|
||||
'Users fill variables in a form, automatically replacing variables in the prompt.',
|
||||
notSetVar: 'Variables allow users to introduce prompt words or opening remarks when filling out forms. You can try entering "{{input}}" in the prompt words.',
|
||||
autoAddVar: 'Undefined variables referenced in pre-prompt, are you want to add them in user input form?',
|
||||
variableTable: {
|
||||
key: 'Variable Key',
|
||||
name: 'User Input Field Name',
|
||||
type: 'Input Type',
|
||||
action: 'Actions',
|
||||
typeString: 'String',
|
||||
typeSelect: 'Select',
|
||||
},
|
||||
varKeyError: {
|
||||
canNoBeEmpty: '{{key}} is required',
|
||||
tooLong: '{{key}} is too length. Can not be longer then 30 characters',
|
||||
notValid: '{{key}} is invalid. Can only contain letters, numbers, and underscores',
|
||||
notStartWithNumber: '{{key}} can not start with a number',
|
||||
keyAlreadyExists: '{{key}} already exists',
|
||||
},
|
||||
otherError: {
|
||||
promptNoBeEmpty: 'Prompt can not be empty',
|
||||
historyNoBeEmpty: 'Conversation history must be set in the prompt',
|
||||
queryNoBeEmpty: 'Query must be set in the prompt',
|
||||
},
|
||||
variableConfig: {
|
||||
'addModalTitle': 'Add Input Field',
|
||||
'editModalTitle': 'Edit Input Field',
|
||||
'description': 'Setting for variable {{varName}}',
|
||||
'fieldType': 'Field Type',
|
||||
'string': 'Short Text',
|
||||
'text-input': 'Short Text',
|
||||
'paragraph': 'Paragraph',
|
||||
'select': 'Select',
|
||||
'number': 'Number',
|
||||
'checkbox': 'Checkbox',
|
||||
'json': 'JSON Code',
|
||||
'jsonSchema': 'JSON Schema',
|
||||
'optional': 'optional',
|
||||
'single-file': 'Single File',
|
||||
'multi-files': 'File List',
|
||||
'notSet': 'Not set, try typing {{input}} in the prefix prompt',
|
||||
'stringTitle': 'Form text box options',
|
||||
'maxLength': 'Max Length',
|
||||
'options': 'Options',
|
||||
'addOption': 'Add option',
|
||||
'apiBasedVar': 'API-based Variable',
|
||||
'varName': 'Variable Name',
|
||||
'labelName': 'Label Name',
|
||||
'displayName': 'Display Name',
|
||||
'inputPlaceholder': 'Please input',
|
||||
'content': 'Content',
|
||||
'required': 'Required',
|
||||
'placeholder': 'Placeholder',
|
||||
'placeholderPlaceholder': 'Enter text to display when the field is empty',
|
||||
'defaultValue': 'Default Value',
|
||||
'defaultValuePlaceholder': 'Enter default value to pre-populate the field',
|
||||
'unit': 'Unit',
|
||||
'unitPlaceholder': 'Display units after numbers, e.g. tokens',
|
||||
'tooltips': 'Tooltips',
|
||||
'tooltipsPlaceholder': 'Enter helpful text shown when hovering over the label',
|
||||
'showAllSettings': 'Show All Settings',
|
||||
'startSelectedOption': 'Start selected option',
|
||||
'noDefaultSelected': 'Don\'t select',
|
||||
'hide': 'Hide',
|
||||
'file': {
|
||||
supportFileTypes: 'Support File Types',
|
||||
image: {
|
||||
name: 'Image',
|
||||
},
|
||||
audio: {
|
||||
name: 'Audio',
|
||||
},
|
||||
document: {
|
||||
name: 'Document',
|
||||
},
|
||||
video: {
|
||||
name: 'Video',
|
||||
},
|
||||
custom: {
|
||||
name: 'Other file types',
|
||||
description: 'Specify other file types.',
|
||||
createPlaceholder: '+ File extension, e.g .doc',
|
||||
},
|
||||
},
|
||||
'uploadFileTypes': 'Upload File Types',
|
||||
'uploadMethod': 'Upload Method',
|
||||
'localUpload': 'Local Upload',
|
||||
'both': 'Both',
|
||||
'maxNumberOfUploads': 'Max number of uploads',
|
||||
'maxNumberTip': 'Document < {{docLimit}}, image < {{imgLimit}}, audio < {{audioLimit}}, video < {{videoLimit}}',
|
||||
'errorMsg': {
|
||||
labelNameRequired: 'Label name is required',
|
||||
varNameCanBeRepeat: 'Variable name can not be repeated',
|
||||
atLeastOneOption: 'At least one option is required',
|
||||
optionRepeat: 'Has repeat options',
|
||||
},
|
||||
'startChecked': 'Start checked',
|
||||
'noDefaultValue': 'No default value',
|
||||
'selectDefaultValue': 'Select default value',
|
||||
},
|
||||
vision: {
|
||||
name: 'Vision',
|
||||
description: 'Enable Vision will allows the model to take in images and answer questions about them. ',
|
||||
onlySupportVisionModelTip: 'Only supports vision models',
|
||||
settings: 'Settings',
|
||||
visionSettings: {
|
||||
title: 'Vision Settings',
|
||||
resolution: 'Resolution',
|
||||
resolutionTooltip: `low res will allow model receive a low-res 512 x 512 version of the image, and represent the image with a budget of 65 tokens. This allows the API to return faster responses and consume fewer input tokens for use cases that do not require high detail.
|
||||
\n
|
||||
high res will first allows the model to see the low res image and then creates detailed crops of input images as 512px squares based on the input image size. Each of the detailed crops uses twice the token budget for a total of 129 tokens.`,
|
||||
high: 'High',
|
||||
low: 'Low',
|
||||
uploadMethod: 'Upload Method',
|
||||
both: 'Both',
|
||||
localUpload: 'Local Upload',
|
||||
url: 'URL',
|
||||
uploadLimit: 'Upload Limit',
|
||||
},
|
||||
},
|
||||
voice: {
|
||||
name: 'Voice',
|
||||
defaultDisplay: 'Default Voice',
|
||||
description: 'Text to speech voice Settings',
|
||||
settings: 'Settings',
|
||||
voiceSettings: {
|
||||
title: 'Voice Settings',
|
||||
language: 'Language',
|
||||
resolutionTooltip: 'Text-to-speech voice support language。',
|
||||
voice: 'Voice',
|
||||
autoPlay: 'Auto Play',
|
||||
autoPlayEnabled: 'On',
|
||||
autoPlayDisabled: 'Off',
|
||||
},
|
||||
},
|
||||
openingStatement: {
|
||||
title: 'Conversation Opener',
|
||||
add: 'Add',
|
||||
writeOpener: 'Edit opener',
|
||||
placeholder: 'Write your opener message here, you can use variables, try type {{variable}}.',
|
||||
openingQuestion: 'Opening Questions',
|
||||
openingQuestionPlaceholder: 'You can use variables, try typing {{variable}}.',
|
||||
noDataPlaceHolder:
|
||||
'Starting the conversation with the user can help AI establish a closer connection with them in conversational applications.',
|
||||
varTip: 'You can use variables, try type {{variable}}',
|
||||
tooShort: 'At least 20 words of initial prompt are required to generate an opening remarks for the conversation.',
|
||||
notIncludeKey: 'The initial prompt does not include the variable: {{key}}. Please add it to the initial prompt.',
|
||||
},
|
||||
modelConfig: {
|
||||
model: 'Model',
|
||||
setTone: 'Set tone of responses',
|
||||
title: 'Model and Parameters',
|
||||
modeType: {
|
||||
chat: 'Chat',
|
||||
completion: 'Complete',
|
||||
},
|
||||
},
|
||||
inputs: {
|
||||
title: 'Debug & Preview',
|
||||
noPrompt: 'Try write some prompt in pre-prompt input',
|
||||
userInputField: 'User Input Field',
|
||||
noVar: 'Fill in the value of the variable, which will be automatically replaced in the prompt word every time a new session is started.',
|
||||
chatVarTip:
|
||||
'Fill in the value of the variable, which will be automatically replaced in the prompt word every time a new session is started',
|
||||
completionVarTip:
|
||||
'Fill in the value of the variable, which will be automatically replaced in the prompt words every time a question is submitted.',
|
||||
previewTitle: 'Prompt preview',
|
||||
queryTitle: 'Query content',
|
||||
queryPlaceholder: 'Please enter the request text.',
|
||||
run: 'RUN',
|
||||
},
|
||||
result: 'Output Text',
|
||||
noResult: 'Output will be displayed here.',
|
||||
datasetConfig: {
|
||||
settingTitle: 'Retrieval settings',
|
||||
knowledgeTip: 'Click the “+” button to add knowledge',
|
||||
retrieveOneWay: {
|
||||
title: 'N-to-1 retrieval',
|
||||
description: 'Based on user intent and Knowledge descriptions, the Agent autonomously selects the best Knowledge for querying. Best for applications with distinct, limited Knowledge.',
|
||||
},
|
||||
retrieveMultiWay: {
|
||||
title: 'Multi-path retrieval',
|
||||
description: 'Based on user intent, queries across all Knowledge, retrieves relevant text from multi-sources, and selects the best results matching the user query after reranking.',
|
||||
},
|
||||
embeddingModelRequired: 'A configured Embedding Model is required',
|
||||
rerankModelRequired: 'A configured Rerank Model is required',
|
||||
params: 'Params',
|
||||
top_k: 'Top K',
|
||||
top_kTip: 'Used to filter chunks that are most similar to user questions. The system will also dynamically adjust the value of Top K, according to max_tokens of the selected model.',
|
||||
score_threshold: 'Score Threshold',
|
||||
score_thresholdTip: 'Used to set the similarity threshold for chunks filtering.',
|
||||
retrieveChangeTip: 'Modifying the index mode and retrieval mode may affect applications associated with this Knowledge.',
|
||||
},
|
||||
debugAsSingleModel: 'Debug as Single Model',
|
||||
debugAsMultipleModel: 'Debug as Multiple Models',
|
||||
duplicateModel: 'Duplicate',
|
||||
publishAs: 'Publish as',
|
||||
assistantType: {
|
||||
name: 'Assistant Type',
|
||||
chatAssistant: {
|
||||
name: 'Basic Assistant',
|
||||
description: 'Build a chat-based assistant using a Large Language Model',
|
||||
},
|
||||
agentAssistant: {
|
||||
name: 'Agent Assistant',
|
||||
description: 'Build an intelligent Agent which can autonomously choose tools to complete the tasks',
|
||||
},
|
||||
},
|
||||
agent: {
|
||||
agentMode: 'Agent Mode',
|
||||
agentModeDes: 'Set the type of inference mode for the agent',
|
||||
agentModeType: {
|
||||
ReACT: 'ReAct',
|
||||
functionCall: 'Function Calling',
|
||||
},
|
||||
setting: {
|
||||
name: 'Agent Settings',
|
||||
description: 'Agent Assistant settings allow setting agent mode and advanced features like built-in prompts, only available in Agent type.',
|
||||
maximumIterations: {
|
||||
name: 'Maximum Iterations',
|
||||
description: 'Limit the number of iterations an agent assistant can execute',
|
||||
},
|
||||
},
|
||||
buildInPrompt: 'Build-In Prompt',
|
||||
firstPrompt: 'First Prompt',
|
||||
nextIteration: 'Next Iteration',
|
||||
promptPlaceholder: 'Write your prompt here',
|
||||
tools: {
|
||||
name: 'Tools',
|
||||
description: 'Using tools can extend the capabilities of LLM, such as searching the internet or performing scientific calculations',
|
||||
enabled: 'Enabled',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
112
dify/web/i18n/en-US/app-log.ts
Normal file
112
dify/web/i18n/en-US/app-log.ts
Normal file
@@ -0,0 +1,112 @@
|
||||
const translation = {
|
||||
title: 'Logs',
|
||||
description: 'The logs record the running status of the application, including user inputs and AI replies.',
|
||||
dateTimeFormat: 'MM/DD/YYYY hh:mm:ss A',
|
||||
dateFormat: 'MM/DD/YYYY',
|
||||
table: {
|
||||
header: {
|
||||
updatedTime: 'Updated time',
|
||||
time: 'Created time',
|
||||
endUser: 'End User or Account',
|
||||
input: 'Input',
|
||||
output: 'Output',
|
||||
summary: 'Title',
|
||||
messageCount: 'Message Count',
|
||||
userRate: 'User Rate',
|
||||
adminRate: 'Op. Rate',
|
||||
startTime: 'START TIME',
|
||||
status: 'STATUS',
|
||||
runtime: 'RUN TIME',
|
||||
tokens: 'TOKENS',
|
||||
user: 'END USER OR ACCOUNT',
|
||||
version: 'VERSION',
|
||||
triggered_from: 'TRIGGER BY',
|
||||
},
|
||||
pagination: {
|
||||
previous: 'Prev',
|
||||
next: 'Next',
|
||||
},
|
||||
empty: {
|
||||
noChat: 'No conversation yet',
|
||||
noOutput: 'No output',
|
||||
element: {
|
||||
title: 'Is anyone there?',
|
||||
content: 'Observe and annotate interactions between end-users and AI applications here to continuously improve AI accuracy. You can try <shareLink>sharing</shareLink> or <testLink>testing</testLink> the Web App yourself, then return to this page.',
|
||||
},
|
||||
},
|
||||
},
|
||||
detail: {
|
||||
time: 'Time',
|
||||
conversationId: 'Conversation ID',
|
||||
promptTemplate: 'Prompt Template',
|
||||
promptTemplateBeforeChat: 'Prompt Template Before Chat · As System Message',
|
||||
annotationTip: 'Improvements Marked by {{user}}',
|
||||
timeConsuming: '',
|
||||
second: 's',
|
||||
tokenCost: 'Token spent',
|
||||
loading: 'loading',
|
||||
operation: {
|
||||
like: 'like',
|
||||
dislike: 'dislike',
|
||||
addAnnotation: 'Add Improvement',
|
||||
editAnnotation: 'Edit Improvement',
|
||||
annotationPlaceholder: 'Enter the expected answer that you want AI to reply, which can be used for model fine-tuning and continuous improvement of text generation quality in the future.',
|
||||
},
|
||||
variables: 'Variables',
|
||||
uploadImages: 'Uploaded Images',
|
||||
modelParams: 'Model parameters',
|
||||
},
|
||||
filter: {
|
||||
period: {
|
||||
today: 'Today',
|
||||
last7days: 'Last 7 Days',
|
||||
last30days: 'Last 30 Days',
|
||||
last4weeks: 'Last 4 weeks',
|
||||
last3months: 'Last 3 months',
|
||||
last12months: 'Last 12 months',
|
||||
monthToDate: 'Month to date',
|
||||
quarterToDate: 'Quarter to date',
|
||||
yearToDate: 'Year to date',
|
||||
allTime: 'All time',
|
||||
custom: 'Custom',
|
||||
},
|
||||
annotation: {
|
||||
all: 'All',
|
||||
annotated: 'Annotated Improvements ({{count}} items)',
|
||||
not_annotated: 'Not Annotated',
|
||||
},
|
||||
sortBy: 'Sort by:',
|
||||
descending: 'descending',
|
||||
ascending: 'ascending',
|
||||
},
|
||||
workflowTitle: 'Workflow Logs',
|
||||
workflowSubtitle: 'The log recorded the operation of Automate.',
|
||||
runDetail: {
|
||||
title: 'Conversation Log',
|
||||
workflowTitle: 'Log Detail',
|
||||
fileListLabel: 'File Details',
|
||||
fileListDetail: 'Detail',
|
||||
testWithParams: 'Test With Params',
|
||||
},
|
||||
promptLog: 'Prompt Log',
|
||||
agentLog: 'Agent Log',
|
||||
viewLog: 'View Log',
|
||||
agentLogDetail: {
|
||||
agentMode: 'Agent Mode',
|
||||
toolUsed: 'Tool Used',
|
||||
iterations: 'Iterations',
|
||||
iteration: 'Iteration',
|
||||
finalProcessing: 'Final Processing',
|
||||
},
|
||||
triggerBy: {
|
||||
debugging: 'Debugging',
|
||||
appRun: 'WebApp',
|
||||
webhook: 'Webhook',
|
||||
schedule: 'Schedule',
|
||||
plugin: 'Plugin',
|
||||
ragPipelineRun: 'RAG Pipeline',
|
||||
ragPipelineDebugging: 'RAG Debugging',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
189
dify/web/i18n/en-US/app-overview.ts
Normal file
189
dify/web/i18n/en-US/app-overview.ts
Normal file
@@ -0,0 +1,189 @@
|
||||
const translation = {
|
||||
welcome: {
|
||||
firstStepTip: 'To get started,',
|
||||
enterKeyTip: 'enter your OpenAI API Key below',
|
||||
getKeyTip: 'Get your API Key from OpenAI dashboard',
|
||||
placeholder: 'Your OpenAI API Key (eg.sk-xxxx)',
|
||||
},
|
||||
apiKeyInfo: {
|
||||
cloud: {
|
||||
trial: {
|
||||
title: 'You are using the {{providerName}} trial quota.',
|
||||
description: 'The trial quota is provided for your testing purposes. Before the trial quota is exhausted, please set up your own model provider or purchase additional quota.',
|
||||
},
|
||||
exhausted: {
|
||||
title: 'Your trial quota have been used up, please set up your APIKey.',
|
||||
description: 'You have exhausted your trial quota. Please set up your own model provider or purchase additional quota.',
|
||||
},
|
||||
},
|
||||
selfHost: {
|
||||
title: {
|
||||
row1: 'To get started,',
|
||||
row2: 'setup your model provider first.',
|
||||
},
|
||||
},
|
||||
callTimes: 'Call times',
|
||||
usedToken: 'Used token',
|
||||
setAPIBtn: 'Go to setup model provider',
|
||||
tryCloud: 'Or try the cloud version of Dify with free quote',
|
||||
},
|
||||
overview: {
|
||||
title: 'Overview',
|
||||
appInfo: {
|
||||
title: 'Web App',
|
||||
explanation: 'Ready-to-use AI web app',
|
||||
accessibleAddress: 'Public URL',
|
||||
preview: 'Preview',
|
||||
launch: 'Launch',
|
||||
regenerate: 'Regenerate',
|
||||
regenerateNotice: 'Do you want to regenerate the public URL?',
|
||||
preUseReminder: 'Please enable web app before continuing.',
|
||||
enableTooltip: {
|
||||
description: 'To enable this feature, please add a User Input node to the canvas. (May already exist in draft, takes effect after publishing)',
|
||||
learnMore: 'Learn more',
|
||||
},
|
||||
settings: {
|
||||
entry: 'Settings',
|
||||
title: 'Web App Settings',
|
||||
modalTip: 'Client-side web app settings. ',
|
||||
webName: 'web app Name',
|
||||
webDesc: 'web app Description',
|
||||
webDescTip: 'This text will be displayed on the client side, providing basic guidance on how to use the application',
|
||||
webDescPlaceholder: 'Enter the description of the web app',
|
||||
language: 'Language',
|
||||
workflow: {
|
||||
title: 'Workflow',
|
||||
subTitle: 'Workflow Details',
|
||||
show: 'Show',
|
||||
hide: 'Hide',
|
||||
showDesc: 'Show or hide workflow details in web app',
|
||||
},
|
||||
chatColorTheme: 'Chat color theme',
|
||||
chatColorThemeDesc: 'Set the color theme of the chatbot',
|
||||
chatColorThemeInverted: 'Inverted',
|
||||
invalidHexMessage: 'Invalid hex value',
|
||||
invalidPrivacyPolicy: 'Invalid privacy policy link. Please use a valid link that starts with http or https',
|
||||
sso: {
|
||||
label: 'SSO Enforcement',
|
||||
title: 'web app SSO',
|
||||
description: 'All users are required to login with SSO before using web app',
|
||||
tooltip: 'Contact the administrator to enable web app SSO',
|
||||
},
|
||||
more: {
|
||||
entry: 'Show more settings',
|
||||
copyright: 'Copyright',
|
||||
copyrightTip: 'Display copyright information in the web app',
|
||||
copyrightTooltip: 'Please upgrade to Professional plan or above',
|
||||
copyRightPlaceholder: 'Enter the name of the author or organization',
|
||||
privacyPolicy: 'Privacy Policy',
|
||||
privacyPolicyPlaceholder: 'Enter the privacy policy link',
|
||||
privacyPolicyTip: 'Helps visitors understand the data the application collects, see Dify\'s <privacyPolicyLink>Privacy Policy</privacyPolicyLink>.',
|
||||
customDisclaimer: 'Custom Disclaimer',
|
||||
customDisclaimerPlaceholder: 'Enter the custom disclaimer text',
|
||||
customDisclaimerTip: 'Custom disclaimer text will be displayed on the client side, providing additional information about the application',
|
||||
},
|
||||
},
|
||||
embedded: {
|
||||
entry: 'Embedded',
|
||||
title: 'Embed on website',
|
||||
explanation: 'Choose the way to embed chat app to your website',
|
||||
iframe: 'To add the chat app any where on your website, add this iframe to your html code.',
|
||||
scripts: 'To add a chat app to the bottom right of your website add this code to your html.',
|
||||
chromePlugin: 'Install Dify Chatbot Chrome Extension',
|
||||
copied: 'Copied',
|
||||
copy: 'Copy',
|
||||
},
|
||||
qrcode: {
|
||||
title: 'Link QR Code',
|
||||
scan: 'Scan To Share',
|
||||
download: 'Download QR Code',
|
||||
},
|
||||
customize: {
|
||||
way: 'way',
|
||||
entry: 'Customize',
|
||||
title: 'Customize AI web app',
|
||||
explanation: 'You can customize the frontend of the Web App to fit your scenario and style needs.',
|
||||
way1: {
|
||||
name: 'Fork the client code, modify it and deploy to Vercel (recommended)',
|
||||
step1: 'Fork the client code and modify it',
|
||||
step1Tip: 'Click here to fork the source code into your GitHub account and modify the code',
|
||||
step1Operation: 'Dify-WebClient',
|
||||
step2: 'Deploy to Vercel',
|
||||
step2Tip: 'Click here to import the repository into Vercel and deploy',
|
||||
step2Operation: 'Import repository',
|
||||
step3: 'Configure environment variables',
|
||||
step3Tip: 'Add the following environment variables in Vercel',
|
||||
},
|
||||
way2: {
|
||||
name: 'Write client-side code to call the API and deploy it to a server',
|
||||
operation: 'Documentation',
|
||||
},
|
||||
},
|
||||
},
|
||||
apiInfo: {
|
||||
title: 'Backend Service API',
|
||||
explanation: 'Easily integrated into your application',
|
||||
accessibleAddress: 'Service API Endpoint',
|
||||
doc: 'API Reference',
|
||||
},
|
||||
triggerInfo: {
|
||||
title: 'Triggers',
|
||||
explanation: 'Workflow trigger management',
|
||||
triggersAdded: '{{count}} Triggers added',
|
||||
noTriggerAdded: 'No trigger added',
|
||||
triggerStatusDescription: 'Trigger node status appears here. (May already exist in draft, takes effect after publishing)',
|
||||
learnAboutTriggers: 'Learn about Triggers',
|
||||
},
|
||||
status: {
|
||||
running: 'In Service',
|
||||
disable: 'Disabled',
|
||||
},
|
||||
disableTooltip: {
|
||||
triggerMode: 'The {{feature}} feature is not supported in Trigger Node mode.',
|
||||
},
|
||||
},
|
||||
analysis: {
|
||||
title: 'Analysis',
|
||||
ms: 'ms',
|
||||
tokenPS: 'Token/s',
|
||||
totalMessages: {
|
||||
title: 'Total Messages',
|
||||
explanation: 'Daily AI interactions count.',
|
||||
},
|
||||
totalConversations: {
|
||||
title: 'Total Conversations',
|
||||
explanation: 'Daily AI conversations count; prompt engineering/debugging excluded.',
|
||||
},
|
||||
activeUsers: {
|
||||
title: 'Active Users',
|
||||
explanation: 'Unique users engaging in Q&A with AI; prompt engineering/debugging excluded.',
|
||||
},
|
||||
tokenUsage: {
|
||||
title: 'Token Usage',
|
||||
explanation: 'Reflects the daily token usage of the language model for the application, useful for cost control purposes.',
|
||||
consumed: 'Consumed',
|
||||
},
|
||||
avgSessionInteractions: {
|
||||
title: 'Avg. Session Interactions',
|
||||
explanation: 'Continuous user-AI communication count; for conversation-based apps.',
|
||||
},
|
||||
avgUserInteractions: {
|
||||
title: 'Avg. User Interactions',
|
||||
explanation: 'Reflects the daily usage frequency of users. This metric reflects user stickiness.',
|
||||
},
|
||||
userSatisfactionRate: {
|
||||
title: 'User Satisfaction Rate',
|
||||
explanation: 'The number of likes per 1,000 messages. This indicates the proportion of answers that users are highly satisfied with.',
|
||||
},
|
||||
avgResponseTime: {
|
||||
title: 'Avg. Response Time',
|
||||
explanation: 'Time (ms) for AI to process/respond; for text-based apps.',
|
||||
},
|
||||
tps: {
|
||||
title: 'Token Output Speed',
|
||||
explanation: 'Measure the performance of the LLM. Count the Tokens output speed of LLM from the beginning of the request to the completion of the output.',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
349
dify/web/i18n/en-US/app.ts
Normal file
349
dify/web/i18n/en-US/app.ts
Normal file
@@ -0,0 +1,349 @@
|
||||
const translation = {
|
||||
createApp: 'CREATE APP',
|
||||
types: {
|
||||
all: 'All',
|
||||
chatbot: 'Chatbot',
|
||||
agent: 'Agent',
|
||||
workflow: 'Workflow',
|
||||
completion: 'Completion',
|
||||
advanced: 'Chatflow',
|
||||
basic: 'Basic',
|
||||
},
|
||||
duplicate: 'Duplicate',
|
||||
mermaid: {
|
||||
handDrawn: 'Hand Drawn',
|
||||
classic: 'Classic',
|
||||
},
|
||||
duplicateTitle: 'Duplicate App',
|
||||
export: 'Export DSL',
|
||||
exportFailed: 'Export DSL failed.',
|
||||
importDSL: 'Import DSL file',
|
||||
createFromConfigFile: 'Create from DSL file',
|
||||
importFromDSL: 'Import from DSL',
|
||||
importFromDSLFile: 'From DSL file',
|
||||
importFromDSLUrl: 'From URL',
|
||||
importFromDSLUrlPlaceholder: 'Paste DSL link here',
|
||||
dslUploader: {
|
||||
button: 'Drag and drop file, or',
|
||||
browse: 'Browse',
|
||||
},
|
||||
deleteAppConfirmTitle: 'Delete this app?',
|
||||
deleteAppConfirmContent:
|
||||
'Deleting the app is irreversible. Users will no longer be able to access your app, and all prompt configurations and logs will be permanently deleted.',
|
||||
appDeleted: 'App deleted',
|
||||
appDeleteFailed: 'Failed to delete app',
|
||||
join: 'Join the community',
|
||||
communityIntro:
|
||||
'Discuss with team members, contributors and developers on different channels.',
|
||||
roadmap: 'See our roadmap',
|
||||
newApp: {
|
||||
learnMore: 'Learn more',
|
||||
startFromBlank: 'Create from Blank',
|
||||
startFromTemplate: 'Create from Template',
|
||||
foundResult: '{{count}} Result',
|
||||
foundResults: '{{count}} Results',
|
||||
noAppsFound: 'No apps found',
|
||||
noTemplateFound: 'No templates found',
|
||||
noTemplateFoundTip: 'Try searching using different keywords.',
|
||||
chatbotShortDescription: 'LLM-based chatbot with simple setup',
|
||||
chatbotUserDescription: 'Quickly build an LLM-based chatbot with simple configuration. You can switch to Chatflow later.',
|
||||
completionShortDescription: 'AI assistant for text generation tasks',
|
||||
completionUserDescription: 'Quickly build an AI assistant for text generation tasks with simple configuration.',
|
||||
agentShortDescription: 'Intelligent agent with reasoning and autonomous tool use',
|
||||
agentUserDescription: 'An intelligent agent capable of iterative reasoning and autonomous tool use to achieve task goals.',
|
||||
workflowShortDescription: 'Agentic flow for intelligent automations',
|
||||
workflowUserDescription: 'Visually build autonomous AI workflows with drag-and-drop simplicity.',
|
||||
workflowWarning: 'Currently in beta',
|
||||
advancedShortDescription: 'Workflow enhanced for multi-turn chats',
|
||||
advancedUserDescription: 'Workflow with additional memory features and a chatbot interface.',
|
||||
chooseAppType: 'Choose an App Type',
|
||||
forBeginners: 'More basic app types',
|
||||
forAdvanced: 'FOR ADVANCED USERS',
|
||||
noIdeaTip: 'No ideas? Check out our templates',
|
||||
captionName: 'App Name & Icon',
|
||||
appNamePlaceholder: 'Give your app a name',
|
||||
captionDescription: 'Description',
|
||||
optional: 'Optional',
|
||||
appDescriptionPlaceholder: 'Enter the description of the app',
|
||||
useTemplate: 'Use this template',
|
||||
previewDemo: 'Preview demo',
|
||||
chatApp: 'Assistant',
|
||||
chatAppIntro:
|
||||
'I want to build a chat-based application. This app uses a question-and-answer format, allowing for multiple rounds of continuous conversation.',
|
||||
agentAssistant: 'New Agent Assistant',
|
||||
completeApp: 'Text Generator',
|
||||
completeAppIntro:
|
||||
'I want to create an application that generates high-quality text based on prompts, such as generating articles, summaries, translations, and more.',
|
||||
showTemplates: 'I want to choose from a template',
|
||||
hideTemplates: 'Go back to mode selection',
|
||||
Create: 'Create',
|
||||
Cancel: 'Cancel',
|
||||
Confirm: 'Confirm',
|
||||
import: 'Import',
|
||||
nameNotEmpty: 'Name cannot be empty',
|
||||
appTemplateNotSelected: 'Please select a template',
|
||||
appTypeRequired: 'Please select an app type',
|
||||
appCreated: 'App created',
|
||||
caution: 'Caution',
|
||||
appCreateDSLWarning: 'Caution: DSL version difference may affect certain features',
|
||||
appCreateDSLErrorTitle: 'Version Incompatibility',
|
||||
appCreateDSLErrorPart1: 'A significant difference in DSL versions has been detected. Forcing the import may cause the application to malfunction.',
|
||||
appCreateDSLErrorPart2: 'Do you want to continue?',
|
||||
appCreateDSLErrorPart3: 'Current application DSL version: ',
|
||||
appCreateDSLErrorPart4: 'System-supported DSL version: ',
|
||||
appCreateFailed: 'Failed to create app',
|
||||
dropDSLToCreateApp: 'Drop DSL file here to create app',
|
||||
},
|
||||
newAppFromTemplate: {
|
||||
byCategories: 'BY CATEGORIES',
|
||||
searchAllTemplate: 'Search all templates...',
|
||||
sidebar: {
|
||||
Recommended: 'Recommended',
|
||||
Agent: 'Agent',
|
||||
Assistant: 'Assistant',
|
||||
HR: 'HR',
|
||||
Workflow: 'Workflow',
|
||||
Writing: 'Writing',
|
||||
Programming: 'Programming',
|
||||
},
|
||||
},
|
||||
editApp: 'Edit Info',
|
||||
editAppTitle: 'Edit App Info',
|
||||
editDone: 'App info updated',
|
||||
editFailed: 'Failed to update app info',
|
||||
iconPicker: {
|
||||
ok: 'OK',
|
||||
cancel: 'Cancel',
|
||||
emoji: 'Emoji',
|
||||
image: 'Image',
|
||||
},
|
||||
answerIcon: {
|
||||
title: 'Use web app icon to replace 🤖',
|
||||
description: 'Whether to use the web app icon to replace 🤖 in the shared application',
|
||||
descriptionInExplore: 'Whether to use the web app icon to replace 🤖 in Explore',
|
||||
},
|
||||
switch: 'Switch to Workflow Orchestrate',
|
||||
switchTipStart: 'A new app copy will be created for you, and the new copy will switch to Workflow Orchestrate. The new copy will ',
|
||||
switchTip: 'not allow',
|
||||
switchTipEnd: ' switching back to Basic Orchestrate.',
|
||||
switchLabel: 'The app copy to be created',
|
||||
removeOriginal: 'Delete the original app',
|
||||
switchStart: 'Start switch',
|
||||
openInExplore: 'Open in Explore',
|
||||
typeSelector: {
|
||||
all: 'All Types ',
|
||||
chatbot: 'Chatbot',
|
||||
agent: 'Agent',
|
||||
workflow: 'Workflow',
|
||||
completion: 'Completion',
|
||||
advanced: 'Chatflow',
|
||||
},
|
||||
tracing: {
|
||||
title: 'Tracing app performance',
|
||||
description: 'Configuring a Third-Party LLMOps provider and tracing app performance.',
|
||||
config: 'Config',
|
||||
view: 'View',
|
||||
collapse: 'Collapse',
|
||||
expand: 'Expand',
|
||||
tracing: 'Tracing',
|
||||
disabled: 'Disabled',
|
||||
disabledTip: 'Please config provider first',
|
||||
enabled: 'In Service',
|
||||
tracingDescription: 'Capture the full context of app execution, including LLM calls, context, prompts, HTTP requests, and more, to a third-party tracing platform.',
|
||||
configProviderTitle: {
|
||||
configured: 'Configured',
|
||||
notConfigured: 'Config provider to enable tracing',
|
||||
moreProvider: 'More Provider',
|
||||
},
|
||||
arize: {
|
||||
title: 'Arize',
|
||||
description: 'Enterprise-grade LLM observability, online & offline evaluation, monitoring, and experimentation—powered by OpenTelemetry. Purpose-built for LLM & agent-driven applications.',
|
||||
},
|
||||
phoenix: {
|
||||
title: 'Phoenix',
|
||||
description: 'Open-source & OpenTelemetry-based observability, evaluation, prompt engineering and experimentation platform for your LLM workflows and agents.',
|
||||
},
|
||||
langsmith: {
|
||||
title: 'LangSmith',
|
||||
description: 'An all-in-one developer platform for every step of the LLM-powered application lifecycle.',
|
||||
},
|
||||
langfuse: {
|
||||
title: 'Langfuse',
|
||||
description: 'Open-source LLM observability, evaluation, prompt management and metrics to debug and improve your LLM application.',
|
||||
},
|
||||
opik: {
|
||||
title: 'Opik',
|
||||
description: 'Opik is an open-source platform for evaluating, testing, and monitoring LLM applications.',
|
||||
},
|
||||
weave: {
|
||||
title: 'Weave',
|
||||
description: 'Weave is an open-source platform for evaluating, testing, and monitoring LLM applications.',
|
||||
},
|
||||
aliyun: {
|
||||
title: 'Cloud Monitor',
|
||||
description: 'The fully-managed and maintenance-free observability platform provided by Alibaba Cloud, enables out-of-the-box monitoring, tracing, and evaluation of Dify applications.',
|
||||
},
|
||||
mlflow: {
|
||||
title: 'MLflow',
|
||||
description: 'MLflow is an open-source platform for experiment management, evaluation, and monitoring of LLM applications.',
|
||||
},
|
||||
databricks: {
|
||||
title: 'Databricks',
|
||||
description: 'Databricks offers fully-managed MLflow with strong governance and security for storing trace data.',
|
||||
},
|
||||
tencent: {
|
||||
title: 'Tencent APM',
|
||||
description: 'Tencent Application Performance Monitoring provides comprehensive tracing and multi-dimensional analysis for LLM applications.',
|
||||
},
|
||||
inUse: 'In use',
|
||||
configProvider: {
|
||||
title: 'Config ',
|
||||
placeholder: 'Enter your {{key}}',
|
||||
project: 'Project',
|
||||
trackingUri: 'Tracking URI',
|
||||
experimentId: 'Experiment ID',
|
||||
username: 'Username',
|
||||
password: 'Password',
|
||||
publicKey: 'Public Key',
|
||||
secretKey: 'Secret Key',
|
||||
viewDocsLink: 'View {{key}} docs',
|
||||
removeConfirmTitle: 'Remove {{key}} configuration?',
|
||||
removeConfirmContent: 'The current configuration is in use, removing it will turn off the Tracing feature.',
|
||||
clientId: 'OAuth Client ID',
|
||||
clientSecret: 'OAuth Client Secret',
|
||||
personalAccessToken: 'Personal Access Token (legacy)',
|
||||
databricksHost: 'Databricks Workspace URL',
|
||||
},
|
||||
},
|
||||
appSelector: {
|
||||
label: 'APP',
|
||||
placeholder: 'Select an app...',
|
||||
params: 'APP PARAMETERS',
|
||||
noParams: 'No parameters needed',
|
||||
},
|
||||
showMyCreatedAppsOnly: 'Created by me',
|
||||
structOutput: {
|
||||
moreFillTip: 'Showing max 10 levels of nesting',
|
||||
required: 'Required',
|
||||
LLMResponse: 'LLM Response',
|
||||
configure: 'Configure',
|
||||
notConfiguredTip: 'Structured output has not been configured yet',
|
||||
structured: 'Structured',
|
||||
structuredTip: 'Structured Outputs is a feature that ensures the model will always generate responses that adhere to your supplied JSON Schema',
|
||||
modelNotSupported: 'Model not supported',
|
||||
modelNotSupportedTip: 'The current model does not support this feature and is automatically downgraded to prompt injection.',
|
||||
},
|
||||
accessControl: 'Web App Access Control',
|
||||
accessItemsDescription: {
|
||||
anyone: 'Anyone can access the web app (no login required)',
|
||||
specific: 'Only specific members within the platform can access the web app',
|
||||
organization: 'All members within the platform can access the web app',
|
||||
external: 'Only authenticated external users can access the web app',
|
||||
},
|
||||
accessControlDialog: {
|
||||
title: 'Web App Access Control',
|
||||
description: 'Set web app access permissions',
|
||||
accessLabel: 'Who has access',
|
||||
accessItems: {
|
||||
anyone: 'Anyone with the link',
|
||||
specific: 'Specific members within the platform',
|
||||
organization: 'All members within the platform',
|
||||
external: 'Authenticated external users',
|
||||
},
|
||||
groups_one: '{{count}} GROUP',
|
||||
groups_other: '{{count}} GROUPS',
|
||||
members_one: '{{count}} MEMBER',
|
||||
members_other: '{{count}} MEMBERS',
|
||||
noGroupsOrMembers: 'No groups or members selected',
|
||||
webAppSSONotEnabledTip: 'Please contact your organization administrator to configure external authentication for the web app.',
|
||||
operateGroupAndMember: {
|
||||
searchPlaceholder: 'Search groups and members',
|
||||
allMembers: 'All members',
|
||||
expand: 'Expand',
|
||||
noResult: 'No result',
|
||||
},
|
||||
updateSuccess: 'Update successfully',
|
||||
},
|
||||
publishApp: {
|
||||
title: 'Who can access web app',
|
||||
notSet: 'Not set',
|
||||
notSetDesc: 'Currently nobody can access the web app. Please set permissions.',
|
||||
},
|
||||
noAccessPermission: 'No permission to access web app',
|
||||
noUserInputNode: 'Missing user input node',
|
||||
notPublishedYet: 'App is not published yet',
|
||||
maxActiveRequests: 'Max concurrent requests',
|
||||
maxActiveRequestsPlaceholder: 'Enter 0 for unlimited',
|
||||
maxActiveRequestsTip: 'Maximum number of concurrent active requests per app (0 for unlimited)',
|
||||
gotoAnything: {
|
||||
searchPlaceholder: 'Search or type @ or / for commands...',
|
||||
searchTitle: 'Search for anything',
|
||||
searching: 'Searching...',
|
||||
noResults: 'No results found',
|
||||
searchFailed: 'Search failed',
|
||||
searchTemporarilyUnavailable: 'Search temporarily unavailable',
|
||||
servicesUnavailableMessage: 'Some search services may be experiencing issues. Try again in a moment.',
|
||||
someServicesUnavailable: 'Some search services unavailable',
|
||||
resultCount: '{{count}} result',
|
||||
resultCount_other: '{{count}} results',
|
||||
inScope: 'in {{scope}}s',
|
||||
clearToSearchAll: 'Clear @ to search all',
|
||||
useAtForSpecific: 'Use @ for specific types',
|
||||
selectToNavigate: 'Select to navigate',
|
||||
startTyping: 'Start typing to search',
|
||||
tips: 'Press ↑↓ to navigate',
|
||||
pressEscToClose: 'Press ESC to close',
|
||||
selectSearchType: 'Choose what to search for',
|
||||
searchHint: 'Start typing to search everything instantly',
|
||||
commandHint: 'Type @ to browse by category',
|
||||
slashHint: 'Type / to see all available commands',
|
||||
actions: {
|
||||
searchApplications: 'Search Applications',
|
||||
searchApplicationsDesc: 'Search and navigate to your applications',
|
||||
searchPlugins: 'Search Plugins',
|
||||
searchPluginsDesc: 'Search and navigate to your plugins',
|
||||
searchKnowledgeBases: 'Search Knowledge Bases',
|
||||
searchKnowledgeBasesDesc: 'Search and navigate to your knowledge bases',
|
||||
searchWorkflowNodes: 'Search Workflow Nodes',
|
||||
searchWorkflowNodesDesc: 'Find and jump to nodes in the current workflow by name or type',
|
||||
searchWorkflowNodesHelp: 'This feature only works when viewing a workflow. Navigate to a workflow first.',
|
||||
runTitle: 'Commands',
|
||||
runDesc: 'Run quick commands (theme, language, ...)',
|
||||
themeCategoryTitle: 'Theme',
|
||||
themeCategoryDesc: 'Switch application theme',
|
||||
themeSystem: 'System Theme',
|
||||
themeSystemDesc: 'Follow your OS appearance',
|
||||
themeLight: 'Light Theme',
|
||||
themeLightDesc: 'Use light appearance',
|
||||
themeDark: 'Dark Theme',
|
||||
themeDarkDesc: 'Use dark appearance',
|
||||
languageCategoryTitle: 'Language',
|
||||
languageCategoryDesc: 'Switch interface language',
|
||||
languageChangeDesc: 'Change UI language',
|
||||
slashDesc: 'Execute commands (type / to see all available commands)',
|
||||
accountDesc: 'Navigate to account page',
|
||||
communityDesc: 'Open Discord community',
|
||||
docDesc: 'Open help documentation',
|
||||
feedbackDesc: 'Open community feedback discussions',
|
||||
},
|
||||
emptyState: {
|
||||
noAppsFound: 'No apps found',
|
||||
noPluginsFound: 'No plugins found',
|
||||
noKnowledgeBasesFound: 'No knowledge bases found',
|
||||
noWorkflowNodesFound: 'No workflow nodes found',
|
||||
tryDifferentTerm: 'Try a different search term',
|
||||
trySpecificSearch: 'Try {{shortcuts}} for specific searches',
|
||||
},
|
||||
groups: {
|
||||
apps: 'Apps',
|
||||
plugins: 'Plugins',
|
||||
knowledgeBases: 'Knowledge Bases',
|
||||
workflowNodes: 'Workflow Nodes',
|
||||
commands: 'Commands',
|
||||
},
|
||||
noMatchingCommands: 'No matching commands found',
|
||||
tryDifferentSearch: 'Try a different search term',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
222
dify/web/i18n/en-US/billing.ts
Normal file
222
dify/web/i18n/en-US/billing.ts
Normal file
@@ -0,0 +1,222 @@
|
||||
const translation = {
|
||||
currentPlan: 'Current Plan',
|
||||
usagePage: {
|
||||
teamMembers: 'Team Members',
|
||||
buildApps: 'Build Apps',
|
||||
annotationQuota: 'Annotation Quota',
|
||||
documentsUploadQuota: 'Documents Upload Quota',
|
||||
vectorSpace: 'Knowledge Data Storage',
|
||||
vectorSpaceTooltip: 'Documents with the High Quality indexing mode will consume Knowledge Data Storage resources. When Knowledge Data Storage reaches the limit, new documents will not be uploaded.',
|
||||
triggerEvents: 'Trigger Events',
|
||||
perMonth: 'per month',
|
||||
resetsIn: 'Resets in {{count,number}} days',
|
||||
},
|
||||
teamMembers: 'Team Members',
|
||||
triggerLimitModal: {
|
||||
title: 'Upgrade to unlock more trigger events',
|
||||
description: 'You\'ve reached the limit of workflow event triggers for this plan.',
|
||||
dismiss: 'Dismiss',
|
||||
upgrade: 'Upgrade',
|
||||
usageTitle: 'TRIGGER EVENTS',
|
||||
},
|
||||
upgradeBtn: {
|
||||
plain: 'View Plan',
|
||||
encourage: 'Upgrade Now',
|
||||
encourageShort: 'Upgrade',
|
||||
},
|
||||
viewBilling: 'Manage billing and subscriptions',
|
||||
buyPermissionDeniedTip: 'Please contact your enterprise administrator to subscribe',
|
||||
plansCommon: {
|
||||
title: {
|
||||
plans: 'plans',
|
||||
description: 'Select the plan that best fits your team\'s needs.',
|
||||
},
|
||||
freeTrialTipPrefix: 'Sign up and get a ',
|
||||
freeTrialTip: 'free trial of 200 OpenAI calls. ',
|
||||
freeTrialTipSuffix: 'No credit card required',
|
||||
yearlyTip: 'Pay for 10 months, enjoy 1 Year!',
|
||||
mostPopular: 'Popular',
|
||||
cloud: 'Cloud Service',
|
||||
self: 'Self-Hosted',
|
||||
planRange: {
|
||||
monthly: 'Monthly',
|
||||
yearly: 'Yearly',
|
||||
},
|
||||
month: 'month',
|
||||
year: 'year',
|
||||
save: 'Save ',
|
||||
free: 'Free',
|
||||
annualBilling: 'Bill Annually Save {{percent}}%',
|
||||
taxTip: 'All subscription prices (monthly/annual) exclude applicable taxes (e.g., VAT, sales tax).',
|
||||
taxTipSecond: 'If your region has no applicable tax requirements, no tax will appear in your checkout, and you won’t be charged any additional fees for the entire subscription term.',
|
||||
comparePlanAndFeatures: 'Compare plans & features',
|
||||
priceTip: 'per workspace/',
|
||||
currentPlan: 'Current Plan',
|
||||
contractSales: 'Contact sales',
|
||||
contractOwner: 'Contact team manager',
|
||||
startForFree: 'Start for Free',
|
||||
startBuilding: 'Start Building',
|
||||
getStarted: 'Get Started',
|
||||
contactSales: 'Contact Sales',
|
||||
talkToSales: 'Talk to Sales',
|
||||
modelProviders: 'Support OpenAI/Anthropic/Llama2/Azure OpenAI/Hugging Face/Replicate',
|
||||
teamWorkspace: '{{count,number}} Team Workspace',
|
||||
teamMember_one: '{{count,number}} Team Member',
|
||||
teamMember_other: '{{count,number}} Team Members',
|
||||
annotationQuota: 'Annotation Quota',
|
||||
buildApps: '{{count,number}} Apps',
|
||||
documents: '{{count,number}} Knowledge Documents',
|
||||
documentsTooltip: 'Quota on the number of documents imported from the Knowledge Data Source.',
|
||||
vectorSpace: '{{size}} Knowledge Data Storage',
|
||||
vectorSpaceTooltip: 'Documents with the High Quality indexing mode will consume Knowledge Data Storage resources. When Knowledge Data Storage reaches the limit, new documents will not be uploaded.',
|
||||
documentsRequestQuota: '{{count,number}} Knowledge Request/min',
|
||||
documentsRequestQuotaTooltip: 'Specifies the total number of actions a workspace can perform per minute within the knowledge base, including dataset creation, deletion, updates, document uploads, modifications, archiving, and knowledge base queries. This metric is used to evaluate the performance of knowledge base requests. For example, if a Sandbox user performs 10 consecutive hit tests within one minute, their workspace will be temporarily restricted from performing the following actions for the next minute: dataset creation, deletion, updates, and document uploads or modifications. ',
|
||||
apiRateLimit: 'API Rate Limit',
|
||||
apiRateLimitUnit: '{{count,number}}',
|
||||
unlimitedApiRate: 'No Dify API Rate Limit',
|
||||
apiRateLimitTooltip: 'API Rate Limit applies to all requests made through the Dify API, including text generation, chat conversations, workflow executions, and document processing.',
|
||||
documentProcessingPriority: ' Document Processing',
|
||||
documentProcessingPriorityUpgrade: 'Process more data with higher accuracy at faster speeds.',
|
||||
priority: {
|
||||
'standard': 'Standard',
|
||||
'priority': 'Priority',
|
||||
'top-priority': 'Top Priority',
|
||||
},
|
||||
triggerEvents: {
|
||||
sandbox: '{{count,number}} Trigger Events',
|
||||
professional: '{{count,number}} Trigger Events/month',
|
||||
unlimited: 'Unlimited Trigger Events',
|
||||
tooltip: 'The number of events that automatically start workflows through Plugin, Schedule, or Webhook triggers.',
|
||||
},
|
||||
workflowExecution: {
|
||||
standard: 'Standard Workflow Execution',
|
||||
faster: 'Faster Workflow Execution',
|
||||
priority: 'Priority Workflow Execution',
|
||||
tooltip: 'Workflow execution queue priority and speed.',
|
||||
},
|
||||
startNodes: {
|
||||
limited: 'Up to {{count}} Triggers/workflow',
|
||||
unlimited: 'Unlimited Triggers/workflow',
|
||||
},
|
||||
logsHistory: '{{days}} Log history',
|
||||
customTools: 'Custom Tools',
|
||||
unavailable: 'Unavailable',
|
||||
days: 'Days',
|
||||
unlimited: 'Unlimited',
|
||||
support: 'Support',
|
||||
supportItems: {
|
||||
communityForums: 'Community forums',
|
||||
emailSupport: 'Email support',
|
||||
priorityEmail: 'Priority email & chat support',
|
||||
logoChange: 'Logo change',
|
||||
SSOAuthentication: 'SSO authentication',
|
||||
personalizedSupport: 'Personalized support',
|
||||
dedicatedAPISupport: 'Dedicated API support',
|
||||
customIntegration: 'Custom integration and support',
|
||||
ragAPIRequest: 'RAG API Requests',
|
||||
bulkUpload: 'Bulk upload documents',
|
||||
agentMode: 'Agent Mode',
|
||||
workflow: 'Workflow',
|
||||
llmLoadingBalancing: 'LLM Load Balancing',
|
||||
llmLoadingBalancingTooltip: 'Add multiple API keys to models, effectively bypassing the API rate limits. ',
|
||||
},
|
||||
comingSoon: 'Coming soon',
|
||||
member: 'Member',
|
||||
memberAfter: 'Member',
|
||||
messageRequest: {
|
||||
title: '{{count,number}} message credits',
|
||||
titlePerMonth: '{{count,number}} message credits/month',
|
||||
tooltip: 'Message credits are provided to help you easily try out different OpenAI models in Dify. Credits are consumed based on the model type. Once they’re used up, you can switch to your own OpenAI API key.',
|
||||
},
|
||||
annotatedResponse: {
|
||||
title: '{{count,number}} Annotation Quota Limits',
|
||||
tooltip: 'Manual editing and annotation of responses provides customizable high-quality question-answering abilities for apps. (Applicable only in Chat apps)',
|
||||
},
|
||||
ragAPIRequestTooltip: 'Refers to the number of API calls invoking only the knowledge base processing capabilities of Dify.',
|
||||
receiptInfo: 'Only team owner and team admin can subscribe and view billing information',
|
||||
},
|
||||
plans: {
|
||||
sandbox: {
|
||||
name: 'Sandbox',
|
||||
for: 'Free Trial of Core Capabilities',
|
||||
description: 'Try core features for free.',
|
||||
},
|
||||
professional: {
|
||||
name: 'Professional',
|
||||
for: 'For Independent Developers/Small Teams',
|
||||
description: 'For independent developers & small teams ready to build production AI applications.',
|
||||
},
|
||||
team: {
|
||||
name: 'Team',
|
||||
for: 'For Medium-sized Teams',
|
||||
description: 'For medium-sized teams requiring collaboration and higher throughput.',
|
||||
},
|
||||
community: {
|
||||
name: 'Community',
|
||||
for: 'For Individual Users, Small Teams, or Non-commercial Projects',
|
||||
description: 'For open-source enthusiasts, individual developers, and non-commercial projects',
|
||||
price: 'Free',
|
||||
btnText: 'Get Started',
|
||||
includesTitle: 'Free Features:',
|
||||
features: [
|
||||
'All Core Features Released Under the Public Repository',
|
||||
'Single Workspace',
|
||||
'Complies with Dify Open Source License',
|
||||
],
|
||||
},
|
||||
premium: {
|
||||
name: 'Premium',
|
||||
for: 'For Mid-sized Organizations and Teams',
|
||||
description: 'For Mid-sized organizations needing deployment flexibility and enhanced support',
|
||||
price: 'Scalable',
|
||||
priceTip: 'Based on Cloud Marketplace',
|
||||
btnText: 'Get Premium on',
|
||||
includesTitle: 'Everything from Community, plus:',
|
||||
comingSoon: 'Microsoft Azure & Google Cloud Support Coming Soon',
|
||||
features: [
|
||||
'Self-managed Reliability by Various Cloud Providers',
|
||||
'Single Workspace',
|
||||
'WebApp Logo & Branding Customization',
|
||||
'Priority Email & Chat Support',
|
||||
],
|
||||
},
|
||||
enterprise: {
|
||||
name: 'Enterprise',
|
||||
for: 'For large-sized Teams',
|
||||
description: 'For enterprise requiring organization-grade security, compliance, scalability, control and custom solutions',
|
||||
price: 'Custom',
|
||||
priceTip: 'Annual Billing Only',
|
||||
btnText: 'Contact Sales',
|
||||
includesTitle: 'Everything from <highlight>Premium</highlight>, plus:',
|
||||
features: [
|
||||
'Enterprise-grade Scalable Deployment Solutions',
|
||||
'Commercial License Authorization',
|
||||
'Exclusive Enterprise Features',
|
||||
'Multiple Workspaces & Enterprise Management',
|
||||
'SSO',
|
||||
'Negotiated SLAs by Dify Partners',
|
||||
'Advanced Security & Controls',
|
||||
'Updates and Maintenance by Dify Officially',
|
||||
'Professional Technical Support',
|
||||
],
|
||||
},
|
||||
},
|
||||
vectorSpace: {
|
||||
fullTip: 'Vector Space is full.',
|
||||
fullSolution: 'Upgrade your plan to get more space.',
|
||||
},
|
||||
apps: {
|
||||
fullTip1: 'Upgrade to create more apps',
|
||||
fullTip1des: 'You\'ve reached the limit of build apps on this plan',
|
||||
fullTip2: 'Plan limit reached',
|
||||
fullTip2des: 'It is recommended to clean up inactive applications to free up usage, or contact us.',
|
||||
contactUs: 'Contact us',
|
||||
},
|
||||
annotatedResponse: {
|
||||
fullTipLine1: 'Upgrade your plan to',
|
||||
fullTipLine2: 'annotate more conversations.',
|
||||
quotaTitle: 'Annotation Reply Quota',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
788
dify/web/i18n/en-US/common.ts
Normal file
788
dify/web/i18n/en-US/common.ts
Normal file
@@ -0,0 +1,788 @@
|
||||
const translation = {
|
||||
theme: {
|
||||
theme: 'Theme',
|
||||
light: 'light',
|
||||
dark: 'dark',
|
||||
auto: 'system',
|
||||
},
|
||||
api: {
|
||||
success: 'Success',
|
||||
actionSuccess: 'Action succeeded',
|
||||
saved: 'Saved',
|
||||
create: 'Created',
|
||||
remove: 'Removed',
|
||||
},
|
||||
operation: {
|
||||
create: 'Create',
|
||||
confirm: 'Confirm',
|
||||
cancel: 'Cancel',
|
||||
clear: 'Clear',
|
||||
save: 'Save',
|
||||
yes: 'Yes',
|
||||
no: 'No',
|
||||
deleteConfirmTitle: 'Delete?',
|
||||
confirmAction: 'Please confirm your action.',
|
||||
saveAndEnable: 'Save & Enable',
|
||||
edit: 'Edit',
|
||||
add: 'Add',
|
||||
added: 'Added',
|
||||
refresh: 'Restart',
|
||||
reset: 'Reset',
|
||||
search: 'Search',
|
||||
noSearchResults: 'No {{content}} were found',
|
||||
resetKeywords: 'Reset keywords',
|
||||
selectCount: '{{count}} Selected',
|
||||
searchCount: 'Find {{count}} {{content}}',
|
||||
noSearchCount: '0 {{content}}',
|
||||
change: 'Change',
|
||||
remove: 'Remove',
|
||||
send: 'Send',
|
||||
copy: 'Copy',
|
||||
copied: 'Copied',
|
||||
lineBreak: 'Line break',
|
||||
sure: 'I\'m sure',
|
||||
download: 'Download',
|
||||
downloadSuccess: 'Download Completed.',
|
||||
downloadFailed: 'Download failed. Please try again later.',
|
||||
viewDetails: 'View Details',
|
||||
delete: 'Delete',
|
||||
now: 'Now',
|
||||
deleteApp: 'Delete App',
|
||||
settings: 'Settings',
|
||||
setup: 'Setup',
|
||||
config: 'Config',
|
||||
getForFree: 'Get for free',
|
||||
reload: 'Reload',
|
||||
ok: 'OK',
|
||||
log: 'Log',
|
||||
learnMore: 'Learn More',
|
||||
params: 'Params',
|
||||
duplicate: 'Duplicate',
|
||||
rename: 'Rename',
|
||||
audioSourceUnavailable: 'AudioSource is unavailable',
|
||||
close: 'Close',
|
||||
copyImage: 'Copy Image',
|
||||
imageCopied: 'Image copied',
|
||||
zoomOut: 'Zoom Out',
|
||||
zoomIn: 'Zoom In',
|
||||
openInNewTab: 'Open in new tab',
|
||||
in: 'in',
|
||||
saveAndRegenerate: 'Save & Regenerate Child Chunks',
|
||||
view: 'View',
|
||||
viewMore: 'VIEW MORE',
|
||||
regenerate: 'Regenerate',
|
||||
submit: 'Submit',
|
||||
skip: 'Skip',
|
||||
format: 'Format',
|
||||
more: 'More',
|
||||
selectAll: 'Select All',
|
||||
deSelectAll: 'Deselect All',
|
||||
},
|
||||
errorMsg: {
|
||||
fieldRequired: '{{field}} is required',
|
||||
urlError: 'url should start with http:// or https://',
|
||||
},
|
||||
placeholder: {
|
||||
input: 'Please enter',
|
||||
select: 'Please select',
|
||||
search: 'Search...',
|
||||
},
|
||||
noData: 'No data',
|
||||
label: {
|
||||
optional: '(optional)',
|
||||
},
|
||||
voice: {
|
||||
language: {
|
||||
zhHans: 'Chinese',
|
||||
zhHant: 'Traditional Chinese',
|
||||
enUS: 'English',
|
||||
deDE: 'German',
|
||||
frFR: 'French',
|
||||
esES: 'Spanish',
|
||||
itIT: 'Italian',
|
||||
thTH: 'Thai',
|
||||
idID: 'Indonesian',
|
||||
jaJP: 'Japanese',
|
||||
koKR: 'Korean',
|
||||
ptBR: 'Portuguese',
|
||||
ruRU: 'Russian',
|
||||
ukUA: 'Ukrainian',
|
||||
viVN: 'Vietnamese',
|
||||
plPL: 'Polish',
|
||||
roRO: 'Romanian',
|
||||
hiIN: 'Hindi',
|
||||
trTR: 'Türkçe',
|
||||
faIR: 'Farsi',
|
||||
},
|
||||
},
|
||||
unit: {
|
||||
char: 'chars',
|
||||
},
|
||||
actionMsg: {
|
||||
noModification: 'No modifications at the moment.',
|
||||
modifiedSuccessfully: 'Modified successfully',
|
||||
modifiedUnsuccessfully: 'Modified unsuccessfully',
|
||||
copySuccessfully: 'Copied successfully',
|
||||
paySucceeded: 'Payment succeeded',
|
||||
payCancelled: 'Payment cancelled',
|
||||
generatedSuccessfully: 'Generated successfully',
|
||||
generatedUnsuccessfully: 'Generated unsuccessfully',
|
||||
},
|
||||
model: {
|
||||
params: {
|
||||
temperature: 'Temperature',
|
||||
temperatureTip:
|
||||
'Controls randomness: Lowering results in less random completions. As the temperature approaches zero, the model will become deterministic and repetitive.',
|
||||
top_p: 'Top P',
|
||||
top_pTip:
|
||||
'Controls diversity via nucleus sampling: 0.5 means half of all likelihood-weighted options are considered.',
|
||||
presence_penalty: 'Presence penalty',
|
||||
presence_penaltyTip:
|
||||
'How much to penalize new tokens based on whether they appear in the text so far.\nIncreases the model\'s likelihood to talk about new topics.',
|
||||
frequency_penalty: 'Frequency penalty',
|
||||
frequency_penaltyTip:
|
||||
'How much to penalize new tokens based on their existing frequency in the text so far.\nDecreases the model\'s likelihood to repeat the same line verbatim.',
|
||||
max_tokens: 'Max token',
|
||||
max_tokensTip:
|
||||
'Used to limit the maximum length of the reply, in tokens. \nLarger values may limit the space left for prompt words, chat logs, and Knowledge. \nIt is recommended to set it below two-thirds\ngpt-4-1106-preview, gpt-4-vision-preview max token (input 128k output 4k)',
|
||||
maxTokenSettingTip: 'Your max token setting is high, potentially limiting space for prompts, queries, and data. Consider setting it below 2/3.',
|
||||
setToCurrentModelMaxTokenTip: 'Max token is updated to the 80% maximum token of the current model {{maxToken}}.',
|
||||
stop_sequences: 'Stop sequences',
|
||||
stop_sequencesTip: 'Up to four sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.',
|
||||
stop_sequencesPlaceholder: 'Enter sequence and press Tab',
|
||||
},
|
||||
tone: {
|
||||
Creative: 'Creative',
|
||||
Balanced: 'Balanced',
|
||||
Precise: 'Precise',
|
||||
Custom: 'Custom',
|
||||
},
|
||||
addMoreModel: 'Go to settings to add more models',
|
||||
settingsLink: 'Model Provider Settings',
|
||||
capabilities: 'MultiModal Capabilities',
|
||||
},
|
||||
menus: {
|
||||
status: 'beta',
|
||||
explore: 'Explore',
|
||||
apps: 'Studio',
|
||||
appDetail: 'App Detail',
|
||||
account: 'Account',
|
||||
plugins: 'Plugins',
|
||||
exploreMarketplace: 'Explore Marketplace',
|
||||
pluginsTips: 'Integrate third-party plugins or create ChatGPT-compatible AI-Plugins.',
|
||||
datasets: 'Knowledge',
|
||||
datasetsTips: 'COMING SOON: Import your own text data or write data in real-time via Webhook for LLM context enhancement.',
|
||||
newApp: 'New App',
|
||||
newDataset: 'Create Knowledge',
|
||||
tools: 'Tools',
|
||||
},
|
||||
userProfile: {
|
||||
settings: 'Settings',
|
||||
contactUs: 'Contact Us',
|
||||
emailSupport: 'Email Support',
|
||||
workspace: 'Workspace',
|
||||
createWorkspace: 'Create Workspace',
|
||||
helpCenter: 'View Docs',
|
||||
support: 'Support',
|
||||
compliance: 'Compliance',
|
||||
forum: 'Forum',
|
||||
roadmap: 'Roadmap',
|
||||
github: 'GitHub',
|
||||
community: 'Community',
|
||||
about: 'About',
|
||||
logout: 'Log out',
|
||||
},
|
||||
compliance: {
|
||||
soc2Type1: 'SOC 2 Type I Report',
|
||||
soc2Type2: 'SOC 2 Type II Report',
|
||||
iso27001: 'ISO 27001:2022 Certification',
|
||||
gdpr: 'GDPR DPA',
|
||||
sandboxUpgradeTooltip: 'Only available with a Professional or Team plan.',
|
||||
professionalUpgradeTooltip: 'Only available with a Team plan or above.',
|
||||
},
|
||||
settings: {
|
||||
accountGroup: 'GENERAL',
|
||||
workplaceGroup: 'WORKSPACE',
|
||||
generalGroup: 'GENERAL',
|
||||
account: 'My account',
|
||||
members: 'Members',
|
||||
billing: 'Billing',
|
||||
integrations: 'Integrations',
|
||||
language: 'Language',
|
||||
provider: 'Model Provider',
|
||||
dataSource: 'Data Source',
|
||||
plugin: 'Plugins',
|
||||
apiBasedExtension: 'API Extension',
|
||||
},
|
||||
account: {
|
||||
account: 'Account',
|
||||
myAccount: 'My Account',
|
||||
studio: 'Studio',
|
||||
avatar: 'Avatar',
|
||||
name: 'Name',
|
||||
email: 'Email',
|
||||
password: 'Password',
|
||||
passwordTip: 'You can set a permanent password if you don’t want to use temporary login codes',
|
||||
setPassword: 'Set a password',
|
||||
resetPassword: 'Reset password',
|
||||
currentPassword: 'Current password',
|
||||
newPassword: 'New password',
|
||||
confirmPassword: 'Confirm password',
|
||||
notEqual: 'Two passwords are different.',
|
||||
langGeniusAccount: 'Account\'s data',
|
||||
langGeniusAccountTip: 'The user data of your account.',
|
||||
editName: 'Edit Name',
|
||||
showAppLength: 'Show {{length}} apps',
|
||||
delete: 'Delete Account',
|
||||
deleteTip: 'Please note, once confirmed, as the Owner of any Workspaces, your workspaces will be scheduled in a queue for permanent deletion, and all your user data will be queued for permanent deletion.',
|
||||
deletePrivacyLinkTip: 'For more information about how we handle your data, please see our ',
|
||||
deletePrivacyLink: 'Privacy Policy.',
|
||||
deleteSuccessTip: 'Your account needs time to finish deleting. We\'ll email you when it\'s all done.',
|
||||
deleteLabel: 'To confirm, please type in your email below',
|
||||
deletePlaceholder: 'Please enter your email',
|
||||
sendVerificationButton: 'Send Verification Code',
|
||||
verificationLabel: 'Verification Code',
|
||||
verificationPlaceholder: 'Paste the 6-digit code',
|
||||
permanentlyDeleteButton: 'Permanently Delete Account',
|
||||
feedbackTitle: 'Feedback',
|
||||
feedbackLabel: 'Tell us why you deleted your account?',
|
||||
feedbackPlaceholder: 'Optional',
|
||||
editWorkspaceInfo: 'Edit Workspace Info',
|
||||
workspaceName: 'Workspace Name',
|
||||
workspaceIcon: 'Workspace Icon',
|
||||
changeEmail: {
|
||||
title: 'Change Email',
|
||||
verifyEmail: 'Verify your current email',
|
||||
newEmail: 'Set up a new email address',
|
||||
verifyNew: 'Verify your new email',
|
||||
authTip: 'Once your email is changed, Google or GitHub accounts linked to your old email will no longer be able to log in to this account.',
|
||||
content1: 'If you continue, we\'ll send a verification code to <email>{{email}}</email> for re-authentication.',
|
||||
content2: 'Your current email is <email>{{email}}</email>. Verification code has been sent to this email address.',
|
||||
content3: 'Enter a new email and we will send you a verification code.',
|
||||
content4: 'We just sent you a temporary verification code to <email>{{email}}</email>.',
|
||||
codeLabel: 'Verification code',
|
||||
codePlaceholder: 'Paste the 6-digit code',
|
||||
emailLabel: 'New email',
|
||||
emailPlaceholder: 'Enter a new email',
|
||||
existingEmail: 'A user with this email already exists.',
|
||||
unAvailableEmail: 'This email is temporarily unavailable.',
|
||||
sendVerifyCode: 'Send verification code',
|
||||
continue: 'Continue',
|
||||
changeTo: 'Change to {{email}}',
|
||||
resendTip: 'Didn\'t receive a code?',
|
||||
resendCount: 'Resend in {{count}}s',
|
||||
resend: 'Resend',
|
||||
},
|
||||
},
|
||||
members: {
|
||||
team: 'Team',
|
||||
invite: 'Add',
|
||||
name: 'NAME',
|
||||
lastActive: 'LAST ACTIVE',
|
||||
role: 'ROLES',
|
||||
pending: 'Pending...',
|
||||
owner: 'Owner',
|
||||
admin: 'Admin',
|
||||
adminTip: 'Can build apps & manage team settings',
|
||||
normal: 'Normal',
|
||||
normalTip: 'Only can use apps, can not build apps',
|
||||
builder: 'Builder',
|
||||
builderTip: 'Can build & edit own apps',
|
||||
editor: 'Editor',
|
||||
editorTip: 'Can build & edit apps',
|
||||
datasetOperator: 'Knowledge Admin',
|
||||
datasetOperatorTip: 'Only can manage the knowledge base',
|
||||
inviteTeamMember: 'Add team member',
|
||||
inviteTeamMemberTip: 'They can access your team data directly after signing in.',
|
||||
emailNotSetup: 'Email server is not set up, so invitation emails cannot be sent. Please notify users of the invitation link that will be issued after invitation instead.',
|
||||
email: 'Email',
|
||||
emailInvalid: 'Invalid Email Format',
|
||||
emailPlaceholder: 'Please input emails',
|
||||
sendInvite: 'Send Invite',
|
||||
invitedAsRole: 'Invited as {{role}} user',
|
||||
invitationSent: 'Invitation sent',
|
||||
invitationSentTip: 'Invitation sent, and they can sign in to Dify to access your team data.',
|
||||
invitationLink: 'Invitation Link',
|
||||
failedInvitationEmails: 'Below users were not invited successfully',
|
||||
ok: 'OK',
|
||||
removeFromTeam: 'Remove from team',
|
||||
removeFromTeamTip: 'Will remove team access',
|
||||
setAdmin: 'Set as administrator',
|
||||
setMember: 'Set to ordinary member',
|
||||
setBuilder: 'Set as builder',
|
||||
setEditor: 'Set as editor',
|
||||
disInvite: 'Cancel the invitation',
|
||||
deleteMember: 'Delete Member',
|
||||
you: '(You)',
|
||||
transferOwnership: 'Transfer Ownership',
|
||||
transferModal: {
|
||||
title: 'Transfer workspace ownership',
|
||||
warning: 'You\'re about to transfer ownership of “{{workspace}}”. This takes effect immediately and can\'t be undone.',
|
||||
warningTip: 'You\'ll become an admin member, and the new owner will have full control.',
|
||||
sendTip: 'If you continue, we\'ll send a verification code to <email>{{email}}</email> for re-authentication.',
|
||||
verifyEmail: 'Verify your current email',
|
||||
verifyContent: 'Your current email is <email>{{email}}</email>.',
|
||||
verifyContent2: 'We\'ll send a temporary verification code to this email for re-authentication.',
|
||||
codeLabel: 'Verification code',
|
||||
codePlaceholder: 'Paste the 6-digit code',
|
||||
resendTip: 'Didn\'t receive a code?',
|
||||
resendCount: 'Resend in {{count}}s',
|
||||
resend: 'Resend',
|
||||
transferLabel: 'Transfer workspace ownership to',
|
||||
transferPlaceholder: 'Select a workspace member…',
|
||||
sendVerifyCode: 'Send verification code',
|
||||
continue: 'Continue',
|
||||
transfer: 'Transfer workspace ownership',
|
||||
},
|
||||
},
|
||||
feedback: {
|
||||
title: 'Provide Feedback',
|
||||
subtitle: 'Please tell us what went wrong with this response',
|
||||
content: 'Feedback Content',
|
||||
placeholder: 'Please describe what went wrong or how we can improve...',
|
||||
},
|
||||
integrations: {
|
||||
connected: 'Connected',
|
||||
google: 'Google',
|
||||
googleAccount: 'Login with Google account',
|
||||
github: 'GitHub',
|
||||
githubAccount: 'Login with GitHub account',
|
||||
connect: 'Connect',
|
||||
},
|
||||
language: {
|
||||
displayLanguage: 'Display Language',
|
||||
timezone: 'Time Zone',
|
||||
},
|
||||
provider: {
|
||||
apiKey: 'API Key',
|
||||
enterYourKey: 'Enter your API key here',
|
||||
invalidKey: 'Invalid OpenAI API key',
|
||||
validatedError: 'Validation failed: ',
|
||||
validating: 'Validating key...',
|
||||
saveFailed: 'Save api key failed',
|
||||
apiKeyExceedBill: 'This API KEY has no quota available, please read',
|
||||
addKey: 'Add Key',
|
||||
comingSoon: 'Coming Soon',
|
||||
editKey: 'Edit',
|
||||
invalidApiKey: 'Invalid API key',
|
||||
azure: {
|
||||
apiBase: 'API Base',
|
||||
apiBasePlaceholder: 'The API Base URL of your Azure OpenAI Endpoint.',
|
||||
apiKey: 'API Key',
|
||||
apiKeyPlaceholder: 'Enter your API key here',
|
||||
helpTip: 'Learn Azure OpenAI Service',
|
||||
},
|
||||
openaiHosted: {
|
||||
openaiHosted: 'Hosted OpenAI',
|
||||
onTrial: 'ON TRIAL',
|
||||
exhausted: 'QUOTA EXHAUSTED',
|
||||
desc: 'The OpenAI hosting service provided by Dify allows you to use models such as GPT-3.5. Before your trial quota is used up, you need to set up other model providers.',
|
||||
callTimes: 'Call times',
|
||||
usedUp: 'Trial quota used up. Add own Model Provider.',
|
||||
useYourModel: 'Currently using own Model Provider.',
|
||||
close: 'Close',
|
||||
},
|
||||
anthropicHosted: {
|
||||
anthropicHosted: 'Anthropic Claude',
|
||||
onTrial: 'ON TRIAL',
|
||||
exhausted: 'QUOTA EXHAUSTED',
|
||||
desc: 'Powerful model, which excels at a wide range of tasks from sophisticated dialogue and creative content generation to detailed instruction.',
|
||||
callTimes: 'Call times',
|
||||
usedUp: 'Trial quota used up. Add own Model Provider.',
|
||||
useYourModel: 'Currently using own Model Provider.',
|
||||
close: 'Close',
|
||||
trialQuotaTip: 'Your Anthropic trial quota will expire on 2025/03/17 and will no longer be available thereafter. Please make use of it in time.',
|
||||
},
|
||||
anthropic: {
|
||||
using: 'The embedding capability is using',
|
||||
enableTip: 'To enable the Anthropic model, you need to bind to OpenAI or Azure OpenAI Service first.',
|
||||
notEnabled: 'Not enabled',
|
||||
keyFrom: 'Get your API key from Anthropic',
|
||||
},
|
||||
encrypted: {
|
||||
front: 'Your API KEY will be encrypted and stored using',
|
||||
back: ' technology.',
|
||||
},
|
||||
},
|
||||
modelProvider: {
|
||||
notConfigured: 'The system model has not yet been fully configured',
|
||||
systemModelSettings: 'System Model Settings',
|
||||
systemModelSettingsLink: 'Why is it necessary to set up a system model?',
|
||||
selectModel: 'Select your model',
|
||||
setupModelFirst: 'Please set up your model first',
|
||||
systemReasoningModel: {
|
||||
key: 'System Reasoning Model',
|
||||
tip: 'Set the default inference model to be used for creating applications, as well as features such as dialogue name generation and next question suggestion will also use the default inference model.',
|
||||
},
|
||||
embeddingModel: {
|
||||
key: 'Embedding Model',
|
||||
tip: 'Set the default model for document embedding processing of the Knowledge, both retrieval and import of the Knowledge use this Embedding model for vectorization processing. Switching will cause the vector dimension between the imported Knowledge and the question to be inconsistent, resulting in retrieval failure. To avoid retrieval failure, please do not switch this model at will.',
|
||||
required: 'Embedding Model is required',
|
||||
},
|
||||
speechToTextModel: {
|
||||
key: 'Speech-to-Text Model',
|
||||
tip: 'Set the default model for speech-to-text input in conversation.',
|
||||
},
|
||||
ttsModel: {
|
||||
key: 'Text-to-Speech Model',
|
||||
tip: 'Set the default model for text-to-speech input in conversation.',
|
||||
},
|
||||
rerankModel: {
|
||||
key: 'Rerank Model',
|
||||
tip: 'Rerank model will reorder the candidate document list based on the semantic match with user query, improving the results of semantic ranking',
|
||||
},
|
||||
apiKey: 'API-KEY',
|
||||
quota: 'Quota',
|
||||
searchModel: 'Search model',
|
||||
noModelFound: 'No model found for {{model}}',
|
||||
models: 'Models',
|
||||
showMoreModelProvider: 'Show more model provider',
|
||||
selector: {
|
||||
tip: 'This model has been removed. Please add a model or select another model.',
|
||||
emptyTip: 'No available models',
|
||||
emptySetting: 'Please go to settings to configure',
|
||||
rerankTip: 'Please set up the Rerank model',
|
||||
},
|
||||
card: {
|
||||
quota: 'QUOTA',
|
||||
onTrial: 'On Trial',
|
||||
paid: 'Paid',
|
||||
quotaExhausted: 'Quota exhausted',
|
||||
callTimes: 'Call times',
|
||||
tokens: 'Tokens',
|
||||
buyQuota: 'Buy Quota',
|
||||
priorityUse: 'Priority use',
|
||||
removeKey: 'Remove API Key',
|
||||
tip: 'Priority will be given to the paid quota. The Trial quota will be used after the paid quota is exhausted.',
|
||||
},
|
||||
item: {
|
||||
deleteDesc: '{{modelName}} are being used as system reasoning models. Some functions will not be available after removal. Please confirm.',
|
||||
freeQuota: 'FREE QUOTA',
|
||||
},
|
||||
addApiKey: 'Add your API key',
|
||||
invalidApiKey: 'Invalid API key',
|
||||
encrypted: {
|
||||
front: 'Your API KEY will be encrypted and stored using',
|
||||
back: ' technology.',
|
||||
},
|
||||
freeQuota: {
|
||||
howToEarn: 'How to earn',
|
||||
},
|
||||
addMoreModelProvider: 'ADD MORE MODEL PROVIDER',
|
||||
addModel: 'Add Model',
|
||||
modelsNum: '{{num}} Models',
|
||||
showModels: 'Show Models',
|
||||
showModelsNum: 'Show {{num}} Models',
|
||||
collapse: 'Collapse',
|
||||
config: 'Config',
|
||||
modelAndParameters: 'Model and Parameters',
|
||||
model: 'Model',
|
||||
featureSupported: '{{feature}} supported',
|
||||
callTimes: 'Call times',
|
||||
credits: 'Message Credits',
|
||||
buyQuota: 'Buy Quota',
|
||||
getFreeTokens: 'Get free Tokens',
|
||||
priorityUsing: 'Prioritize using',
|
||||
deprecated: 'Deprecated',
|
||||
confirmDelete: 'Confirm deletion?',
|
||||
quotaTip: 'Remaining available free tokens',
|
||||
loadPresets: 'Load Presets',
|
||||
parameters: 'PARAMETERS',
|
||||
loadBalancing: 'Load balancing',
|
||||
loadBalancingDescription: 'Configure multiple credentials for the model and invoke them automatically. ',
|
||||
loadBalancingHeadline: 'Load Balancing',
|
||||
configLoadBalancing: 'Config Load Balancing',
|
||||
modelHasBeenDeprecated: 'This model has been deprecated',
|
||||
providerManaged: 'Provider managed',
|
||||
providerManagedDescription: 'Use the single set of credentials provided by the model provider.',
|
||||
defaultConfig: 'Default Config',
|
||||
apiKeyStatusNormal: 'APIKey status is normal',
|
||||
apiKeyRateLimit: 'Rate limit was reached, available after {{seconds}}s',
|
||||
addConfig: 'Add Config',
|
||||
editConfig: 'Edit Config',
|
||||
loadBalancingLeastKeyWarning: 'To enable load balancing at least 2 keys must be enabled.',
|
||||
loadBalancingInfo: 'By default, load balancing uses the Round-robin strategy. If rate limiting is triggered, a 1-minute cooldown period will be applied.',
|
||||
upgradeForLoadBalancing: 'Upgrade your plan to enable Load Balancing.',
|
||||
toBeConfigured: 'To be configured',
|
||||
configureTip: 'Set up api-key or add model to use',
|
||||
installProvider: 'Install model providers',
|
||||
installDataSourceProvider: 'Install data source providers',
|
||||
discoverMore: 'Discover more in ',
|
||||
emptyProviderTitle: 'Model provider not set up',
|
||||
emptyProviderTip: 'Please install a model provider first.',
|
||||
auth: {
|
||||
unAuthorized: 'Unauthorized',
|
||||
authRemoved: 'Auth removed',
|
||||
apiKeys: 'API Keys',
|
||||
addApiKey: 'Add API Key',
|
||||
addModel: 'Add model',
|
||||
addNewModel: 'Add new model',
|
||||
addCredential: 'Add credential',
|
||||
addModelCredential: 'Add model credential',
|
||||
editModelCredential: 'Edit model credential',
|
||||
modelCredentials: 'Model credentials',
|
||||
modelCredential: 'Model credential',
|
||||
configModel: 'Config model',
|
||||
configLoadBalancing: 'Config Load Balancing',
|
||||
authorizationError: 'Authorization error',
|
||||
specifyModelCredential: 'Specify model credential',
|
||||
specifyModelCredentialTip: 'Use a configured model credential.',
|
||||
providerManaged: 'Provider managed',
|
||||
providerManagedTip: 'The current configuration is hosted by the provider.',
|
||||
apiKeyModal: {
|
||||
title: 'API Key Authorization Configuration',
|
||||
desc: 'After configuring credentials, all members within the workspace can use this model when orchestrating applications.',
|
||||
addModel: 'Add model',
|
||||
},
|
||||
manageCredentials: 'Manage Credentials',
|
||||
customModelCredentials: 'Custom Model Credentials',
|
||||
addNewModelCredential: 'Add new model credential',
|
||||
removeModel: 'Remove Model',
|
||||
selectModelCredential: 'Select a model credential',
|
||||
customModelCredentialsDeleteTip: 'Credential is in use and cannot be deleted',
|
||||
},
|
||||
parametersInvalidRemoved: 'Some parameters are invalid and have been removed',
|
||||
},
|
||||
dataSource: {
|
||||
add: 'Add a data source',
|
||||
connect: 'Connect',
|
||||
configure: 'Configure',
|
||||
notion: {
|
||||
title: 'Notion',
|
||||
description: 'Using Notion as a data source for the Knowledge.',
|
||||
connectedWorkspace: 'Connected workspace',
|
||||
addWorkspace: 'Add workspace',
|
||||
connected: 'Connected',
|
||||
disconnected: 'Disconnected',
|
||||
changeAuthorizedPages: 'Change authorized pages',
|
||||
integratedAlert: 'Notion is integrated via internal credential, no need to re-authorize.',
|
||||
pagesAuthorized: 'Pages authorized',
|
||||
sync: 'Sync',
|
||||
remove: 'Remove',
|
||||
selector: {
|
||||
pageSelected: 'Pages Selected',
|
||||
searchPages: 'Search pages...',
|
||||
noSearchResult: 'No search results',
|
||||
addPages: 'Add pages',
|
||||
preview: 'PREVIEW',
|
||||
},
|
||||
},
|
||||
website: {
|
||||
title: 'Website',
|
||||
description: 'Import content from websites using web crawler.',
|
||||
with: 'With',
|
||||
configuredCrawlers: 'Configured crawlers',
|
||||
active: 'Active',
|
||||
inactive: 'Inactive',
|
||||
},
|
||||
},
|
||||
plugin: {
|
||||
serpapi: {
|
||||
apiKey: 'API Key',
|
||||
apiKeyPlaceholder: 'Enter your API key',
|
||||
keyFrom: 'Get your SerpAPI key from SerpAPI Account Page',
|
||||
},
|
||||
},
|
||||
apiBasedExtension: {
|
||||
title: 'API extensions provide centralized API management, simplifying configuration for easy use across Dify\'s applications.',
|
||||
link: 'Learn how to develop your own API Extension.',
|
||||
add: 'Add API Extension',
|
||||
selector: {
|
||||
title: 'API Extension',
|
||||
placeholder: 'Please select API extension',
|
||||
manage: 'Manage API Extension',
|
||||
},
|
||||
modal: {
|
||||
title: 'Add API Extension',
|
||||
editTitle: 'Edit API Extension',
|
||||
name: {
|
||||
title: 'Name',
|
||||
placeholder: 'Please enter the name',
|
||||
},
|
||||
apiEndpoint: {
|
||||
title: 'API Endpoint',
|
||||
placeholder: 'Please enter the API endpoint',
|
||||
},
|
||||
apiKey: {
|
||||
title: 'API-key',
|
||||
placeholder: 'Please enter the API-key',
|
||||
lengthError: 'API-key length cannot be less than 5 characters',
|
||||
},
|
||||
},
|
||||
type: 'Type',
|
||||
},
|
||||
about: {
|
||||
changeLog: 'Changelog',
|
||||
updateNow: 'Update now',
|
||||
nowAvailable: 'Dify {{version}} is now available.',
|
||||
latestAvailable: 'Dify {{version}} is the latest version available.',
|
||||
},
|
||||
appMenus: {
|
||||
overview: 'Monitoring',
|
||||
promptEng: 'Orchestrate',
|
||||
apiAccess: 'API Access',
|
||||
logAndAnn: 'Logs & Annotations',
|
||||
logs: 'Logs',
|
||||
},
|
||||
environment: {
|
||||
testing: 'TESTING',
|
||||
development: 'DEVELOPMENT',
|
||||
},
|
||||
appModes: {
|
||||
completionApp: 'Text Generator',
|
||||
chatApp: 'Chat App',
|
||||
},
|
||||
datasetMenus: {
|
||||
documents: 'Documents',
|
||||
hitTesting: 'Retrieval Testing',
|
||||
settings: 'Settings',
|
||||
emptyTip: 'This Knowledge has not been integrated within any application. Please refer to the document for guidance.',
|
||||
viewDoc: 'View documentation',
|
||||
relatedApp: 'linked apps',
|
||||
noRelatedApp: 'No linked apps',
|
||||
pipeline: 'Pipeline',
|
||||
},
|
||||
voiceInput: {
|
||||
speaking: 'Speak now...',
|
||||
converting: 'Converting to text...',
|
||||
notAllow: 'microphone not authorized',
|
||||
},
|
||||
modelName: {
|
||||
'gpt-3.5-turbo': 'GPT-3.5-Turbo',
|
||||
'gpt-3.5-turbo-16k': 'GPT-3.5-Turbo-16K',
|
||||
'gpt-4': 'GPT-4',
|
||||
'gpt-4-32k': 'GPT-4-32K',
|
||||
'text-davinci-003': 'Text-Davinci-003',
|
||||
'text-embedding-ada-002': 'Text-Embedding-Ada-002',
|
||||
'whisper-1': 'Whisper-1',
|
||||
'claude-instant-1': 'Claude-Instant',
|
||||
'claude-2': 'Claude-2',
|
||||
},
|
||||
chat: {
|
||||
renameConversation: 'Rename Conversation',
|
||||
conversationName: 'Conversation name',
|
||||
conversationNamePlaceholder: 'Please input conversation name',
|
||||
conversationNameCanNotEmpty: 'Conversation name required',
|
||||
citation: {
|
||||
title: 'CITATIONS',
|
||||
linkToDataset: 'Link to Knowledge',
|
||||
characters: 'Characters:',
|
||||
hitCount: 'Retrieval count:',
|
||||
vectorHash: 'Vector hash:',
|
||||
hitScore: 'Retrieval Score:',
|
||||
},
|
||||
inputPlaceholder: 'Talk to {{botName}}',
|
||||
thinking: 'Thinking...',
|
||||
thought: 'Thought',
|
||||
resend: 'Resend',
|
||||
},
|
||||
promptEditor: {
|
||||
placeholder: 'Write your prompt word here, enter \'{\' to insert a variable, enter \'/\' to insert a prompt content block',
|
||||
context: {
|
||||
item: {
|
||||
title: 'Context',
|
||||
desc: 'Insert context template',
|
||||
},
|
||||
modal: {
|
||||
title: '{{num}} Knowledge in Context',
|
||||
add: 'Add Context ',
|
||||
footer: 'You can manage contexts in the Context section below.',
|
||||
},
|
||||
},
|
||||
history: {
|
||||
item: {
|
||||
title: 'Conversation History',
|
||||
desc: 'Insert historical message template',
|
||||
},
|
||||
modal: {
|
||||
title: 'EXAMPLE',
|
||||
user: 'Hello',
|
||||
assistant: 'Hello! How can I assist you today?',
|
||||
edit: 'Edit Conversation Role Names',
|
||||
},
|
||||
},
|
||||
variable: {
|
||||
item: {
|
||||
title: 'Variables & External Tools',
|
||||
desc: 'Insert Variables & External Tools',
|
||||
},
|
||||
outputToolDisabledItem: {
|
||||
title: 'Variables',
|
||||
desc: 'Insert Variables',
|
||||
},
|
||||
modal: {
|
||||
add: 'New variable',
|
||||
addTool: 'New tool',
|
||||
},
|
||||
},
|
||||
query: {
|
||||
item: {
|
||||
title: 'Query',
|
||||
desc: 'Insert user query template',
|
||||
},
|
||||
},
|
||||
existed: 'Already exists in the prompt',
|
||||
},
|
||||
imageUploader: {
|
||||
uploadFromComputer: 'Upload from Computer',
|
||||
uploadFromComputerReadError: 'Image reading failed, please try again.',
|
||||
uploadFromComputerUploadError: 'Image upload failed, please upload again.',
|
||||
uploadFromComputerLimit: 'Upload images cannot exceed {{size}} MB',
|
||||
pasteImageLink: 'Paste image link',
|
||||
pasteImageLinkInputPlaceholder: 'Paste image link here',
|
||||
pasteImageLinkInvalid: 'Invalid image link',
|
||||
imageUpload: 'Image Upload',
|
||||
},
|
||||
fileUploader: {
|
||||
uploadFromComputer: 'Local upload',
|
||||
pasteFileLink: 'Paste file link',
|
||||
pasteFileLinkInputPlaceholder: 'Enter URL...',
|
||||
uploadFromComputerReadError: 'File reading failed, please try again.',
|
||||
uploadFromComputerUploadError: 'File upload failed, please upload again.',
|
||||
uploadFromComputerLimit: 'Upload {{type}} cannot exceed {{size}}',
|
||||
pasteFileLinkInvalid: 'Invalid file link',
|
||||
fileExtensionNotSupport: 'File extension not supported',
|
||||
fileExtensionBlocked: 'This file type is blocked for security reasons',
|
||||
},
|
||||
tag: {
|
||||
placeholder: 'All Tags',
|
||||
addNew: 'Add new tag',
|
||||
noTag: 'No tags',
|
||||
noTagYet: 'No tags yet',
|
||||
addTag: 'Add tags',
|
||||
editTag: 'Edit tags',
|
||||
manageTags: 'Manage Tags',
|
||||
selectorPlaceholder: 'Type to search or create',
|
||||
create: 'Create',
|
||||
delete: 'Delete tag',
|
||||
deleteTip: 'The tag is being used, delete it?',
|
||||
created: 'Tag created successfully',
|
||||
failed: 'Tag creation failed',
|
||||
},
|
||||
license: {
|
||||
expiring: 'Expiring in one day',
|
||||
expiring_plural: 'Expiring in {{count}} days',
|
||||
unlimited: 'Unlimited',
|
||||
},
|
||||
pagination: {
|
||||
perPage: 'Items per page',
|
||||
},
|
||||
avatar: {
|
||||
deleteTitle: 'Remove Avatar',
|
||||
deleteDescription: 'Are you sure you want to remove your profile picture? Your account will use the default initial avatar.',
|
||||
},
|
||||
imageInput: {
|
||||
dropImageHere: 'Drop your image here, or',
|
||||
browse: 'browse',
|
||||
supportedFormats: 'Supports PNG, JPG, JPEG, WEBP and GIF',
|
||||
},
|
||||
you: 'You',
|
||||
dynamicSelect: {
|
||||
error: 'Loading options failed',
|
||||
noData: 'No options available',
|
||||
loading: 'Loading options...',
|
||||
selected: '{{count}} selected',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
32
dify/web/i18n/en-US/custom.ts
Normal file
32
dify/web/i18n/en-US/custom.ts
Normal file
@@ -0,0 +1,32 @@
|
||||
const translation = {
|
||||
custom: 'Customization',
|
||||
upgradeTip: {
|
||||
title: 'Upgrade your plan',
|
||||
des: 'Upgrade your plan to customize your brand',
|
||||
prefix: 'Upgrade your plan to',
|
||||
suffix: 'customize your brand.',
|
||||
},
|
||||
webapp: {
|
||||
title: 'Customize web app brand',
|
||||
removeBrand: 'Remove Powered by Dify',
|
||||
changeLogo: 'Change Powered by Brand Image',
|
||||
changeLogoTip: 'SVG or PNG format with a minimum size of 40x40px',
|
||||
},
|
||||
app: {
|
||||
title: 'Customize app header brand',
|
||||
changeLogoTip: 'SVG or PNG format with a minimum size of 80x80px',
|
||||
},
|
||||
upload: 'Upload',
|
||||
uploading: 'Uploading',
|
||||
uploadedFail: 'Image upload failed, please re-upload.',
|
||||
change: 'Change',
|
||||
apply: 'Apply',
|
||||
restore: 'Restore Defaults',
|
||||
customize: {
|
||||
contactUs: ' contact us ',
|
||||
prefix: 'To customize the brand logo within the app, please',
|
||||
suffix: 'to upgrade to the Enterprise edition.',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
217
dify/web/i18n/en-US/dataset-creation.ts
Normal file
217
dify/web/i18n/en-US/dataset-creation.ts
Normal file
@@ -0,0 +1,217 @@
|
||||
const translation = {
|
||||
steps: {
|
||||
header: {
|
||||
fallbackRoute: 'Knowledge',
|
||||
},
|
||||
one: 'Data Source',
|
||||
two: 'Document Processing',
|
||||
three: 'Execute & Finish',
|
||||
},
|
||||
error: {
|
||||
unavailable: 'This Knowledge is not available',
|
||||
},
|
||||
firecrawl: {
|
||||
configFirecrawl: 'Configure 🔥Firecrawl',
|
||||
apiKeyPlaceholder: 'API key from firecrawl.dev',
|
||||
getApiKeyLinkText: 'Get your API key from firecrawl.dev',
|
||||
},
|
||||
watercrawl: {
|
||||
configWatercrawl: 'Configure Watercrawl',
|
||||
apiKeyPlaceholder: 'API key from watercrawl.dev',
|
||||
getApiKeyLinkText: 'Get your API key from watercrawl.dev',
|
||||
},
|
||||
jinaReader: {
|
||||
configJinaReader: 'Configure Jina Reader',
|
||||
apiKeyPlaceholder: 'API key from jina.ai',
|
||||
getApiKeyLinkText: 'Get your free API key at jina.ai',
|
||||
},
|
||||
stepOne: {
|
||||
filePreview: 'File Preview',
|
||||
pagePreview: 'Page Preview',
|
||||
dataSourceType: {
|
||||
file: 'Import from file',
|
||||
notion: 'Sync from Notion',
|
||||
web: 'Sync from website',
|
||||
},
|
||||
uploader: {
|
||||
title: 'Upload file',
|
||||
button: 'Drag and drop file or folder, or',
|
||||
buttonSingleFile: 'Drag and drop file, or',
|
||||
browse: 'Browse',
|
||||
tip: 'Supports {{supportTypes}}. Max {{batchCount}} in a batch and {{size}} MB each. Max total {{totalCount}} files.',
|
||||
validation: {
|
||||
typeError: 'File type not supported',
|
||||
size: 'File too large. Maximum is {{size}}MB',
|
||||
count: 'Multiple files not supported',
|
||||
filesNumber: 'You have reached the batch upload limit of {{filesNumber}}.',
|
||||
},
|
||||
cancel: 'Cancel',
|
||||
change: 'Change',
|
||||
failed: 'Upload failed',
|
||||
},
|
||||
notionSyncTitle: 'Notion is not connected',
|
||||
notionSyncTip: 'To sync with Notion, connection to Notion must be established first.',
|
||||
connect: 'Go to connect',
|
||||
cancel: 'Cancel',
|
||||
button: 'Next',
|
||||
emptyDatasetCreation: 'I want to create an empty Knowledge',
|
||||
modal: {
|
||||
title: 'Create an empty Knowledge',
|
||||
tip: 'An empty Knowledge will contain no documents, and you can upload documents any time.',
|
||||
input: 'Knowledge name',
|
||||
placeholder: 'Please input',
|
||||
nameNotEmpty: 'Name cannot be empty',
|
||||
nameLengthInvalid: 'Name must be between 1 to 40 characters',
|
||||
cancelButton: 'Cancel',
|
||||
confirmButton: 'Create',
|
||||
failed: 'Creation failed',
|
||||
},
|
||||
website: {
|
||||
chooseProvider: 'Select a provider',
|
||||
fireCrawlNotConfigured: 'Firecrawl is not configured',
|
||||
fireCrawlNotConfiguredDescription: 'Configure Firecrawl with API key to use it.',
|
||||
jinaReaderNotConfigured: 'Jina Reader is not configured',
|
||||
jinaReaderNotConfiguredDescription: 'Set up Jina Reader by entering your free API key for access.',
|
||||
waterCrawlNotConfigured: 'Watercrawl is not configured',
|
||||
waterCrawlNotConfiguredDescription: 'Configure Watercrawl with API key to use it.',
|
||||
configure: 'Configure',
|
||||
configureFirecrawl: 'Configure Firecrawl',
|
||||
configureWatercrawl: 'Configure Watercrawl',
|
||||
configureJinaReader: 'Configure Jina Reader',
|
||||
run: 'Run',
|
||||
running: 'Running',
|
||||
firecrawlTitle: 'Extract web content with 🔥Firecrawl',
|
||||
firecrawlDoc: 'Firecrawl docs',
|
||||
watercrawlTitle: 'Extract web content with Watercrawl',
|
||||
watercrawlDoc: 'Watercrawl docs',
|
||||
jinaReaderTitle: 'Convert the entire site to Markdown',
|
||||
jinaReaderDoc: 'Learn more about Jina Reader',
|
||||
jinaReaderDocLink: 'https://jina.ai/reader',
|
||||
useSitemap: 'Use sitemap',
|
||||
useSitemapTooltip: 'Follow the sitemap to crawl the site. If not, Jina Reader will crawl iteratively based on page relevance, yielding fewer but higher-quality pages.',
|
||||
options: 'Options',
|
||||
crawlSubPage: 'Crawl sub-pages',
|
||||
limit: 'Limit',
|
||||
maxDepth: 'Max depth',
|
||||
excludePaths: 'Exclude paths',
|
||||
includeOnlyPaths: 'Include only paths',
|
||||
extractOnlyMainContent: 'Extract only main content (no headers, navs, footers, etc.)',
|
||||
exceptionErrorTitle: 'An exception occurred while running crawling job:',
|
||||
unknownError: 'Unknown error',
|
||||
totalPageScraped: 'Total pages scraped:',
|
||||
selectAll: 'Select All',
|
||||
resetAll: 'Reset All',
|
||||
scrapTimeInfo: 'Scraped {{total}} pages in total within {{time}}s',
|
||||
preview: 'Preview',
|
||||
maxDepthTooltip: 'Maximum depth to crawl relative to the entered URL. Depth 0 just scrapes the page of the entered url, depth 1 scrapes the url and everything after enteredURL + one /, and so on.',
|
||||
},
|
||||
},
|
||||
stepTwo: {
|
||||
segmentation: 'Chunk Settings',
|
||||
auto: 'Automatic',
|
||||
autoDescription: 'Automatically set chunk and preprocessing rules. Unfamiliar users are recommended to select this.',
|
||||
custom: 'Custom',
|
||||
customDescription: 'Customize chunks rules, chunks length, and preprocessing rules, etc.',
|
||||
general: 'General',
|
||||
generalTip: 'General text chunking mode, the chunks retrieved and recalled are the same.',
|
||||
parentChild: 'Parent-child',
|
||||
parentChildTip: 'When using the parent-child mode, the child-chunk is used for retrieval and the parent-chunk is used for recall as context.',
|
||||
parentChunkForContext: 'Parent-chunk for Context',
|
||||
childChunkForRetrieval: 'Child-chunk for Retrieval',
|
||||
paragraph: 'Paragraph',
|
||||
paragraphTip: 'This mode splits the text in to paragraphs based on delimiters and the maximum chunk length, using the split text as the parent chunk for retrieval.',
|
||||
fullDoc: 'Full Doc',
|
||||
fullDocTip: 'The entire document is used as the parent chunk and retrieved directly. Please note that for performance reasons, text exceeding 10000 tokens will be automatically truncated.',
|
||||
qaTip: 'When using structured Q&A data, you can create documents that pair questions with answers. These documents are indexed based on the question portion, allowing the system to retrieve relevant answers based on query similarity.',
|
||||
separator: 'Delimiter',
|
||||
separatorTip: 'A delimiter is the character used to separate text. \\n\\n and \\n are commonly used delimiters for separating paragraphs and lines. Combined with commas (\\n\\n,\\n), paragraphs will be segmented by lines when exceeding the maximum chunk length. You can also use special delimiters defined by yourself (e.g. ***).',
|
||||
separatorPlaceholder: '\\n\\n for paragraphs; \\n for lines',
|
||||
maxLength: 'Maximum chunk length',
|
||||
maxLengthCheck: 'Maximum chunk length should be less than {{limit}}',
|
||||
overlap: 'Chunk overlap',
|
||||
overlapTip: 'Setting the chunk overlap can maintain the semantic relevance between them, enhancing the retrieve effect. It is recommended to set 10%-25% of the maximum chunk size.',
|
||||
overlapCheck: 'chunk overlap should not bigger than maximum chunk length',
|
||||
rules: 'Text Pre-processing Rules',
|
||||
removeExtraSpaces: 'Replace consecutive spaces, newlines and tabs',
|
||||
removeUrlEmails: 'Delete all URLs and email addresses',
|
||||
removeStopwords: 'Remove stopwords such as "a", "an", "the"',
|
||||
preview: 'Preview',
|
||||
previewChunk: 'Preview Chunk',
|
||||
reset: 'Reset',
|
||||
indexMode: 'Index Method',
|
||||
qualified: 'High Quality',
|
||||
highQualityTip: 'Once finishing embedding in High Quality mode, reverting to Economical mode is not available.',
|
||||
recommend: 'Recommend',
|
||||
qualifiedTip: 'Calling the embedding model to process documents for more precise retrieval helps LLM generate high-quality answers.',
|
||||
warning: 'Please set up the model provider API key first.',
|
||||
click: 'Go to settings',
|
||||
economical: 'Economical',
|
||||
economicalTip: 'Using 10 keywords per chunk for retrieval, no tokens are consumed at the expense of reduced retrieval accuracy.',
|
||||
QATitle: 'Segmenting in Question & Answer format',
|
||||
QATip: 'Enable this option will consume more tokens',
|
||||
QALanguage: 'Segment using',
|
||||
useQALanguage: 'Chunk using Q&A format in',
|
||||
estimateCost: 'Estimation',
|
||||
estimateSegment: 'Estimated chunks',
|
||||
segmentCount: 'chunks',
|
||||
calculating: 'Calculating...',
|
||||
fileSource: 'Preprocess documents',
|
||||
notionSource: 'Preprocess pages',
|
||||
websiteSource: 'Preprocess website',
|
||||
other: 'and other ',
|
||||
fileUnit: ' files',
|
||||
notionUnit: ' pages',
|
||||
webpageUnit: ' pages',
|
||||
previousStep: 'Previous step',
|
||||
nextStep: 'Save & Process',
|
||||
save: 'Save & Process',
|
||||
cancel: 'Cancel',
|
||||
sideTipTitle: 'Why chunk and preprocess?',
|
||||
sideTipP1: 'When processing text data, chunk and cleaning are two important preprocessing steps.',
|
||||
sideTipP2: 'Segmentation splits long text into paragraphs so models can understand better. This improves the quality and relevance of model results.',
|
||||
sideTipP3: 'Cleaning removes unnecessary characters and formats, making Knowledge cleaner and easier to parse.',
|
||||
sideTipP4: 'Proper chunk and cleaning improve model performance, providing more accurate and valuable results.',
|
||||
previewTitle: 'Preview',
|
||||
previewTitleButton: 'Preview',
|
||||
previewButton: 'Switching to Q&A format',
|
||||
previewSwitchTipStart: 'The current chunk preview is in text format, switching to a question-and-answer format preview will',
|
||||
previewSwitchTipEnd: ' consume additional tokens',
|
||||
characters: 'characters',
|
||||
indexSettingTip: 'To change the index method & embedding model, please go to the ',
|
||||
retrievalSettingTip: 'To change the retrieval setting, please go to the ',
|
||||
datasetSettingLink: 'Knowledge settings.',
|
||||
previewChunkTip: 'Click the \'Preview Chunk\' button on the left to load the preview',
|
||||
previewChunkCount: '{{count}} Estimated chunks',
|
||||
switch: 'Switch',
|
||||
qaSwitchHighQualityTipTitle: 'Q&A Format Requires High-quality Indexing Method',
|
||||
qaSwitchHighQualityTipContent: 'Currently, only high-quality index method supports Q&A format chunking. Would you like to switch to high-quality mode?',
|
||||
notAvailableForParentChild: 'Not available for Parent-child Index',
|
||||
notAvailableForQA: 'Not available for Q&A Index',
|
||||
parentChildDelimiterTip: 'A delimiter is the character used to separate text. \\n\\n is recommended for splitting the original document into large parent chunks. You can also use special delimiters defined by yourself.',
|
||||
parentChildChunkDelimiterTip: 'A delimiter is the character used to separate text. \\n is recommended for splitting parent chunks into small child chunks. You can also use special delimiters defined by yourself.',
|
||||
},
|
||||
stepThree: {
|
||||
creationTitle: '🎉 Knowledge created',
|
||||
creationContent: 'We automatically named the Knowledge, you can modify it at any time.',
|
||||
label: 'Knowledge name',
|
||||
additionTitle: '🎉 Document uploaded',
|
||||
additionP1: 'The document has been uploaded to the Knowledge',
|
||||
additionP2: ', you can find it in the document list of the Knowledge.',
|
||||
stop: 'Stop processing',
|
||||
resume: 'Resume processing',
|
||||
navTo: 'Go to document',
|
||||
sideTipTitle: 'What\'s next',
|
||||
sideTipContent: 'After finishing document indexing, you can manage and edit documents, run retrieval tests, and modify knowledge settings. Knowledge can then be integrated into your application as context, so make sure to adjust the Retrieval Setting to ensure optimal performance.',
|
||||
modelTitle: 'Are you sure to stop embedding?',
|
||||
modelContent: 'If you need to resume processing later, you will continue from where you left off.',
|
||||
modelButtonConfirm: 'Confirm',
|
||||
modelButtonCancel: 'Cancel',
|
||||
},
|
||||
otherDataSource: {
|
||||
title: 'Connect to other data sources?',
|
||||
description: 'Currently, Dify\'s knowledge base only has limited data sources. Contributing a data source to the Dify knowledge base is a fantastic way to help enhance the platform\'s flexibility and power for all users. Our contribution guide makes it easy to get started. Please click on the link below to learn more.',
|
||||
learnMore: 'Learn more',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
407
dify/web/i18n/en-US/dataset-documents.ts
Normal file
407
dify/web/i18n/en-US/dataset-documents.ts
Normal file
@@ -0,0 +1,407 @@
|
||||
const translation = {
|
||||
list: {
|
||||
title: 'Documents',
|
||||
desc: 'All files of the Knowledge are shown here, and the entire Knowledge can be linked to Dify citations or indexed via the Chat plugin.',
|
||||
learnMore: 'Learn more',
|
||||
addFile: 'Add file',
|
||||
addPages: 'Add Pages',
|
||||
addUrl: 'Add URL',
|
||||
table: {
|
||||
header: {
|
||||
fileName: 'NAME',
|
||||
chunkingMode: 'CHUNKING MODE',
|
||||
words: 'WORDS',
|
||||
hitCount: 'RETRIEVAL COUNT',
|
||||
uploadTime: 'UPLOAD TIME',
|
||||
status: 'STATUS',
|
||||
action: 'ACTION',
|
||||
},
|
||||
rename: 'Rename',
|
||||
name: 'Name',
|
||||
},
|
||||
action: {
|
||||
uploadFile: 'Upload new file',
|
||||
settings: 'Chunking Settings',
|
||||
addButton: 'Add chunk',
|
||||
add: 'Add a chunk',
|
||||
batchAdd: 'Batch add',
|
||||
archive: 'Archive',
|
||||
unarchive: 'Unarchive',
|
||||
delete: 'Delete',
|
||||
enableWarning: 'Archived file cannot be enabled',
|
||||
sync: 'Sync',
|
||||
pause: 'Pause',
|
||||
resume: 'Resume',
|
||||
},
|
||||
index: {
|
||||
enable: 'Enable',
|
||||
disable: 'Disable',
|
||||
all: 'All',
|
||||
enableTip: 'The file can be indexed',
|
||||
disableTip: 'The file cannot be indexed',
|
||||
},
|
||||
sort: {
|
||||
uploadTime: 'Upload Time',
|
||||
hitCount: 'Retrieval Count',
|
||||
},
|
||||
status: {
|
||||
queuing: 'Queuing',
|
||||
indexing: 'Indexing',
|
||||
paused: 'Paused',
|
||||
error: 'Error',
|
||||
available: 'Available',
|
||||
enabled: 'Enabled',
|
||||
disabled: 'Disabled',
|
||||
archived: 'Archived',
|
||||
},
|
||||
empty: {
|
||||
title: 'There is no documentation yet',
|
||||
upload: {
|
||||
tip: 'You can upload files, sync from the website, or from web apps like Notion, GitHub, etc.',
|
||||
},
|
||||
sync: {
|
||||
tip: 'Dify will periodically download files from your Notion and complete processing.',
|
||||
},
|
||||
},
|
||||
delete: {
|
||||
title: 'Are you sure Delete?',
|
||||
content: 'If you need to resume processing later, you will continue from where you left off',
|
||||
},
|
||||
batchModal: {
|
||||
title: 'Batch add chunks',
|
||||
csvUploadTitle: 'Drag and drop your CSV file here, or ',
|
||||
browse: 'browse',
|
||||
tip: 'The CSV file must conform to the following structure:',
|
||||
question: 'question',
|
||||
answer: 'answer',
|
||||
contentTitle: 'chunk content',
|
||||
content: 'content',
|
||||
template: 'Download the template here',
|
||||
cancel: 'Cancel',
|
||||
run: 'Run Batch',
|
||||
runError: 'Run batch failed',
|
||||
processing: 'In batch processing',
|
||||
completed: 'Import completed',
|
||||
error: 'Import Error',
|
||||
ok: 'OK',
|
||||
},
|
||||
},
|
||||
metadata: {
|
||||
title: 'Metadata',
|
||||
desc: 'Labeling metadata for documents allows AI to access them in a timely manner and exposes the source of references for users.',
|
||||
dateTimeFormat: 'MMMM D, YYYY hh:mm A',
|
||||
docTypeSelectTitle: 'Please select a document type',
|
||||
docTypeChangeTitle: 'Change document type',
|
||||
docTypeSelectWarning:
|
||||
'If the document type is changed, the now filled metadata will no longer be preserved',
|
||||
firstMetaAction: 'Let\'s go',
|
||||
placeholder: {
|
||||
add: 'Add ',
|
||||
select: 'Select ',
|
||||
},
|
||||
source: {
|
||||
upload_file: 'Upload File',
|
||||
notion: 'Sync form Notion',
|
||||
github: 'Sync form Github',
|
||||
local_file: 'Local File',
|
||||
website_crawl: 'Website Crawl',
|
||||
online_document: 'Online Document',
|
||||
},
|
||||
type: {
|
||||
book: 'Book',
|
||||
webPage: 'Web Page',
|
||||
paper: 'Paper',
|
||||
socialMediaPost: 'Social Media Post',
|
||||
personalDocument: 'Personal Document',
|
||||
businessDocument: 'Business Document',
|
||||
IMChat: 'IM Chat',
|
||||
wikipediaEntry: 'Wikipedia Entry',
|
||||
notion: 'Sync form Notion',
|
||||
github: 'Sync form Github',
|
||||
technicalParameters: 'Technical Parameters',
|
||||
},
|
||||
field: {
|
||||
processRule: {
|
||||
processDoc: 'Process Document',
|
||||
segmentRule: 'Chunk Rule',
|
||||
segmentLength: 'Chunks Length',
|
||||
processClean: 'Text Process Clean',
|
||||
},
|
||||
book: {
|
||||
title: 'Title',
|
||||
language: 'Language',
|
||||
author: 'Author',
|
||||
publisher: 'Publisher',
|
||||
publicationDate: 'Publication Date',
|
||||
ISBN: 'ISBN',
|
||||
category: 'Category',
|
||||
},
|
||||
webPage: {
|
||||
title: 'Title',
|
||||
url: 'URL',
|
||||
language: 'Language',
|
||||
authorPublisher: 'Author/Publisher',
|
||||
publishDate: 'Publish Date',
|
||||
topicKeywords: 'Topic/Keywords',
|
||||
description: 'Description',
|
||||
},
|
||||
paper: {
|
||||
title: 'Title',
|
||||
language: 'Language',
|
||||
author: 'Author',
|
||||
publishDate: 'Publish Date',
|
||||
journalConferenceName: 'Journal/Conference Name',
|
||||
volumeIssuePage: 'Volume/Issue/Page',
|
||||
DOI: 'DOI',
|
||||
topicsKeywords: 'Topics/Keywords',
|
||||
abstract: 'Abstract',
|
||||
},
|
||||
socialMediaPost: {
|
||||
platform: 'Platform',
|
||||
authorUsername: 'Author/Username',
|
||||
publishDate: 'Publish Date',
|
||||
postURL: 'Post URL',
|
||||
topicsTags: 'Topics/Tags',
|
||||
},
|
||||
personalDocument: {
|
||||
title: 'Title',
|
||||
author: 'Author',
|
||||
creationDate: 'Creation Date',
|
||||
lastModifiedDate: 'Last Modified Date',
|
||||
documentType: 'Document Type',
|
||||
tagsCategory: 'Tags/Category',
|
||||
},
|
||||
businessDocument: {
|
||||
title: 'Title',
|
||||
author: 'Author',
|
||||
creationDate: 'Creation Date',
|
||||
lastModifiedDate: 'Last Modified Date',
|
||||
documentType: 'Document Type',
|
||||
departmentTeam: 'Department/Team',
|
||||
},
|
||||
IMChat: {
|
||||
chatPlatform: 'Chat Platform',
|
||||
chatPartiesGroupName: 'Chat Parties/Group Name',
|
||||
participants: 'Participants',
|
||||
startDate: 'Start Date',
|
||||
endDate: 'End Date',
|
||||
topicsKeywords: 'Topics/Keywords',
|
||||
fileType: 'File Type',
|
||||
},
|
||||
wikipediaEntry: {
|
||||
title: 'Title',
|
||||
language: 'Language',
|
||||
webpageURL: 'Webpage URL',
|
||||
editorContributor: 'Editor/Contributor',
|
||||
lastEditDate: 'Last Edit Date',
|
||||
summaryIntroduction: 'Summary/Introduction',
|
||||
},
|
||||
notion: {
|
||||
title: 'Title',
|
||||
language: 'Language',
|
||||
author: 'Author',
|
||||
createdTime: 'Created Time',
|
||||
lastModifiedTime: 'Last Modified Time',
|
||||
url: 'URL',
|
||||
tag: 'Tag',
|
||||
description: 'Description',
|
||||
},
|
||||
github: {
|
||||
repoName: 'Repo Name',
|
||||
repoDesc: 'Repo Description',
|
||||
repoOwner: 'Repo Owner',
|
||||
fileName: 'File Name',
|
||||
filePath: 'File Path',
|
||||
programmingLang: 'Programming Language',
|
||||
url: 'URL',
|
||||
license: 'License',
|
||||
lastCommitTime: 'Last Commit Time',
|
||||
lastCommitAuthor: 'Last Commit Author',
|
||||
},
|
||||
originInfo: {
|
||||
originalFilename: 'Original filename',
|
||||
originalFileSize: 'Original file size',
|
||||
uploadDate: 'Upload date',
|
||||
lastUpdateDate: 'Last update date',
|
||||
source: 'Source',
|
||||
},
|
||||
technicalParameters: {
|
||||
segmentSpecification: 'Chunks specification',
|
||||
segmentLength: 'Chunks length',
|
||||
avgParagraphLength: 'Avg. paragraph length',
|
||||
paragraphs: 'Paragraphs',
|
||||
hitCount: 'Retrieval count',
|
||||
embeddingTime: 'Embedding time',
|
||||
embeddedSpend: 'Embedded spend',
|
||||
},
|
||||
},
|
||||
languageMap: {
|
||||
zh: 'Chinese',
|
||||
en: 'English',
|
||||
es: 'Spanish',
|
||||
fr: 'French',
|
||||
de: 'German',
|
||||
ja: 'Japanese',
|
||||
ko: 'Korean',
|
||||
ru: 'Russian',
|
||||
ar: 'Arabic',
|
||||
pt: 'Portuguese',
|
||||
it: 'Italian',
|
||||
nl: 'Dutch',
|
||||
pl: 'Polish',
|
||||
sv: 'Swedish',
|
||||
tr: 'Turkish',
|
||||
he: 'Hebrew',
|
||||
hi: 'Hindi',
|
||||
da: 'Danish',
|
||||
fi: 'Finnish',
|
||||
no: 'Norwegian',
|
||||
hu: 'Hungarian',
|
||||
el: 'Greek',
|
||||
cs: 'Czech',
|
||||
th: 'Thai',
|
||||
id: 'Indonesian',
|
||||
},
|
||||
categoryMap: {
|
||||
book: {
|
||||
fiction: 'Fiction',
|
||||
biography: 'Biography',
|
||||
history: 'History',
|
||||
science: 'Science',
|
||||
technology: 'Technology',
|
||||
education: 'Education',
|
||||
philosophy: 'Philosophy',
|
||||
religion: 'Religion',
|
||||
socialSciences: 'SocialSciences',
|
||||
art: 'Art',
|
||||
travel: 'Travel',
|
||||
health: 'Health',
|
||||
selfHelp: 'SelfHelp',
|
||||
businessEconomics: 'BusinessEconomics',
|
||||
cooking: 'Cooking',
|
||||
childrenYoungAdults: 'ChildrenYoungAdults',
|
||||
comicsGraphicNovels: 'ComicsGraphicNovels',
|
||||
poetry: 'Poetry',
|
||||
drama: 'Drama',
|
||||
other: 'Other',
|
||||
},
|
||||
personalDoc: {
|
||||
notes: 'Notes',
|
||||
blogDraft: 'Blog Draft',
|
||||
diary: 'Diary',
|
||||
researchReport: 'Research Report',
|
||||
bookExcerpt: 'Book Excerpt',
|
||||
schedule: 'Schedule',
|
||||
list: 'List',
|
||||
projectOverview: 'Project Overview',
|
||||
photoCollection: 'Photo Collection',
|
||||
creativeWriting: 'Creative Writing',
|
||||
codeSnippet: 'Code Snippet',
|
||||
designDraft: 'Design Draft',
|
||||
personalResume: 'Personal Resume',
|
||||
other: 'Other',
|
||||
},
|
||||
businessDoc: {
|
||||
meetingMinutes: 'Meeting Minutes',
|
||||
researchReport: 'Research Report',
|
||||
proposal: 'Proposal',
|
||||
employeeHandbook: 'Employee Handbook',
|
||||
trainingMaterials: 'Training Materials',
|
||||
requirementsDocument: 'Requirements Document',
|
||||
designDocument: 'Design Document',
|
||||
productSpecification: 'Product Specification',
|
||||
financialReport: 'Financial Report',
|
||||
marketAnalysis: 'Market Analysis',
|
||||
projectPlan: 'Project Plan',
|
||||
teamStructure: 'Team Structure',
|
||||
policiesProcedures: 'Policies & Procedures',
|
||||
contractsAgreements: 'Contracts & Agreements',
|
||||
emailCorrespondence: 'Email Correspondence',
|
||||
other: 'Other',
|
||||
},
|
||||
},
|
||||
},
|
||||
embedding: {
|
||||
waiting: 'Embedding waiting...',
|
||||
processing: 'Embedding processing...',
|
||||
paused: 'Embedding paused',
|
||||
completed: 'Embedding completed',
|
||||
error: 'Embedding error',
|
||||
docName: 'Preprocessing document',
|
||||
mode: 'Chunking Setting',
|
||||
segmentLength: 'Maximum Chunk Length',
|
||||
textCleaning: 'Text Preprocessing Rules',
|
||||
segments: 'Paragraphs',
|
||||
highQuality: 'High-quality mode',
|
||||
economy: 'Economy mode',
|
||||
estimate: 'Estimated consumption',
|
||||
stop: 'Stop processing',
|
||||
pause: 'Pause',
|
||||
resume: 'Resume',
|
||||
automatic: 'Automatic',
|
||||
custom: 'Custom',
|
||||
hierarchical: 'Parent-child',
|
||||
previewTip: 'Paragraph preview will be available after embedding is complete',
|
||||
parentMaxTokens: 'Parent',
|
||||
childMaxTokens: 'Child',
|
||||
},
|
||||
segment: {
|
||||
paragraphs: 'Paragraphs',
|
||||
chunks_one: 'CHUNK',
|
||||
chunks_other: 'CHUNKS',
|
||||
parentChunks_one: 'PARENT CHUNK',
|
||||
parentChunks_other: 'PARENT CHUNKS',
|
||||
childChunks_one: 'CHILD CHUNK',
|
||||
childChunks_other: 'CHILD CHUNKS',
|
||||
searchResults_zero: 'RESULT',
|
||||
searchResults_one: 'RESULT',
|
||||
searchResults_other: 'RESULTS',
|
||||
empty: 'No Chunk found',
|
||||
clearFilter: 'Clear filter',
|
||||
chunk: 'Chunk',
|
||||
parentChunk: 'Parent-Chunk',
|
||||
newChunk: 'New Chunk',
|
||||
childChunk: 'Child-Chunk',
|
||||
newChildChunk: 'New Child Chunk',
|
||||
keywords: 'KEYWORDS',
|
||||
addKeyWord: 'Add keyword',
|
||||
keywordEmpty: 'The keyword cannot be empty',
|
||||
keywordError: 'The maximum length of keyword is 20',
|
||||
keywordDuplicate: 'The keyword already exists',
|
||||
characters_one: 'character',
|
||||
characters_other: 'characters',
|
||||
hitCount: 'Retrieval count',
|
||||
vectorHash: 'Vector hash: ',
|
||||
questionPlaceholder: 'Add question here',
|
||||
questionEmpty: 'Question can not be empty',
|
||||
answerPlaceholder: 'Add answer here',
|
||||
answerEmpty: 'Answer can not be empty',
|
||||
contentPlaceholder: 'Add content here',
|
||||
contentEmpty: 'Content can not be empty',
|
||||
newTextSegment: 'New Text Segment',
|
||||
newQaSegment: 'New Q&A Segment',
|
||||
addChunk: 'Add Chunk',
|
||||
addChildChunk: 'Add Child Chunk',
|
||||
addAnother: 'Add another',
|
||||
delete: 'Delete this chunk ?',
|
||||
chunkAdded: '1 chunk added',
|
||||
childChunkAdded: '1 child chunk added',
|
||||
editChunk: 'Edit Chunk',
|
||||
editParentChunk: 'Edit Parent Chunk',
|
||||
editChildChunk: 'Edit Child Chunk',
|
||||
chunkDetail: 'Chunk Detail',
|
||||
regenerationConfirmTitle: 'Do you want to regenerate child chunks?',
|
||||
regenerationConfirmMessage: 'Regenerating child chunks will overwrite the current child chunks, including edited chunks and newly added chunks. The regeneration cannot be undone.',
|
||||
regeneratingTitle: 'Regenerating child chunks',
|
||||
regeneratingMessage: 'This may take a moment, please wait...',
|
||||
regenerationSuccessTitle: 'Regeneration completed',
|
||||
regenerationSuccessMessage: 'You can close this window.',
|
||||
edited: 'EDITED',
|
||||
editedAt: 'Edited at',
|
||||
dateTimeFormat: 'MM/DD/YYYY h:mm',
|
||||
expandChunks: 'Expand chunks',
|
||||
collapseChunks: 'Collapse chunks',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
34
dify/web/i18n/en-US/dataset-hit-testing.ts
Normal file
34
dify/web/i18n/en-US/dataset-hit-testing.ts
Normal file
@@ -0,0 +1,34 @@
|
||||
const translation = {
|
||||
title: 'Retrieval Test',
|
||||
settingTitle: 'Retrieval Setting',
|
||||
desc: 'Test the hitting effect of the Knowledge based on the given query text.',
|
||||
dateTimeFormat: 'MM/DD/YYYY hh:mm A',
|
||||
records: 'Records',
|
||||
table: {
|
||||
header: {
|
||||
source: 'Source',
|
||||
text: 'Text',
|
||||
time: 'Time',
|
||||
},
|
||||
},
|
||||
input: {
|
||||
title: 'Source text',
|
||||
placeholder: 'Please enter a text, a short declarative sentence is recommended.',
|
||||
countWarning: 'Up to 200 characters.',
|
||||
indexWarning: 'High quality Knowledge only.',
|
||||
testing: 'Test',
|
||||
},
|
||||
hit: {
|
||||
title: '{{num}} Retrieved Chunks',
|
||||
emptyTip: 'Retrieval Testing results will show here',
|
||||
},
|
||||
noRecentTip: 'No recent query results here',
|
||||
viewChart: 'View VECTOR CHART',
|
||||
viewDetail: 'View Detail',
|
||||
chunkDetail: 'Chunk Detail',
|
||||
hitChunks: 'Hit {{num}} child chunks',
|
||||
open: 'Open',
|
||||
keyword: 'Keywords',
|
||||
}
|
||||
|
||||
export default translation
|
||||
166
dify/web/i18n/en-US/dataset-pipeline.ts
Normal file
166
dify/web/i18n/en-US/dataset-pipeline.ts
Normal file
@@ -0,0 +1,166 @@
|
||||
const translation = {
|
||||
creation: {
|
||||
backToKnowledge: 'Back to Knowledge',
|
||||
createFromScratch: {
|
||||
title: 'Blank knowledge pipeline',
|
||||
description: 'Create a custom pipeline from scratch with full control over data processing and structure.',
|
||||
},
|
||||
importDSL: 'Import from a DSL file',
|
||||
createKnowledge: 'Create Knowledge',
|
||||
errorTip: 'Failed to create a Knowledge Base',
|
||||
successTip: 'Successfully created a Knowledge Base',
|
||||
caution: 'Caution',
|
||||
},
|
||||
templates: {
|
||||
customized: 'Customized',
|
||||
},
|
||||
operations: {
|
||||
choose: 'Choose',
|
||||
details: 'Details',
|
||||
editInfo: 'Edit info',
|
||||
useTemplate: 'Use this Knowledge Pipeline',
|
||||
backToDataSource: 'Back to Data Source',
|
||||
process: 'Process',
|
||||
dataSource: 'Data Source',
|
||||
saveAndProcess: 'Save & Process',
|
||||
preview: 'Preview',
|
||||
exportPipeline: 'Export Pipeline',
|
||||
convert: 'Convert',
|
||||
},
|
||||
knowledgeNameAndIcon: 'Knowledge name & icon',
|
||||
knowledgeNameAndIconPlaceholder: 'Please enter the name of the Knowledge Base',
|
||||
knowledgeDescription: 'Knowledge description',
|
||||
knowledgeDescriptionPlaceholder: 'Describe what is in this Knowledge Base. A detailed description allows AI to access the content of the dataset more accurately. If empty, Dify will use the default hit strategy. (Optional)',
|
||||
knowledgePermissions: 'Permissions',
|
||||
editPipelineInfo: 'Edit pipeline info',
|
||||
pipelineNameAndIcon: 'Pipeline name & icon',
|
||||
deletePipeline: {
|
||||
title: 'Are you sure to delete this pipeline template?',
|
||||
content: 'Deleting the pipeline template is irreversible.',
|
||||
},
|
||||
publishPipeline: {
|
||||
success: {
|
||||
message: 'Knowledge Pipeline Published',
|
||||
tip: '<CustomLink>Go to Documents</CustomLink> to add or manage documents.',
|
||||
},
|
||||
error: {
|
||||
message: 'Failed to Publish Knowledge Pipeline',
|
||||
},
|
||||
},
|
||||
publishTemplate: {
|
||||
success: {
|
||||
message: 'Pipeline Template Published',
|
||||
tip: 'You can use this template on the creation page.',
|
||||
learnMore: 'Learn more',
|
||||
},
|
||||
error: {
|
||||
message: 'Failed to Publish Pipeline Template',
|
||||
},
|
||||
},
|
||||
exportDSL: {
|
||||
successTip: 'Export pipeline DSL successfully',
|
||||
errorTip: 'Failed to export pipeline DSL',
|
||||
},
|
||||
details: {
|
||||
createdBy: 'By {{author}}',
|
||||
structure: 'Structure',
|
||||
structureTooltip: 'Chunk Structure determines how documents are split and indexed—offering General, Parent-Child, and Q&A modes—and is unique to each knowledge base.',
|
||||
},
|
||||
testRun: {
|
||||
title: 'Test Run',
|
||||
tooltip: 'In test run mode, only one document is allowed to be imported at a time for easier debugging and observation.',
|
||||
steps: {
|
||||
dataSource: 'Data Source',
|
||||
documentProcessing: 'Document Processing',
|
||||
},
|
||||
dataSource: {
|
||||
localFiles: 'Local Files',
|
||||
},
|
||||
notion: {
|
||||
title: 'Choose Notion Pages',
|
||||
docTitle: 'Notion docs',
|
||||
},
|
||||
},
|
||||
inputField: 'Input Field',
|
||||
inputFieldPanel: {
|
||||
title: 'User Input Fields',
|
||||
description: 'User input fields are used to define and collect variables required during the pipeline execution process. Users can customize the field type and flexibly configure the input value to meet the needs of different data sources or document processing steps.',
|
||||
uniqueInputs: {
|
||||
title: 'Unique Inputs for Each Entrance',
|
||||
tooltip: 'Unique Inputs are only accessible to the selected data source and its downstream nodes. Users won\'t need to fill it in when choosing other data sources. Only input fields referenced by data source variables will appear in the first step(Data Source). All other fields will be shown in the second step(Process Documents).',
|
||||
},
|
||||
globalInputs: {
|
||||
title: 'Global Inputs for All Entrances',
|
||||
tooltip: 'Global Inputs are shared across all nodes. Users will need to fill them in when selecting any data source. For example, fields like delimiter and maximum chunk length can be uniformly applied across multiple data sources. Only input fields referenced by Data Source variables appear in the first step (Data Source). All other fields show up in the second step (Process Documents).',
|
||||
},
|
||||
addInputField: 'Add Input Field',
|
||||
editInputField: 'Edit Input Field',
|
||||
preview: {
|
||||
stepOneTitle: 'Data Source',
|
||||
stepTwoTitle: 'Process Documents',
|
||||
},
|
||||
error: {
|
||||
variableDuplicate: 'Variable name already exists. Please choose a different name.',
|
||||
},
|
||||
},
|
||||
addDocuments: {
|
||||
title: 'Add Documents',
|
||||
steps: {
|
||||
chooseDatasource: 'Choose a Data Source',
|
||||
processDocuments: 'Process Documents',
|
||||
processingDocuments: 'Processing Documents',
|
||||
},
|
||||
backToDataSource: 'Data Source',
|
||||
stepOne: {
|
||||
preview: 'Preview',
|
||||
},
|
||||
stepTwo: {
|
||||
chunkSettings: 'Chunk Settings',
|
||||
previewChunks: 'Preview Chunks',
|
||||
},
|
||||
stepThree: {
|
||||
learnMore: 'Learn more',
|
||||
},
|
||||
characters: 'characters',
|
||||
selectOnlineDocumentTip: 'Process up to {{count}} pages',
|
||||
selectOnlineDriveTip: 'Process up to {{count}} files, maximum {{fileSize}} MB each',
|
||||
},
|
||||
documentSettings: {
|
||||
title: 'Document Settings',
|
||||
},
|
||||
onlineDocument: {
|
||||
pageSelectorTitle: '{{name}} pages',
|
||||
},
|
||||
onlineDrive: {
|
||||
notConnected: '{{name}} is not connected',
|
||||
notConnectedTip: 'To sync with {{name}}, connection to {{name}} must be established first.',
|
||||
breadcrumbs: {
|
||||
allBuckets: 'All Cloud Storage Buckets',
|
||||
allFiles: 'All Files',
|
||||
searchResult: 'Find {{searchResultsLength}} items in "{{folderName}}" folder',
|
||||
searchPlaceholder: 'Search files...',
|
||||
},
|
||||
notSupportedFileType: 'This file type is not supported',
|
||||
emptyFolder: 'This folder is empty',
|
||||
emptySearchResult: 'No items were found',
|
||||
resetKeywords: 'Reset keywords',
|
||||
},
|
||||
credentialSelector: {
|
||||
name: '{{credentialName}}\'s {{pluginName}}',
|
||||
},
|
||||
configurationTip: 'Configure {{pluginName}}',
|
||||
conversion: {
|
||||
title: 'Convert to Knowledge Pipeline',
|
||||
descriptionChunk1: 'You can now convert your existing knowledge base to use the Knowledge Pipeline for document processing',
|
||||
descriptionChunk2: ' — a more open and flexible approach with access to plugins from our marketplace. This will apply the new processing method to all future documents.',
|
||||
warning: 'This action cannot be undone.',
|
||||
confirm: {
|
||||
title: 'Confirmation',
|
||||
content: 'This action is permanent. You won\'t be able to revert to the previous method.Please confirm to convert.',
|
||||
},
|
||||
errorMessage: 'Failed to convert the dataset to a pipeline',
|
||||
successMessage: 'Successfully converted the dataset to a pipeline',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
51
dify/web/i18n/en-US/dataset-settings.ts
Normal file
51
dify/web/i18n/en-US/dataset-settings.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
const translation = {
|
||||
title: 'Knowledge settings',
|
||||
desc: 'Here you can modify the properties and retrieval settings of this Knowledge.',
|
||||
form: {
|
||||
name: 'Knowledge Name',
|
||||
nameAndIcon: 'Name & Icon',
|
||||
namePlaceholder: 'Please enter the Knowledge name',
|
||||
nameError: 'Name cannot be empty',
|
||||
desc: 'Description',
|
||||
descInfo: 'Please write a clear textual description to outline the content of the Knowledge. This description will be used as a basis for matching when selecting from multiple Knowledge for inference.',
|
||||
descPlaceholder: 'Describe what is in this data set. A detailed description allows AI to access the content of the data set in a timely manner. If empty, Dify will use the default hit strategy.',
|
||||
helpText: 'Learn how to write a good dataset description.',
|
||||
descWrite: 'Learn how to write a good Knowledge description.',
|
||||
permissions: 'Permissions',
|
||||
permissionsOnlyMe: 'Only me',
|
||||
permissionsAllMember: 'All team members',
|
||||
permissionsInvitedMembers: 'Partial team members',
|
||||
me: '(You)',
|
||||
onSearchResults: 'No members match your search query.\nTry your search again.',
|
||||
chunkStructure: {
|
||||
title: 'Chunk Structure',
|
||||
learnMore: 'Learn more',
|
||||
description: ' about Chunk Structure.',
|
||||
},
|
||||
indexMethod: 'Index Method',
|
||||
indexMethodHighQuality: 'High Quality',
|
||||
indexMethodHighQualityTip: 'Calling the embedding model to process documents for more precise retrieval helps LLM generate high-quality answers.',
|
||||
upgradeHighQualityTip: 'Once upgrading to High Quality mode, reverting to Economical mode is not available',
|
||||
indexMethodEconomy: 'Economical',
|
||||
indexMethodEconomyTip: 'Using {{count}} keywords per chunk for retrieval, no tokens are consumed at the expense of reduced retrieval accuracy.',
|
||||
numberOfKeywords: 'Number of Keywords',
|
||||
embeddingModel: 'Embedding Model',
|
||||
embeddingModelTip: 'Change the embedded model, please go to ',
|
||||
embeddingModelTipLink: 'Settings',
|
||||
retrievalSetting: {
|
||||
title: 'Retrieval Setting',
|
||||
method: 'Retrieval Method',
|
||||
learnMore: 'Learn more',
|
||||
description: ' about retrieval method.',
|
||||
longDescription: ' about retrieval method, you can change this at any time in the Knowledge settings.',
|
||||
},
|
||||
externalKnowledgeAPI: 'External Knowledge API',
|
||||
externalKnowledgeID: 'External Knowledge ID',
|
||||
retrievalSettings: 'Retrieval Settings',
|
||||
save: 'Save',
|
||||
indexMethodChangeToEconomyDisabledTip: 'Not available for downgrading from HQ to ECO',
|
||||
searchModel: 'Search model',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
241
dify/web/i18n/en-US/dataset.ts
Normal file
241
dify/web/i18n/en-US/dataset.ts
Normal file
@@ -0,0 +1,241 @@
|
||||
const translation = {
|
||||
knowledge: 'Knowledge',
|
||||
chunkingMode: {
|
||||
general: 'General',
|
||||
parentChild: 'Parent-child',
|
||||
qa: 'Q&A',
|
||||
graph: 'Graph',
|
||||
},
|
||||
parentMode: {
|
||||
paragraph: 'Paragraph',
|
||||
fullDoc: 'Full-doc',
|
||||
},
|
||||
externalTag: 'External',
|
||||
externalAPI: 'External API',
|
||||
externalAPIPanelTitle: 'External Knowledge API',
|
||||
externalKnowledgeId: 'External Knowledge ID',
|
||||
externalKnowledgeName: 'External Knowledge Name',
|
||||
externalKnowledgeDescription: 'Knowledge Description',
|
||||
externalKnowledgeIdPlaceholder: 'Please enter the Knowledge ID',
|
||||
externalKnowledgeNamePlaceholder: 'Please enter the name of the knowledge base',
|
||||
externalKnowledgeDescriptionPlaceholder: 'Describe what\'s in this Knowledge Base (optional)',
|
||||
learnHowToWriteGoodKnowledgeDescription: 'Learn how to write a good knowledge description',
|
||||
externalAPIPanelDescription: 'The external knowledge API is used to connect to a knowledge base outside of Dify and retrieve knowledge from that knowledge base.',
|
||||
externalAPIPanelDocumentation: 'Learn how to create an External Knowledge API',
|
||||
externalKnowledgeBase: 'External Knowledge Base',
|
||||
localDocs: 'Local Docs',
|
||||
documentCount: ' docs',
|
||||
docAllEnabled_one: '{{count}} document enabled',
|
||||
docAllEnabled_other: 'All {{count}} documents enabled',
|
||||
partialEnabled_one: 'Total of {{count}} document, {{num}} available',
|
||||
partialEnabled_other: 'Total of {{count}} documents, {{num}} available',
|
||||
wordCount: ' k words',
|
||||
appCount: ' linked apps',
|
||||
updated: 'Updated',
|
||||
createDataset: 'Create Knowledge',
|
||||
createFromPipeline: 'Create from Knowledge Pipeline',
|
||||
createNewExternalAPI: 'Create a new External Knowledge API',
|
||||
noExternalKnowledge: 'There is no External Knowledge API yet, click here to create',
|
||||
createExternalAPI: 'Add an External Knowledge API',
|
||||
editExternalAPIFormTitle: 'Edit the External Knowledge API',
|
||||
editExternalAPITooltipTitle: 'LINKED KNOWLEDGE',
|
||||
editExternalAPIConfirmWarningContent: {
|
||||
front: 'This External Knowledge API is linked to',
|
||||
end: 'external knowledge, and this modification will be applied to all of them. Are you sure you want to save this change?',
|
||||
},
|
||||
editExternalAPIFormWarning: {
|
||||
front: 'This External API is linked to',
|
||||
end: 'external knowledge',
|
||||
},
|
||||
deleteExternalAPIConfirmWarningContent: {
|
||||
title: {
|
||||
front: 'Delete',
|
||||
end: '?',
|
||||
},
|
||||
content: {
|
||||
front: 'This External Knowledge API is linked to',
|
||||
end: 'external knowledge. Deleting this API will invalidate all of them. Are you sure you want to delete this API?',
|
||||
},
|
||||
noConnectionContent: 'Are you sure to delete this API?',
|
||||
},
|
||||
selectExternalKnowledgeAPI: {
|
||||
placeholder: 'Choose an External Knowledge API',
|
||||
},
|
||||
connectDataset: 'Connect to an External Knowledge Base',
|
||||
connectDatasetIntro: {
|
||||
title: 'How to Connect to an External Knowledge Base',
|
||||
content: {
|
||||
front: 'To connect to an external knowledge base, you need to create an external API first. Please read carefully and refer to',
|
||||
link: 'Learn how to create an external API',
|
||||
end: '. Then find the corresponding knowledge ID and fill it in the form on the left. If all the information is correct, it will automatically jump to the retrieval test in the knowledge base after clicking the connect button.',
|
||||
},
|
||||
learnMore: 'Learn More',
|
||||
},
|
||||
connectHelper: {
|
||||
helper1: 'Connect to external knowledge bases via API and knowledge base ID. Currently, ',
|
||||
helper2: 'only the retrieval functionality is supported',
|
||||
helper3: '. We strongly recommend that you ',
|
||||
helper4: 'read the help documentation',
|
||||
helper5: ' carefully before using this feature.',
|
||||
},
|
||||
createDatasetIntro: 'Import your own text data or write data in real-time via Webhook for LLM context enhancement.',
|
||||
deleteDatasetConfirmTitle: 'Delete this Knowledge?',
|
||||
deleteDatasetConfirmContent:
|
||||
'Deleting the Knowledge is irreversible. Users will no longer be able to access your Knowledge, and all prompt configurations and logs will be permanently deleted.',
|
||||
datasetUsedByApp: 'The knowledge is being used by some apps. Apps will no longer be able to use this Knowledge, and all prompt configurations and logs will be permanently deleted.',
|
||||
datasetDeleted: 'Knowledge deleted',
|
||||
datasetDeleteFailed: 'Failed to delete Knowledge',
|
||||
didYouKnow: 'Did you know?',
|
||||
intro1: 'The Knowledge can be integrated into the Dify application ',
|
||||
intro2: 'as a context',
|
||||
intro3: ',',
|
||||
intro4: 'or it ',
|
||||
intro5: 'can be published',
|
||||
intro6: ' as an independent service.',
|
||||
unavailable: 'Unavailable',
|
||||
datasets: 'KNOWLEDGE',
|
||||
datasetsApi: 'API ACCESS',
|
||||
externalKnowledgeForm: {
|
||||
connect: 'Connect',
|
||||
cancel: 'Cancel',
|
||||
},
|
||||
externalAPIForm: {
|
||||
name: 'Name',
|
||||
endpoint: 'API Endpoint',
|
||||
apiKey: 'API Key',
|
||||
save: 'Save',
|
||||
cancel: 'Cancel',
|
||||
edit: 'Edit',
|
||||
encrypted: {
|
||||
front: 'Your API Token will be encrypted and stored using',
|
||||
end: 'technology.',
|
||||
},
|
||||
},
|
||||
retrieval: {
|
||||
semantic_search: {
|
||||
title: 'Vector Search',
|
||||
description: 'Generate query embeddings and search for the text chunk most similar to its vector representation.',
|
||||
},
|
||||
full_text_search: {
|
||||
title: 'Full-Text Search',
|
||||
description: 'Index all terms in the document, allowing users to search any term and retrieve relevant text chunk containing those terms.',
|
||||
},
|
||||
hybrid_search: {
|
||||
title: 'Hybrid Search',
|
||||
description: 'Execute full-text search and vector searches simultaneously, re-rank to select the best match for the user\'s query. Users can choose to set weights or configure to a Rerank model.',
|
||||
recommend: 'Recommend',
|
||||
},
|
||||
keyword_search: {
|
||||
title: 'Inverted Index',
|
||||
description: 'Inverted Index is a structure used for efficient retrieval. Organized by terms, each term points to documents or web pages containing it.',
|
||||
},
|
||||
change: 'Change',
|
||||
changeRetrievalMethod: 'Change retrieval method',
|
||||
},
|
||||
docsFailedNotice: 'documents indexed failed',
|
||||
retry: 'Retry',
|
||||
documentsDisabled: '{{num}} documents disabled - inactive for over 30 days',
|
||||
enable: 'Enable',
|
||||
indexingTechnique: {
|
||||
high_quality: 'HQ',
|
||||
economy: 'ECO',
|
||||
},
|
||||
indexingMethod: {
|
||||
semantic_search: 'VECTOR',
|
||||
full_text_search: 'FULL TEXT',
|
||||
hybrid_search: 'HYBRID',
|
||||
invertedIndex: 'INVERTED',
|
||||
},
|
||||
defaultRetrievalTip: 'Multi-path retrieval is used by default. Knowledge is retrieved from multiple knowledge bases and then re-ranked.',
|
||||
mixtureHighQualityAndEconomicTip: 'The Rerank model is required for mixture of high quality and economical knowledge bases.',
|
||||
inconsistentEmbeddingModelTip: 'The Rerank model is required if the Embedding models of the selected knowledge bases are inconsistent.',
|
||||
mixtureInternalAndExternalTip: 'The Rerank model is required for mixture of internal and external knowledge.',
|
||||
allExternalTip: 'When using external knowledge only, the user can choose whether to enable the Rerank model. If not enabled, retrieved chunks will be sorted based on scores. When the retrieval strategies of different knowledge bases are inconsistent, it will be inaccurate.',
|
||||
retrievalSettings: 'Retrieval Setting',
|
||||
rerankSettings: 'Rerank Setting',
|
||||
weightedScore: {
|
||||
title: 'Weighted Score',
|
||||
description: 'By adjusting the weights assigned, this rerank strategy determines whether to prioritize semantic or keyword matching.',
|
||||
semanticFirst: 'Semantic first',
|
||||
keywordFirst: 'Keyword first',
|
||||
customized: 'Customized',
|
||||
semantic: 'Semantic',
|
||||
keyword: 'Keyword',
|
||||
},
|
||||
nTo1RetrievalLegacy: 'N-to-1 retrieval will be officially deprecated from September. It is recommended to use the latest Multi-path retrieval to obtain better results. ',
|
||||
nTo1RetrievalLegacyLink: 'Learn more',
|
||||
nTo1RetrievalLegacyLinkText: ' N-to-1 retrieval will be officially deprecated in September.',
|
||||
batchAction: {
|
||||
selected: 'Selected',
|
||||
enable: 'Enable',
|
||||
disable: 'Disable',
|
||||
archive: 'Archive',
|
||||
delete: 'Delete',
|
||||
cancel: 'Cancel',
|
||||
},
|
||||
preprocessDocument: '{{num}} Preprocess Documents',
|
||||
allKnowledge: 'All Knowledge',
|
||||
allKnowledgeDescription: 'Select to display all knowledge in this workspace. Only the Workspace Owner can manage all knowledge.',
|
||||
embeddingModelNotAvailable: 'Embedding model is unavailable.',
|
||||
metadata: {
|
||||
metadata: 'Metadata',
|
||||
addMetadata: 'Add Metadata',
|
||||
chooseTime: 'Choose a time...',
|
||||
createMetadata: {
|
||||
title: 'New Metadata',
|
||||
back: 'Back',
|
||||
type: 'Type',
|
||||
name: 'Name',
|
||||
namePlaceholder: 'Add metadata name',
|
||||
},
|
||||
checkName: {
|
||||
empty: 'Metadata name cannot be empty',
|
||||
invalid: 'Metadata name can only contain lowercase letters, numbers, and underscores and must start with a lowercase letter',
|
||||
tooLong: 'Metadata name cannot exceed {{max}} characters',
|
||||
},
|
||||
batchEditMetadata: {
|
||||
editMetadata: 'Edit Metadata',
|
||||
editDocumentsNum: 'Editing {{num}} documents',
|
||||
applyToAllSelectDocument: 'Apply to all selected documents',
|
||||
applyToAllSelectDocumentTip: 'Automatically create all the above edited and new metadata for all selected documents, otherwise editing metadata will only apply to documents with it.',
|
||||
multipleValue: 'Multiple Value',
|
||||
},
|
||||
selectMetadata: {
|
||||
search: 'Search metadata',
|
||||
newAction: 'New Metadata',
|
||||
manageAction: 'Manage',
|
||||
},
|
||||
datasetMetadata: {
|
||||
description: 'You can manage all metadata in this knowledge here. Modifications will be synchronized to every document.',
|
||||
addMetaData: 'Add Metadata',
|
||||
values: '{{num}} Values',
|
||||
disabled: 'Disabled',
|
||||
rename: 'Rename',
|
||||
name: 'Name',
|
||||
namePlaceholder: 'Metadata name',
|
||||
builtIn: 'Built-in',
|
||||
builtInDescription: 'Built-in metadata is automatically extracted and generated. It must be enabled before use and cannot be edited.',
|
||||
deleteTitle: 'Confirm to delete',
|
||||
deleteContent: 'Are you sure you want to delete the metadata "{{name}}"',
|
||||
},
|
||||
documentMetadata: {
|
||||
metadataToolTip: 'Metadata serves as a critical filter that enhances the accuracy and relevance of information retrieval. You can modify and add metadata for this document here.',
|
||||
startLabeling: 'Start Labeling',
|
||||
documentInformation: 'Document Information',
|
||||
technicalParameters: 'Technical Parameters',
|
||||
},
|
||||
},
|
||||
serviceApi: {
|
||||
title: 'Service API',
|
||||
enabled: 'In Service',
|
||||
disabled: 'Disabled',
|
||||
card: {
|
||||
title: 'Backend service api',
|
||||
endpoint: 'Service API Endpoint',
|
||||
apiKey: 'API Key',
|
||||
apiReference: 'API Reference',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
76
dify/web/i18n/en-US/education.ts
Normal file
76
dify/web/i18n/en-US/education.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
const translation = {
|
||||
toVerified: 'Get Education Verified',
|
||||
toVerifiedTip: {
|
||||
front: 'You are now eligible for Education Verified status. Please enter your education information below to complete the process and receive an',
|
||||
coupon: 'exclusive 100% coupon',
|
||||
end: 'for the Dify Professional Plan.',
|
||||
},
|
||||
currentSigned: 'CURRENTLY SIGNED IN AS',
|
||||
form: {
|
||||
schoolName: {
|
||||
title: 'Your School Name',
|
||||
placeholder: 'Enter the official, unabbreviated name of your school',
|
||||
},
|
||||
schoolRole: {
|
||||
title: 'Your School Role',
|
||||
option: {
|
||||
student: 'Student',
|
||||
teacher: 'Teacher',
|
||||
administrator: 'School Administrator',
|
||||
},
|
||||
},
|
||||
terms: {
|
||||
title: 'Terms & Agreements',
|
||||
desc: {
|
||||
front: 'Your information and use of Education Verified status are subject to our',
|
||||
and: 'and',
|
||||
end: '. By submitting:',
|
||||
termsOfService: 'Terms of Service',
|
||||
privacyPolicy: 'Privacy Policy',
|
||||
},
|
||||
option: {
|
||||
age: 'I confirm I am at least 18 years old',
|
||||
inSchool: 'I confirm I am enrolled or employed at the institution provided. Dify may request proof of enrollment/employment. If I misrepresent my eligibility, I agree to pay any fees initially waived based on my education status.',
|
||||
},
|
||||
},
|
||||
},
|
||||
submit: 'Submit',
|
||||
submitError: 'Form submission failed. Please try again later.',
|
||||
learn: 'Learn how to get education verified',
|
||||
successTitle: 'You Have Got Dify Education Verified',
|
||||
successContent: 'We have issued a 100% discount coupon for the Dify Professional plan to your account. The coupon is valid for one year, please use it within the validity period.',
|
||||
rejectTitle: 'Your Dify Educational Verification Has Been Rejected',
|
||||
rejectContent: 'Unfortunately, you are not eligible for Education Verified status and therefore cannot receive the exclusive 100% coupon for the Dify Professional Plan if you use this email address.',
|
||||
emailLabel: 'Your current email',
|
||||
notice: {
|
||||
dateFormat: 'MM/DD/YYYY',
|
||||
expired: {
|
||||
title: 'Your education status has expired',
|
||||
summary: {
|
||||
line1: 'You can still access and use Dify. ',
|
||||
line2: 'However, you\'re no longer eligible for new education discount coupons.',
|
||||
},
|
||||
},
|
||||
isAboutToExpire: {
|
||||
title: 'Your education status will expire on {{date}}',
|
||||
summary: 'Don\'t worry — this won\'t affect your current subscription, but you won\'t get the education discount when it renews unless you verify your status again.',
|
||||
},
|
||||
stillInEducation: {
|
||||
title: 'Still in education?',
|
||||
expired: 'Re-verify now to get a new coupon for the upcoming academic year. We\'ll add it to your account and you can use it for the next upgrade.',
|
||||
isAboutToExpire: 'Re-verify now to get a new coupon for the upcoming academic year. It\'ll be saved to your account and ready to use at your next renewal.',
|
||||
},
|
||||
alreadyGraduated: {
|
||||
title: 'Already graduated?',
|
||||
expired: 'Feel free to upgrade anytime to get full access to paid features.',
|
||||
isAboutToExpire: 'Your current subscription will still remain active. When it ends, you\'ll be moved to the Sandbox plan, or you can upgrade anytime to restore full access to paid features.',
|
||||
},
|
||||
action: {
|
||||
dismiss: 'Dismiss',
|
||||
upgrade: 'Upgrade',
|
||||
reVerify: 'Re-verify',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
44
dify/web/i18n/en-US/explore.ts
Normal file
44
dify/web/i18n/en-US/explore.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
const translation = {
|
||||
title: 'Explore',
|
||||
sidebar: {
|
||||
discovery: 'Discovery',
|
||||
chat: 'Chat',
|
||||
workspace: 'Workspace',
|
||||
action: {
|
||||
pin: 'Pin',
|
||||
unpin: 'Unpin',
|
||||
rename: 'Rename',
|
||||
delete: 'Delete',
|
||||
},
|
||||
delete: {
|
||||
title: 'Delete app',
|
||||
content: 'Are you sure you want to delete this app?',
|
||||
},
|
||||
},
|
||||
apps: {
|
||||
title: 'Explore Apps',
|
||||
description: 'Use these template apps instantly or customize your own apps based on the templates.',
|
||||
allCategories: 'Recommended',
|
||||
},
|
||||
appCard: {
|
||||
addToWorkspace: 'Add to Workspace',
|
||||
customize: 'Customize',
|
||||
},
|
||||
appCustomize: {
|
||||
title: 'Create app from {{name}}',
|
||||
subTitle: 'App icon & name',
|
||||
nameRequired: 'App name is required',
|
||||
},
|
||||
category: {
|
||||
Agent: 'Agent',
|
||||
Assistant: 'Assistant',
|
||||
Writing: 'Writing',
|
||||
Translate: 'Translate',
|
||||
Programming: 'Programming',
|
||||
HR: 'HR',
|
||||
Workflow: 'Workflow',
|
||||
Entertainment: 'Entertainment',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
8
dify/web/i18n/en-US/layout.ts
Normal file
8
dify/web/i18n/en-US/layout.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
const translation = {
|
||||
sidebar: {
|
||||
expandSidebar: 'Expand Sidebar',
|
||||
collapseSidebar: 'Collapse Sidebar',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
126
dify/web/i18n/en-US/login.ts
Normal file
126
dify/web/i18n/en-US/login.ts
Normal file
@@ -0,0 +1,126 @@
|
||||
const translation = {
|
||||
pageTitle: 'Log in to Dify',
|
||||
pageTitleForE: 'Hey, let\'s get started!',
|
||||
welcome: '👋 Welcome! Please log in to get started.',
|
||||
email: 'Email address',
|
||||
emailPlaceholder: 'Your email',
|
||||
password: 'Password',
|
||||
passwordPlaceholder: 'Your password',
|
||||
name: 'Username',
|
||||
namePlaceholder: 'Your username',
|
||||
forget: 'Forgot your password?',
|
||||
signBtn: 'Sign in',
|
||||
continueWithCode: 'Continue With Code',
|
||||
sendVerificationCode: 'Send Verification Code',
|
||||
usePassword: 'Use Password',
|
||||
useVerificationCode: 'Use Verification Code',
|
||||
or: 'OR',
|
||||
installBtn: 'Set up',
|
||||
setAdminAccount: 'Setting up an admin account',
|
||||
setAdminAccountDesc: 'Maximum privileges for admin account, which can be used to create applications and manage LLM providers, etc.',
|
||||
createAndSignIn: 'Create and sign in',
|
||||
oneMoreStep: 'One more step',
|
||||
createSample: 'Based on this information, we\'ll create sample application for you',
|
||||
invitationCode: 'Invitation Code',
|
||||
invitationCodePlaceholder: 'Your invitation code',
|
||||
interfaceLanguage: 'Interface Language',
|
||||
timezone: 'Time zone',
|
||||
go: 'Go to Dify',
|
||||
sendUsMail: 'Email us your introduction, and we\'ll handle the invitation request.',
|
||||
acceptPP: 'I have read and accept the privacy policy',
|
||||
reset: 'Please run following command to reset your password',
|
||||
withGitHub: 'Continue with GitHub',
|
||||
withGoogle: 'Continue with Google',
|
||||
withSSO: 'Continue with SSO',
|
||||
rightTitle: 'Unlock the full potential of LLM',
|
||||
rightDesc: 'Effortlessly build visually captivating, operable, and improvable AI applications.',
|
||||
tos: 'Terms of Service',
|
||||
pp: 'Privacy Policy',
|
||||
tosDesc: 'By signing up, you agree to our',
|
||||
goToInit: 'If you have not initialized the account, please go to the initialization page',
|
||||
dontHave: 'Don\'t have?',
|
||||
invalidInvitationCode: 'Invalid invitation code',
|
||||
accountAlreadyInited: 'Account already initialized',
|
||||
forgotPassword: 'Forgot your password?',
|
||||
resetLinkSent: 'Reset link sent',
|
||||
sendResetLink: 'Send reset link',
|
||||
backToSignIn: 'Return to sign in',
|
||||
forgotPasswordDesc: 'Please enter your email address to reset your password. We will send you an email with instructions on how to reset your password.',
|
||||
checkEmailForResetLink: 'Please check your email for a link to reset your password. If it doesn\'t appear within a few minutes, make sure to check your spam folder.',
|
||||
passwordChanged: 'Sign in now',
|
||||
changePassword: 'Set a password',
|
||||
changePasswordTip: 'Please enter a new password for your account',
|
||||
changePasswordBtn: 'Set a password',
|
||||
invalidToken: 'Invalid or expired token',
|
||||
confirmPassword: 'Confirm Password',
|
||||
confirmPasswordPlaceholder: 'Confirm your new password',
|
||||
passwordChangedTip: 'Your password has been successfully changed',
|
||||
error: {
|
||||
emailEmpty: 'Email address is required',
|
||||
emailInValid: 'Please enter a valid email address',
|
||||
nameEmpty: 'Name is required',
|
||||
passwordEmpty: 'Password is required',
|
||||
passwordLengthInValid: 'Password must be at least 8 characters',
|
||||
passwordInvalid: 'Password must contain letters and numbers, and the length must be greater than 8',
|
||||
registrationNotAllowed: 'Account not found. Please contact the system admin to register.',
|
||||
invalidEmailOrPassword: 'Invalid email or password.',
|
||||
},
|
||||
license: {
|
||||
tip: 'Before starting Dify Community Edition, read the GitHub',
|
||||
link: 'Open-source License',
|
||||
},
|
||||
join: 'Join ',
|
||||
joinTipStart: 'Invite you join ',
|
||||
joinTipEnd: ' team on Dify',
|
||||
invalid: 'The link has expired',
|
||||
explore: 'Explore Dify',
|
||||
activatedTipStart: 'You have joined the',
|
||||
activatedTipEnd: 'team',
|
||||
activated: 'Sign in now',
|
||||
adminInitPassword: 'Admin initialization password',
|
||||
validate: 'Validate',
|
||||
checkCode: {
|
||||
checkYourEmail: 'Check your email',
|
||||
tipsPrefix: 'We send a verification code to ',
|
||||
validTime: 'Bear in mind that the code is valid for 5 minutes',
|
||||
verificationCode: 'Verification code',
|
||||
verificationCodePlaceholder: 'Enter 6-digit code',
|
||||
verify: 'Verify',
|
||||
didNotReceiveCode: 'Didn\'t receive the code? ',
|
||||
resend: 'Resend',
|
||||
useAnotherMethod: 'Use another method',
|
||||
emptyCode: 'Code is required',
|
||||
invalidCode: 'Invalid code',
|
||||
},
|
||||
resetPassword: 'Reset Password',
|
||||
resetPasswordDesc: 'Type the email you used to sign up on Dify and we will send you a password reset email.',
|
||||
backToLogin: 'Back to login',
|
||||
setYourAccount: 'Set Your Account',
|
||||
enterYourName: 'Please enter your username',
|
||||
back: 'Back',
|
||||
noLoginMethod: 'Authentication method not configured',
|
||||
noLoginMethodTip: 'Please contact the system admin to add an authentication method.',
|
||||
licenseExpired: 'License Expired',
|
||||
licenseExpiredTip: 'The Dify Enterprise license for your workspace has expired. Please contact your administrator to continue using Dify.',
|
||||
licenseLost: 'License Lost',
|
||||
licenseLostTip: 'Failed to connect Dify license server. Please contact your administrator to continue using Dify.',
|
||||
licenseInactive: 'License Inactive',
|
||||
licenseInactiveTip: 'The Dify Enterprise license for your workspace is inactive. Please contact your administrator to continue using Dify.',
|
||||
webapp: {
|
||||
login: 'Login',
|
||||
noLoginMethod: 'Authentication method not configured for web app',
|
||||
noLoginMethodTip: 'Please contact the system admin to add an authentication method.',
|
||||
disabled: 'Webapp authentication is disabled. Please contact the system admin to enable it. You can try to use the app directly.',
|
||||
},
|
||||
signup: {
|
||||
noAccount: 'Don’t have an account? ',
|
||||
signUp: 'Sign Up',
|
||||
createAccount: 'Create your account',
|
||||
welcome: '👋 Welcome! Please fill in the details to get started.',
|
||||
verifyMail: 'Continue with verification code',
|
||||
haveAccount: 'Already have an account? ',
|
||||
signIn: 'Sign In',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
27
dify/web/i18n/en-US/oauth.ts
Normal file
27
dify/web/i18n/en-US/oauth.ts
Normal file
@@ -0,0 +1,27 @@
|
||||
const translation = {
|
||||
tips: {
|
||||
loggedIn: 'This app wants to access the following information from your Dify Cloud account.',
|
||||
notLoggedIn: 'This app wants to access your Dify Cloud account',
|
||||
needLogin: 'Please log in to authorize',
|
||||
common: 'We respect your privacy and will only use this information to enhance your experience with our developer tools.',
|
||||
},
|
||||
connect: 'Connect to',
|
||||
continue: 'Continue',
|
||||
switchAccount: 'Switch Account',
|
||||
login: 'Login',
|
||||
scopes: {
|
||||
name: 'Name',
|
||||
email: 'Email',
|
||||
avatar: 'Avatar',
|
||||
languagePreference: 'Language Preference',
|
||||
timezone: 'Timezone',
|
||||
},
|
||||
error: {
|
||||
invalidParams: 'Invalid parameters',
|
||||
authorizeFailed: 'Authorization failed',
|
||||
authAppInfoFetchFailed: 'Failed to fetch app info for authorization',
|
||||
},
|
||||
unknownApp: 'Unknown App',
|
||||
}
|
||||
|
||||
export default translation
|
||||
40
dify/web/i18n/en-US/pipeline.ts
Normal file
40
dify/web/i18n/en-US/pipeline.ts
Normal file
@@ -0,0 +1,40 @@
|
||||
const translation = {
|
||||
common: {
|
||||
goToAddDocuments: 'Go to add documents',
|
||||
publishAs: 'Publish as a Customized Pipeline Template',
|
||||
confirmPublish: 'Confirm Publish',
|
||||
confirmPublishContent: 'After successfully publishing the knowledge pipeline, the chunk structure of this knowledge base cannot be modified. Are you sure you want to publish it?',
|
||||
publishAsPipeline: {
|
||||
name: 'Pipeline name & icon',
|
||||
namePlaceholder: 'Please enter the name of this Knowledge Pipeline. (Required) ',
|
||||
description: 'Knowledge description',
|
||||
descriptionPlaceholder: 'Please enter the description of this Knowledge Pipeline. (Optional) ',
|
||||
},
|
||||
testRun: 'Test Run',
|
||||
preparingDataSource: 'Preparing Data Source',
|
||||
reRun: 'Re-run',
|
||||
processing: 'Processing',
|
||||
},
|
||||
inputField: {
|
||||
create: 'Create user input field',
|
||||
manage: 'Manage',
|
||||
},
|
||||
publishToast: {
|
||||
title: 'This pipeline has not yet been published',
|
||||
desc: 'When the pipeline is not published, you can modify the chunk structure in the knowledge base node, and the pipeline orchestration and changes will be automatically saved as a draft.',
|
||||
},
|
||||
result: {
|
||||
resultPreview: {
|
||||
loading: 'Processing...Please wait',
|
||||
error: 'Error occurred during execution',
|
||||
viewDetails: 'View details',
|
||||
footerTip: 'In test run mode, preview up to {{count}} chunks',
|
||||
},
|
||||
},
|
||||
ragToolSuggestions: {
|
||||
title: 'Suggestions for RAG',
|
||||
noRecommendationPlugins: 'No recommended plugins, find more in <CustomLink>Marketplace</CustomLink>',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
26
dify/web/i18n/en-US/plugin-tags.ts
Normal file
26
dify/web/i18n/en-US/plugin-tags.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
const translation = {
|
||||
allTags: 'All Tags',
|
||||
searchTags: 'Search Tags',
|
||||
tags: {
|
||||
agent: 'Agent',
|
||||
rag: 'RAG',
|
||||
search: 'Search',
|
||||
image: 'Image',
|
||||
videos: 'Videos',
|
||||
weather: 'Weather',
|
||||
finance: 'Finance',
|
||||
design: 'Design',
|
||||
travel: 'Travel',
|
||||
social: 'Social',
|
||||
news: 'News',
|
||||
medical: 'Medical',
|
||||
productivity: 'Productivity',
|
||||
education: 'Education',
|
||||
business: 'Business',
|
||||
entertainment: 'Entertainment',
|
||||
utilities: 'Utilities',
|
||||
other: 'Other',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
186
dify/web/i18n/en-US/plugin-trigger.ts
Normal file
186
dify/web/i18n/en-US/plugin-trigger.ts
Normal file
@@ -0,0 +1,186 @@
|
||||
const translation = {
|
||||
subscription: {
|
||||
title: 'Subscriptions',
|
||||
listNum: '{{num}} subscriptions',
|
||||
empty: {
|
||||
title: 'No subscriptions',
|
||||
button: 'New subscription',
|
||||
},
|
||||
createButton: {
|
||||
oauth: 'New subscription with OAuth',
|
||||
apiKey: 'New subscription with API Key',
|
||||
manual: 'Paste URL to create a new subscription',
|
||||
},
|
||||
createSuccess: 'Subscription created successfully',
|
||||
createFailed: 'Failed to create subscription',
|
||||
maxCount: 'Max {{num}} subscriptions',
|
||||
selectPlaceholder: 'Select subscription',
|
||||
noSubscriptionSelected: 'No subscription selected',
|
||||
subscriptionRemoved: 'Subscription removed',
|
||||
list: {
|
||||
title: 'Subscriptions',
|
||||
addButton: 'Add',
|
||||
tip: 'Receive events via Subscription',
|
||||
item: {
|
||||
enabled: 'Enabled',
|
||||
disabled: 'Disabled',
|
||||
credentialType: {
|
||||
api_key: 'API Key',
|
||||
oauth2: 'OAuth',
|
||||
unauthorized: 'Manual',
|
||||
},
|
||||
actions: {
|
||||
delete: 'Delete',
|
||||
deleteConfirm: {
|
||||
title: 'Delete {{name}}?',
|
||||
success: 'Subscription {{name}} deleted successfully',
|
||||
error: 'Failed to delete subscription {{name}}',
|
||||
content: 'Once deleted, this subscription cannot be recovered. Please confirm.',
|
||||
contentWithApps: 'The current subscription is referenced by {{count}} applications. Deleting it will cause the configured applications to stop receiving subscription events.',
|
||||
confirm: 'Confirm Delete',
|
||||
cancel: 'Cancel',
|
||||
confirmInputWarning: 'Please enter the correct name to confirm.',
|
||||
confirmInputPlaceholder: 'Enter "{{name}}" to confirm.',
|
||||
confirmInputTip: 'Please enter “{{name}}” to confirm.',
|
||||
},
|
||||
},
|
||||
status: {
|
||||
active: 'Active',
|
||||
inactive: 'Inactive',
|
||||
},
|
||||
usedByNum: 'Used by {{num}} workflows',
|
||||
noUsed: 'No workflow used',
|
||||
},
|
||||
},
|
||||
addType: {
|
||||
title: 'Add subscription',
|
||||
description: 'Choose how you want to create your trigger subscription',
|
||||
options: {
|
||||
apikey: {
|
||||
title: 'Create with API Key',
|
||||
description: 'Automatically create subscription using API credentials',
|
||||
},
|
||||
oauth: {
|
||||
title: 'Create with OAuth',
|
||||
description: 'Authorize with third-party platform to create subscription',
|
||||
clientSettings: 'OAuth Client Settings',
|
||||
clientTitle: 'OAuth Client',
|
||||
default: 'Default',
|
||||
custom: 'Custom',
|
||||
},
|
||||
manual: {
|
||||
title: 'Manual Setup',
|
||||
description: 'Paste URL to create a new subscription',
|
||||
tip: 'Configure URL on third-party platform manually',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
modal: {
|
||||
steps: {
|
||||
verify: 'Verify',
|
||||
configuration: 'Configuration',
|
||||
},
|
||||
common: {
|
||||
cancel: 'Cancel',
|
||||
back: 'Back',
|
||||
next: 'Next',
|
||||
create: 'Create',
|
||||
verify: 'Verify',
|
||||
authorize: 'Authorize',
|
||||
creating: 'Creating...',
|
||||
verifying: 'Verifying...',
|
||||
authorizing: 'Authorizing...',
|
||||
},
|
||||
oauthRedirectInfo: 'As no system client secrets found for this tool provider, setup it manually is required, for redirect_uri, please use',
|
||||
apiKey: {
|
||||
title: 'Create with API Key',
|
||||
verify: {
|
||||
title: 'Verify Credentials',
|
||||
description: 'Please provide your API credentials to verify access',
|
||||
error: 'Credential verification failed. Please check your API key.',
|
||||
success: 'Credentials verified successfully',
|
||||
},
|
||||
configuration: {
|
||||
title: 'Configure Subscription',
|
||||
description: 'Set up your subscription parameters',
|
||||
},
|
||||
},
|
||||
oauth: {
|
||||
title: 'Create with OAuth',
|
||||
authorization: {
|
||||
title: 'OAuth Authorization',
|
||||
description: 'Authorize Dify to access your account',
|
||||
redirectUrl: 'Redirect URL',
|
||||
redirectUrlHelp: 'Use this URL in your OAuth app configuration',
|
||||
authorizeButton: 'Authorize with {{provider}}',
|
||||
waitingAuth: 'Waiting for authorization...',
|
||||
authSuccess: 'Authorization successful',
|
||||
authFailed: 'Failed to get OAuth authorization information',
|
||||
waitingJump: 'Authorized, waiting for jump',
|
||||
},
|
||||
configuration: {
|
||||
title: 'Configure Subscription',
|
||||
description: 'Set up your subscription parameters after authorization',
|
||||
success: 'OAuth configuration successful',
|
||||
failed: 'OAuth configuration failed',
|
||||
},
|
||||
remove: {
|
||||
success: 'OAuth remove successful',
|
||||
failed: 'OAuth remove failed',
|
||||
},
|
||||
save: {
|
||||
success: 'OAuth configuration saved successfully',
|
||||
},
|
||||
},
|
||||
manual: {
|
||||
title: 'Manual Setup',
|
||||
description: 'Configure your webhook subscription manually',
|
||||
logs: {
|
||||
title: 'Request Logs',
|
||||
request: 'Request',
|
||||
loading: 'Awaiting request from {{pluginName}}...',
|
||||
},
|
||||
},
|
||||
form: {
|
||||
subscriptionName: {
|
||||
label: 'Subscription Name',
|
||||
placeholder: 'Enter subscription name',
|
||||
required: 'Subscription name is required',
|
||||
},
|
||||
callbackUrl: {
|
||||
label: 'Callback URL',
|
||||
description: 'This URL will receive webhook events',
|
||||
tooltip: 'Provide a publicly accessible endpoint that can receive callback requests from the trigger provider.',
|
||||
placeholder: 'Generating...',
|
||||
privateAddressWarning: 'This URL appears to be an internal address, which may cause webhook requests to fail. You may change TRIGGER_URL to a public address.',
|
||||
},
|
||||
},
|
||||
errors: {
|
||||
createFailed: 'Failed to create subscription',
|
||||
verifyFailed: 'Failed to verify credentials',
|
||||
authFailed: 'Authorization failed',
|
||||
networkError: 'Network error, please try again',
|
||||
},
|
||||
},
|
||||
events: {
|
||||
title: 'Available Events',
|
||||
description: 'Events that this trigger plugin can subscribe to',
|
||||
empty: 'No events available',
|
||||
event: 'Event',
|
||||
events: 'Events',
|
||||
actionNum: '{{num}} {{event}} INCLUDED',
|
||||
item: {
|
||||
parameters: '{{count}} parameters',
|
||||
noParameters: 'No parameters',
|
||||
},
|
||||
output: 'Output',
|
||||
},
|
||||
node: {
|
||||
status: {
|
||||
warning: 'Disconnect',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
320
dify/web/i18n/en-US/plugin.ts
Normal file
320
dify/web/i18n/en-US/plugin.ts
Normal file
@@ -0,0 +1,320 @@
|
||||
const translation = {
|
||||
metadata: {
|
||||
title: 'Plugins',
|
||||
},
|
||||
category: {
|
||||
all: 'All',
|
||||
models: 'Models',
|
||||
tools: 'Tools',
|
||||
agents: 'Agent Strategies',
|
||||
extensions: 'Extensions',
|
||||
triggers: 'Triggers',
|
||||
bundles: 'Bundles',
|
||||
datasources: 'Data Sources',
|
||||
},
|
||||
categorySingle: {
|
||||
model: 'Model',
|
||||
tool: 'Tool',
|
||||
agent: 'Agent Strategy',
|
||||
extension: 'Extension',
|
||||
trigger: 'Trigger',
|
||||
bundle: 'Bundle',
|
||||
datasource: 'Data Source',
|
||||
},
|
||||
search: 'Search',
|
||||
allCategories: 'All Categories',
|
||||
searchCategories: 'Search Categories',
|
||||
searchPlugins: 'Search plugins',
|
||||
from: 'From',
|
||||
findMoreInMarketplace: 'Find more in Marketplace',
|
||||
searchInMarketplace: 'Search in Marketplace',
|
||||
fromMarketplace: 'From Marketplace',
|
||||
endpointsEnabled: '{{num}} sets of endpoints enabled',
|
||||
searchTools: 'Search tools...',
|
||||
installPlugin: 'Install plugin',
|
||||
installFrom: 'INSTALL FROM',
|
||||
deprecated: 'Deprecated',
|
||||
list: {
|
||||
noInstalled: 'No plugins installed',
|
||||
notFound: 'No plugins found',
|
||||
source: {
|
||||
marketplace: 'Install from Marketplace',
|
||||
github: 'Install from GitHub',
|
||||
local: 'Install from Local Package File',
|
||||
},
|
||||
},
|
||||
source: {
|
||||
marketplace: 'Marketplace',
|
||||
github: 'GitHub',
|
||||
local: 'Local Package File',
|
||||
},
|
||||
detailPanel: {
|
||||
switchVersion: 'Switch Version',
|
||||
categoryTip: {
|
||||
marketplace: 'Installed from Marketplace',
|
||||
github: 'Installed from Github',
|
||||
local: 'Local Plugin',
|
||||
debugging: 'Debugging Plugin',
|
||||
},
|
||||
operation: {
|
||||
install: 'Install',
|
||||
detail: 'Details',
|
||||
update: 'Update',
|
||||
info: 'Plugin Info',
|
||||
checkUpdate: 'Check Update',
|
||||
viewDetail: 'View Detail',
|
||||
remove: 'Remove',
|
||||
back: 'Back',
|
||||
},
|
||||
actionNum: '{{num}} {{action}} INCLUDED',
|
||||
strategyNum: '{{num}} {{strategy}} INCLUDED',
|
||||
endpoints: 'Endpoints',
|
||||
endpointsTip: 'This plugin provides specific functionalities via endpoints, and you can configure multiple endpoint sets for current workspace.',
|
||||
endpointsDocLink: 'View the document',
|
||||
endpointsEmpty: 'Click the \'+\' button to add an endpoint',
|
||||
endpointDisableTip: 'Disable Endpoint',
|
||||
endpointDisableContent: 'Would you like to disable {{name}}? ',
|
||||
endpointDeleteTip: 'Remove Endpoint',
|
||||
endpointDeleteContent: 'Would you like to remove {{name}}? ',
|
||||
endpointModalTitle: 'Setup endpoint',
|
||||
endpointModalDesc: 'Once configured, the features provided by the plugin via API endpoints can be used.',
|
||||
serviceOk: 'Service OK',
|
||||
disabled: 'Disabled',
|
||||
modelNum: '{{num}} MODELS INCLUDED',
|
||||
toolSelector: {
|
||||
title: 'Add tool',
|
||||
toolSetting: 'Tool Settings',
|
||||
toolLabel: 'Tool',
|
||||
descriptionLabel: 'Tool description',
|
||||
descriptionPlaceholder: 'Brief description of the tool\'s purpose, e.g., get the temperature for a specific location.',
|
||||
placeholder: 'Select a tool...',
|
||||
settings: 'USER SETTINGS',
|
||||
params: 'REASONING CONFIG',
|
||||
paramsTip1: 'Controls LLM inference parameters.',
|
||||
paramsTip2: 'When \'Auto\' is off, the default value is used.',
|
||||
auto: 'Auto',
|
||||
empty: 'Click the \'+\' button to add tools. You can add multiple tools.',
|
||||
uninstalledTitle: 'Tool not installed',
|
||||
uninstalledContent: 'This plugin is installed from the local/GitHub repository. Please use after installation.',
|
||||
uninstalledLink: 'Manage in Plugins',
|
||||
unsupportedTitle: 'Unsupported Action',
|
||||
unsupportedContent: 'The installed plugin version does not provide this action.',
|
||||
unsupportedContent2: 'Click to switch version.',
|
||||
unsupportedMCPTool: 'Currently selected agent strategy plugin version does not support MCP tools.',
|
||||
},
|
||||
configureApp: 'Configure App',
|
||||
configureModel: 'Configure model',
|
||||
configureTool: 'Configure tool',
|
||||
deprecation: {
|
||||
fullMessage: 'This plugin has been deprecated due to {{deprecatedReason}}, and will no longer be updated. Please use <CustomLink href=\'https://example.com/\'>{{-alternativePluginId}}</CustomLink> instead.',
|
||||
onlyReason: 'This plugin has been deprecated due to {{deprecatedReason}} and will no longer be updated.',
|
||||
noReason: 'This plugin has been deprecated and will no longer be updated.',
|
||||
reason: {
|
||||
businessAdjustments: 'business adjustments',
|
||||
ownershipTransferred: 'ownership transferred',
|
||||
noMaintainer: 'no maintainer',
|
||||
},
|
||||
},
|
||||
},
|
||||
install: '{{num}} installs',
|
||||
installAction: 'Install',
|
||||
debugInfo: {
|
||||
title: 'Debugging',
|
||||
viewDocs: 'View Docs',
|
||||
},
|
||||
privilege: {
|
||||
title: 'Plugin Preferences',
|
||||
whoCanInstall: 'Who can install and manage plugins?',
|
||||
whoCanDebug: 'Who can debug plugins?',
|
||||
everyone: 'Everyone',
|
||||
admins: 'Admins',
|
||||
noone: 'No one',
|
||||
},
|
||||
autoUpdate: {
|
||||
automaticUpdates: 'Automatic updates',
|
||||
updateTime: 'Update time',
|
||||
specifyPluginsToUpdate: 'Specify plugins to update',
|
||||
strategy: {
|
||||
disabled: {
|
||||
name: 'Disabled',
|
||||
description: 'Plugins will not auto-update',
|
||||
},
|
||||
fixOnly: {
|
||||
name: 'Fix Only',
|
||||
description: 'Auto-update for patch versions only (e.g., 1.0.1 → 1.0.2). Minor version changes won\'t trigger updates.',
|
||||
selectedDescription: 'Auto-update for patch versions only',
|
||||
},
|
||||
latest: {
|
||||
name: 'Latest',
|
||||
description: 'Always update to latest version',
|
||||
selectedDescription: 'Always update to latest version',
|
||||
},
|
||||
},
|
||||
updateTimeTitle: 'Update time',
|
||||
upgradeMode: {
|
||||
all: 'Update all',
|
||||
exclude: 'Exclude selected',
|
||||
partial: 'Only selected',
|
||||
},
|
||||
upgradeModePlaceholder: {
|
||||
exclude: 'Selected plugins will not auto-update',
|
||||
partial: 'Only selected plugins will auto-update. No plugins are currently selected, so no plugins will auto-update.',
|
||||
},
|
||||
excludeUpdate: 'The following {{num}} plugins will not auto-update',
|
||||
partialUPdate: 'Only the following {{num}} plugins will auto-update',
|
||||
operation: {
|
||||
clearAll: 'Clear all',
|
||||
select: 'Select plugins',
|
||||
},
|
||||
nextUpdateTime: 'Next auto-update: {{time}}',
|
||||
pluginDowngradeWarning: {
|
||||
title: 'Plugin Downgrade',
|
||||
description: 'Auto-update is currently enabled for this plugin. Downgrading the version may cause your changes to be overwritten during the next automatic update.',
|
||||
downgrade: 'Downgrade anyway',
|
||||
exclude: 'Exclude from auto-update',
|
||||
},
|
||||
noPluginPlaceholder: {
|
||||
noFound: 'No plugins were found',
|
||||
noInstalled: 'No plugins installed',
|
||||
},
|
||||
updateSettings: 'Update Settings',
|
||||
changeTimezone: 'To change time zone, go to <setTimezone>Settings</setTimezone>',
|
||||
},
|
||||
pluginInfoModal: {
|
||||
title: 'Plugin info',
|
||||
repository: 'Repository',
|
||||
release: 'Release',
|
||||
packageName: 'Package',
|
||||
},
|
||||
action: {
|
||||
checkForUpdates: 'Check for updates',
|
||||
pluginInfo: 'Plugin info',
|
||||
delete: 'Remove plugin',
|
||||
deleteContentLeft: 'Would you like to remove ',
|
||||
deleteContentRight: ' plugin?',
|
||||
usedInApps: 'This plugin is being used in {{num}} apps.',
|
||||
},
|
||||
installModal: {
|
||||
installPlugin: 'Install Plugin',
|
||||
installComplete: 'Installation complete',
|
||||
installedSuccessfully: 'Installation successful',
|
||||
installedSuccessfullyDesc: 'The plugin has been installed successfully.',
|
||||
uploadFailed: 'Upload failed',
|
||||
installFailed: 'Installation failed',
|
||||
installFailedDesc: 'The plugin has been installed failed.',
|
||||
install: 'Install',
|
||||
installing: 'Installing...',
|
||||
uploadingPackage: 'Uploading {{packageName}}...',
|
||||
readyToInstall: 'About to install the following plugin',
|
||||
readyToInstallPackage: 'About to install the following plugin',
|
||||
readyToInstallPackages: 'About to install the following {{num}} plugins',
|
||||
fromTrustSource: 'Please make sure that you only install plugins from a <trustSource>trusted source</trustSource>.',
|
||||
dropPluginToInstall: 'Drop plugin package here to install',
|
||||
labels: {
|
||||
repository: 'Repository',
|
||||
version: 'Version',
|
||||
package: 'Package',
|
||||
},
|
||||
close: 'Close',
|
||||
cancel: 'Cancel',
|
||||
back: 'Back',
|
||||
next: 'Next',
|
||||
pluginLoadError: 'Plugin load error',
|
||||
pluginLoadErrorDesc: 'This plugin will not be installed',
|
||||
installWarning: 'This plugin is not allowed to be installed.',
|
||||
},
|
||||
installFromGitHub: {
|
||||
installPlugin: 'Install plugin from GitHub',
|
||||
updatePlugin: 'Update plugin from GitHub',
|
||||
installedSuccessfully: 'Installation successful',
|
||||
installFailed: 'Installation failed',
|
||||
uploadFailed: 'Upload failed',
|
||||
gitHubRepo: 'GitHub repository',
|
||||
selectVersion: 'Select version',
|
||||
selectVersionPlaceholder: 'Please select a version',
|
||||
installNote: 'Please make sure that you only install plugins from a trusted source.',
|
||||
selectPackage: 'Select package',
|
||||
selectPackagePlaceholder: 'Please select a package',
|
||||
},
|
||||
upgrade: {
|
||||
title: 'Install Plugin',
|
||||
successfulTitle: 'Install successful',
|
||||
description: 'About to install the following plugin',
|
||||
usedInApps: 'Used in {{num}} apps',
|
||||
upgrade: 'Install',
|
||||
upgrading: 'Installing...',
|
||||
close: 'Close',
|
||||
},
|
||||
error: {
|
||||
inValidGitHubUrl: 'Invalid GitHub URL. Please enter a valid URL in the format: https://github.com/owner/repo',
|
||||
fetchReleasesError: 'Unable to retrieve releases. Please try again later.',
|
||||
noReleasesFound: 'No releases found. Please check the GitHub repository or the input URL.',
|
||||
},
|
||||
marketplace: {
|
||||
empower: 'Empower your AI development',
|
||||
discover: 'Discover',
|
||||
and: 'and',
|
||||
difyMarketplace: 'Dify Marketplace',
|
||||
moreFrom: 'More from Marketplace',
|
||||
noPluginFound: 'No plugin found',
|
||||
pluginsResult: '{{num}} results',
|
||||
sortBy: 'Sort by',
|
||||
sortOption: {
|
||||
mostPopular: 'Most Popular',
|
||||
recentlyUpdated: 'Recently Updated',
|
||||
newlyReleased: 'Newly Released',
|
||||
firstReleased: 'First Released',
|
||||
},
|
||||
viewMore: 'View more',
|
||||
verifiedTip: 'Verified by Dify',
|
||||
partnerTip: 'Verified by a Dify partner',
|
||||
},
|
||||
task: {
|
||||
installing: 'Installing {{installingLength}} plugins, 0 done.',
|
||||
installingWithSuccess: 'Installing {{installingLength}} plugins, {{successLength}} success.',
|
||||
installingWithError: 'Installing {{installingLength}} plugins, {{successLength}} success, {{errorLength}} failed',
|
||||
installError: '{{errorLength}} plugins failed to install, click to view',
|
||||
installedError: '{{errorLength}} plugins failed to install',
|
||||
clearAll: 'Clear all',
|
||||
},
|
||||
requestAPlugin: 'Request a plugin',
|
||||
publishPlugins: 'Publish plugins',
|
||||
difyVersionNotCompatible: 'The current Dify version is not compatible with this plugin, please upgrade to the minimum version required: {{minimalDifyVersion}}',
|
||||
auth: {
|
||||
default: 'Default',
|
||||
custom: 'Custom',
|
||||
setDefault: 'Set as default',
|
||||
useOAuth: 'Use OAuth',
|
||||
useOAuthAuth: 'Use OAuth Authorization',
|
||||
addOAuth: 'Add OAuth',
|
||||
setupOAuth: 'Setup OAuth Client',
|
||||
useApi: 'Use API Key',
|
||||
addApi: 'Add API Key',
|
||||
useApiAuth: 'API Key Authorization Configuration',
|
||||
useApiAuthDesc: 'After configuring credentials, all members within the workspace can use this tool when orchestrating applications.',
|
||||
oauthClientSettings: 'OAuth Client Settings',
|
||||
saveOnly: 'Save only',
|
||||
saveAndAuth: 'Save and Authorize',
|
||||
authorization: 'Authorization',
|
||||
authorizations: 'Authorizations',
|
||||
authorizationName: 'Authorization Name',
|
||||
workspaceDefault: 'Workspace Default',
|
||||
authRemoved: 'Auth removed',
|
||||
clientInfo: 'As no system client secrets found for this tool provider, setup it manually is required, for redirect_uri, please use',
|
||||
oauthClient: 'OAuth Client',
|
||||
credentialUnavailable: 'Credentials currently unavailable. Please contact admin.',
|
||||
credentialUnavailableInButton: 'Credential unavailable',
|
||||
customCredentialUnavailable: 'Custom credentials currently unavailable',
|
||||
unavailable: 'Unavailable',
|
||||
connectedWorkspace: 'Connected Workspace',
|
||||
emptyAuth: 'Please configure authentication',
|
||||
},
|
||||
readmeInfo: {
|
||||
title: 'README',
|
||||
needHelpCheckReadme: 'Need help? Check the README.',
|
||||
noReadmeAvailable: 'No README available',
|
||||
failedToFetch: 'Failed to fetch README',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
4
dify/web/i18n/en-US/register.ts
Normal file
4
dify/web/i18n/en-US/register.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
const translation = {
|
||||
}
|
||||
|
||||
export default translation
|
||||
31
dify/web/i18n/en-US/run-log.ts
Normal file
31
dify/web/i18n/en-US/run-log.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
const translation = {
|
||||
input: 'INPUT',
|
||||
result: 'RESULT',
|
||||
detail: 'DETAIL',
|
||||
tracing: 'TRACING',
|
||||
resultPanel: {
|
||||
status: 'STATUS',
|
||||
time: 'ELAPSED TIME',
|
||||
tokens: 'TOTAL TOKENS',
|
||||
},
|
||||
meta: {
|
||||
title: 'METADATA',
|
||||
status: 'Status',
|
||||
version: 'Version',
|
||||
executor: 'Executor',
|
||||
startTime: 'Start Time',
|
||||
time: 'Elapsed Time',
|
||||
tokens: 'Total Tokens',
|
||||
steps: 'Run Steps',
|
||||
},
|
||||
resultEmpty: {
|
||||
title: 'This run only output JSON format,',
|
||||
tipLeft: 'please go to the ',
|
||||
link: 'detail panel',
|
||||
tipRight: ' view it.',
|
||||
},
|
||||
actionLogs: 'Action Logs',
|
||||
circularInvocationTip: 'There is circular invocation of tools/nodes in the current workflow.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
86
dify/web/i18n/en-US/share.ts
Normal file
86
dify/web/i18n/en-US/share.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
const translation = {
|
||||
common: {
|
||||
welcome: '',
|
||||
appUnavailable: 'App is unavailable',
|
||||
appUnknownError: 'App is unavailable',
|
||||
},
|
||||
chat: {
|
||||
newChat: 'Start New chat',
|
||||
newChatTip: 'Already in a new chat',
|
||||
chatSettingsTitle: 'New chat setup',
|
||||
chatFormTip: 'Chat settings cannot be modified after the chat has started.',
|
||||
pinnedTitle: 'Pinned',
|
||||
unpinnedTitle: 'Recent',
|
||||
newChatDefaultName: 'New conversation',
|
||||
resetChat: 'Reset conversation',
|
||||
viewChatSettings: 'View chat settings',
|
||||
poweredBy: 'Powered by',
|
||||
prompt: 'Prompt',
|
||||
privatePromptConfigTitle: 'Conversation settings',
|
||||
publicPromptConfigTitle: 'Initial Prompt',
|
||||
configStatusDes: 'Before starting, you can modify the conversation settings',
|
||||
configDisabled:
|
||||
'Previous session settings have been used for this session.',
|
||||
startChat: 'Start Chat',
|
||||
privacyPolicyLeft:
|
||||
'Please read the ',
|
||||
privacyPolicyMiddle:
|
||||
'privacy policy',
|
||||
privacyPolicyRight:
|
||||
' provided by the app developer.',
|
||||
deleteConversation: {
|
||||
title: 'Delete conversation',
|
||||
content: 'Are you sure you want to delete this conversation?',
|
||||
},
|
||||
tryToSolve: 'Try to solve',
|
||||
temporarySystemIssue: 'Sorry, temporary system issue.',
|
||||
expand: 'Expand',
|
||||
collapse: 'Collapse',
|
||||
},
|
||||
generation: {
|
||||
tabs: {
|
||||
create: 'Run Once',
|
||||
batch: 'Run Batch',
|
||||
saved: 'Saved',
|
||||
},
|
||||
savedNoData: {
|
||||
title: 'You haven\'t saved a result yet!',
|
||||
description: 'Start generating content, and find your saved results here.',
|
||||
startCreateContent: 'Start create content',
|
||||
},
|
||||
title: 'AI Completion',
|
||||
queryTitle: 'Query content',
|
||||
completionResult: 'Completion result',
|
||||
queryPlaceholder: 'Write your query content...',
|
||||
run: 'Execute',
|
||||
execution: 'Run',
|
||||
executions: '{{num}} runs',
|
||||
copy: 'Copy',
|
||||
resultTitle: 'AI Completion',
|
||||
noData: 'AI will give you what you want here.',
|
||||
csvUploadTitle: 'Drag and drop your CSV file here, or ',
|
||||
browse: 'browse',
|
||||
csvStructureTitle: 'The CSV file must conform to the following structure:',
|
||||
downloadTemplate: 'Download the template here',
|
||||
field: 'Field',
|
||||
stopRun: 'Stop Run',
|
||||
batchFailed: {
|
||||
info: '{{num}} failed executions',
|
||||
retry: 'Retry',
|
||||
outputPlaceholder: 'No output content',
|
||||
},
|
||||
errorMsg: {
|
||||
empty: 'Please input content in the uploaded file.',
|
||||
fileStructNotMatch: 'The uploaded CSV file not match the struct.',
|
||||
emptyLine: 'Row {{rowIndex}} is empty',
|
||||
invalidLine: 'Row {{rowIndex}}: {{varName}} value can not be empty',
|
||||
moreThanMaxLengthLine: 'Row {{rowIndex}}: {{varName}} value can not be more than {{maxLength}} characters',
|
||||
atLeastOne: 'Please input at least one row in the uploaded file.',
|
||||
},
|
||||
},
|
||||
login: {
|
||||
backToHome: 'Back to Home',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
45
dify/web/i18n/en-US/time.ts
Normal file
45
dify/web/i18n/en-US/time.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
const translation = {
|
||||
daysInWeek: {
|
||||
Sun: 'Sun',
|
||||
Mon: 'Mon',
|
||||
Tue: 'Tue',
|
||||
Wed: 'Wed',
|
||||
Thu: 'Thu',
|
||||
Fri: 'Fri',
|
||||
Sat: 'Sat',
|
||||
},
|
||||
months: {
|
||||
January: 'January',
|
||||
February: 'February',
|
||||
March: 'March',
|
||||
April: 'April',
|
||||
May: 'May',
|
||||
June: 'June',
|
||||
July: 'July',
|
||||
August: 'August',
|
||||
September: 'September',
|
||||
October: 'October',
|
||||
November: 'November',
|
||||
December: 'December',
|
||||
},
|
||||
operation: {
|
||||
now: 'Now',
|
||||
ok: 'OK',
|
||||
cancel: 'Cancel',
|
||||
pickDate: 'Pick Date',
|
||||
},
|
||||
title: {
|
||||
pickTime: 'Pick Time',
|
||||
},
|
||||
defaultPlaceholder: 'Pick a time...',
|
||||
// Date format configurations
|
||||
dateFormats: {
|
||||
display: 'MMMM D, YYYY',
|
||||
displayWithTime: 'MMMM D, YYYY hh:mm A',
|
||||
input: 'YYYY-MM-DD',
|
||||
output: 'YYYY-MM-DD',
|
||||
outputWithTime: 'YYYY-MM-DDTHH:mm:ss.SSSZ',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
257
dify/web/i18n/en-US/tools.ts
Normal file
257
dify/web/i18n/en-US/tools.ts
Normal file
@@ -0,0 +1,257 @@
|
||||
const translation = {
|
||||
title: 'Tools',
|
||||
createCustomTool: 'Create Custom Tool',
|
||||
customToolTip: 'Learn more about Dify custom tools',
|
||||
type: {
|
||||
builtIn: 'Tools',
|
||||
custom: 'Custom',
|
||||
workflow: 'Workflow',
|
||||
},
|
||||
contribute: {
|
||||
line1: 'I\'m interested in ',
|
||||
line2: 'contributing tools to Dify.',
|
||||
viewGuide: 'View the guide',
|
||||
},
|
||||
author: 'By',
|
||||
auth: {
|
||||
authorized: 'Authorized',
|
||||
setup: 'Set up authorization to use',
|
||||
setupModalTitle: 'Set Up Authorization',
|
||||
setupModalTitleDescription: 'After configuring credentials, all members within the workspace can use this tool when orchestrating applications.',
|
||||
},
|
||||
includeToolNum: '{{num}} {{action}} included',
|
||||
addToolModal: {
|
||||
type: 'type',
|
||||
category: 'category',
|
||||
added: 'added',
|
||||
custom: {
|
||||
title: 'No custom tool available',
|
||||
tip: 'Create a custom tool',
|
||||
},
|
||||
workflow: {
|
||||
title: 'No workflow tool available',
|
||||
tip: 'Publish workflows as tools in Studio',
|
||||
},
|
||||
mcp: {
|
||||
title: 'No MCP tool available',
|
||||
tip: 'Add an MCP server',
|
||||
},
|
||||
agent: {
|
||||
title: 'No agent strategy available',
|
||||
},
|
||||
},
|
||||
createTool: {
|
||||
title: 'Create Custom Tool',
|
||||
editAction: 'Configure',
|
||||
editTitle: 'Edit Custom Tool',
|
||||
name: 'Name',
|
||||
toolNamePlaceHolder: 'Enter the tool name',
|
||||
nameForToolCall: 'Tool call name',
|
||||
nameForToolCallPlaceHolder: 'Used for machine recognition, such as getCurrentWeather, list_pets',
|
||||
nameForToolCallTip: 'Only supports numbers, letters, and underscores.',
|
||||
description: 'Description',
|
||||
descriptionPlaceholder: 'Brief description of the tool\'s purpose, e.g., get the temperature for a specific location.',
|
||||
schema: 'Schema',
|
||||
schemaPlaceHolder: 'Enter your OpenAPI schema here',
|
||||
viewSchemaSpec: 'View the OpenAPI-Swagger Specification',
|
||||
importFromUrl: 'Import from URL',
|
||||
importFromUrlPlaceHolder: 'https://...',
|
||||
urlError: 'Please enter a valid URL',
|
||||
examples: 'Examples',
|
||||
exampleOptions: {
|
||||
json: 'Weather(JSON)',
|
||||
yaml: 'Pet Store(YAML)',
|
||||
blankTemplate: 'Blank Template',
|
||||
},
|
||||
availableTools: {
|
||||
title: 'Available Tools',
|
||||
name: 'Name',
|
||||
description: 'Description',
|
||||
method: 'Method',
|
||||
path: 'Path',
|
||||
action: 'Actions',
|
||||
test: 'Test',
|
||||
},
|
||||
authMethod: {
|
||||
title: 'Authorization method',
|
||||
type: 'Authorization type',
|
||||
keyTooltip: 'Http Header Key, You can leave it with "Authorization" if you have no idea what it is or set it to a custom value',
|
||||
queryParam: 'Query Parameter',
|
||||
queryParamTooltip: 'The name of the API key query parameter to pass, e.g. "key" in "https://example.com/test?key=API_KEY".',
|
||||
types: {
|
||||
none: 'None',
|
||||
api_key_header: 'Header',
|
||||
api_key_query: 'Query Param',
|
||||
apiKeyPlaceholder: 'HTTP header name for API Key',
|
||||
apiValuePlaceholder: 'Enter API Key',
|
||||
queryParamPlaceholder: 'Query parameter name for API Key',
|
||||
},
|
||||
key: 'Key',
|
||||
value: 'Value',
|
||||
},
|
||||
authHeaderPrefix: {
|
||||
title: 'Auth Type',
|
||||
types: {
|
||||
basic: 'Basic',
|
||||
bearer: 'Bearer',
|
||||
custom: 'Custom',
|
||||
},
|
||||
},
|
||||
privacyPolicy: 'Privacy policy',
|
||||
privacyPolicyPlaceholder: 'Please enter privacy policy',
|
||||
toolInput: {
|
||||
title: 'Tool Input',
|
||||
name: 'Name',
|
||||
required: 'Required',
|
||||
method: 'Method',
|
||||
methodSetting: 'Setting',
|
||||
methodSettingTip: 'User fills in the tool configuration',
|
||||
methodParameter: 'Parameter',
|
||||
methodParameterTip: 'LLM fills during inference',
|
||||
label: 'Tags',
|
||||
labelPlaceholder: 'Choose tags(optional)',
|
||||
description: 'Description',
|
||||
descriptionPlaceholder: 'Description of the parameter\'s meaning',
|
||||
},
|
||||
customDisclaimer: 'Custom disclaimer',
|
||||
customDisclaimerPlaceholder: 'Please enter custom disclaimer',
|
||||
confirmTitle: 'Confirm to save ?',
|
||||
confirmTip: 'Apps using this tool will be affected',
|
||||
deleteToolConfirmTitle: 'Delete this Tool?',
|
||||
deleteToolConfirmContent: 'Deleting the Tool is irreversible. Users will no longer be able to access your Tool.',
|
||||
},
|
||||
test: {
|
||||
title: 'Test',
|
||||
parametersValue: 'Parameters & Value',
|
||||
parameters: 'Parameters',
|
||||
value: 'Value',
|
||||
testResult: 'Test Results',
|
||||
testResultPlaceholder: 'Test result will show here',
|
||||
},
|
||||
thought: {
|
||||
using: 'Using',
|
||||
used: 'Used',
|
||||
requestTitle: 'Request',
|
||||
responseTitle: 'Response',
|
||||
},
|
||||
setBuiltInTools: {
|
||||
info: 'Info',
|
||||
setting: 'Setting',
|
||||
toolDescription: 'Tool description',
|
||||
parameters: 'parameters',
|
||||
string: 'string',
|
||||
number: 'number',
|
||||
file: 'file',
|
||||
required: 'Required',
|
||||
infoAndSetting: 'Info & Settings',
|
||||
},
|
||||
noCustomTool: {
|
||||
title: 'No custom tools!',
|
||||
content: 'Add and manage your custom tools here for building AI apps.',
|
||||
createTool: 'Create Tool',
|
||||
},
|
||||
noSearchRes: {
|
||||
title: 'Sorry, no results!',
|
||||
content: 'We couldn\'t find any tools that match your search.',
|
||||
reset: 'Reset Search',
|
||||
},
|
||||
builtInPromptTitle: 'Prompt',
|
||||
toolRemoved: 'Tool removed',
|
||||
notAuthorized: 'Not authorized',
|
||||
howToGet: 'How to get',
|
||||
openInStudio: 'Open in Studio',
|
||||
toolNameUsageTip: 'Tool call name for agent reasoning and prompting',
|
||||
copyToolName: 'Copy Name',
|
||||
noTools: 'No tools found',
|
||||
mcp: {
|
||||
create: {
|
||||
cardTitle: 'Add MCP Server (HTTP)',
|
||||
cardLink: 'Learn more about MCP server integration',
|
||||
},
|
||||
noConfigured: 'Unconfigured',
|
||||
updateTime: 'Updated',
|
||||
toolsCount: '{{count}} tools',
|
||||
noTools: 'No tools available',
|
||||
modal: {
|
||||
title: 'Add MCP Server (HTTP)',
|
||||
editTitle: 'Edit MCP Server (HTTP)',
|
||||
name: 'Name & Icon',
|
||||
namePlaceholder: 'Name your MCP server',
|
||||
serverUrl: 'Server URL',
|
||||
serverUrlPlaceholder: 'URL to server endpoint',
|
||||
serverUrlWarning: 'Updating the server address may disrupt applications that depend on this server',
|
||||
serverIdentifier: 'Server Identifier',
|
||||
serverIdentifierTip: 'Unique identifier for the MCP server within the workspace. Lowercase letters, numbers, underscores, and hyphens only. Up to 24 characters.',
|
||||
serverIdentifierPlaceholder: 'Unique identifier, e.g., my-mcp-server',
|
||||
serverIdentifierWarning: 'The server won\'t be recognized by existing apps after an ID change',
|
||||
headers: 'Headers',
|
||||
headersTip: 'Additional HTTP headers to send with MCP server requests',
|
||||
headerKey: 'Header Name',
|
||||
headerValue: 'Header Value',
|
||||
headerKeyPlaceholder: 'e.g., Authorization',
|
||||
headerValuePlaceholder: 'e.g., Bearer token123',
|
||||
addHeader: 'Add Header',
|
||||
noHeaders: 'No custom headers configured',
|
||||
maskedHeadersTip: 'Header values are masked for security. Changes will update the actual values.',
|
||||
cancel: 'Cancel',
|
||||
save: 'Save',
|
||||
confirm: 'Add & Authorize',
|
||||
timeout: 'Timeout',
|
||||
sseReadTimeout: 'SSE Read Timeout',
|
||||
timeoutPlaceholder: '30',
|
||||
authentication: 'Authentication',
|
||||
useDynamicClientRegistration: 'Use Dynamic Client Registration',
|
||||
redirectUrlWarning: 'Please configure your OAuth redirect URL to:',
|
||||
clientID: 'Client ID',
|
||||
clientSecret: 'Client Secret',
|
||||
clientSecretPlaceholder: 'Client Secret',
|
||||
configurations: 'Configurations',
|
||||
},
|
||||
delete: 'Remove MCP Server',
|
||||
deleteConfirmTitle: 'Would you like to remove {{mcp}}?',
|
||||
operation: {
|
||||
edit: 'Edit',
|
||||
remove: 'Remove',
|
||||
},
|
||||
authorize: 'Authorize',
|
||||
authorizing: 'Authorizing...',
|
||||
authorizingRequired: 'Authorization is required',
|
||||
authorizeTip: 'After authorization, tools will be displayed here.',
|
||||
update: 'Update',
|
||||
updating: 'Updating',
|
||||
gettingTools: 'Getting Tools...',
|
||||
updateTools: 'Updating Tools...',
|
||||
toolsEmpty: 'Tools not loaded',
|
||||
getTools: 'Get tools',
|
||||
toolUpdateConfirmTitle: 'Update Tool List',
|
||||
toolUpdateConfirmContent: 'Updating the tool list may affect existing apps. Do you wish to proceed?',
|
||||
toolsNum: '{{count}} tools included',
|
||||
onlyTool: '1 tool included',
|
||||
identifier: 'Server Identifier (Click to Copy)',
|
||||
server: {
|
||||
title: 'MCP Server',
|
||||
url: 'Server URL',
|
||||
reGen: 'Do you want to regenerator server URL?',
|
||||
addDescription: 'Add description',
|
||||
edit: 'Edit description',
|
||||
modal: {
|
||||
addTitle: 'Add description to enable MCP server',
|
||||
editTitle: 'Edit description',
|
||||
description: 'Description',
|
||||
descriptionPlaceholder: 'Explain what this tool does and how it should be used by the LLM',
|
||||
parameters: 'Parameters',
|
||||
parametersTip: 'Add descriptions for each parameter to help the LLM understand their purpose and constraints.',
|
||||
parametersPlaceholder: 'Parameter purpose and constraints',
|
||||
confirm: 'Enable MCP Server',
|
||||
},
|
||||
publishTip: 'App not published. Please publish the app first.',
|
||||
},
|
||||
toolItem: {
|
||||
noDescription: 'No description',
|
||||
parameters: 'Parameters',
|
||||
},
|
||||
},
|
||||
allTools: 'All tools',
|
||||
}
|
||||
|
||||
export default translation
|
||||
1291
dify/web/i18n/en-US/workflow.ts
Normal file
1291
dify/web/i18n/en-US/workflow.ts
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user