diff --git a/lib/l10n/app_localizations_uk.dart b/lib/l10n/app_localizations_uk.dart new file mode 100644 index 0000000..a58d554 --- /dev/null +++ b/lib/l10n/app_localizations_uk.dart @@ -0,0 +1,2686 @@ +// ignore: unused_import +import 'package:intl/intl.dart' as intl; +import 'app_localizations.dart'; + +// ignore_for_file: type=lint + +/// The translations for Ukrainian (`uk`). +class AppLocalizationsUk extends AppLocalizations { + AppLocalizationsUk([String locale = 'uk']) : super(locale); + + @override + String get appTitle => 'MeshCore Open'; + + @override + String get nav_contacts => 'Контакти'; + + @override + String get nav_channels => 'Канали'; + + @override + String get nav_map => 'Карта'; + + @override + String get common_cancel => 'Скасувати'; + + @override + String get common_ok => 'ОК'; + + @override + String get common_connect => 'Підключити'; + + @override + String get common_unknownDevice => 'Невідомий пристрій'; + + @override + String get common_save => 'Зберегти'; + + @override + String get common_delete => 'Видалити'; + + @override + String get common_close => 'Закрити'; + + @override + String get common_edit => 'Редагувати'; + + @override + String get common_add => 'Додати'; + + @override + String get common_settings => 'Налаштування'; + + @override + String get common_disconnect => 'Відключити'; + + @override + String get common_connected => 'Підключено'; + + @override + String get common_disconnected => 'Відключено'; + + @override + String get common_create => 'Створити'; + + @override + String get common_continue => 'Продовжити'; + + @override + String get common_share => 'Поділитися'; + + @override + String get common_copy => 'Копіювати'; + + @override + String get common_retry => 'Повторити'; + + @override + String get common_hide => 'Приховати'; + + @override + String get common_remove => 'Прибрати'; + + @override + String get common_enable => 'Увімкнути'; + + @override + String get common_disable => 'Вимкнути'; + + @override + String get common_reboot => 'Перезавантажити'; + + @override + String get common_loading => 'Завантаження...'; + + @override + String get common_notAvailable => '—'; + + @override + String common_voltageValue(String volts) { + return '$volts В'; + } + + @override + String common_percentValue(int percent) { + return '$percent%'; + } + + @override + String get scanner_title => 'MeshCore Open'; + + @override + String get scanner_scanning => 'Пошук пристроїв...'; + + @override + String get scanner_connecting => 'Підключення...'; + + @override + String get scanner_disconnecting => 'Відключення...'; + + @override + String get scanner_notConnected => 'Не підключено'; + + @override + String scanner_connectedTo(String deviceName) { + return 'Підключено до $deviceName'; + } + + @override + String get scanner_searchingDevices => 'Пошук пристроїв MeshCore...'; + + @override + String get scanner_tapToScan => + 'Натисніть «Сканувати», щоб знайти пристрої MeshCore'; + + @override + String scanner_connectionFailed(String error) { + return 'Помилка підключення: $error'; + } + + @override + String get scanner_stop => 'Стоп'; + + @override + String get scanner_scan => 'Сканувати'; + + @override + String get device_quickSwitch => 'Швидке перемикання'; + + @override + String get device_meshcore => 'MeshCore'; + + @override + String get settings_title => 'Налаштування'; + + @override + String get settings_deviceInfo => 'Інформація про пристрій'; + + @override + String get settings_appSettings => 'Налаштування програми'; + + @override + String get settings_appSettingsSubtitle => + 'Сповіщення, повідомлення та налаштування карти'; + + @override + String get settings_nodeSettings => 'Налаштування вузла'; + + @override + String get settings_nodeName => 'Ім\'я вузла'; + + @override + String get settings_nodeNameNotSet => 'Не встановлено'; + + @override + String get settings_nodeNameHint => 'Введіть ім\'я вузла'; + + @override + String get settings_nodeNameUpdated => 'Ім\'я оновлено'; + + @override + String get settings_radioSettings => 'Налаштування радіо'; + + @override + String get settings_radioSettingsSubtitle => + 'Частота, потужність, коефіцієнт розширення'; + + @override + String get settings_radioSettingsUpdated => 'Налаштування радіо оновлено'; + + @override + String get settings_location => 'Розташування'; + + @override + String get settings_locationSubtitle => 'GPS координати'; + + @override + String get settings_locationUpdated => 'Розташування оновлено'; + + @override + String get settings_locationBothRequired => 'Введіть широту та довготу.'; + + @override + String get settings_locationInvalid => 'Некоректна широта або довгота.'; + + @override + String get settings_locationGPSEnable => 'Увімкнути GPS'; + + @override + String get settings_locationGPSEnableSubtitle => + 'Вмикає автоматичне оновлення місцезнаходження через GPS.'; + + @override + String get settings_locationIntervalSec => 'Інтервал для GPS (Секунди)'; + + @override + String get settings_locationIntervalInvalid => + 'Інтервал має бути не менше 60 секунд і менше 86400 секунд.'; + + @override + String get settings_latitude => 'Широта'; + + @override + String get settings_longitude => 'Довгота'; + + @override + String get settings_privacyMode => 'Режим приватності'; + + @override + String get settings_privacyModeSubtitle => + 'Приховати ім\'я/розташування в оголошеннях'; + + @override + String get settings_privacyModeToggle => + 'Увімкніть режим приватності, щоб приховати своє ім\'я та місцезнаходження в оголошеннях.'; + + @override + String get settings_privacyModeEnabled => 'Режим приватності увімкнено'; + + @override + String get settings_privacyModeDisabled => 'Режим приватності вимкнено'; + + @override + String get settings_actions => 'Дії'; + + @override + String get settings_sendAdvertisement => 'Оголосити себе'; + + @override + String get settings_sendAdvertisementSubtitle => + 'Транслювати присутність зараз'; + + @override + String get settings_advertisementSent => 'Оголошення надіслано'; + + @override + String get settings_syncTime => 'Синхронізація часу'; + + @override + String get settings_syncTimeSubtitle => + 'Встановити час пристрою відповідно до часу телефону.'; + + @override + String get settings_timeSynchronized => 'Час синхронізовано'; + + @override + String get settings_refreshContacts => 'Оновити контакти'; + + @override + String get settings_refreshContactsSubtitle => + 'Перезавантажити список контактів з пристрою'; + + @override + String get settings_rebootDevice => 'Перезавантажити пристрій'; + + @override + String get settings_rebootDeviceSubtitle => 'Перезавантажити пристрій MeshCore'; + + @override + String get settings_rebootDeviceConfirm => + 'Ви впевнені, що хочете перезавантажити пристрій? Вас буде відключено.'; + + @override + String get settings_debug => 'Налагодження'; + + @override + String get settings_bleDebugLog => 'Журнал налагодження BLE'; + + @override + String get settings_bleDebugLogSubtitle => + 'Команди BLE, відповіді та необроблені дані'; + + @override + String get settings_appDebugLog => 'Журнал налагодження програми'; + + @override + String get settings_appDebugLogSubtitle => + 'Повідомлення налагодження програми'; + + @override + String get settings_about => 'Про програму'; + + @override + String settings_aboutVersion(String version) { + return 'MeshCore Open v$version'; + } + + @override + String get settings_aboutLegalese => 'Проєкт MeshCore Open Source 2026'; + + @override + String get settings_aboutDescription => + 'Клієнт Flutter з відкритим вихідним кодом для пристроїв мережі MeshCore LoRa.'; + + @override + String get settings_infoName => 'Ім\'я'; + + @override + String get settings_infoId => 'ID'; + + @override + String get settings_infoStatus => 'Статус'; + + @override + String get settings_infoBattery => 'Батарея'; + + @override + String get settings_infoPublicKey => 'Відкритий ключ'; + + @override + String get settings_infoContactsCount => 'Кількість контактів'; + + @override + String get settings_infoChannelCount => 'Кількість каналів'; + + @override + String get settings_presets => 'Попередні налаштування'; + + @override + String get settings_preset915Mhz => '915 МГц'; + + @override + String get settings_preset868Mhz => '868 МГц'; + + @override + String get settings_preset433Mhz => '433 МГц'; + + @override + String get settings_frequency => 'Частота (МГц)'; + + @override + String get settings_frequencyHelper => '300.0 - 2500.0'; + + @override + String get settings_frequencyInvalid => 'Некоректна частота (300-2500 МГц)'; + + @override + String get settings_bandwidth => 'Смуга пропускання'; + + @override + String get settings_spreadingFactor => 'Коефіцієнт розширення'; + + @override + String get settings_codingRate => 'Швидкість кодування'; + + @override + String get settings_txPower => 'Потужність TX (дБм)'; + + @override + String get settings_txPowerHelper => '0 - 22'; + + @override + String get settings_txPowerInvalid => 'Некоректна потужність TX (0-22 дБм)'; + + @override + String get settings_longRange => 'Дальній діапазон'; + + @override + String get settings_fastSpeed => 'Висока швидкість'; + + @override + String settings_error(String message) { + return 'Помилка: $message'; + } + + @override + String get appSettings_title => 'Налаштування програми'; + + @override + String get appSettings_appearance => 'Вигляд'; + + @override + String get appSettings_theme => 'Тема'; + + @override + String get appSettings_themeSystem => 'Системна'; + + @override + String get appSettings_themeLight => 'Світла'; + + @override + String get appSettings_themeDark => 'Темна'; + + @override + String get appSettings_language => 'Мова'; + + @override + String get appSettings_languageSystem => 'Як у системі'; + + @override + String get appSettings_languageEn => 'English'; + + @override + String get appSettings_languageFr => 'Français'; + + @override + String get appSettings_languageEs => 'Español'; + + @override + String get appSettings_languageDe => 'Deutsch'; + + @override + String get appSettings_languagePl => 'Polski'; + + @override + String get appSettings_languageSl => 'Slovenščina'; + + @override + String get appSettings_languagePt => 'Português'; + + @override + String get appSettings_languageIt => 'Italiano'; + + @override + String get appSettings_languageZh => '中文'; + + @override + String get appSettings_languageSv => 'Svenska'; + + @override + String get appSettings_languageNl => 'Nederlands'; + + @override + String get appSettings_languageSk => 'Slovenčina'; + + @override + String get appSettings_languageBg => 'Български'; + + @override + String get appSettings_languageUk => 'Українська'; + + @override + String get appSettings_notifications => 'Сповіщення'; + + @override + String get appSettings_enableNotifications => 'Увімкнути сповіщення'; + + @override + String get appSettings_enableNotificationsSubtitle => + 'Отримувати сповіщення про повідомлення та оголошення'; + + @override + String get appSettings_notificationPermissionDenied => + 'У доступі до сповіщень відмовлено'; + + @override + String get appSettings_notificationsEnabled => 'Сповіщення увімкнено'; + + @override + String get appSettings_notificationsDisabled => 'Сповіщення вимкнено'; + + @override + String get appSettings_messageNotifications => 'Сповіщення про повідомлення'; + + @override + String get appSettings_messageNotificationsSubtitle => + 'Показувати сповіщення при отриманні нових повідомлень'; + + @override + String get appSettings_channelMessageNotifications => 'Сповіщення каналів'; + + @override + String get appSettings_channelMessageNotificationsSubtitle => + 'Показувати сповіщення при отриманні повідомлень каналу'; + + @override + String get appSettings_advertisementNotifications => + 'Сповіщення про оголошення'; + + @override + String get appSettings_advertisementNotificationsSubtitle => + 'Показувати сповіщення при виявленні нових вузлів'; + + @override + String get appSettings_messaging => 'Обмін повідомленнями'; + + @override + String get appSettings_clearPathOnMaxRetry => + 'Очищати шлях після макс. спроб'; + + @override + String get appSettings_clearPathOnMaxRetrySubtitle => + 'Скидати шлях до контакту після 5 невдалих спроб надсилання'; + + @override + String get appSettings_pathsWillBeCleared => + 'Шляхи будуть очищені після 5 невдалих спроб.'; + + @override + String get appSettings_pathsWillNotBeCleared => + 'Шляхи не будуть очищатися автоматично.'; + + @override + String get appSettings_autoRouteRotation => 'Авторотація маршруту'; + + @override + String get appSettings_autoRouteRotationSubtitle => + 'Чергувати найкращі шляхи та режим «на всю мережу» (flood)'; + + @override + String get appSettings_autoRouteRotationEnabled => + 'Авторотація маршрутизації увімкнена'; + + @override + String get appSettings_autoRouteRotationDisabled => + 'Авторотація маршрутизації вимкнена'; + + @override + String get appSettings_battery => 'Батарея'; + + @override + String get appSettings_batteryChemistry => 'Хімія батареї'; + + @override + String appSettings_batteryChemistryPerDevice(String deviceName) { + return 'Встановити для пристрою ($deviceName)'; + } + + @override + String get appSettings_batteryChemistryConnectFirst => + 'Підключіть пристрій, щоб вибрати'; + + @override + String get appSettings_batteryNmc => '18650 NMC (3.0-4.2В)'; + + @override + String get appSettings_batteryLifepo4 => 'LiFePO4 (2.6-3.65В)'; + + @override + String get appSettings_batteryLipo => 'LiPo (3.0-4.2В)'; + + @override + String get appSettings_mapDisplay => 'Відображення карти'; + + @override + String get appSettings_showRepeaters => 'Показувати ретранслятори'; + + @override + String get appSettings_showRepeatersSubtitle => + 'Відображати вузли-ретранслятори на карті'; + + @override + String get appSettings_showChatNodes => 'Показувати вузли чату'; + + @override + String get appSettings_showChatNodesSubtitle => + 'Відображати вузли чату на карті'; + + @override + String get appSettings_showOtherNodes => 'Показувати інші вузли'; + + @override + String get appSettings_showOtherNodesSubtitle => + 'Відображати інші типи вузлів на карті'; + + @override + String get appSettings_timeFilter => 'Фільтр часу'; + + @override + String get appSettings_timeFilterShowAll => 'Показати всі вузли'; + + @override + String appSettings_timeFilterShowLast(int hours) { + return 'Показати вузли за останні $hours год'; + } + + @override + String get appSettings_mapTimeFilter => 'Фільтр часу карти'; + + @override + String get appSettings_showNodesDiscoveredWithin => + 'Показувати вузли, виявлені за:'; + + @override + String get appSettings_allTime => 'Весь час'; + + @override + String get appSettings_lastHour => 'Останню годину'; + + @override + String get appSettings_last6Hours => 'Останні 6 годин'; + + @override + String get appSettings_last24Hours => 'Останні 24 години'; + + @override + String get appSettings_lastWeek => 'Минулий тиждень'; + + @override + String get appSettings_offlineMapCache => 'Офлайн-кеш карти'; + + @override + String get appSettings_noAreaSelected => 'Область не вибрано'; + + @override + String appSettings_areaSelectedZoom(int minZoom, int maxZoom) { + return 'Вибрана область (зум $minZoom-$maxZoom)'; + } + + @override + String get appSettings_debugCard => 'Налагодження'; + + @override + String get appSettings_appDebugLogging => 'Логування налагодження програми'; + + @override + String get appSettings_appDebugLoggingSubtitle => + 'Записувати повідомлення налагодження програми в лог для усунення несправностей.'; + + @override + String get appSettings_appDebugLoggingEnabled => + 'Логування налагодження програми увімкнено'; + + @override + String get appSettings_appDebugLoggingDisabled => + 'Налагодження програми вимкнено.'; + + @override + String get contacts_title => 'Контакти'; + + @override + String get contacts_noContacts => 'Контактів не знайдено.'; + + @override + String get contacts_contactsWillAppear => + 'Контакти з\'являться, коли пристрої надішлють оголошення.'; + + @override + String get contacts_searchContacts => 'Пошук контактів...'; + + @override + String get contacts_noUnreadContacts => 'Немає непрочитаних контактів'; + + @override + String get contacts_noContactsFound => 'Контактів або груп не знайдено.'; + + @override + String get contacts_deleteContact => 'Видалити контакт'; + + @override + String contacts_removeConfirm(String contactName) { + return 'Видалити $contactName з контактів?'; + } + + @override + String get contacts_manageRepeater => 'Керувати ретранслятором'; + + @override + String get contacts_manageRoom => 'Керувати сервером кімнати'; + + @override + String get contacts_roomLogin => 'Вхід у кімнату'; + + @override + String get contacts_openChat => 'Відкрити чат'; + + @override + String get contacts_editGroup => 'Редагувати групу'; + + @override + String get contacts_deleteGroup => 'Видалити групу'; + + @override + String contacts_deleteGroupConfirm(String groupName) { + return 'Видалити $groupName?'; + } + + @override + String get contacts_newGroup => 'Нова група'; + + @override + String get contacts_groupName => 'Назва групи'; + + @override + String get contacts_groupNameRequired => 'Назва групи обов\'язкова.'; + + @override + String contacts_groupAlreadyExists(String name) { + return 'Група \"$name\" вже існує.'; + } + + @override + String get contacts_filterContacts => 'Фільтрувати контакти...'; + + @override + String get contacts_noContactsMatchFilter => + 'Жоден контакт не відповідає фільтру.'; + + @override + String get contacts_noMembers => 'Немає учасників'; + + @override + String get contacts_lastSeenNow => 'В мережі'; + + @override + String contacts_lastSeenMinsAgo(int minutes) { + return 'В мережі $minutes хв. тому'; + } + + @override + String get contacts_lastSeenHourAgo => 'В мережі 1 годину тому'; + + @override + String contacts_lastSeenHoursAgo(int hours) { + return 'В мережі $hours год. тому'; + } + + @override + String get contacts_lastSeenDayAgo => 'В мережі 1 день тому'; + + @override + String contacts_lastSeenDaysAgo(int days) { + return 'В мережі $days дн. тому'; + } + + @override + String get channels_title => 'Канали'; + + @override + String get channels_noChannelsConfigured => 'Канали не налаштовані'; + + @override + String get channels_addPublicChannel => 'Додати публічний канал'; + + @override + String get channels_searchChannels => 'Пошук каналів...'; + + @override + String get channels_noChannelsFound => 'Каналів не знайдено'; + + @override + String channels_channelIndex(int index) { + return 'Канал $index'; + } + + @override + String get channels_hashtagChannel => 'Канал з хештегом'; + + @override + String get channels_public => 'Публічний'; + + @override + String get channels_private => 'Приватний'; + + @override + String get channels_publicChannel => 'Публічний канал'; + + @override + String get channels_privateChannel => 'Приватний канал'; + + @override + String get channels_editChannel => 'Редагувати канал'; + + @override + String get channels_deleteChannel => 'Видалити канал'; + + @override + String channels_deleteChannelConfirm(String name) { + return 'Видалити $name? Це не можна скасувати.'; + } + + @override + String channels_channelDeleted(String name) { + return 'Канал \"$name\" видалено'; + } + + @override + String get channels_addChannel => 'Додати канал'; + + @override + String get channels_channelIndexLabel => 'Індекс каналу'; + + @override + String get channels_channelName => 'Назва каналу'; + + @override + String get channels_usePublicChannel => 'Використовувати публічний канал'; + + @override + String get channels_standardPublicPsk => 'Стандартний публічний PSK'; + + @override + String get channels_pskHex => 'PSK (Hex)'; + + @override + String get channels_generateRandomPsk => 'Згенерувати випадковий ключ PSK'; + + @override + String get channels_enterChannelName => 'Будь ласка, введіть назву каналу'; + + @override + String get channels_pskMustBe32Hex => + 'PSK має складатися з 32 шістнадцяткових символів.'; + + @override + String channels_channelAdded(String name) { + return 'Канал \"$name\" додано'; + } + + @override + String channels_editChannelTitle(int index) { + return 'Редагувати канал $index'; + } + + @override + String get channels_smazCompression => 'Стиснення SMAZ'; + + @override + String channels_channelUpdated(String name) { + return 'Канал \"$name\" оновлено'; + } + + @override + String get channels_publicChannelAdded => 'Публічний канал додано'; + + @override + String get channels_sortBy => 'Сортувати за'; + + @override + String get channels_sortManual => 'Вручну'; + + @override + String get channels_sortAZ => 'А-Я'; + + @override + String get channels_sortLatestMessages => 'Останні повідомлення'; + + @override + String get channels_sortUnread => 'Непрочитані'; + + @override + String get channels_createPrivateChannel => 'Створити приватний канал'; + + @override + String get channels_createPrivateChannelDesc => 'Захищено секретним ключем.'; + + @override + String get channels_joinPrivateChannel => 'Приєднатися до приватного каналу'; + + @override + String get channels_joinPrivateChannelDesc => 'Ввести секретний ключ вручну.'; + + @override + String get channels_joinPublicChannel => 'Приєднатися до публічного каналу'; + + @override + String get channels_joinPublicChannelDesc => + 'Будь-хто може приєднатися до цього каналу.'; + + @override + String get channels_joinHashtagChannel => 'Приєднатися до каналу з хештегом'; + + @override + String get channels_joinHashtagChannelDesc => + 'Будь-хто може приєднатися до каналів #hashtag.'; + + @override + String get channels_scanQrCode => 'Сканувати QR-код'; + + @override + String get channels_scanQrCodeComingSoon => 'Скоро буде'; + + @override + String get channels_enterHashtag => 'Введіть хештег'; + + @override + String get channels_hashtagHint => 'напр. #команда'; + + @override + String get chat_noMessages => 'Поки немає повідомлень.'; + + @override + String get chat_sendMessageToStart => 'Надішліть повідомлення, щоб почати'; + + @override + String get chat_originalMessageNotFound => + 'Оригінальне повідомлення не знайдено'; + + @override + String chat_replyingTo(String name) { + return 'Відповідь $name'; + } + + @override + String chat_replyTo(String name) { + return 'Відповісти $name'; + } + + @override + String get chat_location => 'Розташування'; + + @override + String chat_sendMessageTo(String contactName) { + return 'Надіслати повідомлення $contactName'; + } + + @override + String get chat_typeMessage => 'Введіть повідомлення...'; + + @override + String chat_messageTooLong(int maxBytes) { + return 'Повідомлення занадто довге (макс. $maxBytes байт).'; + } + + @override + String get chat_messageCopied => 'Повідомлення скопійовано'; + + @override + String get chat_messageDeleted => 'Повідомлення видалено'; + + @override + String get chat_retryingMessage => 'Спроба відновлення.'; + + @override + String chat_retryCount(int current, int max) { + return 'Повторна спроба $current/$max'; + } + + @override + String get chat_sendGif => 'Надіслати GIF'; + + @override + String get chat_reply => 'Відповісти'; + + @override + String get chat_addReaction => 'Додати реакцію'; + + @override + String get chat_me => 'Я'; + + @override + String get emojiCategorySmileys => 'Емодзі'; + + @override + String get emojiCategoryGestures => 'Жести'; + + @override + String get emojiCategoryHearts => 'Серця'; + + @override + String get emojiCategoryObjects => 'Об\'єкти'; + + @override + String get gifPicker_title => 'Вибрати GIF'; + + @override + String get gifPicker_searchHint => 'Пошук GIF...'; + + @override + String get gifPicker_poweredBy => 'На базі GIPHY'; + + @override + String get gifPicker_noGifsFound => 'GIF не знайдено'; + + @override + String get gifPicker_failedLoad => 'Не вдалося завантажити GIF-файли'; + + @override + String get gifPicker_failedSearch => 'Пошук GIF не вдався'; + + @override + String get gifPicker_noInternet => 'Немає інтернет-з\'єднання'; + + @override + String get debugLog_appTitle => 'Журнал налагодження програми'; + + @override + String get debugLog_bleTitle => 'Журнал налагодження BLE'; + + @override + String get debugLog_copyLog => 'Копіювати журнал'; + + @override + String get debugLog_clearLog => 'Очистити журнал'; + + @override + String get debugLog_copied => 'Журнал налагодження скопійовано'; + + @override + String get debugLog_bleCopied => 'Журнал BLE скопійовано'; + + @override + String get debugLog_noEntries => 'Поки що немає записів журналу налагодження.'; + + @override + String get debugLog_enableInSettings => + 'Увімкніть налагодження програми в налаштуваннях'; + + @override + String get debugLog_frames => 'Кадри'; + + @override + String get debugLog_rawLogRx => 'Необроблений лог - RX'; + + @override + String get debugLog_noBleActivity => 'Поки що немає активності BLE.'; + + @override + String debugFrame_length(int count) { + return 'Довжина кадру: $count байт'; + } + + @override + String debugFrame_command(String value) { + return 'Команда: 0x$value'; + } + + @override + String get debugFrame_textMessageHeader => 'Повідомлення:'; + + @override + String debugFrame_destinationPubKey(String pubKey) { + return '- PubKey призначення: $pubKey'; + } + + @override + String debugFrame_timestamp(int timestamp) { + return '- Мітка часу: $timestamp'; + } + + @override + String debugFrame_flags(String value) { + return '- Прапорці: 0x$value'; + } + + @override + String debugFrame_textType(int type, String label) { + return '- Тип тексту: $type ($label)'; + } + + @override + String get debugFrame_textTypeCli => 'CLI'; + + @override + String get debugFrame_textTypePlain => 'Звичайний'; + + @override + String debugFrame_text(String text) { + return '- Текст: \"$text\"'; + } + + @override + String get debugFrame_hexDump => 'Дамп Hex:'; + + @override + String get chat_pathManagement => 'Керування шляхами'; + + @override + String get chat_routingMode => 'Режим маршрутизації'; + + @override + String get chat_autoUseSavedPath => 'Авто (використовувати збережений шлях)'; + + @override + String get chat_forceFloodMode => 'Примусово на всю мережу'; + + @override + String get chat_recentAckPaths => + 'Недавні шляхи ACK (натисніть, щоб використати):'; + + @override + String get chat_pathHistoryFull => + 'Історія шляхів заповнена. Видаліть записи, щоб додати нові.'; + + @override + String get chat_hopSingular => 'Стрибок'; + + @override + String get chat_hopPlural => 'стрибків'; + + @override + String chat_hopsCount(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'стрибків', + many: 'стрибків', + few: 'стрибки', + one: 'стрибок', + ); + return '$count $_temp0'; + } + + @override + String get chat_successes => 'Успішно'; + + @override + String get chat_removePath => 'Видалити шлях'; + + @override + String get chat_noPathHistoryYet => + 'Історія шляхів недоступна.\nНадішліть повідомлення, щоб виявити шляхи.'; + + @override + String get chat_pathActions => 'Дії зі шляхом:'; + + @override + String get chat_setCustomPath => 'Встановити власний шлях'; + + @override + String get chat_setCustomPathSubtitle => 'Вказати шлях маршрутизації вручну'; + + @override + String get chat_clearPath => 'Очистити шлях'; + + @override + String get chat_clearPathSubtitle => + 'Примусово повторити пошук при наступному надсиланні'; + + @override + String get chat_pathCleared => + 'Шлях очищено. Наступне повідомлення оновить маршрут.'; + + @override + String get chat_floodModeSubtitle => + 'Використовувати перемикач маршрутизації в панелі програми'; + + @override + String get chat_floodModeEnabled => + 'Увімкнено режим «на всю мережу». Перемикайте через іконку маршрутизації на панелі інструментів.'; + + @override + String get chat_fullPath => 'Повний шлях'; + + @override + String get chat_pathDetailsNotAvailable => + 'Деталі шляху ще недоступні. Спробуйте надіслати повідомлення для оновлення.'; + + @override + String chat_pathSetHops(int hopCount, String status) { + String _temp0 = intl.Intl.pluralLogic( + hopCount, + locale: localeName, + other: 'стрибків', + many: 'стрибків', + few: 'стрибки', + one: 'стрибок', + ); + return 'Шлях встановлено: $hopCount $_temp0 - $status'; + } + + @override + String get chat_pathSavedLocally => + 'Збережено локально. Підключіться для синхронізації.'; + + @override + String get chat_pathDeviceConfirmed => 'Пристрій підтверджено.'; + + @override + String get chat_pathDeviceNotConfirmed => 'Пристрій ще не підтверджено.'; + + @override + String get chat_type => 'Ввід'; + + @override + String get chat_path => 'Шлях'; + + @override + String get chat_publicKey => 'Відкритий ключ'; + + @override + String get chat_compressOutgoingMessages => 'Стискати вихідні повідомлення'; + + @override + String get chat_floodForced => 'На всю мережу (примусово)'; + + @override + String get chat_directForced => 'Прямий (примусово)'; + + @override + String chat_hopsForced(int count) { + return '$count стрибків (примусово)'; + } + + @override + String get chat_floodAuto => 'На всю мережу (авто)'; + + @override + String get chat_direct => 'Прямий'; + + @override + String get chat_poiShared => 'Точкою інтересу поділилися'; + + @override + String chat_unread(int count) { + return 'Непрочитано: $count'; + } + + @override + String get chat_openLink => 'Відкрити посилання?'; + + @override + String get chat_openLinkConfirmation => + 'Ви хочете відкрити це посилання у браузері?'; + + @override + String get chat_open => 'Відкрити'; + + @override + String chat_couldNotOpenLink(String url) { + return 'Не вдалося відкрити посилання: $url'; + } + + @override + String get chat_invalidLink => 'Невірний формат посилання'; + + @override + String get map_title => 'Карта вузлів'; + + @override + String get map_noNodesWithLocation => 'Немає вузлів з даними про розташування'; + + @override + String get map_nodesNeedGps => + 'Вузли повинні надавати свої GPS координати,\nщоб з\'явитися на карті.'; + + @override + String map_nodesCount(int count) { + return 'Вузли: $count'; + } + + @override + String map_pinsCount(int count) { + return 'Мітки: $count'; + } + + @override + String get map_chat => 'Чат'; + + @override + String get map_repeater => 'Ретранслятор'; + + @override + String get map_room => 'Кімната'; + + @override + String get map_sensor => 'Сенсор'; + + @override + String get map_pinDm => 'Ключ (DM)'; + + @override + String get map_pinPrivate => 'Замок (Приватний)'; + + @override + String get map_pinPublic => 'Ключ (Публічний)'; + + @override + String get map_lastSeen => 'Останній раз бачили'; + + @override + String get map_disconnectConfirm => + 'Ви впевнені, що хочете відключитися від цього пристрою?'; + + @override + String get map_from => 'Від'; + + @override + String get map_source => 'Джерело'; + + @override + String get map_flags => 'Прапорці'; + + @override + String get map_shareMarkerHere => 'Поділитися маркером тут'; + + @override + String get map_pinLabel => 'Мітка піна'; + + @override + String get map_label => 'Мітка'; + + @override + String get map_pointOfInterest => 'Точка інтересу'; + + @override + String get map_sendToContact => 'Надіслати контакту'; + + @override + String get map_sendToChannel => 'Надіслати в канал'; + + @override + String get map_noChannelsAvailable => 'Немає доступних каналів'; + + @override + String get map_publicLocationShare => 'Поділитися в публічному місці'; + + @override + String map_publicLocationShareConfirm(String channelLabel) { + return 'Ви збираєтеся поділитися розташуванням у $channelLabel. Цей канал публічний, і кожен, хто має ключ PSK, може це побачити.'; + } + + @override + String get map_connectToShareMarkers => + 'Підключіться до пристрою, щоб поділитися маркерами'; + + @override + String get map_filterNodes => 'Фільтрувати вузли'; + + @override + String get map_nodeTypes => 'Типи вузлів'; + + @override + String get map_chatNodes => 'Вузли чату'; + + @override + String get map_repeaters => 'Ретранслятори'; + + @override + String get map_otherNodes => 'Інші вузли'; + + @override + String get map_keyPrefix => 'Префікс ключа'; + + @override + String get map_filterByKeyPrefix => 'Фільтрувати за префіксом ключа'; + + @override + String get map_publicKeyPrefix => 'Префікс відкритого ключа'; + + @override + String get map_markers => 'Маркери'; + + @override + String get map_showSharedMarkers => 'Показувати спільні маркери'; + + @override + String get map_lastSeenTime => 'Час останньої активності'; + + @override + String get map_sharedPin => 'Спільний пін'; + + @override + String get map_joinRoom => 'Приєднатися до кімнати'; + + @override + String get map_manageRepeater => 'Керувати ретранслятором'; + + @override + String get mapCache_title => 'Офлайн-кеш карти'; + + @override + String get mapCache_selectAreaFirst => 'Спершу виберіть область для кешування'; + + @override + String get mapCache_noTilesToDownload => + 'Немає плиток для завантаження в цій області.'; + + @override + String get mapCache_downloadTilesTitle => 'Завантажити плитки'; + + @override + String mapCache_downloadTilesPrompt(int count) { + return 'Завантажити $count плиток для використання офлайн?'; + } + + @override + String get mapCache_downloadAction => 'Завантажити'; + + @override + String mapCache_cachedTiles(int count) { + return 'Закешовано $count плиток'; + } + + @override + String mapCache_cachedTilesWithFailed(int downloaded, int failed) { + return 'Плитки в кеші ($downloaded) ($failed помилок)'; + } + + @override + String get mapCache_clearOfflineCacheTitle => 'Очистити офлайн-кеш'; + + @override + String get mapCache_clearOfflineCachePrompt => + 'Видалити всі закешовані плитки карти?'; + + @override + String get mapCache_offlineCacheCleared => 'Офлайн-кеш очищено.'; + + @override + String get mapCache_noAreaSelected => 'Область не вибрано'; + + @override + String get mapCache_cacheArea => 'Область кешування'; + + @override + String get mapCache_useCurrentView => 'Використати поточний вигляд'; + + @override + String get mapCache_zoomRange => 'Діапазон масштабування'; + + @override + String mapCache_estimatedTiles(int count) { + return 'Оцінка плиток: $count'; + } + + @override + String mapCache_downloadedTiles(int completed, int total) { + return 'Завантажено $completed / $total'; + } + + @override + String get mapCache_downloadTilesButton => 'Завантажити плитки'; + + @override + String get mapCache_clearCacheButton => 'Очистити кеш'; + + @override + String mapCache_failedDownloads(int count) { + return 'Невдалі завантаження: $count'; + } + + @override + String mapCache_boundsLabel( + String north, + String south, + String east, + String west, + ) { + return 'Пн $north, Пд $south, Сх $east, Зх $west'; + } + + @override + String get time_justNow => 'Тільки що'; + + @override + String time_minutesAgo(int minutes) { + return '$minutes хв. тому'; + } + + @override + String time_hoursAgo(int hours) { + return '$hours год. тому'; + } + + @override + String time_daysAgo(int days) { + return '$days дн. тому'; + } + + @override + String get time_hour => 'година'; + + @override + String get time_hours => 'годин'; + + @override + String get time_day => 'день'; + + @override + String get time_days => 'днів'; + + @override + String get time_week => 'тиждень'; + + @override + String get time_weeks => 'тижнів'; + + @override + String get time_month => 'місяць'; + + @override + String get time_months => 'місяців'; + + @override + String get time_minutes => 'хвилин'; + + @override + String get time_allTime => 'Весь час'; + + @override + String get dialog_disconnect => 'Відключити'; + + @override + String get dialog_disconnectConfirm => + 'Ви впевнені, що хочете відключитися від цього пристрою?'; + + @override + String get login_repeaterLogin => 'Вхід у ретранслятор'; + + @override + String get login_roomLogin => 'Вхід у кімнату'; + + @override + String get login_password => 'Пароль'; + + @override + String get login_enterPassword => 'Введіть пароль'; + + @override + String get login_savePassword => 'Зберегти пароль'; + + @override + String get login_savePasswordSubtitle => + 'Пароль буде надійно збережено на цьому пристрої.'; + + @override + String get login_repeaterDescription => + 'Введіть пароль ретранслятора для доступу до налаштувань та статусу.'; + + @override + String get login_roomDescription => + 'Введіть пароль кімнати для доступу до налаштувань та статусу.'; + + @override + String get login_routing => 'Маршрутизація'; + + @override + String get login_routingMode => 'Режим маршрутизації'; + + @override + String get login_autoUseSavedPath => 'Авто (використовувати збережений шлях)'; + + @override + String get login_forceFloodMode => 'Примусово на всю мережу'; + + @override + String get login_managePaths => 'Керувати шляхами'; + + @override + String get login_login => 'Вхід'; + + @override + String login_attempt(int current, int max) { + return 'Спроба $current/$max'; + } + + @override + String login_failed(String error) { + return 'Вхід не вдався: $error'; + } + + @override + String get login_failedMessage => + 'Вхід не вдався. Або пароль неправильний, або ретранслятор недосяжний.'; + + @override + String get common_reload => 'Перезавантажити'; + + @override + String get common_clear => 'Очистити'; + + @override + String path_currentPath(String path) { + return 'Поточний шлях: $path'; + } + + @override + String path_usingHopsPath(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'стрибками', + many: 'стрибками', + few: 'стрибками', + one: 'стрибком', + ); + return 'Використання шляху з $count $_temp0'; + } + + @override + String get path_enterCustomPath => 'Ввести власний шлях'; + + @override + String get path_currentPathLabel => 'Поточний шлях'; + + @override + String get path_hexPrefixInstructions => + 'Введіть 2-символьні hex-префікси для кожного стрибка, розділені комами.'; + + @override + String get path_hexPrefixExample => + 'Приклад: A1,F2,3C (кожен вузол використовує перший байт свого відкритого ключа).'; + + @override + String get path_labelHexPrefixes => 'Hex-префікси'; + + @override + String get path_helperMaxHops => + 'Макс. 64 стрибки. Кожен префікс - 2 шістнадцяткові символи (1 байт)'; + + @override + String get path_selectFromContacts => 'Вибрати з контактів:'; + + @override + String get path_noRepeatersFound => + 'Ретрансляторів або серверів кімнат не знайдено.'; + + @override + String get path_customPathsRequire => + 'Власні шляхи вимагають проміжних вузлів, які можуть передавати повідомлення.'; + + @override + String path_invalidHexPrefixes(String prefixes) { + return 'Некоректні hex-префікси: $prefixes'; + } + + @override + String get path_tooLong => 'Шлях занадто довгий. Максимум 64 стрибки.'; + + @override + String get path_setPath => 'Встановити шлях'; + + @override + String get repeater_management => 'Керування ретранслятором'; + + @override + String get room_management => 'Адміністрування сервера кімнати'; + + @override + String get repeater_managementTools => 'Інструменти керування'; + + @override + String get repeater_status => 'Статус'; + + @override + String get repeater_statusSubtitle => + 'Показати статус, статистику та сусідів ретранслятора'; + + @override + String get repeater_telemetry => 'Телеметрія'; + + @override + String get repeater_telemetrySubtitle => + 'Показати телеметрію сенсорів та статистику системи'; + + @override + String get repeater_cli => 'CLI'; + + @override + String get repeater_cliSubtitle => 'Надіслати команди ретранслятору'; + + @override + String get repeater_neighbours => 'Сусіди'; + + @override + String get repeater_neighboursSubtitle => 'Показати сусідів нульового стрибка.'; + + @override + String get repeater_settings => 'Налаштування'; + + @override + String get repeater_settingsSubtitle => 'Налаштувати параметри ретранслятора'; + + @override + String get repeater_statusTitle => 'Статус ретранслятора'; + + @override + String get repeater_routingMode => 'Режим маршрутизації'; + + @override + String get repeater_autoUseSavedPath => + 'Авто (використовувати збережений шлях)'; + + @override + String get repeater_forceFloodMode => 'Примусово на всю мережу'; + + @override + String get repeater_pathManagement => 'Керування шляхами'; + + @override + String get repeater_refresh => 'Оновити'; + + @override + String get repeater_statusRequestTimeout => + 'Час очікування запиту статусу вичерпано.'; + + @override + String repeater_errorLoadingStatus(String error) { + return 'Помилка завантаження статусу: $error'; + } + + @override + String get repeater_systemInformation => 'Системна інформація'; + + @override + String get repeater_battery => 'Батарея'; + + @override + String get repeater_clockAtLogin => 'Годинник (при вході)'; + + @override + String get repeater_uptime => 'Час роботи'; + + @override + String get repeater_queueLength => 'Довжина черги'; + + @override + String get repeater_debugFlags => 'Прапорці налагодження'; + + @override + String get repeater_radioStatistics => 'Статистика радіо'; + + @override + String get repeater_lastRssi => 'Останній RSSI'; + + @override + String get repeater_lastSnr => 'Останній SNR'; + + @override + String get repeater_noiseFloor => 'Рівень шуму'; + + @override + String get repeater_txAirtime => 'Ефірний час TX'; + + @override + String get repeater_rxAirtime => 'Ефірний час RX'; + + @override + String get repeater_packetStatistics => 'Статистика пакетів'; + + @override + String get repeater_sent => 'Надіслано'; + + @override + String get repeater_received => 'Отримано'; + + @override + String get repeater_duplicates => 'Дублікати'; + + @override + String repeater_daysHoursMinsSecs( + int days, + int hours, + int minutes, + int seconds, + ) { + return '$days дн. ${hours} год $minutes хв $seconds с'; + } + + @override + String repeater_packetTxTotal(int total, String flood, String direct) { + return 'Всього: $total, На всю мережу: $flood, Прямі: $direct'; + } + + @override + String repeater_packetRxTotal(int total, String flood, String direct) { + return 'Всього: $total, На всю мережу: $flood, Прямі: $direct'; + } + + @override + String repeater_duplicatesFloodDirect(String flood, String direct) { + return 'На всю мережу: $flood, Прямі: $direct'; + } + + @override + String repeater_duplicatesTotal(int total) { + return 'Всього: $total'; + } + + @override + String get repeater_settingsTitle => 'Налаштування ретранслятора'; + + @override + String get repeater_basicSettings => 'Основні налаштування'; + + @override + String get repeater_repeaterName => 'Ім\'я ретранслятора'; + + @override + String get repeater_repeaterNameHelper => 'Показати ім\'я цього ретранслятора'; + + @override + String get repeater_adminPassword => 'Пароль адміністратора'; + + @override + String get repeater_adminPasswordHelper => 'Пароль повного доступу'; + + @override + String get repeater_guestPassword => 'Гостьовий пароль'; + + @override + String get repeater_guestPasswordHelper => + 'Доступ лише для читання з паролем'; + + @override + String get repeater_radioSettings => 'Налаштування радіо'; + + @override + String get repeater_frequencyMhz => 'Частота (МГц)'; + + @override + String get repeater_frequencyHelper => '300-2500 МГц'; + + @override + String get repeater_txPower => 'Потужність TX'; + + @override + String get repeater_txPowerHelper => '1-30 дБм'; + + @override + String get repeater_bandwidth => 'Смуга пропускання'; + + @override + String get repeater_spreadingFactor => 'Коефіцієнт розширення'; + + @override + String get repeater_codingRate => 'Швидкість кодування'; + + @override + String get repeater_locationSettings => 'Налаштування розташування'; + + @override + String get repeater_latitude => 'Широта'; + + @override + String get repeater_latitudeHelper => + 'Десяткові градуси (наприклад, 37.7749)'; + + @override + String get repeater_longitude => 'Довгота'; + + @override + String get repeater_longitudeHelper => + 'Десяткові градуси (наприклад, -122.4194)'; + + @override + String get repeater_features => 'Функції'; + + @override + String get repeater_packetForwarding => 'Пересилання пакетів'; + + @override + String get repeater_packetForwardingSubtitle => + 'Дозволити ретранслятору пересилати пакети'; + + @override + String get repeater_guestAccess => 'Гостьовий доступ'; + + @override + String get repeater_guestAccessSubtitle => + 'Дозволити гостьовий доступ лише для читання'; + + @override + String get repeater_privacyMode => 'Режим приватності'; + + @override + String get repeater_privacyModeSubtitle => + 'Приховати ім\'я/розташування в оголошеннях'; + + @override + String get repeater_advertisementSettings => 'Налаштування оголошень'; + + @override + String get repeater_localAdvertInterval => + 'Інтервал локальних оголошень (0 стрибків)'; + + @override + String repeater_localAdvertIntervalMinutes(int minutes) { + return '$minutes хвилин'; + } + + @override + String get repeater_floodAdvertInterval => + 'Інтервал оголошень на всю мережу (flood)'; + + @override + String repeater_floodAdvertIntervalHours(int hours) { + return '$hours годин'; + } + + @override + String get repeater_encryptedAdvertInterval => + 'Інтервал зашифрованих оголошень'; + + @override + String get repeater_dangerZone => 'Небезпечна зона'; + + @override + String get repeater_rebootRepeater => 'Перезавантажити ретранслятор'; + + @override + String get repeater_rebootRepeaterSubtitle => 'Скинути пристрій ретранслятора'; + + @override + String get repeater_rebootRepeaterConfirm => + 'Ви впевнені, що хочете перезавантажити цей ретранслятор?'; + + @override + String get repeater_regenerateIdentityKey => 'Перегенерувати ключ ідентичності'; + + @override + String get repeater_regenerateIdentityKeySubtitle => + 'Згенерувати нову пару ключів (публічний/приватний)'; + + @override + String get repeater_regenerateIdentityKeyConfirm => + 'Це створить нову ідентичність для ретранслятора. Продовжити?'; + + @override + String get repeater_eraseFileSystem => 'Очистити файлову систему'; + + @override + String get repeater_eraseFileSystemSubtitle => + 'Відформатувати файлову систему ретранслятора'; + + @override + String get repeater_eraseFileSystemConfirm => + 'УВАГА: Це видалить всі дані з ретранслятора. Це не можна скасувати!'; + + @override + String get repeater_eraseSerialOnly => + 'Очищення доступне лише через послідовну консоль.'; + + @override + String repeater_commandSent(String command) { + return 'Команда надіслана: $command'; + } + + @override + String repeater_errorSendingCommand(String error) { + return 'Помилка надсилання команди: $error'; + } + + @override + String get repeater_confirm => 'Підтвердити'; + + @override + String get repeater_settingsSaved => 'Налаштування успішно збережено.'; + + @override + String repeater_errorSavingSettings(String error) { + return 'Помилка збереження налаштувань: $error'; + } + + @override + String get repeater_refreshBasicSettings => 'Оновити основні налаштування'; + + @override + String get repeater_refreshRadioSettings => 'Оновити налаштування радіо'; + + @override + String get repeater_refreshTxPower => 'Оновити потужність TX'; + + @override + String get repeater_refreshLocationSettings => + 'Оновити налаштування розташування'; + + @override + String get repeater_refreshPacketForwarding => 'Оновити пересилання пакетів'; + + @override + String get repeater_refreshGuestAccess => 'Оновити гостьовий доступ'; + + @override + String get repeater_refreshPrivacyMode => 'Оновити режим приватності'; + + @override + String get repeater_refreshAdvertisementSettings => + 'Оновити налаштування оголошень'; + + @override + String repeater_refreshed(String label) { + return '$label оновлено'; + } + + @override + String repeater_errorRefreshing(String label) { + return 'Помилка оновлення $label'; + } + + @override + String get repeater_cliTitle => 'Ретранслятор CLI'; + + @override + String get repeater_debugNextCommand => 'Налагодити наступну команду'; + + @override + String get repeater_commandHelp => 'Довідка'; + + @override + String get repeater_clearHistory => 'Очистити історію'; + + @override + String get repeater_noCommandsSent => 'Команди ще не надсилалися.'; + + @override + String get repeater_typeCommandOrUseQuick => + 'Введіть команду нижче або використовуйте швидкі команди'; + + @override + String get repeater_enterCommandHint => 'Введіть команду...'; + + @override + String get repeater_previousCommand => 'Попередня команда'; + + @override + String get repeater_nextCommand => 'Наступна команда'; + + @override + String get repeater_enterCommandFirst => 'Спершу введіть команду'; + + @override + String get repeater_cliCommandFrameTitle => 'Фрейм команди CLI'; + + @override + String repeater_cliCommandError(String error) { + return 'Помилка: $error'; + } + + @override + String get repeater_cliQuickGetName => 'Отримати ім\'я'; + + @override + String get repeater_cliQuickGetRadio => 'Отримати Радіо'; + + @override + String get repeater_cliQuickGetTx => 'Отримати TX'; + + @override + String get repeater_cliQuickNeighbors => 'Сусіди'; + + @override + String get repeater_cliQuickVersion => 'Версія'; + + @override + String get repeater_cliQuickAdvertise => 'Оголосити'; + + @override + String get repeater_cliQuickClock => 'Годинник'; + + @override + String get repeater_cliHelpAdvert => 'Надсилає пакет оголошення'; + + @override + String get repeater_cliHelpReboot => + 'Перезавантажує пристрій. (Зверніть увагу, ви можете отримати «Тайм-аут», що є нормальним)'; + + @override + String get repeater_cliHelpClock => + 'Відображає поточний час за годинником кожного пристрою.'; + + @override + String get repeater_cliHelpPassword => + 'Встановлює новий пароль адміністратора для пристрою.'; + + @override + String get repeater_cliHelpVersion => + 'Відображає версію пристрою та дату збірки прошивки.'; + + @override + String get repeater_cliHelpClearStats => + 'Скидає різні лічильники статистики до нуля.'; + + @override + String get repeater_cliHelpSetAf => 'Встановлює коефіцієнт ефірного часу.'; + + @override + String get repeater_cliHelpSetTx => + 'Встановлює потужність передачі LoRa в дБм (для застосування потрібне перезавантаження).'; + + @override + String get repeater_cliHelpSetRepeat => + 'Вмикає або вимикає роль ретранслятора для цього вузла.'; + + @override + String get repeater_cliHelpSetAllowReadOnly => + '(Сервер кімнати) Якщо «увімкнено», порожній пароль дозволить вхід, але не дозволить публікувати в кімнаті. (тільки читання)'; + + @override + String get repeater_cliHelpSetFloodMax => + 'Встановлює максимальну кількість стрибків для вхідних пакетів flood (якщо >= max, пакет не пересилається).'; + + @override + String get repeater_cliHelpSetIntThresh => + 'Встановлює поріг інтерференції (в дБ). Значення за замовчуванням — 14. Встановлення на 0 вимикає виявлення інтерференції каналу.'; + + @override + String get repeater_cliHelpSetAgcResetInterval => + 'Встановлює інтервал скидання автоматичного контролера посилення (AGC). Встановіть 0 для вимкнення.'; + + @override + String get repeater_cliHelpSetMultiAcks => + 'Вмикає або вимикає функціональність подвійних ACK.'; + + @override + String get repeater_cliHelpSetAdvertInterval => + 'Встановлює інтервал таймера для надсилання локального пакету оголошення (без ретрансляції). Встановіть 0 для вимкнення.'; + + @override + String get repeater_cliHelpSetFloodAdvertInterval => + 'Встановлює інтервал таймера в годинах для надсилання пакету оголошення на всю мережу. Встановіть 0 для вимкнення.'; + + @override + String get repeater_cliHelpSetGuestPassword => + 'Встановлює/оновлює гостьовий пароль. (для ретрансляторів гостьові підключення можуть надсилати запит «Get Stats»)'; + + @override + String get repeater_cliHelpSetName => 'Встановлює ім\'я для оголошення.'; + + @override + String get repeater_cliHelpSetLat => + 'Встановлює широту для карти оголошень. (десяткові градуси)'; + + @override + String get repeater_cliHelpSetLon => + 'Встановлює довготу для карти оголошень. (десяткові градуси)'; + + @override + String get repeater_cliHelpSetRadio => + 'Повністю встановлює нові параметри радіо та зберігає їх у налаштуваннях. Потребує команди «перезавантаження» для застосування.'; + + @override + String get repeater_cliHelpSetRxDelay => + 'Базові (експериментальні) параметри для застосування невеликої затримки до отриманих пакетів залежно від сили сигналу/оцінки. Встановіть 0 для вимкнення.'; + + @override + String get repeater_cliHelpSetTxDelay => + 'Встановлює множник для часу роботи в режимі «на всю мережу» (flood) для пакету та системи випадкових слотів, щоб затримати його відправку (для зменшення ймовірності колізій).'; + + @override + String get repeater_cliHelpSetDirectTxDelay => + 'Те саме, що й txdelay, але для застосування випадкової затримки при пересиланні пакетів у прямому режимі.'; + + @override + String get repeater_cliHelpSetBridgeEnabled => 'Увімкнути/Вимкнути міст.'; + + @override + String get repeater_cliHelpSetBridgeDelay => + 'Встановити затримку перед пересиланням пакетів.'; + + @override + String get repeater_cliHelpSetBridgeSource => + 'Виберіть, чи буде міст ретранслювати отримані пакети або передані пакети.'; + + @override + String get repeater_cliHelpSetBridgeBaud => + 'Встановити швидкість послідовного зв\'язку для мостів Rs232.'; + + @override + String get repeater_cliHelpSetBridgeSecret => + 'Встановити секрет мосту для мостів espnow.'; + + @override + String get repeater_cliHelpSetAdcMultiplier => + 'Встановлює власний множник для коригування повідомлюваної напруги батареї (підтримується лише на деяких платах).'; + + @override + String get repeater_cliHelpTempRadio => + 'Встановлює тимчасові параметри радіо на задану кількість хвилин, потім повертається до початкових налаштувань. (не зберігає в налаштуваннях).'; + + @override + String get repeater_cliHelpSetPerm => + 'Змінює ACL (список контролю доступу). Видаляє відповідний запис (за префіксом публічного ключа), якщо «permissions» дорівнює нулю. Додає новий запис, якщо hex публічного ключа повний і його немає в ACL. Оновлює запис на основі префікса публічного ключа. Біти дозволів залежать від ролі прошивки, але нижні 2 біти: 0 (Гість), 1 (Тільки читання), 2 (Читання/Запис), 3 (Адміністратор).'; + + @override + String get repeater_cliHelpGetBridgeType => + 'Отримати тип мосту: немає, rs232, espnow'; + + @override + String get repeater_cliHelpLogStart => + 'Починає запис пакетів у файлову систему.'; + + @override + String get repeater_cliHelpLogStop => + 'Зупиняє запис пакетів у файлову систему.'; + + @override + String get repeater_cliHelpLogErase => + 'Видаляє журнали пакетів з файлової системи.'; + + @override + String get repeater_cliHelpNeighbors => + 'Показує список інших вузлів-ретрансляторів, почутих через оголошення без ретрансляції. Кожен рядок — id-hex-префікс:timestamp:snr-помножено-на-4'; + + @override + String get repeater_cliHelpNeighborRemove => + 'Видаляє перший відповідний запис (за префіксом публічного ключа (hex)) зі списку сусідів.'; + + @override + String get repeater_cliHelpRegion => + '(тільки серійний) Перелічує всі визначені регіони та поточні дозволи на оголошення «на всю мережу» (flood).'; + + @override + String get repeater_cliHelpRegionLoad => + 'ПРИМІТКА: це спеціальний виклик кількох команд. Кожна наступна команда — це назва регіону (з відступом пробілами для позначення ієрархії батьків, мінімум один пробіл). Завершується надсиланням порожнього рядка/команди.'; + + @override + String get repeater_cliHelpRegionGet => + 'Шукає регіон із заданим префіксом назви (або \"\" для глобальної області). Відповідає: \"-> ім\'я-регіону (ім\'я-батька) \'F\'\"'; + + @override + String get repeater_cliHelpRegionPut => + 'Додає або оновлює визначення регіону з заданою назвою.'; + + @override + String get repeater_cliHelpRegionRemove => + 'Видаляє визначення регіону з заданою назвою.'; + + @override + String get repeater_cliHelpRegionAllowf => + 'Встановлює дозвіл «Flood» для заданого регіону. (\'\' для глобальної/успадкованої області)'; + + @override + String get repeater_cliHelpRegionDenyf => + 'Видаляє дозвіл «Flood» для заданого регіону. (ПРИМІТКА: на даному етапі не рекомендується використовувати для глобальної/успадкованої області!! )'; + + @override + String get repeater_cliHelpRegionHome => + 'Відповідає поточним «домашнім» регіоном. (Примітка: поки ніде не застосовується, зарезервовано для майбутнього використання)'; + + @override + String get repeater_cliHelpRegionHomeSet => 'Встановлює «домашній» регіон.'; + + @override + String get repeater_cliHelpRegionSave => + 'Зберігає список/карту регіонів у сховищі.'; + + @override + String get repeater_cliHelpGps => + 'Показує статус GPS. Коли GPS вимкнено, відповідає лише «вимкнено», якщо увімкнено — відповідає «увімкнено», статус, корекція, кількість супутників.'; + + @override + String get repeater_cliHelpGpsOnOff => 'Увімкнути/вимкнути GPS.'; + + @override + String get repeater_cliHelpGpsSync => + 'Синхронізує час вузла з годинником GPS.'; + + @override + String get repeater_cliHelpGpsSetLoc => + 'Встановлює позицію вузла за координатами GPS і зберігає в налаштуваннях.'; + + @override + String get repeater_cliHelpGpsAdvert => + 'Надає конфігурацію оголошення розташування вузла:\n- none : не включати розташування в оголошення\n- share : ділитися розташуванням GPS (з SensorManager)\n- prefs : оголошувати розташування, збережене в налаштуваннях'; + + @override + String get repeater_cliHelpGpsAdvertSet => + 'Встановлює конфігурацію оголошення розташування.'; + + @override + String get repeater_commandsListTitle => 'Список команд'; + + @override + String get repeater_commandsListNote => + 'ПРИМІТКА: для різних команд «set»... також існує команда «get»...'; + + @override + String get repeater_general => 'Загальні'; + + @override + String get repeater_settingsCategory => 'Налаштування'; + + @override + String get repeater_bridge => 'Міст'; + + @override + String get repeater_logging => 'Логування'; + + @override + String get repeater_neighborsRepeaterOnly => + 'Сусіди (Тільки ретранслятор)'; + + @override + String get repeater_regionManagementRepeaterOnly => + 'Керування регіонами (Тільки ретранслятор)'; + + @override + String get repeater_regionNote => + 'Команди регіонів були введені для керування визначеннями та дозволами регіонів.'; + + @override + String get repeater_gpsManagement => 'Керування GPS'; + + @override + String get repeater_gpsNote => + 'Команда GPS була введена для керування питаннями, пов\'язаними з локацією.'; + + @override + String get telemetry_receivedData => 'Дані телеметрії отримано'; + + @override + String get telemetry_requestTimeout => 'Час запиту телеметрії вичерпано.'; + + @override + String telemetry_errorLoading(String error) { + return 'Помилка завантаження телеметрії: $error'; + } + + @override + String get telemetry_noData => 'Дані телеметрії недоступні.'; + + @override + String telemetry_channelTitle(int channel) { + return 'Канал $channel'; + } + + @override + String get telemetry_batteryLabel => 'Батарея'; + + @override + String get telemetry_voltageLabel => 'Напруга'; + + @override + String get telemetry_mcuTemperatureLabel => 'Температура MCU'; + + @override + String get telemetry_temperatureLabel => 'Температура'; + + @override + String get telemetry_currentLabel => 'Поточний струм'; + + @override + String telemetry_batteryValue(int percent, String volts) { + return '$percent% / ${volts}В'; + } + + @override + String telemetry_voltageValue(String volts) { + return '${volts}В'; + } + + @override + String telemetry_currentValue(String amps) { + return '${amps}А'; + } + + @override + String telemetry_temperatureValue(String celsius, String fahrenheit) { + return '$celsius°C / $fahrenheit°F'; + } + + @override + String get neighbors_receivedData => 'Дані сусідів отримано'; + + @override + String get neighbors_requestTimedOut => 'Час запиту сусідів вичерпано.'; + + @override + String neighbors_errorLoading(String error) { + return 'Помилка завантаження сусідів: $error'; + } + + @override + String get neighbors_repeatersNeighbours => 'Ретранслятори-сусіди'; + + @override + String get neighbors_noData => 'Дані про сусідів недоступні.'; + + @override + String neighbors_unknownContact(String pubkey) { + return 'Невідомий відкритий ключ $pubkey'; + } + + @override + String neighbors_heardAgo(String time) { + return 'Почуто: $time тому'; + } + + @override + String get channelPath_title => 'Шлях пакету'; + + @override + String get channelPath_viewMap => 'Показати карту'; + + @override + String get channelPath_otherObservedPaths => 'Інші спостережувані шляхи'; + + @override + String get channelPath_repeaterHops => 'Стрибки ретранслятора'; + + @override + String get channelPath_noHopDetails => + 'Деталі відправки не надані для цього пакету.'; + + @override + String get channelPath_messageDetails => 'Деталі повідомлення'; + + @override + String get channelPath_senderLabel => 'Відправник'; + + @override + String get channelPath_timeLabel => 'Час'; + + @override + String get channelPath_repeatsLabel => 'Повторення'; + + @override + String channelPath_pathLabel(int index) { + return 'Шлях $index'; + } + + @override + String get channelPath_observedLabel => 'Спостережено'; + + @override + String channelPath_observedPathTitle(int index, String hops) { + return 'Спостережуваний шлях $index • $hops'; + } + + @override + String get channelPath_noLocationData => 'Немає даних про розташування'; + + @override + String channelPath_timeWithDate(int day, int month, String time) { + return '$day/$month $time'; + } + + @override + String channelPath_timeOnly(String time) { + return '$time'; + } + + @override + String get channelPath_unknownPath => 'Невідомий'; + + @override + String get channelPath_floodPath => 'На всю мережу'; + + @override + String get channelPath_directPath => 'Прямий'; + + @override + String channelPath_observedZeroOf(int total) { + return '0 з $total стрибків'; + } + + @override + String channelPath_observedSomeOf(int observed, int total) { + return '$observed з $total стрибків'; + } + + @override + String get channelPath_mapTitle => 'Карта шляху'; + + @override + String get channelPath_noRepeaterLocations => + 'Позиції ретрансляторів недоступні для цього шляху.'; + + @override + String channelPath_primaryPath(int index) { + return 'Шлях $index (Основний)'; + } + + @override + String get channelPath_pathLabelTitle => 'Шлях'; + + @override + String get channelPath_observedPathHeader => 'Спостережуваний шлях'; + + @override + String channelPath_selectedPathLabel(String label, String prefixes) { + return '$label • $prefixes'; + } + + @override + String get channelPath_noHopDetailsAvailable => + 'Деталі стрибків недоступні для цього пакету.'; + + @override + String get channelPath_unknownRepeater => 'Невідомий ретранслятор'; + + @override + String get community_title => 'Спільнота'; + + @override + String get community_create => 'Створити спільноту'; + + @override + String get community_createDesc => + 'Створити нову спільноту та поділитися через QR-код.'; + + @override + String get community_join => 'Приєднатися'; + + @override + String get community_joinTitle => 'Приєднатися до спільноти'; + + @override + String community_joinConfirmation(String name) { + return 'Ви бажаєте приєднатися до спільноти \"$name\"?'; + } + + @override + String get community_scanQr => 'Сканувати QR спільноти'; + + @override + String get community_scanInstructions => + 'Наведіть камеру на QR-код спільноти.'; + + @override + String get community_showQr => 'Показати QR-код'; + + @override + String get community_publicChannel => 'Публічна спільнота'; + + @override + String get community_hashtagChannel => 'Хештег спільноти'; + + @override + String get community_name => 'Назва спільноти'; + + @override + String get community_enterName => 'Введіть назву спільноти'; + + @override + String community_created(String name) { + return 'Спільноту \"$name\" створено'; + } + + @override + String community_joined(String name) { + return 'Приєднався до спільноти \"$name\"'; + } + + @override + String get community_qrTitle => 'Поділитися спільнотою'; + + @override + String community_qrInstructions(String name) { + return 'Відскануйте цей QR-код, щоб приєднатися до $name'; + } + + @override + String get community_hashtagPrivacyHint => + 'Канали хештегів спільноти доступні лише членам спільноти'; + + @override + String get community_invalidQrCode => 'Недійсний QR-код спільноти'; + + @override + String get community_alreadyMember => 'Вже учасник'; + + @override + String community_alreadyMemberMessage(String name) { + return 'Ви вже є учасником \"$name\".'; + } + + @override + String get community_addPublicChannel => 'Додати публічний канал спільноти'; + + @override + String get community_addPublicChannelHint => + 'Автоматично додати публічний канал для цієї спільноти'; + + @override + String get community_noCommunities => + 'Поки не приєднано до жодної групи.'; + + @override + String get community_scanOrCreate => + 'Відскануйте QR-код або створіть спільноту, щоб почати'; + + @override + String get community_manageCommunities => 'Керувати спільнотами'; + + @override + String get community_delete => 'Покинути спільноту'; + + @override + String community_deleteConfirm(String name) { + return 'Покинути \"$name\"?'; + } + + @override + String community_deleteChannelsWarning(int count) { + String _temp0 = intl.Intl.pluralLogic( + count, + locale: localeName, + other: 'каналів', + many: 'каналів', + few: 'канали', + one: 'канал', + ); + return 'Це також видалить $count $_temp0 та їх повідомлення.'; + } + + @override + String community_deleted(String name) { + return 'Спільноту \"$name\" покинуто'; + } + + @override + String get community_regenerateSecret => 'Перегенерувати секрет'; + + @override + String community_regenerateSecretConfirm(String name) { + return 'Перегенерувати секретний ключ для \"$name\"? Всі учасники повинні будуть відсканувати новий QR-код, щоб продовжити спілкування.'; + } + + @override + String get community_regenerate => 'Перегенерувати'; + + @override + String community_secretRegenerated(String name) { + return 'Секретний пароль для \"$name\" перегенеровано'; + } + + @override + String get community_updateSecret => 'Оновити секрет'; + + @override + String community_secretUpdated(String name) { + return 'Зміну секрету для \"$name\" оновлено'; + } + + @override + String community_scanToUpdateSecret(String name) { + return 'Відскануйте новий QR-код, щоб оновити пароль для \"$name\"'; + } + + @override + String get community_addHashtagChannel => 'Додати хештег спільноти'; + + @override + String get community_addHashtagChannelDesc => + 'Додати канал хештегу для цієї спільноти'; + + @override + String get community_selectCommunity => 'Вибрати спільноту'; + + @override + String get community_regularHashtag => 'Звичайний хештег'; + + @override + String get community_regularHashtagDesc => + 'Публічний хештег (будь-хто може приєднатися)'; + + @override + String get community_communityHashtag => 'Хештег спільноти'; + + @override + String get community_communityHashtagDesc => + 'Ексклюзивно для членів спільноти'; + + @override + String community_forCommunity(String name) { + return 'Для $name'; + } + + @override + String get listFilter_tooltip => 'Фільтр та сортування'; + + @override + String get listFilter_sortBy => 'Сортувати за'; + + @override + String get listFilter_latestMessages => 'Останні повідомлення'; + + @override + String get listFilter_heardRecently => 'Нещодавно чули'; + + @override + String get listFilter_az => 'А-Я'; + + @override + String get listFilter_filters => 'Фільтри'; + + @override + String get listFilter_all => 'Все'; + + @override + String get listFilter_users => 'Користувачі'; + + @override + String get listFilter_repeaters => 'Ретранслятори'; + + @override + String get listFilter_roomServers => 'Сервери кімнат'; + + @override + String get listFilter_unreadOnly => 'Тільки непрочитані повідомлення'; + + @override + String get listFilter_newGroup => 'Нова група'; +} \ No newline at end of file diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb new file mode 100644 index 0000000..492805e --- /dev/null +++ b/lib/l10n/app_uk.arb @@ -0,0 +1,1538 @@ +{ + "@@locale": "uk", + "appTitle": "MeshCore Open", + "nav_contacts": "Контакти", + "nav_channels": "Канали", + "nav_map": "Карта", + "common_cancel": "Скасувати", + "common_connect": "Підключити", + "common_unknownDevice": "Невідомий пристрій", + "common_save": "Зберегти", + "common_delete": "Видалити", + "common_close": "Закрити", + "common_edit": "Редагувати", + "common_add": "Додати", + "common_settings": "Налаштування", + "common_disconnect": "Відключити", + "common_connected": "Підключено", + "common_disconnected": "Відключено", + "common_create": "Створити", + "common_continue": "Продовжити", + "common_share": "Поділитися", + "common_copy": "Копіювати", + "common_retry": "Повторити", + "common_hide": "Приховати", + "common_remove": "Прибрати", + "common_enable": "Увімкнути", + "common_disable": "Вимкнути", + "common_reboot": "Перезавантажити", + "common_loading": "Завантаження...", + "common_notAvailable": "—", + "common_voltageValue": "{volts} В", + "@common_voltageValue": { + "placeholders": { + "volts": { + "type": "String" + } + } + }, + "common_percentValue": "{percent}%", + "@common_percentValue": { + "placeholders": { + "percent": { + "type": "int" + } + } + }, + "scanner_title": "MeshCore Open", + "scanner_scanning": "Пошук пристроїв...", + "scanner_connecting": "Підключення...", + "scanner_disconnecting": "Відключення...", + "scanner_notConnected": "Не підключено", + "scanner_connectedTo": "Підключено до {deviceName}", + "@scanner_connectedTo": { + "placeholders": { + "deviceName": { + "type": "String" + } + } + }, + "scanner_searchingDevices": "Пошук пристроїв MeshCore...", + "scanner_tapToScan": "Натисніть «Сканувати», щоб знайти пристрої MeshCore", + "scanner_connectionFailed": "Помилка підключення: {error}", + "@scanner_connectionFailed": { + "placeholders": { + "error": { + "type": "String" + } + } + }, + "scanner_stop": "Стоп", + "scanner_scan": "Сканувати", + "device_quickSwitch": "Швидке перемикання", + "device_meshcore": "MeshCore", + "settings_title": "Налаштування", + "settings_deviceInfo": "Інформація про пристрій", + "settings_appSettings": "Налаштування програми", + "settings_appSettingsSubtitle": "Сповіщення, повідомлення та налаштування карти", + "settings_nodeSettings": "Налаштування вузла", + "settings_nodeName": "Ім'я вузла", + "settings_nodeNameNotSet": "Не встановлено", + "settings_nodeNameHint": "Введіть ім'я вузла", + "settings_nodeNameUpdated": "Ім'я оновлено", + "settings_radioSettings": "Налаштування радіо", + "settings_radioSettingsSubtitle": "Частота, потужність, коефіцієнт розширення", + "settings_radioSettingsUpdated": "Налаштування радіо оновлено", + "settings_location": "Розташування", + "settings_locationSubtitle": "GPS координати", + "settings_locationUpdated": "Розташування оновлено", + "settings_locationBothRequired": "Введіть широту та довготу.", + "settings_locationInvalid": "Некоректна широта або довгота.", + "settings_latitude": "Широта", + "settings_longitude": "Довгота", + "settings_privacyMode": "Режим приватності", + "settings_privacyModeSubtitle": "Приховати ім'я/розташування в оголошеннях", + "settings_privacyModeToggle": "Увімкніть режим приватності, щоб приховати своє ім'я та місцезнаходження в оголошеннях.", + "settings_privacyModeEnabled": "Режим приватності увімкнено", + "settings_privacyModeDisabled": "Режим приватності вимкнено", + "settings_actions": "Дії", + "settings_sendAdvertisement": "Оголосити себе", + "settings_sendAdvertisementSubtitle": "Транслювати присутність зараз", + "settings_advertisementSent": "Оголошення надіслано", + "settings_syncTime": "Синхронізація часу", + "settings_syncTimeSubtitle": "Встановити час пристрою відповідно до часу телефону.", + "settings_timeSynchronized": "Час синхронізовано", + "settings_refreshContacts": "Оновити контакти", + "settings_refreshContactsSubtitle": "Перезавантажити список контактів з пристрою", + "settings_rebootDevice": "Перезавантажити пристрій", + "settings_rebootDeviceSubtitle": "Перезавантажити пристрій MeshCore", + "settings_rebootDeviceConfirm": "Ви впевнені, що хочете перезавантажити пристрій? Вас буде відключено.", + "settings_debug": "Налагодження", + "settings_bleDebugLog": "Журнал налагодження BLE", + "settings_bleDebugLogSubtitle": "Команди BLE, відповіді та необроблені дані", + "settings_appDebugLog": "Журнал налагодження програми", + "settings_appDebugLogSubtitle": "Повідомлення налагодження програми", + "settings_about": "Про програму", + "settings_aboutVersion": "MeshCore Open v{version}", + "@settings_aboutVersion": { + "placeholders": { + "version": { + "type": "String" + } + } + }, + "settings_aboutLegalese": "Проєкт MeshCore Open Source 2026", + "settings_aboutDescription": "Клієнт Flutter з відкритим вихідним кодом для пристроїв мережі MeshCore LoRa.", + "settings_infoName": "Ім'я", + "settings_infoId": "ID", + "settings_infoStatus": "Статус", + "settings_infoBattery": "Батарея", + "settings_infoPublicKey": "Відкритий ключ", + "settings_infoContactsCount": "Кількість контактів", + "settings_infoChannelCount": "Кількість каналів", + "settings_presets": "Попередні налаштування", + "settings_preset915Mhz": "915 МГц", + "settings_preset868Mhz": "868 МГц", + "settings_preset433Mhz": "433 МГц", + "settings_frequency": "Частота (МГц)", + "settings_frequencyHelper": "300.0 - 2500.0", + "settings_frequencyInvalid": "Некоректна частота (300-2500 МГц)", + "settings_bandwidth": "Смуга пропускання", + "settings_spreadingFactor": "Коефіцієнт розширення", + "settings_codingRate": "Швидкість кодування", + "settings_txPower": "Потужність TX (дБм)", + "settings_txPowerHelper": "0 - 22", + "settings_txPowerInvalid": "Некоректна потужність TX (0-22 дБм)", + "settings_longRange": "Дальній діапазон", + "settings_fastSpeed": "Висока швидкість", + "settings_error": "Помилка: {message}", + "@settings_error": { + "placeholders": { + "message": { + "type": "String" + } + } + }, + "appSettings_title": "Налаштування програми", + "appSettings_appearance": "Вигляд", + "appSettings_theme": "Тема", + "appSettings_themeSystem": "Системна", + "appSettings_themeLight": "Світла", + "appSettings_themeDark": "Темна", + "appSettings_language": "Мова", + "appSettings_languageSystem": "Як у системі", + "appSettings_languageEn": "English", + "appSettings_languageFr": "Français", + "appSettings_languageEs": "Español", + "appSettings_languageDe": "Deutsch", + "appSettings_languagePl": "Polski", + "appSettings_languageSl": "Slovenščina", + "appSettings_languagePt": "Português", + "appSettings_languageIt": "Italiano", + "appSettings_languageZh": "中文", + "appSettings_languageSv": "Svenska", + "appSettings_languageNl": "Nederlands", + "appSettings_languageSk": "Slovenčina", + "appSettings_languageBg": "Български", + "appSettings_languageUk": "Українська", + "appSettings_notifications": "Сповіщення", + "appSettings_enableNotifications": "Увімкнути сповіщення", + "appSettings_enableNotificationsSubtitle": "Отримувати сповіщення про повідомлення та оголошення", + "appSettings_notificationPermissionDenied": "У доступі до сповіщень відмовлено", + "appSettings_notificationsEnabled": "Сповіщення увімкнено", + "appSettings_notificationsDisabled": "Сповіщення вимкнено", + "appSettings_messageNotifications": "Сповіщення про повідомлення", + "appSettings_messageNotificationsSubtitle": "Показувати сповіщення при отриманні нових повідомлень", + "appSettings_channelMessageNotifications": "Сповіщення каналів", + "appSettings_channelMessageNotificationsSubtitle": "Показувати сповіщення при отриманні повідомлень каналу", + "appSettings_advertisementNotifications": "Сповіщення про оголошення", + "appSettings_advertisementNotificationsSubtitle": "Показувати сповіщення при виявленні нових вузлів", + "appSettings_messaging": "Обмін повідомленнями", + "appSettings_clearPathOnMaxRetry": "Очищати шлях після макс. спроб", + "appSettings_clearPathOnMaxRetrySubtitle": "Скидати шлях до контакту після 5 невдалих спроб надсилання", + "appSettings_pathsWillBeCleared": "Шляхи будуть очищені після 5 невдалих спроб.", + "appSettings_pathsWillNotBeCleared": "Шляхи не будуть очищатися автоматично.", + "appSettings_autoRouteRotation": "Авторотація маршруту", + "appSettings_autoRouteRotationSubtitle": "Чергувати найкращі шляхи та режим «на всю мережу» (flood)", + "appSettings_autoRouteRotationEnabled": "Авторотація маршрутизації увімкнена", + "appSettings_autoRouteRotationDisabled": "Авторотація маршрутизації вимкнена", + "appSettings_battery": "Батарея", + "appSettings_batteryChemistry": "Хімія батареї", + "appSettings_batteryChemistryPerDevice": "Встановити для пристрою ({deviceName})", + "@appSettings_batteryChemistryPerDevice": { + "placeholders": { + "deviceName": { + "type": "String" + } + } + }, + "appSettings_batteryChemistryConnectFirst": "Підключіть пристрій, щоб вибрати", + "appSettings_batteryNmc": "18650 NMC (3.0-4.2В)", + "appSettings_batteryLifepo4": "LiFePO4 (2.6-3.65В)", + "appSettings_batteryLipo": "LiPo (3.0-4.2В)", + "appSettings_mapDisplay": "Відображення карти", + "appSettings_showRepeaters": "Показувати ретранслятори", + "appSettings_showRepeatersSubtitle": "Відображати вузли-ретранслятори на карті", + "appSettings_showChatNodes": "Показувати вузли чату", + "appSettings_showChatNodesSubtitle": "Відображати вузли чату на карті", + "appSettings_showOtherNodes": "Показувати інші вузли", + "appSettings_showOtherNodesSubtitle": "Відображати інші типи вузлів на карті", + "appSettings_timeFilter": "Фільтр часу", + "appSettings_timeFilterShowAll": "Показати всі вузли", + "appSettings_timeFilterShowLast": "Показати вузли за останні {hours} год", + "@appSettings_timeFilterShowLast": { + "placeholders": { + "hours": { + "type": "int" + } + } + }, + "appSettings_mapTimeFilter": "Фільтр часу карти", + "appSettings_showNodesDiscoveredWithin": "Показувати вузли, виявлені за:", + "appSettings_allTime": "Весь час", + "appSettings_lastHour": "Останню годину", + "appSettings_last6Hours": "Останні 6 годин", + "appSettings_last24Hours": "Останні 24 години", + "appSettings_lastWeek": "Минулий тиждень", + "appSettings_offlineMapCache": "Офлайн-кеш карти", + "appSettings_noAreaSelected": "Область не вибрано", + "appSettings_areaSelectedZoom": "Вибрана область (зум {minZoom}-{maxZoom})", + "@appSettings_areaSelectedZoom": { + "placeholders": { + "minZoom": { + "type": "int" + }, + "maxZoom": { + "type": "int" + } + } + }, + "appSettings_debugCard": "Налагодження", + "appSettings_appDebugLogging": "Логування налагодження програми", + "appSettings_appDebugLoggingSubtitle": "Записувати повідомлення налагодження програми в лог для усунення несправностей.", + "appSettings_appDebugLoggingEnabled": "Логування налагодження програми увімкнено", + "appSettings_appDebugLoggingDisabled": "Налагодження програми вимкнено.", + "contacts_title": "Контакти", + "contacts_noContacts": "Контактів не знайдено.", + "contacts_contactsWillAppear": "Контакти з'являться, коли пристрої надішлють оголошення.", + "contacts_searchContacts": "Пошук контактів...", + "contacts_noUnreadContacts": "Немає непрочитаних контактів", + "contacts_noContactsFound": "Контактів або груп не знайдено.", + "contacts_deleteContact": "Видалити контакт", + "contacts_removeConfirm": "Видалити {contactName} з контактів?", + "@contacts_removeConfirm": { + "placeholders": { + "contactName": { + "type": "String" + } + } + }, + "contacts_manageRepeater": "Керувати ретранслятором", + "contacts_roomLogin": "Вхід у кімнату", + "contacts_openChat": "Відкрити чат", + "contacts_editGroup": "Редагувати групу", + "contacts_deleteGroup": "Видалити групу", + "contacts_deleteGroupConfirm": "Видалити {groupName}?", + "@contacts_deleteGroupConfirm": { + "placeholders": { + "groupName": { + "type": "String" + } + } + }, + "contacts_newGroup": "Нова група", + "contacts_groupName": "Назва групи", + "contacts_groupNameRequired": "Назва групи обов'язкова.", + "contacts_groupAlreadyExists": "Група «{name}» вже існує.", + "@contacts_groupAlreadyExists": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "contacts_filterContacts": "Фільтрувати контакти...", + "contacts_noContactsMatchFilter": "Жоден контакт не відповідає фільтру.", + "contacts_noMembers": "Немає учасників", + "contacts_lastSeenNow": "В мережі", + "contacts_lastSeenMinsAgo": "В мережі {minutes} хв. тому", + "@contacts_lastSeenMinsAgo": { + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "contacts_lastSeenHourAgo": "В мережі 1 годину тому", + "contacts_lastSeenHoursAgo": "В мережі {hours} год. тому", + "@contacts_lastSeenHoursAgo": { + "placeholders": { + "hours": { + "type": "int" + } + } + }, + "contacts_lastSeenDayAgo": "В мережі 1 день тому", + "contacts_lastSeenDaysAgo": "В мережі {days} дн. тому", + "@contacts_lastSeenDaysAgo": { + "placeholders": { + "days": { + "type": "int" + } + } + }, + "channels_title": "Канали", + "channels_noChannelsConfigured": "Канали не налаштовані", + "channels_addPublicChannel": "Додати публічний канал", + "channels_searchChannels": "Пошук каналів...", + "channels_noChannelsFound": "Каналів не знайдено", + "channels_channelIndex": "Канал {index}", + "@channels_channelIndex": { + "placeholders": { + "index": { + "type": "int" + } + } + }, + "channels_hashtagChannel": "Канал з хештегом", + "channels_public": "Публічний", + "channels_private": "Приватний", + "channels_publicChannel": "Публічний канал", + "channels_privateChannel": "Приватний канал", + "channels_editChannel": "Редагувати канал", + "channels_deleteChannel": "Видалити канал", + "channels_deleteChannelConfirm": "Видалити {name}? Це не можна скасувати.", + "@channels_deleteChannelConfirm": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "channels_channelDeleted": "Канал «{name}» видалено", + "@channels_channelDeleted": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "channels_addChannel": "Додати канал", + "channels_channelIndexLabel": "Індекс каналу", + "channels_channelName": "Назва каналу", + "channels_usePublicChannel": "Використовувати публічний канал", + "channels_standardPublicPsk": "Стандартний публічний PSK", + "channels_pskHex": "PSK (Hex)", + "channels_generateRandomPsk": "Згенерувати випадковий ключ PSK", + "channels_enterChannelName": "Будь ласка, введіть назву каналу", + "channels_pskMustBe32Hex": "PSK має складатися з 32 шістнадцяткових символів.", + "channels_channelAdded": "Канал «{name}» додано", + "@channels_channelAdded": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "channels_editChannelTitle": "Редагувати канал {index}", + "@channels_editChannelTitle": { + "placeholders": { + "index": { + "type": "int" + } + } + }, + "channels_smazCompression": "Стиснення SMAZ", + "channels_channelUpdated": "Канал «{name}» оновлено", + "@channels_channelUpdated": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "channels_publicChannelAdded": "Публічний канал додано", + "channels_sortBy": "Сортувати за", + "channels_sortManual": "Вручну", + "channels_sortAZ": "А-Я", + "channels_sortLatestMessages": "Останні повідомлення", + "channels_sortUnread": "Непрочитані", + "chat_noMessages": "Поки немає повідомлень.", + "chat_sendMessageToStart": "Надішліть повідомлення, щоб почати", + "chat_originalMessageNotFound": "Оригінальне повідомлення не знайдено", + "chat_replyingTo": "Відповідь {name}", + "@chat_replyingTo": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "chat_replyTo": "Відповісти {name}", + "@chat_replyTo": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "chat_location": "Розташування", + "chat_sendMessageTo": "Надіслати повідомлення {contactName}", + "@chat_sendMessageTo": { + "placeholders": { + "contactName": { + "type": "String" + } + } + }, + "chat_typeMessage": "Введіть повідомлення...", + "chat_messageTooLong": "Повідомлення занадто довге (макс. {maxBytes} байт).", + "@chat_messageTooLong": { + "placeholders": { + "maxBytes": { + "type": "int" + } + } + }, + "chat_messageCopied": "Повідомлення скопійовано", + "chat_messageDeleted": "Повідомлення видалено", + "chat_retryingMessage": "Спроба відновлення.", + "chat_retryCount": "Повторна спроба {current}/{max}", + "@chat_retryCount": { + "placeholders": { + "current": { + "type": "int" + }, + "max": { + "type": "int" + } + } + }, + "chat_sendGif": "Надіслати GIF", + "chat_reply": "Відповісти", + "chat_addReaction": "Додати реакцію", + "chat_me": "Я", + "emojiCategorySmileys": "Емодзі", + "emojiCategoryGestures": "Жести", + "emojiCategoryHearts": "Серця", + "emojiCategoryObjects": "Об'єкти", + "gifPicker_title": "Вибрати GIF", + "gifPicker_searchHint": "Пошук GIF...", + "gifPicker_poweredBy": "На базі GIPHY", + "gifPicker_noGifsFound": "GIF не знайдено", + "gifPicker_failedLoad": "Не вдалося завантажити GIF-файли", + "gifPicker_failedSearch": "Пошук GIF не вдався", + "gifPicker_noInternet": "Немає інтернет-з'єднання", + "debugLog_appTitle": "Журнал налагодження програми", + "debugLog_bleTitle": "Журнал налагодження BLE", + "debugLog_copyLog": "Копіювати журнал", + "debugLog_clearLog": "Очистити журнал", + "debugLog_copied": "Журнал налагодження скопійовано", + "debugLog_bleCopied": "Журнал BLE скопійовано", + "debugLog_noEntries": "Поки що немає записів журналу налагодження.", + "debugLog_enableInSettings": "Увімкніть налагодження програми в налаштуваннях", + "debugLog_frames": "Кадри", + "debugLog_rawLogRx": "Необроблений лог - RX", + "debugLog_noBleActivity": "Поки що немає активності BLE.", + "debugFrame_length": "Довжина кадру: {count} байт", + "@debugFrame_length": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "debugFrame_command": "Команда: 0x{value}", + "@debugFrame_command": { + "placeholders": { + "value": { + "type": "String" + } + } + }, + "debugFrame_textMessageHeader": "Повідомлення:", + "debugFrame_destinationPubKey": "- PubKey призначення: {pubKey}", + "@debugFrame_destinationPubKey": { + "placeholders": { + "pubKey": { + "type": "String" + } + } + }, + "debugFrame_timestamp": "- Мітка часу: {timestamp}", + "@debugFrame_timestamp": { + "placeholders": { + "timestamp": { + "type": "int" + } + } + }, + "debugFrame_flags": "- Прапорці: 0x{value}", + "@debugFrame_flags": { + "placeholders": { + "value": { + "type": "String" + } + } + }, + "debugFrame_textType": "- Тип тексту: {type} ({label})", + "@debugFrame_textType": { + "placeholders": { + "type": { + "type": "int" + }, + "label": { + "type": "String" + } + } + }, + "debugFrame_textTypeCli": "CLI", + "debugFrame_textTypePlain": "Звичайний", + "debugFrame_text": "- Текст: \"{text}\"", + "@debugFrame_text": { + "placeholders": { + "text": { + "type": "String" + } + } + }, + "debugFrame_hexDump": "Дамп Hex:", + "chat_pathManagement": "Керування шляхами", + "chat_routingMode": "Режим маршрутизації", + "chat_autoUseSavedPath": "Авто (використовувати збережений шлях)", + "chat_forceFloodMode": "Примусово на всю мережу", + "chat_recentAckPaths": "Недавні шляхи ACK (натисніть, щоб використати):", + "chat_pathHistoryFull": "Історія шляхів заповнена. Видаліть записи, щоб додати нові.", + "chat_hopSingular": "Стрибок", + "chat_hopPlural": "стрибків", + "chat_hopsCount": "{count} {count, plural, =1{стрибок} few{стрибки} many{стрибків} other{стрибків}}", + "@chat_hopsCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "chat_successes": "Успішно", + "chat_removePath": "Видалити шлях", + "chat_noPathHistoryYet": "Історія шляхів недоступна.\nНадішліть повідомлення, щоб виявити шляхи.", + "chat_pathActions": "Дії зі шляхом:", + "chat_setCustomPath": "Встановити власний шлях", + "chat_setCustomPathSubtitle": "Вказати шлях маршрутизації вручну", + "chat_clearPath": "Очистити шлях", + "chat_clearPathSubtitle": "Примусово повторити пошук при наступному надсиланні", + "chat_pathCleared": "Шлях очищено. Наступне повідомлення оновить маршрут.", + "chat_floodModeSubtitle": "Використовувати перемикач маршрутизації в панелі програми", + "chat_floodModeEnabled": "Увімкнено режим «на всю мережу». Перемикайте через іконку маршрутизації на панелі інструментів.", + "chat_fullPath": "Повний шлях", + "chat_pathDetailsNotAvailable": "Деталі шляху ще недоступні. Спробуйте надіслати повідомлення для оновлення.", + "chat_pathSetHops": "Шлях встановлено: {hopCount} {hopCount, plural, =1{стрибок} few{стрибки} many{стрибків} other{стрибків}} - {status}", + "@chat_pathSetHops": { + "placeholders": { + "hopCount": { + "type": "int" + }, + "status": { + "type": "String" + } + } + }, + "chat_pathSavedLocally": "Збережено локально. Підключіться для синхронізації.", + "chat_pathDeviceConfirmed": "Пристрій підтверджено.", + "chat_pathDeviceNotConfirmed": "Пристрій ще не підтверджено.", + "chat_type": "Ввід", + "chat_path": "Шлях", + "chat_publicKey": "Відкритий ключ", + "chat_compressOutgoingMessages": "Стискати вихідні повідомлення", + "chat_floodForced": "На всю мережу (примусово)", + "chat_directForced": "Прямий (примусово)", + "chat_hopsForced": "{count} стрибків (примусово)", + "@chat_hopsForced": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "chat_floodAuto": "На всю мережу (авто)", + "chat_direct": "Прямий", + "chat_poiShared": "Точкою інтересу поділилися", + "chat_unread": "Непрочитано: {count}", + "@chat_unread": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "chat_openLink": "Відкрити посилання?", + "chat_openLinkConfirmation": "Ви хочете відкрити це посилання у браузері?", + "chat_open": "Відкрити", + "chat_couldNotOpenLink": "Не вдалося відкрити посилання: {url}", + "@chat_couldNotOpenLink": { + "placeholders": { + "url": { + "type": "String" + } + } + }, + "chat_invalidLink": "Невірний формат посилання", + "map_title": "Карта вузлів", + "map_noNodesWithLocation": "Немає вузлів з даними про розташування", + "map_nodesNeedGps": "Вузли повинні надавати свої GPS координати,\nщоб з'явитися на карті.", + "map_nodesCount": "Вузли: {count}", + "@map_nodesCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "map_pinsCount": "Мітки: {count}", + "@map_pinsCount": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "map_chat": "Чат", + "map_repeater": "Ретранслятор", + "map_room": "Кімната", + "map_sensor": "Сенсор", + "map_pinDm": "Ключ (DM)", + "map_pinPrivate": "Замок (Приватний)", + "map_pinPublic": "Ключ (Публічний)", + "map_lastSeen": "Останній раз бачили", + "map_disconnectConfirm": "Ви впевнені, що хочете відключитися від цього пристрою?", + "map_from": "Від", + "map_source": "Джерело", + "map_flags": "Прапорці", + "map_shareMarkerHere": "Поділитися маркером тут", + "map_pinLabel": "Мітка піна", + "map_label": "Мітка", + "map_pointOfInterest": "Точка інтересу", + "map_sendToContact": "Надіслати контакту", + "map_sendToChannel": "Надіслати в канал", + "map_noChannelsAvailable": "Немає доступних каналів", + "map_publicLocationShare": "Поділитися в публічному місці", + "map_publicLocationShareConfirm": "Ви збираєтеся поділитися розташуванням у {channelLabel}. Цей канал публічний, і кожен, хто має ключ PSK, може це побачити.", + "@map_publicLocationShareConfirm": { + "placeholders": { + "channelLabel": { + "type": "String" + } + } + }, + "map_connectToShareMarkers": "Підключіться до пристрою, щоб поділитися маркерами", + "map_filterNodes": "Фільтрувати вузли", + "map_nodeTypes": "Типи вузлів", + "map_chatNodes": "Вузли чату", + "map_repeaters": "Ретранслятори", + "map_otherNodes": "Інші вузли", + "map_keyPrefix": "Префікс ключа", + "map_filterByKeyPrefix": "Фільтрувати за префіксом ключа", + "map_publicKeyPrefix": "Префікс відкритого ключа", + "map_markers": "Маркери", + "map_showSharedMarkers": "Показувати спільні маркери", + "map_lastSeenTime": "Час останньої активності", + "map_sharedPin": "Спільний пін", + "map_joinRoom": "Приєднатися до кімнати", + "map_manageRepeater": "Керувати ретранслятором", + "mapCache_title": "Офлайн-кеш карти", + "mapCache_selectAreaFirst": "Спершу виберіть область для кешування", + "mapCache_noTilesToDownload": "Немає плиток для завантаження в цій області.", + "mapCache_downloadTilesTitle": "Завантажити плитки", + "mapCache_downloadTilesPrompt": "Завантажити {count} плиток для використання офлайн?", + "@mapCache_downloadTilesPrompt": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "mapCache_downloadAction": "Завантажити", + "mapCache_cachedTiles": "Закешовано {count} плиток", + "@mapCache_cachedTiles": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "mapCache_cachedTilesWithFailed": "Плитки в кеші ({downloaded}) ({failed} помилок)", + "@mapCache_cachedTilesWithFailed": { + "placeholders": { + "downloaded": { + "type": "int" + }, + "failed": { + "type": "int" + } + } + }, + "mapCache_clearOfflineCacheTitle": "Очистити офлайн-кеш", + "mapCache_clearOfflineCachePrompt": "Видалити всі закешовані плитки карти?", + "mapCache_offlineCacheCleared": "Офлайн-кеш очищено.", + "mapCache_noAreaSelected": "Область не вибрано", + "mapCache_cacheArea": "Область кешування", + "mapCache_useCurrentView": "Використати поточний вигляд", + "mapCache_zoomRange": "Діапазон масштабування", + "mapCache_estimatedTiles": "Оцінка плиток: {count}", + "@mapCache_estimatedTiles": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "mapCache_downloadedTiles": "Завантажено {completed} / {total}", + "@mapCache_downloadedTiles": { + "placeholders": { + "completed": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "mapCache_downloadTilesButton": "Завантажити плитки", + "mapCache_clearCacheButton": "Очистити кеш", + "mapCache_failedDownloads": "Невдалі завантаження: {count}", + "@mapCache_failedDownloads": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "mapCache_boundsLabel": "Пн {north}, Пд {south}, Сх {east}, Зх {west}", + "@mapCache_boundsLabel": { + "placeholders": { + "north": { + "type": "String" + }, + "south": { + "type": "String" + }, + "east": { + "type": "String" + }, + "west": { + "type": "String" + } + } + }, + "time_justNow": "Тільки що", + "time_minutesAgo": "{minutes} хв. тому", + "@time_minutesAgo": { + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "time_hoursAgo": "{hours} год. тому", + "@time_hoursAgo": { + "placeholders": { + "hours": { + "type": "int" + } + } + }, + "time_daysAgo": "{days} дн. тому", + "@time_daysAgo": { + "placeholders": { + "days": { + "type": "int" + } + } + }, + "time_hour": "година", + "time_hours": "годин", + "time_day": "день", + "time_days": "днів", + "time_week": "тиждень", + "time_weeks": "тижнів", + "time_month": "місяць", + "time_months": "місяців", + "time_minutes": "хвилин", + "time_allTime": "Весь час", + "dialog_disconnect": "Відключити", + "dialog_disconnectConfirm": "Ви впевнені, що хочете відключитися від цього пристрою?", + "login_repeaterLogin": "Вхід у ретранслятор", + "login_roomLogin": "Вхід у кімнату", + "login_password": "Пароль", + "login_enterPassword": "Введіть пароль", + "login_savePassword": "Зберегти пароль", + "login_savePasswordSubtitle": "Пароль буде надійно збережено на цьому пристрої.", + "login_repeaterDescription": "Введіть пароль ретранслятора для доступу до налаштувань та статусу.", + "login_roomDescription": "Введіть пароль кімнати для доступу до налаштувань та статусу.", + "login_routing": "Маршрутизація", + "login_routingMode": "Режим маршрутизації", + "login_autoUseSavedPath": "Авто (використовувати збережений шлях)", + "login_forceFloodMode": "Примусово на всю мережу", + "login_managePaths": "Керувати шляхами", + "login_login": "Вхід", + "login_attempt": "Спроба {current}/{max}", + "@login_attempt": { + "placeholders": { + "current": { + "type": "int" + }, + "max": { + "type": "int" + } + } + }, + "login_failed": "Вхід не вдався: {error}", + "@login_failed": { + "placeholders": { + "error": { + "type": "String" + } + } + }, + "login_failedMessage": "Вхід не вдався. Або пароль неправильний, або ретранслятор недосяжний.", + "common_reload": "Перезавантажити", + "common_clear": "Очистити", + "path_currentPath": "Поточний шлях: {path}", + "@path_currentPath": { + "placeholders": { + "path": { + "type": "String" + } + } + }, + "path_usingHopsPath": "Використання шляху з {count} {count, plural, =1{стрибком} few{стрибками} many{стрибками} other{стрибками}}", + "@path_usingHopsPath": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "path_enterCustomPath": "Ввести власний шлях", + "path_currentPathLabel": "Поточний шлях", + "path_hexPrefixInstructions": "Введіть 2-символьні hex-префікси для кожного стрибка, розділені комами.", + "path_hexPrefixExample": "Приклад: A1,F2,3C (кожен вузол використовує перший байт свого відкритого ключа).", + "path_labelHexPrefixes": "Hex-префікси", + "path_helperMaxHops": "Макс. 64 стрибки. Кожен префікс - 2 шістнадцяткові символи (1 байт)", + "path_selectFromContacts": "Вибрати з контактів:", + "path_noRepeatersFound": "Ретрансляторів або серверів кімнат не знайдено.", + "path_customPathsRequire": "Власні шляхи вимагають проміжних вузлів, які можуть передавати повідомлення.", + "path_invalidHexPrefixes": "Некоректні hex-префікси: {prefixes}", + "@path_invalidHexPrefixes": { + "placeholders": { + "prefixes": { + "type": "String" + } + } + }, + "path_tooLong": "Шлях занадто довгий. Максимум 64 стрибки.", + "path_setPath": "Встановити шлях", + "repeater_management": "Керування ретранслятором", + "repeater_managementTools": "Інструменти керування", + "repeater_status": "Статус", + "repeater_statusSubtitle": "Показати статус, статистику та сусідів ретранслятора", + "repeater_telemetry": "Телеметрія", + "repeater_telemetrySubtitle": "Показати телеметрію сенсорів та статистику системи", + "repeater_cli": "CLI", + "repeater_cliSubtitle": "Надіслати команди ретранслятору", + "repeater_settings": "Налаштування", + "repeater_settingsSubtitle": "Налаштувати параметри ретранслятора", + "repeater_statusTitle": "Статус ретранслятора", + "repeater_routingMode": "Режим маршрутизації", + "repeater_autoUseSavedPath": "Авто (використовувати збережений шлях)", + "repeater_forceFloodMode": "Примусово на всю мережу", + "repeater_pathManagement": "Керування шляхами", + "repeater_refresh": "Оновити", + "repeater_statusRequestTimeout": "Час очікування запиту статусу вичерпано.", + "repeater_errorLoadingStatus": "Помилка завантаження статусу: {error}", + "@repeater_errorLoadingStatus": { + "placeholders": { + "error": { + "type": "String" + } + } + }, + "repeater_systemInformation": "Системна інформація", + "repeater_battery": "Батарея", + "repeater_clockAtLogin": "Годинник (при вході)", + "repeater_uptime": "Час роботи", + "repeater_queueLength": "Довжина черги", + "repeater_debugFlags": "Прапорці налагодження", + "repeater_radioStatistics": "Статистика радіо", + "repeater_lastRssi": "Останній RSSI", + "repeater_lastSnr": "Останній SNR", + "repeater_noiseFloor": "Рівень шуму", + "repeater_txAirtime": "Ефірний час TX", + "repeater_rxAirtime": "Ефірний час RX", + "repeater_packetStatistics": "Статистика пакетів", + "repeater_sent": "Надіслано", + "repeater_received": "Отримано", + "repeater_duplicates": "Дублікати", + "repeater_daysHoursMinsSecs": "{days} дн. {hours} год {minutes} хв {seconds} с", + "@repeater_daysHoursMinsSecs": { + "placeholders": { + "days": { + "type": "int" + }, + "hours": { + "type": "int" + }, + "minutes": { + "type": "int" + }, + "seconds": { + "type": "int" + } + } + }, + "repeater_packetTxTotal": "Всього: {total}, На всю мережу: {flood}, Прямі: {direct}", + "@repeater_packetTxTotal": { + "placeholders": { + "total": { + "type": "int" + }, + "flood": { + "type": "String" + }, + "direct": { + "type": "String" + } + } + }, + "repeater_packetRxTotal": "Всього: {total}, На всю мережу: {flood}, Прямі: {direct}", + "@repeater_packetRxTotal": { + "placeholders": { + "total": { + "type": "int" + }, + "flood": { + "type": "String" + }, + "direct": { + "type": "String" + } + } + }, + "repeater_duplicatesFloodDirect": "На всю мережу: {flood}, Прямі: {direct}", + "@repeater_duplicatesFloodDirect": { + "placeholders": { + "flood": { + "type": "String" + }, + "direct": { + "type": "String" + } + } + }, + "repeater_duplicatesTotal": "Всього: {total}", + "@repeater_duplicatesTotal": { + "placeholders": { + "total": { + "type": "int" + } + } + }, + "repeater_settingsTitle": "Налаштування ретранслятора", + "repeater_basicSettings": "Основні налаштування", + "repeater_repeaterName": "Ім'я ретранслятора", + "repeater_repeaterNameHelper": "Показати ім'я цього ретранслятора", + "repeater_adminPassword": "Пароль адміністратора", + "repeater_adminPasswordHelper": "Пароль повного доступу", + "repeater_guestPassword": "Гостьовий пароль", + "repeater_guestPasswordHelper": "Доступ лише для читання з паролем", + "repeater_radioSettings": "Налаштування радіо", + "repeater_frequencyMhz": "Частота (МГц)", + "repeater_frequencyHelper": "300-2500 МГц", + "repeater_txPower": "Потужність TX", + "repeater_txPowerHelper": "1-30 дБм", + "repeater_bandwidth": "Смуга пропускання", + "repeater_spreadingFactor": "Коефіцієнт розширення", + "repeater_codingRate": "Швидкість кодування", + "repeater_locationSettings": "Налаштування розташування", + "repeater_latitude": "Широта", + "repeater_latitudeHelper": "Десяткові градуси (наприклад, 37.7749)", + "repeater_longitude": "Довгота", + "repeater_longitudeHelper": "Десяткові градуси (наприклад, -122.4194)", + "repeater_features": "Функції", + "repeater_packetForwarding": "Пересилання пакетів", + "repeater_packetForwardingSubtitle": "Дозволити ретранслятору пересилати пакети", + "repeater_guestAccess": "Гостьовий доступ", + "repeater_guestAccessSubtitle": "Дозволити гостьовий доступ лише для читання", + "repeater_privacyMode": "Режим приватності", + "repeater_privacyModeSubtitle": "Приховати ім'я/розташування в оголошеннях", + "repeater_advertisementSettings": "Налаштування оголошень", + "repeater_localAdvertInterval": "Інтервал локальних оголошень (0 стрибків)", + "repeater_localAdvertIntervalMinutes": "{minutes} хвилин", + "@repeater_localAdvertIntervalMinutes": { + "placeholders": { + "minutes": { + "type": "int" + } + } + }, + "repeater_floodAdvertInterval": "Інтервал оголошень на всю мережу (flood)", + "repeater_floodAdvertIntervalHours": "{hours} годин", + "@repeater_floodAdvertIntervalHours": { + "placeholders": { + "hours": { + "type": "int" + } + } + }, + "repeater_encryptedAdvertInterval": "Інтервал зашифрованих оголошень", + "repeater_dangerZone": "Небезпечна зона", + "repeater_rebootRepeater": "Перезавантажити ретранслятор", + "repeater_rebootRepeaterSubtitle": "Скинути пристрій ретранслятора", + "repeater_rebootRepeaterConfirm": "Ви впевнені, що хочете перезавантажити цей ретранслятор?", + "repeater_regenerateIdentityKey": "Перегенерувати ключ ідентичності", + "repeater_regenerateIdentityKeySubtitle": "Згенерувати нову пару ключів (публічний/приватний)", + "repeater_regenerateIdentityKeyConfirm": "Це створить нову ідентичність для ретранслятора. Продовжити?", + "repeater_eraseFileSystem": "Очистити файлову систему", + "repeater_eraseFileSystemSubtitle": "Відформатувати файлову систему ретранслятора", + "repeater_eraseFileSystemConfirm": "УВАГА: Це видалить всі дані з ретранслятора. Це не можна скасувати!", + "repeater_eraseSerialOnly": "Очищення доступне лише через послідовну консоль.", + "repeater_commandSent": "Команда надіслана: {command}", + "@repeater_commandSent": { + "placeholders": { + "command": { + "type": "String" + } + } + }, + "repeater_errorSendingCommand": "Помилка надсилання команди: {error}", + "@repeater_errorSendingCommand": { + "placeholders": { + "error": { + "type": "String" + } + } + }, + "repeater_confirm": "Підтвердити", + "repeater_settingsSaved": "Налаштування успішно збережено.", + "repeater_errorSavingSettings": "Помилка збереження налаштувань: {error}", + "@repeater_errorSavingSettings": { + "placeholders": { + "error": { + "type": "String" + } + } + }, + "repeater_refreshBasicSettings": "Оновити основні налаштування", + "repeater_refreshRadioSettings": "Оновити налаштування радіо", + "repeater_refreshTxPower": "Оновити потужність TX", + "repeater_refreshLocationSettings": "Оновити налаштування розташування", + "repeater_refreshPacketForwarding": "Оновити пересилання пакетів", + "repeater_refreshGuestAccess": "Оновити гостьовий доступ", + "repeater_refreshPrivacyMode": "Оновити режим приватності", + "repeater_refreshAdvertisementSettings": "Оновити налаштування оголошень", + "repeater_refreshed": "{label} оновлено", + "@repeater_refreshed": { + "placeholders": { + "label": { + "type": "String" + } + } + }, + "repeater_errorRefreshing": "Помилка оновлення {label}", + "@repeater_errorRefreshing": { + "placeholders": { + "label": { + "type": "String" + } + } + }, + "repeater_cliTitle": "Ретранслятор CLI", + "repeater_debugNextCommand": "Налагодити наступну команду", + "repeater_commandHelp": "Довідка", + "repeater_clearHistory": "Очистити історію", + "repeater_noCommandsSent": "Команди ще не надсилалися.", + "repeater_typeCommandOrUseQuick": "Введіть команду нижче або використовуйте швидкі команди", + "repeater_enterCommandHint": "Введіть команду...", + "repeater_previousCommand": "Попередня команда", + "repeater_nextCommand": "Наступна команда", + "repeater_enterCommandFirst": "Спершу введіть команду", + "repeater_cliCommandFrameTitle": "Фрейм команди CLI", + "repeater_cliCommandError": "Помилка: {error}", + "@repeater_cliCommandError": { + "placeholders": { + "error": { + "type": "String" + } + } + }, + "repeater_cliQuickGetName": "Отримати ім'я", + "repeater_cliQuickGetRadio": "Отримати Радіо", + "repeater_cliQuickGetTx": "Отримати TX", + "repeater_cliQuickNeighbors": "Сусіди", + "repeater_cliQuickVersion": "Версія", + "repeater_cliQuickAdvertise": "Оголосити", + "repeater_cliQuickClock": "Годинник", + "repeater_cliHelpAdvert": "Надсилає пакет оголошення", + "repeater_cliHelpReboot": "Перезавантажує пристрій. (Зверніть увагу, ви можете отримати «Тайм-аут», що є нормальним)", + "repeater_cliHelpClock": "Відображає поточний час за годинником кожного пристрою.", + "repeater_cliHelpPassword": "Встановлює новий пароль адміністратора для пристрою.", + "repeater_cliHelpVersion": "Відображає версію пристрою та дату збірки прошивки.", + "repeater_cliHelpClearStats": "Скидає різні лічильники статистики до нуля.", + "repeater_cliHelpSetAf": "Встановлює коефіцієнт ефірного часу.", + "repeater_cliHelpSetTx": "Встановлює потужність передачі LoRa в дБм (для застосування потрібне перезавантаження).", + "repeater_cliHelpSetRepeat": "Вмикає або вимикає роль ретранслятора для цього вузла.", + "repeater_cliHelpSetAllowReadOnly": "(Сервер кімнати) Якщо «увімкнено», порожній пароль дозволить вхід, але не дозволить публікувати в кімнаті. (тільки читання)", + "repeater_cliHelpSetFloodMax": "Встановлює максимальну кількість стрибків для вхідних пакетів flood (якщо >= max, пакет не пересилається).", + "repeater_cliHelpSetIntThresh": "Встановлює поріг інтерференції (в дБ). Значення за замовчуванням — 14. Встановлення на 0 вимикає виявлення інтерференції каналу.", + "repeater_cliHelpSetAgcResetInterval": "Встановлює інтервал скидання автоматичного контролера посилення (AGC). Встановіть 0 для вимкнення.", + "repeater_cliHelpSetMultiAcks": "Вмикає або вимикає функціональність подвійних ACK.", + "repeater_cliHelpSetAdvertInterval": "Встановлює інтервал таймера для надсилання локального пакету оголошення (без ретрансляції). Встановіть 0 для вимкнення.", + "repeater_cliHelpSetFloodAdvertInterval": "Встановлює інтервал таймера в годинах для надсилання пакету оголошення на всю мережу. Встановіть 0 для вимкнення.", + "repeater_cliHelpSetGuestPassword": "Встановлює/оновлює гостьовий пароль. (для ретрансляторів гостьові підключення можуть надсилати запит «Get Stats»)", + "repeater_cliHelpSetName": "Встановлює ім'я для оголошення.", + "repeater_cliHelpSetLat": "Встановлює широту для карти оголошень. (десяткові градуси)", + "repeater_cliHelpSetLon": "Встановлює довготу для карти оголошень. (десяткові градуси)", + "repeater_cliHelpSetRadio": "Повністю встановлює нові параметри радіо та зберігає їх у налаштуваннях. Потребує команди «перезавантаження» для застосування.", + "repeater_cliHelpSetRxDelay": "Базові (експериментальні) параметри для застосування невеликої затримки до отриманих пакетів залежно від сили сигналу/оцінки. Встановіть 0 для вимкнення.", + "repeater_cliHelpSetTxDelay": "Встановлює множник для часу роботи в режимі «на всю мережу» (flood) для пакету та системи випадкових слотів, щоб затримати його відправку (для зменшення ймовірності колізій).", + "repeater_cliHelpSetDirectTxDelay": "Те саме, що й txdelay, але для застосування випадкової затримки при пересиланні пакетів у прямому режимі.", + "repeater_cliHelpSetBridgeEnabled": "Увімкнути/Вимкнути міст.", + "repeater_cliHelpSetBridgeDelay": "Встановити затримку перед пересиланням пакетів.", + "repeater_cliHelpSetBridgeSource": "Виберіть, чи буде міст ретранслювати отримані пакети або передані пакети.", + "repeater_cliHelpSetBridgeBaud": "Встановити швидкість послідовного зв'язку для мостів Rs232.", + "repeater_cliHelpSetBridgeSecret": "Встановити секрет мосту для мостів espnow.", + "repeater_cliHelpSetAdcMultiplier": "Встановлює власний множник для коригування повідомлюваної напруги батареї (підтримується лише на деяких платах).", + "repeater_cliHelpTempRadio": "Встановлює тимчасові параметри радіо на задану кількість хвилин, потім повертається до початкових налаштувань. (не зберігає в налаштуваннях).", + "repeater_cliHelpSetPerm": "Змінює ACL (список контролю доступу). Видаляє відповідний запис (за префіксом публічного ключа), якщо «permissions» дорівнює нулю. Додає новий запис, якщо hex публічного ключа повний і його немає в ACL. Оновлює запис на основі префікса публічного ключа. Біти дозволів залежать від ролі прошивки, але нижні 2 біти: 0 (Гість), 1 (Тільки читання), 2 (Читання/Запис), 3 (Адміністратор).", + "repeater_cliHelpGetBridgeType": "Отримати тип мосту: немає, rs232, espnow", + "repeater_cliHelpLogStart": "Починає запис пакетів у файлову систему.", + "repeater_cliHelpLogStop": "Зупиняє запис пакетів у файлову систему.", + "repeater_cliHelpLogErase": "Видаляє журнали пакетів з файлової системи.", + "repeater_cliHelpNeighbors": "Показує список інших вузлів-ретрансляторів, почутих через оголошення без ретрансляції. Кожен рядок — id-hex-префікс:timestamp:snr-помножено-на-4", + "repeater_cliHelpNeighborRemove": "Видаляє перший відповідний запис (за префіксом публічного ключа (hex)) зі списку сусідів.", + "repeater_cliHelpRegion": "(тільки серійний) Перелічує всі визначені регіони та поточні дозволи на оголошення «на всю мережу» (flood).", + "repeater_cliHelpRegionLoad": "ПРИМІТКА: це спеціальний виклик кількох команд. Кожна наступна команда — це назва регіону (з відступом пробілами для позначення ієрархії батьків, мінімум один пробіл). Завершується надсиланням порожнього рядка/команди.", + "repeater_cliHelpRegionGet": "Шукає регіон із заданим префіксом назви (або «» для глобальної області). Відповідає: «-> ім'я-регіону (ім'я-батька) 'F'»", + "repeater_cliHelpRegionPut": "Додає або оновлює визначення регіону з заданою назвою.", + "repeater_cliHelpRegionRemove": "Видаляє визначення регіону з заданою назвою.", + "repeater_cliHelpRegionAllowf": "Встановлює дозвіл «Flood» для заданого регіону. ('' для глобальної/успадкованої області)", + "repeater_cliHelpRegionDenyf": "Видаляє дозвіл «Flood» для заданого регіону. (ПРИМІТКА: на даному етапі не рекомендується використовувати для глобальної/успадкованої області!! )", + "repeater_cliHelpRegionHome": "Відповідає поточним «домашнім» регіоном. (Примітка: поки ніде не застосовується, зарезервовано для майбутнього використання)", + "repeater_cliHelpRegionHomeSet": "Встановлює «домашній» регіон.", + "repeater_cliHelpRegionSave": "Зберігає список/карту регіонів у сховищі.", + "repeater_cliHelpGps": "Показує статус GPS. Коли GPS вимкнено, відповідає лише «вимкнено», якщо увімкнено — відповідає «увімкнено», статус, корекція, кількість супутників.", + "repeater_cliHelpGpsOnOff": "Увімкнути/вимкнути GPS.", + "repeater_cliHelpGpsSync": "Синхронізує час вузла з годинником GPS.", + "repeater_cliHelpGpsSetLoc": "Встановлює позицію вузла за координатами GPS і зберігає в налаштуваннях.", + "repeater_cliHelpGpsAdvert": "Надає конфігурацію оголошення розташування вузла:\n- none : не включати розташування в оголошення\n- share : ділитися розташуванням GPS (з SensorManager)\n- prefs : оголошувати розташування, збережене в налаштуваннях", + "repeater_cliHelpGpsAdvertSet": "Встановлює конфігурацію оголошення розташування.", + "repeater_commandsListTitle": "Список команд", + "repeater_commandsListNote": "ПРИМІТКА: для різних команд «set»... також існує команда «get»...", + "repeater_general": "Загальні", + "repeater_settingsCategory": "Налаштування", + "repeater_bridge": "Міст", + "repeater_logging": "Логування", + "repeater_neighborsRepeaterOnly": "Сусіди (Тільки ретранслятор)", + "repeater_regionManagementRepeaterOnly": "Керування регіонами (Тільки ретранслятор)", + "repeater_regionNote": "Команди регіонів були введені для керування визначеннями та дозволами регіонів.", + "repeater_gpsManagement": "Керування GPS", + "repeater_gpsNote": "Команда GPS була введена для керування питаннями, пов'язаними з локацією.", + "telemetry_receivedData": "Дані телеметрії отримано", + "telemetry_requestTimeout": "Час запиту телеметрії вичерпано.", + "telemetry_errorLoading": "Помилка завантаження телеметрії: {error}", + "@telemetry_errorLoading": { + "placeholders": { + "error": { + "type": "String" + } + } + }, + "telemetry_noData": "Дані телеметрії недоступні.", + "telemetry_channelTitle": "Канал {channel}", + "@telemetry_channelTitle": { + "placeholders": { + "channel": { + "type": "int" + } + } + }, + "telemetry_batteryLabel": "Батарея", + "telemetry_voltageLabel": "Напруга", + "telemetry_mcuTemperatureLabel": "Температура MCU", + "telemetry_temperatureLabel": "Температура", + "telemetry_currentLabel": "Поточний струм", + "telemetry_batteryValue": "{percent}% / {volts}В", + "@telemetry_batteryValue": { + "placeholders": { + "percent": { + "type": "int" + }, + "volts": { + "type": "String" + } + } + }, + "telemetry_voltageValue": "{volts}В", + "@telemetry_voltageValue": { + "placeholders": { + "volts": { + "type": "String" + } + } + }, + "telemetry_currentValue": "{amps}А", + "@telemetry_currentValue": { + "placeholders": { + "amps": { + "type": "String" + } + } + }, + "telemetry_temperatureValue": "{celsius}°C / {fahrenheit}°F", + "@telemetry_temperatureValue": { + "placeholders": { + "celsius": { + "type": "String" + }, + "fahrenheit": { + "type": "String" + } + } + }, + "channelPath_title": "Шлях пакету", + "channelPath_viewMap": "Показати карту", + "channelPath_otherObservedPaths": "Інші спостережувані шляхи", + "channelPath_repeaterHops": "Стрибки ретранслятора", + "channelPath_noHopDetails": "Деталі відправки не надані для цього пакету.", + "channelPath_messageDetails": "Деталі повідомлення", + "channelPath_senderLabel": "Відправник", + "channelPath_timeLabel": "Час", + "channelPath_repeatsLabel": "Повторення", + "channelPath_pathLabel": "Шлях {index}", + "channelPath_observedLabel": "Спостережено", + "channelPath_observedPathTitle": "Спостережуваний шлях {index} • {hops}", + "@channelPath_observedPathTitle": { + "placeholders": { + "index": { + "type": "int" + }, + "hops": { + "type": "String" + } + } + }, + "channelPath_noLocationData": "Немає даних про розташування", + "channelPath_timeWithDate": "{day}/{month} {time}", + "@channelPath_timeWithDate": { + "placeholders": { + "day": { + "type": "int" + }, + "month": { + "type": "int" + }, + "time": { + "type": "String" + } + } + }, + "channelPath_timeOnly": "{time}", + "@channelPath_timeOnly": { + "placeholders": { + "time": { + "type": "String" + } + } + }, + "channelPath_unknownPath": "Невідомий", + "channelPath_floodPath": "На всю мережу", + "channelPath_directPath": "Прямий", + "channelPath_observedZeroOf": "0 з {total} стрибків", + "@channelPath_observedZeroOf": { + "placeholders": { + "total": { + "type": "int" + } + } + }, + "channelPath_observedSomeOf": "{observed} з {total} стрибків", + "@channelPath_observedSomeOf": { + "placeholders": { + "observed": { + "type": "int" + }, + "total": { + "type": "int" + } + } + }, + "channelPath_mapTitle": "Карта шляху", + "channelPath_noRepeaterLocations": "Позиції ретрансляторів недоступні для цього шляху.", + "channelPath_primaryPath": "Шлях {index} (Основний)", + "@channelPath_primaryPath": { + "placeholders": { + "index": { + "type": "int" + } + } + }, + "@channelPath_pathLabel": { + "placeholders": { + "index": { + "type": "int" + } + } + }, + "channelPath_pathLabelTitle": "Шлях", + "channelPath_observedPathHeader": "Спостережуваний шлях", + "channelPath_selectedPathLabel": "{label} • {prefixes}", + "@channelPath_selectedPathLabel": { + "placeholders": { + "label": { + "type": "String" + }, + "prefixes": { + "type": "String" + } + } + }, + "channelPath_noHopDetailsAvailable": "Деталі стрибків недоступні для цього пакету.", + "channelPath_unknownRepeater": "Невідомий ретранслятор", + "listFilter_tooltip": "Фільтр та сортування", + "listFilter_sortBy": "Сортувати за", + "listFilter_latestMessages": "Останні повідомлення", + "listFilter_heardRecently": "Нещодавно чули", + "listFilter_az": "А-Я", + "listFilter_filters": "Фільтри", + "listFilter_all": "Все", + "listFilter_users": "Користувачі", + "listFilter_repeaters": "Ретранслятори", + "listFilter_roomServers": "Сервери кімнат", + "listFilter_unreadOnly": "Тільки непрочитані повідомлення", + "listFilter_newGroup": "Нова група", + "@neighbors_errorLoading": { + "placeholders": { + "error": { + "type": "String" + } + } + }, + "repeater_neighbours": "Сусіди", + "repeater_neighboursSubtitle": "Показати сусідів нульового стрибка.", + "neighbors_receivedData": "Дані сусідів отримано", + "neighbors_requestTimedOut": "Час запиту сусідів вичерпано.", + "neighbors_errorLoading": "Помилка завантаження сусідів: {error}", + "neighbors_repeatersNeighbours": "Ретранслятори-сусіди", + "neighbors_noData": "Дані про сусідів недоступні.", + "channels_createPrivateChannelDesc": "Захищено секретним ключем.", + "channels_joinPrivateChannel": "Приєднатися до приватного каналу", + "channels_createPrivateChannel": "Створити приватний канал", + "channels_joinPrivateChannelDesc": "Ввести секретний ключ вручну.", + "channels_joinPublicChannel": "Приєднатися до публічного каналу", + "channels_joinPublicChannelDesc": "Будь-хто може приєднатися до цього каналу.", + "channels_joinHashtagChannel": "Приєднатися до каналу з хештегом", + "channels_joinHashtagChannelDesc": "Будь-хто може приєднатися до каналів #hashtag.", + "channels_scanQrCode": "Сканувати QR-код", + "channels_scanQrCodeComingSoon": "Скоро буде", + "channels_enterHashtag": "Введіть хештег", + "channels_hashtagHint": "напр. #команда", + "@neighbors_unknownContact": { + "placeholders": { + "pubkey": { + "type": "String" + } + } + }, + "@neighbors_heardAgo": { + "placeholders": { + "time": { + "type": "String" + } + } + }, + "neighbors_unknownContact": "Невідомий відкритий ключ {pubkey}", + "neighbors_heardAgo": "Почуто: {time} тому", + "settings_locationGPSEnable": "Увімкнути GPS", + "settings_locationGPSEnableSubtitle": "Вмикає автоматичне оновлення місцезнаходження через GPS.", + "settings_locationIntervalSec": "Інтервал для GPS (Секунди)", + "settings_locationIntervalInvalid": "Інтервал має бути не менше 60 секунд і менше 86400 секунд.", + "contacts_manageRoom": "Керувати сервером кімнати", + "room_management": "Адміністрування сервера кімнати", + "@community_joinConfirmation": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "@community_created": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "@community_joined": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "@community_qrInstructions": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "@community_alreadyMemberMessage": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "@community_deleteConfirm": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "@community_deleted": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "@community_forCommunity": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "common_ok": "ОК", + "community_title": "Спільнота", + "community_create": "Створити спільноту", + "community_createDesc": "Створити нову спільноту та поділитися через QR-код.", + "community_join": "Приєднатися", + "community_joinTitle": "Приєднатися до спільноти", + "community_joinConfirmation": "Ви бажаєте приєднатися до спільноти «{name}»?", + "community_scanQr": "Сканувати QR спільноти", + "community_scanInstructions": "Наведіть камеру на QR-код спільноти.", + "community_showQr": "Показати QR-код", + "community_publicChannel": "Публічна спільнота", + "community_hashtagChannel": "Хештег спільноти", + "community_name": "Назва спільноти", + "community_enterName": "Введіть назву спільноти", + "community_created": "Спільноту «{name}» створено", + "community_joined": "Приєднався до спільноти «{name}»", + "community_qrTitle": "Поділитися спільнотою", + "community_qrInstructions": "Відскануйте цей QR-код, щоб приєднатися до {name}", + "community_hashtagPrivacyHint": "Канали хештегів спільноти доступні лише членам спільноти", + "community_invalidQrCode": "Недійсний QR-код спільноти", + "community_alreadyMember": "Вже учасник", + "community_alreadyMemberMessage": "Ви вже є учасником «{name}».", + "community_addPublicChannel": "Додати публічний канал спільноти", + "community_addPublicChannelHint": "Автоматично додати публічний канал для цієї спільноти", + "community_noCommunities": "Поки не приєднано до жодної групи.", + "community_scanOrCreate": "Відскануйте QR-код або створіть спільноту, щоб почати", + "community_manageCommunities": "Керувати спільнотами", + "community_delete": "Покинути спільноту", + "community_deleteConfirm": "Покинути «{name}»?", + "community_deleteChannelsWarning": "Це також видалить {count} {count, plural, =1{канал} few{канали} many{каналів} other{каналів}} та їх повідомлення.", + "@community_deleteChannelsWarning": { + "placeholders": { + "count": { + "type": "int" + } + } + }, + "community_deleted": "Спільноту «{name}» покинуто", + "community_addHashtagChannel": "Додати хештег спільноти", + "community_addHashtagChannelDesc": "Додати канал хештегу для цієї спільноти", + "community_selectCommunity": "Вибрати спільноту", + "community_regularHashtag": "Звичайний хештег", + "community_regularHashtagDesc": "Публічний хештег (будь-хто може приєднатися)", + "community_communityHashtag": "Хештег спільноти", + "community_communityHashtagDesc": "Ексклюзивно для членів спільноти", + "community_forCommunity": "Для {name}", + "@community_regenerateSecretConfirm": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "@community_secretRegenerated": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "@community_secretUpdated": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "@community_scanToUpdateSecret": { + "placeholders": { + "name": { + "type": "String" + } + } + }, + "community_regenerateSecret": "Перегенерувати секрет", + "community_regenerateSecretConfirm": "Перегенерувати секретний ключ для «{name}»? Всі учасники повинні будуть відсканувати новий QR-код, щоб продовжити спілкування.", + "community_regenerate": "Перегенерувати", + "community_secretRegenerated": "Секретний пароль для «{name}» перегенеровано", + "community_scanToUpdateSecret": "Відскануйте новий QR-код, щоб оновити пароль для «{name}»", + "community_updateSecret": "Оновити секрет", + "community_secretUpdated": "Зміну секрету для «{name}» оновлено" +} \ No newline at end of file