From abc5a61e9883051022456a244dc5fa8e0ba6d8da Mon Sep 17 00:00:00 2001 From: wangxiaolei Date: Wed, 11 Feb 2026 10:42:13 +0800 Subject: [PATCH] feat: support nl-NL language (#32216) --- api/constants/languages.py | 1 + .../chat/answer/human-input-content/utils.ts | 2 + .../text-to-speech/param-config-content.tsx | 6 +- web/hooks/use-format-time-from-now.ts | 1 + web/i18n-config/language.ts | 1 + web/i18n-config/languages.ts | 7 + web/i18n/nl-NL/app-annotation.json | 70 + web/i18n/nl-NL/app-api.json | 72 + web/i18n/nl-NL/app-debug.json | 393 ++++++ web/i18n/nl-NL/app-log.json | 84 ++ web/i18n/nl-NL/app-overview.json | 121 ++ web/i18n/nl-NL/app.json | 283 ++++ web/i18n/nl-NL/billing.json | 186 +++ web/i18n/nl-NL/common.json | 631 +++++++++ web/i18n/nl-NL/custom.json | 22 + web/i18n/nl-NL/dataset-creation.json | 185 +++ web/i18n/nl-NL/dataset-documents.json | 339 +++++ web/i18n/nl-NL/dataset-hit-testing.json | 28 + web/i18n/nl-NL/dataset-pipeline.json | 95 ++ web/i18n/nl-NL/dataset-settings.json | 50 + web/i18n/nl-NL/dataset.json | 186 +++ web/i18n/nl-NL/education.json | 44 + web/i18n/nl-NL/explore.json | 40 + web/i18n/nl-NL/layout.json | 4 + web/i18n/nl-NL/login.json | 115 ++ web/i18n/nl-NL/oauth.json | 19 + web/i18n/nl-NL/pipeline.json | 24 + web/i18n/nl-NL/plugin-tags.json | 22 + web/i18n/nl-NL/plugin-trigger.json | 118 ++ web/i18n/nl-NL/plugin.json | 251 ++++ web/i18n/nl-NL/register.json | 1 + web/i18n/nl-NL/run-log.json | 23 + web/i18n/nl-NL/share.json | 72 + web/i18n/nl-NL/time.json | 32 + web/i18n/nl-NL/tools.json | 211 +++ web/i18n/nl-NL/workflow.json | 1154 +++++++++++++++++ web/utils/format.ts | 1 + 37 files changed, 4892 insertions(+), 2 deletions(-) create mode 100644 web/i18n/nl-NL/app-annotation.json create mode 100644 web/i18n/nl-NL/app-api.json create mode 100644 web/i18n/nl-NL/app-debug.json create mode 100644 web/i18n/nl-NL/app-log.json create mode 100644 web/i18n/nl-NL/app-overview.json create mode 100644 web/i18n/nl-NL/app.json create mode 100644 web/i18n/nl-NL/billing.json create mode 100644 web/i18n/nl-NL/common.json create mode 100644 web/i18n/nl-NL/custom.json create mode 100644 web/i18n/nl-NL/dataset-creation.json create mode 100644 web/i18n/nl-NL/dataset-documents.json create mode 100644 web/i18n/nl-NL/dataset-hit-testing.json create mode 100644 web/i18n/nl-NL/dataset-pipeline.json create mode 100644 web/i18n/nl-NL/dataset-settings.json create mode 100644 web/i18n/nl-NL/dataset.json create mode 100644 web/i18n/nl-NL/education.json create mode 100644 web/i18n/nl-NL/explore.json create mode 100644 web/i18n/nl-NL/layout.json create mode 100644 web/i18n/nl-NL/login.json create mode 100644 web/i18n/nl-NL/oauth.json create mode 100644 web/i18n/nl-NL/pipeline.json create mode 100644 web/i18n/nl-NL/plugin-tags.json create mode 100644 web/i18n/nl-NL/plugin-trigger.json create mode 100644 web/i18n/nl-NL/plugin.json create mode 100644 web/i18n/nl-NL/register.json create mode 100644 web/i18n/nl-NL/run-log.json create mode 100644 web/i18n/nl-NL/share.json create mode 100644 web/i18n/nl-NL/time.json create mode 100644 web/i18n/nl-NL/tools.json create mode 100644 web/i18n/nl-NL/workflow.json diff --git a/api/constants/languages.py b/api/constants/languages.py index 8c1ce368ac..8c1ff45536 100644 --- a/api/constants/languages.py +++ b/api/constants/languages.py @@ -21,6 +21,7 @@ language_timezone_mapping = { "th-TH": "Asia/Bangkok", "id-ID": "Asia/Jakarta", "ar-TN": "Africa/Tunis", + "nl-NL": "Europe/Amsterdam", } languages = list(language_timezone_mapping.keys()) diff --git a/web/app/components/base/chat/chat/answer/human-input-content/utils.ts b/web/app/components/base/chat/chat/answer/human-input-content/utils.ts index dd35932797..da81f9f1b9 100644 --- a/web/app/components/base/chat/chat/answer/human-input-content/utils.ts +++ b/web/app/components/base/chat/chat/answer/human-input-content/utils.ts @@ -8,6 +8,7 @@ import { UserActionButtonType } from '@/app/components/workflow/nodes/human-inpu import 'dayjs/locale/en' import 'dayjs/locale/zh-cn' import 'dayjs/locale/ja' +import 'dayjs/locale/nl' dayjs.extend(utc) dayjs.extend(relativeTime) @@ -45,6 +46,7 @@ const localeMap: Record = { 'en-US': 'en', 'zh-Hans': 'zh-cn', 'ja-JP': 'ja', + 'nl-NL': 'nl', } export const getRelativeTime = ( diff --git a/web/app/components/base/features/new-feature-panel/text-to-speech/param-config-content.tsx b/web/app/components/base/features/new-feature-panel/text-to-speech/param-config-content.tsx index cab41c66c1..7bc0c02c51 100644 --- a/web/app/components/base/features/new-feature-panel/text-to-speech/param-config-content.tsx +++ b/web/app/components/base/features/new-feature-panel/text-to-speech/param-config-content.tsx @@ -98,7 +98,9 @@ const VoiceParamConfig = ({ className="h-full w-full cursor-pointer rounded-lg border-0 bg-components-input-bg-normal py-1.5 pl-3 pr-10 focus-visible:bg-state-base-hover focus-visible:outline-none group-hover:bg-state-base-hover sm:text-sm sm:leading-6" > - {languageItem?.name ? t(`voice.language.${replace(languageItem?.value, '-', '')}`, { ns: 'common' }) : localLanguagePlaceholder} + {languageItem?.name + ? t(`voice.language.${replace(languageItem?.value ?? '', '-', '')}`, languageItem?.name, { ns: 'common' as const }) + : localLanguagePlaceholder} - {t(`voice.language.${replace((item.value), '-', '')}`, { ns: 'common' })} + {t(`voice.language.${replace((item.value), '-', '')}`, item.name, { ns: 'common' as const })} {(selected || item.value === text2speech?.language) && ( = { 'it-IT': 'it', 'th-TH': 'th', 'id-ID': 'id', + 'nl-NL': 'nl', 'uk-UA': 'uk', 'vi-VN': 'vi', 'ro-RO': 'ro', diff --git a/web/i18n-config/languages.ts b/web/i18n-config/languages.ts index 5077aee1d2..eea4ca3e75 100644 --- a/web/i18n-config/languages.ts +++ b/web/i18n-config/languages.ts @@ -147,6 +147,13 @@ const data = { example: 'Halo, Dify!', supported: true, }, + { + value: 'nl-NL', + name: 'Nederlands (Nederland)', + prompt_name: 'Dutch', + example: 'Hallo, Dify!', + supported: true, + }, { value: 'ar-TN', name: 'العربية (تونس)', diff --git a/web/i18n/nl-NL/app-annotation.json b/web/i18n/nl-NL/app-annotation.json new file mode 100644 index 0000000000..5029df9be9 --- /dev/null +++ b/web/i18n/nl-NL/app-annotation.json @@ -0,0 +1,70 @@ +{ + "addModal.answerName": "Answer", + "addModal.answerPlaceholder": "Type answer here", + "addModal.createNext": "Add another annotated response", + "addModal.queryName": "Question", + "addModal.queryPlaceholder": "Type query here", + "addModal.title": "Add Annotation Reply", + "batchAction.cancel": "Cancel", + "batchAction.delete": "Delete", + "batchAction.selected": "Selected", + "batchModal.answer": "answer", + "batchModal.browse": "browse", + "batchModal.cancel": "Cancel", + "batchModal.completed": "Import completed", + "batchModal.content": "content", + "batchModal.contentTitle": "chunk content", + "batchModal.csvUploadTitle": "Drag and drop your CSV file here, or ", + "batchModal.error": "Import Error", + "batchModal.ok": "OK", + "batchModal.processing": "In batch processing", + "batchModal.question": "question", + "batchModal.run": "Run Batch", + "batchModal.runError": "Run batch failed", + "batchModal.template": "Download the template here", + "batchModal.tip": "The CSV file must conform to the following structure:", + "batchModal.title": "Bulk Import", + "editBy": "Answer edited by {{author}}", + "editModal.answerName": "Storyteller Bot", + "editModal.answerPlaceholder": "Type your answer here", + "editModal.createdAt": "Created At", + "editModal.queryName": "User Query", + "editModal.queryPlaceholder": "Type your query here", + "editModal.removeThisCache": "Remove this Annotation", + "editModal.title": "Edit Annotation Reply", + "editModal.yourAnswer": "Your Answer", + "editModal.yourQuery": "Your Query", + "embeddingModelSwitchTip": "Annotation text vectorization model, switching models will be re-embedded, resulting in additional costs.", + "errorMessage.answerRequired": "Answer is required", + "errorMessage.queryRequired": "Question is required", + "hitHistoryTable.match": "Match", + "hitHistoryTable.query": "Query", + "hitHistoryTable.response": "Response", + "hitHistoryTable.score": "Score", + "hitHistoryTable.source": "Source", + "hitHistoryTable.time": "Time", + "initSetup.configConfirmBtn": "Save", + "initSetup.configTitle": "Annotation Reply Setup", + "initSetup.confirmBtn": "Save & Enable", + "initSetup.title": "Annotation Reply Initial Setup", + "list.delete.title": "Are you sure Delete?", + "name": "Annotation Reply", + "noData.description": "You can edit annotations during app debugging or import annotations in bulk here for a high-quality response.", + "noData.title": "No annotations", + "table.header.actions": "actions", + "table.header.addAnnotation": "Add Annotation", + "table.header.answer": "answer", + "table.header.bulkExport": "Bulk Export", + "table.header.bulkImport": "Bulk Import", + "table.header.clearAll": "Delete All", + "table.header.clearAllConfirm": "Delete all annotations?", + "table.header.createdAt": "created at", + "table.header.hits": "hits", + "table.header.question": "question", + "title": "Annotations", + "viewModal.annotatedResponse": "Annotation Reply", + "viewModal.hit": "Hit", + "viewModal.hitHistory": "Hit History", + "viewModal.hits": "Hits", + "viewModal.noHitHistory": "No hit history" +} diff --git a/web/i18n/nl-NL/app-api.json b/web/i18n/nl-NL/app-api.json new file mode 100644 index 0000000000..ec07717459 --- /dev/null +++ b/web/i18n/nl-NL/app-api.json @@ -0,0 +1,72 @@ +{ + "actionMsg.deleteConfirmTips": "This action cannot be undone.", + "actionMsg.deleteConfirmTitle": "Delete this secret key?", + "actionMsg.ok": "OK", + "apiKey": "API Key", + "apiKeyModal.apiSecretKey": "API Secret key", + "apiKeyModal.apiSecretKeyTips": "To prevent API abuse, protect your API Key. Avoid using it as plain text in front-end code. :)", + "apiKeyModal.createNewSecretKey": "Create new Secret key", + "apiKeyModal.created": "CREATED", + "apiKeyModal.generateTips": "Keep this key in a secure and accessible place.", + "apiKeyModal.lastUsed": "LAST USED", + "apiKeyModal.secretKey": "Secret Key", + "apiServer": "API Server", + "chatMode.blocking": "Blocking type, waiting for execution to complete and returning results. (Requests may be interrupted if the process is long)", + "chatMode.chatMsgHistoryApi": "Get the chat history message", + "chatMode.chatMsgHistoryApiTip": "The first page returns the latest `limit` bar, which is in reverse order.", + "chatMode.chatMsgHistoryConversationIdTip": "Conversation ID", + "chatMode.chatMsgHistoryFirstId": "ID of the first chat record on the current page. The default is none.", + "chatMode.chatMsgHistoryLimit": "How many chats are returned in one request", + "chatMode.conversationIdTip": "(Optional) Conversation ID: leave empty for first-time conversation; pass conversation_id from context to continue dialogue.", + "chatMode.conversationRenamingApi": "Conversation renaming", + "chatMode.conversationRenamingApiTip": "Rename conversations; the name is displayed in multi-session client interfaces.", + "chatMode.conversationRenamingNameTip": "New name", + "chatMode.conversationsListApi": "Get conversation list", + "chatMode.conversationsListApiTip": "Gets the session list of the current user. By default, the last 20 sessions are returned.", + "chatMode.conversationsListFirstIdTip": "The ID of the last record on the current page, default none.", + "chatMode.conversationsListLimitTip": "How many chats are returned in one request", + "chatMode.createChatApi": "Create chat message", + "chatMode.createChatApiTip": "Create a new conversation message or continue an existing dialogue.", + "chatMode.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.", + "chatMode.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.", + "chatMode.messageFeedbackApi": "Message terminal user feedback, like", + "chatMode.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.", + "chatMode.messageIDTip": "Message ID", + "chatMode.parametersApi": "Obtain application parameter information", + "chatMode.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.queryTips": "User input/question content", + "chatMode.ratingTip": "like or dislike, null is undo", + "chatMode.streaming": "streaming returns. Implementation of streaming return based on SSE (Server-Sent Events).", + "chatMode.title": "Chat App API", + "completionMode.blocking": "Blocking type, waiting for execution to complete and returning results. (Requests may be interrupted if the process is long)", + "completionMode.createCompletionApi": "Create Completion Message", + "completionMode.createCompletionApiTip": "Create a Completion Message to support the question-and-answer mode.", + "completionMode.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.", + "completionMode.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.", + "completionMode.messageFeedbackApi": "Message feedback (like)", + "completionMode.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.", + "completionMode.messageIDTip": "Message ID", + "completionMode.parametersApi": "Obtain application parameter information", + "completionMode.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.", + "completionMode.queryTips": "User input text content.", + "completionMode.ratingTip": "like or dislike, null is undo", + "completionMode.streaming": "streaming returns. Implementation of streaming return based on SSE (Server-Sent Events).", + "completionMode.title": "Completion App API", + "copied": "Copied", + "copy": "Copy", + "develop.noContent": "No content", + "develop.pathParams": "Path Params", + "develop.query": "Query", + "develop.requestBody": "Request Body", + "develop.toc": "Contents", + "disabled": "Disabled", + "loading": "Loading", + "merMaid.rerender": "Redo Rerender", + "never": "Never", + "ok": "In Service", + "pause": "Pause", + "play": "Play", + "playing": "Playing", + "regenerate": "Regenerate", + "status": "Status" +} diff --git a/web/i18n/nl-NL/app-debug.json b/web/i18n/nl-NL/app-debug.json new file mode 100644 index 0000000000..b667cfb052 --- /dev/null +++ b/web/i18n/nl-NL/app-debug.json @@ -0,0 +1,393 @@ +{ + "agent.agentMode": "Agent Mode", + "agent.agentModeDes": "Set the type of inference mode for the agent", + "agent.agentModeType.ReACT": "ReAct", + "agent.agentModeType.functionCall": "Function Calling", + "agent.buildInPrompt": "Build-In Prompt", + "agent.firstPrompt": "First Prompt", + "agent.nextIteration": "Next Iteration", + "agent.promptPlaceholder": "Write your prompt here", + "agent.setting.description": "Agent Assistant settings allow setting agent mode and advanced features like built-in prompts, only available in Agent type.", + "agent.setting.maximumIterations.description": "Limit the number of iterations an agent assistant can execute", + "agent.setting.maximumIterations.name": "Maximum Iterations", + "agent.setting.name": "Agent Settings", + "agent.tools.description": "Using tools can extend the capabilities of LLM, such as searching the internet or performing scientific calculations", + "agent.tools.enabled": "Enabled", + "agent.tools.name": "Tools", + "assistantType.agentAssistant.description": "Build an intelligent Agent which can autonomously choose tools to complete the tasks", + "assistantType.agentAssistant.name": "Agent Assistant", + "assistantType.chatAssistant.description": "Build a chat-based assistant using a Large Language Model", + "assistantType.chatAssistant.name": "Basic Assistant", + "assistantType.name": "Assistant Type", + "autoAddVar": "Undefined variables referenced in pre-prompt, are you want to add them in user input form?", + "chatSubTitle": "Instructions", + "code.instruction": "Instruction", + "codegen.apply": "Apply", + "codegen.applyChanges": "Apply Changes", + "codegen.description": "The Code Generator uses configured models to generate high-quality code based on your instructions. Please provide clear and detailed instructions.", + "codegen.generate": "Generate", + "codegen.generatedCodeTitle": "Generated Code", + "codegen.instruction": "Instructions", + "codegen.instructionPlaceholder": "Enter detailed description of the code you want to generate.", + "codegen.loading": "Generating code...", + "codegen.noDataLine1": "Describe your use case on the left,", + "codegen.noDataLine2": "the code preview will show here.", + "codegen.overwriteConfirmMessage": "This action will overwrite the existing code. Do you want to continue?", + "codegen.overwriteConfirmTitle": "Overwrite existing code?", + "codegen.resTitle": "Generated Code", + "codegen.title": "Code Generator", + "completionSubTitle": "Prefix Prompt", + "datasetConfig.embeddingModelRequired": "A configured Embedding Model is required", + "datasetConfig.knowledgeTip": "Click the “+” button to add knowledge", + "datasetConfig.params": "Params", + "datasetConfig.rerankModelRequired": "A configured Rerank Model is required", + "datasetConfig.retrieveChangeTip": "Modifying the index mode and retrieval mode may affect applications associated with this Knowledge.", + "datasetConfig.retrieveMultiWay.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.", + "datasetConfig.retrieveMultiWay.title": "Multi-path retrieval", + "datasetConfig.retrieveOneWay.description": "Based on user intent and Knowledge descriptions, the Agent autonomously selects the best Knowledge for querying. Best for applications with distinct, limited Knowledge.", + "datasetConfig.retrieveOneWay.title": "N-to-1 retrieval", + "datasetConfig.score_threshold": "Score Threshold", + "datasetConfig.score_thresholdTip": "Used to set the similarity threshold for chunks filtering.", + "datasetConfig.settingTitle": "Retrieval settings", + "datasetConfig.top_k": "Top K", + "datasetConfig.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.", + "debugAsMultipleModel": "Debug as Multiple Models", + "debugAsSingleModel": "Debug as Single Model", + "duplicateModel": "Duplicate", + "errorMessage.nameOfKeyRequired": "name of the key: {{key}} required", + "errorMessage.notSelectModel": "Please choose a model", + "errorMessage.queryRequired": "Request text is required.", + "errorMessage.valueOfVarRequired": "{{key}} value can not be empty", + "errorMessage.waitForBatchResponse": "Please wait for the response to the batch task to complete.", + "errorMessage.waitForFileUpload": "Please wait for the file/files to upload", + "errorMessage.waitForImgUpload": "Please wait for the image to upload", + "errorMessage.waitForResponse": "Please wait for the response to the previous message to complete.", + "feature.annotation.add": "Add annotation", + "feature.annotation.cacheManagement": "Annotations", + "feature.annotation.cached": "Annotated", + "feature.annotation.description": "You can manually add high-quality response to the cache for prioritized matching with similar user questions.", + "feature.annotation.edit": "Edit annotation", + "feature.annotation.matchVariable.choosePlaceholder": "Choose match variable", + "feature.annotation.matchVariable.title": "Match Variable", + "feature.annotation.remove": "Remove", + "feature.annotation.removeConfirm": "Delete this annotation ?", + "feature.annotation.resDes": "Annotation Response is enabled", + "feature.annotation.scoreThreshold.accurateMatch": "Accurate Match", + "feature.annotation.scoreThreshold.description": "Used to set the similarity threshold for annotation reply.", + "feature.annotation.scoreThreshold.easyMatch": "Easy Match", + "feature.annotation.scoreThreshold.title": "Score Threshold", + "feature.annotation.title": "Annotation Reply", + "feature.audioUpload.description": "Enable Audio will allow the model to process audio files for transcription and analysis.", + "feature.audioUpload.title": "Audio", + "feature.bar.empty": "Enable feature to enhance web app user experience", + "feature.bar.enableText": "Features Enabled", + "feature.bar.manage": "Manage", + "feature.citation.description": "Show source document and attributed section of the generated content.", + "feature.citation.resDes": "Citations and Attributions is enabled", + "feature.citation.title": "Citations and Attributions", + "feature.conversationHistory.description": "Set prefix names for conversation roles", + "feature.conversationHistory.editModal.assistantPrefix": "Assistant prefix", + "feature.conversationHistory.editModal.title": "Edit Conversation Role Names", + "feature.conversationHistory.editModal.userPrefix": "User prefix", + "feature.conversationHistory.learnMore": "Learn more", + "feature.conversationHistory.tip": "The Conversation History is not enabled, please add in the prompt above.", + "feature.conversationHistory.title": "Conversation History", + "feature.conversationOpener.description": "In a chat app, the first sentence that the AI actively speaks to the user is usually used as a welcome.", + "feature.conversationOpener.title": "Conversation Opener", + "feature.dataSet.noData": "You can import Knowledge as context", + "feature.dataSet.noDataSet": "No Knowledge found", + "feature.dataSet.notSupportSelectMulti": "Currently only support one Knowledge", + "feature.dataSet.queryVariable.choosePlaceholder": "Choose query variable", + "feature.dataSet.queryVariable.contextVarNotEmpty": "context query variable can not be empty", + "feature.dataSet.queryVariable.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.", + "feature.dataSet.queryVariable.deleteContextVarTitle": "Delete variable “{{varName}}”?", + "feature.dataSet.queryVariable.noVar": "No variables", + "feature.dataSet.queryVariable.noVarTip": "please create a variable under the Variables section", + "feature.dataSet.queryVariable.ok": "OK", + "feature.dataSet.queryVariable.tip": "This variable will be used as the query input for context retrieval, obtaining context information related to the input of this variable.", + "feature.dataSet.queryVariable.title": "Query variable", + "feature.dataSet.queryVariable.unableToQueryDataSet": "Unable to query the Knowledge", + "feature.dataSet.queryVariable.unableToQueryDataSetTip": "Unable to query the Knowledge successfully, please choose a context query variable in the context section.", + "feature.dataSet.selectTitle": "Select reference Knowledge", + "feature.dataSet.selected": "Knowledge selected", + "feature.dataSet.title": "Knowledge", + "feature.dataSet.toCreate": "Go to create", + "feature.documentUpload.description": "Enable Document will allows the model to take in documents and answer questions about them.", + "feature.documentUpload.title": "Document", + "feature.fileUpload.description": "The chat input box allows uploading of images, documents, and other files.", + "feature.fileUpload.modalTitle": "File Upload Setting", + "feature.fileUpload.numberLimit": "Max uploads", + "feature.fileUpload.supportedTypes": "Support File Types", + "feature.fileUpload.title": "File Upload", + "feature.groupChat.description": "Add pre-conversation settings for apps can enhance user experience.", + "feature.groupChat.title": "Chat enhance", + "feature.groupExperience.title": "Experience enhance", + "feature.imageUpload.description": "Allow uploading images.", + "feature.imageUpload.modalTitle": "Image Upload Setting", + "feature.imageUpload.numberLimit": "Max uploads", + "feature.imageUpload.supportedTypes": "Support File Types", + "feature.imageUpload.title": "Image Upload", + "feature.moderation.allEnabled": "INPUT & OUTPUT", + "feature.moderation.contentEnableLabel": "Content moderation enabled", + "feature.moderation.description": "Secure model output by using moderation API or maintaining a sensitive word list.", + "feature.moderation.inputEnabled": "INPUT", + "feature.moderation.modal.content.condition": "Moderate INPUT and OUTPUT Content enabled at least one", + "feature.moderation.modal.content.errorMessage": "Preset replies cannot be empty", + "feature.moderation.modal.content.fromApi": "Preset replies are returned by API", + "feature.moderation.modal.content.input": "Moderate INPUT Content", + "feature.moderation.modal.content.output": "Moderate OUTPUT Content", + "feature.moderation.modal.content.placeholder": "Preset replies content here", + "feature.moderation.modal.content.preset": "Preset replies", + "feature.moderation.modal.content.supportMarkdown": "Markdown supported", + "feature.moderation.modal.keywords.line": "Line", + "feature.moderation.modal.keywords.placeholder": "One per line, separated by line breaks", + "feature.moderation.modal.keywords.tip": "One per line, separated by line breaks. Up to 100 characters per line.", + "feature.moderation.modal.openaiNotConfig.after": "", + "feature.moderation.modal.openaiNotConfig.before": "OpenAI Moderation requires an OpenAI API key configured in the", + "feature.moderation.modal.provider.keywords": "Keywords", + "feature.moderation.modal.provider.openai": "OpenAI Moderation", + "feature.moderation.modal.provider.openaiTip.prefix": "OpenAI Moderation requires an OpenAI API key configured in the ", + "feature.moderation.modal.provider.openaiTip.suffix": ".", + "feature.moderation.modal.provider.title": "Provider", + "feature.moderation.modal.title": "Content moderation settings", + "feature.moderation.outputEnabled": "OUTPUT", + "feature.moderation.title": "Content moderation", + "feature.moreLikeThis.description": "Generate multiple texts at once, and then edit and continue to generate", + "feature.moreLikeThis.generateNumTip": "Number of each generated times", + "feature.moreLikeThis.tip": "Using this feature will incur additional tokens overhead", + "feature.moreLikeThis.title": "More like this", + "feature.speechToText.description": "Voice input can be used in chat.", + "feature.speechToText.resDes": "Voice input is enabled", + "feature.speechToText.title": "Speech to Text", + "feature.suggestedQuestionsAfterAnswer.description": "Setting up next questions suggestion can give users a better chat.", + "feature.suggestedQuestionsAfterAnswer.resDes": "3 suggestions for user next question.", + "feature.suggestedQuestionsAfterAnswer.title": "Follow-up", + "feature.suggestedQuestionsAfterAnswer.tryToAsk": "Try to ask", + "feature.textToSpeech.description": "Conversation messages can be converted to speech.", + "feature.textToSpeech.resDes": "Text to Audio is enabled", + "feature.textToSpeech.title": "Text to Speech", + "feature.toolbox.title": "TOOLBOX", + "feature.tools.modal.name.placeholder": "Please enter the name", + "feature.tools.modal.name.title": "Name", + "feature.tools.modal.title": "Tool", + "feature.tools.modal.toolType.placeholder": "Please select the tool type", + "feature.tools.modal.toolType.title": "Tool Type", + "feature.tools.modal.variableName.placeholder": "Please enter the variable name", + "feature.tools.modal.variableName.title": "Variable Name", + "feature.tools.tips": "Tools provide a standard API call method, taking user input or variables as request parameters for querying external data as context.", + "feature.tools.title": "Tools", + "feature.tools.toolsInUse": "{{count}} tools in use", + "formattingChangedText": "Modifying the formatting will reset the debug area, are you sure?", + "formattingChangedTitle": "Formatting changed", + "generate.apply": "Apply", + "generate.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.", + "generate.description": "The Prompt Generator uses the configured model to optimize prompts for higher quality and better structure. Please write clear and detailed instructions.", + "generate.dismiss": "Dismiss", + "generate.generate": "Generate", + "generate.idealOutput": "Ideal Output", + "generate.idealOutputPlaceholder": "Describe your ideal response format, length, tone, and content requirements...", + "generate.insertContext": "insert context", + "generate.instruction": "Instructions", + "generate.instructionPlaceHolderLine1": "Make the output more concise, retaining the core points.", + "generate.instructionPlaceHolderLine2": "The output format is incorrect, please strictly follow the JSON format.", + "generate.instructionPlaceHolderLine3": "The tone is too harsh, please make it more friendly.", + "generate.instructionPlaceHolderTitle": "Describe how you would like to improve this Prompt. For example:", + "generate.latest": "Latest", + "generate.loading": "Orchestrating the application for you...", + "generate.newNoDataLine1": "Write a instruction in the left column, and click Generate to see response. ", + "generate.optimizationNote": "Optimization Note", + "generate.optimizePromptTooltip": "Optimize in Prompt Generator", + "generate.optional": "Optional", + "generate.overwriteMessage": "Applying this prompt will override existing configuration.", + "generate.overwriteTitle": "Override existing configuration?", + "generate.press": "Press", + "generate.resTitle": "Generated Prompt", + "generate.template.GitGud.instruction": "Generate appropriate Git commands based on user described version control actions", + "generate.template.GitGud.name": "Git gud", + "generate.template.SQLSorcerer.instruction": "Transform everyday language into SQL queries", + "generate.template.SQLSorcerer.name": "SQL sorcerer", + "generate.template.excelFormulaExpert.instruction": "A chatbot that can help novice users understand, use and create Excel formulas based on user instructions", + "generate.template.excelFormulaExpert.name": "Excel formula expert", + "generate.template.meetingTakeaways.instruction": "Distill meetings into concise summaries including discussion topics, key takeaways, and action items", + "generate.template.meetingTakeaways.name": "Meeting takeaways", + "generate.template.professionalAnalyst.instruction": "Extract insights, identify risk and distill key information from long reports into single memo", + "generate.template.professionalAnalyst.name": "Professional analyst", + "generate.template.pythonDebugger.instruction": "A bot that can generate and debug your code based on your instruction", + "generate.template.pythonDebugger.name": "Python debugger", + "generate.template.translation.instruction": "A translator that can translate multiple languages", + "generate.template.translation.name": "Translation", + "generate.template.travelPlanning.instruction": "The Travel Planning Assistant is an intelligent tool designed to help users effortlessly plan their trips", + "generate.template.travelPlanning.name": "Travel planning", + "generate.template.writingsPolisher.instruction": "Use advanced copyediting techniques to improve your writings", + "generate.template.writingsPolisher.name": "Writing polisher", + "generate.title": "Prompt Generator", + "generate.to": "to ", + "generate.tryIt": "Try it", + "generate.version": "Version", + "generate.versions": "Versions", + "inputs.chatVarTip": "Fill in the value of the variable, which will be automatically replaced in the prompt word every time a new session is started", + "inputs.completionVarTip": "Fill in the value of the variable, which will be automatically replaced in the prompt words every time a question is submitted.", + "inputs.noPrompt": "Try write some prompt in pre-prompt input", + "inputs.noVar": "Fill in the value of the variable, which will be automatically replaced in the prompt word every time a new session is started.", + "inputs.previewTitle": "Prompt preview", + "inputs.queryPlaceholder": "Please enter the request text.", + "inputs.queryTitle": "Query content", + "inputs.run": "RUN", + "inputs.title": "Debug & Preview", + "inputs.userInputField": "User Input Field", + "modelConfig.modeType.chat": "Chat", + "modelConfig.modeType.completion": "Complete", + "modelConfig.model": "Model", + "modelConfig.setTone": "Set tone of responses", + "modelConfig.title": "Model and Parameters", + "noResult": "Output will be displayed here.", + "notSetAPIKey.description": "The LLM provider key has not been set, and it needs to be set before debugging.", + "notSetAPIKey.settingBtn": "Go to settings", + "notSetAPIKey.title": "LLM provider key has not been set", + "notSetAPIKey.trailFinished": "Trail finished", + "notSetVar": "Variables allow users to introduce prompt words or opening remarks when filling out forms. You can try entering \"{{input}}\" in the prompt words.", + "openingStatement.add": "Add", + "openingStatement.noDataPlaceHolder": "Starting the conversation with the user can help AI establish a closer connection with them in conversational applications.", + "openingStatement.notIncludeKey": "The initial prompt does not include the variable: {{key}}. Please add it to the initial prompt.", + "openingStatement.openingQuestion": "Opening Questions", + "openingStatement.openingQuestionPlaceholder": "You can use variables, try typing {{variable}}.", + "openingStatement.placeholder": "Write your opener message here, you can use variables, try type {{variable}}.", + "openingStatement.title": "Conversation Opener", + "openingStatement.tooShort": "At least 20 words of initial prompt are required to generate an opening remarks for the conversation.", + "openingStatement.varTip": "You can use variables, try type {{variable}}", + "openingStatement.writeOpener": "Edit opener", + "operation.addFeature": "Add Feature", + "operation.agree": "like", + "operation.applyConfig": "Publish", + "operation.automatic": "Generate", + "operation.cancelAgree": "Cancel like", + "operation.cancelDisagree": "Cancel dislike", + "operation.debugConfig": "Debug", + "operation.disagree": "dislike", + "operation.resetConfig": "Reset", + "operation.stopResponding": "Stop responding", + "operation.userAction": "User ", + "orchestrate": "Orchestrate", + "otherError.historyNoBeEmpty": "Conversation history must be set in the prompt", + "otherError.promptNoBeEmpty": "Prompt can not be empty", + "otherError.queryNoBeEmpty": "Query must be set in the prompt", + "pageTitle.line1": "PROMPT", + "pageTitle.line2": "Engineering", + "promptMode.advanced": "Expert Mode", + "promptMode.advancedWarning.description": "In Expert Mode, you can edit whole PROMPT.", + "promptMode.advancedWarning.learnMore": "Learn more", + "promptMode.advancedWarning.ok": "OK", + "promptMode.advancedWarning.title": "You have switched to Expert Mode, and once you modify the PROMPT, you CANNOT return to the basic mode.", + "promptMode.contextMissing": "Context component missed, the effectiveness of the prompt may not be good.", + "promptMode.operation.addMessage": "Add Message", + "promptMode.simple": "Switch to Expert Mode to edit the whole PROMPT", + "promptMode.switchBack": "Switch back", + "promptTip": "Prompts guide AI responses with instructions and constraints. Insert variables like {{input}}. This prompt won't be visible to users.", + "publishAs": "Publish as", + "resetConfig.message": "Reset discards changes, restoring the last published configuration.", + "resetConfig.title": "Confirm reset?", + "result": "Output Text", + "trailUseGPT4Info.description": "Use gpt-4, please set API Key.", + "trailUseGPT4Info.title": "Does not support gpt-4 now", + "varKeyError.canNoBeEmpty": "{{key}} is required", + "varKeyError.keyAlreadyExists": "{{key}} already exists", + "varKeyError.notStartWithNumber": "{{key}} can not start with a number", + "varKeyError.notValid": "{{key}} is invalid. Can only contain letters, numbers, and underscores", + "varKeyError.tooLong": "{{key}} is too length. Can not be longer then 30 characters", + "variableConfig.addModalTitle": "Add Input Field", + "variableConfig.addOption": "Add option", + "variableConfig.apiBasedVar": "API-based Variable", + "variableConfig.both": "Both", + "variableConfig.checkbox": "Checkbox", + "variableConfig.content": "Content", + "variableConfig.defaultValue": "Default Value", + "variableConfig.defaultValuePlaceholder": "Enter default value to pre-populate the field", + "variableConfig.description": "Setting for variable {{varName}}", + "variableConfig.displayName": "Display Name", + "variableConfig.editModalTitle": "Edit Input Field", + "variableConfig.errorMsg.atLeastOneOption": "At least one option is required", + "variableConfig.errorMsg.jsonSchemaInvalid": "JSON Schema is not valid JSON", + "variableConfig.errorMsg.jsonSchemaMustBeObject": "JSON Schema must have type \"object\"", + "variableConfig.errorMsg.labelNameRequired": "Label name is required", + "variableConfig.errorMsg.optionRepeat": "Has repeat options", + "variableConfig.errorMsg.varNameCanBeRepeat": "Variable name can not be repeated", + "variableConfig.fieldType": "Field Type", + "variableConfig.file.audio.name": "Audio", + "variableConfig.file.custom.createPlaceholder": "+ File extension, e.g .doc", + "variableConfig.file.custom.description": "Specify other file types.", + "variableConfig.file.custom.name": "Other file types", + "variableConfig.file.document.name": "Document", + "variableConfig.file.image.name": "Image", + "variableConfig.file.supportFileTypes": "Support File Types", + "variableConfig.file.video.name": "Video", + "variableConfig.hide": "Hide", + "variableConfig.inputPlaceholder": "Please input", + "variableConfig.json": "JSON Code", + "variableConfig.jsonSchema": "JSON Schema", + "variableConfig.labelName": "Label Name", + "variableConfig.localUpload": "Local Upload", + "variableConfig.maxLength": "Max Length", + "variableConfig.maxNumberOfUploads": "Max number of uploads", + "variableConfig.maxNumberTip": "Document < {{docLimit}}, image < {{imgLimit}}, audio < {{audioLimit}}, video < {{videoLimit}}", + "variableConfig.multi-files": "File List", + "variableConfig.noDefaultSelected": "Don't select", + "variableConfig.noDefaultValue": "No default value", + "variableConfig.notSet": "Not set, try typing {{input}} in the prefix prompt", + "variableConfig.number": "Number", + "variableConfig.optional": "optional", + "variableConfig.options": "Options", + "variableConfig.paragraph": "Paragraph", + "variableConfig.placeholder": "Placeholder", + "variableConfig.placeholderPlaceholder": "Enter text to display when the field is empty", + "variableConfig.required": "Required", + "variableConfig.select": "Select", + "variableConfig.selectDefaultValue": "Select default value", + "variableConfig.showAllSettings": "Show All Settings", + "variableConfig.single-file": "Single File", + "variableConfig.startChecked": "Start checked", + "variableConfig.startSelectedOption": "Start selected option", + "variableConfig.string": "Short Text", + "variableConfig.stringTitle": "Form text box options", + "variableConfig.text-input": "Short Text", + "variableConfig.tooltips": "Tooltips", + "variableConfig.tooltipsPlaceholder": "Enter helpful text shown when hovering over the label", + "variableConfig.unit": "Unit", + "variableConfig.unitPlaceholder": "Display units after numbers, e.g. tokens", + "variableConfig.uploadFileTypes": "Upload File Types", + "variableConfig.uploadMethod": "Upload Method", + "variableConfig.varName": "Variable Name", + "variableTable.action": "Actions", + "variableTable.key": "Variable Key", + "variableTable.name": "User Input Field Name", + "variableTable.type": "Input Type", + "variableTable.typeSelect": "Select", + "variableTable.typeString": "String", + "variableTip": "Users fill variables in a form, automatically replacing variables in the prompt.", + "variableTitle": "Variables", + "vision.description": "Enable Vision will allows the model to take in images and answer questions about them.", + "vision.name": "Vision", + "vision.onlySupportVisionModelTip": "Only supports vision models", + "vision.settings": "Settings", + "vision.visionSettings.both": "Both", + "vision.visionSettings.high": "High", + "vision.visionSettings.localUpload": "Local Upload", + "vision.visionSettings.low": "Low", + "vision.visionSettings.resolution": "Resolution", + "vision.visionSettings.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.\nhigh 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.", + "vision.visionSettings.title": "Vision Settings", + "vision.visionSettings.uploadLimit": "Upload Limit", + "vision.visionSettings.uploadMethod": "Upload Method", + "vision.visionSettings.url": "URL", + "voice.defaultDisplay": "Default Voice", + "voice.description": "Text to speech voice Settings", + "voice.name": "Voice", + "voice.settings": "Settings", + "voice.voiceSettings.autoPlay": "Auto Play", + "voice.voiceSettings.autoPlayDisabled": "Off", + "voice.voiceSettings.autoPlayEnabled": "On", + "voice.voiceSettings.language": "Language", + "voice.voiceSettings.resolutionTooltip": "Text-to-speech voice support language。", + "voice.voiceSettings.title": "Voice Settings", + "voice.voiceSettings.voice": "Voice", + "warningMessage.timeoutExceeded": "Results are not displayed due to timeout. Please refer to the logs to gather complete results." +} diff --git a/web/i18n/nl-NL/app-log.json b/web/i18n/nl-NL/app-log.json new file mode 100644 index 0000000000..3ffb8ba99e --- /dev/null +++ b/web/i18n/nl-NL/app-log.json @@ -0,0 +1,84 @@ +{ + "agentLog": "Agent Log", + "agentLogDetail.agentMode": "Agent Mode", + "agentLogDetail.finalProcessing": "Final Processing", + "agentLogDetail.iteration": "Iteration", + "agentLogDetail.iterations": "Iterations", + "agentLogDetail.toolUsed": "Tool Used", + "dateFormat": "MM/DD/YYYY", + "dateTimeFormat": "MM/DD/YYYY hh:mm:ss A", + "description": "The logs record the running status of the application, including user inputs and AI replies.", + "detail.annotationTip": "Improvements Marked by {{user}}", + "detail.conversationId": "Conversation ID", + "detail.loading": "loading", + "detail.modelParams": "Model parameters", + "detail.operation.addAnnotation": "Add Improvement", + "detail.operation.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.", + "detail.operation.dislike": "dislike", + "detail.operation.editAnnotation": "Edit Improvement", + "detail.operation.like": "like", + "detail.promptTemplate": "Prompt Template", + "detail.promptTemplateBeforeChat": "Prompt Template Before Chat · As System Message", + "detail.second": "s", + "detail.time": "Time", + "detail.timeConsuming": "", + "detail.tokenCost": "Token spent", + "detail.uploadImages": "Uploaded Images", + "detail.variables": "Variables", + "filter.annotation.all": "All", + "filter.annotation.annotated": "Annotated Improvements ({{count}} items)", + "filter.annotation.not_annotated": "Not Annotated", + "filter.ascending": "ascending", + "filter.descending": "descending", + "filter.period.allTime": "All time", + "filter.period.custom": "Custom", + "filter.period.last12months": "Last 12 months", + "filter.period.last30days": "Last 30 Days", + "filter.period.last3months": "Last 3 months", + "filter.period.last4weeks": "Last 4 weeks", + "filter.period.last7days": "Last 7 Days", + "filter.period.monthToDate": "Month to date", + "filter.period.quarterToDate": "Quarter to date", + "filter.period.today": "Today", + "filter.period.yearToDate": "Year to date", + "filter.sortBy": "Sort by:", + "promptLog": "Prompt Log", + "runDetail.fileListDetail": "Detail", + "runDetail.fileListLabel": "File Details", + "runDetail.testWithParams": "Test With Params", + "runDetail.title": "Conversation Log", + "runDetail.workflowTitle": "Log Detail", + "table.empty.element.content": "Observe and annotate interactions between end-users and AI applications here to continuously improve AI accuracy. You can try sharing or testing the Web App yourself, then return to this page.", + "table.empty.element.title": "Is anyone there?", + "table.empty.noChat": "No conversation yet", + "table.empty.noOutput": "No output", + "table.header.adminRate": "Op. Rate", + "table.header.endUser": "End User or Account", + "table.header.input": "Input", + "table.header.messageCount": "Message Count", + "table.header.output": "Output", + "table.header.runtime": "RUN TIME", + "table.header.startTime": "START TIME", + "table.header.status": "STATUS", + "table.header.summary": "Title", + "table.header.time": "Created time", + "table.header.tokens": "TOKENS", + "table.header.triggered_from": "TRIGGER BY", + "table.header.updatedTime": "Updated time", + "table.header.user": "END USER OR ACCOUNT", + "table.header.userRate": "User Rate", + "table.header.version": "VERSION", + "table.pagination.next": "Next", + "table.pagination.previous": "Prev", + "title": "Logs", + "triggerBy.appRun": "WebApp", + "triggerBy.debugging": "Debugging", + "triggerBy.plugin": "Plugin", + "triggerBy.ragPipelineDebugging": "RAG Debugging", + "triggerBy.ragPipelineRun": "RAG Pipeline", + "triggerBy.schedule": "Schedule", + "triggerBy.webhook": "Webhook", + "viewLog": "View Log", + "workflowSubtitle": "The log recorded the operation of Automate.", + "workflowTitle": "Workflow Logs" +} diff --git a/web/i18n/nl-NL/app-overview.json b/web/i18n/nl-NL/app-overview.json new file mode 100644 index 0000000000..81256a769c --- /dev/null +++ b/web/i18n/nl-NL/app-overview.json @@ -0,0 +1,121 @@ +{ + "analysis.activeUsers.explanation": "Unique users engaging in Q&A with AI; prompt engineering/debugging excluded.", + "analysis.activeUsers.title": "Active Users", + "analysis.avgResponseTime.explanation": "Time (ms) for AI to process/respond; for text-based apps.", + "analysis.avgResponseTime.title": "Avg. Response Time", + "analysis.avgSessionInteractions.explanation": "Continuous user-AI communication count; for conversation-based apps.", + "analysis.avgSessionInteractions.title": "Avg. Session Interactions", + "analysis.avgUserInteractions.explanation": "Reflects the daily usage frequency of users. This metric reflects user stickiness.", + "analysis.avgUserInteractions.title": "Avg. User Interactions", + "analysis.ms": "ms", + "analysis.title": "Analysis", + "analysis.tokenPS": "Token/s", + "analysis.tokenUsage.consumed": "Consumed", + "analysis.tokenUsage.explanation": "Reflects the daily token usage of the language model for the application, useful for cost control purposes.", + "analysis.tokenUsage.title": "Token Usage", + "analysis.totalConversations.explanation": "Daily AI conversations count; prompt engineering/debugging excluded.", + "analysis.totalConversations.title": "Total Conversations", + "analysis.totalMessages.explanation": "Daily AI interactions count.", + "analysis.totalMessages.title": "Total Messages", + "analysis.tps.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.", + "analysis.tps.title": "Token Output Speed", + "analysis.userSatisfactionRate.explanation": "The number of likes per 1,000 messages. This indicates the proportion of answers that users are highly satisfied with.", + "analysis.userSatisfactionRate.title": "User Satisfaction Rate", + "apiKeyInfo.callTimes": "Call times", + "apiKeyInfo.cloud.exhausted.description": "You have exhausted your trial quota. Please set up your own model provider or purchase additional quota.", + "apiKeyInfo.cloud.exhausted.title": "Your trial quota have been used up, please set up your APIKey.", + "apiKeyInfo.cloud.trial.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.", + "apiKeyInfo.cloud.trial.title": "You are using the {{providerName}} trial quota.", + "apiKeyInfo.selfHost.title.row1": "To get started,", + "apiKeyInfo.selfHost.title.row2": "setup your model provider first.", + "apiKeyInfo.setAPIBtn": "Go to setup model provider", + "apiKeyInfo.tryCloud": "Or try the cloud version of Dify with free quote", + "apiKeyInfo.usedToken": "Used token", + "overview.apiInfo.accessibleAddress": "Service API Endpoint", + "overview.apiInfo.doc": "API Reference", + "overview.apiInfo.explanation": "Easily integrated into your application", + "overview.apiInfo.title": "Backend Service API", + "overview.appInfo.accessibleAddress": "Public URL", + "overview.appInfo.customize.entry": "Customize", + "overview.appInfo.customize.explanation": "You can customize the frontend of the Web App to fit your scenario and style needs.", + "overview.appInfo.customize.title": "Customize AI web app", + "overview.appInfo.customize.way": "way", + "overview.appInfo.customize.way1.name": "Fork the client code, modify it and deploy to Vercel (recommended)", + "overview.appInfo.customize.way1.step1": "Fork the client code and modify it", + "overview.appInfo.customize.way1.step1Operation": "Dify-WebClient", + "overview.appInfo.customize.way1.step1Tip": "Click here to fork the source code into your GitHub account and modify the code", + "overview.appInfo.customize.way1.step2": "Deploy to Vercel", + "overview.appInfo.customize.way1.step2Operation": "Import repository", + "overview.appInfo.customize.way1.step2Tip": "Click here to import the repository into Vercel and deploy", + "overview.appInfo.customize.way1.step3": "Configure environment variables", + "overview.appInfo.customize.way1.step3Tip": "Add the following environment variables in Vercel", + "overview.appInfo.customize.way2.name": "Write client-side code to call the API and deploy it to a server", + "overview.appInfo.customize.way2.operation": "Documentation", + "overview.appInfo.embedded.chromePlugin": "Install Dify Chatbot Chrome Extension", + "overview.appInfo.embedded.copied": "Copied", + "overview.appInfo.embedded.copy": "Copy", + "overview.appInfo.embedded.entry": "Embedded", + "overview.appInfo.embedded.explanation": "Choose the way to embed chat app to your website", + "overview.appInfo.embedded.iframe": "To add the chat app any where on your website, add this iframe to your html code.", + "overview.appInfo.embedded.scripts": "To add a chat app to the bottom right of your website add this code to your html.", + "overview.appInfo.embedded.title": "Embed on website", + "overview.appInfo.enableTooltip.description": "To enable this feature, please add a User Input node to the canvas. (May already exist in draft, takes effect after publishing)", + "overview.appInfo.enableTooltip.learnMore": "Learn more", + "overview.appInfo.explanation": "Ready-to-use AI web app", + "overview.appInfo.launch": "Launch", + "overview.appInfo.preUseReminder": "Please enable web app before continuing.", + "overview.appInfo.preview": "Preview", + "overview.appInfo.qrcode.download": "Download QR Code", + "overview.appInfo.qrcode.scan": "Scan To Share", + "overview.appInfo.qrcode.title": "Link QR Code", + "overview.appInfo.regenerate": "Regenerate", + "overview.appInfo.regenerateNotice": "Do you want to regenerate the public URL?", + "overview.appInfo.settings.chatColorTheme": "Chat color theme", + "overview.appInfo.settings.chatColorThemeDesc": "Set the color theme of the chatbot", + "overview.appInfo.settings.chatColorThemeInverted": "Inverted", + "overview.appInfo.settings.entry": "Settings", + "overview.appInfo.settings.invalidHexMessage": "Invalid hex value", + "overview.appInfo.settings.invalidPrivacyPolicy": "Invalid privacy policy link. Please use a valid link that starts with http or https", + "overview.appInfo.settings.language": "Language", + "overview.appInfo.settings.modalTip": "Client-side web app settings. ", + "overview.appInfo.settings.more.copyRightPlaceholder": "Enter the name of the author or organization", + "overview.appInfo.settings.more.copyright": "Copyright", + "overview.appInfo.settings.more.copyrightTip": "Display copyright information in the web app", + "overview.appInfo.settings.more.copyrightTooltip": "Please upgrade to Professional plan or above", + "overview.appInfo.settings.more.customDisclaimer": "Custom Disclaimer", + "overview.appInfo.settings.more.customDisclaimerPlaceholder": "Enter the custom disclaimer text", + "overview.appInfo.settings.more.customDisclaimerTip": "Custom disclaimer text will be displayed on the client side, providing additional information about the application", + "overview.appInfo.settings.more.entry": "Show more settings", + "overview.appInfo.settings.more.privacyPolicy": "Privacy Policy", + "overview.appInfo.settings.more.privacyPolicyPlaceholder": "Enter the privacy policy link", + "overview.appInfo.settings.more.privacyPolicyTip": "Helps visitors understand the data the application collects, see Dify's Privacy Policy.", + "overview.appInfo.settings.sso.description": "All users are required to login with SSO before using web app", + "overview.appInfo.settings.sso.label": "SSO Enforcement", + "overview.appInfo.settings.sso.title": "web app SSO", + "overview.appInfo.settings.sso.tooltip": "Contact the administrator to enable web app SSO", + "overview.appInfo.settings.title": "Web App Settings", + "overview.appInfo.settings.webDesc": "web app Description", + "overview.appInfo.settings.webDescPlaceholder": "Enter the description of the web app", + "overview.appInfo.settings.webDescTip": "This text will be displayed on the client side, providing basic guidance on how to use the application", + "overview.appInfo.settings.webName": "web app Name", + "overview.appInfo.settings.workflow.hide": "Hide", + "overview.appInfo.settings.workflow.show": "Show", + "overview.appInfo.settings.workflow.showDesc": "Show or hide workflow details in web app", + "overview.appInfo.settings.workflow.subTitle": "Workflow Details", + "overview.appInfo.settings.workflow.title": "Workflow", + "overview.appInfo.title": "Web App", + "overview.disableTooltip.triggerMode": "The {{feature}} feature is not supported in Trigger Node mode.", + "overview.status.disable": "Disabled", + "overview.status.running": "In Service", + "overview.title": "Overview", + "overview.triggerInfo.explanation": "Workflow trigger management", + "overview.triggerInfo.learnAboutTriggers": "Learn about Triggers", + "overview.triggerInfo.noTriggerAdded": "No trigger added", + "overview.triggerInfo.title": "Triggers", + "overview.triggerInfo.triggerStatusDescription": "Trigger node status appears here. (May already exist in draft, takes effect after publishing)", + "overview.triggerInfo.triggersAdded": "{{count}} Triggers added", + "welcome.enterKeyTip": "enter your OpenAI API Key below", + "welcome.firstStepTip": "To get started,", + "welcome.getKeyTip": "Get your API Key from OpenAI dashboard", + "welcome.placeholder": "Your OpenAI API Key (eg.sk-xxxx)" +} diff --git a/web/i18n/nl-NL/app.json b/web/i18n/nl-NL/app.json new file mode 100644 index 0000000000..e4109db4b6 --- /dev/null +++ b/web/i18n/nl-NL/app.json @@ -0,0 +1,283 @@ +{ + "accessControl": "Web App Access Control", + "accessControlDialog.accessItems.anyone": "Anyone with the link", + "accessControlDialog.accessItems.external": "Authenticated external users", + "accessControlDialog.accessItems.organization": "All members within the platform", + "accessControlDialog.accessItems.specific": "Specific members within the platform", + "accessControlDialog.accessLabel": "Who has access", + "accessControlDialog.description": "Set web app access permissions", + "accessControlDialog.groups_one": "{{count}} GROUP", + "accessControlDialog.groups_other": "{{count}} GROUPS", + "accessControlDialog.members_one": "{{count}} MEMBER", + "accessControlDialog.members_other": "{{count}} MEMBERS", + "accessControlDialog.noGroupsOrMembers": "No groups or members selected", + "accessControlDialog.operateGroupAndMember.allMembers": "All members", + "accessControlDialog.operateGroupAndMember.expand": "Expand", + "accessControlDialog.operateGroupAndMember.noResult": "No result", + "accessControlDialog.operateGroupAndMember.searchPlaceholder": "Search groups and members", + "accessControlDialog.title": "Web App Access Control", + "accessControlDialog.updateSuccess": "Update successfully", + "accessControlDialog.webAppSSONotEnabledTip": "Please contact your organization administrator to configure external authentication for the web app.", + "accessItemsDescription.anyone": "Anyone can access the web app (no login required)", + "accessItemsDescription.external": "Only authenticated external users can access the web app", + "accessItemsDescription.organization": "All members within the platform can access the web app", + "accessItemsDescription.specific": "Only specific members within the platform can access the web app", + "answerIcon.description": "Whether to use the web app icon to replace 🤖 in the shared application", + "answerIcon.descriptionInExplore": "Whether to use the web app icon to replace 🤖 in Explore", + "answerIcon.title": "Use web app icon to replace 🤖", + "appDeleteFailed": "Failed to delete app", + "appDeleted": "App deleted", + "appNamePlaceholder": "Give your app a name", + "appSelector.label": "APP", + "appSelector.noParams": "No parameters needed", + "appSelector.params": "APP PARAMETERS", + "appSelector.placeholder": "Select an app...", + "communityIntro": "Discuss with team members, contributors and developers on different channels.", + "createApp": "CREATE APP", + "createFromConfigFile": "Create from DSL file", + "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.", + "deleteAppConfirmTitle": "Delete this app?", + "dslUploader.browse": "Browse", + "dslUploader.button": "Drag and drop file, or", + "duplicate": "Duplicate", + "duplicateTitle": "Duplicate App", + "editApp": "Edit Info", + "editAppTitle": "Edit App Info", + "editDone": "App info updated", + "editFailed": "Failed to update app info", + "export": "Export DSL", + "exportFailed": "Export DSL failed.", + "gotoAnything.actions.accountDesc": "Navigate to account page", + "gotoAnything.actions.communityDesc": "Open Discord community", + "gotoAnything.actions.docDesc": "Open help documentation", + "gotoAnything.actions.feedbackDesc": "Open community feedback discussions", + "gotoAnything.actions.languageCategoryDesc": "Switch interface language", + "gotoAnything.actions.languageCategoryTitle": "Language", + "gotoAnything.actions.languageChangeDesc": "Change UI language", + "gotoAnything.actions.runDesc": "Run quick commands (theme, language, ...)", + "gotoAnything.actions.runTitle": "Commands", + "gotoAnything.actions.searchApplications": "Search Applications", + "gotoAnything.actions.searchApplicationsDesc": "Search and navigate to your applications", + "gotoAnything.actions.searchKnowledgeBases": "Search Knowledge Bases", + "gotoAnything.actions.searchKnowledgeBasesDesc": "Search and navigate to your knowledge bases", + "gotoAnything.actions.searchPlugins": "Search Plugins", + "gotoAnything.actions.searchPluginsDesc": "Search and navigate to your plugins", + "gotoAnything.actions.searchWorkflowNodes": "Search Workflow Nodes", + "gotoAnything.actions.searchWorkflowNodesDesc": "Find and jump to nodes in the current workflow by name or type", + "gotoAnything.actions.searchWorkflowNodesHelp": "This feature only works when viewing a workflow. Navigate to a workflow first.", + "gotoAnything.actions.slashDesc": "Execute commands (type / to see all available commands)", + "gotoAnything.actions.slashTitle": "Commands", + "gotoAnything.actions.themeCategoryDesc": "Switch application theme", + "gotoAnything.actions.themeCategoryTitle": "Theme", + "gotoAnything.actions.themeDark": "Dark Theme", + "gotoAnything.actions.themeDarkDesc": "Use dark appearance", + "gotoAnything.actions.themeLight": "Light Theme", + "gotoAnything.actions.themeLightDesc": "Use light appearance", + "gotoAnything.actions.themeSystem": "System Theme", + "gotoAnything.actions.themeSystemDesc": "Follow your OS appearance", + "gotoAnything.actions.zenDesc": "Toggle canvas focus mode", + "gotoAnything.actions.zenTitle": "Zen Mode", + "gotoAnything.clearToSearchAll": "Clear @ to search all", + "gotoAnything.commandHint": "Type @ to browse by category", + "gotoAnything.emptyState.noAppsFound": "No apps found", + "gotoAnything.emptyState.noKnowledgeBasesFound": "No knowledge bases found", + "gotoAnything.emptyState.noPluginsFound": "No plugins found", + "gotoAnything.emptyState.noWorkflowNodesFound": "No workflow nodes found", + "gotoAnything.emptyState.tryDifferentTerm": "Try a different search term", + "gotoAnything.emptyState.trySpecificSearch": "Try {{shortcuts}} for specific searches", + "gotoAnything.groups.apps": "Apps", + "gotoAnything.groups.commands": "Commands", + "gotoAnything.groups.knowledgeBases": "Knowledge Bases", + "gotoAnything.groups.plugins": "Plugins", + "gotoAnything.groups.workflowNodes": "Workflow Nodes", + "gotoAnything.inScope": "in {{scope}}s", + "gotoAnything.noMatchingCommands": "No matching commands found", + "gotoAnything.noResults": "No results found", + "gotoAnything.pressEscToClose": "Press ESC to close", + "gotoAnything.resultCount": "{{count}} result", + "gotoAnything.resultCount_other": "{{count}} results", + "gotoAnything.searchFailed": "Search failed", + "gotoAnything.searchHint": "Start typing to search everything instantly", + "gotoAnything.searchPlaceholder": "Search or type @ or / for commands...", + "gotoAnything.searchTemporarilyUnavailable": "Search temporarily unavailable", + "gotoAnything.searchTitle": "Search for anything", + "gotoAnything.searching": "Searching...", + "gotoAnything.selectSearchType": "Choose what to search for", + "gotoAnything.selectToNavigate": "Select to navigate", + "gotoAnything.servicesUnavailableMessage": "Some search services may be experiencing issues. Try again in a moment.", + "gotoAnything.slashHint": "Type / to see all available commands", + "gotoAnything.someServicesUnavailable": "Some search services unavailable", + "gotoAnything.startTyping": "Start typing to search", + "gotoAnything.tips": "Press ↑↓ to navigate", + "gotoAnything.tryDifferentSearch": "Try a different search term", + "gotoAnything.useAtForSpecific": "Use @ for specific types", + "iconPicker.cancel": "Cancel", + "iconPicker.emoji": "Emoji", + "iconPicker.image": "Image", + "iconPicker.ok": "OK", + "importDSL": "Import DSL file", + "importFromDSL": "Import from DSL", + "importFromDSLFile": "From DSL file", + "importFromDSLUrl": "From URL", + "importFromDSLUrlPlaceholder": "Paste DSL link here", + "join": "Join the community", + "maxActiveRequests": "Max concurrent requests", + "maxActiveRequestsPlaceholder": "Enter 0 for unlimited", + "maxActiveRequestsTip": "Maximum number of concurrent active requests per app (0 for unlimited)", + "mermaid.classic": "Classic", + "mermaid.handDrawn": "Hand Drawn", + "newApp.Cancel": "Cancel", + "newApp.Confirm": "Confirm", + "newApp.Create": "Create", + "newApp.advancedShortDescription": "Workflow enhanced for multi-turn chats", + "newApp.advancedUserDescription": "Workflow with additional memory features and a chatbot interface.", + "newApp.agentAssistant": "New Agent Assistant", + "newApp.agentShortDescription": "Intelligent agent with reasoning and autonomous tool use", + "newApp.agentUserDescription": "An intelligent agent capable of iterative reasoning and autonomous tool use to achieve task goals.", + "newApp.appCreateDSLErrorPart1": "A significant difference in DSL versions has been detected. Forcing the import may cause the application to malfunction.", + "newApp.appCreateDSLErrorPart2": "Do you want to continue?", + "newApp.appCreateDSLErrorPart3": "Current application DSL version: ", + "newApp.appCreateDSLErrorPart4": "System-supported DSL version: ", + "newApp.appCreateDSLErrorTitle": "Version Incompatibility", + "newApp.appCreateDSLWarning": "Caution: DSL version difference may affect certain features", + "newApp.appCreateFailed": "Failed to create app", + "newApp.appCreated": "App created", + "newApp.appDescriptionPlaceholder": "Enter the description of the app", + "newApp.appNamePlaceholder": "Give your app a name", + "newApp.appTemplateNotSelected": "Please select a template", + "newApp.appTypeRequired": "Please select an app type", + "newApp.captionDescription": "Description", + "newApp.captionName": "App Name & Icon", + "newApp.caution": "Caution", + "newApp.chatApp": "Assistant", + "newApp.chatAppIntro": "I want to build a chat-based application. This app uses a question-and-answer format, allowing for multiple rounds of continuous conversation.", + "newApp.chatbotShortDescription": "LLM-based chatbot with simple setup", + "newApp.chatbotUserDescription": "Quickly build an LLM-based chatbot with simple configuration. You can switch to Chatflow later.", + "newApp.chooseAppType": "Choose an App Type", + "newApp.completeApp": "Text Generator", + "newApp.completeAppIntro": "I want to create an application that generates high-quality text based on prompts, such as generating articles, summaries, translations, and more.", + "newApp.completionShortDescription": "AI assistant for text generation tasks", + "newApp.completionUserDescription": "Quickly build an AI assistant for text generation tasks with simple configuration.", + "newApp.dropDSLToCreateApp": "Drop DSL file here to create app", + "newApp.forAdvanced": "FOR ADVANCED USERS", + "newApp.forBeginners": "More basic app types", + "newApp.foundResult": "{{count}} Result", + "newApp.foundResults": "{{count}} Results", + "newApp.hideTemplates": "Go back to mode selection", + "newApp.import": "Import", + "newApp.learnMore": "Learn more", + "newApp.nameNotEmpty": "Name cannot be empty", + "newApp.noAppsFound": "No apps found", + "newApp.noIdeaTip": "No ideas? Check out our templates", + "newApp.noTemplateFound": "No templates found", + "newApp.noTemplateFoundTip": "Try searching using different keywords.", + "newApp.optional": "Optional", + "newApp.previewDemo": "Preview demo", + "newApp.showTemplates": "I want to choose from a template", + "newApp.startFromBlank": "Create from Blank", + "newApp.startFromTemplate": "Create from Template", + "newApp.useTemplate": "Use this template", + "newApp.workflowShortDescription": "Agentic flow for intelligent automations", + "newApp.workflowUserDescription": "Visually build autonomous AI workflows with drag-and-drop simplicity.", + "newApp.workflowWarning": "Currently in beta", + "newAppFromTemplate.byCategories": "BY CATEGORIES", + "newAppFromTemplate.searchAllTemplate": "Search all templates...", + "newAppFromTemplate.sidebar.Agent": "Agent", + "newAppFromTemplate.sidebar.Assistant": "Assistant", + "newAppFromTemplate.sidebar.HR": "HR", + "newAppFromTemplate.sidebar.Programming": "Programming", + "newAppFromTemplate.sidebar.Recommended": "Recommended", + "newAppFromTemplate.sidebar.Workflow": "Workflow", + "newAppFromTemplate.sidebar.Writing": "Writing", + "noAccessPermission": "No permission to access web app", + "noUserInputNode": "Missing user input node", + "notPublishedYet": "App is not published yet", + "openInExplore": "Open in Explore", + "publishApp.notSet": "Not set", + "publishApp.notSetDesc": "Currently nobody can access the web app. Please set permissions.", + "publishApp.title": "Who can access web app", + "removeOriginal": "Delete the original app", + "roadmap": "See our roadmap", + "showMyCreatedAppsOnly": "Created by me", + "structOutput.LLMResponse": "LLM Response", + "structOutput.configure": "Configure", + "structOutput.modelNotSupported": "Model not supported", + "structOutput.modelNotSupportedTip": "The current model does not support this feature and is automatically downgraded to prompt injection.", + "structOutput.moreFillTip": "Showing max 10 levels of nesting", + "structOutput.notConfiguredTip": "Structured output has not been configured yet", + "structOutput.required": "Required", + "structOutput.structured": "Structured", + "structOutput.structuredTip": "Structured Outputs is a feature that ensures the model will always generate responses that adhere to your supplied JSON Schema", + "switch": "Switch to Workflow Orchestrate", + "switchLabel": "The app copy to be created", + "switchStart": "Start switch", + "switchTip": "not allow", + "switchTipEnd": " switching back to Basic Orchestrate.", + "switchTipStart": "A new app copy will be created for you, and the new copy will switch to Workflow Orchestrate. The new copy will ", + "theme.switchDark": "Switch to dark theme", + "theme.switchLight": "Switch to light theme", + "tracing.aliyun.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.", + "tracing.aliyun.title": "Cloud Monitor", + "tracing.arize.description": "Enterprise-grade LLM observability, online & offline evaluation, monitoring, and experimentation—powered by OpenTelemetry. Purpose-built for LLM & agent-driven applications.", + "tracing.arize.title": "Arize", + "tracing.collapse": "Collapse", + "tracing.config": "Config", + "tracing.configProvider.clientId": "OAuth Client ID", + "tracing.configProvider.clientSecret": "OAuth Client Secret", + "tracing.configProvider.databricksHost": "Databricks Workspace URL", + "tracing.configProvider.experimentId": "Experiment ID", + "tracing.configProvider.password": "Password", + "tracing.configProvider.personalAccessToken": "Personal Access Token (legacy)", + "tracing.configProvider.placeholder": "Enter your {{key}}", + "tracing.configProvider.project": "Project", + "tracing.configProvider.publicKey": "Public Key", + "tracing.configProvider.removeConfirmContent": "The current configuration is in use, removing it will turn off the Tracing feature.", + "tracing.configProvider.removeConfirmTitle": "Remove {{key}} configuration?", + "tracing.configProvider.secretKey": "Secret Key", + "tracing.configProvider.title": "Config ", + "tracing.configProvider.trackingUri": "Tracking URI", + "tracing.configProvider.username": "Username", + "tracing.configProvider.viewDocsLink": "View {{key}} docs", + "tracing.configProviderTitle.configured": "Configured", + "tracing.configProviderTitle.moreProvider": "More Provider", + "tracing.configProviderTitle.notConfigured": "Config provider to enable tracing", + "tracing.databricks.description": "Databricks offers fully-managed MLflow with strong governance and security for storing trace data.", + "tracing.databricks.title": "Databricks", + "tracing.description": "Configuring a Third-Party LLMOps provider and tracing app performance.", + "tracing.disabled": "Disabled", + "tracing.disabledTip": "Please config provider first", + "tracing.enabled": "In Service", + "tracing.expand": "Expand", + "tracing.inUse": "In use", + "tracing.langfuse.description": "Open-source LLM observability, evaluation, prompt management and metrics to debug and improve your LLM application.", + "tracing.langfuse.title": "Langfuse", + "tracing.langsmith.description": "An all-in-one developer platform for every step of the LLM-powered application lifecycle.", + "tracing.langsmith.title": "LangSmith", + "tracing.mlflow.description": "MLflow is an open-source platform for experiment management, evaluation, and monitoring of LLM applications.", + "tracing.mlflow.title": "MLflow", + "tracing.opik.description": "Opik is an open-source platform for evaluating, testing, and monitoring LLM applications.", + "tracing.opik.title": "Opik", + "tracing.phoenix.description": "Open-source & OpenTelemetry-based observability, evaluation, prompt engineering and experimentation platform for your LLM workflows and agents.", + "tracing.phoenix.title": "Phoenix", + "tracing.tencent.description": "Tencent Application Performance Monitoring provides comprehensive tracing and multi-dimensional analysis for LLM applications.", + "tracing.tencent.title": "Tencent APM", + "tracing.title": "Tracing app performance", + "tracing.tracing": "Tracing", + "tracing.tracingDescription": "Capture the full context of app execution, including LLM calls, context, prompts, HTTP requests, and more, to a third-party tracing platform.", + "tracing.view": "View", + "tracing.weave.description": "Weave is an open-source platform for evaluating, testing, and monitoring LLM applications.", + "tracing.weave.title": "Weave", + "typeSelector.advanced": "Chatflow", + "typeSelector.agent": "Agent", + "typeSelector.all": "All Types ", + "typeSelector.chatbot": "Chatbot", + "typeSelector.completion": "Completion", + "typeSelector.workflow": "Workflow", + "types.advanced": "Chatflow", + "types.agent": "Agent", + "types.all": "All", + "types.basic": "Basic", + "types.chatbot": "Chatbot", + "types.completion": "Completion", + "types.workflow": "Workflow" +} diff --git a/web/i18n/nl-NL/billing.json b/web/i18n/nl-NL/billing.json new file mode 100644 index 0000000000..bfd82e1d67 --- /dev/null +++ b/web/i18n/nl-NL/billing.json @@ -0,0 +1,186 @@ +{ + "annotatedResponse.fullTipLine1": "Upgrade your plan to", + "annotatedResponse.fullTipLine2": "annotate more conversations.", + "annotatedResponse.quotaTitle": "Annotation Reply Quota", + "apps.contactUs": "Contact us", + "apps.fullTip1": "Upgrade to create more apps", + "apps.fullTip1des": "You've reached the limit of build apps on this plan", + "apps.fullTip2": "Plan limit reached", + "apps.fullTip2des": "It is recommended to clean up inactive applications to free up usage, or contact us.", + "buyPermissionDeniedTip": "Please contact your enterprise administrator to subscribe", + "currentPlan": "Current Plan", + "plans.community.btnText": "Get Started", + "plans.community.description": "For open-source enthusiasts, individual developers, and non-commercial projects", + "plans.community.features": [ + "All Core Features Released Under the Public Repository", + "Single Workspace", + "Complies with Dify Open Source License" + ], + "plans.community.for": "For Individual Users, Small Teams, or Non-commercial Projects", + "plans.community.includesTitle": "Free Features:", + "plans.community.name": "Community", + "plans.community.price": "Free", + "plans.community.priceTip": "", + "plans.enterprise.btnText": "Contact Sales", + "plans.enterprise.description": "For enterprise requiring organization-grade security, compliance, scalability, control and custom solutions", + "plans.enterprise.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" + ], + "plans.enterprise.for": "For large-sized Teams", + "plans.enterprise.includesTitle": "Everything from Premium, plus:", + "plans.enterprise.name": "Enterprise", + "plans.enterprise.price": "Custom", + "plans.enterprise.priceTip": "Annual Billing Only", + "plans.premium.btnText": "Get Premium on", + "plans.premium.comingSoon": "Microsoft Azure & Google Cloud Support Coming Soon", + "plans.premium.description": "For Mid-sized organizations needing deployment flexibility and enhanced support", + "plans.premium.features": [ + "Self-managed Reliability by Various Cloud Providers", + "Single Workspace", + "WebApp Logo & Branding Customization", + "Priority Email & Chat Support" + ], + "plans.premium.for": "For Mid-sized Organizations and Teams", + "plans.premium.includesTitle": "Everything from Community, plus:", + "plans.premium.name": "Premium", + "plans.premium.price": "Scalable", + "plans.premium.priceTip": "Based on Cloud Marketplace", + "plans.professional.description": "For independent developers & small teams ready to build production AI applications.", + "plans.professional.for": "For Independent Developers/Small Teams", + "plans.professional.name": "Professional", + "plans.sandbox.description": "Try core features for free.", + "plans.sandbox.for": "Free Trial of Core Capabilities", + "plans.sandbox.name": "Sandbox", + "plans.team.description": "For medium-sized teams requiring collaboration and higher throughput.", + "plans.team.for": "For Medium-sized Teams", + "plans.team.name": "Team", + "plansCommon.annotatedResponse.title": "{{count,number}} Annotation Quota Limits", + "plansCommon.annotatedResponse.tooltip": "Manual editing and annotation of responses provides customizable high-quality question-answering abilities for apps. (Applicable only in Chat apps)", + "plansCommon.annotationQuota": "Annotation Quota", + "plansCommon.annualBilling": "Bill Annually Save {{percent}}%", + "plansCommon.apiRateLimit": "API Rate Limit", + "plansCommon.apiRateLimitTooltip": "API Rate Limit applies to all requests made through the Dify API, including text generation, chat conversations, workflow executions, and document processing.", + "plansCommon.apiRateLimitUnit": "{{count,number}}", + "plansCommon.buildApps": "{{count,number}} Apps", + "plansCommon.cloud": "Cloud Service", + "plansCommon.comingSoon": "Coming soon", + "plansCommon.comparePlanAndFeatures": "Compare plans & features", + "plansCommon.contactSales": "Contact Sales", + "plansCommon.contractOwner": "Contact team manager", + "plansCommon.contractSales": "Contact sales", + "plansCommon.currentPlan": "Current Plan", + "plansCommon.customTools": "Custom Tools", + "plansCommon.days": "Days", + "plansCommon.documentProcessingPriority": " Document Processing", + "plansCommon.documentProcessingPriorityTip": "For higher document processing priority, please upgrade your plan.", + "plansCommon.documentProcessingPriorityUpgrade": "Process more data with higher accuracy at faster speeds.", + "plansCommon.documents": "{{count,number}} Knowledge Documents", + "plansCommon.documentsRequestQuota": "{{count,number}} Knowledge Request/min", + "plansCommon.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. ", + "plansCommon.documentsTooltip": "Quota on the number of documents imported from the Knowledge Data Source.", + "plansCommon.free": "Free", + "plansCommon.freeTrialTip": "free trial of 200 OpenAI calls. ", + "plansCommon.freeTrialTipPrefix": "Sign up and get a ", + "plansCommon.freeTrialTipSuffix": "No credit card required", + "plansCommon.getStarted": "Get Started", + "plansCommon.logsHistory": "{{days}} Log history", + "plansCommon.member": "Member", + "plansCommon.memberAfter": "Member", + "plansCommon.messageRequest.title": "{{count,number}} message credits", + "plansCommon.messageRequest.titlePerMonth": "{{count,number}} message credits/month", + "plansCommon.messageRequest.tooltip": "Message credits are provided to help you easily try out different models from OpenAI, Anthropic, Gemini, xAI, DeepSeek and Tongyi in Dify. Credits are consumed based on the model type. Once they're used up, you can switch to your own API key.", + "plansCommon.modelProviders": "Support OpenAI/Anthropic/Llama2/Azure OpenAI/Hugging Face/Replicate", + "plansCommon.month": "month", + "plansCommon.mostPopular": "Popular", + "plansCommon.planRange.monthly": "Monthly", + "plansCommon.planRange.yearly": "Yearly", + "plansCommon.priceTip": "per workspace/", + "plansCommon.priority.priority": "Priority", + "plansCommon.priority.standard": "Standard", + "plansCommon.priority.top-priority": "Top Priority", + "plansCommon.ragAPIRequestTooltip": "Refers to the number of API calls invoking only the knowledge base processing capabilities of Dify.", + "plansCommon.receiptInfo": "Only team owner and team admin can subscribe and view billing information", + "plansCommon.save": "Save ", + "plansCommon.self": "Self-Hosted", + "plansCommon.startBuilding": "Start Building", + "plansCommon.startForFree": "Start for Free", + "plansCommon.startNodes.limited": "Up to {{count}} Triggers/workflow", + "plansCommon.startNodes.unlimited": "Unlimited Triggers/workflow", + "plansCommon.support": "Support", + "plansCommon.supportItems.SSOAuthentication": "SSO authentication", + "plansCommon.supportItems.agentMode": "Agent Mode", + "plansCommon.supportItems.bulkUpload": "Bulk upload documents", + "plansCommon.supportItems.communityForums": "Community forums", + "plansCommon.supportItems.customIntegration": "Custom integration and support", + "plansCommon.supportItems.dedicatedAPISupport": "Dedicated API support", + "plansCommon.supportItems.emailSupport": "Email support", + "plansCommon.supportItems.llmLoadingBalancing": "LLM Load Balancing", + "plansCommon.supportItems.llmLoadingBalancingTooltip": "Add multiple API keys to models, effectively bypassing the API rate limits. ", + "plansCommon.supportItems.logoChange": "Logo change", + "plansCommon.supportItems.personalizedSupport": "Personalized support", + "plansCommon.supportItems.priorityEmail": "Priority email & chat support", + "plansCommon.supportItems.ragAPIRequest": "RAG API Requests", + "plansCommon.supportItems.workflow": "Workflow", + "plansCommon.talkToSales": "Talk to Sales", + "plansCommon.taxTip": "All subscription prices (monthly/annual) exclude applicable taxes (e.g., VAT, sales tax).", + "plansCommon.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.", + "plansCommon.teamMember_one": "{{count,number}} Team Member", + "plansCommon.teamMember_other": "{{count,number}} Team Members", + "plansCommon.teamWorkspace": "{{count,number}} Team Workspace", + "plansCommon.title.description": "Select the plan that best fits your team's needs.", + "plansCommon.title.plans": "plans", + "plansCommon.triggerEvents.professional": "{{count,number}} Trigger Events/month", + "plansCommon.triggerEvents.sandbox": "{{count,number}} Trigger Events", + "plansCommon.triggerEvents.tooltip": "The number of events that automatically start workflows through Plugin, Schedule, or Webhook triggers.", + "plansCommon.triggerEvents.unlimited": "Unlimited Trigger Events", + "plansCommon.unavailable": "Unavailable", + "plansCommon.unlimited": "Unlimited", + "plansCommon.unlimitedApiRate": "No Dify API Rate Limit", + "plansCommon.vectorSpace": "{{size}} Knowledge Data Storage", + "plansCommon.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.", + "plansCommon.workflowExecution.faster": "Faster Workflow Execution", + "plansCommon.workflowExecution.priority": "Priority Workflow Execution", + "plansCommon.workflowExecution.standard": "Standard Workflow Execution", + "plansCommon.workflowExecution.tooltip": "Workflow execution queue priority and speed.", + "plansCommon.year": "year", + "plansCommon.yearlyTip": "Pay for 10 months, enjoy 1 Year!", + "teamMembers": "Team Members", + "triggerLimitModal.description": "You've reached the limit of workflow event triggers for this plan.", + "triggerLimitModal.dismiss": "Dismiss", + "triggerLimitModal.title": "Upgrade to unlock more trigger events", + "triggerLimitModal.upgrade": "Upgrade", + "triggerLimitModal.usageTitle": "TRIGGER EVENTS", + "upgrade.addChunks.description": "You’ve reached the limit of adding chunks for this plan.", + "upgrade.addChunks.title": "Upgrade to continue adding chunks", + "upgrade.uploadMultipleFiles.description": "Batch-upload more documents at once to save time and improve efficiency.", + "upgrade.uploadMultipleFiles.title": "Upgrade to unlock batch document upload", + "upgrade.uploadMultiplePages.description": "You’ve reached the upload limit — only one document can be selected and uploaded at a time on your current plan.", + "upgrade.uploadMultiplePages.title": "Upgrade to upload multiple documents at once", + "upgradeBtn.encourage": "Upgrade Now", + "upgradeBtn.encourageShort": "Upgrade", + "upgradeBtn.plain": "View Plan", + "usagePage.annotationQuota": "Annotation Quota", + "usagePage.buildApps": "Build Apps", + "usagePage.documentsUploadQuota": "Documents Upload Quota", + "usagePage.perMonth": "per month", + "usagePage.resetsIn": "Resets in {{count,number}} days", + "usagePage.storageThresholdTooltip": "Detailed usage is shown once storage exceeds 50 MB.", + "usagePage.teamMembers": "Team Members", + "usagePage.triggerEvents": "Trigger Events", + "usagePage.vectorSpace": "Knowledge Data Storage", + "usagePage.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.", + "vectorSpace.fullSolution": "Upgrade your plan to get more space.", + "vectorSpace.fullTip": "Vector Space is full.", + "viewBilling": "Manage billing and subscriptions", + "viewBillingAction": "Manage", + "viewBillingDescription": "Manage payment methods, invoices, and subscription changes", + "viewBillingTitle": "Billing and Subscriptions" +} diff --git a/web/i18n/nl-NL/common.json b/web/i18n/nl-NL/common.json new file mode 100644 index 0000000000..9170472642 --- /dev/null +++ b/web/i18n/nl-NL/common.json @@ -0,0 +1,631 @@ +{ + "about.changeLog": "Changelog", + "about.latestAvailable": "Dify {{version}} is the latest version available.", + "about.nowAvailable": "Dify {{version}} is now available.", + "about.updateNow": "Update now", + "account.account": "Account", + "account.avatar": "Avatar", + "account.changeEmail.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.", + "account.changeEmail.changeTo": "Change to {{email}}", + "account.changeEmail.codeLabel": "Verification code", + "account.changeEmail.codePlaceholder": "Paste the 6-digit code", + "account.changeEmail.content1": "If you continue, we'll send a verification code to {{email}} for re-authentication.", + "account.changeEmail.content2": "Your current email is {{email}}. Verification code has been sent to this email address.", + "account.changeEmail.content3": "Enter a new email and we will send you a verification code.", + "account.changeEmail.content4": "We just sent you a temporary verification code to {{email}}.", + "account.changeEmail.continue": "Continue", + "account.changeEmail.emailLabel": "New email", + "account.changeEmail.emailPlaceholder": "Enter a new email", + "account.changeEmail.existingEmail": "A user with this email already exists.", + "account.changeEmail.newEmail": "Set up a new email address", + "account.changeEmail.resend": "Resend", + "account.changeEmail.resendCount": "Resend in {{count}}s", + "account.changeEmail.resendTip": "Didn't receive a code?", + "account.changeEmail.sendVerifyCode": "Send verification code", + "account.changeEmail.title": "Change Email", + "account.changeEmail.unAvailableEmail": "This email is temporarily unavailable.", + "account.changeEmail.verifyEmail": "Verify your current email", + "account.changeEmail.verifyNew": "Verify your new email", + "account.confirmPassword": "Confirm password", + "account.currentPassword": "Current password", + "account.delete": "Delete Account", + "account.deleteLabel": "To confirm, please type in your email below", + "account.deletePlaceholder": "Please enter your email", + "account.deletePrivacyLink": "Privacy Policy.", + "account.deletePrivacyLinkTip": "For more information about how we handle your data, please see our ", + "account.deleteSuccessTip": "Your account needs time to finish deleting. We'll email you when it's all done.", + "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.", + "account.editName": "Edit Name", + "account.editWorkspaceInfo": "Edit Workspace Info", + "account.email": "Email", + "account.feedbackLabel": "Tell us why you deleted your account?", + "account.feedbackPlaceholder": "Optional", + "account.feedbackTitle": "Feedback", + "account.langGeniusAccount": "Account's data", + "account.langGeniusAccountTip": "The user data of your account.", + "account.myAccount": "My Account", + "account.name": "Name", + "account.newPassword": "New password", + "account.notEqual": "Two passwords are different.", + "account.password": "Password", + "account.passwordTip": "You can set a permanent password if you don’t want to use temporary login codes", + "account.permanentlyDeleteButton": "Permanently Delete Account", + "account.resetPassword": "Reset password", + "account.sendVerificationButton": "Send Verification Code", + "account.setPassword": "Set a password", + "account.showAppLength": "Show {{length}} apps", + "account.studio": "Studio", + "account.verificationLabel": "Verification Code", + "account.verificationPlaceholder": "Paste the 6-digit code", + "account.workspaceIcon": "Workspace Icon", + "account.workspaceName": "Workspace Name", + "account.workspaceNamePlaceholder": "Enter workspace name", + "actionMsg.copySuccessfully": "Copied successfully", + "actionMsg.downloadUnsuccessfully": "Download failed. Please try again later.", + "actionMsg.generatedSuccessfully": "Generated successfully", + "actionMsg.generatedUnsuccessfully": "Generated unsuccessfully", + "actionMsg.modifiedSuccessfully": "Modified successfully", + "actionMsg.modifiedUnsuccessfully": "Modified unsuccessfully", + "actionMsg.noModification": "No modifications at the moment.", + "actionMsg.payCancelled": "Payment cancelled", + "actionMsg.paySucceeded": "Payment succeeded", + "api.actionFailed": "Action failed", + "api.actionSuccess": "Action succeeded", + "api.create": "Created", + "api.remove": "Removed", + "api.saved": "Saved", + "api.success": "Success", + "apiBasedExtension.add": "Add API Extension", + "apiBasedExtension.link": "Learn how to develop your own API Extension.", + "apiBasedExtension.modal.apiEndpoint.placeholder": "Please enter the API endpoint", + "apiBasedExtension.modal.apiEndpoint.title": "API Endpoint", + "apiBasedExtension.modal.apiKey.lengthError": "API-key length cannot be less than 5 characters", + "apiBasedExtension.modal.apiKey.placeholder": "Please enter the API-key", + "apiBasedExtension.modal.apiKey.title": "API-key", + "apiBasedExtension.modal.editTitle": "Edit API Extension", + "apiBasedExtension.modal.name.placeholder": "Please enter the name", + "apiBasedExtension.modal.name.title": "Name", + "apiBasedExtension.modal.title": "Add API Extension", + "apiBasedExtension.selector.manage": "Manage API Extension", + "apiBasedExtension.selector.placeholder": "Please select API extension", + "apiBasedExtension.selector.title": "API Extension", + "apiBasedExtension.title": "API extensions provide centralized API management, simplifying configuration for easy use across Dify's applications.", + "apiBasedExtension.type": "Type", + "appMenus.apiAccess": "API Access", + "appMenus.apiAccessTip": "This knowledge base is accessible via the Service API", + "appMenus.logAndAnn": "Logs & Annotations", + "appMenus.logs": "Logs", + "appMenus.overview": "Monitoring", + "appMenus.promptEng": "Orchestrate", + "appModes.chatApp": "Chat App", + "appModes.completionApp": "Text Generator", + "avatar.deleteDescription": "Are you sure you want to remove your profile picture? Your account will use the default initial avatar.", + "avatar.deleteTitle": "Remove Avatar", + "chat.citation.characters": "Characters:", + "chat.citation.hitCount": "Retrieval count:", + "chat.citation.hitScore": "Retrieval Score:", + "chat.citation.linkToDataset": "Link to Knowledge", + "chat.citation.title": "CITATIONS", + "chat.citation.vectorHash": "Vector hash:", + "chat.conversationName": "Conversation name", + "chat.conversationNameCanNotEmpty": "Conversation name required", + "chat.conversationNamePlaceholder": "Please input conversation name", + "chat.inputDisabledPlaceholder": "Preview Only", + "chat.inputPlaceholder": "Talk to {{botName}}", + "chat.renameConversation": "Rename Conversation", + "chat.resend": "Resend", + "chat.thinking": "Thinking...", + "chat.thought": "Thought", + "compliance.gdpr": "GDPR DPA", + "compliance.iso27001": "ISO 27001:2022 Certification", + "compliance.professionalUpgradeTooltip": "Only available with a Team plan or above.", + "compliance.sandboxUpgradeTooltip": "Only available with a Professional or Team plan.", + "compliance.soc2Type1": "SOC 2 Type I Report", + "compliance.soc2Type2": "SOC 2 Type II Report", + "dataSource.add": "Add a data source", + "dataSource.configure": "Configure", + "dataSource.connect": "Connect", + "dataSource.notion.addWorkspace": "Add workspace", + "dataSource.notion.changeAuthorizedPages": "Change authorized pages", + "dataSource.notion.connected": "Connected", + "dataSource.notion.connectedWorkspace": "Connected workspace", + "dataSource.notion.description": "Using Notion as a data source for the Knowledge.", + "dataSource.notion.disconnected": "Disconnected", + "dataSource.notion.integratedAlert": "Notion is integrated via internal credential, no need to re-authorize.", + "dataSource.notion.pagesAuthorized": "Pages authorized", + "dataSource.notion.remove": "Remove", + "dataSource.notion.selector.addPages": "Add pages", + "dataSource.notion.selector.noSearchResult": "No search results", + "dataSource.notion.selector.pageSelected": "Pages Selected", + "dataSource.notion.selector.preview": "PREVIEW", + "dataSource.notion.selector.searchPages": "Search pages...", + "dataSource.notion.sync": "Sync", + "dataSource.notion.title": "Notion", + "dataSource.website.active": "Active", + "dataSource.website.configuredCrawlers": "Configured crawlers", + "dataSource.website.description": "Import content from websites using web crawler.", + "dataSource.website.inactive": "Inactive", + "dataSource.website.title": "Website", + "dataSource.website.with": "With", + "datasetMenus.documents": "Documents", + "datasetMenus.emptyTip": "This Knowledge has not been integrated within any application. Please refer to the document for guidance.", + "datasetMenus.hitTesting": "Retrieval Testing", + "datasetMenus.noRelatedApp": "No linked apps", + "datasetMenus.pipeline": "Pipeline", + "datasetMenus.relatedApp": "linked apps", + "datasetMenus.settings": "Settings", + "datasetMenus.viewDoc": "View documentation", + "dynamicSelect.error": "Loading options failed", + "dynamicSelect.loading": "Loading options...", + "dynamicSelect.noData": "No options available", + "dynamicSelect.selected": "{{count}} selected", + "environment.development": "DEVELOPMENT", + "environment.testing": "TESTING", + "error": "Error", + "errorMsg.fieldRequired": "{{field}} is required", + "errorMsg.urlError": "url should start with http:// or https://", + "feedback.content": "Feedback Content", + "feedback.placeholder": "Please describe what went wrong or how we can improve...", + "feedback.subtitle": "Please tell us what went wrong with this response", + "feedback.title": "Provide Feedback", + "fileUploader.fileExtensionBlocked": "This file type is blocked for security reasons", + "fileUploader.fileExtensionNotSupport": "File extension not supported", + "fileUploader.pasteFileLink": "Paste file link", + "fileUploader.pasteFileLinkInputPlaceholder": "Enter URL...", + "fileUploader.pasteFileLinkInvalid": "Invalid file link", + "fileUploader.uploadDisabled": "File upload is disabled", + "fileUploader.uploadFromComputer": "Local upload", + "fileUploader.uploadFromComputerLimit": "Upload {{type}} cannot exceed {{size}}", + "fileUploader.uploadFromComputerReadError": "File reading failed, please try again.", + "fileUploader.uploadFromComputerUploadError": "File upload failed, please upload again.", + "imageInput.browse": "browse", + "imageInput.dropImageHere": "Drop your image here, or", + "imageInput.supportedFormats": "Supports PNG, JPG, JPEG, WEBP and GIF", + "imageUploader.imageUpload": "Image Upload", + "imageUploader.pasteImageLink": "Paste image link", + "imageUploader.pasteImageLinkInputPlaceholder": "Paste image link here", + "imageUploader.pasteImageLinkInvalid": "Invalid image link", + "imageUploader.uploadFromComputer": "Upload from Computer", + "imageUploader.uploadFromComputerLimit": "Upload images cannot exceed {{size}} MB", + "imageUploader.uploadFromComputerReadError": "Image reading failed, please try again.", + "imageUploader.uploadFromComputerUploadError": "Image upload failed, please upload again.", + "integrations.connect": "Connect", + "integrations.connected": "Connected", + "integrations.github": "GitHub", + "integrations.githubAccount": "Login with GitHub account", + "integrations.google": "Google", + "integrations.googleAccount": "Login with Google account", + "label.optional": "(optional)", + "language.displayLanguage": "Display Language", + "language.timezone": "Time Zone", + "license.expiring": "Expiring in one day", + "license.expiring_plural": "Expiring in {{count}} days", + "license.unlimited": "Unlimited", + "loading": "Loading", + "members.admin": "Admin", + "members.adminTip": "Can build apps & manage team settings", + "members.builder": "Builder", + "members.builderTip": "Can build & edit own apps", + "members.datasetOperator": "Knowledge Admin", + "members.datasetOperatorTip": "Only can manage the knowledge base", + "members.deleteMember": "Delete Member", + "members.disInvite": "Cancel the invitation", + "members.editor": "Editor", + "members.editorTip": "Can build & edit apps", + "members.email": "Email", + "members.emailInvalid": "Invalid Email Format", + "members.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.", + "members.emailPlaceholder": "Please input emails", + "members.failedInvitationEmails": "Below users were not invited successfully", + "members.invitationLink": "Invitation Link", + "members.invitationSent": "Invitation sent", + "members.invitationSentTip": "Invitation sent, and they can sign in to Dify to access your team data.", + "members.invite": "Add", + "members.inviteTeamMember": "Add team member", + "members.inviteTeamMemberTip": "They can access your team data directly after signing in.", + "members.invitedAsRole": "Invited as {{role}} user", + "members.lastActive": "LAST ACTIVE", + "members.name": "NAME", + "members.normal": "Normal", + "members.normalTip": "Only can use apps, can not build apps", + "members.ok": "OK", + "members.owner": "Owner", + "members.pending": "Pending...", + "members.removeFromTeam": "Remove from team", + "members.removeFromTeamTip": "Will remove team access", + "members.role": "ROLES", + "members.sendInvite": "Send Invite", + "members.setAdmin": "Set as administrator", + "members.setBuilder": "Set as builder", + "members.setEditor": "Set as editor", + "members.setMember": "Set to ordinary member", + "members.team": "Team", + "members.transferModal.codeLabel": "Verification code", + "members.transferModal.codePlaceholder": "Paste the 6-digit code", + "members.transferModal.continue": "Continue", + "members.transferModal.resend": "Resend", + "members.transferModal.resendCount": "Resend in {{count}}s", + "members.transferModal.resendTip": "Didn't receive a code?", + "members.transferModal.sendTip": "If you continue, we'll send a verification code to {{email}} for re-authentication.", + "members.transferModal.sendVerifyCode": "Send verification code", + "members.transferModal.title": "Transfer workspace ownership", + "members.transferModal.transfer": "Transfer workspace ownership", + "members.transferModal.transferLabel": "Transfer workspace ownership to", + "members.transferModal.transferPlaceholder": "Select a workspace member…", + "members.transferModal.verifyContent": "Your current email is {{email}}.", + "members.transferModal.verifyContent2": "We'll send a temporary verification code to this email for re-authentication.", + "members.transferModal.verifyEmail": "Verify your current email", + "members.transferModal.warning": "You're about to transfer ownership of “{{workspace}}”. This takes effect immediately and can't be undone.", + "members.transferModal.warningTip": "You'll become an admin member, and the new owner will have full control.", + "members.transferOwnership": "Transfer Ownership", + "members.you": "(You)", + "menus.account": "Account", + "menus.appDetail": "App Detail", + "menus.apps": "Studio", + "menus.datasets": "Knowledge", + "menus.datasetsTips": "COMING SOON: Import your own text data or write data in real-time via Webhook for LLM context enhancement.", + "menus.explore": "Explore", + "menus.exploreMarketplace": "Explore Marketplace", + "menus.newApp": "New App", + "menus.newDataset": "Create Knowledge", + "menus.plugins": "Plugins", + "menus.pluginsTips": "Integrate third-party plugins or create ChatGPT-compatible AI-Plugins.", + "menus.status": "beta", + "menus.tools": "Tools", + "model.addMoreModel": "Go to settings to add more models", + "model.capabilities": "MultiModal Capabilities", + "model.params.frequency_penalty": "Frequency penalty", + "model.params.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.", + "model.params.maxTokenSettingTip": "Your max token setting is high, potentially limiting space for prompts, queries, and data. Consider setting it below 2/3.", + "model.params.max_tokens": "Max token", + "model.params.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)", + "model.params.presence_penalty": "Presence penalty", + "model.params.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.", + "model.params.setToCurrentModelMaxTokenTip": "Max token is updated to the 80% maximum token of the current model {{maxToken}}.", + "model.params.stop_sequences": "Stop sequences", + "model.params.stop_sequencesPlaceholder": "Enter sequence and press Tab", + "model.params.stop_sequencesTip": "Up to four sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.", + "model.params.temperature": "Temperature", + "model.params.temperatureTip": "Controls randomness: Lowering results in less random completions. As the temperature approaches zero, the model will become deterministic and repetitive.", + "model.params.top_p": "Top P", + "model.params.top_pTip": "Controls diversity via nucleus sampling: 0.5 means half of all likelihood-weighted options are considered.", + "model.settingsLink": "Model Provider Settings", + "model.tone.Balanced": "Balanced", + "model.tone.Creative": "Creative", + "model.tone.Custom": "Custom", + "model.tone.Precise": "Precise", + "modelName.claude-2": "Claude-2", + "modelName.claude-instant-1": "Claude-Instant", + "modelName.gpt-3.5-turbo": "GPT-3.5-Turbo", + "modelName.gpt-3.5-turbo-16k": "GPT-3.5-Turbo-16K", + "modelName.gpt-4": "GPT-4", + "modelName.gpt-4-32k": "GPT-4-32K", + "modelName.text-davinci-003": "Text-Davinci-003", + "modelName.text-embedding-ada-002": "Text-Embedding-Ada-002", + "modelName.whisper-1": "Whisper-1", + "modelProvider.addApiKey": "Add your API key", + "modelProvider.addConfig": "Add Config", + "modelProvider.addModel": "Add Model", + "modelProvider.addMoreModelProvider": "ADD MORE MODEL PROVIDER", + "modelProvider.apiKey": "API-KEY", + "modelProvider.apiKeyRateLimit": "Rate limit was reached, available after {{seconds}}s", + "modelProvider.apiKeyStatusNormal": "APIKey status is normal", + "modelProvider.auth.addApiKey": "Add API Key", + "modelProvider.auth.addCredential": "Add credential", + "modelProvider.auth.addModel": "Add model", + "modelProvider.auth.addModelCredential": "Add model credential", + "modelProvider.auth.addNewModel": "Add new model", + "modelProvider.auth.addNewModelCredential": "Add new model credential", + "modelProvider.auth.apiKeyModal.addModel": "Add model", + "modelProvider.auth.apiKeyModal.desc": "After configuring credentials, all members within the workspace can use this model when orchestrating applications.", + "modelProvider.auth.apiKeyModal.title": "API Key Authorization Configuration", + "modelProvider.auth.apiKeys": "API Keys", + "modelProvider.auth.authRemoved": "Auth removed", + "modelProvider.auth.authorizationError": "Authorization error", + "modelProvider.auth.configLoadBalancing": "Config Load Balancing", + "modelProvider.auth.configModel": "Config model", + "modelProvider.auth.credentialRemoved": "Credential removed", + "modelProvider.auth.customModelCredentials": "Custom Model Credentials", + "modelProvider.auth.customModelCredentialsDeleteTip": "Credential is in use and cannot be deleted", + "modelProvider.auth.editModelCredential": "Edit model credential", + "modelProvider.auth.manageCredentials": "Manage Credentials", + "modelProvider.auth.modelCredential": "Model credential", + "modelProvider.auth.modelCredentials": "Model credentials", + "modelProvider.auth.providerManaged": "Provider managed", + "modelProvider.auth.providerManagedTip": "The current configuration is hosted by the provider.", + "modelProvider.auth.removeModel": "Remove Model", + "modelProvider.auth.selectModelCredential": "Select a model credential", + "modelProvider.auth.specifyModelCredential": "Specify model credential", + "modelProvider.auth.specifyModelCredentialTip": "Use a configured model credential.", + "modelProvider.auth.unAuthorized": "Unauthorized", + "modelProvider.buyQuota": "Buy Quota", + "modelProvider.callTimes": "Call times", + "modelProvider.card.buyQuota": "Buy Quota", + "modelProvider.card.callTimes": "Call times", + "modelProvider.card.modelAPI": "{{modelName}} models are using the API Key.", + "modelProvider.card.modelNotSupported": "{{modelName}} models are not installed.", + "modelProvider.card.modelSupported": "{{modelName}} models are using this quota.", + "modelProvider.card.onTrial": "On Trial", + "modelProvider.card.paid": "Paid", + "modelProvider.card.priorityUse": "Priority use", + "modelProvider.card.quota": "QUOTA", + "modelProvider.card.quotaExhausted": "Quota exhausted", + "modelProvider.card.removeKey": "Remove API Key", + "modelProvider.card.tip": "Message Credits supports models from {{modelNames}}. Priority will be given to the paid quota. The free quota will be used after the paid quota is exhausted.", + "modelProvider.card.tokens": "Tokens", + "modelProvider.collapse": "Collapse", + "modelProvider.config": "Config", + "modelProvider.configLoadBalancing": "Config Load Balancing", + "modelProvider.configureTip": "Set up api-key or add model to use", + "modelProvider.confirmDelete": "Confirm deletion?", + "modelProvider.credits": "Message Credits", + "modelProvider.defaultConfig": "Default Config", + "modelProvider.deprecated": "Deprecated", + "modelProvider.discoverMore": "Discover more in ", + "modelProvider.editConfig": "Edit Config", + "modelProvider.embeddingModel.key": "Embedding Model", + "modelProvider.embeddingModel.required": "Embedding Model is required", + "modelProvider.embeddingModel.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.", + "modelProvider.emptyProviderTip": "Please install a model provider first.", + "modelProvider.emptyProviderTitle": "Model provider not set up", + "modelProvider.encrypted.back": " technology.", + "modelProvider.encrypted.front": "Your API KEY will be encrypted and stored using", + "modelProvider.featureSupported": "{{feature}} supported", + "modelProvider.freeQuota.howToEarn": "How to earn", + "modelProvider.getFreeTokens": "Get free Tokens", + "modelProvider.installDataSourceProvider": "Install data source providers", + "modelProvider.installProvider": "Install model providers", + "modelProvider.invalidApiKey": "Invalid API key", + "modelProvider.item.deleteDesc": "{{modelName}} are being used as system reasoning models. Some functions will not be available after removal. Please confirm.", + "modelProvider.item.freeQuota": "FREE QUOTA", + "modelProvider.loadBalancing": "Load balancing", + "modelProvider.loadBalancingDescription": "Configure multiple credentials for the model and invoke them automatically. ", + "modelProvider.loadBalancingHeadline": "Load Balancing", + "modelProvider.loadBalancingInfo": "By default, load balancing uses the Round-robin strategy. If rate limiting is triggered, a 1-minute cooldown period will be applied.", + "modelProvider.loadBalancingLeastKeyWarning": "To enable load balancing at least 2 keys must be enabled.", + "modelProvider.loadPresets": "Load Presets", + "modelProvider.model": "Model", + "modelProvider.modelAndParameters": "Model and Parameters", + "modelProvider.modelHasBeenDeprecated": "This model has been deprecated", + "modelProvider.models": "Models", + "modelProvider.modelsNum": "{{num}} Models", + "modelProvider.noModelFound": "No model found for {{model}}", + "modelProvider.notConfigured": "The system model has not yet been fully configured", + "modelProvider.parameters": "PARAMETERS", + "modelProvider.parametersInvalidRemoved": "Some parameters are invalid and have been removed", + "modelProvider.priorityUsing": "Prioritize using", + "modelProvider.providerManaged": "Provider managed", + "modelProvider.providerManagedDescription": "Use the single set of credentials provided by the model provider.", + "modelProvider.quota": "Quota", + "modelProvider.quotaTip": "Remaining available free tokens", + "modelProvider.rerankModel.key": "Rerank Model", + "modelProvider.rerankModel.tip": "Rerank model will reorder the candidate document list based on the semantic match with user query, improving the results of semantic ranking", + "modelProvider.resetDate": "Reset on {{date}}", + "modelProvider.searchModel": "Search model", + "modelProvider.selectModel": "Select your model", + "modelProvider.selector.emptySetting": "Please go to settings to configure", + "modelProvider.selector.emptyTip": "No available models", + "modelProvider.selector.rerankTip": "Please set up the Rerank model", + "modelProvider.selector.tip": "This model has been removed. Please add a model or select another model.", + "modelProvider.setupModelFirst": "Please set up your model first", + "modelProvider.showModels": "Show Models", + "modelProvider.showModelsNum": "Show {{num}} Models", + "modelProvider.showMoreModelProvider": "Show more model provider", + "modelProvider.speechToTextModel.key": "Speech-to-Text Model", + "modelProvider.speechToTextModel.tip": "Set the default model for speech-to-text input in conversation.", + "modelProvider.systemModelSettings": "System Model Settings", + "modelProvider.systemModelSettingsLink": "Why is it necessary to set up a system model?", + "modelProvider.systemReasoningModel.key": "System Reasoning Model", + "modelProvider.systemReasoningModel.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.", + "modelProvider.toBeConfigured": "To be configured", + "modelProvider.ttsModel.key": "Text-to-Speech Model", + "modelProvider.ttsModel.tip": "Set the default model for text-to-speech input in conversation.", + "modelProvider.upgradeForLoadBalancing": "Upgrade your plan to enable Load Balancing.", + "noData": "No data", + "operation.add": "Add", + "operation.added": "Added", + "operation.audioSourceUnavailable": "AudioSource is unavailable", + "operation.back": "Back", + "operation.cancel": "Cancel", + "operation.change": "Change", + "operation.clear": "Clear", + "operation.close": "Close", + "operation.config": "Config", + "operation.confirm": "Confirm", + "operation.confirmAction": "Please confirm your action.", + "operation.copied": "Copied", + "operation.copy": "Copy", + "operation.copyImage": "Copy Image", + "operation.create": "Create", + "operation.deSelectAll": "Deselect All", + "operation.delete": "Delete", + "operation.deleteApp": "Delete App", + "operation.deleteConfirmTitle": "Delete?", + "operation.download": "Download", + "operation.downloadFailed": "Download failed. Please try again later.", + "operation.downloadSuccess": "Download Completed.", + "operation.duplicate": "Duplicate", + "operation.edit": "Edit", + "operation.format": "Format", + "operation.getForFree": "Get for free", + "operation.imageCopied": "Image copied", + "operation.imageDownloaded": "Image downloaded", + "operation.in": "in", + "operation.learnMore": "Learn More", + "operation.lineBreak": "Line break", + "operation.log": "Log", + "operation.more": "More", + "operation.no": "No", + "operation.noSearchCount": "0 {{content}}", + "operation.noSearchResults": "No {{content}} were found", + "operation.now": "Now", + "operation.ok": "OK", + "operation.openInNewTab": "Open in new tab", + "operation.params": "Params", + "operation.refresh": "Restart", + "operation.regenerate": "Regenerate", + "operation.reload": "Reload", + "operation.remove": "Remove", + "operation.rename": "Rename", + "operation.reset": "Reset", + "operation.resetKeywords": "Reset keywords", + "operation.save": "Save", + "operation.saveAndEnable": "Save & Enable", + "operation.saveAndRegenerate": "Save & Regenerate Child Chunks", + "operation.saving": "Saving...", + "operation.search": "Search", + "operation.searchCount": "Find {{count}} {{content}}", + "operation.selectAll": "Select All", + "operation.selectCount": "{{count}} Selected", + "operation.send": "Send", + "operation.settings": "Settings", + "operation.setup": "Setup", + "operation.skip": "Skip", + "operation.submit": "Submit", + "operation.sure": "I'm sure", + "operation.view": "View", + "operation.viewDetails": "View Details", + "operation.viewMore": "VIEW MORE", + "operation.yes": "Yes", + "operation.zoomIn": "Zoom In", + "operation.zoomOut": "Zoom Out", + "pagination.perPage": "Items per page", + "placeholder.input": "Please enter", + "placeholder.search": "Search...", + "placeholder.select": "Please select", + "plugin.serpapi.apiKey": "API Key", + "plugin.serpapi.apiKeyPlaceholder": "Enter your API key", + "plugin.serpapi.keyFrom": "Get your SerpAPI key from SerpAPI Account Page", + "promptEditor.context.item.desc": "Insert context template", + "promptEditor.context.item.title": "Context", + "promptEditor.context.modal.add": "Add Context ", + "promptEditor.context.modal.footer": "You can manage contexts in the Context section below.", + "promptEditor.context.modal.title": "{{num}} Knowledge in Context", + "promptEditor.existed": "Already exists in the prompt", + "promptEditor.history.item.desc": "Insert historical message template", + "promptEditor.history.item.title": "Conversation History", + "promptEditor.history.modal.assistant": "Hello! How can I assist you today?", + "promptEditor.history.modal.edit": "Edit Conversation Role Names", + "promptEditor.history.modal.title": "EXAMPLE", + "promptEditor.history.modal.user": "Hello", + "promptEditor.placeholder": "Write your prompt word here, enter '{' to insert a variable, enter '/' to insert a prompt content block", + "promptEditor.query.item.desc": "Insert user query template", + "promptEditor.query.item.title": "Query", + "promptEditor.requestURL.item.desc": "Insert request URL", + "promptEditor.requestURL.item.title": "Request URL", + "promptEditor.variable.item.desc": "Insert Variables & External Tools", + "promptEditor.variable.item.title": "Variables & External Tools", + "promptEditor.variable.modal.add": "New variable", + "promptEditor.variable.modal.addTool": "New tool", + "promptEditor.variable.outputToolDisabledItem.desc": "Insert Variables", + "promptEditor.variable.outputToolDisabledItem.title": "Variables", + "provider.addKey": "Add Key", + "provider.anthropic.enableTip": "To enable the Anthropic model, you need to bind to OpenAI or Azure OpenAI Service first.", + "provider.anthropic.keyFrom": "Get your API key from Anthropic", + "provider.anthropic.notEnabled": "Not enabled", + "provider.anthropic.using": "The embedding capability is using", + "provider.anthropicHosted.anthropicHosted": "Anthropic Claude", + "provider.anthropicHosted.callTimes": "Call times", + "provider.anthropicHosted.close": "Close", + "provider.anthropicHosted.desc": "Powerful model, which excels at a wide range of tasks from sophisticated dialogue and creative content generation to detailed instruction.", + "provider.anthropicHosted.exhausted": "QUOTA EXHAUSTED", + "provider.anthropicHosted.onTrial": "ON TRIAL", + "provider.anthropicHosted.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.", + "provider.anthropicHosted.useYourModel": "Currently using own Model Provider.", + "provider.anthropicHosted.usedUp": "Trial quota used up. Add own Model Provider.", + "provider.apiKey": "API Key", + "provider.apiKeyExceedBill": "This API KEY has no quota available, please read", + "provider.azure.apiBase": "API Base", + "provider.azure.apiBasePlaceholder": "The API Base URL of your Azure OpenAI Endpoint.", + "provider.azure.apiKey": "API Key", + "provider.azure.apiKeyPlaceholder": "Enter your API key here", + "provider.azure.helpTip": "Learn Azure OpenAI Service", + "provider.comingSoon": "Coming Soon", + "provider.editKey": "Edit", + "provider.encrypted.back": " technology.", + "provider.encrypted.front": "Your API KEY will be encrypted and stored using", + "provider.enterYourKey": "Enter your API key here", + "provider.invalidApiKey": "Invalid API key", + "provider.invalidKey": "Invalid OpenAI API key", + "provider.openaiHosted.callTimes": "Call times", + "provider.openaiHosted.close": "Close", + "provider.openaiHosted.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.", + "provider.openaiHosted.exhausted": "QUOTA EXHAUSTED", + "provider.openaiHosted.onTrial": "ON TRIAL", + "provider.openaiHosted.openaiHosted": "Hosted OpenAI", + "provider.openaiHosted.useYourModel": "Currently using own Model Provider.", + "provider.openaiHosted.usedUp": "Trial quota used up. Add own Model Provider.", + "provider.saveFailed": "Save api key failed", + "provider.validatedError": "Validation failed: ", + "provider.validating": "Validating key...", + "settings.account": "My account", + "settings.accountGroup": "GENERAL", + "settings.apiBasedExtension": "API Extension", + "settings.billing": "Billing", + "settings.dataSource": "Data Source", + "settings.generalGroup": "GENERAL", + "settings.integrations": "Integrations", + "settings.language": "Language", + "settings.members": "Members", + "settings.plugin": "Plugins", + "settings.provider": "Model Provider", + "settings.workplaceGroup": "WORKSPACE", + "tag.addNew": "Add new tag", + "tag.addTag": "Add tags", + "tag.create": "Create", + "tag.created": "Tag created successfully", + "tag.delete": "Delete tag", + "tag.deleteTip": "The tag is being used, delete it?", + "tag.editTag": "Edit tags", + "tag.failed": "Tag creation failed", + "tag.manageTags": "Manage Tags", + "tag.noTag": "No tags", + "tag.noTagYet": "No tags yet", + "tag.placeholder": "All Tags", + "tag.selectorPlaceholder": "Type to search or create", + "theme.auto": "system", + "theme.dark": "dark", + "theme.light": "light", + "theme.theme": "Theme", + "unit.char": "chars", + "userProfile.about": "About", + "userProfile.community": "Community", + "userProfile.compliance": "Compliance", + "userProfile.contactUs": "Contact Us", + "userProfile.createWorkspace": "Create Workspace", + "userProfile.emailSupport": "Email Support", + "userProfile.forum": "Forum", + "userProfile.github": "GitHub", + "userProfile.helpCenter": "View Docs", + "userProfile.logout": "Log out", + "userProfile.roadmap": "Roadmap", + "userProfile.settings": "Settings", + "userProfile.support": "Support", + "userProfile.workspace": "Workspace", + "voice.language.arTN": "Tunisian Arabic", + "voice.language.deDE": "German", + "voice.language.enUS": "English", + "voice.language.esES": "Spanish", + "voice.language.faIR": "Farsi", + "voice.language.frFR": "French", + "voice.language.hiIN": "Hindi", + "voice.language.idID": "Indonesian", + "voice.language.itIT": "Italian", + "voice.language.jaJP": "Japanese", + "voice.language.koKR": "Korean", + "voice.language.plPL": "Polish", + "voice.language.ptBR": "Portuguese", + "voice.language.roRO": "Romanian", + "voice.language.ruRU": "Russian", + "voice.language.slSI": "Slovenian", + "voice.language.thTH": "Thai", + "voice.language.trTR": "Türkçe", + "voice.language.ukUA": "Ukrainian", + "voice.language.viVN": "Vietnamese", + "voice.language.zhHans": "Chinese", + "voice.language.zhHant": "Traditional Chinese", + "voiceInput.converting": "Converting to text...", + "voiceInput.notAllow": "microphone not authorized", + "voiceInput.speaking": "Speak now...", + "you": "You" +} diff --git a/web/i18n/nl-NL/custom.json b/web/i18n/nl-NL/custom.json new file mode 100644 index 0000000000..a25f3f43ba --- /dev/null +++ b/web/i18n/nl-NL/custom.json @@ -0,0 +1,22 @@ +{ + "app.changeLogoTip": "SVG or PNG format with a minimum size of 80x80px", + "app.title": "Customize app header brand", + "apply": "Apply", + "change": "Change", + "custom": "Customization", + "customize.contactUs": " contact us ", + "customize.prefix": "To customize the brand logo within the app, please", + "customize.suffix": "to upgrade to the Enterprise edition.", + "restore": "Restore Defaults", + "upgradeTip.des": "Upgrade your plan to customize your brand", + "upgradeTip.prefix": "Upgrade your plan to", + "upgradeTip.suffix": "customize your brand.", + "upgradeTip.title": "Upgrade your plan", + "upload": "Upload", + "uploadedFail": "Image upload failed, please re-upload.", + "uploading": "Uploading", + "webapp.changeLogo": "Change Powered by Brand Image", + "webapp.changeLogoTip": "SVG or PNG format with a minimum size of 40x40px", + "webapp.removeBrand": "Remove Powered by Dify", + "webapp.title": "Customize web app brand" +} diff --git a/web/i18n/nl-NL/dataset-creation.json b/web/i18n/nl-NL/dataset-creation.json new file mode 100644 index 0000000000..e544aaa097 --- /dev/null +++ b/web/i18n/nl-NL/dataset-creation.json @@ -0,0 +1,185 @@ +{ + "error.unavailable": "This Knowledge is not available", + "firecrawl.apiKeyPlaceholder": "API key from firecrawl.dev", + "firecrawl.configFirecrawl": "Configure 🔥Firecrawl", + "firecrawl.getApiKeyLinkText": "Get your API key from firecrawl.dev", + "jinaReader.apiKeyPlaceholder": "API key from jina.ai", + "jinaReader.configJinaReader": "Configure Jina Reader", + "jinaReader.getApiKeyLinkText": "Get your free API key at jina.ai", + "otherDataSource.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.", + "otherDataSource.learnMore": "Learn more", + "otherDataSource.title": "Connect to other data sources?", + "stepOne.button": "Next", + "stepOne.cancel": "Cancel", + "stepOne.connect": "Go to connect", + "stepOne.dataSourceType.file": "Import from file", + "stepOne.dataSourceType.notion": "Sync from Notion", + "stepOne.dataSourceType.web": "Sync from website", + "stepOne.emptyDatasetCreation": "I want to create an empty Knowledge", + "stepOne.filePreview": "File Preview", + "stepOne.modal.cancelButton": "Cancel", + "stepOne.modal.confirmButton": "Create", + "stepOne.modal.failed": "Creation failed", + "stepOne.modal.input": "Knowledge name", + "stepOne.modal.nameLengthInvalid": "Name must be between 1 to 40 characters", + "stepOne.modal.nameNotEmpty": "Name cannot be empty", + "stepOne.modal.placeholder": "Please input", + "stepOne.modal.tip": "An empty Knowledge will contain no documents, and you can upload documents any time.", + "stepOne.modal.title": "Create an empty Knowledge", + "stepOne.notionSyncTip": "To sync with Notion, connection to Notion must be established first.", + "stepOne.notionSyncTitle": "Notion is not connected", + "stepOne.pagePreview": "Page Preview", + "stepOne.uploader.browse": "Browse", + "stepOne.uploader.button": "Drag and drop file or folder, or", + "stepOne.uploader.buttonSingleFile": "Drag and drop file, or", + "stepOne.uploader.cancel": "Cancel", + "stepOne.uploader.change": "Change", + "stepOne.uploader.failed": "Upload failed", + "stepOne.uploader.tip": "Supports {{supportTypes}}. Max {{batchCount}} in a batch and {{size}} MB each. Max total {{totalCount}} files.", + "stepOne.uploader.title": "Upload file", + "stepOne.uploader.validation.count": "Multiple files not supported", + "stepOne.uploader.validation.filesNumber": "You have reached the batch upload limit of {{filesNumber}}.", + "stepOne.uploader.validation.size": "File too large. Maximum is {{size}}MB", + "stepOne.uploader.validation.typeError": "File type not supported", + "stepOne.website.chooseProvider": "Select a provider", + "stepOne.website.configure": "Configure", + "stepOne.website.configureFirecrawl": "Configure Firecrawl", + "stepOne.website.configureJinaReader": "Configure Jina Reader", + "stepOne.website.configureWatercrawl": "Configure Watercrawl", + "stepOne.website.crawlSubPage": "Crawl sub-pages", + "stepOne.website.exceptionErrorTitle": "An exception occurred while running crawling job:", + "stepOne.website.excludePaths": "Exclude paths", + "stepOne.website.extractOnlyMainContent": "Extract only main content (no headers, navs, footers, etc.)", + "stepOne.website.fireCrawlNotConfigured": "Firecrawl is not configured", + "stepOne.website.fireCrawlNotConfiguredDescription": "Configure Firecrawl with API key to use it.", + "stepOne.website.firecrawlDoc": "Firecrawl docs", + "stepOne.website.firecrawlTitle": "Extract web content with 🔥Firecrawl", + "stepOne.website.includeOnlyPaths": "Include only paths", + "stepOne.website.jinaReaderDoc": "Learn more about Jina Reader", + "stepOne.website.jinaReaderDocLink": "https://jina.ai/reader", + "stepOne.website.jinaReaderNotConfigured": "Jina Reader is not configured", + "stepOne.website.jinaReaderNotConfiguredDescription": "Set up Jina Reader by entering your free API key for access.", + "stepOne.website.jinaReaderTitle": "Convert the entire site to Markdown", + "stepOne.website.limit": "Limit", + "stepOne.website.maxDepth": "Max depth", + "stepOne.website.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.", + "stepOne.website.options": "Options", + "stepOne.website.preview": "Preview", + "stepOne.website.resetAll": "Reset All", + "stepOne.website.run": "Run", + "stepOne.website.running": "Running", + "stepOne.website.scrapTimeInfo": "Scraped {{total}} pages in total within {{time}}s", + "stepOne.website.selectAll": "Select All", + "stepOne.website.totalPageScraped": "Total pages scraped:", + "stepOne.website.unknownError": "Unknown error", + "stepOne.website.useSitemap": "Use sitemap", + "stepOne.website.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.", + "stepOne.website.waterCrawlNotConfigured": "Watercrawl is not configured", + "stepOne.website.waterCrawlNotConfiguredDescription": "Configure Watercrawl with API key to use it.", + "stepOne.website.watercrawlDoc": "Watercrawl docs", + "stepOne.website.watercrawlTitle": "Extract web content with Watercrawl", + "stepThree.additionP1": "The document has been uploaded to the Knowledge", + "stepThree.additionP2": ", you can find it in the document list of the Knowledge.", + "stepThree.additionTitle": "🎉 Document uploaded", + "stepThree.creationContent": "We automatically named the Knowledge, you can modify it at any time.", + "stepThree.creationTitle": "🎉 Knowledge created", + "stepThree.label": "Knowledge name", + "stepThree.modelButtonCancel": "Cancel", + "stepThree.modelButtonConfirm": "Confirm", + "stepThree.modelContent": "If you need to resume processing later, you will continue from where you left off.", + "stepThree.modelTitle": "Are you sure to stop embedding?", + "stepThree.navTo": "Go to document", + "stepThree.resume": "Resume processing", + "stepThree.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.", + "stepThree.sideTipTitle": "What's next", + "stepThree.stop": "Stop processing", + "stepTwo.QALanguage": "Segment using", + "stepTwo.QATip": "Enable this option will consume more tokens", + "stepTwo.QATitle": "Segmenting in Question & Answer format", + "stepTwo.auto": "Automatic", + "stepTwo.autoDescription": "Automatically set chunk and preprocessing rules. Unfamiliar users are recommended to select this.", + "stepTwo.calculating": "Calculating...", + "stepTwo.cancel": "Cancel", + "stepTwo.characters": "characters", + "stepTwo.childChunkForRetrieval": "Child-chunk for Retrieval", + "stepTwo.click": "Go to settings", + "stepTwo.custom": "Custom", + "stepTwo.customDescription": "Customize chunks rules, chunks length, and preprocessing rules, etc.", + "stepTwo.datasetSettingLink": "Knowledge settings.", + "stepTwo.economical": "Economical", + "stepTwo.economicalTip": "Using 10 keywords per chunk for retrieval, no tokens are consumed at the expense of reduced retrieval accuracy.", + "stepTwo.estimateCost": "Estimation", + "stepTwo.estimateSegment": "Estimated chunks", + "stepTwo.fileSource": "Preprocess documents", + "stepTwo.fileUnit": " files", + "stepTwo.fullDoc": "Full Doc", + "stepTwo.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.", + "stepTwo.general": "General", + "stepTwo.generalTip": "General text chunking mode, the chunks retrieved and recalled are the same.", + "stepTwo.highQualityTip": "Once finishing embedding in High Quality mode, reverting to Economical mode is not available.", + "stepTwo.indexMode": "Index Method", + "stepTwo.indexSettingTip": "To change the index method & embedding model, please go to the ", + "stepTwo.maxLength": "Maximum chunk length", + "stepTwo.maxLengthCheck": "Maximum chunk length should be less than {{limit}}", + "stepTwo.nextStep": "Save & Process", + "stepTwo.notAvailableForParentChild": "Not available for Parent-child Index", + "stepTwo.notAvailableForQA": "Not available for Q&A Index", + "stepTwo.notionSource": "Preprocess pages", + "stepTwo.notionUnit": " pages", + "stepTwo.other": "and other ", + "stepTwo.overlap": "Chunk overlap", + "stepTwo.overlapCheck": "chunk overlap should not bigger than maximum chunk length", + "stepTwo.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.", + "stepTwo.paragraph": "Paragraph", + "stepTwo.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.", + "stepTwo.parentChild": "Parent-child", + "stepTwo.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.", + "stepTwo.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.", + "stepTwo.parentChildTip": "When using the parent-child mode, the child-chunk is used for retrieval and the parent-chunk is used for recall as context.", + "stepTwo.parentChunkForContext": "Parent-chunk for Context", + "stepTwo.preview": "Preview", + "stepTwo.previewButton": "Switching to Q&A format", + "stepTwo.previewChunk": "Preview Chunk", + "stepTwo.previewChunkCount": "{{count}} Estimated chunks", + "stepTwo.previewChunkTip": "Click the 'Preview Chunk' button on the left to load the preview", + "stepTwo.previewSwitchTipEnd": " consume additional tokens", + "stepTwo.previewSwitchTipStart": "The current chunk preview is in text format, switching to a question-and-answer format preview will", + "stepTwo.previewTitle": "Preview", + "stepTwo.previewTitleButton": "Preview", + "stepTwo.previousStep": "Previous step", + "stepTwo.qaSwitchHighQualityTipContent": "Currently, only high-quality index method supports Q&A format chunking. Would you like to switch to high-quality mode?", + "stepTwo.qaSwitchHighQualityTipTitle": "Q&A Format Requires High-quality Indexing Method", + "stepTwo.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.", + "stepTwo.qualified": "High Quality", + "stepTwo.qualifiedTip": "Calling the embedding model to process documents for more precise retrieval helps LLM generate high-quality answers.", + "stepTwo.recommend": "Recommend", + "stepTwo.removeExtraSpaces": "Replace consecutive spaces, newlines and tabs", + "stepTwo.removeStopwords": "Remove stopwords such as \"a\", \"an\", \"the\"", + "stepTwo.removeUrlEmails": "Delete all URLs and email addresses", + "stepTwo.reset": "Reset", + "stepTwo.retrievalSettingTip": "To change the retrieval setting, please go to the ", + "stepTwo.rules": "Text Pre-processing Rules", + "stepTwo.save": "Save & Process", + "stepTwo.segmentCount": "chunks", + "stepTwo.segmentation": "Chunk Settings", + "stepTwo.separator": "Delimiter", + "stepTwo.separatorPlaceholder": "\\n\\n for paragraphs; \\n for lines", + "stepTwo.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. ***).", + "stepTwo.sideTipP1": "When processing text data, chunk and cleaning are two important preprocessing steps.", + "stepTwo.sideTipP2": "Segmentation splits long text into paragraphs so models can understand better. This improves the quality and relevance of model results.", + "stepTwo.sideTipP3": "Cleaning removes unnecessary characters and formats, making Knowledge cleaner and easier to parse.", + "stepTwo.sideTipP4": "Proper chunk and cleaning improve model performance, providing more accurate and valuable results.", + "stepTwo.sideTipTitle": "Why chunk and preprocess?", + "stepTwo.switch": "Switch", + "stepTwo.useQALanguage": "Chunk using Q&A format in", + "stepTwo.warning": "Please set up the model provider API key first.", + "stepTwo.webpageUnit": " pages", + "stepTwo.websiteSource": "Preprocess website", + "steps.header.fallbackRoute": "Knowledge", + "steps.one": "Data Source", + "steps.three": "Execute & Finish", + "steps.two": "Document Processing", + "watercrawl.apiKeyPlaceholder": "API key from watercrawl.dev", + "watercrawl.configWatercrawl": "Configure Watercrawl", + "watercrawl.getApiKeyLinkText": "Get your API key from watercrawl.dev" +} diff --git a/web/i18n/nl-NL/dataset-documents.json b/web/i18n/nl-NL/dataset-documents.json new file mode 100644 index 0000000000..a95d3df444 --- /dev/null +++ b/web/i18n/nl-NL/dataset-documents.json @@ -0,0 +1,339 @@ +{ + "embedding.automatic": "Automatic", + "embedding.childMaxTokens": "Child", + "embedding.completed": "Embedding completed", + "embedding.custom": "Custom", + "embedding.docName": "Preprocessing document", + "embedding.economy": "Economy mode", + "embedding.error": "Embedding error", + "embedding.estimate": "Estimated consumption", + "embedding.hierarchical": "Parent-child", + "embedding.highQuality": "High-quality mode", + "embedding.mode": "Chunking Setting", + "embedding.parentMaxTokens": "Parent", + "embedding.pause": "Pause", + "embedding.paused": "Embedding paused", + "embedding.previewTip": "Paragraph preview will be available after embedding is complete", + "embedding.processing": "Embedding processing...", + "embedding.resume": "Resume", + "embedding.segmentLength": "Maximum Chunk Length", + "embedding.segments": "Paragraphs", + "embedding.stop": "Stop processing", + "embedding.textCleaning": "Text Preprocessing Rules", + "embedding.waiting": "Embedding waiting...", + "list.action.add": "Add a chunk", + "list.action.addButton": "Add chunk", + "list.action.archive": "Archive", + "list.action.batchAdd": "Batch add", + "list.action.delete": "Delete", + "list.action.download": "Download", + "list.action.enableWarning": "Archived file cannot be enabled", + "list.action.pause": "Pause", + "list.action.resume": "Resume", + "list.action.settings": "Chunking Settings", + "list.action.summary": "Generate summary", + "list.action.sync": "Sync", + "list.action.unarchive": "Unarchive", + "list.action.uploadFile": "Upload new file", + "list.addFile": "Add file", + "list.addPages": "Add Pages", + "list.addUrl": "Add URL", + "list.batchModal.answer": "answer", + "list.batchModal.browse": "browse", + "list.batchModal.cancel": "Cancel", + "list.batchModal.completed": "Import completed", + "list.batchModal.content": "content", + "list.batchModal.contentTitle": "chunk content", + "list.batchModal.csvUploadTitle": "Drag and drop your CSV file here, or ", + "list.batchModal.error": "Import Error", + "list.batchModal.ok": "OK", + "list.batchModal.processing": "In batch processing", + "list.batchModal.question": "question", + "list.batchModal.run": "Run Batch", + "list.batchModal.runError": "Run batch failed", + "list.batchModal.template": "Download the template here", + "list.batchModal.tip": "The CSV file must conform to the following structure:", + "list.batchModal.title": "Batch add chunks", + "list.delete.content": "If you need to resume processing later, you will continue from where you left off", + "list.delete.title": "Are you sure Delete?", + "list.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.", + "list.empty.sync.tip": "Dify will periodically download files from your Notion and complete processing.", + "list.empty.title": "There is no documentation yet", + "list.empty.upload.tip": "You can upload files, sync from the website, or from web apps like Notion, GitHub, etc.", + "list.index.all": "All", + "list.index.disable": "Disable", + "list.index.disableTip": "The file cannot be indexed", + "list.index.enable": "Enable", + "list.index.enableTip": "The file can be indexed", + "list.learnMore": "Learn more", + "list.sort.hitCount": "Retrieval Count", + "list.sort.uploadTime": "Upload Time", + "list.status.archived": "Archived", + "list.status.available": "Available", + "list.status.disabled": "Disabled", + "list.status.enabled": "Enabled", + "list.status.error": "Error", + "list.status.indexing": "Indexing", + "list.status.paused": "Paused", + "list.status.queuing": "Queuing", + "list.summary.generating": "Generating...", + "list.summary.generatingSummary": "Generating summary", + "list.summary.ready": "Summary ready", + "list.table.header.action": "ACTION", + "list.table.header.chunkingMode": "CHUNKING MODE", + "list.table.header.fileName": "NAME", + "list.table.header.hitCount": "RETRIEVAL COUNT", + "list.table.header.status": "STATUS", + "list.table.header.uploadTime": "UPLOAD TIME", + "list.table.header.words": "WORDS", + "list.table.name": "Name", + "list.table.rename": "Rename", + "list.title": "Documents", + "metadata.categoryMap.book.art": "Art", + "metadata.categoryMap.book.biography": "Biography", + "metadata.categoryMap.book.businessEconomics": "BusinessEconomics", + "metadata.categoryMap.book.childrenYoungAdults": "ChildrenYoungAdults", + "metadata.categoryMap.book.comicsGraphicNovels": "ComicsGraphicNovels", + "metadata.categoryMap.book.cooking": "Cooking", + "metadata.categoryMap.book.drama": "Drama", + "metadata.categoryMap.book.education": "Education", + "metadata.categoryMap.book.fiction": "Fiction", + "metadata.categoryMap.book.health": "Health", + "metadata.categoryMap.book.history": "History", + "metadata.categoryMap.book.other": "Other", + "metadata.categoryMap.book.philosophy": "Philosophy", + "metadata.categoryMap.book.poetry": "Poetry", + "metadata.categoryMap.book.religion": "Religion", + "metadata.categoryMap.book.science": "Science", + "metadata.categoryMap.book.selfHelp": "SelfHelp", + "metadata.categoryMap.book.socialSciences": "SocialSciences", + "metadata.categoryMap.book.technology": "Technology", + "metadata.categoryMap.book.travel": "Travel", + "metadata.categoryMap.businessDoc.contractsAgreements": "Contracts & Agreements", + "metadata.categoryMap.businessDoc.designDocument": "Design Document", + "metadata.categoryMap.businessDoc.emailCorrespondence": "Email Correspondence", + "metadata.categoryMap.businessDoc.employeeHandbook": "Employee Handbook", + "metadata.categoryMap.businessDoc.financialReport": "Financial Report", + "metadata.categoryMap.businessDoc.marketAnalysis": "Market Analysis", + "metadata.categoryMap.businessDoc.meetingMinutes": "Meeting Minutes", + "metadata.categoryMap.businessDoc.other": "Other", + "metadata.categoryMap.businessDoc.policiesProcedures": "Policies & Procedures", + "metadata.categoryMap.businessDoc.productSpecification": "Product Specification", + "metadata.categoryMap.businessDoc.projectPlan": "Project Plan", + "metadata.categoryMap.businessDoc.proposal": "Proposal", + "metadata.categoryMap.businessDoc.requirementsDocument": "Requirements Document", + "metadata.categoryMap.businessDoc.researchReport": "Research Report", + "metadata.categoryMap.businessDoc.teamStructure": "Team Structure", + "metadata.categoryMap.businessDoc.trainingMaterials": "Training Materials", + "metadata.categoryMap.personalDoc.blogDraft": "Blog Draft", + "metadata.categoryMap.personalDoc.bookExcerpt": "Book Excerpt", + "metadata.categoryMap.personalDoc.codeSnippet": "Code Snippet", + "metadata.categoryMap.personalDoc.creativeWriting": "Creative Writing", + "metadata.categoryMap.personalDoc.designDraft": "Design Draft", + "metadata.categoryMap.personalDoc.diary": "Diary", + "metadata.categoryMap.personalDoc.list": "List", + "metadata.categoryMap.personalDoc.notes": "Notes", + "metadata.categoryMap.personalDoc.other": "Other", + "metadata.categoryMap.personalDoc.personalResume": "Personal Resume", + "metadata.categoryMap.personalDoc.photoCollection": "Photo Collection", + "metadata.categoryMap.personalDoc.projectOverview": "Project Overview", + "metadata.categoryMap.personalDoc.researchReport": "Research Report", + "metadata.categoryMap.personalDoc.schedule": "Schedule", + "metadata.dateTimeFormat": "MMMM D, YYYY hh:mm A", + "metadata.desc": "Labeling metadata for documents allows AI to access them in a timely manner and exposes the source of references for users.", + "metadata.docTypeChangeTitle": "Change document type", + "metadata.docTypeSelectTitle": "Please select a document type", + "metadata.docTypeSelectWarning": "If the document type is changed, the now filled metadata will no longer be preserved", + "metadata.field.IMChat.chatPartiesGroupName": "Chat Parties/Group Name", + "metadata.field.IMChat.chatPlatform": "Chat Platform", + "metadata.field.IMChat.endDate": "End Date", + "metadata.field.IMChat.fileType": "File Type", + "metadata.field.IMChat.participants": "Participants", + "metadata.field.IMChat.startDate": "Start Date", + "metadata.field.IMChat.topicsKeywords": "Topics/Keywords", + "metadata.field.book.ISBN": "ISBN", + "metadata.field.book.author": "Author", + "metadata.field.book.category": "Category", + "metadata.field.book.language": "Language", + "metadata.field.book.publicationDate": "Publication Date", + "metadata.field.book.publisher": "Publisher", + "metadata.field.book.title": "Title", + "metadata.field.businessDocument.author": "Author", + "metadata.field.businessDocument.creationDate": "Creation Date", + "metadata.field.businessDocument.departmentTeam": "Department/Team", + "metadata.field.businessDocument.documentType": "Document Type", + "metadata.field.businessDocument.lastModifiedDate": "Last Modified Date", + "metadata.field.businessDocument.title": "Title", + "metadata.field.github.fileName": "File Name", + "metadata.field.github.filePath": "File Path", + "metadata.field.github.lastCommitAuthor": "Last Commit Author", + "metadata.field.github.lastCommitTime": "Last Commit Time", + "metadata.field.github.license": "License", + "metadata.field.github.programmingLang": "Programming Language", + "metadata.field.github.repoDesc": "Repo Description", + "metadata.field.github.repoName": "Repo Name", + "metadata.field.github.repoOwner": "Repo Owner", + "metadata.field.github.url": "URL", + "metadata.field.notion.author": "Author", + "metadata.field.notion.createdTime": "Created Time", + "metadata.field.notion.description": "Description", + "metadata.field.notion.language": "Language", + "metadata.field.notion.lastModifiedTime": "Last Modified Time", + "metadata.field.notion.tag": "Tag", + "metadata.field.notion.title": "Title", + "metadata.field.notion.url": "URL", + "metadata.field.originInfo.lastUpdateDate": "Last update date", + "metadata.field.originInfo.originalFileSize": "Original file size", + "metadata.field.originInfo.originalFilename": "Original filename", + "metadata.field.originInfo.source": "Source", + "metadata.field.originInfo.uploadDate": "Upload date", + "metadata.field.paper.DOI": "DOI", + "metadata.field.paper.abstract": "Abstract", + "metadata.field.paper.author": "Author", + "metadata.field.paper.journalConferenceName": "Journal/Conference Name", + "metadata.field.paper.language": "Language", + "metadata.field.paper.publishDate": "Publish Date", + "metadata.field.paper.title": "Title", + "metadata.field.paper.topicsKeywords": "Topics/Keywords", + "metadata.field.paper.volumeIssuePage": "Volume/Issue/Page", + "metadata.field.personalDocument.author": "Author", + "metadata.field.personalDocument.creationDate": "Creation Date", + "metadata.field.personalDocument.documentType": "Document Type", + "metadata.field.personalDocument.lastModifiedDate": "Last Modified Date", + "metadata.field.personalDocument.tagsCategory": "Tags/Category", + "metadata.field.personalDocument.title": "Title", + "metadata.field.processRule.processClean": "Text Process Clean", + "metadata.field.processRule.processDoc": "Process Document", + "metadata.field.processRule.segmentLength": "Chunks Length", + "metadata.field.processRule.segmentRule": "Chunk Rule", + "metadata.field.socialMediaPost.authorUsername": "Author/Username", + "metadata.field.socialMediaPost.platform": "Platform", + "metadata.field.socialMediaPost.postURL": "Post URL", + "metadata.field.socialMediaPost.publishDate": "Publish Date", + "metadata.field.socialMediaPost.topicsTags": "Topics/Tags", + "metadata.field.technicalParameters.avgParagraphLength": "Avg. paragraph length", + "metadata.field.technicalParameters.embeddedSpend": "Embedded spend", + "metadata.field.technicalParameters.embeddingTime": "Embedding time", + "metadata.field.technicalParameters.hitCount": "Retrieval count", + "metadata.field.technicalParameters.paragraphs": "Paragraphs", + "metadata.field.technicalParameters.segmentLength": "Chunks length", + "metadata.field.technicalParameters.segmentSpecification": "Chunks specification", + "metadata.field.webPage.authorPublisher": "Author/Publisher", + "metadata.field.webPage.description": "Description", + "metadata.field.webPage.language": "Language", + "metadata.field.webPage.publishDate": "Publish Date", + "metadata.field.webPage.title": "Title", + "metadata.field.webPage.topicKeywords": "Topic/Keywords", + "metadata.field.webPage.url": "URL", + "metadata.field.wikipediaEntry.editorContributor": "Editor/Contributor", + "metadata.field.wikipediaEntry.language": "Language", + "metadata.field.wikipediaEntry.lastEditDate": "Last Edit Date", + "metadata.field.wikipediaEntry.summaryIntroduction": "Summary/Introduction", + "metadata.field.wikipediaEntry.title": "Title", + "metadata.field.wikipediaEntry.webpageURL": "Webpage URL", + "metadata.firstMetaAction": "Let's go", + "metadata.languageMap.ar": "Arabic", + "metadata.languageMap.cs": "Czech", + "metadata.languageMap.da": "Danish", + "metadata.languageMap.de": "German", + "metadata.languageMap.el": "Greek", + "metadata.languageMap.en": "English", + "metadata.languageMap.es": "Spanish", + "metadata.languageMap.fi": "Finnish", + "metadata.languageMap.fr": "French", + "metadata.languageMap.he": "Hebrew", + "metadata.languageMap.hi": "Hindi", + "metadata.languageMap.hu": "Hungarian", + "metadata.languageMap.id": "Indonesian", + "metadata.languageMap.it": "Italian", + "metadata.languageMap.ja": "Japanese", + "metadata.languageMap.ko": "Korean", + "metadata.languageMap.nl": "Dutch", + "metadata.languageMap.no": "Norwegian", + "metadata.languageMap.pl": "Polish", + "metadata.languageMap.pt": "Portuguese", + "metadata.languageMap.ro": "Romanian", + "metadata.languageMap.ru": "Russian", + "metadata.languageMap.sv": "Swedish", + "metadata.languageMap.th": "Thai", + "metadata.languageMap.tr": "Turkish", + "metadata.languageMap.zh": "Chinese", + "metadata.placeholder.add": "Add ", + "metadata.placeholder.select": "Select ", + "metadata.source.github": "Sync form Github", + "metadata.source.local_file": "Local File", + "metadata.source.notion": "Sync form Notion", + "metadata.source.online_document": "Online Document", + "metadata.source.upload_file": "Upload File", + "metadata.source.website_crawl": "Website Crawl", + "metadata.title": "Metadata", + "metadata.type.IMChat": "IM Chat", + "metadata.type.book": "Book", + "metadata.type.businessDocument": "Business Document", + "metadata.type.github": "Sync form Github", + "metadata.type.notion": "Sync form Notion", + "metadata.type.paper": "Paper", + "metadata.type.personalDocument": "Personal Document", + "metadata.type.socialMediaPost": "Social Media Post", + "metadata.type.technicalParameters": "Technical Parameters", + "metadata.type.webPage": "Web Page", + "metadata.type.wikipediaEntry": "Wikipedia Entry", + "segment.addAnother": "Add another", + "segment.addChildChunk": "Add Child Chunk", + "segment.addChunk": "Add Chunk", + "segment.addKeyWord": "Add keyword", + "segment.allFilesUploaded": "All files must be uploaded before saving", + "segment.answerEmpty": "Answer can not be empty", + "segment.answerPlaceholder": "Add answer here", + "segment.characters_one": "character", + "segment.characters_other": "characters", + "segment.childChunk": "Child-Chunk", + "segment.childChunkAdded": "1 child chunk added", + "segment.childChunks_one": "CHILD CHUNK", + "segment.childChunks_other": "CHILD CHUNKS", + "segment.chunk": "Chunk", + "segment.chunkAdded": "1 chunk added", + "segment.chunkDetail": "Chunk Detail", + "segment.chunks_one": "CHUNK", + "segment.chunks_other": "CHUNKS", + "segment.clearFilter": "Clear filter", + "segment.collapseChunks": "Collapse chunks", + "segment.contentEmpty": "Content can not be empty", + "segment.contentPlaceholder": "Add content here", + "segment.dateTimeFormat": "MM/DD/YYYY h:mm", + "segment.delete": "Delete this chunk ?", + "segment.editChildChunk": "Edit Child Chunk", + "segment.editChunk": "Edit Chunk", + "segment.editParentChunk": "Edit Parent Chunk", + "segment.edited": "EDITED", + "segment.editedAt": "Edited at", + "segment.empty": "No Chunk found", + "segment.expandChunks": "Expand chunks", + "segment.hitCount": "Retrieval count", + "segment.keywordDuplicate": "The keyword already exists", + "segment.keywordEmpty": "The keyword cannot be empty", + "segment.keywordError": "The maximum length of keyword is 20", + "segment.keywords": "KEYWORDS", + "segment.newChildChunk": "New Child Chunk", + "segment.newChunk": "New Chunk", + "segment.newQaSegment": "New Q&A Segment", + "segment.newTextSegment": "New Text Segment", + "segment.paragraphs": "Paragraphs", + "segment.parentChunk": "Parent-Chunk", + "segment.parentChunks_one": "PARENT CHUNK", + "segment.parentChunks_other": "PARENT CHUNKS", + "segment.questionEmpty": "Question can not be empty", + "segment.questionPlaceholder": "Add question here", + "segment.regeneratingMessage": "This may take a moment, please wait...", + "segment.regeneratingTitle": "Regenerating child chunks", + "segment.regenerationConfirmMessage": "Regenerating child chunks will overwrite the current child chunks, including edited chunks and newly added chunks. The regeneration cannot be undone.", + "segment.regenerationConfirmTitle": "Do you want to regenerate child chunks?", + "segment.regenerationSuccessMessage": "You can close this window.", + "segment.regenerationSuccessTitle": "Regeneration completed", + "segment.searchResults_one": "RESULT", + "segment.searchResults_other": "RESULTS", + "segment.searchResults_zero": "RESULT", + "segment.summary": "SUMMARY", + "segment.summaryPlaceholder": "Write a brief summary for better retrieval…", + "segment.vectorHash": "Vector hash: " +} diff --git a/web/i18n/nl-NL/dataset-hit-testing.json b/web/i18n/nl-NL/dataset-hit-testing.json new file mode 100644 index 0000000000..bd537452fc --- /dev/null +++ b/web/i18n/nl-NL/dataset-hit-testing.json @@ -0,0 +1,28 @@ +{ + "chunkDetail": "Chunk Detail", + "dateTimeFormat": "MM/DD/YYYY hh:mm A", + "desc": "Test the hitting effect of the Knowledge based on the given query text.", + "hit.emptyTip": "Retrieval Testing results will show here", + "hit.title": "{{num}} Retrieved Chunks", + "hitChunks": "Hit {{num}} child chunks", + "imageUploader.dropZoneTip": "Drag file here to upload", + "imageUploader.singleChunkAttachmentLimitTooltip": "The number of single chunk attachments cannot exceed {{limit}}", + "imageUploader.tip": "Upload or drop images (Max {{batchCount}}, {{size}}MB each)", + "imageUploader.tooltip": "Upload images (Max {{batchCount}}, {{size}}MB each)", + "input.countWarning": "Up to 200 characters.", + "input.indexWarning": "High quality Knowledge only.", + "input.placeholder": "Please enter a text, a short declarative sentence is recommended.", + "input.testing": "Test", + "input.title": "Source text", + "keyword": "Keywords", + "noRecentTip": "No recent query results here", + "open": "Open", + "records": "Records", + "settingTitle": "Retrieval Setting", + "table.header.queryContent": "Query Content", + "table.header.source": "Source", + "table.header.time": "Time", + "title": "Retrieval Test", + "viewChart": "View VECTOR CHART", + "viewDetail": "View Detail" +} diff --git a/web/i18n/nl-NL/dataset-pipeline.json b/web/i18n/nl-NL/dataset-pipeline.json new file mode 100644 index 0000000000..00bd68a519 --- /dev/null +++ b/web/i18n/nl-NL/dataset-pipeline.json @@ -0,0 +1,95 @@ +{ + "addDocuments.backToDataSource": "Data Source", + "addDocuments.characters": "characters", + "addDocuments.selectOnlineDocumentTip": "Process up to {{count}} pages", + "addDocuments.selectOnlineDriveTip": "Process up to {{count}} files, maximum {{fileSize}} MB each", + "addDocuments.stepOne.preview": "Preview", + "addDocuments.stepThree.learnMore": "Learn more", + "addDocuments.stepTwo.chunkSettings": "Chunk Settings", + "addDocuments.stepTwo.previewChunks": "Preview Chunks", + "addDocuments.steps.chooseDatasource": "Choose a Data Source", + "addDocuments.steps.processDocuments": "Process Documents", + "addDocuments.steps.processingDocuments": "Processing Documents", + "addDocuments.title": "Add Documents", + "configurationTip": "Configure {{pluginName}}", + "conversion.confirm.content": "This action is permanent. You won't be able to revert to the previous method.Please confirm to convert.", + "conversion.confirm.title": "Confirmation", + "conversion.descriptionChunk1": "You can now convert your existing knowledge base to use the Knowledge Pipeline for document processing", + "conversion.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.", + "conversion.errorMessage": "Failed to convert the dataset to a pipeline", + "conversion.successMessage": "Successfully converted the dataset to a pipeline", + "conversion.title": "Convert to Knowledge Pipeline", + "conversion.warning": "This action cannot be undone.", + "creation.backToKnowledge": "Back to Knowledge", + "creation.caution": "Caution", + "creation.createFromScratch.description": "Create a custom pipeline from scratch with full control over data processing and structure.", + "creation.createFromScratch.title": "Blank knowledge pipeline", + "creation.createKnowledge": "Create Knowledge", + "creation.errorTip": "Failed to create a Knowledge Base", + "creation.importDSL": "Import from a DSL file", + "creation.successTip": "Successfully created a Knowledge Base", + "deletePipeline.content": "Deleting the pipeline template is irreversible.", + "deletePipeline.title": "Are you sure to delete this pipeline template?", + "details.createdBy": "By {{author}}", + "details.structure": "Structure", + "details.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.", + "documentSettings.title": "Document Settings", + "editPipelineInfo": "Edit pipeline info", + "exportDSL.errorTip": "Failed to export pipeline DSL", + "exportDSL.successTip": "Export pipeline DSL successfully", + "inputField": "Input Field", + "inputFieldPanel.addInputField": "Add Input Field", + "inputFieldPanel.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.", + "inputFieldPanel.editInputField": "Edit Input Field", + "inputFieldPanel.error.variableDuplicate": "Variable name already exists. Please choose a different name.", + "inputFieldPanel.globalInputs.title": "Global Inputs for All Entrances", + "inputFieldPanel.globalInputs.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).", + "inputFieldPanel.preview.stepOneTitle": "Data Source", + "inputFieldPanel.preview.stepTwoTitle": "Process Documents", + "inputFieldPanel.title": "User Input Fields", + "inputFieldPanel.uniqueInputs.title": "Unique Inputs for Each Entrance", + "inputFieldPanel.uniqueInputs.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).", + "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)", + "knowledgeNameAndIcon": "Knowledge name & icon", + "knowledgeNameAndIconPlaceholder": "Please enter the name of the Knowledge Base", + "knowledgePermissions": "Permissions", + "onlineDocument.pageSelectorTitle": "{{name}} pages", + "onlineDrive.breadcrumbs.allBuckets": "All Cloud Storage Buckets", + "onlineDrive.breadcrumbs.allFiles": "All Files", + "onlineDrive.breadcrumbs.searchPlaceholder": "Search files...", + "onlineDrive.breadcrumbs.searchResult": "Find {{searchResultsLength}} items in \"{{folderName}}\" folder", + "onlineDrive.emptyFolder": "This folder is empty", + "onlineDrive.emptySearchResult": "No items were found", + "onlineDrive.notConnected": "{{name}} is not connected", + "onlineDrive.notConnectedTip": "To sync with {{name}}, connection to {{name}} must be established first.", + "onlineDrive.notSupportedFileType": "This file type is not supported", + "onlineDrive.resetKeywords": "Reset keywords", + "operations.backToDataSource": "Back to Data Source", + "operations.choose": "Choose", + "operations.convert": "Convert", + "operations.dataSource": "Data Source", + "operations.details": "Details", + "operations.editInfo": "Edit info", + "operations.exportPipeline": "Export Pipeline", + "operations.preview": "Preview", + "operations.process": "Process", + "operations.saveAndProcess": "Save & Process", + "operations.useTemplate": "Use this Knowledge Pipeline", + "pipelineNameAndIcon": "Pipeline name & icon", + "publishPipeline.error.message": "Failed to Publish Knowledge Pipeline", + "publishPipeline.success.message": "Knowledge Pipeline Published", + "publishPipeline.success.tip": "Go to Documents to add or manage documents.", + "publishTemplate.error.message": "Failed to Publish Pipeline Template", + "publishTemplate.success.learnMore": "Learn more", + "publishTemplate.success.message": "Pipeline Template Published", + "publishTemplate.success.tip": "You can use this template on the creation page.", + "templates.customized": "Customized", + "testRun.dataSource.localFiles": "Local Files", + "testRun.notion.docTitle": "Notion docs", + "testRun.notion.title": "Choose Notion Pages", + "testRun.steps.dataSource": "Data Source", + "testRun.steps.documentProcessing": "Document Processing", + "testRun.title": "Test Run", + "testRun.tooltip": "In test run mode, only one document is allowed to be imported at a time for easier debugging and observation." +} diff --git a/web/i18n/nl-NL/dataset-settings.json b/web/i18n/nl-NL/dataset-settings.json new file mode 100644 index 0000000000..053996e769 --- /dev/null +++ b/web/i18n/nl-NL/dataset-settings.json @@ -0,0 +1,50 @@ +{ + "desc": "Here you can modify the properties and retrieval settings of this Knowledge.", + "form.chunkStructure.description": " about Chunk Structure.", + "form.chunkStructure.learnMore": "Learn more", + "form.chunkStructure.title": "Chunk Structure", + "form.desc": "Description", + "form.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.", + "form.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.", + "form.descWrite": "Learn how to write a good Knowledge description.", + "form.embeddingModel": "Embedding Model", + "form.embeddingModelTip": "Change the embedded model, please go to ", + "form.embeddingModelTipLink": "Settings", + "form.externalKnowledgeAPI": "External Knowledge API", + "form.externalKnowledgeID": "External Knowledge ID", + "form.helpText": "Learn how to write a good dataset description.", + "form.indexMethod": "Index Method", + "form.indexMethodChangeToEconomyDisabledTip": "Not available for downgrading from HQ to ECO", + "form.indexMethodEconomy": "Economical", + "form.indexMethodEconomyTip": "Using {{count}} keywords per chunk for retrieval, no tokens are consumed at the expense of reduced retrieval accuracy.", + "form.indexMethodHighQuality": "High Quality", + "form.indexMethodHighQualityTip": "Calling the embedding model to process documents for more precise retrieval helps LLM generate high-quality answers.", + "form.me": "(You)", + "form.name": "Knowledge Name", + "form.nameAndIcon": "Name & Icon", + "form.nameError": "Name cannot be empty", + "form.namePlaceholder": "Please enter the Knowledge name", + "form.numberOfKeywords": "Number of Keywords", + "form.onSearchResults": "No members match your search query.\nTry your search again.", + "form.permissions": "Permissions", + "form.permissionsAllMember": "All team members", + "form.permissionsInvitedMembers": "Partial team members", + "form.permissionsOnlyMe": "Only me", + "form.retrievalSetting.description": " about retrieval method.", + "form.retrievalSetting.learnMore": "Learn more", + "form.retrievalSetting.longDescription": " about retrieval method, you can change this at any time in the Knowledge settings.", + "form.retrievalSetting.method": "Retrieval Method", + "form.retrievalSetting.multiModalTip": "When embedding model supports multi-modal, please select a multi-modal rerank model for better performance.", + "form.retrievalSetting.title": "Retrieval Setting", + "form.retrievalSettings": "Retrieval Settings", + "form.save": "Save", + "form.searchModel": "Search model", + "form.summaryAutoGen": "Summary Auto-Gen", + "form.summaryAutoGenEnableTip": "Once enabled, summaries will be generated automatically for newly added documents. Existing documents can still be summarized manually.", + "form.summaryAutoGenTip": "Summaries are automatically generated for newly added documents. Existing documents can still be summarized manually.", + "form.summaryInstructions": "Instructions", + "form.summaryInstructionsPlaceholder": "Describe the rules or style for auto-generated summaries…", + "form.summaryModel": "Summary Model", + "form.upgradeHighQualityTip": "Once upgrading to High Quality mode, reverting to Economical mode is not available", + "title": "Knowledge settings" +} diff --git a/web/i18n/nl-NL/dataset.json b/web/i18n/nl-NL/dataset.json new file mode 100644 index 0000000000..538517dccd --- /dev/null +++ b/web/i18n/nl-NL/dataset.json @@ -0,0 +1,186 @@ +{ + "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.", + "allKnowledge": "All Knowledge", + "allKnowledgeDescription": "Select to display all knowledge in this workspace. Only the Workspace Owner can manage all knowledge.", + "appCount": " linked apps", + "batchAction.archive": "Archive", + "batchAction.cancel": "Cancel", + "batchAction.delete": "Delete", + "batchAction.disable": "Disable", + "batchAction.download": "Download", + "batchAction.enable": "Enable", + "batchAction.reIndex": "Re-index", + "batchAction.selected": "Selected", + "chunkingMode.general": "General", + "chunkingMode.graph": "Graph", + "chunkingMode.parentChild": "Parent-child", + "chunkingMode.qa": "Q&A", + "connectDataset": "Connect to an External Knowledge Base", + "connectDatasetIntro.content.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.", + "connectDatasetIntro.content.front": "To connect to an external knowledge base, you need to create an external API first. Please read carefully and refer to", + "connectDatasetIntro.content.link": "Learn how to create an external API", + "connectDatasetIntro.learnMore": "Learn More", + "connectDatasetIntro.title": "How to Connect to an External Knowledge Base", + "connectHelper.helper1": "Connect to external knowledge bases via API and knowledge base ID. Currently, ", + "connectHelper.helper2": "only the retrieval functionality is supported", + "connectHelper.helper3": ". We strongly recommend that you ", + "connectHelper.helper4": "read the help documentation", + "connectHelper.helper5": " carefully before using this feature.", + "cornerLabel.pipeline": "Pipeline", + "cornerLabel.unavailable": "Unavailable", + "createDataset": "Create Knowledge", + "createDatasetIntro": "Import your own text data or write data in real-time via Webhook for LLM context enhancement.", + "createExternalAPI": "Add an External Knowledge API", + "createFromPipeline": "Create from Knowledge Pipeline", + "createNewExternalAPI": "Create a new External Knowledge API", + "datasetDeleteFailed": "Failed to delete Knowledge", + "datasetDeleted": "Knowledge 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.", + "datasets": "KNOWLEDGE", + "datasetsApi": "API ACCESS", + "defaultRetrievalTip": "Multi-path retrieval is used by default. Knowledge is retrieved from multiple knowledge bases and then re-ranked.", + "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.", + "deleteDatasetConfirmTitle": "Delete this Knowledge?", + "deleteExternalAPIConfirmWarningContent.content.end": "external knowledge. Deleting this API will invalidate all of them. Are you sure you want to delete this API?", + "deleteExternalAPIConfirmWarningContent.content.front": "This External Knowledge API is linked to", + "deleteExternalAPIConfirmWarningContent.noConnectionContent": "Are you sure to delete this API?", + "deleteExternalAPIConfirmWarningContent.title.end": "?", + "deleteExternalAPIConfirmWarningContent.title.front": "Delete", + "didYouKnow": "Did you know?", + "docAllEnabled_one": "{{count}} document enabled", + "docAllEnabled_other": "All {{count}} documents enabled", + "docsFailedNotice": "documents indexed failed", + "documentCount": " docs", + "documentsDisabled": "{{num}} documents disabled - inactive for over 30 days", + "editExternalAPIConfirmWarningContent.end": "external knowledge, and this modification will be applied to all of them. Are you sure you want to save this change?", + "editExternalAPIConfirmWarningContent.front": "This External Knowledge API is linked to", + "editExternalAPIFormTitle": "Edit the External Knowledge API", + "editExternalAPIFormWarning.end": "external knowledge", + "editExternalAPIFormWarning.front": "This External API is linked to", + "editExternalAPITooltipTitle": "LINKED KNOWLEDGE", + "embeddingModelNotAvailable": "Embedding model is unavailable.", + "enable": "Enable", + "externalAPI": "External API", + "externalAPIForm.apiKey": "API Key", + "externalAPIForm.cancel": "Cancel", + "externalAPIForm.edit": "Edit", + "externalAPIForm.encrypted.end": "technology.", + "externalAPIForm.encrypted.front": "Your API Token will be encrypted and stored using", + "externalAPIForm.endpoint": "API Endpoint", + "externalAPIForm.name": "Name", + "externalAPIForm.save": "Save", + "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", + "externalAPIPanelTitle": "External Knowledge API", + "externalKnowledgeBase": "External Knowledge Base", + "externalKnowledgeDescription": "Knowledge Description", + "externalKnowledgeDescriptionPlaceholder": "Describe what's in this Knowledge Base (optional)", + "externalKnowledgeForm.cancel": "Cancel", + "externalKnowledgeForm.connect": "Connect", + "externalKnowledgeId": "External Knowledge ID", + "externalKnowledgeIdPlaceholder": "Please enter the Knowledge ID", + "externalKnowledgeName": "External Knowledge Name", + "externalKnowledgeNamePlaceholder": "Please enter the name of the knowledge base", + "externalTag": "External", + "imageUploader.browse": "Browse", + "imageUploader.button": "Drag and drop file or folder, or", + "imageUploader.fileSizeLimitExceeded": "File size exceeds the {{size}}MB limit", + "imageUploader.tip": "{{supportTypes}} (Max {{batchCount}}, {{size}}MB each)", + "inconsistentEmbeddingModelTip": "The Rerank model is required if the Embedding models of the selected knowledge bases are inconsistent.", + "indexingMethod.full_text_search": "FULL TEXT", + "indexingMethod.hybrid_search": "HYBRID", + "indexingMethod.invertedIndex": "INVERTED", + "indexingMethod.keyword_search": "KEYWORD", + "indexingMethod.semantic_search": "VECTOR", + "indexingTechnique.economy": "ECO", + "indexingTechnique.high_quality": "HQ", + "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.", + "knowledge": "Knowledge", + "learnHowToWriteGoodKnowledgeDescription": "Learn how to write a good knowledge description", + "localDocs": "Local Docs", + "metadata.addMetadata": "Add Metadata", + "metadata.batchEditMetadata.applyToAllSelectDocument": "Apply to all selected documents", + "metadata.batchEditMetadata.applyToAllSelectDocumentTip": "Automatically create all the above edited and new metadata for all selected documents, otherwise editing metadata will only apply to documents with it.", + "metadata.batchEditMetadata.editDocumentsNum": "Editing {{num}} documents", + "metadata.batchEditMetadata.editMetadata": "Edit Metadata", + "metadata.batchEditMetadata.multipleValue": "Multiple Value", + "metadata.checkName.empty": "Metadata name cannot be empty", + "metadata.checkName.invalid": "Metadata name can only contain lowercase letters, numbers, and underscores and must start with a lowercase letter", + "metadata.checkName.tooLong": "Metadata name cannot exceed {{max}} characters", + "metadata.chooseTime": "Choose a time...", + "metadata.createMetadata.back": "Back", + "metadata.createMetadata.name": "Name", + "metadata.createMetadata.namePlaceholder": "Add metadata name", + "metadata.createMetadata.title": "New Metadata", + "metadata.createMetadata.type": "Type", + "metadata.datasetMetadata.addMetaData": "Add Metadata", + "metadata.datasetMetadata.builtIn": "Built-in", + "metadata.datasetMetadata.builtInDescription": "Built-in metadata is automatically extracted and generated. It must be enabled before use and cannot be edited.", + "metadata.datasetMetadata.deleteContent": "Are you sure you want to delete the metadata \"{{name}}\"", + "metadata.datasetMetadata.deleteTitle": "Confirm to delete", + "metadata.datasetMetadata.description": "You can manage all metadata in this knowledge here. Modifications will be synchronized to every document.", + "metadata.datasetMetadata.disabled": "Disabled", + "metadata.datasetMetadata.name": "Name", + "metadata.datasetMetadata.namePlaceholder": "Metadata name", + "metadata.datasetMetadata.rename": "Rename", + "metadata.datasetMetadata.values": "{{num}} Values", + "metadata.documentMetadata.documentInformation": "Document Information", + "metadata.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.", + "metadata.documentMetadata.startLabeling": "Start Labeling", + "metadata.documentMetadata.technicalParameters": "Technical Parameters", + "metadata.metadata": "Metadata", + "metadata.selectMetadata.manageAction": "Manage", + "metadata.selectMetadata.newAction": "New Metadata", + "metadata.selectMetadata.search": "Search metadata", + "mixtureHighQualityAndEconomicTip": "The Rerank model is required for mixture of high quality and economical knowledge bases.", + "mixtureInternalAndExternalTip": "The Rerank model is required for mixture of internal and external knowledge.", + "multimodal": "Multimodal", + "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.", + "noExternalKnowledge": "There is no External Knowledge API yet, click here to create", + "parentMode.fullDoc": "Full-doc", + "parentMode.paragraph": "Paragraph", + "partialEnabled_one": "Total of {{count}} document, {{num}} available", + "partialEnabled_other": "Total of {{count}} documents, {{num}} available", + "preprocessDocument": "{{num}} Preprocess Documents", + "rerankSettings": "Rerank Setting", + "retrieval.change": "Change", + "retrieval.changeRetrievalMethod": "Change retrieval method", + "retrieval.full_text_search.description": "Index all terms in the document, allowing users to search any term and retrieve relevant text chunk containing those terms.", + "retrieval.full_text_search.title": "Full-Text Search", + "retrieval.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.", + "retrieval.hybrid_search.recommend": "Recommend", + "retrieval.hybrid_search.title": "Hybrid Search", + "retrieval.invertedIndex.description": "Inverted Index is a structure used for efficient retrieval. Organized by terms, each term points to documents or web pages containing it.", + "retrieval.invertedIndex.title": "Inverted Index", + "retrieval.keyword_search.description": "Inverted Index is a structure used for efficient retrieval. Organized by terms, each term points to documents or web pages containing it.", + "retrieval.keyword_search.title": "Inverted Index", + "retrieval.semantic_search.description": "Generate query embeddings and search for the text chunk most similar to its vector representation.", + "retrieval.semantic_search.title": "Vector Search", + "retrievalSettings": "Retrieval Setting", + "retry": "Retry", + "selectExternalKnowledgeAPI.placeholder": "Choose an External Knowledge API", + "serviceApi.card.apiKey": "API Key", + "serviceApi.card.apiReference": "API Reference", + "serviceApi.card.endpoint": "Service API Endpoint", + "serviceApi.card.title": "Backend service api", + "serviceApi.disabled": "Disabled", + "serviceApi.enabled": "Enabled", + "serviceApi.title": "Service API", + "unavailable": "Unavailable", + "updated": "Updated", + "weightedScore.customized": "Customized", + "weightedScore.description": "By adjusting the weights assigned, this rerank strategy determines whether to prioritize semantic or keyword matching.", + "weightedScore.keyword": "Keyword", + "weightedScore.keywordFirst": "Keyword first", + "weightedScore.semantic": "Semantic", + "weightedScore.semanticFirst": "Semantic first", + "weightedScore.title": "Weighted Score", + "wordCount": " k words" +} diff --git a/web/i18n/nl-NL/education.json b/web/i18n/nl-NL/education.json new file mode 100644 index 0000000000..a0fb01c014 --- /dev/null +++ b/web/i18n/nl-NL/education.json @@ -0,0 +1,44 @@ +{ + "currentSigned": "CURRENTLY SIGNED IN AS", + "emailLabel": "Your current email", + "form.schoolName.placeholder": "Enter the official, unabbreviated name of your school", + "form.schoolName.title": "Your School Name", + "form.schoolRole.option.administrator": "School Administrator", + "form.schoolRole.option.student": "Student", + "form.schoolRole.option.teacher": "Teacher", + "form.schoolRole.title": "Your School Role", + "form.terms.desc.and": "and", + "form.terms.desc.end": ". By submitting:", + "form.terms.desc.front": "Your information and use of Education Verified status are subject to our", + "form.terms.desc.privacyPolicy": "Privacy Policy", + "form.terms.desc.termsOfService": "Terms of Service", + "form.terms.option.age": "I confirm I am at least 18 years old", + "form.terms.option.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.", + "form.terms.title": "Terms & Agreements", + "learn": "Learn how to get education verified", + "notice.action.dismiss": "Dismiss", + "notice.action.reVerify": "Re-verify", + "notice.action.upgrade": "Upgrade", + "notice.alreadyGraduated.expired": "Feel free to upgrade anytime to get full access to paid features.", + "notice.alreadyGraduated.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.", + "notice.alreadyGraduated.title": "Already graduated?", + "notice.dateFormat": "MM/DD/YYYY", + "notice.expired.summary.line1": "You can still access and use Dify. ", + "notice.expired.summary.line2": "However, you're no longer eligible for new education discount coupons.", + "notice.expired.title": "Your education status has expired", + "notice.isAboutToExpire.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.", + "notice.isAboutToExpire.title": "Your education status will expire on {{date}}", + "notice.stillInEducation.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.", + "notice.stillInEducation.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.", + "notice.stillInEducation.title": "Still in education?", + "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.", + "rejectTitle": "Your Dify Educational Verification Has Been Rejected", + "submit": "Submit", + "submitError": "Form submission failed. Please try again later.", + "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.", + "successTitle": "You Have Got Dify Education Verified", + "toVerified": "Get Education Verified", + "toVerifiedTip.coupon": "exclusive 100% coupon", + "toVerifiedTip.end": "for the Dify Professional Plan.", + "toVerifiedTip.front": "You are now eligible for Education Verified status. Please enter your education information below to complete the process and receive an" +} diff --git a/web/i18n/nl-NL/explore.json b/web/i18n/nl-NL/explore.json new file mode 100644 index 0000000000..68b8b30b0f --- /dev/null +++ b/web/i18n/nl-NL/explore.json @@ -0,0 +1,40 @@ +{ + "appCard.addToWorkspace": "Use template", + "appCard.try": "Details", + "appCustomize.nameRequired": "App name is required", + "appCustomize.subTitle": "App icon & name", + "appCustomize.title": "Create app from {{name}}", + "apps.allCategories": "All", + "apps.resetFilter": "Clear filter", + "apps.resultNum": "{{num}} results", + "apps.title": "Try Dify's curated apps to find AI solutions for your business", + "banner.viewMore": "VIEW MORE", + "category.Agent": "Agent", + "category.Assistant": "Assistant", + "category.Entertainment": "Entertainment", + "category.HR": "HR", + "category.Programming": "Programming", + "category.Recommended": "Recommended", + "category.Translate": "Translate", + "category.Workflow": "Workflow", + "category.Writing": "Writing", + "sidebar.action.delete": "Delete", + "sidebar.action.pin": "Pin", + "sidebar.action.rename": "Rename", + "sidebar.action.unpin": "Unpin", + "sidebar.chat": "Chat", + "sidebar.delete.content": "Are you sure you want to delete this app?", + "sidebar.delete.title": "Delete app", + "sidebar.noApps.description": "Published web apps will appear here", + "sidebar.noApps.learnMore": "Learn more", + "sidebar.noApps.title": "No web apps", + "sidebar.title": "App gallery", + "sidebar.webApps": "Web apps", + "title": "Explore", + "tryApp.category": "Category", + "tryApp.createFromSampleApp": "Create from this sample app", + "tryApp.requirements": "Requirements", + "tryApp.tabHeader.detail": "Orchestration Details", + "tryApp.tabHeader.try": "Try it", + "tryApp.tryInfo": "This is a sample app. You can try up to 5 messages. To keep using it, click \"Create from this sample app\" and set it up!" +} diff --git a/web/i18n/nl-NL/layout.json b/web/i18n/nl-NL/layout.json new file mode 100644 index 0000000000..b32818f971 --- /dev/null +++ b/web/i18n/nl-NL/layout.json @@ -0,0 +1,4 @@ +{ + "sidebar.collapseSidebar": "Collapse Sidebar", + "sidebar.expandSidebar": "Expand Sidebar" +} diff --git a/web/i18n/nl-NL/login.json b/web/i18n/nl-NL/login.json new file mode 100644 index 0000000000..8a3bf04ac9 --- /dev/null +++ b/web/i18n/nl-NL/login.json @@ -0,0 +1,115 @@ +{ + "acceptPP": "I have read and accept the privacy policy", + "accountAlreadyInited": "Account already initialized", + "activated": "Sign in now", + "activatedTipEnd": "team", + "activatedTipStart": "You have joined the", + "adminInitPassword": "Admin initialization password", + "back": "Back", + "backToLogin": "Back to login", + "backToSignIn": "Return to sign in", + "changePassword": "Set a password", + "changePasswordBtn": "Set a password", + "changePasswordTip": "Please enter a new password for your account", + "checkCode.checkYourEmail": "Check your email", + "checkCode.didNotReceiveCode": "Didn't receive the code? ", + "checkCode.emptyCode": "Code is required", + "checkCode.invalidCode": "Invalid code", + "checkCode.resend": "Resend", + "checkCode.tipsPrefix": "We send a verification code to ", + "checkCode.useAnotherMethod": "Use another method", + "checkCode.validTime": "Bear in mind that the code is valid for 5 minutes", + "checkCode.verificationCode": "Verification code", + "checkCode.verificationCodePlaceholder": "Enter 6-digit code", + "checkCode.verify": "Verify", + "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.", + "confirmPassword": "Confirm Password", + "confirmPasswordPlaceholder": "Confirm your new password", + "continueWithCode": "Continue With Code", + "createAndSignIn": "Create and sign in", + "createSample": "Based on this information, we'll create sample application for you", + "dontHave": "Don't have?", + "email": "Email address", + "emailPlaceholder": "Your email", + "enterYourName": "Please enter your username", + "error.emailEmpty": "Email address is required", + "error.emailInValid": "Please enter a valid email address", + "error.invalidEmailOrPassword": "Invalid email or password.", + "error.nameEmpty": "Name is required", + "error.passwordEmpty": "Password is required", + "error.passwordInvalid": "Password must contain letters and numbers, and the length must be greater than 8", + "error.passwordLengthInValid": "Password must be at least 8 characters", + "error.redirectUrlMissing": "Redirect URL is missing", + "error.registrationNotAllowed": "Account not found. Please contact the system admin to register.", + "explore": "Explore Dify", + "forget": "Forgot your password?", + "forgotPassword": "Forgot your password?", + "forgotPasswordDesc": "Please enter your email address to reset your password. We will send you an email with instructions on how to reset your password.", + "go": "Go to Dify", + "goToInit": "If you have not initialized the account, please go to the initialization page", + "installBtn": "Set up", + "interfaceLanguage": "Interface Language", + "invalid": "The link has expired", + "invalidInvitationCode": "Invalid invitation code", + "invalidToken": "Invalid or expired token", + "invitationCode": "Invitation Code", + "invitationCodePlaceholder": "Your invitation code", + "join": "Join ", + "joinTipEnd": " team on Dify", + "joinTipStart": "Invite you join ", + "license.link": "Open-source License", + "license.tip": "Before starting Dify Community Edition, read the GitHub", + "licenseExpired": "License Expired", + "licenseExpiredTip": "The Dify Enterprise license for your workspace has expired. 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.", + "licenseLost": "License Lost", + "licenseLostTip": "Failed to connect Dify license server. Please contact your administrator to continue using Dify.", + "name": "Username", + "namePlaceholder": "Your username", + "noLoginMethod": "Authentication method not configured", + "noLoginMethodTip": "Please contact the system admin to add an authentication method.", + "oneMoreStep": "One more step", + "or": "OR", + "pageTitle": "Log in to Dify", + "pageTitleForE": "Hey, let's get started!", + "password": "Password", + "passwordChanged": "Sign in now", + "passwordChangedTip": "Your password has been successfully changed", + "passwordPlaceholder": "Your password", + "pp": "Privacy Policy", + "reset": "Please run following command to reset your password", + "resetLinkSent": "Reset link sent", + "resetPassword": "Reset Password", + "resetPasswordDesc": "Type the email you used to sign up on Dify and we will send you a password reset email.", + "rightDesc": "Effortlessly build visually captivating, operable, and improvable AI applications.", + "rightTitle": "Unlock the full potential of LLM", + "sendResetLink": "Send reset link", + "sendUsMail": "Email us your introduction, and we'll handle the invitation request.", + "sendVerificationCode": "Send Verification Code", + "setAdminAccount": "Setting up an admin account", + "setAdminAccountDesc": "Maximum privileges for admin account, which can be used to create applications and manage LLM providers, etc.", + "setYourAccount": "Set Your Account", + "signBtn": "Sign in", + "signup.createAccount": "Create your account", + "signup.haveAccount": "Already have an account? ", + "signup.noAccount": "Don’t have an account? ", + "signup.signIn": "Sign In", + "signup.signUp": "Sign Up", + "signup.verifyMail": "Continue with verification code", + "signup.welcome": "👋 Welcome! Please fill in the details to get started.", + "timezone": "Time zone", + "tos": "Terms of Service", + "tosDesc": "By signing up, you agree to our", + "usePassword": "Use Password", + "useVerificationCode": "Use Verification Code", + "validate": "Validate", + "webapp.disabled": "Webapp authentication is disabled. Please contact the system admin to enable it. You can try to use the app directly.", + "webapp.login": "Login", + "webapp.noLoginMethod": "Authentication method not configured for web app", + "webapp.noLoginMethodTip": "Please contact the system admin to add an authentication method.", + "welcome": "👋 Welcome! Please log in to get started.", + "withGitHub": "Continue with GitHub", + "withGoogle": "Continue with Google", + "withSSO": "Continue with SSO" +} diff --git a/web/i18n/nl-NL/oauth.json b/web/i18n/nl-NL/oauth.json new file mode 100644 index 0000000000..6383839b9f --- /dev/null +++ b/web/i18n/nl-NL/oauth.json @@ -0,0 +1,19 @@ +{ + "connect": "Connect to", + "continue": "Continue", + "error.authAppInfoFetchFailed": "Failed to fetch app info for authorization", + "error.authorizeFailed": "Authorization failed", + "error.invalidParams": "Invalid parameters", + "login": "Login", + "scopes.avatar": "Avatar", + "scopes.email": "Email", + "scopes.languagePreference": "Language Preference", + "scopes.name": "Name", + "scopes.timezone": "Timezone", + "switchAccount": "Switch Account", + "tips.common": "We respect your privacy and will only use this information to enhance your experience with our developer tools.", + "tips.loggedIn": "This app wants to access the following information from your Dify Cloud account.", + "tips.needLogin": "Please log in to authorize", + "tips.notLoggedIn": "This app wants to access your Dify Cloud account", + "unknownApp": "Unknown App" +} diff --git a/web/i18n/nl-NL/pipeline.json b/web/i18n/nl-NL/pipeline.json new file mode 100644 index 0000000000..f8c672ab03 --- /dev/null +++ b/web/i18n/nl-NL/pipeline.json @@ -0,0 +1,24 @@ +{ + "common.confirmPublish": "Confirm Publish", + "common.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?", + "common.goToAddDocuments": "Go to add documents", + "common.preparingDataSource": "Preparing Data Source", + "common.processing": "Processing", + "common.publishAs": "Publish as a Customized Pipeline Template", + "common.publishAsPipeline.description": "Knowledge description", + "common.publishAsPipeline.descriptionPlaceholder": "Please enter the description of this Knowledge Pipeline. (Optional) ", + "common.publishAsPipeline.name": "Pipeline name & icon", + "common.publishAsPipeline.namePlaceholder": "Please enter the name of this Knowledge Pipeline. (Required) ", + "common.reRun": "Re-run", + "common.testRun": "Test Run", + "inputField.create": "Create user input field", + "inputField.manage": "Manage", + "publishToast.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.", + "publishToast.title": "This pipeline has not yet been published", + "ragToolSuggestions.noRecommendationPlugins": "No recommended plugins, find more in Marketplace", + "ragToolSuggestions.title": "Suggestions for RAG", + "result.resultPreview.error": "Error occurred during execution", + "result.resultPreview.footerTip": "In test run mode, preview up to {{count}} chunks", + "result.resultPreview.loading": "Processing...Please wait", + "result.resultPreview.viewDetails": "View details" +} diff --git a/web/i18n/nl-NL/plugin-tags.json b/web/i18n/nl-NL/plugin-tags.json new file mode 100644 index 0000000000..520f6fa3ef --- /dev/null +++ b/web/i18n/nl-NL/plugin-tags.json @@ -0,0 +1,22 @@ +{ + "allTags": "All Tags", + "searchTags": "Search Tags", + "tags.agent": "Agent", + "tags.business": "Business", + "tags.design": "Design", + "tags.education": "Education", + "tags.entertainment": "Entertainment", + "tags.finance": "Finance", + "tags.image": "Image", + "tags.medical": "Medical", + "tags.news": "News", + "tags.other": "Other", + "tags.productivity": "Productivity", + "tags.rag": "RAG", + "tags.search": "Search", + "tags.social": "Social", + "tags.travel": "Travel", + "tags.utilities": "Utilities", + "tags.videos": "Videos", + "tags.weather": "Weather" +} diff --git a/web/i18n/nl-NL/plugin-trigger.json b/web/i18n/nl-NL/plugin-trigger.json new file mode 100644 index 0000000000..38e8a34aa3 --- /dev/null +++ b/web/i18n/nl-NL/plugin-trigger.json @@ -0,0 +1,118 @@ +{ + "events.actionNum": "{{num}} {{event}} INCLUDED", + "events.description": "Events that this trigger plugin can subscribe to", + "events.empty": "No events available", + "events.event": "Event", + "events.events": "Events", + "events.item.noParameters": "No parameters", + "events.item.parameters": "{{count}} parameters", + "events.output": "Output", + "events.title": "Available Events", + "modal.apiKey.configuration.description": "Set up your subscription parameters", + "modal.apiKey.configuration.title": "Configure Subscription", + "modal.apiKey.title": "Create with API Key", + "modal.apiKey.verify.description": "Please provide your API credentials to verify access", + "modal.apiKey.verify.error": "Credential verification failed. Please check your API key.", + "modal.apiKey.verify.success": "Credentials verified successfully", + "modal.apiKey.verify.title": "Verify Credentials", + "modal.common.authorize": "Authorize", + "modal.common.authorizing": "Authorizing...", + "modal.common.back": "Back", + "modal.common.cancel": "Cancel", + "modal.common.create": "Create", + "modal.common.creating": "Creating...", + "modal.common.next": "Next", + "modal.common.verify": "Verify", + "modal.common.verifying": "Verifying...", + "modal.errors.authFailed": "Authorization failed", + "modal.errors.createFailed": "Failed to create subscription", + "modal.errors.networkError": "Network error, please try again", + "modal.errors.updateFailed": "Failed to update subscription", + "modal.errors.verifyFailed": "Failed to verify credentials", + "modal.form.callbackUrl.description": "This URL will receive webhook events", + "modal.form.callbackUrl.label": "Callback URL", + "modal.form.callbackUrl.placeholder": "Generating...", + "modal.form.callbackUrl.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.", + "modal.form.callbackUrl.tooltip": "Provide a publicly accessible endpoint that can receive callback requests from the trigger provider.", + "modal.form.subscriptionName.label": "Subscription Name", + "modal.form.subscriptionName.placeholder": "Enter subscription name", + "modal.form.subscriptionName.required": "Subscription name is required", + "modal.manual.description": "Configure your webhook subscription manually", + "modal.manual.logs.loading": "Awaiting request from {{pluginName}}...", + "modal.manual.logs.request": "Request", + "modal.manual.logs.title": "Request Logs", + "modal.manual.title": "Manual Setup", + "modal.oauth.authorization.authFailed": "Failed to get OAuth authorization information", + "modal.oauth.authorization.authSuccess": "Authorization successful", + "modal.oauth.authorization.authorizeButton": "Authorize with {{provider}}", + "modal.oauth.authorization.description": "Authorize Dify to access your account", + "modal.oauth.authorization.redirectUrl": "Redirect URL", + "modal.oauth.authorization.redirectUrlHelp": "Use this URL in your OAuth app configuration", + "modal.oauth.authorization.title": "OAuth Authorization", + "modal.oauth.authorization.waitingAuth": "Waiting for authorization...", + "modal.oauth.authorization.waitingJump": "Authorized, waiting for jump", + "modal.oauth.configuration.description": "Set up your subscription parameters after authorization", + "modal.oauth.configuration.failed": "OAuth configuration failed", + "modal.oauth.configuration.success": "OAuth configuration successful", + "modal.oauth.configuration.title": "Configure Subscription", + "modal.oauth.remove.failed": "OAuth remove failed", + "modal.oauth.remove.success": "OAuth remove successful", + "modal.oauth.save.success": "OAuth configuration saved successfully", + "modal.oauth.title": "Create with OAuth", + "modal.oauthRedirectInfo": "As no system client secrets found for this tool provider, setup it manually is required, for redirect_uri, please use", + "modal.steps.configuration": "Configuration", + "modal.steps.verify": "Verify", + "node.status.warning": "Disconnect", + "subscription.addType.description": "Choose how you want to create your trigger subscription", + "subscription.addType.options.apikey.description": "Automatically create subscription using API credentials", + "subscription.addType.options.apikey.title": "Create with API Key", + "subscription.addType.options.manual.description": "Paste URL to create a new subscription", + "subscription.addType.options.manual.tip": "Configure URL on third-party platform manually", + "subscription.addType.options.manual.title": "Manual Setup", + "subscription.addType.options.oauth.clientSettings": "OAuth Client Settings", + "subscription.addType.options.oauth.clientTitle": "OAuth Client", + "subscription.addType.options.oauth.custom": "Custom", + "subscription.addType.options.oauth.default": "Default", + "subscription.addType.options.oauth.description": "Authorize with third-party platform to create subscription", + "subscription.addType.options.oauth.title": "Create with OAuth", + "subscription.addType.title": "Add subscription", + "subscription.createButton.apiKey": "New subscription with API Key", + "subscription.createButton.manual": "Paste URL to create a new subscription", + "subscription.createButton.oauth": "New subscription with OAuth", + "subscription.createFailed": "Failed to create subscription", + "subscription.createSuccess": "Subscription created successfully", + "subscription.empty.button": "New subscription", + "subscription.empty.title": "No subscriptions", + "subscription.list.addButton": "Add", + "subscription.list.item.actions.delete": "Delete", + "subscription.list.item.actions.deleteConfirm.cancel": "Cancel", + "subscription.list.item.actions.deleteConfirm.confirm": "Confirm Delete", + "subscription.list.item.actions.deleteConfirm.confirmInputPlaceholder": "Enter \"{{name}}\" to confirm.", + "subscription.list.item.actions.deleteConfirm.confirmInputTip": "Please enter “{{name}}” to confirm.", + "subscription.list.item.actions.deleteConfirm.confirmInputWarning": "Please enter the correct name to confirm.", + "subscription.list.item.actions.deleteConfirm.content": "Once deleted, this subscription cannot be recovered. Please confirm.", + "subscription.list.item.actions.deleteConfirm.contentWithApps": "The current subscription is referenced by {{count}} applications. Deleting it will cause the configured applications to stop receiving subscription events.", + "subscription.list.item.actions.deleteConfirm.error": "Failed to delete subscription {{name}}", + "subscription.list.item.actions.deleteConfirm.success": "Subscription {{name}} deleted successfully", + "subscription.list.item.actions.deleteConfirm.title": "Delete {{name}}?", + "subscription.list.item.actions.edit.error": "Failed to update subscription", + "subscription.list.item.actions.edit.success": "Subscription updated successfully", + "subscription.list.item.actions.edit.title": "Edit Subscription", + "subscription.list.item.credentialType.api_key": "API Key", + "subscription.list.item.credentialType.oauth2": "OAuth", + "subscription.list.item.credentialType.unauthorized": "Manual", + "subscription.list.item.disabled": "Disabled", + "subscription.list.item.enabled": "Enabled", + "subscription.list.item.noUsed": "No workflow used", + "subscription.list.item.status.active": "Active", + "subscription.list.item.status.inactive": "Inactive", + "subscription.list.item.usedByNum": "Used by {{num}} workflows", + "subscription.list.tip": "Receive events via Subscription", + "subscription.list.title": "Subscriptions", + "subscription.listNum": "{{num}} subscriptions", + "subscription.maxCount": "Max {{num}} subscriptions", + "subscription.noSubscriptionSelected": "No subscription selected", + "subscription.selectPlaceholder": "Select subscription", + "subscription.subscriptionRemoved": "Subscription removed", + "subscription.title": "Subscriptions" +} diff --git a/web/i18n/nl-NL/plugin.json b/web/i18n/nl-NL/plugin.json new file mode 100644 index 0000000000..c7f091a442 --- /dev/null +++ b/web/i18n/nl-NL/plugin.json @@ -0,0 +1,251 @@ +{ + "action.checkForUpdates": "Check for updates", + "action.delete": "Remove plugin", + "action.deleteContentLeft": "Would you like to remove ", + "action.deleteContentRight": " plugin?", + "action.pluginInfo": "Plugin info", + "action.usedInApps": "This plugin is being used in {{num}} apps.", + "allCategories": "All Categories", + "auth.addApi": "Add API Key", + "auth.addOAuth": "Add OAuth", + "auth.authRemoved": "Auth removed", + "auth.authorization": "Authorization", + "auth.authorizationName": "Authorization Name", + "auth.authorizations": "Authorizations", + "auth.clientInfo": "As no system client secrets found for this tool provider, setup it manually is required, for redirect_uri, please use", + "auth.connectedWorkspace": "Connected Workspace", + "auth.credentialUnavailable": "Credentials currently unavailable. Please contact admin.", + "auth.credentialUnavailableInButton": "Credential unavailable", + "auth.custom": "Custom", + "auth.customCredentialUnavailable": "Custom credentials currently unavailable", + "auth.default": "Default", + "auth.emptyAuth": "Please configure authentication", + "auth.oauthClient": "OAuth Client", + "auth.oauthClientSettings": "OAuth Client Settings", + "auth.saveAndAuth": "Save and Authorize", + "auth.saveOnly": "Save only", + "auth.setDefault": "Set as default", + "auth.setupOAuth": "Setup OAuth Client", + "auth.unavailable": "Unavailable", + "auth.useApi": "Use API Key", + "auth.useApiAuth": "API Key Authorization Configuration", + "auth.useApiAuthDesc": "After configuring credentials, all members within the workspace can use this tool when orchestrating applications.", + "auth.useOAuth": "Use OAuth", + "auth.useOAuthAuth": "Use OAuth Authorization", + "auth.workspaceDefault": "Workspace Default", + "autoUpdate.automaticUpdates": "Automatic updates", + "autoUpdate.changeTimezone": "To change time zone, go to Settings", + "autoUpdate.excludeUpdate": "The following {{num}} plugins will not auto-update", + "autoUpdate.nextUpdateTime": "Next auto-update: {{time}}", + "autoUpdate.noPluginPlaceholder.noFound": "No plugins were found", + "autoUpdate.noPluginPlaceholder.noInstalled": "No plugins installed", + "autoUpdate.operation.clearAll": "Clear all", + "autoUpdate.operation.select": "Select plugins", + "autoUpdate.partialUPdate": "Only the following {{num}} plugins will auto-update", + "autoUpdate.pluginDowngradeWarning.description": "Auto-update is currently enabled for this plugin. Downgrading the version may cause your changes to be overwritten during the next automatic update.", + "autoUpdate.pluginDowngradeWarning.downgrade": "Downgrade anyway", + "autoUpdate.pluginDowngradeWarning.exclude": "Exclude from auto-update", + "autoUpdate.pluginDowngradeWarning.title": "Plugin Downgrade", + "autoUpdate.specifyPluginsToUpdate": "Specify plugins to update", + "autoUpdate.strategy.disabled.description": "Plugins will not auto-update", + "autoUpdate.strategy.disabled.name": "Disabled", + "autoUpdate.strategy.fixOnly.description": "Auto-update for patch versions only (e.g., 1.0.1 → 1.0.2). Minor version changes won't trigger updates.", + "autoUpdate.strategy.fixOnly.name": "Fix Only", + "autoUpdate.strategy.fixOnly.selectedDescription": "Auto-update for patch versions only", + "autoUpdate.strategy.latest.description": "Always update to latest version", + "autoUpdate.strategy.latest.name": "Latest", + "autoUpdate.strategy.latest.selectedDescription": "Always update to latest version", + "autoUpdate.updateSettings": "Update Settings", + "autoUpdate.updateTime": "Update time", + "autoUpdate.updateTimeTitle": "Update time", + "autoUpdate.upgradeMode.all": "Update all", + "autoUpdate.upgradeMode.exclude": "Exclude selected", + "autoUpdate.upgradeMode.partial": "Only selected", + "autoUpdate.upgradeModePlaceholder.exclude": "Selected plugins will not auto-update", + "autoUpdate.upgradeModePlaceholder.partial": "Only selected plugins will auto-update. No plugins are currently selected, so no plugins will auto-update.", + "category.agents": "Agent Strategies", + "category.all": "All", + "category.bundles": "Bundles", + "category.datasources": "Data Sources", + "category.extensions": "Extensions", + "category.models": "Models", + "category.tools": "Tools", + "category.triggers": "Triggers", + "categorySingle.agent": "Agent Strategy", + "categorySingle.bundle": "Bundle", + "categorySingle.datasource": "Data Source", + "categorySingle.extension": "Extension", + "categorySingle.model": "Model", + "categorySingle.tool": "Tool", + "categorySingle.trigger": "Trigger", + "debugInfo.title": "Debugging", + "debugInfo.viewDocs": "View Docs", + "deprecated": "Deprecated", + "detailPanel.actionNum": "{{num}} {{action}} INCLUDED", + "detailPanel.categoryTip.debugging": "Debugging Plugin", + "detailPanel.categoryTip.github": "Installed from Github", + "detailPanel.categoryTip.local": "Local Plugin", + "detailPanel.categoryTip.marketplace": "Installed from Marketplace", + "detailPanel.configureApp": "Configure App", + "detailPanel.configureModel": "Configure model", + "detailPanel.configureTool": "Configure tool", + "detailPanel.deprecation.fullMessage": "This plugin has been deprecated due to {{deprecatedReason}}, and will no longer be updated. Please use {{-alternativePluginId}} instead.", + "detailPanel.deprecation.noReason": "This plugin has been deprecated and will no longer be updated.", + "detailPanel.deprecation.onlyReason": "This plugin has been deprecated due to {{deprecatedReason}} and will no longer be updated.", + "detailPanel.deprecation.reason.businessAdjustments": "business adjustments", + "detailPanel.deprecation.reason.noMaintainer": "no maintainer", + "detailPanel.deprecation.reason.ownershipTransferred": "ownership transferred", + "detailPanel.disabled": "Disabled", + "detailPanel.endpointDeleteContent": "Would you like to remove {{name}}? ", + "detailPanel.endpointDeleteTip": "Remove Endpoint", + "detailPanel.endpointDisableContent": "Would you like to disable {{name}}? ", + "detailPanel.endpointDisableTip": "Disable Endpoint", + "detailPanel.endpointModalDesc": "Once configured, the features provided by the plugin via API endpoints can be used.", + "detailPanel.endpointModalTitle": "Setup endpoint", + "detailPanel.endpoints": "Endpoints", + "detailPanel.endpointsDocLink": "View the document", + "detailPanel.endpointsEmpty": "Click the '+' button to add an endpoint", + "detailPanel.endpointsTip": "This plugin provides specific functionalities via endpoints, and you can configure multiple endpoint sets for current workspace.", + "detailPanel.modelNum": "{{num}} MODELS INCLUDED", + "detailPanel.operation.back": "Back", + "detailPanel.operation.checkUpdate": "Check Update", + "detailPanel.operation.detail": "Details", + "detailPanel.operation.info": "Plugin Info", + "detailPanel.operation.install": "Install", + "detailPanel.operation.remove": "Remove", + "detailPanel.operation.update": "Update", + "detailPanel.operation.viewDetail": "View Detail", + "detailPanel.serviceOk": "Service OK", + "detailPanel.strategyNum": "{{num}} {{strategy}} INCLUDED", + "detailPanel.switchVersion": "Switch Version", + "detailPanel.toolSelector.auto": "Auto", + "detailPanel.toolSelector.descriptionLabel": "Tool description", + "detailPanel.toolSelector.descriptionPlaceholder": "Brief description of the tool's purpose, e.g., get the temperature for a specific location.", + "detailPanel.toolSelector.empty": "Click the '+' button to add tools. You can add multiple tools.", + "detailPanel.toolSelector.params": "REASONING CONFIG", + "detailPanel.toolSelector.paramsTip1": "Controls LLM inference parameters.", + "detailPanel.toolSelector.paramsTip2": "When 'Auto' is off, the default value is used.", + "detailPanel.toolSelector.placeholder": "Select a tool...", + "detailPanel.toolSelector.settings": "USER SETTINGS", + "detailPanel.toolSelector.title": "Add tool", + "detailPanel.toolSelector.toolLabel": "Tool", + "detailPanel.toolSelector.toolSetting": "Tool Settings", + "detailPanel.toolSelector.uninstalledContent": "This plugin is installed from the local/GitHub repository. Please use after installation.", + "detailPanel.toolSelector.uninstalledLink": "Manage in Plugins", + "detailPanel.toolSelector.uninstalledTitle": "Tool not installed", + "detailPanel.toolSelector.unsupportedContent": "The installed plugin version does not provide this action.", + "detailPanel.toolSelector.unsupportedContent2": "Click to switch version.", + "detailPanel.toolSelector.unsupportedMCPTool": "Currently selected agent strategy plugin version does not support MCP tools.", + "detailPanel.toolSelector.unsupportedTitle": "Unsupported Action", + "difyVersionNotCompatible": "The current Dify version is not compatible with this plugin, please upgrade to the minimum version required: {{minimalDifyVersion}}", + "endpointsEnabled": "{{num}} sets of endpoints enabled", + "error.fetchReleasesError": "Unable to retrieve releases. Please try again later.", + "error.inValidGitHubUrl": "Invalid GitHub URL. Please enter a valid URL in the format: https://github.com/owner/repo", + "error.noReleasesFound": "No releases found. Please check the GitHub repository or the input URL.", + "findMoreInMarketplace": "Find more in Marketplace", + "from": "From", + "fromMarketplace": "From Marketplace", + "install": "{{num}} installs", + "installAction": "Install", + "installFrom": "INSTALL FROM", + "installFromGitHub.gitHubRepo": "GitHub repository", + "installFromGitHub.installFailed": "Installation failed", + "installFromGitHub.installNote": "Please make sure that you only install plugins from a trusted source.", + "installFromGitHub.installPlugin": "Install plugin from GitHub", + "installFromGitHub.installedSuccessfully": "Installation successful", + "installFromGitHub.selectPackage": "Select package", + "installFromGitHub.selectPackagePlaceholder": "Please select a package", + "installFromGitHub.selectVersion": "Select version", + "installFromGitHub.selectVersionPlaceholder": "Please select a version", + "installFromGitHub.updatePlugin": "Update plugin from GitHub", + "installFromGitHub.uploadFailed": "Upload failed", + "installModal.back": "Back", + "installModal.cancel": "Cancel", + "installModal.close": "Close", + "installModal.dropPluginToInstall": "Drop plugin package here to install", + "installModal.fromTrustSource": "Please make sure that you only install plugins from a trusted source.", + "installModal.install": "Install", + "installModal.installComplete": "Installation complete", + "installModal.installFailed": "Installation failed", + "installModal.installFailedDesc": "The plugin has been installed failed.", + "installModal.installPlugin": "Install Plugin", + "installModal.installWarning": "This plugin is not allowed to be installed.", + "installModal.installedSuccessfully": "Installation successful", + "installModal.installedSuccessfullyDesc": "The plugin has been installed successfully.", + "installModal.installing": "Installing...", + "installModal.labels.package": "Package", + "installModal.labels.repository": "Repository", + "installModal.labels.version": "Version", + "installModal.next": "Next", + "installModal.pluginLoadError": "Plugin load error", + "installModal.pluginLoadErrorDesc": "This plugin will not be installed", + "installModal.readyToInstall": "About to install the following plugin", + "installModal.readyToInstallPackage": "About to install the following plugin", + "installModal.readyToInstallPackages": "About to install the following {{num}} plugins", + "installModal.uploadFailed": "Upload failed", + "installModal.uploadingPackage": "Uploading {{packageName}}...", + "installPlugin": "Install plugin", + "list.noInstalled": "No plugins installed", + "list.notFound": "No plugins found", + "list.source.github": "Install from GitHub", + "list.source.local": "Install from Local Package File", + "list.source.marketplace": "Install from Marketplace", + "marketplace.and": "and", + "marketplace.difyMarketplace": "Dify Marketplace", + "marketplace.discover": "Discover", + "marketplace.empower": "Empower your AI development", + "marketplace.moreFrom": "More from Marketplace", + "marketplace.noPluginFound": "No plugin found", + "marketplace.partnerTip": "Verified by a Dify partner", + "marketplace.pluginsResult": "{{num}} results", + "marketplace.sortBy": "Sort by", + "marketplace.sortOption.firstReleased": "First Released", + "marketplace.sortOption.mostPopular": "Most Popular", + "marketplace.sortOption.newlyReleased": "Newly Released", + "marketplace.sortOption.recentlyUpdated": "Recently Updated", + "marketplace.verifiedTip": "Verified by Dify", + "marketplace.viewMore": "View more", + "metadata.title": "Plugins", + "pluginInfoModal.packageName": "Package", + "pluginInfoModal.release": "Release", + "pluginInfoModal.repository": "Repository", + "pluginInfoModal.title": "Plugin info", + "privilege.admins": "Admins", + "privilege.everyone": "Everyone", + "privilege.noone": "No one", + "privilege.title": "Plugin Preferences", + "privilege.whoCanDebug": "Who can debug plugins?", + "privilege.whoCanInstall": "Who can install and manage plugins?", + "publishPlugins": "Publish plugins", + "readmeInfo.failedToFetch": "Failed to fetch README", + "readmeInfo.needHelpCheckReadme": "Need help? Check the README.", + "readmeInfo.noReadmeAvailable": "No README available", + "readmeInfo.title": "README", + "requestAPlugin": "Request a plugin", + "search": "Search", + "searchCategories": "Search Categories", + "searchInMarketplace": "Search in Marketplace", + "searchPlugins": "Search plugins", + "searchTools": "Search tools...", + "source.github": "GitHub", + "source.local": "Local Package File", + "source.marketplace": "Marketplace", + "task.clearAll": "Clear all", + "task.errorPlugins": "Failed to Install Plugins", + "task.installError": "{{errorLength}} plugins failed to install, click to view", + "task.installSuccess": "{{successLength}} plugins installed successfully", + "task.installed": "Installed", + "task.installedError": "{{errorLength}} plugins failed to install", + "task.installing": "Installing plugins", + "task.installingWithError": "Installing {{installingLength}} plugins, {{successLength}} success, {{errorLength}} failed", + "task.installingWithSuccess": "Installing {{installingLength}} plugins, {{successLength}} success.", + "task.runningPlugins": "Installing Plugins", + "task.successPlugins": "Successfully Installed Plugins", + "upgrade.close": "Close", + "upgrade.description": "About to install the following plugin", + "upgrade.successfulTitle": "Install successful", + "upgrade.title": "Install Plugin", + "upgrade.upgrade": "Install", + "upgrade.upgrading": "Installing...", + "upgrade.usedInApps": "Used in {{num}} apps" +} diff --git a/web/i18n/nl-NL/register.json b/web/i18n/nl-NL/register.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/i18n/nl-NL/register.json @@ -0,0 +1 @@ +{} diff --git a/web/i18n/nl-NL/run-log.json b/web/i18n/nl-NL/run-log.json new file mode 100644 index 0000000000..ed17d6ee60 --- /dev/null +++ b/web/i18n/nl-NL/run-log.json @@ -0,0 +1,23 @@ +{ + "actionLogs": "Action Logs", + "circularInvocationTip": "There is circular invocation of tools/nodes in the current workflow.", + "detail": "DETAIL", + "input": "INPUT", + "meta.executor": "Executor", + "meta.startTime": "Start Time", + "meta.status": "Status", + "meta.steps": "Run Steps", + "meta.time": "Elapsed Time", + "meta.title": "METADATA", + "meta.tokens": "Total Tokens", + "meta.version": "Version", + "result": "RESULT", + "resultEmpty.link": "detail panel", + "resultEmpty.tipLeft": "please go to the ", + "resultEmpty.tipRight": " view it.", + "resultEmpty.title": "This run only output JSON format,", + "resultPanel.status": "STATUS", + "resultPanel.time": "ELAPSED TIME", + "resultPanel.tokens": "TOTAL TOKENS", + "tracing": "TRACING" +} diff --git a/web/i18n/nl-NL/share.json b/web/i18n/nl-NL/share.json new file mode 100644 index 0000000000..adb75ce181 --- /dev/null +++ b/web/i18n/nl-NL/share.json @@ -0,0 +1,72 @@ +{ + "chat.chatFormTip": "Chat settings cannot be modified after the chat has started.", + "chat.chatSettingsTitle": "New chat setup", + "chat.collapse": "Collapse", + "chat.configDisabled": "Previous session settings have been used for this session.", + "chat.configStatusDes": "Before starting, you can modify the conversation settings", + "chat.deleteConversation.content": "Are you sure you want to delete this conversation?", + "chat.deleteConversation.title": "Delete conversation", + "chat.expand": "Expand", + "chat.newChat": "Start New chat", + "chat.newChatDefaultName": "New conversation", + "chat.newChatTip": "Already in a new chat", + "chat.pinnedTitle": "Pinned", + "chat.poweredBy": "Powered by", + "chat.privacyPolicyLeft": "Please read the ", + "chat.privacyPolicyMiddle": "privacy policy", + "chat.privacyPolicyRight": " provided by the app developer.", + "chat.privatePromptConfigTitle": "Conversation settings", + "chat.prompt": "Prompt", + "chat.publicPromptConfigTitle": "Initial Prompt", + "chat.resetChat": "Reset conversation", + "chat.startChat": "Start Chat", + "chat.temporarySystemIssue": "Sorry, temporary system issue.", + "chat.tryToSolve": "Try to solve", + "chat.unpinnedTitle": "Recent", + "chat.viewChatSettings": "View chat settings", + "common.appUnavailable": "App is unavailable", + "common.appUnknownError": "App is unavailable", + "common.welcome": "", + "generation.batchFailed.info": "{{num}} failed executions", + "generation.batchFailed.outputPlaceholder": "No output content", + "generation.batchFailed.retry": "Retry", + "generation.browse": "browse", + "generation.completionResult": "Completion result", + "generation.copy": "Copy", + "generation.csvStructureTitle": "The CSV file must conform to the following structure:", + "generation.csvUploadTitle": "Drag and drop your CSV file here, or ", + "generation.downloadTemplate": "Download the template here", + "generation.errorMsg.atLeastOne": "Please input at least one row in the uploaded file.", + "generation.errorMsg.empty": "Please input content in the uploaded file.", + "generation.errorMsg.emptyLine": "Row {{rowIndex}} is empty", + "generation.errorMsg.fileStructNotMatch": "The uploaded CSV file not match the struct.", + "generation.errorMsg.invalidLine": "Row {{rowIndex}}: {{varName}} value can not be empty", + "generation.errorMsg.moreThanMaxLengthLine": "Row {{rowIndex}}: {{varName}} value can not be more than {{maxLength}} characters", + "generation.execution": "Run", + "generation.executions": "{{num}} runs", + "generation.field": "Field", + "generation.noData": "AI will give you what you want here.", + "generation.queryPlaceholder": "Write your query content...", + "generation.queryTitle": "Query content", + "generation.resultTitle": "AI Completion", + "generation.run": "Execute", + "generation.savedNoData.description": "Start generating content, and find your saved results here.", + "generation.savedNoData.startCreateContent": "Start create content", + "generation.savedNoData.title": "You haven't saved a result yet!", + "generation.stopRun": "Stop Run", + "generation.tabs.batch": "Run Batch", + "generation.tabs.create": "Run Once", + "generation.tabs.saved": "Saved", + "generation.title": "AI Completion", + "humanInput.completed": "Seems like this request was dealt with elsewhere.", + "humanInput.expirationTimeNowOrFuture": "This action will expire {{relativeTime}}.", + "humanInput.expired": "Seems like this request has expired.", + "humanInput.expiredTip": "This action has expired.", + "humanInput.formNotFound": "Form not found.", + "humanInput.rateLimitExceeded": "Too many requests, please try again later.", + "humanInput.recorded": "Your input has been recorded.", + "humanInput.sorry": "Sorry!", + "humanInput.submissionID": "submission_id: {{id}}", + "humanInput.thanks": "Thanks!", + "login.backToHome": "Back to Home" +} diff --git a/web/i18n/nl-NL/time.json b/web/i18n/nl-NL/time.json new file mode 100644 index 0000000000..cd0a0bac51 --- /dev/null +++ b/web/i18n/nl-NL/time.json @@ -0,0 +1,32 @@ +{ + "dateFormats.display": "MMMM D, YYYY", + "dateFormats.displayWithTime": "MMMM D, YYYY hh:mm A", + "dateFormats.input": "YYYY-MM-DD", + "dateFormats.output": "YYYY-MM-DD", + "dateFormats.outputWithTime": "YYYY-MM-DDTHH:mm:ss.SSSZ", + "daysInWeek.Fri": "Fri", + "daysInWeek.Mon": "Mon", + "daysInWeek.Sat": "Sat", + "daysInWeek.Sun": "Sun", + "daysInWeek.Thu": "Thu", + "daysInWeek.Tue": "Tue", + "daysInWeek.Wed": "Wed", + "defaultPlaceholder": "Pick a time...", + "months.April": "April", + "months.August": "August", + "months.December": "December", + "months.February": "February", + "months.January": "January", + "months.July": "July", + "months.June": "June", + "months.March": "March", + "months.May": "May", + "months.November": "November", + "months.October": "October", + "months.September": "September", + "operation.cancel": "Cancel", + "operation.now": "Now", + "operation.ok": "OK", + "operation.pickDate": "Pick Date", + "title.pickTime": "Pick Time" +} diff --git a/web/i18n/nl-NL/tools.json b/web/i18n/nl-NL/tools.json new file mode 100644 index 0000000000..30ee4f58df --- /dev/null +++ b/web/i18n/nl-NL/tools.json @@ -0,0 +1,211 @@ +{ + "addToolModal.added": "added", + "addToolModal.agent.tip": "", + "addToolModal.agent.title": "No agent strategy available", + "addToolModal.all.tip": "", + "addToolModal.all.title": "No tools available", + "addToolModal.built-in.tip": "", + "addToolModal.built-in.title": "No built-in tool available", + "addToolModal.category": "category", + "addToolModal.custom.tip": "Create a custom tool", + "addToolModal.custom.title": "No custom tool available", + "addToolModal.mcp.tip": "Add an MCP server", + "addToolModal.mcp.title": "No MCP tool available", + "addToolModal.type": "type", + "addToolModal.workflow.tip": "Publish workflows as tools in Studio", + "addToolModal.workflow.title": "No workflow tool available", + "allTools": "All tools", + "auth.authorized": "Authorized", + "auth.setup": "Set up authorization to use", + "auth.setupModalTitle": "Set Up Authorization", + "auth.setupModalTitleDescription": "After configuring credentials, all members within the workspace can use this tool when orchestrating applications.", + "auth.unauthorized": "Unauthorized", + "author": "By", + "builtInPromptTitle": "Prompt", + "contribute.line1": "I'm interested in ", + "contribute.line2": "contributing tools to Dify.", + "contribute.viewGuide": "View the guide", + "copyToolName": "Copy Name", + "createCustomTool": "Create Custom Tool", + "createTool.authHeaderPrefix.title": "Auth Type", + "createTool.authHeaderPrefix.types.basic": "Basic", + "createTool.authHeaderPrefix.types.bearer": "Bearer", + "createTool.authHeaderPrefix.types.custom": "Custom", + "createTool.authMethod.key": "Key", + "createTool.authMethod.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", + "createTool.authMethod.queryParam": "Query Parameter", + "createTool.authMethod.queryParamTooltip": "The name of the API key query parameter to pass, e.g. \"key\" in \"https://example.com/test?key=API_KEY\".", + "createTool.authMethod.title": "Authorization method", + "createTool.authMethod.type": "Authorization type", + "createTool.authMethod.types.apiKeyPlaceholder": "HTTP header name for API Key", + "createTool.authMethod.types.apiValuePlaceholder": "Enter API Key", + "createTool.authMethod.types.api_key": "API Key", + "createTool.authMethod.types.api_key_header": "Header", + "createTool.authMethod.types.api_key_query": "Query Param", + "createTool.authMethod.types.none": "None", + "createTool.authMethod.types.queryParamPlaceholder": "Query parameter name for API Key", + "createTool.authMethod.value": "Value", + "createTool.availableTools.action": "Actions", + "createTool.availableTools.description": "Description", + "createTool.availableTools.method": "Method", + "createTool.availableTools.name": "Name", + "createTool.availableTools.path": "Path", + "createTool.availableTools.test": "Test", + "createTool.availableTools.title": "Available Tools", + "createTool.confirmTip": "Apps using this tool will be affected", + "createTool.confirmTitle": "Confirm to save ?", + "createTool.customDisclaimer": "Custom disclaimer", + "createTool.customDisclaimerPlaceholder": "Please enter custom disclaimer", + "createTool.deleteToolConfirmContent": "Deleting the Tool is irreversible. Users will no longer be able to access your Tool.", + "createTool.deleteToolConfirmTitle": "Delete this Tool?", + "createTool.description": "Description", + "createTool.descriptionPlaceholder": "Brief description of the tool's purpose, e.g., get the temperature for a specific location.", + "createTool.editAction": "Configure", + "createTool.editTitle": "Edit Custom Tool", + "createTool.exampleOptions.blankTemplate": "Blank Template", + "createTool.exampleOptions.json": "Weather(JSON)", + "createTool.exampleOptions.yaml": "Pet Store(YAML)", + "createTool.examples": "Examples", + "createTool.importFromUrl": "Import from URL", + "createTool.importFromUrlPlaceHolder": "https://...", + "createTool.name": "Name", + "createTool.nameForToolCall": "Tool call name", + "createTool.nameForToolCallPlaceHolder": "Used for machine recognition, such as getCurrentWeather, list_pets", + "createTool.nameForToolCallTip": "Only supports numbers, letters, and underscores.", + "createTool.privacyPolicy": "Privacy policy", + "createTool.privacyPolicyPlaceholder": "Please enter privacy policy", + "createTool.schema": "Schema", + "createTool.schemaPlaceHolder": "Enter your OpenAPI schema here", + "createTool.title": "Create Custom Tool", + "createTool.toolInput.description": "Description", + "createTool.toolInput.descriptionPlaceholder": "Description of the parameter's meaning", + "createTool.toolInput.label": "Tags", + "createTool.toolInput.labelPlaceholder": "Choose tags(optional)", + "createTool.toolInput.method": "Method", + "createTool.toolInput.methodParameter": "Parameter", + "createTool.toolInput.methodParameterTip": "LLM fills during inference", + "createTool.toolInput.methodSetting": "Setting", + "createTool.toolInput.methodSettingTip": "User fills in the tool configuration", + "createTool.toolInput.name": "Name", + "createTool.toolInput.required": "Required", + "createTool.toolInput.title": "Tool Input", + "createTool.toolNamePlaceHolder": "Enter the tool name", + "createTool.toolOutput.description": "Description", + "createTool.toolOutput.name": "Name", + "createTool.toolOutput.reserved": "Reserved", + "createTool.toolOutput.reservedParameterDuplicateTip": "text, json, and files are reserved variables. Variables with these names cannot appear in the output schema.", + "createTool.toolOutput.title": "Tool Output", + "createTool.urlError": "Please enter a valid URL", + "createTool.viewSchemaSpec": "View the OpenAPI-Swagger Specification", + "customToolTip": "Learn more about Dify custom tools", + "howToGet": "How to get", + "includeToolNum": "{{num}} {{action}} included", + "mcp.authorize": "Authorize", + "mcp.authorizeTip": "After authorization, tools will be displayed here.", + "mcp.authorizing": "Authorizing...", + "mcp.authorizingRequired": "Authorization is required", + "mcp.create.cardLink": "Learn more about MCP server integration", + "mcp.create.cardTitle": "Add MCP Server (HTTP)", + "mcp.delete": "Remove MCP Server", + "mcp.deleteConfirmTitle": "Would you like to remove {{mcp}}?", + "mcp.getTools": "Get tools", + "mcp.gettingTools": "Getting Tools...", + "mcp.identifier": "Server Identifier (Click to Copy)", + "mcp.modal.addHeader": "Add Header", + "mcp.modal.authentication": "Authentication", + "mcp.modal.cancel": "Cancel", + "mcp.modal.clientID": "Client ID", + "mcp.modal.clientSecret": "Client Secret", + "mcp.modal.clientSecretPlaceholder": "Client Secret", + "mcp.modal.configurations": "Configurations", + "mcp.modal.confirm": "Add & Authorize", + "mcp.modal.editTitle": "Edit MCP Server (HTTP)", + "mcp.modal.headerKey": "Header Name", + "mcp.modal.headerKeyPlaceholder": "e.g., Authorization", + "mcp.modal.headerValue": "Header Value", + "mcp.modal.headerValuePlaceholder": "e.g., Bearer token123", + "mcp.modal.headers": "Headers", + "mcp.modal.headersTip": "Additional HTTP headers to send with MCP server requests", + "mcp.modal.maskedHeadersTip": "Header values are masked for security. Changes will update the actual values.", + "mcp.modal.name": "Name & Icon", + "mcp.modal.namePlaceholder": "Name your MCP server", + "mcp.modal.noHeaders": "No custom headers configured", + "mcp.modal.redirectUrlWarning": "Please configure your OAuth redirect URL to:", + "mcp.modal.save": "Save", + "mcp.modal.serverIdentifier": "Server Identifier", + "mcp.modal.serverIdentifierPlaceholder": "Unique identifier, e.g., my-mcp-server", + "mcp.modal.serverIdentifierTip": "Unique identifier for the MCP server within the workspace. Lowercase letters, numbers, underscores, and hyphens only. Up to 24 characters.", + "mcp.modal.serverIdentifierWarning": "The server won't be recognized by existing apps after an ID change", + "mcp.modal.serverUrl": "Server URL", + "mcp.modal.serverUrlPlaceholder": "URL to server endpoint", + "mcp.modal.serverUrlWarning": "Updating the server address may disrupt applications that depend on this server", + "mcp.modal.sseReadTimeout": "SSE Read Timeout", + "mcp.modal.timeout": "Timeout", + "mcp.modal.timeoutPlaceholder": "30", + "mcp.modal.title": "Add MCP Server (HTTP)", + "mcp.modal.useDynamicClientRegistration": "Use Dynamic Client Registration", + "mcp.noConfigured": "Unconfigured", + "mcp.noTools": "No tools available", + "mcp.onlyTool": "1 tool included", + "mcp.operation.edit": "Edit", + "mcp.operation.remove": "Remove", + "mcp.server.addDescription": "Add description", + "mcp.server.edit": "Edit description", + "mcp.server.modal.addTitle": "Add description to enable MCP server", + "mcp.server.modal.confirm": "Enable MCP Server", + "mcp.server.modal.description": "Description", + "mcp.server.modal.descriptionPlaceholder": "Explain what this tool does and how it should be used by the LLM", + "mcp.server.modal.editTitle": "Edit description", + "mcp.server.modal.parameters": "Parameters", + "mcp.server.modal.parametersPlaceholder": "Parameter purpose and constraints", + "mcp.server.modal.parametersTip": "Add descriptions for each parameter to help the LLM understand their purpose and constraints.", + "mcp.server.publishTip": "App not published. Please publish the app first.", + "mcp.server.reGen": "Do you want to regenerator server URL?", + "mcp.server.title": "MCP Server", + "mcp.server.url": "Server URL", + "mcp.toolItem.noDescription": "No description", + "mcp.toolItem.parameters": "Parameters", + "mcp.toolUpdateConfirmContent": "Updating the tool list may affect existing apps. Do you wish to proceed?", + "mcp.toolUpdateConfirmTitle": "Update Tool List", + "mcp.toolsCount": "{{count}} tools", + "mcp.toolsEmpty": "Tools not loaded", + "mcp.toolsNum": "{{count}} tools included", + "mcp.update": "Update", + "mcp.updateTime": "Updated", + "mcp.updateTools": "Updating Tools...", + "mcp.updating": "Updating", + "noCustomTool.content": "Add and manage your custom tools here for building AI apps.", + "noCustomTool.createTool": "Create Tool", + "noCustomTool.title": "No custom tools!", + "noSearchRes.content": "We couldn't find any tools that match your search.", + "noSearchRes.reset": "Reset Search", + "noSearchRes.title": "Sorry, no results!", + "noTools": "No tools found", + "notAuthorized": "Not authorized", + "openInStudio": "Open in Studio", + "setBuiltInTools.file": "file", + "setBuiltInTools.info": "Info", + "setBuiltInTools.infoAndSetting": "Info & Settings", + "setBuiltInTools.number": "number", + "setBuiltInTools.parameters": "parameters", + "setBuiltInTools.required": "Required", + "setBuiltInTools.setting": "Setting", + "setBuiltInTools.string": "string", + "setBuiltInTools.toolDescription": "Tool description", + "test.parameters": "Parameters", + "test.parametersValue": "Parameters & Value", + "test.testResult": "Test Results", + "test.testResultPlaceholder": "Test result will show here", + "test.title": "Test", + "test.value": "Value", + "thought.requestTitle": "Request", + "thought.responseTitle": "Response", + "thought.used": "Used", + "thought.using": "Using", + "title": "Tools", + "toolNameUsageTip": "Tool call name for agent reasoning and prompting", + "toolRemoved": "Tool removed", + "type.builtIn": "Tools", + "type.custom": "Custom", + "type.workflow": "Workflow" +} diff --git a/web/i18n/nl-NL/workflow.json b/web/i18n/nl-NL/workflow.json new file mode 100644 index 0000000000..4d9f5adbac --- /dev/null +++ b/web/i18n/nl-NL/workflow.json @@ -0,0 +1,1154 @@ +{ + "blocks.agent": "Agent", + "blocks.answer": "Answer", + "blocks.assigner": "Variable Assigner", + "blocks.code": "Code", + "blocks.datasource": "Data Source", + "blocks.datasource-empty": "Empty Data Source", + "blocks.document-extractor": "Doc Extractor", + "blocks.end": "Output", + "blocks.http-request": "HTTP Request", + "blocks.human-input": "Human Input", + "blocks.if-else": "IF/ELSE", + "blocks.iteration": "Iteration", + "blocks.iteration-start": "Iteration Start", + "blocks.knowledge-index": "Knowledge Base", + "blocks.knowledge-retrieval": "Knowledge Retrieval", + "blocks.list-operator": "List Operator", + "blocks.llm": "LLM", + "blocks.loop": "Loop", + "blocks.loop-end": "Exit Loop", + "blocks.loop-start": "Loop Start", + "blocks.originalStartNode": "original start node", + "blocks.parameter-extractor": "Parameter Extractor", + "blocks.question-classifier": "Question Classifier", + "blocks.start": "User Input", + "blocks.template-transform": "Template", + "blocks.tool": "Tool", + "blocks.trigger-plugin": "Plugin Trigger", + "blocks.trigger-schedule": "Schedule Trigger", + "blocks.trigger-webhook": "Webhook Trigger", + "blocks.variable-aggregator": "Variable Aggregator", + "blocks.variable-assigner": "Variable Aggregator", + "blocksAbout.agent": "Invoking large language models to answer questions or process natural language", + "blocksAbout.answer": "Define the reply content of a chat conversation", + "blocksAbout.assigner": "The variable assignment node is used for assigning values to writable variables(like conversation variables).", + "blocksAbout.code": "Execute a piece of Python or NodeJS code to implement custom logic", + "blocksAbout.datasource": "Data Source About", + "blocksAbout.datasource-empty": "Empty Data Source placeholder", + "blocksAbout.document-extractor": "Used to parse uploaded documents into text content that is easily understandable by LLM.", + "blocksAbout.end": "Define the output and result type of a workflow", + "blocksAbout.http-request": "Allow server requests to be sent over the HTTP protocol", + "blocksAbout.human-input": "Ask for human to confirm before generating the next step", + "blocksAbout.if-else": "Allows you to split the workflow into two branches based on if/else conditions", + "blocksAbout.iteration": "Perform multiple steps on a list object until all results are outputted.", + "blocksAbout.iteration-start": "Iteration Start node", + "blocksAbout.knowledge-index": "Knowledge Base About", + "blocksAbout.knowledge-retrieval": "Allows you to query text content related to user questions from the Knowledge", + "blocksAbout.list-operator": "Used to filter or sort array content.", + "blocksAbout.llm": "Invoking large language models to answer questions or process natural language", + "blocksAbout.loop": "Execute a loop of logic until the termination condition is met or the maximum loop count is reached.", + "blocksAbout.loop-end": "Equivalent to \"break\". This node has no configuration items. When the loop body reaches this node, the loop terminates.", + "blocksAbout.loop-start": "Loop Start node", + "blocksAbout.parameter-extractor": "Use LLM to extract structured parameters from natural language for tool invocations or HTTP requests.", + "blocksAbout.question-classifier": "Define the classification conditions of user questions, LLM can define how the conversation progresses based on the classification description", + "blocksAbout.start": "Define the initial parameters for launching a workflow", + "blocksAbout.template-transform": "Convert data to string using Jinja template syntax", + "blocksAbout.tool": "Use external tools to extend workflow capabilities", + "blocksAbout.trigger-plugin": "Third-party integration trigger that starts workflows from external platform events", + "blocksAbout.trigger-schedule": "Time-based workflow trigger that starts workflows on a schedule", + "blocksAbout.trigger-webhook": "Webhook Trigger receives HTTP pushes from third-party systems to automatically trigger workflows.", + "blocksAbout.variable-aggregator": "Aggregate multi-branch variables into a single variable for unified configuration of downstream nodes.", + "blocksAbout.variable-assigner": "Aggregate multi-branch variables into a single variable for unified configuration of downstream nodes.", + "changeHistory.clearHistory": "Clear History", + "changeHistory.currentState": "Current State", + "changeHistory.edgeDelete": "Node disconnected", + "changeHistory.hint": "Hint", + "changeHistory.hintText": "Your editing actions are tracked in a change history, which is stored on your device for the duration of this session. This history will be cleared when you leave the editor.", + "changeHistory.nodeAdd": "Node added", + "changeHistory.nodeChange": "Node changed", + "changeHistory.nodeConnect": "Node connected", + "changeHistory.nodeDelete": "Node deleted", + "changeHistory.nodeDescriptionChange": "Node description changed", + "changeHistory.nodeDragStop": "Node moved", + "changeHistory.nodePaste": "Node pasted", + "changeHistory.nodeResize": "Node resized", + "changeHistory.nodeTitleChange": "Node title changed", + "changeHistory.noteAdd": "Note added", + "changeHistory.noteChange": "Note changed", + "changeHistory.noteDelete": "Note deleted", + "changeHistory.placeholder": "You haven't changed anything yet", + "changeHistory.sessionStart": "Session Start", + "changeHistory.stepBackward_one": "{{count}} step backward", + "changeHistory.stepBackward_other": "{{count}} steps backward", + "changeHistory.stepForward_one": "{{count}} step forward", + "changeHistory.stepForward_other": "{{count}} steps forward", + "changeHistory.title": "Change History", + "chatVariable.button": "Add Variable", + "chatVariable.docLink": "Visit our docs to learn more.", + "chatVariable.modal.addArrayValue": "Add Value", + "chatVariable.modal.arrayValue": "Value", + "chatVariable.modal.description": "Description", + "chatVariable.modal.descriptionPlaceholder": "Describe the variable", + "chatVariable.modal.editInForm": "Edit in Form", + "chatVariable.modal.editInJSON": "Edit in JSON", + "chatVariable.modal.editTitle": "Edit Conversation Variable", + "chatVariable.modal.name": "Name", + "chatVariable.modal.namePlaceholder": "Variable name", + "chatVariable.modal.objectKey": "Key", + "chatVariable.modal.objectType": "Type", + "chatVariable.modal.objectValue": "Default Value", + "chatVariable.modal.oneByOne": "Add one by one", + "chatVariable.modal.title": "Add Conversation Variable", + "chatVariable.modal.type": "Type", + "chatVariable.modal.value": "Default Value", + "chatVariable.modal.valuePlaceholder": "Default value, leave blank to not set", + "chatVariable.panelDescription": "Conversation Variables are used to store interactive information that LLM needs to remember, including conversation history, uploaded files, user preferences. They are read-write. ", + "chatVariable.panelTitle": "Conversation Variables", + "chatVariable.storedContent": "Stored content", + "chatVariable.updatedAt": "Updated at ", + "common.ImageUploadLegacyTip": "You can now create file type variables in the start form. We will no longer support the image upload feature in the future. ", + "common.accessAPIReference": "Access API Reference", + "common.addBlock": "Add Node", + "common.addDescription": "Add description...", + "common.addFailureBranch": "Add Fail Branch", + "common.addParallelNode": "Add Parallel Node", + "common.addTitle": "Add title...", + "common.autoSaved": "Auto-Saved", + "common.backupCurrentDraft": "Backup Current Draft", + "common.batchRunApp": "Batch Run App", + "common.branch": "BRANCH", + "common.chooseDSL": "Choose DSL file", + "common.chooseStartNodeToRun": "Choose the start node to run", + "common.configure": "Configure", + "common.configureRequired": "Configure Required", + "common.conversationLog": "Conversation Log", + "common.copy": "Copy", + "common.currentDraft": "Current Draft", + "common.currentDraftUnpublished": "Current Draft Unpublished", + "common.currentView": "Current View", + "common.currentWorkflow": "Current Workflow", + "common.debugAndPreview": "Preview", + "common.disconnect": "Disconnect", + "common.duplicate": "Duplicate", + "common.editing": "Editing", + "common.effectVarConfirm.content": "The variable is used in other nodes. Do you still want to remove it?", + "common.effectVarConfirm.title": "Remove Variable", + "common.embedIntoSite": "Embed Into Site", + "common.enableJinja": "Enable Jinja template support", + "common.exitVersions": "Exit Versions", + "common.exportImage": "Export Image", + "common.exportJPEG": "Export as JPEG", + "common.exportPNG": "Export as PNG", + "common.exportSVG": "Export as SVG", + "common.features": "Features", + "common.featuresDescription": "Enhance web app user experience", + "common.featuresDocLink": "Learn more", + "common.fileUploadTip": "Image upload features have been upgraded to file upload. ", + "common.goBackToEdit": "Go back to editor", + "common.handMode": "Hand Mode", + "common.humanInputEmailTip": "Email (Delivery Method) sent to your configured recipients", + "common.humanInputEmailTipInDebugMode": "Email (Delivery Method) sent to {{email}}", + "common.humanInputWebappTip": "Debug preview only, user will not see this in web app.", + "common.importDSL": "Import DSL", + "common.importDSLTip": "Current draft will be overwritten.\nExport workflow as backup before importing.", + "common.importFailure": "Import Failed", + "common.importSuccess": "Import Successfully", + "common.importWarning": "Caution", + "common.importWarningDetails": "DSL version difference may affect certain features", + "common.inPreview": "In Preview", + "common.inPreviewMode": "In Preview Mode", + "common.inRunMode": "In Run Mode", + "common.input": "Input", + "common.insertVarTip": "Press the '/' key to insert quickly", + "common.jinjaEditorPlaceholder": "Type '/' or '{' to insert variable", + "common.jumpToNode": "Jump to this node", + "common.latestPublished": "Latest Published", + "common.learnMore": "Learn More", + "common.listening": "Listening", + "common.loadMore": "Load More", + "common.manageInTools": "Manage in Tools", + "common.maxTreeDepth": "Maximum limit of {{depth}} nodes per branch", + "common.model": "Model", + "common.moreActions": "More Actions", + "common.needAdd": "{{node}} node must be added", + "common.needAnswerNode": "The Answer node must be added", + "common.needConnectTip": "This step is not connected to anything", + "common.needOutputNode": "The Output node must be added", + "common.needStartNode": "At least one start node must be added", + "common.noHistory": "No History", + "common.noVar": "No variable", + "common.notRunning": "Not running yet", + "common.onFailure": "On Failure", + "common.openInExplore": "Open in Explore", + "common.output": "Output", + "common.overwriteAndImport": "Overwrite and Import", + "common.parallel": "PARALLEL", + "common.parallelTip.click.desc": " to add", + "common.parallelTip.click.title": "Click", + "common.parallelTip.depthLimit": "Parallel nesting layer limit of {{num}} layers", + "common.parallelTip.drag.desc": " to connect", + "common.parallelTip.drag.title": "Drag", + "common.parallelTip.limit": "Parallelism is limited to {{num}} branches.", + "common.pasteHere": "Paste Here", + "common.pointerMode": "Pointer Mode", + "common.preview": "Preview", + "common.previewPlaceholder": "Enter content in the box below to start debugging the Chatbot", + "common.processData": "Process Data", + "common.publish": "Publish", + "common.publishUpdate": "Publish Update", + "common.published": "Published", + "common.publishedAt": "Published", + "common.redo": "Redo", + "common.restart": "Restart", + "common.restore": "Restore", + "common.run": "Test Run", + "common.runAllTriggers": "Run all triggers", + "common.runApp": "Run App", + "common.runHistory": "Run History", + "common.running": "Running", + "common.searchVar": "Search variable", + "common.setVarValuePlaceholder": "Set variable", + "common.showRunHistory": "Show Run History", + "common.syncingData": "Syncing data, just a few seconds.", + "common.tagBound": "Number of apps using this tag", + "common.undo": "Undo", + "common.unpublished": "Unpublished", + "common.update": "Update", + "common.variableNamePlaceholder": "Variable name", + "common.versionHistory": "Version History", + "common.viewDetailInTracingPanel": "View details", + "common.viewOnly": "View Only", + "common.viewRunHistory": "View run history", + "common.workflowAsTool": "Workflow as Tool", + "common.workflowAsToolDisabledHint": "Publish the latest workflow and ensure a connected User Input node before configuring it as a tool.", + "common.workflowAsToolTip": "Tool reconfiguration is required after the workflow update.", + "common.workflowProcess": "Workflow Process", + "customWebhook": "Custom Webhook", + "debug.copyLastRun": "Copy Last Run", + "debug.copyLastRunError": "Failed to copy last run inputs", + "debug.lastOutput": "Last Output", + "debug.lastRunInputsCopied": "{{count}} input(s) copied from last run", + "debug.lastRunTab": "Last Run", + "debug.noData.description": "The results of the last run will be displayed here", + "debug.noData.runThisNode": "Run this node", + "debug.noLastRunFound": "No previous run found", + "debug.noMatchingInputsFound": "No matching inputs found from last run", + "debug.relations.dependencies": "Dependencies", + "debug.relations.dependenciesDescription": "Nodes that this node relies on", + "debug.relations.dependents": "Dependents", + "debug.relations.dependentsDescription": "Nodes that rely on this node", + "debug.relations.noDependencies": "No dependencies", + "debug.relations.noDependents": "No dependents", + "debug.relationsTab": "Relations", + "debug.settingsTab": "Settings", + "debug.variableInspect.chatNode": "Conversation", + "debug.variableInspect.clearAll": "Reset all", + "debug.variableInspect.clearNode": "Clear cached variable", + "debug.variableInspect.edited": "Edited", + "debug.variableInspect.emptyLink": "Learn more", + "debug.variableInspect.emptyTip": "After stepping through a node on the canvas or running a node step by step, you can view the current value of the node variable in Variable Inspect", + "debug.variableInspect.envNode": "Environment", + "debug.variableInspect.export": "export", + "debug.variableInspect.exportToolTip": "Export Variable as File", + "debug.variableInspect.largeData": "Large data, read-only preview. Export to view all.", + "debug.variableInspect.largeDataNoExport": "Large data - partial preview only", + "debug.variableInspect.listening.defaultNodeName": "this trigger", + "debug.variableInspect.listening.defaultPluginName": "this plugin trigger", + "debug.variableInspect.listening.defaultScheduleTime": "Not configured", + "debug.variableInspect.listening.selectedTriggers": "selected triggers", + "debug.variableInspect.listening.stopButton": "Stop", + "debug.variableInspect.listening.tip": "You can now simulate event triggers by sending test requests to HTTP {{nodeName}} endpoint or use it as a callback URL for live event debugging. All outputs can be viewed directly in the Variable Inspector.", + "debug.variableInspect.listening.tipFallback": "Await incoming trigger events. Outputs will appear here.", + "debug.variableInspect.listening.tipPlugin": "Now you can create events in {{- pluginName}}, and retrieve outputs from these events in the Variable Inspector.", + "debug.variableInspect.listening.tipSchedule": "Listening for events from schedule triggers.\nNext scheduled run: {{nextTriggerTime}}", + "debug.variableInspect.listening.title": "Listening for events from triggers...", + "debug.variableInspect.reset": "Reset to last run value", + "debug.variableInspect.resetConversationVar": "Reset conversation variable to default value", + "debug.variableInspect.systemNode": "System", + "debug.variableInspect.title": "Variable Inspect", + "debug.variableInspect.trigger.cached": "View cached variables", + "debug.variableInspect.trigger.clear": "Clear", + "debug.variableInspect.trigger.normal": "Variable Inspect", + "debug.variableInspect.trigger.running": "Caching running status", + "debug.variableInspect.trigger.stop": "Stop run", + "debug.variableInspect.view": "View log", + "difyTeam": "Dify Team", + "entryNodeStatus.disabled": "START • DISABLED", + "entryNodeStatus.enabled": "START", + "env.envDescription": "Environment variables can be used to store private information and credentials. They are read-only and can be separated from the DSL file during export.", + "env.envPanelButton": "Add Variable", + "env.envPanelTitle": "Environment Variables", + "env.export.checkbox": "Export secret values", + "env.export.export": "Export DSL with secret values ", + "env.export.ignore": "Export DSL", + "env.export.title": "Export Secret environment variables?", + "env.modal.description": "Description", + "env.modal.descriptionPlaceholder": "Describe the variable", + "env.modal.editTitle": "Edit Environment Variable", + "env.modal.name": "Name", + "env.modal.namePlaceholder": "env name", + "env.modal.secretTip": "Used to define sensitive information or data, with DSL settings configured for leak prevention.", + "env.modal.title": "Add Environment Variable", + "env.modal.type": "Type", + "env.modal.value": "Value", + "env.modal.valuePlaceholder": "env value", + "error.operations.addingNodes": "adding nodes", + "error.operations.connectingNodes": "connecting nodes", + "error.operations.modifyingWorkflow": "modifying workflow", + "error.operations.updatingWorkflow": "updating workflow", + "error.startNodeRequired": "Please add a start node first before {{operation}}", + "errorMsg.authRequired": "Authorization is required", + "errorMsg.fieldRequired": "{{field}} is required", + "errorMsg.fields.code": "Code", + "errorMsg.fields.model": "Model", + "errorMsg.fields.rerankModel": "A configured Rerank Model", + "errorMsg.fields.variable": "Variable Name", + "errorMsg.fields.variableValue": "Variable Value", + "errorMsg.fields.visionVariable": "Vision Variable", + "errorMsg.invalidJson": "{{field}} is invalid JSON", + "errorMsg.invalidVariable": "Invalid variable", + "errorMsg.noValidTool": "{{field}} no valid tool selected", + "errorMsg.rerankModelRequired": "A configured Rerank Model is required", + "errorMsg.startNodeRequired": "Please add a start node first before {{operation}}", + "errorMsg.toolParameterRequired": "{{field}}: parameter [{{param}}] is required", + "globalVar.description": "System variables are global variables that can be referenced by any node without wiring when the type is correct, such as end-user ID and workflow ID.", + "globalVar.fieldsDescription.appId": "Application ID", + "globalVar.fieldsDescription.conversationId": "Conversation ID", + "globalVar.fieldsDescription.dialogCount": "Conversation Count", + "globalVar.fieldsDescription.triggerTimestamp": "Application start timestamp", + "globalVar.fieldsDescription.userId": "User ID", + "globalVar.fieldsDescription.workflowId": "Workflow ID", + "globalVar.fieldsDescription.workflowRunId": "Workflow run ID", + "globalVar.title": "System Variables", + "nodes.agent.checkList.strategyNotSelected": "Strategy not selected", + "nodes.agent.clickToViewParameterSchema": "Click to view parameter schema", + "nodes.agent.configureModel": "Configure Model", + "nodes.agent.installPlugin.cancel": "Cancel", + "nodes.agent.installPlugin.changelog": "Change log", + "nodes.agent.installPlugin.desc": "About to install the following plugin", + "nodes.agent.installPlugin.install": "Install", + "nodes.agent.installPlugin.title": "Install Plugin", + "nodes.agent.learnMore": "Learn more", + "nodes.agent.linkToPlugin": "Link to Plugins", + "nodes.agent.maxIterations": "Max Iterations", + "nodes.agent.model": "model", + "nodes.agent.modelNotInMarketplace.desc": "This model is installed from Local or GitHub repository. Please use after installation.", + "nodes.agent.modelNotInMarketplace.manageInPlugins": "Manage in Plugins", + "nodes.agent.modelNotInMarketplace.title": "Model not installed", + "nodes.agent.modelNotInstallTooltip": "This model is not installed", + "nodes.agent.modelNotSelected": "Model not selected", + "nodes.agent.modelNotSupport.desc": "The installed plugin version does not provide this model.", + "nodes.agent.modelNotSupport.descForVersionSwitch": "The installed plugin version does not provide this model. Click to switch version.", + "nodes.agent.modelNotSupport.title": "Unsupported Model", + "nodes.agent.modelSelectorTooltips.deprecated": "This model is deprecated", + "nodes.agent.notAuthorized": "Not Authorized", + "nodes.agent.outputVars.files.title": "agent generated files", + "nodes.agent.outputVars.files.transfer_method": "Transfer method.Value is remote_url or local_file", + "nodes.agent.outputVars.files.type": "Support type. Now only support image", + "nodes.agent.outputVars.files.upload_file_id": "Upload file id", + "nodes.agent.outputVars.files.url": "Image url", + "nodes.agent.outputVars.json": "agent generated json", + "nodes.agent.outputVars.text": "agent generated content", + "nodes.agent.outputVars.usage": "Model Usage Information", + "nodes.agent.parameterSchema": "Parameter Schema", + "nodes.agent.pluginInstaller.install": "Install", + "nodes.agent.pluginInstaller.installing": "Installing", + "nodes.agent.pluginNotFoundDesc": "This plugin is installed from GitHub. Please go to Plugins to reinstall", + "nodes.agent.pluginNotInstalled": "This plugin is not installed", + "nodes.agent.pluginNotInstalledDesc": "This plugin is installed from GitHub. Please go to Plugins to reinstall", + "nodes.agent.strategy.configureTip": "Please configure agentic strategy.", + "nodes.agent.strategy.configureTipDesc": "After configuring the agentic strategy, this node will automatically load the remaining configurations. The strategy will affect the mechanism of multi-step tool reasoning. ", + "nodes.agent.strategy.label": "Agentic Strategy", + "nodes.agent.strategy.searchPlaceholder": "Search agentic strategy", + "nodes.agent.strategy.selectTip": "Select agentic strategy", + "nodes.agent.strategy.shortLabel": "Strategy", + "nodes.agent.strategy.tooltip": "Different Agentic strategies determine how the system plans and executes multi-step tool calls", + "nodes.agent.strategyNotFoundDesc": "The installed plugin version does not provide this strategy.", + "nodes.agent.strategyNotFoundDescAndSwitchVersion": "The installed plugin version does not provide this strategy. Click to switch version.", + "nodes.agent.strategyNotInstallTooltip": "{{strategy}} is not installed", + "nodes.agent.strategyNotSet": "Agentic strategy Not Set", + "nodes.agent.toolNotAuthorizedTooltip": "{{tool}} Not Authorized", + "nodes.agent.toolNotInstallTooltip": "{{tool}} is not installed", + "nodes.agent.toolbox": "toolbox", + "nodes.agent.tools": "Tools", + "nodes.agent.unsupportedStrategy": "Unsupported strategy", + "nodes.answer.answer": "Answer", + "nodes.answer.outputVars": "Output Variables", + "nodes.assigner.append": "Append", + "nodes.assigner.assignedVariable": "Assigned Variable", + "nodes.assigner.assignedVarsDescription": "Assigned variables must be writable variables, such as conversation variables.", + "nodes.assigner.clear": "Clear", + "nodes.assigner.noAssignedVars": "No available assigned variables", + "nodes.assigner.noVarTip": "Click the \"+\" button to add variables", + "nodes.assigner.operations.*=": "*=", + "nodes.assigner.operations.+=": "+=", + "nodes.assigner.operations.-=": "-=", + "nodes.assigner.operations./=": "/=", + "nodes.assigner.operations.append": "Append", + "nodes.assigner.operations.clear": "Clear", + "nodes.assigner.operations.extend": "Extend", + "nodes.assigner.operations.over-write": "Overwrite", + "nodes.assigner.operations.overwrite": "Overwrite", + "nodes.assigner.operations.remove-first": "Remove First", + "nodes.assigner.operations.remove-last": "Remove Last", + "nodes.assigner.operations.set": "Set", + "nodes.assigner.operations.title": "Operation", + "nodes.assigner.over-write": "Overwrite", + "nodes.assigner.plus": "Plus", + "nodes.assigner.selectAssignedVariable": "Select assigned variable...", + "nodes.assigner.setParameter": "Set parameter...", + "nodes.assigner.setVariable": "Set Variable", + "nodes.assigner.varNotSet": "Variable NOT Set", + "nodes.assigner.variable": "Variable", + "nodes.assigner.variables": "Variables", + "nodes.assigner.writeMode": "Write Mode", + "nodes.assigner.writeModeTip": "Append mode: Available for array variables only.", + "nodes.code.advancedDependencies": "Advanced Dependencies", + "nodes.code.advancedDependenciesTip": "Add some preloaded dependencies that take more time to consume or are not default built-in here", + "nodes.code.inputVars": "Input Variables", + "nodes.code.outputVars": "Output Variables", + "nodes.code.searchDependencies": "Search Dependencies", + "nodes.code.syncFunctionSignature": "Sync function signature to code", + "nodes.common.errorHandle.defaultValue.desc": "When an error occurs, specify a static output content.", + "nodes.common.errorHandle.defaultValue.inLog": "Node exception, outputting according to default values.", + "nodes.common.errorHandle.defaultValue.output": "Output Default Value", + "nodes.common.errorHandle.defaultValue.tip": "On error, will return below value.", + "nodes.common.errorHandle.defaultValue.title": "Default Value", + "nodes.common.errorHandle.failBranch.customize": "Go to the canvas to customize the fail branch logic.", + "nodes.common.errorHandle.failBranch.customizeTip": "When the fail branch is activated, exceptions thrown by nodes will not terminate the process. Instead, it will automatically execute the predefined fail branch, allowing you to flexibly provide error messages, reports, fixes, or skip actions.", + "nodes.common.errorHandle.failBranch.desc": "When an error occurs, it will execute the exception branch", + "nodes.common.errorHandle.failBranch.inLog": "Node exception, will automatically execute the fail branch. The node output will return an error type and error message and pass them to downstream.", + "nodes.common.errorHandle.failBranch.title": "Fail Branch", + "nodes.common.errorHandle.none.desc": "The node will stop running if an exception occurs and is not handled", + "nodes.common.errorHandle.none.title": "None", + "nodes.common.errorHandle.partialSucceeded.tip": "There are {{num}} nodes in the process running abnormally, please go to tracing to check the logs.", + "nodes.common.errorHandle.tip": "Exception handling strategy, triggered when a node encounters an exception.", + "nodes.common.errorHandle.title": "Error Handling", + "nodes.common.inputVars": "Input Variables", + "nodes.common.insertVarTip": "Insert Variable", + "nodes.common.memories.builtIn": "Built-in", + "nodes.common.memories.tip": "Chat memory", + "nodes.common.memories.title": "Memories", + "nodes.common.memory.assistant": "Assistant prefix", + "nodes.common.memory.conversationRoleName": "Conversation Role Name", + "nodes.common.memory.memory": "Memory", + "nodes.common.memory.memoryTip": "Chat memory settings", + "nodes.common.memory.user": "User prefix", + "nodes.common.memory.windowSize": "Window Size", + "nodes.common.outputVars": "Output Variables", + "nodes.common.pluginNotInstalled": "Plugin is not installed", + "nodes.common.retry.maxRetries": "max retries", + "nodes.common.retry.ms": "ms", + "nodes.common.retry.retries": "{{num}} Retries", + "nodes.common.retry.retry": "Retry", + "nodes.common.retry.retryFailed": "Retry failed", + "nodes.common.retry.retryFailedTimes": "{{times}} retries failed", + "nodes.common.retry.retryInterval": "retry interval", + "nodes.common.retry.retryOnFailure": "retry on failure", + "nodes.common.retry.retrySuccessful": "Retry successful", + "nodes.common.retry.retryTimes": "Retry {{times}} times on failure", + "nodes.common.retry.retrying": "Retrying...", + "nodes.common.retry.times": "times", + "nodes.common.typeSwitch.input": "Input value", + "nodes.common.typeSwitch.variable": "Use variable", + "nodes.dataSource.add": "Add data source", + "nodes.dataSource.supportedFileFormats": "Supported file formats", + "nodes.dataSource.supportedFileFormatsPlaceholder": "File extension, e.g. doc", + "nodes.docExtractor.inputVar": "Input Variable", + "nodes.docExtractor.learnMore": "Learn more", + "nodes.docExtractor.outputVars.text": "Extracted text", + "nodes.docExtractor.supportFileTypes": "Support file types: {{types}}.", + "nodes.end.output.type": "output type", + "nodes.end.output.variable": "output variable", + "nodes.end.outputs": "Outputs", + "nodes.end.type.none": "None", + "nodes.end.type.plain-text": "Plain Text", + "nodes.end.type.structured": "Structured", + "nodes.http.api": "API", + "nodes.http.apiPlaceholder": "Enter URL, type ‘/’ insert variable", + "nodes.http.authorization.api-key": "API-Key", + "nodes.http.authorization.api-key-title": "API Key", + "nodes.http.authorization.auth-type": "Auth Type", + "nodes.http.authorization.authorization": "Authorization", + "nodes.http.authorization.authorizationType": "Authorization Type", + "nodes.http.authorization.basic": "Basic", + "nodes.http.authorization.bearer": "Bearer", + "nodes.http.authorization.custom": "Custom", + "nodes.http.authorization.header": "Header", + "nodes.http.authorization.no-auth": "None", + "nodes.http.binaryFileVariable": "Binary File Variable", + "nodes.http.body": "Body", + "nodes.http.bulkEdit": "Bulk Edit", + "nodes.http.curl.placeholder": "Paste cURL string here", + "nodes.http.curl.title": "Import from cURL", + "nodes.http.extractListPlaceholder": "Enter list item index, type ‘/’ insert variable", + "nodes.http.headers": "Headers", + "nodes.http.inputVars": "Input Variables", + "nodes.http.insertVarPlaceholder": "type '/' to insert variable", + "nodes.http.key": "Key", + "nodes.http.keyValueEdit": "Key-Value Edit", + "nodes.http.notStartWithHttp": "API should start with http:// or https://", + "nodes.http.outputVars.body": "Response Content", + "nodes.http.outputVars.files": "Files List", + "nodes.http.outputVars.headers": "Response Header List JSON", + "nodes.http.outputVars.statusCode": "Response Status Code", + "nodes.http.params": "Params", + "nodes.http.timeout.connectLabel": "Connection Timeout", + "nodes.http.timeout.connectPlaceholder": "Enter connection timeout in seconds", + "nodes.http.timeout.readLabel": "Read Timeout", + "nodes.http.timeout.readPlaceholder": "Enter read timeout in seconds", + "nodes.http.timeout.title": "Timeout", + "nodes.http.timeout.writeLabel": "Write Timeout", + "nodes.http.timeout.writePlaceholder": "Enter write timeout in seconds", + "nodes.http.type": "Type", + "nodes.http.value": "Value", + "nodes.http.verifySSL.title": "Verify SSL Certificate", + "nodes.http.verifySSL.warningTooltip": "Disabling SSL verification is not recommended for production environments. This should only be used in development or testing, as it makes the connection vulnerable to security threats like man-in-the-middle attacks.", + "nodes.humanInput.deliveryMethod.added": "Added", + "nodes.humanInput.deliveryMethod.contactTip1": "Missing a delivery method you need?", + "nodes.humanInput.deliveryMethod.contactTip2": "Tell us at support@dify.ai.", + "nodes.humanInput.deliveryMethod.emailConfigure.allMembers": "All members ({{workspaceName}})", + "nodes.humanInput.deliveryMethod.emailConfigure.body": "Body", + "nodes.humanInput.deliveryMethod.emailConfigure.bodyPlaceholder": "Enter email body", + "nodes.humanInput.deliveryMethod.emailConfigure.debugMode": "Debug Mode", + "nodes.humanInput.deliveryMethod.emailConfigure.debugModeTip1": "In debug mode, the email will only be sent to your account email {{email}}.", + "nodes.humanInput.deliveryMethod.emailConfigure.debugModeTip2": "The production environment is not affected.", + "nodes.humanInput.deliveryMethod.emailConfigure.description": "Send request for input via email", + "nodes.humanInput.deliveryMethod.emailConfigure.memberSelector.add": "+ Add", + "nodes.humanInput.deliveryMethod.emailConfigure.memberSelector.added": "Added", + "nodes.humanInput.deliveryMethod.emailConfigure.memberSelector.placeholder": "Email, comma separated", + "nodes.humanInput.deliveryMethod.emailConfigure.memberSelector.title": "Add workspace members or external recipients", + "nodes.humanInput.deliveryMethod.emailConfigure.memberSelector.trigger": "Select", + "nodes.humanInput.deliveryMethod.emailConfigure.recipient": "Recipient", + "nodes.humanInput.deliveryMethod.emailConfigure.requestURLTip": "The request URL variable is the trigger entry for human input.", + "nodes.humanInput.deliveryMethod.emailConfigure.subject": "Subject", + "nodes.humanInput.deliveryMethod.emailConfigure.subjectPlaceholder": "Enter email subject", + "nodes.humanInput.deliveryMethod.emailConfigure.title": "Email Configuration", + "nodes.humanInput.deliveryMethod.emailSender.debugDone": "A test email has been sent to {{email}}. Please check your inbox.", + "nodes.humanInput.deliveryMethod.emailSender.debugModeTip": "Debug mode is enabled.", + "nodes.humanInput.deliveryMethod.emailSender.debugModeTip2": "Email will be sent to {{email}}.", + "nodes.humanInput.deliveryMethod.emailSender.done": "Email Sent", + "nodes.humanInput.deliveryMethod.emailSender.optional": "(optional)", + "nodes.humanInput.deliveryMethod.emailSender.send": "Send Email", + "nodes.humanInput.deliveryMethod.emailSender.testSendTip": "Send test emails to your configured recipients", + "nodes.humanInput.deliveryMethod.emailSender.testSendTipInDebugMode": "Send a test email to {{email}}", + "nodes.humanInput.deliveryMethod.emailSender.tip": "It is recommended to enable Debug Mode for testing email delivery.", + "nodes.humanInput.deliveryMethod.emailSender.title": "Test Email Sender", + "nodes.humanInput.deliveryMethod.emailSender.vars": "Variables in Form Content", + "nodes.humanInput.deliveryMethod.emailSender.varsTip": "Fill in form variables to emulate what recipients actually see.", + "nodes.humanInput.deliveryMethod.emailSender.wholeTeamDone1": "Email has been sent to {{team}} members and the following email addresses:", + "nodes.humanInput.deliveryMethod.emailSender.wholeTeamDone2": "Email has been sent to {{team}} members.", + "nodes.humanInput.deliveryMethod.emailSender.wholeTeamDone3": "Email has been sent to the following email addresses:", + "nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip1": "Email will be sent to {{team}} members and the following email addresses:", + "nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip2": "Email will be sent to {{team}} members.", + "nodes.humanInput.deliveryMethod.emailSender.wholeTeamTip3": "Email will be sent to the following email addresses:", + "nodes.humanInput.deliveryMethod.emptyTip": "No delivery method added, the operation cannot be triggered.", + "nodes.humanInput.deliveryMethod.notAvailableInTriggerMode": "Not available", + "nodes.humanInput.deliveryMethod.notConfigured": "Not configured", + "nodes.humanInput.deliveryMethod.title": "Delivery Method", + "nodes.humanInput.deliveryMethod.tooltip": "How the human input form is delivered to the user.", + "nodes.humanInput.deliveryMethod.types.discord.description": "Send request for input via Discord", + "nodes.humanInput.deliveryMethod.types.discord.title": "Discord", + "nodes.humanInput.deliveryMethod.types.email.description": "Send request for input via email", + "nodes.humanInput.deliveryMethod.types.email.title": "Email", + "nodes.humanInput.deliveryMethod.types.slack.description": "Send request for input via Slack", + "nodes.humanInput.deliveryMethod.types.slack.title": "Slack", + "nodes.humanInput.deliveryMethod.types.teams.description": "Send request for input via Teams", + "nodes.humanInput.deliveryMethod.types.teams.title": "Teams", + "nodes.humanInput.deliveryMethod.types.webapp.description": "Display to end-user in webapp", + "nodes.humanInput.deliveryMethod.types.webapp.title": "Webapp", + "nodes.humanInput.deliveryMethod.upgradeTip": "Unlock Email delivery for Human Input", + "nodes.humanInput.deliveryMethod.upgradeTipContent": "Send confirmation requests via email before agents take action — useful for publishing and approval workflows.", + "nodes.humanInput.deliveryMethod.upgradeTipHide": "Dismiss", + "nodes.humanInput.editor.previewTip": "In preview mode, action buttons are not functional.", + "nodes.humanInput.errorMsg.duplicateActionId": "Duplicate action ID found in user actions", + "nodes.humanInput.errorMsg.emptyActionId": "Action ID cannot be empty", + "nodes.humanInput.errorMsg.emptyActionTitle": "Action title cannot be empty", + "nodes.humanInput.errorMsg.noDeliveryMethod": "Please select at least one delivery method", + "nodes.humanInput.errorMsg.noDeliveryMethodEnabled": "Please enable at least one delivery method", + "nodes.humanInput.errorMsg.noUserActions": "Please add at least one user action", + "nodes.humanInput.formContent.hotkeyTip": "Press to insert variable, to insert input field", + "nodes.humanInput.formContent.placeholder": "Type content here", + "nodes.humanInput.formContent.preview": "Preview", + "nodes.humanInput.formContent.title": "Form Content", + "nodes.humanInput.formContent.tooltip": "What users will see after opening the form. Supports Markdown formatting.", + "nodes.humanInput.insertInputField.insert": "Insert", + "nodes.humanInput.insertInputField.prePopulateField": "Pre-populate Field", + "nodes.humanInput.insertInputField.prePopulateFieldPlaceholder": "Add or users will see this content initially, or leave empty.", + "nodes.humanInput.insertInputField.saveResponseAs": "Save Response As", + "nodes.humanInput.insertInputField.saveResponseAsPlaceholder": "Name this variable for later reference", + "nodes.humanInput.insertInputField.staticContent": "Static Content", + "nodes.humanInput.insertInputField.title": "Insert Input Field", + "nodes.humanInput.insertInputField.useConstantInstead": "Use Constant Instead", + "nodes.humanInput.insertInputField.useVarInstead": "Use Variable Instead", + "nodes.humanInput.insertInputField.variable": "variable", + "nodes.humanInput.insertInputField.variableNameInvalid": "Variable name can only contain letters, numbers, and underscores, and cannot start with a number", + "nodes.humanInput.log.backstageInputURL": "Backstage input URL:", + "nodes.humanInput.log.reason": "Reason:", + "nodes.humanInput.log.reasonContent": "Human input required to proceed", + "nodes.humanInput.singleRun.back": "Back", + "nodes.humanInput.singleRun.button": "Generate Form", + "nodes.humanInput.singleRun.label": "Form variables", + "nodes.humanInput.timeout.days": "Days", + "nodes.humanInput.timeout.hours": "Hours", + "nodes.humanInput.timeout.title": "Timeout", + "nodes.humanInput.userActions.actionIdFormatTip": "Action ID must start with a letter or underscores, followed by letters, numbers, or underscores", + "nodes.humanInput.userActions.actionIdTooLong": "Action ID must be {{maxLength}} characters or less", + "nodes.humanInput.userActions.actionNamePlaceholder": "Action Name", + "nodes.humanInput.userActions.buttonTextPlaceholder": "Button display Text", + "nodes.humanInput.userActions.buttonTextTooLong": "Button text must be {{maxLength}} characters or less", + "nodes.humanInput.userActions.chooseStyle": "Choose a button style", + "nodes.humanInput.userActions.emptyTip": "Click the '+' button to add user actions", + "nodes.humanInput.userActions.title": "User Actions", + "nodes.humanInput.userActions.tooltip": "Define buttons that users can click to respond to this form. Each button can trigger different workflow paths. Action ID must start with a letter or underscores, followed by letters, numbers, or underscores.", + "nodes.humanInput.userActions.triggered": "{{actionName}} has been triggered", + "nodes.ifElse.addCondition": "Add Condition", + "nodes.ifElse.addSubVariable": "Sub Variable", + "nodes.ifElse.and": "and", + "nodes.ifElse.comparisonOperator.after": "after", + "nodes.ifElse.comparisonOperator.all of": "all of", + "nodes.ifElse.comparisonOperator.before": "before", + "nodes.ifElse.comparisonOperator.contains": "contains", + "nodes.ifElse.comparisonOperator.empty": "is empty", + "nodes.ifElse.comparisonOperator.end with": "end with", + "nodes.ifElse.comparisonOperator.exists": "exists", + "nodes.ifElse.comparisonOperator.in": "in", + "nodes.ifElse.comparisonOperator.is": "is", + "nodes.ifElse.comparisonOperator.is not": "is not", + "nodes.ifElse.comparisonOperator.is not null": "is not null", + "nodes.ifElse.comparisonOperator.is null": "is null", + "nodes.ifElse.comparisonOperator.not contains": "not contains", + "nodes.ifElse.comparisonOperator.not empty": "is not empty", + "nodes.ifElse.comparisonOperator.not exists": "not exists", + "nodes.ifElse.comparisonOperator.not in": "not in", + "nodes.ifElse.comparisonOperator.not null": "is not null", + "nodes.ifElse.comparisonOperator.null": "is null", + "nodes.ifElse.comparisonOperator.start with": "start with", + "nodes.ifElse.conditionNotSetup": "Condition NOT setup", + "nodes.ifElse.else": "Else", + "nodes.ifElse.elseDescription": "Used to define the logic that should be executed when the if condition is not met.", + "nodes.ifElse.enterValue": "Enter value", + "nodes.ifElse.if": "If", + "nodes.ifElse.notSetVariable": "Please set variable first", + "nodes.ifElse.operator": "Operator", + "nodes.ifElse.optionName.audio": "Audio", + "nodes.ifElse.optionName.doc": "Doc", + "nodes.ifElse.optionName.image": "Image", + "nodes.ifElse.optionName.localUpload": "Local Upload", + "nodes.ifElse.optionName.url": "URL", + "nodes.ifElse.optionName.video": "Video", + "nodes.ifElse.or": "or", + "nodes.ifElse.select": "Select", + "nodes.ifElse.selectVariable": "Select variable...", + "nodes.iteration.ErrorMethod.continueOnError": "Continue on Error", + "nodes.iteration.ErrorMethod.operationTerminated": "Terminated", + "nodes.iteration.ErrorMethod.removeAbnormalOutput": "Remove Abnormal Output", + "nodes.iteration.MaxParallelismDesc": "The maximum parallelism is used to control the number of tasks executed simultaneously in a single iteration.", + "nodes.iteration.MaxParallelismTitle": "Maximum parallelism", + "nodes.iteration.answerNodeWarningDesc": "Parallel mode warning: Answer nodes, conversation variable assignments, and persistent read/write operations within iterations may cause exceptions.", + "nodes.iteration.comma": ", ", + "nodes.iteration.currentIteration": "Current Iteration", + "nodes.iteration.deleteDesc": "Deleting the iteration node will delete all child nodes", + "nodes.iteration.deleteTitle": "Delete Iteration Node?", + "nodes.iteration.errorResponseMethod": "Error response method", + "nodes.iteration.error_one": "{{count}} Error", + "nodes.iteration.error_other": "{{count}} Errors", + "nodes.iteration.flattenOutput": "Flatten Output", + "nodes.iteration.flattenOutputDesc": "When enabled, if all iteration outputs are arrays, they will be flattened into a single array. When disabled, outputs will maintain a nested array structure.", + "nodes.iteration.input": "Input", + "nodes.iteration.iteration_one": "{{count}} Iteration", + "nodes.iteration.iteration_other": "{{count}} Iterations", + "nodes.iteration.output": "Output Variables", + "nodes.iteration.parallelMode": "Parallel Mode", + "nodes.iteration.parallelModeEnableDesc": "In parallel mode, tasks within iterations support parallel execution. You can configure this in the properties panel on the right.", + "nodes.iteration.parallelModeEnableTitle": "Parallel Mode Enabled", + "nodes.iteration.parallelModeUpper": "PARALLEL MODE", + "nodes.iteration.parallelPanelDesc": "In parallel mode, tasks in the iteration support parallel execution.", + "nodes.knowledgeBase.aboutRetrieval": "about retrieval method.", + "nodes.knowledgeBase.changeChunkStructure": "Change Chunk Structure", + "nodes.knowledgeBase.chooseChunkStructure": "Choose a chunk structure", + "nodes.knowledgeBase.chunkIsRequired": "Chunk structure is required", + "nodes.knowledgeBase.chunkStructure": "Chunk Structure", + "nodes.knowledgeBase.chunkStructureTip.learnMore": "Learn more", + "nodes.knowledgeBase.chunkStructureTip.message": "The Dify Knowledge Base supports three chunking structures: General, Parent-child, and Q&A. Each knowledge base can have only one structure. The output from the preceding node must align with the selected chunk structure. Note that the choice of chunking structure affects the available index methods.", + "nodes.knowledgeBase.chunkStructureTip.title": "Please choose a chunk structure", + "nodes.knowledgeBase.chunksInput": "Chunks", + "nodes.knowledgeBase.chunksInputTip": "The input variable of the knowledge base node is Chunks. The variable type is an object with a specific JSON Schema which must be consistent with the selected chunk structure.", + "nodes.knowledgeBase.chunksVariableIsRequired": "Chunks variable is required", + "nodes.knowledgeBase.embeddingModelIsInvalid": "Embedding model is invalid", + "nodes.knowledgeBase.embeddingModelIsRequired": "Embedding model is required", + "nodes.knowledgeBase.indexMethodIsRequired": "Index method is required", + "nodes.knowledgeBase.rerankingModelIsInvalid": "Reranking model is invalid", + "nodes.knowledgeBase.rerankingModelIsRequired": "Reranking model is required", + "nodes.knowledgeBase.retrievalSettingIsRequired": "Retrieval setting is required", + "nodes.knowledgeRetrieval.knowledge": "Knowledge", + "nodes.knowledgeRetrieval.metadata.options.automatic.desc": "Automatically generate metadata filtering conditions based on Query Variable", + "nodes.knowledgeRetrieval.metadata.options.automatic.subTitle": "Automatically generate metadata filtering conditions based on user query", + "nodes.knowledgeRetrieval.metadata.options.automatic.title": "Automatic", + "nodes.knowledgeRetrieval.metadata.options.disabled.subTitle": "Not enabling metadata filtering", + "nodes.knowledgeRetrieval.metadata.options.disabled.title": "Disabled", + "nodes.knowledgeRetrieval.metadata.options.manual.subTitle": "Manually add metadata filtering conditions", + "nodes.knowledgeRetrieval.metadata.options.manual.title": "Manual", + "nodes.knowledgeRetrieval.metadata.panel.add": "Add Condition", + "nodes.knowledgeRetrieval.metadata.panel.conditions": "Conditions", + "nodes.knowledgeRetrieval.metadata.panel.datePlaceholder": "Choose a time...", + "nodes.knowledgeRetrieval.metadata.panel.placeholder": "Enter value", + "nodes.knowledgeRetrieval.metadata.panel.search": "Search metadata", + "nodes.knowledgeRetrieval.metadata.panel.select": "Select variable...", + "nodes.knowledgeRetrieval.metadata.panel.title": "Metadata Filter Conditions", + "nodes.knowledgeRetrieval.metadata.tip": "Metadata filtering is the process of using metadata attributes (such as tags, categories, or access permissions) to refine and control the retrieval of relevant information within a system.", + "nodes.knowledgeRetrieval.metadata.title": "Metadata Filtering", + "nodes.knowledgeRetrieval.outputVars.content": "Segmented content", + "nodes.knowledgeRetrieval.outputVars.files": "Retrieved files", + "nodes.knowledgeRetrieval.outputVars.icon": "Segmented icon", + "nodes.knowledgeRetrieval.outputVars.metadata": "Other metadata", + "nodes.knowledgeRetrieval.outputVars.output": "Retrieval segmented data", + "nodes.knowledgeRetrieval.outputVars.title": "Segmented title", + "nodes.knowledgeRetrieval.outputVars.url": "Segmented URL", + "nodes.knowledgeRetrieval.queryAttachment": "Query Images", + "nodes.knowledgeRetrieval.queryText": "Query Text", + "nodes.knowledgeRetrieval.queryVariable": "Query Variable", + "nodes.listFilter.asc": "ASC", + "nodes.listFilter.desc": "DESC", + "nodes.listFilter.extractsCondition": "Extract the N item", + "nodes.listFilter.filterCondition": "Filter Condition", + "nodes.listFilter.filterConditionComparisonOperator": "Filter Condition Comparison Operator", + "nodes.listFilter.filterConditionComparisonValue": "Filter Condition value", + "nodes.listFilter.filterConditionKey": "Filter Condition Key", + "nodes.listFilter.inputVar": "Input Variable", + "nodes.listFilter.limit": "Top N", + "nodes.listFilter.orderBy": "Order by", + "nodes.listFilter.outputVars.first_record": "First record", + "nodes.listFilter.outputVars.last_record": "Last record", + "nodes.listFilter.outputVars.result": "Filter result", + "nodes.listFilter.selectVariableKeyPlaceholder": "Select sub variable key", + "nodes.llm.addMessage": "Add Message", + "nodes.llm.context": "context", + "nodes.llm.contextTooltip": "You can import Knowledge as context", + "nodes.llm.files": "Files", + "nodes.llm.jsonSchema.addChildField": "Add Child Field", + "nodes.llm.jsonSchema.addField": "Add Field", + "nodes.llm.jsonSchema.apply": "Apply", + "nodes.llm.jsonSchema.back": "Back", + "nodes.llm.jsonSchema.descriptionPlaceholder": "Add description", + "nodes.llm.jsonSchema.doc": "Learn more about structured output", + "nodes.llm.jsonSchema.fieldNamePlaceholder": "Field Name", + "nodes.llm.jsonSchema.generate": "Generate", + "nodes.llm.jsonSchema.generateJsonSchema": "Generate JSON Schema", + "nodes.llm.jsonSchema.generatedResult": "Generated Result", + "nodes.llm.jsonSchema.generating": "Generating JSON Schema...", + "nodes.llm.jsonSchema.generationTip": "You can use natural language to quickly create a JSON Schema.", + "nodes.llm.jsonSchema.import": "Import from JSON", + "nodes.llm.jsonSchema.instruction": "Instruction", + "nodes.llm.jsonSchema.promptPlaceholder": "Describe your JSON Schema...", + "nodes.llm.jsonSchema.promptTooltip": "Convert the text description into a standardized JSON Schema structure.", + "nodes.llm.jsonSchema.regenerate": "Regenerate", + "nodes.llm.jsonSchema.required": "required", + "nodes.llm.jsonSchema.resetDefaults": "Reset", + "nodes.llm.jsonSchema.resultTip": "Here is the generated result. If you're not satisfied, you can go back and modify your prompt.", + "nodes.llm.jsonSchema.showAdvancedOptions": "Show advanced options", + "nodes.llm.jsonSchema.stringValidations": "String Validations", + "nodes.llm.jsonSchema.title": "Structured Output Schema", + "nodes.llm.jsonSchema.warningTips.saveSchema": "Please finish editing the current field before saving the schema", + "nodes.llm.model": "model", + "nodes.llm.notSetContextInPromptTip": "To enable the context feature, please fill in the context variable in PROMPT.", + "nodes.llm.outputVars.output": "Generate content", + "nodes.llm.outputVars.reasoning_content": "Reasoning Content", + "nodes.llm.outputVars.usage": "Model Usage Information", + "nodes.llm.prompt": "prompt", + "nodes.llm.reasoningFormat.separated": "Separate think tags", + "nodes.llm.reasoningFormat.tagged": "Keep think tags", + "nodes.llm.reasoningFormat.title": "Enable reasoning tag separation", + "nodes.llm.reasoningFormat.tooltip": "Extract content from think tags and store it in the reasoning_content field.", + "nodes.llm.resolution.high": "High", + "nodes.llm.resolution.low": "Low", + "nodes.llm.resolution.name": "Resolution", + "nodes.llm.roleDescription.assistant": "The model’s responses based on the user messages", + "nodes.llm.roleDescription.system": "Give high level instructions for the conversation", + "nodes.llm.roleDescription.user": "Provide instructions, queries, or any text-based input to the model", + "nodes.llm.singleRun.variable": "Variable", + "nodes.llm.sysQueryInUser": "sys.query in user message is required", + "nodes.llm.variables": "variables", + "nodes.llm.vision": "vision", + "nodes.loop.ErrorMethod.continueOnError": "Continue on Error", + "nodes.loop.ErrorMethod.operationTerminated": "Terminated", + "nodes.loop.ErrorMethod.removeAbnormalOutput": "Remove Abnormal Output", + "nodes.loop.breakCondition": "Loop Termination Condition", + "nodes.loop.breakConditionTip": "Only variables within loops with termination conditions and conversation variables can be referenced.", + "nodes.loop.comma": ", ", + "nodes.loop.currentLoop": "Current Loop", + "nodes.loop.currentLoopCount": "Current loop count: {{count}}", + "nodes.loop.deleteDesc": "Deleting the loop node will remove all child nodes", + "nodes.loop.deleteTitle": "Delete Loop Node?", + "nodes.loop.errorResponseMethod": "Error Response Method", + "nodes.loop.error_one": "{{count}} Error", + "nodes.loop.error_other": "{{count}} Errors", + "nodes.loop.exitConditionTip": "A loop node needs at least one exit condition", + "nodes.loop.finalLoopVariables": "Final Loop Variables", + "nodes.loop.initialLoopVariables": "Initial Loop Variables", + "nodes.loop.input": "Input", + "nodes.loop.inputMode": "Input Mode", + "nodes.loop.loopMaxCount": "Maximum Loop Count", + "nodes.loop.loopMaxCountError": "Please enter a valid maximum loop count, ranging from 1 to {{maxCount}}", + "nodes.loop.loopNode": "Loop Node", + "nodes.loop.loopVariables": "Loop Variables", + "nodes.loop.loop_one": "{{count}} Loop", + "nodes.loop.loop_other": "{{count}} Loops", + "nodes.loop.output": "Output Variable", + "nodes.loop.setLoopVariables": "Set variables within the loop scope", + "nodes.loop.totalLoopCount": "Total loop count: {{count}}", + "nodes.loop.variableName": "Variable Name", + "nodes.note.addNote": "Add Note", + "nodes.note.editor.bold": "Bold", + "nodes.note.editor.bulletList": "Bullet List", + "nodes.note.editor.enterUrl": "Enter URL...", + "nodes.note.editor.invalidUrl": "Invalid URL", + "nodes.note.editor.italic": "Italic", + "nodes.note.editor.large": "Large", + "nodes.note.editor.link": "Link", + "nodes.note.editor.medium": "Medium", + "nodes.note.editor.openLink": "Open", + "nodes.note.editor.placeholder": "Write your note...", + "nodes.note.editor.showAuthor": "Show Author", + "nodes.note.editor.small": "Small", + "nodes.note.editor.strikethrough": "Strikethrough", + "nodes.note.editor.unlink": "Unlink", + "nodes.parameterExtractor.addExtractParameter": "Add Extract Parameter", + "nodes.parameterExtractor.addExtractParameterContent.description": "Description", + "nodes.parameterExtractor.addExtractParameterContent.descriptionPlaceholder": "Extract Parameter Description", + "nodes.parameterExtractor.addExtractParameterContent.name": "Name", + "nodes.parameterExtractor.addExtractParameterContent.namePlaceholder": "Extract Parameter Name", + "nodes.parameterExtractor.addExtractParameterContent.required": "Required", + "nodes.parameterExtractor.addExtractParameterContent.requiredContent": "Required is only used as a reference for model inference, and not for mandatory validation of parameter output.", + "nodes.parameterExtractor.addExtractParameterContent.type": "Type", + "nodes.parameterExtractor.addExtractParameterContent.typePlaceholder": "Extract Parameter Type", + "nodes.parameterExtractor.advancedSetting": "Advanced Setting", + "nodes.parameterExtractor.extractParameters": "Extract Parameters", + "nodes.parameterExtractor.extractParametersNotSet": "Extract Parameters not setup", + "nodes.parameterExtractor.importFromTool": "Import from tools", + "nodes.parameterExtractor.inputVar": "Input Variable", + "nodes.parameterExtractor.instruction": "Instruction", + "nodes.parameterExtractor.instructionTip": "Input additional instructions to help the parameter extractor understand how to extract parameters.", + "nodes.parameterExtractor.outputVars.errorReason": "Error Reason", + "nodes.parameterExtractor.outputVars.isSuccess": "Is Success.On success the value is 1, on failure the value is 0.", + "nodes.parameterExtractor.outputVars.usage": "Model Usage Information", + "nodes.parameterExtractor.reasoningMode": "Reasoning Mode", + "nodes.parameterExtractor.reasoningModeTip": "You can choose the appropriate reasoning mode based on the model's ability to respond to instructions for function calling or prompts.", + "nodes.questionClassifiers.addClass": "Add Class", + "nodes.questionClassifiers.advancedSetting": "Advanced Setting", + "nodes.questionClassifiers.class": "Class", + "nodes.questionClassifiers.classNamePlaceholder": "Write your class name", + "nodes.questionClassifiers.inputVars": "Input Variables", + "nodes.questionClassifiers.instruction": "Instruction", + "nodes.questionClassifiers.instructionPlaceholder": "Write your instruction", + "nodes.questionClassifiers.instructionTip": "Input additional instructions to help the question classifier better understand how to categorize questions.", + "nodes.questionClassifiers.model": "model", + "nodes.questionClassifiers.outputVars.className": "Class Name", + "nodes.questionClassifiers.outputVars.usage": "Model Usage Information", + "nodes.questionClassifiers.topicName": "Topic Name", + "nodes.questionClassifiers.topicPlaceholder": "Write your topic name", + "nodes.start.builtInVar": "Built-in Variables", + "nodes.start.inputField": "Input Field", + "nodes.start.noVarTip": "Set inputs that can be used in the Workflow", + "nodes.start.outputVars.files": "File list", + "nodes.start.outputVars.memories.content": "message content", + "nodes.start.outputVars.memories.des": "Conversation history", + "nodes.start.outputVars.memories.type": "message type", + "nodes.start.outputVars.query": "User input", + "nodes.start.required": "required", + "nodes.templateTransform.code": "Code", + "nodes.templateTransform.codeSupportTip": "Only supports Jinja2", + "nodes.templateTransform.inputVars": "Input Variables", + "nodes.templateTransform.outputVars.output": "Transformed content", + "nodes.tool.authorize": "Authorize", + "nodes.tool.inputVars": "Input Variables", + "nodes.tool.insertPlaceholder1": "Type or press", + "nodes.tool.insertPlaceholder2": "insert variable", + "nodes.tool.outputVars.files.title": "tool generated files", + "nodes.tool.outputVars.files.transfer_method": "Transfer method.Value is remote_url or local_file", + "nodes.tool.outputVars.files.type": "Support type. Now only support image", + "nodes.tool.outputVars.files.upload_file_id": "Upload file id", + "nodes.tool.outputVars.files.url": "Image url", + "nodes.tool.outputVars.json": "tool generated json", + "nodes.tool.outputVars.text": "tool generated content", + "nodes.tool.settings": "Settings", + "nodes.triggerPlugin.addSubscription": "Add New Subscription", + "nodes.triggerPlugin.apiKeyConfigured": "API key configured successfully", + "nodes.triggerPlugin.apiKeyDescription": "Configure API key credentials for authentication", + "nodes.triggerPlugin.authenticationFailed": "Authentication failed", + "nodes.triggerPlugin.authenticationSuccess": "Authentication successful", + "nodes.triggerPlugin.authorized": "Authorized", + "nodes.triggerPlugin.availableSubscriptions": "Available Subscriptions", + "nodes.triggerPlugin.configuration": "Configuration", + "nodes.triggerPlugin.configurationComplete": "Configuration Complete", + "nodes.triggerPlugin.configurationCompleteDescription": "Your trigger has been configured successfully", + "nodes.triggerPlugin.configurationCompleteMessage": "Your trigger configuration is now complete and ready to use.", + "nodes.triggerPlugin.configurationFailed": "Configuration failed", + "nodes.triggerPlugin.configureApiKey": "Configure API Key", + "nodes.triggerPlugin.configureOAuthClient": "Configure OAuth Client", + "nodes.triggerPlugin.configureParameters": "Configure Parameters", + "nodes.triggerPlugin.credentialVerificationFailed": "Credential verification failed", + "nodes.triggerPlugin.credentialsVerified": "Credentials verified successfully", + "nodes.triggerPlugin.error": "Error", + "nodes.triggerPlugin.failedToStart": "Failed to start authentication flow", + "nodes.triggerPlugin.noConfigurationRequired": "No additional configuration required for this trigger.", + "nodes.triggerPlugin.notAuthorized": "Not Authorized", + "nodes.triggerPlugin.notConfigured": "Not Configured", + "nodes.triggerPlugin.oauthClientDescription": "Configure OAuth client credentials to enable authentication", + "nodes.triggerPlugin.oauthClientSaved": "OAuth client configuration saved successfully", + "nodes.triggerPlugin.oauthConfigFailed": "OAuth configuration failed", + "nodes.triggerPlugin.or": "OR", + "nodes.triggerPlugin.parameters": "Parameters", + "nodes.triggerPlugin.parametersDescription": "Configure trigger parameters and properties", + "nodes.triggerPlugin.properties": "Properties", + "nodes.triggerPlugin.propertiesDescription": "Additional configuration properties for this trigger", + "nodes.triggerPlugin.remove": "Remove", + "nodes.triggerPlugin.removeSubscription": "Remove Subscription", + "nodes.triggerPlugin.selectSubscription": "Select Subscription", + "nodes.triggerPlugin.subscriptionName": "Subscription Name", + "nodes.triggerPlugin.subscriptionNameDescription": "Enter a unique name for this trigger subscription", + "nodes.triggerPlugin.subscriptionNamePlaceholder": "Enter subscription name...", + "nodes.triggerPlugin.subscriptionNameRequired": "Subscription name is required", + "nodes.triggerPlugin.subscriptionRemoved": "Subscription removed successfully", + "nodes.triggerPlugin.subscriptionRequired": "Subscription is required", + "nodes.triggerPlugin.useApiKey": "Use API Key", + "nodes.triggerPlugin.useOAuth": "Use OAuth", + "nodes.triggerPlugin.verifyAndContinue": "Verify & Continue", + "nodes.triggerSchedule.cronExpression": "Cron expression", + "nodes.triggerSchedule.days": "Days", + "nodes.triggerSchedule.executeNow": "Execution now", + "nodes.triggerSchedule.executionTime": "Execution Time", + "nodes.triggerSchedule.executionTimeCalculationError": "Failed to calculate execution times", + "nodes.triggerSchedule.executionTimeMustBeFuture": "Execution time must be in the future", + "nodes.triggerSchedule.frequency.daily": "Daily", + "nodes.triggerSchedule.frequency.hourly": "Hourly", + "nodes.triggerSchedule.frequency.label": "FREQUENCY", + "nodes.triggerSchedule.frequency.monthly": "Monthly", + "nodes.triggerSchedule.frequency.weekly": "Weekly", + "nodes.triggerSchedule.frequencyLabel": "Frequency", + "nodes.triggerSchedule.hours": "Hours", + "nodes.triggerSchedule.invalidCronExpression": "Invalid cron expression", + "nodes.triggerSchedule.invalidExecutionTime": "Invalid execution time", + "nodes.triggerSchedule.invalidFrequency": "Invalid frequency", + "nodes.triggerSchedule.invalidMonthlyDay": "Monthly day must be between 1-31 or \"last\"", + "nodes.triggerSchedule.invalidOnMinute": "On minute must be between 0-59", + "nodes.triggerSchedule.invalidStartTime": "Invalid start time", + "nodes.triggerSchedule.invalidTimeFormat": "Invalid time format (expected HH:MM AM/PM)", + "nodes.triggerSchedule.invalidTimezone": "Invalid timezone", + "nodes.triggerSchedule.invalidWeekday": "Invalid weekday: {{weekday}}", + "nodes.triggerSchedule.lastDay": "Last day", + "nodes.triggerSchedule.lastDayTooltip": "Not all months have 31 days. Use the 'last day' option to select each month's final day.", + "nodes.triggerSchedule.minutes": "Minutes", + "nodes.triggerSchedule.mode": "Mode", + "nodes.triggerSchedule.modeCron": "Cron", + "nodes.triggerSchedule.modeVisual": "Visual", + "nodes.triggerSchedule.monthlyDay": "Monthly Day", + "nodes.triggerSchedule.nextExecution": "Next execution", + "nodes.triggerSchedule.nextExecutionTime": "NEXT EXECUTION TIME", + "nodes.triggerSchedule.nextExecutionTimes": "Next 5 execution times", + "nodes.triggerSchedule.noValidExecutionTime": "No valid execution time can be calculated", + "nodes.triggerSchedule.nodeTitle": "Schedule Trigger", + "nodes.triggerSchedule.notConfigured": "Not configured", + "nodes.triggerSchedule.onMinute": "On Minute", + "nodes.triggerSchedule.selectDateTime": "Select Date & Time", + "nodes.triggerSchedule.selectFrequency": "Select frequency", + "nodes.triggerSchedule.selectTime": "Select time", + "nodes.triggerSchedule.startTime": "Start Time", + "nodes.triggerSchedule.startTimeMustBeFuture": "Start time must be in the future", + "nodes.triggerSchedule.time": "Time", + "nodes.triggerSchedule.timezone": "Timezone", + "nodes.triggerSchedule.title": "Schedule", + "nodes.triggerSchedule.useCronExpression": "Use cron expression", + "nodes.triggerSchedule.useVisualPicker": "Use visual picker", + "nodes.triggerSchedule.visualConfig": "Visual Configuration", + "nodes.triggerSchedule.weekdays": "Week days", + "nodes.triggerWebhook.addHeader": "Add", + "nodes.triggerWebhook.addParameter": "Add", + "nodes.triggerWebhook.asyncMode": "Async Mode", + "nodes.triggerWebhook.configPlaceholder": "Webhook trigger configuration will be implemented here", + "nodes.triggerWebhook.contentType": "Content Type", + "nodes.triggerWebhook.copy": "Copy", + "nodes.triggerWebhook.debugUrlCopied": "Copied!", + "nodes.triggerWebhook.debugUrlCopy": "Click to copy", + "nodes.triggerWebhook.debugUrlPrivateAddressWarning": "This URL appears to be an internal address, which may cause webhook requests to fail. You may change TRIGGER_URL to a public address.", + "nodes.triggerWebhook.debugUrlTitle": "For test runs, always use this URL", + "nodes.triggerWebhook.errorHandling": "Error Handling", + "nodes.triggerWebhook.errorStrategy": "Error Handling", + "nodes.triggerWebhook.generate": "Generate", + "nodes.triggerWebhook.headerParameters": "Header Parameters", + "nodes.triggerWebhook.headers": "Headers", + "nodes.triggerWebhook.method": "Method", + "nodes.triggerWebhook.noBodyParameters": "No body parameters configured", + "nodes.triggerWebhook.noHeaders": "No headers configured", + "nodes.triggerWebhook.noParameters": "No parameters configured", + "nodes.triggerWebhook.noQueryParameters": "No query parameters configured", + "nodes.triggerWebhook.nodeTitle": "🔗 Webhook Trigger", + "nodes.triggerWebhook.parameterName": "Variable name", + "nodes.triggerWebhook.queryParameters": "Query Parameters", + "nodes.triggerWebhook.requestBodyParameters": "Request Body Parameters", + "nodes.triggerWebhook.required": "Required", + "nodes.triggerWebhook.responseBody": "Response Body", + "nodes.triggerWebhook.responseBodyPlaceholder": "Write your response body here", + "nodes.triggerWebhook.responseConfiguration": "Response", + "nodes.triggerWebhook.statusCode": "Status Code", + "nodes.triggerWebhook.test": "Test", + "nodes.triggerWebhook.title": "Webhook Trigger", + "nodes.triggerWebhook.urlCopied": "URL copied to clipboard", + "nodes.triggerWebhook.urlGenerated": "Webhook URL generated successfully", + "nodes.triggerWebhook.urlGenerationFailed": "Failed to generate webhook URL", + "nodes.triggerWebhook.validation.invalidParameterType": "Invalid parameter type \"{{type}}\" for parameter \"{{name}}\"", + "nodes.triggerWebhook.validation.webhookUrlRequired": "Webhook URL is required", + "nodes.triggerWebhook.varName": "Variable name", + "nodes.triggerWebhook.varNamePlaceholder": "Enter variable name...", + "nodes.triggerWebhook.varType": "Type", + "nodes.triggerWebhook.webhookUrl": "Webhook URL", + "nodes.triggerWebhook.webhookUrlPlaceholder": "Click generate to create webhook URL", + "nodes.variableAssigner.addGroup": "Add Group", + "nodes.variableAssigner.aggregationGroup": "Aggregation Group", + "nodes.variableAssigner.aggregationGroupTip": "Enabling this feature allows the variable aggregator to aggregate multiple sets of variables.", + "nodes.variableAssigner.noVarTip": "Add the variables to be assigned", + "nodes.variableAssigner.outputType": "Output Type", + "nodes.variableAssigner.outputVars.varDescribe": "{{groupName}} output", + "nodes.variableAssigner.setAssignVariable": "Set assign variable", + "nodes.variableAssigner.title": "Assign variables", + "nodes.variableAssigner.type.array": "Array", + "nodes.variableAssigner.type.number": "Number", + "nodes.variableAssigner.type.object": "Object", + "nodes.variableAssigner.type.string": "String", + "nodes.variableAssigner.varNotSet": "Variable not set", + "onboarding.aboutStartNode": "about start node.", + "onboarding.back": "Back", + "onboarding.description": "Different start nodes have different capabilities. Don't worry, you can always change them later.", + "onboarding.escTip.key": "esc", + "onboarding.escTip.press": "Press", + "onboarding.escTip.toDismiss": "to dismiss", + "onboarding.learnMore": "Learn more", + "onboarding.title": "Select a start node to begin", + "onboarding.trigger": "Trigger", + "onboarding.triggerDescription": "Triggers can serve as the start node of a workflow, such as scheduled tasks, custom webhooks, or integrations with other apps.", + "onboarding.userInputDescription": "Start node that allows setting user input variables, with web app, service API, MCP server, and workflow as tool capabilities.", + "onboarding.userInputFull": "User Input (original start node)", + "operator.alignBottom": "Bottom", + "operator.alignCenter": "Center", + "operator.alignLeft": "Left", + "operator.alignMiddle": "Middle", + "operator.alignNodes": "Align Nodes", + "operator.alignRight": "Right", + "operator.alignTop": "Top", + "operator.distributeHorizontal": "Space Horizontally", + "operator.distributeVertical": "Space Vertically", + "operator.horizontal": "Horizontal", + "operator.selectionAlignment": "Selection Alignment", + "operator.vertical": "Vertical", + "operator.zoomIn": "Zoom In", + "operator.zoomOut": "Zoom Out", + "operator.zoomTo100": "Zoom to 100%", + "operator.zoomTo50": "Zoom to 50%", + "operator.zoomToFit": "Zoom to Fit", + "panel.about": "About", + "panel.addNextStep": "Add the next step in this workflow", + "panel.change": "Change", + "panel.changeBlock": "Change Node", + "panel.checklist": "Checklist", + "panel.checklistResolved": "All issues are resolved", + "panel.checklistTip": "Make sure all issues are resolved before publishing", + "panel.createdBy": "Created By ", + "panel.goTo": "Go to", + "panel.helpLink": "View Docs", + "panel.maximize": "Maximize Canvas", + "panel.minimize": "Exit Full Screen", + "panel.nextStep": "Next Step", + "panel.openWorkflow": "Open Workflow", + "panel.optional": "(optional)", + "panel.optional_and_hidden": "(optional & hidden)", + "panel.organizeBlocks": "Organize nodes", + "panel.runThisStep": "Run this step", + "panel.scrollToSelectedNode": "Scroll to selected node", + "panel.selectNextStep": "Select Next Step", + "panel.startNode": "Start Node", + "panel.userInputField": "User Input Field", + "publishLimit.startNodeDesc": "You’ve reached the limit of 2 triggers per workflow for this plan. Upgrade to publish this workflow.", + "publishLimit.startNodeTitlePrefix": "Upgrade to", + "publishLimit.startNodeTitleSuffix": "unlock unlimited triggers per workflow", + "sidebar.exportWarning": "Export Current Saved Version", + "sidebar.exportWarningDesc": "This will export the current saved version of your workflow. If you have unsaved changes in the editor, please save them first by using the export option in the workflow canvas.", + "singleRun.back": "Back", + "singleRun.iteration": "Iteration", + "singleRun.loop": "Loop", + "singleRun.preparingDataSource": "Preparing Data Source", + "singleRun.reRun": "Re-run", + "singleRun.running": "Running", + "singleRun.startRun": "Start Run", + "singleRun.testRun": "Test Run", + "singleRun.testRunIteration": "Test Run Iteration", + "singleRun.testRunLoop": "Test Run Loop", + "tabs.-": "Default", + "tabs.addAll": "Add all", + "tabs.agent": "Agent Strategy", + "tabs.allAdded": "All added", + "tabs.allTool": "All", + "tabs.allTriggers": "All triggers", + "tabs.blocks": "Nodes", + "tabs.customTool": "Custom", + "tabs.featuredTools": "Featured", + "tabs.hideActions": "Hide tools", + "tabs.installed": "Installed", + "tabs.logic": "Logic", + "tabs.noFeaturedPlugins": "Discover more tools in Marketplace", + "tabs.noFeaturedTriggers": "Discover more triggers in Marketplace", + "tabs.noPluginsFound": "No plugins were found", + "tabs.noResult": "No match found", + "tabs.plugin": "Plugin", + "tabs.pluginByAuthor": "By {{author}}", + "tabs.question-understand": "Question Understand", + "tabs.requestToCommunity": "Requests to the community", + "tabs.searchBlock": "Search node", + "tabs.searchDataSource": "Search Data Source", + "tabs.searchTool": "Search tool", + "tabs.searchTrigger": "Search triggers...", + "tabs.showLessFeatured": "Show less", + "tabs.showMoreFeatured": "Show more", + "tabs.sources": "Sources", + "tabs.start": "Start", + "tabs.startDisabledTip": "Trigger node and user input node are mutually exclusive.", + "tabs.tools": "Tools", + "tabs.transform": "Transform", + "tabs.usePlugin": "Select tool", + "tabs.utilities": "Utilities", + "tabs.workflowTool": "Workflow", + "tracing.stopBy": "Stop by {{user}}", + "triggerStatus.disabled": "TRIGGER • DISABLED", + "triggerStatus.enabled": "TRIGGER", + "variableReference.assignedVarsDescription": "Assigned variables must be writable variables, such as ", + "variableReference.conversationVars": "conversation variables", + "variableReference.noAssignedVars": "No available assigned variables", + "variableReference.noAvailableVars": "No available variables", + "variableReference.noVarsForOperation": "There are no variables available for assignment with the selected operation.", + "versionHistory.action.copyIdSuccess": "ID copied to clipboard", + "versionHistory.action.deleteFailure": "Failed to delete version", + "versionHistory.action.deleteSuccess": "Version deleted", + "versionHistory.action.restoreFailure": "Failed to restore version", + "versionHistory.action.restoreSuccess": "Version restored", + "versionHistory.action.updateFailure": "Failed to update version", + "versionHistory.action.updateSuccess": "Version updated", + "versionHistory.copyId": "Copy ID", + "versionHistory.currentDraft": "Current Draft", + "versionHistory.defaultName": "Untitled Version", + "versionHistory.deletionTip": "Deletion is irreversible, please confirm.", + "versionHistory.editField.releaseNotes": "Release Notes", + "versionHistory.editField.releaseNotesLengthLimit": "Release notes can't exceed {{limit}} characters", + "versionHistory.editField.title": "Title", + "versionHistory.editField.titleLengthLimit": "Title can't exceed {{limit}} characters", + "versionHistory.editVersionInfo": "Edit version info", + "versionHistory.filter.all": "All", + "versionHistory.filter.empty": "No matching version history found", + "versionHistory.filter.onlyShowNamedVersions": "Only show named versions", + "versionHistory.filter.onlyYours": "Only yours", + "versionHistory.filter.reset": "Reset Filter", + "versionHistory.latest": "Latest", + "versionHistory.nameThisVersion": "Name this version", + "versionHistory.releaseNotesPlaceholder": "Describe what changed", + "versionHistory.restorationTip": "After version restoration, the current draft will be overwritten.", + "versionHistory.title": "Versions" +} diff --git a/web/utils/format.ts b/web/utils/format.ts index 1146d1bfcd..04a8ba0b60 100644 --- a/web/utils/format.ts +++ b/web/utils/format.ts @@ -8,6 +8,7 @@ import 'dayjs/locale/fr' import 'dayjs/locale/hi' import 'dayjs/locale/id' import 'dayjs/locale/it' +import 'dayjs/locale/nl' import 'dayjs/locale/ja' import 'dayjs/locale/ko' import 'dayjs/locale/pl'