Feat/i18n workflow (#4819)

This commit is contained in:
crazywoola
2024-05-30 21:03:32 +08:00
committed by GitHub
parent 38a470a873
commit 3de8e8fd6a
9 changed files with 1517 additions and 1062 deletions

View File

@@ -7,49 +7,49 @@ const translation = {
publish: 'Опублікувати',
update: 'Оновити',
run: 'Запустити',
running: 'Виконується',
inRunMode: 'У режимі виконання',
inPreview: 'У попередньому перегляді',
running: 'Запущено',
inRunMode: 'У режимі запуску',
inPreview: 'У режимі попереднього перегляду',
inPreviewMode: 'У режимі попереднього перегляду',
preview: 'Попередній перегляд',
viewRunHistory: 'Переглянути історію запусків',
runHistory: 'Історія запусків',
goBackToEdit: 'Повернутися до редагування',
goBackToEdit: 'Повернутися до редактора',
conversationLog: 'Журнал розмов',
features: 'Функції',
debugAndPreview: 'Налагодження і попередній перегляд',
debugAndPreview: 'Налагодження та попередній перегляд',
restart: 'Перезапустити',
currentDraft: 'Поточний чернетка',
currentDraftUnpublished: 'Поточний чернетка не опубліковано',
latestPublished: 'Остання опублікована',
publishedAt: 'Опубліковано',
currentDraftUnpublished: 'Поточний чернетка неопублікований',
latestPublished: 'Останнє опубліковане',
publishedAt: 'Опубліковано о',
restore: 'Відновити',
runApp: 'Запустити додаток',
batchRunApp: 'Пакетний запуск додатку',
accessAPIReference: 'Доступ до посилання на API',
embedIntoSite: 'Вбудувати в сайт',
addTitle: 'Додати назву...',
accessAPIReference: 'Доступ до довідника API',
embedIntoSite: 'Вбудувати на сайт',
addTitle: 'Додати заголовок...',
addDescription: 'Додати опис...',
noVar: 'Немає змінної',
noVar: 'Без змінної',
searchVar: 'Пошук змінної',
variableNamePlaceholder: 'Назва змінної',
setVarValuePlaceholder: 'Встановити змінну',
needConnecttip: 'Цей крок не підключено до чогось',
setVarValuePlaceholder: 'Встановити значення змінної',
needConnecttip: 'Цей крок ні до чого не підключений',
maxTreeDepth: 'Максимальний ліміт {{depth}} вузлів на гілку',
needEndNode: 'Необхідно додати блок "Кінець"',
needAnswerNode: 'Необхідно додати блок "Відповідь"',
workflowProcess: 'Процес робочого процесу',
needEndNode: 'Потрібно додати кінцевий блок',
needAnswerNode: 'Потрібно додати блок відповіді',
workflowProcess: 'Процес робочого потоку',
notRunning: 'Ще не запущено',
previewPlaceholder: 'Введіть вміст у полі нижче, щоб розпочати налагодження чат-бота',
previewPlaceholder: 'Введіть вміст у поле нижче, щоб розпочати налагодження чат-бота',
effectVarConfirm: {
title: 'Видалити змінну',
content: 'Цю змінну використовується в інших вузлах. Ви все ще хочете її видалити?',
content: 'Змінна використовується в інших вузлах. Ви все ще хочете її видалити?',
},
insertVarTip: 'Натисніть клавішу "/" для швидкого вставлення',
processData: 'Обробка даних',
insertVarTip: 'Натисніть клавішу \'/\' для швидкого вставлення',
processData: 'Обробити дані',
input: 'Вхід',
output: 'Вихід',
jinjaEditorPlaceholder: 'Введіть \'/\' або \'{\' щоб вставити змінну',
jinjaEditorPlaceholder: 'Введіть \'/\' або \'{\' для вставлення змінної',
viewOnly: 'Тільки перегляд',
showRunHistory: 'Показати історію запусків',
enableJinja: 'Увімкнути підтримку шаблонів Jinja',
@@ -57,112 +57,132 @@ const translation = {
copy: 'Копіювати',
duplicate: 'Дублювати',
addBlock: 'Додати блок',
pasteHere: 'Вставити тут',
pasteHere: 'Вставити сюди',
pointerMode: 'Режим вказівника',
handMode: 'Режим руки',
handMode: 'Ручний режим',
model: 'Модель',
workflowAsTool: 'Робочий потік як інструмент',
configureRequired: 'Потрібна конфігурація',
configure: 'Налаштувати',
manageInTools: 'Керування в інструментах',
workflowAsToolTip: 'Після оновлення робочого потоку необхідна переконфігурація інструменту.',
viewDetailInTracingPanel: 'Переглянути деталі',
},
errorMsg: {
fieldRequired: '{{field}} є обов\'язковим',
authRequired: 'Потрібна авторизація',
invalidJson: '{{field}} недійсний JSON',
invalidJson: '{{field}} є недійсним JSON',
fields: {
variable: 'Назва змінної',
variableValue: 'Значення змінної',
code: 'Код',
model: 'Модель',
rerankModel: 'Модель пересортування',
rerankModel: 'Модель повторного ранжування',
},
invalidVariable: 'Недійсна змінна',
},
singleRun: {
testRun: 'Тестовий запуск ',
testRun: 'Тестовий запуск',
startRun: 'Почати запуск',
running: 'Виконується',
running: 'Запущено',
testRunIteration: 'Ітерація тестового запуску',
back: 'Назад',
iteration: 'Ітерація',
},
tabs: {
'searchBlock': 'Пошук блоку',
'blocks': 'Блоки',
'builtInTool': 'Вбудований інструмент',
'customTool': 'Спеціальний інструмент',
'tools': 'Інструменти',
'allTool': 'Усі',
'builtInTool': 'Вбудовані',
'customTool': 'Користувацькі',
'workflowTool': 'Робочий потік',
'question-understand': 'Розуміння питань',
'logic': 'Логіка',
'transform': 'Трансформація',
'utilities': 'Утиліти',
'noResult': 'Співпадінь не знайдено',
'noResult': 'Нічого не знайдено',
},
blocks: {
'start': 'Початок',
'end': 'Кінець',
'answer': 'Відповідь',
'llm': 'LLM',
'knowledge-retrieval': 'Пошук знань',
'knowledge-retrieval': 'Отримання знань',
'question-classifier': 'Класифікатор питань',
'if-else': кщо / Інакше',
'if-else': КЩО/ІНАКШЕ',
'code': 'Код',
'template-transform': 'Шаблон',
'http-request': 'HTTP-запит',
'variable-assigner': 'Призначення змінних',
'variable-assigner': 'Присвоювач змінних',
'variable-aggregator': 'Агрегатор змінних',
'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',
'start': 'Визначте початкові параметри для запуску робочого потоку',
'end': 'Визначте кінець і тип результату робочого потоку',
'answer': 'Визначте зміст відповіді у чаті',
'llm': 'Виклик великих мовних моделей для відповіді на запитання або обробки природної мови',
'knowledge-retrieval': 'Дозволяє виконувати запити текстового вмісту, пов\'язаного із запитаннями користувача, з бази знань',
'question-classifier': 'Визначте умови класифікації запитань користувачів, LLM може визначати, як розвивається розмова на основі опису класифікації',
'if-else': 'Дозволяє розділити робочий потік на дві гілки на основі умов if/else',
'code': 'Виконайте фрагмент коду Python або NodeJS для реалізації користувацької логіки',
'template-transform': 'Перетворіть дані на рядок за допомогою синтаксису шаблону Jinja',
'http-request': 'Дозволяє відправляти серверні запити через протокол HTTP',
'variable-assigner': 'Призначте змінні в різних гілках тієї самої змінної, щоб забезпечити єдину конфігурацію після-вузлів',
'variable-assigner': 'Агрегує змінні з кількох гілок у одну змінну для уніфікованої конфігурації кінцевих вузлів.',
'variable-aggregator': 'Агрегує змінні з кількох гілок у одну змінну для уніфікованої конфігурації кінцевих вузлів.',
'iteration': 'Виконувати кілька кроків на об\'єкті списку, поки не буде виведено всі результати.',
'parameter-extractor': 'Використовуйте LLM для вилучення структурованих параметрів з природної мови для викликів інструментів або HTTP-запитів.',
},
operator: {
zoomIn: 'Збільшити',
zoomOut: 'Зменшити',
zoomTo50: 'Масштабувати до 50%',
zoomTo100: 'Масштабувати до 100%',
zoomToFit: 'Підігнати по ширині',
zoomTo50: 'Збільшити до 50%',
zoomTo100: 'Збільшити до 100%',
zoomToFit: 'Збільшити для підгонки',
},
panel: {
userInputField: 'Поле введення користувача',
changeBlock: 'Змінити блок',
helpLink: 'Посилання на довідку',
helpLink: 'Посилання на допомогу',
about: 'Про',
createdBy: 'Створено ',
nextStep: 'Наступний крок',
addNextStep: 'Додати наступний блок у цей робочий процес',
selectNextStep: 'Виберіть наступний блок',
addNextStep: 'Додати наступний блок у цей робочий потік',
selectNextStep: 'Вибрати наступний блок',
runThisStep: 'Запустити цей крок',
checklist: 'Перелік',
checklistTip: 'Переконайтеся, що всі питання вирішено перед публікацією',
checklistResolved: 'Всі питання вирішено',
checklist: 'Контрольний список',
checklistTip: 'Переконайтеся, що всі проблеми вирішені перед публікацією',
checklistResolved: 'Всі проблеми вирішені',
organizeBlocks: 'Організувати блоки',
change: 'Змінити',
},
nodes: {
common: {
outputVars: 'Вихідні змінні',
outputVars: 'Змінні виходу',
insertVarTip: 'Вставити змінну',
memory: {
memory: 'Пам\'ять',
memoryTip: 'Налаштування чат-пам\'яті',
memoryTip: 'Налаштування пам\'яті чату',
windowSize: 'Розмір вікна',
conversationRoleName: 'Назва ролі розмови',
conversationRoleName: 'Назва ролі у розмові',
user: 'Префікс користувача',
assistant: 'Префікс помічника',
},
memories: {
title: 'Пам\'яті',
tip: 'Чат-пам\'ять',
builtIn: 'Вбудований',
title: 'Спогади',
tip: 'Пам\'ять чату',
builtIn: 'Вбудовано',
},
},
start: {
required: 'обов\'язково',
required: 'обов\'язковий',
inputField: 'Поле введення',
builtInVar: 'Вбудовані змінні',
outputVars: {
query: 'Вхід користувача',
query: 'Введення користувача',
memories: {
des: 'Історія розмов',
type: 'тип повідомлення',
@@ -170,38 +190,38 @@ const translation = {
},
files: 'Список файлів',
},
noVarTip: 'Встановіть вхідні дані, які можна використовувати в робочому процесі',
noVarTip: 'Встановіть вхідні дані, які можуть бути використані у робочому потоці',
},
end: {
outputs: 'Вихідні дані',
outputs: 'Виходи',
output: {
type: 'тип виходу',
variable: 'вихідна змінна',
variable: 'змінна виходу',
},
type: {
'none': 'Нічого',
'plain-text': 'Звичайний текст',
'none': 'Немає',
'plain-text': 'Простий текст',
'structured': 'Структурований',
},
},
answer: {
answer: 'Відповідь',
outputVars: 'Вихідні змінні',
outputVars: 'Змінні виходу',
},
llm: {
model: 'модель',
variables: 'змінні',
context: 'контекст',
contextTooltip: 'Ви можете імпортувати знання як контекст',
notSetContextInPromptTip: 'Щоб увімкнути функцію контексту, будь ласка, заповніть змінну контексту в PROMPT.',
prompt: 'підказка',
notSetContextInPromptTip: 'Щоб увімкнути функцію контексту, заповніть змінну контексту в PROMPT.',
prompt: 'prompt',
roleDescription: {
system: 'Надати високорівневі інструкції для розмови',
user: 'Надати інструкції, запити або будь-який текстовий ввід для моделі',
system: 'Дайте високорівневі інструкції для розмови',
user: 'Надайте інструкції, запити або будь-який текстовий вхід для моделі',
assistant: 'Відповіді моделі на основі повідомлень користувача',
},
addMessage: 'Додати повідомлення',
vision: 'візія',
vision: 'бачення',
files: 'Файли',
resolution: {
name: 'Роздільна здатність',
@@ -209,90 +229,90 @@ const translation = {
low: 'Низька',
},
outputVars: {
output: 'Створення вмісту',
output: 'Генерований вміст',
usage: 'Інформація про використання моделі',
},
singleRun: {
variable: 'Змінна',
},
sysQueryInUser: 'sys.query потрібно в повідомленні користувача.',
sysQueryInUser: 'sys.query у повідомленні користувача є обов\'язковим',
},
knowledgeRetrieval: {
queryVariable: 'Запит змінної',
queryVariable: 'Змінна запиту',
knowledge: 'Знання',
outputVars: {
output: 'Вилучені сегментовані дані',
output: 'Відновлені сегментовані дані',
content: 'Сегментований вміст',
title: 'Сегментований заголовок',
icon: 'Сегментована іконка',
url: 'Сегментований URL',
metadata: 'Інша метадані',
icon: 'Сегментована піктограма',
url: 'Сегментована URL',
metadata: 'Інші метадані',
},
},
http: {
inputVars: 'Вхідні змінні',
api: 'API',
apiPlaceholder: 'Введіть URL, наберіть «/» для вставки змінної',
notStartWithHttp: 'API повинно починатися з http:// або https://',
apiPlaceholder: 'Введіть URL, введіть /, щоб вставити змінну',
notStartWithHttp: 'API має починатися з http:// або https://',
key: 'Ключ',
value: 'Значення',
bulkEdit: 'Масове редагування',
keyValueEdit: 'Редагування Ключ-Значення',
keyValueEdit: 'Редагування ключ-значення',
headers: 'Заголовки',
params: 'Параметри',
body: 'Тіло',
outputVars: {
body: 'Вміст відповіді',
statusCode: 'Код статусу відповіді',
headers: 'Список заголовків відповіді JSON',
body: 'Зміст відповіді',
statusCode: 'Код стану відповіді',
headers: 'Список заголовків відповіді у форматі JSON',
files: 'Список файлів',
},
authorization: {
'authorization': 'Авторизація',
'authorizationType': 'Тип авторизації',
'no-auth': 'Немає',
'api-key': 'API-Key',
'auth-type': 'Тип авторизації',
'basic': 'Базова',
'api-key': 'API-ключ',
'auth-type': 'Тип аутентифікації',
'basic': 'Базовий',
'bearer': 'Bearer',
'custom': 'Користувацька',
'api-key-title': 'Ключ API',
'custom': 'Користувацький',
'api-key-title': 'API-ключ',
'header': 'Заголовок',
},
insertVarPlaceholder: 'наберіть \'/\' для вставки змінної',
insertVarPlaceholder: 'введіть \'/\', щоб вставити змінну',
timeout: {
title: 'Час вичерпано',
connectLabel: 'Тайм-аут з’єднання',
connectPlaceholder: 'Введіть час тайм-ауту з’єднання у секундах',
title: 'Тайм-аут',
connectLabel: 'Тайм-аут підключення',
connectPlaceholder: 'Введіть тайм-аут підключення в секундах',
readLabel: 'Тайм-аут читання',
readPlaceholder: 'Введіть час тайм-ауту читання у секундах',
readPlaceholder: 'Введіть тайм-аут читання в секундах',
writeLabel: 'Тайм-аут запису',
writePlaceholder: 'Введіть час тайм-ауту запису у секундах',
writePlaceholder: 'Введіть тайм-аут запису в секундах',
},
},
code: {
inputVars: 'Вхідні змінні',
outputVars: 'Вихідні змінні',
outputVars: 'Змінні виходу',
advancedDependencies: 'Розширені залежності',
advancedDependenciesTip: 'Додайте деякі попередньо завантажені залежності, які потребують більше часу для використання або не є вбудованими за замовчуванням',
advancedDependenciesTip: 'Додайте тут деякі попередньо завантажені залежності, які потребують більше часу для споживання або не є за замовчуванням вбудованими',
searchDependencies: 'Шукати залежності',
},
templateTransform: {
inputVars: 'Вхідні змінні',
code: 'Код',
codeSupportTip: 'Підтримується лише Jinja2',
codeSupportTip: 'Підтримує лише Jinja2',
outputVars: {
output: 'Перетворений вміст',
output: 'Трансформований вміст',
},
},
ifElse: {
if: 'Якщо',
else: 'Інакше',
elseDescription: 'Використовується для визначення логіки, яка має виконуватися, коли умова if не виконується.',
elseDescription: 'Використовується для визначення логіки, яка має бути виконана, коли умова if не виконана.',
and: 'і',
or: 'або',
operator: 'Оператор',
notSetVariable: 'Спочатку встановіть змінну',
notSetVariable: 'Будь ласка, спочатку встановіть змінну',
comparisonOperator: {
'contains': 'містить',
'not contains': 'не містить',
@@ -302,40 +322,43 @@ const translation = {
'is not': 'не є',
'empty': 'порожній',
'not empty': 'не порожній',
'null': 'нуль',
'not null': 'не нуль',
'null': 'є null',
'not null': 'не є null',
},
enterValue: 'Введіть значення',
addCondition: 'Додати умову',
conditionNotSetup: 'Умова НЕ налаштована',
},
variableAssigner: {
title: 'Призначення змінних',
title: 'Присвоєння змінних',
outputType: 'Тип виходу',
outputVarType: 'Тип вихідної змінної',
varNotSet: 'Змінна не встановлена',
noVarTip: 'Додайте змінні для призначення',
noVarTip: 'Додайте змінні для присвоєння',
type: {
string: 'Рядок',
number: 'Число',
object: 'Обєкт',
object: 'Об\'єкт',
array: 'Масив',
},
aggregationGroup: 'Група агрегації',
aggregationGroupTip: 'Увімкнення цієї функції дозволяє агрегатору змінних агрегувати кілька наборів змінних.',
addGroup: 'Додати групу',
outputVars: {
output: 'Значення призначеної змінної',
varDescribe: 'Вихід {{groupName}}',
},
setAssignVariable: 'Встановити змінну присвоєння',
},
tool: {
toAuthorize: 'Авторизуватися',
toAuthorize: 'Авторизувати',
inputVars: 'Вхідні змінні',
outputVars: {
text: 'вміст, згенерований інструментом',
text: 'генерований вміст інструменту',
files: {
title: 'файли, згенеровані інструментом',
type: 'Тип підтримки. Тепер підтримується лише зображення',
transfer_method: 'Метод передачі. Значення - віддалений URL або локальний файл',
title: 'файли, генеровані інструментом',
type: 'Тип підтримки. Наразі підтримуються лише зображення',
transfer_method: 'Метод передачі. Значення - remote_url або local_file',
url: 'URL зображення',
upload_file_id: 'Ідентифікатор завантаженого файлу',
upload_file_id: 'ID завантаженого файлу',
},
},
},
@@ -347,13 +370,47 @@ const translation = {
},
class: 'Клас',
classNamePlaceholder: 'Напишіть назву вашого класу',
advancedSetting: 'Розширена настройка',
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: 'Поточна ітерація',
},
},
tracing: {
stopBy: 'Зупинено користувачем {{user}}',