Files
Firelink/src/i18n/catalogs/ru.ts
T
NimBold 4e3ceb21a5 feat(ui): add cross-platform window control styles
Persist automatic and explicit macOS, Windows, GNOME, and minimal control presets with localized settings and platform-aware fallback.

Refs #31
2026-07-23 16:25:39 +03:30

796 lines
60 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const ru = {
navigation: {
library: 'Библиотека',
filters: {
all: 'Все',
active: 'Активные',
completed: 'Завершённые',
unfinished: 'Незавершённые',
},
categories: {
musics: 'Музыка',
movies: 'Фильмы',
compressed: 'Архивы',
documents: 'Документы',
pictures: 'Изображения',
applications: 'Программы',
other: 'Другое',
},
folders: 'Папки',
queues: 'Очереди',
tools: 'Инструменты',
scheduler: 'Планировщик',
speedLimiter: 'Ограничение скорости',
logs: 'Журнал',
settings: 'Настройки',
},
actions: {
hideSidebar: 'Скрыть боковую панель',
showSidebar: 'Показать боковую панель',
resizeSidebar: 'Изменить размер боковой панели',
cancel: 'Отмена',
continue: 'Продолжить',
dismissNotification: 'Закрыть уведомление',
queueName: 'Название очереди',
addNewQueue: 'Добавить новую очередь',
startQueue: 'Запустить очередь',
pauseQueue: 'Приостановить очередь',
renameQueue: 'Переименовать очередь',
deleteQueue: 'Удалить очередь',
},
dialogs: {
errorBoundary: {
title: 'Что-то пошло не так.',
description: 'Произошла критическая ошибка в дереве компонентов React. Сведения об ошибке ниже помогут определить её причину.',
reload: 'Перезапустить приложение',
},
duplicateDownloads: {
title: 'Обнаружены дубликаты загрузок',
description: 'Некоторые из добавляемых загрузок уже есть в очереди или на диске. Выберите способ разрешения конфликтов.',
rename: 'Переименовать',
replace: 'Заменить',
skip: 'Пропустить',
},
removeDownload: {
title: 'Удалить загрузку',
confirmationSingle: 'Вы действительно хотите удалить этот элемент из списка? Вы также можете удалить файл с диска.',
confirmationMultiple: 'Вы действительно хотите удалить выбранные элементы ({{count}}) из списка? Вы также можете удалить файлы с диска.',
errorSummary: 'Удалено {{succeeded}}, с ошибкой {{failed}}: {{detail}}',
remove: 'Удалить',
deleteFile: 'Удалить файл',
},
},
window: {
controls: 'Управление окном',
close: 'Закрыть',
minimize: 'Свернуть',
maximize: 'Развернуть',
},
downloads: {
actions: {
moveUp: 'Переместить вверх',
moveDown: 'Переместить вниз',
pause: 'Приостановить',
start: 'Запустить',
resume: 'Возобновить',
options: 'Параметры',
},
size: {
downloadedOf: 'Загружено {{downloaded}} из {{total}} {{unit}}',
downloadedOfApproximate: 'Загружено {{downloaded}} из примерно {{total}} {{unit}}',
},
status: {
ready: 'Готово',
staged: 'В очереди',
queued: 'В очереди',
downloading: 'Загрузка',
processing: 'Обработка',
paused: 'Приостановлено',
completed: 'Завершено',
failed: 'Ошибка',
retrying: 'Повторная попытка',
},
values: {
processing: 'Обработка…',
muxing: 'Мультиплексирование…',
},
},
speedLimiter: {
title: 'Ограничение скорости',
unlimited: 'Без ограничений',
saveLimit: 'Сохранить ограничение',
globalSpeedLimit: 'Общее ограничение скорости',
description: 'Применяется к новым и активным загрузкам aria2 и новым загрузкам медиа yt-dlp. Индивидуальные ограничения для отдельных загрузок сохраняются.',
quickPresets: 'Быстрые пресеты',
removePreset: 'Удалить пресет {{value}} {{unit}}',
customPresetIn: 'Пользовательский пресет ({{unit}})',
addQuickPreset: 'Добавить быстрый пресет',
globalLimitSaved: 'Общее ограничение сохранено: {{value}} {{unit}}',
globalLimitDisabled: 'Общее ограничение скорости отключено',
saveFailed: 'Не удалось сохранить общее ограничение скорости: {{detail}}',
presetAlreadyExists: 'Пресет {{value}} {{unit}} уже есть в быстрых пресетах',
presetAdded: 'Добавлен быстрый пресет {{value}} {{unit}}',
presetRemoved: 'Удалён быстрый пресет {{value}} {{unit}}',
},
logs: {
title: 'Журнал',
entries: '({{count}} записей)',
collecting: 'Сбор',
off: 'Выкл.',
allLevels: 'Все уровни',
levels: {
error: 'Ошибка',
warn: 'Предупреждение',
info: 'Информация',
debug: 'Отладка',
trace: 'Трассировка',
},
pauseLogging: 'Приостановить ведение журнала',
enableLogging: 'Включить ведение журнала',
clearDisplayed: 'Очистить отображаемый журнал',
export: 'Экспорт журнала',
exportButton: 'Экспортировать журнал',
logFiles: 'Файлы журнала',
localDiagnostics: 'Локальная диагностика:',
diagnosticsDescription: 'Сбор диагностики выполняется по желанию, ограничен по объёму и хранится локально. Конфиденциальные данные, параметры URL и пути к домашней папке скрываются при отображении и экспорте. Никакие данные не отправляются автоматически.',
noEntries: 'Сохранённых записей журнала пока нет.',
disabledDescription: 'Ведение журнала диагностики отключено. Существующие логи поддержки появятся здесь при наличии.',
copy: 'Копировать',
copied: 'Скопировано в буфер обмена',
copyFailed: 'Не удалось скопировать в буфер обмена',
exported: 'Журнал диагностики экспортирован',
exportFailed: 'Не удалось экспортировать журнал: {{detail}}',
cleared: 'Журнал очищен',
clearFailed: 'Не удалось очистить журнал: {{detail}}',
enabled: 'Ведение журнала диагностики включено',
disabled: 'Ведение журнала диагностики отключено',
updateFailed: 'Не удалось обновить ведение журнала диагностики: {{detail}}',
},
scheduler: {
title: 'Планировщик',
running: 'Работает',
disabled: 'Планировщик отключён',
noScheduledDay: 'Дни выполнения не выбраны',
unsavedChanges: 'Несохранённые изменения',
runNow: 'Запустить сейчас',
pause: 'Приостановить',
saveSettings: 'Сохранить настройки',
timing: 'Расписание',
startTime: 'Время начала',
stopTime: 'Время окончания',
timingDescription: 'Если Firelink находится в спящем режиме во время запуска, он запустит выбранные очереди после пробуждения в этот же день, если время окончания ещё не наступило.',
runEveryDay: 'Запускать каждый день',
queuesToSchedule: 'Очереди для запуска',
defaultQueue: 'Очередь по умолчанию',
afterCompletion: 'После завершения',
afterCompletionDescription: 'Выберите действие после завершения загрузок, запущенных планировщиком.',
actionWarning: 'Это действие может прервать работу других программ на компьютере. Firelink выполнит его сразу после завершения запланированной очереди.',
systemPermissions: 'Системные разрешения',
macPermissionDescription: 'Для перехода в спящий режим, перезагрузки и выключения требуется разрешение macOS «Автоматизация» для System Events.',
permissionGranted: 'Разрешение «Автоматизация» предоставлено',
permissionChecking: 'Проверка разрешения «Автоматизация»…',
permissionMissing: 'Отсутствует разрешение «Автоматизация»',
revokePermission: 'Отозвать разрешение',
grantPermission: 'Предоставить разрешение',
permissionAvailable: 'Разрешение «Автоматизация» доступно.',
permissionMissingDetails: 'Отсутствует разрешение «Автоматизация». В Системных настройках откройте раздел «Автоматизация» для System Events и включите Firelink.',
revokePermissionDetails: 'macOS не позволяет отзывать разрешение «Автоматизация» напрямую из Firelink. Отключите доступ Firelink к System Events в Системных настройках, затем вернитесь в Firelink.',
requestingPermission: 'Запрос разрешения «Автоматизация»…',
enablePermissionDetails: 'В Системных настройках откройте раздел «Автоматизация» для System Events и включите Firelink, затем вернитесь в Firelink.',
systemActions: 'Системные действия',
windowsActionsDescription: 'Спящий режим, перезагрузка и выключение используют системные привилегии Windows. Firelink сообщит о любых отклонённых действиях при их запуске; постоянное разрешение заранее не запрашивается.',
linuxActionsDescription: 'Спящий режим, перезагрузка и выключение используют системную политику и рабочий стол Linux. Firelink сообщит о любых отклонённых действиях при их запуске; постоянное разрешение заранее не запрашивается.',
validationDay: 'Выберите хотя бы один день для планировщика',
validationQueue: 'Выберите хотя бы одну очередь для планировщика',
validationStopTime: 'Время окончания должно быть позже времени начала',
saved: 'Настройки планировщика сохранены',
trackingOne: 'Отслеживается 1 запланированная загрузка',
trackingMany: 'Отслеживается {{count}} запланированных загрузок',
noStartableDownloads: 'В выбранных очередях нет загрузок, которые можно запустить',
pausedOne: 'Приостановлена 1 активная загрузка',
pausedMany: 'Приостановлено {{count}} активных загрузок',
noActiveDownloads: 'Нет активных загрузок',
days: {
su: 'Вс',
mo: 'Пн',
tu: 'Вт',
we: 'Ср',
th: 'Чт',
fr: 'Пт',
sa: 'Сб',
},
postActions: {
none: 'Ничего не делать',
sleep: 'Спящий режим',
restart: 'Перезагрузка',
shutdown: 'Завершение работы',
},
},
properties: {
progress: 'Прогресс',
size: 'Размер',
speed: 'Скорость',
eta: 'Осталось',
connections: 'Соединения',
connectionCount: '{{active}}/{{total}} активных',
connectionCountUnknown: '—/{{total}} активных',
connectionsUnavailable: '—',
speedCap: 'Ограничение скорости',
liveSpeedLimit: 'Текущее ограничение скорости',
liveSpeedLimitHint: 'Применяется только к активным обычным загрузкам. Скорость медиазагрузок нельзя изменить во время работы.',
liveSpeedLimitPlaceholder: 'например, 1024K',
liveSpeedLimitApply: 'Применить',
liveSpeedLimitClear: 'Очистить',
liveSpeedLimitFailed: 'Не удалось обновить текущее ограничение скорости: {{detail}}',
liveSpeedLimitUnavailable: 'Изменение скорости медиазагрузок во время работы недоступно.',
category: 'Категория',
lastTry: 'Последняя попытка',
dateAdded: 'Дата добавления',
destination: 'Папка назначения',
lastError: 'Последняя ошибка',
saved: ' (сохранено)',
defaultValue: ' (по умолчанию)',
savedTooltip: 'Сохранено для этой загрузки. Изменения в Настройках будут применяться к новым загрузкам.',
defaultTooltip: 'Используется текущее значение по умолчанию для новых загрузок.',
identityReadOnly: 'Идентификация файла доступна только для чтения. Настройки передачи сохранены для повторного скачивания.',
transferSettings: 'Настройки передачи можно изменить после остановки или приостановки. Текущие загрузки сохраняют свои параметры.',
download: 'Загрузка',
url: 'URL',
fileName: 'Имя файла',
saveLocation: 'Место сохранения',
select: 'Выбрать',
perFile: 'на файл',
useCurrentDefault: 'По умолчанию ({{count}})',
savedPerDownload: 'Сохранено для этой загрузки. Значение из Настроек применяется к новым загрузкам.',
limit: 'Ограничение',
siteLogin: 'Авторизация на сайте',
siteLoginRedownload: 'Авторизация для повторного скачивания',
matchingSiteLogin: 'Учётные данные сайта',
customCredentials: 'Пользовательские учётные данные',
noLogin: 'Без авторизации',
useSavedLogin: 'Будет использован сохранённый логин, если он доступен.',
advancedTransfer: 'Дополнительные параметры',
advancedTransferRedownload: 'Дополнительные параметры повторного скачивания',
checksum: 'Контрольная сумма',
verify: 'Проверить',
algorithm: 'Алгоритм',
digest: 'Хеш',
expectedDigest: 'Ожидаемый хеш',
cookies: 'Файлы cookie',
headers: 'Заголовки',
mirrors: 'Зеркала',
username: 'Имя пользователя',
password: 'Пароль',
enterValidUrl: 'Введите корректный URL.',
fileNameEmpty: 'Имя файла не может быть пустым.',
cancel: 'Отмена',
save: 'Сохранить',
},
keychain: {
title: 'Требуется доступ к хранилищу учётных данных',
stores: {
portable: 'портативная папка Firelink',
windows: 'Диспетчер учётных данных Windows',
linux: 'хранилище учётных данных Linux',
macos: 'Связка ключей macOS',
system: 'системное хранилище учётных данных',
siteCredentials: 'системное хранилище учётных данных',
},
grantLabelPortable: 'Продолжить',
grantLabelMacos: 'Предоставить доступ',
grantLabelDefault: 'Включить защищённое хранилище',
description: 'Firelink использует расширение браузера для перехвата загрузок. Чтобы расширение оставалось привязанным после перезапуска, Firelink сохраняет токен сопряжения в {{pairingStore}}. Дополнительные учётные данные сайтов хранятся в {{siteCredentialStore}}.',
portableExplanation: 'Токен сопряжения переносится вместе с этой папкой. Учётные данные сайтов остаются в системном хранилище; после предоставления доступа может появиться системный запрос.',
macosExplanation: 'macOS может показать запрос Связки ключей после предоставления доступа.',
defaultExplanation: 'Обычно это происходит незаметно. Если служба учётных данных недоступна, Firelink покажет ошибку здесь, и расширение останется привязанным только на текущий сеанс.',
note: 'Примечание:',
portableNote: 'В портативном режиме в этой папке сохраняется только токен сопряжения. Пароли сайтов и учётные данные браузера не копируются.',
defaultNote: 'Firelink создаёт только собственную изолированную запись учётных данных. Приложение не имеет доступа к другим сохранённым паролям вашей системы.',
hint: 'Подсказка:',
portableHint: 'Портативный токен сопряжения уже сохранён в этой папке. Вы можете включить его здесь или выбрать «Позже».',
defaultHint: 'Если вы выберете «Позже», расширение будет работать только во время текущего сеанса.',
enableFromSettings: 'Вы можете включить хранилище в любое время в меню «Настройки» > «Интеграции».',
later: 'Позже',
enabling: 'Включение…',
timeout: 'Время ожидания запроса к хранилищу учётных данных истекло. Вы можете выбрать «Позже» и попробовать снова.',
unavailable: 'Хранилище {{store}} недоступно.',
accessRequired: 'Предоставьте доступ к хранилищу учётных данных перед повторной генерацией токена сопряжения.',
storeUnavailable: 'Доступ к хранилищу учётных данных недоступен.',
},
app: {
loading: 'Загрузка…',
settingsSaveFailed: 'Не удалось сохранить настройки. Проверьте разрешения хранилища и попробуйте снова.',
systemActionCountdown: '{{action}} через 10 секунд.',
systemActionCancelled: 'Системное действие отменено, так как есть активная или запланированная загрузка.',
systemActionFailed: 'Не удалось выполнить запланированное системное действие: {{detail}}',
downloadCompleteTitle: 'Загрузка завершена',
downloadCompleteBody: 'Загрузка {{fileName}} завершена.',
unknownFile: 'Файл',
downloadFailedTitle: 'Ошибка загрузки',
downloadFailedBody: 'Не удалось загрузить {{fileName}}.',
initializeDownloadsFailed: 'Не удалось инициализировать сохранённые загрузки: {{detail}}',
extensionDisconnected: 'Расширение браузера отключено, так как его токен сопряжения изменился.',
copyToken: 'Скопировать токен',
integrations: 'Интеграции',
copyTokenFailed: 'Не удалось скопировать токен сопряжения: {{detail}}',
credentialPersistenceFailed: 'Безопасное сохранение учётных данных недоступно. Сопряжение с браузером работает только в текущем сеансе: {{detail}}',
resumeDownloadsFailed: 'Не удалось возобновить сохранённые загрузки: {{detail}}',
updateAvailable: 'Доступна Firelink {{version}}.',
viewRelease: 'Просмотреть релиз',
sleepPreventionFailed: 'Не удалось обновить предотвращение перехода в спящий режим: {{detail}}',
schedulerNoQueues: 'В планировщике не выбраны действительные очереди. Обновите настройки планировщика.',
schedulerPauseOneFailed: 'Планировщик не смог приостановить 1 загрузку.',
schedulerPauseManyFailed: 'Планировщик не смог приостановить {{count}} загрузок.',
scheduledIncomplete: 'Не все запланированные загрузки были завершены. Системное действие после завершения очереди пропущено.',
scheduledActionSkippedActive: 'Запланированное системное действие пропущено, так как есть активная или находящаяся в очереди загрузка.',
notificationsDisabled: 'Системные уведомления отключены для Firelink.',
notificationsFailed: 'Не удалось настроить уведомления: {{detail}}',
},
sidebar: {
deleteQueueConfirm: 'Удалить очередь «{{name}}»? Её незавершённые загрузки будут перемещены в Главную очередь.',
deleteQueueFailed: 'Не удалось удалить очередь: {{detail}}',
queueNameEmpty: 'Название очереди не может быть пустым',
queueNameExists: 'Очередь с таким названием уже существует',
startQueueFailed: 'Не удалось запустить очередь: {{detail}}',
pauseQueueFailed: 'Не удалось приостановить очередь: {{detail}}',
queueConcurrency: 'Одновременные загрузки',
queueConcurrencyGlobal: 'Использовать общий лимит',
queueConcurrencyFailed: 'Не удалось обновить параллельность очереди: {{detail}}',
},
downloadTable: {
unknownQueue: 'Неизвестная очередь',
allDownloads: 'Все загрузки',
active: 'Активные',
completed: 'Завершённые',
unfinished: 'Незавершённые',
headers: {
fileName: 'Имя файла',
size: 'Размер',
status: 'Статус',
speed: 'Скорость',
eta: 'Осталось',
dateAdded: 'Дата добавления',
},
columnOptions: {
open: 'Параметры столбца «{{column}}»',
dragToReorder: 'Перетащите для изменения порядка столбцов',
alignContent: 'Выравнивание содержимого',
left: 'По левому краю',
center: 'По центру',
right: 'По правому краю',
resetLayout: 'Сбросить макет столбцов',
},
addDownload: 'Добавить загрузку',
resumeAll: 'Возобновить все',
pauseAll: 'Приостановить все',
summary: {
items: '{{count}} элементов',
selected: 'Выбрано: {{count}}',
downloaded: 'Загружено',
remaining: 'Осталось',
active: 'Активные',
unknown: 'Неизвестно',
estimated: 'Около {{value}}',
},
queueEmpty: 'Очередь пуста',
noCompletedDownloads: 'Нет завершённых загрузок',
noDownloads: 'Нет загрузок',
queueEmptyDescription: 'Добавьте загрузки в эту очередь из меню элемента или окна добавления.',
completedDescription: 'Завершённые загрузки будут отображаться здесь.',
clickToAdd: 'Нажмите кнопку',
addButtonOr: 'или',
toAddDownloads: 'чтобы добавить загрузки',
queueReorderHint: 'Перетаскивайте строки, чтобы изменить порядок, или используйте горячие клавиши:',
queueReorderShortcut: '{{key}} + стрелка вверх/вниз перемещает сфокусированную строку',
queuePriorityControls: 'Переместить выбранные загрузки в очереди',
queueDragHandle: 'Перетащите {{fileName}} для изменения порядка',
queueReorderFailed: 'Не удалось изменить порядок загрузок',
nonResumableOne: '1 загрузка не поддерживает возобновление. Если вы приостановите её, позже придётся начинать скачивание заново. Вы действительно хотите приостановить?',
nonResumableMany: '{{count}} загрузок не поддерживают возобновление. Если вы приостановите их, позже придётся начинать скачивание заново. Вы действительно хотите приостановить?',
interactionError: '{{message}}: {{detail}}',
openFileFailed: 'Не удалось открыть скачанный файл',
revealFileFailed: 'Не удалось показать файл в Finder',
pauseFailed: 'Не удалось приостановить загрузку',
resumeFailed: 'Не удалось возобновить {{fileName}}',
moveManyFailed: 'Не удалось переместить загрузки в очередь',
moveOneFailed: 'Не удалось переместить загрузку в очередь',
copyAddressesFailed: 'Не удалось скопировать адреса',
copyAddressFailed: 'Не удалось скопировать адрес',
copyPathFailed: 'Не удалось скопировать путь к файлу',
missingFileName: 'Отсутствует имя файла',
redownloadFailed: 'Не удалось скачать повторно',
startResume: 'Запустить/Возобновить',
addToQueue: 'Добавить в очередь',
copyAddress: 'Скопировать адрес',
remove: 'Удалить',
open: 'Открыть',
showInFolder: 'Показать в папке',
pause: 'Приостановить',
start: 'Запустить',
resume: 'Возобновить',
redownload: 'Скачать повторно',
copyFilePath: 'Скопировать путь к файлу',
properties: 'Свойства',
backendRejectedStart: 'Фоновый модуль отклонил запрос на запуск/возобновление.',
transferActive: 'Нельзя изменять свойства во время активной передачи. Сначала приостановите её.',
redownloadNotFound: 'Невозможно скачать повторно: загрузка не найдена.',
redownloadActive: 'Невозможно повторно скачать загрузку в статусе «{{status}}». Сначала приостановите её или дождитесь завершения.',
originalUrlMissing: 'Невозможно скачать повторно: исходный URL отсутствует.',
pauseBeforeMove: 'Приостановите {{file}} перед перемещением в другую очередь.',
},
addDownloads: {
unknownSize: 'Неизвестный размер',
unknown: 'Неизвестно',
discardSetup: 'Отменить настройку этой загрузки?',
speedInvalid: 'Ограничение скорости должно быть больше нуля',
duplicateResolveFailed: 'Не удалось разрешить дубликаты загрузок: {{detail}}',
addedWithFailures: 'Добавлено: {{added}}, с ошибкой: {{failed}}. {{detail}}',
addedOne: 'Добавлена 1 загрузка',
addedMany: 'Добавлено {{count}} загрузок',
updatedOne: 'Обновлена 1 загрузка',
updatedMany: 'Обновлено {{count}} загрузок',
urlAlreadyQueued: 'URL уже находится в очереди',
destinationConflict: 'Другая выбранная загрузка использует это место назначения',
existingDownloadDestination: 'Существующая загрузка Firelink использует эту папку назначения',
matchingDownloadFilename: 'Незавершённая загрузка уже использует это имя файла',
fileExistsOnDisk: 'Файл уже существует на диске; переименуйте или пропустите его, чтобы не удалить сторонние данные',
backendRejectedStart: 'Фоновый модуль отклонил запуск загрузки.',
playlistNoEntries: 'Плейлист не содержит доступных элементов',
invalidMediaMetadata: 'Некорректные метаданные медиа или форматы не найдены',
noAvailableName: 'Не удалось найти доступное имя для {{file}}.',
pauseBeforeReplace: 'Приостановите {{file}} перед заменой.',
cannotReplace: 'Невозможно заменить {{file}}: файл не принадлежит загрузке Firelink.',
downloadLinks: 'Ссылки для скачивания',
pastePlaceholder: 'Вставьте сюда URL-адреса HTTP, HTTPS, FTP или SFTP…\n\nДля загрузки медиа вставляйте ссылки с YouTube, X, TikTok, Instagram, Reddit и т. д.',
playlistSummary: 'Плейлист «{{title}}»: загружено {{loaded}} из {{total}} элементов{{truncated}}{{skipped}}',
safeEntryLimit: ' (достигнут безопасный лимит элементов)',
selectedSummary: 'Выбрано: {{ready}} готовых, {{fallback}} с резервными данными, {{mediaRetry}} повторов медиа, {{blocked}} заблокировано',
clearSelection: 'Очистить выбор',
selectAll: 'Выбрать все',
refreshMetadata: 'Обновить метаданные',
files: 'Файлы',
required: 'Требуется',
free: 'Свободно',
preview: 'Предпросмотр',
file: 'Файл',
size: 'Размер',
status: 'Статус',
downloadPreview: 'Предпросмотр загрузки',
noLinks: 'Ссылки ещё не добавлены.',
selectItem: 'Выбрать {{file}}',
fetchingPlaylist: 'Получение плейлиста…',
fetching: 'Получение…',
unsafeUrl: 'Небезопасный URL',
playlistFailed: 'Ошибка плейлиста',
metadataFailed: 'Ошибка метаданных',
fallback: 'Резервный режим',
invalid: 'Некорректный',
ready: 'Готово',
mediaFormat: 'Формат медиа',
playlistItem: 'Элемент плейлиста {{index}}',
fetchingMediaStreams: 'Получение медиапотоков…',
availableStreams: 'Доступные потоки',
availableMediaStreams: 'Доступные медиапотоки',
quality: 'Качество',
applyQualityToSelected: 'Применить точное качество к выбранным медиа',
noCommonQuality: 'Для всех выбранных медиа нет одинакового качества.',
metadataUnavailable: 'Метаданные недоступны. Обновите метаданные перед добавлением этого медиа.',
saveLocation: 'Папка сохранения',
browse: 'Обзор…',
categoryFolders: 'Файлы будут распределены по папкам категорий.',
sharedFolder: 'Все выбранные загрузки будут использовать эту папку.',
dedicatedFolder: 'Сохранить в новую папку',
dedicatedFolderName: 'Имя папки',
dedicatedFolderDescription: 'Создаёт эту папку внутри каждой автоматической папки категории.',
dedicatedFolderManualDescription: 'Создаёт эту папку внутри выбранного места сохранения.',
saveFolderName: 'Имя папки сохранения',
dedicatedFolderNameRequired: 'Введите имя папки перед сохранением.',
transferSettings: 'Настройки передачи',
connectionsPerFile: 'Соединений на файл',
connectionsPerFileAria: 'Соединений на файл',
limitSpeedPerFile: 'Ограничить скорость на файл',
speedLimitPerFileAria: 'Ограничение скорости на файл',
authorization: 'Авторизация',
useAuthorization: 'Использовать авторизацию',
username: 'Имя пользователя',
password: 'Пароль',
advancedTransfer: 'Дополнительные параметры',
verifyChecksum: 'Проверять контрольную сумму',
checksumAlgorithm: 'Алгоритм контрольной суммы',
expectedDigest: 'Ожидаемый хеш',
headers: 'Заголовки',
requestHeaders: 'Заголовки запроса',
cookies: 'Файлы cookie',
cookiePlaceholder: 'name=value; other=value',
mirrors: 'Зеркала',
cancel: 'Отмена',
startDownloads: 'Начать загрузку',
addToQueue: 'Добавить в очередь',
pasteOneOrMore: 'Вставьте одну или несколько ссылок.',
selectAtLeastOne: 'Выберите хотя бы одну загрузку.',
correctInvalidOne: 'Исправьте или удалите {{count}} некорректный URL-адрес перед продолжением.',
correctInvalidFew: 'Исправьте или удалите {{count}} некорректных URL-адреса перед продолжением.',
correctInvalidMany: 'Исправьте или удалите {{count}} некорректных URL-адресов перед продолжением.',
waitingForMetadataOne: 'Ожидание метаданных для {{count}} загрузки…',
waitingForMetadataFew: 'Ожидание метаданных для {{count}} загрузок…',
waitingForMetadataMany: 'Ожидание метаданных для {{count}} загрузок…',
removeUnsafeOne: 'Удалите {{count}} небезопасный URL-адрес перед продолжением.',
removeUnsafeFew: 'Удалите {{count}} небезопасных URL-адреса перед продолжением.',
removeUnsafeMany: 'Удалите {{count}} небезопасных URL-адресов перед продолжением.',
mediaMetadataUnavailableSummaryOne: 'Метаданные медиа недоступны для {{count}} элемента. Обновите метаданные перед добавлением.',
mediaMetadataUnavailableSummaryFew: 'Метаданные медиа недоступны для {{count}} элементов. Обновите метаданные перед добавлением.',
mediaMetadataUnavailableSummaryMany: 'Метаданные медиа недоступны для {{count}} элементов. Обновите метаданные перед добавлением.',
metadataUnavailableFallback: 'Метаданные недоступны. Загрузки всё равно можно добавить с резервными данными.',
fallbackReadyOne: 'Готова {{ready}} загрузка; для {{failed}} будет использовано резервное имя файла и неизвестный размер.',
fallbackReadyFew: 'Готовы {{ready}} загрузки; для {{failed}} будет использовано резервное имя файла и неизвестный размер.',
fallbackReadyMany: 'Готово {{ready}} загрузок; для {{failed}} будет использовано резервное имя файла и неизвестный размер.',
readyToAddOne: 'Готово к добавлению: {{count}} загрузка.',
readyToAddFew: 'Готово к добавлению: {{count}} загрузки.',
readyToAddMany: 'Готово к добавлению: {{count}} загрузок.',
},
settings: {
tabs: {
downloads: 'Загрузки',
lookAndFeel: 'Внешний вид',
network: 'Сеть',
locations: 'Папки',
siteLogins: 'Учётные данные',
power: 'Питание',
engine: 'Движок',
integrations: 'Интеграции',
about: 'О программе',
},
common: {
thisOs: 'этой ОС',
checking: 'Проверка…',
ready: 'Готово',
errorMissing: 'Ошибка / Отсутствует',
hideTechnicalDetails: 'Скрыть технические детали',
showTechnicalDetails: 'Показать технические детали',
binary: 'Исполняемый файл',
expected: 'Ожидается',
error: 'Ошибка',
tip: 'Совет',
stderr: 'stderr',
daemonProcessAlive: 'Процесс фоновой службы активен',
rpcReady: 'RPC готов',
rpcPort: 'Порт RPC',
daemonStderr: 'stderr фоновой службы',
packaging: 'Упаковка: PyInstaller onedir (требуется _internal)',
internalDirectoryFound: 'Каталог _internal найден',
pythonRuntimeFound: 'Среда выполнения Python найдена',
externalOpenFailed: 'Не удалось открыть {{label}}: {{detail}}',
updateUnexpectedResponse: 'Проверка обновлений вернула неожиданный ответ.',
updateUntrustedReleaseUrl: 'Проверка обновлений вернула ненадёжный URL релиза.',
updateFailed: 'Ошибка проверки обновлений: {{detail}}',
},
downloads: {
defaultConnections: 'Соединения по умолчанию:',
defaultConnectionsDescription: 'Для новых загрузок; существующие элементы сохраняют своё значение',
parallelDownloads: 'Параллельные загрузки:',
parallelDownloadsDescription: 'Максимальное число одновременно активных файлов',
automaticRetries: 'Автоматические повторы:',
automaticRetriesDescription: 'При сбое соединения',
systemNotification: 'Показывать системное уведомление по завершении загрузки',
systemNotificationDescription: 'Использует настройки уведомлений вашей операционной системы',
completionChime: 'Воспроизводить звуковой сигнал завершения в приложении',
completionChimeDescription: 'Дополнительный звук Firelink, независимый от системных уведомлений',
clipboardLinks: 'Добавлять ссылки из буфера обмена при активации Firelink',
clipboardLinksDescription: 'Открывает скопированные поддерживаемые ссылки в окне добавления. По умолчанию отключено.',
},
lookAndFeel: {
language: 'Язык',
languageDescription: 'Выберите язык интерфейса Firelink.',
sidebarPosition: 'Положение боковой панели',
sidebarPositionDescription: 'Выберите, где отображается боковая панель. В автоматическом режиме следует направлению интерфейса.',
sidebarPositionAutomatic: 'Автоматически (рекомендуется)',
sidebarPositionLeft: 'Слева',
sidebarPositionRight: 'Справа',
windowControls: 'Элементы управления окном',
windowControlStyle: 'Стиль элементов управления',
windowControlsDescription: 'Выберите, как Firelink отображает пользовательские кнопки окна. Автоматический режим учитывает вашу ОС.',
windowControlStyleAutomatic: 'Автоматически (рекомендуется)',
windowControlStyleMacos: 'Светофоры macOS',
windowControlStyleWindows: 'Windows 11 Fluent',
windowControlStyleGnome: 'GNOME / Adwaita',
windowControlStyleMinimal: 'Минималистичный',
languageSystem: 'Системный по умолчанию',
languageEnglish: 'Английский',
languageChinese: 'Упрощённый китайский',
languageHebrew: 'Иврит',
languagePersian: 'Персидский',
languageUkrainian: 'Украинский',
languageRussian: 'Русский',
calendar: 'Календарь',
calendarDescription: 'Выберите календарь для отображения дат и времени. По умолчанию используется григорианский; расписание и сохранённые метки времени не изменяются.',
calendarGregorian: 'Григорианский',
calendarPersian: 'Персидский',
calendarHebrew: 'Еврейский',
appTheme: 'Тема приложения',
theme: 'Тема',
ariaLabel: 'Тема приложения',
system: 'Системная',
light: 'Светлая',
dark: 'Тёмная',
dracula: 'Dracula',
nord: 'Nord',
systemAppearance: 'Системная тема соответствует текущему светлому или тёмному оформлению {{platform}}.',
display: 'Отображение',
fontSize: 'Размер шрифта',
fontSizeDescription: 'Масштабирует список загрузок и компактные элементы управления.',
small: 'Мелкий',
standard: 'Стандартный',
large: 'Крупный',
listDensity: 'Плотность списка',
listDensityDescription: 'Изменяет высоту строк, отступы и масштаб индикатора прогресса.',
compact: 'Компактный',
comfortable: 'Удобный',
relaxed: 'Просторный',
osIntegration: 'Интеграция с ОС',
dockBadge: 'Показывать счётчик на значке в Dock',
dockBadgeDescription: 'Отображает количество активных загрузок на значке Firelink в Dock.',
menuBarIcon: 'Показывать значок в строке меню',
statusIndicatorIcon: 'Показывать значок состояния',
systemTrayIcon: 'Показывать значок в системном трее',
macosTrayDescription: 'Обеспечивает быстрый доступ из строки меню macOS.',
windowsTrayDescription: 'Обеспечивает быстрый доступ из области уведомлений Windows.',
linuxTrayDescription: 'Обеспечивает быстрый доступ из трея рабочего стола или области состояния Linux (при наличии).',
defaultTrayDescription: 'Обеспечивает быстрый доступ из области системного трея ОС (при наличии).',
},
network: {
proxy: 'Прокси',
mode: 'Режим',
modeDescription: 'Управляет использованием прокси для новых запросов на загрузку.',
noProxy: 'Без прокси',
systemProxy: 'Системный прокси',
customProxy: 'Собственный прокси',
proxyHost: 'Хост прокси',
proxyHostDescription: 'Имя хоста, IP-адрес или URL HTTP-прокси.',
proxyHostPlaceholder: '127.0.0.1 или http://127.0.0.1',
proxyPort: 'Порт прокси',
proxyPortDescription: 'Допустимый диапазон от 1 до 65535.',
noProxyDescription: 'Загрузки игнорируют настроенные прокси.',
systemProxyDescription: 'Загрузки используют обнаруженный системный прокси {{platform}}. Для обычных загрузок файлов требуется HTTP- или HTTPS-прокси; для загрузки медиа можно использовать SOCKS.',
customProxyDescription: 'Загрузки используют настроенный HTTP-прокси для получения метаданных и движков скачивания.',
invalidCustomProxy: 'Введите корректный хост и порт HTTP-прокси, чтобы включить собственный прокси.',
incompleteCustomProxy: 'Введите хост и порт прокси, чтобы включить собственный прокси.',
checkingSystemProxy: 'Проверка конфигурации системного прокси…',
detectedSystemProxy: 'Обнаружен системный прокси. Для обычных загрузок файлов требуется HTTP- или HTTPS-прокси; для загрузки медиа можно использовать SOCKS.',
noSystemProxy: 'Подходящий системный прокси не обнаружен. Загрузки будут выполняться без прокси.',
systemProxyReadFailed: 'Не удалось прочитать конфигурацию системного прокси. Выберите «Без прокси» или повторите попытку, когда она станет доступна.',
identity: 'Идентификация',
customUserAgent: 'Собственный User-Agent',
userAgentDescription: 'Применяется при получении метаданных и работе движков загрузки.',
userAgentPlaceholder: 'Оставьте пустым, чтобы использовать значение Firelink по умолчанию',
userAgentOverrides: 'Переопределяет исходящий заголовок User-Agent. Оставьте пустым, чтобы использовать значения Firelink по умолчанию.',
chromeWindows: 'Chrome (Windows)',
chromeMacos: 'Chrome (macOS)',
edgeWindows: 'Edge (Windows)',
firefoxWindows: 'Firefox (Windows)',
firefoxMacos: 'Firefox (macOS)',
safariMacos: 'Safari (macOS)',
windowsDesktop: 'Windows (ПК)',
macosDesktop: 'macOS (ПК)',
},
locations: {
baseDownloadFolder: 'Основная папка загрузок',
baseDownloadFolderDescription: 'Автоматические папки категорий создаются внутри этой папки.',
browse: 'Обзор…',
baseFolderCreateFailed: 'Основная папка сохранена, но не удалось создать папки категорий: {{detail}}',
baseFolderUpdated: 'Основная папка загрузок обновлена',
askWhereToSave: 'Запрашивать место сохранения при добавлении загрузок',
rememberLastUsedDownloadDirectory: 'Запоминать последнюю использованную папку загрузки',
rememberLastUsedDownloadDirectoryDescription: 'Использовать последнюю папку, выбранную в окне добавления, для следующей загрузки до перезапуска приложения.',
automaticCategorySubfolders: 'Автоматически сохранять файлы в подпапки категорий',
automaticCategorySubfoldersDescription: 'Если отключено, автоматические загрузки используют основную папку.',
categorySubfolders: 'Подпапки категорий',
relativeToBase: 'Относительно основной папки',
disabled: 'Отключено',
categorySubfolder: 'Подпапка «{{category}}»',
customFolder: 'Собственная папка',
useAutomatic: 'Автоматически',
resetDefaults: 'Сбросить по умолчанию',
resetToast: 'Настройки папок категорий сброшены по умолчанию',
},
siteLogins: {
title: 'Учётные данные сайтов',
noSavedLogins: 'Нет сохранённых логинов.',
user: 'Пользователь: {{username}}',
deleteCredential: 'Удалить учётные данные',
deletedCredential: 'Учётные данные удалены',
deleteFailed: 'Не удалось удалить учётные данные: {{detail}}',
addTitle: 'Добавить учётные данные сайта',
urlPattern: 'Шаблон URL:',
urlPatternPlaceholder: 'например *.example.com или example.com/downloads',
username: 'Имя пользователя:',
password: 'Пароль:',
usernamePlaceholder: 'Имя пользователя',
passwordPlaceholder: 'Пароль',
saving: 'Сохранение…',
addLogin: 'Добавить логин',
urlPatternRequired: 'Требуется указать шаблон URL.',
urlPatternWhitespace: 'Шаблон URL не может содержать пробелы.',
usernameRequired: 'Требуется указать имя пользователя.',
passwordRequired: 'Требуется указать пароль.',
accessBeforeSave: 'Предоставьте доступ к хранилищу учётных данных перед сохранением логина сайта.',
saveFailed: 'Не удалось безопасно сохранить учётные данные сайта.',
addedCredential: 'Добавлены учётные данные сайта',
},
power: {
title: 'Управление питанием',
preventSleep: 'Запрещать спящий режим системы во время активных загрузок',
preventSleepDescription: 'Экран всё ещё может выключаться. Firelink предотвращает засыпание устройства только настолько, чтобы завершить активные передачи.',
},
engine: {
title: 'Загрузчик медиа и движки',
description: 'Успешные результаты используются повторно в течение сеанса приложения. Повторная проверка запускает реальную валидацию заново.',
recheck: 'Перепроверить движки',
coreDownloader: 'Основной загрузчик (aria2)',
version: 'Версия:',
status: 'Статус:',
mediaExtractors: 'Экстракторы медиа',
browserCookiesSource: 'Источник файлов cookie браузера:',
cookieDescription: 'yt-dlp читает файлы cookie браузера для обхода ограничений на загрузку видео или доступа к закрытым медиа. Firelink не сохраняет файлы cookie браузера.',
none: 'Не использовать',
},
integrations: {
title: 'Подключение расширения браузера',
description: 'Перехватывайте загрузки прямо из браузера за три простых шага.',
portablePairingEnabled: 'Портативное сопряжение включено',
pairingTokenPersisted: 'Токен сопряжения сохранён',
portablePersistedDescription: 'Ваш токен сопряжения хранится в этой портативной папке Firelink и сохранится при перемещении папки. Относитесь к папке как к конфиденциальным данным.',
systemPersistedDescription: 'Ваш токен сопряжения сохранён в системном хранилище учётных данных и сохранится после перезапуска.',
portablePairingAvailable: 'Доступно портативное сопряжение',
credentialStorageNeeded: 'Требуется доступ к хранилищу учётных данных',
portableAvailableDescription: 'Ваш токен сопряжения хранится в этой портативной папке Firelink и сохранится после перезапуска. Включите его здесь, чтобы ознакомиться с предупреждением о портативном хранилище.',
credentialStorageDescription: 'Firelink требуется доступ к системному хранилищу учётных данных для безопасного сохранения токена сопряжения между перезапусками приложения. В настоящее время ваше расширение будет оставаться подключённым только на время этого сеанса.',
reviewPortablePairing: 'Проверить портативное сопряжение',
grantCredentialAccess: 'Предоставить доступ к хранилищу',
copyToken: 'Скопировать токен',
tokenDescription: 'Этот защищённый токен авторизует ваше расширение браузера.',
tokenCopied: 'Токен скопирован в буфер обмена!',
tokenCopyFailed: 'Не удалось скопировать токен: {{detail}}',
pairingTokenRegenerated: 'Токен сопряжения сгенерирован заново',
regenerateFailed: 'Не удалось сгенерировать токен сопряжения заново: {{detail}}',
getExtension: 'Получить расширение',
extensionDescription: 'Установите Firelink Companion для браузеров Firefox или Chromium.',
firefoxAddons: 'Дополнения Firefox',
chromiumZip: 'Chromium ZIP',
pasteConnect: 'Вставить и подключить',
pasteConnectDescription: 'Нажмите на значок Firelink на панели инструментов браузера и вставьте скопированный токен.',
extensionServerStatus: 'Статус сервера расширения:',
listening: '● Прослушивание 127.0.0.1:{{port}}',
unavailable: '● Сервер недоступен',
},
about: {
firelinkIcon: 'Значок Firelink',
unknown: 'Неизвестно',
version: 'Версия {{version}}',
description: 'Кроссплатформенный менеджер загрузок для macOS, Windows и Linux.',
sourceCode: 'Исходный код',
source: 'Исходный код',
upToDate: 'У вас установлена актуальная версия Firelink ({{version}}).',
updateAvailable: 'Доступна новая версия Firelink {{version}}.',
viewRelease: 'Просмотреть релиз',
updates: 'Обновления',
checkForUpdates: 'Проверить обновления',
updateDescription: 'Firelink проверяет наличие новых версий в GitHub Releases.',
checking: 'Проверка…',
checkNow: 'Проверить сейчас',
automaticUpdates: 'Автоматически проверять наличие обновлений',
createdBy: 'Разработчик: NimBold',
mitLicense: 'Лицензия MIT',
credits: 'Благодарности: aria2, yt-dlp, FFmpeg и Deno.',
copyright: 'Copyright © 2026 NimBold. Все права защищены.',
},
},
status: {
ready: 'Готово',
active: '{{count}} активных',
queued: '{{count}} в очереди',
done: '{{count}} завершено',
},
} as const;
export default ru;