);
}
diff --git a/src/renderer/lib/nomad/nomadRasterPreview.ts b/src/renderer/lib/nomad/nomadRasterPreview.ts
new file mode 100644
index 000000000..43df1632a
--- /dev/null
+++ b/src/renderer/lib/nomad/nomadRasterPreview.ts
@@ -0,0 +1,20 @@
+/** Common Nomad `/file/...` raster extensions for inline preview. */
+const NOMAD_RASTER_EXT = /\.(png|jpe?g|gif|webp|bmp|avif)$/i;
+
+export function isNomadRasterFileName(fileName: string): boolean {
+ return NOMAD_RASTER_EXT.test(fileName.trim());
+}
+
+/** Build a browser data URL from Nomad file base64 for raster preview. */
+export function nomadRasterDataUrl(fileName: string, contentBase64: string): string | null {
+ if (!isNomadRasterFileName(fileName)) return null;
+ const lower = fileName.toLowerCase();
+ let mime = 'application/octet-stream';
+ if (lower.endsWith('.png')) mime = 'image/png';
+ else if (lower.endsWith('.jpg') || lower.endsWith('.jpeg')) mime = 'image/jpeg';
+ else if (lower.endsWith('.gif')) mime = 'image/gif';
+ else if (lower.endsWith('.webp')) mime = 'image/webp';
+ else if (lower.endsWith('.bmp')) mime = 'image/bmp';
+ else if (lower.endsWith('.avif')) mime = 'image/avif';
+ return `data:${mime};base64,${contentBase64}`;
+}
diff --git a/src/renderer/locales/cs/translation.json b/src/renderer/locales/cs/translation.json
index dcae23f70..ad8df9a80 100644
--- a/src/renderer/locales/cs/translation.json
+++ b/src/renderer/locales/cs/translation.json
@@ -770,7 +770,9 @@
"heardByRepeatersDetail_few": "Slyšeno {{count}}: {{names}}",
"searchResults_few": "{{count}} výsledky",
"reticulumSendAwaitingPeerReceipt": "Odesláno (čeká se na potvrzení od kolegy)",
- "reticulumChatNeedsLxmfDelivery": "Tento protějšek zatím nemá doručovací adresu LXMF (Chat nemůže používat cíl pouze pro hlas). Počkejte na oznámení LXMF nebo vložte jeho 32místný hash LXMF."
+ "reticulumChatNeedsLxmfDelivery": "Tento protějšek zatím nemá doručovací adresu LXMF (Chat nemůže používat cíl pouze pro hlas). Počkejte na oznámení LXMF nebo vložte jeho 32místný hash LXMF.",
+ "saveAttachment": "Uložit...",
+ "revealAttachment": "Zobrazit ve složce"
},
"chatPayload": {
"mention": "Zmínit {{label}}",
@@ -3456,7 +3458,9 @@
"pageProgressFailoverIface": "Zkusit jinou trasu přes {{iface}}…",
"pageProgressFailoverGeneric": "Zkouším jinou trasu...",
"pageProgressNoAlternate": "Žádné jiné trasy nejsou k dispozici — dokončení tohoto pokusu...",
- "hopsAway_few": "{{count}} skoky daleko"
+ "hopsAway_few": "{{count}} skoky daleko",
+ "downloadFile": "Stáhnout",
+ "dismissPreview": "Zamítnout"
},
"packetDistribution": {
"overallDistribution": "Celková distribuce",
diff --git a/src/renderer/locales/de/translation.json b/src/renderer/locales/de/translation.json
index a8f6d4067..0432fcbdd 100644
--- a/src/renderer/locales/de/translation.json
+++ b/src/renderer/locales/de/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}} zusätzlicher nicht identifizierter Spediteur (Hashes: {{hashes}})",
"heardByRepeatersAdditional_other": "{{count}} weitere nicht identifizierte Spediteure (Hashes: {{hashes}})",
"reticulumSendAwaitingPeerReceipt": "Gesendet (wartet auf Peer-Eingang)",
- "reticulumChatNeedsLxmfDelivery": "Dieser Peer hat noch keine LXMF-Lieferadresse (Chat kann kein Voice-only-Ziel verwenden). Warten Sie auf eine LXMF-Ankündigung oder fügen Sie ihren 32-stelligen LXMF-Hash ein."
+ "reticulumChatNeedsLxmfDelivery": "Dieser Peer hat noch keine LXMF-Lieferadresse (Chat kann kein Voice-only-Ziel verwenden). Warten Sie auf eine LXMF-Ankündigung oder fügen Sie ihren 32-stelligen LXMF-Hash ein.",
+ "saveAttachment": "Speichern…",
+ "revealAttachment": "In Ordner"
},
"chatPayload": {
"mention": "Erwähne {{label}}",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "Versuche eine andere Route über {{iface}} ({{hops}} Hops)…",
"pageProgressFailoverIface": "Versuche eine andere Route über {{iface}}…",
"pageProgressFailoverGeneric": "Eine andere Route wird versucht...",
- "pageProgressNoAlternate": "Keine anderen Routen verfügbar — Beenden dieses Versuchs..."
+ "pageProgressNoAlternate": "Keine anderen Routen verfügbar — Beenden dieses Versuchs...",
+ "downloadFile": "Herunterladen",
+ "dismissPreview": "Ablehnen"
},
"packetDistribution": {
"overallDistribution": "Gesamtverteilung",
diff --git a/src/renderer/locales/en/translation.json b/src/renderer/locales/en/translation.json
index d8e97a88d..58fa25535 100644
--- a/src/renderer/locales/en/translation.json
+++ b/src/renderer/locales/en/translation.json
@@ -496,6 +496,8 @@
"sendButton": "Send",
"sendButtonDm": "DM",
"sendButtonSending": "...",
+ "saveAttachment": "Save…",
+ "revealAttachment": "Show in folder",
"waitingMessagesQueued": "{{count}} queued message(s) on radio",
"waitingMessagesSyncProgress": "Syncing {{processed}} / {{total}} from radio…",
"waitingMessagesSyncProgressIndeterminate": "Syncing queued messages from radio…",
@@ -3458,6 +3460,8 @@
"pageLoadingCountdownOverdue": "Loading page… still working",
"pageLoadingRetryCountdown": "First attempt timed out — refreshing path and retrying… {{time}} left",
"pageLoadingRetryOverdue": "Refreshing path and retrying… still working",
+ "downloadFile": "Download",
+ "dismissPreview": "Dismiss",
"pageLoadingTimeLeft": "{{time}} left on this attempt",
"pageLoadingStillWorking": "Still working…",
"pageProgressLinking": "Connecting via {{iface}} ({{hops}} hops)…",
diff --git a/src/renderer/locales/es/translation.json b/src/renderer/locales/es/translation.json
index a796edf20..bb0a02429 100644
--- a/src/renderer/locales/es/translation.json
+++ b/src/renderer/locales/es/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}} reenviador no identificado adicional (hashes: {{hashes}})",
"heardByRepeatersAdditional_other": "{{count}} reenviadores no identificados adicionales (hashes: {{hashes}})",
"reticulumSendAwaitingPeerReceipt": "Enviado (pendiente de recibo del compañero)",
- "reticulumChatNeedsLxmfDelivery": "Este compañero aún no tiene una dirección de entrega LXMF (el chat no puede usar un destino de solo voz). Espere un anuncio de LXMF o pegue su hash LXMF de 32 caracteres."
+ "reticulumChatNeedsLxmfDelivery": "Este compañero aún no tiene una dirección de entrega LXMF (el chat no puede usar un destino de solo voz). Espere un anuncio de LXMF o pegue su hash LXMF de 32 caracteres.",
+ "saveAttachment": "Salvar…",
+ "revealAttachment": "Mostrar en la carpeta"
},
"chatPayload": {
"mention": "Mencionar {{label}}",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "Intentando una ruta diferente a través de {{iface}} ({{hops}} hops)...",
"pageProgressFailoverIface": "Intentando una ruta diferente a través de {{iface}}...",
"pageProgressFailoverGeneric": "Probando una ruta diferente...",
- "pageProgressNoAlternate": "No hay otras rutas disponibles — finalizando este intento..."
+ "pageProgressNoAlternate": "No hay otras rutas disponibles — finalizando este intento...",
+ "downloadFile": "Descargar",
+ "dismissPreview": "Descartar"
},
"packetDistribution": {
"overallDistribution": "Distribución general",
diff --git a/src/renderer/locales/fr/translation.json b/src/renderer/locales/fr/translation.json
index 383278750..10904bcdd 100644
--- a/src/renderer/locales/fr/translation.json
+++ b/src/renderer/locales/fr/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}} expéditeur supplémentaire non identifié (hachages : {{hashes}})",
"heardByRepeatersAdditional_other": "{{count}} expéditeurs supplémentaires non identifiés (hachages : {{hashes}})",
"reticulumSendAwaitingPeerReceipt": "Envoyé (en attente de réception par les pairs)",
- "reticulumChatNeedsLxmfDelivery": "Ce pair n'a pas encore d'adresse de livraison LXMF (le chat ne peut pas utiliser une destination vocale uniquement). Attendez une annonce LXMF ou collez leur hachage LXMF de 32 caractères."
+ "reticulumChatNeedsLxmfDelivery": "Ce pair n'a pas encore d'adresse de livraison LXMF (le chat ne peut pas utiliser une destination vocale uniquement). Attendez une annonce LXMF ou collez leur hachage LXMF de 32 caractères.",
+ "saveAttachment": "Sauvegarder…",
+ "revealAttachment": "Montrer dans son dossier"
},
"chatPayload": {
"mention": "Mention {{label}}",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "Essayer un autre itinéraire via {{iface}} ({{hops}} sauts)…",
"pageProgressFailoverIface": "Essayer un autre itinéraire via {{iface}}…",
"pageProgressFailoverGeneric": "Essayer un autre itinéraire...",
- "pageProgressNoAlternate": "Aucun autre itinéraire disponible — terminer cette tentative…"
+ "pageProgressNoAlternate": "Aucun autre itinéraire disponible — terminer cette tentative…",
+ "downloadFile": "Télécharger",
+ "dismissPreview": "Ignorer"
},
"packetDistribution": {
"overallDistribution": "Répartition globale",
diff --git a/src/renderer/locales/id/translation.json b/src/renderer/locales/id/translation.json
index 23dc35152..1d59afd83 100644
--- a/src/renderer/locales/id/translation.json
+++ b/src/renderer/locales/id/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}} forwarder tak dikenal tambahan (hash: {{hashes}})",
"heardByRepeatersAdditional_other": "{{count}} forwarder tak dikenal tambahan (hash: {{hashes}})",
"reticulumSendAwaitingPeerReceipt": "Terkirim (menunggu tanda terima sejawat)",
- "reticulumChatNeedsLxmfDelivery": "Rekan ini belum memiliki alamat pengiriman LXMF (Obrolan tidak dapat menggunakan tujuan khusus Suara). Tunggu pengumuman LXMF, atau tempelkan hash LXMF 32 karakternya."
+ "reticulumChatNeedsLxmfDelivery": "Rekan ini belum memiliki alamat pengiriman LXMF (Obrolan tidak dapat menggunakan tujuan khusus Suara). Tunggu pengumuman LXMF, atau tempelkan hash LXMF 32 karakternya.",
+ "saveAttachment": "Simpan",
+ "revealAttachment": "Tampilkan dalam Folder"
},
"chatPayload": {
"mention": "Sebutkan {{label}}",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "Mencoba rute yang berbeda melalui {{iface}} ({{hops}} hop)...",
"pageProgressFailoverIface": "Mencoba rute lain melalui {{iface}}…",
"pageProgressFailoverGeneric": "Mencoba rute yang berbeda...",
- "pageProgressNoAlternate": "Tidak ada rute lain yang tersedia — menyelesaikan upaya ini..."
+ "pageProgressNoAlternate": "Tidak ada rute lain yang tersedia — menyelesaikan upaya ini...",
+ "downloadFile": "Unduh",
+ "dismissPreview": "Tutup"
},
"packetDistribution": {
"overallDistribution": "Distribusi Keseluruhan",
diff --git a/src/renderer/locales/it/translation.json b/src/renderer/locales/it/translation.json
index bb293f729..efdcb826b 100644
--- a/src/renderer/locales/it/translation.json
+++ b/src/renderer/locales/it/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}} ulteriore spedizioniere non identificato (hash: {{hashes}})",
"heardByRepeatersAdditional_other": "{{count}} ulteriori spedizionieri non identificati (hash: {{hashes}})",
"reticulumSendAwaitingPeerReceipt": "Inviato (in attesa di ricezione da parte del pari)",
- "reticulumChatNeedsLxmfDelivery": "Questo peer non ha ancora un indirizzo di consegna LXMF (la chat non può utilizzare una destinazione solo vocale). Attendi un annuncio LXMF o incolla il loro hash LXMF di 32 caratteri."
+ "reticulumChatNeedsLxmfDelivery": "Questo peer non ha ancora un indirizzo di consegna LXMF (la chat non può utilizzare una destinazione solo vocale). Attendi un annuncio LXMF o incolla il loro hash LXMF di 32 caratteri.",
+ "saveAttachment": "Salva…",
+ "revealAttachment": "Nella cartella"
},
"chatPayload": {
"mention": "Menziona {{label}}",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "Prova un percorso diverso tramite {{iface}} ({{hops}} Hops)...",
"pageProgressFailoverIface": "Prova un percorso diverso tramite {{iface}}...",
"pageProgressFailoverGeneric": "Sto provando un percorso diverso...",
- "pageProgressNoAlternate": "Nessun altro percorso disponibile — terminare questo tentativo..."
+ "pageProgressNoAlternate": "Nessun altro percorso disponibile — terminare questo tentativo...",
+ "downloadFile": "Download",
+ "dismissPreview": "Ignora"
},
"packetDistribution": {
"overallDistribution": "Distribuzione complessiva",
diff --git a/src/renderer/locales/ja/translation.json b/src/renderer/locales/ja/translation.json
index 8f8dc09f2..e08ee7133 100644
--- a/src/renderer/locales/ja/translation.json
+++ b/src/renderer/locales/ja/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}}追加の未確認フォワーダー(ハッシュ: {{hashes}} )",
"heardByRepeatersAdditional_other": "{{count}}追加の未確認フォワーダー(ハッシュ: {{hashes}} )",
"reticulumSendAwaitingPeerReceipt": "送信済み(ピアレシート待ち)",
- "reticulumChatNeedsLxmfDelivery": "このピアにはまだLXMF配信アドレスがありません(チャットは音声のみの宛先を使用できません)。LXMFの発表を待つか、32文字のLXMFハッシュを貼り付けます。"
+ "reticulumChatNeedsLxmfDelivery": "このピアにはまだLXMF配信アドレスがありません(チャットは音声のみの宛先を使用できません)。LXMFの発表を待つか、32文字のLXMFハッシュを貼り付けます。",
+ "saveAttachment": "保存...",
+ "revealAttachment": "フォルダを表示"
},
"chatPayload": {
"mention": "{{label}} について言及してください",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "{{iface}} ( {{hops}}ホップ)経由で別のルートを試しています…",
"pageProgressFailoverIface": "{{iface}}経由で別のルートを試しています…",
"pageProgressFailoverGeneric": "別のルートを試しています…",
- "pageProgressNoAlternate": "他に利用可能なルートはありません—この試みを終了しています…"
+ "pageProgressNoAlternate": "他に利用可能なルートはありません—この試みを終了しています…",
+ "downloadFile": "ダウンロード",
+ "dismissPreview": "却下"
},
"packetDistribution": {
"overallDistribution": "全体の分布",
diff --git a/src/renderer/locales/ko/translation.json b/src/renderer/locales/ko/translation.json
index cc788c838..3b85b3530 100644
--- a/src/renderer/locales/ko/translation.json
+++ b/src/renderer/locales/ko/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}} 추가 미확인 전달자 (해시: {{hashes}})",
"heardByRepeatersAdditional_other": "{{count}} 추가 미확인 전달자 (해시: {{hashes}})",
"reticulumSendAwaitingPeerReceipt": "전송 완료 (동료 영수증 대기 중)",
- "reticulumChatNeedsLxmfDelivery": "이 동료는 아직 LXMF 배달 주소가 없습니다 (채팅은 음성 전용 목적지를 사용할 수 없습니다). LXMF가 발표될 때까지 기다리거나 32자 LXMF 해시를 붙여넣습니다."
+ "reticulumChatNeedsLxmfDelivery": "이 동료는 아직 LXMF 배달 주소가 없습니다 (채팅은 음성 전용 목적지를 사용할 수 없습니다). LXMF가 발표될 때까지 기다리거나 32자 LXMF 해시를 붙여넣습니다.",
+ "saveAttachment": "저장…",
+ "revealAttachment": "폴더에 표시"
},
"chatPayload": {
"mention": "{{label}}을(를) 언급하세요",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "{{iface}} ({{hops}} HOPS) 을 (를) 통해 다른 경로로 시도 중...",
"pageProgressFailoverIface": "{{iface}} 을 (를) 경유하는 다른 경로로 시도 중...",
"pageProgressFailoverGeneric": "다른 경로로 시도 중...",
- "pageProgressNoAlternate": "사용 가능한 다른 경로가 없습니다. 이 시도를 완료하는 중..."
+ "pageProgressNoAlternate": "사용 가능한 다른 경로가 없습니다. 이 시도를 완료하는 중...",
+ "downloadFile": "다운로드",
+ "dismissPreview": "무시하기"
},
"packetDistribution": {
"overallDistribution": "전체 분포",
diff --git a/src/renderer/locales/nl/translation.json b/src/renderer/locales/nl/translation.json
index a5206b53a..c5ef9b196 100644
--- a/src/renderer/locales/nl/translation.json
+++ b/src/renderer/locales/nl/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}} extra niet-geïdentificeerde expediteur (hashes: {{hashes}})",
"heardByRepeatersAdditional_other": "{{count}} extra niet-geïdentificeerde expediteurs (hashes: {{hashes}})",
"reticulumSendAwaitingPeerReceipt": "Verzonden (in afwachting van ontvangst door collega's)",
- "reticulumChatNeedsLxmfDelivery": "Deze peer heeft nog geen LXMF-bezorgadres (chat kan geen bestemming met alleen spraak gebruiken). Wacht op een LXMF-aankondiging of plak hun LXMF-hash van 32 tekens."
+ "reticulumChatNeedsLxmfDelivery": "Deze peer heeft nog geen LXMF-bezorgadres (chat kan geen bestemming met alleen spraak gebruiken). Wacht op een LXMF-aankondiging of plak hun LXMF-hash van 32 tekens.",
+ "saveAttachment": "Opslaan",
+ "revealAttachment": "Tonen in map"
},
"chatPayload": {
"mention": "Vermeld {{label}}",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "Een andere route proberen via {{iface}} ({{hops}} hops)...",
"pageProgressFailoverIface": "Een andere route proberen via {{iface}}…",
"pageProgressFailoverGeneric": "Probeer een andere route...",
- "pageProgressNoAlternate": "Geen andere routes beschikbaar — deze poging afronden..."
+ "pageProgressNoAlternate": "Geen andere routes beschikbaar — deze poging afronden...",
+ "downloadFile": "Download",
+ "dismissPreview": "Afwijzen"
},
"packetDistribution": {
"overallDistribution": "Algemene distributie",
diff --git a/src/renderer/locales/pl/translation.json b/src/renderer/locales/pl/translation.json
index a16b60ca6..7a31fe869 100644
--- a/src/renderer/locales/pl/translation.json
+++ b/src/renderer/locales/pl/translation.json
@@ -788,7 +788,9 @@
"searchResults_few": "{{count}} wyniki",
"searchResults_many": "{{count}} wyników",
"reticulumSendAwaitingPeerReceipt": "Wysłano (oczekiwanie na pokwitowanie)",
- "reticulumChatNeedsLxmfDelivery": "Ten partner nie ma jeszcze adresu dostawy LXMF (czat nie może używać miejsca docelowego tylko dla połączeń głosowych). Poczekaj na ogłoszenie LXMF lub wklej 32-znakowy skrót LXMF."
+ "reticulumChatNeedsLxmfDelivery": "Ten partner nie ma jeszcze adresu dostawy LXMF (czat nie może używać miejsca docelowego tylko dla połączeń głosowych). Poczekaj na ogłoszenie LXMF lub wklej 32-znakowy skrót LXMF.",
+ "saveAttachment": "Zapisz",
+ "revealAttachment": "Pokaż w folderze"
},
"chatPayload": {
"mention": "Wspomnij o {{label}}",
@@ -3494,7 +3496,9 @@
"pageProgressFailoverGeneric": "Próbuję wybrać inną trasę…",
"pageProgressNoAlternate": "Brak innych dostępnych tras — kończenie tej próby…",
"hopsAway_few": "{{count}} przeskoki dalej",
- "hopsAway_many": "{{count}} przeskoków dalej"
+ "hopsAway_many": "{{count}} przeskoków dalej",
+ "downloadFile": "Pobierz",
+ "dismissPreview": "Odrzuć"
},
"packetDistribution": {
"overallDistribution": "Ogólna dystrybucja",
diff --git a/src/renderer/locales/pt-BR/translation.json b/src/renderer/locales/pt-BR/translation.json
index 205a22b3f..57238ab3d 100644
--- a/src/renderer/locales/pt-BR/translation.json
+++ b/src/renderer/locales/pt-BR/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}} encaminhador adicional não identificado (hashes: {{hashes}})",
"heardByRepeatersAdditional_other": "{{count}} encaminhadores adicionais não identificados (hashes: {{hashes}})",
"reticulumSendAwaitingPeerReceipt": "Enviado (aguardando recebimento dos pares)",
- "reticulumChatNeedsLxmfDelivery": "Este ponto ainda não tem endereço de entrega LXMF (o chat não pode usar um destino apenas de voz). Aguarde um anúncio LXMF ou cole o hash LXMF de 32 caracteres."
+ "reticulumChatNeedsLxmfDelivery": "Este ponto ainda não tem endereço de entrega LXMF (o chat não pode usar um destino apenas de voz). Aguarde um anúncio LXMF ou cole o hash LXMF de 32 caracteres.",
+ "saveAttachment": "Guardar…",
+ "revealAttachment": "_Mostrar na pasta"
},
"chatPayload": {
"mention": "Mencionar {{label}}",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "Tentando uma rota diferente via {{iface}} ({{hops}} saltos)…",
"pageProgressFailoverIface": "Tentando um trajeto diferente via {{iface}}…",
"pageProgressFailoverGeneric": "Tentando uma rota diferente...",
- "pageProgressNoAlternate": "Não há outras rotas disponíveis — concluindo esta tentativa..."
+ "pageProgressNoAlternate": "Não há outras rotas disponíveis — concluindo esta tentativa...",
+ "downloadFile": "Download",
+ "dismissPreview": "Dispensar"
},
"packetDistribution": {
"overallDistribution": "Distribuição Geral",
diff --git a/src/renderer/locales/ru/translation.json b/src/renderer/locales/ru/translation.json
index d025f671c..37adf676a 100644
--- a/src/renderer/locales/ru/translation.json
+++ b/src/renderer/locales/ru/translation.json
@@ -788,7 +788,9 @@
"searchResults_few": "{{count}} результата",
"searchResults_many": "{{count}} результатов",
"reticulumSendAwaitingPeerReceipt": "Отправлено (ожидает получения коллегой)",
- "reticulumChatNeedsLxmfDelivery": "Этот узел еще не имеет адреса доставки LXMF (чат не может использовать пункт назначения только для голоса). Дождитесь объявления LXMF или вставьте их 32-символьный хэш LXMF."
+ "reticulumChatNeedsLxmfDelivery": "Этот узел еще не имеет адреса доставки LXMF (чат не может использовать пункт назначения только для голоса). Дождитесь объявления LXMF или вставьте их 32-символьный хэш LXMF.",
+ "saveAttachment": "Спасти…",
+ "revealAttachment": "Показать в папке"
},
"chatPayload": {
"mention": "Упоминание {{label}}",
@@ -3494,7 +3496,9 @@
"pageProgressFailoverGeneric": "Попробовать другой маршрут...",
"pageProgressNoAlternate": "Нет других доступных маршрутов — завершение этой попытки...",
"hopsAway_few": "На расстоянии {{count}} хопов",
- "hopsAway_many": "На расстоянии {{count}} хопов"
+ "hopsAway_many": "На расстоянии {{count}} хопов",
+ "downloadFile": "Загрузить",
+ "dismissPreview": "Пропустить"
},
"packetDistribution": {
"overallDistribution": "Общее распределение",
diff --git a/src/renderer/locales/tr/translation.json b/src/renderer/locales/tr/translation.json
index 7ece41a22..5505b8329 100644
--- a/src/renderer/locales/tr/translation.json
+++ b/src/renderer/locales/tr/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}} EK tanımlanamayan nakliyeci (hash'ler: {{hashes}})",
"heardByRepeatersAdditional_other": "{{count}} kimliği belirsiz ek göndericiler (hash'ler: {{hashes}})",
"reticulumSendAwaitingPeerReceipt": "Gönderildi (akran makbuzu bekleniyor)",
- "reticulumChatNeedsLxmfDelivery": "Bu akranın henüz LXMF teslimat adresi yok (Sohbet yalnızca Sesli bir hedef kullanamaz). Bir LXMF duyurusu bekleyin veya 32 karakterlik LXMF karmasını yapıştırın."
+ "reticulumChatNeedsLxmfDelivery": "Bu akranın henüz LXMF teslimat adresi yok (Sohbet yalnızca Sesli bir hedef kullanamaz). Bir LXMF duyurusu bekleyin veya 32 karakterlik LXMF karmasını yapıştırın.",
+ "saveAttachment": "Kaydetmek…",
+ "revealAttachment": "Dizinde"
},
"chatPayload": {
"mention": "{{label}}'dan bahsedin",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "{{iface}} ({{hops}} atlama) üzerinden farklı bir rota deniyor…",
"pageProgressFailoverIface": "{{iface}} üzerinden farklı bir rota deniyor…",
"pageProgressFailoverGeneric": "Farklı bir rota deniyor...",
- "pageProgressNoAlternate": "Başka rota yok — bu girişim tamamlanıyor…"
+ "pageProgressNoAlternate": "Başka rota yok — bu girişim tamamlanıyor…",
+ "downloadFile": "İndir",
+ "dismissPreview": "Yok say"
},
"packetDistribution": {
"overallDistribution": "Genel Dağıtım",
diff --git a/src/renderer/locales/uk/translation.json b/src/renderer/locales/uk/translation.json
index 5c9ff5ab9..62d4588fc 100644
--- a/src/renderer/locales/uk/translation.json
+++ b/src/renderer/locales/uk/translation.json
@@ -788,7 +788,9 @@
"searchResults_few": "{{count}} результати",
"searchResults_many": "{{count}} результатів",
"reticulumSendAwaitingPeerReceipt": "Надіслано (очікується отримання від колеги)",
- "reticulumChatNeedsLxmfDelivery": "Цей вузол ще не має адреси доставки LXMF (чат не може використовувати призначення лише для голосу). Дочекайтеся оголошення LXMF або вставте їх 32-символьний хеш LXMF."
+ "reticulumChatNeedsLxmfDelivery": "Цей вузол ще не має адреси доставки LXMF (чат не може використовувати призначення лише для голосу). Дочекайтеся оголошення LXMF або вставте їх 32-символьний хеш LXMF.",
+ "saveAttachment": "Зберегти",
+ "revealAttachment": "У теці"
},
"chatPayload": {
"mention": "Згадайте {{label}}",
@@ -3494,7 +3496,9 @@
"pageProgressFailoverGeneric": "Спробувати інший маршрут...",
"pageProgressNoAlternate": "Немає інших доступних маршрутів — завершення цієї спроби...",
"hopsAway_few": "за {{count}} хопи",
- "hopsAway_many": "за {{count}} хопів"
+ "hopsAway_many": "за {{count}} хопів",
+ "downloadFile": "Завантаження",
+ "dismissPreview": "Відпустити"
},
"packetDistribution": {
"overallDistribution": "Загальний розподіл",
diff --git a/src/renderer/locales/zh/translation.json b/src/renderer/locales/zh/translation.json
index d1493e9dd..cf448423c 100644
--- a/src/renderer/locales/zh/translation.json
+++ b/src/renderer/locales/zh/translation.json
@@ -750,7 +750,9 @@
"heardByRepeatersAdditional_one": "{{count}}其他身份不明的货运代理(哈希值: {{hashes}} )",
"heardByRepeatersAdditional_other": "{{count}}其他身份不明的转发商(哈希: {{hashes}} )",
"reticulumSendAwaitingPeerReceipt": "已发送(等待同行回执)",
- "reticulumChatNeedsLxmfDelivery": "此对等方还没有LXMF交付地址(聊天不能使用仅语音目的地)。等待LXMF公告,或粘贴其32个字符的LXMF哈希。"
+ "reticulumChatNeedsLxmfDelivery": "此对等方还没有LXMF交付地址(聊天不能使用仅语音目的地)。等待LXMF公告,或粘贴其32个字符的LXMF哈希。",
+ "saveAttachment": "保存",
+ "revealAttachment": "在文件夹中"
},
"chatPayload": {
"mention": "提及{{label}}",
@@ -3416,7 +3418,9 @@
"pageProgressFailover": "正在尝试通过{{iface}} ( {{hops}}跳)选择其他路线……",
"pageProgressFailoverIface": "尝试通过{{iface}}选择其他路线…",
"pageProgressFailoverGeneric": "正在尝试其他路线…",
- "pageProgressNoAlternate": "没有其他路线可用—正在完成此尝试…"
+ "pageProgressNoAlternate": "没有其他路线可用—正在完成此尝试…",
+ "downloadFile": "下载",
+ "dismissPreview": "解散"
},
"packetDistribution": {
"overallDistribution": "总体分布",