Save as eml, translation updates
This commit is contained in:
@@ -16,5 +16,6 @@ public enum AppLanguage
|
||||
Greek,
|
||||
PortugeseBrazil,
|
||||
Italian,
|
||||
Romanian
|
||||
Romanian,
|
||||
Korean
|
||||
}
|
||||
|
||||
@@ -127,6 +127,11 @@ public interface IPreferencesService : INotifyPropertyChanged
|
||||
/// </summary>
|
||||
bool IsHardDeleteProtectionEnabled { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Setting: Show the empty-folder command for junk/spam folders.
|
||||
/// </summary>
|
||||
bool IsShowEmptyJunkFolderEnabled { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Setting: Thread mails into conversations.
|
||||
/// </summary>
|
||||
|
||||
@@ -45,6 +45,7 @@ public class WinoTranslationDictionary : Dictionary<string, string>
|
||||
AppLanguage.Greek => "el_GR",
|
||||
AppLanguage.PortugeseBrazil => "pt_BR",
|
||||
AppLanguage.Romanian => "ro_RO",
|
||||
AppLanguage.Korean => "ko_KR",
|
||||
_ => "en_US",
|
||||
};
|
||||
}
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Изтриване на този акаунт",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Защита от окончателно изтриване",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Покажи командата за изпразване на папка в папките Спам. Това действие няма да изисква потвърждение и ще изтрие всички имейли в папката за спам веднага.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Покажи командата за изпразване на папка Спам",
|
||||
"SettingsDiagnostics_Description": "За разработчици",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Споделете този идентификационен номер с разработчиците, когато ви помолят, за да получите помощ за проблемите, с които се сблъсквате в Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Идентификатор за диагностика",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Delete this account",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Permanent Delete Protection",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Mostra la comanda per buidar la carpeta de correu brossa. Aquesta acció no demanarà confirmació i eliminarà immediatament tots els correus de la carpeta de correu brossa.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Mostra la comanda per buidar la carpeta de correu brossa",
|
||||
"SettingsDiagnostics_Description": "For developers",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Smazat tento účet",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Ochrana proti trvalému smazání",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Zobrazit příkaz pro vyprázdnění složky ve složkách Nevyžádaná pošta (spam). Tato akce nepožádá o potvrzení a ihned smaže všechny e-maily ve složce spamu.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Zobrazit příkaz pro vyprázdnění složky spamu",
|
||||
"SettingsDiagnostics_Description": "Pro vývojáře",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Delete this account",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Permanent Delete Protection",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Vis kommandoen til at tøm mappen i Junk/Spam-mapperne. Denne handling vil ikke bede om bekræftelse og vil straks slette alle mails i spam-mappen.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Vis kommandoen til at tømme spam-mappen",
|
||||
"SettingsDiagnostics_Description": "For developers",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Dieses Konto löschen",
|
||||
"SettingsDeleteProtection_Description": "Sollte Wino jedes Mal nachfragen, wenn Sie eine Mail mit Umschalten + Entfernen permanent löschen möchten?",
|
||||
"SettingsDeleteProtection_Title": "Schutz vor permanenter Löschung",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Zeige den Befehl zum Leeren des Junk-/Spam-Ordners an. Diese Aktion wird keine Bestätigung erfordern und löscht sofort alle E-Mails im Spam-Ordner.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Befehl zum Leeren des Spam-Ordners anzeigen",
|
||||
"SettingsDiagnostics_Description": "Für Entwickler",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Teilen Sie diese ID mit den Entwicklern, wenn Sie um Hilfe bei Problemen in Wino Mail gebeten werden.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnose-ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Διαγραφή αυτού του λογαριασμού",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Προστασία Μόνιμης Διαγραφής",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Εμφάνιση της εντολής εκκένωσης φακέλου στους φακέλους Junk/Spam. Αυτή η ενέργεια δεν θα ζητήσει επιβεβαίωση και θα διαγράψει αμέσως όλα τα ηλεκτρονικά μηνύματα στον φάκελο Spam.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Εμφάνιση εντολής εκκένωσης φακέλου Spam",
|
||||
"SettingsDiagnostics_Description": "Για προγραμματιστές",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Μοιραστείτε αυτό το ID με τους προγραμματιστές όταν σας ζητηθεί να λάβετε βοήθεια για τα θέματα που αντιμετωπίζετε στο Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Διαγνωστικό ID",
|
||||
|
||||
@@ -92,11 +92,13 @@
|
||||
"Buttons_Discard": "Discard",
|
||||
"Buttons_Dismiss": "Dismiss",
|
||||
"Buttons_Edit": "Edit",
|
||||
"Buttons_EML": "EML",
|
||||
"Buttons_EnableImageRendering": "Enable",
|
||||
"Buttons_Multiselect": "Select Multiple",
|
||||
"Buttons_Manage": "Manage",
|
||||
"Buttons_No": "No",
|
||||
"Buttons_Open": "Open",
|
||||
"Buttons_PDF": "PDF",
|
||||
"Buttons_Purchase": "Purchase",
|
||||
"Buttons_RateWino": "Rate Wino",
|
||||
"Buttons_Reset": "Reset",
|
||||
@@ -595,6 +597,9 @@
|
||||
"Info_MessageCorruptedTitle": "Error",
|
||||
"Info_MissingFolderMessage": "{0} doesn't exist for this account.",
|
||||
"Info_MissingFolderTitle": "Missing Folder",
|
||||
"Info_EMLSaveFailedTitle": "Failed to save EML file",
|
||||
"Info_EMLSaveSuccessMessage": "EML file is saved to {0}",
|
||||
"Info_EMLSaveSuccessTitle": "Success",
|
||||
"Info_PDFSaveFailedTitle": "Failed to save PDF file",
|
||||
"Info_PDFSaveSuccessMessage": "PDF file is saved to {0}",
|
||||
"Info_PDFSaveSuccessTitle": "Success",
|
||||
@@ -836,6 +841,8 @@
|
||||
"SettingsDeleteAccount_Title": "Delete this account",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Permanent Delete Protection",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Show the empty-folder command in Junk/Spam folders. This action will not ask for confirmation and will delete all mails in the spam folder immediately.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Show empty spam folder command",
|
||||
"SettingsDiagnostics_Description": "For developers",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Eliminar esta cuenta",
|
||||
"SettingsDeleteProtection_Description": "¿Debería Wino pedirte confirmación cada vez que intentas eliminar un correo usando las teclas Shift + Supr?",
|
||||
"SettingsDeleteProtection_Title": "Protección de Eliminación Permanente",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Mostrar el comando para vaciar la carpeta en las carpetas de correo no deseado. Esta acción no solicitará confirmación y eliminará todos los correos de la carpeta de correo no deseado de inmediato.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Mostrar el comando para vaciar la carpeta de correo no deseado",
|
||||
"SettingsDiagnostics_Description": "Para desarrolladores",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Comparte este ID con los desarrolladores cuando se les pida ayuda para los problemas que experimentas en Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "ID de Diagnóstico",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Delete this account",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Permanent Delete Protection",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Näytä roskapostikansioiden tyhjennyskomento. Tämä toimenpide ei kysy vahvistusta ja poistaa välittömästi kaikki sähköpostit roskapostikansioista.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Näytä roskapostikansioiden tyhjennyskomento",
|
||||
"SettingsDiagnostics_Description": "For developers",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Supprimer ce compte",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Protection contre la suppression permanente",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Afficher la commande de vidage du dossier dans les dossiers de courrier indésirable. Cette action ne demandera pas de confirmation et supprimera immédiatement tous les courriels du dossier de courrier indésirable.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Afficher la commande pour vider le dossier de courrier indésirable",
|
||||
"SettingsDiagnostics_Description": "Pour les développeurs",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Partagez cet identifiant avec les développeurs lorsqu'ils vous aideront à résoudre les problèmes que vous rencontrez dans Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "ID de diagnostic",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Delete this account",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Permanent Delete Protection",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Mostrar o comando para baleirar a carpeta de correo lixo. Esta acción non pedirá confirmación e eliminará de inmediato todos os correos da carpeta de correo lixo.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Mostrar o comando para baleirar a carpeta de correo lixo",
|
||||
"SettingsDiagnostics_Description": "For developers",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Hapus akun ini",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Perlindungan Hapus Permanen",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Tampilkan perintah kosongkan folder pada folder Junk/Spam. Tindakan ini tidak akan meminta konfirmasi dan akan menghapus semua email di folder spam segera.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Perintah kosongkan folder Spam",
|
||||
"SettingsDiagnostics_Description": "Untuk pengembang",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Elimina questo account",
|
||||
"SettingsDeleteProtection_Description": "Dovrebbe Wino chiederti la conferma ogni volta che provi a eliminare definitivamente un messaggio utilizzando Maiusc + Canc?",
|
||||
"SettingsDeleteProtection_Title": "Protezione eliminazione permanente",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Mostra il comando per svuotare le cartelle Junk/Spam. Questa azione non richiederà alcuna conferma e eliminerà immediatamente tutte le email nelle cartelle Junk/Spam.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Mostra il comando per svuotare la cartella Junk/Spam",
|
||||
"SettingsDiagnostics_Description": "Per gli sviluppatori",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Condividi questo ID con gli sviluppatori quando richiesto per ricevere aiuto in merito ai problemi che hai con Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "ID diagnostica",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Delete this account",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Permanent Delete Protection",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "迷惑メール フォルダーの「空にする」コマンドを表示します。この操作は確認を求めず、迷惑メール フォルダー内のすべてのメールを即座に削除します。",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "迷惑メール フォルダーを空にするコマンドを表示",
|
||||
"SettingsDiagnostics_Description": "For developers",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Delete this account",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Permanent Delete Protection",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Rodyti komandą Išvalyti šlamšto aplanką šlamšto aplankuose. Šis veiksmas nepaprašys patvirtinimo ir nedelsiant ištrins visus el. laiškus šlamšto aplanke.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Rodyti komandą Išvalyti šlamšto aplanką",
|
||||
"SettingsDiagnostics_Description": "For developers",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Verwijder dit account",
|
||||
"SettingsDeleteProtection_Description": "Moet Wino u om bevestiging vragen elke keer wanneer u een e-mail permanent verwijdert met de Shift + Del toetsen?",
|
||||
"SettingsDeleteProtection_Title": "Bescherming tegen permanent verwijderen",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Toon het lege-map-commando in de Junk/Spam-mappen. Deze actie vraagt geen bevestiging en verwijdert onmiddellijk alle e-mails in de spam-map.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Toon leeg-map-commando",
|
||||
"SettingsDiagnostics_Description": "Voor ontwikkelaars",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Deel dit ID met de ontwikkelaars wanneer er om hulp gevraagd wordt voor de problemen die u in Wino Mail ervaart.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostische ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Usuń to konto",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Ochrona przed trwałym usunięciem",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Pokaż polecenie opróżniania pustego folderu w folderach Junk/Spam. Ta akcja nie poprosi o potwierdzenie i natychmiast usunie wszystkie wiadomości z folderu Spam.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Pokaż polecenie opróżniania pustego folderu Spam",
|
||||
"SettingsDiagnostics_Description": "Dla programistów",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Apagar esta conta",
|
||||
"SettingsDeleteProtection_Description": "O Wino deve solicitar confirmação sempre que você tentar excluir permanentemente um e-mail usando as teclas Shift + Del?",
|
||||
"SettingsDeleteProtection_Title": "Proteção de exclusão permanente",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Mostrar o comando para esvaziar a pasta nas pastas de Lixo/Spam. Esta ação não solicitará confirmação e excluirá imediatamente todas as mensagens na pasta de spam.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Mostrar o comando para esvaziar a pasta de Spam",
|
||||
"SettingsDiagnostics_Description": "Para desenvolvedores",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Compartilhe esta identificação com os desenvolvedores quando solicitado para obter ajuda para os problemas que você experimentar no Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "ID de diagnóstico",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Ștergeți acest cont",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Protecție Ștergere Permanentă",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Afișează comanda de golire a folderelor Junk/Spam. Această acțiune nu va solicita confirmare și va șterge imediat toate mesajele din folderul de spam.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Afișează comanda pentru golirea folderului de spam.",
|
||||
"SettingsDiagnostics_Description": "Pentru dezvoltatori",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Partajați acest ID cu dezvoltatorii atunci când le cereți ajutor pentru problemele pe care le întâmpinați în Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "ID de Diagnosticare",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Удалить эту учетную запись",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Защита от окончательного удаления",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Показать команду очистки пустой папки в папках Спам. Это действие не будет запрашивать подтверждение и сразу удалит все письма в папке спама.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Показать команду очистки пустой папки в папках Спам",
|
||||
"SettingsDiagnostics_Description": "Для разработчиков",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Share this ID with the developers when asked to get help for the issues you experience in Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostic ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Odstrániť tento účet",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Ochrana pred trvalým odstránením",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Zobraziť príkaz na vyprázdnenie priečinka v priečinkoch Nevyžiadaná pošta / Spam. Táto akcia nepožaduje potvrdenie a okamžite vymaže všetky e-maily zo spamového priečinka.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Zobraziť príkaz na vyprázdnenie spamového priečinka",
|
||||
"SettingsDiagnostics_Description": "Pre vývojárov",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Zdieľajte toto ID s vývojármi, keď budete požiadaní o pomoc pri problémoch, ktoré sa vám vyskytnú v aplikácii Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Diagnostické ID",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Bu hesabı sil",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Kalıcı Silme Koruması",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Gereksiz Posta/Spam klasörlerinde boş klasör komutunu göster. Bu işlem onay istemeyecek ve spam klasöründeki tüm mailleri hemen silecektir.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Boş Spam Klasörü Komutunu Göster",
|
||||
"SettingsDiagnostics_Description": "Geliştiriciler için",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Bu ID'yi geliştiriciler ile paylaşarak Wino Mail ile yaşadığınız sorunlar hakkında çözümlere ulaşabilirsiniz.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "Hata Ayıklama ID'si",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "Видалити цей обліковий запис",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "Захист від остаточного видалення",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "Показати команду очищення порожньої папки у папках Небажана пошта/Спам. Ця дія не вимагатиме підтвердження і негайно видалить усі листи з папки зі спамом.",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "Показати команду очищення порожньої папки Спам",
|
||||
"SettingsDiagnostics_Description": "Для розробників",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "Поділіться цим ID з розробниками, коли попросять, щоб отримати допомогу щодо проблем, з якими Ви зіткнулися у Wino Mail.",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "ID діагностики",
|
||||
|
||||
@@ -836,6 +836,8 @@
|
||||
"SettingsDeleteAccount_Title": "删除此账户",
|
||||
"SettingsDeleteProtection_Description": "Should Wino ask you for confirmation every time you try to permanently delete a mail using Shift + Del keys?",
|
||||
"SettingsDeleteProtection_Title": "永久性删除保护",
|
||||
"SettingsEmptyJunkFolderCommand_Description": "在垃圾邮件/垃圾箱文件夹中显示清空文件夹命令。此操作不会要求确认,将立即删除垃圾邮件文件夹中的所有邮件。",
|
||||
"SettingsEmptyJunkFolderCommand_Title": "显示清空垃圾邮件文件夹的命令",
|
||||
"SettingsDiagnostics_Description": "开发者选项",
|
||||
"SettingsDiagnostics_DiagnosticId_Description": "如需联系开发人员请求帮助,请提供此 ID。",
|
||||
"SettingsDiagnostics_DiagnosticId_Title": "诊断 ID",
|
||||
|
||||
@@ -13,6 +13,7 @@ public class TranslationServiceTests
|
||||
[InlineData("pt-PT", AppLanguage.PortugeseBrazil)]
|
||||
[InlineData("zh-TW", AppLanguage.Chinese)]
|
||||
[InlineData("tr_TR", AppLanguage.Turkish)]
|
||||
[InlineData("ko-KR", AppLanguage.Korean)]
|
||||
[InlineData("nl-NL", AppLanguage.English)]
|
||||
public void ResolveSupportedLanguage_ReturnsExpectedLanguage(string languageTag, AppLanguage expectedLanguage)
|
||||
{
|
||||
|
||||
@@ -10,6 +10,7 @@ using CommunityToolkit.Mvvm.Input;
|
||||
using CommunityToolkit.Mvvm.Messaging;
|
||||
using MimeKit;
|
||||
using MimeKit.Cryptography;
|
||||
using Serilog;
|
||||
using Wino.Core.Domain;
|
||||
using Wino.Core.Domain.Entities.Mail;
|
||||
using Wino.Core.Domain.Entities.Shared;
|
||||
@@ -37,9 +38,11 @@ public partial class ComposePageViewModel : MailBaseViewModel,
|
||||
public event EventHandler CloseRequested;
|
||||
|
||||
private static readonly TimeSpan LocalDraftRetryGracePeriod = TimeSpan.FromSeconds(15);
|
||||
private const string MimeFileName = "mail.eml";
|
||||
|
||||
public Func<Task<string>> GetHTMLBodyFunction;
|
||||
public Func<string, Task> RenderHtmlBodyAsyncFunc { get; set; }
|
||||
public Func<string, Task<bool>> SaveHTMLasPDFFunc { get; set; }
|
||||
|
||||
public override async Task KeyboardShortcutHook(KeyboardShortcutTriggerDetails args)
|
||||
{
|
||||
@@ -440,6 +443,77 @@ public partial class ComposePageViewModel : MailBaseViewModel,
|
||||
await _mimeFileService.SaveMimeMessageAsync(CurrentMailDraftItem.MailCopy.FileId, CurrentMimeMessage, ComposingAccount.Id).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
public async Task ExportAsPdfAsync()
|
||||
{
|
||||
if (SaveHTMLasPDFFunc == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var pickedFilePath = await _dialogService.PickFilePathAsync($"{GetSuggestedExportFileName()}.pdf").ConfigureAwait(false);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(pickedFilePath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
bool isSaved = await SaveHTMLasPDFFunc(pickedFilePath).ConfigureAwait(false);
|
||||
|
||||
if (isSaved)
|
||||
{
|
||||
_dialogService.InfoBarMessage(
|
||||
Translator.Info_PDFSaveSuccessTitle,
|
||||
string.Format(Translator.Info_PDFSaveSuccessMessage, pickedFilePath),
|
||||
InfoBarMessageType.Success);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error(ex, "Failed to save compose draft as PDF.");
|
||||
_dialogService.InfoBarMessage(Translator.Info_PDFSaveFailedTitle, ex.Message, InfoBarMessageType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task ExportAsEmlAsync()
|
||||
{
|
||||
if (CurrentMailDraftItem?.MailCopy == null || ComposingAccount == null)
|
||||
{
|
||||
_dialogService.InfoBarMessage(Translator.Info_ComposerMissingMIMETitle, Translator.Info_ComposerMissingMIMEMessage, InfoBarMessageType.Error);
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await UpdateMimeChangesAsync().ConfigureAwait(false);
|
||||
|
||||
var pickedFilePath = await _dialogService.PickFilePathAsync($"{GetSuggestedExportFileName()}.eml").ConfigureAwait(false);
|
||||
|
||||
if (string.IsNullOrWhiteSpace(pickedFilePath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var resourcePath = await _mimeFileService
|
||||
.GetMimeResourcePathAsync(ComposingAccount.Id, CurrentMailDraftItem.MailCopy.FileId)
|
||||
.ConfigureAwait(false);
|
||||
var sourceFilePath = Path.Combine(resourcePath, MimeFileName);
|
||||
|
||||
File.Copy(sourceFilePath, pickedFilePath, true);
|
||||
|
||||
_dialogService.InfoBarMessage(
|
||||
Translator.Info_EMLSaveSuccessTitle,
|
||||
string.Format(Translator.Info_EMLSaveSuccessMessage, pickedFilePath),
|
||||
InfoBarMessageType.Success);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error(ex, "Failed to save compose draft as EML.");
|
||||
_dialogService.InfoBarMessage(Translator.Info_EMLSaveFailedTitle, ex.Message, InfoBarMessageType.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task UpdateMailCopyAsync()
|
||||
{
|
||||
CurrentMailDraftItem.Subject = CurrentMimeMessage.Subject;
|
||||
@@ -879,6 +953,29 @@ public partial class ComposePageViewModel : MailBaseViewModel,
|
||||
list.Add(new MailboxAddress(item.Name, item.Address));
|
||||
}
|
||||
|
||||
private string GetSuggestedExportFileName()
|
||||
{
|
||||
var subject = string.IsNullOrWhiteSpace(Subject) ? Translator.MailItemNoSubject : Subject;
|
||||
return SanitizeFileNamePart(subject);
|
||||
}
|
||||
|
||||
private static string SanitizeFileNamePart(string value)
|
||||
{
|
||||
var invalidCharacters = Path.GetInvalidFileNameChars();
|
||||
var sanitizedChars = value.Trim().ToCharArray();
|
||||
|
||||
for (var i = 0; i < sanitizedChars.Length; i++)
|
||||
{
|
||||
if (Array.IndexOf(invalidCharacters, sanitizedChars[i]) >= 0)
|
||||
{
|
||||
sanitizedChars[i] = '_';
|
||||
}
|
||||
}
|
||||
|
||||
var sanitized = new string(sanitizedChars).Trim();
|
||||
return string.IsNullOrWhiteSpace(sanitized) ? "email" : sanitized;
|
||||
}
|
||||
|
||||
private async Task<(DraftCreationReason reason, MailCopy referenceMailCopy)> ResolveRetryDraftContextAsync()
|
||||
{
|
||||
if (CurrentMimeMessage == null || CurrentMailDraftItem?.MailCopy?.AssignedAccount == null)
|
||||
|
||||
@@ -217,6 +217,8 @@ public partial class MailListPageViewModel : MailBaseViewModel,
|
||||
{
|
||||
base.OnNavigatedTo(mode, parameters);
|
||||
|
||||
PreferencesService.PreferenceChanged -= PreferencesServiceChanged;
|
||||
PreferencesService.PreferenceChanged += PreferencesServiceChanged;
|
||||
MailCollection.ItemSelectionChanged += MailItemSelectionChanged;
|
||||
}
|
||||
|
||||
@@ -224,6 +226,7 @@ public partial class MailListPageViewModel : MailBaseViewModel,
|
||||
{
|
||||
base.OnNavigatedFrom(mode, parameters);
|
||||
|
||||
PreferencesService.PreferenceChanged -= PreferencesServiceChanged;
|
||||
MailCollection.ItemSelectionChanged -= MailItemSelectionChanged;
|
||||
|
||||
await MailCollection.ClearAsync();
|
||||
@@ -296,7 +299,7 @@ public partial class MailListPageViewModel : MailBaseViewModel,
|
||||
public bool IsJunkFolder => ActiveFolder?.SpecialFolderType == SpecialFolderType.Junk;
|
||||
public bool IsCategoryView => ActiveFolder is IMailCategoryMenuItem or IMergedMailCategoryMenuItem;
|
||||
public bool IsSyncButtonVisible => !IsCategoryView;
|
||||
public bool IsEmptyFolderButtonVisible => IsJunkFolder;
|
||||
public bool IsEmptyFolderButtonVisible => IsJunkFolder && PreferencesService.IsShowEmptyJunkFolderEnabled;
|
||||
|
||||
public string SelectedMessageText => IsDragInProgress
|
||||
? string.Format(Translator.MailsDragging, DraggingItemsCount)
|
||||
@@ -386,6 +389,18 @@ public partial class MailListPageViewModel : MailBaseViewModel,
|
||||
OnPropertyChanged(nameof(IsFolderEmpty));
|
||||
}
|
||||
|
||||
private async void PreferencesServiceChanged(object sender, string propertyName)
|
||||
{
|
||||
if (propertyName != nameof(IPreferencesService.IsShowEmptyJunkFolderEnabled))
|
||||
return;
|
||||
|
||||
await ExecuteUIThread(() =>
|
||||
{
|
||||
OnPropertyChanged(nameof(IsEmptyFolderButtonVisible));
|
||||
EmptyFolderCommand.NotifyCanExecuteChanged();
|
||||
});
|
||||
}
|
||||
|
||||
private async void UpdateBarMessage(InfoBarMessageType severity, string title, string message)
|
||||
{
|
||||
await ExecuteUIThread(() =>
|
||||
@@ -588,7 +603,7 @@ public partial class MailListPageViewModel : MailBaseViewModel,
|
||||
}
|
||||
}
|
||||
|
||||
private bool CanEmptyFolder() => IsJunkFolder && !IsAccountSynchronizerInSynchronization;
|
||||
private bool CanEmptyFolder() => IsEmptyFolderButtonVisible && !IsAccountSynchronizerInSynchronization;
|
||||
|
||||
[RelayCommand(CanExecute = nameof(CanLoadMoreItems))]
|
||||
private async Task LoadMoreItemsAsync()
|
||||
|
||||
@@ -9,6 +9,7 @@ const joditConfig = {
|
||||
"showWordsCounter": false,
|
||||
"showXPathInStatusbar": false,
|
||||
"spellcheck": true,
|
||||
"defaultActionOnPaste": "insert_as_text",
|
||||
"link": {
|
||||
"processVideoLink": false
|
||||
},
|
||||
|
||||
@@ -111,6 +111,12 @@ public class PreferencesService(IConfigurationService configurationService) : Ob
|
||||
set => SetPropertyAndSave(nameof(IsHardDeleteProtectionEnabled), value);
|
||||
}
|
||||
|
||||
public bool IsShowEmptyJunkFolderEnabled
|
||||
{
|
||||
get => _configurationService.Get(nameof(IsShowEmptyJunkFolderEnabled), false);
|
||||
set => SetPropertyAndSave(nameof(IsShowEmptyJunkFolderEnabled), value);
|
||||
}
|
||||
|
||||
public bool IsThreadingEnabled
|
||||
{
|
||||
get => _configurationService.Get(nameof(IsThreadingEnabled), true);
|
||||
|
||||
@@ -185,6 +185,17 @@
|
||||
<coreControls:WinoFontIcon Icon="{x:Bind GetEditorThemeIcon(WebViewEditor.IsEditorDarkMode), Mode=OneWay}" />
|
||||
</AppBarButton.Icon>
|
||||
</AppBarButton>
|
||||
<AppBarButton Label="{x:Bind domain:Translator.MailOperation_SaveAs}">
|
||||
<AppBarButton.Icon>
|
||||
<coreControls:WinoFontIcon Icon="Save" />
|
||||
</AppBarButton.Icon>
|
||||
<AppBarButton.Flyout>
|
||||
<coreControls:WinoMenuFlyout Placement="BottomEdgeAlignedRight">
|
||||
<MenuFlyoutItem Click="ExportPdf_Click" Text="{x:Bind domain:Translator.Buttons_PDF}" />
|
||||
<MenuFlyoutItem Click="ExportEml_Click" Text="{x:Bind domain:Translator.Buttons_EML}" />
|
||||
</coreControls:WinoMenuFlyout>
|
||||
</AppBarButton.Flyout>
|
||||
</AppBarButton>
|
||||
<AppBarButton Command="{x:Bind ViewModel.DiscardCommand}" Label="{x:Bind domain:Translator.Buttons_Discard}">
|
||||
<AppBarButton.Icon>
|
||||
<coreControls:WinoFontIcon Icon="Delete" />
|
||||
|
||||
@@ -59,6 +59,17 @@ public sealed partial class ComposePage : ComposePageAbstract,
|
||||
public ComposePage()
|
||||
{
|
||||
InitializeComponent();
|
||||
ViewModel.SaveHTMLasPDFFunc = async path =>
|
||||
{
|
||||
var webView = GetWebView();
|
||||
|
||||
if (webView?.CoreWebView2 == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return await webView.CoreWebView2.PrintToPdfAsync(path, null);
|
||||
};
|
||||
ViewModel.CloseRequested += ViewModel_CloseRequested;
|
||||
}
|
||||
|
||||
@@ -495,6 +506,7 @@ public sealed partial class ComposePage : ComposePageAbstract,
|
||||
FocusManager.GotFocus -= GlobalFocusManagerGotFocus;
|
||||
ComposeAiActionsPanel.CancelPendingOperation();
|
||||
await ViewModel.UpdateMimeChangesAsync();
|
||||
ViewModel.SaveHTMLasPDFFunc = null;
|
||||
ViewModel.RenderHtmlBodyAsyncFunc = null;
|
||||
|
||||
DisposeDisposables();
|
||||
@@ -565,6 +577,16 @@ public sealed partial class ComposePage : ComposePageAbstract,
|
||||
}
|
||||
}
|
||||
|
||||
private async void ExportPdf_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
await ViewModel.ExportAsPdfAsync();
|
||||
}
|
||||
|
||||
private async void ExportEml_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
await ViewModel.ExportAsEmlAsync();
|
||||
}
|
||||
|
||||
protected override void RegisterRecipients()
|
||||
{
|
||||
base.RegisterRecipients();
|
||||
|
||||
@@ -160,6 +160,10 @@
|
||||
<ToggleSwitch IsOn="{x:Bind ViewModel.PreferencesService.IsHardDeleteProtectionEnabled, Mode=TwoWay}" />
|
||||
</controls:SettingsCard>
|
||||
|
||||
<controls:SettingsCard Description="{x:Bind domain:Translator.SettingsEmptyJunkFolderCommand_Description}" Header="{x:Bind domain:Translator.SettingsEmptyJunkFolderCommand_Title}">
|
||||
<ToggleSwitch IsOn="{x:Bind ViewModel.PreferencesService.IsShowEmptyJunkFolderEnabled, Mode=TwoWay}" />
|
||||
</controls:SettingsCard>
|
||||
|
||||
<controls:SettingsCard Description="{x:Bind domain:Translator.SettingsAutoSelectNextItem_Description}" Header="{x:Bind domain:Translator.SettingsAutoSelectNextItem_Title}">
|
||||
<ToggleSwitch IsOn="{x:Bind ViewModel.PreferencesService.AutoSelectNextItem, Mode=TwoWay}" />
|
||||
<controls:SettingsCard.HeaderIcon>
|
||||
|
||||
@@ -116,6 +116,7 @@ public class TranslationService : ITranslationService
|
||||
"fr" => AppLanguage.French,
|
||||
"id" => AppLanguage.Indonesian,
|
||||
"it" => AppLanguage.Italian,
|
||||
"ko" => AppLanguage.Korean,
|
||||
"pl" => AppLanguage.Polish,
|
||||
"pt" => AppLanguage.PortugeseBrazil,
|
||||
"ro" => AppLanguage.Romanian,
|
||||
@@ -142,6 +143,7 @@ public class TranslationService : ITranslationService
|
||||
new AppLanguageModel(AppLanguage.Indonesian, "Indonesian", "id-ID"),
|
||||
new AppLanguageModel(AppLanguage.Polish, "Polski", "pl-PL"),
|
||||
new AppLanguageModel(AppLanguage.PortugeseBrazil, "Portuguese-Brazil", "pt-BR"),
|
||||
new AppLanguageModel(AppLanguage.Korean, "Korean", "ko-KR"),
|
||||
new AppLanguageModel(AppLanguage.Russian, "Russian", "ru-RU"),
|
||||
new AppLanguageModel(AppLanguage.Romanian, "Romanian", "ro-RO"),
|
||||
new AppLanguageModel(AppLanguage.Spanish, "Spanish", "es-ES"),
|
||||
|
||||
@@ -47,6 +47,7 @@ LOCALE_LABELS = {
|
||||
"id_ID": "Indonesian (Indonesia)",
|
||||
"it_IT": "Italian (Italy)",
|
||||
"ja_JP": "Japanese (Japan)",
|
||||
"ko_KR": "Korean (South Korea)",
|
||||
"lt_LT": "Lithuanian (Lithuania)",
|
||||
"nl_NL": "Dutch (Netherlands)",
|
||||
"pl_PL": "Polish (Poland)",
|
||||
|
||||
Reference in New Issue
Block a user