rebuild translations

This commit is contained in:
zjs81
2026-08-11 00:15:45 -07:00
parent eee72b4c65
commit cf6c93c50a
63 changed files with 6584 additions and 4040 deletions
+223 -1
View File
@@ -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
View File
@@ -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,04,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
View File
@@ -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
View File
@@ -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 daspect na 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… denviron 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
View File
@@ -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
View File
@@ -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
View File
@@ -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": "リポバッテリー HV3.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
View File
@@ -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}초"
}
+104 -98
View File
@@ -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 сек';
}
}
+86 -80
View File
@@ -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,04,2V)';
@override
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
String get appSettings_batteryLipoHv => 'LiPo HV (3,04,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';
}
}
+95 -90
View File
@@ -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 transmisn';
@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';
}
}
+101 -95
View File
@@ -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 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 daspect na 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… denviron 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';
}
}
+96 -94
View File
@@ -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.)';
}
}
+103 -94
View File
@@ -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';
}
}
+99 -110
View File
@@ -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 => 'リポバッテリー HV3.04.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秒';
}
}
+99 -110
View File
@@ -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초';
}
}
+92 -89
View File
@@ -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
+99 -95
View File
@@ -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';
}
}
+94 -90
View File
@@ -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';
}
}
+106 -98
View File
@@ -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.04.2 В)';
@override
String get appSettings_batteryLipoHv => 'LiPo HV (3.0-4.35V)';
String get appSettings_batteryLipoHv => 'LiPo HV (3,04,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 с';
}
}
+94 -92
View File
@@ -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 — pat $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';
}
}
+99 -96
View File
@@ -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,04,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
+95 -93
View File
@@ -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';
}
}
+103 -98
View File
@@ -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 с';
}
}
+98 -113
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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,04,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
View File
@@ -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
View File
@@ -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,04,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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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.
+1 -2
View File
@@ -240,8 +240,7 @@ class AppSettings {
}) : batteryChemistryByDeviceId = batteryChemistryByDeviceId ?? {},
batteryChemistryByRepeaterId = batteryChemistryByRepeaterId ?? {},
mutedChannels = mutedChannels ?? {},
imageCodecDownloadedModels =
imageCodecDownloadedModels ?? const [],
imageCodecDownloadedModels = imageCodecDownloadedModels ?? const [],
translationDownloadedModels = translationDownloadedModels ?? const [],
cyr2latProfiles =
cyr2latProfiles ??
+1 -2
View File
@@ -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;
+24 -13
View File
@@ -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();
+13 -16
View File
@@ -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 {
+16 -8
View File
@@ -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
+7 -4
View File
@@ -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;
+21 -7
View File
@@ -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.',
);
}
}
+7 -5
View File
@@ -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 = [
+4 -1
View File
@@ -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');
}
+14 -4
View File
@@ -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',
);
}
}
+10 -6
View File
@@ -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));
+9 -8
View File
@@ -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;
+16 -18
View File
@@ -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),
),
),
+10 -7
View File
@@ -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,
+62 -25
View File
@@ -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
View File
@@ -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
View File
@@ -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,
);
});
});
+14 -11
View File
@@ -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', () {
+2 -1
View File
@@ -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
+1 -4
View File
@@ -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(
+16 -9
View File
@@ -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);
+295 -24
View File
@@ -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),
],
);
}
+2 -2
View File
@@ -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>>();
+89 -44
View File
@@ -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
+23 -15
View File
@@ -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(
+26 -15
View File
@@ -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
View File
File diff suppressed because it is too large Load Diff