Feat/i18n restructure (#2529)

This commit is contained in:
crazywoola 2024-02-23 14:31:06 +08:00 • committed by GitHub
commit 9574730050
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
140 changed files with 448 additions and 659 deletions

View file

@ -0,0 +1,90 @@
const translation = {
title: '标注',
name: '标注回复',
editBy: '{{author}}编辑的答案',
noData: {
title: '没有标注',
description: '你可以在应用会话调试中编辑标注,也可以在此批量导入标注用于高质量回复。',
},
table: {
header: {
question: '提问',
match: '匹配',
response: '回复',
answer: '答案',
createdAt: '创建时间',
hits: '命中次数',
actions: '操作',
addAnnotation: '添加标注',
bulkImport: '批量导入',
bulkExport: '批量导出',
clearAll: '删除所有标注',
},
},
editModal: {
title: '编辑标注回复',
queryName: '用户提问',
answerName: '机器回复',
yourAnswer: '您的回复',
answerPlaceholder: '在这里输入您的回复',
yourQuery: '您的提问',
queryPlaceholder: '在这里输入您的提问',
removeThisCache: '删除此标注',
createdAt: '创建于',
},
addModal: {
title: '添加标注回复',
queryName: '提问',
answerName: '回复',
answerPlaceholder: '输入回复',
queryPlaceholder: '输入提问',
createNext: '添加下一个标注回复',
},
batchModal: {
title: '批量导入',
csvUploadTitle: '将您的 CSV 文件拖放到此处,或',
browse: '选择文件',
tip: 'CSV 文件必须符合以下结构:',
question: '问题',
answer: '回答',
contentTitle: '分段内容',
content: '内容',
template: '下载模板',
cancel: '取消',
run: '导入',
runError: '批量导入失败',
processing: '批量处理中',
completed: '导入完成',
error: '导入出错',
ok: '确定',
},
errorMessage: {
answerRequired: '回复不能为空',
queryRequired: '提问不能为空',
},
viewModal: {
annotatedResponse: '标注回复',
hitHistory: '命中历史',
hit: '次命中',
hits: '次命中',
noHitHistory: '没有命中历史',
},
hitHistoryTable: {
question: '问题',
query: '提问',
match: '匹配',
response: '回复',
source: '来源',
score: '分数',
time: '时间',
},
initSetup: {
title: '标注回复初始设置',
configTitle: '标注回复设置',
confirmBtn: '保存并启用',
configConfirmBtn: '保存',
},
embeddingModelSwitchTip: '标注文本向量化模型,切换模型会重新嵌入,产生额外费用消耗',
}
export default translation

View file

@ -0,0 +1,82 @@
const translation = {
apiServer: 'API 服务器',
apiKey: 'API 密钥',
status: '状态',
disabled: '已停用',
ok: '运行中',
copy: '复制',
copied: '已复制',
play: '播放',
pause: '暂停',
playing: '播放中',
merMaind: {
rerender: '重新渲染',
},
never: '从未',
apiKeyModal: {
apiSecretKey: 'API 密钥',
apiSecretKeyTips: '如果不想你的 API 被滥用,请保护好你的 API Key :) 最佳实践是避免在前端代码中明文引用。',
createNewSecretKey: '创建密钥',
secretKey: '密钥',
created: '创建时间',
lastUsed: '最后使用',
generateTips: '请将此密钥保存在安全且可访问的地方。',
},
actionMsg: {
deleteConfirmTitle: '删除此密钥?',
deleteConfirmTips: '删除密钥无法撤销,正在使用中的应用会受影响。',
ok: '好的',
},
completionMode: {
title: '文本生成型应用 API',
info: '可用于生成高质量文本的应用,例如生成文章、摘要、翻译等,通过调用 completion-messages 接口,发送用户输入得到生成文本结果。用于生成文本的模型参数和提示词模版取决于开发者在 Dify 提示词编排页的设置。',
createCompletionApi: '创建文本补全消息',
createCompletionApiTip: '创建文本补全消息,支持一问一答模式。',
inputsTips: '(选填)以键值对方式提供用户输入字段,与提示词编排中的变量对应。Key 为变量名称,Value 是参数值。如果字段类型为 Select,传入的 Value 需为预设选项之一。',
queryTips: '用户输入的文本正文。',
blocking: 'blocking 阻塞型,等待执行完毕后返回结果。(请求若流程较长可能会被中断)',
streaming: 'streaming 流式返回。基于 SSE(**[Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events)**)实现流式返回。',
messageFeedbackApi: '消息反馈(点赞)',
messageFeedbackApiTip: '代表最终用户对返回消息进行评价,可以点赞与点踩,该数据将在“日志与标注”页中可见,并用于后续的模型微调。',
messageIDTip: '消息 ID',
ratingTip: 'like 或 dislike, 空值为撤销',
parametersApi: '获取应用配置信息',
parametersApiTip: '获取已配置的 Input 参数,包括变量名、字段名称、类型与默认值。通常用于客户端加载后显示这些字段的表单或填入默认值。',
},
chatMode: {
title: '对话型应用 API',
info: '可用于大部分场景的对话型应用,采用一问一答模式与用户持续对话。要开始一个对话请调用 chat-messages 接口,通过继续传入返回的 conversation_id 可持续保持该会话。',
createChatApi: '发送对话消息',
createChatApiTip: '创建会话消息,或基于此前的对话继续发送消息。',
inputsTips: '(选填)以键值对方式提供用户输入字段,与提示词编排中的变量对应。Key 为变量名称,Value 是参数值。如果字段类型为 Select,传入的 Value 需为预设选项之一。',
queryTips: ' 用户输入/提问内容',
blocking: 'blocking 阻塞型,等待执行完毕后返回结果。(请求若流程较长可能会被中断)',
streaming: 'streaming 流式返回。基于 SSE(**[Server-Sent Events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events)**)实现流式返回。',
conversationIdTip: '(选填)会话标识符,首次对话可为空,如果要继续对话请传入上下文返回的 conversation_id',
messageFeedbackApi: '消息反馈(点赞)',
messageFeedbackApiTip: '代表最终用户对返回消息进行评价,可以点赞与点踩,该数据将在“日志与标注”页中可见,并用于后续的模型微调。',
messageIDTip: '消息 ID',
ratingTip: 'like 或 dislike, 空值为撤销',
chatMsgHistoryApi: '获取会话历史消息',
chatMsgHistoryApiTip: '滚动加载形式返回历史聊天记录,第一页返回最新 `limit` 条,即:倒序返回。',
chatMsgHistoryConversationIdTip: '会话 ID',
chatMsgHistoryFirstId: '当前页第一条聊天记录的 ID,默认 none',
chatMsgHistoryLimit: '一次请求返回多少条聊天记录',
conversationsListApi: '获取会话列表',
conversationsListApiTip: '获取当前用户的会话列表,默认返回最近的 20 条。',
conversationsListFirstIdTip: ' 当前页最前面一条记录的 ID,默认 none',
conversationsListLimitTip: '一次请求返回多少条记录',
conversationRenamingApi: '会话重命名',
conversationRenamingApiTip: '对会话进行重命名,会话名称用于显示在支持多会话的客户端上。',
conversationRenamingNameTip: '新的名称',
parametersApi: '获取应用配置信息',
parametersApiTip: '获取已配置的 Input 参数,包括变量名、字段名称、类型与默认值。通常用于客户端加载后显示这些字段的表单或填入默认值。',
},
develop: {
requestBody: 'Request Body',
pathParams: 'Path Params',
query: 'Query',
},
}
export default translation

View file

@ -0,0 +1,403 @@
const translation = {
pageTitle: {
line1: '提示词',
line2: '编排',
},
orchestrate: '编排',
promptMode: {
simple: '切换到专家模式以编辑完整的提示词',
advanced: '专家模式',
switchBack: '返回简易模式',
advancedWarning: {
title: '您已切换到专家模式,一旦修改提示词,将无法返回简易模式。',
description: '在专家模式下,您可以编辑完整的提示词。',
learnMore: '了解更多',
ok: '确定',
},
operation: {
addMessage: '添加消息',
},
contextMissing: '上下文内容块缺失,提示词的有效性可能不好。',
},
operation: {
applyConfig: '发布',
resetConfig: '重置',
debugConfig: '调试',
addFeature: '添加功能',
automatic: '自动编排',
stopResponding: '停止响应',
agree: '赞同',
disagree: '反对',
cancelAgree: '取消赞同',
cancelDisagree: '取消反对',
userAction: '用户表示',
},
notSetAPIKey: {
title: 'LLM 提供者的密钥未设置',
trailFinished: '试用已结束',
description: '在调试之前需要设置 LLM 提供者的密钥。',
settingBtn: '去设置',
},
trailUseGPT4Info: {
title: '当前不支持使用 gpt-4',
description: '使用 gpt-4,请设置 API Key',
},
feature: {
groupChat: {
title: '聊天增强',
description: '为聊天型应用添加预对话设置,可以提升用户体验。',
},
groupExperience: {
title: '体验增强',
},
conversationOpener: {
title: '对话开场白',
description: '在对话型应用中,让 AI 主动说第一段话可以拉近与用户间的距离。',
},
suggestedQuestionsAfterAnswer: {
title: '下一步问题建议',
description: '设置下一步问题建议可以让用户更好的对话。',
resDes: '回答结束后系统会给出 3 个建议',
tryToAsk: '试着问问',
},
moreLikeThis: {
title: '更多类似的',
description: '一次生成多条文本,可在此基础上编辑并继续生成',
generateNumTip: '每次生成数',
tip: '使用此功能将会额外消耗 tokens',
},
speechToText: {
title: '语音转文字',
description: '启用后,您可以使用语音输入。',
resDes: '语音输入已启用',
},
textToSpeech: {
title: '文字转语音',
description: '启用后,文本可以转换成语音。',
resDes: '文本转音频已启用',
},
citation: {
title: '引用和归属',
description: '启用后,显示源文档和生成内容的归属部分。',
resDes: '引用和归属已启用',
},
annotation: {
title: '标注回复',
description: '启用后,将标注用户的回复,以便在用户重复提问时快速响应。',
resDes: '标注回复已启用',
scoreThreshold: {
title: '分数阈值',
description: '用于设置标注回复的匹配相似度阈值。',
easyMatch: '容易匹配',
accurateMatch: '精准匹配',
},
matchVariable: {
title: '匹配变量',
choosePlaceholder: '请选择变量',
},
cacheManagement: '标注管理',
cached: '已标注',
remove: '移除',
removeConfirm: '删除这个标注?',
add: '添加标注',
edit: '编辑标注',
},
dataSet: {
title: '上下文',
noData: '您可以导入知识库作为上下文',
words: '词',
textBlocks: '文本块',
selectTitle: '选择引用知识库',
selected: '个知识库被选中',
noDataSet: '未找到知识库',
toCreate: '去创建',
notSupportSelectMulti: '目前只支持引用一个知识库',
queryVariable: {
title: '查询变量',
tip: '该变量将用作上下文检索的查询输入,获取与该变量的输入相关的上下文信息。',
choosePlaceholder: '请选择变量',
noVar: '没有变量',
noVarTip: '请创建变量',
unableToQueryDataSet: '无法查询知识库',
unableToQueryDataSetTip: '无法成功查询知识库,请在上下文部分选择一个上下文查询变量。',
ok: '好的',
contextVarNotEmpty: '上下文查询变量不能为空',
deleteContextVarTitle: '删除变量“{{varName}}”?',
deleteContextVarTip: '该变量已被设置为上下文查询变量,删除该变量将影响知识库的正常使用。 如果您仍需要删除它,请在上下文部分中重新选择它。',
},
},
tools: {
title: '工具',
tips: '工具提供了一个标准的 API 调用方式,将用户输入或变量作为 API 的请求参数,用于查询外部数据作为上下文。',
toolsInUse: '{{count}} 工具使用中',
modal: {
title: '工具',
toolType: {
title: '工具类型',
placeholder: '请选择工具类型',
},
name: {
title: '名称',
placeholder: '请填写名称',
},
variableName: {
title: '变量名称',
placeholder: '请填写变量名称',
},
},
},
conversationHistory: {
title: '对话历史',
description: '设置对话角色的前缀名称',
tip: '对话历史未启用,请在上面的提示中添加<histories>。',
learnMore: '了解更多',
editModal: {
title: '编辑对话角色名称',
userPrefix: '用户前缀',
assistantPrefix: '助手前缀',
},
},
toolbox: {
title: '工具箱',
},
moderation: {
title: '内容审查',
description: '您可以调用审查 API 或者维护敏感词库来使模型更安全地输出。',
allEnabled: '审查输入/审查输出 内容已启用',
inputEnabled: '审查输入内容已启用',
outputEnabled: '审查输出内容已启用',
modal: {
title: '内容审查设置',
provider: {
title: '类别',
openai: 'OpenAI Moderation',
openaiTip: {
prefix: 'OpenAI Moderation 需要在',
suffix: '中配置 OpenAI API 密钥。',
},
keywords: '关键词',
},
keywords: {
tip: '每行一个,用换行符分隔。每行最多 100 个字符。',
placeholder: '每行一个,用换行符分隔',
line: '行',
},
content: {
input: '审查输入内容',
output: '审查输出内容',
preset: '预设回复',
placeholder: '这里预设回复内容',
condition: '审查输入内容和审查输出内容至少启用一项',
fromApi: '预设回复通过 API 返回',
errorMessage: '预设回复不能为空',
supportMarkdown: '支持 Markdown',
},
openaiNotConfig: {
before: 'OpenAI 内容审查需要在',
after: '中配置 OpenAI API 密钥。',
},
},
},
},
automatic: {
title: '自动编排',
description: '描述您的场景,Dify 将为您编排一个应用。',
intendedAudience: '目标用户是谁?',
intendedAudiencePlaceHolder: '例如:学生',
solveProblem: '希望 AI 为他们解决什么问题?',
solveProblemPlaceHolder: '例如:评估学业水平',
generate: '生成',
audiencesRequired: '目标用户必填',
problemRequired: '解决问题必填',
resTitle: '我们为您编排了以下应用程序',
apply: '应用',
noData: '在左侧描述您的用例,编排预览将在此处显示。',
loading: '为您编排应用程序中…',
overwriteTitle: '覆盖现有配置?',
overwriteMessage: '应用此编排将覆盖现有配置。',
},
resetConfig: {
title: '确认重置?',
message: '重置将丢失当前页面所有修改,恢复至上次发布时的配置',
},
errorMessage: {
nameOfKeyRequired: '变量 {{key}} 对应的名称必填',
valueOfVarRequired: '{{key}}必填',
queryRequired: '主要文本必填',
waitForResponse: '请等待上条信息响应完成',
waitForBatchResponse: '请等待批量任务完成',
notSelectModel: '请选择模型',
waitForImgUpload: '请等待图片上传完成',
},
chatSubTitle: '提示词',
completionSubTitle: '前缀提示词',
promptTip:
'提示词用于对 AI 的回复做出一系列指令和约束。可插入表单变量,例如 {{input}}。这段提示词不会被最终用户所看到。',
formattingChangedTitle: '编排已改变',
formattingChangedText: '修改编排将重置调试区域,确定吗?',
variableTitle: '变量',
notSetVar: '变量能使用户输入表单引入提示词或开场白,你可以试试在提示词中输入 {{input}}',
variableTip:
'变量将以表单形式让用户在对话前填写,用户填写的表单内容将自动替换提示词中的变量。',
autoAddVar: '提示词中引用了未定义的变量,是否自动添加到用户输入表单中?',
variableTable: {
key: '变量 Key',
name: '字段名称',
optional: '可选',
type: '类型',
action: '操作',
typeString: '文本',
typeSelect: '下拉选项',
},
varKeyError: {
canNoBeEmpty: '变量不能为空',
tooLong: '变量: {{key}} 长度太长。不能超过 30 个字符',
notValid: '变量: {{key}} 非法。只能包含英文字符,数字和下划线',
notStartWithNumber: '变量: {{key}} 不能以数字开头',
keyAlreadyExists: '变量:{{key}} 已存在',
},
otherError: {
promptNoBeEmpty: '提示词不能为空',
historyNoBeEmpty: '提示词中必须设置对话历史',
queryNoBeEmpty: '提示词中必须设置查询内容',
},
variableConig: {
modalTitle: '变量设置',
description: '设置变量 {{varName}}',
fieldType: '字段类型',
string: '文本',
paragraph: '段落',
select: '下拉选项',
notSet: '未设置,在 Prompt 中输入 {{input}} 试试',
stringTitle: '文本框设置',
maxLength: '最大长度',
options: '选项',
addOption: '添加选项',
apiBasedVar: '基于 API 的变量',
},
vision: {
name: '视觉',
description: '开启视觉功能将允许模型输入图片,并根据图像内容的理解回答用户问题',
settings: '设置',
visionSettings: {
title: '视觉设置',
resolution: '分辨率',
resolutionTooltip: `低分辨率模式将使模型接收图像的低分辨率版本,尺寸为512 x 512,并使用65 Tokens 来表示图像。这样可以使API更快地返回响应,并在不需要高细节的用例中消耗更少的输入。
\n
高分辨率模式将首先允许模型查看低分辨率图像,然后根据输入图像的大小创建512像素的详细裁剪图像。每个详细裁剪图像使用两倍的预算总共为129 Tokens。`,
high: '高',
low: '低',
uploadMethod: '上传方式',
both: '两者',
localUpload: '本地上传',
url: 'URL',
uploadLimit: '上传数量限制',
},
},
voice: {
name: '音色',
defaultDisplay: '缺省音色',
description: '文本转语音音色设置',
settings: '设置',
voiceSettings: {
title: '音色设置',
language: '语言',
resolutionTooltip: '文本转语音音色支持语言。',
voice: '音色',
},
},
openingStatement: {
title: '对话开场白',
add: '添加开场白',
writeOpner: '编写开场白',
placeholder: '在这里写下你的开场白,你可以使用变量,尝试输入 {{variable}}。',
openingQuestion: '开场问题',
noDataPlaceHolder:
'在对话型应用中,让 AI 主动说第一段话可以拉近与用户间的距离。',
varTip: '你可以使用变量, 试试输入 {{variable}}',
tooShort: '对话前提示词至少 20 字才能生成开场白',
notIncludeKey: '前缀提示词中不包含变量 {{key}}。请在前缀提示词中添加该变量',
},
modelConfig: {
model: '语言模型',
setTone: '模型设置',
title: '模型及参数',
modeType: {
chat: '对话型',
completion: '补全型',
},
},
inputs: {
title: '调试与预览',
noPrompt: '尝试在对话前提示框中编写一些提示词',
userInputField: '用户输入',
noVar: '填入变量的值,每次启动新会话时该变量将自动替换提示词中的变量。',
chatVarTip: '填入变量的值,该值将在每次开启一个新会话时自动替换到提示词中',
completionVarTip: '填入变量的值,该值将在每次提交问题时自动替换到提示词中',
previewTitle: '提示词预览',
queryTitle: '查询内容',
queryPlaceholder: '请输入文本内容',
run: '运行',
},
result: '结果',
datasetConfig: {
settingTitle: '召回设置',
retrieveOneWay: {
title: 'N选1召回',
description: '根据用户意图和知识库描述,由 Agent 自主判断选择最匹配的单个知识库来查询相关文本,适合知识库区分度大且知识库数量偏少的应用。',
},
retrieveMultiWay: {
title: '多路召回',
description: '根据用户意图同时匹配所有知识库,从多路知识库查询相关文本片段,经过重排序步骤,从多路查询结果中选择匹配用户问题的最佳结果,需配置 Rerank 模型 API。',
},
rerankModelRequired: '请选择 Rerank 模型',
params: '参数设置',
top_k: 'Top K',
top_kTip: '用于筛选与用户问题相似度最高的文本片段。系统同时会根据选用模型上下文窗口大小动态调整分段数量。',
score_threshold: 'Score 阈值',
score_thresholdTip: '用于设置文本片段筛选的相似度阈值。',
retrieveChangeTip: '修改索引模式和检索模式可能会影响与该知识库关联的应用程序。',
},
debugAsSingleModel: '单一模型进行调试',
debugAsMultipleModel: '多个模型进行调试',
duplicateModel: '复制模型',
publishAs: '发布为',
assistantType: {
name: '助手类型',
chatAssistant: {
name: '基础助手',
description: '基于 LLM 构建一个聊天型助手',
},
agentAssistant: {
name: '智能助手',
description: '构建一个智能助手,他可以自主选择工具完成你设置的任务',
},
},
agent: {
agentMode: 'Agent Mode',
agentModeDes: '设置代理的推理模式类型',
agentModeType: {
ReACT: 'ReAct',
functionCall: 'Function Calling',
},
setting: {
name: 'Agent 设置',
description: '智能助手设置允许设置代理模式和内置提示等高级功能,仅在代理类型中可用。',
maximumIterations: {
name: '最大迭代次数',
description: '限制代理型助手执行迭代的次数',
},
},
buildInPrompt: '内置提示词',
firstPrompt: '第一次提示词',
nextIteration: '下一次迭代',
promptPlaceholder: '在这里写下您的提示词',
tools: {
name: '工具',
description: '使用工具可以扩展代理的能力,比如搜索互联网或科学计算',
enabled: '启用',
},
},
}
export default translation

View file

@ -0,0 +1,69 @@
const translation = {
title: '日志',
description: '日志记录了应用的运行情况,包括用户的输入和 AI 的回复。',
dateTimeFormat: 'YYYY-MM-DD HH:mm',
table: {
header: {
time: '时间',
endUser: '用户',
input: '输入',
output: '输出',
summary: '标题',
messageCount: '消息数',
userRate: '用户反馈',
adminRate: '管理员反馈',
},
pagination: {
previous: '上一页',
next: '下一页',
},
empty: {
noChat: '未开始的对话',
noOutput: '无输出',
element: {
title: '这里有人吗',
content: '在这里观测和标注最终用户和 AI 应用程序之间的交互,以不断提高 AI 的准确性。您可以<testLink>试试</testLink> WebApp 或<shareLink>分享</shareLink>出去,然后返回此页面。',
},
},
},
detail: {
time: '时间',
conversationId: '对话 ID',
promptTemplate: '前缀提示词',
promptTemplateBeforeChat: '对话前提示词 · 以系统消息提交',
annotationTip: '{{user}} 标记的改进回复',
timeConsuming: '耗时',
second: ' 秒',
tokenCost: '花费 Token',
loading: '加载中',
operation: {
like: '赞同',
dislike: '反对',
addAnnotation: '标记改进回复',
editAnnotation: '编辑改进回复',
annotationPlaceholder: '输入你希望 AI 回复的预期答案,这在今后可用于模型微调,持续改进文本生成质量。',
},
variables: '变量',
uploadImages: '上传的图片',
},
filter: {
period: {
today: '今天',
last7days: '过去 7 天',
last4weeks: '过去 4 周',
last3months: '过去 3 月',
last12months: '过去 12 月',
monthToDate: '本月至今',
quarterToDate: '本季度至今',
yearToDate: '本年至今',
allTime: '所有时间',
},
annotation: {
all: '全部',
annotated: '已标注改进({{count}} 项)',
not_annotated: '未标注',
},
},
}
export default translation

View file

@ -0,0 +1,139 @@
const translation = {
welcome: {
firstStepTip: '开始之前,',
enterKeyTip: '请先在下方输入你的 OpenAI API Key',
getKeyTip: '从 OpenAI 获取你的 API Key',
placeholder: '你的 OpenAI API Key(例如 sk-xxxx)',
},
apiKeyInfo: {
cloud: {
trial: {
title: '您正在使用 {{providerName}} 的试用配额。',
description: '试用配额仅供您测试使用。 在试用配额用完之前,请自行设置模型提供商或购买额外配额。',
},
exhausted: {
title: '您的试用额度已用完,请设置您的APIKey。',
description: '您的试用配额已用完。 请设置您自己的模型提供商或购买额外配额。',
},
},
selfHost: {
title: {
row1: '首先,',
row2: '设置您的模型提供商。',
},
},
callTimes: '调用次数',
usedToken: '使用 Tokens',
setAPIBtn: '设置模型提供商',
tryCloud: '或者尝试使用 Dify 的云版本并使用试用配额',
},
overview: {
title: '概览',
appInfo: {
explanation: '开箱即用的 AI WebApp',
accessibleAddress: '公开访问 URL',
preview: '预览',
regenerate: '重新生成',
preUseReminder: '使用前请先打开开关',
settings: {
entry: '设置',
title: 'WebApp 设置',
webName: 'WebApp 名称',
webDesc: 'WebApp 描述',
webDescTip: '以下文字将展示在客户端中,对应用进行说明和使用上的基本引导',
webDescPlaceholder: '请输入 WebApp 的描述',
language: '语言',
more: {
entry: '展示更多设置',
copyright: '版权',
copyRightPlaceholder: '请输入作者或组织名称',
privacyPolicy: '隐私政策',
privacyPolicyPlaceholder: '请输入隐私政策链接',
privacyPolicyTip: '帮助访问者了解该应用收集的数据,可参考 Dify 的<privacyPolicyLink>隐私政策</privacyPolicyLink>。',
},
},
embedded: {
entry: '嵌入',
title: '嵌入到网站中',
explanation: '选择一种方式将聊天应用嵌入到你的网站中',
iframe: '将以下 iframe 嵌入到你的网站中的目标位置',
scripts: '将以下代码嵌入到你的网站中',
chromePlugin: '安装 Dify Chrome 浏览器扩展',
copied: '已复制',
copy: '复制',
},
qrcode: {
title: '二维码分享',
scan: '扫码分享应用',
download: '下载二维码',
},
customize: {
way: '方法',
entry: '定制化',
title: '定制化 AI WebApp',
explanation: '你可以定制化 Web App 前端以符合你的情景与风格需求',
way1: {
name: 'Fork 客户端代码修改后部署到 Vercel(推荐)',
step1: 'Fork 客户端代码并修改',
step1Tip: '点击此处 Fork 源码到你的 GitHub 中,然后修改代码',
step1Operation: 'Dify-WebClient',
step2: '部署到 Vercel 中',
step2Tip: '点击此处将仓库导入到 Vercel 中部署',
step2Operation: '导入仓库',
step3: '配置环境变量',
step3Tip: '在 Vecel 环境变量中添加以下环境变量',
},
way2: {
name: '编写客户端调用 API 并部署到服务器中',
operation: '查看文档',
},
},
},
apiInfo: {
title: '后端服务 API',
explanation: '可集成至你的应用的后端即服务',
accessibleAddress: 'API 访问凭据',
doc: '查阅 API 文档',
},
status: {
running: '运行中',
disable: '已停用',
},
},
analysis: {
title: '分析',
ms: '毫秒',
tokenPS: 'Token/秒',
totalMessages: {
title: '全部消息数',
explanation: '反映 AI 每天的互动总次数,每回答用户一个问题算一条 Message。提示词编排和调试的消息不计入。',
},
activeUsers: {
title: '活跃用户数',
explanation: '与 AI 有效互动,即有一问一答以上的唯一用户数。提示词编排和调试的会话不计入。',
},
tokenUsage: {
title: '费用消耗',
explanation: '反映每日该应用请求语言模型的 Tokens 花费,用于成本控制。',
consumed: '耗费',
},
avgSessionInteractions: {
title: '平均会话互动数',
explanation: '反应每个会话用户的持续沟通次数,如果用户与 AI 问答了 10 轮,即为 10。该指标反映了用户粘性。仅在对话型应用提供。',
},
userSatisfactionRate: {
title: '用户满意度',
explanation: '每 1000 条消息的点赞数。反应了用户对回答十分满意的比例。',
},
avgResponseTime: {
title: '平均响应时间',
explanation: '衡量 AI 应用处理和回复用户请求所花费的平均时间,单位为毫秒,反映性能和用户体验。仅在文本型应用提供。',
},
tps: {
title: 'Token 输出速度',
explanation: '衡量 LLM 的性能。统计 LLM 从请求开始到输出完毕这段期间的 Tokens 输出速度。',
},
},
}
export default translation

53
web/i18n/zh-Hans/app.ts Normal file
View file

@ -0,0 +1,53 @@
const translation = {
createApp: '创建应用',
types: {
all: '全部',
assistant: '助手',
completion: '文本生成',
},
modes: {
completion: '文本生成型',
chat: '基础助手',
},
createFromConfigFile: '通过导入应用配置文件创建',
deleteAppConfirmTitle: '确认删除应用?',
deleteAppConfirmContent:
'删除应用将无法撤销。用户将不能访问你的应用,所有 Prompt 编排配置和日志均将一并被删除。',
appDeleted: '应用已删除',
appDeleteFailed: '应用删除失败',
join: '参与社区',
communityIntro: '与团队成员、贡献者和开发者在不同频道中交流',
roadmap: '产品路线图',
appNamePlaceholder: '请输入应用名称',
newApp: {
startToCreate: '开始创建一个新应用',
captionName: '图标 & 名称',
captionAppType: '想要哪种应用类型?',
previewDemo: '预览 Demo',
chatApp: '助手',
chatAppIntro:
'我要构建一个聊天场景的应用。该应用采用一问一答模式与用户持续对话。',
agentAssistant: '新的智能助手',
completeApp: '文本生成应用',
completeAppIntro:
'我要构建一个根据提示生成高质量文本的应用,例如生成文章、摘要、翻译等',
showTemplates: '我想从范例模板中选择',
hideTemplates: '返回应用类型选择',
Create: '创建',
Cancel: '取消',
nameNotEmpty: '名称不能为空',
appTemplateNotSelected: '请选择应用模版',
appTypeRequired: '请选择应用类型',
appCreated: '应用已创建',
appCreateFailed: '应用创建失败',
},
editApp: {
startToEdit: '编辑应用',
},
emoji: {
ok: '确认',
cancel: '取消',
},
}
export default translation

113
web/i18n/zh-Hans/billing.ts Normal file
View file

@ -0,0 +1,113 @@
const translation = {
currentPlan: '当前套餐',
upgradeBtn: {
plain: '升级套餐',
encourage: '立即升级',
encourageShort: '升级',
},
viewBilling: '管理账单及订阅',
buyPermissionDeniedTip: '请联系企业管理员订阅',
plansCommon: {
title: '选择适合您的套餐',
yearlyTip: '订阅年度计划可免费获得 2个月!',
mostPopular: '最受欢迎',
planRange: {
monthly: '按月',
yearly: '按年',
},
month: '月',
year: '年',
save: '节省',
currentPlan: '当前计划',
contractSales: '联系销售',
contractOwner: '联系团队管理员',
free: '免费',
startForFree: '免费开始',
getStartedWith: '开始使用',
contactSales: '联系销售',
talkToSales: '联系销售',
modelProviders: '支持的模型提供商',
teamMembers: '团队成员',
buildApps: '构建应用程序数',
vectorSpace: '向量空间',
vectorSpaceTooltip: '向量空间是 LLMs 理解您的数据所需的长期记忆系统。',
vectorSpaceBillingTooltip: '向量存储是将知识库向量化处理后为让 LLMs 理解数据而使用的长期记忆存储,1MB 大约能满足1.2 million character 的向量化后数据存储(以 OpenAI Embedding 模型估算,不同模型计算方式有差异)。在向量化过程中,实际的压缩或尺寸减小取决于内容的复杂性和冗余性。',
documentProcessingPriority: '文档处理优先级',
documentProcessingPriorityTip: '如需更高的文档处理优先级,请升级您的套餐',
documentProcessingPriorityUpgrade: '以更快的速度、更高的精度处理更多的数据。',
priority: {
'standard': '标准',
'priority': '优先',
'top-priority': '最高优先级',
},
logsHistory: '日志历史',
customTools: '自定义工具',
unavailable: '不可用',
days: '天',
unlimited: '无限制',
support: '支持',
supportItems: {
communityForums: '社区论坛',
emailSupport: '电子邮件支持',
priorityEmail: '优先电子邮件和聊天支持',
logoChange: 'Logo更改',
SSOAuthentication: 'SSO 认证',
personalizedSupport: '个性化支持',
dedicatedAPISupport: '专用 API 支持',
customIntegration: '自定义集成和支持',
ragAPIRequest: 'RAG API 请求',
agentMode: '代理模式',
workflow: '工作流',
},
comingSoon: '即将推出',
member: '成员',
memberAfter: '个成员',
messageRequest: {
title: '消息额度',
tooltip: '为不同方案提供基于 OpenAI 模型的消息响应额度。',
},
annotatedResponse: {
title: '标注回复数',
tooltip: '标注回复功能通过人工编辑标注为应用提供了可定制的高质量问答回复能力',
},
ragAPIRequestTooltip: '指单独调用 Dify 知识库数据处理能力的 API。',
receiptInfo: '只有团队所有者和团队管理员才能订阅和查看账单信息',
},
plans: {
sandbox: {
name: 'Sandbox',
description: '200次 GPT 免费试用',
includesTitle: '包括:',
},
professional: {
name: 'Professional',
description: '让个人和小团队能够以经济实惠的方式释放更多能力。',
includesTitle: 'Sandbox 计划中的一切,加上:',
},
team: {
name: 'Team',
description: '协作无限制并享受顶级性能。',
includesTitle: 'Professional 计划中的一切,加上:',
},
enterprise: {
name: 'Enterprise',
description: '获得大规模关键任务系统的完整功能和支持。',
includesTitle: 'Team 计划中的一切,加上:',
},
},
vectorSpace: {
fullTip: '向量空间已满。',
fullSolution: '升级您的套餐以获得更多空间。',
},
apps: {
fullTipLine1: '升级您的套餐以',
fullTipLine2: '构建更多的程序。',
},
annotatedResponse: {
fullTipLine1: '升级您的套餐以',
fullTipLine2: '标注更多对话。',
quotaTitle: '标注的配额',
},
}
export default translation

505
web/i18n/zh-Hans/common.ts Normal file
View file

@ -0,0 +1,505 @@
const translation = {
api: {
success: '成功',
actionSuccess: '操作成功',
saved: '已保存',
create: '已创建',
remove: '已移除',
},
operation: {
create: '创建',
confirm: '确认',
cancel: '取消',
clear: '清空',
save: '保存',
edit: '编辑',
add: '添加',
added: '已添加',
refresh: '重新开始',
reset: '重置',
search: '搜索',
change: '更改',
remove: '移除',
send: '发送',
copy: '复制',
lineBreak: '换行',
sure: '我确定',
download: '下载',
delete: '删除',
settings: '设置',
setup: '设置',
getForFree: '免费获取',
reload: '刷新',
ok: '好的',
log: '日志',
learnMore: '了解更多',
params: '参数设置',
},
placeholder: {
input: '请输入',
select: '请选择',
},
voice: {
language: {
zhHans: '中文',
enUS: '英语',
deDE: '德语',
frFR: '法语',
esES: '西班牙语',
itIT: '意大利语',
thTH: '泰语',
idID: '印尼语',
jaJP: '日语',
koKR: '韩语',
ptBR: '葡萄牙语',
ruRU: '俄语',
ukUA: '乌克兰语',
},
},
unit: {
char: '个字符',
},
actionMsg: {
noModification: '暂无修改',
modifiedSuccessfully: '修改成功',
modifiedUnsuccessfully: '修改失败',
copySuccessfully: '复制成功',
generatedSuccessfully: '已重新生成',
generatedUnsuccessfully: '生成失败',
paySucceeded: '已支付成功',
payCancelled: '已取消支付',
},
model: {
params: {
temperature: '随机性 temperature',
temperatureTip:
'控制回复的随机性。\n值越大,回复越随机。\n值越小,回复越确定或一致。',
top_p: '核采样 top_p',
top_pTip:
'控制生成多样性。\n值越大,输出会包括更多的单词选项。\n值越小,模型会更集中在高概率的单词上,输出更确定但可能缺乏多样性。\n核采样和随机性不建议同时修改。',
presence_penalty: '话题新鲜度 presence_penalty',
presence_penaltyTip:
'控制生成时对上文已存在的话题的偏好程度。\n值越大,越可能使用到新的话题。',
frequency_penalty: '频率惩罚度 frequency_penalty',
frequency_penaltyTip:
'影响常见与罕见词汇使用。\n值较大时,倾向于生成不常见的词汇和表达方式。\n值越小,更倾向于使用常见和普遍接受的词汇或短语。',
max_tokens: '单次回复限制 max_tokens',
max_tokensTip:
'用于限制回复的最大长度,以 token 为单位。\n较大的值可能会限制给提示词、聊天记录和知识库留出的空间。\n建议将其设置在三分之二以下。\ngpt-4-1106-preview、gpt-4-vision-preview 最大长度 (输入128k,输出4k)',
maxTokenSettingTip: '您设置的最大 tokens 数较大,可能会导致 prompt、用户问题、知识库内容没有 token 空间进行处理,建议设置到 2/3 以下。',
setToCurrentModelMaxTokenTip: '最大令牌数更新为当前模型最大的令牌数 {{maxToken}} 的 80%。',
stop_sequences: '停止序列 stop_sequences',
stop_sequencesTip: '最多四个序列,API 将停止生成更多的 token。返回的文本将不包含停止序列。',
stop_sequencesPlaceholder: '输入序列并按 Tab 键',
},
tone: {
Creative: '创意',
Balanced: '平衡',
Precise: '精确',
Custom: '自定义',
},
addMoreModel: '添加更多模型',
},
menus: {
status: 'beta',
explore: '探索',
apps: '工作室',
plugins: '插件',
pluginsTips: '集成第三方插件或创建与 ChatGPT 兼容的 AI 插件。',
datasets: '知识库',
datasetsTips: '即将到来: 上传自己的长文本数据,或通过 Webhook 集成自己的数据源',
newApp: '创建应用',
newDataset: '创建知识库',
tools: '工具',
},
userProfile: {
settings: '设置',
workspace: '工作空间',
createWorkspace: '创建工作空间',
helpCenter: '帮助文档',
roadmapAndFeedback: '产品路线图 & 用户反馈',
community: '社区',
about: '关于',
logout: '登出',
},
settings: {
accountGroup: '账户',
workplaceGroup: '工作空间',
account: '我的账户',
members: '成员',
billing: '账单',
integrations: '集成',
language: '语言',
provider: '模型供应商',
dataSource: '数据来源',
plugin: '插件',
apiBasedExtension: 'API 扩展',
},
account: {
avatar: '头像',
name: '用户名',
email: '邮箱',
password: '密码',
passwordTip: '如果您不想使用验证码登录,可以设置永久密码',
setPassword: '设置密码',
resetPassword: '重置密码',
currentPassword: '原密码',
newPassword: '新密码',
notEqual: '两个密码不相同',
confirmPassword: '确认密码',
langGeniusAccount: 'Dify 账号',
langGeniusAccountTip: '您的 Dify 账号和相关的用户数据。',
editName: '编辑名字',
showAppLength: '显示 {{length}} 个应用',
},
members: {
team: '团队',
invite: '添加',
name: '姓名',
lastActive: '上次活动时间',
role: '角色',
pending: '待定...',
owner: '所有者',
admin: '管理员',
adminTip: '能够建立应用程序和管理团队设置',
normal: '成员',
normalTip: '只能使用应用程序,不能建立应用程序',
inviteTeamMember: '添加团队成员',
inviteTeamMemberTip: '对方在登录后可以访问你的团队数据。',
email: '邮箱',
emailInvalid: '邮箱格式无效',
emailPlaceholder: '输入邮箱',
sendInvite: '发送邀请',
invitedAsRole: '邀请为{{role}}用户',
invitationSent: '邀请已发送',
invitationSentTip: '邀请已发送,对方登录 Dify 后即可访问你的团队数据。',
invitationLink: '邀请链接',
failedinvitationEmails: '邀请以下邮箱失败',
ok: '好的',
removeFromTeam: '移除团队',
removeFromTeamTip: '将取消团队访问',
setAdmin: '设为管理员',
setMember: '设为普通成员',
disinvite: '取消邀请',
deleteMember: '删除成员',
you: '(你)',
},
integrations: {
connected: '登录方式',
google: 'Google',
googleAccount: 'Google 账号登录',
github: 'GitHub',
githubAccount: 'GitHub 账号登录',
connect: '绑定',
},
language: {
displayLanguage: '界面语言',
timezone: '时区',
},
provider: {
apiKey: 'API 密钥',
enterYourKey: '输入你的 API 密钥',
invalidKey: '无效的 OpenAI API 密钥',
validatedError: '校验失败:',
validating: '验证密钥中...',
saveFailed: 'API 密钥保存失败',
apiKeyExceedBill: '此 API KEY 已没有可用配额,请阅读',
addKey: '添加 密钥',
comingSoon: '即将推出',
editKey: '编辑',
invalidApiKey: '无效的 API 密钥',
azure: {
apiBase: 'API Base',
apiBasePlaceholder: '输入您的 Azure OpenAI API Base 地址',
apiKey: 'API Key',
apiKeyPlaceholder: '输入你的 API 密钥',
helpTip: '了解 Azure OpenAI Service',
},
openaiHosted: {
openaiHosted: '托管 OpenAI',
onTrial: '体验',
exhausted: '超出限额',
desc: '托管 OpenAI 由 Dify 提供的托管 OpenAI 服务,你可以使用 GPT-3.5 等模型,在体验额度消耗完毕前你需要设置其它模型供应商。',
callTimes: '调用次数',
usedUp: '试用额度已用完,请在下方添加自己的模型供应商',
useYourModel: '当前正在使用你自己的模型供应商。',
close: '关闭',
},
anthropicHosted: {
anthropicHosted: 'Anthropic Claude',
onTrial: '体验',
exhausted: '超出限额',
desc: '功能强大的模型,擅长执行从复杂对话和创意内容生成到详细指导的各种任务。',
callTimes: '调用次数',
usedUp: '试用额度已用完,请在下方添加自己的模型供应商',
useYourModel: '当前正在使用你自己的模型供应商。',
close: '关闭',
},
anthropic: {
using: '嵌入能力正在使用',
enableTip: '要启用 Anthropic 模型,您需要先绑定 OpenAI 或 Azure OpenAI 服务。',
notEnabled: '未启用',
keyFrom: '从 Anthropic 获取您的 API 密钥',
},
encrypted: {
front: '密钥将使用 ',
back: ' 技术进行加密和存储。',
},
},
modelProvider: {
notConfigured: '系统模型尚未完全配置,部分功能可能无法使用。',
systemModelSettings: '系统模型设置',
systemModelSettingsLink: '为什么需要设置系统模型?',
selectModel: '选择您的模型',
setupModelFirst: '请先设置您的模型',
systemReasoningModel: {
key: '系统推理模型',
tip: '设置创建应用使用的默认推理模型,以及对话名称生成、下一步问题建议等功能也会使用该默认推理模型。',
},
embeddingModel: {
key: 'Embedding 模型',
tip: '设置知识库文档嵌入处理的默认模型,检索和导入知识库均使用该Embedding模型进行向量化处理,切换后将导致已导入的知识库与问题之间的向量维度不一致,从而导致检索失败。为避免检索失败,请勿随意切换该模型。',
required: '请选择 Embedding 模型',
},
speechToTextModel: {
key: '语音转文本模型',
tip: '设置对话中语音转文字输入的默认使用模型。',
},
ttsModel: {
key: '文本转语音模型',
tip: '设置对话中文字转语音输出的默认使用模型。',
},
rerankModel: {
key: 'Rerank 模型',
tip: '重排序模型将根据候选文档列表与用户问题语义匹配度进行重新排序,从而改进语义排序的结果',
},
quota: '额度',
searchModel: '搜索模型',
noModelFound: '找不到模型 {{model}}',
models: '模型列表',
showMoreModelProvider: '显示更多模型提供商',
selector: {
tip: '该模型已被删除。请添模型或选择其他模型。',
emptyTip: '无可用模型',
emptySetting: '请前往设置进行配置',
rerankTip: '请设置 Rerank 模型',
},
card: {
quota: '额度',
onTrial: '试用中',
paid: '已购买',
quotaExhausted: '配额已用完',
callTimes: '调用次数',
tokens: 'Tokens',
buyQuota: '购买额度',
priorityUse: '优先使用',
removeKey: '删除 API 密钥',
tip: '已付费额度将优先考虑。 试用额度将在付费额度用完后使用。',
},
item: {
deleteDesc: '{{modelName}} 被用作系统推理模型。删除后部分功能将无法使用。请确认。',
freeQuota: '免费额度',
},
addApiKey: '添加您的 API 密钥',
invalidApiKey: 'Invalid API key',
encrypted: {
front: '您的密钥将使用',
back: '技术进行加密和存储。',
},
freeQuota: {
howToEarn: '如何获取',
},
addMoreModelProvider: '添加更多模型提供商',
addModel: '添加模型',
modelsNum: '{{num}} 个模型',
showModels: '显示模型',
showModelsNum: '显示 {{num}} 个模型',
collapse: '收起',
config: '配置',
modelAndParameters: '模型及参数',
model: '模型',
featureSupported: '支持 {{feature}} 功能',
callTimes: '调用次数',
credits: '消息额度',
buyQuota: '购买额度',
getFreeTokens: '获得免费 Tokens',
priorityUsing: '优先使用',
deprecated: '已弃用',
confirmDelete: '确认删除?',
quotaTip: '剩余免费额度',
loadPresets: '加载预设',
parameters: '参数',
},
dataSource: {
add: '添加数据源',
connect: '绑定',
notion: {
title: 'Notion',
description: '使用 Notion 作为知识库的数据源。',
connectedWorkspace: '已绑定工作空间',
addWorkspace: '添加工作空间',
connected: '已绑定',
disconnected: '未绑定',
changeAuthorizedPages: '更改授权页面',
pagesAuthorized: '已授权页面',
sync: '同步',
remove: '删除',
selector: {
pageSelected: '已选页面',
searchPages: '搜索页面...',
noSearchResult: '无搜索结果',
addPages: '添加页面',
preview: '预览',
},
},
},
plugin: {
serpapi: {
apiKey: 'API Key',
apiKeyPlaceholder: '输入你的 API 密钥',
keyFrom: '从 SerpAPI 帐户页面获取您的 SerpAPI 密钥',
},
},
apiBasedExtension: {
title: 'API 扩展提供了一个集中式的 API 管理,在此统一添加 API 配置后,方便在 Dify 上的各类应用中直接使用。',
link: '了解如何开发您自己的 API 扩展。',
linkUrl: 'https://docs.dify.ai/v/zh-hans/advanced/api_based_extension',
add: '新增 API 扩展',
selector: {
title: 'API 扩展',
placeholder: '请选择 API 扩展',
manage: '管理 API 扩展',
},
modal: {
title: '新增 API 扩展',
editTitle: '编辑 API 扩展',
name: {
title: '名称',
placeholder: '请输入名称',
},
apiEndpoint: {
title: 'API Endpoint',
placeholder: '请输入 API endpoint',
},
apiKey: {
title: 'API-key',
placeholder: '请输入 API-key',
lengthError: 'API-key 不能少于 5 位',
},
},
type: '类型',
},
about: {
changeLog: '更新日志',
updateNow: '现在更新',
nowAvailable: 'Dify {{version}} 现已可用。',
latestAvailable: 'Dify {{version}} 已是最新版本。',
},
appMenus: {
overview: '概览',
promptEng: '编排',
apiAccess: '访问 API',
logAndAnn: '日志与标注',
},
environment: {
testing: '测试环境',
development: '开发环境',
},
appModes: {
completionApp: '文本生成型应用',
chatApp: '对话型应用',
},
datasetMenus: {
documents: '文档',
hitTesting: '召回测试',
settings: '设置',
emptyTip: ' 知识库尚未关联,请前往应用程序或插件完成关联。',
viewDoc: '查看文档',
relatedApp: '个关联应用',
},
voiceInput: {
speaking: '现在讲...',
converting: '正在转换为文本...',
notAllow: '麦克风未授权',
},
modelName: {
'gpt-3.5-turbo': 'GPT-3.5-Turbo',
'gpt-3.5-turbo-16k': 'GPT-3.5-Turbo-16K',
'gpt-4': 'GPT-4',
'gpt-4-32k': 'GPT-4-32K',
'text-davinci-003': 'Text-Davinci-003',
'text-embedding-ada-002': 'Text-Embedding-Ada-002',
'whisper-1': 'Whisper-1',
'claude-instant-1': 'Claude-Instant',
'claude-2': 'Claude-2',
},
chat: {
renameConversation: '重命名会话',
conversationName: '会话名称',
conversationNamePlaceholder: '请输入会话名称',
conversationNameCanNotEmpty: '会话名称必填',
citation: {
title: '引用',
linkToDataset: '跳转至知识库',
characters: '字符:',
hitCount: '召回次数:',
vectorHash: '向量哈希:',
hitScore: '召回得分:',
},
},
promptEditor: {
placeholder: '在这里写你的提示词,输入\'{\' 插入变量、输入\'/\' 插入提示内容块',
context: {
item: {
title: '上下文',
desc: '插入上下文模板',
},
modal: {
title: '有 {{num}} 个知识库在上下文中',
add: '添加上下文',
footer: '您可以在下面的“上下文”部分中管理上下文。',
},
},
history: {
item: {
title: '会话历史',
desc: '插入历史消息模板',
},
modal: {
title: '示例',
user: '你好',
assistant: '你好!今天我能为您提供什么帮助?',
edit: '编辑对话角色名称',
},
},
variable: {
item: {
title: '变量 & 外部工具',
desc: '插入变量和外部工具',
},
modal: {
add: '添加新变量',
addTool: '添加工具',
},
},
query: {
item: {
title: '查询内容',
desc: '插入用户查询模板',
},
},
existed: 'Prompt 中已存在',
},
imageUploader: {
uploadFromComputer: '从本地上传',
uploadFromComputerReadError: '图片读取失败,请重新选择。',
uploadFromComputerUploadError: '图片上传失败,请重新上传。',
uploadFromComputerLimit: '上传图片不能超过 {{size}} MB',
pasteImageLink: '粘贴图片链接',
pasteImageLinkInputPlaceholder: '将图像链接粘贴到此处',
pasteImageLinkInvalid: '图片链接无效',
imageUpload: '图片上传',
},
}
export default translation

View file

@ -0,0 +1,30 @@
const translation = {
custom: '定制',
upgradeTip: {
prefix: '升级您的计划以',
suffix: '定制您的品牌。',
},
webapp: {
title: '定制 WebApp 品牌',
removeBrand: '移除 Powered by Dify',
changeLogo: '更改 Powered by Brand 图片',
changeLogoTip: 'SVG 或 PNG 格式,最小尺寸为 40x40px',
},
app: {
title: '定制应用品牌',
changeLogoTip: 'SVG 或 PNG 格式,最小尺寸为 80x80px',
},
upload: '上传',
uploading: '上传中',
uploadedFail: '图片上传失败,请重新上传。',
change: '更改',
apply: '应用',
restore: '恢复默认',
customize: {
contactUs: '联系我们',
prefix: '如需在 Dify 内自定义品牌图标,请',
suffix: '升级至企业版。',
},
}
export default translation

View file

@ -0,0 +1,130 @@
const translation = {
steps: {
header: {
creation: '创建知识库',
update: '上传文件',
},
one: '选择数据源',
two: '文本分段与清洗',
three: '处理并完成',
},
error: {
unavailable: '该知识库不可用',
},
stepOne: {
filePreview: '文件预览',
pagePreview: '页面预览',
dataSourceType: {
file: '导入已有文本',
notion: '同步自 Notion 内容',
web: '同步自 Web 站点',
},
uploader: {
title: '上传文本文件',
button: '拖拽文件至此,或者',
browse: '选择文件',
tip: '已支持 {{supportTypes}},每个文件不超过 {{size}}MB。',
validation: {
typeError: '文件类型不支持',
size: '文件太大了,不能超过 {{size}}MB',
count: '暂不支持多个文件',
filesNumber: '批量上传限制 {{filesNumber}}。',
},
cancel: '取消',
change: '更改文件',
failed: '上传失败',
},
notionSyncTitle: 'Notion 未绑定',
notionSyncTip: '同步 Notion 内容前,须先绑定 Notion 空间',
connect: '去绑定',
button: '下一步',
emptyDatasetCreation: '创建一个空知识库',
modal: {
title: '创建空知识库',
tip: '空知识库中还没有文档,你可以在今后任何时候上传文档至该知识库。',
input: '知识库名称',
placeholder: '请输入知识库名称',
nameNotEmpty: '名称不能为空',
nameLengthInvaild: '名称长度不能超过 40 个字符',
cancelButton: '取消',
confirmButton: '创建',
failed: '创建失败',
},
},
stepTwo: {
segmentation: '分段设置',
auto: '自动分段与清洗',
autoDescription: '自动设置分段规则与预处理规则,如果不了解这些参数建议选择此项',
custom: '自定义',
customDescription: '自定义分段规则、分段长度以及预处理规则等参数',
separator: '分段标识符',
separatorPlaceholder: '例如换行符(\n)或特定的分隔符(如 "***")',
maxLength: '分段最大长度',
overlap: '分段重叠长度',
overlapTip: '设置分段之间的重叠长度可以保留分段之间的语义关系,提升召回效果。建议设置为最大分段长度的10%-25%',
overlapCheck: '分段重叠长度不能大于分段最大长度',
rules: '文本预处理规则',
removeExtraSpaces: '替换掉连续的空格、换行符和制表符',
removeUrlEmails: '删除所有 URL 和电子邮件地址',
removeStopwords: '去除停用词,例如 “a”,“an”,“the” 等',
preview: '确认并预览',
reset: '重置',
indexMode: '索引方式',
qualified: '高质量',
recommend: '推荐',
qualifiedTip: '调用系统默认的嵌入接口进行处理,以在用户查询时提供更高的准确度',
warning: '请先完成模型供应商的 API KEY 设置。.',
click: '前往设置',
economical: '经济',
economicalTip: '使用离线的向量引擎、关键词索引等方式,降低了准确度但无需花费 Token',
QATitle: '采用 Q&A 分段模式',
QATip: '开启后将会消耗额外的 token',
QALanguage: '分段使用',
emstimateCost: '执行嵌入预估消耗',
emstimateSegment: '预估分段数',
segmentCount: '段',
calculating: '计算中...',
fileSource: '预处理文档',
notionSource: '预处理页面',
other: '和其他 ',
fileUnit: ' 个文件',
notionUnit: ' 个页面',
lastStep: '上一步',
nextStep: '保存并处理',
save: '保存并处理',
cancel: '取消',
sideTipTitle: '为什么要分段和预处理?',
sideTipP1: '在处理文本数据时,分段和清洗是两个重要的预处理步骤。',
sideTipP2: '分段的目的是将长文本拆分成较小的段落,以便模型更有效地处理和理解。这有助于提高模型生成的结果的质量和相关性。',
sideTipP3: '清洗则是对文本进行预处理,删除不必要的字符、符号或格式,使知识库更加干净、整洁,便于模型解析。',
sideTipP4: '通过对知识库进行适当的分段和清洗,可以提高模型在实际应用中的表现,从而为用户提供更准确、更有价值的结果。',
previewTitle: '分段预览',
previewTitleButton: '预览',
previewButton: '切换至 Q&A 形式',
previewSwitchTipStart: '当前分段预览是文本模式,切换到 Q&A 模式将会',
previewSwitchTipEnd: '消耗额外的 token',
characters: '字符',
indexSettedTip: '要更改索引方法,请转到',
retrivalSettedTip: '要更改检索方法,请转到',
datasetSettingLink: '知识库设置。',
},
stepThree: {
creationTitle: '🎉 知识库已创建',
creationContent: '我们自动为该知识库起了个名称,您也可以随时修改',
label: '知识库名称',
additionTitle: '🎉 文档已上传',
additionP1: '文档已上传至知识库:',
additionP2: ',你可以在知识库的文档列表中找到它。',
stop: '停止处理',
resume: '恢复处理',
navTo: '前往文档',
sideTipTitle: '接下来做什么',
sideTipContent: '当文档完成索引处理后,知识库即可集成至应用内作为上下文使用,你可以在提示词编排页找到上下文设置。你也可以创建成可独立使用的 ChatGPT 索引插件发布。',
modelTitle: '确认停止索引过程吗?',
modelContent: '如果您需要稍后恢复处理,则从停止处继续。',
modelButtonConfirm: '确认停止',
modelButtonCancel: '取消',
},
}
export default translation

View file

@ -0,0 +1,348 @@
const translation = {
list: {
title: '文档',
desc: '知识库的所有文件都在这里显示,整个知识库都可以链接到 Dify 引用或通过 Chat 插件进行索引。',
addFile: '添加文件',
addPages: '添加页面',
table: {
header: {
fileName: '文件名',
words: '字符数',
hitCount: '召回次数',
uploadTime: '上传时间',
status: '状态',
action: '操作',
},
},
action: {
uploadFile: '上传新文件',
settings: '分段设置',
addButton: '添加分段',
add: '添加新分段',
batchAdd: '批量添加',
archive: '归档',
unarchive: '撤销归档',
delete: '删除',
enableWarning: '归档的文件无法启用',
sync: '同步',
},
index: {
enable: '启用中',
disable: '禁用中',
all: '全部',
enableTip: '该文件可以被索引',
disableTip: '该文件无法被索引',
},
status: {
queuing: '排队中',
indexing: '索引中',
paused: '已暂停',
error: '错误',
available: '可用',
enabled: '已启用',
disabled: '已禁用',
archived: '已归档',
},
empty: {
title: '还没有文档',
upload: {
tip: '您可以上传文件,从网站同步,或者从网络应用程序(如概念、GitHub 等)同步。',
},
sync: {
tip: 'Dify 会定期从您的 Notion 中下载文件并完成处理。',
},
},
delete: {
title: '确定删除吗?',
content: '如果您需要稍后恢复处理,您将从您离开的地方继续',
},
batchModal: {
title: '批量添加分段',
csvUploadTitle: '将您的 CSV 文件拖放到此处,或',
browse: '选择文件',
tip: 'CSV 文件必须符合以下结构:',
question: '问题',
answer: '回答',
contentTitle: '分段内容',
content: '内容',
template: '下载模板',
cancel: '取消',
run: '导入',
runError: '批量导入失败',
processing: '批量处理中',
completed: '导入完成',
error: '导入出错',
ok: '确定',
},
},
metadata: {
title: '元数据',
desc: '标记文档的元数据允许 AI 及时访问它们并为用户公开参考来源。',
dateTimeFormat: 'YYYY-MM-DD HH:mm',
docTypeSelectTitle: '请选择一种文档类型',
docTypeChangeTitle: '更换文档类型',
docTypeSelectWarning: '如果更改文档类型,将不再保留现在填充的元数据',
firstMetaAction: '开始',
placeholder: {
add: '输入',
select: '选择',
},
source: {
upload_file: '文件上传',
notion: '从 Notion 同步的文档',
github: '从 Github 同步的代码',
},
type: {
book: '书籍',
webPage: '网页',
paper: '论文',
socialMediaPost: '社交媒体帖子',
personalDocument: '个人文档',
businessDocument: '商务文档',
IMChat: 'IM 聊天记录',
wikipediaEntry: '维基百科条目',
notion: '从 Notion 同步的文档',
github: '从 Github 同步的代码',
technicalParameters: '技术参数',
},
field: {
processRule: {
processDoc: '预处理文档',
segmentRule: '分段规则',
segmentLength: '分段长度',
processClean: '文本预处理与清洗',
},
book: {
title: '标题',
language: '语言',
author: '作者',
publisher: '出版商',
publicationDate: '出版日期',
ISBN: 'ISBN',
category: '类别',
},
webPage: {
title: '标题',
url: '网址',
language: '语言',
authorPublisher: '作者/出版商',
publishDate: '发布日期',
topicsKeywords: '主题/关键词',
description: '描述',
},
paper: {
title: '标题',
language: '语言',
author: '作者',
publishDate: '发布日期',
journalConferenceName: '期刊/会议名称',
volumeIssuePage: '卷/期/页码',
DOI: 'DOI',
topicsKeywords: '主题/关键词',
abstract: '摘要',
},
socialMediaPost: {
platform: '平台',
authorUsername: '作者/用户名',
publishDate: '发布日期',
postURL: '帖子网址',
topicsTags: '主题/标签',
},
personalDocument: {
title: '标题',
author: '作者',
creationDate: '创建日期',
lastModifiedDate: '最后修改日期',
documentType: '文档类型',
tagsCategory: '标签/类别',
},
businessDocument: {
title: '标题',
author: '作者',
creationDate: '创建日期',
lastModifiedDate: '最后修改日期',
documentType: '文档类型',
departmentTeam: '部门/团队',
},
IMChat: {
chatPlatform: '聊天平台',
chatPartiesGroupName: '聊天参与方/群组名称',
participants: '参与者',
startDate: '开始日期',
endDate: '结束日期',
topicsKeywords: '主题/关键词',
fileType: '文件类型',
},
wikipediaEntry: {
title: '标题',
language: '语言',
webpageURL: '网页网址',
editorContributor: '编辑/贡献者',
lastEditDate: '最后编辑日期',
summaryIntroduction: '摘要/介绍',
},
notion: {
title: '标题',
language: '语言',
author: '作者',
createdTime: '创建时间',
lastModifiedTime: '最后修改时间',
url: '网址',
tag: '标签',
description: '描述',
},
github: {
repoName: '仓库名',
repoDesc: '仓库描述',
repoOwner: '仓库所有者',
fileName: '文件名',
filePath: '文件路径',
programmingLang: '编程语言',
url: '网址',
license: '许可证',
lastCommitTime: '最后提交时间',
lastCommitAuthor: '最后提交者',
},
originInfo: {
originalFilename: '原始文件名称',
originalFileSize: '原始文件大小',
uploadDate: '上传日期',
lastUpdateDate: '最后更新日期',
source: '来源',
},
technicalParameters: {
segmentSpecification: '分段规则',
segmentLength: '段落长度',
avgParagraphLength: '平均段落长度',
paragraphs: '段落数量',
hitCount: '召回次数',
embeddingTime: '嵌入时间',
embeddedSpend: '嵌入花费',
},
},
languageMap: {
zh: '中文',
en: '英文',
es: '西班牙语',
fr: '法语',
de: '德语',
ja: '日语',
ko: '韩语',
ru: '俄语',
ar: '阿拉伯语',
pt: '葡萄牙语',
it: '意大利语',
nl: '荷兰语',
pl: '波兰语',
sv: '瑞典语',
tr: '土耳其语',
he: '希伯来语',
hi: '印地语',
da: '丹麦语',
fi: '芬兰语',
no: '挪威语',
hu: '匈牙利语',
el: '希腊语',
cs: '捷克语',
th: '泰语',
id: '印度尼西亚语',
},
categoryMap: {
book: {
fiction: '小说',
biography: '传记',
history: '历史',
science: '科学',
technology: '技术',
education: '教育',
philosophy: '哲学',
religion: '宗教',
socialSciences: '社会科学',
art: '艺术',
travel: '旅行',
health: '健康',
selfHelp: '自助',
businessEconomics: '商业/经济',
cooking: '烹饪',
childrenYoungAdults: '儿童/青少年',
comicsGraphicNovels: '漫画/图形小说',
poetry: '诗歌',
drama: '戏剧',
other: '其他',
},
personalDoc: {
notes: '笔记',
blogDraft: '博客草稿',
diary: '日记',
researchReport: '研究报告',
bookExcerpt: '书籍摘录',
schedule: '日程安排',
list: '列表',
projectOverview: '项目概述',
photoCollection: '照片集',
creativeWriting: '创意写作',
codeSnippet: '代码片段',
designDraft: '设计草稿',
personalResume: '个人简历',
other: '其他',
},
businessDoc: {
meetingMinutes: '会议纪要',
researchReport: '研究报告',
proposal: '提案',
employeeHandbook: '员工手册',
trainingMaterials: '培训材料',
requirementsDocument: '需求文档',
designDocument: '设计文档',
productSpecification: '产品规格',
financialReport: '财务报告',
marketAnalysis: '市场分析',
projectPlan: '项目计划',
teamStructure: '团队结构',
policiesProcedures: '政策和流程',
contractsAgreements: '合同和协议',
emailCorrespondence: '邮件往来',
other: '其他',
},
},
},
embedding: {
processing: '嵌入处理中...',
paused: '嵌入已停止',
completed: '嵌入已完成',
error: '嵌入发生错误',
docName: '预处理文档',
mode: '分段规则',
segmentLength: '分段长度',
textCleaning: '文本预定义与清洗',
segments: '段落',
highQuality: '高质量模式',
economy: '经济模式',
estimate: '预估消耗',
stop: '停止处理',
resume: '恢复处理',
automatic: '自动',
custom: '自定义',
previewTip: '段落预览将在嵌入完成后可用',
},
segment: {
paragraphs: '段落',
keywords: '关键词',
addKeyWord: '添加关键词',
keywordError: '关键词最大长度为 20',
characters: '字符',
hitCount: '召回次数',
vectorHash: '向量哈希:',
questionPlaceholder: '在这里添加问题',
questionEmpty: '问题不能为空',
answerPlaceholder: '在这里添加答案',
answerEmpty: '答案不能为空',
contentPlaceholder: '在这里添加内容',
contentEmpty: '内容不能为空',
newTextSegment: '新文本分段',
newQaSegment: '新问答分段',
delete: '删除这个分段?',
},
}
export default translation

View file

@ -0,0 +1,28 @@
const translation = {
title: '召回测试',
desc: '基于给定的查询文本测试知识库的召回效果。',
dateTimeFormat: 'YYYY-MM-DD HH:mm',
recents: '最近查询',
table: {
header: {
source: '数据源',
text: '文本',
time: '时间',
},
},
input: {
title: '源文本',
placeholder: '请输入文本,建议使用简短的陈述句。',
countWarning: '不超过 200 个字符',
indexWarning: '仅支持高质量模式知识库',
testing: '测试',
},
hit: {
title: '召回段落',
emptyTip: '召回测试结果将展示在这里',
},
noRecentTip: '最近无查询结果',
viewChart: '查看向量图表',
}
export default translation

View file

@ -0,0 +1,33 @@
const translation = {
title: '知识库设置',
desc: '在这里您可以修改知识库的工作方式以及其它设置。',
form: {
name: '知识库名称',
namePlaceholder: '请输入知识库名称',
nameError: '名称不能为空',
desc: '知识库描述',
descInfo: '请写出清楚的文字描述来概述知识库的内容。当从多个知识库中进行选择匹配时,该描述将用作匹配的基础。',
descPlaceholder: '描述这个知识库中的内容。详细的描述可以让 AI 及时访问知识库的内容。如果为空,Dify 将使用默认的命中策略。',
descWrite: '了解如何编写更好的知识库描述。',
permissions: '可见权限',
permissionsOnlyMe: '只有我',
permissionsAllMember: '所有团队成员',
indexMethod: '索引模式',
indexMethodHighQuality: '高质量',
indexMethodHighQualityTip: '调用 OpenAI 的嵌入接口进行处理,以在用户查询时提供更高的准确度',
indexMethodEconomy: '经济',
indexMethodEconomyTip: '使用离线的向量引擎、关键词索引等方式,降低了准确度但无需花费 Token',
embeddingModel: 'Embedding 模型',
embeddingModelTip: '修改 Embedding 模型,请去',
embeddingModelTipLink: '设置',
retrievalSetting: {
title: '检索设置',
learnMore: '了解更多',
description: '关于检索方法。',
longDescription: '关于检索方法,您可以随时在知识库设置中更改此设置。',
},
save: '保存',
},
}
export default translation

View file

@ -0,0 +1,47 @@
const translation = {
knowledge: '知识库',
documentCount: ' 文档',
wordCount: '千字符',
appCount: ' 关联应用',
createDataset: '创建知识库',
createDatasetIntro: '导入您自己的文本数据或通过 Webhook 实时写入数据以增强 LLM 的上下文。',
deleteDatasetConfirmTitle: '要删除知识库吗?',
deleteDatasetConfirmContent:
'删除知识库是不可逆的。用户将无法再访问您的知识库,所有的提示配置和日志将被永久删除。',
datasetDeleted: '知识库已删除',
datasetDeleteFailed: '删除知识库失败',
didYouKnow: '你知道吗?',
intro1: '知识库可以被集成到 Dify 应用中',
intro2: '作为上下文',
intro3: ',',
intro4: '或可以',
intro5: '创建',
intro6: '为独立的 ChatGPT 插件发布使用',
unavailable: '不可用',
unavailableTip: '由于 embedding 模型不可用,需要配置默认 embedding 模型',
datasets: '知识库',
datasetsApi: 'API',
retrieval: {
semantic_search: {
title: '向量检索',
description: '通过生成查询嵌入并查询与其向量表示最相似的文本分段',
},
full_text_search: {
title: '全文检索',
description: '索引文档中的所有词汇,从而允许用户查询任意词汇,并返回包含这些词汇的文本片段',
},
hybrid_search: {
title: '混合检索',
description: '同时执行全文检索和向量检索,并应用重排序步骤,从两类查询结果中选择匹配用户问题的最佳结果,需配置 Rerank 模型 API',
recommend: '推荐',
},
invertedIndex: {
title: '倒排索引',
description: '倒排索引是一种用于高效检索的结构。按术语组织,每个术语指向包含它的文档或网页',
},
change: '更改',
changeRetrievalMethod: '更改检索方法',
},
}
export default translation

View file

@ -0,0 +1,41 @@
const translation = {
title: '探索',
sidebar: {
discovery: '发现',
chat: '智聊',
workspace: '工作区',
action: {
pin: '置顶',
unpin: '取消置顶',
rename: '重命名',
delete: '删除',
},
delete: {
title: '删除程序',
content: '您确定要删除此程序吗?',
},
},
apps: {
title: '探索 Dify 的应用',
description: '使用这些模板应用程序,或根据模板自定义您自己的应用程序。',
allCategories: '所有类别',
},
appCard: {
addToWorkspace: '添加到工作区',
customize: '自定义',
},
appCustomize: {
title: '从 {{name}} 创建应用程序',
subTitle: '应用程序图标和名称',
nameRequired: '应用程序名称不能为空',
},
category: {
Assistant: '助手',
Writing: '写作',
Translate: '翻译',
Programming: '编程',
HR: '人力资源',
},
}
export default translation

View file

@ -0,0 +1,4 @@
const translation = {
}
export default translation

59
web/i18n/zh-Hans/login.ts Normal file
View file

@ -0,0 +1,59 @@
const translation = {
pageTitle: '嗨,近来可好 👋',
welcome: '欢迎来到 Dify, 登录以继续',
email: '邮箱',
emailPlaceholder: '输入邮箱地址',
password: '密码',
passwordPlaceholder: '输入密码',
name: '用户名',
namePlaceholder: '输入用户名',
forget: '忘记密码?',
signBtn: '登录',
installBtn: '设置',
setAdminAccount: '设置管理员账户',
setAdminAccountDesc: '管理员拥有的最大权限,可用于创建应用和管理 LLM 供应商等。',
createAndSignIn: '创建账户',
oneMoreStep: '还差一步',
createSample: '基于这些信息,我们将为您创建一个示例应用',
invitationCode: '邀请码',
invitationCodePlaceholder: '输入邀请码',
interfaceLanguage: '界面语言',
timezone: '时区',
go: '跳转至 Dify',
sendUsMail: '发封邮件介绍你自己,我们会尽快处理。',
acceptPP: '我已阅读并接受隐私政策',
reset: '请运行以下命令重置密码',
withGitHub: '使用 GitHub 登录',
withGoogle: '使用 Google 登录',
rightTitle: '释放大型语言模型的全部潜能',
rightDesc: '简单构建可视化、可运营、可改进的 AI 应用',
tos: '使用协议',
pp: '隐私政策',
tosDesc: '使用即代表你并同意我们的',
donthave: '还没有邀请码?',
invalidInvitationCode: '无效的邀请码',
accountAlreadyInited: '账户已经初始化',
error: {
emailEmpty: '邮箱不能为空',
emailInValid: '请输入有效的邮箱地址',
nameEmpty: '用户名不能为空',
passwordEmpty: '密码不能为空',
passwordInvalid: '密码必须包含字母和数字,且长度不小于8位',
},
license: {
tip: '启动 Dify 社区版之前, 请阅读 GitHub 上的',
link: '开源协议',
},
join: '加入',
joinTipStart: '邀请你加入',
joinTipEnd: '团队',
invalid: '链接已失效',
explore: '探索 Dify',
activatedTipStart: '您已加入',
activatedTipEnd: '团队',
activated: '现在登录',
adminInitPassword: '管理员初始化密码',
validate: '验证',
}
export default translation

View file

@ -0,0 +1,4 @@
const translation = {
}
export default translation

View file

@ -0,0 +1,71 @@
const translation = {
common: {
welcome: '欢迎使用',
appUnavailable: '应用不可用',
appUnkonwError: '应用不可用',
},
chat: {
newChat: '新对话',
pinnedTitle: '已置顶',
unpinnedTitle: '对话列表',
newChatDefaultName: '新的对话',
resetChat: '重置对话',
powerBy: 'Powered by',
prompt: '提示词',
privatePromptConfigTitle: '对话设置',
publicPromptConfigTitle: '对话前提示词',
configStatusDes: '开始前,您可以修改对话设置',
configDisabled: '此次会话已使用上次会话表单',
startChat: '开始对话',
privacyPolicyLeft: '请阅读由该应用开发者提供的',
privacyPolicyMiddle: '隐私政策',
privacyPolicyRight: '。',
deleteConversation: {
title: '删除对话',
content: '您确定要删除此对话吗?',
},
tryToSolve: '尝试解决',
temporarySystemIssue: '抱歉,临时系统问题。',
},
generation: {
tabs: {
create: '运行一次',
batch: '批量运行',
saved: '已保存',
},
savedNoData: {
title: '您还没有保存结果!',
description: '开始生成内容,您可以在这里找到保存的结果。',
startCreateContent: '开始生成内容',
},
title: 'AI 智能书写',
queryTitle: '查询内容',
completionResult: '生成结果',
queryPlaceholder: '请输入文本内容',
run: '运行',
copy: '拷贝',
resultTitle: 'AI 书写',
noData: 'AI 会在这里给你惊喜。',
csvUploadTitle: '将您的 CSV 文件拖放到此处,或',
browse: '浏览',
csvStructureTitle: 'CSV 文件必须符合以下结构:',
downloadTemplate: '下载模板',
field: '',
batchFailed: {
info: '{{num}} 次运行失败',
retry: '重试',
outputPlaceholder: '无输出内容',
},
errorMsg: {
empty: '上传文件的内容不能为空',
fileStructNotMatch: '上传文件的内容与结构不匹配',
emptyLine: '第 {{rowIndex}} 行的内容为空',
invalidLine: '第 {{rowIndex}} 行: {{varName}}值必填',
moreThanMaxLengthLine: '第 {{rowIndex}} 行: {{varName}}值超过最大长度 {{maxLength}}',
atLeastOne: '上传文件的内容不能少于一条',
},
},
}
export default translation

98
web/i18n/zh-Hans/tools.ts Normal file
View file

@ -0,0 +1,98 @@
const translation = {
title: '工具',
createCustomTool: '创建自定义工具',
type: {
all: '全部',
builtIn: '内置',
custom: '自定义',
},
contribute: {
line1: '我有兴趣为 ',
line2: 'Dify 贡献工具。',
viewGuide: '查看指南',
},
author: '作者',
auth: {
unauthorized: '去授权',
authorized: '已授权',
setup: '要使用请先授权',
setupModalTitle: '设置授权',
setupModalTitleDescription: '配置凭据后,工作区中的所有成员都可以在编排应用程序时使用此工具。',
},
includeToolNum: '包含 {{num}} 个工具',
addTool: '添加工具',
createTool: {
title: '创建自定义工具',
editAction: '编辑',
editTitle: '编辑自定义工具',
name: '名称',
toolNamePlaceHolder: '输入工具名称',
schema: 'Schema',
schemaPlaceHolder: '在此处输入您的 OpenAPI schema',
viewSchemaSpec: '查看 OpenAPI-Swagger 规范',
importFromUrl: '从 URL 中导入',
importFromUrlPlaceHolder: 'https://...',
urlError: '请输入有效的 URL',
examples: '例子',
exampleOptions: {
json: '天气(JSON)',
yaml: '宠物商店(YAML)',
blankTemplate: '空白模版',
},
availableTools: {
title: '可用工具',
name: '名称',
description: '描述',
method: '方法',
path: '路径',
action: '操作',
test: '测试',
},
authMethod: {
title: '鉴权方法',
type: '鉴权类型',
types: {
none: '无',
api_key: 'API Key',
apiKeyPlaceholder: 'HTTP 头部名称,用于传递 API Key',
apiValuePlaceholder: '输入 API Key',
},
key: '键',
value: '值',
},
privacyPolicy: '隐私协议',
privacyPolicyPlaceholder: '请输入隐私协议',
},
thought: {
using: '正在使用',
used: '已使用',
requestTitle: '请求来自',
responseTitle: '响应来自',
},
setBuiltInTools: {
info: '信息',
setting: '设置',
toolDescription: '工具描述',
parameters: '参数',
string: '字符串',
number: '数字',
required: '必填',
infoAndSetting: '信息和设置',
},
noCustomTool: {
title: '没有自定义工具!',
content: '在此统一添加和管理你的自定义工具,方便构建应用时使用。',
createTool: '创建工具',
},
noSearchRes: {
title: '抱歉,没有结果!',
content: '我们找不到任何与您的搜索相匹配的工具。',
reset: '重置搜索',
},
builtInPromptTitle: '提示词',
toolRemoved: '工具已被移除',
notAuthorized: '工具未授权',
howToGet: '如何获取',
}
export default translation