mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
feat: UX polish, localization, advert relocation, and map filter fixes
- i18n: translate connection screen + chat tab keys into 13 locales; add "Send my contact" (advert) strings in all locales - feat: move self-advert from home header into composer "+" action menu (new lib/utils/advert_helper.dart, always shows Flood/Direct sheet) - fix: hide-repeaters map toggle was bypassed in simple mode - fix: simple mode map now shows only favourite chat contacts - fix: wrap ListTiles in Material (contact_tile secondary actions, inferred contact group card) to satisfy Flutter ink assertions - device-authoritative contact/channel sync and UX review fixes Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2493,5 +2493,125 @@
|
||||
"enterRegionName": "Назва регіону (напр. auckland)",
|
||||
"noRegionsFound": "Регіони не знайдені на цьому ретрансляторі.",
|
||||
"regionScopeSet": "Область регіону встановлена на {name}",
|
||||
"regionScopeCleared": "Область регіону очищена"
|
||||
"regionScopeCleared": "Область регіону очищена",
|
||||
"simpleMode": "Простий режим",
|
||||
"simpleModeDescription": "Лише чат і карта з обраними контактами",
|
||||
"simpleModeRequiresLockedDestination": "Спочатку увімкніть «Зафіксувати призначення» з каналом, щоб використовувати простий режим",
|
||||
"noFavouriteContacts": "Немає обраних контактів",
|
||||
"selectDestinationFirst": "Спершу виберіть канал, контакт або кімнату",
|
||||
"recipientNoLongerAvailable": "Одержувач більше недоступний",
|
||||
"failedToSendMessage": "Не вдалося надіслати: {error}",
|
||||
"tictactoeDirectOnly": "Хрестики-нулики працюють лише в особистих повідомленнях. Спершу виберіть контакт.",
|
||||
"deviceKeyUnavailable": "Ключ пристрою недоступний",
|
||||
"imageCompressionFailed": "Не вдалося стиснути зображення",
|
||||
"imageFragmentationFailed": "Не вдалося розділити зображення на фрагменти",
|
||||
"failedToAnnounceImage": "Не вдалося анонсувати зображення",
|
||||
"noRecipientSelected": "Одержувача не вибрано",
|
||||
"imageSendFailed": "Не вдалося надіслати зображення",
|
||||
"microphonePermissionRequiredForVoice": "Для голосових повідомлень потрібен дозвіл на мікрофон",
|
||||
"recordingDiscarded": "Запис відхилено",
|
||||
"publicChannelMediaWarning": "Ви збираєтеся надіслати {mediaType} в публічний канал. Це не рекомендується: отримати це може будь-хто в mesh-мережі. Виберіть приватний або тегований канал, якщо тільки це не те, що ви хочете.",
|
||||
"selectPrivateChannelToShareLocation": "Виберіть приватний канал, щоб поділитися місцезнаходженням.",
|
||||
"stopSharingMyLocation": "Припинити ділитися місцезнаходженням",
|
||||
"shareMyLocation": "Поділитися місцезнаходженням",
|
||||
"stopRecording": "Зупинити запис",
|
||||
"recordVoice": "Записати голосове повідомлення",
|
||||
"moreActions": "Інші дії",
|
||||
"noMessagesInFilter": "У цьому фільтрі немає повідомлень",
|
||||
"noMatchesInFilter": "У цьому фільтрі немає збігів",
|
||||
"syncFailed": "Помилка синхронізації: {error}",
|
||||
"invalidLink": "Недійсне посилання",
|
||||
"cannotOpenLink": "Не вдається відкрити посилання",
|
||||
"failedToOpenLink": "Не вдалося відкрити посилання",
|
||||
"failedToResendMessage": "Не вдалося повторно надіслати повідомлення",
|
||||
"retryFailed": "Повторна спроба не вдалася: {error}",
|
||||
"deleteDrawingAndMessage": "Видалити рисунок і повідомлення",
|
||||
"lastEchoRelay": "Останнє відлуння: ретранслятор",
|
||||
"lastEchoPath": "Останнє відлуння: шлях",
|
||||
"lastEchoBytesReport": "Останнє відлуння: звіт про байти",
|
||||
"noGpsCoordinatesAvailable": "Координати GPS недоступні",
|
||||
"notASarMarker": "Це не маркер SAR",
|
||||
"failedToSaveTemplate": "Не вдалося зберегти шаблон: {error}",
|
||||
"drawingNotFound": "Рисунок не знайдено",
|
||||
"unknownDrawingType": "Невідомий тип рисунка",
|
||||
"customMapMarker": "Власний маркер карти",
|
||||
"customMapPointLabel": "Точка: {point}",
|
||||
"mapIdLabel": "ID карти: {id}",
|
||||
"cannotFetchVoice": "Не вдається отримати голосове повідомлення",
|
||||
"senderContactUnknown": "Контакт відправника невідомий. Спершу синхронізуйте контакти.",
|
||||
"senderRouteUnknown": "Маршрут відправника невідомий. Спершу синхронізуйте контакти/шлях.",
|
||||
"messageTooFar": "Повідомлення задалеко ({hops} хопів, макс. {maxHops}).",
|
||||
"senderRouteNoPathResponse": "Маршрут відправника не відповів на перевірку шляху. Синхронізуйте контакти/шлях і спробуйте ще раз.",
|
||||
"senderRouteNoRawResponse": "Маршрут відправника не відповів на raw-транспортному шляху.",
|
||||
"voiceFetchOverHops": "Отримання голосу через {hops} хопів може зайняти час.",
|
||||
"voiceReceiveCanceled": "Приймання голосового повідомлення скасовано",
|
||||
"fetchingMissingVoiceFragments": "Отримання відсутніх фрагментів голосу",
|
||||
"receivingVoice": "Приймання голосу",
|
||||
"cannotFetchImage": "Не вдається отримати зображення",
|
||||
"imageFetchOverHops": "Отримання зображення через {hops} хопів може зайняти час.",
|
||||
"imageAlreadyBeingReceived": "Зображення вже приймається",
|
||||
"loadImage": "Завантажити зображення",
|
||||
"imageFetchFailedToSendRequest": "Не вдалося надіслати запит на зображення",
|
||||
"imageUnavailable": "Зображення зараз недоступне",
|
||||
"imageFetchTimedOut": "Час очікування зображення минув",
|
||||
"imageReceiveCanceled": "Приймання зображення скасовано",
|
||||
"closeImagePreview": "Закрити перегляд зображення",
|
||||
"recordingReleaseToSend": "Запис... відпустіть, щоб надіслати",
|
||||
"sendingVoice": "Надсилання голосу...",
|
||||
"sendLongPressToRecordVoice": "Надіслати (утримуйте для запису голосу)",
|
||||
"discardRecording": "Відхилити запис",
|
||||
"hopCount": "{count, plural, one{{count} хоп} few{{count} хопи} many{{count} хопів} other{{count} хопа}}",
|
||||
"channelsSectionDescription": "Широкомовні канали для mesh-трафіку поблизу",
|
||||
"roomsSectionDescription": "Спільні простори для постійної координації команди",
|
||||
"contactsSectionDescription": "Люди та пристрої в прямій досяжності",
|
||||
"noRecentChatters": "Немає нещодавніх співрозмовників",
|
||||
"public": "Публічний",
|
||||
"failedToSendTicTacToeMove": "Не вдалося надіслати хід у хрестики-нулики",
|
||||
"youWon": "Ви перемогли",
|
||||
"opponentWon": "Переміг суперник",
|
||||
"gameDraw": "Нічия",
|
||||
"yourTurn": "Ваш хід",
|
||||
"opponentTurn": "Хід суперника",
|
||||
"pleaseEnterValidCoordinates": "Введіть коректні координати",
|
||||
"locationNotAvailable": "Місцезнаходження недоступне",
|
||||
"customCaveMapPoint": "Власна точка карти печери",
|
||||
"mapPoint": "Точка карти",
|
||||
"fetchingMissingImageFragments": "Отримання відсутніх фрагментів…",
|
||||
"loadingImage": "Завантаження…",
|
||||
"receivingImage": "Приймання…",
|
||||
"tapToLoad": "Торкніться, щоб завантажити",
|
||||
"connectDevice": "Підключити пристрій",
|
||||
"chooseTransportSubtitle": "Виберіть транспорт: Bluetooth, WiFi або послідовний порт",
|
||||
"ble": "BLE",
|
||||
"network": "Мережа",
|
||||
"serial": "Послідовний порт",
|
||||
"scan": "Сканувати",
|
||||
"pressScanToSearchForDevices": "Натисніть «Сканувати», щоб знайти пристрої поблизу",
|
||||
"failedToConnectToDevice": "Не вдалося підключитися до {name}",
|
||||
"unknownDevice": "Невідомий пристрій",
|
||||
"showingCachedResultsTapRefresh": "Показано кешовані результати. Натисніть «Оновити», щоб пересканувати.",
|
||||
"scanningLocalNetworkOnPort": "Сканування локальної мережі на наявність WiFi-пристроїв MeshCore на порту {port}",
|
||||
"cancelScanAndAddServer": "Скасувати сканування та додати сервер",
|
||||
"addServer": "Додати сервер",
|
||||
"scanningProgressIps": "Сканування... {scanned}/{total} IP-адрес",
|
||||
"cancelAndEnterManually": "Скасувати та ввести вручну",
|
||||
"noRecentOrDiscoveredServers": "Поки немає нещодавніх або виявлених серверів",
|
||||
"recentlyUsed": "Нещодавно використані",
|
||||
"connecting": "Підключення...",
|
||||
"discoveredOnThisNetwork": "Виявлені в цій мережі",
|
||||
"serverNoLongerAvailable": "Сервер {host}:{port} більше недоступний. Виконайте сканування ще раз, щоб знайти активні сервери.",
|
||||
"failedToConnectToHost": "Не вдалося підключитися до {host}:{port}",
|
||||
"enterValidIpAddress": "Введіть коректну IP-адресу",
|
||||
"enterValidTcpPort": "Введіть коректний TCP-порт",
|
||||
"ipAddress": "IP-адреса",
|
||||
"tcpPort": "TCP-порт",
|
||||
"customServerPort": "Власний порт сервера",
|
||||
"chat": "Чат",
|
||||
"restoringPreviousLink": "Відновлення попереднього підключення",
|
||||
"noDeviceConnected": "Немає підключеного пристрою",
|
||||
"sendAdvert": "Надіслати мій контакт",
|
||||
"advertMode": "Надіслати мій контакт",
|
||||
"advertModeSubtitle": "Виберіть, як далеко мають поширитися ваші контактні дані.",
|
||||
"floodAdvertSent": "Контакт надіслано по всій mesh-мережі",
|
||||
"directAdvertSent": "Контакт надіслано пристроям поблизу"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user