From 25028ead245d334fe8a9b184dde645bdaa17b6ea Mon Sep 17 00:00:00 2001 From: DevBot NetBird <91386968+netbirddev@users.noreply.github.com> Date: Tue, 6 Oct 2026 18:16:01 +0200 Subject: [PATCH] New translations common.json (Ukrainian) [ci skip] --- client/ui/i18n/locales/uk/common.json | 1395 ++++++++++++++++--------- 1 file changed, 930 insertions(+), 465 deletions(-) diff --git a/client/ui/i18n/locales/uk/common.json b/client/ui/i18n/locales/uk/common.json index 01d2f4452..07d3091ea 100644 --- a/client/ui/i18n/locales/uk/common.json +++ b/client/ui/i18n/locales/uk/common.json @@ -1,1397 +1,1862 @@ { "tray.tooltip": { - "message": "NetBird" + "message": "NetBird", + "description": "Hover tooltip on the system-tray / menu-bar icon. Brand name — do not translate." }, "tray.status.disconnected": { - "message": "Відключено" + "message": "Відключено", + "description": "Connection status surfaced through the tray icon: the client is not connected to the network." }, "tray.status.daemonUnavailable": { - "message": "Не запущено" + "message": "Не запущено", + "description": "Tray status: the background NetBird service (daemon) is not running." }, "tray.status.error": { - "message": "Помилка" + "message": "Помилка", + "description": "Tray status: the client is in an error state." }, "tray.status.connected": { - "message": "Підключено" + "message": "Підключено", + "description": "Tray status: connected to the NetBird network." }, "tray.status.connecting": { - "message": "Підключення" + "message": "Підключення", + "description": "Tray status: a connection is being established." }, "tray.status.needsLogin": { - "message": "Потрібно ввійти" + "message": "Потрібно ввійти", + "description": "Tray status: the user must sign in before connecting." }, "tray.status.loginFailed": { - "message": "Помилка входу" + "message": "Помилка входу", + "description": "Tray status: the last sign-in attempt failed." }, "tray.status.sessionExpired": { - "message": "Сеанс закінчився" + "message": "Сеанс закінчився", + "description": "Tray status: the authenticated session expired; the user must sign in again." }, "tray.session.expiresIn": { - "message": "До завершення сеансу: {remaining}" + "message": "До завершення сеансу: {remaining}", + "description": "Tray row showing time left before the session expires. {remaining} is a human-readable duration such as '5 minutes', built from the tray.session.unit.* strings. Keep {remaining} unchanged." }, "tray.session.unit.lessThanMinute": { - "message": "менше хвилини" + "message": "менше хвилини", + "description": "Duration fragment substituted into {remaining} (see tray.session.expiresIn). Used when under one minute remains." }, "tray.session.unit.minute": { - "message": "1 хв." + "message": "1 хв.", + "description": "Duration fragment for exactly one minute, substituted into {remaining}." }, "tray.session.unit.minutes": { - "message": "{count} хв." + "message": "{count} хв.", + "description": "Duration fragment for several minutes, substituted into {remaining}. {count} is the number of minutes; keep {count}." }, "tray.session.unit.hour": { - "message": "1 год." + "message": "1 год.", + "description": "Duration fragment for exactly one hour, substituted into {remaining}." }, "tray.session.unit.hours": { - "message": "{count} год." + "message": "{count} год.", + "description": "Duration fragment for several hours. {count} is the number of hours; keep {count}." }, "tray.session.unit.day": { - "message": "1 дн." + "message": "1 дн.", + "description": "Duration fragment for exactly one day, substituted into {remaining}." }, "tray.session.unit.days": { - "message": "{count} дн." + "message": "{count} дн.", + "description": "Duration fragment for several days. {count} is the number of days; keep {count}." }, "tray.menu.open": { - "message": "Відкрити NetBird" + "message": "Відкрити NetBird", + "description": "Tray menu item that opens the main NetBird window. Keep short." }, "tray.menu.connect": { - "message": "Підключитися" + "message": "Підключитися", + "description": "Tray menu item that connects to the network. Keep short." }, "tray.menu.disconnect": { - "message": "Відключитися" + "message": "Відключитися", + "description": "Tray menu item that disconnects from the network. Keep short." }, "tray.menu.exitNode": { - "message": "Вихідний вузол" + "message": "Вихідний вузол", + "description": "Tray submenu title for choosing an exit node (route all traffic through another peer)." }, "tray.menu.networks": { - "message": "Ресурси" + "message": "Ресурси", + "description": "Tray submenu title listing network resources the user can reach. Labelled 'Resources' in the UI even though the key says networks." }, "tray.menu.profiles": { - "message": "Профілі" + "message": "Профілі", + "description": "Tray submenu title listing connection profiles." }, "tray.menu.manageProfiles": { - "message": "Керування профілями" + "message": "Керування профілями", + "description": "Tray menu item that opens Settings → Profiles." }, "tray.menu.settings": { - "message": "Налаштування…" + "message": "Налаштування…", + "description": "Tray menu item that opens the Settings window. The trailing '...' signals that a window opens; keep it." }, "tray.menu.debugBundle": { - "message": "Створити архів діагностики" + "message": "Створити архів діагностики", + "description": "Tray menu item that generates a diagnostic log bundle for support." }, "tray.menu.about": { - "message": "Допомога та підтримка" + "message": "Допомога та підтримка", + "description": "Tray submenu title for help and support links." }, "tray.menu.github": { - "message": "GitHub" + "message": "GitHub", + "description": "Tray menu link to the GitHub repository. Brand name — do not translate." }, "tray.menu.documentation": { - "message": "Документація" + "message": "Документація", + "description": "Tray menu link to the online documentation." }, "tray.menu.troubleshoot": { - "message": "Діагностика" + "message": "Діагностика", + "description": "Tray menu link to troubleshooting help." }, "tray.menu.downloadLatest": { - "message": "Завантажити останню версію" + "message": "Завантажити останню версію", + "description": "Tray menu item to download the latest available version." }, "tray.menu.installVersion": { - "message": "Встановити версію {version}" + "message": "Встановити версію {version}", + "description": "Tray menu item to install a specific update. {version} is a version number like 0.30.1; keep {version}." }, "tray.menu.guiVersion": { - "message": "Графічний інтерфейс: {version}" + "message": "Графічний інтерфейс: {version}", + "description": "Tray menu row showing the installed UI version. 'GUI' = the graphical app. {version} is a version number; keep it." }, "tray.menu.daemonVersion": { - "message": "Служба: {version}" + "message": "Служба: {version}", + "description": "Tray menu row showing the background-service version. 'Daemon' = the background NetBird service. {version} is a version number; keep it." }, "tray.menu.versionUnknown": { - "message": "—" + "message": "—", + "description": "Placeholder shown in version rows when the version can't be determined. It is an em dash — leave as-is." }, "tray.menu.quit": { - "message": "Вийти з NetBird" + "message": "Вийти з NetBird", + "description": "Tray menu item that fully exits the app and removes the tray icon. Keep short." }, "notify.daemonOutdated.title": { - "message": "Служба NetBird застаріла" + "message": "Служба NetBird застаріла", + "description": "Title of the OS desktop notification shown when the running daemon is too old for this UI." }, "notify.daemonOutdated.body": { - "message": "Оновіть службу NetBird, щоб користуватися застосунком." + "message": "Оновіть службу NetBird, щоб користуватися застосунком.", + "description": "Body of the desktop notification telling the user to upgrade the daemon." }, "notify.update.title": { - "message": "Доступне оновлення NetBird" + "message": "Доступне оновлення NetBird", + "description": "Title of the OS desktop notification shown when an app update is available." }, "notify.update.body": { - "message": "Доступна версія NetBird {version}." + "message": "Доступна версія NetBird {version}.", + "description": "Body of the update-available desktop notification. {version} is the new version number; keep it." }, "notify.update.enforcedSuffix": { - "message": " Ваш адміністратор вимагає встановити це оновлення." + "message": " Ваш адміністратор вимагає встановити це оновлення.", + "description": "Sentence appended to the update notification body when the admin has made the update mandatory. Note the leading space — keep it." }, "notify.error.title": { - "message": "Помилка" + "message": "Помилка", + "description": "Title of a generic error desktop notification." }, "notify.error.connect": { - "message": "Не вдалося підключитися" + "message": "Не вдалося підключитися", + "description": "Error notification body shown when connecting failed." }, "notify.error.disconnect": { - "message": "Не вдалося відключитися" + "message": "Не вдалося відключитися", + "description": "Error notification body shown when disconnecting failed." }, "notify.error.switchProfile": { - "message": "Не вдалося перемкнутися на {profile}" + "message": "Не вдалося перемкнутися на {profile}", + "description": "Error notification shown when switching profiles failed. {profile} is the target profile name; keep it." }, "notify.error.exitNode": { - "message": "Не вдалося оновити вихідний вузол {name}" + "message": "Не вдалося оновити вихідний вузол {name}", + "description": "Error notification shown when updating the exit node failed. {name} is the exit node name; keep it." }, "notify.sessionExpired.title": { - "message": "Сеанс NetBird закінчився" + "message": "Сеанс NetBird закінчився", + "description": "Title of the desktop notification shown when the session has expired." }, "notify.sessionExpired.body": { - "message": "Ваш сеанс NetBird закінчився. Будь ласка, увійдіть знову." + "message": "Ваш сеанс NetBird закінчився. Будь ласка, увійдіть знову.", + "description": "Body of the session-expired desktop notification." }, "notify.sessionWarning.title": { - "message": "Сеанс невдовзі закінчиться" + "message": "Сеанс невдовзі закінчиться", + "description": "Title of the desktop notification warning that the session will expire soon." }, "notify.sessionWarning.body": { - "message": "Ваш сеанс NetBird закінчиться через {remaining}. Натисніть «Продовжити зараз», щоб оновити його." + "message": "Ваш сеанс NetBird закінчиться через {remaining}. Натисніть «Продовжити зараз», щоб оновити його.", + "description": "Body of the session-expiry warning notification. {remaining} is a human-readable duration (see tray.session.unit.*); keep it. 'Extend now' refers to the action button notify.sessionWarning.extend." }, "notify.sessionWarning.bodyGeneric": { - "message": "Ваш сеанс NetBird невдовзі закінчиться. Натисніть «Продовжити зараз», щоб оновити його." + "message": "Ваш сеанс NetBird невдовзі закінчиться. Натисніть «Продовжити зараз», щоб оновити його.", + "description": "Generic session-expiry warning body used when the exact remaining time isn't known." }, "notify.sessionWarning.extend": { - "message": "Продовжити зараз" + "message": "Продовжити зараз", + "description": "Action button on the session-expiry notification that renews the session. Keep short." }, "notify.sessionWarning.dismiss": { - "message": "Закрити" + "message": "Закрити", + "description": "Action button on the session-expiry notification that dismisses it. Keep short." }, "notify.sessionWarning.failed": { - "message": "Не вдалося продовжити сеанс NetBird" + "message": "Не вдалося продовжити сеанс NetBird", + "description": "Notification shown when renewing the session failed." }, "notify.sessionWarning.successTitle": { - "message": "Сеанс NetBird продовжено" + "message": "Сеанс NetBird продовжено", + "description": "Title of the notification confirming the session was renewed." }, "notify.sessionWarning.successBody": { - "message": "Ваш сеанс успішно продовжено." + "message": "Ваш сеанс успішно продовжено.", + "description": "Body of the notification confirming the session was renewed." }, "notify.sessionDeadlineRejected.title": { - "message": "Недійсний термін дії сеансу" + "message": "Недійсний термін дії сеансу", + "description": "Title of the notification shown when the server sent an invalid session deadline." }, "notify.sessionDeadlineRejected.body": { - "message": "Сервер надіслав недійсний термін дії сеансу. Будь ласка, увійдіть знову." + "message": "Сервер надіслав недійсний термін дії сеансу. Будь ласка, увійдіть знову.", + "description": "Body explaining the server sent an invalid session deadline and the user must sign in again." }, "notify.mdm.policyApplied.title": { - "message": "Налаштування NetBird оновлено" + "message": "Налаштування NetBird оновлено", + "description": "Title of the desktop notification shown when an MDM (IT-managed) policy changed the daemon configuration at runtime." }, "notify.mdm.policyApplied.body": { - "message": "Конфігурацію NetBird оновлено відповідно до політики вашої організації." + "message": "Конфігурацію NetBird оновлено відповідно до політики вашої організації.", + "description": "Body of the MDM policy-applied notification, telling the user their settings were changed by their organization's device-management policy." }, "common.cancel": { - "message": "Скасувати" + "message": "Скасувати", + "description": "Generic Cancel button label, reused across dialogs. Keep short." }, "common.save": { - "message": "Зберегти" + "message": "Зберегти", + "description": "Generic Save button label. Keep short." }, "common.saveChanges": { - "message": "Зберегти зміни" + "message": "Зберегти зміни", + "description": "Button label to save edited settings. Keep short." }, "common.saving": { - "message": "Збереження…" + "message": "Збереження…", + "description": "Button label / status shown while a save is in progress. Ends with an ellipsis." }, "common.close": { - "message": "Закрити" + "message": "Закрити", + "description": "Generic Close button label. Keep short." }, "common.copy": { - "message": "Копіювати" + "message": "Копіювати", + "description": "Generic Copy button label (copy to clipboard). Keep short." }, "common.togglePasswordVisibility": { - "message": "Показати/сховати пароль" + "message": "Показати/сховати пароль", + "description": "Accessibility label for the show/hide button inside a password field." }, "common.increase": { - "message": "Збільшити" + "message": "Збільшити", + "description": "Accessibility label for the increment (+) button on a numeric stepper input." }, "common.decrease": { - "message": "Зменшити" + "message": "Зменшити", + "description": "Accessibility label for the decrement (−) button on a numeric stepper input." }, "common.delete": { - "message": "Видалити" + "message": "Видалити", + "description": "Generic Delete button label. Keep short." }, "common.create": { - "message": "Створити" + "message": "Створити", + "description": "Generic Create button label. Keep short." }, "common.add": { - "message": "Додати" + "message": "Додати", + "description": "Generic Add button label. Keep short." }, "common.remove": { - "message": "Вилучити" + "message": "Вилучити", + "description": "Generic Remove button label. Keep short." }, "common.refresh": { - "message": "Оновити" + "message": "Оновити", + "description": "Generic Refresh button label. Keep short." }, "common.loading": { - "message": "Завантаження…" + "message": "Завантаження…", + "description": "Generic loading indicator text. Ends with an ellipsis." }, "common.netbird": { - "message": "NetBird" + "message": "NetBird", + "description": "The product name. Brand — do not translate." }, "common.noResults.title": { - "message": "Результатів не знайдено" + "message": "Результатів не знайдено", + "description": "Title of the empty state shown when a search or filter returns nothing." }, "common.noResults.description": { - "message": "Ми не змогли нічого знайти. Спробуйте змінити пошуковий запит або налаштування фільтрів." + "message": "Ми не змогли нічого знайти. Спробуйте змінити пошуковий запит або налаштування фільтрів.", + "description": "Body of the no-results empty state, suggesting a different search term or filters." }, "notConnected.title": { - "message": "Відключено" + "message": "Відключено", + "description": "Title of the placeholder shown on data screens while disconnected." }, "notConnected.description": { - "message": "Спочатку підключіться до NetBird, щоб переглянути детальну інформацію про піри, мережеві ресурси та вихідні вузли." + "message": "Спочатку підключіться до NetBird, щоб переглянути детальну інформацію про піри, мережеві ресурси та вихідні вузли.", + "description": "Body explaining the user must connect to NetBird first to see peer, resource, and exit-node details." }, "connect.status.disconnected": { - "message": "Відключено" + "message": "Відключено", + "description": "Label on the main-window connection toggle: not connected." }, "connect.status.connecting": { - "message": "Підключення…" + "message": "Підключення…", + "description": "Connection toggle label while connecting. Ends with an ellipsis." }, "connect.status.connected": { - "message": "Підключено" + "message": "Підключено", + "description": "Connection toggle label when connected." }, "connect.status.disconnecting": { - "message": "Відключення…" + "message": "Відключення…", + "description": "Connection toggle label while disconnecting. Ends with an ellipsis." }, "connect.status.daemonUnavailable": { - "message": "Служба недоступна" + "message": "Служба недоступна", + "description": "Connection toggle label when the background service is unavailable. 'Daemon' = background service." }, "connect.status.loginRequired": { - "message": "Потрібно ввійти" + "message": "Потрібно ввійти", + "description": "Connection toggle label when sign-in is required before connecting." }, "connect.error.loginTitle": { - "message": "Помилка входу" + "message": "Помилка входу", + "description": "Error-dialog title shown when sign-in fails. The action-named '… Failed' style is intentional — keep it." }, "connect.error.connectTitle": { - "message": "Помилка підключення" + "message": "Помилка підключення", + "description": "Error-dialog title shown when connecting fails." }, "connect.error.disconnectTitle": { - "message": "Помилка відключення" + "message": "Помилка відключення", + "description": "Error-dialog title shown when disconnecting fails." }, "nav.peers.title": { - "message": "Піри" + "message": "Піри", + "description": "Navigation label for the Peers section (other devices in the network)." }, "nav.peers.description": { - "message": "Підключено {connected} з {total}" + "message": "Підключено {connected} з {total}", + "description": "Sub-label under Peers showing how many are connected. {connected} and {total} are numbers; keep both." }, "nav.resources.title": { - "message": "Ресурси" + "message": "Ресурси", + "description": "Navigation label for the Resources section (routed networks)." }, "nav.resources.description": { - "message": "Активно {active} з {total}" + "message": "Активно {active} з {total}", + "description": "Sub-label under Resources showing how many are active. {active} and {total} are numbers; keep both." }, "nav.exitNode.title": { - "message": "Вихідні вузли" + "message": "Вихідні вузли", + "description": "Navigation label for the Exit Nodes section." }, "nav.exitNode.none": { - "message": "Неактивний" + "message": "Неактивний", + "description": "Sub-label under Exit Nodes when no exit node is in use." }, "nav.exitNode.using": { - "message": "Через {name}" + "message": "Через {name}", + "description": "Sub-label under Exit Nodes when one is active. {name} is the exit node's name; keep it." }, "header.openSettings": { - "message": "Відкрити налаштування" + "message": "Відкрити налаштування", + "description": "Accessibility label / tooltip for the gear icon that opens Settings." }, "header.togglePanel": { - "message": "Показати/сховати бічну панель" + "message": "Показати/сховати бічну панель", + "description": "Accessibility label / tooltip for the button that shows or hides the side panel." }, "profile.selector.loading": { - "message": "Завантаження…" + "message": "Завантаження…", + "description": "Shown in the profile picker while profiles load. Ends with an ellipsis." }, "profile.selector.noProfile": { - "message": "Немає профілю" + "message": "Немає профілю", + "description": "Shown in the profile picker when no profile is selected." }, "profile.selector.searchPlaceholder": { - "message": "Пошук профілю за назвою…" + "message": "Пошук профілю за назвою…", + "description": "Placeholder text in the profile picker's search field." }, "profile.selector.emptyTitle": { - "message": "Профілів не знайдено" + "message": "Профілів не знайдено", + "description": "Title shown in the profile picker when a search matches no profiles." }, "profile.selector.emptyDescription": { - "message": "Спробуйте змінити пошуковий запит або створіть новий профіль." + "message": "Спробуйте змінити пошуковий запит або створіть новий профіль.", + "description": "Body shown when no profiles match the search, suggesting a different term or creating one." }, "profile.selector.newProfile": { - "message": "Новий профіль" + "message": "Новий профіль", + "description": "Button in the profile picker to create a new profile. Keep short." }, "profile.selector.moreOptions": { - "message": "Додаткові параметри" + "message": "Додаткові параметри", + "description": "Accessibility label for the per-profile kebab (⋯) menu." }, "profile.selector.deregister": { - "message": "Вийти з профілю" + "message": "Вийти з профілю", + "description": "Per-profile menu action: deregister (sign out of the profile but keep it)." }, "profile.selector.delete": { - "message": "Видалити" + "message": "Видалити", + "description": "Per-profile menu action: delete the profile." }, "profile.selector.switchTo": { - "message": "Перемкнутися на цей профіль" + "message": "Перемкнутися на цей профіль", + "description": "Tooltip / label for the action that switches to a profile." }, "profile.selector.edit": { - "message": "Редагувати" + "message": "Редагувати", + "description": "Per-profile menu action: open the edit dialog to rename or change the management server." }, "profile.edit.title": { - "message": "Редагувати профіль" + "message": "Редагувати профіль", + "description": "Title of the dialog for editing an existing profile." }, "profile.edit.submit": { - "message": "Зберегти зміни" + "message": "Зберегти зміни", + "description": "Submit button on the edit-profile dialog. Keep short." }, "profile.dialog.title": { - "message": "Введіть назву профілю" + "message": "Введіть назву профілю", + "description": "Title of the dialog for naming a new profile." }, "profile.dialog.nameLabel": { - "message": "Назва профілю" + "message": "Назва профілю", + "description": "Field label for the profile name." }, "profile.dialog.description": { - "message": "Вкажіть зрозумілу назву для вашого профілю." + "message": "Вкажіть зрозумілу назву для вашого профілю.", + "description": "Helper text under the profile-name field." }, "profile.dialog.placeholder": { - "message": "наприклад, Робота" + "message": "наприклад, Робота", + "description": "Example placeholder shown in the profile-name field. 'Work' is a sample value; translate it to a natural example." }, "profile.dialog.submit": { - "message": "Додати профіль" + "message": "Додати профіль", + "description": "Submit button on the add-profile dialog. Keep short." }, "profile.dialog.required": { - "message": "Будь ласка, введіть назву профілю, наприклад, «Робота» або «Дім»." + "message": "Будь ласка, введіть назву профілю, наприклад, «Робота» або «Дім».", + "description": "Validation message shown when the profile name is empty. The examples (work, home) may be localized." }, "profile.dialog.managementHelp": { - "message": "Використовуйте NetBird Cloud або власний сервер." + "message": "Використовуйте NetBird Cloud або власний сервер.", + "description": "Helper text noting the profile can use NetBird Cloud or a self-hosted server." }, "profile.dialog.urlUnreachable": { - "message": "Не вдалося підключитися до цього сервера. Перевірте URL-адресу або додайте профіль, якщо ви впевнені, що вона правильна." + "message": "Не вдалося підключитися до цього сервера. Перевірте URL-адресу або додайте профіль, якщо ви впевнені, що вона правильна.", + "description": "Soft warning when the entered server URL couldn't be reached; the user may add the profile anyway." }, "header.menu.settings": { - "message": "Налаштування…" + "message": "Налаштування…", + "description": "'More' menu item in the header that opens Settings. The trailing '...' signals a window opens." }, "header.menu.defaultView": { - "message": "Стандартний вигляд" + "message": "Стандартний вигляд", + "description": "'More' menu item that switches the main window to the compact default view." }, "header.menu.advancedView": { - "message": "Розширений вигляд" + "message": "Розширений вигляд", + "description": "'More' menu item that switches the main window to the wider advanced view." }, "header.menu.updateAvailable": { - "message": "Доступне оновлення" + "message": "Доступне оновлення", + "description": "'More' menu item / badge shown when an update is available." }, "header.menu.open": { - "message": "Відкрити меню" + "message": "Відкрити меню", + "description": "Accessibility label for the header's more (⋮) button that opens the menu." }, "header.profile.switch": { - "message": "Змінити профіль" + "message": "Змінити профіль", + "description": "Accessibility label for the header's profile selector button." }, "connect.toggle.label": { - "message": "Перемкнути підключення NetBird" + "message": "Перемкнути підключення NetBird", + "description": "Accessibility label for the large connect/disconnect toggle on the main page." }, "connect.localIp.label": { - "message": "Локальні IP-адреси" + "message": "Локальні IP-адреси", + "description": "Accessibility label for the local IP selector that toggles between IPv4 and IPv6 on the main page." }, "common.search": { - "message": "Пошук" + "message": "Пошук", + "description": "Accessibility label for a generic search input." }, "common.filter": { - "message": "Фільтр" + "message": "Фільтр", + "description": "Accessibility label for a generic filter control." }, "exitNodes.dropdown.trigger": { - "message": "Вибрати вихідний вузол" + "message": "Вибрати вихідний вузол", + "description": "Accessibility label for the exit-node picker button at the bottom of the main page." }, "peers.row.label": { - "message": "Відкрити деталі для {name}, {status}" + "message": "Відкрити деталі для {name}, {status}", + "description": "Accessibility label for a peer row in the list. {name} is the peer name and {status} is the connection status; keep both placeholders." }, "peers.dialog.title": { - "message": "Деталі піра" + "message": "Деталі піра", + "description": "Accessibility title (announced to screen readers) for the peer details dialog/panel." }, "networks.row.toggle": { - "message": "Перемкнути {name}" + "message": "Перемкнути {name}", + "description": "Accessibility label for the row-wide toggle on a network/resource. {name} is the resource id; keep the placeholder." }, "networks.bulk.label": { - "message": "Перемкнути всі видимі ресурси" + "message": "Перемкнути всі видимі ресурси", + "description": "Accessibility label for the bulk enable/disable button at the bottom of the resources list." }, "profile.switch.title": { - "message": "Перемкнутися на профіль «{name}»?" + "message": "Перемкнутися на профіль «{name}»?", + "description": "Confirmation-dialog title for switching profiles. {name} is the target profile name, shown in quotes; keep {name} and the surrounding quotes." }, "profile.switch.message": { - "message": "Ви впевнені, що хочете змінити профіль?\nВаш поточний профіль буде відключено." + "message": "Ви впевнені, що хочете змінити профіль?\nВаш поточний профіль буде відключено.", + "description": "Confirmation body for switching profiles. Contains a line break (\\n) — keep it." }, "profile.switch.confirm": { - "message": "Підтвердити" + "message": "Підтвердити", + "description": "Confirm button on the switch-profile dialog. Keep short." }, "profile.deregister.title": { - "message": "Вийти з профілю «{name}»?" + "message": "Вийти з профілю «{name}»?", + "description": "Confirmation-dialog title for deregistering a profile. {name} is the profile name; keep it and the quotes." }, "profile.deregister.message": { - "message": "Ви впевнені, що хочете вийти з цього профілю?\nВам доведеться увійти знову, щоб використовувати його." + "message": "Ви впевнені, що хочете вийти з цього профілю?\nВам доведеться увійти знову, щоб використовувати його.", + "description": "Confirmation body for deregistering; warns the user must sign in again. Contains a line break (\\n) — keep it." }, "profile.deregister.confirm": { - "message": "Вийти" + "message": "Вийти", + "description": "Confirm button on the deregister dialog. Keep short." }, "profile.delete.title": { - "message": "Видалити профіль «{name}»?" + "message": "Видалити профіль «{name}»?", + "description": "Confirmation-dialog title for deleting a profile. {name} is the profile name; keep it and the quotes." }, "profile.delete.message": { - "message": "Ви впевнені, що хочете видалити цей профіль?\nЦю дію неможливо скасувати." + "message": "Ви впевнені, що хочете видалити цей профіль?\nЦю дію неможливо скасувати.", + "description": "Confirmation body for deleting; warns the action can't be undone. Contains a line break (\\n) — keep it." }, "profile.delete.disabledActive": { - "message": "Активні профілі не можна видаляти. Перемкніться на інший профіль перед видаленням цього." + "message": "Активні профілі не можна видаляти. Перемкніться на інший профіль перед видаленням цього.", + "description": "Tooltip explaining the active profile can't be deleted until the user switches away." }, "profile.delete.disabledDefault": { - "message": "Профіль за замовчуванням не можна видалити." + "message": "Профіль за замовчуванням не можна видалити.", + "description": "Tooltip explaining the default profile can't be deleted." }, "profile.error.switchTitle": { - "message": "Помилка зміни профілю" + "message": "Помилка зміни профілю", + "description": "Error-dialog title when switching profiles fails." }, "profile.error.deregisterTitle": { - "message": "Помилка виходу з профілю" + "message": "Помилка виходу з профілю", + "description": "Error-dialog title when deregistering a profile fails." }, "profile.error.deleteTitle": { - "message": "Помилка видалення профілю" + "message": "Помилка видалення профілю", + "description": "Error-dialog title when deleting a profile fails." }, "profile.error.createTitle": { - "message": "Помилка створення профілю" + "message": "Помилка створення профілю", + "description": "Error-dialog title when creating a profile fails." }, "profile.error.editTitle": { - "message": "Помилка редагування профілю" + "message": "Помилка редагування профілю", + "description": "Error-dialog title when editing a profile (rename or management URL change) fails." }, "profile.error.loadTitle": { - "message": "Помилка завантаження профілів" + "message": "Помилка завантаження профілів", + "description": "Error-dialog title when loading profiles fails." }, "profile.dropdown.activeProfile": { - "message": "Активний профіль" + "message": "Активний профіль", + "description": "Section heading in the header profile dropdown for the current profile." }, "profile.dropdown.switchProfile": { - "message": "Змінити профіль" + "message": "Змінити профіль", + "description": "Section heading / action in the profile dropdown to switch profiles." }, "profile.dropdown.noEmail": { - "message": "Інше" + "message": "Інше", + "description": "Label shown for a profile that has no associated email address." }, "profile.dropdown.addProfile": { - "message": "Додати профіль" + "message": "Додати профіль", + "description": "Profile dropdown action to add a profile." }, "profile.dropdown.manageProfiles": { - "message": "Керування профілями" + "message": "Керування профілями", + "description": "Profile dropdown action that opens Settings → Profiles." }, "profile.dropdown.settings": { - "message": "Налаштування" + "message": "Налаштування", + "description": "Profile dropdown action that opens Settings." }, "settings.profiles.section.profiles": { - "message": "Профілі" + "message": "Профілі", + "description": "Section heading on the Profiles settings tab." }, "settings.profiles.intro": { - "message": "Використовуйте кілька профілів NetBird одночасно, наприклад, робочий та особистий облікові записи або різні сервери керування. Додавайте профілі, виходьте з них або видаляйте їх нижче." + "message": "Використовуйте кілька профілів NetBird одночасно, наприклад, робочий та особистий облікові записи або різні сервери керування. Додавайте профілі, виходьте з них або видаляйте їх нижче.", + "description": "Intro paragraph on the Profiles settings tab explaining what profiles are for." }, "settings.profiles.addProfile": { - "message": "Додати профіль" + "message": "Додати профіль", + "description": "Button on the Profiles settings tab to add a profile." }, "settings.profiles.active": { - "message": "Активний" + "message": "Активний", + "description": "Badge marking the currently active profile in the profiles table." }, "settings.profiles.emptyTitle": { - "message": "Немає профілів" + "message": "Немає профілів", + "description": "Title of the empty state when there are no profiles." }, "settings.profiles.emptyDescription": { - "message": "Створіть профіль, щоб підключитися до сервера керування NetBird." + "message": "Створіть профіль, щоб підключитися до сервера керування NetBird.", + "description": "Body of the no-profiles empty state." }, "settings.error.loadTitle": { - "message": "Помилка завантаження налаштувань" + "message": "Помилка завантаження налаштувань", + "description": "Error-dialog title when loading settings fails." }, "settings.error.saveTitle": { - "message": "Помилка збереження налаштувань" + "message": "Помилка збереження налаштувань", + "description": "Error-dialog title when saving settings fails." }, "settings.error.debugBundleTitle": { - "message": "Помилка створення архіву діагностики" + "message": "Помилка створення архіву діагностики", + "description": "Error-dialog title when creating the debug bundle fails." }, "settings.nav.label": { - "message": "Розділи налаштувань" + "message": "Розділи налаштувань", + "description": "Accessibility label for the Settings page's side navigation (list of section tabs)." }, "settings.tabs.general": { - "message": "Загальні" + "message": "Загальні", + "description": "Settings tab label: General. Keep short." }, "settings.tabs.network": { - "message": "Мережа" + "message": "Мережа", + "description": "Settings tab label: Network. Keep short." }, "settings.tabs.security": { - "message": "Безпека" + "message": "Безпека", + "description": "Settings tab label: Security. Keep short." }, "settings.tabs.profiles": { - "message": "Профілі" + "message": "Профілі", + "description": "Settings tab label: Profiles. Keep short." }, "settings.tabs.ssh": { - "message": "SSH" + "message": "SSH", + "description": "Settings tab label: SSH. Acronym — keep as-is." }, "settings.tabs.advanced": { - "message": "Розширені" + "message": "Розширені", + "description": "Settings tab label: Advanced. Keep short." }, "settings.tabs.troubleshooting": { - "message": "Діагностика" + "message": "Діагностика", + "description": "Settings tab label: Troubleshoot. Keep short." }, "settings.tabs.about": { - "message": "Про програму" + "message": "Про програму", + "description": "Settings tab label: About. Keep short." }, "settings.tabs.updateAvailable": { - "message": "Доступне оновлення" + "message": "Доступне оновлення", + "description": "Settings tab label / badge shown when an update is available." }, "settings.general.section.general": { - "message": "Загальні" + "message": "Загальні", + "description": "Section heading on the General settings tab." }, "settings.general.section.connection": { - "message": "Підключення" + "message": "Підключення", + "description": "Section heading for connection-related options on the General tab." }, "settings.general.connectOnStartup.label": { - "message": "Підключитися під час запуску" + "message": "Підключитися під час запуску", + "description": "Toggle label: connect automatically when the service starts." }, "settings.general.connectOnStartup.help": { - "message": "Автоматично встановлювати підключення під час запуску служби." + "message": "Автоматично встановлювати підключення під час запуску служби.", + "description": "Helper text for the connect-on-startup toggle." }, "settings.general.notifications.label": { - "message": "Сповіщення на робочому столі" + "message": "Сповіщення на робочому столі", + "description": "Toggle label: enable desktop notifications." }, "settings.general.notifications.help": { - "message": "Показувати сповіщення на робочому столі про нові оновлення та події підключення." + "message": "Показувати сповіщення на робочому столі про нові оновлення та події підключення.", + "description": "Helper text for the desktop-notifications toggle." }, "settings.general.autostart.label": { - "message": "Запускати інтерфейс NetBird під час входу" + "message": "Запускати інтерфейс NetBird під час входу", + "description": "Toggle label: launch the NetBird UI at login." }, "settings.general.autostart.help": { - "message": "Автоматично запускати інтерфейс NetBird під час входу в систему. Це стосується лише графічного інтерфейсу, а не фонової служби." + "message": "Автоматично запускати інтерфейс NetBird під час входу в систему. Це стосується лише графічного інтерфейсу, а не фонової служби.", + "description": "Helper text clarifying autostart affects only the UI, not the background service." }, "settings.general.autostart.errorTitle": { - "message": "Помилка зміни автозапуску" + "message": "Помилка зміни автозапуску", + "description": "Error-dialog title when changing the autostart setting fails." }, "settings.general.keepConnectedOnQuit.label": { - "message": "Залишатися підключеним після виходу" + "message": "Залишатися підключеним після виходу", + "description": "Toggle label: keep the VPN connection up after quitting the UI." }, "settings.general.keepConnectedOnQuit.help": { - "message": "Підключення залишатиметься активним у фоновому режимі після закриття NetBird. Воно буде розірвано лише тоді, коли ви відключите його самостійно." + "message": "Підключення залишатиметься активним у фоновому режимі після закриття NetBird. Воно буде розірвано лише тоді, коли ви відключите його самостійно.", + "description": "Helper text for the stay-connected-after-quitting toggle." }, "settings.general.language.label": { - "message": "Мова інтерфейсу" + "message": "Мова інтерфейсу", + "description": "Label for the display-language picker." }, "settings.general.language.help": { - "message": "Виберіть мову для інтерфейсу NetBird." + "message": "Виберіть мову для інтерфейсу NetBird.", + "description": "Helper text for the language picker." }, "settings.general.language.search": { - "message": "Пошук мови…" + "message": "Пошук мови…", + "description": "Placeholder in the language picker's search field." }, "settings.general.language.empty": { - "message": "Не знайдено жодної мови." + "message": "Не знайдено жодної мови.", + "description": "Shown when no languages match the search." }, "settings.general.theme.label": { - "message": "Тема" + "message": "Тема", + "description": "Label for the appearance/theme picker." }, "settings.general.theme.help": { - "message": "Виберіть світлу чи темну тему або використовуйте системні налаштування." + "message": "Виберіть світлу чи темну тему або використовуйте системні налаштування.", + "description": "Helper text for the theme picker." }, "settings.general.theme.system": { - "message": "Системна" + "message": "Системна", + "description": "Theme option: follow the OS appearance." }, "settings.general.theme.light": { - "message": "Світла" + "message": "Світла", + "description": "Theme option: light appearance." }, "settings.general.theme.dark": { - "message": "Темна" + "message": "Темна", + "description": "Theme option: dark appearance." }, "settings.general.management.label": { - "message": "Сервер керування" + "message": "Сервер керування", + "description": "Label for the management-server selector." }, "settings.general.management.help": { - "message": "Підключайтеся до NetBird Cloud або власного сервера керування. Зміни призведуть до перепідключення клієнта." + "message": "Підключайтеся до NetBird Cloud або власного сервера керування. Зміни призведуть до перепідключення клієнта.", + "description": "Helper text explaining Cloud vs self-hosted management server; warns that changes reconnect the client." }, "settings.general.management.cloud": { - "message": "Cloud" + "message": "Cloud", + "description": "Option label for using NetBird Cloud as the management server." }, "settings.general.management.selfHosted": { - "message": "Власний сервер" + "message": "Власний сервер", + "description": "Option label for using a self-hosted management server. 'Self-hosted' is a common technical term." }, "settings.general.management.urlPlaceholder": { - "message": "https://netbird.selfhosted.com:443" + "message": "https://netbird.selfhosted.com:443", + "description": "Example URL placeholder for the self-hosted server field. It is a sample URL — do not translate the URL itself." }, "settings.general.management.urlError": { - "message": "Будь ласка, введіть дійсну URL-адресу, наприклад: https://netbird.selfhosted.com:443" + "message": "Будь ласка, введіть дійсну URL-адресу, наприклад: https://netbird.selfhosted.com:443", + "description": "Validation message for an invalid management-server URL. The example URL stays as-is." }, "settings.general.management.urlUnreachable": { - "message": "Не вдалося підключитися до цього сервера. Перевірте URL-адресу або все одно збережіть зміни, якщо ви впевнені, що вона правильна." + "message": "Не вдалося підключитися до цього сервера. Перевірте URL-адресу або все одно збережіть зміни, якщо ви впевнені, що вона правильна.", + "description": "Soft warning when the management URL couldn't be reached; the user may save anyway." }, "settings.general.management.switchCloudTitle": { - "message": "Перемкнутися на NetBird Cloud?" + "message": "Перемкнутися на NetBird Cloud?", + "description": "Confirmation-dialog title for switching to NetBird Cloud." }, "settings.general.management.switchCloudMessage": { - "message": "Це відключить вас від власного сервера.\nВам може знадобитися увійти знову." + "message": "Це відключить вас від власного сервера.\nВам може знадобитися увійти знову.", + "description": "Confirmation body warning the self-hosted server will be disconnected. Contains a line break (\\n) — keep it." }, "settings.general.management.switchCloudConfirm": { - "message": "Перемкнутися на Cloud" + "message": "Перемкнутися на Cloud", + "description": "Confirm button for switching to Cloud. Keep short." }, "settings.network.section.connectivity": { - "message": "Підключення" + "message": "Підключення", + "description": "Section heading for connectivity options on the Network tab." }, "settings.network.section.routingDns": { - "message": "Маршрутизація та DNS" + "message": "Маршрутизація та DNS", + "description": "Section heading for routing and DNS options. 'DNS' is an acronym — keep it." }, "settings.network.monitor.label": { - "message": "Перепідключатися при зміні мережі" + "message": "Перепідключатися при зміні мережі", + "description": "Toggle label: reconnect automatically on network change." }, "settings.network.monitor.help": { - "message": "Відстежувати мережу й автоматично перепідключатися у разі таких змін, як перемикання Wi-Fi, зміна Ethernet-підключення або вихід із режиму сну." + "message": "Відстежувати мережу й автоматично перепідключатися у разі таких змін, як перемикання Wi-Fi, зміна Ethernet-підключення або вихід із режиму сну.", + "description": "Helper text for the network-change reconnect toggle." }, "settings.network.dns.label": { - "message": "Увімкнути DNS" + "message": "Увімкнути DNS", + "description": "Toggle label: enable DNS. 'DNS' — keep acronym." }, "settings.network.dns.help": { - "message": "Застосовувати налаштування DNS, якими керує NetBird, до локального DNS-розв’язувача хоста." + "message": "Застосовувати налаштування DNS, якими керує NetBird, до локального DNS-розв’язувача хоста.", + "description": "Helper text for the enable-DNS toggle." }, "settings.network.clientRoutes.label": { - "message": "Увімкнути клієнтські маршрути" + "message": "Увімкнути клієнтські маршрути", + "description": "Toggle label: enable client routes." }, "settings.network.clientRoutes.help": { - "message": "Приймати маршрути від інших пірів для доступу до їхніх мереж." + "message": "Приймати маршрути від інших пірів для доступу до їхніх мереж.", + "description": "Helper text for client routes (accept routes from other peers)." }, "settings.network.serverRoutes.label": { - "message": "Увімкнути серверні маршрути" + "message": "Увімкнути серверні маршрути", + "description": "Toggle label: enable server routes." }, "settings.network.serverRoutes.help": { - "message": "Анонсувати локальні маршрути цього хоста іншим пірам." + "message": "Анонсувати локальні маршрути цього хоста іншим пірам.", + "description": "Helper text for server routes (advertise this host's local routes to other peers)." }, "settings.network.ipv6.label": { - "message": "Увімкнути IPv6" + "message": "Увімкнути IPv6", + "description": "Toggle label: enable IPv6. 'IPv6' — keep as-is." }, "settings.network.ipv6.help": { - "message": "Використовувати адресацію IPv6 для оверлейної мережі NetBird." + "message": "Використовувати адресацію IPv6 для оверлейної мережі NetBird.", + "description": "Helper text for the IPv6 toggle." }, "settings.security.section.firewall": { - "message": "Брандмауер" + "message": "Брандмауер", + "description": "Section heading: Firewall." }, "settings.security.section.encryption": { - "message": "Шифрування" + "message": "Шифрування", + "description": "Section heading: Encryption." }, "settings.security.blockInbound.label": { - "message": "Блокувати вхідний трафік" + "message": "Блокувати вхідний трафік", + "description": "Toggle label: block inbound traffic." }, "settings.security.blockInbound.help": { - "message": "Відхиляти небажані підключення від пірів до цього пристрою та будь-яких мереж, які він маршрутизує. Вихідний трафік не обмежується." + "message": "Відхиляти небажані підключення від пірів до цього пристрою та будь-яких мереж, які він маршрутизує. Вихідний трафік не обмежується.", + "description": "Helper text for blocking inbound traffic." }, "settings.security.blockLan.label": { - "message": "Блокувати доступ до LAN" + "message": "Блокувати доступ до LAN", + "description": "Toggle label: block LAN access. 'LAN' — keep acronym." }, "settings.security.blockLan.help": { - "message": "Заборонити пірам отримувати доступ до вашої локальної мережі або її пристроїв, коли цей пристрій маршрутизує їхній трафік." + "message": "Заборонити пірам отримувати доступ до вашої локальної мережі або її пристроїв, коли цей пристрій маршрутизує їхній трафік.", + "description": "Helper text for blocking LAN access." }, "settings.security.rosenpass.label": { - "message": "Увімкнути постквантову стійкість" + "message": "Увімкнути постквантову стійкість", + "description": "Toggle label: enable quantum-resistance." }, "settings.security.rosenpass.help": { - "message": "Додати постквантовий обмін ключами через Rosenpass поверх WireGuard®." + "message": "Додати постквантовий обмін ключами через Rosenpass поверх WireGuard®.", + "description": "Helper text: adds a post-quantum key exchange via Rosenpass on top of WireGuard®. 'Rosenpass' and 'WireGuard®' are product names — do not translate; keep the ® symbol." }, "settings.security.rosenpassPermissive.label": { - "message": "Увімкнути дозвільний режим" + "message": "Увімкнути дозвільний режим", + "description": "Toggle label: enable permissive mode (for quantum-resistance)." }, "settings.security.rosenpassPermissive.help": { - "message": "Дозволити підключення до пірів без підтримки постквантової стійкості." + "message": "Дозволити підключення до пірів без підтримки постквантової стійкості.", + "description": "Helper text for permissive mode (allow peers without quantum-resistance support)." }, "settings.ssh.section.server": { - "message": "Сервер" + "message": "Сервер", + "description": "Section heading: Server (SSH settings)." }, "settings.ssh.section.capabilities": { - "message": "Можливості" + "message": "Можливості", + "description": "Section heading: Capabilities (SSH features)." }, "settings.ssh.section.authentication": { - "message": "Автентифікація" + "message": "Автентифікація", + "description": "Section heading: Authentication (SSH)." }, "settings.ssh.server.label": { - "message": "Увімкнути SSH-сервер" + "message": "Увімкнути SSH-сервер", + "description": "Toggle label: enable the SSH server." }, "settings.ssh.server.help": { - "message": "Запустити SSH-сервер NetBird на цьому хості, щоб інші піри могли підключатися до нього." + "message": "Запустити SSH-сервер NetBird на цьому хості, щоб інші піри могли підключатися до нього.", + "description": "Helper text for the SSH server toggle." }, "settings.ssh.root.label": { - "message": "Дозволити вхід як root" + "message": "Дозволити вхід як root", + "description": "Toggle label: allow root login over SSH. 'root' is the Unix superuser account — keep as-is." }, "settings.ssh.root.help": { - "message": "Дозволити пірам входити як користувач root. Вимкніть, щоб вимагати непривілейований обліковий запис." + "message": "Дозволити пірам входити як користувач root. Вимкніть, щоб вимагати непривілейований обліковий запис.", + "description": "Helper text for allowing root login." }, "settings.ssh.sftp.label": { - "message": "Дозволити SFTP" + "message": "Дозволити SFTP", + "description": "Toggle label: allow SFTP. 'SFTP' — keep acronym." }, "settings.ssh.sftp.help": { - "message": "Безпечно передавати файли за допомогою нативних клієнтів SFTP або SCP." + "message": "Безпечно передавати файли за допомогою нативних клієнтів SFTP або SCP.", + "description": "Helper text about SFTP/SCP file transfer. Keep the acronyms." }, "settings.ssh.localForward.label": { - "message": "Локальне переспрямування портів" + "message": "Локальне переспрямування портів", + "description": "Toggle label: local port forwarding." }, "settings.ssh.localForward.help": { - "message": "Дозволити пірам, що підключаються, переспрямовувати локальні порти до сервісів, доступних із цього хоста." + "message": "Дозволити пірам, що підключаються, переспрямовувати локальні порти до сервісів, доступних із цього хоста.", + "description": "Helper text for local port forwarding." }, "settings.ssh.remoteForward.label": { - "message": "Віддалене переспрямування портів" + "message": "Віддалене переспрямування портів", + "description": "Toggle label: remote port forwarding." }, "settings.ssh.remoteForward.help": { - "message": "Дозволити підключеним пірам відкривати порти на цьому хості з переспрямуванням на свої машини." + "message": "Дозволити підключеним пірам відкривати порти на цьому хості з переспрямуванням на свої машини.", + "description": "Helper text for remote port forwarding." }, "settings.ssh.jwt.label": { - "message": "Увімкнути JWT-автентифікацію" + "message": "Увімкнути JWT-автентифікацію", + "description": "Toggle label: enable JWT authentication. 'JWT' — keep acronym." }, "settings.ssh.jwt.help": { - "message": "Перевіряти кожен сеанс SSH через ваш IdP для ідентифікації користувачів та аудиту. Вимкніть, щоб покладатися лише на політики мережевих ACL, що корисно, коли IdP недоступний." + "message": "Перевіряти кожен сеанс SSH через ваш IdP для ідентифікації користувачів та аудиту. Вимкніть, щоб покладатися лише на політики мережевих ACL, що корисно, коли IdP недоступний.", + "description": "Helper text for JWT auth. 'IdP' (identity provider) and 'ACL' are acronyms — keep them." }, "settings.ssh.jwtTtl.label": { - "message": "Час кешування JWT (TTL)" + "message": "Час кешування JWT (TTL)", + "description": "Label for the JWT cache time-to-live field. 'JWT' and 'TTL' — keep acronyms." }, "settings.ssh.jwtTtl.help": { - "message": "Як довго цей клієнт кешує JWT перед повторним запитом для вихідних SSH-з’єднань. Встановіть 0, щоб вимкнути кешування та проходити автентифікацію при кожному підключенні." + "message": "Як довго цей клієнт кешує JWT перед повторним запитом для вихідних SSH-з’єднань. Встановіть 0, щоб вимкнути кешування та проходити автентифікацію при кожному підключенні.", + "description": "Helper text for the JWT cache TTL; mentions setting 0 to disable caching." }, "settings.ssh.jwtTtl.suffix": { - "message": "сек." + "message": "сек.", + "description": "Unit suffix shown after the JWT TTL number field. The '(s)' marks an optional plural." }, "settings.advanced.section.interface": { - "message": "Інтерфейс" + "message": "Інтерфейс", + "description": "Section heading: Interface (network-interface settings)." }, "settings.advanced.section.security": { - "message": "Безпека" + "message": "Безпека", + "description": "Section heading: Security (advanced)." }, "settings.advanced.interfaceName.label": { - "message": "Назва" + "message": "Назва", + "description": "Field label for the WireGuard interface name." }, "settings.advanced.interfaceName.error": { - "message": "Використовуйте 1-15 літер, цифр, крапок, дефісів або підкреслень." + "message": "Використовуйте 1-15 літер, цифр, крапок, дефісів або підкреслень.", + "description": "Validation message for the interface name (allowed characters)." }, "settings.advanced.interfaceName.errorMac": { - "message": "Повинно починатися з «utun», після якого має йти число (наприклад, utun100)." + "message": "Повинно починатися з «utun», після якого має йти число (наприклад, utun100).", + "description": "Validation message specific to macOS, where the name must start with 'utun' followed by a number. Keep 'utun' and the example." }, "settings.advanced.port.label": { - "message": "Порт" + "message": "Порт", + "description": "Field label: Port." }, "settings.advanced.port.error": { - "message": "Введіть порт між {min} та {max}." + "message": "Введіть порт між {min} та {max}.", + "description": "Validation message for the port range. {min} and {max} are numbers; keep them." }, "settings.advanced.port.help": { - "message": "Якщо встановлено 0, буде використано випадковий вільний порт." + "message": "Якщо встановлено 0, буде використано випадковий вільний порт.", + "description": "Helper text: 0 means a random free port is used." }, "settings.advanced.mtu.label": { - "message": "MTU" + "message": "MTU", + "description": "Field label: MTU. 'MTU' — keep acronym." }, "settings.advanced.mtu.error": { - "message": "Введіть значення MTU між {min} та {max}." + "message": "Введіть значення MTU між {min} та {max}.", + "description": "Validation message for the MTU range. {min} and {max} are numbers; keep them." }, "settings.advanced.psk.label": { - "message": "Попередньо узгоджений ключ" + "message": "Попередньо узгоджений ключ", + "description": "Field label: Pre-shared Key." }, "settings.advanced.psk.help": { - "message": "Додатковий PSK WireGuard для симетричного шифрування. Це не те саме, що NetBird Setup Key. Ви зможете обмінюватися даними лише з тими пірами, які використовують такий самий попередньо узгоджений ключ." + "message": "Додатковий PSK WireGuard для симетричного шифрування. Це не те саме, що NetBird Setup Key. Ви зможете обмінюватися даними лише з тими пірами, які використовують такий самий попередньо узгоджений ключ.", + "description": "Helper text for the WireGuard PSK. 'WireGuard', 'PSK', and 'NetBird Setup Key' are product/technical terms — keep them." }, "settings.troubleshooting.section.title": { - "message": "Архів діагностики" + "message": "Архів діагностики", + "description": "Section heading: Debug bundle." }, "settings.troubleshooting.anonymize.label": { - "message": "Анонімізувати чутливу інформацію" + "message": "Анонімізувати чутливу інформацію", + "description": "Label for the anonymization level dropdown (None, Default, Strict)." }, "settings.troubleshooting.anonymize.help": { - "message": "Приховує IP-адреси, домени та інші конфіденційні дані." + "message": "Приховує IP-адреси, домени та інші конфіденційні дані.", + "description": "Helper text under the anonymization dropdown. The level details live in the info tooltip." }, "settings.troubleshooting.anonymize.info": { - "message": "«Стандартний» залишає внутрішні адреси IPv4 та імена пірів читабельними для служби підтримки. «Суворий» додатково анонімізує приватні (RFC 1918), CGNAT- та link-local-адреси, імена пірів і публічні ключі WireGuard. Однакові значення замінюються тим самим псевдонімом, тож піри залишаються розрізнюваними. Використовуйте «Суворий», якщо ділитеся архівом за межами організації." + "message": "«Стандартний» залишає внутрішні адреси IPv4 та імена пірів читабельними для служби підтримки. «Суворий» додатково анонімізує приватні (RFC 1918), CGNAT- та link-local-адреси, імена пірів і публічні ключі WireGuard. Однакові значення замінюються тим самим псевдонімом, тож піри залишаються розрізнюваними. Використовуйте «Суворий», якщо ділитеся архівом за межами організації.", + "description": "Info tooltip explaining the anonymization levels. 'RFC 1918', 'CGNAT', 'link-local', and 'WireGuard' are technical terms — keep them." }, "settings.troubleshooting.anonymize.none": { - "message": "Вимкнено" + "message": "Вимкнено", + "description": "Dropdown option: no anonymization." }, "settings.troubleshooting.anonymize.default": { - "message": "Стандартний" + "message": "Стандартний", + "description": "Dropdown option: default anonymization level." }, "settings.troubleshooting.anonymize.strict": { - "message": "Суворий" + "message": "Суворий", + "description": "Dropdown option: strict anonymization level." }, "settings.troubleshooting.systemInfo.label": { - "message": "Додати інформацію про систему" + "message": "Додати інформацію про систему", + "description": "Toggle label: include system information in the bundle." }, "settings.troubleshooting.systemInfo.help": { - "message": "Додати дані про ОС, ядро, мережеві інтерфейси та таблиці маршрутизації." + "message": "Додати дані про ОС, ядро, мережеві інтерфейси та таблиці маршрутизації.", + "description": "Helper text listing the system info included (OS, kernel, interfaces, routing tables)." }, "settings.troubleshooting.upload.label": { - "message": "Завантажити архів на сервери NetBird" + "message": "Завантажити архів на сервери NetBird", + "description": "Toggle label: upload the bundle to NetBird servers." }, "settings.troubleshooting.upload.help": { - "message": "Створює ключ завантаження, який можна передати службі підтримки NetBird." + "message": "Створює ключ завантаження, який можна передати службі підтримки NetBird.", + "description": "Helper text for uploading the bundle." }, "settings.troubleshooting.trace.label": { - "message": "Увімкнути журнали рівня TRACE" + "message": "Увімкнути журнали рівня TRACE", + "description": "Toggle label: raise daemon log level to TRACE while the bundle is built. 'TRACE' is a log level." }, "settings.troubleshooting.trace.help": { - "message": "Підвищує рівень журналювання до TRACE на час створення архіву та відновлює його після завершення." + "message": "Підвищує рівень журналювання до TRACE на час створення архіву та відновлює його після завершення.", + "description": "Helper text for the trace toggle. 'TRACE' is a log level — keep as-is." }, "settings.troubleshooting.capture.label": { - "message": "Запис сеансу" + "message": "Запис сеансу", + "description": "Toggle label: open a capture session — reconnect NetBird, wait a duration, optionally record packets." }, "settings.troubleshooting.capture.help": { - "message": "Перепідключає NetBird і чекає, щоб ви могли відтворити проблему." + "message": "Перепідключає NetBird і чекає, щоб ви могли відтворити проблему.", + "description": "Helper text for the master Capture Session toggle." }, "settings.troubleshooting.packets.label": { - "message": "Захоплювати мережеві пакети" + "message": "Захоплювати мережеві пакети", + "description": "Toggle label: capture packets to a .pcap during the capture session." }, "settings.troubleshooting.packets.help": { - "message": "Зберігає файл .pcap із мережевим трафіком протягом сеансу захоплення." + "message": "Зберігає файл .pcap із мережевим трафіком протягом сеансу захоплення.", + "description": "Helper text for the packet recording toggle. '.pcap' is a file extension — keep it." }, "settings.troubleshooting.duration.label": { - "message": "Тривалість захоплення" + "message": "Тривалість захоплення", + "description": "Label for the trace-capture duration field." }, "settings.troubleshooting.duration.help": { - "message": "Скільки часу триває сеанс захоплення." + "message": "Скільки часу триває сеанс захоплення.", + "description": "Helper text for the capture duration." }, "settings.troubleshooting.duration.suffix": { - "message": "хв." + "message": "хв.", + "description": "Unit suffix after the duration field. The '(s)' marks an optional plural." }, "settings.troubleshooting.create": { - "message": "Створити архів" + "message": "Створити архів", + "description": "Button to create the debug bundle. Keep short." }, "settings.troubleshooting.progress.description": { - "message": "Збір журналів, даних про систему та інформації про стан підключення. Зазвичай це займає хвилину. Ви можете продовжувати використовувати NetBird або закрити вікно налаштувань, поки процес триває." + "message": "Збір журналів, даних про систему та інформації про стан підключення. Зазвичай це займає хвилину. Ви можете продовжувати використовувати NetBird або закрити вікно налаштувань, поки процес триває.", + "description": "Status text shown while the debug bundle is being collected; reassures the user they can keep using NetBird or close Settings meanwhile." }, "settings.troubleshooting.cancelling": { - "message": "Скасування…" + "message": "Скасування…", + "description": "Status shown while cancelling bundle creation. Ends with an ellipsis." }, "settings.troubleshooting.done.uploadedTitle": { - "message": "Архів діагностики успішно завантажено!" + "message": "Архів діагностики успішно завантажено!", + "description": "Success title after the bundle was uploaded." }, "settings.troubleshooting.done.savedTitle": { - "message": "Архів збережено" + "message": "Архів збережено", + "description": "Title shown when the bundle was saved locally (not uploaded)." }, "settings.troubleshooting.done.uploadedDescription": { - "message": "Поділіться ключем завантаження нижче зі службою підтримки NetBird. Локальну копію також збережено на вашому пристрої." + "message": "Поділіться ключем завантаження нижче зі службою підтримки NetBird. Локальну копію також збережено на вашому пристрої.", + "description": "Body after upload, telling the user to share the upload key with support. '…' wraps the inline link to the NetBird support docs — keep the tags exactly and wrap the phrase that means 'NetBird support'." }, "settings.troubleshooting.done.savedDescription": { - "message": "Ваш архів діагностики збережено локально." + "message": "Ваш архів діагностики збережено локально.", + "description": "Body shown when the bundle was only saved locally." }, "settings.troubleshooting.done.copyKey": { - "message": "Копіювати ключ" + "message": "Копіювати ключ", + "description": "Button to copy the upload key. Keep short." }, "settings.troubleshooting.done.openFolder": { - "message": "Відкрити папку" + "message": "Відкрити папку", + "description": "Button to open the folder containing the bundle. Keep short." }, "settings.troubleshooting.done.openFileLocation": { - "message": "Відкрити розташування файлу" + "message": "Відкрити розташування файлу", + "description": "Button to reveal the bundle file in the OS file manager." }, "settings.troubleshooting.uploadFailedWithReason": { - "message": "Помилка завантаження: {reason} Архів все одно збережено локально" + "message": "Помилка завантаження: {reason} Архів все одно збережено локально", + "description": "Shown when upload failed but the bundle was saved locally. {reason} is the server error text; keep it." }, "settings.troubleshooting.uploadFailed": { - "message": "Помилка завантаження. Архів все одно збережено локально." + "message": "Помилка завантаження. Архів все одно збережено локально.", + "description": "Shown when upload failed (no specific reason) but the bundle was saved locally." }, "settings.troubleshooting.stage.reconnecting": { - "message": "Перепідключення NetBird…" + "message": "Перепідключення NetBird…", + "description": "Progress stage: reconnecting NetBird. Ends with an ellipsis." }, "settings.troubleshooting.stage.capturing": { - "message": "Запис журналів діагностики" + "message": "Запис журналів діагностики", + "description": "Progress stage: capturing logs. {elapsed} and {total} are time values (e.g. 0:30 / 2:00); keep both." }, "settings.troubleshooting.stage.bundling": { - "message": "Створення архіву діагностики…" + "message": "Створення архіву діагностики…", + "description": "Progress stage: generating the debug bundle. Ends with an ellipsis." }, "settings.troubleshooting.stage.uploading": { - "message": "Завантаження на сервери NetBird…" + "message": "Завантаження на сервери NetBird…", + "description": "Progress stage: uploading to NetBird. Ends with an ellipsis." }, "settings.troubleshooting.stage.cancelling": { - "message": "Скасування…" + "message": "Скасування…", + "description": "Progress stage: cancelling. Ends with an ellipsis." }, "settings.about.client": { - "message": "NetBird Client v{version}" + "message": "NetBird Client v{version}", + "description": "About tab: client product name and version. {version} is a version number; keep it. 'NetBird Client' — keep brand." }, "settings.about.clientName": { - "message": "NetBird Client" + "message": "NetBird Client", + "description": "About tab: the client product name shown when no version is available. Brand — do not translate." }, "settings.about.development": { - "message": "[Розробка]" + "message": "[Розробка]", + "description": "Badge shown next to the version on development builds. Keep the square brackets." }, "settings.about.gui": { - "message": "Графічний інтерфейс v{version}" + "message": "Графічний інтерфейс v{version}", + "description": "About tab: UI component name and version. {version} is a version number; keep it. 'GUI' = the graphical app." }, "settings.about.guiName": { - "message": "Графічний інтерфейс" + "message": "Графічний інтерфейс", + "description": "About tab: the UI component name shown without a version. 'GUI' = the graphical app." }, "settings.about.copyright": { - "message": "© {year} NetBird. Усі права захищено." + "message": "© {year} NetBird. Усі права захищено.", + "description": "Copyright line. {year} is the current year; keep it. 'NetBird' — brand." }, "settings.about.links.imprint": { - "message": "Реквізити" + "message": "Реквізити", + "description": "Footer link: Imprint (legal notice / Impressum)." }, "settings.about.links.privacy": { - "message": "Конфіденційність" + "message": "Конфіденційність", + "description": "Footer link: Privacy policy." }, "settings.about.links.cla": { - "message": "CLA" + "message": "CLA", + "description": "Footer link: CLA (Contributor License Agreement). Acronym — keep as-is." }, "settings.about.links.terms": { - "message": "Умови використання" + "message": "Умови використання", + "description": "Footer link: Terms of Service." }, "settings.about.community.github": { - "message": "GitHub" + "message": "GitHub", + "description": "Community link: GitHub. Brand — do not translate." }, "settings.about.community.slack": { - "message": "Slack" + "message": "Slack", + "description": "Community link: Slack. Brand — do not translate." }, "settings.about.community.forum": { - "message": "Форум" + "message": "Форум", + "description": "Community link: Forum." }, "settings.about.community.documentation": { - "message": "Документація" + "message": "Документація", + "description": "Community link: Documentation." }, "settings.about.community.feedback": { - "message": "Зворотний зв’язок" + "message": "Зворотний зв’язок", + "description": "Community link: Feedback." }, "update.banner.message": { - "message": "NetBird {version} готовий до встановлення." + "message": "NetBird {version} готовий до встановлення.", + "description": "Update banner text when a new version is ready to install. {version} is the version number; keep it." }, "update.banner.later": { - "message": "Пізніше" + "message": "Пізніше", + "description": "Banner button to postpone the update. Keep short." }, "update.banner.installNow": { - "message": "Встановити зараз" + "message": "Встановити зараз", + "description": "Banner button to install the update now. Keep short." }, "update.card.versionAvailableDownload": { - "message": "Версія {version} доступна для завантаження." + "message": "Версія {version} доступна для завантаження.", + "description": "Update card text when a version is available to download. {version} is the version number; keep it." }, "update.card.versionAvailableInstall": { - "message": "Версія {version} доступна для встановлення." + "message": "Версія {version} доступна для встановлення.", + "description": "Update card text when a version is available to install. {version} is the version number; keep it." }, "update.card.whatsNew": { - "message": "Що нового?" + "message": "Що нового?", + "description": "Link / label that opens the release notes." }, "update.card.installNow": { - "message": "Встановити зараз" + "message": "Встановити зараз", + "description": "Update card button: install now. Keep short." }, "update.card.getInstaller": { - "message": "Завантажити" + "message": "Завантажити", + "description": "Update card button: download the installer." }, "update.card.autoCheckInterval": { - "message": "NetBird перевіряє наявність оновлень у фоновому режимі." + "message": "NetBird перевіряє наявність оновлень у фоновому режимі.", + "description": "Note that NetBird checks for updates in the background." }, "update.card.changelog": { - "message": "Список змін" + "message": "Список змін", + "description": "Link / label: Changelog." }, "update.card.onLatestVersion": { - "message": "Ви використовуєте останню версію" + "message": "Ви використовуєте останню версію", + "description": "Shown when the client is already up to date." }, "update.header.tooltip": { - "message": "Доступне оновлення" + "message": "Доступне оновлення", + "description": "Tooltip on the header update badge." }, "update.overlay.updatingVersion": { - "message": "Оновлення NetBird до v{version}" + "message": "Оновлення NetBird до v{version}", + "description": "Heading in the install-progress window while updating to a specific version. {version} is the version number; keep it. The 'v' prefix is part of the version display." }, "update.overlay.updating": { - "message": "Оновлення NetBird" + "message": "Оновлення NetBird", + "description": "Heading in the install-progress window while updating when the target version isn't known." }, "update.overlay.description": { - "message": "Доступна новіша версія, яка зараз встановлюється. NetBird автоматично перезапуститься після завершення оновлення." + "message": "Доступна новіша версія, яка зараз встановлюється. NetBird автоматично перезапуститься після завершення оновлення.", + "description": "Install-progress window body explaining NetBird will restart automatically after the update." }, "update.overlay.error.timeoutTitle": { - "message": "Оновлення триває занадто довго" + "message": "Оновлення триває занадто довго", + "description": "Install-progress window error title: the update took too long." }, "update.overlay.error.timeoutDescription": { - "message": "Встановлення {target} тривало занадто довго і не завершилося." + "message": "Встановлення {target} тривало занадто довго і не завершилося.", + "description": "Install-progress window error body for a timeout. {target} is the target-version label (see update.overlay.error.targetVersion / targetFallback); keep it." }, "update.overlay.error.canceledTitle": { - "message": "Оновлення зупинено" + "message": "Оновлення зупинено", + "description": "Install-progress window error title: the update was stopped / canceled." }, "update.overlay.error.canceledDescription": { - "message": "Оновлення до {target} було скасовано до його завершення." + "message": "Оновлення до {target} було скасовано до його завершення.", + "description": "Install-progress window error body for a canceled update. {target} is the target-version label; keep it." }, "update.overlay.error.failTitle": { - "message": "Не вдалося встановити оновлення" + "message": "Не вдалося встановити оновлення", + "description": "Install-progress window error title: the update couldn't be installed." }, "update.overlay.error.failDescription": { - "message": "Не вдалося встановити оновлення до {target}." + "message": "Не вдалося встановити оновлення до {target}.", + "description": "Install-progress window error body for a failed install. {target} is the target-version label; keep it." }, "update.overlay.error.unknownMessage": { - "message": "Невідома помилка" + "message": "Невідома помилка", + "description": "Fallback text for an unspecified error, used inside other messages." }, "update.overlay.error.targetVersion": { - "message": "v{version}" + "message": "v{version}", + "description": "The target-version label substituted into {target}. {version} is a number; keep the 'v' prefix." }, "update.overlay.error.targetFallback": { - "message": "нової версії" + "message": "нової версії", + "description": "Fallback target label used when the version isn't known, substituted into {target}." }, "update.error.loadStateTitle": { - "message": "Помилка завантаження стану оновлення" + "message": "Помилка завантаження стану оновлення", + "description": "Error-dialog title when loading update state fails." }, "update.error.triggerTitle": { - "message": "Помилка запуску оновлення" + "message": "Помилка запуску оновлення", + "description": "Error-dialog title when starting the update fails." }, "update.page.versionLine": { - "message": "Оновлення клієнта до версії {version}." + "message": "Оновлення клієнта до версії {version}.", + "description": "Install-progress window text naming the target version. {version} is the version number; keep it." }, "update.page.versionLineGeneric": { - "message": "Оновлення клієнта." + "message": "Оновлення клієнта.", + "description": "Install-progress text used when the target version isn't known." }, "update.page.outdated": { - "message": "Ваша версія клієнта старіша за версію для автооновлення, задану в Management." + "message": "Ваша версія клієнта старіша за версію для автооновлення, задану в Management.", + "description": "Note that the client is older than the auto-update version set in Management. 'Management' = the NetBird management server / console." }, "update.page.status.running": { - "message": "Оновлення" + "message": "Оновлення", + "description": "Install status: updating." }, "update.page.status.timeout": { - "message": "Час очікування оновлення минув. Будь ласка, спробуйте ще раз." + "message": "Час очікування оновлення минув. Будь ласка, спробуйте ще раз.", + "description": "Install status: timed out; asks the user to retry." }, "update.page.status.canceled": { - "message": "Оновлення скасовано." + "message": "Оновлення скасовано.", + "description": "Install status: canceled." }, "update.page.status.failed": { - "message": "Помилка оновлення: {message}" + "message": "Помилка оновлення: {message}", + "description": "Install status: failed. {message} is the error detail; keep it." }, "update.page.status.unknownError": { - "message": "невідома помилка оновлення" + "message": "невідома помилка оновлення", + "description": "Fallback text for an unknown update error, used inside update.page.status.failed." }, "update.page.failedTitle": { - "message": "Помилка оновлення" + "message": "Помилка оновлення", + "description": "Heading shown when the install failed." }, "update.page.timeoutMessage": { - "message": "Час очікування оновлення минув." + "message": "Час очікування оновлення минув.", + "description": "Message shown when the install timed out." }, "update.page.dontClose": { - "message": "Будь ласка, не закривайте це вікно." + "message": "Будь ласка, не закривайте це вікно.", + "description": "Warning asking the user not to close the install window." }, "update.page.updating": { - "message": "Оновлення…" + "message": "Оновлення…", + "description": "Short status: updating. Ends with an ellipsis." }, "update.page.complete": { - "message": "Оновлення завершено" + "message": "Оновлення завершено", + "description": "Short status: update complete." }, "update.page.failed": { - "message": "Помилка оновлення" + "message": "Помилка оновлення", + "description": "Short status: update failed." }, "window.title.settings": { - "message": "Налаштування" + "message": "Налаштування", + "description": "OS window-chrome title for the Settings window. The app prefixes it with 'NetBird - '." }, "window.title.signIn": { - "message": "Вхід" + "message": "Вхід", + "description": "OS window-chrome title for the sign-in window." }, "window.title.sessionExpiration": { - "message": "Термін дії сеансу закінчується" + "message": "Термін дії сеансу закінчується", + "description": "OS window-chrome title for the session-expiration window." }, "window.title.updating": { - "message": "Оновлення" + "message": "Оновлення", + "description": "OS window-chrome title for the update / install window." }, "window.title.welcome": { - "message": "Ласкаво просимо до NetBird" + "message": "Ласкаво просимо до NetBird", + "description": "OS window-chrome title for the first-launch welcome window. 'NetBird' — brand." }, "window.title.error": { - "message": "Помилка" + "message": "Помилка", + "description": "OS window-chrome title for the error window." }, "welcome.title": { - "message": "Знайдіть NetBird в області сповіщень" + "message": "Знайдіть NetBird в області сповіщень", + "description": "Heading on the first onboarding step, pointing the user to the tray icon. Shown on Windows and Linux; macOS uses welcome.titleMac." }, "welcome.titleMac": { - "message": "Знайдіть NetBird у рядку меню" + "message": "Знайдіть NetBird у рядку меню", + "description": "Heading on the first onboarding step on macOS, pointing the user to the menu bar icon. Use your language's Apple term for the macOS menu bar." }, "welcome.description": { - "message": "NetBird працює в області сповіщень. Натисніть на іконку, щоб підключитися, змінити профіль або відкрити налаштування." + "message": "NetBird працює в області сповіщень. Натисніть на іконку, щоб підключитися, змінити профіль або відкрити налаштування.", + "description": "Body of the first onboarding step explaining the tray icon. Shown on Windows and Linux; macOS uses welcome.descriptionMac." }, "welcome.descriptionMac": { - "message": "NetBird працює в рядку меню. Натисніть на іконку, щоб підключитися, змінити профіль або відкрити налаштування." + "message": "NetBird працює в рядку меню. Натисніть на іконку, щоб підключитися, змінити профіль або відкрити налаштування.", + "description": "Body of the first onboarding step on macOS explaining the menu bar icon. Use your language's Apple term for the macOS menu bar." }, "welcome.continue": { - "message": "Продовжити" + "message": "Продовжити", + "description": "Primary button to advance the onboarding. Keep short." }, "welcome.back": { - "message": "Назад" + "message": "Назад", + "description": "Button to go back a step in onboarding. Keep short." }, "welcome.management.title": { - "message": "Налаштування NetBird" + "message": "Налаштування NetBird", + "description": "Heading on the onboarding step for choosing a management server." }, "welcome.management.description": { - "message": "Натисніть «Продовжити», щоб розпочати, або виберіть Власний сервер, якщо у вас є власний сервер NetBird." + "message": "Натисніть «Продовжити», щоб розпочати, або виберіть Власний сервер, якщо у вас є власний сервер NetBird.", + "description": "Body of the management step; mentions choosing Self-hosted if the user runs their own server." }, "welcome.management.cloud.title": { - "message": "NetBird Cloud" + "message": "NetBird Cloud", + "description": "Option title: NetBird Cloud. Brand — do not translate 'NetBird Cloud'." }, "welcome.management.cloud.description": { - "message": "Використовуйте наш хмарний сервіс. Налаштування не потрібне." + "message": "Використовуйте наш хмарний сервіс. Налаштування не потрібне.", + "description": "Option body for NetBird Cloud (hosted service, no setup required)." }, "welcome.management.selfHosted.title": { - "message": "Власний сервер" + "message": "Власний сервер", + "description": "Option title: Self-hosted." }, "welcome.management.selfHosted.description": { - "message": "Підключіться до власного сервера керування." + "message": "Підключіться до власного сервера керування.", + "description": "Option body for connecting to your own management server." }, "welcome.management.urlLabel": { - "message": "URL-адреса сервера керування" + "message": "URL-адреса сервера керування", + "description": "Field label for the management-server URL." }, "welcome.management.urlPlaceholder": { - "message": "https://netbird.selfhosted.com:443" + "message": "https://netbird.selfhosted.com:443", + "description": "Example URL placeholder. Sample URL — do not translate it." }, "welcome.management.urlInvalid": { - "message": "Будь ласка, введіть дійсну URL-адресу, наприклад: https://netbird.selfhosted.com:443" + "message": "Будь ласка, введіть дійсну URL-адресу, наприклад: https://netbird.selfhosted.com:443", + "description": "Validation message for an invalid URL. The example URL stays as-is." }, "welcome.management.urlUnreachable": { - "message": "Не вдалося підключитися до цього сервера. Перевірте URL-адресу або вашу мережу, а потім продовжуйте, якщо ви впевнені, що вона правильна." + "message": "Не вдалося підключитися до цього сервера. Перевірте URL-адресу або вашу мережу, а потім продовжуйте, якщо ви впевнені, що вона правильна.", + "description": "Soft warning when the server couldn't be reached during onboarding; the user may continue anyway." }, "welcome.management.checking": { - "message": "Перевірка…" + "message": "Перевірка…", + "description": "Status shown while checking the server URL. Ends with an ellipsis." }, "browserLogin.title": { - "message": "Завершіть вхід у браузері" + "message": "Завершіть вхід у браузері", + "description": "Heading telling the user to finish signing in via their browser." }, "browserLogin.notSeeing": { - "message": "Ми відкрили вкладку браузера, щоб ви могли завершити вхід. Не бачите її?" + "message": "Ми відкрили вкладку браузера, щоб ви могли завершити вхід. Не бачите її?", + "description": "Prompt asking whether the user doesn't see the opened browser tab." }, "browserLogin.tryAgain": { - "message": "Спробувати ще раз" + "message": "Спробувати ще раз", + "description": "Button to re-open the browser sign-in page. Keep short." }, "browserLogin.openFailedTitle": { - "message": "Помилка відкриття браузера" + "message": "Помилка відкриття браузера", + "description": "Error-dialog title when the browser couldn't be opened." }, "sessionExpiration.title": { - "message": "Термін дії сеансу невдовзі закінчиться" + "message": "Термін дії сеансу невдовзі закінчиться", + "description": "Heading warning the session will expire soon." }, "sessionExpiration.titleLater": { - "message": "Термін дії вашого сеансу закінчиться" + "message": "Термін дії вашого сеансу закінчиться", + "description": "Alternate, less-urgent heading: the session will expire." }, "sessionExpiration.description": { - "message": "Цей пристрій невдовзі буде відключено. Поновіть сеанс, увійшовши через браузер." + "message": "Цей пристрій невдовзі буде відключено. Поновіть сеанс, увійшовши через браузер.", + "description": "Body warning the device will disconnect soon; renew via a browser sign-in." }, "sessionExpiration.descriptionLater": { - "message": "Вхід через браузер підтримує підключення цього пристрою до вашої мережі." + "message": "Вхід через браузер підтримує підключення цього пристрою до вашої мережі.", + "description": "Body for the less-urgent variant; a browser sign-in keeps the device connected." }, "sessionExpiration.stay": { - "message": "Продовжити сеанс" + "message": "Продовжити сеанс", + "description": "Button to renew the session (keep connected). Keep short." }, "sessionExpiration.authenticate": { - "message": "Увійти" + "message": "Увійти", + "description": "Button to authenticate / sign in. Keep short." }, "sessionExpiration.logout": { - "message": "Вийти" + "message": "Вийти", + "description": "Button to log out. Keep short." }, "sessionExpiration.expired": { - "message": "Термін дії сеансу закінчився" + "message": "Термін дії сеансу закінчився", + "description": "Heading shown once the session has actually expired." }, "sessionExpiration.expiredDescription": { - "message": "Пристрій відключено. Пройдіть автентифікацію у браузері, щоб перепідключитися." + "message": "Пристрій відключено. Пройдіть автентифікацію у браузері, щоб перепідключитися.", + "description": "Body shown after expiry; authenticate via a browser sign-in to reconnect." }, "sessionExpiration.close": { - "message": "Закрити" + "message": "Закрити", + "description": "Close button on the session window. Keep short." }, "sessionExpiration.extendFailedTitle": { - "message": "Помилка продовження сеансу" + "message": "Помилка продовження сеансу", + "description": "Error-dialog title when extending the session fails." }, "sessionExpiration.logoutFailedTitle": { - "message": "Помилка виходу" + "message": "Помилка виходу", + "description": "Error-dialog title when logging out fails." }, "peers.search.placeholder": { - "message": "Пошук за ім’ям або IP" + "message": "Пошук за ім’ям або IP", + "description": "Placeholder in the peers search field." }, "peers.filter.all": { - "message": "Усі" + "message": "Усі", + "description": "Peers filter option: All. Keep short." }, "peers.filter.online": { - "message": "Онлайн" + "message": "Онлайн", + "description": "Peers filter option: Online. Keep short." }, "peers.filter.offline": { - "message": "Офлайн" + "message": "Офлайн", + "description": "Peers filter option: Offline. Keep short." }, "peers.empty.title": { - "message": "Немає доступних пірів" + "message": "Немає доступних пірів", + "description": "Title of the empty state when no peers are available." }, "peers.empty.description": { - "message": "У вас немає доступних пірів або доступу до жодного з них." + "message": "У вас немає доступних пірів або доступу до жодного з них.", + "description": "Body of the no-peers empty state." }, "peers.details.domain": { - "message": "Домен" + "message": "Домен", + "description": "Peer detail label: Domain." }, "peers.details.netbirdIp": { - "message": "NetBird IP" + "message": "NetBird IP", + "description": "Peer detail label: NetBird IP address. 'NetBird' — brand; 'IP' — keep acronym." }, "peers.details.netbirdIpv6": { - "message": "NetBird IPv6" + "message": "NetBird IPv6", + "description": "Peer detail label: NetBird IPv6 address. Keep 'NetBird' and 'IPv6'." }, "peers.details.publicKey": { - "message": "Публічний ключ" + "message": "Публічний ключ", + "description": "Peer detail label: WireGuard public key." }, "peers.details.connection": { - "message": "Підключення" + "message": "Підключення", + "description": "Peer detail label: Connection." }, "peers.details.latency": { - "message": "Затримка" + "message": "Затримка", + "description": "Peer detail label: Latency." }, "peers.details.lastHandshake": { - "message": "Останнє рукостискання" + "message": "Останнє рукостискання", + "description": "Peer detail label: time of the last WireGuard handshake." }, "peers.details.statusSince": { - "message": "Останнє оновлення підключення" + "message": "Останнє оновлення підключення", + "description": "Peer detail label: time since the last connection-status update." }, "peers.details.bytes": { - "message": "Байти" + "message": "Байти", + "description": "Peer detail label: Bytes (data transferred)." }, "peers.details.bytesSent": { - "message": "Надіслано" + "message": "Надіслано", + "description": "Peer detail label: bytes sent." }, "peers.details.bytesReceived": { - "message": "Отримано" + "message": "Отримано", + "description": "Peer detail label: bytes received." }, "peers.details.localIce": { - "message": "Локальний ICE" + "message": "Локальний ICE", + "description": "Peer detail label: local ICE candidate. 'ICE' — keep acronym." }, "peers.details.remoteIce": { - "message": "Віддалений ICE" + "message": "Віддалений ICE", + "description": "Peer detail label: remote ICE candidate. 'ICE' — keep acronym." }, "peers.details.never": { - "message": "Ніколи" + "message": "Ніколи", + "description": "Value shown when an event has never happened (e.g. last handshake = Never)." }, "peers.details.justNow": { - "message": "Щойно" + "message": "Щойно", + "description": "Relative-time value meaning a moment ago." }, "peers.details.refresh": { - "message": "Оновити" + "message": "Оновити", + "description": "Button to refresh peer details. Keep short." }, "peers.status.connected": { - "message": "Підключено" + "message": "Підключено", + "description": "Peer status: connected." }, "peers.status.connecting": { - "message": "Підключення" + "message": "Підключення", + "description": "Peer status: connecting." }, "peers.status.disconnected": { - "message": "Відключено" + "message": "Відключено", + "description": "Peer status: disconnected." }, "peers.details.relayAddress": { - "message": "Ретранслятор" + "message": "Ретранслятор", + "description": "Peer detail label: Relay (relay-server address)." }, "peers.details.networks": { - "message": "Ресурси" + "message": "Ресурси", + "description": "Peer detail label for the peer's network resources. Labelled 'Resources' in the UI." }, "peers.details.relayed": { - "message": "Через ретранслятор" + "message": "Через ретранслятор", + "description": "Connection-type value: the connection is relayed (not direct). Technical term." }, "peers.details.p2p": { - "message": "P2P" + "message": "P2P", + "description": "Connection-type value: peer-to-peer (direct). 'P2P' — keep as-is." }, "peers.details.rosenpass": { - "message": "Rosenpass увімкнено" + "message": "Rosenpass увімкнено", + "description": "Peer detail indicating Rosenpass (quantum-resistance) is enabled. 'Rosenpass' — product name, do not translate." }, "networks.search.placeholder": { - "message": "Пошук за мережею або доменом" + "message": "Пошук за мережею або доменом", + "description": "Placeholder in the resources search field." }, "networks.filter.all": { - "message": "Усі" + "message": "Усі", + "description": "Resources filter: All. Keep short." }, "networks.filter.active": { - "message": "Активні" + "message": "Активні", + "description": "Resources filter: Active. Keep short." }, "networks.filter.overlapping": { - "message": "Перетинаються" + "message": "Перетинаються", + "description": "Resources filter: Overlapping (overlapping IP ranges). Keep short." }, "networks.empty.title": { - "message": "Немає доступних ресурсів" + "message": "Немає доступних ресурсів", + "description": "Title of the empty state when no resources are available." }, "networks.empty.description": { - "message": "У вас немає доступних мережевих ресурсів або доступу до жодного з них." + "message": "У вас немає доступних мережевих ресурсів або доступу до жодного з них.", + "description": "Body of the no-resources empty state." }, "networks.selected": { - "message": "Вибрано" + "message": "Вибрано", + "description": "Label / badge: the resource is selected (enabled)." }, "networks.unselected": { - "message": "Не вибрано" + "message": "Не вибрано", + "description": "Label / badge: the resource is not selected." }, "networks.ips.heading": { - "message": "Визначені IP-адреси" + "message": "Визначені IP-адреси", + "description": "Heading for the list of a resource's resolved IP addresses." }, "networks.bulk.selectionCount": { - "message": "Активні: {selected} з {total}" + "message": "Активні: {selected} з {total}", + "description": "Header showing how many resources are active. {selected} and {total} are numbers; keep both." }, "networks.bulk.enableAll": { - "message": "Увімкнути всі" + "message": "Увімкнути всі", + "description": "Button to enable all resources. Keep short." }, "networks.bulk.disableAll": { - "message": "Вимкнути всі" + "message": "Вимкнути всі", + "description": "Button to disable all resources. Keep short." }, "exitNodes.search.placeholder": { - "message": "Пошук вихідних вузлів" + "message": "Пошук вихідних вузлів", + "description": "Placeholder in the exit-nodes search field." }, "exitNodes.none": { - "message": "Немає" + "message": "Немає", + "description": "Option meaning no exit node. Keep short." }, "exitNodes.empty.title": { - "message": "Немає доступних вихідних вузлів" + "message": "Немає доступних вихідних вузлів", + "description": "Title of the empty state when no exit nodes are available." }, "exitNodes.empty.description": { - "message": "Цьому піру не надано жодного вихідного вузла." + "message": "Цьому піру не надано жодного вихідного вузла.", + "description": "Body of the no-exit-nodes empty state." }, "exitNodes.card.title": { - "message": "Вихідний вузол" + "message": "Вихідний вузол", + "description": "Card heading: Exit Node." }, "exitNodes.card.statusActive": { - "message": "Активний" + "message": "Активний", + "description": "Exit node card status: Active." }, "exitNodes.card.statusInactive": { - "message": "Неактивний" + "message": "Неактивний", + "description": "Exit node card status: Inactive." }, "exitNodes.dropdown.noneTitle": { - "message": "Немає" + "message": "Немає", + "description": "Dropdown option title: None (no exit node)." }, "exitNodes.dropdown.noneDescription": { - "message": "Пряме підключення без вихідного вузла" + "message": "Пряме підключення без вихідного вузла", + "description": "Dropdown option body for None: direct connection without an exit node." }, "quickActions.connect": { - "message": "Підключитися" + "message": "Підключитися", + "description": "Quick-action button: Connect. Keep short." }, "quickActions.disconnect": { - "message": "Відключитися" + "message": "Відключитися", + "description": "Quick-action button: Disconnect. Keep short." }, "daemon.unavailable.title": { - "message": "Служба NetBird не запущена" + "message": "Служба NetBird не запущена", + "description": "Title of the overlay shown when the NetBird background service isn't running." }, "daemon.unavailable.description": { - "message": "Програма перепідключиться автоматично, щойно служба запрацює." + "message": "Програма перепідключиться автоматично, щойно служба запрацює.", + "description": "Body reassuring the user the app will reconnect once the service is running." }, "daemon.unavailable.docsLink": { - "message": "Документація" + "message": "Документація", + "description": "Documentation link on the daemon-unavailable overlay." }, "daemon.outdated.title": { - "message": "Клієнт NetBird застарів" + "message": "Клієнт NetBird застарів", + "description": "Title of the overlay shown when the NetBird client (daemon) is too old to drive this UI." }, "daemon.outdated.description": { - "message": "Новий графічний інтерфейс несумісний зі старою версією клієнта NetBird. Оновіть клієнт, щоб використовувати нову програму." + "message": "Новий графічний інтерфейс несумісний зі старою версією клієнта NetBird. Оновіть клієнт, щоб використовувати нову програму.", + "description": "Body of the daemon-outdated overlay explaining that the GUI is newer than the client and the client must be updated." }, "daemon.outdated.download": { - "message": "Завантажити останню версію" + "message": "Завантажити останню версію", + "description": "Button on the daemon-outdated overlay that opens the download page for the latest release." }, "error.jwt_clock_skew": { - "message": "Помилка входу: годинник цього пристрою не синхронізовано із сервером. Будь ласка, синхронізуйте системний годинник і спробуйте знову." + "message": "Помилка входу: годинник цього пристрою не синхронізовано із сервером. Будь ласка, синхронізуйте системний годинник і спробуйте знову.", + "description": "Sign-in error shown to the user: the device clock is out of sync with the server." }, "error.jwt_expired": { - "message": "Термін дії вашого токена входу закінчився. Будь ласка, увійдіть знову." + "message": "Термін дії вашого токена входу закінчився. Будь ласка, увійдіть знову.", + "description": "Sign-in error: the sign-in token expired; sign in again." }, "error.jwt_signature_invalid": { - "message": "Помилка входу: недійсний підпис токена. Будь ласка, зверніться до адміністратора." + "message": "Помилка входу: недійсний підпис токена. Будь ласка, зверніться до адміністратора.", + "description": "Sign-in error: the token signature is invalid; contact the administrator." }, "error.session_expired": { - "message": "Термін дії вашого сеансу закінчився. Будь ласка, увійдіть знову." + "message": "Термін дії вашого сеансу закінчився. Будь ласка, увійдіть знову.", + "description": "Error: the session expired; sign in again." }, "error.invalid_setup_key": { - "message": "Setup Key відсутній або недійсний." + "message": "Setup Key відсутній або недійсний.", + "description": "Error: the setup key is missing or invalid. 'setup key' is a NetBird term." }, "error.permission_denied": { - "message": "Вхід відхилено сервером." + "message": "Вхід відхилено сервером.", + "description": "Error: the server rejected the sign-in." }, "error.daemon_unreachable": { - "message": "Служба NetBird не відповідає. Будь ласка, перевірте, чи запущена служба." + "message": "Служба NetBird не відповідає. Будь ласка, перевірте, чи запущена служба.", + "description": "Error: the NetBird background service isn't responding. 'daemon' = the background service." }, "error.settings_locked": { - "message": "Налаштування на цьому пристрої змінити неможливо: адміністратор їх заблокував." + "message": "Налаштування на цьому пристрої змінити неможливо: адміністратор їх заблокував.", + "description": "Error: the local daemon was started with update-settings disabled, so it refuses configuration changes." }, "error.settings_managed_by_mdm": { - "message": "Це налаштування керується вашою організацією і не може бути змінене." + "message": "Це налаштування керується вашою організацією і не може бути змінене.", + "description": "Error: the setting is enforced by an MDM policy. 'MDM' = mobile device management, the organization's device-management system." }, "error.unknown": { - "message": "Помилка операції." + "message": "Помилка операції.", + "description": "Generic fallback error message used when no specific error applies." }, "error.elevation_unavailable": { - "message": "NetBird не зміг запросити в системи привілеї, необхідні для внесення змін. Замість цього виконайте:" + "message": "NetBird не зміг запросити в системи привілеї, необхідні для внесення змін. Замість цього виконайте:", + "description": "Error: this computer has no way to prompt for elevated privileges. Followed by a copyable command that applies the setting from a terminal." }, "error.elevation_failed": { - "message": "Не вдалося застосувати зміни з підвищеними привілеями. Замість цього виконайте:" + "message": "Не вдалося застосувати зміни з підвищеними привілеями. Замість цього виконайте:", + "description": "Error: the authorization succeeded but applying the setting afterwards failed. Followed by a copyable command that applies the setting from a terminal." }, "settings.ssh.privilege.actorRoot": { - "message": "прав root" + "message": "прав root", + "description": "Fills {actor} in the settings.ssh.privilege.* messages on Linux, macOS and BSD, where the daemon requires the root account. 'root' is an account name and stays as it is; add the word for privileges or rights around it if the sentence needs one to read naturally." }, "settings.ssh.privilege.actorAdministrator": { - "message": "прав адміністратора" + "message": "прав адміністратора", + "description": "Fills {actor} in the settings.ssh.privilege.* messages on Windows, where the daemon requires an elevated administrator. The Windows term for the rights an account is asked to elevate to." }, "settings.ssh.privilege.hint": { - "message": "Потребує {actor}. Замість цього виконайте:" + "message": "Потребує {actor}. Замість цього виконайте:", + "description": "Help text under an SSH setting the user cannot change: it needs elevated privileges. {actor} is 'root' on Linux/macOS or 'administrator privileges' on Windows. Followed by a copyable command." }, "settings.ssh.privilege.oneWay": { - "message": "Ви можете вимкнути це, але щоб увімкнути знову, знадобиться {actor}:" + "message": "Ви можете вимкнути це, але щоб увімкнути знову, знадобиться {actor}:", + "description": "Help text under an SSH setting that is already on: an unprivileged user may switch it off freely, and switching it on again is what needs the privileges. No command follows, since the direction they can take is theirs to take. {actor} is 'root' on Linux/macOS or 'administrator privileges' on Windows." }, "settings.ssh.privilege.oneWayInverted": { - "message": "Ви можете увімкнути це, але щоб вимкнути знову, знадобиться {actor}:" + "message": "Ви можете увімкнути це, але щоб вимкнути знову, знадобиться {actor}:", + "description": "Same as settings.ssh.privilege.oneWay, for the SSH authentication setting once it has been switched off: switching it off again is what needs the privileges." }, "settings.ssh.privilege.authorizePending": { - "message": "Очікування авторизації…" + "message": "Очікування авторизації…", + "description": "Replaces the help text under a guarded SSH setting while the authorization prompt is open, which can take a few seconds to appear. Keep the trailing ellipsis." } }