fix(i18n): refine localized copy

This commit is contained in:
NimBold
2026-07-21 23:21:40 +03:30
parent a98cce0980
commit e1f83b4f19
5 changed files with 474 additions and 474 deletions
+168 -168
View File
@@ -13,7 +13,7 @@ const ru = {
compressed: 'Архивы',
documents: 'Документы',
pictures: 'Изображения',
applications: 'Приложения',
applications: 'Программы',
other: 'Другое',
},
folders: 'Папки',
@@ -32,7 +32,7 @@ const ru = {
continue: 'Продолжить',
dismissNotification: 'Закрыть уведомление',
queueName: 'Название очереди',
addNewQueue: 'Добавить очередь',
addNewQueue: 'Добавить новую очередь',
startQueue: 'Запустить очередь',
pauseQueue: 'Приостановить очередь',
renameQueue: 'Переименовать очередь',
@@ -55,7 +55,7 @@ const ru = {
title: 'Удалить загрузку',
confirmationSingle: 'Вы действительно хотите удалить этот элемент из списка? Вы также можете удалить файл с диска.',
confirmationMultiple: 'Вы действительно хотите удалить выбранные элементы ({{count}}) из списка? Вы также можете удалить файлы с диска.',
errorSummary: 'Успешно удалено: {{succeeded}}, с ошибкой: {{failed}}: {{detail}}',
errorSummary: 'Удалено {{succeeded}}, с ошибкой {{failed}}: {{detail}}',
remove: 'Удалить',
deleteFile: 'Удалить файл',
},
@@ -68,10 +68,10 @@ const ru = {
},
downloads: {
actions: {
moveUp: 'Вверх',
moveDown: 'Вниз',
pause: ауза',
start: 'Старт',
moveUp: 'Переместить вверх',
moveDown: 'Переместить вниз',
pause: риостановить',
start: 'Запустить',
resume: 'Возобновить',
options: 'Параметры',
},
@@ -108,7 +108,7 @@ const ru = {
globalLimitSaved: 'Общее ограничение сохранено: {{value}} {{unit}}',
globalLimitDisabled: 'Общее ограничение скорости отключено',
saveFailed: 'Не удалось сохранить общее ограничение скорости: {{detail}}',
presetAlreadyExists: 'Пресет {{value}} {{unit}} уже существует в быстрых пресетах',
presetAlreadyExists: 'Пресет {{value}} {{unit}} уже есть в быстрых пресетах',
presetAdded: 'Добавлен быстрый пресет {{value}} {{unit}}',
presetRemoved: 'Удалён быстрый пресет {{value}} {{unit}}',
},
@@ -132,9 +132,9 @@ const ru = {
exportButton: 'Экспортировать журнал',
logFiles: 'Файлы журнала',
localDiagnostics: 'Локальная диагностика:',
diagnosticsDescription: 'Сбор диагностики выполняется с вашего согласия, ограничен по объёму и хранится локально. Секретные данные, параметры URL и пути к домашнему каталогу скрываются при отображении и экспорте. Никакие данные не отправляются автоматически.',
diagnosticsDescription: 'Сбор диагностики выполняется по желанию, ограничен по объёму и хранится локально. Конфиденциальные данные, параметры URL и пути к домашней папке скрываются при отображении и экспорте. Никакие данные не отправляются автоматически.',
noEntries: 'Сохранённых записей журнала пока нет.',
disabledDescription: 'Ведение журнала диагностики отключено. Сохранённые логи появятся здесь при их наличии.',
disabledDescription: 'Ведение журнала диагностики отключено. Существующие логи поддержки появятся здесь при наличии.',
copy: 'Копировать',
copied: 'Скопировано в буфер обмена',
copyFailed: 'Не удалось скопировать в буфер обмена',
@@ -142,29 +142,29 @@ const ru = {
exportFailed: 'Не удалось экспортировать журнал: {{detail}}',
cleared: 'Журнал очищен',
clearFailed: 'Не удалось очистить журнал: {{detail}}',
enabled: 'Ведение журнала включено',
disabled: 'Ведение журнала отключено',
updateFailed: 'Не удалось обновить параметры ведения журнала: {{detail}}',
enabled: 'Ведение журнала диагностики включено',
disabled: 'Ведение журнала диагностики отключено',
updateFailed: 'Не удалось обновить ведение журнала диагностики: {{detail}}',
},
scheduler: {
title: 'Планировщик',
running: 'Работает',
disabled: 'Планировщик отключен',
disabled: 'Планировщик отключён',
noScheduledDay: 'Дни выполнения не выбраны',
unsavedChanges: 'Несохранённые изменения',
runNow: 'Запустить сейчас',
pause: 'Приостановить',
saveSettings: 'Сохранить настройки',
timing: 'Время работы',
timing: 'Расписание',
startTime: 'Время начала',
stopTime: 'Время окончания',
timingDescription: 'Если компьютер находится в спящем режиме во время запуска, Firelink запустит выбранные очереди после пробуждения в этот же день, если время окончания ещё не наступило.',
timingDescription: 'Если Firelink находится в спящем режиме во время запуска, он запустит выбранные очереди после пробуждения в этот же день, если время окончания ещё не наступило.',
runEveryDay: 'Запускать каждый день',
queuesToSchedule: 'Очереди для запуска',
defaultQueue: 'Очередь по умолчанию',
afterCompletion: 'После завершения',
afterCompletionDescription: 'Выберите действие после завершения загрузок, запущенных планировщиком.',
actionWarning: 'Это действие может прервать работу других программ. Firelink выполнит его сразу после завершения запланированной очереди.',
actionWarning: 'Это действие может прервать работу других программ на компьютере. Firelink выполнит его сразу после завершения запланированной очереди.',
systemPermissions: 'Системные разрешения',
macPermissionDescription: 'Для перехода в спящий режим, перезагрузки и выключения требуется разрешение macOS «Автоматизация» для System Events.',
permissionGranted: 'Разрешение «Автоматизация» предоставлено',
@@ -173,20 +173,20 @@ const ru = {
revokePermission: 'Отозвать разрешение',
grantPermission: 'Предоставить разрешение',
permissionAvailable: 'Разрешение «Автоматизация» доступно.',
permissionMissingDetails: 'Отсутствует разрешение «Автоматизация». Включите Firelink в разделе «Системные настройки» > «Конфиденциальность и безопасность» > «Автоматизация» для System Events.',
revokePermissionDetails: 'macOS не позволяет отзывать разрешение «Автоматизация» напрямую из приложения. Отключите доступ к System Events в Системных настройках, затем вернитесь в Firelink.',
permissionMissingDetails: 'Отсутствует разрешение «Автоматизация». В Системных настройках откройте раздел «Автоматизация» для System Events и включите Firelink.',
revokePermissionDetails: 'macOS не позволяет отзывать разрешение «Автоматизация» напрямую из Firelink. Отключите доступ Firelink к System Events в Системных настройках, затем вернитесь в Firelink.',
requestingPermission: 'Запрос разрешения «Автоматизация»…',
enablePermissionDetails: 'Включите Firelink в разделе «Системные настройки» > «Автоматизация» для System Events, затем вернитесь в Firelink.',
enablePermissionDetails: 'В Системных настройках откройте раздел «Автоматизация» для System Events и включите Firelink, затем вернитесь в Firelink.',
systemActions: 'Системные действия',
windowsActionsDescription: 'Спящий режим, перезагрузка и выключение используют системные привилегии Windows. При выполнении Firelink сообщит, если действие не удалось.',
linuxActionsDescription: 'Спящий режим, перезагрузка и выключение используют системные службы Linux. При выполнении Firelink сообщит, если действие не удалось.',
windowsActionsDescription: 'Спящий режим, перезагрузка и выключение используют системные привилегии Windows. Firelink сообщит о любых отклонённых действиях при их запуске; постоянное разрешение заранее не запрашивается.',
linuxActionsDescription: 'Спящий режим, перезагрузка и выключение используют системную политику и рабочий стол Linux. Firelink сообщит о любых отклонённых действиях при их запуске; постоянное разрешение заранее не запрашивается.',
validationDay: 'Выберите хотя бы один день для планировщика',
validationQueue: 'Выберите хотя бы одну очередь для планировщика',
validationStopTime: 'Время окончания должно быть позже времени начала',
saved: 'Настройки планировщика сохранены',
trackingOne: 'Отслеживается 1 запланированная загрузка',
trackingMany: 'Отслеживается {{count}} запланированных загрузок',
noStartableDownloads: 'В выбранных очередях нет загрузок для запуска',
noStartableDownloads: 'В выбранных очередях нет загрузок, которые можно запустить',
pausedOne: 'Приостановлена 1 активная загрузка',
pausedMany: 'Приостановлено {{count}} активных загрузок',
noActiveDownloads: 'Нет активных загрузок',
@@ -220,25 +220,25 @@ const ru = {
lastError: 'Последняя ошибка',
saved: ' (сохранено)',
defaultValue: ' (по умолчанию)',
savedTooltip: 'Сохранено для этой загрузки. Изменения в Настройках будут применяться только к новым загрузкам.',
defaultTooltip: 'Используется значение по умолчанию для новых загрузок.',
identityReadOnly: 'Параметры файла доступны только для чтения. Настройки передачи сохранены для повторного скачивания.',
transferSettings: 'Настройки передачи можно изменить после приостановки или остановки. Текущие загрузки продолжат использовать существующие параметры.',
savedTooltip: 'Сохранено для этой загрузки. Изменения в Настройках будут применяться к новым загрузкам.',
defaultTooltip: 'Используется текущее значение по умолчанию для новых загрузок.',
identityReadOnly: 'Идентификация файла доступна только для чтения. Настройки передачи сохранены для повторного скачивания.',
transferSettings: 'Настройки передачи можно изменить после остановки или приостановки. Текущие загрузки сохраняют свои параметры.',
download: 'Загрузка',
url: 'URL',
fileName: 'Имя файла',
saveLocation: 'Папка для сохранения',
saveLocation: 'Место сохранения',
select: 'Выбрать',
perFile: 'на файл',
useCurrentDefault: 'По умолчанию ({{count}})',
savedPerDownload: 'Индивидуально для загрузки. Настройки по умолчанию применяются к новым загрузкам.',
savedPerDownload: 'Сохранено для этой загрузки. Значение из Настроек применяется к новым загрузкам.',
limit: 'Ограничение',
siteLogin: 'Авторизация на сайте',
siteLoginRedownload: 'Авторизация для повторного скачивания',
matchingSiteLogin: 'Сохранённые учётные данные',
customCredentials: 'Другие учётные данные',
matchingSiteLogin: 'Учётные данные сайта',
customCredentials: 'Пользовательские учётные данные',
noLogin: 'Без авторизации',
useSavedLogin: 'Будет использован сохранённый логин, если доступен.',
useSavedLogin: 'Будет использован сохранённый логин, если он доступен.',
advancedTransfer: 'Дополнительные параметры',
advancedTransferRedownload: 'Дополнительные параметры повторного скачивания',
checksum: 'Контрольная сумма',
@@ -261,7 +261,7 @@ const ru = {
stores: {
portable: 'портативная папка Firelink',
windows: 'Диспетчер учётных данных Windows',
linux: 'системное хранилище Linux',
linux: 'хранилище учётных данных Linux',
macos: 'Связка ключей macOS',
system: 'системное хранилище учётных данных',
siteCredentials: 'системное хранилище учётных данных',
@@ -269,58 +269,58 @@ const ru = {
grantLabelPortable: 'Продолжить',
grantLabelMacos: 'Предоставить доступ',
grantLabelDefault: 'Включить защищённое хранилище',
description: 'Firelink использует расширение браузера для перехвата загрузок. Чтобы расширение оставалось привязанным после перезапуска, Firelink сохраняет токен сопряжения в {{pairingStore}}. Сохранённые учётные данные сайтов хранятся в {{siteCredentialStore}}.',
portableExplanation: 'Токен сопряжения сохраняется в этой папке. Учётные данные сайтов остаются в системном хранилище; при предоставлении доступа может появиться системный запрос.',
macosExplanation: 'macOS может запросить разрешение на доступ к Связке ключей.',
defaultExplanation: 'Обычно доступ предоставляется автоматически. Если служба учётных данных недоступна, Firelink покажет ошибку, и расширение останется привязанным только на текущий сеанс.',
description: 'Firelink использует расширение браузера для перехвата загрузок. Чтобы расширение оставалось привязанным после перезапуска, Firelink сохраняет токен сопряжения в {{pairingStore}}. Дополнительные учётные данные сайтов хранятся в {{siteCredentialStore}}.',
portableExplanation: 'Токен сопряжения переносится вместе с этой папкой. Учётные данные сайтов остаются в системном хранилище; после предоставления доступа может появиться системный запрос.',
macosExplanation: 'macOS может показать запрос Связки ключей после предоставления доступа.',
defaultExplanation: 'Обычно это происходит незаметно. Если служба учётных данных недоступна, Firelink покажет ошибку здесь, и расширение останется привязанным только на текущий сеанс.',
note: 'Примечание:',
portableNote: 'В портативном режиме в папке сохраняется только токен сопряжения. Пароли сайтов и учётные данные браузера не копируются.',
defaultNote: 'Firelink создаёт только собственную изолированную запись и не имеет доступа к другим вашим паролям.',
portableNote: 'В портативном режиме в этой папке сохраняется только токен сопряжения. Пароли сайтов и учётные данные браузера не копируются.',
defaultNote: 'Firelink создаёт только собственную изолированную запись учётных данных. Приложение не имеет доступа к другим сохранённым паролям вашей системы.',
hint: 'Подсказка:',
portableHint: 'Портативный токен сопряжения уже сохранён в этой папке. Вы можете включить хранилище сейчас или нажать «Позже».',
defaultHint: 'Если вы нажмёте «Позже», интеграция с браузером будет работать только во время текущего сеанса.',
portableHint: 'Портативный токен сопряжения уже сохранён в этой папке. Вы можете включить его здесь или выбрать «Позже».',
defaultHint: 'Если вы выберете «Позже», расширение будет работать только во время текущего сеанса.',
enableFromSettings: 'Вы можете включить хранилище в любое время в меню «Настройки» > «Интеграции».',
later: 'Позже',
enabling: 'Включение…',
timeout: 'Время ожидания ответа хранилища истекло. Нажмите «Позже» и попробуйте снова.',
timeout: 'Время ожидания запроса к хранилищу учётных данных истекло. Вы можете выбрать «Позже» и попробовать снова.',
unavailable: 'Хранилище {{store}} недоступно.',
accessRequired: 'Предоставьте доступ к хранилищу учётных данных перед созданием нового токена.',
accessRequired: 'Предоставьте доступ к хранилищу учётных данных перед повторной генерацией токена сопряжения.',
storeUnavailable: 'Доступ к хранилищу учётных данных недоступен.',
},
app: {
loading: 'Загрузка…',
settingsSaveFailed: 'Не удалось сохранить настройки. Проверьте права доступа к папке и попробуйте снова.',
settingsSaveFailed: 'Не удалось сохранить настройки. Проверьте разрешения хранилища и попробуйте снова.',
systemActionCountdown: '{{action}} через 10 секунд.',
systemActionCancelled: 'Системное действие отменено, так как есть активные или запланированные загрузки.',
systemActionFailed: 'Не удалось выполнить запланированное действие: {{detail}}',
systemActionCancelled: 'Системное действие отменено, так как есть активная или запланированная загрузка.',
systemActionFailed: 'Не удалось выполнить запланированное системное действие: {{detail}}',
downloadCompleteTitle: 'Загрузка завершена',
downloadCompleteBody: 'Загрузка {{fileName}} завершена.',
unknownFile: 'Файл',
downloadFailedTitle: 'Ошибка загрузки',
downloadFailedBody: 'Не удалось загрузить {{fileName}}.',
initializeDownloadsFailed: 'Не удалось загрузить сохранённый список скачиваний: {{detail}}',
extensionDisconnected: 'Расширение браузера отключено, так как токен сопряжения изменился.',
initializeDownloadsFailed: 'Не удалось инициализировать сохранённые загрузки: {{detail}}',
extensionDisconnected: 'Расширение браузера отключено, так как его токен сопряжения изменился.',
copyToken: 'Скопировать токен',
integrations: 'Интеграции',
copyTokenFailed: 'Не удалось скопировать токен сопряжения: {{detail}}',
credentialPersistenceFailed: 'Безопасное сохранение учётных данных недоступно. Сопряжение с браузером работает только в текущем сеансе: {{detail}}',
resumeDownloadsFailed: 'Не удалось возобновить загрузки: {{detail}}',
updateAvailable: 'Доступна новая версия Firelink {{version}}.',
resumeDownloadsFailed: 'Не удалось возобновить сохранённые загрузки: {{detail}}',
updateAvailable: 'Доступна Firelink {{version}}.',
viewRelease: 'Просмотреть релиз',
sleepPreventionFailed: 'Не удалось обновить запрет спящего режима: {{detail}}',
schedulerNoQueues: 'В планировщике не выбрано ни одной очереди. Проверьте настройки планировщика.',
sleepPreventionFailed: 'Не удалось обновить предотвращение перехода в спящий режим: {{detail}}',
schedulerNoQueues: 'В планировщике не выбраны действительные очереди. Обновите настройки планировщика.',
schedulerPauseOneFailed: 'Планировщик не смог приостановить 1 загрузку.',
schedulerPauseManyFailed: 'Планировщик не смог приостановить {{count}} загрузок.',
scheduledIncomplete: 'Не все запланированные загрузки были завершены. Системное действие отменено.',
scheduledActionSkippedActive: 'Системное действие пропущено, так как есть активные или запланированные загрузки.',
scheduledIncomplete: 'Не все запланированные загрузки были завершены. Системное действие после завершения очереди пропущено.',
scheduledActionSkippedActive: 'Запланированное системное действие пропущено, так как есть активная или находящаяся в очереди загрузка.',
notificationsDisabled: 'Системные уведомления отключены для Firelink.',
notificationsFailed: 'Не удалось настроить уведомления: {{detail}}',
},
sidebar: {
deleteQueueConfirm: 'Удалить очередь «{{name}}»? Незавершённые загрузки будут перемещены в Главную очередь.',
deleteQueueConfirm: 'Удалить очередь «{{name}}»? Её незавершённые загрузки будут перемещены в Главную очередь.',
deleteQueueFailed: 'Не удалось удалить очередь: {{detail}}',
queueNameEmpty: 'Имя очереди не может быть пустым',
queueNameExists: 'Очередь с таким именем уже существует',
queueNameEmpty: 'Название очереди не может быть пустым',
queueNameExists: 'Очередь с таким названием уже существует',
startQueueFailed: 'Не удалось запустить очередь: {{detail}}',
pauseQueueFailed: 'Не удалось приостановить очередь: {{detail}}',
},
@@ -339,12 +339,12 @@ const ru = {
dateAdded: 'Дата добавления',
},
columnOptions: {
open: 'Параметры столбца: {{column}}',
dragToReorder: 'Перетащите, чтобы изменить порядок столбцов',
alignContent: 'Положение содержимого',
left: 'Слева',
open: 'Параметры столбца «{{column}}»',
dragToReorder: 'Перетащите для изменения порядка столбцов',
alignContent: 'Выравнивание содержимого',
left: 'По левому краю',
center: 'По центру',
right: 'Справа',
right: 'По правому краю',
resetLayout: 'Сбросить макет столбцов',
},
addDownload: 'Добавить загрузку',
@@ -353,16 +353,16 @@ const ru = {
queueEmpty: 'Очередь пуста',
noCompletedDownloads: 'Нет завершённых загрузок',
noDownloads: 'Нет загрузок',
queueEmptyDescription: 'Добавляйте загрузки в эту очередь из меню элементов или окна добавления.',
queueEmptyDescription: 'Добавьте загрузки в эту очередь из меню элемента или окна добавления.',
completedDescription: 'Завершённые загрузки будут отображаться здесь.',
clickToAdd: 'Нажмите кнопку',
addButtonOr: 'или',
toAddDownloads: 'чтобы добавить загрузки',
nonResumableOne: '1 загрузка не поддерживает возобновление. При приостановке её придётся скачивать заново. Вы действительно хотите приостановить?',
nonResumableMany: 'Загрузок без поддержки возобновления: {{count}}. При приостановке их придётся скачивать заново. Вы действительно хотите приостановить?',
nonResumableOne: '1 загрузка не поддерживает возобновление. Если вы приостановите её, позже придётся начинать скачивание заново. Вы действительно хотите приостановить?',
nonResumableMany: '{{count}} загрузок не поддерживают возобновление. Если вы приостановите их, позже придётся начинать скачивание заново. Вы действительно хотите приостановить?',
interactionError: '{{message}}: {{detail}}',
openFileFailed: 'Не удалось открыть файл',
revealFileFailed: 'Не удалось показать файл в папке',
openFileFailed: 'Не удалось открыть скачанный файл',
revealFileFailed: 'Не удалось показать файл в Finder',
pauseFailed: 'Не удалось приостановить загрузку',
resumeFailed: 'Не удалось возобновить {{fileName}}',
moveManyFailed: 'Не удалось переместить загрузки в очередь',
@@ -384,15 +384,15 @@ const ru = {
redownload: 'Скачать повторно',
copyFilePath: 'Скопировать путь к файлу',
properties: 'Свойства',
backendRejectedStart: 'Запрос на запуск/возобновление отклонён сервером.',
transferActive: 'Нельзя изменять свойства во время загрузки. Сначала приостановите её.',
redownloadNotFound: 'Не удалось скачать повторно: загрузка не найдена.',
redownloadActive: 'Нельзя повторно скачать загрузку в статусе «{{status}}». Сначала приостановите её или дождитесь завершения.',
originalUrlMissing: 'Не удалось скачать повторно: исходный URL отсутствует.',
backendRejectedStart: 'Фоновый модуль отклонил запрос на запуск/возобновление.',
transferActive: 'Нельзя изменять свойства во время активной передачи. Сначала приостановите её.',
redownloadNotFound: 'Невозможно скачать повторно: загрузка не найдена.',
redownloadActive: 'Невозможно повторно скачать загрузку в статусе «{{status}}». Сначала приостановите её или дождитесь завершения.',
originalUrlMissing: 'Невозможно скачать повторно: исходный URL отсутствует.',
pauseBeforeMove: 'Приостановите {{file}} перед перемещением в другую очередь.',
},
addDownloads: {
unknownSize: 'Размер неизвестен',
unknownSize: 'Неизвестный размер',
unknown: 'Неизвестно',
discardSetup: 'Отменить настройку этой загрузки?',
speedInvalid: 'Ограничение скорости должно быть больше нуля',
@@ -403,22 +403,22 @@ const ru = {
updatedOne: 'Обновлена 1 загрузка',
updatedMany: 'Обновлено {{count}} загрузок',
urlAlreadyQueued: 'URL уже находится в очереди',
destinationConflict: 'Другая выбранная загрузка использует ту же папку назначения',
destinationConflict: 'Другая выбранная загрузка использует это место назначения',
existingDownloadDestination: 'Существующая загрузка Firelink использует эту папку назначения',
matchingDownloadFilename: 'Незавершённая загрузка уже использует это имя файла',
fileExistsOnDisk: 'Файл уже существует на диске. Переименуйте или пропустите его, чтобы не перезаписать данные.',
backendRejectedStart: 'Сервер отклонил запуск загрузки.',
fileExistsOnDisk: 'Файл уже существует на диске; переименуйте или пропустите его, чтобы не удалить сторонние данные',
backendRejectedStart: 'Фоновый модуль отклонил запуск загрузки.',
playlistNoEntries: 'Плейлист не содержит доступных элементов',
invalidMediaMetadata: 'Некорректные метаданные медиа или доступные форматы не найдены',
noAvailableName: 'Не удалось подобрать свободное имя для {{file}}.',
invalidMediaMetadata: 'Некорректные метаданные медиа или форматы не найдены',
noAvailableName: 'Не удалось найти доступное имя для {{file}}.',
pauseBeforeReplace: 'Приостановите {{file}} перед заменой.',
cannotReplace: 'Нельзя заменить {{file}}: файл не относится к загрузкам Firelink.',
cannotReplace: 'Невозможно заменить {{file}}: файл не принадлежит загрузке Firelink.',
downloadLinks: 'Ссылки для скачивания',
pastePlaceholder: 'Вставьте URL-адреса HTTP, HTTPS, FTP или SFTP…\n\nДля загрузки медиа поддерживаются ссылки с YouTube, X, TikTok, Instagram, Reddit и др.',
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: 'Сбросить выбор',
safeEntryLimit: ' (достигнут безопасный лимит элементов)',
selectedSummary: 'Выбрано: {{ready}} готовых, {{fallback}} с резервными данными, {{mediaRetry}} повторов медиа, {{blocked}} заблокировано',
clearSelection: 'Очистить выбор',
selectAll: 'Выбрать все',
refreshMetadata: 'Обновить метаданные',
files: 'Файлы',
@@ -436,7 +436,7 @@ const ru = {
unsafeUrl: 'Небезопасный URL',
playlistFailed: 'Ошибка плейлиста',
metadataFailed: 'Ошибка метаданных',
fallback: 'Базовые данные',
fallback: 'Резервный режим',
invalid: 'Некорректный',
ready: 'Готово',
mediaFormat: 'Формат медиа',
@@ -444,18 +444,18 @@ const ru = {
fetchingMediaStreams: 'Получение медиапотоков…',
availableStreams: 'Доступные потоки',
availableMediaStreams: 'Доступные медиапотоки',
metadataUnavailable: 'Метаданные недоступны. Обновите метаданные перед добавлением.',
saveLocation: 'Папка для сохранения',
metadataUnavailable: 'Метаданные недоступны. Обновите метаданные перед добавлением этого медиа.',
saveLocation: 'Папка сохранения',
browse: 'Обзор…',
categoryFolders: 'Файлы будут распределены по папкам категорий.',
sharedFolder: 'Все выбранные загрузки будут сохранены в эту папку.',
dedicatedFolder: 'Сохранить в отдельную папку',
sharedFolder: 'Все выбранные загрузки будут использовать эту папку.',
dedicatedFolder: 'Сохранить в новую папку',
dedicatedFolderName: 'Имя папки',
dedicatedFolderDescription: 'Создаёт эту папку внутри каждой автоматической папки категории.',
dedicatedFolderManualDescription: 'Создаёт эту папку внутри выбранной папки сохранения.',
dedicatedFolderManualDescription: 'Создаёт эту папку внутри выбранного места сохранения.',
saveFolderName: 'Имя папки сохранения',
dedicatedFolderNameRequired: 'Введите имя папки перед сохранением.',
transferSettings: 'Параметры передачи',
transferSettings: 'Настройки передачи',
connectionsPerFile: 'Соединений на файл',
connectionsPerFileAria: 'Соединений на файл',
limitSpeedPerFile: 'Ограничить скорость на файл',
@@ -466,7 +466,7 @@ const ru = {
password: 'Пароль',
advancedTransfer: 'Дополнительные параметры',
verifyChecksum: 'Проверять контрольную сумму',
checksumAlgorithm: 'Алгоритм хеширования',
checksumAlgorithm: 'Алгоритм контрольной суммы',
expectedDigest: 'Ожидаемый хеш',
headers: 'Заголовки',
requestHeaders: 'Заголовки запроса',
@@ -487,13 +487,13 @@ const ru = {
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}} будет использовано имя по умолчанию и неизвестный размер.',
mediaMetadataUnavailableSummaryOne: 'Метаданные медиа недоступны для {{count}} элемента. Обновите метаданные перед добавлением.',
mediaMetadataUnavailableSummaryFew: 'Метаданные медиа недоступны для {{count}} элементов. Обновите метаданные перед добавлением.',
mediaMetadataUnavailableSummaryMany: 'Метаданные медиа недоступны для {{count}} элементов. Обновите метаданные перед добавлением.',
metadataUnavailableFallback: 'Метаданные недоступны. Загрузки всё равно можно добавить с резервными данными.',
fallbackReadyOne: 'Готова {{ready}} загрузка; для {{failed}} будет использовано резервное имя файла и неизвестный размер.',
fallbackReadyFew: 'Готовы {{ready}} загрузки; для {{failed}} будет использовано резервное имя файла и неизвестный размер.',
fallbackReadyMany: 'Готово {{ready}} загрузок; для {{failed}} будет использовано резервное имя файла и неизвестный размер.',
readyToAddOne: 'Готово к добавлению: {{count}} загрузка.',
readyToAddFew: 'Готово к добавлению: {{count}} загрузки.',
readyToAddMany: 'Готово к добавлению: {{count}} загрузок.',
@@ -506,7 +506,7 @@ const ru = {
locations: 'Папки',
siteLogins: 'Учётные данные',
power: 'Питание',
engine: 'Движки',
engine: 'Движок',
integrations: 'Интеграции',
about: 'О программе',
},
@@ -530,21 +530,21 @@ const ru = {
internalDirectoryFound: 'Каталог _internal найден',
pythonRuntimeFound: 'Среда выполнения Python найдена',
externalOpenFailed: 'Не удалось открыть {{label}}: {{detail}}',
updateUnexpectedResponse: олучен неожиданный ответ при проверке обновлений.',
updateUntrustedReleaseUrl: 'Проверка обновлений вернула ненадёжный URL.',
updateFailed: 'Не удалось проверить обновления: {{detail}}',
updateUnexpectedResponse: роверка обновлений вернула неожиданный ответ.',
updateUntrustedReleaseUrl: 'Проверка обновлений вернула ненадёжный URL релиза.',
updateFailed: 'Ошибка проверки обновлений: {{detail}}',
},
downloads: {
defaultConnections: 'Соединения по умолчанию:',
defaultConnectionsDescription: 'Для новых загрузок; существующие элементы сохраняют своё значение',
parallelDownloads: 'Параллельные загрузки:',
parallelDownloadsDescription: 'Максимальное количество одновременно активных файлов',
parallelDownloadsDescription: 'Максимальное число одновременно активных файлов',
automaticRetries: 'Автоматические повторы:',
automaticRetriesDescription: 'При сбое соединения',
systemNotification: 'Показывать системное уведомление по завершении загрузки',
systemNotificationDescription: 'Использует системные настройки уведомлений',
completionChime: 'Воспроизводить звуковой сигнал в приложении',
completionChimeDescription: 'Звук Firelink, независимый от системных уведомлений',
systemNotificationDescription: 'Использует настройки уведомлений вашей операционной системы',
completionChime: 'Воспроизводить звуковой сигнал завершения в приложении',
completionChimeDescription: 'Дополнительный звук Firelink, независимый от системных уведомлений',
clipboardLinks: 'Добавлять ссылки из буфера обмена при активации Firelink',
clipboardLinksDescription: 'Открывает скопированные поддерживаемые ссылки в окне добавления. По умолчанию отключено.',
},
@@ -552,7 +552,7 @@ const ru = {
language: 'Язык',
languageDescription: 'Выберите язык интерфейса Firelink.',
sidebarPosition: 'Положение боковой панели',
sidebarPositionDescription: 'Выберите расположение боковой панели. В автоматическом режиме зависит от направления текста.',
sidebarPositionDescription: 'Выберите, где отображается боковая панель. В автоматическом режиме следует направлению интерфейса.',
sidebarPositionAutomatic: 'Автоматически (рекомендуется)',
sidebarPositionLeft: 'Слева',
sidebarPositionRight: 'Справа',
@@ -563,7 +563,7 @@ const ru = {
languagePersian: 'Персидский',
languageUkrainian: 'Украинский',
languageRussian: 'Русский',
appTheme: 'Тема оформления',
appTheme: 'Тема приложения',
theme: 'Тема',
ariaLabel: 'Тема приложения',
system: 'Системная',
@@ -571,7 +571,7 @@ const ru = {
dark: 'Тёмная',
dracula: 'Dracula',
nord: 'Nord',
systemAppearance: 'Автоматическое переключение между светлой и тёмной темой {{platform}}.',
systemAppearance: 'Системная тема соответствует текущему светлому или тёмному оформлению {{platform}}.',
display: 'Отображение',
fontSize: 'Размер шрифта',
fontSizeDescription: 'Масштабирует список загрузок и компактные элементы управления.',
@@ -579,7 +579,7 @@ const ru = {
standard: 'Стандартный',
large: 'Крупный',
listDensity: 'Плотность списка',
listDensityDescription: 'Изменяет высоту строк, отступы и масштаб индикаторов.',
listDensityDescription: 'Изменяет высоту строк, отступы и масштаб индикатора прогресса.',
compact: 'Компактный',
comfortable: 'Удобный',
relaxed: 'Просторный',
@@ -589,15 +589,15 @@ const ru = {
menuBarIcon: 'Показывать значок в строке меню',
statusIndicatorIcon: 'Показывать значок состояния',
systemTrayIcon: 'Показывать значок в системном трее',
macosTrayDescription: 'Быстрый доступ из строки меню macOS.',
windowsTrayDescription: 'Быстрый доступ из области уведомлений Windows.',
linuxTrayDescription: 'Быстрый доступ из системного трея Linux при наличии.',
defaultTrayDescription: 'Быстрый доступ из области системного трея.',
macosTrayDescription: 'Обеспечивает быстрый доступ из строки меню macOS.',
windowsTrayDescription: 'Обеспечивает быстрый доступ из области уведомлений Windows.',
linuxTrayDescription: 'Обеспечивает быстрый доступ из трея рабочего стола или области состояния Linux (при наличии).',
defaultTrayDescription: 'Обеспечивает быстрый доступ из области системного трея ОС (при наличии).',
},
network: {
proxy: 'Прокси',
mode: 'Режим',
modeDescription: 'Управляет использованием прокси для новых загрузок.',
modeDescription: 'Управляет использованием прокси для новых запросов на загрузку.',
noProxy: 'Без прокси',
systemProxy: 'Системный прокси',
customProxy: 'Собственный прокси',
@@ -605,21 +605,21 @@ const ru = {
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: 'Не удалось прочитать настройки системного прокси. Выберите «Без прокси» или повторите попытку.',
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: 'Оставьте пустым для использования значения по умолчанию',
userAgentOverrides: 'Переопределяет заголовок User-Agent. Оставьте пустым для значений по умолчанию.',
userAgentDescription: 'Применяется при получении метаданных и работе движков загрузки.',
userAgentPlaceholder: 'Оставьте пустым, чтобы использовать значение Firelink по умолчанию',
userAgentOverrides: 'Переопределяет исходящий заголовок User-Agent. Оставьте пустым, чтобы использовать значения Firelink по умолчанию.',
chromeWindows: 'Chrome (Windows)',
chromeMacos: 'Chrome (macOS)',
edgeWindows: 'Edge (Windows)',
@@ -631,23 +631,23 @@ const ru = {
},
locations: {
baseDownloadFolder: 'Основная папка загрузок',
baseDownloadFolderDescription: 'Папки категорий создаются внутри этой папки.',
baseDownloadFolderDescription: 'Автоматические папки категорий создаются внутри этой папки.',
browse: 'Обзор…',
baseFolderCreateFailed: 'Основная папка сохранена, но не удалось создать папки категорий: {{detail}}',
baseFolderUpdated: 'Основная папка загрузок обновлена',
askWhereToSave: 'Запрашивать папку для сохранения при добавлении загрузок',
rememberLastUsedDownloadDirectory: 'Запоминать последнюю использованную папку',
rememberLastUsedDownloadDirectoryDescription: 'Использовать последнюю выбранную папку для следующих загрузок до перезапуска приложения.',
automaticCategorySubfolders: 'Автоматически раскладывать файлы по папкам категорий',
automaticCategorySubfoldersDescription: 'Если отключено, файлы сохраняются непосредственно в основную папку.',
categorySubfolders: 'Папки категорий',
askWhereToSave: 'Запрашивать место сохранения при добавлении загрузок',
rememberLastUsedDownloadDirectory: 'Запоминать последнюю использованную папку загрузки',
rememberLastUsedDownloadDirectoryDescription: 'Использовать последнюю папку, выбранную в окне добавления, для следующей загрузки до перезапуска приложения.',
automaticCategorySubfolders: 'Автоматически сохранять файлы в подпапки категорий',
automaticCategorySubfoldersDescription: 'Если отключено, автоматические загрузки используют основную папку.',
categorySubfolders: одпапки категорий',
relativeToBase: 'Относительно основной папки',
disabled: 'Отключено',
categorySubfolder: 'Папка для категории «{{category}}»',
customFolder: 'Другая папка',
categorySubfolder: одпапка «{{category}}»',
customFolder: 'Собственная папка',
useAutomatic: 'Автоматически',
resetDefaults: 'Сбросить по умолчанию',
resetToast: 'Настройки папок сброшены к значениям по умолчанию',
resetToast: 'Настройки папок категорий сброшены по умолчанию',
},
siteLogins: {
title: 'Учётные данные сайтов',
@@ -656,7 +656,7 @@ const ru = {
deleteCredential: 'Удалить учётные данные',
deletedCredential: 'Учётные данные удалены',
deleteFailed: 'Не удалось удалить учётные данные: {{detail}}',
addTitle: 'Добавить логин для сайта',
addTitle: 'Добавить учётные данные сайта',
urlPattern: 'Шаблон URL:',
urlPatternPlaceholder: 'например *.example.com или example.com/downloads',
username: 'Имя пользователя:',
@@ -665,58 +665,58 @@ const ru = {
passwordPlaceholder: 'Пароль',
saving: 'Сохранение…',
addLogin: 'Добавить логин',
urlPatternRequired: 'Укажите шаблон URL.',
urlPatternWhitespace: 'Шаблон URL не должен содержать пробелы.',
usernameRequired: 'Укажите имя пользователя.',
passwordRequired: 'Укажите пароль.',
accessBeforeSave: 'Предоставьте доступ к хранилищу учётных данных перед сохранением.',
saveFailed: 'Не удалось безопасно сохранить учётные данные.',
addedCredential: 'Учётные данные добавлены',
urlPatternRequired: 'Требуется указать шаблон URL.',
urlPatternWhitespace: 'Шаблон URL не может содержать пробелы.',
usernameRequired: 'Требуется указать имя пользователя.',
passwordRequired: 'Требуется указать пароль.',
accessBeforeSave: 'Предоставьте доступ к хранилищу учётных данных перед сохранением логина сайта.',
saveFailed: 'Не удалось безопасно сохранить учётные данные сайта.',
addedCredential: 'Добавлены учётные данные сайта',
},
power: {
title: 'Управление питанием',
preventSleep: 'Запрещать переход в спящий режим во время активных загрузок',
preventSleepDescription: 'Экран может выключаться. Firelink предотвращает только засыпание компьютера во время скачивания.',
preventSleep: 'Запрещать спящий режим системы во время активных загрузок',
preventSleepDescription: 'Экран всё ещё может выключаться. Firelink предотвращает засыпание устройства только настолько, чтобы завершить активные передачи.',
},
engine: {
title: 'Движки скачивания и медиа',
description: 'Результаты проверки сохраняются на время сеанса. «Перепроверить» запускает повторную валидацию.',
title: 'Загрузчик медиа и движки',
description: 'Успешные результаты используются повторно в течение сеанса приложения. Повторная проверка запускает реальную валидацию заново.',
recheck: 'Перепроверить движки',
coreDownloader: 'Основной модуль скачивания (aria2)',
coreDownloader: 'Основной загрузчик (aria2)',
version: 'Версия:',
status: 'Статус:',
mediaExtractors: 'Экстракторы медиа',
browserCookiesSource: 'Источник файлов cookie браузера:',
cookieDescription: 'yt-dlp использует куки браузера для доступа к закрытым видео и обхода ограничений. Firelink не сохраняет куки браузера.',
cookieDescription: 'yt-dlp читает файлы cookie браузера для обхода ограничений на загрузку видео или доступа к закрытым медиа. Firelink не сохраняет файлы cookie браузера.',
none: 'Не использовать',
},
integrations: {
title: 'Подключение расширения браузера',
description: 'Перехватывайте загрузки из браузера за 3 простых шага.',
description: 'Перехватывайте загрузки прямо из браузера за три простых шага.',
portablePairingEnabled: 'Портативное сопряжение включено',
pairingTokenPersisted: 'Токен сопряжения сохранён',
portablePersistedDescription: 'Токен сопряжения хранится в этой портативной папке Firelink. При перемещении папки сопряжение сохранится.',
systemPersistedDescription: 'Токен сопряжения сохранён в системном хранилище и сохранится после перезапуска.',
portablePersistedDescription: 'Ваш токен сопряжения хранится в этой портативной папке Firelink и сохранится при перемещении папки. Относитесь к папке как к конфиденциальным данным.',
systemPersistedDescription: 'Ваш токен сопряжения сохранён в системном хранилище учётных данных и сохранится после перезапуска.',
portablePairingAvailable: 'Доступно портативное сопряжение',
credentialStorageNeeded: 'Требуется доступ к хранилищу учётных данных',
portableAvailableDescription: 'Токен сопряжения сохранён в портативной папке Firelink. Включите его здесь, чтобы ознакомиться с условиями.',
credentialStorageDescription: 'Firelink требуется доступ к системному хранилищу учётных данных для сохранения токена сопряжения между запусками. Без этого расширение будет работать только в текущем сеансе.',
portableAvailableDescription: 'Ваш токен сопряжения хранится в этой портативной папке Firelink и сохранится после перезапуска. Включите его здесь, чтобы ознакомиться с предупреждением о портативном хранилище.',
credentialStorageDescription: 'Firelink требуется доступ к системному хранилищу учётных данных для безопасного сохранения токена сопряжения между перезапусками приложения. В настоящее время ваше расширение будет оставаться подключённым только на время этого сеанса.',
reviewPortablePairing: 'Проверить портативное сопряжение',
grantCredentialAccess: 'Предоставить доступ',
grantCredentialAccess: 'Предоставить доступ к хранилищу',
copyToken: 'Скопировать токен',
tokenDescription: 'Этот токен используется для авторизации расширения браузера.',
tokenDescription: 'Этот защищённый токен авторизует ваше расширение браузера.',
tokenCopied: 'Токен скопирован в буфер обмена!',
tokenCopyFailed: 'Не удалось скопировать токен: {{detail}}',
pairingTokenRegenerated: 'Токен сопряжения обновлён',
regenerateFailed: 'Не удалось обновить токен сопряжения: {{detail}}',
getExtension: 'Установить расширение',
extensionDescription: 'Установите расширение Firelink Companion для Firefox или браузеров на базе Chromium.',
pairingTokenRegenerated: 'Токен сопряжения сгенерирован заново',
regenerateFailed: 'Не удалось сгенерировать токен сопряжения заново: {{detail}}',
getExtension: 'Получить расширение',
extensionDescription: 'Установите Firelink Companion для браузеров Firefox или Chromium.',
firefoxAddons: 'Дополнения Firefox',
chromiumZip: 'Chromium ZIP',
pasteConnect: 'Вставить и подключить',
pasteConnectDescription: 'Нажмите на значок Firelink на панели браузера и вставьте скопированный токен.',
pasteConnectDescription: 'Нажмите на значок Firelink на панели инструментов браузера и вставьте скопированный токен.',
extensionServerStatus: 'Статус сервера расширения:',
listening: '● Работает на 127.0.0.1:{{port}}',
listening: '● Прослушивание 127.0.0.1:{{port}}',
unavailable: '● Сервер недоступен',
},
about: {
@@ -726,19 +726,19 @@ const ru = {
description: 'Кроссплатформенный менеджер загрузок для macOS, Windows и Linux.',
sourceCode: 'Исходный код',
source: 'Исходный код',
upToDate: 'У вас установлена последняя версия Firelink ({{version}}).',
upToDate: 'У вас установлена актуальная версия Firelink ({{version}}).',
updateAvailable: 'Доступна новая версия Firelink {{version}}.',
viewRelease: 'Просмотреть релиз',
updates: 'Обновления',
checkForUpdates: 'Проверить обновления',
updateDescription: 'Firelink проверяет наличие новых версий на GitHub.',
updateDescription: 'Firelink проверяет наличие новых версий в GitHub Releases.',
checking: 'Проверка…',
checkNow: 'Проверить сейчас',
automaticUpdates: 'Автоматически проверять наличие обновлений',
createdBy: 'Разработчик: NimBold',
mitLicense: 'Лицензия MIT',
credits: 'Благодарности: aria2, yt-dlp, FFmpeg и Deno.',
copyright: '© 2026 NimBold. Все права защищены.',
copyright: 'Copyright © 2026 NimBold. Все права защищены.',
},
},
status: {