diff --git a/locales/ar/common.json b/locales/ar/common.json
index f5c7b2c7d..c9f3ad948 100644
--- a/locales/ar/common.json
+++ b/locales/ar/common.json
@@ -880,6 +880,24 @@
"send_anyway": "الإرسال على أي حال",
"back": "رجوع"
},
+ "phishing_report": {
+ "action": "الإبلاغ عن تصيّد احتيالي…",
+ "confirm_title": "الإبلاغ عن تصيّد احتيالي؟",
+ "confirm_message": "{count, plural, zero {لا توجد رسائل لإرسالها إلى {address}.} one {ستُرسل الرسالة إلى {address} وتُنقل إلى البريد المزعج.} two {ستُرسل كل من الرسالتين إلى {address} كبلاغ مستقل وتُنقل إلى البريد المزعج.} few {ستُرسل كل رسالة من # رسائل إلى {address} كبلاغ مستقل وتُنقل إلى البريد المزعج.} many {ستُرسل كل رسالة من # رسالة إلى {address} كبلاغ مستقل وتُنقل إلى البريد المزعج.} other {ستُرسل كل رسالة من # رسالة إلى {address} كبلاغ مستقل وتُنقل إلى البريد المزعج.}}",
+ "confirm": "إبلاغ",
+ "cancel": "إلغاء",
+ "sending": "جارٍ الإبلاغ…",
+ "done": "{count, plural, zero {لم تُرسل أي رسالة إلى {address}.} one {تم إبلاغ {address} عن الرسالة ونُقلت إلى البريد المزعج.} two {تم إبلاغ {address} عن رسالتين ونُقلتا إلى البريد المزعج.} few {تم إبلاغ {address} عن # رسائل ونُقلت إلى البريد المزعج.} many {تم إبلاغ {address} عن # رسالة ونُقلت إلى البريد المزعج.} other {تم إبلاغ {address} عن # رسالة ونُقلت إلى البريد المزعج.}}",
+ "not_moved": "{count, plural, zero {تم إبلاغ {address} ونُقلت كل الرسائل إلى البريد المزعج.} one {تم إبلاغ {address}، لكن تعذّر نقل الرسالة إلى البريد المزعج.} two {تم إبلاغ {address}، لكن تعذّر نقل رسالتين إلى البريد المزعج.} few {تم إبلاغ {address}، لكن تعذّر نقل # رسائل إلى البريد المزعج.} many {تم إبلاغ {address}، لكن تعذّر نقل # رسالة إلى البريد المزعج.} other {تم إبلاغ {address}، لكن تعذّر نقل # رسالة إلى البريد المزعج.}}",
+ "failed": "{count, plural, zero {تم الإبلاغ عن كل الرسائل.} one {تعذّر الإبلاغ عن الرسالة.} two {تعذّر الإبلاغ عن رسالتين.} few {تعذّر الإبلاغ عن # رسائل.} many {تعذّر الإبلاغ عن # رسالة.} other {تعذّر الإبلاغ عن # رسالة.}}",
+ "undo": "تراجع",
+ "undone": "{count, plural, zero {تمت الإعادة إلى مكانها.} one {أُعيدت الرسالة إلى مكانها. البلاغ أُرسل بالفعل.} two {أُعيدت الرسالتان إلى مكانهما. البلاغان أُرسلا بالفعل.} few {أُعيدت الرسائل إلى مكانها. البلاغات أُرسلت بالفعل.} many {أُعيدت الرسائل إلى مكانها. البلاغات أُرسلت بالفعل.} other {أُعيدت الرسائل إلى مكانها. البلاغات أُرسلت بالفعل.}}",
+ "undo_failed": "تعذّرت الإعادة إلى المكان السابق.",
+ "banner": "أبلغت عن هذه الرسالة كتصيّد احتيالي. تم تعطيل روابطها.",
+ "link_off": "الرابط معطّل",
+ "link_off_note": "(الرابط معطّل)",
+ "no_subject": "(بلا موضوع)"
+ },
"email_composer": {
"select_from_directory": "الاختيار من الدليل",
"minimize": "تصغير",
diff --git a/locales/ca/common.json b/locales/ca/common.json
index c5e8f90dc..80d7f5830 100644
--- a/locales/ca/common.json
+++ b/locales/ca/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Envia igualment",
"back": "Enrere"
},
+ "phishing_report": {
+ "action": "Denuncia com a pesca de credencials…",
+ "confirm_title": "Voleu denunciar-ho com a pesca de credencials?",
+ "confirm_message": "{count, plural, one {El missatge s'envia a {address} i es mou al correu brossa.} other {Cadascun dels # missatges s'envia a {address} com a denúncia independent i es mou al correu brossa.}}",
+ "confirm": "Denuncia",
+ "cancel": "Cancel·la",
+ "sending": "S'està denunciant…",
+ "done": "{count, plural, one {S'ha denunciat a {address} i s'ha mogut al correu brossa.} other {S'han denunciat # missatges a {address} i s'han mogut al correu brossa.}}",
+ "not_moved": "{count, plural, one {S'ha denunciat a {address}, però el missatge no s'ha pogut moure al correu brossa.} other {S'ha denunciat a {address}, però # missatges no s'han pogut moure al correu brossa.}}",
+ "failed": "{count, plural, one {No s'ha pogut denunciar el missatge.} other {No s'han pogut denunciar # missatges.}}",
+ "undo": "Desfés",
+ "undone": "{count, plural, one {S'ha tornat al lloc. La denúncia ja s'havia enviat.} other {S'han tornat al lloc. Les denúncies ja s'havien enviat.}}",
+ "undo_failed": "No s'ha pogut tornar al lloc.",
+ "banner": "Heu denunciat aquest missatge com a pesca de credencials. Els enllaços estan desactivats.",
+ "link_off": "enllaç desactivat",
+ "link_off_note": "(enllaç desactivat)",
+ "no_subject": "(sense assumpte)"
+ },
"email_composer": {
"select_from_directory": "Selecciona del directori",
"minimize": "Minimitza",
diff --git a/locales/cs/common.json b/locales/cs/common.json
index 470fff17a..51088aab6 100644
--- a/locales/cs/common.json
+++ b/locales/cs/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Přesto odeslat",
"back": "Zpět"
},
+ "phishing_report": {
+ "action": "Nahlásit phishing…",
+ "confirm_title": "Nahlásit phishing?",
+ "confirm_message": "{count, plural, one {Zpráva bude odeslána na {address} a přesunuta do složky Spam.} few {# zprávy budou odeslány na {address}, každá jako samostatné hlášení, a přesunuty do složky Spam.} many {# zprávy bude odesláno na {address}, každá jako samostatné hlášení, a přesunuto do složky Spam.} other {# zpráv bude odesláno na {address}, každá jako samostatné hlášení, a přesunuto do složky Spam.}}",
+ "confirm": "Nahlásit",
+ "cancel": "Zrušit",
+ "sending": "Nahlašování…",
+ "done": "{count, plural, one {Nahlášeno na {address} a přesunuto do složky Spam.} few {# zprávy nahlášeny na {address} a přesunuty do složky Spam.} many {# zprávy nahlášeno na {address} a přesunuto do složky Spam.} other {# zpráv nahlášeno na {address} a přesunuto do složky Spam.}}",
+ "not_moved": "{count, plural, one {Nahlášeno na {address}, ale zprávu se nepodařilo přesunout do složky Spam.} few {Nahlášeno na {address}, ale # zprávy se nepodařilo přesunout do složky Spam.} many {Nahlášeno na {address}, ale # zprávy se nepodařilo přesunout do složky Spam.} other {Nahlášeno na {address}, ale # zpráv se nepodařilo přesunout do složky Spam.}}",
+ "failed": "{count, plural, one {Zprávu se nepodařilo nahlásit.} few {# zprávy se nepodařilo nahlásit.} many {# zprávy se nepodařilo nahlásit.} other {# zpráv se nepodařilo nahlásit.}}",
+ "undo": "Zpět",
+ "undone": "{count, plural, one {Vráceno zpět. Hlášení už bylo odesláno.} few {Vráceno zpět. Hlášení už byla odeslána.} many {Vráceno zpět. Hlášení už byla odeslána.} other {Vráceno zpět. Hlášení už byla odeslána.}}",
+ "undo_failed": "Nepodařilo se vrátit zpět.",
+ "banner": "Tuto zprávu jste nahlásili jako phishing. Odkazy v ní jsou vypnuté.",
+ "link_off": "odkaz vypnut",
+ "link_off_note": "(odkaz vypnut)",
+ "no_subject": "(bez předmětu)"
+ },
"email_composer": {
"select_from_directory": "Vybrat z adresáře",
"minimize": "Minimalizovat",
diff --git a/locales/da/common.json b/locales/da/common.json
index 7a3de8339..8fe00c36d 100644
--- a/locales/da/common.json
+++ b/locales/da/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Send alligevel",
"back": "Tilbage"
},
+ "phishing_report": {
+ "action": "Rapportér phishing…",
+ "confirm_title": "Rapportér phishing?",
+ "confirm_message": "{count, plural, one {Beskeden sendes til {address} og flyttes til Spam.} other {Hver af de # beskeder sendes til {address} som en separat rapport og flyttes til Spam.}}",
+ "confirm": "Rapportér",
+ "cancel": "Annuller",
+ "sending": "Rapporterer…",
+ "done": "{count, plural, one {Rapporteret til {address} og flyttet til Spam.} other {# beskeder rapporteret til {address} og flyttet til Spam.}}",
+ "not_moved": "{count, plural, one {Rapporteret til {address}, men beskeden kunne ikke flyttes til Spam.} other {Rapporteret til {address}, men # beskeder kunne ikke flyttes til Spam.}}",
+ "failed": "{count, plural, one {Beskeden kunne ikke rapporteres.} other {# beskeder kunne ikke rapporteres.}}",
+ "undo": "Fortryd",
+ "undone": "{count, plural, one {Flyttet tilbage. Rapporten var allerede sendt.} other {Flyttet tilbage. Rapporterne var allerede sendt.}}",
+ "undo_failed": "Kunne ikke flyttes tilbage.",
+ "banner": "Du har rapporteret denne besked som phishing. Links i den er slået fra.",
+ "link_off": "link slået fra",
+ "link_off_note": "(link slået fra)",
+ "no_subject": "(intet emne)"
+ },
"email_composer": {
"select_from_directory": "Vælg fra adressefortegnelse",
"minimize": "Minimer",
diff --git a/locales/de/common.json b/locales/de/common.json
index 86879832b..ba52917ff 100644
--- a/locales/de/common.json
+++ b/locales/de/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Trotzdem senden",
"back": "Zurück"
},
+ "phishing_report": {
+ "action": "Phishing melden…",
+ "confirm_title": "Phishing melden?",
+ "confirm_message": "{count, plural, one {Die Nachricht geht an {address} und wird in den Spam-Ordner verschoben.} other {Jede der # Nachrichten geht als eigene Meldung an {address} und wird in den Spam-Ordner verschoben.}}",
+ "confirm": "Melden",
+ "cancel": "Abbrechen",
+ "sending": "Wird gemeldet…",
+ "done": "{count, plural, one {An {address} gemeldet und in den Spam-Ordner verschoben.} other {# Nachrichten an {address} gemeldet und in den Spam-Ordner verschoben.}}",
+ "not_moved": "{count, plural, one {An {address} gemeldet, aber die Nachricht konnte nicht in den Spam-Ordner verschoben werden.} other {An {address} gemeldet, aber # Nachrichten konnten nicht in den Spam-Ordner verschoben werden.}}",
+ "failed": "{count, plural, one {Die Nachricht konnte nicht gemeldet werden.} other {# Nachrichten konnten nicht gemeldet werden.}}",
+ "undo": "Rückgängig",
+ "undone": "{count, plural, one {Zurückverschoben. Die Meldung wurde bereits gesendet.} other {Zurückverschoben. Die Meldungen wurden bereits gesendet.}}",
+ "undo_failed": "Konnte nicht zurückverschoben werden.",
+ "banner": "Sie haben diese Nachricht als Phishing gemeldet. Die Links darin sind deaktiviert.",
+ "link_off": "Link deaktiviert",
+ "link_off_note": "(Link deaktiviert)",
+ "no_subject": "(kein Betreff)"
+ },
"email_composer": {
"select_from_directory": "Aus Verzeichnis auswählen",
"minimize": "Minimieren",
diff --git a/locales/en/common.json b/locales/en/common.json
index c164315f3..c53db4a67 100644
--- a/locales/en/common.json
+++ b/locales/en/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Send anyway",
"back": "Back"
},
+ "phishing_report": {
+ "action": "Report phishing…",
+ "confirm_title": "Report phishing?",
+ "confirm_message": "{count, plural, one {The message goes to {address} and moves to Junk.} other {Each of the # messages goes to {address} as its own report and moves to Junk.}}",
+ "confirm": "Report",
+ "cancel": "Cancel",
+ "sending": "Reporting…",
+ "done": "{count, plural, one {Reported to {address} and moved to Junk.} other {# messages reported to {address} and moved to Junk.}}",
+ "not_moved": "{count, plural, one {Reported to {address}, but the message couldn't be moved to Junk.} other {Reported to {address}, but # messages couldn't be moved to Junk.}}",
+ "failed": "{count, plural, one {The message couldn't be reported.} other {# messages couldn't be reported.}}",
+ "undo": "Undo",
+ "undone": "{count, plural, one {Moved back. The report was already sent.} other {Moved back. The reports were already sent.}}",
+ "undo_failed": "Couldn't move it back.",
+ "banner": "You reported this message as phishing. Its links are turned off.",
+ "link_off": "link turned off",
+ "link_off_note": "(link turned off)",
+ "no_subject": "(no subject)"
+ },
"email_composer": {
"select_from_directory": "Select from directory",
"minimize": "Minimize",
diff --git a/locales/es/common.json b/locales/es/common.json
index 6752de642..e82f5a1ae 100644
--- a/locales/es/common.json
+++ b/locales/es/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Enviar de todos modos",
"back": "Atrás"
},
+ "phishing_report": {
+ "action": "Reportar phishing…",
+ "confirm_title": "¿Reportar phishing?",
+ "confirm_message": "{count, plural, one {El mensaje se enviará a {address} y se moverá a Spam.} other {Cada uno de los # mensajes se enviará a {address} como un reporte aparte y se moverá a Spam.}}",
+ "confirm": "Reportar",
+ "cancel": "Cancelar",
+ "sending": "Reportando…",
+ "done": "{count, plural, one {Reportado a {address} y movido a Spam.} other {# mensajes reportados a {address} y movidos a Spam.}}",
+ "not_moved": "{count, plural, one {Reportado a {address}, pero el mensaje no se pudo mover a Spam.} other {Reportados a {address}, pero # mensajes no se pudieron mover a Spam.}}",
+ "failed": "{count, plural, one {No se pudo reportar el mensaje.} other {No se pudieron reportar # mensajes.}}",
+ "undo": "Deshacer",
+ "undone": "{count, plural, one {Devuelto a su sitio. El reporte ya se había enviado.} other {Devueltos a su sitio. Los reportes ya se habían enviado.}}",
+ "undo_failed": "No se pudo devolver a su sitio.",
+ "banner": "Has reportado este mensaje como phishing. Sus enlaces están desactivados.",
+ "link_off": "enlace desactivado",
+ "link_off_note": "(enlace desactivado)",
+ "no_subject": "(sin asunto)"
+ },
"email_composer": {
"select_from_directory": "Seleccionar del directorio",
"minimize": "Minimizar",
diff --git a/locales/et/common.json b/locales/et/common.json
index f1c378c57..d4063e553 100644
--- a/locales/et/common.json
+++ b/locales/et/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Saada ikkagi",
"back": "Tagasi"
},
+ "phishing_report": {
+ "action": "Teata õngitsusest…",
+ "confirm_title": "Teatada õngitsusest?",
+ "confirm_message": "{count, plural, one {Kiri saadetakse aadressile {address} ja teisaldatakse rämpsposti.} other {Kõik # kirja saadetakse aadressile {address} eraldi teadetena ja teisaldatakse rämpsposti.}}",
+ "confirm": "Teata",
+ "cancel": "Tühista",
+ "sending": "Teatamine…",
+ "done": "{count, plural, one {Teatatud aadressile {address} ja teisaldatud rämpsposti.} other {# kirjast teatatud aadressile {address} ja teisaldatud rämpsposti.}}",
+ "not_moved": "{count, plural, one {Teatatud aadressile {address}, kuid kirja ei õnnestunud rämpsposti teisaldada.} other {Teatatud aadressile {address}, kuid # kirja ei õnnestunud rämpsposti teisaldada.}}",
+ "failed": "{count, plural, one {Kirjast ei õnnestunud teatada.} other {# kirjast ei õnnestunud teatada.}}",
+ "undo": "Võta tagasi",
+ "undone": "{count, plural, one {Tõstetud tagasi. Teade oli juba saadetud.} other {Tõstetud tagasi. Teated olid juba saadetud.}}",
+ "undo_failed": "Tagasi tõstmine ei õnnestunud.",
+ "banner": "Teatasid sellest kirjast kui õngitsusest. Selle lingid on välja lülitatud.",
+ "link_off": "link välja lülitatud",
+ "link_off_note": "(link välja lülitatud)",
+ "no_subject": "(teema puudub)"
+ },
"email_composer": {
"select_from_directory": "Vali kataloogist",
"minimize": "Minimeeri",
diff --git a/locales/fa/common.json b/locales/fa/common.json
index 2da9a6e5a..a2d33add5 100644
--- a/locales/fa/common.json
+++ b/locales/fa/common.json
@@ -880,6 +880,24 @@
"send_anyway": "ارسال به هر حال",
"back": "بازگشت"
},
+ "phishing_report": {
+ "action": "گزارش فیشینگ…",
+ "confirm_title": "بهعنوان فیشینگ گزارش شود؟",
+ "confirm_message": "{count, plural, one {پیام به {address} فرستاده و به هرزنامه منتقل میشود.} other {هر یک از # پیام بهصورت گزارشی جداگانه به {address} فرستاده و به هرزنامه منتقل میشود.}}",
+ "confirm": "گزارش",
+ "cancel": "انصراف",
+ "sending": "در حال گزارش…",
+ "done": "{count, plural, one {به {address} گزارش و به هرزنامه منتقل شد.} other {# پیام به {address} گزارش و به هرزنامه منتقل شد.}}",
+ "not_moved": "{count, plural, one {به {address} گزارش شد، اما پیام به هرزنامه منتقل نشد.} other {به {address} گزارش شد، اما # پیام به هرزنامه منتقل نشد.}}",
+ "failed": "{count, plural, one {گزارش پیام ممکن نشد.} other {گزارش # پیام ممکن نشد.}}",
+ "undo": "بازگردانی",
+ "undone": "{count, plural, one {به جای قبلی برگردانده شد. گزارش قبلاً فرستاده شده است.} other {به جای قبلی برگردانده شدند. گزارشها قبلاً فرستاده شدهاند.}}",
+ "undo_failed": "برگرداندن ممکن نشد.",
+ "banner": "شما این پیام را بهعنوان فیشینگ گزارش کردید. پیوندهای آن غیرفعال شدهاند.",
+ "link_off": "پیوند غیرفعال شد",
+ "link_off_note": "(پیوند غیرفعال شد)",
+ "no_subject": "(بدون موضوع)"
+ },
"email_composer": {
"select_from_directory": "انتخاب از فهرست",
"minimize": "کوچک کردن",
diff --git a/locales/fr/common.json b/locales/fr/common.json
index c41f6a286..14268c1f9 100644
--- a/locales/fr/common.json
+++ b/locales/fr/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Envoyer quand même",
"back": "Retour"
},
+ "phishing_report": {
+ "action": "Signaler comme hameçonnage…",
+ "confirm_title": "Signaler comme hameçonnage ?",
+ "confirm_message": "{count, plural, one {Le message sera envoyé à {address} et déplacé dans le dossier Spam.} other {Chacun des # messages sera envoyé à {address} dans un signalement distinct et déplacé dans le dossier Spam.}}",
+ "confirm": "Signaler",
+ "cancel": "Annuler",
+ "sending": "Signalement en cours…",
+ "done": "{count, plural, one {Signalé à {address} et déplacé dans le dossier Spam.} other {# messages signalés à {address} et déplacés dans le dossier Spam.}}",
+ "not_moved": "{count, plural, one {Signalé à {address}, mais le message n'a pas pu être déplacé dans le dossier Spam.} other {Signalés à {address}, mais # messages n'ont pas pu être déplacés dans le dossier Spam.}}",
+ "failed": "{count, plural, one {Le message n'a pas pu être signalé.} other {# messages n'ont pas pu être signalés.}}",
+ "undo": "Annuler",
+ "undone": "{count, plural, one {Remis à sa place. Le signalement a déjà été envoyé.} other {Remis à leur place. Les signalements ont déjà été envoyés.}}",
+ "undo_failed": "Impossible de le remettre à sa place.",
+ "banner": "Vous avez signalé ce message comme hameçonnage. Ses liens sont désactivés.",
+ "link_off": "lien désactivé",
+ "link_off_note": "(lien désactivé)",
+ "no_subject": "(sans objet)"
+ },
"email_composer": {
"select_from_directory": "Choisir dans l'annuaire",
"minimize": "Réduire",
diff --git a/locales/he/common.json b/locales/he/common.json
index dee262172..64d929b56 100644
--- a/locales/he/common.json
+++ b/locales/he/common.json
@@ -845,6 +845,24 @@
"send_anyway": "שלח בכל זאת",
"back": "חזרה"
},
+ "phishing_report": {
+ "action": "דווח על פישינג…",
+ "confirm_title": "לדווח על פישינג?",
+ "confirm_message": "{count, plural, one {ההודעה תישלח אל {address} ותועבר לספאם.} two {כל אחת משתי ההודעות תישלח אל {address} כדיווח נפרד ותועבר לספאם.} other {כל אחת מ-# ההודעות תישלח אל {address} כדיווח נפרד ותועבר לספאם.}}",
+ "confirm": "דווח",
+ "cancel": "ביטול",
+ "sending": "שולח דיווח…",
+ "done": "{count, plural, one {ההודעה דווחה אל {address} והועברה לספאם.} two {שתי הודעות דווחו אל {address} והועברו לספאם.} other {# הודעות דווחו אל {address} והועברו לספאם.}}",
+ "not_moved": "{count, plural, one {דווח אל {address}, אבל לא ניתן היה להעביר את ההודעה לספאם.} two {דווח אל {address}, אבל לא ניתן היה להעביר שתי הודעות לספאם.} other {דווח אל {address}, אבל לא ניתן היה להעביר # הודעות לספאם.}}",
+ "failed": "{count, plural, one {לא ניתן היה לדווח על ההודעה.} two {לא ניתן היה לדווח על שתי הודעות.} other {לא ניתן היה לדווח על # הודעות.}}",
+ "undo": "בטל",
+ "undone": "{count, plural, one {הוחזרה למקומה. הדיווח כבר נשלח.} two {הוחזרו למקומן. הדיווחים כבר נשלחו.} other {הוחזרו למקומן. הדיווחים כבר נשלחו.}}",
+ "undo_failed": "לא ניתן היה להחזיר למקום.",
+ "banner": "דיווחת על ההודעה הזו כפישינג. הקישורים שבה מושבתים.",
+ "link_off": "הקישור מושבת",
+ "link_off_note": "(הקישור מושבת)",
+ "no_subject": "(ללא נושא)"
+ },
"email_composer": {
"select_from_directory": "בחירה מהספרייה",
"minimize": "מזעור",
diff --git a/locales/hu/common.json b/locales/hu/common.json
index 2acb340f5..87369bedb 100644
--- a/locales/hu/common.json
+++ b/locales/hu/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Küldés így is",
"back": "Vissza"
},
+ "phishing_report": {
+ "action": "Adathalászat jelentése…",
+ "confirm_title": "Jelented adathalászatként?",
+ "confirm_message": "{count, plural, one {Az üzenet a(z) {address} címre megy, és a Spam mappába kerül.} other {Mind a(z) # üzenet külön jelentésként megy a(z) {address} címre, és a Spam mappába kerül.}}",
+ "confirm": "Jelentés",
+ "cancel": "Mégse",
+ "sending": "Jelentés folyamatban…",
+ "done": "{count, plural, one {Jelentve a(z) {address} címre, és áthelyezve a Spam mappába.} other {# üzenet jelentve a(z) {address} címre, és áthelyezve a Spam mappába.}}",
+ "not_moved": "{count, plural, one {Jelentve a(z) {address} címre, de az üzenetet nem sikerült áthelyezni a Spam mappába.} other {Jelentve a(z) {address} címre, de # üzenetet nem sikerült áthelyezni a Spam mappába.}}",
+ "failed": "{count, plural, one {Az üzenetet nem sikerült jelenteni.} other {# üzenetet nem sikerült jelenteni.}}",
+ "undo": "Visszavonás",
+ "undone": "{count, plural, one {Visszahelyezve. A jelentés már elment.} other {Visszahelyezve. A jelentések már elmentek.}}",
+ "undo_failed": "Nem sikerült visszahelyezni.",
+ "banner": "Ezt az üzenetet adathalászatként jelentetted. A benne lévő linkek ki vannak kapcsolva.",
+ "link_off": "link kikapcsolva",
+ "link_off_note": "(link kikapcsolva)",
+ "no_subject": "(nincs tárgy)"
+ },
"email_composer": {
"select_from_directory": "Kiválasztás a címtárból",
"minimize": "Kis méret",
diff --git a/locales/it/common.json b/locales/it/common.json
index 3c24fa252..4c2dc2af5 100644
--- a/locales/it/common.json
+++ b/locales/it/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Invia comunque",
"back": "Indietro"
},
+ "phishing_report": {
+ "action": "Segnala come phishing…",
+ "confirm_title": "Segnalare come phishing?",
+ "confirm_message": "{count, plural, one {Il messaggio viene inviato a {address} e spostato in Spam.} other {Ognuno dei # messaggi viene inviato a {address} come segnalazione separata e spostato in Spam.}}",
+ "confirm": "Segnala",
+ "cancel": "Annulla",
+ "sending": "Segnalazione in corso…",
+ "done": "{count, plural, one {Segnalato a {address} e spostato in Spam.} other {# messaggi segnalati a {address} e spostati in Spam.}}",
+ "not_moved": "{count, plural, one {Segnalato a {address}, ma non è stato possibile spostare il messaggio in Spam.} other {Segnalati a {address}, ma non è stato possibile spostare # messaggi in Spam.}}",
+ "failed": "{count, plural, one {Non è stato possibile segnalare il messaggio.} other {Non è stato possibile segnalare # messaggi.}}",
+ "undo": "Annulla",
+ "undone": "{count, plural, one {Rimesso al suo posto. La segnalazione era già stata inviata.} other {Rimessi al loro posto. Le segnalazioni erano già state inviate.}}",
+ "undo_failed": "Impossibile rimetterlo al suo posto.",
+ "banner": "Hai segnalato questo messaggio come phishing. I suoi link sono disattivati.",
+ "link_off": "link disattivato",
+ "link_off_note": "(link disattivato)",
+ "no_subject": "(nessun oggetto)"
+ },
"email_composer": {
"select_from_directory": "Seleziona dalla rubrica aziendale",
"minimize": "Riduci a icona",
diff --git a/locales/ja/common.json b/locales/ja/common.json
index a192cfc9b..2ba057fb3 100644
--- a/locales/ja/common.json
+++ b/locales/ja/common.json
@@ -880,6 +880,24 @@
"send_anyway": "そのまま送信",
"back": "戻る"
},
+ "phishing_report": {
+ "action": "フィッシングを報告…",
+ "confirm_title": "フィッシングとして報告しますか?",
+ "confirm_message": "{count, plural, =1 {メールを {address} に送信し、迷惑メールに移動します。} other {# 件のメールをそれぞれ個別の報告として {address} に送信し、迷惑メールに移動します。}}",
+ "confirm": "報告",
+ "cancel": "キャンセル",
+ "sending": "報告中…",
+ "done": "{count, plural, =1 {{address} に報告し、迷惑メールに移動しました。} other {# 件のメールを {address} に報告し、迷惑メールに移動しました。}}",
+ "not_moved": "{count, plural, =1 {{address} に報告しましたが、メールを迷惑メールに移動できませんでした。} other {{address} に報告しましたが、# 件のメールを迷惑メールに移動できませんでした。}}",
+ "failed": "{count, plural, =1 {メールを報告できませんでした。} other {# 件のメールを報告できませんでした。}}",
+ "undo": "元に戻す",
+ "undone": "{count, plural, =1 {元の場所に戻しました。報告はすでに送信済みです。} other {元の場所に戻しました。報告はすでに送信済みです。}}",
+ "undo_failed": "元に戻せませんでした。",
+ "banner": "このメールをフィッシングとして報告しました。メール内のリンクは無効になっています。",
+ "link_off": "リンクは無効です",
+ "link_off_note": "(リンク無効)",
+ "no_subject": "(件名なし)"
+ },
"email_composer": {
"select_from_directory": "ディレクトリから選択",
"minimize": "最小化",
diff --git a/locales/ko/common.json b/locales/ko/common.json
index 42a1e7baf..8dcc5f6af 100644
--- a/locales/ko/common.json
+++ b/locales/ko/common.json
@@ -880,6 +880,24 @@
"send_anyway": "그래도 보내기",
"back": "뒤로"
},
+ "phishing_report": {
+ "action": "피싱 신고…",
+ "confirm_title": "피싱으로 신고할까요?",
+ "confirm_message": "{count, plural, =1 {메시지를 {address} 주소로 보내고 스팸함으로 옮겨요.} other {메시지 #개를 각각 별도의 신고로 {address} 주소로 보내고 스팸함으로 옮겨요.}}",
+ "confirm": "신고",
+ "cancel": "취소",
+ "sending": "신고하는 중…",
+ "done": "{count, plural, =1 {{address} 주소로 신고하고 스팸함으로 옮겼어요.} other {메시지 #개를 {address} 주소로 신고하고 스팸함으로 옮겼어요.}}",
+ "not_moved": "{count, plural, =1 {{address} 주소로 신고했지만 메시지를 스팸함으로 옮기지 못했어요.} other {{address} 주소로 신고했지만 메시지 #개를 스팸함으로 옮기지 못했어요.}}",
+ "failed": "{count, plural, =1 {메시지를 신고하지 못했어요.} other {메시지 #개를 신고하지 못했어요.}}",
+ "undo": "실행 취소",
+ "undone": "{count, plural, =1 {원래 위치로 되돌렸어요. 신고는 이미 보내졌어요.} other {원래 위치로 되돌렸어요. 신고는 이미 보내졌어요.}}",
+ "undo_failed": "되돌리지 못했어요.",
+ "banner": "이 메시지를 피싱으로 신고했어요. 메시지의 링크는 꺼져 있어요.",
+ "link_off": "링크 꺼짐",
+ "link_off_note": "(링크 꺼짐)",
+ "no_subject": "(제목 없음)"
+ },
"email_composer": {
"select_from_directory": "디렉터리에서 선택",
"minimize": "최소화",
diff --git a/locales/lv/common.json b/locales/lv/common.json
index 9b30806e2..c913858c7 100644
--- a/locales/lv/common.json
+++ b/locales/lv/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Sūtīt tik un tā",
"back": "Atpakaļ"
},
+ "phishing_report": {
+ "action": "Ziņot par pikšķerēšanu…",
+ "confirm_title": "Ziņot par pikšķerēšanu?",
+ "confirm_message": "{count, plural, =1 {Ziņojums tiks nosūtīts uz {address} un pārvietots uz mapi Mēstules.} zero {# ziņojumi tiks nosūtīti uz {address}, katrs atsevišķi, un pārvietoti uz mapi Mēstules.} one {# ziņojums tiks nosūtīts uz {address}, katrs atsevišķi, un pārvietots uz mapi Mēstules.} other {# ziņojumi tiks nosūtīti uz {address}, katrs atsevišķi, un pārvietoti uz mapi Mēstules.}}",
+ "confirm": "Ziņot",
+ "cancel": "Atcelt",
+ "sending": "Notiek ziņošana…",
+ "done": "{count, plural, =1 {Nosūtīts uz {address} un pārvietots uz mapi Mēstules.} zero {# ziņojumi nosūtīti uz {address} un pārvietoti uz mapi Mēstules.} one {# ziņojums nosūtīts uz {address} un pārvietots uz mapi Mēstules.} other {# ziņojumi nosūtīti uz {address} un pārvietoti uz mapi Mēstules.}}",
+ "not_moved": "{count, plural, =1 {Nosūtīts uz {address}, bet ziņojumu neizdevās pārvietot uz mapi Mēstules.} zero {Nosūtīti uz {address}, bet # ziņojumus neizdevās pārvietot uz mapi Mēstules.} one {Nosūtīti uz {address}, bet # ziņojumu neizdevās pārvietot uz mapi Mēstules.} other {Nosūtīti uz {address}, bet # ziņojumus neizdevās pārvietot uz mapi Mēstules.}}",
+ "failed": "{count, plural, =1 {Neizdevās ziņot par ziņojumu.} zero {Neizdevās ziņot par # ziņojumiem.} one {Neizdevās ziņot par # ziņojumu.} other {Neizdevās ziņot par # ziņojumiem.}}",
+ "undo": "Atsaukt",
+ "undone": "{count, plural, =1 {Pārvietots atpakaļ. Ziņa par pikšķerēšanu jau ir nosūtīta.} zero {Pārvietoti atpakaļ. Ziņas par pikšķerēšanu jau ir nosūtītas.} one {Pārvietoti atpakaļ. Ziņas par pikšķerēšanu jau ir nosūtītas.} other {Pārvietoti atpakaļ. Ziņas par pikšķerēšanu jau ir nosūtītas.}}",
+ "undo_failed": "Neizdevās pārvietot atpakaļ.",
+ "banner": "Jūs ziņojāt par šo ziņojumu kā par pikšķerēšanu. Tā saites ir izslēgtas.",
+ "link_off": "saite izslēgta",
+ "link_off_note": "(saite izslēgta)",
+ "no_subject": "(bez temata)"
+ },
"email_composer": {
"select_from_directory": "Izvēlēties no kataloga",
"minimize": "Minimizēt",
diff --git a/locales/mn/common.json b/locales/mn/common.json
index 5cb6a933f..7ca539df7 100644
--- a/locales/mn/common.json
+++ b/locales/mn/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Ямар ч байсан илгээх",
"back": "Буцах"
},
+ "phishing_report": {
+ "action": "Фишинг мэдээлэх…",
+ "confirm_title": "Фишинг гэж мэдээлэх үү?",
+ "confirm_message": "{count, plural, one {Мессеж {address} хаяг руу илгээгдэж, Спам руу шилжинэ.} other {# мессеж тус бүр тусдаа мэдээлэл болж {address} хаяг руу илгээгдэж, Спам руу шилжинэ.}}",
+ "confirm": "Мэдээлэх",
+ "cancel": "Цуцлах",
+ "sending": "Мэдээлж байна…",
+ "done": "{count, plural, one {{address} хаяг руу мэдээлж, Спам руу шилжүүллээ.} other {# мессежийг {address} хаяг руу мэдээлж, Спам руу шилжүүллээ.}}",
+ "not_moved": "{count, plural, one {{address} хаяг руу мэдээлсэн ч мессежийг Спам руу шилжүүлж чадсангүй.} other {{address} хаяг руу мэдээлсэн ч # мессежийг Спам руу шилжүүлж чадсангүй.}}",
+ "failed": "{count, plural, one {Мессежийг мэдээлж чадсангүй.} other {# мессежийг мэдээлж чадсангүй.}}",
+ "undo": "Буцаах",
+ "undone": "{count, plural, one {Буцааж шилжүүллээ. Мэдээлэл аль хэдийн илгээгдсэн.} other {Буцааж шилжүүллээ. Мэдээллүүд аль хэдийн илгээгдсэн.}}",
+ "undo_failed": "Буцааж шилжүүлж чадсангүй.",
+ "banner": "Та энэ мессежийг фишинг гэж мэдээлсэн. Үүний холбоосуудыг идэвхгүй болгосон.",
+ "link_off": "холбоосыг идэвхгүй болгосон",
+ "link_off_note": "(холбоосыг идэвхгүй болгосон)",
+ "no_subject": "(сэдэв байхгүй)"
+ },
"email_composer": {
"select_from_directory": "Лавлахаас сонгох",
"minimize": "Багасгах",
diff --git a/locales/nb/common.json b/locales/nb/common.json
index 708cf47ab..da729598c 100644
--- a/locales/nb/common.json
+++ b/locales/nb/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Send likevel",
"back": "Tilbake"
},
+ "phishing_report": {
+ "action": "Rapporter nettfisking…",
+ "confirm_title": "Rapportere nettfisking?",
+ "confirm_message": "{count, plural, one {Meldingen sendes til {address} og flyttes til Søppelpost.} other {Hver av de # meldingene sendes til {address} som en egen rapport og flyttes til Søppelpost.}}",
+ "confirm": "Rapporter",
+ "cancel": "Avbryt",
+ "sending": "Rapporterer…",
+ "done": "{count, plural, one {Rapportert til {address} og flyttet til Søppelpost.} other {# meldinger rapportert til {address} og flyttet til Søppelpost.}}",
+ "not_moved": "{count, plural, one {Rapportert til {address}, men meldingen kunne ikke flyttes til Søppelpost.} other {Rapportert til {address}, men # meldinger kunne ikke flyttes til Søppelpost.}}",
+ "failed": "{count, plural, one {Meldingen kunne ikke rapporteres.} other {# meldinger kunne ikke rapporteres.}}",
+ "undo": "Angre",
+ "undone": "{count, plural, one {Flyttet tilbake. Rapporten var allerede sendt.} other {Flyttet tilbake. Rapportene var allerede sendt.}}",
+ "undo_failed": "Kunne ikke flytte den tilbake.",
+ "banner": "Du har rapportert denne meldingen som nettfisking. Lenkene i den er slått av.",
+ "link_off": "lenke slått av",
+ "link_off_note": "(lenke slått av)",
+ "no_subject": "(uten emne)"
+ },
"email_composer": {
"select_from_directory": "Velg fra katalog",
"minimize": "Minimer",
diff --git a/locales/nl/common.json b/locales/nl/common.json
index 0290e9e32..08ffeff6d 100644
--- a/locales/nl/common.json
+++ b/locales/nl/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Toch verzenden",
"back": "Terug"
},
+ "phishing_report": {
+ "action": "Phishing melden…",
+ "confirm_title": "Phishing melden?",
+ "confirm_message": "{count, plural, one {Het bericht gaat naar {address} en wordt naar Spam verplaatst.} other {Elk van de # berichten gaat als aparte melding naar {address} en wordt naar Spam verplaatst.}}",
+ "confirm": "Melden",
+ "cancel": "Annuleren",
+ "sending": "Bezig met melden…",
+ "done": "{count, plural, one {Gemeld bij {address} en naar Spam verplaatst.} other {# berichten gemeld bij {address} en naar Spam verplaatst.}}",
+ "not_moved": "{count, plural, one {Gemeld bij {address}, maar het bericht kon niet naar Spam worden verplaatst.} other {Gemeld bij {address}, maar # berichten konden niet naar Spam worden verplaatst.}}",
+ "failed": "{count, plural, one {Het bericht kon niet worden gemeld.} other {# berichten konden niet worden gemeld.}}",
+ "undo": "Ongedaan maken",
+ "undone": "{count, plural, one {Teruggezet. De melding was al verstuurd.} other {Teruggezet. De meldingen waren al verstuurd.}}",
+ "undo_failed": "Kon niet worden teruggezet.",
+ "banner": "Je hebt dit bericht als phishing gemeld. De links erin zijn uitgeschakeld.",
+ "link_off": "link uitgeschakeld",
+ "link_off_note": "(link uitgeschakeld)",
+ "no_subject": "(geen onderwerp)"
+ },
"email_composer": {
"select_from_directory": "Kiezen uit adresboek van de organisatie",
"minimize": "Minimaliseren",
diff --git a/locales/pl/common.json b/locales/pl/common.json
index 897ef6039..6480f8af7 100644
--- a/locales/pl/common.json
+++ b/locales/pl/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Wyślij mimo to",
"back": "Wstecz"
},
+ "phishing_report": {
+ "action": "Zgłoś phishing…",
+ "confirm_title": "Zgłosić phishing?",
+ "confirm_message": "{count, plural, one {Wiadomość trafi do {address} i zostanie przeniesiona do folderu Spam.} few {# wiadomości trafią do {address}, każda jako osobne zgłoszenie, i zostaną przeniesione do folderu Spam.} many {# wiadomości trafi do {address}, każda jako osobne zgłoszenie, i zostanie przeniesionych do folderu Spam.} other {# wiadomości trafi do {address}, każda jako osobne zgłoszenie, i zostanie przeniesionych do folderu Spam.}}",
+ "confirm": "Zgłoś",
+ "cancel": "Anuluj",
+ "sending": "Zgłaszanie…",
+ "done": "{count, plural, one {Zgłoszono do {address} i przeniesiono do folderu Spam.} few {Zgłoszono # wiadomości do {address} i przeniesiono je do folderu Spam.} many {Zgłoszono # wiadomości do {address} i przeniesiono je do folderu Spam.} other {Zgłoszono # wiadomości do {address} i przeniesiono je do folderu Spam.}}",
+ "not_moved": "{count, plural, one {Zgłoszono do {address}, ale nie udało się przenieść wiadomości do folderu Spam.} few {Zgłoszono do {address}, ale nie udało się przenieść # wiadomości do folderu Spam.} many {Zgłoszono do {address}, ale nie udało się przenieść # wiadomości do folderu Spam.} other {Zgłoszono do {address}, ale nie udało się przenieść # wiadomości do folderu Spam.}}",
+ "failed": "{count, plural, one {Nie udało się zgłosić wiadomości.} few {Nie udało się zgłosić # wiadomości.} many {Nie udało się zgłosić # wiadomości.} other {Nie udało się zgłosić # wiadomości.}}",
+ "undo": "Cofnij",
+ "undone": "{count, plural, one {Przeniesiono z powrotem. Zgłoszenie zostało już wysłane.} few {Przeniesiono z powrotem. Zgłoszenia zostały już wysłane.} many {Przeniesiono z powrotem. Zgłoszenia zostały już wysłane.} other {Przeniesiono z powrotem. Zgłoszenia zostały już wysłane.}}",
+ "undo_failed": "Nie udało się przenieść z powrotem.",
+ "banner": "Ta wiadomość została zgłoszona jako phishing. Linki w niej są wyłączone.",
+ "link_off": "link wyłączony",
+ "link_off_note": "(link wyłączony)",
+ "no_subject": "(brak tematu)"
+ },
"email_composer": {
"select_from_directory": "Wybierz z katalogu",
"minimize": "Minimalizuj",
diff --git a/locales/pt/common.json b/locales/pt/common.json
index 73f060dbd..f7b2c47d0 100644
--- a/locales/pt/common.json
+++ b/locales/pt/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Enviar mesmo assim",
"back": "Voltar"
},
+ "phishing_report": {
+ "action": "Reportar phishing…",
+ "confirm_title": "Reportar phishing?",
+ "confirm_message": "{count, plural, one {A mensagem vai para {address} e é movida para Spam.} other {Cada uma das # mensagens vai para {address} como uma denúncia separada e é movida para Spam.}}",
+ "confirm": "Reportar",
+ "cancel": "Cancelar",
+ "sending": "Reportando…",
+ "done": "{count, plural, one {Reportada para {address} e movida para Spam.} other {# mensagens reportadas para {address} e movidas para Spam.}}",
+ "not_moved": "{count, plural, one {Reportada para {address}, mas não foi possível mover a mensagem para Spam.} other {Reportadas para {address}, mas não foi possível mover # mensagens para Spam.}}",
+ "failed": "{count, plural, one {Não foi possível reportar a mensagem.} other {Não foi possível reportar # mensagens.}}",
+ "undo": "Desfazer",
+ "undone": "{count, plural, one {Devolvida ao lugar. A denúncia já foi enviada.} other {Devolvidas ao lugar. As denúncias já foram enviadas.}}",
+ "undo_failed": "Não foi possível devolver ao lugar.",
+ "banner": "Você reportou esta mensagem como phishing. Os links dela estão desativados.",
+ "link_off": "link desativado",
+ "link_off_note": "(link desativado)",
+ "no_subject": "(sem assunto)"
+ },
"email_composer": {
"select_from_directory": "Selecionar do diretório",
"minimize": "Minimizar",
diff --git a/locales/ro/common.json b/locales/ro/common.json
index 26633ecc4..8b1103df9 100644
--- a/locales/ro/common.json
+++ b/locales/ro/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Trimite oricum",
"back": "Înapoi"
},
+ "phishing_report": {
+ "action": "Raportează ca phishing…",
+ "confirm_title": "Raportați ca phishing?",
+ "confirm_message": "{count, plural, one {Mesajul ajunge la {address} și este mutat în Spam.} few {Fiecare dintre cele # mesaje ajunge la {address} ca raport separat și este mutat în Spam.} other {Fiecare dintre cele # de mesaje ajunge la {address} ca raport separat și este mutat în Spam.}}",
+ "confirm": "Raportează",
+ "cancel": "Anulează",
+ "sending": "Se raportează…",
+ "done": "{count, plural, one {Raportat la {address} și mutat în Spam.} few {# mesaje raportate la {address} și mutate în Spam.} other {# de mesaje raportate la {address} și mutate în Spam.}}",
+ "not_moved": "{count, plural, one {Raportat la {address}, dar mesajul nu a putut fi mutat în Spam.} few {Raportate la {address}, dar # mesaje nu au putut fi mutate în Spam.} other {Raportate la {address}, dar # de mesaje nu au putut fi mutate în Spam.}}",
+ "failed": "{count, plural, one {Mesajul nu a putut fi raportat.} few {# mesaje nu au putut fi raportate.} other {# de mesaje nu au putut fi raportate.}}",
+ "undo": "Anulează",
+ "undone": "{count, plural, one {Mutat înapoi. Raportul a fost deja trimis.} few {Mutate înapoi. Rapoartele au fost deja trimise.} other {Mutate înapoi. Rapoartele au fost deja trimise.}}",
+ "undo_failed": "Nu a putut fi mutat înapoi.",
+ "banner": "Ați raportat acest mesaj ca phishing. Linkurile din el sunt dezactivate.",
+ "link_off": "link dezactivat",
+ "link_off_note": "(link dezactivat)",
+ "no_subject": "(fără subiect)"
+ },
"email_composer": {
"select_from_directory": "Selectează din director",
"minimize": "Minimizează",
diff --git a/locales/ru/common.json b/locales/ru/common.json
index b0d758057..6c87b2187 100644
--- a/locales/ru/common.json
+++ b/locales/ru/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Всё равно отправить",
"back": "Назад"
},
+ "phishing_report": {
+ "action": "Сообщить о фишинге…",
+ "confirm_title": "Сообщить о фишинге?",
+ "confirm_message": "{count, plural, =1 {Письмо будет отправлено на {address} и перемещено в папку «Спам».} one {# письмо будет отправлено на {address}, каждое отдельным отчётом, и перемещено в папку «Спам».} few {# письма будут отправлены на {address}, каждое отдельным отчётом, и перемещены в папку «Спам».} many {# писем будут отправлены на {address}, каждое отдельным отчётом, и перемещены в папку «Спам».} other {# письма будут отправлены на {address}, каждое отдельным отчётом, и перемещены в папку «Спам».}}",
+ "confirm": "Сообщить",
+ "cancel": "Отмена",
+ "sending": "Отправка отчёта…",
+ "done": "{count, plural, =1 {Отправлено на {address} и перемещено в папку «Спам».} one {# письмо отправлено на {address} и перемещено в папку «Спам».} few {# письма отправлены на {address} и перемещены в папку «Спам».} many {# писем отправлено на {address} и перемещено в папку «Спам».} other {# письма отправлены на {address} и перемещены в папку «Спам».}}",
+ "not_moved": "{count, plural, =1 {Отчёт отправлен на {address}, но письмо не удалось переместить в папку «Спам».} one {Отчёты отправлены на {address}, но # письмо не удалось переместить в папку «Спам».} few {Отчёты отправлены на {address}, но # письма не удалось переместить в папку «Спам».} many {Отчёты отправлены на {address}, но # писем не удалось переместить в папку «Спам».} other {Отчёты отправлены на {address}, но # письма не удалось переместить в папку «Спам».}}",
+ "failed": "{count, plural, =1 {Не удалось сообщить о письме.} one {Не удалось сообщить о # письме.} few {Не удалось сообщить о # письмах.} many {Не удалось сообщить о # письмах.} other {Не удалось сообщить о # письмах.}}",
+ "undo": "Отменить",
+ "undone": "{count, plural, =1 {Возвращено на место. Отчёт уже был отправлен.} one {Возвращено на место. Отчёты уже были отправлены.} few {Возвращено на место. Отчёты уже были отправлены.} many {Возвращено на место. Отчёты уже были отправлены.} other {Возвращено на место. Отчёты уже были отправлены.}}",
+ "undo_failed": "Не удалось вернуть на место.",
+ "banner": "Вы сообщили, что это письмо фишинговое. Ссылки в нём отключены.",
+ "link_off": "ссылка отключена",
+ "link_off_note": "(ссылка отключена)",
+ "no_subject": "(без темы)"
+ },
"email_composer": {
"select_from_directory": "Выбрать из справочника",
"minimize": "Свернуть",
diff --git a/locales/sk/common.json b/locales/sk/common.json
index 46e9c0440..246c57548 100644
--- a/locales/sk/common.json
+++ b/locales/sk/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Odoslať aj tak",
"back": "Späť"
},
+ "phishing_report": {
+ "action": "Nahlásiť phishing…",
+ "confirm_title": "Nahlásiť phishing?",
+ "confirm_message": "{count, plural, one {Správa sa odošle na {address} a presunie do priečinka Spam.} few {# správy sa odošlú na {address}, každá ako samostatné hlásenie, a presunú do priečinka Spam.} many {# správy sa odošle na {address}, každá ako samostatné hlásenie, a presunie do priečinka Spam.} other {# správ sa odošle na {address}, každá ako samostatné hlásenie, a presunie do priečinka Spam.}}",
+ "confirm": "Nahlásiť",
+ "cancel": "Zrušiť",
+ "sending": "Nahlasuje sa…",
+ "done": "{count, plural, one {Nahlásené na {address} a presunuté do priečinka Spam.} few {# správy nahlásené na {address} a presunuté do priečinka Spam.} many {# správy nahlásené na {address} a presunuté do priečinka Spam.} other {# správ nahlásených na {address} a presunutých do priečinka Spam.}}",
+ "not_moved": "{count, plural, one {Nahlásené na {address}, ale správu sa nepodarilo presunúť do priečinka Spam.} few {Nahlásené na {address}, ale # správy sa nepodarilo presunúť do priečinka Spam.} many {Nahlásené na {address}, ale # správy sa nepodarilo presunúť do priečinka Spam.} other {Nahlásené na {address}, ale # správ sa nepodarilo presunúť do priečinka Spam.}}",
+ "failed": "{count, plural, one {Správu sa nepodarilo nahlásiť.} few {# správy sa nepodarilo nahlásiť.} many {# správy sa nepodarilo nahlásiť.} other {# správ sa nepodarilo nahlásiť.}}",
+ "undo": "Späť",
+ "undone": "{count, plural, one {Presunuté späť. Hlásenie už bolo odoslané.} few {Presunuté späť. Hlásenia už boli odoslané.} many {Presunuté späť. Hlásenia už boli odoslané.} other {Presunuté späť. Hlásenia už boli odoslané.}}",
+ "undo_failed": "Nepodarilo sa presunúť späť.",
+ "banner": "Túto správu ste nahlásili ako phishing. Odkazy v nej sú vypnuté.",
+ "link_off": "odkaz vypnutý",
+ "link_off_note": "(odkaz vypnutý)",
+ "no_subject": "(bez predmetu)"
+ },
"email_composer": {
"select_from_directory": "Vybrať z adresára",
"minimize": "Minimalizovať",
diff --git a/locales/th/common.json b/locales/th/common.json
index 98dff5de8..622d6816d 100644
--- a/locales/th/common.json
+++ b/locales/th/common.json
@@ -1814,6 +1814,24 @@
"send_anyway": "ส่งต่อไป",
"back": "ย้อนกลับ"
},
+ "phishing_report": {
+ "action": "รายงานฟิชชิง…",
+ "confirm_title": "รายงานเป็นฟิชชิงหรือไม่",
+ "confirm_message": "{count, plural, =1 {ข้อความจะถูกส่งไปยัง {address} และย้ายไปที่จดหมายขยะ} other {ข้อความแต่ละฉบับจากทั้งหมด # ฉบับจะถูกส่งไปยัง {address} เป็นรายงานแยกกัน และย้ายไปที่จดหมายขยะ}}",
+ "confirm": "รายงาน",
+ "cancel": "ยกเลิก",
+ "sending": "กำลังรายงาน…",
+ "done": "{count, plural, =1 {รายงานไปยัง {address} และย้ายไปที่จดหมายขยะแล้ว} other {รายงานข้อความ # ฉบับไปยัง {address} และย้ายไปที่จดหมายขยะแล้ว}}",
+ "not_moved": "{count, plural, =1 {รายงานไปยัง {address} แล้ว แต่ไม่สามารถย้ายข้อความไปที่จดหมายขยะได้} other {รายงานไปยัง {address} แล้ว แต่ไม่สามารถย้ายข้อความ # ฉบับไปที่จดหมายขยะได้}}",
+ "failed": "{count, plural, =1 {ไม่สามารถรายงานข้อความได้} other {ไม่สามารถรายงานข้อความ # ฉบับได้}}",
+ "undo": "เลิกทำ",
+ "undone": "{count, plural, =1 {ย้ายกลับแล้ว รายงานถูกส่งไปแล้ว} other {ย้ายกลับแล้ว รายงานถูกส่งไปแล้ว}}",
+ "undo_failed": "ไม่สามารถย้ายกลับได้",
+ "banner": "คุณรายงานข้อความนี้ว่าเป็นฟิชชิง ลิงก์ในข้อความถูกปิดใช้งานแล้ว",
+ "link_off": "ปิดใช้งานลิงก์แล้ว",
+ "link_off_note": "(ปิดใช้งานลิงก์แล้ว)",
+ "no_subject": "(ไม่มีเรื่อง)"
+ },
"welcome": {
"title": "ยินดีต้อนรับสู่กล่องจดหมายของคุณ",
"tip_compose": "กด c เพื่อเขียนอีเมลใหม่",
diff --git a/locales/tr/common.json b/locales/tr/common.json
index 7110da678..772084797 100644
--- a/locales/tr/common.json
+++ b/locales/tr/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Yine de gönder",
"back": "Geri"
},
+ "phishing_report": {
+ "action": "Kimlik avı bildir…",
+ "confirm_title": "Kimlik avı olarak bildirilsin mi?",
+ "confirm_message": "{count, plural, one {İleti {address} adresine gönderilir ve Spam klasörüne taşınır.} other {# iletinin her biri ayrı bir bildirim olarak {address} adresine gönderilir ve Spam klasörüne taşınır.}}",
+ "confirm": "Bildir",
+ "cancel": "İptal",
+ "sending": "Bildiriliyor…",
+ "done": "{count, plural, one {{address} adresine bildirildi ve Spam klasörüne taşındı.} other {# ileti {address} adresine bildirildi ve Spam klasörüne taşındı.}}",
+ "not_moved": "{count, plural, one {{address} adresine bildirildi ancak ileti Spam klasörüne taşınamadı.} other {{address} adresine bildirildi ancak # ileti Spam klasörüne taşınamadı.}}",
+ "failed": "{count, plural, one {İleti bildirilemedi.} other {# ileti bildirilemedi.}}",
+ "undo": "Geri al",
+ "undone": "{count, plural, one {Geri taşındı. Bildirim zaten gönderilmişti.} other {Geri taşındı. Bildirimler zaten gönderilmişti.}}",
+ "undo_failed": "Geri taşınamadı.",
+ "banner": "Bu iletiyi kimlik avı olarak bildirdiniz. İçindeki bağlantılar devre dışı.",
+ "link_off": "bağlantı devre dışı",
+ "link_off_note": "(bağlantı devre dışı)",
+ "no_subject": "(konu yok)"
+ },
"email_composer": {
"select_from_directory": "Dizinden seç",
"minimize": "Simge durumuna küçült",
diff --git a/locales/uk/common.json b/locales/uk/common.json
index 7e9164679..3d598ab3e 100644
--- a/locales/uk/common.json
+++ b/locales/uk/common.json
@@ -880,6 +880,24 @@
"send_anyway": "Усе одно надіслати",
"back": "Назад"
},
+ "phishing_report": {
+ "action": "Повідомити про фішинг…",
+ "confirm_title": "Повідомити про фішинг?",
+ "confirm_message": "{count, plural, =1 {Лист буде надіслано на {address} і переміщено до папки «Спам».} one {# лист буде надіслано на {address}, кожен окремим звітом, і переміщено до папки «Спам».} few {# листи буде надіслано на {address}, кожен окремим звітом, і переміщено до папки «Спам».} many {# листів буде надіслано на {address}, кожен окремим звітом, і переміщено до папки «Спам».} other {# листа буде надіслано на {address}, кожен окремим звітом, і переміщено до папки «Спам».}}",
+ "confirm": "Повідомити",
+ "cancel": "Скасувати",
+ "sending": "Надсилання звіту…",
+ "done": "{count, plural, =1 {Надіслано на {address} і переміщено до папки «Спам».} one {# лист надіслано на {address} і переміщено до папки «Спам».} few {# листи надіслано на {address} і переміщено до папки «Спам».} many {# листів надіслано на {address} і переміщено до папки «Спам».} other {# листа надіслано на {address} і переміщено до папки «Спам».}}",
+ "not_moved": "{count, plural, =1 {Звіт надіслано на {address}, але лист не вдалося перемістити до папки «Спам».} one {Звіти надіслано на {address}, але # лист не вдалося перемістити до папки «Спам».} few {Звіти надіслано на {address}, але # листи не вдалося перемістити до папки «Спам».} many {Звіти надіслано на {address}, але # листів не вдалося перемістити до папки «Спам».} other {Звіти надіслано на {address}, але # листа не вдалося перемістити до папки «Спам».}}",
+ "failed": "{count, plural, =1 {Не вдалося повідомити про лист.} one {Не вдалося повідомити про # лист.} few {Не вдалося повідомити про # листи.} many {Не вдалося повідомити про # листів.} other {Не вдалося повідомити про # листа.}}",
+ "undo": "Скасувати",
+ "undone": "{count, plural, =1 {Повернуто на місце. Звіт уже надіслано.} one {Повернуто на місце. Звіти вже надіслано.} few {Повернуто на місце. Звіти вже надіслано.} many {Повернуто на місце. Звіти вже надіслано.} other {Повернуто на місце. Звіти вже надіслано.}}",
+ "undo_failed": "Не вдалося повернути на місце.",
+ "banner": "Ви повідомили, що цей лист фішинговий. Посилання в ньому вимкнено.",
+ "link_off": "посилання вимкнено",
+ "link_off_note": "(посилання вимкнено)",
+ "no_subject": "(без теми)"
+ },
"email_composer": {
"select_from_directory": "Вибрати з довідника",
"minimize": "Згорнути",
diff --git a/locales/zh-TW/common.json b/locales/zh-TW/common.json
index 1d61146b2..f54ef854c 100644
--- a/locales/zh-TW/common.json
+++ b/locales/zh-TW/common.json
@@ -880,6 +880,24 @@
"send_anyway": "仍然傳送",
"back": "返回"
},
+ "phishing_report": {
+ "action": "回報網路釣魚…",
+ "confirm_title": "要回報為網路釣魚嗎?",
+ "confirm_message": "{count, plural, =1 {這封郵件會傳送至 {address},並移至垃圾郵件。} other {# 封郵件會各自作為單獨的回報傳送至 {address},並移至垃圾郵件。}}",
+ "confirm": "回報",
+ "cancel": "取消",
+ "sending": "正在回報…",
+ "done": "{count, plural, =1 {已回報至 {address},並移至垃圾郵件。} other {已將 # 封郵件回報至 {address},並移至垃圾郵件。}}",
+ "not_moved": "{count, plural, =1 {已回報至 {address},但無法將郵件移至垃圾郵件。} other {已回報至 {address},但有 # 封郵件無法移至垃圾郵件。}}",
+ "failed": "{count, plural, =1 {無法回報這封郵件。} other {有 # 封郵件無法回報。}}",
+ "undo": "復原",
+ "undone": "{count, plural, =1 {已移回。回報已送出。} other {已移回。回報已送出。}}",
+ "undo_failed": "無法移回。",
+ "banner": "您已將這封郵件回報為網路釣魚。其中的連結已停用。",
+ "link_off": "連結已停用",
+ "link_off_note": "(連結已停用)",
+ "no_subject": "(無主題)"
+ },
"email_composer": {
"select_from_directory": "從目錄中選取",
"minimize": "最小化",
diff --git a/locales/zh/common.json b/locales/zh/common.json
index da51c1acf..f1d6d3d98 100644
--- a/locales/zh/common.json
+++ b/locales/zh/common.json
@@ -880,6 +880,24 @@
"send_anyway": "仍然发送",
"back": "返回"
},
+ "phishing_report": {
+ "action": "举报网络钓鱼…",
+ "confirm_title": "举报为网络钓鱼?",
+ "confirm_message": "{count, plural, =1 {该邮件将发送至 {address},并移至垃圾邮件。} other {# 封邮件将分别作为单独的举报发送至 {address},并移至垃圾邮件。}}",
+ "confirm": "举报",
+ "cancel": "取消",
+ "sending": "正在举报…",
+ "done": "{count, plural, =1 {已举报至 {address},并移至垃圾邮件。} other {已将 # 封邮件举报至 {address},并移至垃圾邮件。}}",
+ "not_moved": "{count, plural, =1 {已举报至 {address},但无法将邮件移至垃圾邮件。} other {已举报至 {address},但有 # 封邮件无法移至垃圾邮件。}}",
+ "failed": "{count, plural, =1 {无法举报该邮件。} other {有 # 封邮件无法举报。}}",
+ "undo": "撤销",
+ "undone": "{count, plural, =1 {已移回。举报已发出。} other {已移回。举报已发出。}}",
+ "undo_failed": "无法移回。",
+ "banner": "您已将此邮件举报为网络钓鱼。其中的链接已停用。",
+ "link_off": "链接已停用",
+ "link_off_note": "(链接已停用)",
+ "no_subject": "(无主题)"
+ },
"email_composer": {
"select_from_directory": "从目录中选择",
"minimize": "最小化",
diff --git a/scripts/generate-icons.mjs b/scripts/generate-icons.mjs
index e6d13c7c2..f8cc774b5 100644
--- a/scripts/generate-icons.mjs
+++ b/scripts/generate-icons.mjs
@@ -93,6 +93,7 @@ const MAP = {
FileText: 'file-text',
FileVideo: 'video',
Filter: 'filter',
+ Fish: 'fish',
Flag: 'flag',
FlaskConical: 'flask',
Folder: 'folder',
diff --git a/src/api/__tests__/phishing-report.test.ts b/src/api/__tests__/phishing-report.test.ts
new file mode 100644
index 000000000..b2773b7f7
--- /dev/null
+++ b/src/api/__tests__/phishing-report.test.ts
@@ -0,0 +1,174 @@
+import { describe, it, expect, vi, beforeEach } from 'vitest';
+
+// Sending a phishing report (#124): one message to the admin's address with
+// the original attached unchanged, from the login's own account, and no copy
+// kept (onSuccessDestroyEmail in place of the move to Sent).
+
+vi.mock('../jmap-client', () => ({
+ jmapClient: {
+ accountId: 'acc-own',
+ username: 'alice@example.org',
+ request: vi.fn(),
+ learnHoldLimit: vi.fn(),
+ getSubmissionAccountIds: vi.fn(() => ['acc-own']),
+ hasDelayedSend: vi.fn(() => true),
+ hasAccountCapability: vi.fn(() => false),
+ getMaxCallsInRequest: vi.fn(() => 16),
+ getMaxObjectsInGet: vi.fn(() => 500),
+ getMaxObjectsInSet: vi.fn(() => 500),
+ getMaxSizeUpload: vi.fn(() => 50_000_000),
+ getAccountCapability: vi.fn(),
+ },
+}));
+vi.mock('../identity', () => ({
+ getIdentities: vi.fn(async () => [
+ { id: 'id-team', name: 'Team', email: 'team@example.org', mayDelete: true },
+ { id: 'id-me', name: 'Alice', email: 'alice@example.org', mayDelete: false },
+ ]),
+}));
+vi.mock('../blob', () => ({ uploadBytes: vi.fn(async () => ({ blobId: 'blob-arf' })) }));
+vi.mock('../../lib/email-export', () => ({
+ fetchBlobBytes: vi.fn(async () => new TextEncoder().encode('From: bad@phish.example\r\n\r\nclick\r\n')),
+}));
+
+import { jmapClient } from '../jmap-client';
+import { uploadBytes } from '../blob';
+import { fetchBlobBytes } from '../../lib/email-export';
+import { markAsSpam } from '../email';
+import { sendPhishingReport } from '../phishing-report';
+import type { Email } from '../types';
+
+const mockRequest = jmapClient.request as ReturnType
No links here
'; + expect(turnOffLinks(plain, 'off')).toBe(plain); + }); +}); + +describe('a reported message\'s document', () => { + it('has no link address in an HTML body', () => { + const { html } = prepareEmailHtml('Pay now', { linksOff: 'off' }); + expect(html).not.toContain('evil.example'); + expect(prepareEmailHtml('Pay now').html).toContain('https://evil.example'); + }); + + it('has no link address in a plain-text body either', () => { + const body = plainTextToSafeHtml('Pay at https://evil.example/pay now'); + expect(wrapPlainTextEmail(body, { linksOff: 'off' })).not.toContain('href="https://evil.example'); + expect(wrapPlainTextEmail(body)).toContain('href="https://evil.example/pay"'); + }); + + it('is built apart from the same message before it was reported', () => { + const input = { + key: 'acc|e1', rawHtml: null, text: 'https://evil.example', emptyLabel: '', blockRemoteImages: true, cidMap: {}, + isDark: false, messageSpacing: 'auto' as const, plainTextFont: 'sans' as const, quoteLabels: { show: '', hide: '' }, + }; + expect(buildBodyDocument(input).html).toContain('href='); + expect(buildBodyDocument({ ...input, linksOff: 'off' }).html).not.toContain('href='); + }); +}); diff --git a/src/lib/__tests__/phishing-report-arf.test.ts b/src/lib/__tests__/phishing-report-arf.test.ts new file mode 100644 index 000000000..c639b2858 --- /dev/null +++ b/src/lib/__tests__/phishing-report-arf.test.ts @@ -0,0 +1,97 @@ +import { describe, expect, it } from 'vitest'; +import type { Email } from '../../api/types'; +import { assembleArfReport, buildArfParts, deliveryRecipient, rawEncoding } from '../phishing-report-arf'; + +// The ARF report (RFC 5965), ported with the webmail's tests: multipart/report +// with report-type feedback-report, a text part, message/feedback-report +// with Feedback-Type: fraud, User-Agent and Version: 1, and the original +// whole as message/rfc822. + +const email = { + id: 'e1', blobId: 'blob-1', size: 40, subject: 'Konto gesperrt – jetzt prüfen', receivedAt: '2026-10-01T10:00:00Z', + from: [{ email: 'bad@phish.example' }], keywords: {}, mailboxIds: { inbox: true }, +} as unknown as Email; +const reporter = { name: 'Alice', email: 'alice@example.org' }; +const ORIGINAL = 'From: bad@phish.example\r\nSubject: x\r\n\r\nclick here\r\n'; + +describe('buildArfParts', () => { + it('has the three parts and the required feedback fields', () => { + const { head, tail } = buildArfParts({ + email, reporter, to: 'abuse@example.org', encoding: '7bit', appVersion: '0.1.95', + recipient: 'alice@example.org', now: new Date('2026-11-01T08:00:00Z'), + }); + expect(head).toMatch(/^Date: Sun, 01 Nov 2026 08:00:00 \+0000\r\n/); + expect(head).toContain('From: Alice