feat(i18n): add localized desktop UI

Refs #17
This commit is contained in:
NimBold
2026-07-18 13:44:29 +03:30
parent e4d7d5ecf0
commit 93ddf427b4
27 changed files with 5014 additions and 835 deletions
+728
View File
@@ -0,0 +1,728 @@
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 Automation для System Events.',
permissionGranted: 'Разрешение Automation предоставлено',
permissionChecking: 'Проверка разрешения Automation...',
permissionMissing: 'Отсутствует разрешение Automation',
revokePermission: 'Отозвать разрешение',
grantPermission: 'Предоставить разрешение',
permissionAvailable: 'Разрешение Automation доступно.',
permissionMissingDetails: 'Отсутствует разрешение Automation. Включите Firelink в разделе Automation для System Events в System Settings.',
revokePermissionDetails: 'macOS не позволяет Firelink отзывать разрешение Automation напрямую. Отзовите доступ к System Events в System Settings, затем вернитесь в Firelink.',
requestingPermission: 'Запрос разрешения Automation...',
enablePermissionDetails: 'Включите Firelink в разделе Automation для System Events в System Settings, затем вернитесь в 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: 'Соединения',
speedCap: 'Ограничение скорости',
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: {
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}}',
},
downloadTable: {
unknownQueue: 'Неизвестная очередь',
allDownloads: 'Все загрузки',
active: 'Активные',
completed: 'Завершенные',
unfinished: 'Незавершенные',
headers: {
fileName: 'Имя файла',
size: 'Размер',
status: 'Статус',
speed: 'Скорость',
eta: 'Осталось',
dateAdded: 'Дата добавления',
},
addDownload: 'Добавить загрузку',
resumeAll: 'Возобновить все',
pauseAll: 'Приостановить все',
queueEmpty: 'Очередь пуста',
noCompletedDownloads: 'Нет завершенных загрузок',
noDownloads: 'Нет загрузок',
queueEmptyDescription: 'Добавьте загрузки в эту очередь из меню элемента или окна Добавить.',
completedDescription: 'Завершенные загрузки появятся здесь.',
clickToAdd: 'Нажмите кнопку',
addButtonOr: 'или',
toAddDownloads: 'чтобы добавить загрузки',
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}} загрузок',
urlAlreadyQueued: 'URL уже в очереди',
destinationConflict: 'Другая выбранная загрузка использует это место назначения',
existingDownloadDestination: 'Существующая загрузка Firelink использует это место назначения',
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: 'Доступные медиапотоки',
metadataUnavailable: 'Метаданные недоступны. Обновите метаданные перед добавлением этого мультимедиа.',
saveLocation: 'Место сохранения',
browse: 'Обзор',
categoryFolders: 'Файлы будут организованы в папки категорий.',
sharedFolder: 'Все выбранные загрузки будут использовать эту папку.',
transferSettings: 'Настройки передачи',
connectionsPerFile: 'Соединений на файл',
connectionsPerFileAria: 'Соединений на файл',
limitSpeedPerFile: 'Ограничить скорость на файл',
speedLimitPerFileAria: 'Ограничение скорости на файл',
authorization: 'Авторизация',
useAuthorization: 'Использовать авторизацию',
username: 'Имя пользователя',
password: 'Пароль',
advancedTransfer: 'Расширенная передача',
verifyChecksum: 'Проверить контрольную сумму',
checksumAlgorithm: 'Алгоритм контрольной суммы',
expectedDigest: 'Ожидаемый хэш',
headers: 'Заголовки',
requestHeaders: 'Заголовки запроса',
cookies: 'Файлы cookie',
cookiePlaceholder: 'имя=значение; другое=значение',
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.',
languageSystem: 'Язык системы',
languageEnglish: 'Английский',
languageChinese: 'Упрощённый китайский',
languageHebrew: 'Иврит',
languagePersian: 'Персидский',
languageUkrainian: 'Украинский',
languageRussian: 'Русский',
appTheme: 'Тема приложения',
theme: 'Тема',
ariaLabel: 'Тема приложения',
system: 'Системная',
light: 'Светлая',
dark: 'Темная',
dracula: 'Дракула',
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: 'Обеспечивает быстрый доступ из системного трея рабочего стола или области состояния, если доступно.',
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: 'ZIP-архив Chromium',
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: 'Авторские права © 2026 NimBold. Все права защищены.',
},
},
status: {
ready: 'Готово',
active: '{{count}} активных',
queued: '{{count}} в очереди',
done: '{{count}} завершено',
},
} as const;
export default ru;