diff --git a/deepdoc/parser/mineru_parser.py b/deepdoc/parser/mineru_parser.py index cc4c99c76b..d63a04c843 100644 --- a/deepdoc/parser/mineru_parser.py +++ b/deepdoc/parser/mineru_parser.py @@ -73,6 +73,7 @@ LANGUAGE_TO_MINERU_MAP = { 'Thai': 'th', 'Greek': 'el', 'Hindi': 'devanagari', + 'Bulgarian': 'cyrillic', } diff --git a/web/src/constants/common.ts b/web/src/constants/common.ts index 2d68ac0afd..4ef093b996 100644 --- a/web/src/constants/common.ts +++ b/web/src/constants/common.ts @@ -54,6 +54,7 @@ export const LanguageList = [ 'German', 'French', 'Italian', + 'Bulgarian', ]; export const LanguageMap = { English: 'English', @@ -68,6 +69,7 @@ export const LanguageMap = { German: 'German', French: 'Français', Italian: 'Italiano', + Bulgarian: 'Български', }; export enum LanguageAbbreviation { @@ -83,6 +85,7 @@ export enum LanguageAbbreviation { De = 'de', Fr = 'fr', It = 'it', + Bg = 'bg', } export const LanguageAbbreviationMap = { @@ -98,6 +101,7 @@ export const LanguageAbbreviationMap = { [LanguageAbbreviation.De]: 'Deutsch', [LanguageAbbreviation.Fr]: 'Français', [LanguageAbbreviation.It]: 'Italiano', + [LanguageAbbreviation.Bg]: 'Български', }; export const LanguageTranslationMap = { @@ -121,6 +125,7 @@ export const LanguageTranslationMap = { Greek: 'el', Hindi: 'hi', Ukrainian: 'uk', + Bulgarian: 'bg', }; export enum FileMimeType { diff --git a/web/src/locales/BULGARIAN_LANGUAGE_CHANGES.md b/web/src/locales/BULGARIAN_LANGUAGE_CHANGES.md new file mode 100644 index 0000000000..3852bae9eb --- /dev/null +++ b/web/src/locales/BULGARIAN_LANGUAGE_CHANGES.md @@ -0,0 +1,54 @@ +# Add Bulgarian Language Support + +**Repository:** https://github.com/trifonnt/ragflow + +## Overview + +Added Bulgarian (`bg` / `Български`) as the 13th supported UI language in RAGFlow. + +## Changed Files + +### `web/src/constants/common.ts` + +Registered Bulgarian in all 5 language data structures: + +- **`LanguageList`** — Added `'Bulgarian'` to the array of available languages +- **`LanguageMap`** — Added `Bulgarian: 'Български'` mapping English name to native name +- **`LanguageAbbreviation`** enum — Added `Bg = 'bg'` using ISO 639-1 code +- **`LanguageAbbreviationMap`** — Added `[LanguageAbbreviation.Bg]: 'Български'` for the language selector display +- **`LanguageTranslationMap`** — Added `Bulgarian: 'bg'` for language code resolution + +### `web/src/locales/config.ts` + +Added a lazy-loading dynamic import entry for the Bulgarian locale file: + +```typescript +[LanguageAbbreviation.Bg]: () => import('./bg'), +``` + +This ensures the Bulgarian translation bundle is only loaded on demand when a user selects it. + +### `web/src/locales/bg.ts` (new file) + +Created the full Bulgarian translation file containing all 26 sections and 2001 translation keys, matching the English source (`en.ts`) exactly: + +`common`, `login`, `header`, `memories`, `memory`, `knowledgeList`, `knowledgeDetails`, `knowledgeConfiguration`, `chunk`, `chat`, `setting`, `message`, `fileManager`, `flow`, `llmTools`, `modal`, `mcp`, `search`, `language`, `pagination`, `dataflowParser`, `datasetOverview`, `deleteModal`, `empty`, `admin`, `explore` + +All interpolation placeholders (`{{variable}}`), HTML tags, and technical terms (model names, URLs, API references) are preserved as-is. + +### `deepdoc/parser/mineru_parser.py` + +Added Bulgarian to the `LANGUAGE_TO_MINERU_MAP` dictionary for OCR/PDF parser language support: + +```python +'Bulgarian': 'cyrillic', +``` + +Bulgarian uses the Cyrillic script, so the `'cyrillic'` MinerU language code is used. + +## How It Works + +- The language selector in the header automatically picks up the new entry from `LanguageList` and `LanguageMap` +- When a user selects "Български", `changeLanguageAsync('bg')` lazy-loads `bg.ts` and switches the UI +- The user's preference is saved to the database and localStorage for persistence across sessions +- `supportedLngs` in i18next is derived from `Object.values(LanguageAbbreviation)`, so adding `Bg` to the enum automatically registers it diff --git a/web/src/locales/bg.ts b/web/src/locales/bg.ts new file mode 100644 index 0000000000..d65b7ecb2e --- /dev/null +++ b/web/src/locales/bg.ts @@ -0,0 +1,2596 @@ +export default { + translation: { + common: { + confirm: 'Потвърди', + back: 'Назад', + noResults: 'Няма намерени резултати', + selectPlaceholder: 'изберете стойност', + selectAll: 'Избери всички', + delete: 'Изтрий', + deleteModalTitle: 'Сигурни ли сте, че искате да изтриете?', + deleteThem: 'Сигурни ли сте, че искате да ги изтриете?', + ok: 'Ок', + cancel: 'Отказ', + yes: 'Да', + no: 'Не', + total: 'Общо', + rename: 'Преименувай', + name: 'Име', + save: 'Запази', + namePlaceholder: 'Моля, въведете име', + next: 'Напред', + create: 'Създай', + edit: 'Редактирай', + upload: 'Качване', + english: 'Английски', + portugueseBr: 'Португалски (Бразилия)', + chinese: 'Опростен китайски', + traditionalChinese: 'Традиционен китайски', + russian: 'Руски', + bulgarian: 'Български', + language: 'Език', + languageMessage: 'Моля, въведете вашия език!', + languagePlaceholder: 'изберете вашия език', + copy: 'Копирай', + copied: 'Копирано', + comingSoon: 'Очаквайте скоро', + download: 'Изтегляне', + close: 'Затвори', + preview: 'Преглед', + move: 'Премести', + warn: 'Предупреждение', + action: 'Действие', + s: 'С', + pleaseSelect: 'Моля, изберете', + pleaseInput: 'Моля, въведете', + submit: 'Изпрати', + clear: 'Изчисти', + embedIntoSite: 'Вграждане в уеб страница', + previousPage: 'Предишна', + nextPage: 'Следваща', + add: 'Добави', + remove: 'Премахни', + search: 'Търсене', + noDataFound: 'Няма намерени данни.', + noData: 'Няма налични данни', + promptPlaceholder: `Моля, въведете или използвайте / за бързо вмъкване на променливи.`, + mcp: { + namePlaceholder: 'Моят MCP сървър', + nameRequired: + 'Трябва да е с дължина 1–64 символа и може да съдържа само букви, цифри, тирета и долни черти.', + urlPlaceholder: 'https://api.example.com/v1/mcp', + tokenPlaceholder: 'напр. eyJhbGciOiJIUzI1Ni...', + }, + selected: 'Избрани', + seeAll: 'Виж всички', + }, + login: { + loginTitle: 'Влезте в акаунта си', + signUpTitle: 'Създайте акаунт', + login: 'Вход', + signUp: 'Регистрация', + loginDescription: 'Радваме се да ви видим отново!', + registerDescription: 'Радваме се, че сте с нас!', + emailLabel: 'Имейл', + emailPlaceholder: 'Моля, въведете имейл', + passwordLabel: 'Парола', + passwordPlaceholder: 'Моля, въведете парола', + rememberMe: 'Запомни ме', + signInTip: 'Нямате акаунт?', + signUpTip: 'Вече имате акаунт?', + nicknameLabel: 'Псевдоним', + nicknamePlaceholder: 'Моля, въведете псевдоним', + register: 'Създайте акаунт', + continue: 'Продължи', + title: 'Водещ RAG двигател за LLM контекст', + start: 'Нека започнем', + description: + 'Регистрирайте се безплатно, за да изследвате водещата RAG технология. Създавайте бази от знания и AI, за да подсилите вашия бизнес.', + review: 'от 500+ отзива', + seeAll: 'Виж всички', + }, + header: { + knowledgeBase: 'Данни', + chat: 'Чат', + register: 'Регистрация', + signin: 'Вход', + home: 'Начало', + setting: 'Потребителски настройки', + logout: 'Изход', + fileManager: 'Файлове', + flow: 'Агент', + search: 'Търсене', + welcome: 'Добре дошли в', + dataset: 'Данни', + memories: 'Памет', + }, + memories: { + llmTooltip: + 'Анализира съдържанието на разговора, извлича ключова информация и генерира структурирани резюмета на паметта.', + embeddingModelTooltip: + 'Преобразува текст в числови вектори за търсене по семантично сходство и извличане от паметта.', + embeddingModelError: + 'Типът памет е задължителен и "raw" не може да бъде изтрит.', + memoryTypeTooltip: `Raw: Суровото съдържание на диалога между потребителя и агента (задължително по подразбиране). +Семантична памет: Общи знания и факти за потребителя и света. +Епизодична памет: Записи с времеви отпечатък на конкретни събития и преживявания. +Процедурна памет: Научени умения, навици и автоматизирани процедури.`, + raw: 'raw', + semantic: 'семантична', + episodic: 'епизодична', + procedural: 'процедурна', + editName: 'Редактирай име', + memory: 'Памет', + createMemory: 'Създай памет', + name: 'Име', + memoryNamePlaceholder: 'име на паметта', + memoryType: 'Тип памет', + embeddingModel: 'Embedding модел', + selectModel: 'Изберете модел', + llm: 'LLM', + delMemoryWarn: `След изтриването всички съобщения в тази памет ще бъдат изтрити и няма да могат да бъдат извлечени от агенти.`, + }, + memory: { + taskLogDialog: { + title: 'Памет', + startTime: 'Начално време', + status: 'Статус', + details: 'Детайли', + success: 'Успех', + running: 'Изпълнява се', + failed: 'Неуспешно', + }, + messages: { + forget: 'Забрави', + forgetMessageTip: 'Сигурни ли сте, че искате да забравите?', + messageDescription: + 'Извличането на памет е конфигурирано с подсказки и температура от разширените настройки.', + copied: 'Копирано!', + contentEmbed: 'Вграждане на съдържание', + content: 'Съдържание', + delMessageWarn: `След забравянето това съобщение няма да бъде извличано от агенти.`, + forgetMessage: 'Забрави съобщение', + sessionId: 'ID на сесия', + agent: 'Агент', + type: 'Тип', + validDate: 'Валидна дата', + forgetAt: 'Забравено на', + source: 'Източник', + enable: 'Активирай', + action: 'Действие', + }, + config: { + memorySizeTooltip: `Отчита съдържанието на всяко съобщение + неговия embedding вектор (≈ Съдържание + Размерности × 8 байта). +Пример: Съобщение от 1 KB с 1024-мерен embedding използва ~9 KB. Лимитът по подразбиране от 5 MB побира ~500 такива съобщения.`, + avatar: 'Аватар', + description: 'Описание', + memorySize: 'Размер на паметта', + advancedSettings: 'Разширени настройки', + permission: 'Разрешение', + onlyMe: 'Само аз', + team: 'Екип', + storageType: 'Тип съхранение', + storageTypePlaceholder: 'Моля, изберете тип съхранение', + forgetPolicy: 'Политика за забравяне', + temperature: 'Температура', + systemPrompt: 'Системна подсказка', + systemPromptPlaceholder: 'Моля, въведете системна подсказка', + userPrompt: 'Потребителска подсказка', + userPromptPlaceholder: 'Моля, въведете потребителска подсказка', + }, + sideBar: { + messages: 'Съобщения', + configuration: 'Конфигурация', + }, + }, + knowledgeList: { + welcome: 'Добре дошли отново', + description: 'Кои бази от знания ще използвате днес?', + createKnowledgeBase: 'Създай набор от данни', + name: 'Име', + namePlaceholder: 'Моля, въведете име.', + doc: 'Документи', + searchKnowledgePlaceholder: 'Търсене', + noMoreData: `Това е всичко. Няма повече.`, + parserRequired: 'Методът за разделяне е задължителен', + }, + knowledgeDetails: { + metadata: { + selectFiles: 'Избрани {{count}} файла', + type: 'Тип', + fieldNameInvalid: + 'Името на полето може да съдържа само букви или долни черти.', + builtIn: 'Вградени', + generation: 'Генериране', + toMetadataSetting: 'Настройки за генериране', + toMetadataSettingTip: 'Задайте авто-метаданни в Конфигурация.', + descriptionTip: + 'Предоставете описания или примери, за да насочите LLM да извлича стойности за това поле. Ако е оставено празно, ще се разчита на името на полето.', + restrictDefinedValuesTip: + 'Режим на изброими стойности: Ограничава извличането от LLM да съвпада само с предварително зададени стойности. Дефинирайте стойностите по-долу.', + valueExists: + 'Стойността вече съществува. Потвърдете, за да обедините дубликатите и да комбинирате всички свързани файлове.', + fieldNameExists: + 'Името на полето вече съществува. Потвърдете, за да обедините дубликатите и да комбинирате всички свързани файлове.', + valueSingleExists: + 'Стойността вече съществува. Потвърдете, за да обедините дубликатите.', + fieldSingleNameExists: + 'Името на полето вече съществува. Потвърдете, за да обедините дубликатите.', + fieldExists: 'Полето вече съществува.', + fieldSetting: 'Настройки на полето', + changesAffectNewParses: 'Промените засягат само нови обработки.', + restrictDefinedValues: 'Ограничи до дефинирани стойности', + metadataGenerationSettings: 'Настройки за генериране на метаданни', + manageMetadata: 'Управление на метаданни', + metadata: 'Метаданни', + values: 'Стойности', + value: 'Стойност', + action: 'Действие', + field: 'Поле', + description: 'Описание', + fieldName: 'Име на поле', + editMetadata: 'Редактирай метаданни', + addMetadata: 'Добави метаданни', + deleteWarn: + 'Този {{field}} ще бъде премахнат от всички свързани файлове', + deleteManageFieldAllWarn: + 'Това поле и всички негови съответстващи стойности ще бъдат изтрити от всички свързани файлове.', + deleteManageValueAllWarn: + 'Тази стойност ще бъде изтрита от всички свързани файлове.', + deleteManageFieldSingleWarn: + 'Това поле и всички негови съответстващи стойности ще бъдат изтрити от този файл.', + deleteManageValueSingleWarn: + 'Тази стойност ще бъде изтрита от този файл.', + deleteSettingFieldWarn: `Това поле ще бъде изтрито; съществуващите метаданни няма да бъдат засегнати.`, + deleteSettingValueWarn: `Тази стойност ще бъде изтрита; съществуващите метаданни няма да бъдат засегнати.`, + }, + redoAll: 'Изчисти съществуващите фрагменти', + applyAutoMetadataSettings: 'Приложи глобални настройки за авто-метаданни', + parseFileTip: 'Сигурни ли сте, че искате да обработите?', + parseFile: 'Обработи файл', + emptyMetadata: 'Няма метаданни', + metadataField: 'Поле за метаданни', + systemAttribute: 'Системен атрибут', + localUpload: 'Локално качване', + fileSize: 'Размер на файла', + fileType: 'Тип файл', + uploadedBy: 'Качен от', + notGenerated: 'Не е генерирано', + generatedOn: 'Генерирано на ', + subbarFiles: 'Файлове', + generateKnowledgeGraph: + 'Това ще извлече обекти и връзки от всички ваши документи в този набор от данни. Процесът може да отнеме известно време.', + generateRaptor: + 'Извършва рекурсивно клъстериране и обобщаване на фрагменти от документи за изграждане на йерархична дървовидна структура, позволявайки по-контекстно извличане при обемни документи.', + generate: 'Генерирай', + raptor: 'RAPTOR', + processingType: 'Тип обработка', + dataPipeline: 'Входящ конвейер', + operations: 'Операции', + taskId: 'ID на задача', + duration: 'Продължителност', + details: 'Детайли', + status: 'Статус', + task: 'Задача', + startDate: 'Начална дата', + source: 'Източник', + fileName: 'Име на файл', + datasetLogs: 'Данни', + fileLogs: 'Файл', + overview: 'Логове', + success: 'Успех', + failed: 'Неуспешно', + completed: 'Завършено', + datasetLog: 'Лог на набора от данни', + created: 'Създадено', + learnMore: 'Въведение във вградения конвейер', + general: 'Общи', + chunkMethodTab: 'Метод за разделяне', + testResults: 'Резултати', + testSetting: 'Настройки', + retrievalTesting: 'Тестване на извличане', + retrievalTestingDescription: + 'Проведете тест за извличане, за да проверите дали RAGFlow може да възстанови предвиденото съдържание за LLM.', + Parse: 'Обработка', + dataset: 'Данни', + testing: 'Тестване на извличане', + files: 'файлове', + configuration: 'Конфигурация', + knowledgeGraph: 'Граф на знанията', + name: 'Име', + namePlaceholder: 'Моля, въведете име!', + doc: 'Документи', + datasetDescription: + 'Моля, изчакайте файловете ви да бъдат обработени, преди да започнете чат с AI.', + addFile: 'Добави файл', + searchFiles: 'Търсене във файловете', + localFiles: 'Локални файлове', + emptyFiles: 'Създай празен файл', + webCrawl: 'Уеб обхождане', + chunkNumber: 'Фрагменти', + uploadDate: 'Дата на качване', + chunkMethod: 'Метод за разделяне', + enabled: 'Активирай', + disabled: 'Деактивирай', + action: 'Действие', + parsingStatus: 'Статус на обработка', + parsingStatusTip: + 'Времето за обработка на документа зависи от няколко фактора. Активирането на функции като граф на знанията, RAPTOR, автоматично извличане на въпроси или автоматично извличане на ключови думи значително увеличава времето за обработка. Ако лентата за напредък спре, моля, консултирайте тези ЧЗВ: https://ragflow.io/docs/dev/faq#why-does-my-document-parsing-stall-at-under-one-percent.', + processBeginAt: 'Начало', + processDuration: 'Продължителност', + progressMsg: 'Прогрес', + noTestResultsForRuned: + 'Няма намерени релевантни резултати. Опитайте да коригирате заявката или параметрите.', + noTestResultsForNotRuned: + 'Все още не е изпълнен тест. Резултатите ще се появят тук.', + testingDescription: + 'Проведете тест за извличане, за да проверите дали RAGFlow може да възстанови предвиденото съдържание за LLM. Ако сте коригирали настройките по подразбиране, като тегло на сходство по ключови думи или праг на сходство, за да постигнете оптимални резултати, имайте предвид, че тези промени няма да бъдат автоматично запазени. Трябва да ги приложите в настройките на чат асистента или в настройките на компонента за извличане.', + similarityThreshold: 'Праг на сходство', + similarityThresholdTip: + 'RAGFlow използва или комбинация от претеглено сходство по ключови думи и претеглено векторно косинусно сходство, или комбинация от претеглено сходство по ключови думи и претеглена оценка за преподреждане при извличане. Този параметър задава прага за сходство между потребителската заявка и фрагментите. Всеки фрагмент с оценка за сходство под този праг ще бъде изключен от резултатите. По подразбиране прагът е зададен на 0.2.', + vectorSimilarityWeight: 'Тегло на векторно сходство', + vectorSimilarityWeightTip: + 'Задава теглото на сходство по ключови думи в комбинираната оценка за сходство, използвано с векторно косинусно сходство или с оценка за преподреждане. Общата сума на двете тегла трябва да е равна на 1.0.', + keywordSimilarityWeight: 'Тегло на сходство по ключови думи', + keywordSimilarityWeightTip: + 'Задава теглото на сходство по ключови думи в комбинираната оценка за сходство, използвано с векторно косинусно сходство или с оценка за преподреждане. Общата сума на двете тегла трябва да е равна на 1.0.', + testText: 'Тестов текст', + testTextPlaceholder: 'Въведете вашия въпрос тук!', + testingLabel: 'Изпълни', + similarity: 'Хибридно сходство', + termSimilarity: 'Сходство по термини', + vectorSimilarity: 'Векторно сходство', + hits: 'Попадения', + view: 'Преглед', + filesSelected: 'Избрани файлове', + upload: 'Качване', + run: 'Обработка', + runningStatus0: 'ИЗЧАКВАНЕ', + runningStatus1: 'ОБРАБОТКА', + runningStatus2: 'ОТМЕНЕНО', + runningStatus3: 'УСПЕХ', + runningStatus4: 'НЕУСПЕХ', + pageRanges: 'Диапазон на страници', + pageRangesTip: + 'Диапазон от страници за обработка; страниците извън този диапазон няма да бъдат обработени.', + fromPlaceholder: 'от', + fromMessage: 'Липсва начален номер на страница', + toPlaceholder: 'до', + toMessage: 'Липсва краен номер на страница (изключен)', + layoutRecognize: 'PDF парсер', + layoutRecognizeTip: + 'Използвайте визуален модел за анализ на оформлението на PDF, за ефективно разпознаване на заглавия, текстови блокове, изображения и таблици. Ако е избрана опцията naive, ще бъде извлечен само обикновеният текст от PDF. Моля, имайте предвид, че тази опция в момента работи САМО за PDF документи.', + taskPageSize: 'Размер на страница за задача', + taskPageSizeMessage: 'Моля, въведете размер на страница за задача!', + taskPageSizeTip: `По време на разпознаването на оформлението PDF файлът се разделя на части и се обработва паралелно за увеличаване на скоростта. Този параметър задава размера на всяка част. По-голям размер намалява вероятността от разделяне на непрекъснат текст между страниците.`, + addPage: 'Добави страница', + greaterThan: 'Текущата стойност трябва да е по-голяма от до!', + greaterThanPrevious: + 'Текущата стойност трябва да е по-голяма от предишната до!', + selectFiles: 'Избери файлове', + changeSpecificCategory: 'Промени конкретна категория', + uploadTitle: 'Плъзнете и пуснете файла тук за качване', + uploadDescription: + 'Поддържа единично или групово качване на файлове. За локално инсталиран RAGFlow: общият лимит за размер на файловете при качване е 1GB, с лимит от 32 файла на група. Няма ограничение за общия брой файлове на акаунт. За demo.ragflow.io, общият лимит за размер на файловете при качване е 10MB, като всеки файл не трябва да надвишава 10MB и максимум 128 файла на акаунт.', + chunk: 'Фрагмент', + bulk: 'Групово', + cancel: 'Отказ', + close: 'Затвори', + rerankModel: 'Модел за преподреждане', + rerankPlaceholder: 'Моля, изберете', + rerankTip: `Незадължително. Ако е оставено празно, RAGFlow ще използва комбинация от претеглено сходство по ключови думи и претеглено векторно косинусно сходство; ако е избран модел за преподреждане, претеглена оценка за преподреждане ще замени претегленото векторно косинусно сходство. Имайте предвид, че използването на модел за преподреждане значително увеличава времето за отговор на системата.`, + topK: 'Top-K', + topKTip: `Използва се заедно с модела за преподреждане. Тази настройка определя броя текстови фрагменти, които ще бъдат изпратени към указания модел за преподреждане.`, + delimiter: `Разделител за текст`, + delimiterTip: + 'Разделителят може да се състои от един или повече специални символа. Ако са повече символи, уверете се, че са оградени с обратни кавички (``). Например, ако конфигурирате разделителите си така: \\n`##`;, текстовете ви ще бъдат разделени при нов ред, двоен хеш (##) и точка и запетая.', + enableChildrenDelimiter: 'Дъщерни фрагменти се използват за извличане', + childrenDelimiter: 'Разделител за текст', + childrenDelimiterTip: + 'Разделителят може да се състои от един или повече специални символа. Ако са повече символи, уверете се, че са оградени с обратни кавички (``). Например, ако конфигурирате разделителите си така: \\n`##`;, текстовете ви ще бъдат разделени при нов ред, двоен хеш (##) и точка и запетая.', + html4excel: 'Excel към HTML', + html4excelTip: `Използвайте с метода за разделяне General. Когато е деактивирано, електронните таблици (XLSX или XLS(Excel 97-2003)) в базата от знания ще бъдат обработени като двойки ключ-стойност. Когато е активирано, те ще бъдат обработени като HTML таблици, разделяйки всеки 12 реда, ако оригиналната таблица има повече от 12 реда. Вижте https://ragflow.io/docs/dev/enable_excel2html за подробности.`, + autoKeywords: 'Авто-ключови думи', + autoKeywordsTip: `Автоматично извлича N ключови думи за всеки фрагмент, за да увеличи класирането им за заявки, съдържащи тези ключови думи. Имайте предвид, че допълнителни токени ще бъдат консумирани от индексиращия модел, указан в 'Конфигурация'. Можете да проверите или актуализирате добавените ключови думи за фрагмент от списъка с фрагменти. За подробности вижте https://ragflow.io/docs/dev/autokeyword_autoquestion.`, + autoQuestions: 'Авто-въпроси', + autoQuestionsTip: `Автоматично извлича N въпроса за всеки фрагмент, за да увеличи класирането им за заявки, съдържащи тези въпроси. Можете да проверите или актуализирате добавените въпроси за фрагмент от списъка с фрагменти. Тази функция няма да наруши процеса на разделяне при грешка, но може да добави празен резултат към оригиналния фрагмент. Имайте предвид, че допълнителни токени ще бъдат консумирани от индексиращия модел, указан в 'Конфигурация'. За подробности вижте https://ragflow.io/docs/dev/autokeyword_autoquestion.`, + redo: 'Искате ли да изчистите съществуващите {{chunkNum}} фрагменти?', + setMetaData: 'Задай метаданни', + pleaseInputJson: 'Моля, въведете JSON', + documentMetaTips: `
Метаданните са във формат Json (не са търсими). Те ще бъдат добавени към подсказката за LLM, ако фрагменти от този документ са включени в подсказката.
+Примери:
+Метаданните са:
+ {
+ "Author": "Alex Dowson",
+ "Date": "2024-11-12"
+ }
+Document: the_name_of_document
+Author: Alex Dowson
+Date: 2024-11-12
+Релевантни фрагменти, както следва:
+Изтриването на генерираните резултати от {{type}} + ще премахне всички извлечени обекти и връзки от този набор от данни. + Оригиналните ви файлове ще останат непокътнати.
+
+ Искате ли да продължите?
+ `,
+ extractRaptor: 'Извлечи Raptor',
+ extractKnowledgeGraph: 'Извлечи граф на знанията',
+ filterPlaceholder: 'моля, въведете филтър',
+ fileFilterTip: '',
+ fileFilter: 'Филтър за файлове',
+ setDefaultTip: '',
+ setDefault: 'Задай по подразбиране',
+ editLinkDataPipeline: 'Редактирай входящ конвейер',
+ linkPipelineSetTip:
+ 'Управлявайте свързването на входящ конвейер с този набор',
+ default: 'По подразбиране',
+ dataPipeline: 'Входящ конвейер',
+ linkDataPipeline: 'Свържи входящ конвейер',
+ enableAutoGenerate: 'Активирай автоматично генериране',
+ teamPlaceholder: 'Моля, изберете екип.',
+ dataFlowPlaceholder: 'Моля, изберете конвейер.',
+ buildItFromScratch: 'Изградете от нулата',
+ dataFlow: 'Конвейер',
+ parseType: 'Тип обработка',
+ manualSetup: 'Избери конвейер',
+ builtIn: 'Вграден',
+ titleDescription:
+ 'Актуализирайте конфигурацията на паметта тук, особено LLM и подсказките.',
+ name: 'Име на база от знания',
+ photo: 'Снимка на база от знания',
+ photoTip: 'Можете да качите изображение до 4 MB.',
+ description: 'Описание',
+ language: 'Език на документа',
+ languageMessage: 'Моля, въведете вашия език!',
+ languagePlaceholder: 'Моля, въведете вашия език!',
+ permissions: 'Разрешения',
+ embeddingModel: 'Embedding модел',
+ chunkTokenNumber: 'Препоръчителен размер на фрагмент',
+ chunkTokenNumberMessage:
+ 'Броят токени за текстов фрагмент е задължителен',
+ embeddingModelTip:
+ 'Embedding моделът по подразбиране, използван от базата от знания. След като базата от знания има фрагменти, при превключване на embedding модела системата произволно взема няколко фрагмента за проверка на съвместимостта, повторно ги вгражда с новия модел и изчислява косинусно сходство между новите и старите вектори. Превключването е разрешено само когато средното сходство на извадката е ≥ 0.9.',
+ permissionsTip:
+ "Ако е зададено на 'Екип', всички членове на вашия екип ще могат да управляват базата от знания.",
+ chunkTokenNumberTip:
+ 'Задава прага на токените за създаване на фрагмент. Сегмент с по-малко токени от този праг ще бъде комбиниран със следващите сегменти, докато броят на токените не надвиши прага, след което се създава фрагмент.',
+ chunkMethod: 'Метод за разделяне',
+ chunkMethodTip: 'Вижте съветите вдясно.',
+ upload: 'Качване',
+ english: 'Английски',
+ chinese: 'Китайски',
+ portugueseBr: 'Португалски (Бразилия)',
+ embeddingModelPlaceholder: 'Моля, изберете embedding модел.',
+ chunkMethodPlaceholder: 'Моля, изберете метод за разделяне.',
+ save: 'Запази',
+ me: 'Само аз',
+ team: 'Екип',
+ cancel: 'Отказ',
+ methodTitle: 'Описание на метода за разделяне',
+ methodExamples: 'Примери',
+ methodExamplesDescription:
+ 'Следните екранни снимки са предоставени за пояснение.',
+ dialogueExamplesTitle: 'преглед',
+ methodEmpty:
+ 'Тук ще се покаже визуално обяснение на категориите на базата от знания',
+ book: `
Поддържани файлови формати: DOCX, PDF, TXT.
+ За всяка книга в PDF, моля задайте диапазон на страници, за да премахнете нежелана информация и да намалите времето за анализ.
`, + laws: `Поддържани файлови формати: DOCX, PDF, TXT.
+ Правните документи обикновено следват строг формат на писане. Използваме текстови характеристики за идентифициране на точки за разделяне. +
+ Фрагментът има детайлност, съответстваща на 'ЧЛЕН', осигурявайки включването на целия текст от по-горно ниво. +
`, + manual: `Поддържа се само PDF.
+ Предполагаме, че ръководството има йерархична секционна структура, използвайки най-ниските заглавия на секции като основна единица за разделяне на документи. Затова фигурите и таблиците в една и съща секция няма да бъдат разделени, което може да доведе до по-големи размери на фрагменти. +
`, + naive: `Поддържани файлови формати: MD, MDX, DOCX, XLSX, XLS (Excel 97-2003), PPTX, PDF, TXT, JPEG, JPG, PNG, TIF, GIF, CSV, JSON, EML, HTML.
+Този метод разделя файлове по 'naive' метод:
++
Поддържа се само PDF файл.
+ Статиите ще бъдат разделени по секции, като abstract, 1.1, 1.2.
+ Този подход позволява на LLM да обобщи статията по-ефективно и да предостави по-изчерпателни и разбираеми отговори. + Въпреки това увеличава контекста за AI разговори и добавя изчислителни разходи за LLM. Затова по време на разговор обмислете намаляване на стойността на 'topN'.
`, + presentation: `Поддържани файлови формати: PDF, PPTX.
+ Всяка страница от слайдовете се третира като фрагмент, с запазено миниатюрно изображение.
+ Този метод за разделяне се прилага автоматично към всички качени PPT файлове, така че не е необходимо да го указвате ръчно.
`, + qa: ` ++ Този метод за разделяне поддържа файлови формати XLSX и CSV/TXT. +
++ + Редове текст, които не следват горните правила, ще бъдат игнорирани и + всяка двойка въпрос-отговор ще се счита за отделен фрагмент. + +
+ `, + resume: `Поддържани файлови формати: DOCX, PDF, TXT. +
+ Автобиографии от различни форми се анализират и организират в структурирани данни, за да улеснят търсенето на кандидати от специалисти по подбор. +
+ `, + table: `Поддържани файлови формати: XLSX и CSV/TXT.
+ Ето някои предпоставки и съвети: +
+ Ето някои примери за заглавия:
Поддържат се файлове с изображения, като поддръжката на видео предстои.
+ Този метод използва OCR модел за извличане на текст от изображения. +
+ Ако текстът, извлечен от OCR модела, е недостатъчен, ще бъде използван указан визуален LLM за предоставяне на описание на изображението. +
`, + one: ` +Поддържани файлови формати: DOCX, XLSX, XLS (Excel 97-2003), PDF, TXT. +
+ Този метод третира всеки документ в неговата цялост като фрагмент. +
+ Приложимо, когато изисквате LLM да обобщи целия документ, при условие че може да обработи такава дължина на контекста. +
`, + knowledgeGraph: `Поддържани файлови формати: DOCX, EXCEL, PPT, IMAGE, PDF, TXT, MD, JSON, EML + +
Този подход разделя файловете, използвайки метода 'naive'/'General'. Разделя документа на сегменти и след това комбинира съседни сегменти, докато броят на токените не надвиши прага, указан от 'Брой токени за текстов фрагмент', при което се създава фрагмент.
+Фрагментите след това се подават на LLM за извличане на обекти и връзки за граф на знанията и мисловна карта.
+Уверете се, че сте задали Типове обекти.
`, + tag: `База от знания, използваща метод за разделяне 'Tag', функционира като набор от тагове. Други бази от знания я използват за маркиране на своите фрагменти, а заявките към тези бази също се маркират с този набор от тагове.
+Набор от тагове НЯМА да бъде пряко включен в процес на генериране с допълнено извличане (RAG).
+Всеки фрагмент в тази база от знания е независима двойка описание-таг.
+Поддържани файлови формати: XLSX и CSV/TXT:
+Ако файлът е във формат XLSX, той трябва да съдържа две колони без заглавки: една за описания на тагове и друга за имена на тагове, като колоната с описания предхожда колоната с тагове. Множество листове са допустими, при условие че колоните са правилно структурирани.
+Ако файлът е във формат CSV/TXT, той трябва да е кодиран в UTF-8 с TAB като разделител за разделяне на описания и тагове.
+В колоната за тагове запетая се използва за разделяне на тагове.
+Редове текст, които не следват горните правила, ще бъдат игнорирани. +`, + useRaptor: 'RAPTOR', + useRaptorTip: + 'RAPTOR може да се използва за задачи с многостъпково отговаряне на въпроси. Навигирайте до страницата с файлове, натиснете Генерирай > RAPTOR, за да го активирате. Вижте https://ragflow.io/docs/dev/enable_raptor за подробности.', + prompt: 'Подсказка', + promptTip: + 'Използвайте системната подсказка, за да опишете задачата за LLM, укажете как да отговаря и очертайте други изисквания. Системната подсказка често се използва заедно с ключове (променливи), които служат като различни входни данни за LLM. Използвайте наклонена черта `/` или бутона (x), за да покажете ключовете за използване.', + promptMessage: 'Подсказката е задължителна', + promptText: `Please summarize the following paragraphs. Be careful with the numbers, do not make things up. Paragraphs as following: + {cluster_content} +The above is the content you need to summarize.`, + maxToken: 'Макс. токени', + maxTokenTip: + 'Максималният брой токени за генериран обобщителен фрагмент.', + maxTokenMessage: 'Макс. токени е задължително поле', + threshold: 'Праг', + thresholdTip: + 'В RAPTOR фрагментите се клъстерират по тяхното семантично сходство. Параметърът Праг задава минималното сходство, необходимо за групиране на фрагменти. По-висок праг означава по-малко фрагменти във всеки клъстер, а по-нисък — повече.', + thresholdMessage: 'Прагът е задължителен', + maxCluster: 'Макс. клъстери', + maxClusterTip: 'Максималният брой клъстери за създаване.', + maxClusterMessage: 'Макс. клъстери е задължително поле', + randomSeed: 'Случайно семе', + randomSeedMessage: 'Случайното семе е задължително', + entityTypes: 'Типове обекти', + vietnamese: 'Виетнамски', + pageRank: 'Page rank', + pageRankTip: `Можете да зададете по-висока PageRank оценка на конкретни бази от знания при извличане. Съответната оценка се добавя към хибридните оценки за сходство на извлечените фрагменти от тези бази, увеличавайки класирането им. Вижте https://ragflow.io/docs/dev/set_page_rank за подробности.`, + tagName: 'Таг', + frequency: 'Честота', + searchTags: 'Търсене на тагове', + tagCloud: 'Облак', + tagTable: 'Таблица', + tagSet: 'Набори от тагове', + tagSetTip: ` +Изберете един или повече набори от тагове за автоматично маркиране на фрагменти в базата от знания. Вижте https://ragflow.io/docs/dev/use_tag_sets за подробности.
+Потребителската заявка също ще бъде автоматично маркирана.
+Тази функция за автоматично маркиране подобрява извличането чрез добавяне на още един слой от специфични за домейна знания към съществуващия набор от данни. +Разлика между авто-таг и авто-ключова дума:
+Сигурни ли сте, че искате да изтриете тази връзка към източник на данни?
`, + deleteSourceModalConfirmText: 'Потвърди', + errorMsg: 'Съобщение за грешка', + newDocs: 'Нови документи', + timeStarted: 'Начално време', + log: 'Лог', + confluenceDescription: + 'Интегрирайте вашето Confluence работно пространство за търсене на документация.', + s3Description: + 'Свържете се с вашия AWS S3 bucket за импортиране и синхронизиране на съхранени файлове.', + google_cloud_storageDescription: + 'Свържете вашия Google Cloud Storage bucket за импортиране и синхронизиране на файлове.', + r2Description: + 'Свържете вашия Cloudflare R2 bucket за импортиране и синхронизиране на файлове.', + oci_storageDescription: + 'Свържете вашия Oracle Cloud Object Storage bucket за импортиране и синхронизиране на файлове.', + discordDescription: + 'Свържете вашия Discord сървър за достъп и анализ на чат данни.', + notionDescription: + 'Синхронизирайте страници и бази данни от Notion за извличане на знания.', + google_driveDescription: + 'Свържете вашия Google Drive чрез OAuth и синхронизирайте конкретни папки или дискове.', + gmailDescription: + 'Свържете вашия Gmail чрез OAuth за синхронизиране на имейли.', + webdavDescription: + 'Свържете се с WebDAV сървъри за синхронизиране на файлове.', + webdavRemotePathTip: + 'Незадължително: Укажете път на папка на WebDAV сървъра (напр. /Documents). Оставете празно за синхронизация от корена.', + google_driveTokenTip: + 'Качете OAuth токен JSON, генериран от OAuth помощника или Google Cloud Console.', + google_drivePrimaryAdminTip: + 'Имейл адрес с достъп до съдържанието на Drive, което се синхронизира', + zendeskDescription: + 'Свържете вашия Zendesk за синхронизиране на тикети, статии и друго съдържание.', + google_driveMyDriveEmailsTip: + 'Имейли, разделени със запетаи, чието съдържание от "My Drive" трябва да бъде индексирано.', + google_driveSharedFoldersTip: + 'Линкове към споделени папки в Google Drive, разделени със запетаи.', + gmailPrimaryAdminTip: + 'Имейл на основния администратор с достъп до Gmail / Workspace.', + gmailTokenTip: 'Качете OAuth JSON, генериран от Google Console.', + dropboxDescription: + 'Свържете вашия Dropbox за синхронизиране на файлове и папки от избран акаунт.', + bitbucketDescription: + 'Свържете Bitbucket за синхронизиране на PR съдържание.', + bitbucketTopWorkspaceTip: + 'Bitbucket работното пространство за индексиране (напр. "atlassian" от https://bitbucket.org/atlassian/workspace).', + bitbucketRepositorySlugsTip: + 'Имена на хранилища, разделени със запетаи. Напр. repo-one,repo-two', + bitbucketProjectsTip: + 'Ключове на проекти, разделени със запетаи. Напр. PROJ1,PROJ2', + bitbucketWorkspaceTip: + 'Този конектор ще индексира всички хранилища в работното пространство.', + boxDescription: + 'Свържете вашия Box диск за синхронизиране на файлове и папки.', + githubDescription: + 'Свържете GitHub за синхронизиране на pull requests и issues за извличане.', + airtableDescription: + 'Свържете се с Airtable и синхронизирайте файлове от определена таблица в определено работно пространство.', + gitlabDescription: + 'Свържете GitLab за синхронизиране на хранилища, issues, merge requests и свързана документация.', + asanaDescription: + 'Свържете се с Asana и синхронизирайте файлове от определено работно пространство.', + imapDescription: + 'Свържете се с вашата IMAP пощенска кутия за синхронизиране на имейли за извличане на знания.', + dropboxAccessTokenTip: + 'Генерирайте дълготраен токен за достъп в Dropbox App Console с обхвати files.metadata.read, files.content.read и sharing.read.', + moodleDescription: + 'Свържете се с вашата Moodle LMS за синхронизиране на съдържание на курсове, форуми и ресурси.', + moodleUrlTip: + 'Базовият URL на вашата Moodle инстанция (напр. https://moodle.university.edu).', + moodleTokenTip: + 'Генерирайте токен за уеб услуга в Moodle: Отидете на Site administration → Server → Web services → Manage tokens.', + seafileDescription: + 'Свържете се с вашия SeaFile сървър за синхронизиране на файлове и документи от вашите библиотеки.', + seafileUrlTip: + 'Базовият URL на вашия SeaFile сървър (напр. https://seafile.example.com).', + seafileTokenTip: + 'Генерирайте API токен в SeaFile: Отидете на Settings → API Token → Generate Token.', + seafileIncludeSharedTip: + 'Когато е активирано, библиотеките, споделени с вас от други потребители, също ще бъдат синхронизирани.', + seafileBatchSizeTip: + 'Брой документи за обработка на партида. По-високи стойности могат да подобрят производителността, но използват повече памет. По подразбиране: 100.', + jiraDescription: + 'Свържете вашето Jira работно пространство за синхронизиране на issues, коментари и прикачени файлове.', + jiraBaseUrlTip: + 'Базов URL на вашия Jira сайт (напр. https://your-domain.atlassian.net).', + jiraProjectKeyTip: + 'Незадължително: ограничете синхронизацията до единичен ключ на проект (напр. ENG).', + jiraJqlTip: + 'Незадължителен JQL филтър. Оставете празно за разчитане на филтри по проект/време.', + jiraBatchSizeTip: 'Максимален брой issues, заявени от Jira на партида.', + jiraCommentsTip: + 'Включете Jira коментари в генерирания markdown документ.', + jiraAttachmentsTip: + 'Изтеглете прикачени файлове като отделни документи по време на синхронизация.', + jiraAttachmentSizeTip: + 'Прикачени файлове, по-големи от този брой байтове, ще бъдат пропуснати.', + jiraLabelsTip: + 'Етикети, които трябва да бъдат пропуснати при индексиране (разделени със запетаи).', + jiraBlacklistTip: + 'Коментари, чийто имейл на автора съвпада с тези записи, ще бъдат игнорирани.', + jiraScopedTokenTip: + 'Активирайте, когато използвате обхванати Atlassian токени (api.atlassian.com).', + jiraEmailTip: 'Имейл, свързан с Jira акаунта/API токена.', + jiraTokenTip: + 'API токен, генериран от https://id.atlassian.com/manage-profile/security/api-tokens.', + jiraPasswordTip: + 'Незадължителна парола за Jira Server/Data Center среди.', + mysqlDescription: + 'Свържете се с MySQL база данни за синхронизиране на данни от таблици чрез SQL заявки.', + mysqlQueryTip: + 'SQL заявка за извличане на данни от вашата база данни (напр. SELECT * FROM products WHERE status = "active").', + mysqlContentColumnsTip: + 'Имена на колони, разделени със запетаи, чиито стойности ще бъдат комбинирани като съдържание на документ за векторизация.', + mysqlMetadataColumnsTip: + 'Имена на колони, разделени със запетаи, за съхранение като метаданни на документ (не се векторизират, но са търсими).', + mysqlIdColumnTip: + 'Колона за използване като уникален ID на документ. Ако не е указана, ще се използва хеш на съдържанието.', + mysqlTimestampColumnTip: + 'Колона с дата/време за инкрементална синхронизация. Ще бъдат извлечени само редове, модифицирани след последната синхронизация.', + postgresqlDescription: + 'Свържете се с PostgreSQL база данни за синхронизиране на данни от таблици чрез SQL заявки.', + postgresqlQueryTip: + "SQL заявка за извличане на данни от вашата база данни (напр. SELECT * FROM products WHERE status = 'active').", + postgresqlContentColumnsTip: + 'Имена на колони, разделени със запетаи, чиито стойности ще бъдат комбинирани като съдържание на документ за векторизация.', + postgresqlMetadataColumnsTip: + 'Имена на колони, разделени със запетаи, за съхранение като метаданни на документ (не се векторизират, но са търсими).', + postgresqlIdColumnTip: + 'Колона за използване като уникален ID на документ. Ако не е указана, ще се използва хеш на съдържанието.', + postgresqlTimestampColumnTip: + 'Колона с дата/време за инкрементална синхронизация. Ще бъдат извлечени само редове, модифицирани след последната синхронизация.', + availableSourcesDescription: 'Изберете източник на данни за добавяне', + availableSources: 'Налични източници', + datasourceDescription: 'Управлявайте вашите източници на данни и връзки', + save: 'Запази', + search: 'Търсене', + availableModels: 'Налични модели', + profile: 'Профил', + avatar: 'Аватар', + avatarTip: 'Това ще се показва във вашия профил.', + profileDescription: 'Актуализирайте вашата снимка и лични данни тук.', + maxTokens: 'Макс. токени', + maxTokensMessage: 'Макс. токени е задължително', + maxTokensTip: `Максималният размер на контекста на модела; невалидна или неправилна стойност ще предизвика грешка. По подразбиране е 512.`, + maxTokensInvalidMessage: 'Моля, въведете валидно число за макс. токени.', + maxTokensMinMessage: 'Макс. токени не може да бъде по-малко от 0.', + password: 'Парола', + passwordDescription: + 'Моля, въведете текущата си парола, за да я промените.', + model: 'Доставчици на модели', + systemModelDescription: + 'Моля, завършете тези настройки, преди да започнете', + dataSources: 'Източници на данни', + team: 'Екип', + system: 'Система', + logout: 'Изход', + api: 'API', + username: 'Име', + usernameMessage: 'Моля, въведете вашето потребителско име!', + photo: 'Вашата снимка', + photoDescription: 'Това ще се показва във вашия профил.', + colorSchema: 'Цветова схема', + colorSchemaMessage: 'Моля, изберете вашата цветова схема!', + colorSchemaPlaceholder: 'изберете вашата цветова схема', + bright: 'Светла', + dark: 'Тъмна', + timezone: 'Часова зона', + timezoneMessage: 'Моля, въведете вашата часова зона!', + timezonePlaceholder: 'изберете вашата часова зона', + email: 'Имейл', + emailDescription: 'След регистрация имейлът не може да бъде променен.', + currentPassword: 'Текуща парола', + currentPasswordMessage: 'Моля, въведете вашата парола!', + newPassword: 'Нова парола', + changePassword: 'Промяна на парола', + newPasswordMessage: 'Моля, въведете вашата парола!', + newPasswordDescription: + 'Новата ви парола трябва да е повече от 8 символа.', + confirmPassword: 'Потвърдете нова парола', + confirmPasswordMessage: 'Моля, потвърдете вашата парола!', + confirmPasswordNonMatchMessage: 'Въведените нови пароли не съвпадат!', + cancel: 'Отказ', + addedModels: 'Добавени модели', + modelsToBeAdded: 'Модели за добавяне', + addTheModel: 'Добави', + apiKey: 'API-Key', + apiKeyMessage: 'Моля, въведете API ключа', + apiKeyTip: + 'API ключът може да бъде получен чрез регистрация при съответния LLM доставчик.', + showMoreModels: 'Преглед на модели', + hideModels: 'Скрий модели', + baseUrl: 'Base-Url', + baseUrlTip: + 'Ако вашият API ключ е от OpenAI, просто го игнорирайте. Всеки друг междинен доставчик ще предостави този base url с API ключа.', + tongyiBaseUrlTip: + 'За китайски потребители не е необходимо да попълвате или използвайте https://dashscope.aliyuncs.com/compatible-mode/v1. За международни потребители използвайте https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + tongyiBaseUrlPlaceholder: + '(Само за международни потребители, вижте съвета)', + minimaxBaseUrlTip: + 'Само за международни потребители: използвайте https://api.minimax.io/v1', + minimaxBaseUrlPlaceholder: + '(Само за международни потребители, попълнете https://api.minimax.io/v1)', + modify: 'Промени', + systemModelSettings: 'Задайте модели по подразбиране', + chatModel: 'LLM', + chatModelTip: + 'LLM по подразбиране за всяка новосъздадена база от знания.', + embeddingModel: 'Embedding', + embeddingModelTip: + 'Embedding модел по подразбиране за всяка новосъздадена база от знания. Ако не можете да намерите embedding модел от падащия списък, проверете дали използвате RAGFlow slim edition (която не включва embedding модели) или проверете https://ragflow.io/docs/dev/supported_models.', + img2txtModel: 'VLM', + img2txtModelTip: + 'VLM по подразбиране за всяка новосъздадена база от знания. Описва изображение или видео.', + sequence2txtModel: 'ASR', + sequence2txtModelTip: + 'ASR модел по подразбиране за всеки новосъздаден набор от данни. Използвайте този модел за превод на глас в съответен текст.', + rerankModel: 'Rerank', + rerankModelTip: `Модел за преподреждане по подразбиране.`, + ttsModel: 'TTS', + ttsModelTip: 'Модел за текст-към-реч по подразбиране.', + workspace: 'работно пространство', + upgrade: 'Надстройка', + addLlmTitle: 'Добави LLM', + editLlmTitle: 'Редактирай модел {{name}}', + editModel: 'Редактирай модел', + modelName: 'Име на модел', + modelID: 'ID на модел', + modelUid: 'UID на модел', + modelNameMessage: 'Моля, въведете името на модела!', + modelType: 'Тип модел', + modelTypeMessage: 'Моля, въведете типа на модела!', + addLlmBaseUrl: 'Base url', + baseUrlNameMessage: 'Моля, въведете вашия base url!', + paddleocr: { + apiUrl: 'PaddleOCR API URL', + apiUrlPlaceholder: + 'Например: https://paddleocr-server.com/layout-parsing', + accessToken: 'AI Studio токен за достъп', + accessTokenPlaceholder: 'Вашият AI Studio токен (незадължителен)', + algorithm: 'PaddleOCR алгоритъм', + selectAlgorithm: 'Изберете алгоритъм', + modelNamePlaceholder: 'Например: paddleocr-from-env-1', + modelNameRequired: 'Името на модела е задължително', + apiUrlRequired: 'PaddleOCR API URL е задължителен', + }, + vision: 'Поддържа ли Vision?', + ollamaLink: 'Как да интегрирате {{name}}', + FishAudioLink: 'Как да използвате FishAudio', + TencentCloudLink: 'Как да използвате TencentCloud ASR', + volcModelNameMessage: 'Моля, въведете името на модела!', + addEndpointID: 'EndpointID на модела', + endpointIDMessage: 'Моля, въведете EndpointID на модела', + addArkApiKey: 'VOLC ARK_API_KEY', + ArkApiKeyMessage: 'Моля, въведете вашия ARK_API_KEY', + bedrockModelNameMessage: 'Моля, въведете името на модела!', + addBedrockEngineAK: 'ACCESS KEY', + bedrockAKMessage: 'Моля, въведете вашия ACCESS KEY', + addBedrockSK: 'SECRET KEY', + bedrockSKMessage: 'Моля, въведете вашия SECRET KEY', + bedrockRegion: 'AWS регион', + bedrockRegionMessage: 'Моля, изберете!', + 'us-east-2': 'US East (Ohio)', + 'us-east-1': 'US East (N. Virginia)', + 'us-west-1': 'US West (N. California)', + 'us-west-2': 'US West (Oregon)', + 'af-south-1': 'Africa (Cape Town)', + 'ap-east-1': 'Asia Pacific (Hong Kong)', + 'ap-south-2': 'Asia Pacific (Hyderabad)', + 'ap-southeast-3': 'Asia Pacific (Jakarta)', + 'ap-southeast-5': 'Asia Pacific (Malaysia)', + 'ap-southeast-4': 'Asia Pacific (Melbourne)', + 'ap-south-1': 'Asia Pacific (Mumbai)', + 'ap-northeast-3': 'Asia Pacific (Osaka)', + 'ap-northeast-2': 'Asia Pacific (Seoul)', + 'ap-southeast-1': 'Asia Pacific (Singapore)', + 'ap-southeast-2': 'Asia Pacific (Sydney)', + 'ap-east-2': 'Asia Pacific (Taipei)', + 'ap-southeast-7': 'Asia Pacific (Thailand)', + 'ap-northeast-1': 'Asia Pacific (Tokyo)', + 'ca-central-1': 'Canada (Central)', + 'ca-west-1': 'Canada West (Calgary)', + 'eu-central-1': 'Europe (Frankfurt)', + 'eu-west-1': 'Europe (Ireland)', + 'eu-west-2': 'Europe (London)', + 'eu-south-1': 'Europe (Milan)', + 'eu-west-3': 'Europe (Paris)', + 'eu-south-2': 'Europe (Spain)', + 'eu-north-1': 'Europe (Stockholm)', + 'eu-central-2': 'Europe (Zurich)', + 'il-central-1': 'Israel (Tel Aviv)', + 'mx-central-1': 'Mexico (Central)', + 'me-south-1': 'Middle East (Bahrain)', + 'me-central-1': 'Middle East (UAE)', + 'sa-east-1': 'South America (São Paulo)', + 'us-gov-east-1': 'AWS GovCloud (US-East)', + 'us-gov-west-1': 'AWS GovCloud (US-West)', + addTencentCloudSID: 'TencentCloud Secret ID', + TencentCloudSIDMessage: 'Моля, въведете вашия Secret ID', + addTencentCloudSK: 'TencentCloud Secret Key', + TencentCloudSKMessage: 'Моля, въведете вашия Secret Key', + SparkModelNameMessage: 'Моля, изберете Spark модел', + addSparkAPIPassword: 'Spark APIPassword', + SparkAPIPasswordMessage: 'Моля, въведете вашия APIPassword', + addSparkAPPID: 'Spark APP ID', + SparkAPPIDMessage: 'Моля, въведете вашия APP ID', + addSparkAPISecret: 'Spark APISecret', + SparkAPISecretMessage: 'Моля, въведете вашия APISecret', + addSparkAPIKey: 'Spark APIKey', + SparkAPIKeyMessage: 'Моля, въведете вашия APIKey', + yiyanModelNameMessage: 'Моля, въведете име на модел', + addyiyanAK: 'yiyan API KEY', + yiyanAKMessage: 'Моля, въведете вашия API KEY', + addyiyanSK: 'yiyan Secret KEY', + yiyanSKMessage: 'Моля, въведете вашия Secret KEY', + FishAudioModelNameMessage: + 'Моля, дайте име на вашия модел за синтез на реч', + addFishAudioAK: 'Fish Audio API KEY', + addFishAudioAKMessage: 'Моля, въведете вашия API KEY', + addFishAudioRefID: 'FishAudio Reference ID', + addFishAudioRefIDMessage: + 'Моля, въведете Reference ID (оставете празно за използване на модела по подразбиране).', + GoogleModelIDMessage: 'Моля, въведете вашия model ID!', + addGoogleProjectID: 'Project ID', + GoogleProjectIDMessage: 'Моля, въведете вашия Project ID', + addGoogleServiceAccountKey: + 'Service Account Key (Оставете празно, ако използвате Application Default Credentials)', + GoogleServiceAccountKeyMessage: + 'Моля, въведете Google Cloud Service Account Key в base64 формат', + addGoogleRegion: 'Google Cloud регион', + GoogleRegionMessage: 'Моля, въведете Google Cloud регион', + modelProvidersWarn: `Моля, първо добавете embedding модел и LLM в Настройки > Доставчици на модели. След това ги задайте в 'Задайте модели по подразбиране'.`, + apiVersion: 'API-Version', + apiVersionMessage: 'Моля, въведете API версия', + add: 'Добави', + updateDate: 'Дата', + role: 'Статус', + invite: 'Покани член', + agree: 'Приеми', + refuse: 'Откажи', + teamMembers: 'Членове на екипа', + joinedTeams: 'Присъединени екипи', + sureDelete: 'Сигурни ли сте, че искате да премахнете този член?', + quit: 'Напусни', + sureQuit: + 'Сигурни ли сте, че искате да напуснете екипа, към който сте се присъединили?', + secretKey: 'Таен ключ', + publicKey: 'Публичен ключ', + secretKeyMessage: 'Моля, въведете тайния ключ', + publicKeyMessage: 'Моля, въведете публичния ключ', + hostMessage: 'Моля, въведете хоста', + configuration: 'Конфигурация', + langfuseDescription: + 'Следи, оценки, управление на подсказки и метрики за отстраняване на грешки и подобряване на вашето LLM приложение.', + viewLangfuseSDocumentation: 'Вижте документацията на Langfuse', + view: 'Преглед', + modelsToBeAddedTooltip: + 'Ако вашият доставчик на модели не е в списъка, но твърди, че е "OpenAI-съвместим", изберете картата OpenAI-API-compatible, за да добавите съответния(те) модел(и).', + mcp: 'MCP', + mineru: { + modelNameRequired: 'Името на модела е задължително', + apiServerRequired: 'MinerU API Server конфигурацията е задължителна', + serverUrlBackendLimit: + 'MinerU Server URL адресът е наличен само за HTTP client backend', + apiserver: 'MinerU API Server конфигурация', + outputDir: 'MinerU път на изходна директория', + backend: 'MinerU тип на обработващ backend', + serverUrl: 'MinerU Server URL адрес', + deleteOutput: 'Изтрий изходните файлове след обработка', + selectBackend: 'Изберете обработващ backend', + backendOptions: { + pipeline: 'Стандартна конвейерна обработка', + vlmTransformers: 'Vision Language Model с Transformers', + vlmVllmEngine: 'Vision Language Model с vLLM Engine', + vlmHttpClient: 'Vision Language Model чрез HTTP Client', + vlmMlxEngine: 'Vision Language Model с MLX Engine', + vlmVllmAsyncEngine: + 'Vision Language Model с vLLM Async Engine (Експериментален)', + vlmLmdeployEngine: + 'Vision Language Model с LMDeploy Engine (Експериментален)', + }, + }, + modelTypes: { + chat: 'Чат', + embedding: 'Embedding', + rerank: 'Rerank', + sequence2text: 'sequence2text', + tts: 'TTS', + image2text: 'OCR', + speech2text: 'ASR', + }, + showToc: 'Покажи съдържание', + hideToc: 'Скрий съдържание', + }, + message: { + registered: 'Регистриран!', + logout: 'изход', + logged: 'влязъл!', + pleaseSelectChunk: 'Моля, изберете фрагмент!', + registerDisabled: 'Регистрацията на потребители е деактивирана', + modified: 'Променено', + created: 'Създадено', + deleted: 'Изтрито', + renamed: 'Преименувано', + operated: 'Извършено', + updated: 'Актуализирано', + uploaded: 'Качено', + 200: 'Сървърът успешно връща заявените данни.', + 201: 'Данните са създадени или променени успешно.', + 202: 'Заявка е поставена на опашката във фонов режим (асинхронна задача).', + 204: 'Данните са изтрити успешно.', + 400: 'Имаше грешка в изпратената заявка и сървърът не създаде или промени данни.', + 401: 'Моля, влезте отново.', + 403: 'Потребителят е оторизиран, но достъпът е забранен.', + 404: 'Заявката е направена за запис, който не съществува, и сървърът не извърши операцията.', + 406: 'Заявеният формат не е наличен.', + 410: 'Заявеният ресурс е бил окончателно изтрит и няма да бъде наличен отново.', + 413: 'Общият размер на файловете, качени наведнъж, е твърде голям.', + 422: 'При създаване на обект възникна грешка при валидация.', + 500: 'Възникна грешка на сървъра, моля, проверете сървъра.', + 502: 'Грешка на шлюза.', + 503: 'Услугата не е налична и сървърът е временно претоварен или в поддръжка.', + 504: 'Изтичане на времето на шлюза.', + requestError: 'Грешка в заявката', + networkAnomalyDescription: + 'Има аномалия във вашата мрежа и не можете да се свържете със сървъра.', + networkAnomaly: 'мрежова аномалия', + hint: 'подсказка', + }, + fileManager: { + files: 'Файлове', + name: 'Име', + uploadDate: 'Дата на качване', + knowledgeBase: 'Данни', + size: 'Размер', + action: 'Действие', + addToKnowledge: 'Свържи с набор от данни', + pleaseSelect: 'Моля, изберете', + newFolder: 'Нова папка', + file: 'Файл', + uploadFile: 'Качи файл', + parseOnCreation: 'Обработи при създаване', + directory: 'Директория', + uploadTitle: 'Плъзнете и пуснете файла тук за качване', + uploadDescription: + 'Поддържа единично или групово качване на файлове. За локално инсталиран RAGFlow: общият лимит за размер на файловете при качване е 1GB, с лимит от 32 файла на група. Няма ограничение за общия брой файлове на акаунт. За demo.ragflow.io, общият лимит за размер на файловете при качване е 10MB, като всеки файл не трябва да надвишава 10MB и максимум 128 файла на акаунт.', + local: 'Локални качвания', + s3: 'S3 качвания', + preview: 'Преглед', + fileError: 'Грешка с файл', + uploadLimit: + 'Всеки файл не трябва да надвишава 10MB, а общият брой файлове не трябва да надвишава 128.', + destinationFolder: 'Целева папка', + pleaseUploadAtLeastOneFile: 'Моля, качете поне един файл', + }, + flow: { + autoPlay: 'Автоматично възпроизвеждане на аудио', + downloadFileTypeTip: 'Тип файл за изтегляне', + downloadFileType: 'Тип файл за изтегляне', + formatTypeError: 'Грешка във формат или тип', + variableNameMessage: + 'Името на променливата може да съдържа само букви, долни черти и цифри', + variableDescription: 'Описание на променлива', + defaultValue: 'Стойност по подразбиране', + conversationVariable: 'Променлива на разговора', + recommended: 'Препоръчано', + customerSupport: 'Обслужване на клиенти', + marketing: 'Маркетинг', + consumerApp: 'Потребителско приложение', + other: 'Друго', + ingestionPipeline: 'Входящ конвейер', + agents: 'Агенти', + days: 'Дни', + beginInput: 'Начален вход', + ref: 'Променлива', + stockCode: 'Борсов код', + apiKeyPlaceholder: + 'YOUR_API_KEY (получен от https://serpapi.com/manage-api-key)', + flowStart: 'Старт', + flowNum: 'N', + test: 'Тест', + extractDepth: 'Дълбочина на извличане', + format: 'Формат', + basic: 'основен', + advanced: 'разширен', + general: 'общ', + searchDepth: 'Дълбочина на търсене', + tavilyTopic: 'Tavily тема', + maxResults: 'Макс. резултати', + includeAnswer: 'Включи отговор', + includeRawContent: 'Включи суров вход', + includeImages: 'Включи изображения', + includeImageDescriptions: 'Включи описания на изображения', + includeDomains: 'Включи домейни', + ExcludeDomains: 'Изключи домейни', + Days: 'Дни', + comma: 'Запетая', + semicolon: 'Точка и запетая', + period: 'Точка', + lineBreak: 'Нов ред', + tab: 'Табулация', + space: 'Интервал', + delimiters: 'Разделители', + enableChildrenDelimiters: 'Дъщерни фрагменти се използват за извличане', + merge: 'Обедини', + split: 'Раздели', + script: 'Скрипт', + iterationItemDescription: + 'Представлява текущия елемент в итерацията, който може да бъде референ и манипулиран в следващите стъпки.', + guidingQuestion: 'Насочващ въпрос', + onFailure: 'При неуспех', + userPromptDefaultValue: + 'Това е поръчката, която трябва да изпратите до агента.', + search: 'Търсене', + communication: 'Комуникация', + developer: 'Разработчик', + typeCommandORsearch: 'Въведете команда или търсете...', + builtIn: 'Вграден', + ExceptionDefaultValue: 'Стойност по подразбиране при изключение', + exceptionMethod: 'Метод за изключение', + maxRounds: 'Макс. кръгове за рефлексия', + delayAfterError: 'Забавяне след грешка', + maxRetries: 'Макс. опити за повторение', + advancedSettings: 'Разширени настройки', + addTools: 'Добави инструменти', + sysPromptDefaultValue: ` ++ Предстои да изпълните отново процеса от стъпка {{step}}. +
+Това ще:
В момента редактирате резултатите от този етап.
+Ако преминете към следващ етап, промените ви ще бъдат загубени.
+За да ги запазите, моля натиснете Повторно изпълнение.
`, + changeStepModalConfirmText: 'Смени въпреки това', + changeStepModalCancelText: 'Отказ', + unlinkPipelineModalTitle: 'Прекратяване на връзка с входящ конвейер', + unlinkPipelineModalConfirmText: 'Прекрати връзка', + unlinkPipelineModalContent: ` +След прекратяването на връзката този набор от данни вече няма да бъде свързан с текущия входящ конвейер.
+Файловете, които вече се обработват, ще продължат до завършване
+Файловете, които все още не са обработени, вече няма да бъдат обработвани
Сигурни ли сте, че искате да продължите?
`, + unlinkSourceModalTitle: 'Прекратяване на връзка с източник на данни', + unlinkSourceModalContent: ` +Сигурни ли сте, че искате да прекратите връзката с този източник на данни?
`, + unlinkSourceModalConfirmText: 'Прекрати връзка', + }, + datasetOverview: { + downloadTip: 'Файлове се изтеглят от източници на данни.', + processingTip: 'Файлове се обработват от входящия конвейер.', + totalFiles: 'Общо файлове', + downloading: 'Изтегляне', + downloadSuccessTip: 'Общо успешни изтегляния', + downloadFailedTip: 'Общо неуспешни изтегляния', + processingSuccessTip: 'Общо успешно обработени файлове', + processingFailedTip: 'Общо неуспешни обработки', + processing: 'Обработка', + noData: 'Все още няма логове', + }, + deleteModal: { + delAgent: 'Изтрий агент', + delDataset: 'Изтрий набор от данни', + delSearch: 'Изтрий търсене', + delFile: 'Изтрий файл', + delFiles: 'Изтрий файлове', + delFilesContent: 'Избрани {{count}} файла', + delChat: 'Изтрий чат', + delMember: 'Изтрий член', + delMemory: 'Изтрий памет', + }, + empty: { + noMCP: 'Няма налични MCP сървъри', + agentTitle: 'Все още няма създадено агентно приложение', + notFoundAgent: 'Агентното приложение не е намерено', + datasetTitle: 'Все още няма създаден набор от данни', + notFoundDataset: 'Наборът от данни не е намерен', + chatTitle: 'Все още няма създадено чат приложение', + notFoundChat: 'Чат приложението не е намерено', + searchTitle: 'Все още няма създадено приложение за търсене', + notFoundSearch: 'Приложението за търсене не е намерено', + memoryTitle: 'Все още няма създадена памет', + notFoundMemory: 'Паметта не е намерена', + addNow: 'Добави сега', + }, + admin: { + loginTitle: 'Админ конзола', + title: 'RAGFlow', + confirm: 'Потвърди', + close: 'Затвори', + yes: 'Да', + no: 'Не', + delete: 'Изтрий', + cancel: 'Отказ', + reset: 'Нулирай', + import: 'Импорт', + description: 'Описание', + noDescription: 'Няма описание', + resourceType: { + dataset: 'Данни', + chat: 'Чат', + agent: 'Агент', + search: 'Търсене', + file: 'Файл', + team: 'Екип', + memory: 'Памет', + }, + permissionType: { + enable: 'Активирай', + read: 'Четене', + write: 'Писане', + share: 'Споделяне', + }, + serviceStatus: 'Статус на услугата', + userManagement: 'Управление на потребители', + sandboxSettings: 'Настройки на sandbox', + registrationWhitelist: 'Бял списък за регистрация', + roles: 'Роли', + monitoring: 'Мониторинг', + back: 'Назад', + active: 'Активен', + inactive: 'Неактивен', + enable: 'Активирай', + disable: 'Деактивирай', + all: 'Всички', + actions: 'Действия', + newUser: 'Нов потребител', + email: 'Имейл', + name: 'Име', + nickname: 'Псевдоним', + status: 'Статус', + id: 'ID', + serviceType: 'Тип услуга', + host: 'Хост', + port: 'Порт', + role: 'Роля', + user: 'Потребител', + userType: 'Тип потребител', + superuser: 'Суперпотребител', + normalUser: 'Нормален', + createTime: 'Дата на създаване', + lastLoginTime: 'Последно влизане', + lastUpdateTime: 'Последна актуализация', + isAnonymous: 'Анонимен', + isSuperuser: 'Суперпотребител', + deleteUser: 'Изтрий потребител', + deleteUserConfirmation: + 'Сигурни ли сте, че искате да изтриете този потребител?', + createNewUser: 'Създай нов потребител', + changePassword: 'Промяна на парола', + newPassword: 'Нова парола', + confirmNewPassword: 'Потвърди нова парола', + password: 'Парола', + confirmPassword: 'Потвърди парола', + invalidEmail: 'Моля, въведете валиден имейл адрес!', + passwordRequired: 'Моля, въведете вашата парола!', + passwordMinLength: 'Паролата трябва да е повече от 8 символа.', + confirmPasswordRequired: 'Моля, потвърдете вашата парола!', + confirmPasswordDoNotMatch: 'Въведените пароли не съвпадат!', + read: 'Четене', + write: 'Писане', + share: 'Споделяне', + create: 'Създай', + extraInfo: 'Допълнителна информация', + serviceDetail: `Детайли за услуга {{name}}`, + taskExecutorDetail: 'Детайли за изпълнител на задачи', + whitelistManagement: 'Управление на бял списък', + exportAsExcel: 'Експорт в Excel', + importFromExcel: 'Импорт от Excel', + createEmail: 'Създай имейл', + deleteEmail: 'Изтрий имейл', + editEmail: 'Редактирай имейл', + deleteWhitelistEmailConfirmation: + 'Сигурни ли сте, че искате да изтриете този имейл от белия списък? Това действие не може да бъде отменено.', + importWhitelist: 'Импорт на бял списък (Excel)', + importSelectExcelFile: 'Excel файл (.xlsx)', + importOverwriteExistingEmails: 'Презапиши съществуващи имейли', + importInvalidExcelFile: 'Моля, изберете валиден Excel файл', + importFileRequired: 'Моля, изберете файл за импорт', + importFileTips: + 'Файлът трябва да съдържа една колона със заглавиеemail.',
+ chunkNum: 'Фрагменти',
+ docNum: 'Документи',
+ tokenNum: 'Използвани токени',
+ language: 'Език',
+ createDate: 'Дата на създаване',
+ updateDate: 'Дата на актуализация',
+ permission: 'Разрешение',
+ agentTitle: 'Заглавие на агент',
+ canvasCategory: 'Категория на платно',
+ newRole: 'Нова роля',
+ addNewRole: 'Добави нова роля',
+ roleName: 'Име на роля',
+ roleNameRequired: 'Името на ролята е задължително',
+ resources: 'Ресурси',
+ editRoleDescription: 'Редактирай описание на роля',
+ deleteRole: 'Изтрий роля',
+ deleteRoleConfirmation:
+ 'Сигурни ли сте, че искате да изтриете тази роля? Това действие не може да бъде отменено.',
+ alive: 'Активен',
+ timeout: 'Изтичане',
+ fail: 'Неуспех',
+ },
+ explore: {
+ title: 'Стартиране',
+ canvasList: 'Списък с платна',
+ sessions: 'Сесии',
+ newSession: 'Нова сесия',
+ newSessionLabel: 'Започнете нов разговор',
+ deleteSession: 'Изтрий сесия',
+ searchCanvas: 'Търсене на платно...',
+ searchSessions: 'Търсене на сесии...',
+ noCanvasSelected: 'Моля, изберете платно',
+ noSessionSelected: 'Моля, изберете сесия или създайте нова',
+ noSessionsFound: 'Няма намерени сесии',
+ createFirstSession: 'Създайте първата си сесия',
+ noCanvasFound: 'Няма намерено платно',
+ deleteSelectedConfirm:
+ 'Сигурни ли сте, че искате да изтриете {{count}} сесия(и)?',
+ batchDeleteSessions: 'Изтрий сесии',
+ },
+ },
+};
diff --git a/web/src/locales/config.ts b/web/src/locales/config.ts
index 49e354ff0f..f40baaddbb 100644
--- a/web/src/locales/config.ts
+++ b/web/src/locales/config.ts
@@ -19,6 +19,7 @@ const languageImports: Record