mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-08-11 18:26:27 +10:00
rebuild translations
This commit is contained in:
+223
-1
@@ -2605,5 +2605,227 @@
|
||||
"pathMap_noLocation": "Без посочено местоположение",
|
||||
"pathMap_followPacket": "Проследи пакета",
|
||||
"pathMap_unfollowPacket": "Спри проследяването на пакета",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Региони",
|
||||
"settings_regionSettingsSubtitle": "Управляне на хранилищни региони",
|
||||
"settings_regionManagement_screenTitle": "Регионално управление",
|
||||
"settings_regionNameHint": "Възразна название на региона",
|
||||
"settings_regionAddRegion": "Добавете регион",
|
||||
"settings_regionFetchRegions": "Извън рептерите от региони",
|
||||
"settings_regionFetchRegionsFail": "Не бъде открити никако региони",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Тата регион е уже добавена",
|
||||
"settings_regionName": "Регионноименоване",
|
||||
"settings_regionDeleted": "Регион отстранен",
|
||||
"settings_deleteRegion": "Удаляне на регион",
|
||||
"settings_deleteRegionConfirm": "Състрясна: отпиште \"{region}\" от списка региони?",
|
||||
"settings_infoHardware": "Оборудование",
|
||||
"settings_infoFirmware": "Програмно-оборонни системни программи (фirmware)",
|
||||
"repeater_pathHashModeOption0": "0 - 1 байт",
|
||||
"repeater_pathHashModeOption1": "1 - 2 байта",
|
||||
"repeater_pathHashModeOption2": "2 - 3 байта",
|
||||
"repeater_pathHashModeOption3": "3 - 4 байта",
|
||||
"appSettings_batteryLipoHv": "LiPo ВЗГ (3,0-4,35 В)",
|
||||
"channels_regionSetTo": "Регион: {region}",
|
||||
"channels_regionNotSet": "Регион: ние",
|
||||
"channels_regionSelect_Title": "Выберете регион",
|
||||
"channels_clearRegion": "Чиста зона",
|
||||
"chat_sendImage": "Изпрати изображение",
|
||||
"chat_imagePickFailed": "Не мог да откривам та изображин",
|
||||
"chat_receivedGif": "Получил GIF",
|
||||
"repeater_keySettings": "Изменяне на идентичности ключа",
|
||||
"repeater_keySettingsSubtitle": "Замени ключовият пар от публични/частни",
|
||||
"repeater_prvKey": "Частни ключ",
|
||||
"repeater_prvKeyHelper": "Нова приватна ключ на повторчето, 128-символовна шестнадатерична строка.",
|
||||
"repeater_generatePrvKey": "Генериране на случайна ключи",
|
||||
"repeater_stopGeneratingPrvKey": "Прервана поискна на ключова парта",
|
||||
"repeater_pubKey": "Публична ключ",
|
||||
"repeater_pubKeyHelper": "Та е публичната ключ, която се свързува с генериранта приватна ключ. Трябва да не настройте тоа напрямо.",
|
||||
"repeater_pubKeyPrefix": "Желата префикс",
|
||||
"repeater_pubKeyPrefixHelper": "Наискате публична ключ, който почева с този шестнадатницил. Ожидавани проби: {tries}.",
|
||||
"imageMessages_enableTitle": "Абilitiraм изображените сообщения",
|
||||
"imageMessages_enableSubtitle": "Изправате изображения чрез сетката. Треба е одноразовна загрузка модел на изображение.",
|
||||
"imageMessages_modelSectionTitle": "Изображени модель",
|
||||
"imageMessages_downloadModel": "Скачане",
|
||||
"imageMessages_cancelDownload": "Отмена",
|
||||
"imageMessages_removeModel": "Удалете модель",
|
||||
"imageMessages_modelReady": "Готов",
|
||||
"imageMessages_modelNotPublished": "Еще не опубликовано — тази версия не може да скане.",
|
||||
"imageMessages_downloadFailed": "Модел за изображение не може да бъде скачан.",
|
||||
"imageMessages_autoProcessTitle": "Автоматически обрабатвате изображения",
|
||||
"imageMessages_autoProcessSubtitle": "Катализиране на всята изображение сразу по пришествие. Използване на около 2 ГБ на втора пъти; откажете от реконструкцията чаке при натискане.",
|
||||
"imageSend_title": "Изпрати изображение",
|
||||
"imageSend_cropNote": "Масштабиран до 512 × 512 · соотношение сторон не съхранясе",
|
||||
"imageSend_originalSize": "Късно на използване на език:",
|
||||
"imageSend_onAirSize": "В ефир",
|
||||
"imageSend_quality": "Качество",
|
||||
"imageSend_qualityStandard": "Стандарт",
|
||||
"imageSend_qualityHigh": "Высок",
|
||||
"imageSend_packetsLabel": "Пакети",
|
||||
"imageSend_airtimeLabel": "Времето на изкъсване",
|
||||
"imageSend_sizeLabel": "Баланса",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{пакет} other{пакета}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Настройки на радио неизвестни",
|
||||
"imageSend_radioUnknownBody": "Усредете се с устройство, за да се отработа часът на изстъпане.",
|
||||
"imageSend_longSendTitle": "Долга пресилка",
|
||||
"imageSend_longSendBody": "Тази буде поддержива открит отряд на около {duration}.",
|
||||
"imageSend_floodNote": "Руйжинг на превъште: всички ретранслятори в диапазонта превратят всички пакети, тъйа каналят оставря дълше, от този час.",
|
||||
"imageSend_parityTitle": "Возобновителен пакет",
|
||||
"imageSend_paritySubtitle": "Едно дополително пакет. Групни извещания не принимаются, след това разбирателят едно пакетто, какщо е пропущен един пакет.",
|
||||
"imageSend_send": "Отправляй",
|
||||
"imageSend_cancel": "Отмена",
|
||||
"imageSend_encodeFailed": "Тази изображение не може да бъде кодирано.",
|
||||
"imageSend_codecDownloading": "Модел на изображение еще разгрузира.",
|
||||
"imageSend_codecUnavailable": "Изглед отправа не е доступен на този устройство.",
|
||||
"imageSend_codecDisabled": "Изображенията на извещенията е отключена в настройките.",
|
||||
"imageSend_deviceUnsupported": "Та радиота не може да пресылава изображени пакети. Подключите устройство, който работи с компанионски прошивка 13 или новия.",
|
||||
"imageSend_directMessagesUnsupported": "Изображенията се превозводя се как групова информация, следато да се отправят единствено на канал — не в лична вестка.",
|
||||
"imageSend_tooLarge": "Таата изображение е кодирано в по-числа пакети, отгоре както формат на сетта разрешава.",
|
||||
"imageSend_sentConfirmation": "Изображението е изпратено като {count} {count, plural, =1{пакет} other{пакета}}.",
|
||||
"imageSend_sendFailed": "Изображение не може да бъде отправено: {error}",
|
||||
"imageSend_sendingProgress": "Отправка наизображение — пакет {sent} от {total}",
|
||||
"receivedImage_senderPrefix": "Узъдето {prefix}",
|
||||
"receivedImage_incoming": "{received} от {total} пакета",
|
||||
"receivedImage_queued": "Ожидането за декодиране",
|
||||
"receivedImage_tapToDecode": "Натискнете за декодиране",
|
||||
"receivedImage_decoding": "Повторно… за приблизително 1 секунда",
|
||||
"receivedImage_incomplete": "Изображение неполно — {received} от {total} пакети отправили",
|
||||
"receivedImage_corrupt": "Изображение не може да бъде воссоздано",
|
||||
"receivedImage_decoderMissing": "Получена изображение — разгадка на изображение е вреjan",
|
||||
"receivedImage_evicted": "Изображение не е хранитено",
|
||||
"receivedImage_retry": "Повтори",
|
||||
"receivedImage_decodeAgain": "Правилейте заново",
|
||||
"receivedImage_openSettings": "Настройте",
|
||||
"receivedImage_tapToProcess": "Натискнете за обработка",
|
||||
"receivedImage_awaiting": "{bytes} байта · {packets} {packets, plural, =1{пакет} other{пакета}}",
|
||||
"imageSend_secondsValue": "{seconds} секунди",
|
||||
"imageSend_minutesSecondsValue": "{minutes} мин {seconds} сек"
|
||||
}
|
||||
|
||||
+195
-1
@@ -2767,5 +2767,199 @@
|
||||
"pathMap_noLocation": "Keine Standortdaten",
|
||||
"pathMap_followPacket": "Ansicht auf Paket fixieren",
|
||||
"pathMap_unfollowPacket": "Fixierung aufheben",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionFetchRegions": "Regionen von Wiederholern abrufen",
|
||||
"settings_regionFetchRegionsFail": "Es wurden keine Regionen gefunden.",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Diese Region wurde bereits hinzugefügt",
|
||||
"settings_infoHardware": "Hardware",
|
||||
"settings_infoFirmware": "Firmware",
|
||||
"repeater_pathHashModeOption0": "0 - 1 Byte",
|
||||
"repeater_pathHashModeOption1": "1 - 2 Bytes",
|
||||
"repeater_pathHashModeOption2": "2 - 3 Bytes",
|
||||
"repeater_pathHashModeOption3": "3 - 4 Bytes",
|
||||
"appSettings_batteryLipoHv": "LiPo HV (3,0–4,35 V)",
|
||||
"chat_sendImage": "Bild senden",
|
||||
"chat_imagePickFailed": "Konnte dieses Bild nicht öffnen.",
|
||||
"chat_receivedGif": "Erhalten eines GIF",
|
||||
"repeater_keySettings": "Identitätsschlüssel ändern",
|
||||
"repeater_keySettingsSubtitle": "Ändern Sie das öffentliche/private Schlüsselpaar",
|
||||
"repeater_prvKey": "Privatschlüssel",
|
||||
"repeater_prvKeyHelper": "Ein neuer privater Schlüssel für den Repeater, eine 128-stellige Hexadezimalzeichenkette.",
|
||||
"repeater_generatePrvKey": "Generiere ein zufälliges Schlüsselpaar",
|
||||
"repeater_stopGeneratingPrvKey": "Suchvorgang für Schlüsselpaar unterbrechen",
|
||||
"repeater_pubKey": "Öffentlicher Schlüssel",
|
||||
"repeater_pubKeyHelper": "Dies ist der öffentliche Schlüssel, der zum generierten privaten Schlüssel gehört. Sie können dies nicht direkt festlegen.",
|
||||
"repeater_pubKeyPrefix": "Gewünschtes Präfix",
|
||||
"repeater_pubKeyPrefixHelper": "Suchen Sie einen öffentlichen Schlüssel, der mit diesen Hexadezimalziffern beginnt. Erwartete Versuche: {tries}.",
|
||||
"imageMessages_enableTitle": "Bildnachrichten aktivieren",
|
||||
"imageMessages_enableSubtitle": "Bilder über das Netzwerk senden. Einmaliges Herunterladen eines Bildmodells erforderlich.",
|
||||
"imageMessages_modelSectionTitle": "Bildmodell",
|
||||
"imageMessages_downloadModel": "Herunterladen",
|
||||
"imageMessages_cancelDownload": "Stornieren",
|
||||
"imageMessages_removeModel": "Modell entfernen",
|
||||
"imageMessages_modelReady": "Bereit",
|
||||
"imageMessages_modelNotPublished": "Noch nicht veröffentlicht – dieser Build kann es nicht herunterladen.",
|
||||
"imageMessages_downloadFailed": "Das Bildmodell konnte nicht heruntergeladen werden.",
|
||||
"imageMessages_autoProcessTitle": "Automatisch Bilder verarbeiten",
|
||||
"imageMessages_autoProcessSubtitle": "Rekonstruiere jedes Bild sofort nach dem Eintreffen. Verbraucht etwa 2 GB Arbeitsspeicher für jede zweite Wiederherstellung; deaktiviere die automatische Rekonstruktion mit einem Tippen.",
|
||||
"imageSend_title": "Bild senden",
|
||||
"imageSend_cropNote": "Für 512 × 512 skaliert · Seitenverhältnis nicht erhalten",
|
||||
"imageSend_originalSize": "Originaltext:\n\nThe quick brown fox jumps over the lazy dog.\n\nÜbersetzung:\n\nDer schnelle braune Fuchs springt über den faulen Hund.",
|
||||
"imageSend_onAirSize": "On air",
|
||||
"imageSend_quality": "Qualität",
|
||||
"imageSend_qualityStandard": "Standard",
|
||||
"imageSend_qualityHigh": "Hoch",
|
||||
"imageSend_packetsLabel": "Pakete",
|
||||
"imageSend_airtimeLabel": "Sendezeit",
|
||||
"imageSend_sizeLabel": "Nutzlast",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{Paket} other{Pakete}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Radioeinstellungen unbekannt",
|
||||
"imageSend_radioUnknownBody": "Verbinden Sie das Gerät, damit die Sendezeit berechnet werden kann.",
|
||||
"imageSend_longSendTitle": "Lange Übertragung",
|
||||
"imageSend_longSendBody": "Dies hält den Kanal für etwa {duration}.",
|
||||
"imageSend_floodNote": "Flutweiterleitung: Jeder Repeater im Bereich leitet jedes Paket weiter, wodurch der Kanal länger als dieser Zeitraum beschäftigt bleibt.",
|
||||
"imageSend_parityTitle": "Wiederherstellungspaket",
|
||||
"imageSend_paritySubtitle": "Ein zusätzliches Paket. Gruppen-Nachrichten werden nicht bestätigt, daher kann der Empfänger das Bild rekonstruieren, falls ein Paket verloren geht.",
|
||||
"imageSend_send": "Senden",
|
||||
"imageSend_cancel": "Stornieren",
|
||||
"imageSend_encodeFailed": "Dieses Bild konnte nicht kodiert werden.",
|
||||
"imageSend_codecDownloading": "Das Bildmodell wird noch heruntergeladen.",
|
||||
"imageSend_codecUnavailable": "Bildversand ist auf diesem Gerät nicht verfügbar.",
|
||||
"imageSend_codecDisabled": "Bildnachrichten sind in den Einstellungen deaktiviert.",
|
||||
"imageSend_deviceUnsupported": "Dieses Radio kann keine Bildpakete senden. Verbinden Sie ein Gerät mit der Companion-Firmware-Version 13 oder neuer.",
|
||||
"imageSend_directMessagesUnsupported": "Bilder werden als Gruppendaten übertragen, daher können sie nur an einen Kanal gesendet werden – nicht per Direktnachricht.",
|
||||
"imageSend_tooLarge": "Dieses Bild wurde in mehr Pakete kodiert, als das Mesh-Format zulässt.",
|
||||
"imageSend_sentConfirmation": "Bild gesendet als {count} {count, plural, =1{Paket} other{Pakete}}.",
|
||||
"imageSend_sendFailed": "Das Bild konnte nicht gesendet werden: {error}",
|
||||
"imageSend_sendingProgress": "Bildversand — Paket {sent} von {total}",
|
||||
"receivedImage_senderPrefix": "Kritisch: Diese Platzhalter {prefix} beibehalten.",
|
||||
"receivedImage_incoming": "{received} von {total} Paketen",
|
||||
"receivedImage_queued": "Warten auf die Entschlüsselung",
|
||||
"receivedImage_tapToDecode": "Tippen Sie, um zu entschlüsseln",
|
||||
"receivedImage_decoding": "Rekonstruktion… ca. 1 s",
|
||||
"receivedImage_incomplete": "Bild unvollständig — {received} von {total} Paketen eingetroffen",
|
||||
"receivedImage_corrupt": "Das Bild konnte nicht rekonstruiert werden.",
|
||||
"receivedImage_decoderMissing": "Bild empfangen — Bilddekodierung fehlgeschlagen",
|
||||
"receivedImage_evicted": "Bild nicht mehr gespeichert",
|
||||
"receivedImage_retry": "Versuchen Sie es erneut",
|
||||
"receivedImage_decodeAgain": "Entschlüsseln Sie es erneut",
|
||||
"receivedImage_openSettings": "Einrichten",
|
||||
"receivedImage_tapToProcess": "Klicken Sie, um fortzufahren",
|
||||
"receivedImage_awaiting": "{bytes} Bytes · {packets} {packets, plural, =1{Paket} other{Pakete}}",
|
||||
"imageSend_secondsValue": "{seconds} s",
|
||||
"imageSend_minutesSecondsValue": "{minutes} Min {seconds} Sek"
|
||||
}
|
||||
|
||||
+223
-1
@@ -2739,5 +2739,227 @@
|
||||
"pathMap_noLocation": "Sin ubicación",
|
||||
"pathMap_followPacket": "Seguir paquete",
|
||||
"pathMap_unfollowPacket": "Dejar de seguir el paquete",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Regiones",
|
||||
"settings_regionSettingsSubtitle": "Gestionar regiones almacenadas",
|
||||
"settings_regionManagement_screenTitle": "Gestión de Regiones",
|
||||
"settings_regionNameHint": "Nombre de la región",
|
||||
"settings_regionAddRegion": "Añadir región",
|
||||
"settings_regionFetchRegions": "Obtener regiones de repetidores",
|
||||
"settings_regionFetchRegionsFail": "No se encontraron regiones",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Esta región ya ha sido agregada",
|
||||
"settings_regionName": "Nombre de la Región",
|
||||
"settings_regionDeleted": "Región eliminada",
|
||||
"settings_deleteRegion": "Eliminar Región",
|
||||
"settings_deleteRegionConfirm": "¿Eliminar \"{region}\" de la lista de regiones?",
|
||||
"settings_infoHardware": "Hardware",
|
||||
"settings_infoFirmware": "Firmware",
|
||||
"repeater_pathHashModeOption0": "0 - 1 byte",
|
||||
"repeater_pathHashModeOption1": "1 - 2 bytes",
|
||||
"repeater_pathHashModeOption2": "2 - 3 bytes",
|
||||
"repeater_pathHashModeOption3": "3 - 4 bytes",
|
||||
"appSettings_batteryLipoHv": "LiPo HV (3.0-4.35V)",
|
||||
"channels_regionSetTo": "Región: {region}",
|
||||
"channels_regionNotSet": "Región: ninguna",
|
||||
"channels_regionSelect_Title": "Seleccione una región",
|
||||
"channels_clearRegion": "Zona despejada",
|
||||
"chat_sendImage": "Enviar imagen",
|
||||
"chat_imagePickFailed": "No pude abrir esa imagen",
|
||||
"chat_receivedGif": "Recibido un GIF",
|
||||
"repeater_keySettings": "Cambiar Claves de Identidad",
|
||||
"repeater_keySettingsSubtitle": "Cambiar la pareja de claves pública/privada",
|
||||
"repeater_prvKey": "Clave privada",
|
||||
"repeater_prvKeyHelper": "Una nueva clave privada para el repetidor, una cadena hexadecimal de 128 caracteres.",
|
||||
"repeater_generatePrvKey": "Genera un par de claves aleatorias",
|
||||
"repeater_stopGeneratingPrvKey": "Interrumpir la búsqueda de par de claves",
|
||||
"repeater_pubKey": "Clave pública",
|
||||
"repeater_pubKeyHelper": "Esta es la clave pública que corresponde a la clave privada generada. No se puede establecer directamente.",
|
||||
"repeater_pubKeyPrefix": "Prefijo deseado",
|
||||
"repeater_pubKeyPrefixHelper": "Encuentre una clave pública que comience con estos dígitos hexadecimales. Se esperan {tries} intentos.",
|
||||
"imageMessages_enableTitle": "Mensajes de imagen",
|
||||
"imageMessages_enableSubtitle": "Enviar imágenes a través de la malla. Requiere la descarga de un modelo de imagen único.",
|
||||
"imageMessages_modelSectionTitle": "Modelo de imagen",
|
||||
"imageMessages_downloadModel": "Descargar",
|
||||
"imageMessages_cancelDownload": "Cancelar",
|
||||
"imageMessages_removeModel": "Eliminar modelo",
|
||||
"imageMessages_modelReady": "Listo",
|
||||
"imageMessages_modelNotPublished": "Aún no publicado — esta versión no puede descargarlo.",
|
||||
"imageMessages_downloadFailed": "El modelo de imagen no pudo ser descargado.",
|
||||
"imageMessages_autoProcessTitle": "Procesar imágenes automáticamente",
|
||||
"imageMessages_autoProcessSubtitle": "Reconstruya cada imagen tan pronto como llegue. Utiliza aproximadamente 2 GB de memoria durante un segundo cada vez; desactívelo para reconstruir con un toque.",
|
||||
"imageSend_title": "Enviar imagen",
|
||||
"imageSend_cropNote": "Redimensionado a 512 × 512 · la relación de aspecto no se conservó",
|
||||
"imageSend_originalSize": "Texto original",
|
||||
"imageSend_onAirSize": "En emisión",
|
||||
"imageSend_quality": "Calidad",
|
||||
"imageSend_qualityStandard": "Estándar",
|
||||
"imageSend_qualityHigh": "Alto",
|
||||
"imageSend_packetsLabel": "Paquetes",
|
||||
"imageSend_airtimeLabel": "Tiempo en pantalla",
|
||||
"imageSend_sizeLabel": "Carga útil",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{paquete} other{paquetes}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Configuración de radio desconocida",
|
||||
"imageSend_radioUnknownBody": "Conéctese a un dispositivo para que se pueda calcular la hora de transmisión.",
|
||||
"imageSend_longSendTitle": "Larga transmisión",
|
||||
"imageSend_longSendBody": "Esto mantendrá el canal durante aproximadamente {duration}.",
|
||||
"imageSend_floodNote": "Enrutamiento de inundación: cada repetidor dentro del rango retransmite cada paquete, por lo que el canal permanece ocupado durante más tiempo que esto.",
|
||||
"imageSend_parityTitle": "Paquete de recuperación",
|
||||
"imageSend_paritySubtitle": "Un paquete adicional. Los mensajes grupales no son reconocidos, por lo que esto permite al receptor reconstruir la imagen si se pierde un solo paquete.",
|
||||
"imageSend_send": "Enviar",
|
||||
"imageSend_cancel": "Cancelar",
|
||||
"imageSend_encodeFailed": "Esta imagen no pudo ser codificada.",
|
||||
"imageSend_codecDownloading": "El modelo de imagen todavía se está descargando.",
|
||||
"imageSend_codecUnavailable": "El envío de imágenes no está disponible en este dispositivo.",
|
||||
"imageSend_codecDisabled": "Los mensajes de imagen están desactivados en la configuración.",
|
||||
"imageSend_deviceUnsupported": "Esta radio no puede enviar paquetes de imagen. Conecte un dispositivo con el firmware Companion versión 13 o superior.",
|
||||
"imageSend_directMessagesUnsupported": "Las imágenes se transmiten como datos grupales, por lo que solo se pueden enviar a un canal, no mediante mensajes directos.",
|
||||
"imageSend_tooLarge": "Esa imagen se codificó en más paquetes de los que permite el formato de malla.",
|
||||
"imageSend_sentConfirmation": "Imagen enviada como {count} {count, plural, =1{paquete} other{paquetes}}.",
|
||||
"imageSend_sendFailed": "La imagen no pudo ser enviada: {error}",
|
||||
"imageSend_sendingProgress": "Envío de imagen — paquete {sent} de {total}",
|
||||
"receivedImage_senderPrefix": "Nodo {prefix}",
|
||||
"receivedImage_incoming": "{received} de {total} paquetes",
|
||||
"receivedImage_queued": "Esperando descifrar",
|
||||
"receivedImage_tapToDecode": "Toque para decodificar",
|
||||
"receivedImage_decoding": "Reconstruyendo… aproximadamente 1 segundo",
|
||||
"receivedImage_incomplete": "Imagen incompleta — {received} de {total} paquetes llegados",
|
||||
"receivedImage_corrupt": "La imagen no pudo ser reconstruida",
|
||||
"receivedImage_decoderMissing": "Imagen recibida — la decodificación de la imagen no funciona",
|
||||
"receivedImage_evicted": "Imagen ya no almacenada",
|
||||
"receivedImage_retry": "Inténtalo de nuevo",
|
||||
"receivedImage_decodeAgain": "Decodificar de nuevo",
|
||||
"receivedImage_openSettings": "Configurar",
|
||||
"receivedImage_tapToProcess": "Toque para procesar",
|
||||
"receivedImage_awaiting": "{bytes} bytes · {packets} {packets, plural, =1{paquete} other{paquetes}}",
|
||||
"imageSend_secondsValue": "{seconds} segundos",
|
||||
"imageSend_minutesSecondsValue": "{minutes} min {seconds} s"
|
||||
}
|
||||
|
||||
+223
-1
@@ -2739,5 +2739,227 @@
|
||||
"pathMap_noLocation": "Aucune localisation",
|
||||
"pathMap_followPacket": "Verrouiller la vue sur le paquet",
|
||||
"pathMap_unfollowPacket": "Déverrouiller la vue du paquet",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Régions",
|
||||
"settings_regionSettingsSubtitle": "Gérer les régions stockées",
|
||||
"settings_regionManagement_screenTitle": "Gestion de région",
|
||||
"settings_regionNameHint": "Entrer le nom de la région",
|
||||
"settings_regionAddRegion": "Ajouter une région",
|
||||
"settings_regionFetchRegions": "Récupérer les régions à partir des répéteurs",
|
||||
"settings_regionFetchRegionsFail": "Aucune région n'a été trouvée",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Cette région a déjà été ajoutée",
|
||||
"settings_regionName": "Nom de la région",
|
||||
"settings_regionDeleted": "Région supprimée",
|
||||
"settings_deleteRegion": "Supprimer la région",
|
||||
"settings_deleteRegionConfirm": "Supprimez {region} de la liste des régions ?",
|
||||
"settings_infoHardware": "Matériel",
|
||||
"settings_infoFirmware": "Firmware",
|
||||
"repeater_pathHashModeOption0": "0 - 1 octet",
|
||||
"repeater_pathHashModeOption1": "1 à 2 octets",
|
||||
"repeater_pathHashModeOption2": "2 à 3 octets",
|
||||
"repeater_pathHashModeOption3": "3 à 4 octets",
|
||||
"appSettings_batteryLipoHv": "Tension élevée LiPo (3,0-4,35 V)",
|
||||
"channels_regionSetTo": "Région : {region}",
|
||||
"channels_regionNotSet": "Région : aucune",
|
||||
"channels_regionSelect_Title": "Choisissez une région",
|
||||
"channels_clearRegion": "Zone dégagée",
|
||||
"chat_sendImage": "Envoyer l'image",
|
||||
"chat_imagePickFailed": "Je n'ai pas pu ouvrir cette image",
|
||||
"chat_receivedGif": "Reçu un GIF",
|
||||
"repeater_keySettings": "Modifier les clés d'identité",
|
||||
"repeater_keySettingsSubtitle": "Modifier la paire de clés publique/privée",
|
||||
"repeater_prvKey": "Clé privée",
|
||||
"repeater_prvKeyHelper": "Une nouvelle clé privée pour le répéteur, une chaîne hexadécimale de 128 caractères.",
|
||||
"repeater_generatePrvKey": "Générez une paire de clés aléatoire",
|
||||
"repeater_stopGeneratingPrvKey": "Arrêter la recherche de la paire de clés",
|
||||
"repeater_pubKey": "Clé publique",
|
||||
"repeater_pubKeyHelper": "Voici la clé publique associée à la clé privée générée. Vous ne pouvez pas la définir directement.",
|
||||
"repeater_pubKeyPrefix": "Préfixe souhaité",
|
||||
"repeater_pubKeyPrefixHelper": "Trouvez une clé publique qui commence par ces chiffres hexadécimaux. Nombre de tentatives nécessaires : {tries}.",
|
||||
"imageMessages_enableTitle": "Messages avec images",
|
||||
"imageMessages_enableSubtitle": "Envoyer des images via le maillage. Nécessite un téléchargement unique du modèle d'image.",
|
||||
"imageMessages_modelSectionTitle": "Modèle d'image",
|
||||
"imageMessages_downloadModel": "Télécharger",
|
||||
"imageMessages_cancelDownload": "Annuler",
|
||||
"imageMessages_removeModel": "Supprimer le modèle",
|
||||
"imageMessages_modelReady": "Prêt",
|
||||
"imageMessages_modelNotPublished": "Non publié — cette version ne peut pas le télécharger.",
|
||||
"imageMessages_downloadFailed": "Le modèle d'image ne pouvait pas être téléchargé.",
|
||||
"imageMessages_autoProcessTitle": "Traiter automatiquement les images",
|
||||
"imageMessages_autoProcessSubtitle": "Reconstruisez chaque image dès son arrivée. Cela utilise environ 2 Go de mémoire pendant une seconde à chaque fois ; désactivez la reconstruction au toucher pour éviter cela.",
|
||||
"imageSend_title": "Envoyer l'image",
|
||||
"imageSend_cropNote": "Redimensionné à 512 × 512 · le rapport d’aspect n’a pas été conservé",
|
||||
"imageSend_originalSize": "Texte original\n\nVeuillez traduire le texte suivant en français :",
|
||||
"imageSend_onAirSize": "En direct",
|
||||
"imageSend_quality": "Qualité",
|
||||
"imageSend_qualityStandard": "Standard",
|
||||
"imageSend_qualityHigh": "Haut",
|
||||
"imageSend_packetsLabel": "Paquets",
|
||||
"imageSend_airtimeLabel": "Durée de diffusion",
|
||||
"imageSend_sizeLabel": "Charge utile",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{paquet} other{paquets}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Réglages de la radio inconnus",
|
||||
"imageSend_radioUnknownBody": "Connectez-vous à un appareil afin que l'heure de diffusion puisse être calculée.",
|
||||
"imageSend_longSendTitle": "Longue transmission",
|
||||
"imageSend_longSendBody": "Cela maintiendra la chaîne pendant environ {duration}.",
|
||||
"imageSend_floodNote": "Routage des inondations : chaque répéteur dans la zone retransmet chaque paquet, de sorte que le canal reste occupé plus longtemps que cela.",
|
||||
"imageSend_parityTitle": "Paquet de récupération",
|
||||
"imageSend_paritySubtitle": "Un paquet supplémentaire. Les messages de groupe ne sont pas reconnus, ce qui permet au destinataire de reconstruire l'image si un seul paquet est perdu.",
|
||||
"imageSend_send": "Envoyer",
|
||||
"imageSend_cancel": "Annuler",
|
||||
"imageSend_encodeFailed": "Cette image ne peut pas être encodée.",
|
||||
"imageSend_codecDownloading": "Le modèle d'image est toujours en téléchargement.",
|
||||
"imageSend_codecUnavailable": "L'envoi d'images n'est pas disponible sur cet appareil.",
|
||||
"imageSend_codecDisabled": "Les messages d'images sont désactivés dans les paramètres.",
|
||||
"imageSend_deviceUnsupported": "Cette radio ne peut pas envoyer de paquets d'images. Connectez un appareil exécutant le firmware compagnon version 13 ou ultérieure.",
|
||||
"imageSend_directMessagesUnsupported": "Les images se déplacent en tant que données de groupe, elles ne peuvent donc être envoyées que sur un canal — et non par message direct.",
|
||||
"imageSend_tooLarge": "Cette image a été encodée en plus de paquets que le format de maillage ne permet.",
|
||||
"imageSend_sentConfirmation": "Image envoyée en {count} {count, plural, =1{paquet} other{paquets}}.",
|
||||
"imageSend_sendFailed": "L'image n'a pas pu être envoyée : {error}",
|
||||
"imageSend_sendingProgress": "Envoi de l'image — paquet {sent} sur {total}",
|
||||
"receivedImage_senderPrefix": "Nœud {prefix}",
|
||||
"receivedImage_incoming": "{received} sur {total} paquets",
|
||||
"receivedImage_queued": "En attendant de décoder",
|
||||
"receivedImage_tapToDecode": "Tapez pour décoder",
|
||||
"receivedImage_decoding": "Reconstitution… d’environ 1 s",
|
||||
"receivedImage_incomplete": "Image incomplète — {received} sur {total} paquets reçus",
|
||||
"receivedImage_corrupt": "L'image ne pouvait pas être reconstruite",
|
||||
"receivedImage_decoderMissing": "Image reçue — le décodage de l'image est interrompu",
|
||||
"receivedImage_evicted": "Image non stockée",
|
||||
"receivedImage_retry": "Réessayez",
|
||||
"receivedImage_decodeAgain": "Décoder à nouveau",
|
||||
"receivedImage_openSettings": "Mettre en place",
|
||||
"receivedImage_tapToProcess": "Tapez pour traiter",
|
||||
"receivedImage_awaiting": "{bytes} octets · {packets} {packets, plural, =1{paquet} other{paquets}}",
|
||||
"imageSend_secondsValue": "{seconds} s",
|
||||
"imageSend_minutesSecondsValue": "{minutes} minutes {seconds} secondes"
|
||||
}
|
||||
|
||||
+223
-1
@@ -2643,5 +2643,227 @@
|
||||
"pathMap_noLocation": "Nincs hely",
|
||||
"pathMap_followPacket": "Nézet zárolása a csomaghoz",
|
||||
"pathMap_unfollowPacket": "A nézet feloldása a csomagból",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Tájak",
|
||||
"settings_regionSettingsSubtitle": "Kincstani megjelenítette gyakorlatos területeket",
|
||||
"settings_regionManagement_screenTitle": "Regionális Kezelés",
|
||||
"settings_regionNameHint": "Felhasználja a regioni név",
|
||||
"settings_regionAddRegion": "Egyes region",
|
||||
"settings_regionFetchRegions": "Féregelmezők a repeaterekból",
|
||||
"settings_regionFetchRegionsFail": "Nem található egyéb területek",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Ez a terítet nemisértették meg.",
|
||||
"settings_regionName": "Feldúr Neve",
|
||||
"settings_regionDeleted": "Felült region",
|
||||
"settings_deleteRegion": "Felajánlatos Tér",
|
||||
"settings_deleteRegionConfirm": "Kell kiszámítsd a {region}ot a részekre?",
|
||||
"settings_infoHardware": "Hardverő",
|
||||
"settings_infoFirmware": "Firmver",
|
||||
"repeater_pathHashModeOption0": "0 - 1 byte",
|
||||
"repeater_pathHashModeOption1": "1 - 2 szavak",
|
||||
"repeater_pathHashModeOption2": "2 - 3 bajt",
|
||||
"repeater_pathHashModeOption3": "3 - 4 bajt",
|
||||
"appSettings_batteryLipoHv": "LiPo HV (3.0-4.35V)",
|
||||
"channels_regionSetTo": "Tájékoztatás: A {region} -t\n\nEz a tájékoztatás a magyar nyelvben a következően kell szóva:\n\nTájékoztatás: A {region} -t",
|
||||
"channels_regionNotSet": "Tájékoztetés: nem",
|
||||
"channels_regionSelect_Title": "Válassz egy regionot",
|
||||
"channels_clearRegion": "Kéres kör",
|
||||
"chat_sendImage": "Felhasználj az image",
|
||||
"chat_imagePickFailed": "Nem tudtam ezt a fenti fényre kapni",
|
||||
"chat_receivedGif": "GIF-ot kapott",
|
||||
"repeater_keySettings": "Képzőítsekei jelölt",
|
||||
"repeater_keySettingsSubtitle": "Közelítse a közlekedési/private képlékt",
|
||||
"repeater_prvKey": "Kis házas",
|
||||
"repeater_prvKeyHelper": "Kínai nyelvben:\n\nA repeteróhoz új képes kód, 128 karakteri hex-kód.",
|
||||
"repeater_generatePrvKey": "Egy random képléktár generáld meg",
|
||||
"repeater_stopGeneratingPrvKey": "Kéypair szavakat kérdéset kaphatás",
|
||||
"repeater_pubKey": "Kiváló kiegészítő",
|
||||
"repeater_pubKeyHelper": "Ez a kiváló kód, amely tükrözi a gyártott kiegészítő kódot. Ezet nem lehet megjelenítani direktusan.",
|
||||
"repeater_pubKeyPrefix": "Kiváló prefix",
|
||||
"repeater_pubKeyPrefixHelper": "Kiválasztsa meg a közös kódot, amely az alábbi hex-kifüggőnek előre van. Várható kiválasztások száma: {tries}.",
|
||||
"imageMessages_enableTitle": "Fenti hírüket biztosítani",
|
||||
"imageMessages_enableSubtitle": "Fényokat a hálózatban küldd el. Egyértelmű fénymodell hozzáadásra kell.",
|
||||
"imageMessages_modelSectionTitle": "Image model",
|
||||
"imageMessages_downloadModel": "Hozzáladás",
|
||||
"imageMessages_cancelDownload": "Színviselés",
|
||||
"imageMessages_removeModel": "Kisnövezdés",
|
||||
"imageMessages_modelReady": "Hozzá",
|
||||
"imageMessages_modelNotPublished": "Érkeztetve nem — ez a építési módszert nem lehet lejobbítani.",
|
||||
"imageMessages_downloadFailed": "Életmódelmát nem tudtam hozni.",
|
||||
"imageMessages_autoProcessTitle": "Automatikusan kínaltatja fénybetek",
|
||||
"imageMessages_autoProcessSubtitle": "Minden fenti image-t kiválasztsa meg, amikor érkezik. Minden más esetben 2 GB fényre kell szükséges; megoldja a rekonstruálisi a támogatásra egy klikkel.",
|
||||
"imageSend_title": "Felhasználj az image",
|
||||
"imageSend_cropNote": "512 × 512 órák számára megosztva · képszöget nem biztosítva",
|
||||
"imageSend_originalSize": "Következtetés:",
|
||||
"imageSend_onAirSize": "Erőben",
|
||||
"imageSend_quality": "Hosszú Képesség",
|
||||
"imageSend_qualityStandard": "Standard",
|
||||
"imageSend_qualityHigh": "High: Magas",
|
||||
"imageSend_packetsLabel": "Paketek",
|
||||
"imageSend_airtimeLabel": "Kiválasztás a fent",
|
||||
"imageSend_sizeLabel": "Kártya",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{csomag} other{csomag}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Radiooldalok nem tudom",
|
||||
"imageSend_radioUnknownBody": "Kizárdhoz kapcsolódd a rendszert, hogy a súly az az álló időt lehet elismerni.",
|
||||
"imageSend_longSendTitle": "Uzun hírás",
|
||||
"imageSend_longSendBody": "Ez megbízható a kanal {duration}-n.",
|
||||
"imageSend_floodNote": "Fúró irányozás: Minden repeater a fúró körüléggel megköveti mindkét paketet, ezért a kanal eltartja más a lehetséges időt.",
|
||||
"imageSend_parityTitle": "Korzolás paksa",
|
||||
"imageSend_paritySubtitle": "Egy kibőbbes kapszula. Gruppos hírselek nem érkezik, ezért az empfangó nem kell elismerni a jel, ha egy egyes kapszula kaland, hogy nem teljesen érkezz.",
|
||||
"imageSend_send": "Keresés",
|
||||
"imageSend_cancel": "Színviselés",
|
||||
"imageSend_encodeFailed": "Ez a fényet nem tudtam kódolni.",
|
||||
"imageSend_codecDownloading": "Érdekesz az image model megstálása még van.",
|
||||
"imageSend_codecUnavailable": "Felhasználó észintje nem kapható ezen a rendszert.",
|
||||
"imageSend_codecDisabled": "Image hírletek belsőoldal elkalmáznak a konfigurációban.",
|
||||
"imageSend_deviceUnsupported": "Ez a radio nem tudja verseni színekfájltakat. Habilítd a kompatibilis firmware 13 vagy újabb versionot kapcsált eszközet.",
|
||||
"imageSend_directMessagesUnsupported": "Fényiak gyakorolják grupos adatban, ezért nem lehetek versenek egy hozzáfűzésre, csak egy kanalra.",
|
||||
"imageSend_tooLarge": "A figyelmetes fentet nem kínálhat a körközlettel ismétálás elterjesztésére.",
|
||||
"imageSend_sentConfirmation": "Kép elküldve {count} {count, plural, =1{csomagként} other{csomagként}}.",
|
||||
"imageSend_sendFailed": "Fentami nem tűnik: {error}",
|
||||
"imageSend_sendingProgress": "Felhasználó: Lehet a következőkét kifejezetet – {sent} paket {total}",
|
||||
"receivedImage_senderPrefix": "Node {prefix}",
|
||||
"receivedImage_incoming": "Kulcsfontosságú: Kiválasztja meg a {received} {total} paketot",
|
||||
"receivedImage_queued": "Kódoláshoz küldőzve",
|
||||
"receivedImage_tapToDecode": "Kódoláshoz klikd el",
|
||||
"receivedImage_decoding": "Korlátozás… egy 1 perc után",
|
||||
"receivedImage_incomplete": "Kérem, az {received} {total} paketet kapottak.",
|
||||
"receivedImage_corrupt": "Fény nem tudtam megrealítani",
|
||||
"receivedImage_decoderMissing": "Kezd az image — image decodálás nem kapható",
|
||||
"receivedImage_evicted": "Fény nem tartalmazva",
|
||||
"receivedImage_retry": "Kérem kell próbálni",
|
||||
"receivedImage_decodeAgain": "Kodoldó",
|
||||
"receivedImage_openSettings": "Jelzése",
|
||||
"receivedImage_tapToProcess": "Klikd a feljelenítést",
|
||||
"receivedImage_awaiting": "{bytes} bájt · {packets} {packets, plural, =1{csomag} other{csomag}}",
|
||||
"imageSend_secondsValue": "{seconds} sekünd\n\n(Note: The placeholder {seconds} is kept unchanged as requested.)",
|
||||
"imageSend_minutesSecondsValue": "{minutes} per {seconds} sekünd\n\n(Note: The original text appears to be a placeholder format rather than a complete sentence. The translation reflects the literal structure while preserving the placeholders as requested.)"
|
||||
}
|
||||
|
||||
+223
-48
@@ -1736,7 +1736,6 @@
|
||||
"settings_locationGPSEnableSubtitle": "Abilita l'aggiornamento automatico della posizione tramite GPS.",
|
||||
"settings_locationIntervalSec": "Intervallo GPS (Secondi)",
|
||||
"settings_locationIntervalInvalid": "L'intervallo deve essere di almeno 60 secondi e inferiore a 86400 secondi.",
|
||||
"contacts_manageRoom": "Gestisci server stanza",
|
||||
"room_management": "Gestione del Server di Camera",
|
||||
"@community_joinConfirmation": {
|
||||
"placeholders": {
|
||||
@@ -1946,7 +1945,6 @@
|
||||
}
|
||||
},
|
||||
"notification_receivedNewMessage": "Nuovo messaggio ricevuto",
|
||||
"notification_receivedNewMessage": "Nuovo messaggio ricevuto",
|
||||
"settings_gpxExportRepeaters": "Esporta ripetitori / server di stanza in GPX",
|
||||
"settings_gpxExportContacts": "Esporta compagni in GPX",
|
||||
"settings_gpxExportSuccess": "Esportazione del file GPX completata con successo.",
|
||||
@@ -2121,52 +2119,7 @@
|
||||
"listFilter_addToFavorites": "Aggiungi ai preferiti",
|
||||
"listFilter_removeFromFavorites": "Rimuovi dai preferiti",
|
||||
"listFilter_favorites": "Preferiti",
|
||||
"@contacts_searchFavorites": {
|
||||
"placeholders": {
|
||||
"number": {
|
||||
"type": "int"
|
||||
},
|
||||
"str": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@contacts_searchUsers": {
|
||||
"placeholders": {
|
||||
"number": {
|
||||
"type": "int"
|
||||
},
|
||||
"str": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@contacts_searchRepeaters": {
|
||||
"placeholders": {
|
||||
"number": {
|
||||
"type": "int"
|
||||
},
|
||||
"str": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@contacts_searchRoomServers": {
|
||||
"placeholders": {
|
||||
"number": {
|
||||
"type": "int"
|
||||
},
|
||||
"str": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"contacts_searchUsers": "Cerca {number}{str} utenti...",
|
||||
"contacts_searchContactsNoNumber": "Cerca contatti...",
|
||||
"contacts_searchFavorites": "Cerca {number}{str} preferiti...",
|
||||
"contacts_unread": "Non letti",
|
||||
"contacts_searchRepeaters": "Cerca {number}{str} ripetitori...",
|
||||
"contacts_searchRoomServers": "Cerca {number}{str} server stanza...",
|
||||
"contactsSettings_title": "Impostazioni dei contatti",
|
||||
"settings_contactSettings": "Impostazioni di contatto",
|
||||
"contactsSettings_otherTitle": "Altre impostazioni relative ai contatti",
|
||||
@@ -2786,5 +2739,227 @@
|
||||
"pathMap_noLocation": "Nessuna posizione",
|
||||
"pathMap_followPacket": "Blocca la vista sul pacchetto",
|
||||
"pathMap_unfollowPacket": "Sblocca la vista dal pacchetto",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Regioni",
|
||||
"settings_regionSettingsSubtitle": "Gestione delle regioni salvate",
|
||||
"settings_regionManagement_screenTitle": "Gestione Regionale",
|
||||
"settings_regionNameHint": "Inserisci il nome della regione",
|
||||
"settings_regionAddRegion": "Aggiungi regione",
|
||||
"settings_regionFetchRegions": "Recupera le regioni dai ripetitori",
|
||||
"settings_regionFetchRegionsFail": "Non sono state trovate regioni",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Questa regione è già stata aggiunta",
|
||||
"settings_regionName": "Nome della Regione",
|
||||
"settings_regionDeleted": "Regione cancellata",
|
||||
"settings_deleteRegion": "Elimina Regione",
|
||||
"settings_deleteRegionConfirm": "Rimuovere \"{region}\" dalla lista delle regioni?",
|
||||
"settings_infoHardware": "Hardware",
|
||||
"settings_infoFirmware": "Firmware",
|
||||
"repeater_pathHashModeOption0": "0 - 1 byte",
|
||||
"repeater_pathHashModeOption1": "1 - 2 byte",
|
||||
"repeater_pathHashModeOption2": "2 - 3 byte",
|
||||
"repeater_pathHashModeOption3": "3 - 4 byte",
|
||||
"appSettings_batteryLipoHv": "LiPo HV (3,0-4,35 V)",
|
||||
"channels_regionSetTo": "Regione: {region}",
|
||||
"channels_regionNotSet": "Regione: nessuna",
|
||||
"channels_regionSelect_Title": "Scegli una regione",
|
||||
"channels_clearRegion": "Zona chiara",
|
||||
"chat_sendImage": "Invia immagine",
|
||||
"chat_imagePickFailed": "Non sono riuscito ad aprire quell'immagine",
|
||||
"chat_receivedGif": "Ricevuto un GIF",
|
||||
"repeater_keySettings": "Cambia le Chiavi di Identità",
|
||||
"repeater_keySettingsSubtitle": "Cambia la coppia di chiavi pubblica/privata",
|
||||
"repeater_prvKey": "Chiave privata",
|
||||
"repeater_prvKeyHelper": "Una nuova chiave privata per il ripetitore, una stringa esadecimale di 128 caratteri.",
|
||||
"repeater_generatePrvKey": "Genera una coppia di chiavi casuale",
|
||||
"repeater_stopGeneratingPrvKey": "Interrompi la ricerca della coppia di chiavi",
|
||||
"repeater_pubKey": "Chiave pubblica",
|
||||
"repeater_pubKeyHelper": "Questa è la chiave pubblica che accompagna la chiave privata generata. Non è possibile impostarla direttamente.",
|
||||
"repeater_pubKeyPrefix": "Prefisso desiderato",
|
||||
"repeater_pubKeyPrefixHelper": "Trova una chiave pubblica che inizia con queste cifre esadecimali. Tentativi necessari previsti: {tries}.",
|
||||
"imageMessages_enableTitle": "Messaggi con immagini",
|
||||
"imageMessages_enableSubtitle": "Invia le immagini tramite la mesh. È necessario scaricare il modello dell'immagine una tantum.",
|
||||
"imageMessages_modelSectionTitle": "Modello di immagine",
|
||||
"imageMessages_downloadModel": "Scarica",
|
||||
"imageMessages_cancelDownload": "Annullare",
|
||||
"imageMessages_removeModel": "Rimuovi il modello",
|
||||
"imageMessages_modelReady": "Pronto",
|
||||
"imageMessages_modelNotPublished": "Non pubblicato ancora — questa versione non può scaricarlo.",
|
||||
"imageMessages_downloadFailed": "Il modello di immagine non può essere scaricato.",
|
||||
"imageMessages_autoProcessTitle": "Elabora automaticamente le immagini",
|
||||
"imageMessages_autoProcessSubtitle": "Ricostruisci ogni immagine non appena arriva. Utilizza circa 2 GB di memoria per un secondo ogni volta; disattiva la ricostruzione con un semplice tocco.",
|
||||
"imageSend_title": "Invia immagine",
|
||||
"imageSend_cropNote": "Ridimensionato a 512 × 512 · rapporto d'aspetto non conservato",
|
||||
"imageSend_originalSize": "Traduzione:\n\nOriginal text:\n\nPlease translate the following English text into Italian:\n\nOriginal text:\n\n(No original English text provided)",
|
||||
"imageSend_onAirSize": "In onda",
|
||||
"imageSend_quality": "Qualità",
|
||||
"imageSend_qualityStandard": "Standard",
|
||||
"imageSend_qualityHigh": "Alto",
|
||||
"imageSend_packetsLabel": "Pacchetti",
|
||||
"imageSend_airtimeLabel": "Tempo in onda",
|
||||
"imageSend_sizeLabel": "Carico utile",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{pacchetto} other{pacchetti}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Impostazioni radio sconosciute",
|
||||
"imageSend_radioUnknownBody": "Collegati a un dispositivo in modo che si possa calcolare l'orario di trasmissione.",
|
||||
"imageSend_longSendTitle": "Lunga trasmissione",
|
||||
"imageSend_longSendBody": "Questo manterrà il canale per circa {duration}.",
|
||||
"imageSend_floodNote": "Instradamento delle inondazioni: ogni ripetitore nel raggio ritrasmette ogni pacchetto, quindi il canale rimane occupato più a lungo.",
|
||||
"imageSend_parityTitle": "Pacchetto di recupero",
|
||||
"imageSend_paritySubtitle": "Un pacchetto aggiuntivo. I messaggi di gruppo non vengono riconosciuti, quindi questo permette al destinatario di ricostruire l'immagine se un singolo pacchetto viene perso.",
|
||||
"imageSend_send": "Invia",
|
||||
"imageSend_cancel": "Annullare",
|
||||
"imageSend_encodeFailed": "Questa immagine non può essere codificata.",
|
||||
"imageSend_codecDownloading": "Il modello di immagine sta ancora scaricando.",
|
||||
"imageSend_codecUnavailable": "L'invio di immagini non è disponibile su questo dispositivo.",
|
||||
"imageSend_codecDisabled": "I messaggi immagine sono disattivati nelle impostazioni.",
|
||||
"imageSend_deviceUnsupported": "Questa radio non può inviare pacchetti di immagini. Collegare un dispositivo con firmware companion versione 13 o successiva.",
|
||||
"imageSend_directMessagesUnsupported": "Le immagini viaggiano come dati di gruppo, quindi possono essere inviate solo a un canale — non tramite messaggio diretto.",
|
||||
"imageSend_tooLarge": "Quella immagine è stata codificata in un numero di pacchetti superiore a quello consentito dal formato mesh.",
|
||||
"imageSend_sentConfirmation": "Immagine inviata come {count} {count, plural, =1{pacchetto} other{pacchetti}}.",
|
||||
"imageSend_sendFailed": "L'immagine non può essere inviata: {error}",
|
||||
"imageSend_sendingProgress": "Invio immagine — pacchetto {sent} di {total}",
|
||||
"receivedImage_senderPrefix": "Nodo {prefix}",
|
||||
"receivedImage_incoming": "{received} di {total} pacchetti",
|
||||
"receivedImage_queued": "In attesa di decodificare",
|
||||
"receivedImage_tapToDecode": "Tocca per decodificare",
|
||||
"receivedImage_decoding": "Ricostruire… circa 1 s",
|
||||
"receivedImage_incomplete": "Immagine incompleta — {received} su {total} pacchetti ricevuti",
|
||||
"receivedImage_corrupt": "L'immagine non potrebbe essere ricostruita",
|
||||
"receivedImage_decoderMissing": "Immagine ricevuta — decodifica dell'immagine non funzionante",
|
||||
"receivedImage_evicted": "Immagine non più memorizzata",
|
||||
"receivedImage_retry": "Prova ancora",
|
||||
"receivedImage_decodeAgain": "Decodifica di nuovo",
|
||||
"receivedImage_openSettings": "Imposta",
|
||||
"receivedImage_tapToProcess": "Premi per elaborare",
|
||||
"receivedImage_awaiting": "{bytes} byte · {packets} {packets, plural, =1{pacchetto} other{pacchetti}}",
|
||||
"imageSend_secondsValue": "{seconds} secondi",
|
||||
"imageSend_minutesSecondsValue": "{minutes} min {seconds} s"
|
||||
}
|
||||
|
||||
+228
-12
@@ -28,11 +28,11 @@
|
||||
"common_enable": "有効にする",
|
||||
"common_disable": "無効にする",
|
||||
"common_undo": "元に戻す",
|
||||
"messageStatus_sent": "送信済み",
|
||||
"messageStatus_delivered": "配信済み",
|
||||
"messageStatus_pending": "送信中",
|
||||
"messageStatus_failed": "送信に失敗",
|
||||
"messageStatus_repeated": "重複受信",
|
||||
"messageStatus_sent": "送信",
|
||||
"messageStatus_delivered": "配達",
|
||||
"messageStatus_pending": "送信",
|
||||
"messageStatus_failed": "送信できませんでした",
|
||||
"messageStatus_repeated": "何度も聞いた",
|
||||
"common_autoRefresh": "自動更新",
|
||||
"common_interval": "間隔",
|
||||
"common_reboot": "再起動",
|
||||
@@ -2597,13 +2597,7 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"messageStatus_delivered": "配達",
|
||||
"common_undo": "元に戻す",
|
||||
"messageStatus_pending": "送信",
|
||||
"messageStatus_sent": "送信",
|
||||
"messageStatus_failed": "送信できませんでした",
|
||||
"contacts_moreOptions": "さらに多くの選択肢",
|
||||
"messageStatus_repeated": "何度も聞いた",
|
||||
"contacts_searchOpen": "連絡先を検索する",
|
||||
"contacts_searchClose": "検索を終了",
|
||||
"routing_modeFlood": "フラッド",
|
||||
@@ -2745,5 +2739,227 @@
|
||||
"pathMap_noLocation": "位置情報なし",
|
||||
"pathMap_followPacket": "パケットを追跡",
|
||||
"pathMap_unfollowPacket": "パケットの追跡を解除",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "地域",
|
||||
"settings_regionSettingsSubtitle": "保存された領域の管理",
|
||||
"settings_regionManagement_screenTitle": "地域管理",
|
||||
"settings_regionNameHint": "地域名を入力してください",
|
||||
"settings_regionAddRegion": "地域を追加",
|
||||
"settings_regionFetchRegions": "リピーターからのフェッチ地域",
|
||||
"settings_regionFetchRegionsFail": "地域は見つかりませんでした",
|
||||
"settings_regionFetchRegionsAlreadyExists": "この地域はすでに追加されています。",
|
||||
"settings_regionName": "地域名",
|
||||
"settings_regionDeleted": "地域が削除されました",
|
||||
"settings_deleteRegion": "地域を削除",
|
||||
"settings_deleteRegionConfirm": "{region} を地域リストから削除しますか?",
|
||||
"settings_infoHardware": "ハードウェア",
|
||||
"settings_infoFirmware": "ファームウェア",
|
||||
"repeater_pathHashModeOption0": "0 - 1バイト",
|
||||
"repeater_pathHashModeOption1": "1〜2バイト",
|
||||
"repeater_pathHashModeOption2": "2〜3バイト",
|
||||
"repeater_pathHashModeOption3": "3〜4バイト",
|
||||
"appSettings_batteryLipoHv": "リポバッテリー HV(3.0〜4.35V)",
|
||||
"channels_regionSetTo": "地域:{region}",
|
||||
"channels_regionNotSet": "地域:なし",
|
||||
"channels_regionSelect_Title": "地域を選択する",
|
||||
"channels_clearRegion": "クリアな地域",
|
||||
"chat_sendImage": "画像を送信",
|
||||
"chat_imagePickFailed": "その画像を開けませんでした",
|
||||
"chat_receivedGif": "GIFを受け取りました",
|
||||
"repeater_keySettings": "アイデンティティキーの変更",
|
||||
"repeater_keySettingsSubtitle": "公開鍵/秘密鍵を変更する",
|
||||
"repeater_prvKey": "プライベートキー",
|
||||
"repeater_prvKeyHelper": "リピーター用の新しいプライベートキー。128文字の16進文字列です。",
|
||||
"repeater_generatePrvKey": "ランダムな鍵ペアを生成する",
|
||||
"repeater_stopGeneratingPrvKey": "キーペアの検索を中断",
|
||||
"repeater_pubKey": "公開鍵",
|
||||
"repeater_pubKeyHelper": "これは生成された秘密鍵に対応する公開鍵です。直接設定することはできません。",
|
||||
"repeater_pubKeyPrefix": "希望する接頭辞",
|
||||
"repeater_pubKeyPrefixHelper": "これらの16進数で始まる公開鍵を見つけてください。予想される試行回数: {tries}。",
|
||||
"imageMessages_enableTitle": "画像メッセージを有効にする",
|
||||
"imageMessages_enableSubtitle": "メッシュ経由で画像を送信してください。画像モデルを一度限りのダウンロードが必要です。",
|
||||
"imageMessages_modelSectionTitle": "画像モデル",
|
||||
"imageMessages_downloadModel": "ダウンロード",
|
||||
"imageMessages_cancelDownload": "キャンセル",
|
||||
"imageMessages_removeModel": "モデルを削除",
|
||||
"imageMessages_modelReady": "準備完了",
|
||||
"imageMessages_modelNotPublished": "まだ公開されていません — このビルドではダウンロードできません。",
|
||||
"imageMessages_downloadFailed": "画像モデルがダウンロードできませんでした。",
|
||||
"imageMessages_autoProcessTitle": "画像を自動的に処理する",
|
||||
"imageMessages_autoProcessSubtitle": "画像が届き次第、すぐに再構築してください。1回あたり約2GBのメモリを使用します。タップで再構築を解除できます。",
|
||||
"imageSend_title": "画像を送信",
|
||||
"imageSend_cropNote": "512 × 512にリサイズされました。アスペクト比は保持されませんでした。",
|
||||
"imageSend_originalSize": "原文:\nThe early morning light filtered through the curtains, casting a soft glow on the room.\n\n翻訳:\n早朝の光がカーテンをすり抜け、部屋に柔らかな光を投げかけていた。",
|
||||
"imageSend_onAirSize": "放送中",
|
||||
"imageSend_quality": "品質",
|
||||
"imageSend_qualityStandard": "標準",
|
||||
"imageSend_qualityHigh": "ハイ",
|
||||
"imageSend_packetsLabel": "パケット",
|
||||
"imageSend_airtimeLabel": "放送時間",
|
||||
"imageSend_sizeLabel": "ペイロード",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{パケット} other{パケット}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "ラジオの設定が不明です",
|
||||
"imageSend_radioUnknownBody": "放送時間の計算ができるように、デバイスに接続してください。",
|
||||
"imageSend_longSendTitle": "長距離伝送",
|
||||
"imageSend_longSendBody": "このチャンネルは約 {duration} 間保持されます。",
|
||||
"imageSend_floodNote": "洪水ルーティング:範囲内の各リピーターが各パケットを再送信するため、チャネルはこれよりも長く占有されたままになります。",
|
||||
"imageSend_parityTitle": "回復パケット",
|
||||
"imageSend_paritySubtitle": "追加のパケットが1つあります。グループメッセージは確認されないため、1つのパケットが失われても受信者が画像を再構築できます。",
|
||||
"imageSend_send": "送る",
|
||||
"imageSend_cancel": "キャンセル",
|
||||
"imageSend_encodeFailed": "この画像はエンコードできませんでした。",
|
||||
"imageSend_codecDownloading": "画像モデルはまだダウンロード中です。",
|
||||
"imageSend_codecUnavailable": "このデバイスでは画像送信が利用できません。",
|
||||
"imageSend_codecDisabled": "設定で画像メッセージはオフになっています。",
|
||||
"imageSend_deviceUnsupported": "このラジオは画像パケットを送信できません。コンパニオン ファームウェア 13 以降を実行しているデバイスを接続してください。",
|
||||
"imageSend_directMessagesUnsupported": "画像はグループデータとして送信されるため、ダイレクトメッセージではなくチャンネルに送ることができます。",
|
||||
"imageSend_tooLarge": "その画像は、メッシュ形式が許容するよりも多くのパケットにエンコードされています。",
|
||||
"imageSend_sentConfirmation": "{count} {count, plural, =1{パケット} other{パケット}}として画像を送信しました。",
|
||||
"imageSend_sendFailed": "画像を送信できませんでした:{error}",
|
||||
"imageSend_sendingProgress": "画像送信 — パケット {sent} 件、合計 {total} 件",
|
||||
"receivedImage_senderPrefix": "ノード {prefix}",
|
||||
"receivedImage_incoming": "{total} パケット中 {received} パケット",
|
||||
"receivedImage_queued": "復号を待っている",
|
||||
"receivedImage_tapToDecode": "デコードするにはタップしてください。",
|
||||
"receivedImage_decoding": "再構築… 約1秒",
|
||||
"receivedImage_incomplete": "画像が不完全です — {total} パケット中 {received} パケットが到着しました",
|
||||
"receivedImage_corrupt": "画像を再構成することはできませんでした",
|
||||
"receivedImage_decoderMissing": "画像を受信しました — 画像のデコードが失敗しました",
|
||||
"receivedImage_evicted": "画像はもう保存されていません",
|
||||
"receivedImage_retry": "もう一度試してください",
|
||||
"receivedImage_decodeAgain": "もう一度デコードしてください",
|
||||
"receivedImage_openSettings": "設定する",
|
||||
"receivedImage_tapToProcess": "処理するにはタップしてください",
|
||||
"receivedImage_awaiting": "{bytes} バイト・{packets} {packets, plural, =1{パケット} other{パケット}}",
|
||||
"imageSend_secondsValue": "{seconds}秒",
|
||||
"imageSend_minutesSecondsValue": "{minutes}分 {seconds}秒"
|
||||
}
|
||||
|
||||
+223
-4
@@ -2495,13 +2495,10 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"messageStatus_pending": "발송",
|
||||
"messageStatus_sent": "발송",
|
||||
"messageStatus_delivered": "배송 완료",
|
||||
"common_undo": "되돌리기",
|
||||
"messageStatus_pending": "전송 중",
|
||||
"messageStatus_sent": "전송됨",
|
||||
"messageStatus_delivered": "전달됨",
|
||||
"common_undo": "되돌리기",
|
||||
"messageStatus_failed": "전송 실패",
|
||||
"messageStatus_repeated": "반복 수신됨",
|
||||
"contacts_searchOpen": "연락처 검색",
|
||||
@@ -2742,5 +2739,227 @@
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "지역",
|
||||
"settings_regionSettingsSubtitle": "저장된 지역 관리",
|
||||
"settings_regionManagement_screenTitle": "지역 관리",
|
||||
"settings_regionNameHint": "지역 이름 입력",
|
||||
"settings_regionAddRegion": "지역 추가",
|
||||
"settings_regionFetchRegions": "리피터에서 지역을 가져옵니다.",
|
||||
"settings_regionFetchRegionsFail": "어떤 지역도 발견되지 않았습니다.",
|
||||
"settings_regionFetchRegionsAlreadyExists": "이 지역은 이미 추가되었습니다.",
|
||||
"settings_regionName": "지역 이름",
|
||||
"settings_regionDeleted": "지역 삭제",
|
||||
"settings_deleteRegion": "지역 삭제",
|
||||
"settings_deleteRegionConfirm": "\"{region}\"을(를) 지역 목록에서 삭제하시겠습니까?",
|
||||
"settings_infoHardware": "하드웨어",
|
||||
"settings_infoFirmware": "펌웨어",
|
||||
"repeater_pathHashModeOption0": "0 - 1 바이트",
|
||||
"repeater_pathHashModeOption1": "1~2 바이트",
|
||||
"repeater_pathHashModeOption2": "2 - 3 바이트",
|
||||
"repeater_pathHashModeOption3": "3 - 4 바이트",
|
||||
"appSettings_batteryLipoHv": "리포 HV (3.0-4.35V)",
|
||||
"channels_regionSetTo": "지역: {region}",
|
||||
"channels_regionNotSet": "지역: 없음",
|
||||
"channels_regionSelect_Title": "지역을 선택하세요",
|
||||
"channels_clearRegion": "명확한 지역",
|
||||
"chat_sendImage": "이미지를 보내세요",
|
||||
"chat_imagePickFailed": "그 이미지를 열 수 없었어요.",
|
||||
"chat_receivedGif": "GIF를 받았습니다",
|
||||
"repeater_keySettings": "신원 키 변경",
|
||||
"repeater_keySettingsSubtitle": "공개/비공개 키 쌍을 변경하세요",
|
||||
"repeater_prvKey": "개인 키",
|
||||
"repeater_prvKeyHelper": "리피터의 새로운 개인 키로, 128자리의 16진수 문자열입니다.",
|
||||
"repeater_generatePrvKey": "임의의 키 쌍을 생성하세요.",
|
||||
"repeater_stopGeneratingPrvKey": "키페어 검색 중단",
|
||||
"repeater_pubKey": "공개 키",
|
||||
"repeater_pubKeyHelper": "이것은 생성된 개인 키와 함께 사용되는 공개 키입니다. 직접 설정할 수 없습니다.",
|
||||
"repeater_pubKeyPrefix": "원하는 접두사",
|
||||
"repeater_pubKeyPrefixHelper": "이러한 16진수로 시작하는 공개 키를 찾으세요. 필요한 시도 횟수: {tries}.",
|
||||
"imageMessages_enableTitle": "이미지 메시지 활성화",
|
||||
"imageMessages_enableSubtitle": "메시를 통해 이미지를 전송하세요. 일회성 이미지 모델 다운로드가 필요합니다.",
|
||||
"imageMessages_modelSectionTitle": "이미지 모델",
|
||||
"imageMessages_downloadModel": "다운로드",
|
||||
"imageMessages_cancelDownload": "취소",
|
||||
"imageMessages_removeModel": "모델 제거",
|
||||
"imageMessages_modelReady": "준비 완료",
|
||||
"imageMessages_modelNotPublished": "아직 출판되지 않았습니다 — 이 빌드로는 다운로드할 수 없습니다.",
|
||||
"imageMessages_downloadFailed": "이미지 모델을 다운로드할 수 없었습니다.",
|
||||
"imageMessages_autoProcessTitle": "자동으로 프로세스 이미지를 처리합니다.",
|
||||
"imageMessages_autoProcessSubtitle": "이미지가 도착하는 즉시 재구성하세요. 매번 2GB의 메모리를 사용하며, 탭으로 재구성을 원할 경우 해제하세요.",
|
||||
"imageSend_title": "이미지를 보내세요",
|
||||
"imageSend_cropNote": "512 × 512로 크기가 조정되었으며, 종횡비는 유지되지 않았습니다.",
|
||||
"imageSend_originalSize": "원문 없음",
|
||||
"imageSend_onAirSize": "방송 중",
|
||||
"imageSend_quality": "품질",
|
||||
"imageSend_qualityStandard": "표준",
|
||||
"imageSend_qualityHigh": "높다",
|
||||
"imageSend_packetsLabel": "패킷",
|
||||
"imageSend_airtimeLabel": "방송 시간",
|
||||
"imageSend_sizeLabel": "페이로드",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{패킷} other{패킷}}",
|
||||
"imageSend_range": "{min}~{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "라디오 설정 정보 없음",
|
||||
"imageSend_radioUnknownBody": "방송 시간을 계산할 수 있도록 기기와 연결하세요.",
|
||||
"imageSend_longSendTitle": "장거리 송신",
|
||||
"imageSend_longSendBody": "이것은 약 {duration} 동안 채널을 유지할 것입니다.",
|
||||
"imageSend_floodNote": "홍수 라우팅: 범위 내의 모든 리피터가 각 패킷을 재전송하므로, 채널이 이보다 더 오래 점유 상태를 유지합니다.",
|
||||
"imageSend_parityTitle": "회복 패킷",
|
||||
"imageSend_paritySubtitle": "추가 한 개의 패킷입니다. 그룹 메시지는 확인되지 않으므로, 하나의 패킷이 손실되었을 경우 수신자가 이미지를 다시 구성할 수 있습니다.",
|
||||
"imageSend_send": "보내다",
|
||||
"imageSend_cancel": "취소",
|
||||
"imageSend_encodeFailed": "이 이미지는 인코딩할 수 없습니다.",
|
||||
"imageSend_codecDownloading": "이미지 모델이 아직 다운로드 중입니다.",
|
||||
"imageSend_codecUnavailable": "이 기기에서는 이미지 전송이 불가능합니다.",
|
||||
"imageSend_codecDisabled": "설정에서 이미지 메시지가 꺼져 있습니다.",
|
||||
"imageSend_deviceUnsupported": "이 라디오는 이미지 패킷을 전송할 수 없습니다. 컴패니언 펌웨어 13 이상을 실행하는 장치를 연결해 주세요.",
|
||||
"imageSend_directMessagesUnsupported": "이미지는 그룹 데이터로 전송되므로, 직접 메시지가 아닌 채널로만 보낼 수 있습니다.",
|
||||
"imageSend_tooLarge": "그 이미지는 메시 형식이 허용하는 것보다 더 많은 패킷으로 인코딩되었습니다.",
|
||||
"imageSend_sentConfirmation": "이미지가 {count} {count, plural, =1{패킷} other{패킷}}로 전송되었습니다.",
|
||||
"imageSend_sendFailed": "이미지를 보낼 수 없습니다: {error}",
|
||||
"imageSend_sendingProgress": "이미지 전송 — {sent}개의 {total} 패킷",
|
||||
"receivedImage_senderPrefix": "노드 {prefix}",
|
||||
"receivedImage_incoming": "{total}개 패킷 중 {received}개",
|
||||
"receivedImage_queued": "해독을 기다리는 중입니다.",
|
||||
"receivedImage_tapToDecode": "해독하려면 탭을 누르세요.",
|
||||
"receivedImage_decoding": "재구성하는… 약 1초 정도",
|
||||
"receivedImage_incomplete": "이미지 불완전 — {total}개 중 {received}개 패킷 수신됨",
|
||||
"receivedImage_corrupt": "이미지는 재구성될 수 없습니다.",
|
||||
"receivedImage_decoderMissing": "수신된 이미지 — 이미지 해독이 되지 않았습니다",
|
||||
"receivedImage_evicted": "이미지는 더 이상 저장되지 않았습니다.",
|
||||
"receivedImage_retry": "다시 시도해 보세요",
|
||||
"receivedImage_decodeAgain": "다시 해독하다",
|
||||
"receivedImage_openSettings": "설정하다",
|
||||
"receivedImage_tapToProcess": "처리하려면 탭을 누르세요.",
|
||||
"receivedImage_awaiting": "{bytes} 바이트 · {packets} {packets, plural, =1{패킷} other{패킷}}",
|
||||
"imageSend_secondsValue": "{seconds} 초",
|
||||
"imageSend_minutesSecondsValue": "{minutes}분 {seconds}초"
|
||||
}
|
||||
|
||||
@@ -368,42 +368,44 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
'Радио настройките са актуализирани';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Региони';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle =>
|
||||
'Управляне на хранилищни региони';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Регионално управление';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Възразна название на региона';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Добавете регион';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => 'Извън рептерите от региони';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail =>
|
||||
'Не бъде открити никако региони';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Тата регион е уже добавена';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Регионноименоване';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Регион отстранен';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Удаляне на регион';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Състрясна: отпиште \"$region\" от списка региони?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -627,10 +629,11 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
String get settings_infoChannelCount => 'Брой канали';
|
||||
|
||||
@override
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
String get settings_infoHardware => 'Оборудование';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
String get settings_infoFirmware =>
|
||||
'Програмно-оборонни системни программи (фirmware)';
|
||||
|
||||
@override
|
||||
String get settings_presets => 'Предварителни настройки';
|
||||
@@ -748,16 +751,16 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
String get appSettings_languageUk => 'Украински';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 байт';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 байта';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 байта';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 байта';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing =>
|
||||
@@ -909,7 +912,7 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'Литиев полимер (3.0-4.2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'LiPo ВЗГ (3,0-4,35 В)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Карта за показване';
|
||||
@@ -1422,17 +1425,17 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return 'Регион: $region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Регион: ние';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Выберете регион';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Чиста зона';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Няма съобщения.';
|
||||
@@ -1490,13 +1493,13 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
String get chat_sendGif => 'Изпрати GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Изпрати изображение';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Не мог да откривам та изображин';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Получил GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Отговори';
|
||||
@@ -2736,38 +2739,39 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
'Байтовете, използвани за кодиране на идентификатора на този повторител в таговете за откриване на потоци/цикли, са: 0=1 байт (256 идентификатора, до 64 скока), 1=2 байта (65 000 идентификатора, до 32 скока), 2=3 байта (16 милиона идентификатора, до 21 скока). Версиите 1.13 и по-старите фърмуери използват многобайтови пътища - само след като мрежата е актуализирана до версия 1.14 или по-нова.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Изменяне на идентичности ключа';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Замени ключовият пар от публични/частни';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Частни ключ';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Нова приватна ключ на повторчето, 128-символовна шестнадатерична строка.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Генериране на случайна ключи';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey =>
|
||||
'Прервана поискна на ключова парта';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Публична ключ';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Та е публичната ключ, която се свързува с генериранта приватна ключ. Трябва да не настройте тоа напрямо.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Желата префикс';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Наискате публична ключ, който почева с този шестнадатницил. Ожидавани проби: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4524,41 +4528,42 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
String get translation_title => 'Превод';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Абilitiraм изображените сообщения';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Изправате изображения чрез сетката. Треба е одноразовна загрузка модел на изображение.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Изображени модель';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Скачане';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Отмена';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Удалете модель';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Готов';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Еще не опубликовано — тази версия не може да скане.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Модел за изображение не може да бъде скачан.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle =>
|
||||
'Автоматически обрабатвате изображения';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Катализиране на всята изображение сразу по пришествие. Използване на около 2 ГБ на втора пъти; откажете от реконструкцията чаке при натискане.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Активирайте превода';
|
||||
@@ -4845,43 +4850,43 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Спри проследяването на пакета';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Изпрати изображение';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Масштабиран до 512 × 512 · соотношение сторон не съхранясе';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize => 'Късно на използване на език:';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'В ефир';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Качество';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
String get imageSend_qualityStandard => 'Стандарт';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Высок';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Пакети';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Времето на изкъсване';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Баланса';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'пакета',
|
||||
one: 'пакет',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4895,149 +4900,150 @@ class AppLocalizationsBg extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Настройки на радио неизвестни';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Усредете се с устройство, за да се отработа часът на изстъпане.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Долга пресилка';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Тази буде поддержива открит отряд на около $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Руйжинг на превъште: всички ретранслятори в диапазонта превратят всички пакети, тъйа каналят оставря дълше, от този час.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Возобновителен пакет';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Едно дополително пакет. Групни извещания не принимаются, след това разбирателят едно пакетто, какщо е пропущен един пакет.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Отправляй';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Отмена';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed =>
|
||||
'Тази изображение не може да бъде кодирано.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Модел на изображение еще разгрузира.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'Изглед отправа не е доступен на този устройство.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'Изображенията на извещенията е отключена в настройките.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Та радиота не може да пресылава изображени пакети. Подключите устройство, който работи с компанионски прошивка 13 или новия.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Изображенията се превозводя се как групова информация, следато да се отправят единствено на канал — не в лична вестка.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Таата изображение е кодирано в по-числа пакети, отгоре както формат на сетта разрешава.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'пакета',
|
||||
one: 'пакет',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Изображението е изпратено като $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'Изображение не може да бъде отправено: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Отправка наизображение — пакет $sent от $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Узъдето $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '$received от $total пакета';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Ожидането за декодиране';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Натискнете за декодиране';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Повторно… за приблизително 1 секунда';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Изображение неполно — $received от $total пакети отправили';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => 'Изображение не може да бъде воссоздано';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Получена изображение — разгадка на изображение е вреjan';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Изображение не е хранитено';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Повтори';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Правилейте заново';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Настройте';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Натискнете за обработка';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'пакета',
|
||||
one: 'пакет',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes байта · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds секунди';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes мин $seconds сек';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -386,14 +386,15 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get settings_regionAddRegion => 'Region hinzufügen';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => 'Regionen von Wiederholern abrufen';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail =>
|
||||
'Es wurden keine Regionen gefunden.';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Diese Region wurde bereits hinzugefügt';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Regions-Name';
|
||||
@@ -745,16 +746,16 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get appSettings_languageUk => 'Ukrainisch';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 Byte';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 Bytes';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 Bytes';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 Bytes';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing =>
|
||||
@@ -906,7 +907,7 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3,0–4,2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3,0–4,35 V)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Kartendarstellung';
|
||||
@@ -1491,13 +1492,13 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get chat_sendGif => 'GIF senden';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Bild senden';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Konnte dieses Bild nicht öffnen.';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Erhalten eines GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Antworten';
|
||||
@@ -2732,38 +2733,40 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
'Bytes, die zur Kodierung der ID dieses Repeaters in Flood-Pfad-/Schleifen-Erkennung-Tags verwendet werden. 0 = 1 Byte (256 IDs, bis zu 64 Hops), 1 = 2 Bytes (65.000 IDs, bis zu 32 Hops), 2 = 3 Bytes (16 Millionen IDs, bis zu 21 Hops). Firmware-Versionen 1.13 und älter verwenden mehrstellige Pfade – ab Version 1.14+ wird nur ein Pfad erstellt, sobald das Netzwerk aktiv ist.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Identitätsschlüssel ändern';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Ändern Sie das öffentliche/private Schlüsselpaar';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Privatschlüssel';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Ein neuer privater Schlüssel für den Repeater, eine 128-stellige Hexadezimalzeichenkette.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey =>
|
||||
'Generiere ein zufälliges Schlüsselpaar';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey =>
|
||||
'Suchvorgang für Schlüsselpaar unterbrechen';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Öffentlicher Schlüssel';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Dies ist der öffentliche Schlüssel, der zum generierten privaten Schlüssel gehört. Sie können dies nicht direkt festlegen.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Gewünschtes Präfix';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Suchen Sie einen öffentlichen Schlüssel, der mit diesen Hexadezimalziffern beginnt. Erwartete Versuche: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4533,41 +4536,41 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get translation_title => 'Übersetzung';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Bildnachrichten aktivieren';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Bilder über das Netzwerk senden. Einmaliges Herunterladen eines Bildmodells erforderlich.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Bildmodell';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Herunterladen';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Stornieren';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Modell entfernen';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Bereit';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Noch nicht veröffentlicht – dieser Build kann es nicht herunterladen.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Das Bildmodell konnte nicht heruntergeladen werden.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle => 'Automatisch Bilder verarbeiten';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Rekonstruiere jedes Bild sofort nach dem Eintreffen. Verbraucht etwa 2 GB Arbeitsspeicher für jede zweite Wiederherstellung; deaktiviere die automatische Rekonstruktion mit einem Tippen.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Aktivieren Sie die Übersetzung';
|
||||
@@ -4858,43 +4861,44 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Fixierung aufheben';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Bild senden';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Für 512 × 512 skaliert · Seitenverhältnis nicht erhalten';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize =>
|
||||
'Originaltext:\n\nThe quick brown fox jumps over the lazy dog.\n\nÜbersetzung:\n\nDer schnelle braune Fuchs springt über den faulen Hund.';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Qualität';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Hoch';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Pakete';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Sendezeit';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Nutzlast';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'Pakete',
|
||||
one: 'Paket',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4908,140 +4912,142 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Radioeinstellungen unbekannt';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Verbinden Sie das Gerät, damit die Sendezeit berechnet werden kann.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Lange Übertragung';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Dies hält den Kanal für etwa $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Flutweiterleitung: Jeder Repeater im Bereich leitet jedes Paket weiter, wodurch der Kanal länger als dieser Zeitraum beschäftigt bleibt.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Wiederherstellungspaket';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Ein zusätzliches Paket. Gruppen-Nachrichten werden nicht bestätigt, daher kann der Empfänger das Bild rekonstruieren, falls ein Paket verloren geht.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Senden';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Stornieren';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed =>
|
||||
'Dieses Bild konnte nicht kodiert werden.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Das Bildmodell wird noch heruntergeladen.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'Bildversand ist auf diesem Gerät nicht verfügbar.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'Bildnachrichten sind in den Einstellungen deaktiviert.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Dieses Radio kann keine Bildpakete senden. Verbinden Sie ein Gerät mit der Companion-Firmware-Version 13 oder neuer.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Bilder werden als Gruppendaten übertragen, daher können sie nur an einen Kanal gesendet werden – nicht per Direktnachricht.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Dieses Bild wurde in mehr Pakete kodiert, als das Mesh-Format zulässt.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'Pakete',
|
||||
one: 'Paket',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Bild gesendet als $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'Das Bild konnte nicht gesendet werden: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Bildversand — Paket $sent von $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Kritisch: Diese Platzhalter $prefix beibehalten.';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '$received von $total Paketen';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Warten auf die Entschlüsselung';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Tippen Sie, um zu entschlüsseln';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Rekonstruktion… ca. 1 s';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Bild unvollständig — $received von $total Paketen eingetroffen';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt =>
|
||||
'Das Bild konnte nicht rekonstruiert werden.';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Bild empfangen — Bilddekodierung fehlgeschlagen';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Bild nicht mehr gespeichert';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Versuchen Sie es erneut';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Entschlüsseln Sie es erneut';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Einrichten';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Klicken Sie, um fortzufahren';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'Pakete',
|
||||
one: 'Paket',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes Bytes · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -5051,6 +5057,6 @@ class AppLocalizationsDe extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes Min $seconds Sek';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,42 +368,43 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => 'Ajustes de radio actualizados';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Regiones';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle =>
|
||||
'Gestionar regiones almacenadas';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Gestión de Regiones';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Nombre de la región';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Añadir región';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => 'Obtener regiones de repetidores';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail => 'No se encontraron regiones';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Esta región ya ha sido agregada';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Nombre de la Región';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Región eliminada';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Eliminar Región';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return '¿Eliminar \"$region\" de la lista de regiones?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1419,17 +1420,17 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return 'Región: $region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Región: ninguna';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Seleccione una región';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Zona despejada';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Aún no hay mensajes';
|
||||
@@ -1487,13 +1488,13 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
String get chat_sendGif => 'Enviar GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Enviar imagen';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'No pude abrir esa imagen';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Recibido un GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Responder';
|
||||
@@ -2731,38 +2732,39 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
'Bytes utilizados para codificar el ID de este repetidor en las etiquetas de ruta/detección de bucles. 0=1 byte (256 IDs, hasta 64 saltos), 1=2 bytes (65.000 IDs, hasta 32 saltos), 2=3 bytes (16 millones de IDs, hasta 21 saltos). Las versiones 1.13 y anteriores de firmware eliminan rutas de múltiples bytes; solo se detectan una vez que la red está activa en la versión 1.14 o posterior.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Cambiar Claves de Identidad';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Cambiar la pareja de claves pública/privada';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Clave privada';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Una nueva clave privada para el repetidor, una cadena hexadecimal de 128 caracteres.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Genera un par de claves aleatorias';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey =>
|
||||
'Interrumpir la búsqueda de par de claves';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Clave pública';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Esta es la clave pública que corresponde a la clave privada generada. No se puede establecer directamente.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Prefijo deseado';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Encuentre una clave pública que comience con estos dígitos hexadecimales. Se esperan $tries intentos.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4528,41 +4530,42 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
String get translation_title => 'Traducción';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Mensajes de imagen';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Enviar imágenes a través de la malla. Requiere la descarga de un modelo de imagen único.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Modelo de imagen';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Descargar';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Cancelar';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Eliminar modelo';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Listo';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Aún no publicado — esta versión no puede descargarlo.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'El modelo de imagen no pudo ser descargado.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle =>
|
||||
'Procesar imágenes automáticamente';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Reconstruya cada imagen tan pronto como llegue. Utiliza aproximadamente 2 GB de memoria durante un segundo cada vez; desactívelo para reconstruir con un toque.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Habilitar la traducción';
|
||||
@@ -4851,43 +4854,43 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Dejar de seguir el paquete';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Enviar imagen';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Redimensionado a 512 × 512 · la relación de aspecto no se conservó';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize => 'Texto original';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'En emisión';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Calidad';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
String get imageSend_qualityStandard => 'Estándar';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Alto';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Paquetes';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Tiempo en pantalla';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Carga útil';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paquetes',
|
||||
one: 'paquete',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4901,149 +4904,151 @@ class AppLocalizationsEs extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle =>
|
||||
'Configuración de radio desconocida';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Conéctese a un dispositivo para que se pueda calcular la hora de transmisión.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Larga transmisión';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Esto mantendrá el canal durante aproximadamente $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Enrutamiento de inundación: cada repetidor dentro del rango retransmite cada paquete, por lo que el canal permanece ocupado durante más tiempo que esto.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Paquete de recuperación';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Un paquete adicional. Los mensajes grupales no son reconocidos, por lo que esto permite al receptor reconstruir la imagen si se pierde un solo paquete.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Enviar';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Cancelar';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => 'Esta imagen no pudo ser codificada.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'El modelo de imagen todavía se está descargando.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'El envío de imágenes no está disponible en este dispositivo.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'Los mensajes de imagen están desactivados en la configuración.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Esta radio no puede enviar paquetes de imagen. Conecte un dispositivo con el firmware Companion versión 13 o superior.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Las imágenes se transmiten como datos grupales, por lo que solo se pueden enviar a un canal, no mediante mensajes directos.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Esa imagen se codificó en más paquetes de los que permite el formato de malla.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paquetes',
|
||||
one: 'paquete',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Imagen enviada como $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'La imagen no pudo ser enviada: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Envío de imagen — paquete $sent de $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Nodo $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '$received de $total paquetes';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Esperando descifrar';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Toque para decodificar';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding =>
|
||||
'Reconstruyendo… aproximadamente 1 segundo';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Imagen incompleta — $received de $total paquetes llegados';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => 'La imagen no pudo ser reconstruida';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Imagen recibida — la decodificación de la imagen no funciona';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Imagen ya no almacenada';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Inténtalo de nuevo';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Decodificar de nuevo';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Configurar';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Toque para procesar';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paquetes',
|
||||
one: 'paquete',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds segundos';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes min $seconds s';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -370,42 +370,44 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => 'Paramètres radio mis à jour';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Régions';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle => 'Gérer les régions stockées';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Gestion de région';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Entrer le nom de la région';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Ajouter une région';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions =>
|
||||
'Récupérer les régions à partir des répéteurs';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail =>
|
||||
'Aucune région n\'a été trouvée';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Cette région a déjà été ajoutée';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Nom de la région';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Région supprimée';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Supprimer la région';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Supprimez $region de la liste des régions ?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -627,7 +629,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get settings_infoChannelCount => 'Nombre de canaux';
|
||||
|
||||
@override
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
String get settings_infoHardware => 'Matériel';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
@@ -748,16 +750,16 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get appSettings_languageUk => 'Ukrainien';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 octet';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 à 2 octets';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 à 3 octets';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 à 4 octets';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing =>
|
||||
@@ -907,7 +909,7 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3,0-4,2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'Tension élevée LiPo (3,0-4,35 V)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Affichage de la carte';
|
||||
@@ -1421,17 +1423,17 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return 'Région : $region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Région : aucune';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Choisissez une région';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Zone dégagée';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Aucun message pour le moment';
|
||||
@@ -1489,13 +1491,13 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get chat_sendGif => 'Envoyer un GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Envoyer l\'image';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Je n\'ai pas pu ouvrir cette image';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Reçu un GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Répondre';
|
||||
@@ -2742,38 +2744,39 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
'Octets utilisés pour encoder l\'ID de ce routeur dans les balises de détection de flux/boucles. 0 = 1 octet (256 ID, jusqu\'à 64 sauts), 1 = 2 octets (65 000 ID, jusqu\'à 32 sauts), 2 = 3 octets (16 millions d\'ID, jusqu\'à 21 sauts). Les versions 1.13 et antérieures utilisent des chemins multi-octets ; à partir de la version 1.14, cela n\'est plus nécessaire.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Modifier les clés d\'identité';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Modifier la paire de clés publique/privée';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Clé privée';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Une nouvelle clé privée pour le répéteur, une chaîne hexadécimale de 128 caractères.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Générez une paire de clés aléatoire';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey =>
|
||||
'Arrêter la recherche de la paire de clés';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Clé publique';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Voici la clé publique associée à la clé privée générée. Vous ne pouvez pas la définir directement.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Préfixe souhaité';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Trouvez une clé publique qui commence par ces chiffres hexadécimaux. Nombre de tentatives nécessaires : $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4549,41 +4552,42 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get translation_title => 'Traduction';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Messages avec images';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Envoyer des images via le maillage. Nécessite un téléchargement unique du modèle d\'image.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Modèle d\'image';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Télécharger';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Annuler';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Supprimer le modèle';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Prêt';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Non publié — cette version ne peut pas le télécharger.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Le modèle d\'image ne pouvait pas être téléchargé.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle =>
|
||||
'Traiter automatiquement les images';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Reconstruisez chaque image dès son arrivée. Cela utilise environ 2 Go de mémoire pendant une seconde à chaque fois ; désactivez la reconstruction au toucher pour éviter cela.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Activer la traduction';
|
||||
@@ -4872,43 +4876,44 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Déverrouiller la vue du paquet';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Envoyer l\'image';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Redimensionné à 512 × 512 · le rapport d’aspect n’a pas été conservé';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize =>
|
||||
'Texte original\n\nVeuillez traduire le texte suivant en français :';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'En direct';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Qualité';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Haut';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Paquets';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Durée de diffusion';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Charge utile';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paquets',
|
||||
one: 'paquet',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4922,140 +4927,141 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Réglages de la radio inconnus';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Connectez-vous à un appareil afin que l\'heure de diffusion puisse être calculée.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Longue transmission';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Cela maintiendra la chaîne pendant environ $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Routage des inondations : chaque répéteur dans la zone retransmet chaque paquet, de sorte que le canal reste occupé plus longtemps que cela.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Paquet de récupération';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Un paquet supplémentaire. Les messages de groupe ne sont pas reconnus, ce qui permet au destinataire de reconstruire l\'image si un seul paquet est perdu.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Envoyer';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Annuler';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => 'Cette image ne peut pas être encodée.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Le modèle d\'image est toujours en téléchargement.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'L\'envoi d\'images n\'est pas disponible sur cet appareil.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'Les messages d\'images sont désactivés dans les paramètres.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Cette radio ne peut pas envoyer de paquets d\'images. Connectez un appareil exécutant le firmware compagnon version 13 ou ultérieure.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Les images se déplacent en tant que données de groupe, elles ne peuvent donc être envoyées que sur un canal — et non par message direct.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Cette image a été encodée en plus de paquets que le format de maillage ne permet.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paquets',
|
||||
one: 'paquet',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Image envoyée en $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'L\'image n\'a pas pu être envoyée : $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Envoi de l\'image — paquet $sent sur $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Nœud $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '$received sur $total paquets';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'En attendant de décoder';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Tapez pour décoder';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Reconstitution… d’environ 1 s';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Image incomplète — $received sur $total paquets reçus';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt =>
|
||||
'L\'image ne pouvait pas être reconstruite';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Image reçue — le décodage de l\'image est interrompu';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Image non stockée';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Réessayez';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Décoder à nouveau';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Mettre en place';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Tapez pour traiter';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paquets',
|
||||
one: 'paquet',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes octets · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -5065,6 +5071,6 @@ class AppLocalizationsFr extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes minutes $seconds secondes';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -366,42 +366,43 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => 'A rádió beállításai frissítve';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Tájak';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle =>
|
||||
'Kincstani megjelenítette gyakorlatos területeket';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Regionális Kezelés';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Felhasználja a regioni név';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Egyes region';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => 'Féregelmezők a repeaterekból';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail => 'Nem található egyéb területek';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Ez a terítet nemisértették meg.';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Feldúr Neve';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Felült region';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Felajánlatos Tér';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Kell kiszámítsd a ${region}ot a részekre?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -620,10 +621,10 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
String get settings_infoChannelCount => 'Csatornaszám';
|
||||
|
||||
@override
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
String get settings_infoHardware => 'Hardverő';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
String get settings_infoFirmware => 'Firmver';
|
||||
|
||||
@override
|
||||
String get settings_presets => 'Előbeállítások';
|
||||
@@ -746,13 +747,13 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 szavak';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bajt';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bajt';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing => 'Üzenetkövetés engedélyezése';
|
||||
@@ -1414,17 +1415,17 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return 'Tájékoztatás: A $region -t\n\nEz a tájékoztatás a magyar nyelvben a következően kell szóva:\n\nTájékoztatás: A $region -t';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Tájékoztetés: nem';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Válassz egy regionot';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Kéres kör';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Még nincsenek üzenetek';
|
||||
@@ -1482,13 +1483,13 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
String get chat_sendGif => 'GIF küldése';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Felhasználj az image';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Nem tudtam ezt a fenti fényre kapni';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'GIF-ot kapott';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Válasz';
|
||||
@@ -2725,38 +2726,39 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
'Az átjátszó azonosítójának elárasztási útvonal/hurokészlelési címkékbe való kódolására használt bájtok. 0 = 1 bájt (256 azonosító, legfeljebb 64 ugrás), 1 = 2 bájt (65 000 azonosító, legfeljebb 32 ugrás), 2 = 3 bájt (16 millió azonosító, legfeljebb 21 ugrás). A v1.13 és régebbi firmware eldobja a többbájtos elérési utat – csak akkor emelje meg, ha a hálózat a v1.14+ verziót használja.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Képzőítsekei jelölt';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Közelítse a közlekedési/private képlékt';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Kis házas';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Kínai nyelvben:\n\nA repeteróhoz új képes kód, 128 karakteri hex-kód.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Egy random képléktár generáld meg';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey =>
|
||||
'Kéypair szavakat kérdéset kaphatás';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Kiváló kiegészítő';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Ez a kiváló kód, amely tükrözi a gyártott kiegészítő kódot. Ezet nem lehet megjelenítani direktusan.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Kiváló prefix';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Kiválasztsa meg a közös kódot, amely az alábbi hex-kifüggőnek előre van. Várható kiválasztások száma: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4522,41 +4524,41 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
String get translation_title => 'Fordítás';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Fenti hírüket biztosítani';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Fényokat a hálózatban küldd el. Egyértelmű fénymodell hozzáadásra kell.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Hozzáladás';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Színviselés';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Kisnövezdés';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Hozzá';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Érkeztetve nem — ez a építési módszert nem lehet lejobbítani.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
String get imageMessages_downloadFailed => 'Életmódelmát nem tudtam hozni.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle =>
|
||||
'Automatikusan kínaltatja fénybetek';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Minden fenti image-t kiválasztsa meg, amikor érkezik. Minden más esetben 2 GB fényre kell szükséges; megoldja a rekonstruálisi a támogatásra egy klikkel.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Fordítás engedélyezése';
|
||||
@@ -4843,43 +4845,43 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'A nézet feloldása a csomagból';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Felhasználj az image';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'512 × 512 órák számára megosztva · képszöget nem biztosítva';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize => 'Következtetés:';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'Erőben';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Hosszú Képesség';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'High: Magas';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Paketek';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Kiválasztás a fent';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Kártya';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'csomag',
|
||||
one: 'csomag',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4893,83 +4895,83 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Radiooldalok nem tudom';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Kizárdhoz kapcsolódd a rendszert, hogy a súly az az álló időt lehet elismerni.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Uzun hírás';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Ez megbízható a kanal $duration-n.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Fúró irányozás: Minden repeater a fúró körüléggel megköveti mindkét paketet, ezért a kanal eltartja más a lehetséges időt.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Korzolás paksa';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Egy kibőbbes kapszula. Gruppos hírselek nem érkezik, ezért az empfangó nem kell elismerni a jel, ha egy egyes kapszula kaland, hogy nem teljesen érkezz.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Keresés';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Színviselés';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => 'Ez a fényet nem tudtam kódolni.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Érdekesz az image model megstálása még van.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'Felhasználó észintje nem kapható ezen a rendszert.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'Image hírletek belsőoldal elkalmáznak a konfigurációban.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Ez a radio nem tudja verseni színekfájltakat. Habilítd a kompatibilis firmware 13 vagy újabb versionot kapcsált eszközet.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Fényiak gyakorolják grupos adatban, ezért nem lehetek versenek egy hozzáfűzésre, csak egy kanalra.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'A figyelmetes fentet nem kínálhat a körközlettel ismétálás elterjesztésére.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'csomagként',
|
||||
one: 'csomagként',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Kép elküldve $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'Fentami nem tűnik: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Felhasználó: Lehet a következőkét kifejezetet – $sent paket $total';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4979,63 +4981,63 @@ class AppLocalizationsHu extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return 'Kulcsfontosságú: Kiválasztja meg a $received $total paketot';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Kódoláshoz küldőzve';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Kódoláshoz klikd el';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Korlátozás… egy 1 perc után';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Kérem, az $received $total paketet kapottak.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => 'Fény nem tudtam megrealítani';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Kezd az image — image decodálás nem kapható';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Fény nem tartalmazva';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Kérem kell próbálni';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Kodoldó';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Jelzése';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Klikd a feljelenítést';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'csomag',
|
||||
one: 'csomag',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes bájt · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds sekünd\n\n(Note: The placeholder $seconds is kept unchanged as requested.)';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes per $seconds sekünd\n\n(Note: The original text appears to be a placeholder format rather than a complete sentence. The translation reflects the literal structure while preserving the placeholders as requested.)';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -370,42 +370,45 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => 'Impostazioni radio aggiornate';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Regioni';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle =>
|
||||
'Gestione delle regioni salvate';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Gestione Regionale';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Inserisci il nome della regione';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Aggiungi regione';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions =>
|
||||
'Recupera le regioni dai ripetitori';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail =>
|
||||
'Non sono state trovate regioni';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Questa regione è già stata aggiunta';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Nome della Regione';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Regione cancellata';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Elimina Regione';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Rimuovere \"$region\" dalla lista delle regioni?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -749,13 +752,13 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 byte';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 byte';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 byte';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing =>
|
||||
@@ -906,7 +909,7 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3,0-4,2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3,0-4,35 V)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Visualizzazione Mappa';
|
||||
@@ -1420,17 +1423,17 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return 'Regione: $region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Regione: nessuna';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Scegli una regione';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Zona chiara';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Nessun messaggio ancora';
|
||||
@@ -1488,13 +1491,14 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get chat_sendGif => 'Invia GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Invia immagine';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed =>
|
||||
'Non sono riuscito ad aprire quell\'immagine';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Ricevuto un GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Rispondi';
|
||||
@@ -2733,38 +2737,39 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
'Byte utilizzati per codificare l\'ID di questo ripetitore nei tag di percorso flood/rilevamento loop. 0=1 byte (256 ID, fino a 64 salti), 1=2 byte (65.000 ID, fino a 32 salti), 2=3 byte (16 milioni di ID, fino a 21 salti). Il firmware precedente alla v1.14 usava sempre percorsi a 1 byte; v1.14 e versioni successive possono essere configurate per percorsi a 2 o 3 byte.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Cambia le Chiavi di Identità';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Cambia la coppia di chiavi pubblica/privata';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Chiave privata';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Una nuova chiave privata per il ripetitore, una stringa esadecimale di 128 caratteri.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Genera una coppia di chiavi casuale';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey =>
|
||||
'Interrompi la ricerca della coppia di chiavi';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Chiave pubblica';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Questa è la chiave pubblica che accompagna la chiave privata generata. Non è possibile impostarla direttamente.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Prefisso desiderato';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Trova una chiave pubblica che inizia con queste cifre esadecimali. Tentativi necessari previsti: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4532,41 +4537,42 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get translation_title => 'Traduzione';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Messaggi con immagini';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Invia le immagini tramite la mesh. È necessario scaricare il modello dell\'immagine una tantum.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Modello di immagine';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Scarica';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Annullare';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Rimuovi il modello';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Pronto';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Non pubblicato ancora — questa versione non può scaricarlo.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Il modello di immagine non può essere scaricato.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle =>
|
||||
'Elabora automaticamente le immagini';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Ricostruisci ogni immagine non appena arriva. Utilizza circa 2 GB di memoria per un secondo ogni volta; disattiva la ricostruzione con un semplice tocco.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Abilitare la traduzione';
|
||||
@@ -4856,43 +4862,44 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Sblocca la vista dal pacchetto';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Invia immagine';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Ridimensionato a 512 × 512 · rapporto d\'aspetto non conservato';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize =>
|
||||
'Traduzione:\n\nOriginal text:\n\nPlease translate the following English text into Italian:\n\nOriginal text:\n\n(No original English text provided)';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'In onda';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Qualità';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Alto';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Pacchetti';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Tempo in onda';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Carico utile';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pacchetti',
|
||||
one: 'pacchetto',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4906,149 +4913,151 @@ class AppLocalizationsIt extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Impostazioni radio sconosciute';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Collegati a un dispositivo in modo che si possa calcolare l\'orario di trasmissione.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Lunga trasmissione';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Questo manterrà il canale per circa $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Instradamento delle inondazioni: ogni ripetitore nel raggio ritrasmette ogni pacchetto, quindi il canale rimane occupato più a lungo.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Pacchetto di recupero';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Un pacchetto aggiuntivo. I messaggi di gruppo non vengono riconosciuti, quindi questo permette al destinatario di ricostruire l\'immagine se un singolo pacchetto viene perso.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Invia';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Annullare';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed =>
|
||||
'Questa immagine non può essere codificata.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Il modello di immagine sta ancora scaricando.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'L\'invio di immagini non è disponibile su questo dispositivo.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'I messaggi immagine sono disattivati nelle impostazioni.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Questa radio non può inviare pacchetti di immagini. Collegare un dispositivo con firmware companion versione 13 o successiva.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Le immagini viaggiano come dati di gruppo, quindi possono essere inviate solo a un canale — non tramite messaggio diretto.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Quella immagine è stata codificata in un numero di pacchetti superiore a quello consentito dal formato mesh.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pacchetti',
|
||||
one: 'pacchetto',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Immagine inviata come $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'L\'immagine non può essere inviata: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Invio immagine — pacchetto $sent di $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Nodo $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '$received di $total pacchetti';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'In attesa di decodificare';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Tocca per decodificare';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Ricostruire… circa 1 s';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Immagine incompleta — $received su $total pacchetti ricevuti';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt =>
|
||||
'L\'immagine non potrebbe essere ricostruita';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Immagine ricevuta — decodifica dell\'immagine non funzionante';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Immagine non più memorizzata';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Prova ancora';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Decodifica di nuovo';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Imposta';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Premi per elaborare';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pacchetti',
|
||||
one: 'pacchetto',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes byte · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds secondi';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes min $seconds s';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -354,42 +354,41 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => 'ラジオの設定が更新されました';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => '地域';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle => '保存された領域の管理';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => '地域管理';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => '地域名を入力してください';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => '地域を追加';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => 'リピーターからのフェッチ地域';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail => '地域は見つかりませんでした';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
String get settings_regionFetchRegionsAlreadyExists => 'この地域はすでに追加されています。';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => '地域名';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => '地域が削除されました';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => '地域を削除';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return '$region を地域リストから削除しますか?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -595,10 +594,10 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get settings_infoChannelCount => 'チャンネル数';
|
||||
|
||||
@override
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
String get settings_infoHardware => 'ハードウェア';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
String get settings_infoFirmware => 'ファームウェア';
|
||||
|
||||
@override
|
||||
String get settings_presets => 'プリセット';
|
||||
@@ -716,16 +715,16 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get appSettings_languageUk => 'ウクライナ語';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1バイト';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1〜2バイト';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2〜3バイト';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3〜4バイト';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing => 'メッセージ追跡を有効にする';
|
||||
@@ -857,7 +856,7 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3.0-4.2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'リポバッテリー HV(3.0〜4.35V)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => '地図表示';
|
||||
@@ -1349,17 +1348,17 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return '地域:$region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => '地域:なし';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => '地域を選択する';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'クリアな地域';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'まだメッセージは届いていません';
|
||||
@@ -1417,13 +1416,13 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get chat_sendGif => 'GIF を送信';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => '画像を送信';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'その画像を開けませんでした';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'GIFを受け取りました';
|
||||
|
||||
@override
|
||||
String get chat_reply => '返信';
|
||||
@@ -2614,38 +2613,35 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
'このリピータのIDをフローパス/ループ検出タグにエンコードするために使用されるバイト数。 0=1バイト (256個のID、最大64ホップ)、1=2バイト (65,000個のID、最大32ホップ)、2=3バイト (160万個のID、最大21ホップ)。 v1.13およびそれ以前のファームウェアでは、マルチバイトパスがサポートされていません。 v1.14以降のバージョンでは、一度ネットワークが起動されると、パスが一度だけ検出されます。';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'アイデンティティキーの変更';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
String get repeater_keySettingsSubtitle => '公開鍵/秘密鍵を変更する';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'プライベートキー';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
String get repeater_prvKeyHelper => 'リピーター用の新しいプライベートキー。128文字の16進文字列です。';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'ランダムな鍵ペアを生成する';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey => 'キーペアの検索を中断';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => '公開鍵';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
String get repeater_pubKeyHelper => 'これは生成された秘密鍵に対応する公開鍵です。直接設定することはできません。';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => '希望する接頭辞';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'これらの16進数で始まる公開鍵を見つけてください。予想される試行回数: $tries。';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4301,41 +4297,40 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get translation_title => '翻訳';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => '画像メッセージを有効にする';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'メッシュ経由で画像を送信してください。画像モデルを一度限りのダウンロードが必要です。';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => '画像モデル';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'ダウンロード';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'キャンセル';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'モデルを削除';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => '準備完了';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'まだ公開されていません — このビルドではダウンロードできません。';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
String get imageMessages_downloadFailed => '画像モデルがダウンロードできませんでした。';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle => '画像を自動的に処理する';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'画像が届き次第、すぐに再構築してください。1回あたり約2GBのメモリを使用します。タップで再構築を解除できます。';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => '翻訳機能を有効にする';
|
||||
@@ -4614,43 +4609,43 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'パケットの追跡を解除';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => '画像を送信';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
String get imageSend_cropNote => '512 × 512にリサイズされました。アスペクト比は保持されませんでした。';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize =>
|
||||
'原文:\nThe early morning light filtered through the curtains, casting a soft glow on the room.\n\n翻訳:\n早朝の光がカーテンをすり抜け、部屋に柔らかな光を投げかけていた。';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => '放送中';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => '品質';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
String get imageSend_qualityStandard => '標準';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'ハイ';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'パケット';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => '放送時間';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'ペイロード';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'パケット',
|
||||
one: 'パケット',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4664,149 +4659,143 @@ class AppLocalizationsJa extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'ラジオの設定が不明です';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
String get imageSend_radioUnknownBody => '放送時間の計算ができるように、デバイスに接続してください。';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => '長距離伝送';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'このチャンネルは約 $duration 間保持されます。';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'洪水ルーティング:範囲内の各リピーターが各パケットを再送信するため、チャネルはこれよりも長く占有されたままになります。';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => '回復パケット';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'追加のパケットが1つあります。グループメッセージは確認されないため、1つのパケットが失われても受信者が画像を再構築できます。';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => '送る';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'キャンセル';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => 'この画像はエンコードできませんでした。';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
String get imageSend_codecDownloading => '画像モデルはまだダウンロード中です。';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
String get imageSend_codecUnavailable => 'このデバイスでは画像送信が利用できません。';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
String get imageSend_codecDisabled => '設定で画像メッセージはオフになっています。';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'このラジオは画像パケットを送信できません。コンパニオン ファームウェア 13 以降を実行しているデバイスを接続してください。';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'画像はグループデータとして送信されるため、ダイレクトメッセージではなくチャンネルに送ることができます。';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
String get imageSend_tooLarge => 'その画像は、メッシュ形式が許容するよりも多くのパケットにエンコードされています。';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'パケット',
|
||||
one: 'パケット',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return '$count $_temp0として画像を送信しました。';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return '画像を送信できませんでした:$error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return '画像送信 — パケット $sent 件、合計 $total 件';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'ノード $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '$total パケット中 $received パケット';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => '復号を待っている';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'デコードするにはタップしてください。';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => '再構築… 約1秒';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return '画像が不完全です — $total パケット中 $received パケットが到着しました';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => '画像を再構成することはできませんでした';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
String get receivedImage_decoderMissing => '画像を受信しました — 画像のデコードが失敗しました';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => '画像はもう保存されていません';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'もう一度試してください';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'もう一度デコードしてください';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => '設定する';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => '処理するにはタップしてください';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'パケット',
|
||||
one: 'パケット',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes バイト・$packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds秒';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes分 $seconds秒';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -354,42 +354,41 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => '라디오 설정이 업데이트되었습니다.';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => '지역';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle => '저장된 지역 관리';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => '지역 관리';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => '지역 이름 입력';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => '지역 추가';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => '리피터에서 지역을 가져옵니다.';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail => '어떤 지역도 발견되지 않았습니다.';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
String get settings_regionFetchRegionsAlreadyExists => '이 지역은 이미 추가되었습니다.';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => '지역 이름';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => '지역 삭제';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => '지역 삭제';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return '\"$region\"을(를) 지역 목록에서 삭제하시겠습니까?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -596,10 +595,10 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
String get settings_infoChannelCount => '채널 수';
|
||||
|
||||
@override
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
String get settings_infoHardware => '하드웨어';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
String get settings_infoFirmware => '펌웨어';
|
||||
|
||||
@override
|
||||
String get settings_presets => '프리셋';
|
||||
@@ -717,16 +716,16 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
String get appSettings_languageUk => '우크라이나어';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 바이트';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1~2 바이트';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 바이트';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 바이트';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing => '메시지 추적 기능 활성화';
|
||||
@@ -860,7 +859,7 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => '리튬 폴리머 (3.0-4.2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => '리포 HV (3.0-4.35V)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => '지도 표시';
|
||||
@@ -1352,17 +1351,17 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return '지역: $region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => '지역: 없음';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => '지역을 선택하세요';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => '명확한 지역';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => '아직 메시지가 없습니다.';
|
||||
@@ -1420,13 +1419,13 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
String get chat_sendGif => 'GIF 보내기';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => '이미지를 보내세요';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => '그 이미지를 열 수 없었어요.';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'GIF를 받았습니다';
|
||||
|
||||
@override
|
||||
String get chat_reply => '답변';
|
||||
@@ -2620,38 +2619,36 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
'이 리피터의 ID를 플러드 경로/루프 감지 태그에 인코딩하는 데 사용되는 바이트 수입니다. 0=1바이트(256개 ID, 최대 64홉), 1=2바이트(65,000개 ID, 최대 32홉), 2=3바이트(1,600만 개 ID, 최대 21홉). v1.14 이전 펌웨어는 항상 1바이트 경로를 사용했으며, v1.14 이상은 2바이트 또는 3바이트 경로로 설정할 수 있습니다.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => '신원 키 변경';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
String get repeater_keySettingsSubtitle => '공개/비공개 키 쌍을 변경하세요';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => '개인 키';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
String get repeater_prvKeyHelper => '리피터의 새로운 개인 키로, 128자리의 16진수 문자열입니다.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => '임의의 키 쌍을 생성하세요.';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey => '키페어 검색 중단';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => '공개 키';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'이것은 생성된 개인 키와 함께 사용되는 공개 키입니다. 직접 설정할 수 없습니다.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => '원하는 접두사';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return '이러한 16진수로 시작하는 공개 키를 찾으세요. 필요한 시도 횟수: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4309,41 +4306,40 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
String get translation_title => '번역';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => '이미지 메시지 활성화';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'메시를 통해 이미지를 전송하세요. 일회성 이미지 모델 다운로드가 필요합니다.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => '이미지 모델';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => '다운로드';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => '취소';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => '모델 제거';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => '준비 완료';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'아직 출판되지 않았습니다 — 이 빌드로는 다운로드할 수 없습니다.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
String get imageMessages_downloadFailed => '이미지 모델을 다운로드할 수 없었습니다.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle => '자동으로 프로세스 이미지를 처리합니다.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'이미지가 도착하는 즉시 재구성하세요. 매번 2GB의 메모리를 사용하며, 탭으로 재구성을 원할 경우 해제하세요.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => '번역 기능 활성화';
|
||||
@@ -4622,199 +4618,192 @@ class AppLocalizationsKo extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => '패킷 고정 해제';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => '이미지를 보내세요';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
String get imageSend_cropNote => '512 × 512로 크기가 조정되었으며, 종횡비는 유지되지 않았습니다.';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize => '원문 없음';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => '방송 중';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => '품질';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
String get imageSend_qualityStandard => '표준';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => '높다';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => '패킷';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => '방송 시간';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => '페이로드';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: '패킷',
|
||||
one: '패킷',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_range(String min, String max) {
|
||||
return '$min–$max';
|
||||
return '$min~$max';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => '라디오 설정 정보 없음';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
String get imageSend_radioUnknownBody => '방송 시간을 계산할 수 있도록 기기와 연결하세요.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => '장거리 송신';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return '이것은 약 $duration 동안 채널을 유지할 것입니다.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'홍수 라우팅: 범위 내의 모든 리피터가 각 패킷을 재전송하므로, 채널이 이보다 더 오래 점유 상태를 유지합니다.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => '회복 패킷';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'추가 한 개의 패킷입니다. 그룹 메시지는 확인되지 않으므로, 하나의 패킷이 손실되었을 경우 수신자가 이미지를 다시 구성할 수 있습니다.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => '보내다';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => '취소';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => '이 이미지는 인코딩할 수 없습니다.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
String get imageSend_codecDownloading => '이미지 모델이 아직 다운로드 중입니다.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
String get imageSend_codecUnavailable => '이 기기에서는 이미지 전송이 불가능합니다.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
String get imageSend_codecDisabled => '설정에서 이미지 메시지가 꺼져 있습니다.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'이 라디오는 이미지 패킷을 전송할 수 없습니다. 컴패니언 펌웨어 13 이상을 실행하는 장치를 연결해 주세요.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'이미지는 그룹 데이터로 전송되므로, 직접 메시지가 아닌 채널로만 보낼 수 있습니다.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
String get imageSend_tooLarge => '그 이미지는 메시 형식이 허용하는 것보다 더 많은 패킷으로 인코딩되었습니다.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: '패킷',
|
||||
one: '패킷',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return '이미지가 $count $_temp0로 전송되었습니다.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return '이미지를 보낼 수 없습니다: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return '이미지 전송 — $sent개의 $total 패킷';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return '노드 $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '$total개 패킷 중 $received개';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => '해독을 기다리는 중입니다.';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => '해독하려면 탭을 누르세요.';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => '재구성하는… 약 1초 정도';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return '이미지 불완전 — $total개 중 $received개 패킷 수신됨';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => '이미지는 재구성될 수 없습니다.';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
String get receivedImage_decoderMissing => '수신된 이미지 — 이미지 해독이 되지 않았습니다';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => '이미지는 더 이상 저장되지 않았습니다.';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => '다시 시도해 보세요';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => '다시 해독하다';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => '설정하다';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => '처리하려면 탭을 누르세요.';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: '패킷',
|
||||
one: '패킷',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes 바이트 · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds 초';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes분 $seconds초';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -366,42 +366,44 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => 'Radio instellingen bijgewerkt';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Regio\'s';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle =>
|
||||
'Beheer van opgeslagen regio\'s';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Regionale Bestuur';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Regio naam invoeren';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Regio toevoegen';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => 'Haal regio\'s uit herhalers';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail =>
|
||||
'Er zijn geen regio\'s gevonden';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Deze regio is al toegevoegd.';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Regio Naam';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Regio verwijderd';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Regio verwijden';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Verwijder \"$region\" uit de regio-lijst?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -898,7 +900,7 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3,0-4,2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3,0-4,35 V)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Kaartweergave';
|
||||
@@ -1408,17 +1410,17 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return 'Regio: $region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Regio: geen';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Kies een regio';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Duidelijke regio';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Nog geen berichten.';
|
||||
@@ -1476,13 +1478,13 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
String get chat_sendGif => 'GIF verzenden';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Beeld verzenden';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Kunde die afbeelding niet openen';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Ontvangen van een GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Reageren';
|
||||
@@ -2714,38 +2716,38 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
'Bytes die gebruikt worden om de ID van deze repeater te coderen in flood-pad/lusdetectietags. 0=1 byte (256 ID\'s, tot 64 hops), 1=2 bytes (65.000 ID\'s, tot 32 hops), 2=3 bytes (16 miljoen ID\'s, tot 21 hops). Firmware vóór v1.14 gebruikte altijd 1-byte paden; v1.14 en nieuwer kunnen worden ingesteld op 2- of 3-byte paden.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Verander de Identiteitskies';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Wijzig de openbare/private sleutelpaar';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Geheime sleutel';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Een nieuwe private sleutel voor de repeater, een 128-karakter lange hexadecimale string.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Stel een willekeurige sleutelpaar op';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey => 'Stop zoek naar sleutelpaar';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Openbaar sleutel';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Dit is de openbare sleutel die past bij de gegenereerde privésleutel. U kunt dit niet direct instellen.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Verlangde voorvoegsel';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Zoek een openbare sleutel die begint met deze hexadecimale cijfers. Verwacht aantal pogingen: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4510,41 +4512,41 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
String get translation_title => 'Vertaling';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Bijbehorende afbeeldingen activeren';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Beeldjes verzenden via het netwerk. Vereist eenmalig afdaling van een beeldmodel.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Beeldmodel';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Annuleren';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Model verwijderen';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Klaar';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Nog niet gepubliceerd — deze versie kan dit niet downloaden.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Het beeldmodel kon niet worden gedownload.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle => 'Beeldverwerking automatisch';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Reconstrueer elk beeld direct nadat het binnenkomt. Het gebruikt ongeveer 2 GB geheugen voor elke keer; schakel het reconstrueren uit met een tik als je het niet nodig hebt.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Activeer vertaling';
|
||||
@@ -4831,43 +4833,43 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Weergave ontgrendelen van pakket';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Beeld verzenden';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Aangepast aan 512 × 512 · het aspectverhouding is niet behouden';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize => 'Oorspronkelijk';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'Op de lucht';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Kwaliteit';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
String get imageSend_qualityStandard => 'Standaard';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Hoog';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Pakketten';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Tijd op de lucht';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Belasting';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pakketten',
|
||||
one: 'pakket',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4881,145 +4883,146 @@ class AppLocalizationsNl extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Radio-instellingen onbekend';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Verbinding maken met een apparaat zodat de uitzendtijd kan worden berekend.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Lange transmissie';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Dit houdt de kanaal ongeveer voor $duration stand.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Overstromingsrouting: elke repeater binnen bereik herzendsends elk pakket opnieuw, waardoor het kanaal langer bezig blijft dan dit.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Herstelpakket';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Een extra pakje. Groepsberichten worden niet bevestigd, waardoor de ontvanger het beeld kan herstellen als een enkel pakket verloren gaat.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Stuur';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Annuleren';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => 'Dit beeld kon niet worden gecodeerd.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Het beeldmodel wordt nog steeds gedownload.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'Het verzenden van een afbeelding is niet mogelijk op dit apparaat.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'Boodschappen met afbeeldingen zijn uitgeschakeld in de instellingen.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Dit radio kan geen beeldpakketten verzenden. Verbind een apparaat met de bijbehorende firmware versie 13 of nieuwer.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Afbeeldingen worden verzonden als groepsgegevens, dus ze kunnen alleen naar een kanaal worden gestuurd — niet via een directe boodschap.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Die afbeelding werd gecodeerd in meer pakketten dan het mesh-formaat toelaat.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pakketten',
|
||||
one: 'pakket',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Afbeelding verzonden als $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'Het beeld kon niet worden verzonden: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Beeld verzenden — pakket $sent van $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Knipper $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '$received van de $total pakketten';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Wachten op het ontcijferen';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Tik om te decoderen';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Herstellen… ongeveer 1 seconde';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Afbeelding onvolledig — $received van $total pakketten ontvangen';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt =>
|
||||
'Afbeelding kon niet worden gereconstrueerd';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Beeld ontvangen — beeldontcipheringsapparatuur is uitgeschakeld';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Afbeelding niet langer opgeslagen';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Probeer het opnieuw';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Decode opnieuw';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Inricht';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Tik om te verwerken';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pakketten',
|
||||
one: 'pakket',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds seconden';
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -372,42 +372,44 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
'Ustawienia radia zostały zaktualizowane';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Regiony';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle =>
|
||||
'Zarządzanie zapisanymi regionami';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Zarządzanie Regionami';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Wprowadź nazwę regionu';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Dodaj region';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => 'Pobierz regiony z repeaterów';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail =>
|
||||
'Nie znaleziono żadnych regionów';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Ten region został już dodany';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Nazwa Regionu';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Region usunięto';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Usuń Region';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Czy usunąć \"$region\" z listy regionów?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -627,10 +629,10 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
String get settings_infoChannelCount => 'Liczba kanałów';
|
||||
|
||||
@override
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
String get settings_infoHardware => 'Sprzęt';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
String get settings_infoFirmware => 'Oprogramowanie wbudowane';
|
||||
|
||||
@override
|
||||
String get settings_presets => 'Presety';
|
||||
@@ -749,16 +751,16 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
String get appSettings_languageUk => 'Ukraińska';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 bajt';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bity';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bajty';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bajty';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing => 'Włącz śledzenie wiadomości';
|
||||
@@ -908,7 +910,7 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3,0-4,2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'Bateria LiPo HV (3,0-4,35 V)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Wyświetlanie mapy';
|
||||
@@ -1434,13 +1436,13 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Region: brak';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Wybierz region';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Przejrzyste obszar';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Brak jeszcze wiadomości';
|
||||
@@ -1499,13 +1501,13 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
String get chat_sendGif => 'Wyślij GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Wyślij obraz';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Nie mogłem otworzyć tego obrazu';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Otrzymano GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Odpowiedz';
|
||||
@@ -2747,38 +2749,39 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
'Bajty używane do kodowania identyfikatora tego repeatera w tagach ścieżki flood/wykrywania pętli. 0=1 bajt (256 identyfikatorów, do 64 skoków), 1=2 bajty (65 000 identyfikatorów, do 32 skoków), 2=3 bajty (16 milionów identyfikatorów, do 21 skoków). Firmware sprzed v1.14 zawsze używał ścieżek 1-bajtowych; v1.14 i nowsze można skonfigurować na ścieżki 2- lub 3-bajtowe.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Zmiana kluczy tożsamości';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Zmień parę kluczy publiczną/prywatną';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Klucz prywatny';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Nowy klucz prywatny dla wzmacniacza, 128-znakowa string hexadecyimalny.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Wygeneruj losowy klucz parowy';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey =>
|
||||
'Przerwij wyszukiwanie kluczowego paru';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Klucz publiczny';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'To jest klucz publiczny, który odpowiada wygenerowanemu kluczowi prywatnemu. Nie można go ustawić bezpośrednio.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Pożądane przedrostek';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Znajdź klucz publiczny, który zaczyna się od tych cyfr hex. Oczekiwana liczba prób: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4549,41 +4552,42 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
String get translation_title => 'Tłumaczenie';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Włącz wiadomości ze zdjęciami';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Przesyłaj zdjęcia przez siatkę. Wymaga jednorazowego pobrania modelu obrazu.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Model obrazowy';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Pobierz';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Anuluj';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Usuń model';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Gotowy';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Nie opublikowane — ten build nie może tego pobrać.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Model obrazowy nie mógł zostać pobrany.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle =>
|
||||
'Obrazki są przetwarzane automatycznie.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Odbuduj każde zdjęcie, jak tylko przyjdzie. Zużywa około 2 GB pamięci za każdą drugą sekundę; wyłącz odbudowywanie jednym dotknięciem.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Włącz tłumaczenie';
|
||||
@@ -4875,32 +4879,32 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Przestań śledzić pakiet';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Wyślij obraz';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Zmniejszone do 512 × 512 · proporcje nie zostały zachowane';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize => 'Oryginalny';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'W eterze';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Jakość';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Wysoko';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Pakiet';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Czas w eterze';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
@@ -4910,8 +4914,8 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pakietów',
|
||||
one: 'pakiet',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4925,149 +4929,149 @@ class AppLocalizationsPl extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Ustawienia radia nieznane';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Połącz urządzenie, aby można było obliczyć czas trwania transmisji.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Długa transmisja';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Ten kanał będzie dostępny przez około $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Przepływ pakietów: każdy retransmitujący w zasięgu przekazuje każdy pakiet, przez co kanał pozostaje zajęty dłużej niż ten czas.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Pakiet odzysku';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Jedna dodatkowa paczka. Wiadomości grupowe nie są potwierdzane, dzięki czemu odbiorca może odbudować obraz, jeśli zostanie utracona pojedyncza paczka.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Wyślij';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Anuluj';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => 'Ten obraz nie mógł zostać zakodowany.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Model obrazowy jest nadal pobierany.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'Wysyłanie obrazu nie jest dostępne na tym urządzeniu.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'Wiadomości ze zdjęciami są wyłączone w ustawieniach.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Ten radiodysk nie może wysyłać pakietów obrazu. Podłącz urządzenie z oprogramowaniem firmware 13 lub nowszym.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Obrazy są przesyłane jako dane grupowe, więc można je wysłać tylko do kanału — nie w wiadomości prywatnej.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Obraz zakodowany do więcej pakietów niż pozwala format siatki.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pakietów',
|
||||
one: 'pakiet',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Obraz wysłany jako $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'Obraz nie mogł zostać wysłany: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Wysyłanie obrazu — pakiet $sent z $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Węzeł $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return 'Otrzymano: $received z $total pakietów';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Oczekiwanie na rozszyfrowanie';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Kliknij, aby odszyfrować';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Odtwarzanie… około 1 sekundy';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Obraz niepełny — $received z $total pakietów dotarło';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => 'Obraz nie może zostać zrekonstruowany';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Otrzymano obraz — dekodowanie obrazu jest nieprawidłowe.';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Obraz nie jest już przechowywany';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Spróbuj ponownie';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Zdekoduj ponownie';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Ustaw';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Kliknij, aby przetworzyć';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pakiety',
|
||||
one: 'pakiet',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes bajtów · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds sekund';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes minut $seconds sekundy';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -370,42 +370,43 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
'Configurações de rádio atualizadas';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Regiões';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle => 'Gerenciar regiões armazenadas';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Gestão de Região';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Nome da região';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Adicionar região';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions =>
|
||||
'Regiões de obtenção a partir de repetidores';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail => 'Nenhuma região foi encontrada';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Esta região já foi adicionada';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Nome da Região';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Região excluída';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Excluir Região';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Remover \"$region\" da lista de regiões?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -905,7 +906,7 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3,0-4,2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3,0-4,35V)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Exibição do Mapa';
|
||||
@@ -1418,17 +1419,17 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return 'Região: $region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Região: nenhuma';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Escolha uma região';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Região desimpedida';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Ainda não existem mensagens.';
|
||||
@@ -1486,13 +1487,13 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get chat_sendGif => 'Enviar GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Enviar imagem';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Não consegui abrir essa imagem';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Recebi um GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Responder';
|
||||
@@ -2732,38 +2733,39 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
'Bytes usados para codificar o ID deste repetidor nas tags de caminho flood/detecção de loop. 0=1 byte (256 IDs, até 64 saltos), 1=2 bytes (65.000 IDs, até 32 saltos), 2=3 bytes (16 milhões de IDs, até 21 saltos). O firmware anterior à v1.14 sempre usava caminhos de 1 byte; v1.14 e versões mais recentes podem ser configuradas para caminhos de 2 ou 3 bytes.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Alterar Chaves de Identidade';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Altere a chave pública/chave privada';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Chave privada';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Uma nova chave privada para o repetidor, uma string hexadecimal de 128 caracteres.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Gere um par de chaves aleatório';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey =>
|
||||
'Interrompa a busca por par de chaves';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Chave pública';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Esta é a chave pública que acompanha a chave privada gerada. Você não pode definir isso diretamente.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Prefixo desejado';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Encontre uma chave pública que comece com esses dígitos hexadecimais. Número esperado de tentativas: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4527,41 +4529,42 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get translation_title => 'Tradução';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Mensagens de imagem';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Envie as imagens pela malha. Requer o download de um modelo de imagem único.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Modelo de imagem';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Cancelar';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Remover modelo';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Pronto';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Ainda não publicado — esta versão não pode baixá-lo.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'O modelo de imagem não pôde ser baixado.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle =>
|
||||
'Processar imagens automaticamente';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Reconstrua cada imagem assim que ela chegar. Utiliza cerca de 2 GB de memória por segundo; dispense a reconstrução com um toque.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Ativar a tradução';
|
||||
@@ -4847,43 +4850,43 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Liberar vista do pacote';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Enviar imagem';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Redimensionado para 512 × 512 · a proporção de aspecto não foi preservada';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize => 'Texto Original';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'Ao ar';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Qualidade';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
String get imageSend_qualityStandard => 'Padrão';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Alto';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Pacotes';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Tempo em transmissão';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Carga útil';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pacotes',
|
||||
one: 'pacote',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4897,149 +4900,150 @@ class AppLocalizationsPt extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle =>
|
||||
'Configurações de rádio desconhecidas';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Conecte-se a um dispositivo para que o horário de transmissão possa ser calculado.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Transmissão longa';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Isso manterá o canal por cerca de $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Roteamento de inundação: cada repetidor na faixa retransmite cada pacote, fazendo com que o canal permaneça ocupado por mais tempo do que isso.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Pacote de recuperação';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Um pacote extra. As mensagens em grupo não são reconhecidas, assim permitindo que o destinatário reconstrua a imagem caso um pacote seja perdido.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Enviar';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Cancelar';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => 'Esta imagem não pode ser codificada.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'O modelo de imagem ainda está baixando.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'O envio de imagem não está disponível neste dispositivo.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'As mensagens de imagem estão desativadas nas configurações.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Este rádio não pode enviar pacotes de imagem. Conecte um dispositivo com firmware companheiro versão 13 ou superior.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'As imagens viajam como dados em grupo, portanto, só podem ser enviadas para um canal — não em mensagem direta.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Essa imagem foi codificada em mais pacotes do que o formato de malha permite.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pacotes',
|
||||
one: 'pacote',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Imagem enviada como $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'A imagem não pôde ser enviada: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Envio da imagem — pacote $sent de $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Nó $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '$received de $total pacotes';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Aguardando para decodificar';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Toque para decodificar';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Reconstruindo… cerca de 1 segundo';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Imagem incompleta — $received de $total pacotes chegaram';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => 'A imagem não pôde ser reconstruída';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Imagem recebida — decodificação de imagem incorreta';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Imagem não armazenada';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Tente novamente';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Decodifique novamente';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Configurar';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Toque para processar';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'pacotes',
|
||||
one: 'pacote',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds segundos';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes min $seconds s';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -369,42 +369,45 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => 'Настройки радио обновлены';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Регионы';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle =>
|
||||
'Управление сохранёнными регионами';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Управление регионами';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Введите название региона';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Добавить регион';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions =>
|
||||
'Извлекать регионы с ретрансляторов';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail =>
|
||||
'Не были найдены никакие регионы';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Этот регион уже был добавлен';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Название региона';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Регион удалён';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Удалить регион';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Удалить \"$region\" из списка регионов?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -624,10 +627,11 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get settings_infoChannelCount => 'Количество каналов';
|
||||
|
||||
@override
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
String get settings_infoHardware => 'Оборудование';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
String get settings_infoFirmware =>
|
||||
'Производственное программное обеспечение';
|
||||
|
||||
@override
|
||||
String get settings_presets => 'Пресеты';
|
||||
@@ -746,16 +750,16 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get appSettings_languageUk => 'Українська';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 байт';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 байта';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 байта';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 байта';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing =>
|
||||
@@ -907,7 +911,7 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3.0–4.2 В)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3,0–4,35 В)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Отображение карты';
|
||||
@@ -1419,17 +1423,17 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return 'РЕГИОН: $region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Регион: отсутствует';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Выберите регион';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Чистый регион';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Сообщений пока нет';
|
||||
@@ -1487,13 +1491,13 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get chat_sendGif => 'Отправить GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Отправьте изображение';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Не удалось открыть это изображение';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Получен GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Ответить';
|
||||
@@ -2737,38 +2741,38 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
'Байты, используемые для кодирования идентификатора этого ретранслятора в тегах flood-маршрута/обнаружения циклов. 0 = 1 байт (256 идентификаторов, до 64 переходов), 1 = 2 байта (65 000 идентификаторов, до 32 переходов), 2 = 3 байта (16 миллионов идентификаторов, до 21 перехода). Прошивки до v1.14 всегда использовали 1-байтовые маршруты; v1.14 и новее можно настроить на 2- или 3-байтовые маршруты.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Изменить ключи идентичности';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Измените пару публичных/частных ключей';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Личный ключ';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Для повторителя генерируется новый приватный ключ — шестнадцатеричная строка из 128 символов.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Сгенерируйте случайный ключ-пару';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey => 'Прервать поиск ключной пары';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Публичный ключ';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Это публичный ключ, который соответствует сгенерированному приватному ключу. Вы не можете установить его напрямую.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Желаемый префикс';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Найдите публичный ключ, начинающийся этими шестнадцатеричными цифрами. Ожидаемое количество попыток: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4543,41 +4547,42 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get translation_title => 'Перевод';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Включить изображения в сообщения';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Отправьте изображения через сеть. Требуется однократная загрузка шаблона изображения.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Модель изображения';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Скачать';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Отмена';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Удалить модель';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Готов';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Пока не опубликовано — эта сборка не может скачать это.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Модель изображения не удалось скачать.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle =>
|
||||
'Автоматически обрабатывать изображения';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Примерно каждое изображение реконструируйте сразу после его поступления. Для этого на каждый раз используется около 2 ГБ памяти; отключите реконструкцию касанием.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Включить перевод';
|
||||
@@ -4867,43 +4872,45 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Не следить за пакетом';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Отправьте изображение';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Меняется размер на 512 × 512 · соотношение сторон не сохраняется';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize => 'Оригинал';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'В эфире';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Качество';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
String get imageSend_qualityStandard => 'Стандарт';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Высота';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Пакеты';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Время на эфире';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Пакет';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'пакета',
|
||||
many: 'пакетов',
|
||||
few: 'пакета',
|
||||
one: 'пакет',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4917,149 +4924,150 @@ class AppLocalizationsRu extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Настройки радио неизвестны';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Подключитесь к устройству, чтобы можно было рассчитать время эфирного времени.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Долгая передача';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Это будет поддерживать канал примерно $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Руководство по маршрутизации потоков: каждый ретрансатор в зоне перераспределяет каждый пакет, поэтому канал остаётся занятным дольше, чем это.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Пакет восстановления';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Один дополнительный пакет. Групповые сообщения не подтверждаются, поэтому это позволяет получателю восстановить изображение, если один пакет потерян.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Отправить';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Отмена';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed =>
|
||||
'Это изображение не может быть закодировано.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Модель изображения всё ещё загружается.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'Отправка изображения на этом устройстве недоступна.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'В настройках отключены сообщения с изображениями.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Это радио не может отправлять пакеты изображений. Подключите устройство, работающее на прошивке-компаньоне версии 13 или выше.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Изображения передаются как групповые данные, поэтому их можно отправлять только в канал, а не в личное сообщение.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Изображение было закодировано в больше пакетов, чем позволяет формат сетки.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'пакетов',
|
||||
one: 'пакет',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Изображение отправлено как $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'Изображение не может быть отправлено: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Отправка изображения — пакет $sent из $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Узел $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '$received из $total пакетов';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Ожидание расшифровки';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Нажмите для декодирования';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Реконструкция… примерно за 1 секунду';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Отсутствует изображение — $received из $total пакетов пришло';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => 'Изображение не может быть восстановлено';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Получен изображение — декодирование изображения неправильное';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Изображение больше не сохраняется';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Попробуйте снова';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Декодируйте снова';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Настройте';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Нажмите для обработки';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'пакетов',
|
||||
one: 'пакет',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes байт · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds секунд';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes м $seconds с';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,42 +368,42 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => 'Nastavenia rádia aktualizované';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Regiony';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle => 'Zohľať uložené regiony';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Regiónne vedenie';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Vstuptejte název regionu';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Dodajte region';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => 'Odberanie regionov z repeaterov';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail => 'Nebylo našli žiadné regiony';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Tento oblast je už dodán';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Regionné název';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Regionu zníteno';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Vyniknúcia regionu';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Odstraniť $region z listy regionov?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -740,16 +740,16 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
String get appSettings_languageUk => 'Ukrajinská';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byt';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bity';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bity';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bity';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing => 'Povoliť sledovanie správ';
|
||||
@@ -1412,13 +1412,13 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Region: žiadné';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Vyberte region';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Jasný údajný oblasť';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Zatiaľ žiadne správy.';
|
||||
@@ -1476,13 +1476,13 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
String get chat_sendGif => 'Odoslať GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Vyslat obraz';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Nesmiela jsem otvoriť tento obrázok';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Odeslaný GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Odpovedať';
|
||||
@@ -2718,38 +2718,39 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
'Bajty použité na zakódovanie ID tohto opakovača v tagoch flood trasy/detekcie slučky. 0=1 bajt (256 ID, až 64 skokov), 1=2 bajty (65 000 ID, až 32 skokov), 2=3 bajty (16 miliónov ID, až 21 skokov). Firmvér pred v1.14 vždy používal 1-bajtové trasy; v1.14 a novšie možno nakonfigurovať na 2- alebo 3-bajtové trasy.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Zmena identititačných klíčov';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Zmena prehľadného/osobného klíčového zbraň';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Prívatná klíč';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Nová prívna klíčová číslo pre repeater, 128-znáčlový šestnáctorýč.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Vytvorenie príma kľúčového paru';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey =>
|
||||
'Prerušenie hľadania klíčového paru';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Táto je veľká klíč, ktorý sa vztahuje s generovaným manéčným klíčom. Nemožné je to ustanovit priateľne.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Požadovaný prefiks';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Zahľadnite sa veľkú publicenu klíču, ktorá začíná tými šestícih štiastkami. Očekivané potrebné pokusy: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4508,41 +4509,41 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
String get translation_title => 'Preklad';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Zabezpečte zobrazi';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Odeslanie obrazov pre mšťanie. Potrebujete jednorazové stáhnutie modelu obrazov.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Model v kínajme';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Stáhnie';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Zastavenie';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Vyhniť model';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Čiačný';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Nesprávne vypisáné — tento prechovka nie môže jej stáhnuť.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Model s obrázkom nemôžno sťažovať.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle => 'Automaticky prepojiť slučaje.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Rekonstruujte každý obraz tak, ako pridá. Používajete okolo 2 GB pamäti pre drugú hodinu; odložte rekonstrukciu tým kliknutím.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Aktivovať preklad';
|
||||
@@ -4831,43 +4832,44 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Odomknúť pohľad od paketu';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Vyslat obraz';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Zmeneno na 512 × 512 · vzorýst nie byl zachovan';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize =>
|
||||
'Výborný text:\n\n\"Language is the road map of a culture. It tells us where to go as a society and helps us understand the world around us. Learning a new language opens up new perspectives and opportunities, allowing us to connect with people from different backgrounds and build bridges between cultures.\"\n\nSlovenská preklada:\n\n\"Jazyk je cesta pre zručnosti a odráža kultúru. Dá nám uvedomi, dokádať, kúdy sa pohladneme a pomáha našej společnosti poradiť sa v rôznych okolnosti a porozumieť o svetu kolem nás. Nauka nového jazyka otviera nové perspektívy a možnosti, čo pohybuje našu schopnosť sa spoluprávať s ľudmi z rôznych okolnosti a budovať mosty medzi kultúry.\"';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'V prúce';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Kvalita';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
String get imageSend_qualityStandard => 'Stándard';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Vysoká';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Pakety';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Čas na anteni';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Základ';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paketov',
|
||||
one: 'paket',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4881,140 +4883,140 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Nastavenia radio nezná';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Zkonečte s určým prijemcem, aby sa mohlo výpočet času, ktorý je v prúbežu.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Dlouhá transmisia';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Tento dôvod udrží kanál priamo na $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Povodný routing: každý repeater v rozsahu zrňa každý paket, takže kanál zostá zajetší dlouше, než tu.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Poučný paket pre očudenie';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Jedný dodatný paket. Skúsené súhlasy nie sa uznávaú, takže to umožňuje prechovávaču opraviť obraz, pokiaľ sa jedný paket niebyl ztrácený.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Odeslať';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Zastavenie';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => 'Tento obráz nie byla byla schována.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Model prehľadovania prebeža stále stále stále prechádza.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'Zobrazenie nie je dostupný na tomto zariadení.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'Zobrazy s prešteľkami sú v nastavení vypnené.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Tento radiok nie môže odeslať obrazové pakety. Podeďte správne určité zařízení s oprogramovaním spolupráce 13 alebo novším.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Obrazy sa prechádzajú jako skupinové údaje, preto sa ich môžu odeslať len na kanál — nie v príbeh sa.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Tento obraz byl skodyrovany do viac paketov, ako umožňuje si sítka format.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paketov',
|
||||
one: 'paket',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Obrázok odoslaný ako $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'Obraz nemôžlo odeslať: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Vysyťanie obrazu — pakét $sent z $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Vęzlo $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return 'Otrzymané $received z $total pakotí';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Čekanie na dekódovanie';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Kliknite, aby dekódovať';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Rekonstrukcia… o čoľve 1 s';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Obraz nieješťajný — $received z $total paciek príšlo';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => 'Obraz nemôžu byť prepojený';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Otrzymaná slúba — dekódovanie slúby je vypadejce';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Obraz nemá uložený';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Zkôr to opítajte';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Zdeľte sa znovu';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Založte';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Ukliknite, aby sa príjomili';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paketov',
|
||||
one: 'paket',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes bajtov · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -5024,6 +5026,6 @@ class AppLocalizationsSk extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes min $seconds s';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -367,42 +367,43 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => 'Radio nastavitve posodobljene';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Regioni';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle => 'Upravljanje opisanih regionov';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Regijonsko upravljanje';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Naslov občine';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Dodaj region';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions =>
|
||||
'Pobražujte izvajne področja iz ponavljalnikov';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail => 'Nižnih občin ni izkrali';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Taj oblasi je več pomanjkan.';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Naziv Regiona';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Oblikačena regija';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Prihoda Region';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Ostani $region iz listy regionov?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -617,10 +618,10 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get settings_infoChannelCount => 'Število kanalov';
|
||||
|
||||
@override
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
String get settings_infoHardware => 'Hardver';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
String get settings_infoFirmware => 'Pravilnik';
|
||||
|
||||
@override
|
||||
String get settings_presets => 'Prednastavitve';
|
||||
@@ -738,16 +739,16 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get appSettings_languageUk => 'Ukrajinsko';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 bajt';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bite';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bite';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bite';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing => 'Omogoči sledenje sporočilom';
|
||||
@@ -896,7 +897,7 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3,0-4,2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3,0–4,35 V)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Prikaz zemljevida';
|
||||
@@ -1406,17 +1407,17 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return 'Osebno: $region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Region: brak';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Vablajte region';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Jasna regija';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Še ni sporočil.';
|
||||
@@ -1475,13 +1476,13 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get chat_sendGif => 'Pošlji GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Sločaji slik';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Nispeval sem tega ta slik';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Otrvljen GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Odgovori';
|
||||
@@ -2714,38 +2715,39 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
'Bajti, uporabljeni za kodiranje ID-ja tega repetitorja v oznakah flood poti/zaznavanja zank. 0=1 bajt (256 ID-jev, do 64 skokov), 1=2 bajta (65.000 ID-jev, do 32 skokov), 2=3 bajti (16 milijonov ID-jev, do 21 skokov). Vdelana programska oprema pred v1.14 je vedno uporabljala 1-bajtne poti; v1.14 in novejše je mogoče nastaviti na 2- ali 3-bajtne poti.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Zmeničke ključe identitete';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Zamenjajte publican ali privatni ključni par';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Privarna ključa';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Nova privatna ključa za prekaznik, 128- znakovni šestnastik.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Sporočna ključna para';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey =>
|
||||
'Prekajanje odkrivanja ključne paro';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Public key (publična ključa)';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Taj je publicna ključ, ki pomeni pripovedno privatno ključ. Ne možeš to vrediti direktno.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Poželana prefiks';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Najdi publicen ključ, ki začne s tih hexnih čitov. Očekivani pokusi: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4507,41 +4509,41 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get translation_title => 'Prevod';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Pozivni izkričile slike';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Prešli vzorce pre mrežo. Potrebno je jednokratno stworiti model vzorca.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Obrazni model';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Storba';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Odločite';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Ubrani model';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Gotov';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Jo še niso izdana — ta izdelka te ne može prebaviti.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Obrazni model ne može biti preuzet.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle => 'Avtomatizirane slike';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Katero je oblikovanje svega oblikov, ko se pošteva. Za drugo okolo časa se koristi ok. 2 GB pamične prostore; odločite se za oblikovanje s tukom.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Omogočite prevod';
|
||||
@@ -4832,43 +4834,44 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Odkleni pogled od paketa';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Sločaji slik';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Zadovoljno izmenjeno na 512 × 512 · vzorovni odnos ne ohranjen';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize =>
|
||||
'Original text:\n\nThe early bird catches the worm.\n\nTranslation:\n\nPojdi prvi, zlati v kroku.';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'Na vodi';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Kakovost';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Vysoko';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Pakete';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Čas v eteru';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Napravo';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paketov',
|
||||
one: 'paket',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4882,140 +4885,140 @@ class AppLocalizationsSl extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Naslušniki radio neznane';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Poučajte se na stroj, da se lahko izračunuje čas v prikazu.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Dluga preposlana';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Ovo bo ohranilo kanal prihodno za obliko $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Povlatni potok: sve repeaterje v območju pretrasirajo svak paket, pa kanál ostane zanudnejši od tega.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Pobavni paket zdržbe';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Jedna dodatna paczka. Grupni izjasi ne izvajajo potvarnosti, pa ta izdelka omogoča preuzimanju ponovno izgleda, če je zgubjen pojedni paket.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Posyłaj';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Odločite';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => 'Ovo slikovo ne more biti zakodirano.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Obrazni model še pospeva preborjanje.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'Poslanje slike nema na tem zelo naročnem naročnem.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
String get imageSend_codecDisabled => 'Obrazi s pomanjkanjem so v nastavnih.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Taj radio ne može posredovati slike pakuete. Prepoštijo izbirni napravnik s kompanijskimi programi na čevem 13 ali novšejšim.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Obrazy se pojavijo kot skupnih podatkov, pa lahko ih poslujejo samo na kanal — ne v prilogih.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Taj slik je zakodiran v viših pakotnih od športne formate, ki omogoča mrežni format.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paketov',
|
||||
one: 'paket',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Slika poslana kot $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'Obraz ne može biti poslany: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Prekazivanje izkaza — paket $sent od $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Vrtitev $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return 'Otrteno od $received na $total poslovanih potokov';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Čekanje, da se dekodira';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Kliknite, da razkrivete';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding =>
|
||||
'Ostvarjanje… o prihodnosti za okolo 1 s';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Obraz nije kompletan — $received od $total poslaničev je prishodil';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => 'Obraz ne more lahko rekonstruirati';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Otrgena slika — dekodirana slika je izključena';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Obraz ni več niso zakajiren';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Pokušajte znova';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Dekodiraj ponovno';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Nastavite';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Kliknij za obravnavanje';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paketov',
|
||||
one: 'paket',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes bajtov · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
@@ -366,42 +366,42 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
'Radioinställningarna har uppdaterats';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Regioner';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle => 'Hämtade regioner';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Regionförvaltning';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Enter regionnamn';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Lag till region';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => 'Hämtar regioner från repeater';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail => 'Ingen region hittades';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Denna region har redan lagt till';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Regionnavn';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Regionens kallt offentlig';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Förhålla regio';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Fjärna \"$region\" ur regionlistan?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -617,7 +617,7 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
String get settings_infoFirmware => 'Föredata';
|
||||
|
||||
@override
|
||||
String get settings_presets => 'Fördefinierade inställningar';
|
||||
@@ -738,13 +738,13 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 byte';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 byte';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 byte';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing => 'Aktivera meddelandespårning';
|
||||
@@ -889,7 +889,7 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3,0-4,2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3,0-4,35 V)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Kartvisning';
|
||||
@@ -1402,13 +1402,13 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Region: ingen';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Välj en region';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'klar region';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Inga meddelanden ännu';
|
||||
@@ -1468,13 +1468,13 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
String get chat_sendGif => 'Skicka GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => 'Send vagnbild';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Kunde inte öppna det bildet';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Mottagit en GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Svara';
|
||||
@@ -2702,38 +2702,38 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
'Byte som används för att koda denna repeaters ID i taggar för flood-väg/loopdetektering. 0=1 byte (256 ID:n, upp till 64 hopp), 1=2 byte (65 000 ID:n, upp till 32 hopp), 2=3 byte (16 miljoner ID:n, upp till 21 hopp). Firmware före v1.14 använde alltid 1-byte-vägar; v1.14 och nyare kan konfigureras för 2- eller 3-byte-vägar.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Ändra identitetsnyckel';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Vänd nya offentliga/privata nyckelpar';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Privat nyckel';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'En ny privat nyckel för repeatern, en hexsträng med 128 tecken.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Generera en kära nyckelpaar';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey => 'Avbröka sökande efter nyckelpa';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Öffentlig nyckel';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Detta är den offentliga nyckeln som tillhör genererad privaten nyckel. Du kan inte setta den direkt.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Önskad prefix';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Hitta en offentlig nyckel som börjar med dessa hexadecimala siffror. Förväntad antal försök: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4480,41 +4480,42 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
String get translation_title => 'Översättning';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Bildermeddelanden';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Send bilder över mönstret. Det kräver en enkelt bildmodellhämtning.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Bildmodell';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Avbud';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Förhåll dig från modellen';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Färdig';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Ingen publikerad än — denna byggnads kan inte laddas ner av det.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Bildmodellen kunde inte laddas ner.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle =>
|
||||
'Automatiska bilder automatiserar';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Rekonstruera varje bild så snart den ankommer. Använder cirka 2 GB minne varje gång; låt det omför att rekonstruera genom ett tap.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Aktivera översättning';
|
||||
@@ -4802,43 +4803,44 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Lås upp vy från paket';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => 'Send vagnbild';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Reserverat till 512 × 512 · förhållandet mellan storlek inte bevarat';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize =>
|
||||
'Ovanstående text (engelska)\n\nTranslation (svenskt):';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'Underför hjärnan';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Kvalitet';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Hög';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Paket';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Tid i övrighet';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Ladning';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paket',
|
||||
one: 'paket',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4852,149 +4854,149 @@ class AppLocalizationsSv extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Radioindikatorer inte kända';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Förkoppna till ett enhet så kan tiden på air beräknas.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Långförsending';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Detta kommer att bevara kanalen roughly $duration.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Flodledning: varje repeater i ramen retransmitterar varje paket, så kan kanalen vara på arbete långare än den här tiden.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Omedlningspaket';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'En ytterligare paket. Gruppmeddelanden inte akceras, så den här tar hänsyn till att mottar kan återuppbygga bilden om ett enkelt paket förlorats.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Sänd';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Avbud';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => 'Denna bild kan inte kodas.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Bildmodellen downloads fortfarande.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'Bildsendning är inte tillgänglig på detta enhet.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'Bildmeddelanden är offna i inställningarna.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Denna radi kan inte senda bildpaket. Använd ett äventyrsgerät med companionsystemfirmware 13 eller nyare.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Bilder senders som gruppod, så de kan endast skickas till ett kanal – inte i en direkt meddelning.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Bilden kodades till mer paket än meshformaten tillåter.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paket',
|
||||
one: 'paket',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Bilden skickades som $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'Bilden kunde inte skickas: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Bild sendning — paket $sent av $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Nod $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return 'VANTA $received av $total paket';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Att väta att decodera';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Tap för att decodera';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Rekonstruktion… om 1 sekund';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Bilden är okomplett — $received av $total paket har ankomit';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => 'Bilden kunde inte rekonstrueras';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Bild mottagen — bilddekoderingen är avbrott';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Bild inte lagrad längre';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Omförs igen';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Kodera igen';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Skapa en uppställning';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Tap för att behandla';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'paket',
|
||||
one: 'paket',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes byte · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds sekunder';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes min $seconds s';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -368,42 +368,42 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => 'Налаштування радіо оновлено';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => 'Ріси';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle => 'Управляти збережених регіонів';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => 'Рégіональний управління';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => 'Назва регіону';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => 'Добачить регіон';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => 'Збираємо регіони з репітерів';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail => 'Ні відкриті регіони';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
'Цей регіон вже було доданий';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => 'Ріонна назва';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => 'Ріон витертений';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => 'Видалення регіону';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return 'Вирішіть \"$region\" з списку регіонів?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -622,10 +622,10 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
String get settings_infoChannelCount => 'Кількість каналів';
|
||||
|
||||
@override
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
String get settings_infoHardware => 'Оборудовання';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
String get settings_infoFirmware => 'Програмне вміст (фirmware)';
|
||||
|
||||
@override
|
||||
String get settings_presets => 'Попередні налаштування';
|
||||
@@ -743,16 +743,16 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
String get appSettings_languageUk => 'Українська';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 байт';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 байти';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 байти';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 байта';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing =>
|
||||
@@ -901,7 +901,7 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => 'LiPo (3.0-4.2В)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => 'ЛиPo HV (3,0-4,35 В)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => 'Відображення карти';
|
||||
@@ -1412,17 +1412,17 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return 'Ріон: $region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => 'Ріон: нема';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => 'Вybірте регіон';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => 'Чистя зона';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => 'Поки немає повідомлень.';
|
||||
@@ -1481,13 +1481,14 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
String get chat_sendGif => 'Надіслати GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage =>
|
||||
'Нашкоду зовні\n\n(or more naturally, depending on context)\n\nПошукуєте изображення';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => 'Неможливо відкрити це изображення';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => 'Підймовано GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => 'Відповісти';
|
||||
@@ -2734,38 +2735,38 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
'Байти, що використовуються для кодування ідентифікатора цього ретранслятора в тегах flood-шляху/виявлення петель. 0=1 байт (256 ідентифікаторів, до 64 переходів), 1=2 байти (65 000 ідентифікаторів, до 32 переходів), 2=3 байти (16 мільйонів ідентифікаторів, до 21 переходу). Прошивки до v1.14 завжди використовували 1-байтові шляхи; v1.14 і новіші можна налаштувати на 2- або 3-байтові шляхи.';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => 'Зміна ключів ідентифікації';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
'Замініть публічний/приватний ключ';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => 'Приватний ключ';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
'Нова приватна ключ для репітера, 128-символова штучна штука в шестнадцатеричному форматі.';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => 'Синхронізujте ключовий пару';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey => 'Прервити шук ключового пару';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => 'Публічна ключ';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
'Це публична ключ, який пов\'язано з створеною приватною ключом. Ви не можете встановлювати його напрямую.';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => 'Високорейтингове прикінання';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return 'Найдіть відповідний открытий ключ, який починається ціми шестнадцатыми цифрами. Ожидається кількість потрібних попыток: $tries.';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4540,41 +4541,41 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
String get translation_title => 'Переклад';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => 'Підтримка зображень для посилання';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
'Пошукуєте изображення через сеть. Вимagaєте однократне скачання моделю изображення.';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => 'Модель для зображень';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => 'Скачання';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => 'Завершити';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => 'Видалим модель';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => 'Готово';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
'Щоб не було опубліковано — це версія не дозволяє зробити скачання.';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
'Модель для зображень не можна сказати.';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle => 'Автоматично оброблювати obraзи';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'Кожна картинка повинні бути відтворена на мій момент прибуття. Використовує приблизно 2 ГБ пам\'яті на кожен раз; відключіть від відтворення за допомогою кlikу.';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => 'Увімкнути переклад';
|
||||
@@ -4867,43 +4868,46 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => 'Відв\'язати вигляд від пакету';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title =>
|
||||
'Нашкоду зовні\n\n(or more naturally, depending on context)\n\nПошукуєте изображення';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
'Манітовано до 512 × 512 · соотношення варість не зберігається';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize => 'Оригінал';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => 'На ері';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => 'Качество';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
String get imageSend_qualityStandard => 'Стандарт';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => 'Висок';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => 'Пакети';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => 'Час на ері';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => 'Підлог';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'пакета',
|
||||
many: 'пакетів',
|
||||
few: 'пакети',
|
||||
one: 'пакет',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4917,149 +4921,150 @@ class AppLocalizationsUk extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => 'Настройки радио неизвестні';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
'Залучіться до пристрою, щоб можна було розрахунювати час в етері.';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => 'Длуга передача';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return 'Це забезпечить канал на approximativno $duration хвилин.';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
'Рухування потоків: кожен ретрансатор у діапазоні відправлює кожен пакет, тому канал залишається занятшим довше, ніж це.';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => 'Пакет відновлення';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'Один дополний пакет. Групові посилання не відповідають, тому це дозволяє відвідувачу відтворити зображення, якщо один пакет втрачений.';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => 'Пошутить';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => 'Завершити';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed =>
|
||||
'Це изображення не може бути кодировано.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
'Модель для відтворення изображень ще збирається.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
'Постій для відправлення изображень на цьому пристрої не доступний.';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
'Пictesovani posyly wyключені в настройках.';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'Цей радіопередач не може отправляти пакети зображень. Зконнете пристрої, що працює з обладнанням керемонітом компаньєр 13 або новшим.';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'Фотографії передаються як дані групою, тому їх можна відправляти лише на канал — не в прямому посилання.';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
'Це изображення кодує більше пакітів, ніж дозволяє формат сети.';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'пакетів',
|
||||
one: 'пакет',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return 'Зображення надіслано як $count $_temp0.';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return 'Изображення не можна відправити: $error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return 'Пошускаємо изображення — пакет $sent з $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return 'Нод $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return 'Підходяче: $received з $total пакітів';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => 'Очікування розслівання коду';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => 'Кliknite для декодування';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => 'Повноювання… за прибуття 1 с.';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return 'Образок не повний — $received з $total пакітів прибавлено';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => 'Obraz не можна відтворити';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
'Під час приємки — розшифровка зображення не вдалося.';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => 'Изображення не зберігається';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => 'Попробуй ще раз';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => 'Декодуй ще раз';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => 'Заведіть';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => 'Кликніть для обробки';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: 'пакетів',
|
||||
one: 'пакет',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes байтів · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds секунди';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes хв $seconds с';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -351,42 +351,41 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
String get settings_radioSettingsUpdated => '无线电设置已更新';
|
||||
|
||||
@override
|
||||
String get settings_regionSettings => 'Regions';
|
||||
String get settings_regionSettings => '地区';
|
||||
|
||||
@override
|
||||
String get settings_regionSettingsSubtitle => 'Manage stored regions';
|
||||
String get settings_regionSettingsSubtitle => '管理已存储的区域';
|
||||
|
||||
@override
|
||||
String get settings_regionManagement_screenTitle => 'Region Management';
|
||||
String get settings_regionManagement_screenTitle => '区域管理';
|
||||
|
||||
@override
|
||||
String get settings_regionNameHint => 'Enter region name';
|
||||
String get settings_regionNameHint => '区域名称';
|
||||
|
||||
@override
|
||||
String get settings_regionAddRegion => 'Add region';
|
||||
String get settings_regionAddRegion => '增加地区';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegions => 'Fetch regions from repeaters';
|
||||
String get settings_regionFetchRegions => '从中继器获取区域';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsFail => 'No regions were found';
|
||||
String get settings_regionFetchRegionsFail => '未发现任何地区';
|
||||
|
||||
@override
|
||||
String get settings_regionFetchRegionsAlreadyExists =>
|
||||
'This region has already been added';
|
||||
String get settings_regionFetchRegionsAlreadyExists => '该地区已被添加';
|
||||
|
||||
@override
|
||||
String get settings_regionName => 'Region Name';
|
||||
String get settings_regionName => '地区名称';
|
||||
|
||||
@override
|
||||
String get settings_regionDeleted => 'Region deleted';
|
||||
String get settings_regionDeleted => '区域已删除';
|
||||
|
||||
@override
|
||||
String get settings_deleteRegion => 'Delete Region';
|
||||
String get settings_deleteRegion => '删除区域';
|
||||
|
||||
@override
|
||||
String settings_deleteRegionConfirm(String region) {
|
||||
return 'Remove \"$region\" from region list?';
|
||||
return '从 $region 列表中删除?';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -588,10 +587,10 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
String get settings_infoChannelCount => '频道数量';
|
||||
|
||||
@override
|
||||
String get settings_infoHardware => 'Hardware';
|
||||
String get settings_infoHardware => '硬件';
|
||||
|
||||
@override
|
||||
String get settings_infoFirmware => 'Firmware';
|
||||
String get settings_infoFirmware => '固件';
|
||||
|
||||
@override
|
||||
String get settings_presets => '预设';
|
||||
@@ -708,16 +707,16 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
String get appSettings_languageUk => '乌克兰语';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 byte';
|
||||
String get repeater_pathHashModeOption0 => '0 - 1 字节';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 bytes';
|
||||
String get repeater_pathHashModeOption1 => '1 - 2 字节';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 bytes';
|
||||
String get repeater_pathHashModeOption2 => '2 - 3 字节';
|
||||
|
||||
@override
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 bytes';
|
||||
String get repeater_pathHashModeOption3 => '3 - 4 字节';
|
||||
|
||||
@override
|
||||
String get appSettings_enableMessageTracing => '启用消息追踪';
|
||||
@@ -844,7 +843,7 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
String get appSettings_batteryLipo => '锂聚合物电池 (3.0-4.2V)';
|
||||
|
||||
@override
|
||||
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
|
||||
String get appSettings_batteryLipoHv => '锂多压电源(3.0-4.35伏)';
|
||||
|
||||
@override
|
||||
String get appSettings_mapDisplay => '地图显示';
|
||||
@@ -1335,17 +1334,17 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
|
||||
@override
|
||||
String channels_regionSetTo(String region) {
|
||||
return 'Region: $region';
|
||||
return '地区:$region';
|
||||
}
|
||||
|
||||
@override
|
||||
String get channels_regionNotSet => 'Region: none';
|
||||
String get channels_regionNotSet => '地区:无';
|
||||
|
||||
@override
|
||||
String get channels_regionSelect_Title => 'Select a region';
|
||||
String get channels_regionSelect_Title => '选择一个地区';
|
||||
|
||||
@override
|
||||
String get channels_clearRegion => 'Clear region';
|
||||
String get channels_clearRegion => '无碍区域';
|
||||
|
||||
@override
|
||||
String get chat_noMessages => '暂无消息';
|
||||
@@ -1403,13 +1402,13 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
String get chat_sendGif => '发送 GIF';
|
||||
|
||||
@override
|
||||
String get chat_sendImage => 'Send image';
|
||||
String get chat_sendImage => '发送图片';
|
||||
|
||||
@override
|
||||
String get chat_imagePickFailed => 'Couldn\'t open that image';
|
||||
String get chat_imagePickFailed => '无法打开该图片';
|
||||
|
||||
@override
|
||||
String get chat_receivedGif => 'Received a GIF';
|
||||
String get chat_receivedGif => '收到一个GIF';
|
||||
|
||||
@override
|
||||
String get chat_reply => '回复';
|
||||
@@ -2589,38 +2588,35 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
'用于在洪泛路径/环路检测标签中编码此中继器 ID 的字节数。0=1 字节(256 个 ID,最多 64 跳),1=2 字节(65K 个 ID,最多 32 跳),2=3 字节(16M 个 ID,最多 21 跳)。v1.14 之前的固件始终使用 1 字节路径;v1.14 及更新版本可配置为 2 或 3 字节路径。';
|
||||
|
||||
@override
|
||||
String get repeater_keySettings => 'Change Identity Keys';
|
||||
String get repeater_keySettings => '更改身份密钥';
|
||||
|
||||
@override
|
||||
String get repeater_keySettingsSubtitle =>
|
||||
'Change the public/private keypair';
|
||||
String get repeater_keySettingsSubtitle => '更换公钥/私钥对';
|
||||
|
||||
@override
|
||||
String get repeater_prvKey => 'Private key';
|
||||
String get repeater_prvKey => '私钥';
|
||||
|
||||
@override
|
||||
String get repeater_prvKeyHelper =>
|
||||
'A new private key for the repeater, a 128-character hex string.';
|
||||
String get repeater_prvKeyHelper => '中继器的新私钥,为一个128位的十六进制字符串。';
|
||||
|
||||
@override
|
||||
String get repeater_generatePrvKey => 'Generate a random keypair';
|
||||
String get repeater_generatePrvKey => '生成一个随机的密钥对';
|
||||
|
||||
@override
|
||||
String get repeater_stopGeneratingPrvKey => 'Interrupt search for keypair';
|
||||
String get repeater_stopGeneratingPrvKey => '中断密钥对搜索';
|
||||
|
||||
@override
|
||||
String get repeater_pubKey => 'Public key';
|
||||
String get repeater_pubKey => '公钥';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyHelper =>
|
||||
'This is the public key that goes with the generated private key. You can\'t set this directly.';
|
||||
String get repeater_pubKeyHelper => '这是与生成的私钥配对的公钥。您不能直接设置此内容。';
|
||||
|
||||
@override
|
||||
String get repeater_pubKeyPrefix => 'Desired prefix';
|
||||
String get repeater_pubKeyPrefix => '期望的前缀';
|
||||
|
||||
@override
|
||||
String repeater_pubKeyPrefixHelper(int tries) {
|
||||
return 'Find a public key that starts with these hex digits. Expected tries needed: $tries.';
|
||||
return '找到一组以这些十六进制数字开头的公钥。预计尝试次数:$tries';
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -4197,41 +4193,38 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
String get translation_title => '翻译';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableTitle => 'Enable image messages';
|
||||
String get imageMessages_enableTitle => '启用图片消息';
|
||||
|
||||
@override
|
||||
String get imageMessages_enableSubtitle =>
|
||||
'Send images over the mesh. Requires a one-time image model download.';
|
||||
String get imageMessages_enableSubtitle => '通过网格发送图像。需要一次性下载图像模型。';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelSectionTitle => 'Image model';
|
||||
String get imageMessages_modelSectionTitle => '图像模型';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadModel => 'Download';
|
||||
String get imageMessages_downloadModel => '下载';
|
||||
|
||||
@override
|
||||
String get imageMessages_cancelDownload => 'Cancel';
|
||||
String get imageMessages_cancelDownload => '取消';
|
||||
|
||||
@override
|
||||
String get imageMessages_removeModel => 'Remove model';
|
||||
String get imageMessages_removeModel => '移除模型';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelReady => 'Ready';
|
||||
String get imageMessages_modelReady => '准备就绪';
|
||||
|
||||
@override
|
||||
String get imageMessages_modelNotPublished =>
|
||||
'Not published yet — this build cannot download it.';
|
||||
String get imageMessages_modelNotPublished => '尚未发布——此版本无法下载该内容。';
|
||||
|
||||
@override
|
||||
String get imageMessages_downloadFailed =>
|
||||
'The image model could not be downloaded.';
|
||||
String get imageMessages_downloadFailed => '图像模型无法下载。';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessTitle => 'Process images automatically';
|
||||
String get imageMessages_autoProcessTitle => '自动处理图像';
|
||||
|
||||
@override
|
||||
String get imageMessages_autoProcessSubtitle =>
|
||||
'Reconstruct every image as soon as it arrives. Uses about 2 GB of memory for a second each time; leave off to reconstruct with a tap instead.';
|
||||
'每次图像到达后立即重建,每次需要约2GB的内存;若想关闭重建功能,可通过点击取消开启。';
|
||||
|
||||
@override
|
||||
String get translation_enableTitle => '启用翻译功能';
|
||||
@@ -4509,43 +4502,42 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
String get pathMap_unfollowPacket => '解锁视图跟随';
|
||||
|
||||
@override
|
||||
String get imageSend_title => 'Send image';
|
||||
String get imageSend_title => '发送图片';
|
||||
|
||||
@override
|
||||
String get imageSend_cropNote =>
|
||||
'Resized to 512 × 512 · aspect ratio not preserved';
|
||||
String get imageSend_cropNote => '调整大小至512 × 512 · 宽高比未保留';
|
||||
|
||||
@override
|
||||
String get imageSend_originalSize => 'Original';
|
||||
String get imageSend_originalSize => '原文';
|
||||
|
||||
@override
|
||||
String get imageSend_onAirSize => 'On air';
|
||||
String get imageSend_onAirSize => '直播中';
|
||||
|
||||
@override
|
||||
String get imageSend_quality => 'Quality';
|
||||
String get imageSend_quality => '质量';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityStandard => 'Standard';
|
||||
String get imageSend_qualityStandard => '标准';
|
||||
|
||||
@override
|
||||
String get imageSend_qualityHigh => 'High';
|
||||
String get imageSend_qualityHigh => '高';
|
||||
|
||||
@override
|
||||
String get imageSend_packetsLabel => 'Packets';
|
||||
String get imageSend_packetsLabel => '数据包';
|
||||
|
||||
@override
|
||||
String get imageSend_airtimeLabel => 'Time on air';
|
||||
String get imageSend_airtimeLabel => '播出时间';
|
||||
|
||||
@override
|
||||
String get imageSend_sizeLabel => 'Payload';
|
||||
String get imageSend_sizeLabel => '有效载荷';
|
||||
|
||||
@override
|
||||
String imageSend_packetsCount(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: '个数据包',
|
||||
one: '个数据包',
|
||||
);
|
||||
return '$count $_temp0';
|
||||
}
|
||||
@@ -4559,149 +4551,142 @@ class AppLocalizationsZh extends AppLocalizations {
|
||||
String get imageSend_unknownValue => '—';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownTitle => 'Radio settings unknown';
|
||||
String get imageSend_radioUnknownTitle => '无线电设置未知';
|
||||
|
||||
@override
|
||||
String get imageSend_radioUnknownBody =>
|
||||
'Connect to a device so the time on air can be calculated.';
|
||||
String get imageSend_radioUnknownBody => '连接设备以计算播出时间。';
|
||||
|
||||
@override
|
||||
String get imageSend_longSendTitle => 'Long transmission';
|
||||
String get imageSend_longSendTitle => '长距离传输';
|
||||
|
||||
@override
|
||||
String imageSend_longSendBody(String duration) {
|
||||
return 'This will hold the channel for about $duration.';
|
||||
return '这将维持频道大约 $duration 时间。';
|
||||
}
|
||||
|
||||
@override
|
||||
String get imageSend_floodNote =>
|
||||
'Flood routing: every repeater in range retransmits each packet, so the channel stays busy longer than this.';
|
||||
String get imageSend_floodNote => '洪水路由:每个中继站都会转发每个数据包,因此信道比这段时间更长地处于繁忙状态。';
|
||||
|
||||
@override
|
||||
String get imageSend_parityTitle => 'Add recovery packet';
|
||||
String get imageSend_parityTitle => '恢复包';
|
||||
|
||||
@override
|
||||
String get imageSend_paritySubtitle =>
|
||||
'One extra packet. Group messages are not acknowledged, so this lets the receiver rebuild the image if a single packet is lost.';
|
||||
'多一个数据包。群发消息不被确认,因此如果某个数据包丢失,接收方可以重新构建图像。';
|
||||
|
||||
@override
|
||||
String get imageSend_send => 'Send';
|
||||
String get imageSend_send => '发送';
|
||||
|
||||
@override
|
||||
String get imageSend_cancel => 'Cancel';
|
||||
String get imageSend_cancel => '取消';
|
||||
|
||||
@override
|
||||
String get imageSend_encodeFailed => 'This image could not be encoded.';
|
||||
String get imageSend_encodeFailed => '此图像无法编码。';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDownloading =>
|
||||
'The image model is still downloading.';
|
||||
String get imageSend_codecDownloading => '图像模型仍在下载中。';
|
||||
|
||||
@override
|
||||
String get imageSend_codecUnavailable =>
|
||||
'Image sending is not available on this device.';
|
||||
String get imageSend_codecUnavailable => '此设备无法发送图片。';
|
||||
|
||||
@override
|
||||
String get imageSend_codecDisabled =>
|
||||
'Image messages are turned off in settings.';
|
||||
String get imageSend_codecDisabled => '图片消息在设置中已关闭。';
|
||||
|
||||
@override
|
||||
String get imageSend_deviceUnsupported =>
|
||||
'This radio cannot send image packets. Connect a device running companion firmware 13 or newer.';
|
||||
'此无线电无法发送图像数据包。请连接运行伴侣固件13或更高版本的设备。';
|
||||
|
||||
@override
|
||||
String get imageSend_directMessagesUnsupported =>
|
||||
'Images travel as group data, so they can only be sent to a channel — not in a direct message.';
|
||||
'图片作为群组数据传输,因此只能发送到频道,而不能直接发送给个人。';
|
||||
|
||||
@override
|
||||
String get imageSend_tooLarge =>
|
||||
'That image encoded to more packets than the mesh format allows.';
|
||||
String get imageSend_tooLarge => '该图像编码的数据包数量超过了网格格式所允许的范围。';
|
||||
|
||||
@override
|
||||
String imageSend_sentConfirmation(int count) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
count,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: '个数据包',
|
||||
one: '个数据包',
|
||||
);
|
||||
return 'Image sent as $count $_temp0.';
|
||||
return '图像已作为 $count $_temp0 发送。';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendFailed(String error) {
|
||||
return 'The image could not be sent: $error';
|
||||
return '无法发送图片:$error';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_sendingProgress(int sent, int total) {
|
||||
return 'Sending image — packet $sent of $total';
|
||||
return '发送图像 — 已发送 $sent 包含 $total';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_senderPrefix(String prefix) {
|
||||
return 'Node $prefix';
|
||||
return '节点 $prefix';
|
||||
}
|
||||
|
||||
@override
|
||||
String receivedImage_incoming(int received, int total) {
|
||||
return '$received of $total packets';
|
||||
return '已收到的 $received 个包含在 $total 个包裹中';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_queued => 'Waiting to decode';
|
||||
String get receivedImage_queued => '等待解码';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToDecode => 'Tap to decode';
|
||||
String get receivedImage_tapToDecode => '点击解锁';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoding => 'Reconstructing… about 1 s';
|
||||
String get receivedImage_decoding => '重建……大约1秒';
|
||||
|
||||
@override
|
||||
String receivedImage_incomplete(int received, int total) {
|
||||
return 'Image incomplete — $received of $total packets arrived';
|
||||
return '图片不完整 — $received 已收到 $total 个数据包';
|
||||
}
|
||||
|
||||
@override
|
||||
String get receivedImage_corrupt => 'Image could not be reconstructed';
|
||||
String get receivedImage_corrupt => '图像无法重建';
|
||||
|
||||
@override
|
||||
String get receivedImage_decoderMissing =>
|
||||
'Image received — image decoding is off';
|
||||
String get receivedImage_decoderMissing => '收到图片 — 图像解码失败';
|
||||
|
||||
@override
|
||||
String get receivedImage_evicted => 'Image no longer stored';
|
||||
String get receivedImage_evicted => '图片已不再存储';
|
||||
|
||||
@override
|
||||
String get receivedImage_retry => 'Try again';
|
||||
String get receivedImage_retry => '再试一次';
|
||||
|
||||
@override
|
||||
String get receivedImage_decodeAgain => 'Decode again';
|
||||
String get receivedImage_decodeAgain => '重新解码';
|
||||
|
||||
@override
|
||||
String get receivedImage_openSettings => 'Set up';
|
||||
String get receivedImage_openSettings => '建立';
|
||||
|
||||
@override
|
||||
String get receivedImage_tapToProcess => 'Tap to process';
|
||||
String get receivedImage_tapToProcess => '点击处理';
|
||||
|
||||
@override
|
||||
String receivedImage_awaiting(int bytes, int packets) {
|
||||
String _temp0 = intl.Intl.pluralLogic(
|
||||
packets,
|
||||
locale: localeName,
|
||||
other: 'packets',
|
||||
one: 'packet',
|
||||
other: '个数据包',
|
||||
one: '个数据包',
|
||||
);
|
||||
return '$bytes bytes · $packets $_temp0';
|
||||
return '$bytes 字节 · $packets $_temp0';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_secondsValue(String seconds) {
|
||||
return '$seconds s';
|
||||
return '$seconds 秒';
|
||||
}
|
||||
|
||||
@override
|
||||
String imageSend_minutesSecondsValue(String minutes, String seconds) {
|
||||
return '$minutes m $seconds s';
|
||||
return '$minutes 分 $seconds 秒';
|
||||
}
|
||||
}
|
||||
|
||||
+223
-1
@@ -2605,5 +2605,227 @@
|
||||
"pathMap_noLocation": "Geen locatie",
|
||||
"pathMap_followPacket": "Weergave vergrendelen op pakket",
|
||||
"pathMap_unfollowPacket": "Weergave ontgrendelen van pakket",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Regio's",
|
||||
"settings_regionSettingsSubtitle": "Beheer van opgeslagen regio's",
|
||||
"settings_regionManagement_screenTitle": "Regionale Bestuur",
|
||||
"settings_regionNameHint": "Regio naam invoeren",
|
||||
"settings_regionAddRegion": "Regio toevoegen",
|
||||
"settings_regionFetchRegions": "Haal regio's uit herhalers",
|
||||
"settings_regionFetchRegionsFail": "Er zijn geen regio's gevonden",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Deze regio is al toegevoegd.",
|
||||
"settings_regionName": "Regio Naam",
|
||||
"settings_regionDeleted": "Regio verwijderd",
|
||||
"settings_deleteRegion": "Regio verwijden",
|
||||
"settings_deleteRegionConfirm": "Verwijder \"{region}\" uit de regio-lijst?",
|
||||
"settings_infoHardware": "Hardware",
|
||||
"settings_infoFirmware": "Firmware",
|
||||
"repeater_pathHashModeOption0": "0 - 1 byte",
|
||||
"repeater_pathHashModeOption1": "1 - 2 bytes",
|
||||
"repeater_pathHashModeOption2": "2 - 3 bytes",
|
||||
"repeater_pathHashModeOption3": "3 - 4 bytes",
|
||||
"appSettings_batteryLipoHv": "LiPo HV (3,0-4,35 V)",
|
||||
"channels_regionSetTo": "Regio: {region}",
|
||||
"channels_regionNotSet": "Regio: geen",
|
||||
"channels_regionSelect_Title": "Kies een regio",
|
||||
"channels_clearRegion": "Duidelijke regio",
|
||||
"chat_sendImage": "Beeld verzenden",
|
||||
"chat_imagePickFailed": "Kunde die afbeelding niet openen",
|
||||
"chat_receivedGif": "Ontvangen van een GIF",
|
||||
"repeater_keySettings": "Verander de Identiteitskies",
|
||||
"repeater_keySettingsSubtitle": "Wijzig de openbare/private sleutelpaar",
|
||||
"repeater_prvKey": "Geheime sleutel",
|
||||
"repeater_prvKeyHelper": "Een nieuwe private sleutel voor de repeater, een 128-karakter lange hexadecimale string.",
|
||||
"repeater_generatePrvKey": "Stel een willekeurige sleutelpaar op",
|
||||
"repeater_stopGeneratingPrvKey": "Stop zoek naar sleutelpaar",
|
||||
"repeater_pubKey": "Openbaar sleutel",
|
||||
"repeater_pubKeyHelper": "Dit is de openbare sleutel die past bij de gegenereerde privésleutel. U kunt dit niet direct instellen.",
|
||||
"repeater_pubKeyPrefix": "Verlangde voorvoegsel",
|
||||
"repeater_pubKeyPrefixHelper": "Zoek een openbare sleutel die begint met deze hexadecimale cijfers. Verwacht aantal pogingen: {tries}.",
|
||||
"imageMessages_enableTitle": "Bijbehorende afbeeldingen activeren",
|
||||
"imageMessages_enableSubtitle": "Beeldjes verzenden via het netwerk. Vereist eenmalig afdaling van een beeldmodel.",
|
||||
"imageMessages_modelSectionTitle": "Beeldmodel",
|
||||
"imageMessages_downloadModel": "Download",
|
||||
"imageMessages_cancelDownload": "Annuleren",
|
||||
"imageMessages_removeModel": "Model verwijderen",
|
||||
"imageMessages_modelReady": "Klaar",
|
||||
"imageMessages_modelNotPublished": "Nog niet gepubliceerd — deze versie kan dit niet downloaden.",
|
||||
"imageMessages_downloadFailed": "Het beeldmodel kon niet worden gedownload.",
|
||||
"imageMessages_autoProcessTitle": "Beeldverwerking automatisch",
|
||||
"imageMessages_autoProcessSubtitle": "Reconstrueer elk beeld direct nadat het binnenkomt. Het gebruikt ongeveer 2 GB geheugen voor elke keer; schakel het reconstrueren uit met een tik als je het niet nodig hebt.",
|
||||
"imageSend_title": "Beeld verzenden",
|
||||
"imageSend_cropNote": "Aangepast aan 512 × 512 · het aspectverhouding is niet behouden",
|
||||
"imageSend_originalSize": "Oorspronkelijk",
|
||||
"imageSend_onAirSize": "Op de lucht",
|
||||
"imageSend_quality": "Kwaliteit",
|
||||
"imageSend_qualityStandard": "Standaard",
|
||||
"imageSend_qualityHigh": "Hoog",
|
||||
"imageSend_packetsLabel": "Pakketten",
|
||||
"imageSend_airtimeLabel": "Tijd op de lucht",
|
||||
"imageSend_sizeLabel": "Belasting",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{pakket} other{pakketten}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Radio-instellingen onbekend",
|
||||
"imageSend_radioUnknownBody": "Verbinding maken met een apparaat zodat de uitzendtijd kan worden berekend.",
|
||||
"imageSend_longSendTitle": "Lange transmissie",
|
||||
"imageSend_longSendBody": "Dit houdt de kanaal ongeveer voor {duration} stand.",
|
||||
"imageSend_floodNote": "Overstromingsrouting: elke repeater binnen bereik herzendsends elk pakket opnieuw, waardoor het kanaal langer bezig blijft dan dit.",
|
||||
"imageSend_parityTitle": "Herstelpakket",
|
||||
"imageSend_paritySubtitle": "Een extra pakje. Groepsberichten worden niet bevestigd, waardoor de ontvanger het beeld kan herstellen als een enkel pakket verloren gaat.",
|
||||
"imageSend_send": "Stuur",
|
||||
"imageSend_cancel": "Annuleren",
|
||||
"imageSend_encodeFailed": "Dit beeld kon niet worden gecodeerd.",
|
||||
"imageSend_codecDownloading": "Het beeldmodel wordt nog steeds gedownload.",
|
||||
"imageSend_codecUnavailable": "Het verzenden van een afbeelding is niet mogelijk op dit apparaat.",
|
||||
"imageSend_codecDisabled": "Boodschappen met afbeeldingen zijn uitgeschakeld in de instellingen.",
|
||||
"imageSend_deviceUnsupported": "Dit radio kan geen beeldpakketten verzenden. Verbind een apparaat met de bijbehorende firmware versie 13 of nieuwer.",
|
||||
"imageSend_directMessagesUnsupported": "Afbeeldingen worden verzonden als groepsgegevens, dus ze kunnen alleen naar een kanaal worden gestuurd — niet via een directe boodschap.",
|
||||
"imageSend_tooLarge": "Die afbeelding werd gecodeerd in meer pakketten dan het mesh-formaat toelaat.",
|
||||
"imageSend_sentConfirmation": "Afbeelding verzonden als {count} {count, plural, =1{pakket} other{pakketten}}.",
|
||||
"imageSend_sendFailed": "Het beeld kon niet worden verzonden: {error}",
|
||||
"imageSend_sendingProgress": "Beeld verzenden — pakket {sent} van {total}",
|
||||
"receivedImage_senderPrefix": "Knipper {prefix}",
|
||||
"receivedImage_incoming": "{received} van de {total} pakketten",
|
||||
"receivedImage_queued": "Wachten op het ontcijferen",
|
||||
"receivedImage_tapToDecode": "Tik om te decoderen",
|
||||
"receivedImage_decoding": "Herstellen… ongeveer 1 seconde",
|
||||
"receivedImage_incomplete": "Afbeelding onvolledig — {received} van {total} pakketten ontvangen",
|
||||
"receivedImage_corrupt": "Afbeelding kon niet worden gereconstrueerd",
|
||||
"receivedImage_decoderMissing": "Beeld ontvangen — beeldontcipheringsapparatuur is uitgeschakeld",
|
||||
"receivedImage_evicted": "Afbeelding niet langer opgeslagen",
|
||||
"receivedImage_retry": "Probeer het opnieuw",
|
||||
"receivedImage_decodeAgain": "Decode opnieuw",
|
||||
"receivedImage_openSettings": "Inricht",
|
||||
"receivedImage_tapToProcess": "Tik om te verwerken",
|
||||
"receivedImage_awaiting": "{bytes} bytes · {packets} {packets, plural, =1{pakket} other{pakketten}}",
|
||||
"imageSend_secondsValue": "{seconds} seconden",
|
||||
"imageSend_minutesSecondsValue": "{minutes} m {seconds} s"
|
||||
}
|
||||
|
||||
+223
-1
@@ -2643,5 +2643,227 @@
|
||||
"pathMap_noLocation": "Brak lokalizacji",
|
||||
"pathMap_followPacket": "Śledź pakiet",
|
||||
"pathMap_unfollowPacket": "Przestań śledzić pakiet",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Regiony",
|
||||
"settings_regionSettingsSubtitle": "Zarządzanie zapisanymi regionami",
|
||||
"settings_regionManagement_screenTitle": "Zarządzanie Regionami",
|
||||
"settings_regionNameHint": "Wprowadź nazwę regionu",
|
||||
"settings_regionAddRegion": "Dodaj region",
|
||||
"settings_regionFetchRegions": "Pobierz regiony z repeaterów",
|
||||
"settings_regionFetchRegionsFail": "Nie znaleziono żadnych regionów",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Ten region został już dodany",
|
||||
"settings_regionName": "Nazwa Regionu",
|
||||
"settings_regionDeleted": "Region usunięto",
|
||||
"settings_deleteRegion": "Usuń Region",
|
||||
"settings_deleteRegionConfirm": "Czy usunąć \"{region}\" z listy regionów?",
|
||||
"settings_infoHardware": "Sprzęt",
|
||||
"settings_infoFirmware": "Oprogramowanie wbudowane",
|
||||
"repeater_pathHashModeOption0": "0 - 1 bajt",
|
||||
"repeater_pathHashModeOption1": "1 - 2 bity",
|
||||
"repeater_pathHashModeOption2": "2 - 3 bajty",
|
||||
"repeater_pathHashModeOption3": "3 - 4 bajty",
|
||||
"appSettings_batteryLipoHv": "Bateria LiPo HV (3,0-4,35 V)",
|
||||
"channels_regionSetTo": "Region: {region}",
|
||||
"channels_regionNotSet": "Region: brak",
|
||||
"channels_regionSelect_Title": "Wybierz region",
|
||||
"channels_clearRegion": "Przejrzyste obszar",
|
||||
"chat_sendImage": "Wyślij obraz",
|
||||
"chat_imagePickFailed": "Nie mogłem otworzyć tego obrazu",
|
||||
"chat_receivedGif": "Otrzymano GIF",
|
||||
"repeater_keySettings": "Zmiana kluczy tożsamości",
|
||||
"repeater_keySettingsSubtitle": "Zmień parę kluczy publiczną/prywatną",
|
||||
"repeater_prvKey": "Klucz prywatny",
|
||||
"repeater_prvKeyHelper": "Nowy klucz prywatny dla wzmacniacza, 128-znakowa string hexadecyimalny.",
|
||||
"repeater_generatePrvKey": "Wygeneruj losowy klucz parowy",
|
||||
"repeater_stopGeneratingPrvKey": "Przerwij wyszukiwanie kluczowego paru",
|
||||
"repeater_pubKey": "Klucz publiczny",
|
||||
"repeater_pubKeyHelper": "To jest klucz publiczny, który odpowiada wygenerowanemu kluczowi prywatnemu. Nie można go ustawić bezpośrednio.",
|
||||
"repeater_pubKeyPrefix": "Pożądane przedrostek",
|
||||
"repeater_pubKeyPrefixHelper": "Znajdź klucz publiczny, który zaczyna się od tych cyfr hex. Oczekiwana liczba prób: {tries}.",
|
||||
"imageMessages_enableTitle": "Włącz wiadomości ze zdjęciami",
|
||||
"imageMessages_enableSubtitle": "Przesyłaj zdjęcia przez siatkę. Wymaga jednorazowego pobrania modelu obrazu.",
|
||||
"imageMessages_modelSectionTitle": "Model obrazowy",
|
||||
"imageMessages_downloadModel": "Pobierz",
|
||||
"imageMessages_cancelDownload": "Anuluj",
|
||||
"imageMessages_removeModel": "Usuń model",
|
||||
"imageMessages_modelReady": "Gotowy",
|
||||
"imageMessages_modelNotPublished": "Nie opublikowane — ten build nie może tego pobrać.",
|
||||
"imageMessages_downloadFailed": "Model obrazowy nie mógł zostać pobrany.",
|
||||
"imageMessages_autoProcessTitle": "Obrazki są przetwarzane automatycznie.",
|
||||
"imageMessages_autoProcessSubtitle": "Odbuduj każde zdjęcie, jak tylko przyjdzie. Zużywa około 2 GB pamięci za każdą drugą sekundę; wyłącz odbudowywanie jednym dotknięciem.",
|
||||
"imageSend_title": "Wyślij obraz",
|
||||
"imageSend_cropNote": "Zmniejszone do 512 × 512 · proporcje nie zostały zachowane",
|
||||
"imageSend_originalSize": "Oryginalny",
|
||||
"imageSend_onAirSize": "W eterze",
|
||||
"imageSend_quality": "Jakość",
|
||||
"imageSend_qualityStandard": "Standard",
|
||||
"imageSend_qualityHigh": "Wysoko",
|
||||
"imageSend_packetsLabel": "Pakiet",
|
||||
"imageSend_airtimeLabel": "Czas w eterze",
|
||||
"imageSend_sizeLabel": "Payload",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{pakiet} other{pakietów}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Ustawienia radia nieznane",
|
||||
"imageSend_radioUnknownBody": "Połącz urządzenie, aby można było obliczyć czas trwania transmisji.",
|
||||
"imageSend_longSendTitle": "Długa transmisja",
|
||||
"imageSend_longSendBody": "Ten kanał będzie dostępny przez około {duration}.",
|
||||
"imageSend_floodNote": "Przepływ pakietów: każdy retransmitujący w zasięgu przekazuje każdy pakiet, przez co kanał pozostaje zajęty dłużej niż ten czas.",
|
||||
"imageSend_parityTitle": "Pakiet odzysku",
|
||||
"imageSend_paritySubtitle": "Jedna dodatkowa paczka. Wiadomości grupowe nie są potwierdzane, dzięki czemu odbiorca może odbudować obraz, jeśli zostanie utracona pojedyncza paczka.",
|
||||
"imageSend_send": "Wyślij",
|
||||
"imageSend_cancel": "Anuluj",
|
||||
"imageSend_encodeFailed": "Ten obraz nie mógł zostać zakodowany.",
|
||||
"imageSend_codecDownloading": "Model obrazowy jest nadal pobierany.",
|
||||
"imageSend_codecUnavailable": "Wysyłanie obrazu nie jest dostępne na tym urządzeniu.",
|
||||
"imageSend_codecDisabled": "Wiadomości ze zdjęciami są wyłączone w ustawieniach.",
|
||||
"imageSend_deviceUnsupported": "Ten radiodysk nie może wysyłać pakietów obrazu. Podłącz urządzenie z oprogramowaniem firmware 13 lub nowszym.",
|
||||
"imageSend_directMessagesUnsupported": "Obrazy są przesyłane jako dane grupowe, więc można je wysłać tylko do kanału — nie w wiadomości prywatnej.",
|
||||
"imageSend_tooLarge": "Obraz zakodowany do więcej pakietów niż pozwala format siatki.",
|
||||
"imageSend_sentConfirmation": "Obraz wysłany jako {count} {count, plural, =1{pakiet} other{pakietów}}.",
|
||||
"imageSend_sendFailed": "Obraz nie mogł zostać wysłany: {error}",
|
||||
"imageSend_sendingProgress": "Wysyłanie obrazu — pakiet {sent} z {total}",
|
||||
"receivedImage_senderPrefix": "Węzeł {prefix}",
|
||||
"receivedImage_incoming": "Otrzymano: {received} z {total} pakietów",
|
||||
"receivedImage_queued": "Oczekiwanie na rozszyfrowanie",
|
||||
"receivedImage_tapToDecode": "Kliknij, aby odszyfrować",
|
||||
"receivedImage_decoding": "Odtwarzanie… około 1 sekundy",
|
||||
"receivedImage_incomplete": "Obraz niepełny — {received} z {total} pakietów dotarło",
|
||||
"receivedImage_corrupt": "Obraz nie może zostać zrekonstruowany",
|
||||
"receivedImage_decoderMissing": "Otrzymano obraz — dekodowanie obrazu jest nieprawidłowe.",
|
||||
"receivedImage_evicted": "Obraz nie jest już przechowywany",
|
||||
"receivedImage_retry": "Spróbuj ponownie",
|
||||
"receivedImage_decodeAgain": "Zdekoduj ponownie",
|
||||
"receivedImage_openSettings": "Ustaw",
|
||||
"receivedImage_tapToProcess": "Kliknij, aby przetworzyć",
|
||||
"receivedImage_awaiting": "{bytes} bajtów · {packets} {packets, plural, =1{pakiet} other{pakiety}}",
|
||||
"imageSend_secondsValue": "{seconds} sekund",
|
||||
"imageSend_minutesSecondsValue": "{minutes} minut {seconds} sekundy"
|
||||
}
|
||||
|
||||
+223
-1
@@ -2605,5 +2605,227 @@
|
||||
"pathMap_noLocation": "Sem localização",
|
||||
"pathMap_followPacket": "Fixar vista no pacote",
|
||||
"pathMap_unfollowPacket": "Liberar vista do pacote",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Regiões",
|
||||
"settings_regionSettingsSubtitle": "Gerenciar regiões armazenadas",
|
||||
"settings_regionManagement_screenTitle": "Gestão de Região",
|
||||
"settings_regionNameHint": "Nome da região",
|
||||
"settings_regionAddRegion": "Adicionar região",
|
||||
"settings_regionFetchRegions": "Regiões de obtenção a partir de repetidores",
|
||||
"settings_regionFetchRegionsFail": "Nenhuma região foi encontrada",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Esta região já foi adicionada",
|
||||
"settings_regionName": "Nome da Região",
|
||||
"settings_regionDeleted": "Região excluída",
|
||||
"settings_deleteRegion": "Excluir Região",
|
||||
"settings_deleteRegionConfirm": "Remover \"{region}\" da lista de regiões?",
|
||||
"settings_infoHardware": "Hardware",
|
||||
"settings_infoFirmware": "Firmware",
|
||||
"repeater_pathHashModeOption0": "0 - 1 byte",
|
||||
"repeater_pathHashModeOption1": "1 - 2 bytes",
|
||||
"repeater_pathHashModeOption2": "2 - 3 bytes",
|
||||
"repeater_pathHashModeOption3": "3 - 4 bytes",
|
||||
"appSettings_batteryLipoHv": "LiPo HV (3,0-4,35V)",
|
||||
"channels_regionSetTo": "Região: {region}",
|
||||
"channels_regionNotSet": "Região: nenhuma",
|
||||
"channels_regionSelect_Title": "Escolha uma região",
|
||||
"channels_clearRegion": "Região desimpedida",
|
||||
"chat_sendImage": "Enviar imagem",
|
||||
"chat_imagePickFailed": "Não consegui abrir essa imagem",
|
||||
"chat_receivedGif": "Recebi um GIF",
|
||||
"repeater_keySettings": "Alterar Chaves de Identidade",
|
||||
"repeater_keySettingsSubtitle": "Altere a chave pública/chave privada",
|
||||
"repeater_prvKey": "Chave privada",
|
||||
"repeater_prvKeyHelper": "Uma nova chave privada para o repetidor, uma string hexadecimal de 128 caracteres.",
|
||||
"repeater_generatePrvKey": "Gere um par de chaves aleatório",
|
||||
"repeater_stopGeneratingPrvKey": "Interrompa a busca por par de chaves",
|
||||
"repeater_pubKey": "Chave pública",
|
||||
"repeater_pubKeyHelper": "Esta é a chave pública que acompanha a chave privada gerada. Você não pode definir isso diretamente.",
|
||||
"repeater_pubKeyPrefix": "Prefixo desejado",
|
||||
"repeater_pubKeyPrefixHelper": "Encontre uma chave pública que comece com esses dígitos hexadecimais. Número esperado de tentativas: {tries}.",
|
||||
"imageMessages_enableTitle": "Mensagens de imagem",
|
||||
"imageMessages_enableSubtitle": "Envie as imagens pela malha. Requer o download de um modelo de imagem único.",
|
||||
"imageMessages_modelSectionTitle": "Modelo de imagem",
|
||||
"imageMessages_downloadModel": "Download",
|
||||
"imageMessages_cancelDownload": "Cancelar",
|
||||
"imageMessages_removeModel": "Remover modelo",
|
||||
"imageMessages_modelReady": "Pronto",
|
||||
"imageMessages_modelNotPublished": "Ainda não publicado — esta versão não pode baixá-lo.",
|
||||
"imageMessages_downloadFailed": "O modelo de imagem não pôde ser baixado.",
|
||||
"imageMessages_autoProcessTitle": "Processar imagens automaticamente",
|
||||
"imageMessages_autoProcessSubtitle": "Reconstrua cada imagem assim que ela chegar. Utiliza cerca de 2 GB de memória por segundo; dispense a reconstrução com um toque.",
|
||||
"imageSend_title": "Enviar imagem",
|
||||
"imageSend_cropNote": "Redimensionado para 512 × 512 · a proporção de aspecto não foi preservada",
|
||||
"imageSend_originalSize": "Texto Original",
|
||||
"imageSend_onAirSize": "Ao ar",
|
||||
"imageSend_quality": "Qualidade",
|
||||
"imageSend_qualityStandard": "Padrão",
|
||||
"imageSend_qualityHigh": "Alto",
|
||||
"imageSend_packetsLabel": "Pacotes",
|
||||
"imageSend_airtimeLabel": "Tempo em transmissão",
|
||||
"imageSend_sizeLabel": "Carga útil",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{pacote} other{pacotes}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Configurações de rádio desconhecidas",
|
||||
"imageSend_radioUnknownBody": "Conecte-se a um dispositivo para que o horário de transmissão possa ser calculado.",
|
||||
"imageSend_longSendTitle": "Transmissão longa",
|
||||
"imageSend_longSendBody": "Isso manterá o canal por cerca de {duration}.",
|
||||
"imageSend_floodNote": "Roteamento de inundação: cada repetidor na faixa retransmite cada pacote, fazendo com que o canal permaneça ocupado por mais tempo do que isso.",
|
||||
"imageSend_parityTitle": "Pacote de recuperação",
|
||||
"imageSend_paritySubtitle": "Um pacote extra. As mensagens em grupo não são reconhecidas, assim permitindo que o destinatário reconstrua a imagem caso um pacote seja perdido.",
|
||||
"imageSend_send": "Enviar",
|
||||
"imageSend_cancel": "Cancelar",
|
||||
"imageSend_encodeFailed": "Esta imagem não pode ser codificada.",
|
||||
"imageSend_codecDownloading": "O modelo de imagem ainda está baixando.",
|
||||
"imageSend_codecUnavailable": "O envio de imagem não está disponível neste dispositivo.",
|
||||
"imageSend_codecDisabled": "As mensagens de imagem estão desativadas nas configurações.",
|
||||
"imageSend_deviceUnsupported": "Este rádio não pode enviar pacotes de imagem. Conecte um dispositivo com firmware companheiro versão 13 ou superior.",
|
||||
"imageSend_directMessagesUnsupported": "As imagens viajam como dados em grupo, portanto, só podem ser enviadas para um canal — não em mensagem direta.",
|
||||
"imageSend_tooLarge": "Essa imagem foi codificada em mais pacotes do que o formato de malha permite.",
|
||||
"imageSend_sentConfirmation": "Imagem enviada como {count} {count, plural, =1{pacote} other{pacotes}}.",
|
||||
"imageSend_sendFailed": "A imagem não pôde ser enviada: {error}",
|
||||
"imageSend_sendingProgress": "Envio da imagem — pacote {sent} de {total}",
|
||||
"receivedImage_senderPrefix": "Nó {prefix}",
|
||||
"receivedImage_incoming": "{received} de {total} pacotes",
|
||||
"receivedImage_queued": "Aguardando para decodificar",
|
||||
"receivedImage_tapToDecode": "Toque para decodificar",
|
||||
"receivedImage_decoding": "Reconstruindo… cerca de 1 segundo",
|
||||
"receivedImage_incomplete": "Imagem incompleta — {received} de {total} pacotes chegaram",
|
||||
"receivedImage_corrupt": "A imagem não pôde ser reconstruída",
|
||||
"receivedImage_decoderMissing": "Imagem recebida — decodificação de imagem incorreta",
|
||||
"receivedImage_evicted": "Imagem não armazenada",
|
||||
"receivedImage_retry": "Tente novamente",
|
||||
"receivedImage_decodeAgain": "Decodifique novamente",
|
||||
"receivedImage_openSettings": "Configurar",
|
||||
"receivedImage_tapToProcess": "Toque para processar",
|
||||
"receivedImage_awaiting": "{bytes} bytes · {packets} {packets, plural, =1{pacote} other{pacotes}}",
|
||||
"imageSend_secondsValue": "{seconds} segundos",
|
||||
"imageSend_minutesSecondsValue": "{minutes} min {seconds} s"
|
||||
}
|
||||
|
||||
+223
-1
@@ -1908,5 +1908,227 @@
|
||||
"pathMap_noLocation": "Нет координат",
|
||||
"pathMap_followPacket": "Следить за пакетом",
|
||||
"pathMap_unfollowPacket": "Не следить за пакетом",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Регионы",
|
||||
"settings_regionSettingsSubtitle": "Управление сохранёнными регионами",
|
||||
"settings_regionManagement_screenTitle": "Управление регионами",
|
||||
"settings_regionNameHint": "Введите название региона",
|
||||
"settings_regionAddRegion": "Добавить регион",
|
||||
"settings_regionFetchRegions": "Извлекать регионы с ретрансляторов",
|
||||
"settings_regionFetchRegionsFail": "Не были найдены никакие регионы",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Этот регион уже был добавлен",
|
||||
"settings_regionName": "Название региона",
|
||||
"settings_regionDeleted": "Регион удалён",
|
||||
"settings_deleteRegion": "Удалить регион",
|
||||
"settings_deleteRegionConfirm": "Удалить \"{region}\" из списка регионов?",
|
||||
"settings_infoHardware": "Оборудование",
|
||||
"settings_infoFirmware": "Производственное программное обеспечение",
|
||||
"repeater_pathHashModeOption0": "0 - 1 байт",
|
||||
"repeater_pathHashModeOption1": "1 - 2 байта",
|
||||
"repeater_pathHashModeOption2": "2 - 3 байта",
|
||||
"repeater_pathHashModeOption3": "3 - 4 байта",
|
||||
"appSettings_batteryLipoHv": "LiPo HV (3,0–4,35 В)",
|
||||
"channels_regionSetTo": "РЕГИОН: {region}",
|
||||
"channels_regionNotSet": "Регион: отсутствует",
|
||||
"channels_regionSelect_Title": "Выберите регион",
|
||||
"channels_clearRegion": "Чистый регион",
|
||||
"chat_sendImage": "Отправьте изображение",
|
||||
"chat_imagePickFailed": "Не удалось открыть это изображение",
|
||||
"chat_receivedGif": "Получен GIF",
|
||||
"repeater_keySettings": "Изменить ключи идентичности",
|
||||
"repeater_keySettingsSubtitle": "Измените пару публичных/частных ключей",
|
||||
"repeater_prvKey": "Личный ключ",
|
||||
"repeater_prvKeyHelper": "Для повторителя генерируется новый приватный ключ — шестнадцатеричная строка из 128 символов.",
|
||||
"repeater_generatePrvKey": "Сгенерируйте случайный ключ-пару",
|
||||
"repeater_stopGeneratingPrvKey": "Прервать поиск ключной пары",
|
||||
"repeater_pubKey": "Публичный ключ",
|
||||
"repeater_pubKeyHelper": "Это публичный ключ, который соответствует сгенерированному приватному ключу. Вы не можете установить его напрямую.",
|
||||
"repeater_pubKeyPrefix": "Желаемый префикс",
|
||||
"repeater_pubKeyPrefixHelper": "Найдите публичный ключ, начинающийся этими шестнадцатеричными цифрами. Ожидаемое количество попыток: {tries}.",
|
||||
"imageMessages_enableTitle": "Включить изображения в сообщения",
|
||||
"imageMessages_enableSubtitle": "Отправьте изображения через сеть. Требуется однократная загрузка шаблона изображения.",
|
||||
"imageMessages_modelSectionTitle": "Модель изображения",
|
||||
"imageMessages_downloadModel": "Скачать",
|
||||
"imageMessages_cancelDownload": "Отмена",
|
||||
"imageMessages_removeModel": "Удалить модель",
|
||||
"imageMessages_modelReady": "Готов",
|
||||
"imageMessages_modelNotPublished": "Пока не опубликовано — эта сборка не может скачать это.",
|
||||
"imageMessages_downloadFailed": "Модель изображения не удалось скачать.",
|
||||
"imageMessages_autoProcessTitle": "Автоматически обрабатывать изображения",
|
||||
"imageMessages_autoProcessSubtitle": "Примерно каждое изображение реконструируйте сразу после его поступления. Для этого на каждый раз используется около 2 ГБ памяти; отключите реконструкцию касанием.",
|
||||
"imageSend_title": "Отправьте изображение",
|
||||
"imageSend_cropNote": "Меняется размер на 512 × 512 · соотношение сторон не сохраняется",
|
||||
"imageSend_originalSize": "Оригинал",
|
||||
"imageSend_onAirSize": "В эфире",
|
||||
"imageSend_quality": "Качество",
|
||||
"imageSend_qualityStandard": "Стандарт",
|
||||
"imageSend_qualityHigh": "Высота",
|
||||
"imageSend_packetsLabel": "Пакеты",
|
||||
"imageSend_airtimeLabel": "Время на эфире",
|
||||
"imageSend_sizeLabel": "Пакет",
|
||||
"imageSend_packetsCount": "{count} {count, plural, one{пакет} few{пакета} many{пакетов} other{пакета}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Настройки радио неизвестны",
|
||||
"imageSend_radioUnknownBody": "Подключитесь к устройству, чтобы можно было рассчитать время эфирного времени.",
|
||||
"imageSend_longSendTitle": "Долгая передача",
|
||||
"imageSend_longSendBody": "Это будет поддерживать канал примерно {duration}.",
|
||||
"imageSend_floodNote": "Руководство по маршрутизации потоков: каждый ретрансатор в зоне перераспределяет каждый пакет, поэтому канал остаётся занятным дольше, чем это.",
|
||||
"imageSend_parityTitle": "Пакет восстановления",
|
||||
"imageSend_paritySubtitle": "Один дополнительный пакет. Групповые сообщения не подтверждаются, поэтому это позволяет получателю восстановить изображение, если один пакет потерян.",
|
||||
"imageSend_send": "Отправить",
|
||||
"imageSend_cancel": "Отмена",
|
||||
"imageSend_encodeFailed": "Это изображение не может быть закодировано.",
|
||||
"imageSend_codecDownloading": "Модель изображения всё ещё загружается.",
|
||||
"imageSend_codecUnavailable": "Отправка изображения на этом устройстве недоступна.",
|
||||
"imageSend_codecDisabled": "В настройках отключены сообщения с изображениями.",
|
||||
"imageSend_deviceUnsupported": "Это радио не может отправлять пакеты изображений. Подключите устройство, работающее на прошивке-компаньоне версии 13 или выше.",
|
||||
"imageSend_directMessagesUnsupported": "Изображения передаются как групповые данные, поэтому их можно отправлять только в канал, а не в личное сообщение.",
|
||||
"imageSend_tooLarge": "Изображение было закодировано в больше пакетов, чем позволяет формат сетки.",
|
||||
"imageSend_sentConfirmation": "Изображение отправлено как {count} {count, plural, =1{пакет} other{пакетов}}.",
|
||||
"imageSend_sendFailed": "Изображение не может быть отправлено: {error}",
|
||||
"imageSend_sendingProgress": "Отправка изображения — пакет {sent} из {total}",
|
||||
"receivedImage_senderPrefix": "Узел {prefix}",
|
||||
"receivedImage_incoming": "{received} из {total} пакетов",
|
||||
"receivedImage_queued": "Ожидание расшифровки",
|
||||
"receivedImage_tapToDecode": "Нажмите для декодирования",
|
||||
"receivedImage_decoding": "Реконструкция… примерно за 1 секунду",
|
||||
"receivedImage_incomplete": "Отсутствует изображение — {received} из {total} пакетов пришло",
|
||||
"receivedImage_corrupt": "Изображение не может быть восстановлено",
|
||||
"receivedImage_decoderMissing": "Получен изображение — декодирование изображения неправильное",
|
||||
"receivedImage_evicted": "Изображение больше не сохраняется",
|
||||
"receivedImage_retry": "Попробуйте снова",
|
||||
"receivedImage_decodeAgain": "Декодируйте снова",
|
||||
"receivedImage_openSettings": "Настройте",
|
||||
"receivedImage_tapToProcess": "Нажмите для обработки",
|
||||
"receivedImage_awaiting": "{bytes} байт · {packets} {packets, plural, =1{пакет} other{пакетов}}",
|
||||
"imageSend_secondsValue": "{seconds} секунд",
|
||||
"imageSend_minutesSecondsValue": "{minutes} м {seconds} с"
|
||||
}
|
||||
|
||||
+223
-1
@@ -2605,5 +2605,227 @@
|
||||
"pathMap_noLocation": "Bez polohy",
|
||||
"pathMap_followPacket": "Uzamknúť pohľad na paket",
|
||||
"pathMap_unfollowPacket": "Odomknúť pohľad od paketu",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Regiony",
|
||||
"settings_regionSettingsSubtitle": "Zohľať uložené regiony",
|
||||
"settings_regionManagement_screenTitle": "Regiónne vedenie",
|
||||
"settings_regionNameHint": "Vstuptejte název regionu",
|
||||
"settings_regionAddRegion": "Dodajte region",
|
||||
"settings_regionFetchRegions": "Odberanie regionov z repeaterov",
|
||||
"settings_regionFetchRegionsFail": "Nebylo našli žiadné regiony",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Tento oblast je už dodán",
|
||||
"settings_regionName": "Regionné název",
|
||||
"settings_regionDeleted": "Regionu zníteno",
|
||||
"settings_deleteRegion": "Vyniknúcia regionu",
|
||||
"settings_deleteRegionConfirm": "Odstraniť {region} z listy regionov?",
|
||||
"settings_infoHardware": "Hardware",
|
||||
"settings_infoFirmware": "Firmware",
|
||||
"repeater_pathHashModeOption0": "0 - 1 byt",
|
||||
"repeater_pathHashModeOption1": "1 - 2 bity",
|
||||
"repeater_pathHashModeOption2": "2 - 3 bity",
|
||||
"repeater_pathHashModeOption3": "3 - 4 bity",
|
||||
"appSettings_batteryLipoHv": "LiPo HV (3.0-4.35V)",
|
||||
"channels_regionSetTo": "Region: {region}",
|
||||
"channels_regionNotSet": "Region: žiadné",
|
||||
"channels_regionSelect_Title": "Vyberte region",
|
||||
"channels_clearRegion": "Jasný údajný oblasť",
|
||||
"chat_sendImage": "Vyslat obraz",
|
||||
"chat_imagePickFailed": "Nesmiela jsem otvoriť tento obrázok",
|
||||
"chat_receivedGif": "Odeslaný GIF",
|
||||
"repeater_keySettings": "Zmena identititačných klíčov",
|
||||
"repeater_keySettingsSubtitle": "Zmena prehľadného/osobného klíčového zbraň",
|
||||
"repeater_prvKey": "Prívatná klíč",
|
||||
"repeater_prvKeyHelper": "Nová prívna klíčová číslo pre repeater, 128-znáčlový šestnáctorýč.",
|
||||
"repeater_generatePrvKey": "Vytvorenie príma kľúčového paru",
|
||||
"repeater_stopGeneratingPrvKey": "Prerušenie hľadania klíčového paru",
|
||||
"repeater_pubKey": "Public key",
|
||||
"repeater_pubKeyHelper": "Táto je veľká klíč, ktorý sa vztahuje s generovaným manéčným klíčom. Nemožné je to ustanovit priateľne.",
|
||||
"repeater_pubKeyPrefix": "Požadovaný prefiks",
|
||||
"repeater_pubKeyPrefixHelper": "Zahľadnite sa veľkú publicenu klíču, ktorá začíná tými šestícih štiastkami. Očekivané potrebné pokusy: {tries}.",
|
||||
"imageMessages_enableTitle": "Zabezpečte zobrazi",
|
||||
"imageMessages_enableSubtitle": "Odeslanie obrazov pre mšťanie. Potrebujete jednorazové stáhnutie modelu obrazov.",
|
||||
"imageMessages_modelSectionTitle": "Model v kínajme",
|
||||
"imageMessages_downloadModel": "Stáhnie",
|
||||
"imageMessages_cancelDownload": "Zastavenie",
|
||||
"imageMessages_removeModel": "Vyhniť model",
|
||||
"imageMessages_modelReady": "Čiačný",
|
||||
"imageMessages_modelNotPublished": "Nesprávne vypisáné — tento prechovka nie môže jej stáhnuť.",
|
||||
"imageMessages_downloadFailed": "Model s obrázkom nemôžno sťažovať.",
|
||||
"imageMessages_autoProcessTitle": "Automaticky prepojiť slučaje.",
|
||||
"imageMessages_autoProcessSubtitle": "Rekonstruujte každý obraz tak, ako pridá. Používajete okolo 2 GB pamäti pre drugú hodinu; odložte rekonstrukciu tým kliknutím.",
|
||||
"imageSend_title": "Vyslat obraz",
|
||||
"imageSend_cropNote": "Zmeneno na 512 × 512 · vzorýst nie byl zachovan",
|
||||
"imageSend_originalSize": "Výborný text:\n\n\"Language is the road map of a culture. It tells us where to go as a society and helps us understand the world around us. Learning a new language opens up new perspectives and opportunities, allowing us to connect with people from different backgrounds and build bridges between cultures.\"\n\nSlovenská preklada:\n\n\"Jazyk je cesta pre zručnosti a odráža kultúru. Dá nám uvedomi, dokádať, kúdy sa pohladneme a pomáha našej společnosti poradiť sa v rôznych okolnosti a porozumieť o svetu kolem nás. Nauka nového jazyka otviera nové perspektívy a možnosti, čo pohybuje našu schopnosť sa spoluprávať s ľudmi z rôznych okolnosti a budovať mosty medzi kultúry.\"",
|
||||
"imageSend_onAirSize": "V prúce",
|
||||
"imageSend_quality": "Kvalita",
|
||||
"imageSend_qualityStandard": "Stándard",
|
||||
"imageSend_qualityHigh": "Vysoká",
|
||||
"imageSend_packetsLabel": "Pakety",
|
||||
"imageSend_airtimeLabel": "Čas na anteni",
|
||||
"imageSend_sizeLabel": "Základ",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{paket} other{paketov}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Nastavenia radio nezná",
|
||||
"imageSend_radioUnknownBody": "Zkonečte s určým prijemcem, aby sa mohlo výpočet času, ktorý je v prúbežu.",
|
||||
"imageSend_longSendTitle": "Dlouhá transmisia",
|
||||
"imageSend_longSendBody": "Tento dôvod udrží kanál priamo na {duration}.",
|
||||
"imageSend_floodNote": "Povodný routing: každý repeater v rozsahu zrňa každý paket, takže kanál zostá zajetší dlouше, než tu.",
|
||||
"imageSend_parityTitle": "Poučný paket pre očudenie",
|
||||
"imageSend_paritySubtitle": "Jedný dodatný paket. Skúsené súhlasy nie sa uznávaú, takže to umožňuje prechovávaču opraviť obraz, pokiaľ sa jedný paket niebyl ztrácený.",
|
||||
"imageSend_send": "Odeslať",
|
||||
"imageSend_cancel": "Zastavenie",
|
||||
"imageSend_encodeFailed": "Tento obráz nie byla byla schována.",
|
||||
"imageSend_codecDownloading": "Model prehľadovania prebeža stále stále stále prechádza.",
|
||||
"imageSend_codecUnavailable": "Zobrazenie nie je dostupný na tomto zariadení.",
|
||||
"imageSend_codecDisabled": "Zobrazy s prešteľkami sú v nastavení vypnené.",
|
||||
"imageSend_deviceUnsupported": "Tento radiok nie môže odeslať obrazové pakety. Podeďte správne určité zařízení s oprogramovaním spolupráce 13 alebo novším.",
|
||||
"imageSend_directMessagesUnsupported": "Obrazy sa prechádzajú jako skupinové údaje, preto sa ich môžu odeslať len na kanál — nie v príbeh sa.",
|
||||
"imageSend_tooLarge": "Tento obraz byl skodyrovany do viac paketov, ako umožňuje si sítka format.",
|
||||
"imageSend_sentConfirmation": "Obrázok odoslaný ako {count} {count, plural, =1{paket} other{paketov}}.",
|
||||
"imageSend_sendFailed": "Obraz nemôžlo odeslať: {error}",
|
||||
"imageSend_sendingProgress": "Vysyťanie obrazu — pakét {sent} z {total}",
|
||||
"receivedImage_senderPrefix": "Vęzlo {prefix}",
|
||||
"receivedImage_incoming": "Otrzymané {received} z {total} pakotí",
|
||||
"receivedImage_queued": "Čekanie na dekódovanie",
|
||||
"receivedImage_tapToDecode": "Kliknite, aby dekódovať",
|
||||
"receivedImage_decoding": "Rekonstrukcia… o čoľve 1 s",
|
||||
"receivedImage_incomplete": "Obraz nieješťajný — {received} z {total} paciek príšlo",
|
||||
"receivedImage_corrupt": "Obraz nemôžu byť prepojený",
|
||||
"receivedImage_decoderMissing": "Otrzymaná slúba — dekódovanie slúby je vypadejce",
|
||||
"receivedImage_evicted": "Obraz nemá uložený",
|
||||
"receivedImage_retry": "Zkôr to opítajte",
|
||||
"receivedImage_decodeAgain": "Zdeľte sa znovu",
|
||||
"receivedImage_openSettings": "Založte",
|
||||
"receivedImage_tapToProcess": "Ukliknite, aby sa príjomili",
|
||||
"receivedImage_awaiting": "{bytes} bajtov · {packets} {packets, plural, =1{paket} other{paketov}}",
|
||||
"imageSend_secondsValue": "{seconds} s",
|
||||
"imageSend_minutesSecondsValue": "{minutes} min {seconds} s"
|
||||
}
|
||||
|
||||
+223
-1
@@ -2605,5 +2605,227 @@
|
||||
"pathMap_noLocation": "Brez lokacije",
|
||||
"pathMap_followPacket": "Zakleni pogled na paket",
|
||||
"pathMap_unfollowPacket": "Odkleni pogled od paketa",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Regioni",
|
||||
"settings_regionSettingsSubtitle": "Upravljanje opisanih regionov",
|
||||
"settings_regionManagement_screenTitle": "Regijonsko upravljanje",
|
||||
"settings_regionNameHint": "Naslov občine",
|
||||
"settings_regionAddRegion": "Dodaj region",
|
||||
"settings_regionFetchRegions": "Pobražujte izvajne področja iz ponavljalnikov",
|
||||
"settings_regionFetchRegionsFail": "Nižnih občin ni izkrali",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Taj oblasi je več pomanjkan.",
|
||||
"settings_regionName": "Naziv Regiona",
|
||||
"settings_regionDeleted": "Oblikačena regija",
|
||||
"settings_deleteRegion": "Prihoda Region",
|
||||
"settings_deleteRegionConfirm": "Ostani {region} iz listy regionov?",
|
||||
"settings_infoHardware": "Hardver",
|
||||
"settings_infoFirmware": "Pravilnik",
|
||||
"repeater_pathHashModeOption0": "0 - 1 bajt",
|
||||
"repeater_pathHashModeOption1": "1 - 2 bite",
|
||||
"repeater_pathHashModeOption2": "2 - 3 bite",
|
||||
"repeater_pathHashModeOption3": "3 - 4 bite",
|
||||
"appSettings_batteryLipoHv": "LiPo HV (3,0–4,35 V)",
|
||||
"channels_regionSetTo": "Osebno: {region}",
|
||||
"channels_regionNotSet": "Region: brak",
|
||||
"channels_regionSelect_Title": "Vablajte region",
|
||||
"channels_clearRegion": "Jasna regija",
|
||||
"chat_sendImage": "Sločaji slik",
|
||||
"chat_imagePickFailed": "Nispeval sem tega ta slik",
|
||||
"chat_receivedGif": "Otrvljen GIF",
|
||||
"repeater_keySettings": "Zmeničke ključe identitete",
|
||||
"repeater_keySettingsSubtitle": "Zamenjajte publican ali privatni ključni par",
|
||||
"repeater_prvKey": "Privarna ključa",
|
||||
"repeater_prvKeyHelper": "Nova privatna ključa za prekaznik, 128- znakovni šestnastik.",
|
||||
"repeater_generatePrvKey": "Sporočna ključna para",
|
||||
"repeater_stopGeneratingPrvKey": "Prekajanje odkrivanja ključne paro",
|
||||
"repeater_pubKey": "Public key (publična ključa)",
|
||||
"repeater_pubKeyHelper": "Taj je publicna ključ, ki pomeni pripovedno privatno ključ. Ne možeš to vrediti direktno.",
|
||||
"repeater_pubKeyPrefix": "Poželana prefiks",
|
||||
"repeater_pubKeyPrefixHelper": "Najdi publicen ključ, ki začne s tih hexnih čitov. Očekivani pokusi: {tries}.",
|
||||
"imageMessages_enableTitle": "Pozivni izkričile slike",
|
||||
"imageMessages_enableSubtitle": "Prešli vzorce pre mrežo. Potrebno je jednokratno stworiti model vzorca.",
|
||||
"imageMessages_modelSectionTitle": "Obrazni model",
|
||||
"imageMessages_downloadModel": "Storba",
|
||||
"imageMessages_cancelDownload": "Odločite",
|
||||
"imageMessages_removeModel": "Ubrani model",
|
||||
"imageMessages_modelReady": "Gotov",
|
||||
"imageMessages_modelNotPublished": "Jo še niso izdana — ta izdelka te ne može prebaviti.",
|
||||
"imageMessages_downloadFailed": "Obrazni model ne može biti preuzet.",
|
||||
"imageMessages_autoProcessTitle": "Avtomatizirane slike",
|
||||
"imageMessages_autoProcessSubtitle": "Katero je oblikovanje svega oblikov, ko se pošteva. Za drugo okolo časa se koristi ok. 2 GB pamične prostore; odločite se za oblikovanje s tukom.",
|
||||
"imageSend_title": "Sločaji slik",
|
||||
"imageSend_cropNote": "Zadovoljno izmenjeno na 512 × 512 · vzorovni odnos ne ohranjen",
|
||||
"imageSend_originalSize": "Original text:\n\nThe early bird catches the worm.\n\nTranslation:\n\nPojdi prvi, zlati v kroku.",
|
||||
"imageSend_onAirSize": "Na vodi",
|
||||
"imageSend_quality": "Kakovost",
|
||||
"imageSend_qualityStandard": "Standard",
|
||||
"imageSend_qualityHigh": "Vysoko",
|
||||
"imageSend_packetsLabel": "Pakete",
|
||||
"imageSend_airtimeLabel": "Čas v eteru",
|
||||
"imageSend_sizeLabel": "Napravo",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{paket} other{paketov}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Naslušniki radio neznane",
|
||||
"imageSend_radioUnknownBody": "Poučajte se na stroj, da se lahko izračunuje čas v prikazu.",
|
||||
"imageSend_longSendTitle": "Dluga preposlana",
|
||||
"imageSend_longSendBody": "Ovo bo ohranilo kanal prihodno za obliko {duration}.",
|
||||
"imageSend_floodNote": "Povlatni potok: sve repeaterje v območju pretrasirajo svak paket, pa kanál ostane zanudnejši od tega.",
|
||||
"imageSend_parityTitle": "Pobavni paket zdržbe",
|
||||
"imageSend_paritySubtitle": "Jedna dodatna paczka. Grupni izjasi ne izvajajo potvarnosti, pa ta izdelka omogoča preuzimanju ponovno izgleda, če je zgubjen pojedni paket.",
|
||||
"imageSend_send": "Posyłaj",
|
||||
"imageSend_cancel": "Odločite",
|
||||
"imageSend_encodeFailed": "Ovo slikovo ne more biti zakodirano.",
|
||||
"imageSend_codecDownloading": "Obrazni model še pospeva preborjanje.",
|
||||
"imageSend_codecUnavailable": "Poslanje slike nema na tem zelo naročnem naročnem.",
|
||||
"imageSend_codecDisabled": "Obrazi s pomanjkanjem so v nastavnih.",
|
||||
"imageSend_deviceUnsupported": "Taj radio ne može posredovati slike pakuete. Prepoštijo izbirni napravnik s kompanijskimi programi na čevem 13 ali novšejšim.",
|
||||
"imageSend_directMessagesUnsupported": "Obrazy se pojavijo kot skupnih podatkov, pa lahko ih poslujejo samo na kanal — ne v prilogih.",
|
||||
"imageSend_tooLarge": "Taj slik je zakodiran v viših pakotnih od športne formate, ki omogoča mrežni format.",
|
||||
"imageSend_sentConfirmation": "Slika poslana kot {count} {count, plural, =1{paket} other{paketov}}.",
|
||||
"imageSend_sendFailed": "Obraz ne može biti poslany: {error}",
|
||||
"imageSend_sendingProgress": "Prekazivanje izkaza — paket {sent} od {total}",
|
||||
"receivedImage_senderPrefix": "Vrtitev {prefix}",
|
||||
"receivedImage_incoming": "Otrteno od {received} na {total} poslovanih potokov",
|
||||
"receivedImage_queued": "Čekanje, da se dekodira",
|
||||
"receivedImage_tapToDecode": "Kliknite, da razkrivete",
|
||||
"receivedImage_decoding": "Ostvarjanje… o prihodnosti za okolo 1 s",
|
||||
"receivedImage_incomplete": "Obraz nije kompletan — {received} od {total} poslaničev je prishodil",
|
||||
"receivedImage_corrupt": "Obraz ne more lahko rekonstruirati",
|
||||
"receivedImage_decoderMissing": "Otrgena slika — dekodirana slika je izključena",
|
||||
"receivedImage_evicted": "Obraz ni več niso zakajiren",
|
||||
"receivedImage_retry": "Pokušajte znova",
|
||||
"receivedImage_decodeAgain": "Dekodiraj ponovno",
|
||||
"receivedImage_openSettings": "Nastavite",
|
||||
"receivedImage_tapToProcess": "Kliknij za obravnavanje",
|
||||
"receivedImage_awaiting": "{bytes} bajtov · {packets} {packets, plural, =1{paket} other{paketov}}",
|
||||
"imageSend_secondsValue": "{seconds} s",
|
||||
"imageSend_minutesSecondsValue": "{minutes} m {seconds} s"
|
||||
}
|
||||
|
||||
+223
-1
@@ -2605,5 +2605,227 @@
|
||||
"pathMap_noLocation": "Ingen position",
|
||||
"pathMap_unfollowPacket": "Lås upp vy från paket",
|
||||
"pathMap_followPacket": "Lås vy till paket",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Regioner",
|
||||
"settings_regionSettingsSubtitle": "Hämtade regioner",
|
||||
"settings_regionManagement_screenTitle": "Regionförvaltning",
|
||||
"settings_regionNameHint": "Enter regionnamn",
|
||||
"settings_regionAddRegion": "Lag till region",
|
||||
"settings_regionFetchRegions": "Hämtar regioner från repeater",
|
||||
"settings_regionFetchRegionsFail": "Ingen region hittades",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Denna region har redan lagt till",
|
||||
"settings_regionName": "Regionnavn",
|
||||
"settings_regionDeleted": "Regionens kallt offentlig",
|
||||
"settings_deleteRegion": "Förhålla regio",
|
||||
"settings_deleteRegionConfirm": "Fjärna \"{region}\" ur regionlistan?",
|
||||
"settings_infoHardware": "Hardware",
|
||||
"settings_infoFirmware": "Föredata",
|
||||
"repeater_pathHashModeOption0": "0 - 1 byte",
|
||||
"repeater_pathHashModeOption1": "1 - 2 byte",
|
||||
"repeater_pathHashModeOption2": "2 - 3 byte",
|
||||
"repeater_pathHashModeOption3": "3 - 4 byte",
|
||||
"appSettings_batteryLipoHv": "LiPo HV (3,0-4,35 V)",
|
||||
"channels_regionSetTo": "Region: {region}",
|
||||
"channels_regionNotSet": "Region: ingen",
|
||||
"channels_regionSelect_Title": "Välj en region",
|
||||
"channels_clearRegion": "klar region",
|
||||
"chat_sendImage": "Send vagnbild",
|
||||
"chat_imagePickFailed": "Kunde inte öppna det bildet",
|
||||
"chat_receivedGif": "Mottagit en GIF",
|
||||
"repeater_keySettings": "Ändra identitetsnyckel",
|
||||
"repeater_keySettingsSubtitle": "Vänd nya offentliga/privata nyckelpar",
|
||||
"repeater_prvKey": "Privat nyckel",
|
||||
"repeater_prvKeyHelper": "En ny privat nyckel för repeatern, en hexsträng med 128 tecken.",
|
||||
"repeater_generatePrvKey": "Generera en kära nyckelpaar",
|
||||
"repeater_stopGeneratingPrvKey": "Avbröka sökande efter nyckelpa",
|
||||
"repeater_pubKey": "Öffentlig nyckel",
|
||||
"repeater_pubKeyHelper": "Detta är den offentliga nyckeln som tillhör genererad privaten nyckel. Du kan inte setta den direkt.",
|
||||
"repeater_pubKeyPrefix": "Önskad prefix",
|
||||
"repeater_pubKeyPrefixHelper": "Hitta en offentlig nyckel som börjar med dessa hexadecimala siffror. Förväntad antal försök: {tries}.",
|
||||
"imageMessages_enableTitle": "Bildermeddelanden",
|
||||
"imageMessages_enableSubtitle": "Send bilder över mönstret. Det kräver en enkelt bildmodellhämtning.",
|
||||
"imageMessages_modelSectionTitle": "Bildmodell",
|
||||
"imageMessages_downloadModel": "Download",
|
||||
"imageMessages_cancelDownload": "Avbud",
|
||||
"imageMessages_removeModel": "Förhåll dig från modellen",
|
||||
"imageMessages_modelReady": "Färdig",
|
||||
"imageMessages_modelNotPublished": "Ingen publikerad än — denna byggnads kan inte laddas ner av det.",
|
||||
"imageMessages_downloadFailed": "Bildmodellen kunde inte laddas ner.",
|
||||
"imageMessages_autoProcessTitle": "Automatiska bilder automatiserar",
|
||||
"imageMessages_autoProcessSubtitle": "Rekonstruera varje bild så snart den ankommer. Använder cirka 2 GB minne varje gång; låt det omför att rekonstruera genom ett tap.",
|
||||
"imageSend_title": "Send vagnbild",
|
||||
"imageSend_cropNote": "Reserverat till 512 × 512 · förhållandet mellan storlek inte bevarat",
|
||||
"imageSend_originalSize": "Ovanstående text (engelska)\n\nTranslation (svenskt):",
|
||||
"imageSend_onAirSize": "Underför hjärnan",
|
||||
"imageSend_quality": "Kvalitet",
|
||||
"imageSend_qualityStandard": "Standard",
|
||||
"imageSend_qualityHigh": "Hög",
|
||||
"imageSend_packetsLabel": "Paket",
|
||||
"imageSend_airtimeLabel": "Tid i övrighet",
|
||||
"imageSend_sizeLabel": "Ladning",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{paket} other{paket}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Radioindikatorer inte kända",
|
||||
"imageSend_radioUnknownBody": "Förkoppna till ett enhet så kan tiden på air beräknas.",
|
||||
"imageSend_longSendTitle": "Långförsending",
|
||||
"imageSend_longSendBody": "Detta kommer att bevara kanalen roughly {duration}.",
|
||||
"imageSend_floodNote": "Flodledning: varje repeater i ramen retransmitterar varje paket, så kan kanalen vara på arbete långare än den här tiden.",
|
||||
"imageSend_parityTitle": "Omedlningspaket",
|
||||
"imageSend_paritySubtitle": "En ytterligare paket. Gruppmeddelanden inte akceras, så den här tar hänsyn till att mottar kan återuppbygga bilden om ett enkelt paket förlorats.",
|
||||
"imageSend_send": "Sänd",
|
||||
"imageSend_cancel": "Avbud",
|
||||
"imageSend_encodeFailed": "Denna bild kan inte kodas.",
|
||||
"imageSend_codecDownloading": "Bildmodellen downloads fortfarande.",
|
||||
"imageSend_codecUnavailable": "Bildsendning är inte tillgänglig på detta enhet.",
|
||||
"imageSend_codecDisabled": "Bildmeddelanden är offna i inställningarna.",
|
||||
"imageSend_deviceUnsupported": "Denna radi kan inte senda bildpaket. Använd ett äventyrsgerät med companionsystemfirmware 13 eller nyare.",
|
||||
"imageSend_directMessagesUnsupported": "Bilder senders som gruppod, så de kan endast skickas till ett kanal – inte i en direkt meddelning.",
|
||||
"imageSend_tooLarge": "Bilden kodades till mer paket än meshformaten tillåter.",
|
||||
"imageSend_sentConfirmation": "Bilden skickades som {count} {count, plural, =1{paket} other{paket}}.",
|
||||
"imageSend_sendFailed": "Bilden kunde inte skickas: {error}",
|
||||
"imageSend_sendingProgress": "Bild sendning — paket {sent} av {total}",
|
||||
"receivedImage_senderPrefix": "Nod {prefix}",
|
||||
"receivedImage_incoming": "VANTA {received} av {total} paket",
|
||||
"receivedImage_queued": "Att väta att decodera",
|
||||
"receivedImage_tapToDecode": "Tap för att decodera",
|
||||
"receivedImage_decoding": "Rekonstruktion… om 1 sekund",
|
||||
"receivedImage_incomplete": "Bilden är okomplett — {received} av {total} paket har ankomit",
|
||||
"receivedImage_corrupt": "Bilden kunde inte rekonstrueras",
|
||||
"receivedImage_decoderMissing": "Bild mottagen — bilddekoderingen är avbrott",
|
||||
"receivedImage_evicted": "Bild inte lagrad längre",
|
||||
"receivedImage_retry": "Omförs igen",
|
||||
"receivedImage_decodeAgain": "Kodera igen",
|
||||
"receivedImage_openSettings": "Skapa en uppställning",
|
||||
"receivedImage_tapToProcess": "Tap för att behandla",
|
||||
"receivedImage_awaiting": "{bytes} byte · {packets} {packets, plural, =1{paket} other{paket}}",
|
||||
"imageSend_secondsValue": "{seconds} sekunder",
|
||||
"imageSend_minutesSecondsValue": "{minutes} min {seconds} s"
|
||||
}
|
||||
|
||||
+223
-1
@@ -2585,5 +2585,227 @@
|
||||
"pathMap_noLocation": "Без геопозиції",
|
||||
"pathMap_followPacket": "Прив'язати вигляд до пакету",
|
||||
"pathMap_unfollowPacket": "Відв'язати вигляд від пакету",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS"
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "Ріси",
|
||||
"settings_regionSettingsSubtitle": "Управляти збережених регіонів",
|
||||
"settings_regionManagement_screenTitle": "Рégіональний управління",
|
||||
"settings_regionNameHint": "Назва регіону",
|
||||
"settings_regionAddRegion": "Добачить регіон",
|
||||
"settings_regionFetchRegions": "Збираємо регіони з репітерів",
|
||||
"settings_regionFetchRegionsFail": "Ні відкриті регіони",
|
||||
"settings_regionFetchRegionsAlreadyExists": "Цей регіон вже було доданий",
|
||||
"settings_regionName": "Ріонна назва",
|
||||
"settings_regionDeleted": "Ріон витертений",
|
||||
"settings_deleteRegion": "Видалення регіону",
|
||||
"settings_deleteRegionConfirm": "Вирішіть \"{region}\" з списку регіонів?",
|
||||
"settings_infoHardware": "Оборудовання",
|
||||
"settings_infoFirmware": "Програмне вміст (фirmware)",
|
||||
"repeater_pathHashModeOption0": "0 - 1 байт",
|
||||
"repeater_pathHashModeOption1": "1 - 2 байти",
|
||||
"repeater_pathHashModeOption2": "2 - 3 байти",
|
||||
"repeater_pathHashModeOption3": "3 - 4 байта",
|
||||
"appSettings_batteryLipoHv": "ЛиPo HV (3,0-4,35 В)",
|
||||
"channels_regionSetTo": "Ріон: {region}",
|
||||
"channels_regionNotSet": "Ріон: нема",
|
||||
"channels_regionSelect_Title": "Вybірте регіон",
|
||||
"channels_clearRegion": "Чистя зона",
|
||||
"chat_sendImage": "Нашкоду зовні\n\n(or more naturally, depending on context)\n\nПошукуєте изображення",
|
||||
"chat_imagePickFailed": "Неможливо відкрити це изображення",
|
||||
"chat_receivedGif": "Підймовано GIF",
|
||||
"repeater_keySettings": "Зміна ключів ідентифікації",
|
||||
"repeater_keySettingsSubtitle": "Замініть публічний/приватний ключ",
|
||||
"repeater_prvKey": "Приватний ключ",
|
||||
"repeater_prvKeyHelper": "Нова приватна ключ для репітера, 128-символова штучна штука в шестнадцатеричному форматі.",
|
||||
"repeater_generatePrvKey": "Синхронізujте ключовий пару",
|
||||
"repeater_stopGeneratingPrvKey": "Прервити шук ключового пару",
|
||||
"repeater_pubKey": "Публічна ключ",
|
||||
"repeater_pubKeyHelper": "Це публична ключ, який пов'язано з створеною приватною ключом. Ви не можете встановлювати його напрямую.",
|
||||
"repeater_pubKeyPrefix": "Високорейтингове прикінання",
|
||||
"repeater_pubKeyPrefixHelper": "Найдіть відповідний открытий ключ, який починається ціми шестнадцатыми цифрами. Ожидається кількість потрібних попыток: {tries}.",
|
||||
"imageMessages_enableTitle": "Підтримка зображень для посилання",
|
||||
"imageMessages_enableSubtitle": "Пошукуєте изображення через сеть. Вимagaєте однократне скачання моделю изображення.",
|
||||
"imageMessages_modelSectionTitle": "Модель для зображень",
|
||||
"imageMessages_downloadModel": "Скачання",
|
||||
"imageMessages_cancelDownload": "Завершити",
|
||||
"imageMessages_removeModel": "Видалим модель",
|
||||
"imageMessages_modelReady": "Готово",
|
||||
"imageMessages_modelNotPublished": "Щоб не було опубліковано — це версія не дозволяє зробити скачання.",
|
||||
"imageMessages_downloadFailed": "Модель для зображень не можна сказати.",
|
||||
"imageMessages_autoProcessTitle": "Автоматично оброблювати obraзи",
|
||||
"imageMessages_autoProcessSubtitle": "Кожна картинка повинні бути відтворена на мій момент прибуття. Використовує приблизно 2 ГБ пам'яті на кожен раз; відключіть від відтворення за допомогою кlikу.",
|
||||
"imageSend_title": "Нашкоду зовні\n\n(or more naturally, depending on context)\n\nПошукуєте изображення",
|
||||
"imageSend_cropNote": "Манітовано до 512 × 512 · соотношення варість не зберігається",
|
||||
"imageSend_originalSize": "Оригінал",
|
||||
"imageSend_onAirSize": "На ері",
|
||||
"imageSend_quality": "Качество",
|
||||
"imageSend_qualityStandard": "Стандарт",
|
||||
"imageSend_qualityHigh": "Висок",
|
||||
"imageSend_packetsLabel": "Пакети",
|
||||
"imageSend_airtimeLabel": "Час на ері",
|
||||
"imageSend_sizeLabel": "Підлог",
|
||||
"imageSend_packetsCount": "{count} {count, plural, one{пакет} few{пакети} many{пакетів} other{пакета}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "Настройки радио неизвестні",
|
||||
"imageSend_radioUnknownBody": "Залучіться до пристрою, щоб можна було розрахунювати час в етері.",
|
||||
"imageSend_longSendTitle": "Длуга передача",
|
||||
"imageSend_longSendBody": "Це забезпечить канал на approximativno {duration} хвилин.",
|
||||
"imageSend_floodNote": "Рухування потоків: кожен ретрансатор у діапазоні відправлює кожен пакет, тому канал залишається занятшим довше, ніж це.",
|
||||
"imageSend_parityTitle": "Пакет відновлення",
|
||||
"imageSend_paritySubtitle": "Один дополний пакет. Групові посилання не відповідають, тому це дозволяє відвідувачу відтворити зображення, якщо один пакет втрачений.",
|
||||
"imageSend_send": "Пошутить",
|
||||
"imageSend_cancel": "Завершити",
|
||||
"imageSend_encodeFailed": "Це изображення не може бути кодировано.",
|
||||
"imageSend_codecDownloading": "Модель для відтворення изображень ще збирається.",
|
||||
"imageSend_codecUnavailable": "Постій для відправлення изображень на цьому пристрої не доступний.",
|
||||
"imageSend_codecDisabled": "Пictesovani posyly wyключені в настройках.",
|
||||
"imageSend_deviceUnsupported": "Цей радіопередач не може отправляти пакети зображень. Зконнете пристрої, що працює з обладнанням керемонітом компаньєр 13 або новшим.",
|
||||
"imageSend_directMessagesUnsupported": "Фотографії передаються як дані групою, тому їх можна відправляти лише на канал — не в прямому посилання.",
|
||||
"imageSend_tooLarge": "Це изображення кодує більше пакітів, ніж дозволяє формат сети.",
|
||||
"imageSend_sentConfirmation": "Зображення надіслано як {count} {count, plural, =1{пакет} other{пакетів}}.",
|
||||
"imageSend_sendFailed": "Изображення не можна відправити: {error}",
|
||||
"imageSend_sendingProgress": "Пошускаємо изображення — пакет {sent} з {total}",
|
||||
"receivedImage_senderPrefix": "Нод {prefix}",
|
||||
"receivedImage_incoming": "Підходяче: {received} з {total} пакітів",
|
||||
"receivedImage_queued": "Очікування розслівання коду",
|
||||
"receivedImage_tapToDecode": "Кliknite для декодування",
|
||||
"receivedImage_decoding": "Повноювання… за прибуття 1 с.",
|
||||
"receivedImage_incomplete": "Образок не повний — {received} з {total} пакітів прибавлено",
|
||||
"receivedImage_corrupt": "Obraz не можна відтворити",
|
||||
"receivedImage_decoderMissing": "Під час приємки — розшифровка зображення не вдалося.",
|
||||
"receivedImage_evicted": "Изображення не зберігається",
|
||||
"receivedImage_retry": "Попробуй ще раз",
|
||||
"receivedImage_decodeAgain": "Декодуй ще раз",
|
||||
"receivedImage_openSettings": "Заведіть",
|
||||
"receivedImage_tapToProcess": "Кликніть для обробки",
|
||||
"receivedImage_awaiting": "{bytes} байтів · {packets} {packets, plural, =1{пакет} other{пакетів}}",
|
||||
"imageSend_secondsValue": "{seconds} секунди",
|
||||
"imageSend_minutesSecondsValue": "{minutes} хв {seconds} с"
|
||||
}
|
||||
|
||||
+223
-1
@@ -2610,5 +2610,227 @@
|
||||
"pathMap_followPacket": "锁定视图跟随数据包",
|
||||
"pathMap_unfollowPacket": "解锁视图跟随",
|
||||
"pathMap_gpsCount": "{confirmed}/{total} GPS",
|
||||
"pathMap_partialAnimation": "{count, plural, =1{1 跳无位置信息 — 显示的路径不完整} other{{count} 跳无位置信息 — 显示的路径不完整}}"
|
||||
"pathMap_partialAnimation": "{count, plural, =1{1 跳无位置信息 — 显示的路径不完整} other{{count} 跳无位置信息 — 显示的路径不完整}}",
|
||||
"@settings_deleteRegionConfirm": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@channels_regionSetTo": {
|
||||
"placeholders": {
|
||||
"region": {
|
||||
"type": "String",
|
||||
"example": "de-mitte"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@chat_imagePickFailed": {
|
||||
"description": "Shown when picking or reading a photo to send fails"
|
||||
},
|
||||
"@repeater_pubKeyPrefixHelper": {
|
||||
"placeholders": {
|
||||
"tries": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_packetsCount": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_range": {
|
||||
"placeholders": {
|
||||
"min": {
|
||||
"type": "String"
|
||||
},
|
||||
"max": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_longSendBody": {
|
||||
"placeholders": {
|
||||
"duration": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sentConfirmation": {
|
||||
"placeholders": {
|
||||
"count": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendFailed": {
|
||||
"placeholders": {
|
||||
"error": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_sendingProgress": {
|
||||
"placeholders": {
|
||||
"sent": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_senderPrefix": {
|
||||
"placeholders": {
|
||||
"prefix": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incoming": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_incomplete": {
|
||||
"placeholders": {
|
||||
"received": {
|
||||
"type": "int"
|
||||
},
|
||||
"total": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@receivedImage_awaiting": {
|
||||
"placeholders": {
|
||||
"bytes": {
|
||||
"type": "int"
|
||||
},
|
||||
"packets": {
|
||||
"type": "int"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_secondsValue": {
|
||||
"placeholders": {
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"@imageSend_minutesSecondsValue": {
|
||||
"placeholders": {
|
||||
"minutes": {
|
||||
"type": "String"
|
||||
},
|
||||
"seconds": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"settings_regionSettings": "地区",
|
||||
"settings_regionSettingsSubtitle": "管理已存储的区域",
|
||||
"settings_regionManagement_screenTitle": "区域管理",
|
||||
"settings_regionNameHint": "区域名称",
|
||||
"settings_regionAddRegion": "增加地区",
|
||||
"settings_regionFetchRegions": "从中继器获取区域",
|
||||
"settings_regionFetchRegionsFail": "未发现任何地区",
|
||||
"settings_regionFetchRegionsAlreadyExists": "该地区已被添加",
|
||||
"settings_regionName": "地区名称",
|
||||
"settings_regionDeleted": "区域已删除",
|
||||
"settings_deleteRegion": "删除区域",
|
||||
"settings_deleteRegionConfirm": "从 {region} 列表中删除?",
|
||||
"settings_infoHardware": "硬件",
|
||||
"settings_infoFirmware": "固件",
|
||||
"repeater_pathHashModeOption0": "0 - 1 字节",
|
||||
"repeater_pathHashModeOption1": "1 - 2 字节",
|
||||
"repeater_pathHashModeOption2": "2 - 3 字节",
|
||||
"repeater_pathHashModeOption3": "3 - 4 字节",
|
||||
"appSettings_batteryLipoHv": "锂多压电源(3.0-4.35伏)",
|
||||
"channels_regionSetTo": "地区:{region}",
|
||||
"channels_regionNotSet": "地区:无",
|
||||
"channels_regionSelect_Title": "选择一个地区",
|
||||
"channels_clearRegion": "无碍区域",
|
||||
"chat_sendImage": "发送图片",
|
||||
"chat_imagePickFailed": "无法打开该图片",
|
||||
"chat_receivedGif": "收到一个GIF",
|
||||
"repeater_keySettings": "更改身份密钥",
|
||||
"repeater_keySettingsSubtitle": "更换公钥/私钥对",
|
||||
"repeater_prvKey": "私钥",
|
||||
"repeater_prvKeyHelper": "中继器的新私钥,为一个128位的十六进制字符串。",
|
||||
"repeater_generatePrvKey": "生成一个随机的密钥对",
|
||||
"repeater_stopGeneratingPrvKey": "中断密钥对搜索",
|
||||
"repeater_pubKey": "公钥",
|
||||
"repeater_pubKeyHelper": "这是与生成的私钥配对的公钥。您不能直接设置此内容。",
|
||||
"repeater_pubKeyPrefix": "期望的前缀",
|
||||
"repeater_pubKeyPrefixHelper": "找到一组以这些十六进制数字开头的公钥。预计尝试次数:{tries}",
|
||||
"imageMessages_enableTitle": "启用图片消息",
|
||||
"imageMessages_enableSubtitle": "通过网格发送图像。需要一次性下载图像模型。",
|
||||
"imageMessages_modelSectionTitle": "图像模型",
|
||||
"imageMessages_downloadModel": "下载",
|
||||
"imageMessages_cancelDownload": "取消",
|
||||
"imageMessages_removeModel": "移除模型",
|
||||
"imageMessages_modelReady": "准备就绪",
|
||||
"imageMessages_modelNotPublished": "尚未发布——此版本无法下载该内容。",
|
||||
"imageMessages_downloadFailed": "图像模型无法下载。",
|
||||
"imageMessages_autoProcessTitle": "自动处理图像",
|
||||
"imageMessages_autoProcessSubtitle": "每次图像到达后立即重建,每次需要约2GB的内存;若想关闭重建功能,可通过点击取消开启。",
|
||||
"imageSend_title": "发送图片",
|
||||
"imageSend_cropNote": "调整大小至512 × 512 · 宽高比未保留",
|
||||
"imageSend_originalSize": "原文",
|
||||
"imageSend_onAirSize": "直播中",
|
||||
"imageSend_quality": "质量",
|
||||
"imageSend_qualityStandard": "标准",
|
||||
"imageSend_qualityHigh": "高",
|
||||
"imageSend_packetsLabel": "数据包",
|
||||
"imageSend_airtimeLabel": "播出时间",
|
||||
"imageSend_sizeLabel": "有效载荷",
|
||||
"imageSend_packetsCount": "{count} {count, plural, =1{个数据包} other{个数据包}}",
|
||||
"imageSend_range": "{min}–{max}",
|
||||
"imageSend_unknownValue": "—",
|
||||
"imageSend_radioUnknownTitle": "无线电设置未知",
|
||||
"imageSend_radioUnknownBody": "连接设备以计算播出时间。",
|
||||
"imageSend_longSendTitle": "长距离传输",
|
||||
"imageSend_longSendBody": "这将维持频道大约 {duration} 时间。",
|
||||
"imageSend_floodNote": "洪水路由:每个中继站都会转发每个数据包,因此信道比这段时间更长地处于繁忙状态。",
|
||||
"imageSend_parityTitle": "恢复包",
|
||||
"imageSend_paritySubtitle": "多一个数据包。群发消息不被确认,因此如果某个数据包丢失,接收方可以重新构建图像。",
|
||||
"imageSend_send": "发送",
|
||||
"imageSend_cancel": "取消",
|
||||
"imageSend_encodeFailed": "此图像无法编码。",
|
||||
"imageSend_codecDownloading": "图像模型仍在下载中。",
|
||||
"imageSend_codecUnavailable": "此设备无法发送图片。",
|
||||
"imageSend_codecDisabled": "图片消息在设置中已关闭。",
|
||||
"imageSend_deviceUnsupported": "此无线电无法发送图像数据包。请连接运行伴侣固件13或更高版本的设备。",
|
||||
"imageSend_directMessagesUnsupported": "图片作为群组数据传输,因此只能发送到频道,而不能直接发送给个人。",
|
||||
"imageSend_tooLarge": "该图像编码的数据包数量超过了网格格式所允许的范围。",
|
||||
"imageSend_sentConfirmation": "图像已作为 {count} {count, plural, =1{个数据包} other{个数据包}} 发送。",
|
||||
"imageSend_sendFailed": "无法发送图片:{error}",
|
||||
"imageSend_sendingProgress": "发送图像 — 已发送 {sent} 包含 {total}",
|
||||
"receivedImage_senderPrefix": "节点 {prefix}",
|
||||
"receivedImage_incoming": "已收到的 {received} 个包含在 {total} 个包裹中",
|
||||
"receivedImage_queued": "等待解码",
|
||||
"receivedImage_tapToDecode": "点击解锁",
|
||||
"receivedImage_decoding": "重建……大约1秒",
|
||||
"receivedImage_incomplete": "图片不完整 — {received} 已收到 {total} 个数据包",
|
||||
"receivedImage_corrupt": "图像无法重建",
|
||||
"receivedImage_decoderMissing": "收到图片 — 图像解码失败",
|
||||
"receivedImage_evicted": "图片已不再存储",
|
||||
"receivedImage_retry": "再试一次",
|
||||
"receivedImage_decodeAgain": "重新解码",
|
||||
"receivedImage_openSettings": "建立",
|
||||
"receivedImage_tapToProcess": "点击处理",
|
||||
"receivedImage_awaiting": "{bytes} 字节 · {packets} {packets, plural, =1{个数据包} other{个数据包}}",
|
||||
"imageSend_secondsValue": "{seconds} 秒",
|
||||
"imageSend_minutesSecondsValue": "{minutes} 分 {seconds} 秒"
|
||||
}
|
||||
|
||||
+2
-5
@@ -345,8 +345,7 @@ class MeshCoreApp extends StatefulWidget {
|
||||
/// packets" until some unrelated image arrived.
|
||||
const Duration _kImageSweepInterval = Duration(seconds: 5);
|
||||
|
||||
class _MeshCoreAppState extends State<MeshCoreApp>
|
||||
with WidgetsBindingObserver {
|
||||
class _MeshCoreAppState extends State<MeshCoreApp> with WidgetsBindingObserver {
|
||||
Timer? _imageSweepTimer;
|
||||
|
||||
@override
|
||||
@@ -369,9 +368,7 @@ class _MeshCoreAppState extends State<MeshCoreApp>
|
||||
@override
|
||||
void didChangeAppLifecycleState(AppLifecycleState state) {
|
||||
super.didChangeAppLifecycleState(state);
|
||||
widget.receivedImageStore.setForeground(
|
||||
state == AppLifecycleState.resumed,
|
||||
);
|
||||
widget.receivedImageStore.setForeground(state == AppLifecycleState.resumed);
|
||||
// ~2.7 GiB resident in a backgrounded app is a low-memory-killer kill, so
|
||||
// unlike the translation stack the graph is dropped on background rather
|
||||
// than held until the radio disconnects.
|
||||
|
||||
@@ -240,8 +240,7 @@ class AppSettings {
|
||||
}) : batteryChemistryByDeviceId = batteryChemistryByDeviceId ?? {},
|
||||
batteryChemistryByRepeaterId = batteryChemistryByRepeaterId ?? {},
|
||||
mutedChannels = mutedChannels ?? {},
|
||||
imageCodecDownloadedModels =
|
||||
imageCodecDownloadedModels ?? const [],
|
||||
imageCodecDownloadedModels = imageCodecDownloadedModels ?? const [],
|
||||
translationDownloadedModels = translationDownloadedModels ?? const [],
|
||||
cyr2latProfiles =
|
||||
cyr2latProfiles ??
|
||||
|
||||
@@ -464,8 +464,7 @@ class ImageCodecModelSpec {
|
||||
///
|
||||
/// Defined by role, not by position. Kept under the old name so the settings
|
||||
/// screen and [imageCodecModelFriendlyName] keep working.
|
||||
ImageCodecModelAsset get graph =>
|
||||
assetFor(ImageCodecAssetRole.decoderGraph);
|
||||
ImageCodecModelAsset get graph => assetFor(ImageCodecAssetRole.decoderGraph);
|
||||
|
||||
String get fileName => graph.fileName;
|
||||
|
||||
|
||||
@@ -418,13 +418,15 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
|
||||
// sources are merged here in timestamp order and the list
|
||||
// below indexes rows, not messages.
|
||||
final rows = <_ChannelChatRow>[
|
||||
for (final message in messages) _ChannelChatRow(message: message),
|
||||
for (final message in messages)
|
||||
_ChannelChatRow(message: message),
|
||||
...imageRows,
|
||||
]..sort((a, b) => a.timestamp.compareTo(b.timestamp));
|
||||
|
||||
// Reverse rows so newest appear at bottom with reverse: true
|
||||
final reversedRows = rows.reversed.toList();
|
||||
final itemCount = reversedRows.length + (_isLoadingOlder ? 1 : 0);
|
||||
final itemCount =
|
||||
reversedRows.length + (_isLoadingOlder ? 1 : 0);
|
||||
|
||||
// Prune stale keys (deleted/cleared messages) to avoid
|
||||
// unbounded growth.
|
||||
@@ -500,7 +502,10 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
|
||||
final message = row.message;
|
||||
final bubble = message != null
|
||||
? _buildMessageBubble(message, textScale)
|
||||
: _buildImageBubble(row.image!, textScale);
|
||||
: _buildImageBubble(
|
||||
row.image!,
|
||||
textScale,
|
||||
);
|
||||
if (isUnreadAnchor) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
@@ -1193,9 +1198,7 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
|
||||
parity: result.includeParity,
|
||||
);
|
||||
} on ArgumentError {
|
||||
messenger.showSnackBar(
|
||||
SnackBar(content: Text(l10n.imageSend_tooLarge)),
|
||||
);
|
||||
messenger.showSnackBar(SnackBar(content: Text(l10n.imageSend_tooLarge)));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1206,7 +1209,8 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
|
||||
final perPacket = total == null
|
||||
? Duration.zero
|
||||
: Duration(
|
||||
microseconds: total.inMicroseconds ~/
|
||||
microseconds:
|
||||
total.inMicroseconds ~/
|
||||
(result.packetCount == 0 ? 1 : result.packetCount),
|
||||
);
|
||||
|
||||
@@ -1411,9 +1415,7 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
|
||||
child: Container(
|
||||
padding: const EdgeInsets.all(4),
|
||||
decoration: BoxDecoration(
|
||||
color: isOutgoing
|
||||
? MeshPalette.me
|
||||
: scheme.surfaceContainerLow,
|
||||
color: isOutgoing ? MeshPalette.me : scheme.surfaceContainerLow,
|
||||
borderRadius: BorderRadius.circular(MeshRadii.lg),
|
||||
border: Border.all(
|
||||
color: isOutgoing
|
||||
@@ -1427,7 +1429,11 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
|
||||
children: [
|
||||
if (!isOutgoing)
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8, top: 4, bottom: 4),
|
||||
padding: const EdgeInsets.only(
|
||||
left: 8,
|
||||
top: 4,
|
||||
bottom: 4,
|
||||
),
|
||||
child: Text(
|
||||
_imageSenderLabel(entry),
|
||||
style: TextStyle(
|
||||
@@ -1454,7 +1460,11 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.only(left: 8, right: 8, bottom: 4),
|
||||
padding: const EdgeInsets.only(
|
||||
left: 8,
|
||||
right: 8,
|
||||
bottom: 4,
|
||||
),
|
||||
child: Text(
|
||||
_formatTime(context, entry.firstSeen),
|
||||
style: MeshTheme.mono(
|
||||
@@ -1482,7 +1492,8 @@ class _ChannelChatScreenState extends State<ChannelChatScreen> {
|
||||
String _imageSenderLabel(ReceivedImageEntry entry) {
|
||||
final hex = entry.senderPrefix.toRadixString(16).padLeft(4, '0');
|
||||
final connector = context.read<MeshCoreConnector>();
|
||||
if (entry.isOutgoing) return connector.selfName ?? context.l10n.receivedImage_senderPrefix(hex);
|
||||
if (entry.isOutgoing)
|
||||
return connector.selfName ?? context.l10n.receivedImage_senderPrefix(hex);
|
||||
final matches = connector.contacts
|
||||
.where((c) => c.publicKeyHex.toLowerCase().startsWith(hex))
|
||||
.toList();
|
||||
|
||||
@@ -384,7 +384,8 @@ class ImageChunkHeader {
|
||||
bool get isParity => index == total;
|
||||
|
||||
@override
|
||||
String toString() => 'ImageChunkHeader(sender: 0x'
|
||||
String toString() =>
|
||||
'ImageChunkHeader(sender: 0x'
|
||||
'${senderPrefix.toRadixString(16).padLeft(4, '0')}, img: $imgId, '
|
||||
'idx: $index/$total${isParity ? ' parity' : ''})';
|
||||
}
|
||||
@@ -585,7 +586,8 @@ class ImageStreamKey {
|
||||
int get hashCode => Object.hash(senderPrefix, imgId, channelIndex);
|
||||
|
||||
@override
|
||||
String toString() => 'ImageStreamKey(0x'
|
||||
String toString() =>
|
||||
'ImageStreamKey(0x'
|
||||
'${senderPrefix.toRadixString(16).padLeft(4, '0')}/$imgId@$channelIndex)';
|
||||
}
|
||||
|
||||
@@ -625,7 +627,6 @@ enum ImageReassemblyFailureReason {
|
||||
/// Evicted to keep the pending map inside its size cap.
|
||||
overflow,
|
||||
|
||||
|
||||
/// Reassembled but the metadata byte was undecodable
|
||||
/// ([ImageChunkStatus.unsupportedFormat]).
|
||||
unsupportedFormat,
|
||||
@@ -647,7 +648,6 @@ class ImageReassemblyResult {
|
||||
/// Number of data chunks in the image.
|
||||
final int chunkCount;
|
||||
|
||||
|
||||
const ImageReassemblyResult({
|
||||
required this.key,
|
||||
required this.metadata,
|
||||
@@ -688,7 +688,8 @@ class ImageReassemblyFailure {
|
||||
reason == ImageReassemblyFailureReason.unsupportedFormat;
|
||||
|
||||
@override
|
||||
String toString() => 'ImageReassemblyFailure($key, '
|
||||
String toString() =>
|
||||
'ImageReassemblyFailure($key, '
|
||||
'$receivedDataChunks/$total, parity: $hadParity, ${reason.name})';
|
||||
}
|
||||
|
||||
@@ -966,11 +967,7 @@ class ImageReassembler {
|
||||
),
|
||||
);
|
||||
}
|
||||
return ImageChunkOutcome(
|
||||
finish.status,
|
||||
header: header,
|
||||
result: result,
|
||||
);
|
||||
return ImageChunkOutcome(finish.status, header: header, result: result);
|
||||
}
|
||||
return ImageChunkOutcome(
|
||||
conflicted ? ImageChunkStatus.conflicting : ImageChunkStatus.accepted,
|
||||
@@ -1061,8 +1058,10 @@ class ImageReassembler {
|
||||
if (!entry.isRecoverable) return null;
|
||||
|
||||
// Exactly one data chunk missing and we hold parity: rebuild it.
|
||||
final missing =
|
||||
List<int>.generate(entry.total, (i) => i).firstWhere((i) => !entry.bodies.containsKey(i));
|
||||
final missing = List<int>.generate(
|
||||
entry.total,
|
||||
(i) => i,
|
||||
).firstWhere((i) => !entry.bodies.containsKey(i));
|
||||
final parity = entry.parityBody!;
|
||||
var lengthXor = parity[0] & 0xFF;
|
||||
final xor = Uint8List(kImageChunkBodyBytes);
|
||||
@@ -1232,10 +1231,8 @@ ParsedChannelData? parseChannelDataFrame(Uint8List frame) {
|
||||
///
|
||||
/// Implemented by the connector-facing adapter; kept as a typedef so the
|
||||
/// transport itself never imports the connector (and stays testable).
|
||||
typedef ChannelBlobSender = Future<void> Function(
|
||||
Uint8List blob,
|
||||
int channelIndex,
|
||||
);
|
||||
typedef ChannelBlobSender =
|
||||
Future<void> Function(Uint8List blob, int channelIndex);
|
||||
|
||||
/// Progress report while an image is going out.
|
||||
class ImageSendProgress {
|
||||
|
||||
@@ -300,9 +300,15 @@ class OnnxImageCodecBackend implements ImageCodecBackend {
|
||||
// The path must be the `.onnx` graph, with its `.onnx.data`
|
||||
// external-weights sibling present in the same directory under exactly the
|
||||
// filename the graph records. See `ImageCodecModelSpec`.
|
||||
final session = await _runtime.createSession(_requireBundle().decoderGraphPath);
|
||||
final session = await _runtime.createSession(
|
||||
_requireBundle().decoderGraphPath,
|
||||
);
|
||||
_decoder = session;
|
||||
_inputName = _pick(session.inputNames, kImageCodecDecoderInputName, 'input');
|
||||
_inputName = _pick(
|
||||
session.inputNames,
|
||||
kImageCodecDecoderInputName,
|
||||
'input',
|
||||
);
|
||||
_outputName = _pick(
|
||||
session.outputNames,
|
||||
kImageCodecDecoderOutputName,
|
||||
@@ -735,9 +741,10 @@ class OnnxAeicEntropyNetwork implements AeicEntropyNetwork {
|
||||
Float32List(kBaseElements),
|
||||
kBaseShape,
|
||||
),
|
||||
kStageInput: await OrtValue.fromList(Int32List.fromList(<int>[
|
||||
kHyperStage,
|
||||
]), <int>[1]),
|
||||
kStageInput: await OrtValue.fromList(
|
||||
Int32List.fromList(<int>[kHyperStage]),
|
||||
<int>[1],
|
||||
),
|
||||
});
|
||||
try {
|
||||
return await _floats(result, kBase0Output);
|
||||
@@ -766,9 +773,10 @@ class OnnxAeicEntropyNetwork implements AeicEntropyNetwork {
|
||||
final result = await _run(session, <String, OrtValue>{
|
||||
kZqInput: await OrtValue.fromList(Float32List(kZqElements), kZqShape),
|
||||
kBaseInput: await OrtValue.fromList(base, kBaseShape),
|
||||
kStageInput: await OrtValue.fromList(Int32List.fromList(<int>[
|
||||
stage,
|
||||
]), <int>[1]),
|
||||
kStageInput: await OrtValue.fromList(
|
||||
Int32List.fromList(<int>[stage]),
|
||||
<int>[1],
|
||||
),
|
||||
});
|
||||
try {
|
||||
// Already masked by the graph. `AeicEntropyCodec` masks again, which is
|
||||
|
||||
@@ -239,9 +239,8 @@ class AeicMaskSet {
|
||||
for (var y = 0; y < geometry.yHeight; y++) {
|
||||
for (var x = 0; x < w; x++) {
|
||||
final group = liveGroupAt(stage, y, x);
|
||||
out[(group * cq + c) * plane + y * w + x] = squeezed[c * plane +
|
||||
y * w +
|
||||
x];
|
||||
out[(group * cq + c) * plane + y * w + x] =
|
||||
squeezed[c * plane + y * w + x];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -272,7 +271,11 @@ class AeicMaskSet {
|
||||
///
|
||||
/// `stageLatent` must already be masked (it is the output of [unsqueeze]), so
|
||||
/// this is a select, not an add — which is what keeps it exact in float32.
|
||||
Float32List mergeContext(Float32List base, Float32List stageLatent, int stage) {
|
||||
Float32List mergeContext(
|
||||
Float32List base,
|
||||
Float32List stageLatent,
|
||||
int stage,
|
||||
) {
|
||||
final out = Float32List.fromList(base);
|
||||
final plane = geometry.yHeight * geometry.yWidth;
|
||||
final cq = geometry.squeezedChannels;
|
||||
|
||||
@@ -4,7 +4,9 @@ import '../models/image_codec_support.dart';
|
||||
|
||||
class ImageCodecFileStore {
|
||||
Future<String> modelDirectoryPath() async {
|
||||
throw UnsupportedError('Local codec model storage is not supported on web.');
|
||||
throw UnsupportedError(
|
||||
'Local codec model storage is not supported on web.',
|
||||
);
|
||||
}
|
||||
|
||||
Future<List<ImageCodecModelRecord>> scanDownloadedModels() async {
|
||||
@@ -19,15 +21,21 @@ class ImageCodecFileStore {
|
||||
required String fileName,
|
||||
required Stream<List<int>> chunks,
|
||||
}) async {
|
||||
throw UnsupportedError('Local codec model storage is not supported on web.');
|
||||
throw UnsupportedError(
|
||||
'Local codec model storage is not supported on web.',
|
||||
);
|
||||
}
|
||||
|
||||
Future<String> chunkFilePath(String fileName, int index) async {
|
||||
throw UnsupportedError('Local codec model storage is not supported on web.');
|
||||
throw UnsupportedError(
|
||||
'Local codec model storage is not supported on web.',
|
||||
);
|
||||
}
|
||||
|
||||
Future<String> modelFilePath(String fileName) async {
|
||||
throw UnsupportedError('Local codec model storage is not supported on web.');
|
||||
throw UnsupportedError(
|
||||
'Local codec model storage is not supported on web.',
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> deletePartialDownloads(String fileName) async {}
|
||||
@@ -38,11 +46,15 @@ class ImageCodecFileStore {
|
||||
required String path,
|
||||
required Stream<List<int>> chunks,
|
||||
}) async {
|
||||
throw UnsupportedError('Local codec model storage is not supported on web.');
|
||||
throw UnsupportedError(
|
||||
'Local codec model storage is not supported on web.',
|
||||
);
|
||||
}
|
||||
|
||||
Future<String> sha256OfFile(String path) async {
|
||||
throw UnsupportedError('Local codec model storage is not supported on web.');
|
||||
throw UnsupportedError(
|
||||
'Local codec model storage is not supported on web.',
|
||||
);
|
||||
}
|
||||
|
||||
Future<Uint8List> readFileBytes(String path) async {
|
||||
@@ -53,7 +65,9 @@ class ImageCodecFileStore {
|
||||
required String fileName,
|
||||
required List<String> chunkPaths,
|
||||
}) async {
|
||||
throw UnsupportedError('Local codec model storage is not supported on web.');
|
||||
throw UnsupportedError(
|
||||
'Local codec model storage is not supported on web.',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -285,7 +285,10 @@ class ImageCodecService extends ChangeNotifier implements ImageSendCodec {
|
||||
final spec = _specForId(model.id);
|
||||
final directory = _directoryOf(model.localPath);
|
||||
|
||||
String? pathFor(ImageCodecAssetRole role, bool Function(String) looksRight) {
|
||||
String? pathFor(
|
||||
ImageCodecAssetRole role,
|
||||
bool Function(String) looksRight,
|
||||
) {
|
||||
// 1. What the installer recorded this file AS. Exact, and the only source
|
||||
// that can tell the two entropy graphs apart.
|
||||
final recorded = model.fileNameForRole(role);
|
||||
@@ -430,7 +433,8 @@ class ImageCodecService extends ChangeNotifier implements ImageSendCodec {
|
||||
assetFileNames: present,
|
||||
assetRoles: {
|
||||
for (final asset in spec.assets)
|
||||
if (onDisk.containsKey(asset.fileName)) asset.fileName: asset.role,
|
||||
if (onDisk.containsKey(asset.fileName))
|
||||
asset.fileName: asset.role,
|
||||
},
|
||||
bundleVersion: complete ? kImageCodecBundleVersion : 0,
|
||||
),
|
||||
@@ -669,9 +673,7 @@ class ImageCodecService extends ChangeNotifier implements ImageSendCodec {
|
||||
// The only place the role of each downloaded file is known for
|
||||
// certain. Recorded now so nothing downstream has to infer it from a
|
||||
// filename — see [ImageCodecModelRecord.assetRoles].
|
||||
assetRoles: {
|
||||
for (final asset in assets) asset.fileName: asset.role,
|
||||
},
|
||||
assetRoles: {for (final asset in assets) asset.fileName: asset.role},
|
||||
bundleVersion: bundleVersion,
|
||||
);
|
||||
final updated = [
|
||||
|
||||
@@ -61,7 +61,10 @@ class PrefsImageCodecSettingsStore implements ImageCodecSettingsStore {
|
||||
_preferences = preferences;
|
||||
_loaded = true;
|
||||
try {
|
||||
await PrefsManager.instance.setString(_key, jsonEncode(preferences.toJson()));
|
||||
await PrefsManager.instance.setString(
|
||||
_key,
|
||||
jsonEncode(preferences.toJson()),
|
||||
);
|
||||
} catch (error) {
|
||||
appLogger.warn('Image codec settings save failed: $error');
|
||||
}
|
||||
|
||||
@@ -85,7 +85,9 @@ class FileReceivedImageBlobStore implements ReceivedImageBlobStore {
|
||||
|
||||
Future<String> _resolve() async {
|
||||
final base = await _baseDirectory();
|
||||
final dir = Directory('${base.path}${Platform.pathSeparator}$directoryName');
|
||||
final dir = Directory(
|
||||
'${base.path}${Platform.pathSeparator}$directoryName',
|
||||
);
|
||||
if (!dir.existsSync()) {
|
||||
await dir.create(recursive: true);
|
||||
}
|
||||
@@ -112,7 +114,11 @@ class FileReceivedImageBlobStore implements ReceivedImageBlobStore {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _write(String streamId, String extension, Uint8List bytes) async {
|
||||
Future<void> _write(
|
||||
String streamId,
|
||||
String extension,
|
||||
Uint8List bytes,
|
||||
) async {
|
||||
try {
|
||||
final path = await _pathFor(streamId, extension);
|
||||
if (path == null) {
|
||||
@@ -121,7 +127,9 @@ class FileReceivedImageBlobStore implements ReceivedImageBlobStore {
|
||||
}
|
||||
await File(path).writeAsBytes(bytes, flush: true);
|
||||
} catch (error) {
|
||||
debugPrint('received_image_blob_store: write $streamId$extension: $error');
|
||||
debugPrint(
|
||||
'received_image_blob_store: write $streamId$extension: $error',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -132,7 +140,9 @@ class FileReceivedImageBlobStore implements ReceivedImageBlobStore {
|
||||
final file = File(path);
|
||||
if (file.existsSync()) await file.delete();
|
||||
} catch (error) {
|
||||
debugPrint('received_image_blob_store: delete $streamId$extension: $error');
|
||||
debugPrint(
|
||||
'received_image_blob_store: delete $streamId$extension: $error',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -74,7 +74,8 @@ class ReceivedImageRef {
|
||||
static String encode(String streamId) => '$scheme$streamId';
|
||||
|
||||
/// Returns the stream id, or null when [text] is not an image sentinel.
|
||||
static String? parse(String text) => _pattern.firstMatch(text.trim())?.group(1);
|
||||
static String? parse(String text) =>
|
||||
_pattern.firstMatch(text.trim())?.group(1);
|
||||
|
||||
/// `%04x%02x%08x` — 4 hex sender prefix, 2 hex img id, 8 hex epoch seconds.
|
||||
///
|
||||
@@ -391,7 +392,8 @@ abstract class ReceivedImageBlobStore {
|
||||
(await readBitstream(streamId))?.length;
|
||||
|
||||
/// Byte length of the stored PNG, or null when there is none.
|
||||
Future<int?> pngSize(String streamId) async => (await readPng(streamId))?.length;
|
||||
Future<int?> pngSize(String streamId) async =>
|
||||
(await readPng(streamId))?.length;
|
||||
|
||||
/// Sidecar write must be atomic (tmp + rename) so a kill cannot leave a
|
||||
/// half-written record that `readSidecars` then discards.
|
||||
@@ -574,7 +576,8 @@ class ReceivedImageStore extends ChangeNotifier {
|
||||
|
||||
final DateTime Function() _clock;
|
||||
|
||||
final Map<String, ReceivedImageEntry> _entries = <String, ReceivedImageEntry>{};
|
||||
final Map<String, ReceivedImageEntry> _entries =
|
||||
<String, ReceivedImageEntry>{};
|
||||
final Map<ImageStreamKey, String> _byKey = <ImageStreamKey, String>{};
|
||||
final Map<String, ValueNotifier<ReceivedImageEntry?>> _listenables =
|
||||
<String, ValueNotifier<ReceivedImageEntry?>>{};
|
||||
@@ -636,8 +639,7 @@ class ReceivedImageStore extends ChangeNotifier {
|
||||
int get totalBytes =>
|
||||
_entries.values.fold<int>(0, (sum, e) => sum + e.storedBytes);
|
||||
|
||||
int get storedImageCount =>
|
||||
_entries.values.where((e) => e.pngStored).length;
|
||||
int get storedImageCount => _entries.values.where((e) => e.pngStored).length;
|
||||
|
||||
/// Stream ids waiting for an automatic decode, oldest request first.
|
||||
List<String> get decodeQueue => List<String>.unmodifiable(_queue);
|
||||
@@ -1271,7 +1273,9 @@ class ReceivedImageStore extends ChangeNotifier {
|
||||
if (!entry.pngStored) return null;
|
||||
final bytes = await blobs.readPng(streamId);
|
||||
if (bytes == null) {
|
||||
await _store(entry.copyWith(state: ReceivedImageState.evicted, pngStored: false));
|
||||
await _store(
|
||||
entry.copyWith(state: ReceivedImageState.evicted, pngStored: false),
|
||||
);
|
||||
return null;
|
||||
}
|
||||
await _store(entry.copyWith(pngBytes: bytes, pngByteCount: bytes.length));
|
||||
|
||||
@@ -109,8 +109,10 @@ Duration loraTimeOnAir({
|
||||
final numerator = 8 * pl - 4 * sf + 28 + 16 * (crc ? 1 : 0) - 20 * ih;
|
||||
final denominator = 4 * (sf - 2 * de);
|
||||
|
||||
final payloadSymbols =
|
||||
math.max((numerator / denominator).ceil() * codingRate, 0);
|
||||
final payloadSymbols = math.max(
|
||||
(numerator / denominator).ceil() * codingRate,
|
||||
0,
|
||||
);
|
||||
|
||||
final preambleMs = (preambleSymbols + 4.25) * tsymMs;
|
||||
final payloadMs = (8 + payloadSymbols) * tsymMs;
|
||||
@@ -178,10 +180,10 @@ const double kImageSendChunkGapAirtimeFactor = 1.0;
|
||||
/// The pacing gap left after transmitting a packet whose airtime is
|
||||
/// [packetAirtime], before the next chunk is queued.
|
||||
Duration imageSendChunkGap(Duration packetAirtime) => Duration(
|
||||
microseconds: kImageSendChunkGapBase.inMicroseconds +
|
||||
(packetAirtime.inMicroseconds * kImageSendChunkGapAirtimeFactor)
|
||||
.round(),
|
||||
);
|
||||
microseconds:
|
||||
kImageSendChunkGapBase.inMicroseconds +
|
||||
(packetAirtime.inMicroseconds * kImageSendChunkGapAirtimeFactor).round(),
|
||||
);
|
||||
|
||||
/// Result of estimating an image (or any chunked payload) send.
|
||||
///
|
||||
@@ -276,8 +278,7 @@ List<int> imageChunkPayloadSizes(int payloadBytes) {
|
||||
final sizes = <int>[];
|
||||
var remaining = payloadBytes;
|
||||
for (var i = 0; i < count; i++) {
|
||||
final capacity =
|
||||
i == 0 ? kImageChunkFirstCapacity : kImageChunkCapacity;
|
||||
final capacity = i == 0 ? kImageChunkFirstCapacity : kImageChunkCapacity;
|
||||
final take = remaining < capacity ? remaining : capacity;
|
||||
sizes.add(take);
|
||||
remaining -= take;
|
||||
|
||||
@@ -168,8 +168,10 @@ class _ImageSendPreviewSheetState extends State<ImageSendPreviewSheet> {
|
||||
_failed = false;
|
||||
});
|
||||
try {
|
||||
final bytes =
|
||||
await widget.codec.encode(widget.imageBytes, kImageSendRatePoint);
|
||||
final bytes = await widget.codec.encode(
|
||||
widget.imageBytes,
|
||||
kImageSendRatePoint,
|
||||
);
|
||||
if (!mounted) return bytes;
|
||||
setState(() {
|
||||
_encoded = bytes;
|
||||
@@ -389,11 +391,7 @@ class _ImageSendPreviewSheetState extends State<ImageSendPreviewSheet> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _sizeRow(
|
||||
ThemeData theme,
|
||||
ColorScheme colors,
|
||||
_RateEstimate estimate,
|
||||
) {
|
||||
Widget _sizeRow(ThemeData theme, ColorScheme colors, _RateEstimate estimate) {
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
@@ -406,7 +404,11 @@ class _ImageSendPreviewSheetState extends State<ImageSendPreviewSheet> {
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12),
|
||||
child: Icon(Icons.arrow_forward, size: 18, color: colors.onSurfaceVariant),
|
||||
child: Icon(
|
||||
Icons.arrow_forward,
|
||||
size: 18,
|
||||
color: colors.onSurfaceVariant,
|
||||
),
|
||||
),
|
||||
_sizeChip(
|
||||
theme,
|
||||
@@ -489,11 +491,8 @@ class _ImageSendPreviewSheetState extends State<ImageSendPreviewSheet> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _statDivider(ColorScheme colors) => Container(
|
||||
width: 1,
|
||||
height: 44,
|
||||
color: colors.outlineVariant,
|
||||
);
|
||||
Widget _statDivider(ColorScheme colors) =>
|
||||
Container(width: 1, height: 44, color: colors.outlineVariant);
|
||||
|
||||
Widget _stat(
|
||||
ThemeData theme,
|
||||
@@ -575,9 +574,7 @@ class _ImageSendPreviewSheetState extends State<ImageSendPreviewSheet> {
|
||||
background: colors.tertiaryContainer,
|
||||
foreground: colors.onTertiaryContainer,
|
||||
title: localizations.imageSend_longSendTitle,
|
||||
body: localizations.imageSend_longSendBody(
|
||||
_formatDuration(worst),
|
||||
),
|
||||
body: localizations.imageSend_longSendBody(_formatDuration(worst)),
|
||||
),
|
||||
);
|
||||
}
|
||||
@@ -699,8 +696,9 @@ class _ImageSendPreviewSheetState extends State<ImageSendPreviewSheet> {
|
||||
children: [
|
||||
Expanded(
|
||||
child: OutlinedButton(
|
||||
onPressed:
|
||||
_sending ? null : () => Navigator.of(context).maybePop(),
|
||||
onPressed: _sending
|
||||
? null
|
||||
: () => Navigator.of(context).maybePop(),
|
||||
child: Text(localizations.imageSend_cancel),
|
||||
),
|
||||
),
|
||||
|
||||
@@ -111,6 +111,7 @@ String _defaultAwaiting(int bytes, int packets) =>
|
||||
/// Text of the R6 label. Private and const: not injectable, not localisable
|
||||
/// yet, and never empty.
|
||||
const String _kSyntheticBadge = 'AI-reconstructed';
|
||||
|
||||
/// The caption is built from the ACTUAL bitstream size, never a nominal one:
|
||||
/// quoting a fixed "~156 bytes" under an image that took 209 is its own small
|
||||
/// dishonesty, in a label whose whole job is honesty.
|
||||
@@ -238,11 +239,7 @@ class _ReceivedImageMessageState extends State<ReceivedImageMessage> {
|
||||
if (png == null) {
|
||||
return _box(
|
||||
context,
|
||||
_progressBody(
|
||||
context,
|
||||
progress: null,
|
||||
label: _s.decoding,
|
||||
),
|
||||
_progressBody(context, progress: null, label: _s.decoding),
|
||||
);
|
||||
}
|
||||
return _decodedBody(context, entry, png);
|
||||
@@ -313,7 +310,10 @@ class _ReceivedImageMessageState extends State<ReceivedImageMessage> {
|
||||
label: _s.corrupt,
|
||||
isError: true,
|
||||
action: entry.canRetryDecode
|
||||
? _ActionSpec(_s.retry, () => store.requestDecode(entry.streamId))
|
||||
? _ActionSpec(
|
||||
_s.retry,
|
||||
() => store.requestDecode(entry.streamId),
|
||||
)
|
||||
: null,
|
||||
),
|
||||
);
|
||||
@@ -620,7 +620,10 @@ class _ReceivedImageViewer extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.black,
|
||||
appBar: AppBar(backgroundColor: Colors.black, foregroundColor: Colors.white),
|
||||
appBar: AppBar(
|
||||
backgroundColor: Colors.black,
|
||||
foregroundColor: Colors.white,
|
||||
),
|
||||
body: Center(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
|
||||
@@ -7,7 +7,7 @@ import 'package:meshcore_open/widgets/image_send_codec_binding.dart';
|
||||
|
||||
Uint8List payloadOf(int length, {int seed = 7}) => Uint8List.fromList(
|
||||
List<int>.generate(length, (i) => (i * 37 + seed * 11) & 0xFF),
|
||||
);
|
||||
);
|
||||
|
||||
const ImageStreamMetadata stdMeta = ImageStreamMetadata(
|
||||
rate: ImageCodecRatePoint.standard,
|
||||
@@ -447,7 +447,9 @@ void main() {
|
||||
);
|
||||
expect(r.pendingCount, 1);
|
||||
|
||||
final expired = r.evictExpired(now: start.add(const Duration(minutes: 2)));
|
||||
final expired = r.evictExpired(
|
||||
now: start.add(const Duration(minutes: 2)),
|
||||
);
|
||||
expect(expired.length, 1);
|
||||
expect(expired.single.total, 3);
|
||||
expect(expired.single.receivedDataChunks, 2);
|
||||
@@ -690,7 +692,17 @@ void main() {
|
||||
|
||||
test('RESP_CODE_CHANNEL_DATA_RECV parses, snr is signed', () {
|
||||
final frame = Uint8List.fromList(<int>[
|
||||
0x1B, 0xF8, 0, 0, 3, 0xFF, 0x1C, 0xAE, 2, 0x42, 0x43,
|
||||
0x1B,
|
||||
0xF8,
|
||||
0,
|
||||
0,
|
||||
3,
|
||||
0xFF,
|
||||
0x1C,
|
||||
0xAE,
|
||||
2,
|
||||
0x42,
|
||||
0x43,
|
||||
]);
|
||||
final parsed = parseChannelDataFrame(frame)!;
|
||||
expect(parsed.snrRaw, -8);
|
||||
@@ -704,7 +716,15 @@ void main() {
|
||||
|
||||
test('a flooded frame exposes hop count and hash width', () {
|
||||
final frame = Uint8List.fromList(<int>[
|
||||
0x1B, 0x04, 0, 0, 0, 0x43, 0x1C, 0xAE, 0,
|
||||
0x1B,
|
||||
0x04,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0x43,
|
||||
0x1C,
|
||||
0xAE,
|
||||
0,
|
||||
]);
|
||||
final parsed = parseChannelDataFrame(frame)!;
|
||||
expect(parsed.arrivedByFlood, isTrue);
|
||||
@@ -729,7 +749,9 @@ void main() {
|
||||
);
|
||||
});
|
||||
|
||||
test('transport sends chunks strictly sequentially and reassembles', () async {
|
||||
test(
|
||||
'transport sends chunks strictly sequentially and reassembles',
|
||||
() async {
|
||||
final sent = <Uint8List>[];
|
||||
var inFlight = 0;
|
||||
var maxInFlight = 0;
|
||||
@@ -772,7 +794,8 @@ void main() {
|
||||
expect(received.length, 1);
|
||||
expect(received.single.data, payload);
|
||||
expect(received.single.key.channelIndex, 1);
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
test('handleFrame ignores other data types and other frames', () {
|
||||
final rx = ImageReassembler();
|
||||
@@ -805,7 +828,14 @@ void main() {
|
||||
final a = tx.sendImage(payload: payloadOf(300), metadata: stdMeta);
|
||||
final b = tx.sendImage(payload: payloadOf(300), metadata: stdMeta);
|
||||
await Future.wait(<Future<ImageChunkSet>>[a, b]);
|
||||
expect(order, <String>['100:0', '100:1', '100:2', '101:0', '101:1', '101:2']);
|
||||
expect(order, <String>[
|
||||
'100:0',
|
||||
'100:1',
|
||||
'100:2',
|
||||
'101:0',
|
||||
'101:1',
|
||||
'101:2',
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -818,10 +848,7 @@ void main() {
|
||||
test('a new image reusing a just-completed img_id is not swallowed', () {
|
||||
final delivered = <ImageReassemblyResult>[];
|
||||
final failed = <ImageReassemblyFailure>[];
|
||||
final r = ImageReassembler(
|
||||
onImage: delivered.add,
|
||||
onFailed: failed.add,
|
||||
);
|
||||
final r = ImageReassembler(onImage: delivered.add, onFailed: failed.add);
|
||||
|
||||
final first = buildImageChunks(
|
||||
payload: payloadOf(200, seed: 1),
|
||||
@@ -870,7 +897,8 @@ void main() {
|
||||
// PROBE B/C: a flipped bit in the parity length byte used to yield a
|
||||
// silently TRUNCATED image reported as `completed`. Only the last data
|
||||
// chunk may be short.
|
||||
test('corrupt parity length is rejected rather than silently truncating',
|
||||
test(
|
||||
'corrupt parity length is rejected rather than silently truncating',
|
||||
() {
|
||||
for (final payloadLen in [300, 400]) {
|
||||
final set = buildImageChunks(
|
||||
@@ -901,7 +929,8 @@ void main() {
|
||||
reason: 'payload $payloadLen: truncated recovery must not complete',
|
||||
);
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
test('parity still recovers a genuinely lost non-final chunk', () {
|
||||
final payload = payloadOf(400, seed: 5);
|
||||
@@ -927,7 +956,6 @@ void main() {
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
group('completed-image map is capped', () {
|
||||
/// A lone parity chunk of a `total == 1` image completes that image by
|
||||
/// itself — one packet, one remembered entry. That is the amplification the
|
||||
@@ -947,7 +975,8 @@ void main() {
|
||||
expect(r.pendingCount, 0);
|
||||
});
|
||||
|
||||
test('the map never exceeds maxCompletedStreams and evicts oldest first',
|
||||
test(
|
||||
'the map never exceeds maxCompletedStreams and evicts oldest first',
|
||||
() {
|
||||
final start = DateTime(2026, 3, 3);
|
||||
final r = ImageReassembler(maxCompletedStreams: 3);
|
||||
@@ -959,11 +988,13 @@ void main() {
|
||||
expect(r.completedCount, lessThanOrEqualTo(3));
|
||||
}
|
||||
expect(r.completedCount, 3);
|
||||
expect(
|
||||
r.completedKeys.map((k) => k.imgId).toList()..sort(),
|
||||
<int>[117, 118, 119],
|
||||
expect(r.completedKeys.map((k) => k.imgId).toList()..sort(), <int>[
|
||||
117,
|
||||
118,
|
||||
119,
|
||||
]);
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
test('default cap matches the pending cap', () {
|
||||
final start = DateTime(2026, 3, 4);
|
||||
@@ -1010,10 +1041,14 @@ void main() {
|
||||
// conflated, ft32 would go on air as 4.
|
||||
expect(AeicRatePoint.values.length, 5);
|
||||
expect(AeicRatePoint.ft32.wireValue, 4);
|
||||
expect(aeicRatePointForUi(ImageCodecRatePoint.standard),
|
||||
AeicRatePoint.ft32);
|
||||
expect(imageRateWireCode(ImageCodecRatePoint.standard),
|
||||
kImageRateWireStandard);
|
||||
expect(
|
||||
aeicRatePointForUi(ImageCodecRatePoint.standard),
|
||||
AeicRatePoint.ft32,
|
||||
);
|
||||
expect(
|
||||
imageRateWireCode(ImageCodecRatePoint.standard),
|
||||
kImageRateWireStandard,
|
||||
);
|
||||
expect(kImageRateWireStandard, 0);
|
||||
expect(kImageRateWireHigh, 1);
|
||||
expect(
|
||||
@@ -1057,7 +1092,10 @@ void main() {
|
||||
|
||||
final delivered = <ImageReassemblyResult>[];
|
||||
final failures = <ImageReassemblyFailure>[];
|
||||
final r = ImageReassembler(onImage: delivered.add, onFailed: failures.add);
|
||||
final r = ImageReassembler(
|
||||
onImage: delivered.add,
|
||||
onFailed: failures.add,
|
||||
);
|
||||
expect(r.addChunk(bad).status, ImageChunkStatus.accepted);
|
||||
final done = r.addChunk(set.blobs[1]);
|
||||
expect(done.status, ImageChunkStatus.unsupportedFormat);
|
||||
@@ -1093,7 +1131,6 @@ void main() {
|
||||
ImageChunkStatus.unsupportedFormat,
|
||||
);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
group('metadata byte: aspect ratio', () {
|
||||
|
||||
+25
-12
@@ -9,7 +9,9 @@ import 'package:meshcore_open/models/image_codec_support.dart';
|
||||
import 'package:meshcore_open/widgets/image_send_codec_binding.dart';
|
||||
|
||||
void main() {
|
||||
test('ImageStreamReassembler.selfPrefix override suppresses our own echo', () {
|
||||
test(
|
||||
'ImageStreamReassembler.selfPrefix override suppresses our own echo',
|
||||
() {
|
||||
final store = ReceivedImageStore();
|
||||
final r = ImageStreamReassembler(store: store);
|
||||
final set = buildImageChunks(
|
||||
@@ -19,16 +21,22 @@ void main() {
|
||||
imgId: 7,
|
||||
);
|
||||
// Before SELF_INFO the prefix is unknown, so nothing is suppressed.
|
||||
expect(r.addChunk(set.blobs[0], channelIndex: 1).status,
|
||||
ImageChunkStatus.completed);
|
||||
expect(
|
||||
r.addChunk(set.blobs[0], channelIndex: 1).status,
|
||||
ImageChunkStatus.completed,
|
||||
);
|
||||
r.clear();
|
||||
// After SELF_INFO the superclass must see the overridden getter.
|
||||
r.selfPrefix = 0xABCD;
|
||||
expect(r.addChunk(set.blobs[0], channelIndex: 1).status,
|
||||
ImageChunkStatus.fromSelf);
|
||||
});
|
||||
expect(
|
||||
r.addChunk(set.blobs[0], channelIndex: 1).status,
|
||||
ImageChunkStatus.fromSelf,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
test('addChunk forwards outcomes to the store with the channel index',
|
||||
test(
|
||||
'addChunk forwards outcomes to the store with the channel index',
|
||||
() async {
|
||||
final store = ReceivedImageStore();
|
||||
final r = ImageStreamReassembler(store: store);
|
||||
@@ -44,10 +52,12 @@ void main() {
|
||||
expect(entry.channelIndex, 5);
|
||||
expect(entry.senderPrefix, 0x1234);
|
||||
expect(entry.state, ReceivedImageState.receiving);
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
group('AppSettings image codec block', () {
|
||||
test('round-trips through toJson/fromJson on the ImageCodecPreferences keys',
|
||||
test(
|
||||
'round-trips through toJson/fromJson on the ImageCodecPreferences keys',
|
||||
() {
|
||||
final settings = AppSettings(
|
||||
imageCodecEnabled: true,
|
||||
@@ -80,9 +90,12 @@ void main() {
|
||||
'https://example.invalid/model.onnx',
|
||||
);
|
||||
expect(restored.imageCodecRatePoint, 4);
|
||||
expect(restored.imageCodecDownloadedModels.single.localPath,
|
||||
'/tmp/model.onnx');
|
||||
});
|
||||
expect(
|
||||
restored.imageCodecDownloadedModels.single.localPath,
|
||||
'/tmp/model.onnx',
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
test('defaults are off, ft32, and empty', () {
|
||||
const prefs = ImageCodecPreferences();
|
||||
|
||||
+61
-24
@@ -12,14 +12,13 @@ RadioSettings _radio({
|
||||
LoRaSpreadingFactor sf = LoRaSpreadingFactor.sf10,
|
||||
LoRaBandwidth bw = LoRaBandwidth.bw250,
|
||||
LoRaCodingRate cr = LoRaCodingRate.cr4_5,
|
||||
}) =>
|
||||
RadioSettings(
|
||||
}) => RadioSettings(
|
||||
frequencyMHz: 869.525,
|
||||
bandwidth: bw,
|
||||
spreadingFactor: sf,
|
||||
codingRate: cr,
|
||||
txPowerDbm: 22,
|
||||
);
|
||||
);
|
||||
|
||||
void main() {
|
||||
group('loraTimeOnAir reference values (255-byte packet)', () {
|
||||
@@ -94,8 +93,10 @@ void main() {
|
||||
var previous = at(0);
|
||||
for (var pl = 1; pl <= 255; pl++) {
|
||||
final current = at(pl);
|
||||
expect(current.inMicroseconds,
|
||||
greaterThanOrEqualTo(previous.inMicroseconds));
|
||||
expect(
|
||||
current.inMicroseconds,
|
||||
greaterThanOrEqualTo(previous.inMicroseconds),
|
||||
);
|
||||
previous = current;
|
||||
}
|
||||
});
|
||||
@@ -147,10 +148,7 @@ void main() {
|
||||
// the estimator drifting away from the chunker.
|
||||
expect(imageChunkCount(110), 1);
|
||||
expect(imageChunkCount(209), 2);
|
||||
expect(
|
||||
imageChunkCount(156),
|
||||
156 <= kImageChunkFirstCapacity ? 1 : 2,
|
||||
);
|
||||
expect(imageChunkCount(156), 156 <= kImageChunkFirstCapacity ? 1 : 2);
|
||||
for (final pl in [110, 156, 209]) {
|
||||
expect(imageChunkCount(pl), inInclusiveRange(1, 2));
|
||||
}
|
||||
@@ -192,14 +190,19 @@ void main() {
|
||||
test('parity adds exactly one packet', () {
|
||||
final radio = _radio();
|
||||
for (final pl in [110, 209, 288, 409]) {
|
||||
final without =
|
||||
estimateSend(payloadBytes: pl, radio: radio, parity: false);
|
||||
final without = estimateSend(
|
||||
payloadBytes: pl,
|
||||
radio: radio,
|
||||
parity: false,
|
||||
);
|
||||
final with_ = estimateSend(payloadBytes: pl, radio: radio);
|
||||
expect(with_.chunkCount, without.chunkCount + 1);
|
||||
expect(without.includesParity, isFalse);
|
||||
expect(with_.includesParity, isTrue);
|
||||
expect(with_.totalAirtime!.inMicroseconds,
|
||||
greaterThan(without.totalAirtime!.inMicroseconds));
|
||||
expect(
|
||||
with_.totalAirtime!.inMicroseconds,
|
||||
greaterThan(without.totalAirtime!.inMicroseconds),
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -254,15 +257,19 @@ void main() {
|
||||
});
|
||||
|
||||
test('total bytes account for chunk headers and metadata', () {
|
||||
final est =
|
||||
estimateSend(payloadBytes: 209, radio: _radio(), parity: false);
|
||||
final est = estimateSend(
|
||||
payloadBytes: 209,
|
||||
radio: _radio(),
|
||||
parity: false,
|
||||
);
|
||||
// A data blob is header + body (chunk 0's body opens with the metadata
|
||||
// byte). Only the PARITY blob carries the length byte, and it is always a
|
||||
// full kImageChunkBlobBytes because the XOR body is zero-padded.
|
||||
final sizes = imageChunkPayloadSizes(209);
|
||||
var expected = 0;
|
||||
for (var i = 0; i < sizes.length; i++) {
|
||||
expected += kImageChunkHeaderBytes +
|
||||
expected +=
|
||||
kImageChunkHeaderBytes +
|
||||
(i == 0 ? kImageChunkZeroMetadataBytes : 0) +
|
||||
sizes[i];
|
||||
}
|
||||
@@ -285,7 +292,8 @@ void main() {
|
||||
var expected = 0;
|
||||
for (var i = 0; i < sizes.length; i++) {
|
||||
expected += loraTimeOnAir(
|
||||
payloadBytes: kImageChunkHeaderBytes +
|
||||
payloadBytes:
|
||||
kImageChunkHeaderBytes +
|
||||
(i == 0 ? kImageChunkZeroMetadataBytes : 0) +
|
||||
sizes[i],
|
||||
spreadingFactor: 9,
|
||||
@@ -320,8 +328,11 @@ void main() {
|
||||
|
||||
group('paced wall clock', () {
|
||||
test('single-packet send has no pacing gap', () {
|
||||
final est =
|
||||
estimateSend(payloadBytes: 110, radio: _radio(), parity: false);
|
||||
final est = estimateSend(
|
||||
payloadBytes: 110,
|
||||
radio: _radio(),
|
||||
parity: false,
|
||||
);
|
||||
expect(est.chunkCount, 1);
|
||||
expect(est.pacedWallClock, est.totalAirtime);
|
||||
});
|
||||
@@ -369,7 +380,8 @@ void main() {
|
||||
expect(
|
||||
imageSendChunkGap(toa),
|
||||
Duration(
|
||||
microseconds: kImageSendChunkGapBase.inMicroseconds +
|
||||
microseconds:
|
||||
kImageSendChunkGapBase.inMicroseconds +
|
||||
(toa.inMicroseconds * kImageSendChunkGapAirtimeFactor).round(),
|
||||
),
|
||||
);
|
||||
@@ -446,7 +458,11 @@ void main() {
|
||||
bandwidthHz: 250000,
|
||||
codingRate: 5,
|
||||
);
|
||||
expect(est.totalAirtime, isNull, reason: 'sf=$sf must not produce airtime');
|
||||
expect(
|
||||
est.totalAirtime,
|
||||
isNull,
|
||||
reason: 'sf=$sf must not produce airtime',
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -462,9 +478,30 @@ void main() {
|
||||
});
|
||||
|
||||
test('areLoRaParamsValid accepts the boundary values', () {
|
||||
expect(areLoRaParamsValid(spreadingFactor: 5, bandwidthHz: 7800, codingRate: 5), isTrue);
|
||||
expect(areLoRaParamsValid(spreadingFactor: 12, bandwidthHz: 500000, codingRate: 8), isTrue);
|
||||
expect(areLoRaParamsValid(spreadingFactor: null, bandwidthHz: 250000, codingRate: 5), isFalse);
|
||||
expect(
|
||||
areLoRaParamsValid(
|
||||
spreadingFactor: 5,
|
||||
bandwidthHz: 7800,
|
||||
codingRate: 5,
|
||||
),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
areLoRaParamsValid(
|
||||
spreadingFactor: 12,
|
||||
bandwidthHz: 500000,
|
||||
codingRate: 8,
|
||||
),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
areLoRaParamsValid(
|
||||
spreadingFactor: null,
|
||||
bandwidthHz: 250000,
|
||||
codingRate: 5,
|
||||
),
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -114,7 +114,10 @@ void main() {
|
||||
// existing role would hand ORT the wrong graph.
|
||||
final restored = ImageCodecModelRecord.fromJson(<String, dynamic>{
|
||||
'asset_file_names': ['a.onnx', 'b.bin'],
|
||||
'asset_roles': {'a.onnx': 'somethingFromTheFuture', 'b.bin': 'cdfTables'},
|
||||
'asset_roles': {
|
||||
'a.onnx': 'somethingFromTheFuture',
|
||||
'b.bin': 'cdfTables',
|
||||
},
|
||||
});
|
||||
expect(restored.assetRoles.keys, ['b.bin']);
|
||||
expect(restored.fileNameForRole(ImageCodecAssetRole.cdfTables), 'b.bin');
|
||||
@@ -357,8 +360,10 @@ void main() {
|
||||
for (final asset in preset.assets) {
|
||||
expect(asset.fileName, isNot(contains('novae')));
|
||||
}
|
||||
expect(preset.assetFor(ImageCodecAssetRole.decoderWeights).sizeBytes,
|
||||
872896480);
|
||||
expect(
|
||||
preset.assetFor(ImageCodecAssetRole.decoderWeights).sizeBytes,
|
||||
872896480,
|
||||
);
|
||||
});
|
||||
|
||||
test('carries all five roles exactly once', () {
|
||||
@@ -400,8 +405,7 @@ void main() {
|
||||
expect(reordered.fileName, preset.fileName);
|
||||
});
|
||||
|
||||
test('the entropy graph and the tables are the ones that were validated',
|
||||
() {
|
||||
test('the entropy graph and the tables are the ones that were validated', () {
|
||||
final preset = imageCodecPresetModels.single;
|
||||
final entropy = preset.assetFor(ImageCodecAssetRole.entropyGraph);
|
||||
// op17 fp32: byte-identical bitstreams on 26/26 images. Not op20, not int8.
|
||||
@@ -429,10 +433,7 @@ void main() {
|
||||
],
|
||||
);
|
||||
expect(decoderOnly.isComplete, isFalse);
|
||||
expect(
|
||||
decoderOnly.maybeAssetFor(ImageCodecAssetRole.cdfTables),
|
||||
isNull,
|
||||
);
|
||||
expect(decoderOnly.maybeAssetFor(ImageCodecAssetRole.cdfTables), isNull);
|
||||
expect(
|
||||
() => decoderOnly.assetFor(ImageCodecAssetRole.cdfTables),
|
||||
throwsStateError,
|
||||
@@ -483,7 +484,8 @@ void main() {
|
||||
});
|
||||
|
||||
group('exceptions', () {
|
||||
test('an incomplete install is NOT the same failure as a missing build',
|
||||
test(
|
||||
'an incomplete install is NOT the same failure as a missing build',
|
||||
() {
|
||||
// Both are ImageCodecUnimplemented, but only one has a remedy the user
|
||||
// can act on, and the UI branches on exactly that difference.
|
||||
@@ -493,7 +495,8 @@ void main() {
|
||||
expect(missing, isA<ImageCodecUnimplemented>());
|
||||
expect(incomplete, isNot(isA<ImageCodecEntropyPathMissing>()));
|
||||
expect(incomplete.toString(), contains('re-download'));
|
||||
});
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
group('parseImageCodecStatus', () {
|
||||
|
||||
@@ -116,7 +116,8 @@ void main() {
|
||||
});
|
||||
|
||||
test('rejects trailing garbage', () {
|
||||
final Uint8List extra = Uint8List(raw.length + 1)..setRange(0, raw.length, raw);
|
||||
final Uint8List extra = Uint8List(raw.length + 1)
|
||||
..setRange(0, raw.length, raw);
|
||||
expect(
|
||||
() => EntropyTables.parse(extra),
|
||||
throwsA(isA<EntropyTableFormatException>()),
|
||||
|
||||
@@ -28,9 +28,7 @@ void main() {
|
||||
final sent = fiveAssetBundle();
|
||||
expect(sent.supportsDecode, isTrue, reason: 'precondition');
|
||||
|
||||
final rebuilt = debugBundleFromBootPayload(
|
||||
debugBootPayloadFor(sent),
|
||||
);
|
||||
final rebuilt = debugBundleFromBootPayload(debugBootPayloadFor(sent));
|
||||
|
||||
expect(rebuilt.decoderGraphPath, sent.decoderGraphPath);
|
||||
expect(rebuilt.entropyGraphPath, sent.entropyGraphPath);
|
||||
@@ -56,7 +54,8 @@ void main() {
|
||||
expect(payload[6], '/models/aeic_entropy_decode_fp32_op17.onnx');
|
||||
});
|
||||
|
||||
test('a send-only bundle rebuilds as send-only rather than half-decoding',
|
||||
test(
|
||||
'a send-only bundle rebuilds as send-only rather than half-decoding',
|
||||
() {
|
||||
const sendOnly = ImageCodecBundle(
|
||||
decoderGraphPath: '/models/decoder.onnx',
|
||||
@@ -69,7 +68,8 @@ void main() {
|
||||
);
|
||||
expect(rebuilt.entropyDecodeGraphPath, isNull);
|
||||
expect(rebuilt.supportsDecode, isFalse);
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
test('a short payload does not crash the worker', () {
|
||||
// An older sender, or a truncated message, must degrade to "cannot
|
||||
|
||||
@@ -250,10 +250,7 @@ void main() {
|
||||
expect(await graph.readAsBytes(), small);
|
||||
expect(await weights.length(), large.length);
|
||||
expect(_sha256(await weights.readAsBytes()), _sha256(large));
|
||||
expect(
|
||||
await File('${tempDir.path}/entropy.onnx').readAsBytes(),
|
||||
entropy,
|
||||
);
|
||||
expect(await File('${tempDir.path}/entropy.onnx').readAsBytes(), entropy);
|
||||
// Two different entropy exports land side by side; neither may overwrite
|
||||
// or be mistaken for the other.
|
||||
expect(
|
||||
|
||||
@@ -121,7 +121,8 @@ void main() {
|
||||
}
|
||||
});
|
||||
|
||||
test('ENCODE: Dart bitstream is byte-identical to the C++ bitstream',
|
||||
test(
|
||||
'ENCODE: Dart bitstream is byte-identical to the C++ bitstream',
|
||||
() async {
|
||||
final _ReplayNetwork network = _ReplayNetwork(r);
|
||||
final AeicEntropyCodec codec = AeicEntropyCodec(
|
||||
@@ -139,9 +140,11 @@ void main() {
|
||||
r.meta['bitstream_sha256'],
|
||||
reason: '$name: bitstream sha256',
|
||||
);
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
test('DECODE: y_hat from the C++ bitstream is exactly the recorded y_hat',
|
||||
test(
|
||||
'DECODE: y_hat from the C++ bitstream is exactly the recorded y_hat',
|
||||
() async {
|
||||
final _ReplayNetwork network = _ReplayNetwork(r);
|
||||
final AeicEntropyCodec codec = AeicEntropyCodec(
|
||||
@@ -159,7 +162,8 @@ void main() {
|
||||
// that holds in Python it must hold here too.
|
||||
expect(r.meta['decoded_y_hat_equals_encoder_y_hat'], isTrue);
|
||||
_expectSameFloats(got, r.f32('enc/y_hat'), '$name: y_hat vs encoder');
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
test('a single flipped bitstream byte does not still pass', () async {
|
||||
// Byte 3 is the first payload byte of sub-stream 0 (1-byte flag +
|
||||
@@ -185,7 +189,8 @@ void main() {
|
||||
expect(
|
||||
_sameFloats(got, r.f32('dec/y_hat')),
|
||||
isFalse,
|
||||
reason: '$name: corrupting the stream changed nothing — the '
|
||||
reason:
|
||||
'$name: corrupting the stream changed nothing — the '
|
||||
'comparison is vacuous',
|
||||
);
|
||||
});
|
||||
@@ -253,7 +258,8 @@ class _ReplayNetwork implements AeicEntropyNetwork {
|
||||
'stage $stage input base',
|
||||
);
|
||||
}
|
||||
final Map<String, dynamic> outputs = call['outputs'] as Map<String, dynamic>;
|
||||
final Map<String, dynamic> outputs =
|
||||
call['outputs'] as Map<String, dynamic>;
|
||||
return AeicStageParams(
|
||||
meansSupp: r.f32(outputs['means'] as String),
|
||||
scalesSupp: r.f32(outputs['scales'] as String),
|
||||
@@ -267,8 +273,7 @@ class _Recording {
|
||||
_Recording(this.index, this.bytes)
|
||||
: _entries = <String, Map<String, dynamic>>{
|
||||
for (final Map<String, dynamic> e
|
||||
in (index['entries'] as List<dynamic>)
|
||||
.cast<Map<String, dynamic>>())
|
||||
in (index['entries'] as List<dynamic>).cast<Map<String, dynamic>>())
|
||||
e['name'] as String: e,
|
||||
};
|
||||
|
||||
@@ -291,7 +296,9 @@ class _Recording {
|
||||
final int indexLength = bd.getUint32(24, Endian.little);
|
||||
final Map<String, dynamic> index =
|
||||
jsonDecode(
|
||||
utf8.decode(bytes.sublist(indexOffset, indexOffset + indexLength)),
|
||||
utf8.decode(
|
||||
bytes.sublist(indexOffset, indexOffset + indexLength),
|
||||
),
|
||||
)
|
||||
as Map<String, dynamic>;
|
||||
return _Recording(index, bytes);
|
||||
|
||||
@@ -40,25 +40,281 @@ class _Golden {
|
||||
];
|
||||
|
||||
static const List<List<int>> symbols = <List<int>>[
|
||||
<int>[-1, -1, -2, 4, 0, 0, 6, -3, 2, 1, 1, -1, -5, 1, 0, 0, -1, -1, -2, 4,
|
||||
0, 0, 5, -3, 2, 1, 1, -1, -5, 1, 0, 0],
|
||||
<int>[-1, -1, 4, 4, 0, 0, 0, 5, 2, 1, -1, -1, 3, -5, 1, 0, -1, -2, 4, 4,
|
||||
0, 0, 0, 5, 1, 1, -1, -1, 3, -5, 1, 0],
|
||||
<int>[-1, -2, -2, 4, 1, 0, 0, 5, 2, 0, -1, -1, 3, -5, 1, 0, -1, -2, -2, 4,
|
||||
0, 0, 0, 5, 2, -1, -1, -1, 3, -5, 1, 0],
|
||||
<int>[-1, -1, -2, -2, 0, 0, 5, -3, 2, 1, -1, -1, -5, -5, 0, 0, -1, -1, -2,
|
||||
-2, 0, 0, 5, -3, 2, 1, -1, -1, -5, 1, 0, 0],
|
||||
<int>[
|
||||
-1,
|
||||
-1,
|
||||
-2,
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
6,
|
||||
-3,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
-1,
|
||||
-5,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
-1,
|
||||
-1,
|
||||
-2,
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
5,
|
||||
-3,
|
||||
2,
|
||||
1,
|
||||
1,
|
||||
-1,
|
||||
-5,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
],
|
||||
<int>[
|
||||
-1,
|
||||
-1,
|
||||
4,
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
5,
|
||||
2,
|
||||
1,
|
||||
-1,
|
||||
-1,
|
||||
3,
|
||||
-5,
|
||||
1,
|
||||
0,
|
||||
-1,
|
||||
-2,
|
||||
4,
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
5,
|
||||
1,
|
||||
1,
|
||||
-1,
|
||||
-1,
|
||||
3,
|
||||
-5,
|
||||
1,
|
||||
0,
|
||||
],
|
||||
<int>[
|
||||
-1,
|
||||
-2,
|
||||
-2,
|
||||
4,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
5,
|
||||
2,
|
||||
0,
|
||||
-1,
|
||||
-1,
|
||||
3,
|
||||
-5,
|
||||
1,
|
||||
0,
|
||||
-1,
|
||||
-2,
|
||||
-2,
|
||||
4,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
5,
|
||||
2,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
3,
|
||||
-5,
|
||||
1,
|
||||
0,
|
||||
],
|
||||
<int>[
|
||||
-1,
|
||||
-1,
|
||||
-2,
|
||||
-2,
|
||||
0,
|
||||
0,
|
||||
5,
|
||||
-3,
|
||||
2,
|
||||
1,
|
||||
-1,
|
||||
-1,
|
||||
-5,
|
||||
-5,
|
||||
0,
|
||||
0,
|
||||
-1,
|
||||
-1,
|
||||
-2,
|
||||
-2,
|
||||
0,
|
||||
0,
|
||||
5,
|
||||
-3,
|
||||
2,
|
||||
1,
|
||||
-1,
|
||||
-1,
|
||||
-5,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
],
|
||||
];
|
||||
|
||||
static const List<List<int>> indexes = <List<int>>[
|
||||
<int>[-1, 6, -1, 8, 12, 15, 13, 16, 0, 9, 3, 10, 13, 16, 14, 17, 0, 9, 3,
|
||||
10, 13, 16, 14, 17, 5, 11, 7, 12, 15, 17, 15, 18],
|
||||
<int>[14, 11, 15, 12, 7, 0, 8, 2, 15, 13, 16, 14, 9, 4, 11, 6, 15, 13, 16,
|
||||
14, 10, 4, 11, 6, 16, 14, 17, 15, 11, 7, 12, 9],
|
||||
<int>[11, 14, 12, 15, -1, 8, 0, 9, 12, 16, 13, 16, 2, 10, 5, 11, 13, 16,
|
||||
13, 16, 3, 10, 5, 11, 14, 17, 15, 17, 7, 12, 8, 13],
|
||||
<int>[5, -1, 7, 0, 15, 12, 15, 13, 8, 1, 10, 4, 16, 14, 16, 14, 8, 2, 10,
|
||||
4, 16, 14, 16, 14, 11, 6, 12, 8, 17, 15, 17, 16],
|
||||
<int>[
|
||||
-1,
|
||||
6,
|
||||
-1,
|
||||
8,
|
||||
12,
|
||||
15,
|
||||
13,
|
||||
16,
|
||||
0,
|
||||
9,
|
||||
3,
|
||||
10,
|
||||
13,
|
||||
16,
|
||||
14,
|
||||
17,
|
||||
0,
|
||||
9,
|
||||
3,
|
||||
10,
|
||||
13,
|
||||
16,
|
||||
14,
|
||||
17,
|
||||
5,
|
||||
11,
|
||||
7,
|
||||
12,
|
||||
15,
|
||||
17,
|
||||
15,
|
||||
18,
|
||||
],
|
||||
<int>[
|
||||
14,
|
||||
11,
|
||||
15,
|
||||
12,
|
||||
7,
|
||||
0,
|
||||
8,
|
||||
2,
|
||||
15,
|
||||
13,
|
||||
16,
|
||||
14,
|
||||
9,
|
||||
4,
|
||||
11,
|
||||
6,
|
||||
15,
|
||||
13,
|
||||
16,
|
||||
14,
|
||||
10,
|
||||
4,
|
||||
11,
|
||||
6,
|
||||
16,
|
||||
14,
|
||||
17,
|
||||
15,
|
||||
11,
|
||||
7,
|
||||
12,
|
||||
9,
|
||||
],
|
||||
<int>[
|
||||
11,
|
||||
14,
|
||||
12,
|
||||
15,
|
||||
-1,
|
||||
8,
|
||||
0,
|
||||
9,
|
||||
12,
|
||||
16,
|
||||
13,
|
||||
16,
|
||||
2,
|
||||
10,
|
||||
5,
|
||||
11,
|
||||
13,
|
||||
16,
|
||||
13,
|
||||
16,
|
||||
3,
|
||||
10,
|
||||
5,
|
||||
11,
|
||||
14,
|
||||
17,
|
||||
15,
|
||||
17,
|
||||
7,
|
||||
12,
|
||||
8,
|
||||
13,
|
||||
],
|
||||
<int>[
|
||||
5,
|
||||
-1,
|
||||
7,
|
||||
0,
|
||||
15,
|
||||
12,
|
||||
15,
|
||||
13,
|
||||
8,
|
||||
1,
|
||||
10,
|
||||
4,
|
||||
16,
|
||||
14,
|
||||
16,
|
||||
14,
|
||||
8,
|
||||
2,
|
||||
10,
|
||||
4,
|
||||
16,
|
||||
14,
|
||||
16,
|
||||
14,
|
||||
11,
|
||||
6,
|
||||
12,
|
||||
8,
|
||||
17,
|
||||
15,
|
||||
17,
|
||||
16,
|
||||
],
|
||||
];
|
||||
|
||||
// --- full case: C = 256, H = W = 16 (the shipping geometry) ---
|
||||
@@ -113,7 +369,21 @@ class _Golden {
|
||||
10000.0,
|
||||
];
|
||||
static const List<int> probeIndexes = <int>[
|
||||
-1, -1, -1, -1, 0, 0, 0, 12, 17, 23, 34, 51, 62, 63, 63,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
-1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
12,
|
||||
17,
|
||||
23,
|
||||
34,
|
||||
51,
|
||||
62,
|
||||
63,
|
||||
63,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -220,10 +490,7 @@ void main() {
|
||||
final geometry = AeicEntropyGeometry.forResolution(512);
|
||||
final masks = AeicMaskSet(geometry);
|
||||
for (var stage = 0; stage < 4; stage++) {
|
||||
final live = masks
|
||||
.maskTensor(stage)
|
||||
.where((v) => v == 1.0)
|
||||
.length;
|
||||
final live = masks.maskTensor(stage).where((v) => v == 1.0).length;
|
||||
expect(live, geometry.symbolsPerStage);
|
||||
}
|
||||
});
|
||||
@@ -401,7 +668,9 @@ void main() {
|
||||
});
|
||||
|
||||
group('AeicEntropyCodec', () {
|
||||
test('encode pushes z, y0, y1, y2, y3 in that order and no other', () async {
|
||||
test(
|
||||
'encode pushes z, y0, y1, y2, y3 in that order and no other',
|
||||
() async {
|
||||
final geometry = AeicEntropyGeometry.forResolution(512);
|
||||
final network = _FakeNetwork(geometry);
|
||||
final coders = _RecordingCoders();
|
||||
@@ -428,7 +697,8 @@ void main() {
|
||||
expect(progress.last, 1.0);
|
||||
// The image really was normalized before the graph saw it: 0 -> -1.
|
||||
expect(network.lastInput!.first, -1.0);
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
test('encode refuses a graph that returns the wrong z size', () async {
|
||||
final geometry = AeicEntropyGeometry.forResolution(512);
|
||||
@@ -697,7 +967,8 @@ class _FakeNetwork implements AeicEntropyNetwork {
|
||||
],
|
||||
scales: <Float32List>[
|
||||
for (var i = 0; i < 4; i++)
|
||||
Float32List(geometry.yElements)..fillRange(0, geometry.yElements, 1.0),
|
||||
Float32List(geometry.yElements)
|
||||
..fillRange(0, geometry.yElements, 1.0),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@@ -20,8 +20,8 @@ void main() {
|
||||
final Map<String, dynamic> manifest =
|
||||
jsonDecode(File('${goldenDir.path}/manifest.json').readAsStringSync())
|
||||
as Map<String, dynamic>;
|
||||
final List<Map<String, dynamic>> images = (manifest['images'] as List<dynamic>)
|
||||
.cast<Map<String, dynamic>>();
|
||||
final List<Map<String, dynamic>> images =
|
||||
(manifest['images'] as List<dynamic>).cast<Map<String, dynamic>>();
|
||||
final List<Map<String, dynamic>> synthetic =
|
||||
(manifest['synthetic'] as List<dynamic>).cast<Map<String, dynamic>>();
|
||||
|
||||
|
||||
@@ -59,7 +59,10 @@ class _FakeDecoder implements ReceivedImageDecoder {
|
||||
}
|
||||
}
|
||||
|
||||
Future<ImageCodecResult?> _run(AeicRatePoint ratePoint, int resolution) async {
|
||||
Future<ImageCodecResult?> _run(
|
||||
AeicRatePoint ratePoint,
|
||||
int resolution,
|
||||
) async {
|
||||
if (delay > Duration.zero) await Future<void>.delayed(delay);
|
||||
switch (mode) {
|
||||
case 'null':
|
||||
@@ -149,7 +152,11 @@ void main() {
|
||||
imgId: 7,
|
||||
firstSeen: DateTime.fromMillisecondsSinceEpoch(0x693F21 * 1000),
|
||||
);
|
||||
expect(id, '1a2b07' '00693f21');
|
||||
expect(
|
||||
id,
|
||||
'1a2b07'
|
||||
'00693f21',
|
||||
);
|
||||
expect(id.length, 14);
|
||||
expect(ReceivedImageRef.parse(ReceivedImageRef.encode(id)), id);
|
||||
});
|
||||
@@ -161,8 +168,10 @@ void main() {
|
||||
expect(ReceivedImageRef.parse('aeic:1:1A2B0700693F21'), isNull);
|
||||
expect(ReceivedImageRef.parse('aeic:2:1a2b0700693f21'), isNull);
|
||||
expect(ReceivedImageRef.parse('@[Bob] hi'), isNull);
|
||||
expect(ReceivedImageRef.parse(' aeic:1:1a2b0700693f21 '),
|
||||
'1a2b0700693f21');
|
||||
expect(
|
||||
ReceivedImageRef.parse(' aeic:1:1a2b0700693f21 '),
|
||||
'1a2b0700693f21',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -184,8 +193,11 @@ void main() {
|
||||
expect(entry!.state, ReceivedImageState.reassembled);
|
||||
expect(entry.rate, AeicRatePoint.ft32);
|
||||
expect(entry.metadataAssumed, isFalse);
|
||||
expect(h.blobs.hasBitstream(entry.streamId), isTrue,
|
||||
reason: 'bitstream must be written before the state changes');
|
||||
expect(
|
||||
h.blobs.hasBitstream(entry.streamId),
|
||||
isTrue,
|
||||
reason: 'bitstream must be written before the state changes',
|
||||
);
|
||||
|
||||
await h.store.settle();
|
||||
final decoded = h.store.entryFor(entry.streamId)!;
|
||||
@@ -218,8 +230,11 @@ void main() {
|
||||
h.reassembler.addChunk(set.blobs[1], channelIndex: 3),
|
||||
channelIndex: 3,
|
||||
);
|
||||
expect(second!.streamId, first.streamId,
|
||||
reason: 'the sentinel must not change as chunks arrive');
|
||||
expect(
|
||||
second!.streamId,
|
||||
first.streamId,
|
||||
reason: 'the sentinel must not change as chunks arrive',
|
||||
);
|
||||
expect(second.state, ReceivedImageState.reassembled);
|
||||
await h.store.settle();
|
||||
expect(
|
||||
@@ -300,8 +315,10 @@ void main() {
|
||||
expect(entry!.state, ReceivedImageState.reassembled);
|
||||
expect(entry.recoveredWithParity, isTrue);
|
||||
await h.store.settle();
|
||||
expect(h.store.entryFor(entry.streamId)!.state,
|
||||
ReceivedImageState.decoded);
|
||||
expect(
|
||||
h.store.entryFor(entry.streamId)!.state,
|
||||
ReceivedImageState.decoded,
|
||||
);
|
||||
});
|
||||
|
||||
test('loopback and malformed blobs create nothing', () async {
|
||||
@@ -574,7 +591,8 @@ void main() {
|
||||
});
|
||||
|
||||
group('eviction', () {
|
||||
test('byte budget drops the oldest PNG first and keeps the bitstream',
|
||||
test(
|
||||
'byte budget drops the oldest PNG first and keeps the bitstream',
|
||||
() async {
|
||||
final decoder = _FakeDecoder(
|
||||
png: Uint8List.fromList(List<int>.filled(1000, 3)),
|
||||
@@ -591,8 +609,11 @@ void main() {
|
||||
expect(h.store.entryFor(ids[0])!.state, ReceivedImageState.evicted);
|
||||
expect(h.store.entryFor(ids[0])!.pngStored, isFalse);
|
||||
expect(h.blobs.hasPng(ids[0]), isFalse);
|
||||
expect(h.blobs.hasBitstream(ids[0]), isTrue,
|
||||
reason: 'a ~156 B bitstream is cheap; keep it so we can re-decode');
|
||||
expect(
|
||||
h.blobs.hasBitstream(ids[0]),
|
||||
isTrue,
|
||||
reason: 'a ~156 B bitstream is cheap; keep it so we can re-decode',
|
||||
);
|
||||
expect(h.store.entryFor(ids[0])!.canRetryDecode, isTrue);
|
||||
expect(h.store.entryFor(ids[2])!.state, ReceivedImageState.decoded);
|
||||
expect(h.store.totalBytes, lessThanOrEqualTo(2500));
|
||||
@@ -604,7 +625,8 @@ void main() {
|
||||
expect(h.store.entryFor(ids[0])!.state, ReceivedImageState.decoded);
|
||||
expect(h.store.entryFor(ids[1])!.state, ReceivedImageState.evicted);
|
||||
expect(h.store.totalBytes, lessThanOrEqualTo(2500));
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
test('image-count budget evicts oldest first', () async {
|
||||
final h = _build(maxImages: 2);
|
||||
@@ -625,8 +647,10 @@ void main() {
|
||||
final h = _build(maxAge: const Duration(minutes: 10));
|
||||
final entry = await _completeOne(h);
|
||||
await h.store.settle();
|
||||
expect(h.store.entryFor(entry.streamId)!.state,
|
||||
ReceivedImageState.decoded);
|
||||
expect(
|
||||
h.store.entryFor(entry.streamId)!.state,
|
||||
ReceivedImageState.decoded,
|
||||
);
|
||||
h.advance(const Duration(minutes: 11));
|
||||
final evicted = await h.store.evictToBudget();
|
||||
expect(evicted, contains(entry.streamId));
|
||||
@@ -762,8 +786,11 @@ void main() {
|
||||
expect(entry.state, ReceivedImageState.reassembled);
|
||||
expect(entry.needsManualDecode, isTrue);
|
||||
expect(h.store.decodeQueue, isEmpty);
|
||||
expect(h.decoder.calls, 0,
|
||||
reason: 'a radio packet must never start a 2.16 GiB decode by itself');
|
||||
expect(
|
||||
h.decoder.calls,
|
||||
0,
|
||||
reason: 'a radio packet must never start a 2.16 GiB decode by itself',
|
||||
);
|
||||
// Everything the placeholder card needs is already on the entry.
|
||||
expect(entry.senderPrefix, kSender);
|
||||
expect(entry.bitstreamByteCount, greaterThan(0));
|
||||
@@ -779,7 +806,8 @@ void main() {
|
||||
expect(h.decoder.calls, 1);
|
||||
});
|
||||
|
||||
test('a finished model download does not decode the whole backlog',
|
||||
test(
|
||||
'a finished model download does not decode the whole backlog',
|
||||
() async {
|
||||
final decoder = _FakeDecoder(
|
||||
availability: ImageCodecAvailability.disabled,
|
||||
@@ -800,7 +828,8 @@ void main() {
|
||||
expect(h.store.entryFor(id)!.state, ReceivedImageState.reassembled);
|
||||
expect(h.store.entryFor(id)!.needsManualDecode, isTrue);
|
||||
}
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
test('turning the setting on affects future arrivals only', () async {
|
||||
final h = _build(processAutomatically: false);
|
||||
@@ -810,15 +839,21 @@ void main() {
|
||||
h.store.processAutomatically = true;
|
||||
await h.store.settle();
|
||||
expect(h.decoder.calls, 0, reason: 'no retro-decode of the backlog');
|
||||
expect(h.store.entryFor(parked.streamId)!.state,
|
||||
ReceivedImageState.reassembled);
|
||||
expect(
|
||||
h.store.entryFor(parked.streamId)!.state,
|
||||
ReceivedImageState.reassembled,
|
||||
);
|
||||
|
||||
final fresh = await _completeOne(h, imgId: 91, seed: 5);
|
||||
await h.store.settle();
|
||||
expect(h.store.entryFor(fresh.streamId)!.state,
|
||||
ReceivedImageState.decoded);
|
||||
expect(h.store.entryFor(parked.streamId)!.state,
|
||||
ReceivedImageState.reassembled);
|
||||
expect(
|
||||
h.store.entryFor(fresh.streamId)!.state,
|
||||
ReceivedImageState.decoded,
|
||||
);
|
||||
expect(
|
||||
h.store.entryFor(parked.streamId)!.state,
|
||||
ReceivedImageState.reassembled,
|
||||
);
|
||||
});
|
||||
|
||||
test('a reassembled entry restored from disk is always tappable', () async {
|
||||
@@ -849,10 +884,7 @@ void main() {
|
||||
h.decoder.availability = ImageCodecAvailability.disabled;
|
||||
expect(h.store.decoderAvailability, ImageCodecAvailability.disabled);
|
||||
final noDecoder = ReceivedImageStore(decoder: null);
|
||||
expect(
|
||||
noDecoder.decoderAvailability,
|
||||
ImageCodecAvailability.unavailable,
|
||||
);
|
||||
expect(noDecoder.decoderAvailability, ImageCodecAvailability.unavailable);
|
||||
noDecoder.dispose();
|
||||
});
|
||||
});
|
||||
@@ -874,8 +906,11 @@ void main() {
|
||||
await h.store.settle();
|
||||
|
||||
expect(decoder.calls, 10);
|
||||
expect(decoder.maxConcurrent, 1,
|
||||
reason: 'two concurrent decodes is ~4.3 GiB and an OOM kill');
|
||||
expect(
|
||||
decoder.maxConcurrent,
|
||||
1,
|
||||
reason: 'two concurrent decodes is ~4.3 GiB and an OOM kill',
|
||||
);
|
||||
for (final id in ids) {
|
||||
expect(h.store.entryFor(id)!.state, ReceivedImageState.decoded);
|
||||
}
|
||||
@@ -895,7 +930,8 @@ void main() {
|
||||
});
|
||||
|
||||
group('deletion hooks', () {
|
||||
test('deleteImagesForChannel reclaims every image of one conversation',
|
||||
test(
|
||||
'deleteImagesForChannel reclaims every image of one conversation',
|
||||
() async {
|
||||
final h = _build();
|
||||
final a = await _completeOne(h, imgId: 130);
|
||||
@@ -921,7 +957,8 @@ void main() {
|
||||
expect(h.blobs.hasSidecar(a.streamId), isFalse);
|
||||
expect(h.store.entryFor(other.streamId), isNotNull);
|
||||
expect(h.store.totalBytes, other.storedBytes);
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
test('deleteImageForSentinel takes the message text', () async {
|
||||
final h = _build();
|
||||
@@ -950,9 +987,8 @@ void main() {
|
||||
}
|
||||
});
|
||||
|
||||
FileReceivedImageBlobStore newStore() => FileReceivedImageBlobStore(
|
||||
baseDirectory: () async => tempDir,
|
||||
);
|
||||
FileReceivedImageBlobStore newStore() =>
|
||||
FileReceivedImageBlobStore(baseDirectory: () async => tempDir);
|
||||
|
||||
test('round-trips bytes and sidecars through real files', () async {
|
||||
final blobs = newStore();
|
||||
@@ -964,7 +1000,9 @@ void main() {
|
||||
expect(await blobs.readPng('1a2b0700693f21'), _payload(4096, 3));
|
||||
expect(await blobs.bitstreamSize('1a2b0700693f21'), 155);
|
||||
expect(await blobs.pngSize('1a2b0700693f21'), 4096);
|
||||
expect(await blobs.readSidecars(), {'1a2b0700693f21': '{"streamId":"x"}'});
|
||||
expect(await blobs.readSidecars(), {
|
||||
'1a2b0700693f21': '{"streamId":"x"}',
|
||||
});
|
||||
expect(blobs.pngPath('1a2b0700693f21'), endsWith('1a2b0700693f21.png'));
|
||||
expect(File(blobs.pngPath('1a2b0700693f21')!).existsSync(), isTrue);
|
||||
|
||||
@@ -1044,8 +1082,10 @@ void main() {
|
||||
at: now,
|
||||
);
|
||||
await store.settle();
|
||||
expect(store.entryFor(entry!.streamId)!.state,
|
||||
ReceivedImageState.decoded);
|
||||
expect(
|
||||
store.entryFor(entry!.streamId)!.state,
|
||||
ReceivedImageState.decoded,
|
||||
);
|
||||
store.dispose();
|
||||
|
||||
final reborn = ReceivedImageStore(
|
||||
@@ -1055,8 +1095,11 @@ void main() {
|
||||
);
|
||||
await reborn.load();
|
||||
final loaded = reborn.entryFor(entry.streamId);
|
||||
expect(loaded, isNotNull,
|
||||
reason: 'the whole point: images outlive the process');
|
||||
expect(
|
||||
loaded,
|
||||
isNotNull,
|
||||
reason: 'the whole point: images outlive the process',
|
||||
);
|
||||
expect(loaded!.state, ReceivedImageState.decoded);
|
||||
expect(loaded.pngStored, isTrue);
|
||||
expect(loaded.pngBytes, isNull, reason: 'pixels are read lazily');
|
||||
@@ -1098,7 +1141,8 @@ void main() {
|
||||
});
|
||||
});
|
||||
|
||||
test('listeners fire for the message list and for the single bubble',
|
||||
test(
|
||||
'listeners fire for the message list and for the single bubble',
|
||||
() async {
|
||||
final h = _build();
|
||||
var storeNotifications = 0;
|
||||
@@ -1124,7 +1168,8 @@ void main() {
|
||||
expect(storeNotifications, greaterThan(1));
|
||||
expect(bubbleNotifications, greaterThan(1));
|
||||
expect(listenable.value!.state, ReceivedImageState.decoded);
|
||||
});
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/// Delivers a whole single-chunk image and returns its entry (state
|
||||
|
||||
@@ -83,8 +83,9 @@ List<String> _texts(WidgetTester tester) => tester
|
||||
.toList();
|
||||
|
||||
void main() {
|
||||
testWidgets('renders with a fake codec and shows the image preview',
|
||||
(tester) async {
|
||||
testWidgets('renders with a fake codec and shows the image preview', (
|
||||
tester,
|
||||
) async {
|
||||
await _openSheet(tester, radio: _knownRadio);
|
||||
|
||||
expect(find.byType(ImageSendPreviewSheet), findsOneWidget);
|
||||
@@ -94,8 +95,9 @@ void main() {
|
||||
expect(send.onPressed, isNotNull);
|
||||
});
|
||||
|
||||
testWidgets('shows the packet count for the encoded ft32 payload',
|
||||
(tester) async {
|
||||
testWidgets('shows the packet count for the encoded ft32 payload', (
|
||||
tester,
|
||||
) async {
|
||||
await _openSheet(tester, radio: _knownRadio);
|
||||
|
||||
// FakeImageSendCodec emits the measured ft32 mean (156 B) -> one data chunk,
|
||||
@@ -110,8 +112,9 @@ void main() {
|
||||
expect(_texts(tester), contains('${expected.chunkCount}'));
|
||||
});
|
||||
|
||||
testWidgets('shows a concrete airtime when the radio settings are known',
|
||||
(tester) async {
|
||||
testWidgets('shows a concrete airtime when the radio settings are known', (
|
||||
tester,
|
||||
) async {
|
||||
await _openSheet(tester, radio: _knownRadio);
|
||||
|
||||
final texts = _texts(tester);
|
||||
@@ -128,8 +131,9 @@ void main() {
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('headline time is the paced wall clock, not raw airtime',
|
||||
(tester) async {
|
||||
testWidgets('headline time is the paced wall clock, not raw airtime', (
|
||||
tester,
|
||||
) async {
|
||||
await _openSheet(tester, radio: _knownRadio);
|
||||
|
||||
final expected = estimateSendFromRadioParams(
|
||||
@@ -154,8 +158,9 @@ void main() {
|
||||
expect(texts, isNot(contains('${seconds(expected.totalAirtime!)} s')));
|
||||
});
|
||||
|
||||
testWidgets('renders "unknown" airtime when the radio params are absent',
|
||||
(tester) async {
|
||||
testWidgets('renders "unknown" airtime when the radio params are absent', (
|
||||
tester,
|
||||
) async {
|
||||
await _openSheet(tester, radio: _unknownRadio);
|
||||
|
||||
final texts = _texts(tester);
|
||||
@@ -223,8 +228,9 @@ void main() {
|
||||
expect(find.byType(ImageSendPreviewSheet), findsNothing);
|
||||
});
|
||||
|
||||
testWidgets('confirming returns the payload, packet count and both times',
|
||||
(tester) async {
|
||||
testWidgets('confirming returns the payload, packet count and both times', (
|
||||
tester,
|
||||
) async {
|
||||
ImageSendPreviewResult? result;
|
||||
|
||||
await tester.pumpWidget(
|
||||
@@ -270,8 +276,9 @@ void main() {
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('a codec that is still downloading cannot be sent from',
|
||||
(tester) async {
|
||||
testWidgets('a codec that is still downloading cannot be sent from', (
|
||||
tester,
|
||||
) async {
|
||||
await _openSheet(
|
||||
tester,
|
||||
radio: _knownRadio,
|
||||
@@ -289,7 +296,8 @@ void main() {
|
||||
|
||||
testWidgets('an unavailable codec explains itself with unavailableReason, '
|
||||
'not the generic string', (tester) async {
|
||||
const reason = 'This build ships the image decoder only. Encoding and '
|
||||
const reason =
|
||||
'This build ships the image decoder only. Encoding and '
|
||||
'decoding a bitstream also needs the entropy-side graph and the rANS '
|
||||
'coder, which are not included yet.';
|
||||
await _openSheet(
|
||||
|
||||
@@ -96,8 +96,9 @@ Future<void> _pumpBubble(
|
||||
}
|
||||
|
||||
void main() {
|
||||
testWidgets('decoded incoming bubble carries the R6 badge and caption',
|
||||
(tester) async {
|
||||
testWidgets('decoded incoming bubble carries the R6 badge and caption', (
|
||||
tester,
|
||||
) async {
|
||||
final blobs = InMemoryReceivedImageBlobStore();
|
||||
final store = ReceivedImageStore(blobs: blobs);
|
||||
final png = base64Decode(_png1x1);
|
||||
@@ -161,7 +162,6 @@ void main() {
|
||||
expect(find.textContaining('Fine detail is generated'), findsOneWidget);
|
||||
});
|
||||
|
||||
|
||||
testWidgets('receiving state shows the packet count', (tester) async {
|
||||
final store = ReceivedImageStore(decoder: null);
|
||||
final reassembler = ImageReassembler(selfPrefix: 0xbeef);
|
||||
@@ -194,7 +194,8 @@ void main() {
|
||||
|
||||
testWidgets(
|
||||
'awaiting card shows the bitstream size, the packet count and the '
|
||||
'tap-to-process affordance', (tester) async {
|
||||
'tap-to-process affordance',
|
||||
(tester) async {
|
||||
final store = await _awaitingStore(bytes: 156, packets: 2);
|
||||
final entry = store.entryFor('await1')!;
|
||||
expect(entry.state, ReceivedImageState.reassembled);
|
||||
@@ -207,7 +208,8 @@ void main() {
|
||||
// A placeholder is never dressed up as a picture.
|
||||
expect(find.text('AI-reconstructed'), findsNothing);
|
||||
expect(find.byType(Image), findsNothing);
|
||||
});
|
||||
},
|
||||
);
|
||||
|
||||
testWidgets('awaiting card honours injected strings', (tester) async {
|
||||
final store = await _awaitingStore(bytes: 209, packets: 3);
|
||||
@@ -338,8 +340,9 @@ void main() {
|
||||
expect(decoder.decodeCalls, 1);
|
||||
});
|
||||
|
||||
testWidgets('every non-decoded state renders a legible label',
|
||||
(tester) async {
|
||||
testWidgets('every non-decoded state renders a legible label', (
|
||||
tester,
|
||||
) async {
|
||||
const cases = <String, String>{
|
||||
'failedIncomplete': 'Image incomplete — 1 of 3 packets arrived',
|
||||
'failedCorrupt': 'Image could not be reconstructed',
|
||||
@@ -413,8 +416,9 @@ void main() {
|
||||
expect(find.textContaining('Fine detail is generated'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('the caption quotes the real bitstream size, not a nominal one',
|
||||
(tester) async {
|
||||
testWidgets('the caption quotes the real bitstream size, not a nominal one', (
|
||||
tester,
|
||||
) async {
|
||||
// It used to hardcode "~156 bytes" under every image, so a 209-byte image
|
||||
// and a 110-byte one both claimed 156. The label's whole purpose is
|
||||
// honesty about what was actually transmitted.
|
||||
@@ -448,15 +452,22 @@ void main() {
|
||||
await _pumpBubble(tester, store, streamId: id);
|
||||
await tester.pump();
|
||||
|
||||
expect(find.textContaining('$bytes bytes'), findsOneWidget,
|
||||
reason: 'caption must quote $bytes');
|
||||
expect(find.textContaining('156 bytes'), findsNothing,
|
||||
reason: 'no nominal size may leak into the caption');
|
||||
expect(
|
||||
find.textContaining('$bytes bytes'),
|
||||
findsOneWidget,
|
||||
reason: 'caption must quote $bytes',
|
||||
);
|
||||
expect(
|
||||
find.textContaining('156 bytes'),
|
||||
findsNothing,
|
||||
reason: 'no nominal size may leak into the caption',
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
testWidgets('the R6 caption is never truncated in a narrow bubble',
|
||||
(tester) async {
|
||||
testWidgets('the R6 caption is never truncated in a narrow bubble', (
|
||||
tester,
|
||||
) async {
|
||||
// It used to be maxLines: 2 and clipped mid-sentence — the rendered text
|
||||
// read "Details are invented. Not a", cutting off exactly where the
|
||||
// warning was. A half-shown warning is worse than none.
|
||||
|
||||
+1
-1654
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user