Add Russian language (#7860)

Co-authored-by: d8rt8v <alex@ydertev.ru>
Co-authored-by: crazywoola <427733928@qq.com>
This commit is contained in:
Alex 2024-09-02 14:09:41 +03:00 committed by GitHub
parent a8b9e01b3e
commit 35f13c7327
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 3329 additions and 1 deletions

View File

@ -49,6 +49,7 @@ export const NOTICE_I18N = {
ko_KR: '중요 공지',
pl_PL: 'Ważne ogłoszenie',
uk_UA: 'Важливе повідомлення',
ru_RU: 'Важное Уведомление',
vi_VN: 'Thông báo quan trọng',
it_IT: 'Avviso Importante',
fa_IR: 'هشدار مهم',
@ -74,6 +75,8 @@ export const NOTICE_I18N = {
'Nasz system będzie niedostępny od 19:00 do 24:00 UTC 28 sierpnia w celu aktualizacji. W przypadku pytań prosimy o kontakt z naszym zespołem wsparcia (support@dify.ai). Doceniamy Twoją cierpliwość.',
uk_UA:
'Наша система буде недоступна з 19:00 до 24:00 UTC 28 серпня для оновлення. Якщо у вас виникнуть запитання, будь ласка, зв’яжіться з нашою службою підтримки (support@dify.ai). Дякуємо за терпіння.',
ru_RU:
'Наша система будет недоступна с 19:00 до 24:00 UTC 28 августа для обновления. По вопросам, пожалуйста, обращайтесь в нашу службу поддержки (support@dify.ai). Спасибо за ваше терпение',
vi_VN:
'Hệ thống của chúng tôi sẽ ngừng hoạt động từ 19:00 đến 24:00 UTC vào ngày 28 tháng 8 để nâng cấp. Nếu có thắc mắc, vui lòng liên hệ với nhóm hỗ trợ của chúng tôi (support@dify.ai). Chúng tôi đánh giá cao sự kiên nhẫn của bạn.',
tr_TR:

View File

@ -68,7 +68,7 @@
"name": "Русский (Россия)",
"prompt_name": "Russian",
"example": " Привет, Dify!",
"supported": false
"supported": true
},
{
"value": "it-IT",

View File

@ -0,0 +1,87 @@
const translation = {
title: 'Аннотации',
name: 'Ответить на аннотацию',
editBy: 'Ответ отредактирован {{author}}',
noData: {
title: 'Нет аннотаций',
description: 'Вы можете редактировать аннотации во время отладки приложения или импортировать их массово здесь для получения качественного ответа.',
},
table: {
header: {
question: 'вопрос',
answer: 'ответ',
createdAt: 'создано',
hits: 'попаданий',
actions: 'действия',
addAnnotation: 'Добавить аннотацию',
bulkImport: 'Массовый импорт',
bulkExport: 'Массовый экспорт',
clearAll: 'Очистить все аннотации',
},
},
editModal: {
title: 'Редактировать ответ аннотации',
queryName: 'Запрос пользователя',
answerName: 'Storyteller Bot',
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: {
query: 'Запрос',
match: 'Совпадение',
response: 'Ответ',
source: 'Источник',
score: 'Оценка',
time: 'Время',
},
initSetup: {
title: 'Начальная настройка ответа аннотации',
configTitle: 'Настройка ответа аннотации',
confirmBtn: 'Сохранить и включить',
configConfirmBtn: 'Сохранить',
},
embeddingModelSwitchTip: 'Модель векторизации текста аннотаций, переключение между моделями будет осуществлено повторно, что приведет к дополнительным затратам.',
}
export default translation

83
web/i18n/ru-RU/app-api.ts Normal file
View File

@ -0,0 +1,83 @@
const translation = {
apiServer: 'API Сервер',
apiKey: 'API Ключ',
status: 'Статус',
disabled: 'Отключено',
ok: 'В работе',
copy: 'Копировать',
copied: 'Скопировано',
play: 'Запустить',
pause: 'Приостановить',
playing: 'Запущено',
loading: 'Загрузка',
merMaind: {
rerender: 'Перезапустить рендеринг',
},
never: 'Никогда',
apiKeyModal: {
apiSecretKey: 'Секретный ключ API',
apiSecretKeyTips: 'Чтобы предотвратить злоупотребление API, защитите свой API ключ. Избегайте использования его в виде plain-текста во фронтенд-коде. :)',
createNewSecretKey: 'Создать новый секретный ключ',
secretKey: 'Секретный ключ',
created: 'СОЗДАН',
lastUsed: 'ПОСЛЕДНЕЕ ИСПОЛЬЗОВАНИЕ',
generateTips: 'Храните этот ключ в безопасном и доступном месте.',
},
actionMsg: {
deleteConfirmTitle: 'Удалить этот секретный ключ?',
deleteConfirmTips: 'Это действие необратимо.',
ok: 'ОК',
},
completionMode: {
title: 'API приложения',
info: 'Для высококачественной генерации текста, такой как статьи, резюме и переводы, используйте API completion-messages с пользовательским вводом. Генерация текста основана на параметрах модели и шаблонах подсказок, установленных в Dify Prompt Engineering.',
createCompletionApi: 'Создать completion-message',
createCompletionApiTip: 'Создайте completion-message для поддержки режима вопросов и ответов.',
inputsTips: '(Необязательно) Укажите поля пользовательского ввода в виде пар ключ-значение, соответствующих переменным в Prompt Eng. Ключ - это имя переменной, Значение - это значение параметра. Если тип поля - Выбор, отправленное Значение должно быть одним из предустановленных вариантов.',
queryTips: 'Текстовое содержимое пользовательского ввода.',
blocking: 'Блокирующий тип, ожидает завершения выполнения и возвращает результаты. (Запросы могут быть прерваны, если процесс длительный)',
streaming: ' Ответ в рамках потока. Реализация потоковой передачи ответов на основе SSE (Server-Sent Events).',
messageFeedbackApi: 'Обратная связь по сообщению (лайк)',
messageFeedbackApiTip: 'Оцените полученные сообщения от имени конечных пользователей с помощью лайков или дизлайков. Эти данные видны на странице Журналы и аннотации и используются для будущей тонкой настройки модели.',
messageIDTip: 'Идентификатор сообщения',
ratingTip: 'лайк или дизлайк, null - отмена',
parametersApi: 'Получить информацию о параметрах приложения',
parametersApiTip: 'Получить настроенные входные параметры, включая имена переменных, имена полей, типы и значения по умолчанию. Обычно используется для отображения этих полей в форме или заполнения значений по умолчанию после загрузки клиента.',
},
chatMode: {
title: 'API приложения чата',
info: 'Для универсальных диалоговых приложений, использующих формат вопросов и ответов, вызовите API chat-messages, чтобы начать диалог. Поддерживайте текущие разговоры, передавая возвращенный conversation_id. Параметры ответа и шаблоны зависят от настроек Dify Prompt Eng.',
createChatApi: 'Создать сообщение чата',
createChatApiTip: 'Создайте новое сообщение разговора или продолжите существующий диалог.',
inputsTips: '(Необязательно) Укажите поля пользовательского ввода в виде пар ключ-значение, соответствующих переменным в Prompt Eng. Ключ - это имя переменной, Значение - это значение параметра. Если тип поля - Выбор, отправленное Значение должно быть одним из предустановленных вариантов.',
queryTips: 'Содержимое пользовательского ввода/вопроса',
blocking: 'Блокирующий тип, ожидает завершения выполнения и возвращает результаты. (Запросы могут быть прерваны, если процесс длительный)',
streaming: 'потоковая передача возвращает. Реализация потоковой передачи возврата на основе SSE (Server-Sent Events).',
conversationIdTip: '(Необязательно) Идентификатор разговора: оставьте пустым для первого разговора; передайте conversation_id из контекста, чтобы продолжить диалог.',
messageFeedbackApi: 'Обратная связь конечного пользователя по сообщению, лайк',
messageFeedbackApiTip: 'Оцените полученные сообщения от имени конечных пользователей с помощью лайков или дизлайков. Эти данные видны на странице Журналы и аннотации и используются для будущей тонкой настройки модели.',
messageIDTip: 'Идентификатор сообщения',
ratingTip: 'лайк или дизлайк, null - отмена',
chatMsgHistoryApi: 'Получить историю сообщений чата',
chatMsgHistoryApiTip: 'Первая страница возвращает последние `limit` строк, которые находятся в обратном порядке.',
chatMsgHistoryConversationIdTip: 'Идентификатор разговора',
chatMsgHistoryFirstId: 'Идентификатор первой записи чата на текущей странице. По умолчанию - нет.',
chatMsgHistoryLimit: 'Сколько чатов возвращается за один запрос',
conversationsListApi: 'Получить список разговоров',
conversationsListApiTip: 'Получает список сеансов текущего пользователя. По умолчанию возвращаются последние 20 сеансов.',
conversationsListFirstIdTip: 'Идентификатор последней записи на текущей странице, по умолчанию - нет.',
conversationsListLimitTip: 'Сколько чатов возвращается за один запрос',
conversationRenamingApi: 'Переименование разговора',
conversationRenamingApiTip: 'Переименовать разговоры; имя отображается в многосессионных клиентских интерфейсах.',
conversationRenamingNameTip: 'Новое имя',
parametersApi: 'Получить информацию о параметрах приложения',
parametersApiTip: 'Получить настроенные входные параметры, включая имена переменных, имена полей, типы и значения по умолчанию. Обычно используется для отображения этих полей в форме или заполнения значений по умолчанию после загрузки клиента.',
},
develop: {
requestBody: 'Тело запроса',
pathParams: 'Параметры пути',
query: 'Запрос',
},
}
export default translation

463
web/i18n/ru-RU/app-debug.ts Normal file
View File

@ -0,0 +1,463 @@
const translation = {
pageTitle: {
line1: 'PROMPT',
line2: 'Engineering',
},
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 ключ.',
},
feature: {
groupChat: {
title: 'Улучшение чата',
description: 'Добавление настроек предварительного разговора для приложений может улучшить пользовательский опыт.',
},
groupExperience: {
title: 'Улучшение опыта',
},
conversationOpener: {
title: 'Начальное сообщение',
description: 'В чат-приложении первое предложение, которое ИИ активно говорит пользователю, обычно используется в качестве приветствия.',
},
suggestedQuestionsAfterAnswer: {
title: 'Последующие вопросы',
description: 'Настройка предложения следующих вопросов может улучшить чат для пользователей.',
resDes: '3 предложения для следующего вопроса пользователя.',
tryToAsk: 'Попробуйте спросить',
},
moreLikeThis: {
title: 'Больше похожего',
description: 'Сгенерируйте несколько текстов одновременно, а затем отредактируйте и продолжайте генерировать',
generateNumTip: 'Количество генерируемых каждый раз',
tip: 'Использование этой функции приведет к дополнительным расходам токенов',
},
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, принимая пользовательский ввод или переменные в качестве параметров запроса для запроса внешних данных в качестве контекста.',
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',
openaiTip: {
prefix: 'Для модерации OpenAI требуется ключ API OpenAI, настроенный в ',
suffix: '.',
},
keywords: 'Ключевые слова',
},
keywords: {
tip: 'По одному на строку, разделенные разрывами строк. До 100 символов на строку.',
placeholder: 'По одному на строку, разделенные разрывами строк',
line: 'Строка',
},
content: {
input: 'Модерировать ВХОДНОЙ контент',
output: 'Модерировать ВЫХОДНОЙ контент',
preset: 'Предустановленные ответы',
placeholder: 'Здесь содержимое предустановленных ответов',
condition: 'Модерация ВХОДНОГО и ВЫХОДНОГО контента включена хотя бы одна',
fromApi: 'Предустановленные ответы возвращаются API',
errorMessage: 'Предустановленные ответы не могут быть пустыми',
supportMarkdown: 'Markdown поддерживается',
},
openaiNotConfig: {
before: 'Для модерации OpenAI требуется ключ API OpenAI, настроенный в',
after: '',
},
},
},
},
generate: {
title: 'Генератор промпта',
description: 'Генератор промпта использует настроенную модель для оптимизации промпта для повышения качества и улучшения структуры. Пожалуйста, напишите четкие и подробные инструкции.',
tryIt: 'Попробуйте',
instruction: 'Инструкции',
instructionPlaceHolder: 'Напишите четкие и конкретные инструкции.',
generate: 'Сгенерировать',
resTitle: 'Сгенерированный промпт',
noDataLine1: 'Опишите свой случай использования слева,',
noDataLine2: 'предварительный просмотр оркестрации будет показан здесь.',
apply: 'Применить',
loading: 'Оркестрация приложения для вас...',
overwriteTitle: 'Перезаписать существующую конфигурацию?',
overwriteMessage: 'Применение этого промпта перезапишет существующую конфигурацию.',
template: {
pythonDebugger: {
name: 'Отладчик Python',
instruction: 'Бот, который может генерировать и отлаживать ваш код на основе ваших инструкций',
},
translation: {
name: 'Переводчик',
instruction: 'Переводчик, который может переводить на несколько языков',
},
professionalAnalyst: {
name: 'Профессиональный аналитик',
instruction: 'Извлекайте информацию, выявляйте риски и извлекайте ключевую информацию из длинных отчетов в одну записку',
},
excelFormulaExpert: {
name: 'Эксперт по формулам Excel',
instruction: 'Чат-бот, который может помочь начинающим пользователям понять, использовать и создавать формулы Excel на основе инструкций пользователя',
},
travelPlanning: {
name: 'Планировщик путешествий',
instruction: 'Помощник по планированию путешествий - это интеллектуальный инструмент, разработанный, чтобы помочь пользователям без труда планировать свои поездки',
},
SQLSorcerer: {
name: 'SQL-ассистент',
instruction: 'Преобразуйте повседневный язык в SQL-запросы',
},
GitGud: {
name: 'Git gud',
instruction: 'Генерируйте соответствующие команды Git на основе описанных пользователем действий по управлению версиями',
},
meetingTakeaways: {
name: 'Итоги совещания',
instruction: 'Извлекайте из совещаний краткие резюме, включая темы обсуждения, ключевые выводы и элементы действий',
},
writingsPolisher: {
name: 'Редактор',
instruction: 'Используйте LLM, чтобы улучшить свои письменные работы',
},
},
},
resetConfig: {
title: 'Подтвердить сброс?',
message:
'Сброс отменяет изменения, восстанавливая последнюю опубликованную конфигурацию.',
},
errorMessage: {
nameOfKeyRequired: 'имя ключа: {{key}} обязательно',
valueOfVarRequired: 'значение {{key}} не может быть пустым',
queryRequired: 'Требуется текст запроса.',
waitForResponse:
'Пожалуйста, дождитесь завершения ответа на предыдущее сообщение.',
waitForBatchResponse:
'Пожалуйста, дождитесь завершения ответа на пакетное задание.',
notSelectModel: 'Пожалуйста, выберите модель',
waitForImgUpload: 'Пожалуйста, дождитесь загрузки изображения',
},
chatSubTitle: 'Инструкции',
completionSubTitle: 'Префикс Промпта',
promptTip:
'Промпт направляют ответы ИИ с помощью инструкций и ограничений. Вставьте переменные, такие как {{input}}. Этот Промпт не будет видна пользователям.',
formattingChangedTitle: 'Форматирование изменено',
formattingChangedText:
'Изменение форматирования приведет к сбросу области отладки, вы уверены?',
variableTitle: 'Переменные',
variableTip:
'Пользователи заполняют переменные в форме, автоматически заменяя переменные в промпте.',
notSetVar: 'Переменные позволяют пользователям вводить промпты или вступительные замечания при заполнении форм. Вы можете попробовать ввести "{{input}}" в промптах.',
autoAddVar: 'В предварительной промпте упоминаются неопределенные переменные, хотите ли вы добавить их в форму пользовательского ввода?',
variableTable: {
key: 'Ключ переменной',
name: 'Имя поля пользовательского ввода',
optional: 'Необязательно',
type: 'Тип ввода',
action: 'Действия',
typeString: 'Строка',
typeSelect: 'Выбор',
},
varKeyError: {
canNoBeEmpty: '{{key}} обязательно',
tooLong: '{{key}} слишком длинное. Не может быть длиннее 30 символов',
notValid: '{{key}} недействительно. Может содержать только буквы, цифры и подчеркивания',
notStartWithNumber: '{{key}} не может начинаться с цифры',
keyAlreadyExists: '{{key}} уже существует',
},
otherError: {
promptNoBeEmpty: 'Промпт не может быть пустой',
historyNoBeEmpty: 'История разговоров должна быть установлена в промпте',
queryNoBeEmpty: 'Запрос должен быть установлен в промпте',
},
variableConig: {
'addModalTitle': 'Добавить поле ввода',
'editModalTitle': 'Редактировать поле ввода',
'description': 'Настройка для переменной {{varName}}',
'fieldType': 'Тип поля',
'string': 'Короткий текст',
'text-input': 'Короткий текст',
'paragraph': 'Абзац',
'select': 'Выбор',
'number': 'Число',
'notSet': 'Не задано, попробуйте ввести {{input}} в префикс промпта',
'stringTitle': 'Параметры текстового поля формы',
'maxLength': 'Максимальная длина',
'options': 'Варианты',
'addOption': 'Добавить вариант',
'apiBasedVar': 'Переменная на основе API',
'varName': 'Имя переменной',
'labelName': 'Имя метки',
'inputPlaceholder': 'Пожалуйста, введите',
'content': 'Содержимое',
'required': 'Обязательно',
'errorMsg': {
labelNameRequired: 'Имя метки обязательно',
varNameCanBeRepeat: 'Имя переменной не может повторяться',
atLeastOneOption: 'Требуется хотя бы один вариант',
optionRepeat: 'Есть повторяющиеся варианты',
},
},
vision: {
name: 'Зрение',
description: 'Включение зрения позволит модели принимать изображения и отвечать на вопросы о них.',
settings: 'Настройки',
visionSettings: {
title: 'Настройки зрения',
resolution: 'Разрешение',
resolutionTooltip: `Низкое разрешение позволит модели получать версию изображения с низким разрешением 512 x 512 и представлять изображение с бюджетом 65 токенов. Это позволяет API возвращать ответы быстрее и потреблять меньше входных токенов для случаев использования, не требующих высокой детализации.
\n
Высокое разрешение сначала позволит модели увидеть изображение с низким разрешением, а затем создаст детальные фрагменты входных изображений в виде квадратов 512 пикселей на основе размера входного изображения. Каждый из детальных фрагментов использует вдвое больший бюджет токенов, в общей сложности 129 токенов.`,
high: 'Высокое',
low: 'Низкое',
uploadMethod: 'Метод загрузки',
both: 'Оба',
localUpload: 'Локальная загрузка',
url: 'URL',
uploadLimit: 'Лимит загрузки',
},
},
voice: {
name: 'Голос',
defaultDisplay: 'Голос по умолчанию',
description: 'Настройки преобразования текста в речь',
settings: 'Настройки',
voiceSettings: {
title: 'Настройки голоса',
language: 'Язык',
resolutionTooltip: 'Язык, поддерживаемый преобразованием текста в речь.',
voice: 'Голос',
autoPlay: 'Автовоспроизведение',
autoPlayEnabled: 'Включить',
autoPlayDisabled: 'Выключить',
},
},
openingStatement: {
title: 'Начальное сообщение',
add: 'Добавить',
writeOpener: 'Написать начальное сообщение',
placeholder: 'Напишите здесь свое начальное сообщение, вы можете использовать переменные, попробуйте ввести {{variable}}.',
openingQuestion: 'Начальные вопросы',
noDataPlaceHolder:
'Начало разговора с пользователем может помочь ИИ установить более тесную связь с ним в диалоговых приложениях.',
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: 'Настройки поиска',
knowledgeTip: 'Нажмите кнопку "+", чтобы добавить знания',
retrieveOneWay: {
title: 'Поиск N-к-1',
description: 'На основе намерения пользователя и описаний знаний агент автономно выбирает наилучшие знания для запроса. Лучше всего подходит для приложений с различными, ограниченными знаниями.',
},
retrieveMultiWay: {
title: 'Многопутный поиск',
description: 'На основе намерения пользователя выполняет запросы по всем знаниям, извлекает соответствующий текст из нескольких источников и выбирает наилучшие результаты, соответствующие запросу пользователя, после повторного ранжирования.',
},
rerankModelRequired: 'Требуется rerank-модель ',
params: 'Параметры',
top_k: 'Top K',
top_kTip: 'Используется для фильтрации фрагментов, наиболее похожих на вопросы пользователей. Система также будет динамически корректировать значение Top K в зависимости от max_tokens выбранной модели.',
score_threshold: 'Порог оценки',
score_thresholdTip: 'Используется для установки порога сходства для фильтрации фрагментов.',
retrieveChangeTip: 'Изменение режима индексации и режима поиска может повлиять на приложения, связанные с этими знаниями.',
},
debugAsSingleModel: 'Отладка как одной модели',
debugAsMultipleModel: 'Отладка как нескольких моделей',
duplicateModel: 'Дублировать',
publishAs: 'Опубликовать как',
assistantType: {
name: 'Тип помощника',
chatAssistant: {
name: 'Базовый помощник',
description: 'Создайте помощника на основе чата, используя большую языковую модель',
},
agentAssistant: {
name: 'Агент-помощник',
description: 'Создайте интеллектуального агента, который может автономно выбирать инструменты для выполнения задач',
},
},
agent: {
agentMode: 'Режим агента',
agentModeDes: 'Установите тип режима вывода для агента',
agentModeType: {
ReACT: 'ReAct',
functionCall: 'Вызов функции',
},
setting: {
name: 'Настройки агента',
description: 'Настройки агента-помощника позволяют установить режим агента и расширенные функции, такие как встроенные промпты, доступные только в типе агента.',
maximumIterations: {
name: 'Максимальное количество итераций',
description: 'Ограничьте количество итераций, которые может выполнить агент-помощник',
},
},
buildInPrompt: 'Встроенный промпт',
firstPrompt: 'Первый промпт',
nextIteration: 'Следующая итерация',
promptPlaceholder: 'Напишите здесь свой первый промпт',
tools: {
name: 'Инструменты',
description: 'Использование инструментов может расширить возможности LLM, такие как поиск в Интернете или выполнение научных расчетов',
enabled: 'Включено',
},
},
}
export default translation

95
web/i18n/ru-RU/app-log.ts Normal file
View File

@ -0,0 +1,95 @@
const translation = {
title: 'Логирование',
description: 'В логах записывается состояние работы приложения, включая пользовательский ввод и ответы ИИ.',
dateTimeFormat: 'DD.MM.YYYY HH:mm',
table: {
header: {
updatedTime: 'Время обновления',
time: 'Время создания',
endUser: 'Конечный пользователь или аккаунт',
input: 'Ввод',
output: 'Вывод',
summary: 'Заголовок',
messageCount: 'Количество сообщений',
userRate: 'Оценка пользователя',
adminRate: 'Оценка оп.',
startTime: 'ВРЕМЯ НАЧАЛА',
status: 'СТАТУС',
runtime: 'ВРЕМЯ ВЫПОЛНЕНИЯ',
tokens: 'ТОКЕНЫ',
user: 'Конечный пользователь или аккаунт',
version: 'ВЕРСИЯ',
},
pagination: {
previous: 'Предыдущий',
next: 'Следующий',
},
empty: {
noChat: 'Еще нет чатов',
noOutput: 'Нет вывода',
element: {
title: 'Есть кто-нибудь?',
content: 'Наблюдайте и аннотируйте взаимодействия между конечными пользователями и приложениями ИИ здесь, чтобы постоянно повышать точность ИИ. Вы можете попробовать <shareLink>поделиться</shareLink> или <testLink>протестировать</testLink> веб-приложение самостоятельно, а затем вернуться на эту страницу.',
},
},
},
detail: {
time: 'Время',
conversationId: 'Идентификатор разговора',
promptTemplate: 'Шаблон подсказки',
promptTemplateBeforeChat: 'Шаблон подсказки перед чатом · Как системное сообщение',
annotationTip: 'Улучшения, отмеченные {{user}}',
timeConsuming: '',
second: 'с',
tokenCost: 'Потрачено токенов',
loading: 'загрузка',
operation: {
like: 'лайк',
dislike: 'дизлайк',
addAnnotation: 'Добавить улучшение',
editAnnotation: 'Редактировать улучшение',
annotationPlaceholder: 'Введите ожидаемый ответ, который вы хотите получить от ИИ, который может быть использован для тонкой настройки модели и постоянного улучшения качества генерации текста в будущем.',
},
variables: 'Переменные',
uploadImages: 'Загруженные изображения',
},
filter: {
period: {
today: 'Сегодня',
last7days: 'Последние 7 дней',
last4weeks: 'Последние 4 недели',
last3months: 'Последние 3 месяца',
last12months: 'Последние 12 месяцев',
monthToDate: 'С начала месяца',
quarterToDate: 'С начала квартала',
yearToDate: 'С начала года',
allTime: 'Все время',
},
annotation: {
all: 'Все',
annotated: 'Аннотированные улучшения ({{count}} элементов)',
not_annotated: 'Не аннотировано',
},
sortBy: 'Сортировать по:',
descending: 'по убыванию',
ascending: 'по возрастанию',
},
workflowTitle: 'Журналы рабочих процессов',
workflowSubtitle: 'Журнал записал работу Automate.',
runDetail: {
title: 'Журнал разговоров',
workflowTitle: 'Подробная информация о журнале',
},
promptLog: 'Журнал подсказок',
agentLog: 'Журнал агента',
viewLog: 'Просмотреть журнал',
agentLogDetail: {
agentMode: 'Режим агента',
toolUsed: 'Использованный инструмент',
iterations: 'Итерации',
iteration: 'Итерация',
finalProcessing: 'Окончательная обработка',
},
}
export default translation

View File

@ -0,0 +1,168 @@
const translation = {
welcome: {
firstStepTip: 'Чтобы начать,',
enterKeyTip: 'введите свой ключ API OpenAI ниже',
getKeyTip: 'Получите свой ключ API на панели инструментов OpenAI',
placeholder: 'Ваш ключ API OpenAI (например, sk-xxxx)',
},
apiKeyInfo: {
cloud: {
trial: {
title: 'Вы используете пробную квоту {{providerName}}.',
description: 'Пробная квота предоставляется для тестирования. Прежде чем пробная квота будет исчерпана, пожалуйста, настройте своего собственного поставщика модели или приобретите дополнительную квоту.',
},
exhausted: {
title: 'Ваша пробная квота была исчерпана, пожалуйста, настройте свой APIKey.',
description: 'Вы исчерпали свою пробную квоту. Пожалуйста, настройте своего собственного поставщика модели или приобретите дополнительную квоту.',
},
},
selfHost: {
title: {
row1: 'Чтобы начать,',
row2: 'сначала настройте своего поставщика модели.',
},
},
callTimes: 'Количество вызовов',
usedToken: 'Использованные токены',
setAPIBtn: 'Перейти к настройке поставщика модели',
tryCloud: 'Или попробуйте облачную версию Dify с бесплатной квотой',
},
overview: {
title: 'Обзор',
appInfo: {
explanation: 'Готовое к использованию веб-приложение ИИ',
accessibleAddress: 'Публичный URL',
preview: 'Предварительный просмотр',
regenerate: 'Перегенерировать',
regenerateNotice: 'Вы хотите перегенерировать публичный URL?',
preUseReminder: 'Пожалуйста, включите веб-приложение перед продолжением.',
settings: {
entry: 'Настройки',
title: 'Настройки веб-приложения',
webName: 'Название веб-приложения',
webDesc: 'Описание веб-приложения',
webDescTip: 'Этот текст будет отображаться на стороне клиента, предоставляя базовые инструкции по использованию приложения',
webDescPlaceholder: 'Введите описание веб-приложения',
language: 'Язык',
workflow: {
title: 'Рабочий процесс',
subTitle: 'Подробности рабочего процесса',
show: 'Показать',
hide: 'Скрыть',
showDesc: 'Показать или скрыть подробности рабочего процесса в веб-приложении',
},
chatColorTheme: 'Цветовая тема чата',
chatColorThemeDesc: 'Установите цветовую тему чат-бота',
chatColorThemeInverted: 'Инвертированные цвета',
invalidHexMessage: 'Неверное HEX-значение',
sso: {
label: 'SSO аутентификация',
title: 'WebApp SSO',
description: 'Все пользователи должны войти в систему с помощью SSO перед использованием WebApp',
tooltip: 'Обратитесь к администратору, чтобы включить WebApp SSO',
},
more: {
entry: 'Показать больше настроек',
copyright: 'Авторские права',
copyRightPlaceholder: 'Введите имя автора или организации',
privacyPolicy: 'Политика конфиденциальности',
privacyPolicyPlaceholder: 'Введите ссылку на политику конфиденциальности',
privacyPolicyTip: 'Помогает посетителям понять, какие данные собирает приложение, см. <privacyPolicyLink>Политику конфиденциальности</privacyPolicyLink> Dify.',
customDisclaimer: 'Пользовательский отказ от ответственности',
customDisclaimerPlaceholder: 'Введите текст пользовательского отказа от ответственности',
customDisclaimerTip: 'Текст пользовательского отказа от ответственности будет отображаться на стороне клиента, предоставляя дополнительную информацию о приложении',
},
},
embedded: {
entry: 'Встраивание',
title: 'Встроить на веб-сайт',
explanation: 'Выберите способ встраивания чат-приложения на свой веб-сайт',
iframe: 'Чтобы добавить чат-приложение в любое место на вашем веб-сайте, добавьте этот iframe в свой HTML-код.',
scripts: 'Чтобы добавить чат-приложение в правый нижний угол вашего веб-сайта, добавьте этот код в свой HTML.',
chromePlugin: 'Установите расширение Dify Chatbot для Chrome',
copied: 'Скопировано',
copy: 'Копировать',
},
qrcode: {
title: 'QR-код ссылки',
scan: 'Сканировать, чтобы поделиться',
download: 'Скачать QR-код',
},
customize: {
way: 'способ',
entry: 'Настроить',
title: 'Настроить веб-приложение ИИ',
explanation: 'Вы можете настроить внешний интерфейс веб-приложения в соответствии со своими потребностями.',
way1: {
name: 'Создайте форк клиентского кода, измените его и разверните на Vercel (рекомендуется)',
step1: 'Создайте форк клиентского кода и измените его',
step1Tip: 'Нажмите здесь, чтобы создать форк исходного кода в своей учетной записи GitHub и изменить код',
step1Operation: 'Dify-WebClient',
step2: 'Развернуть на Vercel',
step2Tip: 'Нажмите здесь, чтобы импортировать репозиторий в Vercel и развернуть',
step2Operation: 'Импортировать репозиторий',
step3: 'Настроить переменные среды',
step3Tip: 'Добавьте следующие переменные среды в Vercel',
},
way2: {
name: 'Напишите клиентский код для вызова API и разверните его на сервере',
operation: 'Документация',
},
},
},
apiInfo: {
title: 'API серверной части',
explanation: 'Легко интегрируется в ваше приложение',
accessibleAddress: 'Конечная точка API сервиса',
doc: 'Справочник по API',
},
status: {
running: 'В работе',
disable: 'Отключено',
},
},
analysis: {
title: 'Анализ',
ms: 'мс',
tokenPS: 'Токен/с',
totalMessages: {
title: 'Всего сообщений',
explanation: 'Ежедневное количество взаимодействий с ИИ.',
},
totalConversations: {
title: 'Всего чатов',
explanation: 'Ежедневное количество чатов с LLM; проектирование/отладка не учитываются.',
},
activeUsers: {
title: 'Активные пользователи',
explanation: 'Уникальные пользователи, участвующие в вопросах и ответах с LLM; проектирование/отладка не учитываются.',
},
tokenUsage: {
title: 'Использование токенов',
explanation: 'Отражает ежедневное использование токенов языковой модели для приложения, полезно для целей контроля затрат.',
consumed: 'Потрачено',
},
avgSessionInteractions: {
title: 'Среднее количество взаимодействий за сеанс',
explanation: 'Количество непрерывных взаимодействий пользователя с LLM; для приложений на основе чатов.',
},
avgUserInteractions: {
title: 'Среднее количество взаимодействий пользователя',
explanation: 'Отражает ежедневную частоту использования пользователями. Эта метрика отражает активность пользователей.',
},
userSatisfactionRate: {
title: 'Уровень удовлетворенности пользователей',
explanation: 'Количество лайков на 1000 сообщений. Это указывает на долю ответов, которыми пользователи довольны.',
},
avgResponseTime: {
title: 'Среднее время ответа',
explanation: 'Время (мс) для обработки/ответа LLM; для текстовых приложений.',
},
tps: {
title: 'Скорость вывода токенов',
explanation: 'Измерьте производительность LLM. Подсчитайте скорость вывода токенов LLM от начала запроса до завершения вывода.',
},
},
}
export default translation

133
web/i18n/ru-RU/app.ts Normal file
View File

@ -0,0 +1,133 @@
const translation = {
createApp: 'СОЗДАТЬ ПРИЛОЖЕНИЕ',
types: {
all: 'Все',
chatbot: 'Чат-бот',
agent: 'Агент',
workflow: 'Рабочий процесс',
completion: 'Завершение',
},
duplicate: 'Дублировать',
duplicateTitle: 'Дублировать приложение',
export: 'Экспортировать DSL',
exportFailed: 'Ошибка экспорта DSL.',
importDSL: 'Импортировать файл DSL',
createFromConfigFile: 'Создать из файла DSL',
importFromDSL: 'Импортировать из DSL',
importFromDSLFile: 'Из файла DSL',
importFromDSLUrl: 'Из URL',
importFromDSLUrlPlaceholder: 'Вставьте ссылку DSL сюда',
deleteAppConfirmTitle: 'Удалить это приложение?',
deleteAppConfirmContent:
'Удаление приложения необратимо. Пользователи больше не смогут получить доступ к вашему приложению, и все настройки подсказок и журналы будут безвозвратно удалены.',
appDeleted: 'Приложение удалено',
appDeleteFailed: 'Не удалось удалить приложение',
join: 'Присоединяйтесь к сообществу',
communityIntro:
'Общайтесь с членами команды, участниками и разработчиками на разных каналах.',
roadmap: 'Посмотреть наш roadmap',
newApp: {
startFromBlank: 'Создать с нуля',
startFromTemplate: 'Создать из шаблона',
captionAppType: 'Какой тип приложения вы хотите создать?',
chatbotDescription: 'Создайте приложение на основе чата. Это приложение использует формат вопросов и ответов, позволяя общаться непрерывно.',
completionDescription: 'Создайте приложение, которое генерирует высококачественный текст на основе подсказок, например, генерирует статьи, резюме, переводы и многое другое.',
completionWarning: 'Этот тип приложения больше не будет поддерживаться.',
agentDescription: 'Создайте интеллектуального агента, который может автономно выбирать инструменты для выполнения задач',
workflowDescription: 'Создайте приложение, которое генерирует высококачественный текст на основе рабочего процесса, организованного с высокой степенью настройки. Подходит для опытных пользователей.',
workflowWarning: 'В настоящее время находится в бета-версии',
chatbotType: 'Метод организации чат-бота',
basic: 'Базовый',
basicTip: 'Для начинающих, можно переключиться на Chatflow позже',
basicFor: 'ДЛЯ НАЧИНАЮЩИХ',
basicDescription: 'Базовый конструктор позволяет создать приложение чат-бота с помощью простых настроек, без возможности изменять встроенные подсказки. Подходит для начинающих.',
advanced: 'Chatflow',
advancedFor: 'Для продвинутых пользователей',
advancedDescription: 'Организация рабочего процесса организует чат-ботов в виде рабочих процессов, предлагая высокую степень настройки, включая возможность редактирования встроенных подсказок. Подходит для опытных пользователей.',
captionName: 'Значок и название приложения',
appNamePlaceholder: 'Дайте вашему приложению имя',
captionDescription: 'Описание',
appDescriptionPlaceholder: 'Введите описание приложения',
useTemplate: 'Использовать этот шаблон',
previewDemo: 'Предварительный просмотр',
chatApp: 'Ассистент',
chatAppIntro:
'Я хочу создать приложение на основе чата. Это приложение использует формат вопросов и ответов, позволяя общаться непрерывно.',
agentAssistant: 'Новый Ассистент Агента',
completeApp: 'Генератор текста',
completeAppIntro:
'Я хочу создать приложение, которое генерирует высококачественный текст на основе подсказок, например, генерирует статьи, резюме, переводы и многое другое.',
showTemplates: 'Я хочу выбрать из шаблона',
hideTemplates: 'Вернуться к выбору режима',
Create: 'Создать',
Cancel: 'Отмена',
nameNotEmpty: 'Имя не может быть пустым',
appTemplateNotSelected: 'Пожалуйста, выберите шаблон',
appTypeRequired: 'Пожалуйста, выберите тип приложения',
appCreated: 'Приложение создано',
appCreateFailed: 'Не удалось создать приложение',
},
editApp: 'Редактировать информацию',
editAppTitle: 'Редактировать информацию о приложении',
editDone: 'Информация о приложении обновлена',
editFailed: 'Не удалось обновить информацию о приложении',
iconPicker: {
ok: 'ОК',
cancel: 'Отмена',
emoji: 'Эмодзи',
image: 'Изображение',
},
switch: 'Переключиться на Workflow',
switchTipStart: 'Для вас будет создана новая копия Workflow. Новая копия ',
switchTip: 'не позволит',
switchTipEnd: ' переключиться обратно на базовую организацию.',
switchLabel: 'Копия приложения, которая будет создана',
removeOriginal: 'Удалить исходное приложение',
switchStart: 'Переключиться',
typeSelector: {
all: 'ВСЕ типы',
chatbot: 'Чат-бот',
agent: 'Агент',
workflow: 'Рабочий процесс',
completion: 'Завершение',
},
tracing: {
title: 'Отслеживание производительности приложения',
description: 'Настройка стороннего поставщика LLMOps и отслеживание производительности приложения.',
config: 'Настройка',
view: 'Просмотр',
collapse: 'Свернуть',
expand: 'Развернуть',
tracing: 'Отслеживание',
disabled: 'Отключено',
disabledTip: 'Пожалуйста, сначала настройте провайдера LLM',
enabled: 'В работе',
tracingDescription: 'Запись полного контекста выполнения приложения, включая вызовы LLM, контекст, подсказки, HTTP-запросы и многое другое, на стороннюю платформу трассировки.',
configProviderTitle: {
configured: 'Настроено',
notConfigured: 'Настройте провайдера, чтобы включить трассировку',
moreProvider: 'Больше провайдеров',
},
langsmith: {
title: 'LangSmith',
description: 'Универсальная платформа для разработчиков для каждого этапа жизненного цикла приложения на базе LLM.',
},
langfuse: {
title: 'Langfuse',
description: 'Трассировка, оценка, управление подсказками и метрики для отладки и улучшения вашего приложения LLM.',
},
inUse: 'Используется',
configProvider: {
title: 'Настройка ',
placeholder: 'Введите ваш {{key}}',
project: 'Проект',
publicKey: 'Публичный ключ',
secretKey: 'Секретный ключ',
viewDocsLink: 'Посмотреть документацию {{key}}',
removeConfirmTitle: 'Удалить конфигурацию {{key}}?',
removeConfirmContent: 'Текущая конфигурация используется, ее удаление отключит функцию трассировки.',
},
},
}
export default translation

118
web/i18n/ru-RU/billing.ts Normal file
View File

@ -0,0 +1,118 @@
const translation = {
currentPlan: 'Текущий тарифный план',
upgradeBtn: {
plain: 'Обновить тарифный план',
encourage: 'Обновить сейчас',
encourageShort: 'Обновить',
},
viewBilling: 'Управление счетами и подписками',
buyPermissionDeniedTip: 'Пожалуйста, свяжитесь с администратором вашей организации, чтобы подписаться',
plansCommon: {
title: 'Выберите тарифный план, который подходит именно вам',
yearlyTip: 'Получите 2 месяца бесплатно, подписавшись на год!',
mostPopular: 'Самый популярный',
planRange: {
monthly: 'Ежемесячно',
yearly: 'Ежегодно',
},
month: 'месяц',
year: 'год',
save: 'Сэкономить ',
free: 'Бесплатно',
currentPlan: 'Текущий тарифный план',
contractSales: 'Связаться с отделом продаж',
contractOwner: 'Связаться с руководителем команды',
startForFree: 'Начать бесплатно',
getStartedWith: 'Начать с ',
contactSales: 'Связаться с отделом продаж',
talkToSales: 'Поговорить с отделом продаж',
modelProviders: 'Поставщики моделей',
teamMembers: 'Участники команды',
annotationQuota: 'Квота аннотаций',
buildApps: 'Создать приложения',
vectorSpace: 'Векторное пространство',
vectorSpaceBillingTooltip: 'Каждый 1 МБ может хранить около 1,2 миллиона символов векторизованных данных (оценка с использованием Embeddings OpenAI, варьируется в зависимости от модели).',
vectorSpaceTooltip: 'Векторное пространство - это система долговременной памяти, необходимая LLM для понимания ваших данных.',
documentsUploadQuota: 'Квота загрузки документов',
documentProcessingPriority: 'Приоритет обработки документов',
documentProcessingPriorityTip: 'Для более высокого приоритета обработки документов, пожалуйста, обновите свой тарифный план.',
documentProcessingPriorityUpgrade: 'Обрабатывайте больше данных с большей точностью и на более высоких скоростях.',
priority: {
'standard': 'Стандартный',
'priority': 'Приоритетный',
'top-priority': 'Высокий приоритет',
},
logsHistory: 'История журналов',
customTools: 'Пользовательские инструменты',
unavailable: 'Недоступно',
days: 'дней',
unlimited: 'Неограниченно',
support: 'Поддержка',
supportItems: {
communityForums: 'Форумы сообщества',
emailSupport: 'Поддержка по электронной почте',
priorityEmail: 'Приоритетная поддержка по электронной почте и в чате',
logoChange: 'Изменение логотипа',
SSOAuthentication: 'SSO аутентификация',
personalizedSupport: 'Персональная поддержка',
dedicatedAPISupport: 'Выделенная поддержка API',
customIntegration: 'Пользовательская интеграция и поддержка',
ragAPIRequest: 'Запросы RAG API',
bulkUpload: 'Массовая загрузка документов',
agentMode: 'Режим агента',
workflow: 'Рабочий процесс',
llmLoadingBalancing: 'Балансировка нагрузки LLM',
llmLoadingBalancingTooltip: 'Добавьте несколько ключей API к моделям, эффективно обходя ограничения скорости API.',
},
comingSoon: 'Скоро',
member: 'Участник',
memberAfter: 'Участник',
messageRequest: {
title: 'Кредиты на сообщения',
tooltip: 'Квоты вызова сообщений для различных тарифных планов, использующих модели OpenAI (кроме gpt4). Сообщения, превышающие лимит, будут использовать ваш ключ API OpenAI.',
},
annotatedResponse: {
title: 'Ограничения квоты аннотаций',
tooltip: 'Ручное редактирование и аннотирование ответов обеспечивает настраиваемые высококачественные возможности ответов на вопросы для приложений. (Применимо только в чат-приложениях)',
},
ragAPIRequestTooltip: 'Относится к количеству вызовов API, вызывающих только возможности обработки базы знаний Dify.',
receiptInfo: 'Только владелец команды и администратор команды могут подписываться и просматривать информацию о выставлении счетов',
},
plans: {
sandbox: {
name: 'Песочница',
description: '200 бесплатных пробных использований GPT',
includesTitle: 'Включает:',
},
professional: {
name: 'Профессиональный',
description: 'Для частных лиц и небольших команд, чтобы разблокировать больше возможностей по доступной цене.',
includesTitle: 'Все в бесплатном плане, плюс:',
},
team: {
name: 'Команда',
description: 'Сотрудничайте без ограничений и наслаждайтесь высочайшей производительностью.',
includesTitle: 'Все в профессиональном плане, плюс:',
},
enterprise: {
name: 'Корпоративный',
description: 'Получите полный набор возможностей и поддержку для крупномасштабных критически важных систем.',
includesTitle: 'Все в командном плане, плюс:',
},
},
vectorSpace: {
fullTip: 'Векторное пространство заполнено.',
fullSolution: 'Обновите свой тарифный план, чтобы получить больше места.',
},
apps: {
fullTipLine1: 'Обновите свой тарифный план, чтобы',
fullTipLine2: 'создавать больше приложений.',
},
annotatedResponse: {
fullTipLine1: 'Обновите свой тарифный план, чтобы',
fullTipLine2: 'аннотировать больше разговоров.',
quotaTitle: 'Квота ответов аннотаций',
},
}
export default translation

576
web/i18n/ru-RU/common.ts Normal file
View File

@ -0,0 +1,576 @@
const translation = {
api: {
success: 'Успешно',
actionSuccess: 'Действие выполнено успешно',
saved: 'Сохранено',
create: 'Создано',
remove: 'Удалено',
},
operation: {
create: 'Создать',
confirm: 'Подтвердить',
cancel: 'Отмена',
clear: 'Очистить',
save: 'Сохранить',
saveAndEnable: 'Сохранить и включить',
edit: 'Редактировать',
add: 'Добавить',
added: 'Добавлено',
refresh: 'Перезапустить',
reset: 'Сбросить',
search: 'Поиск',
change: 'Изменить',
remove: 'Удалить',
send: 'Отправить',
copy: 'Копировать',
lineBreak: 'Разрыв строки',
sure: 'Я уверен',
download: 'Скачать',
delete: 'Удалить',
settings: 'Настройки',
setup: 'Настроить',
getForFree: 'Получить бесплатно',
reload: 'Перезагрузить',
ok: 'ОК',
log: 'Журнал',
learnMore: 'Узнать больше',
params: 'Параметры',
duplicate: 'Дублировать',
rename: 'Переименовать',
},
errorMsg: {
fieldRequired: '{{field}} обязательно',
urlError: 'URL должен начинаться с http:// или https://',
},
placeholder: {
input: 'Пожалуйста, введите',
select: 'Пожалуйста, выберите',
},
voice: {
language: {
zhHans: 'Китайский',
zhHant: 'Традиционный китайский',
enUS: 'Английский',
deDE: 'Немецкий',
frFR: 'Французский',
esES: 'Испанский',
itIT: 'Итальянский',
thTH: 'Тайский',
idID: 'Индонезийский',
jaJP: 'Японский',
koKR: 'Корейский',
ptBR: 'Португальский',
ruRU: 'Русский',
ukUA: 'Украинский',
viVN: 'Вьетнамский',
plPL: 'Польский',
roRO: 'Румынский',
hiIN: 'Хинди',
trTR: 'Турецкий',
faIR: 'Персидский',
},
},
unit: {
char: 'символов',
},
actionMsg: {
noModification: 'На данный момент нет изменений.',
modifiedSuccessfully: 'Изменено успешно',
modifiedUnsuccessfully: 'Изменено неудачно',
copySuccessfully: 'Скопировано успешно',
paySucceeded: 'Оплата прошла успешно',
payCancelled: 'Оплата отменена',
generatedSuccessfully: 'Сгенерировано успешно',
generatedUnsuccessfully: 'Сгенерировано неудачно',
},
model: {
params: {
temperature: 'Temperature',
temperatureTip:
'Контролирует случайность: более низкое значение приводит к менее случайным завершениям. По мере приближения температуры к нулю модель станет детерминированной и повторяющейся.',
top_p: 'Top P',
top_pTip:
'Контролирует разнообразие с помощью ядерной выборки: 0,5 означает, что рассматривается половина всех вариантов, взвешенных по вероятности.',
presence_penalty: 'Presence penalty',
presence_penaltyTip:
'Насколько штрафовать новые токены в зависимости от того, появляются ли они в тексте до сих пор.\nУвеличивает вероятность того, что модель будет говорить о новых темах.',
frequency_penalty: 'Frequency penalty',
frequency_penaltyTip:
'Насколько штрафовать новые токены в зависимости от их существующей частоты в тексте до сих пор.\nУменьшает вероятность того, что модель будет повторять одну и ту же строку дословно.',
max_tokens: 'Максимальное количество токенов',
max_tokensTip:
'Используется для ограничения максимальной длины ответа в токенах. \nБольшие значения могут ограничивать пространство, оставленное для подсказок, журналов чата и знаний. \nРекомендуется установить его ниже двух третей\ngpt-4-1106-preview, gpt-4-vision-preview max token (input 128k output 4k)',
maxTokenSettingTip: 'Ваша настройка максимального количества токенов высока, что потенциально ограничивает пространство для подсказок, запросов и данных. Подумайте о том, чтобы установить его ниже 2/3.',
setToCurrentModelMaxTokenTip: 'Максимальное количество токенов обновлено до 80% максимального количества токенов текущей модели {{maxToken}}.',
stop_sequences: 'Стоп-последовательности',
stop_sequencesTip: 'До четырех последовательностей, где API прекратит генерировать дальнейшие токены. Возвращаемый текст не будет содержать стоп-последовательность.',
stop_sequencesPlaceholder: 'Введите последовательность и нажмите Tab',
},
tone: {
Creative: 'Творческий',
Balanced: 'Сбалансированный',
Precise: 'Точный',
Custom: 'Пользовательский',
},
addMoreModel: 'Перейдите в настройки, чтобы добавить больше моделей',
},
menus: {
status: 'бета',
explore: 'Исследовать',
apps: 'Студия',
plugins: 'Плагины',
pluginsTips: 'Интегрируйте сторонние плагины или создавайте совместимые с ChatGPT AI-плагины.',
datasets: 'Знания',
datasetsTips: 'СКОРО: Импортируйте свои собственные текстовые данные или записывайте данные в режиме реального времени через Webhook для улучшения контекста LLM.',
newApp: 'Новое приложение',
newDataset: 'Создать знания',
tools: 'Инструменты',
},
userProfile: {
settings: 'Настройки',
emailSupport: 'Поддержка по электронной почте',
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: 'Новый пароль',
confirmPassword: 'Подтвердите пароль',
notEqual: 'Два пароля различаются.',
langGeniusAccount: 'Учетная запись Dify',
langGeniusAccountTip: 'Ваша учетная запись Dify и связанные с ней пользовательские данные.',
editName: 'Редактировать имя',
showAppLength: 'Показать {{length}} приложений',
delete: 'Удалить учетную запись',
deleteTip: 'Удаление вашей учетной записи приведет к безвозвратному удалению всех ваших данных, и их невозможно будет восстановить.',
deleteConfirmTip: 'Для подтверждения, пожалуйста, отправьте следующее с вашего зарегистрированного адреса электронной почты на ',
},
members: {
team: 'Команда',
invite: 'Добавить',
name: 'ИМЯ',
lastActive: 'ПОСЛЕДНЯЯ АКТИВНОСТЬ',
role: 'РОЛИ',
pending: 'Ожидание...',
owner: 'Владелец',
admin: 'Администратор',
adminTip: 'Может создавать приложения и управлять настройками команды',
normal: 'Обычный',
normalTip: 'Может только использовать приложения, не может создавать приложения',
builder: 'Разработчик',
builderTip: 'Может создавать и редактировать собственные приложения',
editor: 'Редактор',
editorTip: 'Может создавать и редактировать приложения',
datasetOperator: 'Администратор знаний',
datasetOperatorTip: 'Может управлять только базой знаний',
inviteTeamMember: 'Добавить участника команды',
inviteTeamMemberTip: 'Они могут получить доступ к данным вашей команды сразу после входа в систему.',
email: 'Электронная почта',
emailInvalid: 'Неверный формат электронной почты',
emailPlaceholder: 'Пожалуйста, введите адреса электронной почты',
sendInvite: 'Отправить приглашение',
invitedAsRole: 'Приглашен как пользователь с ролью {{role}}',
invitationSent: 'Приглашение отправлено',
invitationSentTip: 'Приглашение отправлено, и они могут войти в Dify, чтобы получить доступ к данным вашей команды.',
invitationLink: 'Ссылка для приглашения',
failedinvitationEmails: 'Следующие пользователи не были успешно приглашены',
ok: 'ОК',
removeFromTeam: 'Удалить из команды',
removeFromTeamTip: 'Удалить доступ к команде',
setAdmin: 'Назначить администратором',
setMember: 'Назначить обычным участником',
setBuilder: 'Назначить разработчиком',
setEditor: 'Назначить редактором',
disinvite: 'Отменить приглашение',
deleteMember: 'Удалить участника',
you: '(Вы)',
},
integrations: {
connected: 'Подключено',
google: 'Google',
googleAccount: 'Войти с помощью учетной записи Google',
github: 'GitHub',
githubAccount: 'Войти с помощью учетной записи GitHub',
connect: 'Подключить',
},
language: {
displayLanguage: 'Язык отображения',
timezone: 'Часовой пояс',
},
provider: {
apiKey: 'Ключ API',
enterYourKey: 'Введите свой ключ API здесь',
invalidKey: 'Неверный ключ API OpenAI',
validatedError: 'Ошибка валидации: ',
validating: 'Проверка ключа...',
saveFailed: 'Ошибка сохранения ключа API',
apiKeyExceedBill: 'Этот API-ключ не имеет доступной квоты, пожалуйста, прочитайте',
addKey: 'Добавить ключ',
comingSoon: 'Скоро',
editKey: 'Редактировать',
invalidApiKey: 'Неверный ключ API',
azure: {
apiBase: 'Базовый API',
apiBasePlaceholder: 'Базовый URL-адрес API вашей конечной точки Azure OpenAI.',
apiKey: 'Ключ API',
apiKeyPlaceholder: 'Введите свой ключ API здесь',
helpTip: 'Узнать о службе Azure OpenAI',
},
openaiHosted: {
openaiHosted: 'Размещенный OpenAI',
onTrial: 'ПРОБНАЯ ВЕРСИЯ',
exhausted: 'КВОТА ИСЧЕРПАНА',
desc: 'Хостинговая служба OpenAI, предоставляемая Dify, позволяет вам использовать такие модели, как 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 Service.',
notEnabled: 'Не включено',
keyFrom: 'Получите свой ключ API от Anthropic',
},
encrypted: {
front: 'Ваш API-ключ будет зашифрован и сохранен с использованием',
back: ' технологии.',
},
},
modelProvider: {
notConfigured: 'Системная модель еще не полностью настроена, и некоторые функции могут быть недоступны.',
systemModelSettings: 'Настройки системной модели',
systemModelSettingsLink: 'Зачем нужно настраивать системную модель?',
selectModel: 'Выберите свою модель',
setupModelFirst: 'Пожалуйста, сначала настройте свою модель',
systemReasoningModel: {
key: 'Модель системного мышления',
tip: 'Установите модель вывода по умолчанию, которая будет использоваться для создания приложений, а также такие функции, как генерация имени диалога и предложение следующего вопроса, также будут использовать модель вывода по умолчанию.',
},
embeddingModel: {
key: 'Модель встраивания',
tip: 'Установите модель по умолчанию для обработки встраивания документов знаний, как поиск, так и импорт знаний используют эту модель встраивания для обработки векторизации. Переключение приведет к несоответствию векторного измерения между импортированными знаниями и вопросом, что приведет к сбою поиска. Чтобы избежать сбоя поиска, пожалуйста, не переключайте эту модель по своему усмотрению.',
required: 'Модель встраивания обязательна',
},
speechToTextModel: {
key: 'Модель преобразования речи в текст',
tip: 'Установите модель по умолчанию для ввода речи в текст в разговоре.',
},
ttsModel: {
key: 'Модель преобразования текста в речь',
tip: 'Установите модель по умолчанию для ввода текста в речь в разговоре.',
},
rerankModel: {
key: 'Модель повторного ранжирования',
tip: 'Модель повторного ранжирования изменит порядок списка документов-кандидатов на основе семантического соответствия запросу пользователя, улучшая результаты семантического ранжирования',
},
apiKey: 'API-КЛЮЧ',
quota: 'Квота',
searchModel: 'Поиск модели',
noModelFound: 'Модель не найдена для {{model}}',
models: 'Модели',
showMoreModelProvider: 'Показать больше поставщиков моделей',
selector: {
tip: 'Эта модель была удалена. Пожалуйста, добавьте модель или выберите другую модель.',
emptyTip: 'Нет доступных моделей',
emptySetting: 'Пожалуйста, перейдите в настройки для настройки',
rerankTip: 'Пожалуйста, настройте модель повторного ранжирования',
},
card: {
quota: 'КВОТА',
onTrial: 'Пробная версия',
paid: 'Платный',
quotaExhausted: 'Квота исчерпана',
callTimes: 'Количество вызовов',
tokens: 'Токены',
buyQuota: 'Купить квоту',
priorityUse: 'Приоритетное использование',
removeKey: 'Удалить API-ключ',
tip: 'Приоритет будет отдаваться платной квоте. Пробная квота будет использоваться после исчерпания платной квоты.',
},
item: {
deleteDesc: '{{modelName}} используются в качестве моделей системного мышления. Некоторые функции будут недоступны после удаления. Пожалуйста, подтвердите.',
freeQuota: 'БЕСПЛАТНАЯ КВОТА',
},
addApiKey: 'Добавьте свой API-ключ',
invalidApiKey: 'Неверный API-ключ',
encrypted: {
front: 'Ваш API-ключ будет зашифрован и сохранен с использованием',
back: ' технологии.',
},
freeQuota: {
howToEarn: 'Как заработать',
},
addMoreModelProvider: 'ДОБАВИТЬ БОЛЬШЕ ПОСТАВЩИКОВ МОДЕЛЕЙ',
addModel: 'Добавить модель',
modelsNum: '{{num}} Моделей',
showModels: 'Показать модели',
showModelsNum: 'Показать {{num}} моделей',
collapse: 'Свернуть',
config: 'Настройка',
modelAndParameters: 'Модель и параметры',
model: 'Модель',
featureSupported: '{{feature}} поддерживается',
callTimes: 'Количество вызовов',
credits: 'Кредиты на сообщения',
buyQuota: 'Купить квоту',
getFreeTokens: 'Получить бесплатные токены',
priorityUsing: 'Приоритетное использование',
deprecated: 'Устаревший',
confirmDelete: 'Подтвердить удаление?',
quotaTip: 'Оставшиеся доступные бесплатные токены',
loadPresets: 'Загрузить предустановки',
parameters: 'ПАРАМЕТРЫ',
loadBalancing: 'Балансировка нагрузки',
loadBalancingDescription: 'Снизьте нагрузку с помощью нескольких наборов учетных данных.',
loadBalancingHeadline: 'Балансировка нагрузки',
configLoadBalancing: 'Настроить балансировку нагрузки',
modelHasBeenDeprecated: 'Эта модель устарела',
providerManaged: 'Управляется поставщиком',
providerManagedDescription: 'Используйте один набор учетных данных, предоставленный поставщиком модели.',
defaultConfig: 'Настройка по умолчанию',
apiKeyStatusNormal: 'Статус APIKey в норме',
apiKeyRateLimit: 'Достигнут предел скорости, доступен через {{seconds}}s',
addConfig: 'Добавить конфигурацию',
editConfig: 'Редактировать конфигурацию',
loadBalancingLeastKeyWarning: 'Для включения балансировки нагрузки необходимо включить не менее 2 ключей.',
loadBalancingInfo: 'По умолчанию балансировка нагрузки использует стратегию Round-robin. Если срабатывает ограничение скорости, будет применен 1-минутный период охлаждения.',
upgradeForLoadBalancing: 'Обновите свой тарифный план, чтобы включить балансировку нагрузки.',
},
dataSource: {
add: 'Добавить источник данных',
connect: 'Подключить',
configure: 'Настроить',
notion: {
title: 'Notion',
description: 'Использование Notion в качестве источника данных для знаний.',
connectedWorkspace: 'Подключенное рабочее пространство',
addWorkspace: 'Добавить рабочее пространство',
connected: 'Подключено',
disconnected: 'Отключено',
changeAuthorizedPages: 'Изменить авторизованные страницы',
pagesAuthorized: 'Авторизованные страницы',
sync: 'Синхронизировать',
remove: 'Удалить',
selector: {
pageSelected: 'Выбранные страницы',
searchPages: 'Поиск страниц...',
noSearchResult: 'Нет результатов поиска',
addPages: 'Добавить страницы',
preview: 'ПРЕДПРОСМОТР',
},
},
website: {
title: 'Веб-сайт',
description: 'Импортировать контент с веб-сайтов с помощью веб-краулера.',
with: 'С',
configuredCrawlers: 'Настроенные краулеры',
active: 'Активный',
inactive: 'Неактивный',
},
},
plugin: {
serpapi: {
apiKey: 'Ключ API',
apiKeyPlaceholder: 'Введите свой ключ API',
keyFrom: 'Получите свой ключ SerpAPI на странице учетной записи SerpAPI',
},
},
apiBasedExtension: {
title: 'API-расширения обеспечивают централизованное управление API, упрощая настройку для удобного использования в приложениях Dify.',
link: 'Узнайте, как разработать собственное API-расширение.',
linkUrl: 'https://docs.dify.ai/features/extension/api_based_extension',
add: 'Добавить API Extension',
selector: {
title: 'API Extension',
placeholder: 'Пожалуйста, выберите API-расширение',
manage: 'Управление API-расширением',
},
modal: {
title: 'Добавить API-расширение',
editTitle: 'Редактировать API-расширение',
name: {
title: 'Имя',
placeholder: 'Пожалуйста, введите имя',
},
apiEndpoint: {
title: 'API Endpoint',
placeholder: 'Пожалуйста, введите конечную точку API',
},
apiKey: {
title: 'API-ключ',
placeholder: 'Пожалуйста, введите API-ключ',
lengthError: 'Длина API-ключа не может быть меньше 5 символов',
},
},
type: 'Тип',
},
about: {
changeLog: 'Журнал изменений',
updateNow: 'Обновить сейчас',
nowAvailable: 'Dify {{version}} теперь доступен.',
latestAvailable: 'Dify {{version}} - последняя доступная версия.',
},
appMenus: {
overview: 'Мониторинг',
promptEng: 'Оркестрация',
apiAccess: 'Доступ к API',
logAndAnn: 'Журналы и аннотации',
logs: 'Журналы',
},
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: 'Вставить переменные и внешние инструменты',
},
outputToolDisabledItem: {
title: 'Переменные',
desc: 'Вставить переменные',
},
modal: {
add: 'Новая переменная',
addTool: 'Новый инструмент',
},
},
query: {
item: {
title: 'Запрос',
desc: 'Вставить шаблон запроса пользователя',
},
},
existed: 'Уже существует в подсказке',
},
imageUploader: {
uploadFromComputer: 'Загрузить с компьютера',
uploadFromComputerReadError: 'Ошибка чтения изображения, повторите попытку.',
uploadFromComputerUploadError: 'Ошибка загрузки изображения, загрузите еще раз.',
uploadFromComputerLimit: 'Загружаемые изображения не могут превышать {{size}} МБ',
pasteImageLink: 'Вставить ссылку на изображение',
pasteImageLinkInputPlaceholder: 'Вставьте ссылку на изображение здесь',
pasteImageLinkInvalid: 'Неверная ссылка на изображение',
imageUpload: 'Загрузка изображения',
},
tag: {
placeholder: 'Все теги',
addNew: 'Добавить новый тег',
noTag: 'Нет тегов',
noTagYet: 'Еще нет тегов',
addTag: 'Добавить теги',
editTag: 'Редактировать теги',
manageTags: 'Управление тегами',
selectorPlaceholder: 'Введите для поиска или создания',
create: 'Создать',
delete: 'Удалить тег',
deleteTip: 'Тег используется, удалить его?',
created: 'Тег успешно создан',
failed: 'Ошибка создания тега',
},
}
export default translation

30
web/i18n/ru-RU/custom.ts Normal file
View File

@ -0,0 +1,30 @@
const translation = {
custom: 'Настройка',
upgradeTip: {
prefix: 'Обновите свой тарифный план, чтобы',
suffix: 'настроить свой бренд.',
},
webapp: {
title: 'Настроить бренд веб-приложения',
removeBrand: 'Удалить Powered by Dify',
changeLogo: 'Изменить изображение бренда Powered by',
changeLogoTip: 'Формат SVG или PNG с минимальным размером 40x40px',
},
app: {
title: 'Настроить бренд заголовка приложения',
changeLogoTip: 'Формат SVG или PNG с минимальным размером 80x80px',
},
upload: 'Загрузить',
uploading: 'Загрузка',
uploadedFail: 'Ошибка загрузки изображения, пожалуйста изображение, загрузите еще раз.',
change: 'Изменить',
apply: 'Применить',
restore: 'Восстановить значения по умолчанию',
customize: {
contactUs: ' свяжитесь с нами ',
prefix: 'Чтобы настроить логотип бренда в приложении, пожалуйста,',
suffix: 'чтобы перейти на корпоративную версию.',
},
}
export default translation

View File

@ -0,0 +1,161 @@
const translation = {
steps: {
header: {
creation: 'Создать базу знаний',
update: 'Добавить данные',
},
one: 'Выберите источник данных',
two: 'Предварительная обработка и очистка текста',
three: 'Выполнить и завершить',
},
error: {
unavailable: 'Эта база знаний недоступна',
},
firecrawl: {
configFirecrawl: 'Настроить 🔥Firecrawl',
apiKeyPlaceholder: 'Ключ API с firecrawl.dev',
getApiKeyLinkText: 'Получите свой ключ API с firecrawl.dev',
},
stepOne: {
filePreview: 'Предварительный просмотр файла',
pagePreview: 'Предварительный просмотр страницы',
dataSourceType: {
file: 'Импортировать из файла',
notion: 'Синхронизировать из Notion',
web: 'Синхронизировать с веб-сайта',
},
uploader: {
title: 'Загрузить файл',
button: 'Перетащите файл или',
browse: 'Обзор',
tip: 'Поддерживаются {{supportTypes}}. Максимум {{size}} МБ каждый.',
validation: {
typeError: 'Тип файла не поддерживается',
size: 'Файл слишком большой. Максимум {{size}} МБ',
count: 'Несколько файлов не поддерживаются',
filesNumber: 'Вы достигли лимита пакетной загрузки {{filesNumber}} файлов.',
},
cancel: 'Отмена',
change: 'Изменить',
failed: 'Ошибка загрузки',
},
notionSyncTitle: 'Notion не подключен',
notionSyncTip: 'Чтобы синхронизировать данные из Notion, сначала необходимо установить соединение с Notion.',
connect: 'Перейти к подключению',
button: 'Далее',
emptyDatasetCreation: 'Я хочу создать пустую базу знаний',
modal: {
title: 'Создать пустую базу знаний',
tip: 'Пустая база знаний не будет содержать документов, и вы можете загружать документы в любое время.',
input: 'Название базы знаний',
placeholder: 'Пожалуйста, введите',
nameNotEmpty: 'Название не может быть пустым',
nameLengthInvaild: 'Название должно быть от 1 до 40 символов',
cancelButton: 'Отмена',
confirmButton: 'Создать',
failed: 'Ошибка создания',
},
website: {
fireCrawlNotConfigured: 'Firecrawl не настроен',
fireCrawlNotConfiguredDescription: 'Настройте Firecrawl с API-ключом.',
configure: 'Настроить',
run: 'Запустить',
firecrawlTitle: 'Извлечь веб-контент с помощью 🔥Firecrawl',
firecrawlDoc: 'Документация Firecrawl',
firecrawlDocLink: 'https://docs.dify.ai/guides/knowledge-base/sync-from-website',
options: 'Опции',
crawlSubPage: 'Сканировать подстраницы',
limit: 'Лимит',
maxDepth: 'Максимальная глубина',
excludePaths: 'Исключить пути',
includeOnlyPaths: 'Включить только пути',
extractOnlyMainContent: 'Извлекать только основной контент (без заголовков, навигации, футеров и т. д.)',
exceptionErrorTitle: 'Произошло исключение при запуске задания Firecrawl:',
unknownError: 'Неизвестная ошибка',
totalPageScraped: 'Всего просканировано страниц:',
selectAll: 'Выбрать все',
resetAll: 'Сбросить все',
scrapTimeInfo: 'Всего просканировано {{total}} страниц за {{time}} секунд',
preview: 'Предварительный просмотр',
maxDepthTooltip: 'Максимальная глубина сканирования относительно введенного URL. Глубина 0 сканирует только страницу введенного URL, глубина 1 сканирует URL и все, что находится после введенного URL + один /, и так далее.',
},
},
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 поставщика модели.',
click: 'Перейти к настройкам',
economical: 'Экономичный',
economicalTip: 'Используйте автономные векторные движки, индексы ключевых слов и т. д., чтобы снизить точность, не тратя токены',
QATitle: 'Сегментация в формате вопрос-ответ',
QATip: 'Включение этой опции приведет к потреблению большего количества токенов',
QALanguage: 'Сегментировать с помощью',
emstimateCost: 'Оценка',
emstimateSegment: 'Оценочное количество фрагментов',
segmentCount: 'фрагментов',
calculating: 'Вычисление...',
fileSource: 'Предварительная обработка документов',
notionSource: 'Предварительная обработка страниц',
websiteSource: 'Предварительная обработка веб-сайта',
other: 'и другие ',
fileUnit: ' файлов',
notionUnit: ' страниц',
webpageUnit: ' страниц',
previousStep: 'Предыдущий шаг',
nextStep: 'Сохранить и обработать',
save: 'Сохранить и обработать',
cancel: 'Отмена',
sideTipTitle: 'Зачем нужна фрагментация и предварительная обработка?',
sideTipP1: 'При обработке текстовых данных фрагментация и очистка являются двумя важными этапами предварительной обработки.',
sideTipP2: 'Сегментация разбивает длинный текст на абзацы, чтобы модели могли лучше его понимать. Это улучшает качество и релевантность результатов модели.',
sideTipP3: 'Очистка удаляет ненужные символы и форматы, делая знания более чистыми и легкими для анализа.',
sideTipP4: 'Правильная фрагментация и очистка улучшают производительность модели, обеспечивая более точные и ценные результаты.',
previewTitle: 'Предварительный просмотр',
previewTitleButton: 'Предварительный просмотр',
previewButton: 'Переключение в формат вопрос-ответ',
previewSwitchTipStart: 'Текущий предварительный просмотр фрагмента находится в текстовом формате, переключение на предварительный просмотр в формате вопрос-ответ',
previewSwitchTipEnd: ' потребляет дополнительные токены',
characters: 'символов',
indexSettedTip: 'Чтобы изменить метод индексации, пожалуйста, перейдите в ',
retrivalSettedTip: 'Чтобы изменить метод индексации, пожалуйста, перейдите в ',
datasetSettingLink: 'настройки базы знаний.',
},
stepThree: {
creationTitle: '🎉 База знаний создана',
creationContent: 'Мы автоматически назвали базу знаний, вы можете изменить ее в любое время',
label: 'Название базы знаний',
additionTitle: '🎉 Документ загружен',
additionP1: 'Документ был загружен в базу знаний',
additionP2: ', вы можете найти его в списке документов базы знаний.',
stop: 'Остановить обработку',
resume: 'Возобновить обработку',
navTo: 'Перейти к документу',
sideTipTitle: 'Что дальше',
sideTipContent: 'После завершения индексации документа база знаний может быть интегрирована в приложение в качестве контекста, вы можете найти настройку контекста на странице prompt orchestration. Вы также можете создать-workflow приложение как отдельный как независимый плагин.',
modelTitle: 'Вы уверены, что хотите остановить встраивание?',
modelContent: 'Если вам нужно будет возобновить обработку позже, вы продолжите с того места, где остановились.',
modelButtonConfirm: 'Подтвердить',
modelButtonCancel: 'Отмена',
},
}
export default translation

View File

@ -0,0 +1,352 @@
const translation = {
list: {
title: 'Документы',
desc: 'Здесь отображаются все файлы базы знаний, и вся база знаний может быть связана с цитатами Dify или проиндексирована с помощью чата.',
addFile: 'Добавить файл',
addPages: 'Добавить страницы',
addUrl: 'Добавить URL',
table: {
header: {
fileName: 'НАЗВАНИЕ ФАЙЛА',
words: 'СЛОВА',
hitCount: 'КОЛИЧЕСТВО ОБРАЩЕНИЙ',
uploadTime: 'ВРЕМЯ ЗАГРУЗКИ',
status: 'СТАТУС',
action: 'ДЕЙСТВИЕ',
},
rename: 'Переименовать',
name: 'Название',
},
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: 'Вы можете загружать файлы, синхронизировать с веб-сайта или из веб-приложений, таких как Notion, 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: 'Маркировка метаданных для документов позволяет ИИ своевременно получать к ним доступ и раскрывать источник ссылок для пользователей.',
dateTimeFormat: 'D MMMM YYYY, HH:mm',
docTypeSelectTitle: 'Пожалуйста, выберите тип документа',
docTypeChangeTitle: 'Изменить тип документа',
docTypeSelectWarning:
'Если тип документа будет изменен, заполненные сейчас метаданные больше не будут сохранены',
firstMetaAction: 'Поехали',
placeholder: {
add: 'Добавить ',
select: 'Выбрать ',
},
source: {
upload_file: 'Загрузить файл',
notion: 'Синхронизировать из Notion',
github: 'Синхронизировать из Github',
},
type: {
book: 'Книга',
webPage: 'Веб-страница',
paper: 'Статья',
socialMediaPost: 'Пост в социальных сетях',
personalDocument: 'Личный документ',
businessDocument: 'Деловой документ',
IMChat: 'Чат в мессенджере',
wikipediaEntry: 'Статья в Википедии',
notion: 'Синхронизировать из Notion',
github: 'Синхронизировать из Github',
technicalParameters: 'Технические параметры',
},
field: {
processRule: {
processDoc: 'Обработка документа',
segmentRule: 'Правило фрагментации',
segmentLength: 'Длина фрагментов',
processClean: 'Очистка текста',
},
book: {
title: 'Название',
language: 'Язык',
author: 'Автор',
publisher: 'Издатель',
publicationDate: 'Дата публикации',
ISBN: 'ISBN',
category: 'Категория',
},
webPage: {
title: 'Название',
url: 'URL',
language: 'Язык',
authorPublisher: 'Автор/Издатель',
publishDate: 'Дата публикации',
topicsKeywords: 'Темы/Ключевые слова',
description: 'Описание',
},
paper: {
title: 'Название',
language: 'Язык',
author: 'Автор',
publishDate: 'Дата публикации',
journalConferenceName: 'Название журнала/конференции',
volumeIssuePage: 'Том/Выпуск/Страница',
DOI: 'DOI',
topicsKeywords: 'Темы/Ключевые слова',
abstract: 'Аннотация',
},
socialMediaPost: {
platform: 'Платформа',
authorUsername: 'Автор/Имя пользователя',
publishDate: 'Дата публикации',
postURL: 'URL поста',
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: 'URL веб-страницы',
editorContributor: 'Редактор/Автор',
lastEditDate: 'Дата последнего редактирования',
summaryIntroduction: 'Краткое содержание/Введение',
},
notion: {
title: 'Название',
language: 'Язык',
author: 'Автор',
createdTime: 'Время создания',
lastModifiedTime: 'Время последнего изменения',
url: 'URL',
tag: 'Тег',
description: 'Описание',
},
github: {
repoName: 'Название репозитория',
repoDesc: 'Описание репозитория',
repoOwner: 'Владелец репозитория',
fileName: 'Название файла',
filePath: 'Путь к файлу',
programmingLang: 'Язык программирования',
url: '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: 'DD.MM.YYYY 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,35 @@
const translation = {
title: 'Настройки базы знаний',
desc: 'Здесь вы можете изменить свойства и методы работы базы знаний.',
form: {
name: 'Название базы знаний',
namePlaceholder: 'Пожалуйста, введите название базы знаний',
nameError: 'Название не может быть пустым',
desc: 'Описание базы знаний',
descInfo: 'Пожалуйста, напишите четкое текстовое описание, чтобы обрисовать содержание базы знаний. Это описание будет использоваться в качестве основы для сопоставления при выборе из нескольких баз знаний для вывода.',
descPlaceholder: 'Опишите, что находится в этой базе знаний. Подробное описание позволяет ИИ своевременно получать доступ к содержимому базы знаний. Если оставить пустым, Dify будет использовать стратегию поиска по умолчанию.',
descWrite: 'Узнайте, как написать хорошее описание базы знаний.',
permissions: 'Разрешения',
permissionsOnlyMe: 'Только я',
permissionsAllMember: 'Все участники команды',
permissionsInvitedMembers: 'Отдельные участники команды',
me: '(Вы)',
indexMethod: 'Метод индексации',
indexMethodHighQuality: 'Высокое качество',
indexMethodHighQualityTip: 'Вызов модели встраивания для обработки, чтобы обеспечить более высокую точность при запросах пользователей.',
indexMethodEconomy: 'Экономичный',
indexMethodEconomyTip: 'Используйте автономные векторные движки, индексы ключевых слов и т. д., чтобы снизить точность, не тратя токены',
embeddingModel: 'Модель встраивания',
embeddingModelTip: 'Изменить встроенную модель, пожалуйста, перейдите в ',
embeddingModelTipLink: 'Настройки',
retrievalSetting: {
title: 'Настройки поиска',
learnMore: 'Узнать больше',
description: ' о методе поиска.',
longDescription: ' о методе поиска, вы можете изменить это в любое время в настройках базы знаний.',
},
save: 'Сохранить',
},
}
export default translation

76
web/i18n/ru-RU/dataset.ts Normal file
View File

@ -0,0 +1,76 @@
const translation = {
knowledge: 'База знаний',
documentCount: ' документов',
wordCount: ' тыс. слов',
appCount: ' связанных приложений',
createDataset: 'Создать базу знаний',
createDatasetIntro: 'Импортируйте свои собственные текстовые данные или записывайте данные в режиме реального времени через Webhook для улучшения контекста LLM.',
deleteDatasetConfirmTitle: 'Удалить эту базу знаний?',
deleteDatasetConfirmContent:
'Удаление базы знаний необратимо. Пользователи больше не смогут получить доступ к вашей базе знаний, и все настройки подсказок и журналы будут безвозвратно удалены.',
datasetUsedByApp: 'База знаний используется некоторыми приложениями. Приложения больше не смогут использовать эту базу знаний, и все настройки подсказок и журналы будут безвозвратно удалены.',
datasetDeleted: 'База знаний удалена',
datasetDeleteFailed: 'Не удалось удалить базу знаний',
didYouKnow: 'Знаете ли вы?',
intro1: 'Базу знаний можно интегрировать в приложение Dify ',
intro2: 'в качестве контекста',
intro3: ',',
intro4: 'или ее ',
intro5: 'можно создать',
intro6: ' как отдельный плагин индекса ChatGPT для публикации',
unavailable: 'Недоступно',
unavailableTip: 'Модель встраивания недоступна, необходимо настроить модель встраивания по умолчанию',
datasets: 'БАЗЫ ЗНАНИЙ',
datasetsApi: 'ДОСТУП К API',
retrieval: {
semantic_search: {
title: 'Векторный поиск',
description: 'Создайте встраивания запросов и найдите фрагмент текста, наиболее похожий на его векторное представление.',
},
full_text_search: {
title: 'Полнотекстовый поиск',
description: 'Индексируйте все термины в документе, позволяя пользователям искать любой термин и извлекать соответствующий фрагмент текста, содержащий эти термины.',
},
hybrid_search: {
title: 'Гибридный поиск',
description: 'Выполняйте полнотекстовый поиск и векторный поиск одновременно, переранжируйте, чтобы выбрать наилучшее соответствие запросу пользователя. Пользователи могут выбрать установку весов или настройку модели переранжирования.',
recommend: 'Рекомендуется',
},
invertedIndex: {
title: 'Инвертированный индекс',
description: 'Инвертированный индекс - это структура, используемая для эффективного поиска. Организованный по терминам, каждый термин указывает на документы или веб-страницы, содержащие его.',
},
change: 'Изменить',
changeRetrievalMethod: 'Изменить метод поиска',
},
docsFailedNotice: 'документов не удалось проиндексировать',
retry: 'Повторить попытку',
indexingTechnique: {
high_quality: 'HQ',
economy: 'ECO',
},
indexingMethod: {
semantic_search: 'ВЕКТОР',
full_text_search: 'ПОЛНЫЙ ТЕКСТ',
hybrid_search: 'ГИБРИД',
invertedIndex: 'ИНВЕРТИРОВАННЫЙ',
},
mixtureHighQualityAndEconomicTip: 'Для смешивания высококачественных и экономичных баз знаний требуется модель переранжирования.',
inconsistentEmbeddingModelTip: 'Модель переранжирования требуется, если модели встраивания выбранных баз знаний несовместимы.',
retrievalSettings: 'Настройки поиска',
rerankSettings: 'Настройки переранжирования',
weightedScore: {
title: 'Взвешенная оценка',
description: 'Регулируя назначенные веса, эта стратегия переранжирования определяет, следует ли отдавать приоритет семантическому или ключевому соответствию.',
semanticFirst: 'Семантика в первую очередь',
keywordFirst: 'Ключевые слова в первую очередь',
customized: 'Настраиваемый',
semantic: 'Семантика',
keyword: 'Ключевые слова',
},
nTo1RetrievalLegacy: 'Поиск N-к-1 будет официально прекращен с сентября. Рекомендуется использовать новейший многопутный поиск для получения лучших результатов.',
nTo1RetrievalLegacyLink: 'Узнать больше',
nTo1RetrievalLegacyLinkText: ' Поиск N-к-1 будет официально прекращен в сентябре.',
}
export default translation

41
web/i18n/ru-RU/explore.ts Normal file
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: 'HR',
},
}
export default translation

4
web/i18n/ru-RU/layout.ts Normal file
View File

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

75
web/i18n/ru-RU/login.ts Normal file
View File

@ -0,0 +1,75 @@
const translation = {
pageTitle: 'Привет, давайте начнем!👋',
welcome: 'Добро пожаловать в Dify, пожалуйста, войдите, чтобы продолжить.',
email: 'Адрес электронной почты',
emailPlaceholder: 'Ваш адрес электронной почты',
password: 'Пароль',
passwordPlaceholder: 'Ваш пароль',
name: 'Имя пользователя',
namePlaceholder: 'Ваше имя пользователя',
forget: 'Забыли пароль?',
signBtn: 'Войти',
sso: 'Продолжить с SSO',
installBtn: 'Настроить',
setAdminAccount: 'Настройка учетной записи администратора',
setAdminAccountDesc: 'Максимальные привилегии для учетной записи администратора, которые можно использовать для создания приложений, управления поставщиками LLM и т. д.',
createAndSignIn: 'Создать и войти',
oneMoreStep: 'Еще один шаг',
createSample: 'На основе этой информации мы создадим для вас пример приложения',
invitationCode: 'Пригласительный код',
invitationCodePlaceholder: 'Ваш пригласительный код',
interfaceLanguage: 'Язык интерфейса',
timezone: 'Часовой пояс',
go: 'Перейти к Dify',
sendUsMail: 'Отправьте нам по электронной почте свое представление, и мы обработаем запрос на приглашение.',
acceptPP: 'Я прочитал и принимаю политику конфиденциальности',
reset: 'Пожалуйста, выполните следующую команду, чтобы сбросить пароль',
withGitHub: 'Продолжить с GitHub',
withGoogle: 'Продолжить с Google',
rightTitle: 'Раскройте весь потенциал LLM',
rightDesc: 'Без труда создавайте визуально привлекательные, работоспособные и улучшаемые приложения ИИ.',
tos: 'Условия обслуживания',
pp: 'Политика конфиденциальности',
tosDesc: 'Регистрируясь, вы соглашаетесь с нашими',
goToInit: 'Если вы не инициализировали учетную запись, перейдите на страницу инициализации',
donthave: 'Нет?',
invalidInvitationCode: 'Неверный пригласительный код',
accountAlreadyInited: 'Учетная запись уже инициализирована',
forgotPassword: 'Забыли пароль?',
resetLinkSent: 'Ссылка для сброса отправлена',
sendResetLink: 'Отправить ссылку для сброса',
backToSignIn: 'Вернуться к входу',
forgotPasswordDesc: 'Пожалуйста, введите свой адрес электронной почты, чтобы сбросить пароль. Мы отправим вам электронное письмо с инструкциями о том, как сбросить пароль.',
checkEmailForResetLink: 'Пожалуйста, проверьте свою электронную почту на наличие ссылки для сброса пароля. Если она не появится в течение нескольких минут, обязательно проверьте папку со спамом.',
passwordChanged: 'Войдите сейчас',
changePassword: 'Изменить пароль',
changePasswordTip: 'Пожалуйста, введите новый пароль для своей учетной записи',
invalidToken: 'Неверный или просроченный токен',
confirmPassword: 'Подтвердите пароль',
confirmPasswordPlaceholder: 'Подтвердите свой новый пароль',
passwordChangedTip: 'Ваш пароль был успешно изменен',
error: {
emailEmpty: 'Адрес электронной почты обязателен',
emailInValid: 'Пожалуйста, введите действительный адрес электронной почты',
nameEmpty: 'Имя обязательно',
passwordEmpty: 'Пароль обязателен',
passwordLengthInValid: 'Пароль должен содержать не менее 8 символов',
passwordInvalid: 'Пароль должен содержать буквы и цифры, а длина должна быть больше 8',
},
license: {
tip: 'Перед запуском Dify Community Edition ознакомьтесь с лицензией GitHub',
link: 'Лицензия с открытым исходным кодом',
},
join: 'Присоединиться',
joinTipStart: 'Приглашаем вас присоединиться к',
joinTipEnd: 'команде на Dify',
invalid: 'Ссылка истекла',
explore: 'Изучить Dify',
activatedTipStart: 'Вы присоединились к команде',
activatedTipEnd: '',
activated: 'Войдите сейчас',
adminInitPassword: 'Пароль инициализации администратора',
validate: 'Проверить',
}
export default translation

View File

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

29
web/i18n/ru-RU/run-log.ts Normal file
View File

@ -0,0 +1,29 @@
const translation = {
input: 'ВВОД',
result: 'РЕЗУЛЬТАТ',
detail: 'ДЕТАЛИ',
tracing: 'ТРАССИРОВКА',
resultPanel: {
status: 'СТАТУС',
time: 'ПРОШЕДШЕЕ ВРЕМЯ',
tokens: 'ВСЕГО ТОКЕНОВ',
},
meta: {
title: 'МЕТАДАННЫЕ',
status: 'Статус',
version: 'Версия',
executor: 'Исполнитель',
startTime: 'Время начала',
time: 'Прошедшее время',
tokens: 'Всего токенов',
steps: 'Шаги выполнения',
},
resultEmpty: {
title: 'Этот запуск выводит только формат JSON,',
tipLeft: 'пожалуйста, перейдите на ',
link: 'панель деталей',
tipRight: ' чтобы просмотреть его.',
},
}
export default translation

View File

@ -0,0 +1,74 @@
const translation = {
common: {
welcome: '',
appUnavailable: 'Приложение недоступно',
appUnkonwError: 'Приложение недоступно',
},
chat: {
newChat: 'Новый чат',
pinnedTitle: 'Закрепленные',
unpinnedTitle: 'Чаты',
newChatDefaultName: 'Новый разговор',
resetChat: 'Сбросить разговор',
powerBy: 'Работает на',
prompt: 'Подсказка',
privatePromptConfigTitle: 'Настройки разговора',
publicPromptConfigTitle: 'Начальная подсказка',
configStatusDes: 'Перед началом вы можете изменить настройки разговора',
configDisabled:
'Для этого сеанса использовались настройки предыдущего сеанса.',
startChat: 'Начать чат',
privacyPolicyLeft:
'Пожалуйста, ознакомьтесь с ',
privacyPolicyMiddle:
'политикой конфиденциальности',
privacyPolicyRight:
', предоставленной разработчиком приложения.',
deleteConversation: {
title: 'Удалить разговор',
content: 'Вы уверены, что хотите удалить этот разговор?',
},
tryToSolve: 'Попробуйте решить',
temporarySystemIssue: 'Извините, временная проблема с системой.',
},
generation: {
tabs: {
create: 'Запустить один раз',
batch: 'Запустить пакетно',
saved: 'Сохраненные',
},
savedNoData: {
title: 'Вы еще не сохранили ни одного результата!',
description: 'Начните генерировать контент, и вы найдете свои сохраненные результаты здесь.',
startCreateContent: 'Начать создавать контент',
},
title: 'Завершение ИИ',
queryTitle: 'Содержимое запроса',
completionResult: 'Результат завершения',
queryPlaceholder: 'Напишите содержимое вашего запроса...',
run: 'Выполнить',
copy: 'Копировать',
resultTitle: 'Завершение ИИ',
noData: 'ИИ даст вам то, что вы хотите, здесь.',
csvUploadTitle: 'Перетащите сюда свой CSV-файл или ',
browse: 'обзор',
csvStructureTitle: 'CSV-файл должен соответствовать следующей структуре:',
downloadTemplate: 'Скачать шаблон здесь',
field: 'Поле',
batchFailed: {
info: '{{num}} неудачных выполнений',
retry: 'Повторить попытку',
outputPlaceholder: 'Нет выходного содержимого',
},
errorMsg: {
empty: 'Пожалуйста, введите содержимое в загруженный файл.',
fileStructNotMatch: 'Загруженный CSV-файл не соответствует структуре.',
emptyLine: 'Строка {{rowIndex}} пуста',
invalidLine: 'Строка {{rowIndex}}: значение {{varName}} не может быть пустым',
moreThanMaxLengthLine: 'Строка {{rowIndex}}: значение {{varName}} не может превышать {{maxLength}} символов',
atLeastOne: 'Пожалуйста, введите хотя бы одну строку в загруженный файл.',
},
},
}
export default translation

153
web/i18n/ru-RU/tools.ts Normal file
View File

@ -0,0 +1,153 @@
const translation = {
title: 'Инструменты',
createCustomTool: 'Создать пользовательский инструмент',
customToolTip: 'Узнать больше о пользовательских инструментах Dify',
type: {
all: 'Все',
builtIn: 'Встроенные',
custom: 'Пользовательские',
workflow: 'Рабочий процесс',
},
contribute: {
line1: 'Я заинтересован в',
line2: 'внесении инструментов в Dify.',
viewGuide: 'Посмотреть руководство',
},
author: 'Автор',
auth: {
unauthorized: 'Авторизовать',
authorized: 'Авторизовано',
setup: 'Настроить авторизацию для использования',
setupModalTitle: 'Настроить авторизацию',
setupModalTitleDescription: 'После настройки учетных данных все участники рабочего пространства смогут использовать этот инструмент при оркестровке приложений.',
},
includeToolNum: 'Включено {{num}} инструментов',
addTool: 'Добавить инструмент',
addToolModal: {
type: 'тип',
category: 'категория',
add: 'добавить',
added: 'добавлено',
manageInTools: 'Управлять в инструментах',
emptyTitle: 'Нет доступных инструментов рабочего процесса',
emptyTip: 'Перейдите в "Рабочий процесс -> Опубликовать как инструмент"',
},
createTool: {
title: 'Создать пользовательский инструмент',
editAction: 'Настроить',
editTitle: 'Редактировать пользовательский инструмент',
name: 'Название',
toolNamePlaceHolder: 'Введите название инструмента',
nameForToolCall: 'Название вызова инструмента',
nameForToolCallPlaceHolder: 'Используется для машинного распознавания, например getCurrentWeather, list_pets',
nameForToolCallTip: 'Поддерживаются только цифры, буквы и подчеркивания.',
description: 'Описание',
descriptionPlaceholder: 'Краткое описание назначения инструмента, например, получить температуру для определенного местоположения.',
schema: 'Схема',
schemaPlaceHolder: 'Введите свою схему OpenAPI здесь',
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: 'Тип авторизации',
keyTooltip: 'Ключ заголовка HTTP, вы можете оставить его как "Authorization", если не знаете, что это такое, или установить его на пользовательское значение',
types: {
none: 'Нет',
api_key: 'Ключ API',
apiKeyPlaceholder: 'Название заголовка HTTP для ключа API',
apiValuePlaceholder: 'Введите ключ API',
},
key: 'Ключ',
value: 'Значение',
},
authHeaderPrefix: {
title: 'Тип авторизации',
types: {
basic: 'Базовый',
bearer: 'Bearer',
custom: 'Пользовательский',
},
},
privacyPolicy: 'Политика конфиденциальности',
privacyPolicyPlaceholder: 'Пожалуйста, введите политику конфиденциальности',
toolInput: {
title: 'Входные данные инструмента',
name: 'Название',
required: 'Обязательно',
method: 'Метод',
methodSetting: 'Настройка',
methodSettingTip: 'Пользователь заполняет конфигурацию инструмента',
methodParameter: 'Параметр',
methodParameterTip: 'LLM заполняет во время вывода',
label: 'Теги',
labelPlaceholder: 'Выберите теги (необязательно)',
description: 'Описание',
descriptionPlaceholder: 'Описание значения параметра',
},
customDisclaimer: 'Пользовательский отказ от ответственности',
customDisclaimerPlaceholder: 'Пожалуйста, введите пользовательский отказ от ответственности',
confirmTitle: 'Подтвердить сохранение?',
confirmTip: 'Приложения, использующие этот инструмент, будут затронуты',
deleteToolConfirmTitle: 'Удалить этот инструмент?',
deleteToolConfirmContent: 'Удаление инструмента необратимо. Пользователи больше не смогут получить доступ к вашему инструменту.',
},
test: {
title: 'Тест',
parametersValue: 'Параметры и значение',
parameters: 'Параметры',
value: 'Значение',
testResult: 'Результаты теста',
testResultPlaceholder: 'Результат теста будет отображаться здесь',
},
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: 'Как получить',
openInStudio: 'Открыть в Studio',
toolNameUsageTip: 'Название вызова инструмента для рассуждений агента и подсказок',
}
export default translation

540
web/i18n/ru-RU/workflow.ts Normal file
View File

@ -0,0 +1,540 @@
const translation = {
common: {
undo: 'Отменить',
redo: 'Повторить',
editing: 'Редактирование',
autoSaved: 'Автосохранено',
unpublished: 'Не опубликовано',
published: 'Опубликовано',
publish: 'Опубликовать',
update: 'Обновить',
run: 'Запустить',
running: 'Выполняется',
inRunMode: 'В режиме выполнения',
inPreview: 'В режиме предпросмотра',
inPreviewMode: 'В режиме предпросмотра',
preview: 'Предпросмотр',
viewRunHistory: 'Посмотреть историю запусков',
runHistory: 'История запусков',
goBackToEdit: 'Вернуться к редактору',
conversationLog: 'Журнал разговоров',
features: 'Функции',
debugAndPreview: 'Предпросмотр',
restart: 'Перезапустить',
currentDraft: 'Текущий черновик',
currentDraftUnpublished: 'Текущий черновик не опубликован',
latestPublished: 'Последняя опубликованная версия',
publishedAt: 'Опубликовано',
restore: 'Восстановить',
runApp: 'Запустить приложение',
batchRunApp: 'Пакетный запуск приложения',
accessAPIReference: 'Доступ к справочнику API',
embedIntoSite: 'Встроить на сайт',
addTitle: 'Добавить заголовок...',
addDescription: 'Добавить описание...',
noVar: 'Нет переменной',
searchVar: 'Поиск переменной',
variableNamePlaceholder: 'Имя переменной',
setVarValuePlaceholder: 'Установить значение переменной',
needConnecttip: 'Этот шаг ни к чему не подключен',
maxTreeDepth: 'Максимальный предел {{depth}} узлов на ветку',
needEndNode: 'Необходимо добавить блок "Конец"',
needAnswerNode: 'Необходимо добавить блок "Ответ"',
workflowProcess: 'Процесс рабочего процесса',
notRunning: 'Еще не запущено',
previewPlaceholder: 'Введите текст в поле ниже, чтобы начать отладку чат-бота',
effectVarConfirm: {
title: 'Удалить переменную',
content: 'Переменная используется в других узлах. Вы все еще хотите удалить ее?',
},
insertVarTip: 'Нажмите клавишу "/" чтобы быстро вставить',
processData: 'Обработка данных',
input: 'Вход',
output: 'Выход',
jinjaEditorPlaceholder: 'Введите "/" или "{" для вставки переменной',
viewOnly: 'Только просмотр',
showRunHistory: 'Показать историю запусков',
enableJinja: 'Включить поддержку шаблонов Jinja',
learnMore: 'Узнать больше',
copy: 'Копировать',
duplicate: 'Дублировать',
addBlock: 'Добавить блок',
pasteHere: 'Вставить сюда',
pointerMode: 'Режим указателя',
handMode: 'Режим руки',
model: 'Модель',
workflowAsTool: 'Рабочий процесс как инструмент',
configureRequired: 'Требуется настройка',
configure: 'Настроить',
manageInTools: 'Управление в инструментах',
workflowAsToolTip: 'После обновления рабочего процесса требуется перенастройка инструмента.',
viewDetailInTracingPanel: 'Посмотреть подробности',
syncingData: 'Синхронизация данных, всего несколько секунд.',
importDSL: 'Импортировать DSL',
importDSLTip: 'Текущий черновик будет перезаписан. Экспортируйте рабочий процесс в качестве резервной копии перед импортом.',
backupCurrentDraft: 'Резервное копирование текущего черновика',
chooseDSL: 'Выберите файл DSL(yml)',
overwriteAndImport: 'Перезаписать и импортировать',
importFailure: 'Ошибка импорта',
importSuccess: 'Импорт успешно завершен',
},
env: {
envPanelTitle: 'Переменные среды',
envDescription: 'Переменные среды могут использоваться для хранения конфиденциальной информации и учетных данных. Они доступны только для чтения и могут быть отделены от файла DSL во время экспорта.',
envPanelButton: 'Добавить переменную',
modal: {
title: 'Добавить переменную среды',
editTitle: 'Редактировать переменную среды',
type: 'Тип',
name: 'Имя',
namePlaceholder: 'Имя переменной среды',
value: 'Значение',
valuePlaceholder: 'Значение переменной среды',
secretTip: 'Используется для определения конфиденциальной информации или данных, с настройками DSL, настроенными для предотвращения утечки.',
},
export: {
title: 'Экспортировать секретные переменные среды?',
checkbox: 'Экспортировать секретные значения',
ignore: 'Экспортировать DSL',
export: 'Экспортировать DSL с секретными значениями ',
},
},
chatVariable: {
panelTitle: 'Переменные разговора',
panelDescription: 'Переменные разговора используются для хранения интерактивной информации, которую LLM необходимо запомнить, включая историю разговоров, загруженные файлы, пользовательские настройки. Они доступны для чтения и записи. ',
docLink: 'Посетите нашу документацию, чтобы узнать больше.',
button: 'Добавить переменную',
modal: {
title: 'Добавить переменную разговора',
editTitle: 'Редактировать переменную разговора',
name: 'Имя',
namePlaceholder: 'Имя переменной',
type: 'Тип',
value: 'Значение по умолчанию',
valuePlaceholder: 'Значение по умолчанию, оставьте пустым, чтобы не устанавливать',
description: 'Описание',
descriptionPlaceholder: 'Опишите переменную',
editInJSON: 'Редактировать в JSON',
oneByOne: 'Добавлять по одному',
editInForm: 'Редактировать в форме',
arrayValue: 'Значение',
addArrayValue: 'Добавить значение',
objectKey: 'Ключ',
objectType: 'Тип',
objectValue: 'Значение по умолчанию',
},
storedContent: 'Сохраненный контент',
updatedAt: 'Обновлено в ',
},
changeHistory: {
title: 'История изменений',
placeholder: 'Вы еще ничего не изменили',
clearHistory: 'Очистить историю',
hint: 'Подсказка',
hintText: 'Ваши действия по редактированию отслеживаются в истории изменений, которая хранится на вашем устройстве в течение этого сеанса. Эта история будет очищена, когда вы покинете редактор.',
stepBackward_one: '{{count}} шаг назад',
stepBackward_other: '{{count}} шагов назад',
stepForward_one: '{{count}} шаг вперед',
stepForward_other: '{{count}} шагов вперед',
sessionStart: 'Начало сеанса',
currentState: 'Текущее состояние',
nodeTitleChange: 'Изменено название блока',
nodeDescriptionChange: 'Изменено описание блока',
nodeDragStop: 'Блок перемещен',
nodeChange: 'Блок изменен',
nodeConnect: 'Блок подключен',
nodePaste: 'Блок вставлен',
nodeDelete: 'Блок удален',
nodeAdd: 'Блок добавлен',
nodeResize: 'Размер блока изменен',
noteAdd: 'Заметка добавлена',
noteChange: 'Заметка изменена',
noteDelete: 'Заметка удалена',
edgeDelete: 'Блок отключен',
},
errorMsg: {
fieldRequired: '{{field}} обязательно для заполнения',
authRequired: 'Требуется авторизация',
invalidJson: '{{field}} неверный JSON',
fields: {
variable: 'Имя переменной',
variableValue: 'Значение переменной',
code: 'Код',
model: 'Модель',
rerankModel: 'Модель переранжирования',
},
invalidVariable: 'Неверная переменная',
},
singleRun: {
testRun: 'Тестовый запуск ',
startRun: 'Начать запуск',
running: 'Выполняется',
testRunIteration: 'Итерация тестового запуска',
back: 'Назад',
iteration: 'Итерация',
},
tabs: {
'searchBlock': 'Поиск блока',
'blocks': 'Блоки',
'searchTool': 'Поиск инструмента',
'tools': 'Инструменты',
'allTool': 'Все',
'builtInTool': 'Встроенные',
'customTool': 'Пользовательские',
'workflowTool': 'Рабочий процесс',
'question-understand': 'Понимание вопроса',
'logic': 'Логика',
'transform': 'Преобразование',
'utilities': 'Утилиты',
'noResult': 'Ничего не найдено',
},
blocks: {
'start': 'Начало',
'end': 'Конец',
'answer': 'Ответ',
'llm': 'LLM',
'knowledge-retrieval': 'Поиск знаний',
'question-classifier': 'Классификатор вопросов',
'if-else': 'ЕСЛИ/ИНАЧЕ',
'code': 'Код',
'template-transform': 'Шаблон',
'http-request': 'HTTP-запрос',
'variable-assigner': 'Агрегатор переменных',
'variable-aggregator': 'Агрегатор переменных',
'assigner': 'Назначение переменной',
'iteration-start': 'Начало итерации',
'iteration': 'Итерация',
'parameter-extractor': 'Извлечение параметров',
},
blocksAbout: {
'start': 'Определите начальные параметры для запуска рабочего процесса',
'end': 'Определите конец и тип результата рабочего процесса',
'answer': 'Определите содержимое ответа в чате',
'llm': 'Вызов больших языковых моделей для ответа на вопросы или обработки естественного языка',
'knowledge-retrieval': 'Позволяет запрашивать текстовый контент, связанный с вопросами пользователей, из базы знаний',
'question-classifier': 'Определите условия классификации вопросов пользователей, LLM может определить, как будет развиваться разговор на основе описания классификации',
'if-else': 'Позволяет разделить рабочий процесс на две ветки на основе условий if/else',
'code': 'Выполните фрагмент кода Python или NodeJS для реализации пользовательской логики',
'template-transform': 'Преобразование данных в строку с использованием синтаксиса шаблонов Jinja',
'http-request': 'Разрешить отправку запросов на сервер по протоколу HTTP',
'variable-assigner': 'Объединение переменных из нескольких ветвей в одну переменную для унифицированной настройки подчиненных узлов.',
'assigner': 'Узел назначения переменной используется для назначения значений записываемым переменным (например, переменным разговора).',
'variable-aggregator': 'Объединение переменных из нескольких ветвей в одну переменную для унифицированной настройки подчиненных узлов.',
'iteration': 'Выполнение нескольких шагов над объектом списка до тех пор, пока не будут выведены все результаты.',
'parameter-extractor': 'Используйте LLM для извлечения структурированных параметров из естественного языка для вызова инструментов или HTTP-запросов.',
},
operator: {
zoomIn: 'Увеличить',
zoomOut: 'Уменьшить',
zoomTo50: 'Масштаб 50%',
zoomTo100: 'Масштаб 100%',
zoomToFit: 'По размеру',
},
panel: {
userInputField: 'Поле ввода пользователя',
changeBlock: 'Изменить блок',
helpLink: 'Ссылка на справку',
about: 'О программе',
createdBy: 'Создано ',
nextStep: 'Следующий шаг',
addNextStep: 'Добавить следующий блок в этот рабочий процесс',
selectNextStep: 'Выбрать следующий блок',
runThisStep: 'Выполнить этот шаг',
checklist: 'Контрольный список',
checklistTip: 'Убедитесь, что все проблемы решены перед публикацией',
checklistResolved: 'Все проблемы решены',
organizeBlocks: 'Организовать блоки',
change: 'Изменить',
optional: '(необязательно)',
},
nodes: {
common: {
outputVars: 'Выходные переменные',
insertVarTip: 'Вставить переменную',
memory: {
memory: 'Память',
memoryTip: 'Настройки памяти чата',
windowSize: 'Размер окна',
conversationRoleName: 'Имя роли разговора',
user: 'Префикс пользователя',
assistant: 'Префикс помощника',
},
memories: {
title: 'Воспоминания',
tip: 'Память чата',
builtIn: 'Встроенные',
},
},
start: {
required: 'обязательно',
inputField: 'Поле ввода',
builtInVar: 'Встроенные переменные',
outputVars: {
query: 'Ввод пользователя',
memories: {
des: 'История разговоров',
type: 'тип сообщения',
content: 'содержимое сообщения',
},
files: 'Список файлов',
},
noVarTip: 'Установите входные данные, которые можно использовать в рабочем процессе',
},
end: {
outputs: 'Выходы',
output: {
type: 'тип вывода',
variable: 'выходная переменная',
},
type: {
'none': 'Нет',
'plain-text': 'Простой текст',
'structured': 'Структурированный',
},
},
answer: {
answer: 'Ответ',
outputVars: 'Выходные переменные',
},
llm: {
model: 'модель',
variables: 'переменные',
context: 'контекст',
contextTooltip: 'Вы можете импортировать знания как контекст',
notSetContextInPromptTip: 'Чтобы включить функцию контекста, пожалуйста, заполните переменную контекста в PROMPT.',
prompt: 'подсказка',
roleDescription: {
system: 'Дайте высокоуровневые инструкции для разговора',
user: 'Предоставьте инструкции, запросы или любой текстовый ввод для модели',
assistant: 'Ответы модели на основе сообщений пользователя',
},
addMessage: 'Добавить сообщение',
vision: 'зрение',
files: 'Файлы',
resolution: {
name: 'Разрешение',
high: 'Высокое',
low: 'Низкое',
},
outputVars: {
output: 'Создать контент',
usage: 'Информация об использовании модели',
},
singleRun: {
variable: 'Переменная',
},
sysQueryInUser: 'sys.query в сообщении пользователя обязателен',
},
knowledgeRetrieval: {
queryVariable: 'Переменная запроса',
knowledge: 'Знания',
outputVars: {
output: 'Извлеченные сегментированные данные',
content: 'Сегментированный контент',
title: 'Сегментированный заголовок',
icon: 'Сегментированный значок',
url: 'Сегментированный URL',
metadata: 'Другие метаданные',
},
},
http: {
inputVars: 'Входные переменные',
api: 'API',
apiPlaceholder: 'Введите URL, введите "/" для вставки переменной',
notStartWithHttp: 'API должен начинаться с http:// или https://',
key: 'Ключ',
value: 'Значение',
bulkEdit: 'Массовое редактирование',
keyValueEdit: 'Редактирование ключа-значения',
headers: 'Заголовки',
params: 'Параметры',
body: 'Тело',
outputVars: {
body: 'Содержимое ответа',
statusCode: 'Код состояния ответа',
headers: 'Список заголовков ответа JSON',
files: 'Список файлов',
},
authorization: {
'authorization': 'Авторизация',
'authorizationType': 'Тип авторизации',
'no-auth': 'Нет',
'api-key': 'API-ключ',
'auth-type': 'Тип аутентификации',
'basic': 'Базовая',
'bearer': 'Bearer',
'custom': 'Пользовательская',
'api-key-title': 'API-ключ',
'header': 'Заголовок',
},
insertVarPlaceholder: 'введите "/" для вставки переменной',
timeout: {
title: 'Тайм-аут',
connectLabel: 'Тайм-аут подключения',
connectPlaceholder: 'Введите тайм-аут подключения в секундах',
readLabel: 'Тайм-аут чтения',
readPlaceholder: 'Введите тайм-аут чтения в секундах',
writeLabel: 'Тайм-аут записи',
writePlaceholder: 'Введите тайм-аут записи в секундах',
},
},
code: {
inputVars: 'Входные переменные',
outputVars: 'Выходные переменные',
advancedDependencies: 'Расширенные зависимости',
advancedDependenciesTip: 'Добавьте сюда некоторые предварительно загруженные зависимости, которые занимают больше времени для потребления или не являются встроенными по умолчанию',
searchDependencies: 'Поиск зависимостей',
},
templateTransform: {
inputVars: 'Входные переменные',
code: 'Код',
codeSupportTip: 'Поддерживает только Jinja2',
outputVars: {
output: 'Преобразованный контент',
},
},
ifElse: {
if: 'Если',
else: 'Иначе',
elseDescription: 'Используется для определения логики, которая должна быть выполнена, когда условие if не выполняется.',
and: 'и',
or: 'или',
operator: 'Оператор',
notSetVariable: 'Пожалуйста, сначала установите переменную',
comparisonOperator: {
'contains': 'содержит',
'not contains': 'не содержит',
'start with': 'начинается с',
'end with': 'заканчивается на',
'is': 'равно',
'is not': 'не равно',
'empty': 'пусто',
'not empty': 'не пусто',
'null': 'null',
'not null': 'не null',
},
enterValue: 'Введите значение',
addCondition: 'Добавить условие',
conditionNotSetup: 'Условие НЕ настроено',
selectVariable: 'Выберите переменную...',
},
variableAssigner: {
title: 'Назначить переменные',
outputType: 'Тип вывода',
varNotSet: 'Переменная не установлена',
noVarTip: 'Добавьте переменные, которые нужно назначить',
type: {
string: 'Строка',
number: 'Число',
object: 'Объект',
array: 'Массив',
},
aggregationGroup: 'Группа агрегации',
aggregationGroupTip: 'Включение этой функции позволяет агрегатору переменных агрегировать несколько наборов переменных.',
addGroup: 'Добавить группу',
outputVars: {
varDescribe: 'Вывод {{groupName}}',
},
setAssignVariable: 'Установить переменную назначения',
},
assigner: {
'assignedVariable': 'Назначенная переменная',
'writeMode': 'Режим записи',
'writeModeTip': 'Режим добавления: доступен только для переменных массива.',
'over-write': 'Перезаписать',
'append': 'Добавить',
'plus': 'Плюс',
'clear': 'Очистить',
'setVariable': 'Установить переменную',
'variable': 'Переменная',
},
tool: {
toAuthorize: 'Авторизовать',
inputVars: 'Входные переменные',
outputVars: {
text: 'контент, сгенерированный инструментом',
files: {
title: 'файлы, сгенерированные инструментом',
type: 'Поддерживаемый тип. Сейчас поддерживаются только изображения',
transfer_method: 'Метод передачи. Значение - remote_url или local_file',
url: 'URL изображения',
upload_file_id: 'Идентификатор загруженного файла',
},
json: 'json, сгенерированный инструментом',
},
},
questionClassifiers: {
model: 'модель',
inputVars: 'Входные переменные',
outputVars: {
className: 'Имя класса',
},
class: 'Класс',
classNamePlaceholder: 'Введите имя вашего класса',
advancedSetting: 'Расширенные настройки',
topicName: 'Название темы',
topicPlaceholder: 'Введите название вашей темы',
addClass: 'Добавить класс',
instruction: 'Инструкция',
instructionTip: 'Введите дополнительные инструкции, чтобы помочь классификатору вопросов лучше понять, как классифицировать вопросы.',
instructionPlaceholder: 'Введите вашу инструкцию',
},
parameterExtractor: {
inputVar: 'Входная переменная',
extractParameters: 'Извлечь параметры',
importFromTool: 'Импортировать из инструментов',
addExtractParameter: 'Добавить параметр для извлечения',
addExtractParameterContent: {
name: 'Имя',
namePlaceholder: 'Имя извлекаемого параметра',
type: 'Тип',
typePlaceholder: 'Тип извлекаемого параметра',
description: 'Описание',
descriptionPlaceholder: 'Описание извлекаемого параметра',
required: 'Обязательный',
requiredContent: 'Обязательный используется только в качестве ссылки для вывода модели, а не для обязательной проверки вывода параметра.',
},
extractParametersNotSet: 'Параметры для извлечения не настроены',
instruction: 'Инструкция',
instructionTip: 'Введите дополнительные инструкции, чтобы помочь извлекателю параметров понять, как извлекать параметры.',
advancedSetting: 'Расширенные настройки',
reasoningMode: 'Режим рассуждения',
reasoningModeTip: 'Вы можете выбрать соответствующий режим рассуждения, основываясь на способности модели реагировать на инструкции для вызова функций или подсказки.',
isSuccess: 'Успешно. В случае успеха значение равно 1, в случае сбоя - 0.',
errorReason: 'Причина ошибки',
},
iteration: {
deleteTitle: 'Удалить узел итерации?',
deleteDesc: 'Удаление узла итерации приведет к удалению всех дочерних узлов',
input: 'Вход',
output: 'Выходные переменные',
iteration_one: '{{count}} Итерация',
iteration_other: '{{count}} Итераций',
currentIteration: 'Текущая итерация',
},
note: {
addNote: 'Добавить заметку',
editor: {
placeholder: 'Напишите свою заметку...',
small: 'Маленький',
medium: 'Средний',
large: 'Большой',
bold: 'Жирный',
italic: 'Курсив',
strikethrough: 'Зачеркнутый',
link: 'Ссылка',
openLink: 'Открыть',
unlink: 'Удалить ссылку',
enterUrl: 'Введите URL...',
invalidUrl: 'Неверный URL',
bulletList: 'Маркированный список',
showAuthor: 'Показать автора',
},
},
},
tracing: {
stopBy: 'Остановлено {{user}}',
},
}
export default translation