diff --git a/src/i18n/languages.ts b/src/i18n/languages.ts index 4a2a56b..c50d6e8 100644 --- a/src/i18n/languages.ts +++ b/src/i18n/languages.ts @@ -34,4 +34,5 @@ export const LANGUAGE_METADATA: Record< tr: { name: "Turkish", nativeName: "Türkçe", priority: 16 }, ar: { name: "Arabic", nativeName: "العربية", priority: 17, direction: "rtl" }, sv: { name: "Swedish", nativeName: "Svenska", priority: 18 }, + bg: { name: "Bulgarian", nativeName: "Български", priority: 19 }, }; diff --git a/src/i18n/locales/bg/translation.json b/src/i18n/locales/bg/translation.json new file mode 100644 index 0000000..54d9922 --- /dev/null +++ b/src/i18n/locales/bg/translation.json @@ -0,0 +1,598 @@ +{ + "tray": { + "settings": "Настройки...", + "checkUpdates": "Проверка за актуализации...", + "copyLastTranscript": "Копиране на последния транскрипт", + "unloadModel": "Разтоварване на модела", + "model": "Модел", + "quit": "Изход", + "cancel": "Отказ" + }, + "sidebar": { + "general": "Общи", + "models": "Модели", + "advanced": "Разширени", + "postProcessing": "Постобработка", + "history": "История", + "debug": "Отстраняване", + "about": "За приложението" + }, + "onboarding": { + "subtitle": "За да започнете, изберете модел за транскрипция", + "recommended": "Препоръчан", + "download": "Изтегляне", + "downloading": "Изтегля се...", + "customModelDescription": "Не се поддържа официално", + "downloadFailed": "Изтеглянето не бе успешно. Опитайте отново.", + "modelCard": { + "accuracy": "точност", + "speed": "скорост" + }, + "models": { + "small": { + "name": "Whisper Small", + "description": "Бърз и доста точен." + }, + "medium": { + "name": "Whisper Medium", + "description": "Добра точност, средна скорост." + }, + "turbo": { + "name": "Whisper Turbo", + "description": "Баланс между точност и скорост." + }, + "large": { + "name": "Whisper Large", + "description": "Добра точност, но по-бавен." + }, + "parakeet-tdt-0.6b-v2": { + "name": "Parakeet V2", + "description": "Само английски. Най-добрият модел за носители на английски." + }, + "parakeet-tdt-0.6b-v3": { + "name": "Parakeet V3", + "description": "Бърз и точен." + }, + "moonshine-base": { + "name": "Moonshine Base", + "description": "Много бърз, само английски. Добре обработва акценти." + }, + "moonshine-tiny-streaming-en": { + "name": "Moonshine V2 Tiny", + "description": "Ултрабърз, само английски." + }, + "moonshine-small-streaming-en": { + "name": "Moonshine V2 Small", + "description": "Бърз, само английски. Добър баланс между скорост и точност." + }, + "moonshine-medium-streaming-en": { + "name": "Moonshine V2 Medium", + "description": "Само английски. Високо качество." + }, + "breeze-asr": { + "name": "Breeze ASR", + "description": "Оптимизиран за тайвански мандарин. Поддръжка на смесване на езици." + }, + "sense-voice-int8": { + "name": "SenseVoice", + "description": "Много бърз. Китайски, английски, японски, корейски, кантонски." + }, + "gigaam-v3-e2e-ctc": { + "name": "GigaAM v3", + "description": "Разпознаване на руска реч. Бърз и точен." + }, + "canary-180m-flash": { + "name": "Canary 180M Flash", + "description": "Много бърз. Английски, немски, испански, френски. Поддържа превод." + }, + "canary-1b-v2": { + "name": "Canary 1B v2", + "description": "Точен многоезичен. 25 европейски езика. Поддържа превод." + } + }, + "errors": { + "loadModels": "Неуспешно зареждане на наличните модели", + "downloadModel": "Неуспешно изтегляне на модела: {{error}}" + }, + "permissions": { + "title": "Необходими разрешения", + "description": "Handy се нуждае от няколко разрешения, за да работи правилно.", + "microphone": { + "title": "Достъп до микрофон", + "description": "Необходим е, за да чуе гласа ви при транскрипция." + }, + "accessibility": { + "title": "Достъп за достъпност", + "description": "Необходим е, за да въвежда транскрибирания текст във вашите приложения." + }, + "grant": "Даване на разрешение", + "granted": "Разрешено", + "waiting": "Изчакване...", + "allGranted": "Готово!", + "errors": { + "checkFailed": "Проверката на разрешенията не бе успешна. Опитайте отново.", + "requestFailed": "Заявката за разрешение не бе успешна. Опитайте отново." + } + } + }, + "modelSelector": { + "custom": "Персонализиран", + "active": "Активен", + "switching": "Превключване...", + "noModelsAvailable": "Няма налични модели", + "verifying": "Проверка на {{modelName}}...", + "verifyingGeneric": "Проверка...", + "extracting": "Разархивиране на {{modelName}}...", + "extractingMultiple": "Разархивиране на {{count}} модела...", + "extractingGeneric": "Разархивиране...", + "downloading": "Изтегляне {{percentage}}%", + "downloadingMultiple": "Изтегляне на {{count}} модела...", + "modelReady": "Моделът е готов", + "loading": "Зареждане на {{modelName}}...", + "loadingGeneric": "Зареждане...", + "modelError": "Грешка в модела", + "modelUnloaded": "Моделът е разтоварен", + "noModelDownloadRequired": "Няма модел – необходимо е изтегляне", + "deleteModel": "Изтриване на {{modelName}}", + "downloadSpeed": "{{speed}} MB/s", + "cancel": "Отказ", + "cancelDownload": "Отказ на изтеглянето", + "capabilities": { + "languageSelection": "Поддържа няколко входни езика", + "singleLanguage": "Поддържа само този език", + "multiLanguage": "Многоезичен", + "languageOnly": "Само {{language}}", + "translation": "Може да превежда на английски", + "translate": "Превод на английски" + } + }, + "settings": { + "modelSettings": { + "title": "Настройки на {{model}}", + "noSettingsNeeded": "Този модел работи автоматично без нужда от конфигурация." + }, + "general": { + "title": "Общи", + "shortcut": { + "title": "Бързи клавиши на Handy", + "description": "Настройте клавишни комбинации за стартиране на запис за реч към текст", + "loading": "Зареждане на бързите клавиши...", + "none": "Няма настроени бързи клавиши", + "notFound": "Бързият клавиш не е намерен", + "pressKeys": "Натиснете клавишите...", + "bindings": { + "transcribe": { + "name": "Бърз клавиш за транскрипция", + "description": "Клавишната комбинация за запис и транскрибиране на гласа ви." + }, + "cancel": { + "name": "Бърз клавиш за отказ", + "description": "Клавишната комбинация за отмяна на текущия запис." + }, + "transcribe_with_post_process": { + "name": "Бърз клавиш за постобработка", + "description": "По избор: отделна комбинация, която винаги прилага ИИ постобработка върху транскрипцията." + } + }, + "errors": { + "restore": "Неуспешно възстановяване на оригиналния бърз клавиш", + "set": "Неуспешно задаване на бързия клавиш: {{error}}", + "reset": "Неуспешно нулиране на бързия клавиш към първоначалната стойност" + } + }, + "language": { + "title": "Език", + "description": "Изберете езика за разпознаване на реч. „Автоматично“ определя езика сам, а изборът на конкретен език може да подобри точността за него.", + "descriptionUnsupported": "Моделът Parakeet автоматично открива езика. Ръчен избор не е необходим.", + "searchPlaceholder": "Търсене на езици...", + "noResults": "Няма намерени езици", + "auto": "Автоматично" + }, + "pushToTalk": { + "label": "Натискане за говорене", + "description": "Задръжте за запис, пуснете за спиране" + } + }, + "models": { + "title": "Модели за транскрипция", + "description": "Изберете модел за транскрипция или изтеглете допълнителни. Различните модели предлагат различна точност и скорост.", + "yourModels": "Изтеглени модели", + "availableModels": "Налични за изтегляне", + "downloaded": "Изтеглен", + "available": "Наличен за изтегляне", + "deleteConfirm": "Сигурни ли сте, че искате да изтриете {{modelName}}? Ще трябва да го изтеглите отново, за да го използвате.", + "deleteActiveConfirm": "{{modelName}} е вашият активен модел. Изтриването му ще спре транскрипциите, докато не изберете нов модел. Сигурни ли сте?", + "deleteTitle": "Изтриване на модел", + "filters": { + "all": "Всички", + "multiLanguage": "Многоезични", + "translation": "Превод", + "allLanguages": "Всички езици" + }, + "noModelsMatch": "Няма модели, отговарящи на този филтър." + }, + "sound": { + "title": "Звук", + "microphone": { + "title": "Микрофон", + "description": "Изберете предпочитано микрофонно устройство", + "placeholder": "Изберете микрофон...", + "loading": "Зареждане..." + }, + "audioFeedback": { + "label": "Звукова обратна връзка", + "description": "Възпроизвеждане на звук при старт и край на записа" + }, + "outputDevice": { + "title": "Изходно устройство", + "description": "Изберете предпочитано изходно аудио устройство за звуци за обратна връзка", + "placeholder": "Изберете изходно устройство...", + "loading": "Зареждане..." + }, + "volume": { + "title": "Сила на звука", + "description": "Регулирайте силата на звуците за обратна връзка" + } + }, + "advanced": { + "title": "Разширени", + "groups": { + "app": "Приложение", + "output": "Изход", + "transcription": "Транскрипция", + "history": "История", + "experimental": "Експериментални" + }, + "experimentalToggle": { + "label": "Експериментални функции", + "description": "Включване на експериментални функции, които са още в разработка." + }, + "lazyStreamClose": { + "label": "Държане на микрофона отворен между транскрипции", + "description": "Държи потокът от микрофона отворен 30 секунди след спиране на записа, което намалява забавянето при поредни транскрипции. Може да влоши качеството на Bluetooth аудио, докато е активно." + }, + "acceleration": { + "whisper": { + "title": "Ускорение за Whisper", + "description": "Хардуерно ускорение за моделите Whisper. „Автоматично“ използва GPU при наличност (Metal на macOS, Vulkan на Windows/Linux)." + }, + "ort": { + "title": "Ускорение за ONNX", + "description": "Хардуерно ускорение за ONNX модели (Parakeet, Canary, Moonshine и др.). DirectML на Windows е експериментален. Моделите може да не транскрибират." + } + }, + "startHidden": { + "label": "Стартиране скрито", + "description": "Стартиране в системната област без отваряне на прозореца." + }, + "autostart": { + "label": "Стартиране със системата", + "description": "Автоматично стартиране на Handy при влизане в профила ви." + }, + "showTrayIcon": { + "label": "Икона в системната област", + "description": "Показване на иконата на Handy в системната област." + }, + "overlay": { + "title": "Позиция на наслагването", + "description": "Показване на визуална обратна връзка при запис и транскрипция. На Linux се препоръчва „Няма“.", + "options": { + "none": "Няма", + "bottom": "Долу", + "top": "Горе" + } + }, + "pasteMethod": { + "title": "Начин на поставяне", + "description": "Изберете как се вмъква текстът. Директно: симулира писане чрез системния вход. Няма: пропуска поставянето, актуализира само историята/клипборда.", + "options": { + "clipboard": "Клипборд ({{modifier}}+V)", + "clipboardCtrlShiftV": "Клипборд (Ctrl+Shift+V)", + "clipboardShiftInsert": "Клипборд (Shift+Insert)", + "direct": "Директно", + "none": "Няма", + "externalScript": "Външен скрипт" + }, + "externalScriptPlaceholder": "/път/към/вашия/script.sh" + }, + "typingTool": { + "title": "Инструмент за писане", + "description": "Изберете кой Linux инструмент за писане да се използва при директно поставяне. „Автоматично“ открива и използва най-подходящия за вашата система.", + "options": { + "auto": "Автоматично (препоръчително)" + } + }, + "clipboardHandling": { + "title": "Работа с клипборда", + "description": "„Без промяна на клипборда“ запазва съдържанието на клипборда след транскрипция. „Копиране в клипборда“ оставя резултата в клипборда след поставяне.", + "options": { + "dontModify": "Без промяна на клипборда", + "copyToClipboard": "Копиране в клипборда" + } + }, + "autoSubmit": { + "title": "Автоматично изпращане", + "description": "Автоматично изпращане на избраната клавишна комбинация след вмъкване на текста. Cmd+Enter важи за macOS, а Windows/Linux използват Super+Enter.", + "options": { + "off": "Изкл.", + "enter": "Enter", + "cmdEnter": "Cmd+Enter", + "superEnter": "Super+Enter", + "ctrlEnter": "Ctrl+Enter" + } + }, + "translateToEnglish": { + "label": "Превод на английски", + "description": "Автоматичен превод на реч от други езици на английски по време на транскрипция.", + "descriptionUnsupported": "Моделът {{model}} не поддържа превод." + }, + "modelUnload": { + "title": "Разтоварване на модела", + "description": "Автоматично освобождаване на памет на GPU/CPU, ако моделът не е използван за зададеното време", + "options": { + "never": "Никога", + "immediately": "Веднага", + "min2": "След 2 минути", + "min5": "След 5 минути", + "min10": "След 10 минути", + "min15": "След 15 минути", + "hour1": "След 1 час", + "sec15": "След 15 секунди (отстраняване)" + } + }, + "customWords": { + "title": "Персонализирани думи", + "description": "Добавете думи, които често се чуват или изписват грешно при транскрипция. Системата автоматично ще коригира близки по звучене думи според вашия списък.", + "placeholder": "Добавете дума", + "add": "Добавяне", + "remove": "Премахване на {{word}}", + "duplicate": "„{{word}}“ вече съществува" + } + }, + "postProcessing": { + "title": "Постобработка", + "hotkey": { + "title": "Бърз клавиш" + }, + "api": { + "title": "API (съвместим с OpenAI)", + "provider": { + "title": "Доставчик", + "description": "Изберете доставчик, съвместим с OpenAI." + }, + "appleIntelligence": { + "title": "Apple Intelligence", + "description": "Работи изцяло на устройството. Не са нужни API ключ или мрежов достъп.", + "requirements": "Изисква Mac с Apple Silicon и macOS Tahoe (26.0) или по-нова. Apple Intelligence трябва да е включена в Системните настройки.", + "unavailable": "Apple Intelligence не е налична на това устройство. Необходим е Mac с Apple Silicon и macOS Tahoe (26.0) или по-нова с включена Apple Intelligence в Системните настройки." + }, + "baseUrl": { + "title": "Базов URL", + "description": "Базов API URL за избрания доставчик. Редактируем е само при персонализиран доставчик.", + "placeholder": "https://api.openai.com/v1" + }, + "apiKey": { + "title": "API ключ", + "description": "API ключ за избрания доставчик.", + "placeholder": "sk-..." + }, + "model": { + "title": "Модел", + "descriptionApple": "Задайте по избор числен лимит на токени или запазете стандартната настройка на устройството.", + "descriptionCustom": "Въведете идентификатора на модела, очакван от вашия персонализиран краен адрес.", + "descriptionDefault": "Изберете модел, предлаган от избрания доставчик.", + "placeholderApple": "Apple Intelligence", + "placeholderWithOptions": "Търсене или избор на модел", + "placeholderNoOptions": "Въведете име на модел", + "refreshModels": "Опресняване на моделите" + } + }, + "prompts": { + "title": "Подкана", + "selectedPrompt": { + "title": "Избрана подкана", + "description": "Изберете шаблон за подобряване на транскрипции или създайте нов. Използвайте ${output} в текста на подканата, за да препратите към уловения транскрипт." + }, + "noPrompts": "Няма налични подкани", + "selectPrompt": "Изберете подкана", + "createNew": "Нова подкана", + "promptLabel": "Етикет на подканата", + "promptLabelPlaceholder": "Въведете име на подканата", + "promptInstructions": "Инструкции за подканата", + "promptInstructionsPlaceholder": "Напишете инструкциите за изпълнение след транскрипция. Пример: Подобрете граматиката и яснотата на следния текст: ${output}", + "promptTip": "Съвет: Използвайте ${output}, за да вмъкнете транскрибирания текст в подканата.", + "updatePrompt": "Обновяване на подканата", + "deletePrompt": "Изтриване на подканата", + "createPrompt": "Създаване на подкана", + "cancel": "Отказ", + "selectToEdit": "Изберете подкана по-горе, за да видите и редактирате подробностите ѝ.", + "createFirst": "Натиснете „Нова подкана“ по-горе, за да създадете първата си подкана за постобработка." + } + }, + "history": { + "title": "История", + "openFolder": "Отваряне на папката с записи", + "loading": "Зареждане на историята...", + "empty": "Все още няма транскрипции. Започнете запис, за да изградите история!", + "copyToClipboard": "Копиране на транскрипцията в клипборда", + "save": "Запазване на транскрипцията", + "unsave": "Премахване от запазените", + "delete": "Изтриване на записа", + "deleteError": "Изтриването на записа не бе успешно. Опитайте отново.", + "retranscribe": "Повторна транскрипция", + "retranscribeError": "Повторната транскрипция не бе успешна. Опитайте отново.", + "transcribing": "Транскрибиране...", + "transcriptionFailed": "Транскрипцията не бе успешна. Можете да опитате отново с иконата за повторен опит." + }, + "debug": { + "title": "Отстраняване", + "logDirectory": { + "title": "Папка с логове", + "description": "Мястото, където се съхраняват лог файловете" + }, + "logLevel": { + "title": "Ниво на логване", + "description": "Задаване на подробността на логовете" + }, + "updateChecks": { + "label": "Проверка за актуализации", + "description": "Автоматична проверка за нови версии на Handy" + }, + "soundTheme": { + "label": "Звукова тема", + "description": "Избор на звукова тема за сигнал при старт и край на записа" + }, + "wordCorrectionThreshold": { + "title": "Праг за корекция на думи", + "description": "Чувствителност при корекция на персонализирани думи" + }, + "historyLimit": { + "title": "Лимит на историята", + "description": "Максимален брой записи в историята за пазене", + "entries": "записа" + }, + "recordingRetention": { + "title": "Автоматично изтриване на записи", + "description": "Автоматично изтриване на стари записи за пестене на място", + "never": "Никога", + "preserveLimit": "Запазване на последните {{count}}", + "days3": "След 3 дни", + "weeks2": "След 2 седмици", + "months3": "След 3 месеца", + "placeholder": "Изберете период на съхранение..." + }, + "alwaysOnMicrophone": { + "label": "Постоянно активен микрофон", + "description": "Държане на микрофона активен за по-бърз отговор" + }, + "clamshellMicrophone": { + "title": "Микрофон при затворен капак", + "description": "Микрофон за използване, когато капакът на лаптопа е затворен" + }, + "postProcessingToggle": { + "label": "Постобработка", + "description": "Включване на подобряване на текста с ИИ след транскрипция" + }, + "muteWhileRecording": { + "label": "Заглушаване при запис", + "description": "Заглушаване на системния звук по време на запис" + }, + "appendTrailingSpace": { + "label": "Интервал в края", + "description": "Добавяне на интервал след поставената транскрипция" + }, + "keyboardImplementation": { + "title": "Реализация на клавиатурата", + "description": "Избор на бекенд за глобалните бързи клавиши.", + "bindingsReset": "Бързите клавиши бяха несъвместими и са нулирани към подразбираните" + }, + "paths": { + "appData": "Данни на приложението:", + "models": "Модели:", + "settings": "Настройки:" + }, + "pasteDelay": { + "title": "Забавяне при поставяне", + "description": "Забавяне преди симулацията на поставяне (в милисекунди). Увеличете, ако се поставя грешен текст." + }, + "recordingBuffer": { + "title": "Допълнителен буфер на записа", + "description": "Допълнително време (в милисекунди) за запис след пускане на клавиша, за да се улови краят на аудиото. 0 = без допълнителен буфер." + } + }, + "about": { + "title": "За приложението", + "version": { + "title": "Версия", + "description": "Текуща версия на Handy" + }, + "appDataDirectory": { + "title": "Папка с данни на приложението", + "description": "Мястото, където Handy съхранява данните си" + }, + "sourceCode": { + "title": "Изходен код", + "description": "Преглед на изходния код и принос", + "button": "Вижте в GitHub" + }, + "supportDevelopment": { + "title": "Подкрепете разработката", + "description": "Помогнете ни да продължим да развиваме Handy", + "button": "Дарение" + }, + "acknowledgments": { + "title": "Благодарности", + "whisper": { + "title": "Whisper.cpp", + "description": "Високопроизводително изпълнение на автоматичния модел за разпознаване на реч Whisper на OpenAI", + "details": "Handy използва Whisper.cpp за бързо локално реч-към-текст. Благодарности на Georgi Gerganov и сътрудниците за отличната работа." + } + } + } + }, + "footer": { + "downloadingModel": "Изтегляне на {{model}}...", + "checkingUpdates": "Проверка за актуализации...", + "updateAvailable": "Налична актуализация: {{version}}", + "updateAvailableShort": "Налична актуализация", + "upToDate": "Актуална версия", + "downloadUpdate": "Изтегляне на актуализацията", + "restart": "Рестартиране", + "updateCheckingDisabled": "Проверката за актуализации е изключена", + "downloading": "Изтегля се... {{progress}}%", + "installing": "Инсталиране...", + "preparing": "Подготовка...", + "checkForUpdates": "Проверка за актуализации" + }, + "common": { + "loading": "Зареждане...", + "save": "Запазване", + "cancel": "Отказ", + "reset": "Нулиране", + "add": "Добавяне", + "remove": "Премахване", + "delete": "Изтриване", + "edit": "Редактиране", + "create": "Създаване", + "update": "Обновяване", + "close": "Затваряне", + "open": "Отваряне", + "default": "По подразбиране", + "enabled": "Включено", + "disabled": "Изключено", + "on": "Вкл.", + "off": "Изкл.", + "yes": "Да", + "no": "Не", + "noOptionsFound": "Няма намерени опции" + }, + "accessibility": { + "permissionsRequired": "Необходими са разрешения за достъпност", + "permissionsDescription": "Handy се нуждае от разрешения за достъпност, за да въвежда транскрибирания текст.", + "openSettings": "Отваряне на системните настройки", + "dismiss": "Затваряне" + }, + "errors": { + "loadDirectory": "Грешка при зареждане на папката: {{error}}", + "micPermissionDeniedTitle": "Достъпът до микрофона е отказан", + "micPermissionDenied": { + "generic": "Операционната система отказа достъп до микрофона. Моля, дайте разрешение за микрофон в системните настройки.", + "windows": "Включете достъп до микрофона в Настройки → Поверителност и сигурност → Микрофон (включително за настолни приложения).", + "macos": "Дайте достъп до микрофона в Системни настройки → Поверителност и сигурност → Микрофон.", + "linux": "Дайте достъп до микрофона в настройките за звук или поверителност на системата." + }, + "noInputDeviceTitle": "Не е намерен микрофон", + "noInputDevice": "Не е открито аудио входно устройство. Свържете микрофон или слушалки и опитайте отново.", + "recordingFailed": "Стартирането на записа не бе успешно: {{error}}", + "modelLoadFailed": "Зареждането на модела не бе успешно: {{model}}", + "modelLoadFailedUnknown": "неизвестен модел" + }, + "appLanguage": { + "title": "Език на приложението", + "description": "Промяна на езика на интерфейса на Handy" + }, + "overlay": { + "transcribing": "Транскрибиране...", + "processing": "Обработка..." + } +}