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 uk = {
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: 'Відсутній дозвіл на автоматизацію. Увімкніть Firelink у розділі Автоматизація для системних подій у Налаштуваннях системи.',
revokePermissionDetails: 'macOS не дозволяє Firelink безпосередньо відкликати дозвіл на автоматизацію. Відкличте доступ до системних подій у Налаштуваннях системи, а потім поверніться до Firelink.',
requestingPermission: 'Запит дозволу на автоматизацію...',
enablePermissionDetails: 'Увімкніть 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: 'З\'єднання',
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 (Keychain)',
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}}"? Її незавершені завантаження перемістяться до Головної черги (Main Queue).',
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: '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.',
languageSystem: 'Мова системи',
languageEnglish: 'Англійська',
languageChinese: 'Спрощена китайська',
languageHebrew: 'Іврит',
languagePersian: 'Перська',
languageUkrainian: 'Українська',
languageRussian: 'Російська',
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: 'Надає швидкий доступ із системного трею або області стану, якщо доступно.',
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: 'Джерело Cookies з браузера:',
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: 'Авторське право © 2026 NimBold. Всі права захищені.',
},
},
status: {
ready: 'Готово',
active: '{{count}} активних',
queued: '{{count}} в черзі',
done: '{{count}} завершено',
},
} as const;
export default uk;