Add Russian language (#474)

* Add Russian language

* Add Russian language

* Clean up hidden Unicode characters in Russian translation

* add languages.ts

* add some missing translations

---------

Co-authored-by: CJ Pais <cj@cjpais.com>
This commit is contained in:
Скляров Артем 2025-12-27 06:11:24 +03:00 committed by GitHub
parent d06d318a66
commit b55c3fddde
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 426 additions and 3 deletions

View file

@ -19,4 +19,5 @@ export const LANGUAGE_METADATA: Record<
vi: { name: "Vietnamese", nativeName: "Tiếng Việt", priority: 7 },
pl: { name: "Polish", nativeName: "Polski", priority: 8 },
it: { name: "Italian", nativeName: "Italiano", priority: 9 },
ru: { name: "Russian", nativeName: "Русский", priority: 10 },
};

View file

@ -295,7 +295,8 @@
},
"historyLimit": {
"title": "Límite de Historial",
"description": "Número máximo de entradas de historial a conservar"
"description": "Número máximo de entradas de historial a conservar",
"entries": "entradas"
},
"recordingRetention": {
"title": "Eliminación automática de grabaciones",

View file

@ -296,7 +296,8 @@
},
"historyLimit": {
"title": "Limite d'historique",
"description": "Nombre maximum d'entrées d'historique à conserver"
"description": "Nombre maximum d'entrées d'historique à conserver",
"entries": "entrées"
},
"recordingRetention": {
"title": "Suppression automatique des enregistrements",

View file

@ -0,0 +1,419 @@
{
"tray": {
"settings": "Настройки...",
"checkUpdates": "Проверить обновления...",
"quit": "Выход",
"cancel": "Отмена"
},
"sidebar": {
"general": "Общие",
"advanced": "Продвинутые",
"postProcessing": "Постобработка",
"history": "История",
"debug": "Отладка",
"about": "О программе"
},
"onboarding": {
"subtitle": "Для начала выберите модель транскрипции",
"recommended": "Рекомендуется",
"download": "Скачать",
"downloading": "Загрузка...",
"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": "Быстро и точно"
}
},
"errors": {
"loadModels": "Не удалось загрузить доступные модели.",
"downloadModel": "Не удалось загрузить модель: {{error}}."
}
},
"modelSelector": {
"welcome": "Добро пожаловать в Handy!",
"downloadPrompt": "Загрузите модель ниже, чтобы начать транскрипцию.",
"availableModels": "Доступные модели",
"downloadModels": "Скачать модели",
"chooseModel": "Выберите модель",
"active": "Активный",
"download": "Скачать",
"downloadSize": "Размер загрузки",
"noModelsAvailable": "Нет доступных моделей",
"extracting": "Извлечение {{modelName}}...",
"extractingMultiple": "Извлечение моделей {{count}}...",
"extractingGeneric": "Извлечение...",
"downloading": "Загрузка {{percentage}} %",
"downloadingMultiple": "Загрузка моделей {{count}}...",
"modelReady": "Модель готова",
"loading": "Загрузка {{modelName}}...",
"loadingGeneric": "Загрузка...",
"modelError": "Ошибка модели",
"modelUnloaded": "Модель выгружена",
"noModelDownloadRequired": "Нет модели требуется загрузка",
"deleteModel": "Удалить {{modelName}}"
},
"settings": {
"general": {
"title": "Общие",
"shortcut": {
"title": "Ярлыки Handy",
"description": "Настройте сочетания клавиш для запуска записи речи в текст",
"loading": "Загрузка ярлыков...",
"none": "Ярлыки не настроены",
"notFound": "Ярлык не найден",
"pressKeys": "Нажимайте клавиши...",
"bindings": {
"transcribe": {
"name": "Расшифровать",
"description": "Преобразует вашу речь в текст."
},
"cancel": {
"name": "Отмена",
"description": "Отменяет текущую запись."
}
},
"errors": {
"restore": "Не удалось восстановить исходный ярлык",
"set": "Не удалось установить ярлык: {{error}}",
"reset": "Не удалось сбросить ярлык до исходного значения"
}
},
"language": {
"title": "Язык",
"description": "Выберите язык для распознавания речи. «Авто» автоматически определит язык, а выбор конкретного языка может повысить точность определения этого языка.",
"descriptionUnsupported": "Модель Parakeet автоматически определяет язык. Ручной выбор не требуется.",
"searchPlaceholder": "Поиск языков...",
"noResults": "Языки не найдены",
"auto": "Авто"
},
"pushToTalk": {
"label": "Нажми и говори",
"description": "Удерживайте, чтобы записать, отпустите, чтобы остановить"
}
},
"sound": {
"title": "Звук",
"microphone": {
"title": "Микрофон",
"description": "Выберите предпочитаемое микрофонное устройство",
"placeholder": "Выбрать микрофон...",
"loading": "Загрузка..."
},
"audioFeedback": {
"label": "Аудио обратная связь",
"description": "Воспроизведение звука при запуске и остановке записи"
},
"outputDevice": {
"title": "Устройство вывода",
"description": "Выберите предпочитаемое устройство вывода звука для звуков обратной связи",
"placeholder": "Выберите устройство вывода...",
"loading": "Загрузка..."
},
"volume": {
"title": "Объем",
"description": "Отрегулируйте громкость звуков звуковой обратной связи"
}
},
"advanced": {
"title": "Продвинутые",
"startHidden": {
"label": "Запускать скрыто",
"description": "Запускать в системный трей, не открывая окно."
},
"autostart": {
"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": "Нет"
}
},
"clipboardHandling": {
"title": "Обработка буфера обмена",
"description": "Функция «Не изменять буфер обмена» сохраняет текущее содержимое буфера обмена после транскрипции. Копировать в буфер обмена оставляет результат транскрипции в буфере обмена после вставки.",
"options": {
"dontModify": "Не изменять буфер обмена",
"copyToClipboard": "Копировать в буфер обмена"
}
},
"translateToEnglish": {
"label": "Перевести на английский",
"description": "Автоматически переводить речь с других языков на английский во время транскрипции.",
"descriptionUnsupported": "Перевод не поддерживается моделью {{model}}."
},
"modelUnload": {
"title": "Выгрузить модель",
"description": "Автоматически освобождать память графического процессора/процессора, если модель не использовалась в течение указанного времени.",
"options": {
"never": "Никогда",
"immediately": "Немедленно",
"min2": "Через 2 минуты",
"min5": "Через 5 минут",
"min10": "Через 10 минут",
"min15": "Через 15 минут",
"hour1": "Через 1 час",
"sec5": "Через 5 секунд (отладка)"
}
},
"customWords": {
"title": "Пользовательские слова",
"description": "Добавить слова, которые часто неправильно слышатся или пишутся с ошибками во время транскрипции. Система автоматически исправит похожие по звучанию слова, чтобы они соответствовали вашему списку.",
"placeholder": "Добавить слово",
"add": "Добавлять",
"remove": "Удалить {{word}}"
}
},
"postProcessing": {
"title": "Постобработка",
"disabledNotice": "Постобработка в настоящее время отключена. Включите его в настройках отладки для настройки.",
"api": {
"title": "API (совместимый с OpenAI)",
"provider": {
"title": "Поставщик",
"description": "Выберите поставщика, совместимого с OpenAI."
},
"appleIntelligence": {
"title": "Apple Интеллект",
"description": "Полностью работает на устройстве. Никакой ключ API или доступ к сети не требуется.",
"requirements": "Требуется Apple Silicon Mac под управлением macOS Tahoe (26.0) или более поздней версии. Apple Intelligence должен быть включен в настройках системы."
},
"baseUrl": {
"title": "Базовый URL",
"description": "Базовый URL-адрес API для выбранного провайдера. Редактировать можно только настраиваемого поставщика.",
"placeholder": "https://api.openai.com/v1"
},
"apiKey": {
"title": "API-ключ",
"description": "API-ключ для выбранного провайдера.",
"placeholder": "sk-..."
},
"model": {
"title": "Модель",
"descriptionApple": "Укажите дополнительный числовой лимит токенов или сохраните настройки по умолчанию, установленные на устройстве.",
"descriptionCustom": "Укажите идентификатор модели, ожидаемый вашей пользовательской конечной точкой.",
"descriptionDefault": "Выберите модель, предоставляемую выбранным поставщиком.",
"placeholderApple": "Apple Интеллект",
"placeholderWithOptions": "Найдите или выберите модель",
"placeholderNoOptions": "Введите название модели",
"refreshModels": "Обновить модели"
}
},
"prompts": {
"title": "Быстрый",
"selectedPrompt": {
"title": "Выбранная подсказка",
"description": "Выберите шаблон для уточнения транскрипции или создайте новый. Используйте ${output} внутри текста приглашения для ссылки на записанную стенограмму."
},
"noPrompts": "Нет доступных подсказок",
"selectPrompt": "Выберите подсказку",
"createNew": "Создать новую подсказку",
"promptLabel": "Подскажите этикетку",
"promptLabelPlaceholder": "Введите имя подсказки",
"promptInstructions": "Оперативная инструкция",
"promptInstructionsPlaceholder": "Напишите инструкции для запуска после транскрипции. Пример. Улучшите грамматику и ясность следующего текста: ${output}",
"promptTip": "Совет. Используйте <code>${output}</code>, чтобы вставить расшифрованный текст в приглашение.",
"updatePrompt": "Обновить запрос",
"deletePrompt": "Удалить подсказку",
"createPrompt": "Создать подсказку",
"cancel": "Отмена",
"selectToEdit": "Выберите приглашение выше, чтобы просмотреть и изменить его сведения.",
"createFirst": "Нажмите «Создать новое приглашение» выше, чтобы создать первое приглашение для постобработки."
}
},
"history": {
"title": "История",
"openFolder": "Открыть папку с записями",
"loading": "Загрузка истории...",
"empty": "Транскрипций пока нет. Начните запись, чтобы создать свою историю!",
"copyToClipboard": "Скопировать транскрипцию в буфер обмена",
"save": "Сохранить транскрипцию",
"unsave": "Удалить из сохраненных",
"delete": "Удалить запись",
"deleteError": "Не удалось удалить запись. Пожалуйста, попробуйте еще раз."
},
"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": "Добавить пробел после вставленной транскрипции"
},
"paths": {
"appData": "Данные приложения:",
"models": "Модели:",
"settings": "Настройки:"
}
},
"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": "Высокопроизводительный вывод модели автоматического распознавания речи OpenAI Whisper",
"details": "Handy использует Whisper.cpp для быстрой локальной обработки речи в текст. Спасибо великолепной работе Георгия Герганова и его участников."
}
}
}
},
"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}}."
},
"appLanguage": {
"title": "Язык приложения",
"description": "Изменить языка интерфейса Handy"
},
"overlay": {
"transcribing": "Расшифровка..."
}
}

View file

@ -296,7 +296,8 @@
},
"historyLimit": {
"title": "Giới hạn lịch sử",
"description": "Số lượng mục lịch sử tối đa cần giữ"
"description": "Số lượng mục lịch sử tối đa cần giữ",
"entries": "mục"
},
"recordingRetention": {
"title": "Tự động xóa ghi âm",