28 Commits

Author SHA1 Message Date
Burak Kaan Köse
bc4838578e Handling null client connection while sending server response. 2024-08-13 22:57:36 +02:00
Burak Kaan Köse
548996405a Fix incorrect accounts' mails are going to different accounts. 2024-08-13 22:54:36 +02:00
Burak Kaan Köse
a9a5f0bd14 Ascending downloading of mails since some servers require it. 2024-08-13 22:54:14 +02:00
Burak Kaan Köse
ec05ff6123 Optional splash screen. 2024-08-13 19:26:24 +02:00
Burak Kaan Köse
10c7ab421b Setting exception on connection failure. 2024-08-13 16:14:25 +02:00
Burak Kaan Köse
a8a5cc53ea Merge branch 'main' of https://github.com/bkaankose/Wino-Mail 2024-08-13 16:13:25 +02:00
Burak Kaan Köse
8fe48ca438 Fixed an issue where reconnecting doesn't await the handle in the second attempt. 2024-08-13 16:12:34 +02:00
Tiktack
cbd5a515a9 Fix account signature preferences during draft creation (#314)
* Pass account ID instead of account to draft creation method, since account object can be stale.

* Configure await
2024-08-12 00:56:26 +02:00
Tiktack
5912adff93 Embedded images replaced with cid linked resources. (#313)
* Added logic to replace embedded images with linked resources

* Added alt text for images and replaced NewtonSoft with Text.Json

* Fix draft mime preparation

* Fix crashes for signatures without images.

---------

Co-authored-by: Burak Kaan Köse <bkaankose@outlook.com>
2024-08-11 23:58:54 +02:00
Burak Kaan Köse
983bc21448 Removing server init from the app init. Making sure server connection is established before doing a request. Handling Connecting state. 2024-08-11 15:25:40 +02:00
Burak Kaan Köse
6d08368462 Hiding reconnect flyout on clicking reconnect. 2024-08-11 15:18:23 +02:00
Burak Kaan Köse
cde7bb3524 Merged main. 2024-08-10 14:35:26 +02:00
Burak Kaan Köse
133dc91561 Prevent crashes on invalid Uri for protocol activation. 2024-08-10 14:35:01 +02:00
Tiktack
f408f59beb Improve mailto links handling (#310)
* Refactor draft creation

* try scoped namespace

* Refactor mailto protocol and revert namespaces

* Remove useless account query

* Fix typo and CC/BCC in replies

* Replace convert with existing extension

* Small fixes

* Fix CC/Bcc in replies to automatically show if needed.

* Fixed body parameter position from mailto parameters

* Fixed issue with ReplyAll self not removed
2024-08-10 14:33:02 +02:00
Burak Kaan Köse
8763bf11ab Fix typo. 2024-08-09 14:23:51 +02:00
Burak Kaan Köse
99592a52be Unregistration condition. 2024-08-09 02:02:11 +02:00
Burak Kaan Köse
25a8a52573 Remove SessionConnectedTask 2024-08-09 01:51:21 +02:00
Burak Kaan Köse
5901344459 Remove SessionConntectedTask. 2024-08-09 01:24:55 +02:00
Burak Kaan Köse
b07ae4bc42 New Crowdin updates (#303)
* New translations resources.json (French)

* New translations resources.json (Spanish)

* New translations resources.json (Catalan)

* New translations resources.json (Czech)

* New translations resources.json (Danish)

* New translations resources.json (German)

* New translations resources.json (Greek)

* New translations resources.json (Finnish)

* New translations resources.json (Italian)

* New translations resources.json (Japanese)

* New translations resources.json (Dutch)

* New translations resources.json (Polish)

* New translations resources.json (Russian)

* New translations resources.json (Turkish)

* New translations resources.json (Ukrainian)

* New translations resources.json (Chinese Simplified)

* New translations resources.json (Galician)

* New translations resources.json (Portuguese, Brazilian)

* New translations resources.json (Indonesian)
2024-08-05 01:07:55 +02:00
Burak Kaan Köse
0d9e61480a Fix typo. 2024-08-05 01:07:02 +02:00
Burak Kaan Köse
baaea96b1d Add Italian languge. 2024-08-05 01:06:19 +02:00
Burak Kaan Köse
e156cb5c2e New Crowdin updates (#302)
* New translations resources.json (French)

* New translations resources.json (Spanish)

* New translations resources.json (Catalan)

* New translations resources.json (Czech)

* New translations resources.json (Danish)

* New translations resources.json (German)

* New translations resources.json (Greek)

* New translations resources.json (Finnish)

* New translations resources.json (Italian)

* New translations resources.json (Japanese)

* New translations resources.json (Dutch)

* New translations resources.json (Polish)

* New translations resources.json (Russian)

* New translations resources.json (Turkish)

* New translations resources.json (Ukrainian)

* New translations resources.json (Chinese Simplified)

* New translations resources.json (Galician)

* New translations resources.json (Portuguese, Brazilian)

* New translations resources.json (Indonesian)
2024-08-05 01:02:19 +02:00
Burak Kaan Köse
ff77b2b3dc Full trust Wino Server implementation. (#295)
* Separation of messages. Introducing Wino.Messages library.

* Wino.Server and Wino.Packaging projects. Enabling full trust for UWP and app service connection manager basics.

* Remove debug code.

* Enable generating assembly info to deal with unsupported os platform warnings.

* Fix server-client connection.

* UIMessage communication. Single instancing for server and re-connection mechanism on suspension.

* Removed IWinoSynchronizerFactory from UWP project.

* Removal of background task service from core.

* Delegating changes to UI and triggering new background synchronization.

* Fix build error.

* Moved core lib messages to Messaging project.

* Better client-server communication. Handling of requests in the server. New synchronizer factory in the server.

* WAM broker and MSAL token caching for OutlookAuthenticator. Handling account creation for Outlook.

* WinoServerResponse basics.

* Delegating protocol activation for Gmail authenticator.

* Adding margin to searchbox to match action bar width.

* Move libraries into lib folder.

* Storing base64 encoded mime on draft creation instead of MimeMessage object. Fixes serialization/deserialization issue with S.T.Json

* Scrollbar adjustments

* WınoExpander for thread expander layout ıssue.

* Handling synchronizer state changes.

* Double init on background activation.

* FIxing packaging issues and new Wino Mail launcher protocol for activation from full thrust process.

* Remove debug deserialization.

* Remove debug code.

* Making sure the server connection is established when the app is launched.

* Thrust -> Trust string replacement...

* Rename package to Wino Mail

* Enable translated values in the server.

* Fixed an issue where toast activation can't find the clicked mail after the folder is initialized.

* Revert debug code.

* Change server background sync to every 3 minute and Inbox only synchronization.

* Revert google auth changes.

* App preferences page.

* Changing tray icon visibility on preference change.

* Start the server with invisible tray icon if set to invisible.

* Reconnect button on the title bar.

* Handling of toast actions.

* Enable x86 build for server during packaging.

* Get rid of old background tasks and v180 migration.

* Terminate client when Exit clicked in server.

* Introducing SynchronizationSource to prevent notifying UI after server tick synchronization.

* Remove confirmAppClose restricted capability and unused debug code in manifest.

* Closing the reconnect info popup when reconnect is clicked.

* Custom RetryHandler for OutlookSynchronizer and separating client/server logs.

* Running server on Windows startup.

* Fix startup exe.

* Fix for expander list view item paddings.

* Force full sync on app launch instead of Inbox.

* Fix draft creation.

* Fix an issue with custom folder sync logic.

* Reporting back account sync progress from server.

* Fix sending drafts and missing notifications for imap.

* Changing imap folder sync requirements.

* Retain file  count is set to 3.

* Disabled swipe gestures temporarily due to native crash
 with SwipeControl

* Save all attachments implementation.

* Localization for save all attachments button.

* Fix logging dates for logs.

* Fixing ARM64 build.

* Add ARM64 build config to packaging project.

* Comment out OutOfProcPDB for ARM64.

* Hnadling GONE response for Outlook folder synchronization.
2024-08-05 00:36:26 +02:00
Burak Kaan Köse
4dc225184d Bump version 1.7.8 2024-07-24 14:04:36 +02:00
Burak Kaan Köse
49a0266224 Fix an issue with rendering drafts and replies. 2024-07-24 13:18:05 +02:00
Burak Kaan Köse
7a62d96b91 Bump client version. 2024-07-23 21:39:56 +02:00
Tiktack
641454fa14 Fixed broken build after compoer fonts merge (#288) 2024-07-18 21:02:03 +02:00
Tiktack
cf2f0ec936 Ability to set composer default font (#287)
* Added ability to set Composer font

* Added missing translations and refactoring

* Remove unused methods

* Small fixes
2024-07-18 20:04:11 +02:00
327 changed files with 7140 additions and 3533 deletions

View File

@@ -1,48 +0,0 @@
using System;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using Windows.ApplicationModel.Background;
using Windows.Storage;
using Wino.Core;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Services;
using Wino.Core.UWP;
using Wino.Services;
namespace Wino.BackgroundTasks
{
public sealed class SessionConnectedTask : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
var def = taskInstance.GetDeferral();
try
{
var services = new ServiceCollection();
services.RegisterCoreServices();
services.RegisterCoreUWPServices();
var providere = services.BuildServiceProvider();
var backgroundTaskService = providere.GetService<IBackgroundSynchronizer>();
var dbService = providere.GetService<IDatabaseService>();
var logInitializer = providere.GetService<ILogInitializer>();
logInitializer.SetupLogger(ApplicationData.Current.LocalFolder.Path);
await dbService.InitializeAsync();
await backgroundTaskService.RunBackgroundSynchronizationAsync(Core.Domain.Enums.BackgroundSynchronizationReason.SessionConnected);
}
catch (Exception ex)
{
Log.Error(ex, "Background synchronization failed from background task.");
}
finally
{
def.Complete();
}
}
}
}

View File

@@ -18,25 +18,6 @@
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<AllowCrossPlatformRetargeting>false</AllowCrossPlatformRetargeting>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
@@ -123,7 +104,6 @@
<ItemGroup>
<Compile Include="AppUpdatedTask.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SessionConnectedTask.cs" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">

View File

@@ -8,8 +8,10 @@
public const string WinoLocalDraftHeader = "X-Wino-Draft-Id";
public const string LocalDraftStartPrefix = "localDraft_";
public const string ToastMailItemIdKey = nameof(ToastMailItemIdKey);
public const string ToastMailItemRemoteFolderIdKey = nameof(ToastMailItemRemoteFolderIdKey);
public const string ToastMailUniqueIdKey = nameof(ToastMailUniqueIdKey);
public const string ToastActionKey = nameof(ToastActionKey);
public const string ClientLogFile = "Client_.log";
public const string ServerLogFile = "Server_.log";
}
}

View File

@@ -11,6 +11,10 @@ namespace Wino.Core.Domain.Entities
public Guid AccountId { get; set; }
/// <summary>
/// Unique object storage for authenticators if needed.
/// </summary>
public string UniqueId { get; set; }
public string Address { get; set; }
public void RefreshTokens(TokenInformationBase tokenInformationBase)

View File

@@ -15,5 +15,6 @@
Indonesian,
Greek,
PortugeseBrazil,
Italian
}
}

View File

@@ -1,15 +0,0 @@
namespace Wino.Core.Domain.Enums
{
public enum ReaderFont
{
Arial,
TimesNewRoman,
Verdana,
Tahoma,
CourierNew,
Georgia,
TrebuchetMS,
Calibri,
Helvetica
}
}

View File

@@ -0,0 +1,12 @@
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// What should happen to server app when the client is terminated.
/// </summary>
public enum ServerBackgroundMode
{
MinimizedTray, // Still runs, tray icon is visible.
Invisible, // Still runs, tray icon is invisible.
Terminate // Server is terminated as Wino terminates.
}
}

View File

@@ -0,0 +1,11 @@
namespace Wino.Core.Domain.Enums
{
public enum StartupBehaviorResult
{
Enabled,
Disabled,
DisabledByUser,
DisabledByPolicy,
Fatal
}
}

View File

@@ -0,0 +1,12 @@
namespace Wino.Core.Domain.Enums
{
/// <summary>
/// Enumeration for the source of synchronization.
/// Right now it can either be from the client or the server.
/// </summary>
public enum SynchronizationSource
{
Client,
Server
}
}

View File

@@ -19,8 +19,9 @@
PersonalizationPage,
MessageListPage,
MailListPage,
ReadingPanePage,
ReadComposePanePage,
LanguageTimePage,
AppPreferencesPage,
SettingOptionsPage,
}
}

View File

@@ -0,0 +1,11 @@
namespace Wino.Core.Domain.Enums
{
public enum WinoServerConnectionStatus
{
None,
Connecting,
Connected,
Disconnected,
Failed
}
}

View File

@@ -1,9 +0,0 @@
using System;
namespace Wino.Core.Domain.Exceptions
{
/// <summary>
/// An exception thrown when the background task execution policies are denied for some reason.
/// </summary>
public class BackgroundTaskExecutionRequestDeniedException : Exception { }
}

View File

@@ -0,0 +1,12 @@
using System;
namespace Wino.Core.Domain.Exceptions
{
/// <summary>
/// All server crash types. Wino Server ideally should not throw anything else than this Exception type.
/// </summary>
public class WinoServerException : Exception
{
public WinoServerException(string message) : base(message) { }
}
}

View File

@@ -0,0 +1,20 @@
using System;
namespace Wino.Core.Domain.Extensions
{
public static class MimeExtensions
{
public static string GetBase64MimeMessage(this MimeKit.MimeMessage message)
{
using System.IO.MemoryStream memoryStream = new();
message.WriteTo(MimeKit.FormatOptions.Default, memoryStream);
byte[] buffer = memoryStream.GetBuffer();
int count = (int)memoryStream.Length;
return Convert.ToBase64String(buffer);
}
public static MimeKit.MimeMessage GetMimeMessageFromBase64(this string base64)
=> MimeKit.MimeMessage.Load(new System.IO.MemoryStream(Convert.FromBase64String(base64)));
}
}

View File

@@ -1,12 +0,0 @@
using System.Threading.Tasks;
namespace Wino.Core.Domain.Interfaces
{
public interface IAppInitializerService
{
string GetApplicationDataFolder();
string GetPublisherSharedFolder();
Task MigrateAsync();
}
}

View File

@@ -0,0 +1,21 @@
namespace Wino.Core.Domain.Interfaces
{
/// <summary>
/// Singleton object that holds the application data folder path and the publisher shared folder path.
/// Load the values before calling any service.
/// App data folder is used for storing files.
/// Pubhlisher cache folder is only used for database file so other apps can access it in the same package by same publisher.
/// </summary>
public interface IApplicationConfiguration
{
/// <summary>
/// Application data folder.
/// </summary>
string ApplicationDataFolderPath { get; set; }
/// <summary>
/// Publisher shared folder path.
/// </summary>
string PublisherSharedFolderPath { get; set; }
}
}

View File

@@ -1,5 +1,4 @@
using System;
using System.Threading.Tasks;
using System.Threading.Tasks;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums;
@@ -23,28 +22,12 @@ namespace Wino.Core.Domain.Interfaces
/// <summary>
/// Initial creation of token. Requires user interaction.
/// This will save token into database, but still returns for account creation
/// This will cache the token but still returns for account creation
/// since account address is required.
/// </summary>
/// <param name="expectedAccountAddress">Token cache might ask for regeneration of token for specific
/// account address. If one is provided and re-generation native token doesn't belong to this address
/// token saving to database won't happen.</param>
/// <returns>Freshly created TokenInformation..</returns>
Task<TokenInformation> GenerateTokenAsync(MailAccount account, bool saveToken);
/// <summary>
/// Required for external authorization on launched browser to continue.
/// Used for Gmail.
/// </summary>
/// <param name="authorizationResponseUri">Response's redirect uri.</param>
void ContinueAuthorization(Uri authorizationResponseUri);
/// <summary>
/// For external browser required authentications.
/// Canceling Gmail authentication dialog etc.
/// </summary>
void CancelAuthorization();
/// <summary>
/// ClientId in case of needed for authorization/authentication.
/// </summary>

View File

@@ -0,0 +1,6 @@
namespace Wino.Core.Domain.Interfaces
{
public interface IOutlookAuthenticator : IAuthenticator { }
public interface IGmailAuthenticator : IAuthenticator { }
public interface IImapAuthenticator : IAuthenticator { }
}

View File

@@ -1,16 +1,7 @@
using System.Threading.Tasks;
namespace Wino.Core.Domain.Interfaces
namespace Wino.Core.Domain.Interfaces
{
public interface IBackgroundTaskService
{
/// <summary>
/// Manages background task registrations, requests access if needed, checks the statusses of them etc.
/// </summary>
/// <exception cref="BackgroundTaskExecutionRequestDeniedException">If the access request is denied for some reason.</exception>
/// <exception cref="BackgroundTaskRegistrationFailedException">If one of the requires background tasks are failed during registration.</exception>
Task HandleBackgroundTaskRegistrations();
/// <summary>
/// Unregisters all existing background tasks. Useful for migrations.
/// </summary>

View File

@@ -0,0 +1,54 @@
using System.Threading;
using System.Threading.Tasks;
using MailKit;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.MailItem;
using Wino.Core.Domain.Models.Synchronization;
namespace Wino.Core.Domain.Interfaces
{
public interface IBaseSynchronizer
{
/// <summary>
/// Account that is assigned for this synchronizer.
/// </summary>
MailAccount Account { get; }
/// <summary>
/// Synchronizer state.
/// </summary>
AccountSynchronizerState State { get; }
/// <summary>
/// Queues a single request to be executed in the next synchronization.
/// </summary>
/// <param name="request">Request to queue.</param>
void QueueRequest(IRequestBase request);
/// <summary>
/// TODO
/// </summary>
/// <returns>Whether active synchronization is stopped or not.</returns>
bool CancelActiveSynchronization();
/// <summary>
/// Performs a full synchronization with the server with given options.
/// This will also prepares batch requests for execution.
/// Requests are executed in the order they are queued and happens before the synchronization.
/// Result of the execution queue is processed during the synchronization.
/// </summary>
/// <param name="options">Options for synchronization.</param>
/// <param name="cancellationToken">Cancellation token.</param>
/// <returns>Result summary of synchronization.</returns>
Task<SynchronizationResult> SynchronizeAsync(SynchronizationOptions options, CancellationToken cancellationToken = default);
/// <summary>
/// Downloads a single MIME message from the server and saves it to disk.
/// </summary>
/// <param name="mailItem">Mail item to download from server.</param>
/// <param name="transferProgress">Optional progress reporting for download operation.</param>
/// <param name="cancellationToken">Cancellation token.</param>
Task DownloadMissingMimeMessageAsync(IMailItem mailItem, ITransferProgress transferProgress, CancellationToken cancellationToken = default);
}
}

View File

@@ -0,0 +1,8 @@
namespace Wino.Core.Domain.Interfaces
{
/// <summary>
/// All messages that Client sends to Server and awaits a response in return.
/// For example; triggering a new synchronization request.
/// </summary>
public interface IClientMessage;
}

View File

@@ -1,16 +1,16 @@
using System.Collections.Generic;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Reader;
namespace Wino.Core.Domain.Interfaces
{
/// <summary>
/// Service to access available fonts.
/// </summary>
public interface IFontService
{
List<ReaderFontModel> GetReaderFonts();
ReaderFontModel GetCurrentReaderFont();
int GetCurrentReaderFontSize();
void ChangeReaderFont(ReaderFont font);
void ChangeReaderFontSize(int size);
/// <summary>
/// Get available fonts. Default + installed system fonts.
/// Fonts initialized only once. To refresh fonts, restart the application.
/// </summary>
List<string> GetFonts();
}
}

View File

@@ -1,10 +1,16 @@
using System.Collections.Specialized;
using Wino.Core.Domain.Models.Launch;
namespace Wino.Core.Domain.Interfaces
namespace Wino.Core.Domain.Interfaces;
public interface ILaunchProtocolService
{
public interface ILaunchProtocolService
{
object LaunchParameter { get; set; }
NameValueCollection MailtoParameters { get; set; }
}
/// <summary>
/// Used to handle toasts.
/// </summary>
object LaunchParameter { get; set; }
/// <summary>
/// Used to handle mailto links.
/// </summary>
MailToUri MailToUri { get; set; }
}

View File

@@ -2,7 +2,7 @@
{
public interface ILogInitializer
{
void SetupLogger(string logFolderPath);
void SetupLogger(string fullLogFilePath);
void RefreshLoggingLevel();
}

View File

@@ -11,7 +11,6 @@ namespace Wino.Core.Domain.Interfaces
{
Task<MailCopy> GetSingleMailItemAsync(string mailCopyId, string remoteFolderId);
Task<MailCopy> GetSingleMailItemAsync(Guid uniqueMailId);
Task<MailCopy> CreateDraftAsync(MailAccount composerAccount, MimeMessage generatedReplyMime, MimeMessage replyingMimeMessage = null, IMailItem replyingMailItem = null);
Task<List<IMailItem>> FetchMailsAsync(MailListInitializationOptions options);
/// <summary>
@@ -44,14 +43,12 @@ namespace Wino.Core.Domain.Interfaces
/// <summary>
/// Maps new mail item with the existing local draft copy.
///
/// </summary>
/// <param name="newMailCopyId"></param>
/// <param name="newDraftId"></param>
/// <param name="newThreadId"></param>
Task MapLocalDraftAsync(string newMailCopyId, string newDraftId, string newThreadId);
Task<MimeMessage> CreateDraftMimeMessageAsync(Guid accountId, DraftCreationOptions options);
Task UpdateMailAsync(MailCopy mailCopy);
/// <summary>
@@ -92,5 +89,23 @@ namespace Wino.Core.Domain.Interfaces
/// </summary>
/// <param name="folderId">Folder id to get unread mails for.</param>
Task<List<MailCopy>> GetUnreadMailsByFolderIdAsync(Guid folderId);
/// <summary>
/// Checks whether the mail exists in the folder.
/// When deciding Create or Update existing mail, we need to check if the mail exists in the folder.
/// </summary>
/// <param name="mailCopyId">MailCopy id</param>
/// <param name="folderId">Folder's local id.</param>
/// <returns>Whether mail exists in the folder or not.</returns>
Task<bool> IsMailExistsAsync(string mailCopyId, Guid folderId);
/// <summary>
/// Creates a draft MailCopy and MimeMessage based on the given options.
/// For forward/reply it would include the referenced message.
/// </summary>
/// <param name="accountId">AccountId which should have new draft.</param>
/// <param name="draftCreationOptions">Options like new email/forward/draft.</param>
/// <returns>Draft MailCopy and Draft MimeMessage as base64.</returns>
Task<(MailCopy draftMailCopy, string draftBase64MimeMessage)> CreateDraftAsync(Guid accountId, DraftCreationOptions draftCreationOptions);
}
}

View File

@@ -11,6 +11,20 @@ namespace Wino.Core.Domain.Interfaces
Task<string> GetEditorBundlePathAsync();
Task LaunchFileAsync(string filePath);
Task LaunchUriAsync(Uri uri);
/// <summary>
/// Launches the default browser with the specified uri and waits for protocol activation to finish.
/// </summary>
/// <param name="authenticator"></param>
/// <returns>Response callback from the browser.</returns>
Task<Uri> GetAuthorizationResponseUriAsync(IAuthenticator authenticator, string authorizationUri);
/// <summary>
/// Finalizes GetAuthorizationResponseUriAsync for current IAuthenticator.
/// </summary>
/// <param name="authorizationResponseUri"></param>
void ContinueAuthorization(Uri authorizationResponseUri);
bool IsAppRunning();
string GetFullAppVersion();
@@ -21,5 +35,11 @@ namespace Wino.Core.Domain.Interfaces
/// Some cryptographic shit is needed for requesting Google authentication in UWP.
/// </summary>
GoogleAuthorizationRequest GetGoogleAuthorizationRequest();
/// <summary>
/// Gets or sets the function that returns a pointer for main window hwnd for UWP.
/// This is used to display WAM broker dialog on running UWP app called by a windowless server code.
/// </summary>
Func<IntPtr> GetCoreWindowHwnd { get; set; }
}
}

View File

@@ -122,15 +122,25 @@ namespace Wino.Core.Domain.Interfaces
AppLanguage CurrentLanguage { get; set; }
/// <summary>
/// Setting: Display font for the mail reader. Not composer.
/// Setting: Display font for the mail reader.
/// </summary>
ReaderFont ReaderFont { get; set; }
string ReaderFont { get; set; }
/// <summary>
/// Setting: Font size for the mail reader. Not composer.
/// Setting: Font size for the mail reader.
/// </summary>
int ReaderFontSize { get; set; }
/// <summary>
/// Setting: Display font for the mail composer.
/// </summary>
string ComposerFont { get; set; }
/// <summary>
/// Setting: Font size for the mail composer.
/// </summary>
int ComposerFontSize { get; set; }
/// <summary>
/// Setting: Whether the navigation pane is opened on the last session or not.
/// </summary>
@@ -140,5 +150,10 @@ namespace Wino.Core.Domain.Interfaces
/// Setting: Whether the next item should be automatically selected once the current item is moved or removed.
/// </summary>
bool AutoSelectNextItem { get; set; }
/// <summary>
/// Setting: Gets or sets what should happen to server app when the client is terminated.
/// </summary>
ServerBackgroundMode ServerTerminationBehavior { get; set; }
}
}

View File

@@ -22,7 +22,7 @@ namespace Wino.Core.Domain.Interfaces
TRequest NativeRequest { get; }
}
public interface IRequestBase
public interface IRequestBase : IClientMessage
{
/// <summary>
/// Synchronizer option to perform.

View File

@@ -0,0 +1,20 @@
using System.Threading.Tasks;
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Interfaces
{
public interface IStartupBehaviorService
{
/// <summary>
/// Gets whether Wino Server is set to launch on startup or not.
/// </summary>
Task<StartupBehaviorResult> GetCurrentStartupBehaviorAsync();
/// <summary>
/// Enables/disables the current startup behavior for Wino Server.
/// </summary>
/// <param name="isEnabled">Whether to launch enabled or disabled.</param>
/// <returns>True if operation success, false if not.</returns>
Task<StartupBehaviorResult> ToggleStartupBehavior(bool isEnabled);
}
}

View File

@@ -1,19 +0,0 @@
using System;
namespace Wino.Core.Domain.Interfaces
{
/// <summary>
/// An interface for reporting progress of the synchronization.
/// Gmail does not support reporting folder progress.
/// For others, account progress is calculated based on the number of folders.
/// </summary>
public interface ISynchronizationProgress
{
/// <summary>
/// Reports account synchronization progress.
/// </summary>
/// <param name="accountId">Account id for the report.</param>
/// <param name="progress">Value. This is always between 0 - 100</param>
void AccountProgressUpdated(Guid accountId, int progress);
}
}

View File

@@ -0,0 +1,11 @@
using System;
using System.Threading.Tasks;
namespace Wino.Core.Domain.Interfaces
{
public interface ISynchronizerFactory
{
Task<IBaseSynchronizer> GetAccountSynchronizerAsync(Guid accountId);
Task InitializeAsync();
}
}

View File

@@ -1,4 +1,4 @@
namespace Wino.Core.Domain.Models.Requests
namespace Wino.Core.Domain.Interfaces
{
/// <summary>
/// Interface for all messages to report UI changes from synchronizers to UI.
@@ -6,5 +6,6 @@
/// They are sent either from processor or view models to signal some other
/// parts of the application.
/// </summary>
public interface IUIMessage;
}

View File

@@ -16,7 +16,7 @@ namespace Wino.Core.Domain.Interfaces
/// Queues new draft creation request for synchronizer.
/// </summary>
/// <param name="draftPreperationRequest">A class that holds the parameters for creating a draft.</param>
Task ExecuteAsync(DraftPreperationRequest draftPreperationRequest);
Task ExecuteAsync(DraftPreparationRequest draftPreperationRequest);
/// <summary>
/// Queues a new request for synchronizer to send a draft.

View File

@@ -0,0 +1,61 @@
using System;
using System.Threading.Tasks;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Server;
namespace Wino.Core.Domain.Interfaces
{
public interface IWinoServerConnectionManager
{
/// <summary>
/// When the connection status changes, this event will be triggered.
/// </summary>
event EventHandler<WinoServerConnectionStatus> StatusChanged;
/// <summary>
/// Gets the connection status.
/// </summary>
WinoServerConnectionStatus Status { get; }
/// <summary>
/// Launches Full Trust process (Wino Server) and awaits connection completion.
/// If connection is not established in 10 seconds, it will return false.
/// If the server process is already running, it'll connect to existing one.
/// If the server process is not running, it'll be launched and connection establishment is awaited.
/// </summary>
/// <returns>Whether connection is established or not.</returns>
Task<bool> ConnectAsync();
/// <summary>
/// Queues a new user request to be processed by Wino Server.
/// Healthy connection must present before calling this method.
/// </summary>
/// <param name="request">Request to queue for synchronizer in the server.</param>
/// <param name="accountId">Account id to queueu request for.</param>
Task QueueRequestAsync(IRequestBase request, Guid accountId);
/// <summary>
/// Returns response from server for the given request.
/// </summary>
/// <typeparam name="TResponse">Response type.</typeparam>
/// <typeparam name="TRequestType">Request type.</typeparam>
/// <param name="clientMessage">Request type.</param>
/// <returns>Response received from the server for the given TResponse type.</returns>
Task<WinoServerResponse<TResponse>> GetResponseAsync<TResponse, TRequestType>(TRequestType clientMessage) where TRequestType : IClientMessage;
/// <summary>
/// Handle for connecting to the server.
/// If the server is already running, it'll connect to existing one.
/// Callers can await this handle to wait for connection establishment.
/// </summary>
TaskCompletionSource<bool> ConnectingHandle { get; }
}
public interface IWinoServerConnectionManager<TAppServiceConnection> : IWinoServerConnectionManager, IInitializeAsync
{
/// <summary>
/// Existing connection handle to the server of TAppServiceConnection type.
/// </summary>
TAppServiceConnection Connection { get; set; }
}
}

View File

@@ -0,0 +1,11 @@
using System;
using Wino.Core.Domain.Entities;
namespace Wino.Core.Domain.Interfaces
{
public interface IWinoSynchronizerFactory : IInitializeAsync
{
IBaseSynchronizer GetAccountSynchronizer(Guid accountId);
IBaseSynchronizer CreateNewSynchronizer(MailAccount account);
}
}

View File

@@ -1,22 +1,22 @@
using Newtonsoft.Json;
using System.Text.Json.Serialization;
namespace Wino.Core.Domain.Models.AutoDiscovery
{
public class AutoDiscoveryProviderSetting
{
[JsonProperty("protocol")]
[JsonPropertyName("protocol")]
public string Protocol { get; set; }
[JsonProperty("address")]
[JsonPropertyName("address")]
public string Address { get; set; }
[JsonProperty("port")]
[JsonPropertyName("port")]
public int Port { get; set; }
[JsonProperty("secure")]
[JsonPropertyName("secure")]
public string Secure { get; set; }
[JsonProperty("username")]
[JsonPropertyName("username")]
public string Username { get; set; }
}
}

View File

@@ -1,19 +1,19 @@
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Text.Json.Serialization;
using Wino.Core.Domain.Entities;
namespace Wino.Core.Domain.Models.AutoDiscovery
{
public class AutoDiscoverySettings
{
[JsonProperty("domain")]
[JsonPropertyName("domain")]
public string Domain { get; set; }
[JsonProperty("password")]
[JsonPropertyName("password")]
public string Password { get; set; }
[JsonProperty("settings")]
[JsonPropertyName("settings")]
public List<AutoDiscoveryProviderSetting> Settings { get; set; }
/// <summary>

View File

@@ -0,0 +1,76 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Wino.Core.Domain.Models.Launch;
public class MailToUri
{
public string Subject { get; private set; }
public string Body { get; private set; }
public List<string> To { get; } = [];
public List<string> Cc { get; } = [];
public List<string> Bcc { get; } = [];
public Dictionary<string, string> OtherParameters { get; } = [];
public MailToUri(string mailToUrl)
{
ParseMailToUrl(mailToUrl);
}
private void ParseMailToUrl(string mailToUrl)
{
if (string.IsNullOrWhiteSpace(mailToUrl))
throw new ArgumentException("mailtoUrl cannot be null or empty.", nameof(mailToUrl));
if (!mailToUrl.StartsWith("mailto:", StringComparison.OrdinalIgnoreCase))
throw new ArgumentException("URL must start with 'mailto:'.", nameof(mailToUrl));
var mailToWithoutScheme = mailToUrl.Substring(7); // Remove "mailto:"
var components = mailToWithoutScheme.Split('?');
if (!string.IsNullOrEmpty(components[0]))
{
To.AddRange(components[0].Split(',').Select(email => HttpUtility.UrlDecode(email).Trim()));
}
if (components.Length <= 1)
{
return;
}
var parameters = components[1].Split('&');
foreach (var parameter in parameters)
{
var keyValue = parameter.Split('=');
if (keyValue.Length != 2)
continue;
var key = keyValue[0].ToLowerInvariant();
var value = HttpUtility.UrlDecode(keyValue[1]);
switch (key)
{
case "to":
To.AddRange(value.Split(',').Select(email => email.Trim()));
break;
case "subject":
Subject = value;
break;
case "body":
Body = value;
break;
case "cc":
Cc.AddRange(value.Split(',').Select(email => email.Trim()));
break;
case "bcc":
Bcc.AddRange(value.Split(',').Select(email => email.Trim()));
break;
default:
OtherParameters[key] = value;
break;
}
}
}
}

View File

@@ -1,40 +1,27 @@
using System.Collections.Specialized;
using System.Linq;
using MimeKit;
using MimeKit;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.Launch;
namespace Wino.Core.Domain.Models.MailItem
namespace Wino.Core.Domain.Models.MailItem;
public class DraftCreationOptions
{
public class DraftCreationOptions
{
public MimeMessage ReferenceMimeMessage { get; set; }
public MailCopy ReferenceMailCopy { get; set; }
public DraftCreationReason Reason { get; set; }
public DraftCreationReason Reason { get; set; }
#region Mailto Protocol Related Stuff
/// <summary>
/// Used for forward/reply
/// </summary>
public ReferencedMessage ReferencedMessage { get; set; }
public const string MailtoSubjectParameterKey = "subject";
public const string MailtoBodyParameterKey = "body";
public const string MailtoToParameterKey = "mailto";
public const string MailtoCCParameterKey = "cc";
public const string MailtoBCCParameterKey = "bcc";
public NameValueCollection MailtoParameters { get; set; }
private bool IsMailtoParameterExists(string parameterKey)
=> MailtoParameters != null
&& MailtoParameters.AllKeys.Contains(parameterKey);
public bool TryGetMailtoValue(string key, out string value)
{
bool valueExists = IsMailtoParameterExists(key);
value = valueExists ? MailtoParameters[key] : string.Empty;
return valueExists;
}
#endregion
}
/// <summary>
/// Used to create mails from Mailto links
/// </summary>
public MailToUri MailToUri { get; set; }
}
public class ReferencedMessage
{
public MailCopy MailCopy { get; set; }
public MimeMessage MimeMessage { get; set; }
}

View File

@@ -0,0 +1,48 @@
using System;
using System.Text.Json.Serialization;
using MimeKit;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Extensions;
namespace Wino.Core.Domain.Models.MailItem;
public class DraftPreparationRequest
{
public DraftPreparationRequest(MailAccount account, MailCopy createdLocalDraftCopy, string base64EncodedMimeMessage, MailCopy referenceMailCopy = null)
{
Account = account ?? throw new ArgumentNullException(nameof(account));
CreatedLocalDraftCopy = createdLocalDraftCopy ?? throw new ArgumentNullException(nameof(createdLocalDraftCopy));
ReferenceMailCopy = referenceMailCopy;
// MimeMessage is not serializable with System.Text.Json. Convert to base64 string.
// This is additional work when deserialization needed, but not much to do atm.
Base64LocalDraftMimeMessage = base64EncodedMimeMessage;
}
[JsonConstructor]
private DraftPreparationRequest() { }
public MailCopy CreatedLocalDraftCopy { get; set; }
public MailCopy ReferenceMailCopy { get; set; }
public string Base64LocalDraftMimeMessage { get; set; }
[JsonIgnore]
private MimeMessage createdLocalDraftMimeMessage;
[JsonIgnore]
public MimeMessage CreatedLocalDraftMimeMessage
{
get
{
createdLocalDraftMimeMessage ??= Base64LocalDraftMimeMessage.GetMimeMessageFromBase64();
return createdLocalDraftMimeMessage;
}
}
public MailAccount Account { get; }
}

View File

@@ -1,23 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
using MimeKit;
using Wino.Core.Domain.Entities;
namespace Wino.Core.Domain.Models.MailItem
{
public class DraftPreperationRequest : DraftCreationOptions
{
public DraftPreperationRequest(MailAccount account, MailCopy createdLocalDraftCopy, MimeMessage createdLocalDraftMimeMessage)
{
Account = account ?? throw new ArgumentNullException(nameof(account));
CreatedLocalDraftCopy = createdLocalDraftCopy ?? throw new ArgumentNullException(nameof(createdLocalDraftCopy));
CreatedLocalDraftMimeMessage = createdLocalDraftMimeMessage ?? throw new ArgumentNullException(nameof(createdLocalDraftMimeMessage));
}
public MailCopy CreatedLocalDraftCopy { get; set; }
public MimeMessage CreatedLocalDraftMimeMessage { get; set; }
public MailAccount Account { get; }
}
}

View File

@@ -1,7 +1,49 @@
using MimeKit;
using System.Text.Json.Serialization;
using MimeKit;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Extensions;
namespace Wino.Core.Domain.Models.MailItem
{
public record SendDraftPreparationRequest(MailCopy MailItem, MimeMessage Mime, MailItemFolder DraftFolder, MailItemFolder SentFolder, MailAccountPreferences AccountPreferences);
public class SendDraftPreparationRequest
{
public MailCopy MailItem { get; set; }
public string Base64MimeMessage { get; set; }
public MailItemFolder SentFolder { get; set; }
public MailItemFolder DraftFolder { get; set; }
public MailAccountPreferences AccountPreferences { get; set; }
public SendDraftPreparationRequest(MailCopy mailItem,
MailItemFolder sentFolder,
MailItemFolder draftFolder,
MailAccountPreferences accountPreferences,
string base64MimeMessage)
{
MailItem = mailItem;
SentFolder = sentFolder;
DraftFolder = draftFolder;
AccountPreferences = accountPreferences;
Base64MimeMessage = base64MimeMessage;
}
[JsonConstructor]
private SendDraftPreparationRequest() { }
[JsonIgnore]
private MimeMessage mime;
[JsonIgnore]
public MimeMessage Mime
{
get
{
if (mime == null)
{
mime = Base64MimeMessage.GetMimeMessageFromBase64();
}
return mime;
}
}
}
}

View File

@@ -1,8 +1,7 @@
using System;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.MailItem;
namespace Wino.Core.Domain.Models.Requests
namespace Wino.Core.Domain.Models.MailItem
{
/// <summary>
/// Defines a single rule for toggling user actions if needed.

View File

@@ -0,0 +1,12 @@
using System.Text.Json.Serialization;
namespace Wino.Core.Domain.Models.Reader;
public class ImageInfo
{
[JsonPropertyName("data")]
public string Data { get; set; }
[JsonPropertyName("name")]
public string Name { get; set; }
}

View File

@@ -1,6 +0,0 @@
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Models.Reader
{
public record ReaderFontModel(ReaderFont Font, string FontFamilyName);
}

View File

@@ -0,0 +1,16 @@
using System.Text.Json.Serialization;
namespace Wino.Core.Domain.Models.Reader
{
/// <summary>
/// Used to pass messages from the webview to the app.
/// </summary>
public class WebViewMessage
{
[JsonPropertyName("type")]
public string Type { get; set; }
[JsonPropertyName("value")]
public string Value { get; set; }
}
}

View File

@@ -0,0 +1,18 @@
using System;
using Wino.Core.Domain.Interfaces;
namespace Wino.Core.Domain.Models.Requests
{
/// <summary>
/// Encapsulates request to queue and account for synchronizer.
/// </summary>
/// <param name="AccountId"><inheritdoc/></param>
/// <param name="Request"></param>
/// <param name="Request">Prepared request for the server.</param>
/// <param name="AccountId">Whihc account to execute this request for.</param>
public record ServerRequestPackage(Guid AccountId, IRequestBase Request) : IClientMessage
{
public override string ToString() => $"Server Package: {Request.GetType().Name}";
}
}

View File

@@ -1,9 +0,0 @@
namespace Wino.Core.Domain.Models.Requests
{
// Used to pass messages from the webview to the app.
public class WebViewMessage
{
public string type { get; set; }
public string value { get; set; }
}
}

View File

@@ -0,0 +1,40 @@
using Wino.Core.Domain.Exceptions;
namespace Wino.Core.Domain.Models.Server
{
/// <summary>
/// Encapsulates responses from the Wino server.
/// Exceptions are stored separately in the Message and StackTrace properties due to serialization issues.
/// </summary>
/// <typeparam name="T">Type of the expected response.</typeparam>
public class WinoServerResponse<T>
{
public bool IsSuccess { get; set; }
public string Message { get; set; }
public T Data { get; set; }
public static WinoServerResponse<T> CreateSuccessResponse(T data)
{
return new WinoServerResponse<T>
{
IsSuccess = true,
Data = data
};
}
public static WinoServerResponse<T> CreateErrorResponse(string message)
{
return new WinoServerResponse<T>
{
IsSuccess = false,
Message = message
};
}
public void ThrowIfFailed()
{
if (!IsSuccess)
throw new WinoServerException(Message);
}
}
}

View File

@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
namespace Wino.Core.Domain.Models.Synchronization
{
@@ -27,11 +26,6 @@ namespace Wino.Core.Domain.Models.Synchronization
/// </summary>
public List<Guid> SynchronizationFolderIds { get; set; }
/// <summary>
/// A listener to be notified about the progress of the synchronization.
/// </summary>
public ISynchronizationProgress ProgressListener { get; set; }
/// <summary>
/// When doing a linked inbox synchronization, we must ignore reporting completion to the caller for each folder.
/// This Id will help tracking that. Id is unique, but this one can be the same for all sync requests

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.Text.Json.Serialization;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.MailItem;
@@ -6,8 +7,14 @@ namespace Wino.Core.Domain.Models.Synchronization
{
public class SynchronizationResult
{
protected SynchronizationResult() { }
public SynchronizationResult() { }
/// <summary>
/// Gets the new downloaded messages from synchronization.
/// Server will create notifications for these messages.
/// It's ignored in serialization. Client should not react to this.
/// </summary>
[JsonIgnore]
public IEnumerable<IMailItem> DownloadedMessages { get; set; } = new List<IMailItem>();
public SynchronizationCompletedState CompletedState { get; set; }

View File

@@ -39,6 +39,7 @@ namespace Wino.Core.Domain.Translations
AppLanguage.Chinese => "zh_CN",
AppLanguage.Spanish => "es_ES",
AppLanguage.Indonesian => "id_ID",
AppLanguage.Italian => "it_IT",
AppLanguage.Greek => "el_GR",
AppLanguage.PortugeseBrazil => "pt_BR",
_ => "en_US",

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Rename Linked Account",
"DialogMessage_UnlinkAccountsConfirmationMessage": "This operation will not delete your accounts but only break the link for shared folder connections. Do you want to continue?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Unlink Accounts",
"DialogMessage_EmptySubjectConfirmation": "Missin Subject",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Message has no subject. Do you want to continue?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Use system setting",
"ElementTheme_Light": "Light mode",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Results",
"Right": "Right",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "up to date",
"SynchronizationFolderReport_Failed": "synchronization is failed",
"SearchBarPlaceholder": "Search",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.",
"SettingsManageAccountSettings_Title": "Manage Account Settings",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalization",
"SettingsPrivacyPolicy_Description": "Review privacy policy.",
"SettingsPrivacyPolicy_Title": "Privacy Policy",
"SettingsReadingPane_Description": "Mail rendering options.",
"SettingsReadingPane_Title": "Reading Pane",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Default Reader Font",
"SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.",
"SettingsFontFamily_Title": "Font Family",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Přejmenovat propojený účet",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Tato operace neodstraní vaše mailové účty, ale pouze zruší jejich propojení. Chcete pokračovat?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Rozpojit účty",
"DialogMessage_EmptySubjectConfirmation": "Chybějící Předmět",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Zpráva nemá Předmět. Chcete pokračovat?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Použít nastavení systému",
"ElementTheme_Light": "Světlý režim",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Nastavení poštovní schránky se nepodařilo najít.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool selhal.",
"Exception_AuthenticationCanceled": "Ověřování bylo zrušeno",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protokoly jsou k dispozici pro diagnostiku.",
"Results": "Výsledky",
"Right": "Vpravo",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "Aktuální",
"SynchronizationFolderReport_Failed": "Synchronizace se nezdařila.",
"SearchBarPlaceholder": "Vyhledávaný výraz",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Změnit, zda by složky účtu měly být vnořeny uvnitř nabídky účtu či nikoli. Vypněte tento režim, pokud se vám líbí starý systém menu Windows Mail",
"SettingsManageAccountSettings_Description": "Oznámení, podpisy, synchronizace a další nastavení pro jednotlivé účty.",
"SettingsManageAccountSettings_Title": "Správa nastavení účtů",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Změna pořadí účtů",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Přesunout položky pro přidání nového propojení účtů nebo odstranění již existujícího.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Přizpůsobení",
"SettingsPrivacyPolicy_Description": "Zkontrolujte zásady ochrany osobních údajů.",
"SettingsPrivacyPolicy_Title": "Zásady ochrany osobních údajů",
"SettingsReadingPane_Description": "Možnosti vykreslování e-mailů.",
"SettingsReadingPane_Title": "Panel s vykreskeným e-mailem",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Výchozí font pro vykreslení e-mailu",
"SettingsReaderFontFamily_Description": "Změna výchozího fontu a jeho velikosti pro vykreslení e-mailu",
"SettingsFontFamily_Title": "Font",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Rename Linked Account",
"DialogMessage_UnlinkAccountsConfirmationMessage": "This operation will not delete your accounts but only break the link for shared folder connections. Do you want to continue?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Unlink Accounts",
"DialogMessage_EmptySubjectConfirmation": "Missin Subject",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Message has no subject. Do you want to continue?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Use system setting",
"ElementTheme_Light": "Light mode",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Results",
"Right": "Right",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "up to date",
"SynchronizationFolderReport_Failed": "synchronization is failed",
"SearchBarPlaceholder": "Search",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.",
"SettingsManageAccountSettings_Title": "Manage Account Settings",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalization",
"SettingsPrivacyPolicy_Description": "Review privacy policy.",
"SettingsPrivacyPolicy_Title": "Privacy Policy",
"SettingsReadingPane_Description": "Mail rendering options.",
"SettingsReadingPane_Title": "Reading Pane",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Default Reader Font",
"SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.",
"SettingsFontFamily_Title": "Font Family",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -1,20 +1,20 @@
{
"AccountCreationDialog_Completed": "alles erledigt",
"AccountCreationDialog_Initializing": "initialisiere",
"AccountCreationDialog_Initializing": "Initialisierung",
"AccountCreationDialog_PreparingFolders": "Es werden Ordner-Informationen gesammelt.",
"AccountCreationDialog_SigninIn": "Kontoinformationen wurden gespeichert.",
"AccountEditDialog_Message": "Konto-Name",
"AccountEditDialog_Title": "Konto bearbeiten",
"AccountPickerDialog_Title": "Konto auswählen",
"AccountSettingsDialog_AccountName": "Sender Display Name",
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe",
"AccountSettingsDialog_AccountName": "Absender-Anzeigename",
"AccountSettingsDialog_AccountNamePlaceholder": "z.B. Max Mustermann",
"AddHyperlink": "Hinzufügen",
"AutoDiscoveryProgressMessage": "Es wird nach Mail-Einstellungen gesucht...",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Erweiterte Konfiguration",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Die Zugangsdaten werden nur lokal auf Ihrem Computer gespeichert.",
"BasicIMAPSetupDialog_Description": "Einige Konten benötigen zusätzliche Schritte zum Anmelden",
"BasicIMAPSetupDialog_DisplayName": "Anzeigename",
"BasicIMAPSetupDialog_DisplayNamePlaceholder": "z.B. John Doe",
"BasicIMAPSetupDialog_DisplayNamePlaceholder": "z.B. Max Mustermann",
"BasicIMAPSetupDialog_LearnMore": "Mehr erfahren",
"BasicIMAPSetupDialog_MailAddress": "E-Mail Adresse",
"BasicIMAPSetupDialog_MailAddressPlaceholder": "johndoe@fabrikam.com",
@@ -27,11 +27,11 @@
"Buttons_Close": "Schließen",
"Buttons_Create": "Erstellen",
"Buttons_CreateAccount": "Konto erstellen",
"Buttons_Copy": "Copy",
"Buttons_Copy": "Kopieren",
"Buttons_Delete": "Löschen",
"Buttons_Edit": "Edit",
"Buttons_Edit": "Bearbeiten",
"Buttons_Discard": "Verwerfen",
"Buttons_EnableImageRendering": "An",
"Buttons_EnableImageRendering": "Aktivieren",
"Buttons_No": "Nein",
"Buttons_Open": "Öffnen",
"Buttons_Purchase": "Kaufen",
@@ -40,7 +40,7 @@
"Buttons_SaveConfiguration": "Einstellungen speichern",
"Buttons_Share": "Teilen",
"Buttons_SignIn": "Anmelden",
"Buttons_TryAgain": "Try Again",
"Buttons_TryAgain": "Wiederholen",
"Buttons_Yes": "Ja",
"Center": "Zentriert",
"ComingSoon": "Bald verfügbar...",
@@ -49,8 +49,8 @@
"ComposerTo": "An: ",
"ClipboardTextCopied_Message": "{0} in die Zwischenablage kopiert.",
"ClipboardTextCopied_Title": "Kopiert",
"ClipboardTextCopyFailed_Message": "Konnte {0} nicht in die Zwischenablage kopieren.",
"ComposerToPlaceholder": "klicke Enter, um Adressen einzugeben",
"ClipboardTextCopyFailed_Message": "{0} konnte nicht in die Zwischenablage kopiert werden.",
"ComposerToPlaceholder": "Klicke Enter um Adressen einzugeben",
"ComposerAttachmentsDropZone_Message": "Dateien hier ablegen",
"ComposerImagesDropZone_Message": "Bilder hier ablegen",
"ComposerAttachmentsDragDropAttach_Message": "Anhängen",
@@ -58,7 +58,7 @@
"CustomThemeBuilder_AccentColorTitle": "Akzentfarbe",
"CustomThemeBuilder_PickColor": "Auswählen",
"CustomThemeBuilder_ThemeNameDescription": "Eindeutiger Name für Ihr benutzerdefiniertes Thema.",
"CustomThemeBuilder_ThemeNameTitle": "Name des Designs",
"CustomThemeBuilder_ThemeNameTitle": "Name des Themas",
"CustomThemeBuilder_Title": "Benutzerdefinierter Theme-Generator",
"CustomThemeBuilder_WallpaperDescription": "Eigenen Hintergrund für Wino festlegen",
"CustomThemeBuilder_WallpaperTitle": "Eigenen Hintergrund festlegen",
@@ -82,10 +82,10 @@
"DialogMessage_RenameLinkedAccountsTitle": "Verknüpftes Konto umbenennen",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Dieser Vorgang wird Ihre Konten nicht löschen, sondern nur den Link für freigegebene Ordnerverbindungen zerstören. Möchten Sie fortfahren?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Konten trennen",
"DialogMessage_EmptySubjectConfirmation": "Betreff fehlt",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Nachricht hat keinen Betreff. Möchten Sie fortfahren?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
"DialogMessage_RenameFolderTitle": "Ordner umbenennen",
"DialogMessage_RenameFolderMessage": "Geben Sie einen neuen Namen für diesen Ordner ein",
"DialogMessage_UnsubscribeConfirmationTitle": "Abmelden",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "Möchten Sie den Empfang von Nachrichten von {0} beenden?",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Um Nachrichten von {0} nicht mehr zu erhalten, gehen Sie auf die Webseite, um sich abzumelden.",
@@ -100,12 +100,13 @@
"EditorToolbarOption_Insert": "Einfügen",
"EditorToolbarOption_None": "Keine",
"EditorToolbarOption_Options": "Optionen",
"EditorTooltip_WebViewEditor": "Use web view editor",
"EditorTooltip_WebViewEditor": "Web-View Editor verwenden",
"ElementTheme_Dark": "Dunkler Modus",
"ElementTheme_Default": "Systemeinstellung verwenden",
"ElementTheme_Light": "Heller Modus",
"Emoji": "Emoji",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Mailbox-Einstellungen konnten nicht gefunden werden.",
"Exception_ImapClientPoolFailed": "IMAP Client-Pool fehlgeschlagen.",
"Exception_AuthenticationCanceled": "Authentifizierung abgebrochen",
"Exception_CustomThemeExists": "Dieses Thema existiert bereits.",
@@ -176,8 +177,8 @@
"IMAPSetupDialog_UseSameConfig": "Den gleichen Benutzernamen und das gleiche Passwort für das Senden von E-Mails verwenden",
"IMAPSetupDialog_Username": "Benutzername",
"IMAPSetupDialog_UsernamePlaceholder": "johndoe, johndoe@fabrikam.com, domain/johndoe",
"IMAPSetupDialog_ConnectionFailedTitle": "Connection Failed",
"IMAPSetupDialog_ConnectionFailedMessage": "IMAP connection failed.",
"IMAPSetupDialog_ConnectionFailedTitle": "Verbindung fehlgeschlagen",
"IMAPSetupDialog_ConnectionFailedMessage": "IMAP Verbindung fehlgeschlagen.",
"ImageRenderingDisabled": "Bilddarstellung ist für diese Nachricht deaktiviert.",
"InfoBarAction_Enable": "Aktivieren",
"InfoBarMessage_SynchronizationDisabledFolder": "Dieser Ordner wird nicht synchronisiert.",
@@ -332,9 +333,10 @@
"ProviderDetail_Gmail_Description": "Google-Konto",
"ProviderDetail_IMAP_Description": "Eigener IMAP/SMTP Server",
"ProviderDetail_IMAP_Title": "IMAP-Server",
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"ProtocolLogAvailable_Message": "Protokolle zur Diagnose sind verfügbar.",
"Results": "Ergebnisse",
"Right": "Rechts",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "aktuell",
"SynchronizationFolderReport_Failed": "Synchronisierung fehlgeschlagen",
"SearchBarPlaceholder": "Suche",
@@ -418,8 +420,21 @@
"SettingsFolderMenuStyle_Description": "Ändern Sie, ob Kontoordner in einem Konten-Menüpunkt verschachtelt werden sollen oder nicht. Schalten Sie dies aus, wenn Sie das alte Menüsystem in Windows Mail mögen.",
"SettingsManageAccountSettings_Description": "Benachrichtigungen, Signaturen, Synchronisierung und andere Einstellungen pro Konto.",
"SettingsManageAccountSettings_Title": "Kontoeinstellungen verwalten",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Konten neu ordnen",
"SettingsReorderAccounts_Description": "Ändern Sie die Konten-Reihenfolge in der Kontenliste.",
"SettingsManageLink_Description": "Elemente verschieben, um neuen Link hinzuzufügen oder bestehenden Link zu entfernen.",
"SettingsManageLink_Title": "Link verwalten",
"SettingsMarkAsRead_Description": "Ändern Sie, was mit dem ausgewählten Element passieren soll.",
@@ -440,12 +455,14 @@
"SettingsPersonalizationMailDisplayCompactMode": "Kompakter Modus",
"SettingsPersonalizationMailDisplayMediumMode": "Mittlerer Modus",
"SettingsPersonalizationMailDisplaySpaciousMode": "Geräumiger Modus",
"SettingsPersonalization_Description": "Ändern Sie das Aussehen von Wino nach Ihren Belieben.",
"SettingsPersonalization_Description": "Ändern Sie das Aussehen von Wino nach Ihren Vorlieben.",
"SettingsPersonalization_Title": "Personalisierung",
"SettingsPrivacyPolicy_Description": "Datenschutzrichtlinie ansehen.",
"SettingsPrivacyPolicy_Title": "Datenschutzerklärung",
"SettingsReadingPane_Description": "Mail-Darstellungs-Optionen.",
"SettingsReadingPane_Title": "Lesefenster",
"SettingsReader_Title": "Leseansicht",
"SettingsComposer_Title": "Verfasser",
"SettingsReadComposePane_Description": "Schriftarten, externe Inhalte.",
"SettingsReadComposePane_Title": "Leseansicht & Verfasser",
"SettingsReaderFont_Title": "Standard Lese-Schriftart",
"SettingsReaderFontFamily_Description": "Ändern Sie die Standardschriftart und Schriftgröße für das Lesen von Mails.",
"SettingsFontFamily_Title": "Schriftart",
@@ -463,7 +480,7 @@
"SettingsShowSenderPictures_Title": "Absender-Profilbilder anzeigen",
"SettingsPrefer24HourClock_Title": "Uhr-Format in 24 Stunden anzeigen",
"SettingsPrefer24HourClock_Description": "Empfangszeiten für Mails werden im 24-Stunden-Format statt 12 (AM/PM) angezeigt",
"SettingsSignature_Description": "Manage account signatures",
"SettingsSignature_Description": "Kontosignaturen verwalten",
"SettingsSignature_Title": "Signatur",
"SettingsStartupItem_Description": "Primäres Konto zum Laden des Posteingangs beim Starten.",
"SettingsStartupItem_Title": "Startelement",
@@ -507,19 +524,29 @@
"WinoUpgradeMessage": "Auf unbegrenzte Konten upgraden",
"WinoUpgradeRemainingAccountsMessage": "{0} von {1} kostenlosen Konten verwendet.",
"Yesterday": "Gestern",
"SignatureEditorDialog_Title": "Signature Editor",
"SignatureEditorDialog_SignatureName_Placeholder": "Name your signature",
"SignatureEditorDialog_SignatureName_TitleNew": "Signature name",
"SignatureEditorDialog_SignatureName_TitleEdit": "Current signature name: {0}",
"SignatureDeleteDialog_Title": "Delete signature",
"SignatureDeleteDialog_Message": "Are you sure you want to delete \"{0}\" signature?",
"SettingsSignature_ForNewMessages_Title": "For New Messages",
"SettingsSignature_ForFollowingMessages_Title": "For Replies/Forwards",
"SettingsSignature_SignatureDefaults": "Signature defaults",
"SettingsSignature_Signatures": "Signatures",
"SettingsSignature_AddCustomSignature_Title": "Add custom signature",
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SignatureEditorDialog_Title": "Signatur-Editor",
"SignatureEditorDialog_SignatureName_Placeholder": "Fügen Sie Ihre Signatur ein",
"SignatureEditorDialog_SignatureName_TitleNew": "Signaturname",
"SignatureEditorDialog_SignatureName_TitleEdit": "Aktueller Signaturname: {0}",
"SignatureDeleteDialog_Title": "Signatur löschen",
"SignatureDeleteDialog_Message": "Wollen Sie Signatur \"{0}\" wirklich löschen?",
"SettingsSignature_ForNewMessages_Title": "Für neue Nachrichten",
"SettingsSignature_ForFollowingMessages_Title": "Für Antworten/Weiterleitungen",
"SettingsSignature_SignatureDefaults": "Standard-Signaturen",
"SettingsSignature_Signatures": "Signaturen",
"SettingsSignature_AddCustomSignature_Title": "Eigene Signatur hinzufügen",
"SettingsSignature_AddCustomSignature_Button": "Signatur hinzufügen",
"SettingsSignature_EditSignature_Title": "Signatur bearbeiten",
"SettingsSignature_DeleteSignature_Title": "Signatur löschen",
"SettingsSignature_NoneSignatureName": "Keine",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -52,7 +52,7 @@
"ClipboardTextCopyFailed_Message": "Η αντιγραφή του {0} στο πρόχειρο απέτυχε.",
"ComposerToPlaceholder": "κάντε κλικ στο enter για να εισάγετε διευθύνσεις",
"ComposerAttachmentsDropZone_Message": "Τοποθετήστε το αρχείο σας εδώ",
"ComposerImagesDropZone_Message": "Drop your images here",
"ComposerImagesDropZone_Message": "Αφήστε τις εικόνες σας εδώ",
"ComposerAttachmentsDragDropAttach_Message": "Επισύναψη",
"CustomThemeBuilder_AccentColorDescription": "Ορίστε προσαρμοσμένο χρώμα έμφασης αν θέλετε. Αν δεν επιλέξετε κάποιο χρώμα θα χρησιμοποιηθεί το χρώμα έμφασης των Windows.",
"CustomThemeBuilder_AccentColorTitle": "Χρώμα έμφασης",
@@ -82,10 +82,10 @@
"DialogMessage_RenameLinkedAccountsTitle": "Μετονομασία Συνδεδεμένου Λογαριασμού",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Αυτή η λειτουργία δεν θα διαγράψει τους λογαριασμούς σας αλλά, απλά θα διαλύσει το σύνδεσμο για συνδέσεις κοινόχρηστων φακέλων. Θέλετε να συνεχίσετε;",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Αποδέσμευση Λογαριασμού",
"DialogMessage_EmptySubjectConfirmation": "Χωρίς Θέμα",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Το μήνυμα δεν έχει θέμα. Θέλετε να συνεχίσετε;",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
"DialogMessage_RenameFolderTitle": "Μετονομασία Φακέλου",
"DialogMessage_RenameFolderMessage": "Εισάγετε νέο όνομα για αυτόν το φάκελο",
"DialogMessage_UnsubscribeConfirmationTitle": "Κατάργηση εγγραφής",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "Θέλετε να σταματήσετε να λαμβάνετε μηνύματα από το {0};",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Για να σταματήσετε να λαμβάνετε μηνύματα από το {0}, μεταβείτε στην ιστοσελίδα τους για να καταργήσετε την εγγραφή σας.",
@@ -100,11 +100,12 @@
"EditorToolbarOption_Insert": "Εισαγωγή",
"EditorToolbarOption_None": "Κανένα",
"EditorToolbarOption_Options": "Επιλογές",
"EditorTooltip_WebViewEditor": "Use web view editor",
"EditorTooltip_WebViewEditor": "Χρήση επεξεργαστή προβολής ιστού",
"ElementTheme_Dark": "Σκοτεινή λειτουργία",
"ElementTheme_Default": "Χρήση ρυθμίσεων συστήματος",
"ElementTheme_Light": "Ανοιχτή λειτουργία",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Δεν βρέθηκαν οι ρυθμίσεις γραμματοκιβωτίου.",
"Exception_ImapClientPoolFailed": "Αποτυχία συγκέντρωσης πελάτη IMAP.",
"Exception_AuthenticationCanceled": "Η ταυτοποίηση ακυρώθηκε",
@@ -325,7 +326,7 @@
"PaneLengthOption_ExtraLarge": "Πολύ Μεγάλο",
"PaneLengthOption_Large": "Μεγάλο",
"PaneLengthOption_Medium": "Μεσαίο",
"PaneLengthOption_Micro": "Μικροακοπικό",
"PaneLengthOption_Micro": "Μικροσκοπικό",
"PaneLengthOption_Small": "Μικρό",
"Photos": "Φωτογραφίες",
"PreparingFoldersMessage": "Προετοιμασία φακέλων",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Τα αρχεία καταγραφής πρωτοκόλλου είναι διαθέσιμα για διαγνωστικά.",
"Results": "Αποτελέσματα",
"Right": "Δεξιά",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "ενημερωμένο",
"SynchronizationFolderReport_Failed": "ο συγχρονισμός απέτυχε",
"SearchBarPlaceholder": "Αναζήτηση",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Επιλέξτε αν οι φάκελοι λογαριασμού θα πρέπει να είναι εμφωλευμένοι μέσα σε ένα στοιχείο μενού του λογαριασμού ή όχι. Ενεργοποιήστε αυτήν την επιλογή αν σας αρέσει το παλιό σύστημα μενού στο Windows Mail",
"SettingsManageAccountSettings_Description": "Ειδοποιήσεις, υπογραφές, συγχρονισμός και άλλες ρυθμίσεις ανά λογαριασμό.",
"SettingsManageAccountSettings_Title": "Ρυθμίσεις Διαχείρισης Λογαριασμού",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Αναδιάταξη Λογαριασμών",
"SettingsReorderAccounts_Description": "Αλλάξτε τη σειρά των λογαριασμών στη λίστα λογαριασμών.",
"SettingsManageLink_Description": "Μετακίνηση αντικειμένων για προσθήκη νέου συνδέσμου ή κατάργηση υπάρχοντος συνδέσμου.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Εξατομίκευση",
"SettingsPrivacyPolicy_Description": "Εξέταση πολιτικής απορρήτου.",
"SettingsPrivacyPolicy_Title": "Πολιτική Απορρήτου",
"SettingsReadingPane_Description": "Επιλογές αποτύπωσης αλληλογραφίας.",
"SettingsReadingPane_Title": "Πίνακας Ανάγνωσης",
"SettingsReader_Title": "Αναγνώστης",
"SettingsComposer_Title": "Συνθέτης",
"SettingsReadComposePane_Description": "Γραμματοσειρές, εξωτερικό περιεχόμενο.",
"SettingsReadComposePane_Title": "Αναγνώστης & Συνθέτης",
"SettingsReaderFont_Title": "Προεπιλεγμένη Γραμματοσειρά Αναγνώστη",
"SettingsReaderFontFamily_Description": "Αλλάξτε την προεπιλεγμένη οικογένεια γραμματοσειρών και το μέγεθος γραμματοσειράς για την ανάγνωση μηνυμάτων.",
"SettingsFontFamily_Title": "Γραμματοσειρά",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Προσθήκη υπογραφής",
"SettingsSignature_EditSignature_Title": "Επεξεργασία υπογραφής",
"SettingsSignature_DeleteSignature_Title": "Διαγραφή υπογραφής",
"SettingsSignature_NoneSignatureName": "Καμία"
"SettingsSignature_NoneSignatureName": "Καμία",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Rename Linked Account",
"DialogMessage_UnlinkAccountsConfirmationMessage": "This operation will not delete your accounts but only break the link for shared folder connections. Do you want to continue?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Unlink Accounts",
"DialogMessage_EmptySubjectConfirmation": "Missin Subject",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Message has no subject. Do you want to continue?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -100,11 +100,12 @@
"EditorToolbarOption_Insert": "Insert",
"EditorToolbarOption_None": "None",
"EditorToolbarOption_Options": "Options",
"EditorTooltip_WebViewEditor": "Use web view editor",
"EditorTooltip_WebViewEditor": "Use web view editor",
"ElementTheme_Dark": "Dark mode",
"ElementTheme_Default": "Use system setting",
"ElementTheme_Light": "Light mode",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Results",
"Right": "Right",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "up to date",
"SynchronizationFolderReport_Failed": "synchronization is failed",
"SearchBarPlaceholder": "Search",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.",
"SettingsManageAccountSettings_Title": "Manage Account Settings",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalization",
"SettingsPrivacyPolicy_Description": "Review privacy policy.",
"SettingsPrivacyPolicy_Title": "Privacy Policy",
"SettingsReadingPane_Description": "Mail rendering options.",
"SettingsReadingPane_Title": "Reading Pane",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Default Reader Font",
"SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.",
"SettingsFontFamily_Title": "Font Family",
@@ -521,6 +538,16 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -40,7 +40,7 @@
"Buttons_SaveConfiguration": "Guardar Configuración",
"Buttons_Share": "Compartir",
"Buttons_SignIn": "Iniciar Sesión",
"Buttons_TryAgain": "Try Again",
"Buttons_TryAgain": "Inténtalo de nuevo",
"Buttons_Yes": "Sí",
"Center": "Centrar",
"ComingSoon": "Próximamente...",
@@ -52,7 +52,7 @@
"ClipboardTextCopyFailed_Message": "Error al copiar {0} al portapapeles.",
"ComposerToPlaceholder": "presiona enter para ingresar direcciones",
"ComposerAttachmentsDropZone_Message": "Suelta tus archivos aquí",
"ComposerImagesDropZone_Message": "Drop your images here",
"ComposerImagesDropZone_Message": "Suelta tus imágenes aquí",
"ComposerAttachmentsDragDropAttach_Message": "Adjuntar",
"CustomThemeBuilder_AccentColorDescription": "Establece un color de acento si lo deseas. Si no seleccionas uno se usará tu color de acento de Windows.",
"CustomThemeBuilder_AccentColorTitle": "Color de acento",
@@ -82,10 +82,10 @@
"DialogMessage_RenameLinkedAccountsTitle": "Renombrar cuenta vinculada",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Esta operación no eliminará sus cuentas pero sólo romperá el enlace para conexiones de carpetas compartidas. ¿Desea continuar?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Desvincular Cuentas",
"DialogMessage_EmptySubjectConfirmation": "Sin Asunto",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "El mensaje no tiene asunto. ¿Desea continuar?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
"DialogMessage_RenameFolderTitle": "Renombrar carpeta",
"DialogMessage_RenameFolderMessage": "Introduce un nombre nuevo para esta carpeta",
"DialogMessage_UnsubscribeConfirmationTitle": "Darse de baja",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "¿Quieres dejar de recibir mensajes de {0}?",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Para dejar de recibir mensajes de {0}, ve a su sitio web para darse de baja.",
@@ -100,12 +100,13 @@
"EditorToolbarOption_Insert": "Insertar",
"EditorToolbarOption_None": "Ninguno",
"EditorToolbarOption_Options": "Opciones",
"EditorTooltip_WebViewEditor": "Use web view editor",
"EditorTooltip_WebViewEditor": "Usar editor web",
"ElementTheme_Dark": "Modo oscuro",
"ElementTheme_Default": "Usar configuración del sistema",
"ElementTheme_Light": "Modo claro",
"Emoji": "Emoji",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "No se pudo encontrar la configuración del buzón.",
"Exception_ImapClientPoolFailed": "Cola Cliente IMAP falló.",
"Exception_AuthenticationCanceled": "Autenticación cancelada",
"Exception_CustomThemeExists": "Este tema ya existe.",
@@ -176,8 +177,8 @@
"IMAPSetupDialog_UseSameConfig": "Usar el mismo correo y contraseña para enviar correos",
"IMAPSetupDialog_Username": "Nombre de usuario",
"IMAPSetupDialog_UsernamePlaceholder": "fulanomengano, fulanomengano@fabrikam.com, dominio/fulanomengano",
"IMAPSetupDialog_ConnectionFailedTitle": "Connection Failed",
"IMAPSetupDialog_ConnectionFailedMessage": "IMAP connection failed.",
"IMAPSetupDialog_ConnectionFailedTitle": "Error al conectar",
"IMAPSetupDialog_ConnectionFailedMessage": "Conexión IMAP fallida.",
"ImageRenderingDisabled": "El procesamiento de imágenes está desactivado para este mensaje.",
"InfoBarAction_Enable": "Activar",
"InfoBarMessage_SynchronizationDisabledFolder": "Esta carpeta está desactivada para la sincronización.",
@@ -332,9 +333,10 @@
"ProviderDetail_Gmail_Description": "Cuenta de Google",
"ProviderDetail_IMAP_Description": "Servidor IMAP/SMTP personalizado",
"ProviderDetail_IMAP_Title": "Servidor IMAP",
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"ProtocolLogAvailable_Message": "Los registros de protocolo están disponibles para el diagnóstico.",
"Results": "Resultados",
"Right": "Derecha",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "actualizado",
"SynchronizationFolderReport_Failed": "sincronización fallida",
"SearchBarPlaceholder": "Buscar",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Cambia si las carpetas de la cuenta deben anidarse dentro de un elemento de menú de la cuenta o no. Desactiva esto si te gusta el antiguo sistema de menú de Windows Mail",
"SettingsManageAccountSettings_Description": "Notificaciones, firmas, sincronización y otros ajustes por cuenta.",
"SettingsManageAccountSettings_Title": "Administrar ajustes de cuenta",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reordenar cuentas",
"SettingsReorderAccounts_Description": "Cambiar el orden de las cuentas en la lista de cuentas.",
"SettingsManageLink_Description": "Mover elementos para añadir un nuevo enlace o eliminar el enlace existente.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalización",
"SettingsPrivacyPolicy_Description": "Revisar la Política de Privacidad.",
"SettingsPrivacyPolicy_Title": "Políticas de privacidad",
"SettingsReadingPane_Description": "Opciones de renderizado de correo.",
"SettingsReadingPane_Title": "Panel de lectura",
"SettingsReader_Title": "Lector",
"SettingsComposer_Title": "Editor",
"SettingsReadComposePane_Description": "Fuentes, contenido externo.",
"SettingsReadComposePane_Title": "Lector y Editor",
"SettingsReaderFont_Title": "Fuente por defecto del Lector",
"SettingsReaderFontFamily_Description": "Cambie el tamaño por defecto de la familia de fuentes y del tipo de letra para escribir correos.",
"SettingsFontFamily_Title": "Familia tipográfica",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Añadir firma",
"SettingsSignature_EditSignature_Title": "Editar firma",
"SettingsSignature_DeleteSignature_Title": "Eliminar firma",
"SettingsSignature_NoneSignatureName": "Ninguno"
"SettingsSignature_NoneSignatureName": "Ninguno",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -0,0 +1,552 @@
{
"AccountCreationDialog_Completed": "Valmis",
"AccountCreationDialog_Initializing": "valmistellaan",
"AccountCreationDialog_PreparingFolders": "Valmistellaan kansioita",
"AccountCreationDialog_SigninIn": "Tallennetaan tilin tietoja.",
"AccountEditDialog_Message": "Tilin nimi",
"AccountEditDialog_Title": "Muokkaa tiliä",
"AccountPickerDialog_Title": "Valitse tili",
"AccountSettingsDialog_AccountName": "Lähettäjän nimi",
"AccountSettingsDialog_AccountNamePlaceholder": "esim. Matti Meikäläinen",
"AddHyperlink": "Lisää",
"AutoDiscoveryProgressMessage": "Haetaan sähköpostiasetuksia...",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Lisäasetukset",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Käyttäjätietosi tallennetaan ainoastaan paikallisesti tietokoneellesi.",
"BasicIMAPSetupDialog_Description": "Jotkin tilit vaativat lisätoimia sisäänkirjautumista varten",
"BasicIMAPSetupDialog_DisplayName": "Nimi",
"BasicIMAPSetupDialog_DisplayNamePlaceholder": "esim. Matti Meikäläinen",
"BasicIMAPSetupDialog_LearnMore": "Lue lisää",
"BasicIMAPSetupDialog_MailAddress": "Sähköpostiosoite",
"BasicIMAPSetupDialog_MailAddressPlaceholder": "mattimeikalainen@fabrikam.com",
"BasicIMAPSetupDialog_Password": "Salasana",
"BasicIMAPSetupDialog_Title": "IMAP-tili",
"Buttons_AddAccount": "Lisää tili",
"Buttons_ApplyTheme": "Vaihda teemaa",
"Buttons_Browse": "Selaa",
"Buttons_Cancel": "Peruuta",
"Buttons_Close": "Sulje",
"Buttons_Create": "Luo",
"Buttons_CreateAccount": "Luo tili",
"Buttons_Copy": "Kopioi",
"Buttons_Delete": "Poista",
"Buttons_Edit": "Muokkaa",
"Buttons_Discard": "Hylkää",
"Buttons_EnableImageRendering": "Ota käyttöön",
"Buttons_No": "Ei",
"Buttons_Open": "Avaa",
"Buttons_Purchase": "Osta",
"Buttons_RateWino": "Arvostele Wino",
"Buttons_Save": "Tallenna",
"Buttons_SaveConfiguration": "Tallenna asetukset",
"Buttons_Share": "Jaa",
"Buttons_SignIn": "Kirjaudu sisään",
"Buttons_TryAgain": "Yritä uudelleen",
"Buttons_Yes": "Kyllä",
"Center": "Keskitetty",
"ComingSoon": "Tulossa pian...",
"ComposerFrom": "Lähettäjä: ",
"ComposerSubject": "Aihe: ",
"ComposerTo": "Vastaanottaja: ",
"ClipboardTextCopied_Message": "{0} kopioitu leikepöydälle.",
"ClipboardTextCopied_Title": "Kopioitu",
"ClipboardTextCopyFailed_Message": "{0} kopioiminen leikepöydälle epäonnistui.",
"ComposerToPlaceholder": "paina enter syöttääksesi osoitteita",
"ComposerAttachmentsDropZone_Message": "Raahaa tiedostosi tähän",
"ComposerImagesDropZone_Message": "Raahaa kuvasi tähän",
"ComposerAttachmentsDragDropAttach_Message": "Liitä",
"CustomThemeBuilder_AccentColorDescription": "Aseta korostusväri. Mikäli et valitse väriä, käytetään Windowsin korostusväriä.",
"CustomThemeBuilder_AccentColorTitle": "Korostusväri",
"CustomThemeBuilder_PickColor": "Valitse",
"CustomThemeBuilder_ThemeNameDescription": "Yksilöllinen nimi omalle teemallesi.",
"CustomThemeBuilder_ThemeNameTitle": "Teeman nimi",
"CustomThemeBuilder_Title": "Teeman luoja",
"CustomThemeBuilder_WallpaperDescription": "Aseta mukautettu taustakuva Winolle",
"CustomThemeBuilder_WallpaperTitle": "Aseta mukautettu taustakuva",
"DialogMessage_AccountLimitMessage": "Sinulla on jo suurin sallittu määrä tilejä.\nHaluatko ostaa 'Rajattomat Tilit' lisäosan jatkaaksesi?",
"DialogMessage_AccountLimitTitle": "Suurin sallittu tilien määrä saavutettu",
"DialogMessage_CleanupFolderMessage": "Haluatko pysyvästi poistaa kaikki sähköpostit tästä kansiosta?",
"DialogMessage_CleanupFolderTitle": "Siivoa Kansio",
"DialogMessage_ComposerMissingRecipientMessage": "Viestillä ei ole vastaanottajaa.",
"DialogMessage_ComposerValidationFailedTitle": "Varmennus epäonnistui",
"DialogMessage_CreateLinkedAccountMessage": "Anna linkille uusi nimi. Tilit yhdistetään tämän nimen alle.",
"DialogMessage_CreateLinkedAccountTitle": "Linkitettyjen tilien nimi",
"DialogMessage_DeleteAccountConfirmationMessage": "Poistetaanko {0}?",
"DialogMessage_DeleteAccountConfirmationTitle": "Kaikki tämän tilin tiedot poistetaan pysyvästi.",
"DialogMessage_DiscardDraftConfirmationMessage": "Luonnos hylätään. Haluatko jatkaa?",
"DialogMessage_DiscardDraftConfirmationTitle": "Hylkää luonnos",
"DialogMessage_HardDeleteConfirmationMessage": "Poista pysyvästi",
"DialogMessage_HardDeleteConfirmationTitle": "Viesti(t) poistetaan pysyvästi. Haluatko jatkaa?",
"DialogMessage_NoAccountsForCreateMailMessage": "Sinulla ei ole tilejä luodaksesi viestejä.",
"DialogMessage_NoAccountsForCreateMailTitle": "Tili puuttuu",
"DialogMessage_RenameLinkedAccountsMessage": "Anna uusi nimi yhdistetylle tilille",
"DialogMessage_RenameLinkedAccountsTitle": "Uudelleennimeä yhdistetty tili",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Tämä ei poista tilejäsi, ainoastaan yhteyden tilien jaettujen kansioiden välillä. Haluatko jatkaa?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Poista tilien yhteys",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Viestillä ei ole aihetta. Haluatko jatkaa?",
"DialogMessage_RenameFolderTitle": "Uudelleennimeä kansio",
"DialogMessage_RenameFolderMessage": "Anna uusi nimi tälle kansiolle",
"DialogMessage_UnsubscribeConfirmationTitle": "Peruuta tilaus",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "Haluatko lopettaa viestien saamisen lähettäjältä {0}?",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Lopettaaksesi viestien saamisen lähettäjältä {0}, mene heidän verkkosivuilleen peruuttaaksesi tilauksesi.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Avaa verkkosivu",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Haluatko lopettaa viestien saamisen lähettäjältä {0}? Wino voi peruuttaa tilauksesi lähettämällä viestin sähköpostiosoitteestasi osoitteeseen {1}.",
"Dialog_DontAskAgain": "Älä kysy uudelleen",
"DiscordChannelDisclaimerMessage": "Wino doesn't have it's own Discord server, but special 'wino-mail' channel is hosted at 'Developer Sanctuary' server.\nTo get the updates about Wino please join Developer Sanctuary server and follow 'wino-mail' channel under 'Community Projects'\n\nYou will be directed to server URL since Discord doesn't support channel invites.",
"DiscordChannelDisclaimerTitle": "Important Discord Information",
"Draft": "Draft",
"EditorToolbarOption_Draw": "Draw",
"EditorToolbarOption_Format": "Format",
"EditorToolbarOption_Insert": "Insert",
"EditorToolbarOption_None": "Ei mitään",
"EditorToolbarOption_Options": "Asetukset",
"EditorTooltip_WebViewEditor": "Käytä selainpohjaista editoria",
"ElementTheme_Dark": "Tumma teema",
"ElementTheme_Default": "Käytä järjestelmän asetuksia",
"ElementTheme_Light": "Vaalea teema",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Postilaatikon asetuksia ei löytynyt.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Tunnistautuminen peruutettu",
"Exception_CustomThemeExists": "Teema on jo olemassa.",
"Exception_CustomThemeMissingName": "Sinun on annettava nimi.",
"Exception_CustomThemeMissingWallpaper": "Sinun on valittava taustakuva.",
"Exception_FailedToSynchronizeFolders": "Kansioiden synkronointi epäonnistui",
"Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.",
"Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.",
"Exception_GoogleAuthError": "OAuth authorization error: {0}",
"Exception_GoogleAuthInvalidResponse": "Received request with invalid state ({0})",
"Exception_GoogleAuthorizationCodeExchangeFailed": "Authorization code exchange failed.",
"Exception_InvalidSystemFolderConfiguration": "System folder configuration is not valid. Check configuration and try again.",
"Exception_NullAssignedAccount": "Assigned account is null",
"Exception_NullAssignedFolder": "Assigned folder is null",
"Exception_SynchronizerFailureHTTP": "Response handling failed with error HTTP code {0}",
"Exception_TokenGenerationFailed": "Token generation failed",
"Exception_TokenInfoRetrivalFailed": "Failed to get token information.",
"Exception_UnknowErrorDuringAuthentication": "Unknown error occurred during authentication",
"Exception_UnsupportedAction": "Action {0} is not implemented in request processor",
"Exception_UnsupportedProvider": "This provider is not supported.",
"Exception_UnsupportedSynchronizerOperation": "This operation is not supported for {0}",
"Exception_UserCancelSystemFolderSetupDialog": "User canceled system folder config dialog.",
"Exception_InboxNotAvailable": "Couldn't setup account folders.",
"Files": "Files",
"FilteringOption_All": "All",
"FilteringOption_Flagged": "Flagged",
"FilteringOption_Unread": "Unread",
"FilteringOption_Files": "Has files",
"Focused": "Focused",
"FolderOperation_CreateSubFolder": "Create sub folder",
"FolderOperation_Delete": "Delete",
"FolderOperation_DontSync": "Don't sync this folder",
"FolderOperation_Empty": "Empty this folder",
"FolderOperation_MarkAllAsRead": "Mark all as read",
"FolderOperation_Move": "Move",
"DragMoveToFolderCaption": "Move to {0}",
"FolderOperation_None": "None",
"FolderOperation_Pin": "Pin",
"FolderOperation_Rename": "Rename",
"FolderOperation_Unpin": "Unpin",
"HoverActionOption_Archive": "Archive",
"HoverActionOption_Delete": "Delete",
"HoverActionOption_MoveJunk": "Move to Junk",
"HoverActionOption_ToggleFlag": "Flag / Unflag",
"HoverActionOption_ToggleRead": "Read / Unread",
"MergedAccountCommonFolderInbox": "Inbox",
"MergedAccountCommonFolderSent": "Sent",
"MergedAccountCommonFolderDraft": "Draft",
"MergedAccountCommonFolderJunk": "Junk",
"MergedAccountCommonFolderTrash": "Deleted",
"MergedAccountCommonFolderArchive": "Archive",
"IMAPSetupDialog_AccountType": "Account type",
"IMAPSetupDialog_DisplayName": "Display Name",
"IMAPSetupDialog_DisplayNamePlaceholder": "eg. John Doe",
"IMAPSetupDialog_IncomingMailServer": "Incoming mail server",
"IMAPSetupDialog_IncomingMailServerPort": "Port",
"IMAPSetupDialog_MailAddress": "Email address",
"IMAPSetupDialog_MailAddressPlaceholder": "someone@example.com",
"IMAPSetupDialog_OutgoingMailServer": "Outgoing (SMTP) mail server",
"IMAPSetupDialog_OutgoingMailServerPassword": "Outgoing server password",
"IMAPSetupDialog_OutgoingMailServerPort": "Port",
"IMAPSetupDialog_OutgoingMailServerRequireAuthentication": "Outgoing server requires authentication",
"IMAPSetupDialog_OutgoingMailServerUsername": "Outgoing server user name",
"IMAPSetupDialog_Password": "Password",
"IMAPSetupDialog_RequireSSLForIncomingMail": "Require SSL for incoming email",
"IMAPSetupDialog_RequireSSLForOutgoingMail": "Require SSL for outgoing email",
"IMAPSetupDialog_Title": "Advanced IMAP Configuration",
"IMAPSetupDialog_UseSameConfig": "Use the same username and password for sending email",
"IMAPSetupDialog_Username": "Username",
"IMAPSetupDialog_UsernamePlaceholder": "johndoe, johndoe@fabrikam.com, domain/johndoe",
"IMAPSetupDialog_ConnectionFailedTitle": "Connection Failed",
"IMAPSetupDialog_ConnectionFailedMessage": "IMAP connection failed.",
"ImageRenderingDisabled": "Image rendering is disabled for this message.",
"InfoBarAction_Enable": "Enable",
"InfoBarMessage_SynchronizationDisabledFolder": "This folder is disabled for synchronization.",
"InfoBarTitle_SynchronizationDisabledFolder": "Disabled Folder",
"GeneralTitle_Error": "Error",
"GeneralTitle_Warning": "Warning",
"GeneralTitle_Info": "Information",
"Info_AccountCreatedMessage": "{0} is created",
"Info_AccountCreatedTitle": "Account Creation",
"Info_AccountCreationFailedTitle": "Account Creation Failed",
"Info_AccountDeletedMessage": "{0} is successfuly deleted.",
"Info_AccountDeletedTitle": "Account Deleted",
"Info_AccountIssueFixFailedTitle": "Failed",
"Info_AccountIssueFixSuccessMessage": "Fixed all account issues.",
"Info_AccountIssueFixSuccessTitle": "Success",
"Info_AttachmentOpenFailedMessage": "Can't open this attachment.",
"Info_AttachmentOpenFailedTitle": "Failed",
"Info_AttachmentSaveFailedMessage": "Can't save this attachment.",
"Info_AttachmentSaveFailedTitle": "Failed",
"Info_AttachmentSaveSuccessMessage": "Attachment is saved.",
"Info_AttachmentSaveSuccessTitle": "Attachment Saved",
"Info_BackgroundExecutionDeniedMessage": "Background execution for the app is denied. This may affect background synchronization and live notifications.",
"Info_BackgroundExecutionDeniedTitle": "Denied Background Execution",
"Info_BackgroundExecutionUnknownErrorMessage": "Unknown exception occurred when registering background synchronizer.",
"Info_BackgroundExecutionUnknownErrorTitle": "Background Execution Failure",
"Info_ComposerMissingMIMEMessage": "Couldn't locate the MIME file. Synchronizing may help.",
"Info_ComposerMissingMIMETitle": "Failed",
"Info_ContactExistsMessage": "This contact is already in the recipient list.",
"Info_ContactExistsTitle": "Contact Exists",
"Info_DraftFolderMissingMessage": "Draft folder is missing for this account. Please check your account settings.",
"Info_DraftFolderMissingTitle": "Missing Draft Folder",
"Info_FileLaunchFailedTitle": "Failed to launch file",
"Info_InvalidAddressMessage": "'{0}' is not a valid e-mail address.",
"Info_InvalidAddressTitle": "Invalid Address",
"Info_InvalidMoveTargetMessage": "You can't move selected mails to this folder.",
"Info_InvalidMoveTargetTitle": "Invalid Move Target",
"Info_LogsNotFoundMessage": "There are no logs to share.",
"Info_LogsNotFoundTitle": "Logs Not Found",
"Info_LogsSavedMessage": "{0} is saved to selected folder.",
"Info_LogsSavedTitle": "Saved",
"Info_MailRenderingFailedMessage": "This mail is corrupted or can't be opened.\n{0}",
"Info_MailRenderingFailedTitle": "Render Failed",
"Info_MessageCorruptedMessage": "This message is corrupted.",
"Info_MessageCorruptedTitle": "Error",
"Info_MissingFolderMessage": "{0} doesn't exist for this account.",
"Info_MissingFolderTitle": "Missing Folder",
"Info_PDFSaveSuccessTitle": "Success",
"Info_PDFSaveFailedTitle": "Failed to save PDF file",
"Info_PDFSaveSuccessMessage": "PDF file is saved to {0}",
"Info_PurchaseExistsMessage": "Looks like this product has already been purchased before.",
"Info_PurchaseExistsTitle": "Existing Product",
"Info_PurchaseThankYouMessage": "Thank You",
"Info_PurchaseThankYouTitle": "Purchase successful",
"Info_RequestCreationFailedTitle": "Failed to Create Requests",
"Info_ReviewNetworkErrorMessage": "There was a network issue with your review.",
"Info_ReviewNetworkErrorTitle": "Network Issue",
"Info_ReviewNewMessage": "All feedbacks are appreciated. Thank you for the review!",
"Info_ReviewSuccessTitle": "Thank you",
"Info_ReviewUnknownErrorMessage": "There was an unknown issue with your review. ({0})",
"Info_ReviewUnknownErrorTitle": "Unknown Error",
"Info_ReviewUpdatedMessage": "Thank you for the updated review.",
"Info_SignatureDisabledMessage": "Disabled signature for this account",
"Info_SignatureDisabledTitle": "Success",
"Info_SignatureSavedMessage": "New signature is saved",
"Info_SignatureSavedTitle": "Success",
"Info_SyncCanceledMessage": "Canceled",
"Info_SyncCanceledTitle": "Synchronization",
"Info_SyncFailedTitle": "Synchronization Failed",
"Info_UnsupportedFunctionalityDescription": "This functionality is not implemented yet.",
"Info_UnsupportedFunctionalityTitle": "Unsupported",
"Info_UnsubscribeLinkInvalidTitle": "Invalid Unsubscribe Uri",
"Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.",
"Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.",
"Info_UnsubscribeErrorMessage": "Failed to unsubscribe",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security",
"ImapAuthenticationMethod_Auto": "Auto",
"ImapAuthenticationMethod_CramMD5": "CRAM-MD5",
"ImapAuthenticationMethod_DigestMD5": "DIGEST-MD5",
"ImapAuthenticationMethod_None": "No authentication",
"ImapAuthenticationMethod_Plain": "Normal password",
"ImapAuthenticationMethod_EncryptedPassword": "Encrypted password",
"ImapAuthenticationMethod_Ntlm": "NTLM",
"ImapConnectionSecurity_None": "None",
"ImapConnectionSecurity_SslTls": "SSL/TLS",
"ImapConnectionSecurity_StartTls": "STARTTLS",
"ImapConnectionSecurity_Auto": "Auto",
"Justify": "Justify",
"Left": "Left",
"Link": "Link",
"LinkedAccountsCreatePolicyMessage": "you must have at least 2 accounts to create link\nlink will be removed on save",
"LinkedAccountsTitle": "Linked Accounts",
"MailOperation_AlwaysMoveFocused": "Always Move to Focused",
"MailOperation_AlwaysMoveOther": "Always Move to Other",
"MailOperation_Archive": "Archive",
"MailOperation_ClearFlag": "Clear flag",
"MailOperation_DarkEditor": "Dark",
"MailOperation_Delete": "Delete",
"MailOperation_ExportPDF": "Export to PDF",
"MailOperation_Find": "Find",
"MailOperation_Forward": "Forward",
"MailOperation_Ignore": "Ignore",
"MailOperation_LightEditor": "Light",
"MailOperation_MarkAsJunk": "Mark as junk",
"MailOperation_MarkAsRead": "Mark as read",
"MailOperation_MarkAsUnread": "Mark as unread",
"MailOperation_MarkNotJunk": "Mark as Not Junk",
"MailOperation_Move": "Move",
"MailOperation_MoveFocused": "Move to Focused",
"MailOperation_MoveJunk": "Move to Junk",
"MailOperation_MoveOther": "Move to Other",
"MailOperation_Navigate": "Navigate",
"MailOperation_Print": "Print",
"MailOperation_Reply": "Reply",
"MailOperation_ReplyAll": "Reply all",
"MailOperation_SaveAs": "Save As",
"MailOperation_SetFlag": "Set flag",
"MailOperation_Unarchive": "Unarchive",
"MailOperation_Zoom": "Zoom",
"MailsSelected": "{0} item(s) selected",
"MarkFlagUnflag": "Mark as flagged/unflagged",
"MarkReadUnread": "Mark as read/unread",
"MenuManageAccounts": "Manage Accounts",
"MenuNewMail": "New Mail",
"MenuMergedAccountItemAccountsSuffix": " accounts",
"MenuRate": "Rate Wino",
"MenuSettings": "Settings",
"MergedAccountsAvailableAccountsTitle": "Available Accounts",
"More": "More",
"MoveMailDialog_InvalidFolderMessage": "{0} is not a valid folder for this mail.",
"MoveMailDialog_Title": "Pick a folder",
"NewAccountDialog_AccountName": "Account Name",
"NewAccountDialog_AccountNameDefaultValue": "Personal",
"NewAccountDialog_AccountNamePlaceholder": "eg. Personal Mail",
"NewAccountDialog_Title": "Add New Account",
"NoMailSelected": "No message selected",
"NoMessageCrieteria": "No messages match your search criteria",
"NoMessageEmptyFolder": "This folder is empty",
"Notifications_MultipleNotificationsMessage": "You have {0} new mails",
"Notifications_MultipleNotificationsTitle": "New Mails",
"Notifications_WinoUpdatedMessage": "Checkout new version {0}",
"Notifications_WinoUpdatedTitle": "Wino Mail has been updated.",
"Other": "Other",
"PaneLengthOption_Default": "Default",
"PaneLengthOption_ExtraLarge": "Extra Large",
"PaneLengthOption_Large": "Large",
"PaneLengthOption_Medium": "Medium",
"PaneLengthOption_Micro": "Micro",
"PaneLengthOption_Small": "Small",
"Photos": "Photos",
"PreparingFoldersMessage": "Preparing folders",
"ProviderDetail_Gmail_Description": "Google Account",
"ProviderDetail_IMAP_Description": "Custom IMAP/SMTP server",
"ProviderDetail_IMAP_Title": "IMAP Server",
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Results",
"Right": "Right",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "up to date",
"SynchronizationFolderReport_Failed": "synchronization is failed",
"SearchBarPlaceholder": "Search",
"SearchingIn": "Searching in",
"SearchPivotName": "Results",
"SettingsAboutGithub_Description": "Go to issue tracker GitHub repository.",
"SettingsAboutGithub_Title": "GitHub",
"SettingsAccountManagementAppendMessage_Title": "Append messages to Sent folder",
"SettingsAccountManagementAppendMessage_Description": "Create a copy of the message in Sent folder after the draft is sent. Enable this if you don't see your mails after you sent them in Sent folder.",
"SettingsEditLinkedInbox_Title": "Edit Linked Inbox",
"SettingsEditLinkedInbox_Description": "Add / remove accounts, rename or break the link between accounts.",
"SettingsAboutVersion": "Version ",
"SettingsAboutWinoDescription": "Lightweight mail client for Windows device families.",
"SettingsAbout_Description": "Learn more about Wino.",
"SettingsAbout_Title": "About",
"SettingsAccentColor_Description": "Change application's accent color",
"SettingsAccentColor_Title": "Accent Color",
"SettingsAccentColor_UseWindowsAccentColor": "Use my Windows accent color",
"SettingsAccountName_Description": "Change the name of the account.",
"SettingsAccountName_Title": "Account Name",
"SettingsApplicationTheme_Description": "Personalize Wino with different custom application themes for your like.",
"SettingsApplicationTheme_Title": "Application Theme",
"SettingsAvailableThemes_Description": "Select a theme from Wino's own collection for your taste or apply your own themes.",
"SettingsAvailableThemes_Title": "Available Themes",
"SettingsAutoSelectNextItem_Title": "Auto select next item",
"SettingsAutoSelectNextItem_Description": "Select the next item after you delete or move a mail.",
"SettingsCustomTheme_Description": "Create your own custom theme with custom wallpaper and accent color.",
"SettingsCustomTheme_Title": "Custom Theme",
"SettingsConfigureSpecialFolders_Title": "Configure System Folders",
"SettingsConfigureSpecialFolders_Description": "Set folders with special functions. Folders such as Archive, Inbox, and Drafts are essential for Wino to function properly.",
"SettingConfigureSpecialFolders_Button": "Configure",
"Error_FailedToSetupSystemFolders_Title": "Failed to setup system folders",
"SettingsDeleteAccount_Description": "Delete all e-mails and credentials associated with this account.",
"SettingsDeleteAccount_Title": "Delete this account",
"SettingsDeleteProtection_Description": "Should Wino ask you for comfirmation every time you try to permanently delete a mail using Shift + Del keys?",
"SettingsDeleteProtection_Title": "Permanent Delete Protection",
"SettingsDiagnostics_Description": "For developers",
"SettingsDiagnostics_Title": "Diagnostics",
"SettingsDiscord_Description": "Get regular development updates, join roadmap discussions and provide feedback.",
"SettingsDiscord_Title": "Discord Channel",
"SettingsElementThemeSelectionDisabled": "Element theme selection is disabled when application theme is selected other than Default.",
"SettingsElementTheme_Description": "Select a Windows theme for Wino",
"SettingsElementTheme_Title": "Element Theme",
"SettingsEnableHoverActions_Title": "Enable hover actions",
"SettingsEnableIMAPLogs_Description": "Enable this to provide details about IMAP connectivity issuses you had during IMAP server setup.",
"SettingsEnableIMAPLogs_Title": "Enable IMAP Protocol Logs",
"SettingsEnableLogs_Description": "I might need logs for crashes to diagnose issues you have opened in GitHub. None of the logs will expose your credentials or sensetive information to public.",
"SettingsEnableLogs_Title": "Enable Logs",
"SettingsEnableSignature": "Enable Signature",
"SettingsExpandOnStartup_Description": "Set whether Wino should expand this account's folders on startup.",
"SettingsExpandOnStartup_Title": "Expand Menu on Startup",
"SettingsExternalContent_Description": "Manage external content settings when rendering mails.",
"SettingsExternalContent_Title": "External Content",
"SettingsFocusedInbox_Description": "Set whether Inbox should be split into two as Focused - Other.",
"SettingsFocusedInbox_Title": "Focused Inbox",
"SettingsFolderSync_Description": "Enable or disable specific folders for synchronization.",
"SettingsFolderSync_Title": "Folder Synchronization",
"SettingsFolderOptions_Title": "Folder Configuration",
"SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.",
"SettingsHoverActionCenter": "Center Action",
"SettingsHoverActionLeft": "Left Action",
"SettingsHoverActionRight": "Right Action",
"SettingsHoverActions_Description": "Select 3 actions to show up when you hover over the mails with cursor.",
"SettingsHoverActions_Title": "Hover Actions",
"SettingsLanguage_Description": "Change display language for Wino.",
"SettingsLanguage_Title": "Display Language",
"SettingsLanguageTime_Title": "Language & Time",
"SettingsLanguageTime_Description": "Wino display language, preferred time format.",
"CategoriesFolderNameOverride": "Categories",
"MoreFolderNameOverride": "More",
"SettingsOptions_Title": "Settings",
"SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.",
"SettingsLinkAccounts_Title": "Create Linked Accounts",
"SettingsLinkedAccountsSave_Description": "Modify the current link with the new accounts.",
"SettingsLinkedAccountsSave_Title": "Save Changes",
"SettingsLoadImages_Title": "Load images automatically",
"SettingsLoadStyles_Title": "Load styles automatically",
"SettingsMailSpacing_Description": "Adjust the spacing for listing mails.",
"SettingsMailSpacing_Title": "Mail Spacing",
"SettingsFolderMenuStyle_Title": "Create Nested Folders",
"SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.",
"SettingsManageAccountSettings_Title": "Manage Account Settings",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.",
"SettingsManageLink_Title": "Manage Link",
"SettingsMarkAsRead_Description": "Change what should happen to the selected item.",
"SettingsMarkAsRead_DontChange": "Don't automatically mark item as read",
"SettingsMarkAsRead_SecondsToWait": "Seconds to wait: ",
"SettingsMarkAsRead_Timer": "When viewed in the reading pane",
"SettingsMarkAsRead_Title": "Mark item as read",
"SettingsMarkAsRead_WhenSelected": "When selected",
"SettingsMessageList_Description": "Change how your messages should be organized in mail list.",
"SettingsMessageList_Title": "Message List",
"SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.",
"SettingsNotifications_Description": "Turn on or off notifications for this account.",
"SettingsNotifications_Title": "Notifications",
"SettingsPaneLength_Description": "Change the width of the mail list.",
"SettingsPaneLength_Title": "Mail List Pane Length",
"SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.",
"SettingsPaypal_Title": "Donate via PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Compact Mode",
"SettingsPersonalizationMailDisplayMediumMode": "Medium Mode",
"SettingsPersonalizationMailDisplaySpaciousMode": "Spacious Mode",
"SettingsPersonalization_Description": "Change appearance of Wino as you like.",
"SettingsPersonalization_Title": "Personalization",
"SettingsPrivacyPolicy_Description": "Review privacy policy.",
"SettingsPrivacyPolicy_Title": "Privacy Policy",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Default Reader Font",
"SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.",
"SettingsFontFamily_Title": "Font Family",
"SettingsFontSize_Title": "Font Size",
"SettingsFontPreview_Title": "Preview",
"SettingsComposerFont_Title": "Default Composer Font",
"SettingsComposerFontFamily_Description": "Change the default font family and font size for composing mails.",
"SettingsRenameMergeAccount_Description": "Change the display name of the linked accounts.",
"SettingsRenameMergeAccount_Title": "Rename",
"SettingsSemanticZoom_Description": "This will allow you to click on the headers in messages list and go to specific date",
"SettingsSemanticZoom_Title": "Semantic Zoom for Date Headers",
"SettingsShowPreviewText_Description": "Hide/show thepreview text.",
"SettingsShowPreviewText_Title": "Show Preview Text",
"SettingsShowSenderPictures_Description": "Hide/show the thumbnail sender pictures.",
"SettingsShowSenderPictures_Title": "Show Sender Avatars",
"SettingsPrefer24HourClock_Title": "Display Clock Format in 24 Hours",
"SettingsPrefer24HourClock_Description": "Mail recieve times will be displayed in 24 hour format instead of 12 (AM/PM)",
"SettingsSignature_Description": "Manage account signatures",
"SettingsSignature_Title": "Signature",
"SettingsStartupItem_Description": "Primary account item to load Inbox at startup.",
"SettingsStartupItem_Title": "Startup Item",
"SettingsStore_Description": "Show some love ❤️",
"SettingsStore_Title": "Rate in Store",
"SettingsThreads_Description": "Organize messages into conversation threads.",
"SettingsThreads_Title": "Conversation Threading",
"SettingsUnlinkAccounts_Description": "Remove the link between accounts. This will not delete your accounts.",
"SettingsUnlinkAccounts_Title": "Unlink Accounts",
"SortingOption_Date": "by date",
"SortingOption_Name": "by name",
"StoreRatingDialog_MessageFirstLine": "All feedbacks are appreciated and they will make much Wino better in the future. Would you like to rate Wino in Microsoft Store?",
"StoreRatingDialog_MessageSecondLine": "Would you like to rate Wino Mail in Microsoft Store?",
"StoreRatingDialog_Title": "Enjoying Wino?",
"SystemFolderConfigDialog_ArchiveFolderDescription": "Archived messages will be moved to here.",
"SystemFolderConfigDialog_ArchiveFolderHeader": "Archive Folder",
"SystemFolderConfigDialog_DeletedFolderDescription": "Deleted messages will be moved to here.",
"SystemFolderConfigDialog_DeletedFolderHeader": "Deleted Folder",
"SystemFolderConfigDialog_DraftFolderDescription": "New mails/replies will be crafted in here.",
"SystemFolderConfigDialog_DraftFolderHeader": "Draft Folder",
"SystemFolderConfigDialog_JunkFolderDescription": "All spam/junk mails will be here.",
"SystemFolderConfigDialog_JunkFolderHeader": "Junk/Spam Folder",
"SystemFolderConfigDialog_MessageFirstLine": "This IMAP server doesn't support SPECIAL-USE extension hence Wino couldn't setup the system folders properly.",
"SystemFolderConfigDialog_MessageSecondLine": "Please select the appropriate folders for specific functionalities.",
"SystemFolderConfigDialog_SentFolderDescription": "Folder that sent messages will be stored.",
"SystemFolderConfigDialog_SentFolderHeader": "Sent Folder",
"SystemFolderConfigDialog_Title": "Configure System Folders",
"SystemFolderConfigDialogValidation_InboxSelected": "You can't assign Inbox folder to any other system folder.",
"SystemFolderConfigDialogValidation_DuplicateSystemFolders": "Some of the system folders are used more than once in the configuration.",
"SystemFolderConfigSetupSuccess_Title": "System Folders Setup",
"SystemFolderConfigSetupSuccess_Message": "System folders are successfully configured.",
"TestingImapConnectionMessage": "Testing server connection...",
"Today": "Today",
"UnknownAddress": "unknown address",
"UnknownDateHeader": "Unknown Date",
"UnknownGroupAddress": "unknown Mail Group Address",
"UnknownSender": "Unknown Sender",
"Unsubscribe": "Unsubscribe",
"ViewContactDetails": "View Details",
"WinoUpgradeDescription": "Wino offers 3 accounts to start with for free. If you need more than 3 accounts, please upgrade",
"WinoUpgradeMessage": "Upgrade to Unlimited Accounts",
"WinoUpgradeRemainingAccountsMessage": "{0} out of {1} free accounts used.",
"Yesterday": "Yesterday",
"SignatureEditorDialog_Title": "Signature Editor",
"SignatureEditorDialog_SignatureName_Placeholder": "Name your signature",
"SignatureEditorDialog_SignatureName_TitleNew": "Signature name",
"SignatureEditorDialog_SignatureName_TitleEdit": "Current signature name: {0}",
"SignatureDeleteDialog_Title": "Delete signature",
"SignatureDeleteDialog_Message": "Are you sure you want to delete \"{0}\" signature?",
"SettingsSignature_ForNewMessages_Title": "For New Messages",
"SettingsSignature_ForFollowingMessages_Title": "For Replies/Forwards",
"SettingsSignature_SignatureDefaults": "Signature defaults",
"SettingsSignature_Signatures": "Signatures",
"SettingsSignature_AddCustomSignature_Title": "Add custom signature",
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Rename Linked Account",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Cette opération ne supprimera pas vos comptes mais ne supprimera que le lien pour les connexions de dossiers partagés. Voulez-vous continuer?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Dissocier les comptes",
"DialogMessage_EmptySubjectConfirmation": "Sujet manquant",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Le message n'a pas d'objet. Voulez-vous continuer ?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Utiliser les paramètres du système",
"ElementTheme_Light": "Mode clair",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "Échec du groupement de clients IMAP.",
"Exception_AuthenticationCanceled": "Authentification annulée",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Résultats",
"Right": "Droite",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "À jour",
"SynchronizationFolderReport_Failed": "la synchronisation a échouée",
"SearchBarPlaceholder": "Search",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronisation et autres paramètres par compte.",
"SettingsManageAccountSettings_Title": "Manage Account Settings",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personnalisation",
"SettingsPrivacyPolicy_Description": "Examinez la politique de confidentialité.",
"SettingsPrivacyPolicy_Title": "Politique de confidentialité",
"SettingsReadingPane_Description": "Options de rendu du courriel.",
"SettingsReadingPane_Title": "Panneau de lecture",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Police par défaut du lecteur",
"SettingsReaderFontFamily_Description": "Modifier la police par défaut et la taille de police pour la lecture des messages.",
"SettingsFontFamily_Title": "Famille de polices",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -52,7 +52,7 @@
"ClipboardTextCopyFailed_Message": "Produciuse un erro ao copiar {0} no portapapeis.",
"ComposerToPlaceholder": "prema intro para introducir o enderezo",
"ComposerAttachmentsDropZone_Message": "Solte os ficheiros aquí",
"ComposerImagesDropZone_Message": "Drop your images here",
"ComposerImagesDropZone_Message": "Solte os ficheiros aquí",
"ComposerAttachmentsDragDropAttach_Message": "Adxuntar",
"CustomThemeBuilder_AccentColorDescription": "Podes seleccionar a cor destacada se desexas. Se non o fas, usarase a cor por defecto de Windows.",
"CustomThemeBuilder_AccentColorTitle": "Color destacado",
@@ -82,29 +82,30 @@
"DialogMessage_RenameLinkedAccountsTitle": "Nomea a conta vinculada",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Esta operación non borrará a conta pero si romperá a vinculación para as conexións de carpetas compartidas. Queres continuar?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Desvincular conta",
"DialogMessage_EmptySubjectConfirmation": "Missin Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Message has no subject. Do you want to continue?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "A mensaxe non ten asunto. Queres continuar?",
"DialogMessage_RenameFolderTitle": "Renomear cartafol",
"DialogMessage_RenameFolderMessage": "Ponlle un novo nome a este cartafol",
"DialogMessage_UnsubscribeConfirmationTitle": "Anular subscrición",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "Do you want to stop getting messages from {0}?",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "Queres deixar de recibir mensaxes de {0}?",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Para deixar de obter mensaxes de {0}, vai ao seu sitio web para desubscribirte.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Ir á páxina web",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Do you want to stop getting messages from {0}? Wino will unsubscribe for you by sending an email from your email account to {1}.",
"Dialog_DontAskAgain": "Don't ask again",
"DiscordChannelDisclaimerMessage": "Wino doesn't have it's own Discord server, but special 'wino-mail' channel is hosted at 'Developer Sanctuary' server.\nTo get the updates about Wino please join Developer Sanctuary server and follow 'wino-mail' channel under 'Community Projects'\n\nYou will be directed to server URL since Discord doesn't support channel invites.",
"DiscordChannelDisclaimerTitle": "Important Discord Information",
"Draft": "Draft",
"EditorToolbarOption_Draw": "Draw",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Queres deixar de recibir mensaxes de {0}? Wino desusbscribirate enviando un correo dende a túa conta a {1}.",
"Dialog_DontAskAgain": "Non preguntar de novo",
"DiscordChannelDisclaimerMessage": "Wino non ten o seu propio servidor de Discord, pero hai un canal chamado \"wino-mail\" dentro do servidor \"Developer Sanctuary\". Para obter novas sobre Wino, por favor entra en Developer Sanctuary e segue o canal \"wino-mail\" dentro de \"Community Projects\".\n\nSerás redirixido ó servidor xa que Discord non ten a función de invitacións de canais.",
"DiscordChannelDisclaimerTitle": "Información importante de Discord",
"Draft": "Borrador",
"EditorToolbarOption_Draw": "Debuxar",
"EditorToolbarOption_Format": "Formato",
"EditorToolbarOption_Insert": "Inserir",
"EditorToolbarOption_None": "Ningunha",
"EditorToolbarOption_Options": "Axustes",
"EditorTooltip_WebViewEditor": "Use web view editor",
"EditorTooltip_WebViewEditor": "Usar o editor web",
"ElementTheme_Dark": "Modo oscuro",
"ElementTheme_Default": "Usar a configuración do sistema",
"ElementTheme_Light": "Modo claro",
"Emoji": "Emoticonas",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Non se puido encontrar os axustes da bandexa de correo.",
"Exception_ImapClientPoolFailed": "Fallou a colección de conexións IMAP.",
"Exception_AuthenticationCanceled": "Cancelouse a autenticación",
@@ -118,46 +119,46 @@
"Exception_GoogleAuthInvalidResponse": "Recibiuse unha solicitude cun estado inválido ({0})",
"Exception_GoogleAuthorizationCodeExchangeFailed": "O troco de códigos de autenticación fallou.",
"Exception_InvalidSystemFolderConfiguration": "A configuración da carpeta do sistema non é valida. Comprobe a configuración e probe novamente.",
"Exception_NullAssignedAccount": "Assigned account is null",
"Exception_NullAssignedFolder": "Assigned folder is null",
"Exception_SynchronizerFailureHTTP": "Response handling failed with error HTTP code {0}",
"Exception_TokenGenerationFailed": "Token generation failed",
"Exception_TokenInfoRetrivalFailed": "Failed to get token information.",
"Exception_UnknowErrorDuringAuthentication": "Unknown error occurred during authentication",
"Exception_UnsupportedAction": "Action {0} is not implemented in request processor",
"Exception_UnsupportedProvider": "This provider is not supported.",
"Exception_UnsupportedSynchronizerOperation": "This operation is not supported for {0}",
"Exception_UserCancelSystemFolderSetupDialog": "User canceled system folder config dialog.",
"Exception_InboxNotAvailable": "Couldn't setup account folders.",
"Files": "Files",
"FilteringOption_All": "All",
"FilteringOption_Flagged": "Flagged",
"FilteringOption_Unread": "Unread",
"FilteringOption_Files": "Has files",
"Focused": "Focused",
"FolderOperation_CreateSubFolder": "Create sub folder",
"FolderOperation_Delete": "Delete",
"FolderOperation_DontSync": "Don't sync this folder",
"FolderOperation_Empty": "Empty this folder",
"FolderOperation_MarkAllAsRead": "Mark all as read",
"FolderOperation_Move": "Move",
"DragMoveToFolderCaption": "Move to {0}",
"FolderOperation_None": "None",
"FolderOperation_Pin": "Pin",
"FolderOperation_Rename": "Rename",
"FolderOperation_Unpin": "Unpin",
"HoverActionOption_Archive": "Archive",
"HoverActionOption_Delete": "Delete",
"HoverActionOption_MoveJunk": "Move to Junk",
"HoverActionOption_ToggleFlag": "Flag / Unflag",
"HoverActionOption_ToggleRead": "Read / Unread",
"MergedAccountCommonFolderInbox": "Inbox",
"MergedAccountCommonFolderSent": "Sent",
"MergedAccountCommonFolderDraft": "Draft",
"MergedAccountCommonFolderJunk": "Junk",
"MergedAccountCommonFolderTrash": "Deleted",
"MergedAccountCommonFolderArchive": "Archive",
"IMAPSetupDialog_AccountType": "Account type",
"Exception_NullAssignedAccount": "A conta asignada é nula",
"Exception_NullAssignedFolder": "O cartafol asignado é nulo",
"Exception_SynchronizerFailureHTTP": "O manexo da resposta fallou co error HTTP {0}",
"Exception_TokenGenerationFailed": "A xeneración do token fallou",
"Exception_TokenInfoRetrivalFailed": "Non se puido obter a información do token.",
"Exception_UnknowErrorDuringAuthentication": "Un erro descoñecido ocorreu durante a autenticación",
"Exception_UnsupportedAction": "A acción {0} non está implementada no procesador de solicitudes",
"Exception_UnsupportedProvider": "Este provedor non está soportado.",
"Exception_UnsupportedSynchronizerOperation": "Esta operación non está soportada para {0}",
"Exception_UserCancelSystemFolderSetupDialog": "O usuario cancelou o diálogo de configuración do cartafol de sistema.",
"Exception_InboxNotAvailable": "Non se puideron configurar os cartafois da conta.",
"Files": "Ficheiros",
"FilteringOption_All": "Todo",
"FilteringOption_Flagged": "Marcado",
"FilteringOption_Unread": "Sen ler",
"FilteringOption_Files": "Ten ficheiros",
"Focused": "Concentrado",
"FolderOperation_CreateSubFolder": "Crear subcartafol",
"FolderOperation_Delete": "Borrar",
"FolderOperation_DontSync": "Non sincronizar este cartafol",
"FolderOperation_Empty": "Vaciar este cartafol",
"FolderOperation_MarkAllAsRead": "Marcar todo como lido",
"FolderOperation_Move": "Mover",
"DragMoveToFolderCaption": "Mover a {0}",
"FolderOperation_None": "Nada",
"FolderOperation_Pin": "Marcador",
"FolderOperation_Rename": "Renomear",
"FolderOperation_Unpin": "Desmarcar",
"HoverActionOption_Archive": "Arquivar",
"HoverActionOption_Delete": "Borrar",
"HoverActionOption_MoveJunk": "Mover a correo lixo",
"HoverActionOption_ToggleFlag": "Marcar / Desmarcar",
"HoverActionOption_ToggleRead": "Ler / Desler",
"MergedAccountCommonFolderInbox": "Bandexa de entrada",
"MergedAccountCommonFolderSent": "Enviado",
"MergedAccountCommonFolderDraft": "Borrador",
"MergedAccountCommonFolderJunk": "Lixo",
"MergedAccountCommonFolderTrash": "Borrado",
"MergedAccountCommonFolderArchive": "Arquivar",
"IMAPSetupDialog_AccountType": "Tipo de conta",
"IMAPSetupDialog_DisplayName": "Nome a amosar",
"IMAPSetupDialog_DisplayNamePlaceholder": "p.ex. Manuel Rivas",
"IMAPSetupDialog_IncomingMailServer": "Servidor de correo entrante",
@@ -170,35 +171,35 @@
"IMAPSetupDialog_OutgoingMailServerRequireAuthentication": "O servidor de saída require contrasinal",
"IMAPSetupDialog_OutgoingMailServerUsername": "Nome de usuario do servidor de saída",
"IMAPSetupDialog_Password": "Contrasinal",
"IMAPSetupDialog_RequireSSLForIncomingMail": "Require SSL for incoming email",
"IMAPSetupDialog_RequireSSLForOutgoingMail": "Require SSL for outgoing email",
"IMAPSetupDialog_Title": "Advanced IMAP Configuration",
"IMAPSetupDialog_UseSameConfig": "Use the same username and password for sending email",
"IMAPSetupDialog_Username": "Username",
"IMAPSetupDialog_UsernamePlaceholder": "johndoe, johndoe@fabrikam.com, domain/johndoe",
"IMAPSetupDialog_ConnectionFailedTitle": "Connection Failed",
"IMAPSetupDialog_ConnectionFailedMessage": "IMAP connection failed.",
"ImageRenderingDisabled": "Image rendering is disabled for this message.",
"InfoBarAction_Enable": "Enable",
"InfoBarMessage_SynchronizationDisabledFolder": "This folder is disabled for synchronization.",
"InfoBarTitle_SynchronizationDisabledFolder": "Disabled Folder",
"GeneralTitle_Error": "Error",
"GeneralTitle_Warning": "Warning",
"GeneralTitle_Info": "Information",
"Info_AccountCreatedMessage": "{0} is created",
"Info_AccountCreatedTitle": "Account Creation",
"Info_AccountCreationFailedTitle": "Account Creation Failed",
"Info_AccountDeletedMessage": "{0} is successfuly deleted.",
"Info_AccountDeletedTitle": "Account Deleted",
"Info_AccountIssueFixFailedTitle": "Failed",
"Info_AccountIssueFixSuccessMessage": "Fixed all account issues.",
"Info_AccountIssueFixSuccessTitle": "Success",
"Info_AttachmentOpenFailedMessage": "Can't open this attachment.",
"Info_AttachmentOpenFailedTitle": "Failed",
"Info_AttachmentSaveFailedMessage": "Can't save this attachment.",
"Info_AttachmentSaveFailedTitle": "Failed",
"Info_AttachmentSaveSuccessMessage": "Attachment is saved.",
"Info_AttachmentSaveSuccessTitle": "Attachment Saved",
"IMAPSetupDialog_RequireSSLForIncomingMail": "Requirir SSL para os correos entrantes",
"IMAPSetupDialog_RequireSSLForOutgoingMail": "Requirir SSL para os correos salientes",
"IMAPSetupDialog_Title": "Opcións avanzadas de IMAP",
"IMAPSetupDialog_UseSameConfig": "Usa o mesmo usuario e contrasinal para enviar correo",
"IMAPSetupDialog_Username": "Nome de usuario",
"IMAPSetupDialog_UsernamePlaceholder": "vicenterisco, vicenterisco@dominio.com, dominio/vicenterisco",
"IMAPSetupDialog_ConnectionFailedTitle": "Erro ao conectar",
"IMAPSetupDialog_ConnectionFailedMessage": "A conexión IMAP fallou.",
"ImageRenderingDisabled": "A mostra de imaxes está desactivada para esta mensaxe.",
"InfoBarAction_Enable": "Activar",
"InfoBarMessage_SynchronizationDisabledFolder": "A sincronización está desactivada neste cartafol.",
"InfoBarTitle_SynchronizationDisabledFolder": "Cartafol desactivado",
"GeneralTitle_Error": "Erro",
"GeneralTitle_Warning": "Aviso",
"GeneralTitle_Info": "Información",
"Info_AccountCreatedMessage": "{0} creouse",
"Info_AccountCreatedTitle": "Creación de contas",
"Info_AccountCreationFailedTitle": "A creación da conta fallou",
"Info_AccountDeletedMessage": "{0} borrouse correctamente.",
"Info_AccountDeletedTitle": "A conta borrouse",
"Info_AccountIssueFixFailedTitle": "Fallou",
"Info_AccountIssueFixSuccessMessage": "Solucionados todos os erros da conta.",
"Info_AccountIssueFixSuccessTitle": "Éxito",
"Info_AttachmentOpenFailedMessage": "Non se pode abrir este ficheiro adxunto.",
"Info_AttachmentOpenFailedTitle": "Fallou",
"Info_AttachmentSaveFailedMessage": "Non se pode gardar este ficheiro adxunto.",
"Info_AttachmentSaveFailedTitle": "Fallou",
"Info_AttachmentSaveSuccessMessage": "Gardáronse os adxuntos.",
"Info_AttachmentSaveSuccessTitle": "Adxuntos gardados",
"Info_BackgroundExecutionDeniedMessage": "Background execution for the app is denied. This may affect background synchronization and live notifications.",
"Info_BackgroundExecutionDeniedTitle": "Denied Background Execution",
"Info_BackgroundExecutionUnknownErrorMessage": "Unknown exception occurred when registering background synchronizer.",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Results",
"Right": "Right",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "up to date",
"SynchronizationFolderReport_Failed": "synchronization is failed",
"SearchBarPlaceholder": "Search",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.",
"SettingsManageAccountSettings_Title": "Manage Account Settings",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalization",
"SettingsPrivacyPolicy_Description": "Review privacy policy.",
"SettingsPrivacyPolicy_Title": "Privacy Policy",
"SettingsReadingPane_Description": "Mail rendering options.",
"SettingsReadingPane_Title": "Reading Pane",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Default Reader Font",
"SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.",
"SettingsFontFamily_Title": "Font Family",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -52,7 +52,7 @@
"ClipboardTextCopyFailed_Message": "Gagal menyalin {0} ke papan klip.",
"ComposerToPlaceholder": "klik enter untuk memasukkan alamat",
"ComposerAttachmentsDropZone_Message": "Jatuhkan berkas Anda di sini",
"ComposerImagesDropZone_Message": "Drop your images here",
"ComposerImagesDropZone_Message": "Letakkan gambar Anda di sini",
"ComposerAttachmentsDragDropAttach_Message": "Lampirkan",
"CustomThemeBuilder_AccentColorDescription": "Anda dapat menerapkan warna aksen khusus. Jika ingin menggunakan warna aksen Windows, pilih Tidak Ada Warna.",
"CustomThemeBuilder_AccentColorTitle": "Warna aksen",
@@ -82,10 +82,10 @@
"DialogMessage_RenameLinkedAccountsTitle": "Ubah Nama Akun Tertaut",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Ini tidak akan menghapus akun-akun Anda, tetapi hanya menghapus tautan folder yang digabungkan. Apakah Anda ingin melanjutkan?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Lepas Tautan Akun",
"DialogMessage_EmptySubjectConfirmation": "Tidak Ada Perihal",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Pesan tidak memiliki perihal. Apakah Anda ingin melanjutkan?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
"DialogMessage_RenameFolderTitle": "Ubah nama folder",
"DialogMessage_RenameFolderMessage": "Masukkan nama baru untuk folder ini",
"DialogMessage_UnsubscribeConfirmationTitle": "Berhenti berlangganan",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "Apakah Anda ingin berhenti mendapatkan pesan dari {0}?",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Untuk berhenti mendapatkan pesan dari {0}, Anda harus mengunjungi situs mereka untuk berhenti berlangganan.",
@@ -100,11 +100,12 @@
"EditorToolbarOption_Insert": "Sisipkan",
"EditorToolbarOption_None": "Tidak ada",
"EditorToolbarOption_Options": "Pilihan",
"EditorTooltip_WebViewEditor": "Use web view editor",
"EditorTooltip_WebViewEditor": "Gunakan penyunting tampilan web",
"ElementTheme_Dark": "Mode gelap",
"ElementTheme_Default": "Gunakan pengaturan sistem",
"ElementTheme_Light": "Mode terang",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Tidak dapat menemukan pengaturan kotak masuk.",
"Exception_ImapClientPoolFailed": "Gagal IMAP Client Pool.",
"Exception_AuthenticationCanceled": "Otentikasi dibatalkan",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Catatan log protokol kini tersedia untuk pengawakutuan.",
"Results": "Hasil",
"Right": "Kanan",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "terbaru",
"SynchronizationFolderReport_Failed": "penyelarasan gagal",
"SearchBarPlaceholder": "Cari",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Ubah apakah foldeer akun harus berada di dalam item menu akun atau tidak. Matikan jika Anda lebih suka gaya menu lama di Windows Mail.",
"SettingsManageAccountSettings_Description": "Pemberitahuan, tanda tangan, penyelarasan, dan pengaturan lain per akun.",
"SettingsManageAccountSettings_Title": "Kelole Pengaturan Akun",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Urutkan Ulang Akun",
"SettingsReorderAccounts_Description": "Ubah urutan akun di daftar akun.",
"SettingsManageLink_Description": "Pindahkan item untuk menambahkan tautan baru atau hapus tautan yang sudah ada.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Ubahsuaian",
"SettingsPrivacyPolicy_Description": "Tinjau kebijakan privasi.",
"SettingsPrivacyPolicy_Title": "Kebijakan Privasi",
"SettingsReadingPane_Description": "Pilihan pemuatan surel.",
"SettingsReadingPane_Title": "Panel Baca",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Fon Pembaca Bawaan",
"SettingsReaderFontFamily_Description": "Ubah fon bawaan dan ukuran fon saat membaca surel.",
"SettingsFontFamily_Title": "Jenis Fon",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Tambah tanda tangan",
"SettingsSignature_EditSignature_Title": "Sunting tanda tangan",
"SettingsSignature_DeleteSignature_Title": "Hapus tanda tangan",
"SettingsSignature_NoneSignatureName": "Tidak ada"
"SettingsSignature_NoneSignatureName": "Tidak ada",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Rinomina l'account collegato",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Questa operazione non eliminerà i tuoi account, ma interromperà solo il collegamento verso le connessioni alla cartella condivisa. Vuoi continuare?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Scollega account",
"DialogMessage_EmptySubjectConfirmation": "Oggetto mancante",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Il messaggio non ha oggetto. Vuoi continuare?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Usa le impostazioni di sistema",
"ElementTheme_Light": "Tema chiaro",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool fallito.",
"Exception_AuthenticationCanceled": "Autenticazione annullata",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Risultati",
"Right": "Destra",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "aggiornato",
"SynchronizationFolderReport_Failed": "sincronizzazione fallita",
"SearchBarPlaceholder": "Cerca",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Cambia se le cartelle dell'account devono essere annidate o meno all'interno di una voce del menù dell'account. Disattiva questa opzione se ti piace il vecchio sistema di menù in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifiche, firme, sincronizzazione e altre impostazioni per account.",
"SettingsManageAccountSettings_Title": "Gestisci Impostazioni Account",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Sposta gli elementi per aggiungere un nuovo collegamento o rimuovi un collegamento esistente.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalizzazione",
"SettingsPrivacyPolicy_Description": "Verifica l'informativa sulla privacy.",
"SettingsPrivacyPolicy_Title": "Informativa sulla Privacy",
"SettingsReadingPane_Description": "Opzioni di visualizzazione della posta.",
"SettingsReadingPane_Title": "Riquadro di Lettura",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Carattere di Lettura Predefinito",
"SettingsReaderFontFamily_Description": "Cambia la famiglia di caratteri predefinita e la dimensione del carattere per la lettura dei nuovi messaggi.",
"SettingsFontFamily_Title": "Famiglia di Caratteri",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Rename Linked Account",
"DialogMessage_UnlinkAccountsConfirmationMessage": "This operation will not delete your accounts but only break the link for shared folder connections. Do you want to continue?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Unlink Accounts",
"DialogMessage_EmptySubjectConfirmation": "Missin Subject",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Message has no subject. Do you want to continue?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Use system setting",
"ElementTheme_Light": "Light mode",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Results",
"Right": "Right",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "up to date",
"SynchronizationFolderReport_Failed": "synchronization is failed",
"SearchBarPlaceholder": "Search",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.",
"SettingsManageAccountSettings_Title": "Manage Account Settings",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalization",
"SettingsPrivacyPolicy_Description": "Review privacy policy.",
"SettingsPrivacyPolicy_Title": "Privacy Policy",
"SettingsReadingPane_Description": "Mail rendering options.",
"SettingsReadingPane_Title": "Reading Pane",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Default Reader Font",
"SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.",
"SettingsFontFamily_Title": "Font Family",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Gekoppeld account hernoemen",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Deze handeling zal je accounts niet verwijderen, maar alleen de koppeling van gedeelde mappen verbreken. Wil je doorgaan?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Ontkoppel accounts",
"DialogMessage_EmptySubjectConfirmation": "Onderwerp ontbreekt",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Het bericht heeft geen onderwerp. Wilt u doorgaan?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Systeeminstellingen gebruiken",
"ElementTheme_Light": "Lichte modus",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool is mislukt.",
"Exception_AuthenticationCanceled": "Authenticatie geannuleerd",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Resultaten",
"Right": "Rechts",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "Up-to-date",
"SynchronizationFolderReport_Failed": "Synchronisatie is mislukt",
"SearchBarPlaceholder": "Search",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.",
"SettingsManageAccountSettings_Title": "Manage Account Settings",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalization",
"SettingsPrivacyPolicy_Description": "Review privacy policy.",
"SettingsPrivacyPolicy_Title": "Privacy Policy",
"SettingsReadingPane_Description": "Mail rendering options.",
"SettingsReadingPane_Title": "Reading Pane",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Default Reader Font",
"SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.",
"SettingsFontFamily_Title": "Font Family",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Zmień nazwę połączonego konta",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Ta operacja nie usunie Twoich kont, tylko przerwie połączenie dla wspólnych folderów. Czy chcesz kontynuować?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Odłącz konto",
"DialogMessage_EmptySubjectConfirmation": "Brak tematu",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Wiadomość nie ma tematu. Czy chcesz kontynuować?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Użyj ustawień systemowych",
"ElementTheme_Light": "Tryb jasny",
"Emoji": "Emotikony",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "Pula klienta IMAP nie powiodła się.",
"Exception_AuthenticationCanceled": "Anulowano uwierzytelnianie",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Wyniki",
"Right": "Wyrównaj do prawej",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "aktualne",
"SynchronizationFolderReport_Failed": "synchronizacja nieudana",
"SearchBarPlaceholder": "Szukaj",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Zmień czy foldery konta powinny być zagnieżdżone wewnątrz pozycji menu konta. Wyłącz, jeśli podoba Ci się stary system menu w Windows Mail",
"SettingsManageAccountSettings_Description": "Powiadomienia, podpisy, synchronizacja i inne ustawienia dla każdego konta osobno.",
"SettingsManageAccountSettings_Title": "Zarządzaj ustawieniami konta",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Przenieś elementy, aby dodać nowe połączenie lub usunąć istniejące połączenie.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalizacja",
"SettingsPrivacyPolicy_Description": "Zapoznaj się z Polityką prywatności.",
"SettingsPrivacyPolicy_Title": "Politykę prywatności",
"SettingsReadingPane_Description": "Opcje wyświetlania wiadomości.",
"SettingsReadingPane_Title": "Panel czytania wiadomości",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Domyślna czcionka przy czytaniu wiadomości",
"SettingsReaderFontFamily_Description": "Zmień domyślny rozmiar czcionki i czcionki do odczytu wiadomości.",
"SettingsFontFamily_Title": "Czcionka",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -52,7 +52,7 @@
"ClipboardTextCopyFailed_Message": "Falhou ao copiar {0} para a área de transferência.",
"ComposerToPlaceholder": "Clique em Enter para inserir endereços",
"ComposerAttachmentsDropZone_Message": "Solte seus arquivos aqui",
"ComposerImagesDropZone_Message": "Drop your images here",
"ComposerImagesDropZone_Message": "Solte suas fotos aqui",
"ComposerAttachmentsDragDropAttach_Message": "Anexar",
"CustomThemeBuilder_AccentColorDescription": "Defina a cor de destaque personalizada, se você desejar. Ao não selecionar uma cor, será usado a cor de destaque do seu Windows.",
"CustomThemeBuilder_AccentColorTitle": "Cor de destaque",
@@ -82,10 +82,10 @@
"DialogMessage_RenameLinkedAccountsTitle": "Renomear conta vinculada",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Esta operação não apagará suas contas, mas quebrará apenas o vínculo para conexões de pastas compartilhadas. Você deseja continuar?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Desvincular Contas",
"DialogMessage_EmptySubjectConfirmation": "Sem assunto",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Mensagem não possui assunto. Você deseja continuar?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
"DialogMessage_RenameFolderTitle": "Renomear Pasta",
"DialogMessage_RenameFolderMessage": "Escolha um novo nome para esta pasta",
"DialogMessage_UnsubscribeConfirmationTitle": "Desinscrever",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "Você quer parar de receber mensagens de {0}?",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Para parar de receber mensagens de {0}, vá para o site deles para cancelar a inscrição.",
@@ -100,11 +100,12 @@
"EditorToolbarOption_Insert": "Inserir",
"EditorToolbarOption_None": "Nenhum",
"EditorToolbarOption_Options": "Opções",
"EditorTooltip_WebViewEditor": "Use web view editor",
"EditorTooltip_WebViewEditor": "Usar editor de visualização web",
"ElementTheme_Dark": "Modo escuro",
"ElementTheme_Default": "Usar configurações do sistema",
"ElementTheme_Light": "Modo claro",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Não foi possível encontrar configurações da caixa de e-mail.",
"Exception_ImapClientPoolFailed": "Client Pool do IMAP falhou.",
"Exception_AuthenticationCanceled": "Autenticação cancelada",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Os registros do protocolo estão disponíveis para diagnósticos.",
"Results": "Resultados",
"Right": "Direita",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "Atualizado",
"SynchronizationFolderReport_Failed": "Falha na sincronização",
"SearchBarPlaceholder": "Pesquisar",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Alterar se as pastas da conta devem estar aninhadas dentro de um item de menu de conta ou não. Desative esta opção se você gosta do sistema de menu antigo do Windows Mail",
"SettingsManageAccountSettings_Description": "Notificações, assinaturas, sincronização e outras configurações por conta.",
"SettingsManageAccountSettings_Title": "Gerenciar configurações de conta",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reordenar Contas",
"SettingsReorderAccounts_Description": "Altere a ordem das contas na lista de conta.",
"SettingsManageLink_Description": "Mova os itens para adicionar um novo vínculo ou remover o vínculo existente.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalização",
"SettingsPrivacyPolicy_Description": "Revise a política de privacidade.",
"SettingsPrivacyPolicy_Title": "Política de Privacidade",
"SettingsReadingPane_Description": "Opções de renderização de e-mail.",
"SettingsReadingPane_Title": "Painel de Leitura",
"SettingsReader_Title": "Leitor",
"SettingsComposer_Title": "Compositor",
"SettingsReadComposePane_Description": "Fontes, conteúdo externo.",
"SettingsReadComposePane_Title": "Leitor & Compositor",
"SettingsReaderFont_Title": "Fonte padrão de leitura",
"SettingsReaderFontFamily_Description": "Alterar a família de fontes padrão e o tamanho da fonte para leitura de e-mails.",
"SettingsFontFamily_Title": "Família de fontes",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Adicionar assinatura",
"SettingsSignature_EditSignature_Title": "Editar assinatura",
"SettingsSignature_DeleteSignature_Title": "Excluir assinatura",
"SettingsSignature_NoneSignatureName": "Nenhum"
"SettingsSignature_NoneSignatureName": "Nenhum",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Переименовать имя связанных учетных записей",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Эта операция не удалит ваши учетные записи, но только нарушает ссылку на соединение с общими папками. Вы хотите продолжить?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Отвязать учетные записи",
"DialogMessage_EmptySubjectConfirmation": "Не указана тема письма",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Сообщение не имеет темы. Вы хотите продолжить?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Использовать системные настройки",
"ElementTheme_Light": "Светлая тема",
"Emoji": "Эмодзи",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Не удалось найти настройки почтового ящика.",
"Exception_ImapClientPoolFailed": "Сбой пула клиентов IMAP.",
"Exception_AuthenticationCanceled": "Аутентификация отменена",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Протокольные журналы доступны для диагностики.",
"Results": "Результаты",
"Right": "Справа",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "Обновлено",
"SynchronizationFolderReport_Failed": "Сбой синхронизации",
"SearchBarPlaceholder": "Поиск",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Выберите, должны ли папки учетных записей находится внутри пункта меню «Учетные записи». Выключите эту опцию, если вам нравится старая система меню в Почте Windows",
"SettingsManageAccountSettings_Description": "Уведомления, подписи, синхронизация и другие настройки для каждой учетной записи.",
"SettingsManageAccountSettings_Title": "Управление настройками учетной записи",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Изменить порядок учётных записей",
"SettingsReorderAccounts_Description": "Изменение порядка учетных записей в списке.",
"SettingsManageLink_Description": "Перемещайте элементы, чтобы добавить новую или удалить существующую привязку.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Персонализация",
"SettingsPrivacyPolicy_Description": "Ознакомьтесь с политикой конфиденциальности.",
"SettingsPrivacyPolicy_Title": "Политика конфиденциальности",
"SettingsReadingPane_Description": "Параметры отображения почты.",
"SettingsReadingPane_Title": "Панель чтения",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Шрифт по умолчанию",
"SettingsReaderFontFamily_Description": "Измените семейство и размер шрифта по умолчанию для чтения писем.",
"SettingsFontFamily_Title": "Семейство шрифтов",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Добавить подпись",
"SettingsSignature_EditSignature_Title": "Редактировать подпись",
"SettingsSignature_DeleteSignature_Title": "Удалить подпись",
"SettingsSignature_NoneSignatureName": "Нет"
"SettingsSignature_NoneSignatureName": "Нет",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Rename Linked Account",
"DialogMessage_UnlinkAccountsConfirmationMessage": "This operation will not delete your accounts but only break the link for shared folder connections. Do you want to continue?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Unlink Accounts",
"DialogMessage_EmptySubjectConfirmation": "Missin Subject",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Message has no subject. Do you want to continue?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Use system setting",
"ElementTheme_Light": "Light mode",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Results",
"Right": "Right",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "up to date",
"SynchronizationFolderReport_Failed": "synchronization is failed",
"SearchBarPlaceholder": "Search",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.",
"SettingsManageAccountSettings_Title": "Manage Account Settings",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalization",
"SettingsPrivacyPolicy_Description": "Review privacy policy.",
"SettingsPrivacyPolicy_Title": "Privacy Policy",
"SettingsReadingPane_Description": "Mail rendering options.",
"SettingsReadingPane_Title": "Reading Pane",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Default Reader Font",
"SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.",
"SettingsFontFamily_Title": "Font Family",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Rename Linked Account",
"DialogMessage_UnlinkAccountsConfirmationMessage": "This operation will not delete your accounts but only break the link for shared folder connections. Do you want to continue?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Unlink Accounts",
"DialogMessage_EmptySubjectConfirmation": "Missin Subject",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Message has no subject. Do you want to continue?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "Use system setting",
"ElementTheme_Light": "Light mode",
"Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "Results",
"Right": "Right",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "up to date",
"SynchronizationFolderReport_Failed": "synchronization is failed",
"SearchBarPlaceholder": "Search",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "Change whether account folders should be nested inside an account menu item or not. Toggle this off if you like the old menu system in Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronization and other settings per account.",
"SettingsManageAccountSettings_Title": "Manage Account Settings",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "Personalization",
"SettingsPrivacyPolicy_Description": "Review privacy policy.",
"SettingsPrivacyPolicy_Title": "Privacy Policy",
"SettingsReadingPane_Description": "Mail rendering options.",
"SettingsReadingPane_Title": "Reading Pane",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Default Reader Font",
"SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.",
"SettingsFontFamily_Title": "Font Family",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -82,7 +82,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "重命名已链接账户",
"DialogMessage_UnlinkAccountsConfirmationMessage": "此操作不会删除您的账户,只会断开共享文件夹的连接。是否继续?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "取消链接账户",
"DialogMessage_EmptySubjectConfirmation": "缺少主题",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "邮件没有主题。您想要继续吗?",
"DialogMessage_RenameFolderTitle": "Rename Folder",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder",
@@ -105,6 +105,7 @@
"ElementTheme_Default": "使用系统设置",
"ElementTheme_Light": "浅色模式",
"Emoji": "表情",
"Exception_WinoServerException": "Wino server failed.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP 客户端池失败。",
"Exception_AuthenticationCanceled": "身份验证已取消",
@@ -335,6 +336,7 @@
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.",
"Results": "结果",
"Right": "右侧",
"Reader_SaveAllAttachmentButtonText": "Save all attachments",
"SynchronizationFolderReport_Success": "已是最新",
"SynchronizationFolderReport_Failed": "同步失败",
"SearchBarPlaceholder": "搜索",
@@ -418,6 +420,19 @@
"SettingsFolderMenuStyle_Description": "控制账户文件夹是否应嵌套在账户菜单中。 如果您喜欢Windows邮件中的旧菜单关闭此选项",
"SettingsManageAccountSettings_Description": "每个账户的通知、签名、同步等设置。",
"SettingsManageAccountSettings_Title": "管理账户设置",
"SettingsAppPreferences_Title": "App Preferences",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.",
"SettingsAppPreferences_StartupBehavior_Disabled": "Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.",
"SettingsAppPreferences_StartupBehavior_DisabledByPolicy": "Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable",
"SettingsReorderAccounts_Title": "Reorder Accounts",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.",
"SettingsManageLink_Description": "移动项目以添加新链接或删除现有链接。",
@@ -444,8 +459,10 @@
"SettingsPersonalization_Title": "个性化",
"SettingsPrivacyPolicy_Description": "查看隐私政策。",
"SettingsPrivacyPolicy_Title": "隐私政策",
"SettingsReadingPane_Description": "邮件渲染选项",
"SettingsReadingPane_Title": "阅读面板",
"SettingsReader_Title": "Reader",
"SettingsComposer_Title": "Composer",
"SettingsReadComposePane_Description": "Fonts, external content.",
"SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "默认阅读字体",
"SettingsReaderFontFamily_Description": "更改阅读邮件的默认字体和字体大小。",
"SettingsFontFamily_Title": "字体",
@@ -521,5 +538,15 @@
"SettingsSignature_AddCustomSignature_Button": "Add signature",
"SettingsSignature_EditSignature_Title": "Edit signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature",
"SettingsSignature_NoneSignatureName": "None"
"SettingsSignature_NoneSignatureName": "None",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description": "Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.",
"TitleBarServerDisconnectedButton_Title": "no connection",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.",
"TitleBarServerReconnectButton_Title": "reconnect",
"TitleBarServerReconnectingButton_Title": "connecting"
}

View File

@@ -548,6 +548,11 @@ namespace Wino.Core.Domain
/// </summary>
public static string Emoji => Resources.GetTranslatedString(@"Emoji");
/// <summary>
/// Wino server failed.
/// </summary>
public static string Exception_WinoServerException => Resources.GetTranslatedString(@"Exception_WinoServerException");
/// <summary>
/// Couldn't find mailbox settings.
/// </summary>
@@ -1698,6 +1703,11 @@ namespace Wino.Core.Domain
/// </summary>
public static string Right => Resources.GetTranslatedString(@"Right");
/// <summary>
/// Save all attachments
/// </summary>
public static string Reader_SaveAllAttachmentButtonText => Resources.GetTranslatedString(@"Reader_SaveAllAttachmentButtonText");
/// <summary>
/// up to date
/// </summary>
@@ -2113,6 +2123,71 @@ namespace Wino.Core.Domain
/// </summary>
public static string SettingsManageAccountSettings_Title => Resources.GetTranslatedString(@"SettingsManageAccountSettings_Title");
/// <summary>
/// App Preferences
/// </summary>
public static string SettingsAppPreferences_Title => Resources.GetTranslatedString(@"SettingsAppPreferences_Title");
/// <summary>
/// General settings / preferences for Wino Mail.
/// </summary>
public static string SettingsAppPreferences_Description => Resources.GetTranslatedString(@"SettingsAppPreferences_Description");
/// <summary>
/// Application close behavior
/// </summary>
public static string SettingsAppPreferences_CloseBehavior_Title => Resources.GetTranslatedString(@"SettingsAppPreferences_CloseBehavior_Title");
/// <summary>
/// What should happen when you close the app?
/// </summary>
public static string SettingsAppPreferences_CloseBehavior_Description => Resources.GetTranslatedString(@"SettingsAppPreferences_CloseBehavior_Description");
/// <summary>
/// Start minimized on Windows startup
/// </summary>
public static string SettingsAppPreferences_StartupBehavior_Title => Resources.GetTranslatedString(@"SettingsAppPreferences_StartupBehavior_Title");
/// <summary>
/// Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.
/// </summary>
public static string SettingsAppPreferences_StartupBehavior_Description => Resources.GetTranslatedString(@"SettingsAppPreferences_StartupBehavior_Description");
/// <summary>
/// Wino Mail successfully set to be launched in the background on Windows startup.
/// </summary>
public static string SettingsAppPreferences_StartupBehavior_Enabled => Resources.GetTranslatedString(@"SettingsAppPreferences_StartupBehavior_Enabled");
/// <summary>
/// Wino Mail will not be launched on Windows startup. This will cause you to miss notifications when you restart your computer.
/// </summary>
public static string SettingsAppPreferences_StartupBehavior_Disabled => Resources.GetTranslatedString(@"SettingsAppPreferences_StartupBehavior_Disabled");
/// <summary>
/// Your administrator or group policies disabled running applications on startup. Thus, Wino Mail can't be set to launch on Windows startup.
/// </summary>
public static string SettingsAppPreferences_StartupBehavior_DisabledByPolicy => Resources.GetTranslatedString(@"SettingsAppPreferences_StartupBehavior_DisabledByPolicy");
/// <summary>
/// Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.
/// </summary>
public static string SettingsAppPreferences_StartupBehavior_DisabledByUser => Resources.GetTranslatedString(@"SettingsAppPreferences_StartupBehavior_DisabledByUser");
/// <summary>
/// Fatal error occurred while changing the startup mode for Wino Mail.
/// </summary>
public static string SettingsAppPreferences_StartupBehavior_FatalError => Resources.GetTranslatedString(@"SettingsAppPreferences_StartupBehavior_FatalError");
/// <summary>
/// Enable
/// </summary>
public static string SettingsAppPreferences_StartupBehavior_Enable => Resources.GetTranslatedString(@"SettingsAppPreferences_StartupBehavior_Enable");
/// <summary>
/// Disable
/// </summary>
public static string SettingsAppPreferences_StartupBehavior_Disable => Resources.GetTranslatedString(@"SettingsAppPreferences_StartupBehavior_Disable");
/// <summary>
/// Reorder Accounts
/// </summary>
@@ -2244,14 +2319,24 @@ namespace Wino.Core.Domain
public static string SettingsPrivacyPolicy_Title => Resources.GetTranslatedString(@"SettingsPrivacyPolicy_Title");
/// <summary>
/// Mail rendering options.
/// Reader
/// </summary>
public static string SettingsReadingPane_Description => Resources.GetTranslatedString(@"SettingsReadingPane_Description");
public static string SettingsReader_Title => Resources.GetTranslatedString(@"SettingsReader_Title");
/// <summary>
/// Reading Pane
/// Composer
/// </summary>
public static string SettingsReadingPane_Title => Resources.GetTranslatedString(@"SettingsReadingPane_Title");
public static string SettingsComposer_Title => Resources.GetTranslatedString(@"SettingsComposer_Title");
/// <summary>
/// Fonts, external content.
/// </summary>
public static string SettingsReadComposePane_Description => Resources.GetTranslatedString(@"SettingsReadComposePane_Description");
/// <summary>
/// Reader & Composer
/// </summary>
public static string SettingsReadComposePane_Title => Resources.GetTranslatedString(@"SettingsReadComposePane_Title");
/// <summary>
/// Default Reader Font
@@ -2632,5 +2717,55 @@ namespace Wino.Core.Domain
/// None
/// </summary>
public static string SettingsSignature_NoneSignatureName => Resources.GetTranslatedString(@"SettingsSignature_NoneSignatureName");
/// <summary>
/// Minimize to system tray
/// </summary>
public static string SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title => Resources.GetTranslatedString(@"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title");
/// <summary>
/// Wino Mail will keep running on the system tray. Available to launch by clicking on an icon. You will be notified as new mails arrive.
/// </summary>
public static string SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description => Resources.GetTranslatedString(@"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Description");
/// <summary>
/// Run in the background
/// </summary>
public static string SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title => Resources.GetTranslatedString(@"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title");
/// <summary>
/// Wino Mail will keep running in the background. You will be notified as new mails arrive.
/// </summary>
public static string SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description => Resources.GetTranslatedString(@"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description");
/// <summary>
/// Terminate
/// </summary>
public static string SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title => Resources.GetTranslatedString(@"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title");
/// <summary>
/// Wino Mail will not keep running anywhere. You will not be notified as new mails arrive. Launch Wino Mail again to continue mail synchronization.
/// </summary>
public static string SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description => Resources.GetTranslatedString(@"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description");
/// <summary>
/// no connection
/// </summary>
public static string TitleBarServerDisconnectedButton_Title => Resources.GetTranslatedString(@"TitleBarServerDisconnectedButton_Title");
/// <summary>
/// Wino is disconnected from the network. Click reconnect to restore connection.
/// </summary>
public static string TitleBarServerDisconnectedButton_Description => Resources.GetTranslatedString(@"TitleBarServerDisconnectedButton_Description");
/// <summary>
/// reconnect
/// </summary>
public static string TitleBarServerReconnectButton_Title => Resources.GetTranslatedString(@"TitleBarServerReconnectButton_Title");
/// <summary>
/// connecting
/// </summary>
public static string TitleBarServerReconnectingButton_Title => Resources.GetTranslatedString(@"TitleBarServerReconnectingButton_Title");
}
}

View File

@@ -4,8 +4,19 @@
<TargetFramework>netstandard2.0</TargetFramework>
<ProduceReferenceAssembly>true</ProduceReferenceAssembly>
<LangVersion>12.0</LangVersion>
<Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup>
<ItemGroup>
<Compile Remove="Models\Communication\**" />
<EmbeddedResource Remove="Models\Communication\**" />
<None Remove="Models\Communication\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Interfaces\IWinoSynchronizerFactory.cs" />
</ItemGroup>
<ItemGroup>
<None Remove="Translations\ca_ES\resources.json" />
<None Remove="Translations\cs_CZ\resources.json" />
@@ -49,9 +60,10 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="MimeKit" Version="4.4.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="MimeKit" Version="4.7.1" />
<PackageReference Include="MailKit" Version="4.7.1.1" />
<PackageReference Include="sqlite-net-pcl" Version="1.8.116" />
<PackageReference Include="System.Text.Json" Version="8.0.4" />
</ItemGroup>
<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />

View File

@@ -1,4 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
using Windows.ApplicationModel.AppService;
using Wino.Core.Domain.Interfaces;
using Wino.Core.UWP.Services;
using Wino.Services;
@@ -9,19 +10,24 @@ namespace Wino.Core.UWP
{
public static void RegisterCoreUWPServices(this IServiceCollection services)
{
var serverConnectionManager = new WinoServerConnectionManager();
services.AddSingleton<IWinoServerConnectionManager>(serverConnectionManager);
services.AddSingleton<IWinoServerConnectionManager<AppServiceConnection>>(serverConnectionManager);
services.AddSingleton<IUnderlyingThemeService, UnderlyingThemeService>();
services.AddSingleton<INativeAppService, NativeAppService>();
services.AddSingleton<IStoreManagementService, StoreManagementService>();
services.AddSingleton<IBackgroundTaskService, BackgroundTaskService>();
services.AddTransient<IAppInitializerService, AppInitializerService>();
services.AddTransient<IConfigurationService, ConfigurationService>();
services.AddTransient<IFileService, FileService>();
services.AddTransient<IStoreRatingService, StoreRatingService>();
services.AddTransient<IKeyPressService, KeyPressService>();
services.AddTransient<IBackgroundSynchronizer, BackgroundSynchronizer>();
services.AddTransient<INotificationBuilder, NotificationBuilder>();
services.AddTransient<IClipboardService, ClipboardService>();
services.AddTransient<IStartupBehaviorService, StartupBehaviorService>();
}
}
}

View File

@@ -0,0 +1,25 @@
using Windows.ApplicationModel;
using Wino.Core.Domain.Enums;
namespace Wino.Core.UWP.Extensions
{
public static class StartupTaskStateExtensions
{
public static StartupBehaviorResult AsStartupBehaviorResult(this StartupTaskState state)
{
switch (state)
{
case StartupTaskState.Disabled:
case StartupTaskState.DisabledByPolicy:
return StartupBehaviorResult.Disabled;
case StartupTaskState.DisabledByUser:
return StartupBehaviorResult.DisabledByUser;
case StartupTaskState.Enabled:
case StartupTaskState.EnabledByPolicy:
return StartupBehaviorResult.Enabled;
default:
return StartupBehaviorResult.Fatal;
}
}
}
}

View File

@@ -1,50 +0,0 @@
using System;
using System.Threading.Tasks;
using Windows.Storage;
using Wino.Core.Domain.Interfaces;
namespace Wino.Core.UWP.Services
{
public class AppInitializerService : IAppInitializerService
{
private readonly IBackgroundTaskService _backgroundTaskService;
public AppInitializerService(IBackgroundTaskService backgroundTaskService)
{
_backgroundTaskService = backgroundTaskService;
}
public string GetPublisherSharedFolder() => ApplicationData.Current.GetPublisherCacheFolder("WinoShared").Path;
public string GetApplicationDataFolder() => ApplicationData.Current.LocalFolder.Path;
public Task MigrateAsync()
{
UnregisterAllBackgroundTasks();
return Task.CompletedTask;
}
#region 1.6.8 -> 1.6.9
private void UnregisterAllBackgroundTasks()
{
_backgroundTaskService.UnregisterAllBackgroundTask();
}
#endregion
#region 1.7.0
/// <summary>
/// We decided to use publisher cache folder as a database going forward.
/// This migration will move the file from application local folder and delete it.
/// Going forward database will be initialized from publisher cache folder.
/// </summary>
private async Task MoveExistingDatabaseToSharedCacheFolderAsync()
{
throw new NotImplementedException();
}
#endregion
}
}

View File

@@ -1,144 +0,0 @@
using System;
using System.Threading.Tasks;
using Serilog;
using Windows.Storage;
using Wino.Core;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Exceptions;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Synchronization;
using Wino.Core.Synchronizers;
namespace Wino.Services
{
public interface IBackgroundSynchronizer
{
Task RunBackgroundSynchronizationAsync(BackgroundSynchronizationReason reason);
void CreateLock();
void ReleaseLock();
bool IsBackgroundSynchronizationLocked();
}
/// <summary>
/// Service responsible for handling background synchronization on timer and session connected events.
/// </summary>
public class BackgroundSynchronizer : IBackgroundSynchronizer
{
private const string BackgroundSynchronizationLock = nameof(BackgroundSynchronizationLock);
private readonly IAccountService _accountService;
private readonly IFolderService _folderService;
private readonly IWinoSynchronizerFactory _winoSynchronizerFactory;
public BackgroundSynchronizer(IAccountService accountService,
IFolderService folderService,
IWinoSynchronizerFactory winoSynchronizerFactory)
{
_accountService = accountService;
_folderService = folderService;
_winoSynchronizerFactory = winoSynchronizerFactory;
}
public void CreateLock() => ApplicationData.Current.LocalSettings.Values[BackgroundSynchronizationLock] = true;
public void ReleaseLock() => ApplicationData.Current.LocalSettings.Values[BackgroundSynchronizationLock] = false;
public bool IsBackgroundSynchronizationLocked()
=> ApplicationData.Current.LocalSettings.Values.ContainsKey(BackgroundSynchronizationLock)
&& ApplicationData.Current.LocalSettings.Values[BackgroundSynchronizationLock] is bool boolValue && boolValue;
public async Task RunBackgroundSynchronizationAsync(BackgroundSynchronizationReason reason)
{
Log.Information($"{reason} background synchronization is kicked in.");
// This should never crash.
// We might be in-process or out-of-process.
//if (IsBackgroundSynchronizationLocked())
//{
// Log.Warning("Background synchronization is locked. Hence another background synchronization is canceled.");
// return;
//}
try
{
CreateLock();
var accounts = await _accountService.GetAccountsAsync();
foreach (var account in accounts)
{
// We can't sync broken account.
if (account.AttentionReason != AccountAttentionReason.None)
continue;
// TODO
// We can't synchronize without system folder setup is done.
//var isSystemFolderSetupDone = await _folderService.CheckSystemFolderSetupDoneAsync(account.Id);
//// No need to throw here. It's a background process.
//if (!isSystemFolderSetupDone)
// continue;
var synchronizer = _winoSynchronizerFactory.GetAccountSynchronizer(account.Id);
if (synchronizer.State != AccountSynchronizerState.Idle)
{
Log.Information("Skipping background synchronization for {Name} since current state is {State}", synchronizer.Account.Name, synchronizer.State);
return;
}
await HandleSynchronizationAsync(synchronizer, reason);
}
}
catch (Exception ex)
{
Log.Error($"[BackgroundSynchronization] Failed with message {ex.Message}");
}
finally
{
ReleaseLock();
}
}
private async Task HandleSynchronizationAsync(IBaseSynchronizer synchronizer, BackgroundSynchronizationReason reason)
{
if (synchronizer.State != AccountSynchronizerState.Idle) return;
var account = synchronizer.Account;
try
{
// SessionConnected will do Full synchronization for logon, Timer task will do Inbox only.
var syncType = reason == BackgroundSynchronizationReason.SessionConnected ? SynchronizationType.Full : SynchronizationType.Inbox;
var options = new SynchronizationOptions()
{
AccountId = account.Id,
Type = syncType,
};
await synchronizer.SynchronizeAsync(options);
}
catch (AuthenticationAttentionException authenticationAttentionException)
{
Log.Error(authenticationAttentionException, $"[BackgroundSync] Invalid credentials for account {account.Address}");
account.AttentionReason = AccountAttentionReason.InvalidCredentials;
await _accountService.UpdateAccountAsync(account);
}
catch (SystemFolderConfigurationMissingException configMissingException)
{
Log.Error(configMissingException, $"[BackgroundSync] Missing system folder configuration for account {account.Address}");
account.AttentionReason = AccountAttentionReason.MissingSystemFolderConfiguration;
await _accountService.UpdateAccountAsync(account);
}
catch (Exception ex)
{
Log.Error(ex, "[BackgroundSync] Synchronization failed.");
}
}
}
}

View File

@@ -1,136 +1,32 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Serilog;
using Serilog;
using Windows.ApplicationModel.Background;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Exceptions;
namespace Wino.Core.UWP.Services
{
public class BackgroundTaskService : IBackgroundTaskService
{
private const string IsBackgroundExecutionDeniedMessageKey = nameof(IsBackgroundExecutionDeniedMessageKey);
public const string BackgroundSynchronizationTimerTaskNameEx = nameof(BackgroundSynchronizationTimerTaskNameEx);
public const string ToastActivationTaskEx = nameof(ToastActivationTaskEx);
private const string SessionConnectedTaskEntryPoint = "Wino.BackgroundTasks.SessionConnectedTask";
private const string SessionConnectedTaskName = "SessionConnectedTask";
private const string IsBackgroundTasksUnregisteredKey = nameof(IsBackgroundTasksUnregisteredKey);
private readonly IConfigurationService _configurationService;
private readonly List<string> registeredBackgroundTaskNames = new List<string>();
public BackgroundTaskService(IConfigurationService configurationService)
{
_configurationService = configurationService;
LoadRegisteredTasks();
}
// Calling WinRT all the time for registered tasks might be slow. Cache them on ctor.
private void LoadRegisteredTasks()
{
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
registeredBackgroundTaskNames.Add(task.Value.Name);
}
Log.Information($"Found {registeredBackgroundTaskNames.Count} registered background tasks. [{string.Join(',', registeredBackgroundTaskNames)}]");
}
public async Task HandleBackgroundTaskRegistrations()
{
var response = await BackgroundExecutionManager.RequestAccessAsync();
if (response == BackgroundAccessStatus.DeniedBySystemPolicy ||
response == BackgroundAccessStatus.DeniedByUser)
{
// Only notify users about disabled background execution once.
bool isNotifiedBefore = _configurationService.Get(IsBackgroundExecutionDeniedMessageKey, false);
if (!isNotifiedBefore)
{
_configurationService.Set(IsBackgroundExecutionDeniedMessageKey, true);
throw new BackgroundTaskExecutionRequestDeniedException();
}
}
else
{
RegisterSessionConnectedTask();
RegisterTimerSynchronizationTask();
RegisterToastNotificationHandlerBackgroundTask();
}
}
private bool IsBackgroundTaskRegistered(string taskName)
=> registeredBackgroundTaskNames.Contains(taskName);
public void UnregisterAllBackgroundTask()
{
foreach (var task in BackgroundTaskRegistration.AllTasks)
if (!_configurationService.Get(IsBackgroundTasksUnregisteredKey, false))
{
task.Value.Unregister(true);
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
task.Value.Unregister(true);
}
Log.Information("Unregistered all background tasks.");
_configurationService.Set(IsBackgroundTasksUnregisteredKey, true);
}
}
private void LogBackgroundTaskRegistration(string taskName)
{
Log.Information($"Registered new background task -> {taskName}");
registeredBackgroundTaskNames.Add($"{taskName}");
}
private BackgroundTaskRegistration RegisterSessionConnectedTask()
{
if (IsBackgroundTaskRegistered(SessionConnectedTaskName)) return null;
var builder = new BackgroundTaskBuilder
{
Name = SessionConnectedTaskName,
TaskEntryPoint = SessionConnectedTaskEntryPoint
};
builder.SetTrigger(new SystemTrigger(SystemTriggerType.SessionConnected, false));
LogBackgroundTaskRegistration(SessionConnectedTaskName);
return builder.Register();
}
private BackgroundTaskRegistration RegisterToastNotificationHandlerBackgroundTask()
{
if (IsBackgroundTaskRegistered(ToastActivationTaskEx)) return null;
var builder = new BackgroundTaskBuilder
{
Name = ToastActivationTaskEx
};
builder.SetTrigger(new ToastNotificationActionTrigger());
LogBackgroundTaskRegistration(ToastActivationTaskEx);
return builder.Register();
}
private BackgroundTaskRegistration RegisterTimerSynchronizationTask()
{
if (IsBackgroundTaskRegistered(BackgroundSynchronizationTimerTaskNameEx)) return null;
var builder = new BackgroundTaskBuilder
{
Name = BackgroundSynchronizationTimerTaskNameEx
};
builder.SetTrigger(new TimeTrigger(15, false));
builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));
LogBackgroundTaskRegistration(BackgroundSynchronizationTimerTaskNameEx);
return builder.Register();
}
}
}

View File

@@ -9,10 +9,17 @@ using Windows.Storage;
using Windows.Storage.Streams;
using Windows.System;
using Windows.UI.Shell;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Authorization;
using Wino.Core.Domain.Exceptions;
using Wino.Core.Domain;
#if WINDOWS_UWP
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
#endif
namespace Wino.Services
{
@@ -20,8 +27,18 @@ namespace Wino.Services
{
private string _mimeMessagesFolder;
private string _editorBundlePath;
private TaskCompletionSource<Uri> authorizationCompletedTaskSource;
public string GetWebAuthenticationBrokerUri() => WebAuthenticationBroker.GetCurrentApplicationCallbackUri().AbsoluteUri;
public Func<IntPtr> GetCoreWindowHwnd { get; set; }
public string GetWebAuthenticationBrokerUri()
{
#if WINDOWS_UWP
return WebAuthenticationBroker.GetCurrentApplicationCallbackUri().AbsoluteUri;
#endif
return string.Empty;
}
public async Task<string> GetMimeMessageStoragePath()
{
@@ -91,7 +108,16 @@ namespace Wino.Services
return _editorBundlePath;
}
public bool IsAppRunning() => (Window.Current?.Content as Frame)?.Content != null;
[Obsolete("This should be removed. There should be no functionality.")]
public bool IsAppRunning()
{
#if WINDOWS_UWP
return (Window.Current?.Content as Frame)?.Content != null;
#endif
return true;
}
public async Task LaunchFileAsync(string filePath)
{
@@ -100,7 +126,7 @@ namespace Wino.Services
await Launcher.LaunchFileAsync(file);
}
public Task LaunchUriAsync(Uri uri) => Xamarin.Essentials.Launcher.OpenAsync(uri);
public Task LaunchUriAsync(Uri uri) => Launcher.LaunchUriAsync(uri).AsTask();
public string GetFullAppVersion()
{
@@ -127,5 +153,28 @@ namespace Wino.Services
await taskbarManager.RequestPinCurrentAppAsync();
}
public async Task<Uri> GetAuthorizationResponseUriAsync(IAuthenticator authenticator, string authorizationUri)
{
if (authorizationCompletedTaskSource != null)
{
authorizationCompletedTaskSource.TrySetException(new AuthenticationException(Translator.Exception_AuthenticationCanceled));
authorizationCompletedTaskSource = null;
}
authorizationCompletedTaskSource = new TaskCompletionSource<Uri>();
await LaunchUriAsync(new Uri(authorizationUri));
return await authorizationCompletedTaskSource.Task;
}
public void ContinueAuthorization(Uri authorizationResponseUri)
{
if (authorizationCompletedTaskSource != null)
{
authorizationCompletedTaskSource.TrySetResult(authorizationResponseUri);
}
}
}
}

View File

@@ -2,7 +2,7 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Toolkit.Uwp.Notifications;
using CommunityToolkit.WinUI.Notifications;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
using Wino.Core.Domain;
@@ -70,8 +70,8 @@ namespace Wino.Core.UWP.Services
foreach (var mailItem in validItems)
{
if (mailItem.IsRead)
continue;
//if (mailItem.IsRead)
// continue;
var builder = new ToastContentBuilder();
builder.SetToastScenario(ToastScenario.Default);
@@ -104,11 +104,11 @@ namespace Wino.Core.UWP.Services
builder.AddText(mailItem.Subject);
builder.AddText(mailItem.PreviewText);
builder.AddArgument(Constants.ToastMailItemIdKey, mailItem.UniqueId.ToString());
builder.AddArgument(Constants.ToastMailUniqueIdKey, mailItem.UniqueId.ToString());
builder.AddArgument(Constants.ToastActionKey, MailOperation.Navigate);
builder.AddButton(GetMarkedAsRead(mailItem.Id, mailItem.AssignedFolder.RemoteFolderId));
builder.AddButton(GetDeleteButton(mailItem.Id, mailItem.AssignedFolder.RemoteFolderId));
builder.AddButton(GetMarkedAsRead(mailItem.UniqueId));
builder.AddButton(GetDeleteButton(mailItem.UniqueId));
builder.AddButton(GetDismissButton());
builder.Show();
@@ -123,21 +123,19 @@ namespace Wino.Core.UWP.Services
.SetDismissActivation()
.SetImageUri(new Uri("ms-appx:///Assets/NotificationIcons/dismiss.png"));
private ToastButton GetDeleteButton(string mailCopyId, string remoteFolderId)
private ToastButton GetDeleteButton(Guid mailUniqueId)
=> new ToastButton()
.SetContent(Translator.MailOperation_Delete)
.SetImageUri(new Uri("ms-appx:///Assets/NotificationIcons/delete.png"))
.AddArgument(Constants.ToastMailItemIdKey, mailCopyId)
.AddArgument(Constants.ToastMailItemRemoteFolderIdKey, remoteFolderId)
.AddArgument(Constants.ToastMailUniqueIdKey, mailUniqueId.ToString())
.AddArgument(Constants.ToastActionKey, MailOperation.SoftDelete)
.SetBackgroundActivation();
private ToastButton GetMarkedAsRead(string mailCopyId, string remoteFolderId)
private ToastButton GetMarkedAsRead(Guid mailUniqueId)
=> new ToastButton()
.SetContent(Translator.MailOperation_MarkAsRead)
.SetImageUri(new System.Uri("ms-appx:///Assets/NotificationIcons/markread.png"))
.AddArgument(Constants.ToastMailItemIdKey, mailCopyId)
.AddArgument(Constants.ToastMailItemRemoteFolderIdKey, remoteFolderId)
.AddArgument(Constants.ToastMailUniqueIdKey, mailUniqueId.ToString())
.AddArgument(Constants.ToastActionKey, MailOperation.MarkAsRead)
.SetBackgroundActivation();

View File

@@ -7,7 +7,7 @@ using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Reader;
using Wino.Core.Services;
namespace Wino.Services
namespace Wino.Core.UWP.Services
{
public class PreferencesService : ObservableObject, IPreferencesService
{
@@ -166,9 +166,9 @@ namespace Wino.Services
set => SaveProperty(propertyName: nameof(CurrentLanguage), value);
}
public ReaderFont ReaderFont
public string ReaderFont
{
get => _configurationService.Get(nameof(ReaderFont), ReaderFont.Calibri);
get => _configurationService.Get(nameof(ReaderFont), "Calibri");
set => SaveProperty(propertyName: nameof(ReaderFont), value);
}
@@ -178,6 +178,18 @@ namespace Wino.Services
set => SaveProperty(propertyName: nameof(ReaderFontSize), value);
}
public string ComposerFont
{
get => _configurationService.Get(nameof(ComposerFont), "Calibri");
set => SaveProperty(propertyName: nameof(ComposerFont), value);
}
public int ComposerFontSize
{
get => _configurationService.Get(nameof(ComposerFontSize), 14);
set => SaveProperty(propertyName: nameof(ComposerFontSize), value);
}
public bool IsNavigationPaneOpened
{
get => _configurationService.Get(nameof(IsNavigationPaneOpened), true);
@@ -189,5 +201,11 @@ namespace Wino.Services
get => _configurationService.Get(nameof(AutoSelectNextItem), true);
set => SaveProperty(propertyName: nameof(AutoSelectNextItem), value);
}
public ServerBackgroundMode ServerTerminationBehavior
{
get => _configurationService.Get(nameof(ServerTerminationBehavior), ServerBackgroundMode.MinimizedTray);
set => SaveProperty(propertyName: nameof(ServerTerminationBehavior), value);
}
}
}

View File

@@ -0,0 +1,37 @@
using System;
using System.Threading.Tasks;
using Windows.ApplicationModel;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
using Wino.Core.UWP.Extensions;
namespace Wino.Core.UWP.Services
{
public class StartupBehaviorService : IStartupBehaviorService
{
private const string WinoServerTaskId = "WinoServer";
public async Task<StartupBehaviorResult> ToggleStartupBehavior(bool isEnabled)
{
var task = await StartupTask.GetAsync(WinoServerTaskId);
if (isEnabled)
{
await task.RequestEnableAsync();
}
else
{
task.Disable();
}
return await GetCurrentStartupBehaviorAsync();
}
public async Task<StartupBehaviorResult> GetCurrentStartupBehaviorAsync()
{
var task = await StartupTask.GetAsync(WinoServerTaskId);
return task.State.AsStartupBehaviorResult();
}
}
}

View File

@@ -2,9 +2,8 @@
using System.ComponentModel;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.AppCenter.Crashes;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Messages.Shell;
using Wino.Messaging.Client.Shell;
namespace Wino.Services
{
@@ -116,17 +115,10 @@ namespace Wino.Services
private void UpdateAppCoreWindowTitle()
{
try
{
var appView = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView();
var appView = Windows.UI.ViewManagement.ApplicationView.GetForCurrentView();
if (appView != null)
appView.Title = CoreWindowTitle;
}
catch (System.Exception ex)
{
Crashes.TrackError(ex);
}
if (appView != null)
appView.Title = CoreWindowTitle;
}
}
}

View File

@@ -4,10 +4,10 @@ using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Text.Json;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Toolkit.Uwp.Helpers;
using Newtonsoft.Json;
using Windows.Storage;
using Windows.UI;
using Windows.UI.ViewManagement;
@@ -20,10 +20,10 @@ using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Exceptions;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Personalization;
using Wino.Core.Messages.Shell;
using Wino.Core.UWP.Extensions;
using Wino.Core.UWP.Models.Personalization;
using Wino.Core.UWP.Services;
using Wino.Messaging.Client.Shell;
namespace Wino.Services
{
@@ -167,6 +167,7 @@ namespace Wino.Services
await ApplyCustomThemeAsync(true);
// Registering to color changes, thus we notice when user changes theme system wide
uiSettings.ColorValuesChanged -= UISettingsColorChanged;
uiSettings.ColorValuesChanged += UISettingsColorChanged;
}
@@ -405,7 +406,7 @@ namespace Wino.Services
// Save metadata.
var metadataFile = await themeFolder.CreateFileAsync($"{newTheme.Id}.json", CreationCollisionOption.ReplaceExisting);
var serialized = JsonConvert.SerializeObject(newTheme);
var serialized = JsonSerializer.Serialize(newTheme);
await FileIO.WriteTextAsync(metadataFile, serialized);
return newTheme;
@@ -437,7 +438,7 @@ namespace Wino.Services
{
var fileContent = await FileIO.ReadTextAsync(file);
return JsonConvert.DeserializeObject<CustomThemeMetadata>(fileContent);
return JsonSerializer.Deserialize<CustomThemeMetadata>(fileContent);
}
public string GetSystemAccentColorHex()

View File

@@ -1,5 +1,5 @@
using Windows.UI.ViewManagement;
using Windows.UI.Xaml;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
namespace Wino.Core.UWP.Services
@@ -21,12 +21,12 @@ namespace Wino.Core.UWP.Services
public bool IsUnderlyingThemeDark()
{
var currentTheme = _configurationService.Get(SelectedAppThemeKey, ElementTheme.Default);
var currentTheme = _configurationService.Get(SelectedAppThemeKey, ApplicationElementTheme.Default);
if (currentTheme == ElementTheme.Default)
if (currentTheme == ApplicationElementTheme.Default)
return uiSettings.GetColorValue(UIColorType.Background).ToString() == "#FF000000";
else
return currentTheme == ElementTheme.Dark;
return currentTheme == ApplicationElementTheme.Dark;
}
}
}

View File

@@ -0,0 +1,346 @@
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Messaging;
using Nito.AsyncEx;
using Serilog;
using Windows.ApplicationModel;
using Windows.ApplicationModel.AppService;
using Windows.Foundation.Collections;
using Windows.Foundation.Metadata;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Requests;
using Wino.Core.Domain.Models.Server;
using Wino.Core.Integration.Json;
using Wino.Messaging;
using Wino.Messaging.Client.Connection;
using Wino.Messaging.Enums;
using Wino.Messaging.UI;
namespace Wino.Core.UWP.Services
{
public class WinoServerConnectionManager :
IWinoServerConnectionManager<AppServiceConnection>,
IRecipient<WinoServerConnectionEstablished>
{
private const int ServerConnectionTimeoutMs = 10000;
public event EventHandler<WinoServerConnectionStatus> StatusChanged;
public TaskCompletionSource<bool> ConnectingHandle { get; private set; }
private ILogger Logger => Logger.ForContext<WinoServerConnectionManager>();
private WinoServerConnectionStatus status;
public WinoServerConnectionStatus Status
{
get { return status; }
private set
{
Log.Information("Server connection status changed to {Status}.", value);
status = value;
StatusChanged?.Invoke(this, value);
}
}
private AppServiceConnection _connection;
public AppServiceConnection Connection
{
get { return _connection; }
set
{
if (_connection != null)
{
_connection.RequestReceived -= ServerMessageReceived;
_connection.ServiceClosed -= ServerDisconnected;
}
_connection = value;
if (value == null)
{
Status = WinoServerConnectionStatus.Disconnected;
}
else
{
value.RequestReceived += ServerMessageReceived;
value.ServiceClosed += ServerDisconnected;
Status = WinoServerConnectionStatus.Connected;
}
}
}
private readonly JsonSerializerOptions _jsonSerializerOptions = new()
{
TypeInfoResolver = new ServerRequestTypeInfoResolver()
};
public WinoServerConnectionManager()
{
WeakReferenceMessenger.Default.Register(this);
}
public async Task<bool> ConnectAsync()
{
if (Status == WinoServerConnectionStatus.Connected)
{
Log.Information("Server is already connected.");
return true;
}
if (Status == WinoServerConnectionStatus.Connecting)
{
// A connection is already being established at the moment.
// No need to run another connection establishment process.
// Await the connecting handler if possible.
if (ConnectingHandle != null)
{
return await ConnectingHandle.Task;
}
}
if (ApiInformation.IsApiContractPresent("Windows.ApplicationModel.FullTrustAppContract", 1, 0))
{
try
{
ConnectingHandle = new TaskCompletionSource<bool>();
Status = WinoServerConnectionStatus.Connecting;
var connectionCancellationToken = new CancellationTokenSource(TimeSpan.FromMilliseconds(ServerConnectionTimeoutMs));
await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();
// Connection establishment handler is in App.xaml.cs OnBackgroundActivated.
// Once the connection is established, the handler will set the Connection property
// and WinoServerConnectionEstablished will be fired by the messenger.
await ConnectingHandle.Task.WaitAsync(connectionCancellationToken.Token);
Log.Information("Server connection established successfully.");
}
catch (OperationCanceledException canceledException)
{
Log.Error(canceledException, $"Server process did not start in {ServerConnectionTimeoutMs} ms. Operation is canceled.");
ConnectingHandle?.TrySetException(canceledException);
Status = WinoServerConnectionStatus.Failed;
return false;
}
catch (Exception ex)
{
Log.Error(ex, "Failed to connect to the server.");
ConnectingHandle?.TrySetException(ex);
Status = WinoServerConnectionStatus.Failed;
return false;
}
return true;
}
else
{
Log.Information("FullTrustAppContract is not present in the system. Server connection is not possible.");
}
return false;
}
public async Task InitializeAsync()
{
var isConnectionSuccessfull = await ConnectAsync();
if (isConnectionSuccessfull)
{
Log.Information("ServerConnectionManager initialized successfully.");
}
else
{
Log.Error("ServerConnectionManager initialization failed.");
}
}
private void ServerMessageReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
{
if (args.Request.Message.TryGetValue(MessageConstants.MessageTypeKey, out object messageTypeObject) && messageTypeObject is int messageTypeInt)
{
var messageType = (MessageType)messageTypeInt;
if (args.Request.Message.TryGetValue(MessageConstants.MessageDataKey, out object messageDataObject) && messageDataObject is string messageJson)
{
switch (messageType)
{
case MessageType.UIMessage:
if (!args.Request.Message.TryGetValue(MessageConstants.MessageDataTypeKey, out object dataTypeObject) || dataTypeObject is not string dataTypeName)
throw new ArgumentException("Message data type is missing.");
HandleUIMessage(messageJson, dataTypeName);
break;
default:
break;
}
}
}
}
/// <summary>
/// Unpacks IServerMessage objects and delegate it to Messenger for UI to process.
/// </summary>
/// <param name="messageJson">Message data in json format.</param>
private void HandleUIMessage(string messageJson, string typeName)
{
switch (typeName)
{
case nameof(MailAddedMessage):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<MailAddedMessage>(messageJson));
break;
case nameof(MailDownloadedMessage):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<MailDownloadedMessage>(messageJson));
break;
case nameof(MailRemovedMessage):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<MailRemovedMessage>(messageJson));
break;
case nameof(MailUpdatedMessage):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<MailUpdatedMessage>(messageJson));
break;
case nameof(AccountCreatedMessage):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<AccountCreatedMessage>(messageJson));
break;
case nameof(AccountRemovedMessage):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<AccountRemovedMessage>(messageJson));
break;
case nameof(AccountUpdatedMessage):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<AccountUpdatedMessage>(messageJson));
break;
case nameof(DraftCreated):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<DraftCreated>(messageJson));
break;
case nameof(DraftFailed):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<DraftFailed>(messageJson));
break;
case nameof(DraftMapped):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<DraftMapped>(messageJson));
break;
case nameof(FolderRenamed):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<FolderRenamed>(messageJson));
break;
case nameof(FolderSynchronizationEnabled):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<FolderSynchronizationEnabled>(messageJson));
break;
case nameof(MergedInboxRenamed):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<MergedInboxRenamed>(messageJson));
break;
case nameof(AccountSynchronizationCompleted):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<AccountSynchronizationCompleted>(messageJson));
break;
case nameof(RefreshUnreadCountsMessage):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<RefreshUnreadCountsMessage>(messageJson));
break;
case nameof(AccountSynchronizerStateChanged):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<AccountSynchronizerStateChanged>(messageJson));
break;
case nameof(AccountSynchronizationProgressUpdatedMessage):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<AccountSynchronizationProgressUpdatedMessage>(messageJson));
break;
default:
throw new Exception("Invalid data type name passed to client.");
}
}
private void ServerDisconnected(AppServiceConnection sender, AppServiceClosedEventArgs args)
{
Log.Information("Server disconnected.");
}
public async Task QueueRequestAsync(IRequestBase request, Guid accountId)
{
var queuePackage = new ServerRequestPackage(accountId, request);
var queueResponse = await GetResponseInternalAsync<bool, ServerRequestPackage>(queuePackage, new Dictionary<string, object>()
{
{ MessageConstants.MessageDataRequestAccountIdKey, accountId }
});
queueResponse.ThrowIfFailed();
}
public Task<WinoServerResponse<TResponse>> GetResponseAsync<TResponse, TRequestType>(TRequestType message) where TRequestType : IClientMessage
=> GetResponseInternalAsync<TResponse, TRequestType>(message);
private async Task<WinoServerResponse<TResponse>> GetResponseInternalAsync<TResponse, TRequestType>(TRequestType message, Dictionary<string, object> parameters = null)
{
if (Status != WinoServerConnectionStatus.Connected)
await ConnectAsync();
string serializedMessage = string.Empty;
try
{
serializedMessage = JsonSerializer.Serialize(message, _jsonSerializerOptions);
}
catch (Exception serializationException)
{
Logger.Error(serializationException, $"Failed to serialize client message for sending.");
return WinoServerResponse<TResponse>.CreateErrorResponse($"Failed to serialize message.\n{serializationException.Message}");
}
AppServiceResponse response = null;
try
{
var valueSet = new ValueSet
{
{ MessageConstants.MessageTypeKey, (int)MessageType.ServerMessage },
{ MessageConstants.MessageDataKey, serializedMessage },
{ MessageConstants.MessageDataTypeKey, message.GetType().Name }
};
// Add additional parameters into ValueSet
if (parameters != null)
{
foreach (var item in parameters)
{
valueSet.Add(item.Key, item.Value);
}
}
response = await Connection.SendMessageAsync(valueSet);
}
catch (Exception serverSendException)
{
Logger.Error(serverSendException, $"Failed to send message to server.");
return WinoServerResponse<TResponse>.CreateErrorResponse($"Failed to send message to server.\n{serverSendException.Message}");
}
// It should be always Success.
if (response.Status != AppServiceResponseStatus.Success)
return WinoServerResponse<TResponse>.CreateErrorResponse($"Wino Server responded with '{response.Status}' status to message delivery.");
// All responses must contain a message data.
if (!(response.Message.TryGetValue(MessageConstants.MessageDataKey, out object messageDataObject) && messageDataObject is string messageJson))
return WinoServerResponse<TResponse>.CreateErrorResponse("Server response did not contain message data.");
// Try deserialize the message data.
try
{
return JsonSerializer.Deserialize<WinoServerResponse<TResponse>>(messageJson);
}
catch (Exception jsonDeserializationError)
{
Logger.Error(jsonDeserializationError, $"Failed to deserialize server response message data.");
return WinoServerResponse<TResponse>.CreateErrorResponse($"Failed to deserialize Wino server response message data.\n{jsonDeserializationError.Message}");
}
}
public void Receive(WinoServerConnectionEstablished message)
=> ConnectingHandle?.TrySetResult(true);
}
}

View File

@@ -17,25 +17,6 @@
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
@@ -118,17 +99,21 @@
</PropertyGroup>
<PropertyGroup>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<LangVersion>12.0</LangVersion>
</PropertyGroup>
<ItemGroup>
<Compile Include="CoreUWPContainerSetup.cs" />
<Compile Include="Dispatcher.cs" />
<Compile Include="Extensions\ElementThemeExtensions.cs" />
<Compile Include="Extensions\StartupTaskStateExtensions.cs" />
<Compile Include="Models\Personalization\CustomAppTheme.cs" />
<Compile Include="Models\Personalization\PreDefinedAppTheme.cs" />
<Compile Include="Models\Personalization\SystemAppTheme.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Services\AppInitializerService.cs" />
<Compile Include="Services\BackgroundSynchronizer.cs" />
<Compile Include="Services\PreferencesService.cs" />
<Compile Include="Services\StartupBehaviorService.cs" />
<Compile Include="Services\StatePersistenceService.cs" />
<Compile Include="Services\WinoServerConnectionManager.cs" />
<Compile Include="Services\BackgroundTaskService.cs" />
<Compile Include="Services\ClipboardService.cs" />
<Compile Include="Services\ConfigurationService.cs" />
@@ -143,9 +128,9 @@
<EmbeddedResource Include="Properties\Wino.Core.UWP.rd.xml" />
</ItemGroup>
<ItemGroup>
<!--<PackageReference Include="CommunityToolkit.Uwp.Helpers">
<Version>8.0.230907</Version>
</PackageReference>-->
<PackageReference Include="CommunityToolkit.WinUI.Notifications">
<Version>7.1.2</Version>
</PackageReference>
<PackageReference Include="Microsoft.AppCenter.Analytics">
<Version>5.0.4</Version>
</PackageReference>
@@ -155,9 +140,6 @@
<PackageReference Include="Microsoft.Toolkit.Uwp">
<Version>7.1.3</Version>
</PackageReference>
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications">
<Version>7.1.3</Version>
</PackageReference>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Wino.Core.Domain\Wino.Core.Domain.csproj">
@@ -168,8 +150,16 @@
<Project>{e6b1632a-8901-41e8-9ddf-6793c7698b0b}</Project>
<Name>Wino.Core</Name>
</ProjectReference>
<ProjectReference Include="..\Wino.Messages\Wino.Messaging.csproj">
<Project>{0c307d7e-256f-448c-8265-5622a812fbcc}</Project>
<Name>Wino.Messaging</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<SDKReference Include="WindowsDesktop, Version=10.0.22621.0">
<Name>Windows Desktop Extensions for the UWP</Name>
</SDKReference>
</ItemGroup>
<ItemGroup />
<PropertyGroup Condition=" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' ">
<VisualStudioVersion>14.0</VisualStudioVersion>
</PropertyGroup>

View File

@@ -1,34 +0,0 @@
using System;
using System.Threading.Tasks;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Services;
namespace Wino.Core.Authenticators
{
public class CustomAuthenticator : BaseAuthenticator, IAuthenticator
{
public CustomAuthenticator(ITokenService tokenService) : base(tokenService) { }
public override MailProviderType ProviderType => MailProviderType.IMAP4;
public string ClientId => throw new NotImplementedException(); // Not needed.
public event EventHandler<string> InteractiveAuthenticationRequired;
public void CancelAuthorization() { }
public void ContinueAuthorization(Uri authorizationResponseUri) { }
public Task<TokenInformation> GenerateTokenAsync(MailAccount account, bool saveToken)
{
throw new NotImplementedException();
}
public Task<TokenInformation> GetTokenAsync(MailAccount account)
{
throw new NotImplementedException();
}
}
}

View File

@@ -1,10 +1,8 @@
using System;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Text.Json.Nodes;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using Nito.AsyncEx;
using Wino.Core.Domain;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums;
@@ -13,11 +11,10 @@ using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Authentication;
using Wino.Core.Domain.Models.Authorization;
using Wino.Core.Services;
using Xamarin.Essentials;
namespace Wino.Core.Authenticators
{
public class GmailAuthenticator : BaseAuthenticator, IAuthenticator
public class GmailAuthenticator : BaseAuthenticator, IGmailAuthenticator
{
public string ClientId { get; } = "973025879644-s7b4ur9p3rlgop6a22u7iuptdc0brnrn.apps.googleusercontent.com";
@@ -27,9 +24,6 @@ namespace Wino.Core.Authenticators
public override MailProviderType ProviderType => MailProviderType.Gmail;
private TaskCompletionSource<Uri> _authorizationCompletionSource = null;
private CancellationTokenSource _authorizationCancellationTokenSource = null;
private readonly INativeAppService _nativeAppService;
public event EventHandler<string> InteractiveAuthenticationRequired;
@@ -64,14 +58,14 @@ namespace Wino.Core.Authenticators
if (!response.IsSuccessStatusCode)
throw new GoogleAuthenticationException(Translator.Exception_GoogleAuthorizationCodeExchangeFailed);
var parsed = JObject.Parse(responseString);
var parsed = JsonNode.Parse(responseString).AsObject();
if (parsed.ContainsKey("error"))
throw new GoogleAuthenticationException(parsed["error"]["message"].Value<string>());
throw new GoogleAuthenticationException(parsed["error"]["message"].GetValue<string>());
var accessToken = parsed["access_token"].Value<string>();
var refreshToken = parsed["refresh_token"].Value<string>();
var expiresIn = parsed["expires_in"].Value<long>();
var accessToken = parsed["access_token"].GetValue<string>();
var refreshToken = parsed["refresh_token"].GetValue<string>();
var expiresIn = parsed["expires_in"].GetValue<long>();
var expirationDate = DateTime.UtcNow.AddSeconds(expiresIn);
@@ -82,12 +76,12 @@ namespace Wino.Core.Authenticators
var userinfoResponse = await client.GetAsync(UserInfoEndpoint);
string userinfoResponseContent = await userinfoResponse.Content.ReadAsStringAsync();
var parsedUserInfo = JObject.Parse(userinfoResponseContent);
var parsedUserInfo = JsonNode.Parse(userinfoResponseContent).AsObject();
if (parsedUserInfo.ContainsKey("error"))
throw new GoogleAuthenticationException(parsedUserInfo["error"]["message"].Value<string>());
throw new GoogleAuthenticationException(parsedUserInfo["error"]["message"].GetValue<string>());
var username = parsedUserInfo["emailAddress"].Value<string>();
var username = parsedUserInfo["emailAddress"].GetValue<string>();
return new TokenInformation()
{
@@ -99,8 +93,6 @@ namespace Wino.Core.Authenticators
};
}
public void ContinueAuthorization(Uri authorizationResponseUri) => _authorizationCompletionSource?.TrySetResult(authorizationResponseUri);
public async Task<TokenInformation> GetTokenAsync(MailAccount account)
{
var cachedToken = await TokenService.GetTokenInformationAsync(account.Id)
@@ -127,29 +119,19 @@ namespace Wino.Core.Authenticators
{
var authRequest = _nativeAppService.GetGoogleAuthorizationRequest();
_authorizationCompletionSource = new TaskCompletionSource<Uri>();
_authorizationCancellationTokenSource = new CancellationTokenSource();
var authorizationUri = authRequest.BuildRequest(ClientId);
await Browser.OpenAsync(authorizationUri, BrowserLaunchMode.SystemPreferred);
Uri responseRedirectUri = null;
try
{
responseRedirectUri = await _authorizationCompletionSource.Task.WaitAsync(_authorizationCancellationTokenSource.Token);
//await _authorizationCompletionSource.Task.WaitAsync(_authorizationCancellationTokenSource.Token);
responseRedirectUri = await _nativeAppService.GetAuthorizationResponseUriAsync(this, authorizationUri);
}
catch (OperationCanceledException)
catch (Exception)
{
throw new AuthenticationException(Translator.Exception_AuthenticationCanceled);
}
finally
{
_authorizationCancellationTokenSource.Dispose();
_authorizationCancellationTokenSource = null;
_authorizationCompletionSource = null;
}
authRequest.ValidateAuthorizationCode(responseRedirectUri);
@@ -184,13 +166,13 @@ namespace Wino.Core.Authenticators
string responseString = await response.Content.ReadAsStringAsync();
var parsed = JObject.Parse(responseString);
var parsed = JsonNode.Parse(responseString).AsObject();
// TODO: Error parsing is incorrect.
if (parsed.ContainsKey("error"))
throw new GoogleAuthenticationException(parsed["error_description"].Value<string>());
throw new GoogleAuthenticationException(parsed["error_description"].GetValue<string>());
var accessToken = parsed["access_token"].Value<string>();
var accessToken = parsed["access_token"].GetValue<string>();
string activeRefreshToken = refresh_token;
@@ -200,10 +182,10 @@ namespace Wino.Core.Authenticators
if (parsed.ContainsKey("refresh_token"))
{
activeRefreshToken = parsed["refresh_token"].Value<string>();
activeRefreshToken = parsed["refresh_token"].GetValue<string>();
}
var expiresIn = parsed["expires_in"].Value<long>();
var expiresIn = parsed["expires_in"].GetValue<long>();
var expirationDate = DateTime.UtcNow.AddSeconds(expiresIn);
return new TokenInformationBase()
@@ -213,7 +195,5 @@ namespace Wino.Core.Authenticators
RefreshToken = activeRefreshToken
};
}
public void CancelAuthorization() => _authorizationCancellationTokenSource?.Cancel();
}
}

View File

@@ -6,7 +6,7 @@ namespace Wino.Core.Authenticators
{
public class Office365Authenticator : OutlookAuthenticator
{
public Office365Authenticator(ITokenService tokenService, INativeAppService nativeAppService) : base(tokenService, nativeAppService) { }
public Office365Authenticator(ITokenService tokenService, INativeAppService nativeAppService, IApplicationConfiguration applicationConfiguration) : base(tokenService, nativeAppService, applicationConfiguration) { }
public override MailProviderType ProviderType => MailProviderType.Office365;
}

View File

@@ -2,6 +2,8 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Identity.Client;
using Microsoft.Identity.Client.Broker;
using Microsoft.Identity.Client.Extensions.Msal;
using Wino.Core.Domain;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums;
@@ -12,76 +14,82 @@ using Wino.Core.Services;
namespace Wino.Core.Authenticators
{
public class OutlookAuthenticator : BaseAuthenticator, IAuthenticator
/// <summary>
/// Authenticator for Outlook provider.
/// Token cache is managed by MSAL, not by Wino.
/// </summary>
public class OutlookAuthenticator : BaseAuthenticator, IOutlookAuthenticator
{
private const string TokenCacheFileName = "OutlookCache.bin";
private bool isTokenCacheAttached = false;
// Outlook
private const string Authority = "https://login.microsoftonline.com/common";
public string ClientId { get; } = "b19c2035-d740-49ff-b297-de6ec561b208";
private readonly string[] MailScope = new string[] { "email", "mail.readwrite", "offline_access", "mail.send" };
private readonly string[] MailScope = ["email", "mail.readwrite", "offline_access", "mail.send"];
public override MailProviderType ProviderType => MailProviderType.Outlook;
private readonly IPublicClientApplication _publicClientApplication;
private readonly IApplicationConfiguration _applicationConfiguration;
public OutlookAuthenticator(ITokenService tokenService, INativeAppService nativeAppService) : base(tokenService)
public OutlookAuthenticator(ITokenService tokenService,
INativeAppService nativeAppService,
IApplicationConfiguration applicationConfiguration) : base(tokenService)
{
_applicationConfiguration = applicationConfiguration;
var authenticationRedirectUri = nativeAppService.GetWebAuthenticationBrokerUri();
_publicClientApplication = PublicClientApplicationBuilder.Create(ClientId)
.WithAuthority(Authority)
.WithRedirectUri(authenticationRedirectUri)
.Build();
var options = new BrokerOptions(BrokerOptions.OperatingSystems.Windows)
{
Title = "Wino Mail",
ListOperatingSystemAccounts = true,
};
var outlookAppBuilder = PublicClientApplicationBuilder.Create(ClientId)
.WithParentActivityOrWindow(nativeAppService.GetCoreWindowHwnd)
.WithBroker(options)
.WithDefaultRedirectUri()
.WithAuthority(Authority);
_publicClientApplication = outlookAppBuilder.Build();
}
#pragma warning disable S1133 // Deprecated code should be removed
[Obsolete("Not used for OutlookAuthenticator.")]
#pragma warning restore S1133 // Deprecated code should be removed
public void ContinueAuthorization(Uri authorizationResponseUri) { }
#pragma warning disable S1133 // Deprecated code should be removed
[Obsolete("Not used for OutlookAuthenticator.")]
#pragma warning restore S1133 // Deprecated code should be removed
public void CancelAuthorization() { }
public async Task<TokenInformation> GetTokenAsync(MailAccount account)
{
var cachedToken = await TokenService.GetTokenInformationAsync(account.Id)
?? throw new AuthenticationAttentionException(account);
// We have token but it's expired.
// Silently refresh the token and save new token.
if (cachedToken.IsExpired)
if (!isTokenCacheAttached)
{
var cachedOutlookAccount = (await _publicClientApplication.GetAccountsAsync()).FirstOrDefault(a => a.Username == account.Address);
var storageProperties = new StorageCreationPropertiesBuilder(TokenCacheFileName, _applicationConfiguration.PublisherSharedFolderPath).Build();
var msalcachehelper = await MsalCacheHelper.CreateAsync(storageProperties);
msalcachehelper.RegisterCache(_publicClientApplication.UserTokenCache);
// Again, not expected at all...
// Force interactive login at this point.
if (cachedOutlookAccount == null)
{
// What if interactive login info is for different account?
return await GenerateTokenAsync(account, true);
}
else
{
// Silently refresh token from cache.
AuthenticationResult authResult = await _publicClientApplication.AcquireTokenSilent(MailScope, cachedOutlookAccount).ExecuteAsync();
// Save refreshed token and return
var refreshedTokenInformation = authResult.CreateTokenInformation();
await TokenService.SaveTokenInformationAsync(account.Id, refreshedTokenInformation);
return refreshedTokenInformation;
}
isTokenCacheAttached = true;
}
var storedAccount = (await _publicClientApplication.GetAccountsAsync()).FirstOrDefault(a => a.Username == account.Address);
// TODO: Handle it from the server.
if (storedAccount == null) throw new AuthenticationAttentionException(account);
try
{
var authResult = await _publicClientApplication.AcquireTokenSilent(MailScope, storedAccount).ExecuteAsync();
return authResult.CreateTokenInformation() ?? throw new Exception("Failed to get Outlook token.");
}
catch (MsalUiRequiredException)
{
// Somehow MSAL is not able to refresh the token silently.
// Force interactive login.
return await GenerateTokenAsync(account, true);
}
catch (Exception)
{
throw;
}
else
return cachedToken;
}
public async Task<TokenInformation> GenerateTokenAsync(MailAccount account, bool saveToken)

View File

@@ -1,40 +0,0 @@
using System;
using System.Threading.Tasks;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Services;
namespace Wino.Core.Authenticators
{
public class YahooAuthenticator : BaseAuthenticator, IAuthenticator
{
public YahooAuthenticator(ITokenService tokenService) : base(tokenService) { }
public override MailProviderType ProviderType => MailProviderType.Yahoo;
public string ClientId => throw new NotImplementedException();
public event EventHandler<string> InteractiveAuthenticationRequired;
public void CancelAuthorization()
{
throw new NotImplementedException();
}
public void ContinueAuthorization(Uri authorizationResponseUri)
{
throw new NotImplementedException();
}
public Task<TokenInformation> GenerateTokenAsync(MailAccount account, bool saveToken)
{
throw new NotImplementedException();
}
public Task<TokenInformation> GetTokenAsync(MailAccount account)
{
throw new NotImplementedException();
}
}
}

View File

@@ -1,5 +1,6 @@
using Microsoft.Extensions.DependencyInjection;
using Serilog.Core;
using Wino.Core.Authenticators;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Integration.Processors;
using Wino.Core.Integration.Threading;
@@ -16,9 +17,9 @@ namespace Wino.Core
services.AddSingleton(loggerLevelSwitcher);
services.AddSingleton<ILogInitializer, LogInitializer>();
services.AddSingleton<IApplicationConfiguration, ApplicationConfiguration>();
services.AddSingleton<ITranslationService, TranslationService>();
services.AddSingleton<IDatabaseService, DatabaseService>();
services.AddSingleton<IWinoSynchronizerFactory, WinoSynchronizerFactory>();
services.AddSingleton<IThreadingStrategyProvider, ThreadingStrategyProvider>();
services.AddSingleton<IMimeFileService, MimeFileService>();
@@ -42,9 +43,14 @@ namespace Wino.Core
services.AddTransient<IFontService, FontService>();
services.AddTransient<IUnsubscriptionService, UnsubscriptionService>();
services.AddTransient<IOutlookAuthenticator, OutlookAuthenticator>();
services.AddTransient<IGmailAuthenticator, GmailAuthenticator>();
services.AddTransient<OutlookThreadingStrategy>();
services.AddTransient<GmailThreadingStrategy>();
services.AddTransient<ImapThreadStrategy>();
services.AddSingleton<ISynchronizerFactory, SynchronizerFactory>();
}
}
}

View File

@@ -1,9 +1,12 @@
using System.IO;
using System;
using System.IO;
using System.Text;
using Google.Apis.Gmail.v1.Data;
using HtmlAgilityPack;
using MimeKit;
using MimeKit.IO;
using MimeKit.IO.Filters;
using MimeKit.Utils;
using Wino.Core.Domain;
using Wino.Core.Domain.Entities;
@@ -48,5 +51,71 @@ namespace Wino.Core.Extensions
return new AddressInformation() { Name = address.Name, Address = address.Address };
}
/// <summary>
/// Sets html body replacing base64 images with cid linked resources.
/// Updates text body based on html.
/// </summary>
/// <param name="bodyBuilder">Body builder.</param>
/// <param name="htmlContent">Html content that can have embedded images.</param>
/// <returns>Body builder with set HtmlBody.</returns>
public static BodyBuilder SetHtmlBody(this BodyBuilder bodyBuilder, string htmlContent)
{
if (string.IsNullOrEmpty(htmlContent)) return bodyBuilder;
var doc = new HtmlDocument();
doc.LoadHtml(htmlContent);
var imgNodes = doc.DocumentNode.SelectNodes("//img");
if (imgNodes != null)
{
foreach (var node in imgNodes)
{
var src = node.GetAttributeValue("src", string.Empty);
if (string.IsNullOrEmpty(src)) continue;
if (!src.StartsWith("data:image"))
{
continue;
}
var parts = src.Substring(11).Split([";base64,"], StringSplitOptions.None);
string mimeType = parts[0];
string base64Content = parts[1];
var alt = node.GetAttributeValue("alt", $"Embedded_Image.{mimeType}");
// Convert the base64 content to binary data
byte[] imageData = Convert.FromBase64String(base64Content);
// Create a new linked resource as MimePart
var image = new MimePart("image", mimeType)
{
ContentId = MimeUtils.GenerateMessageId(),
Content = new MimeContent(new MemoryStream(imageData)),
ContentDisposition = new ContentDisposition(ContentDisposition.Inline),
ContentDescription = alt.Replace(" ", "_"),
FileName = alt,
ContentTransferEncoding = ContentEncoding.Base64
};
bodyBuilder.LinkedResources.Add(image);
node.SetAttributeValue("src", $"cid:{image.ContentId}");
}
}
bodyBuilder.HtmlBody = doc.DocumentNode.InnerHtml;
if (!string.IsNullOrEmpty(bodyBuilder.HtmlBody))
{
bodyBuilder.TextBody = HtmlAgilityPackExtensions.GetPreviewText(bodyBuilder.HtmlBody);
}
return bodyBuilder;
}
}
}

View File

@@ -8,21 +8,15 @@ namespace Wino.Core.Extensions
{
public static TokenInformation CreateTokenInformation(this AuthenticationResult clientBuilderResult)
{
var expirationDate = clientBuilderResult.ExpiresOn.UtcDateTime;
var accesToken = clientBuilderResult.AccessToken;
var userName = clientBuilderResult.Account.Username;
// MSAL does not expose refresh token for security reasons.
// This token info will be created without refresh token.
// but OutlookIntegrator will ask for publicApplication to refresh it
// in case of expiration.
// Plain access token info is not stored for Outlook in Wino's database.
// Here we store UniqueId and Access Token in memory only to compare the UniqueId returned from MSAL auth result.
var tokenInfo = new TokenInformation()
{
ExpiresAt = expirationDate,
AccessToken = accesToken,
Address = userName,
Address = clientBuilderResult.Account.Username,
Id = Guid.NewGuid(),
UniqueId = clientBuilderResult.UniqueId,
AccessToken = clientBuilderResult.AccessToken
};
return tokenInfo;

View File

@@ -1,36 +0,0 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;
namespace Wino.Core.Http
{
/// <summary>
/// We need to generate HttpRequestMessage for batch requests, and sometimes we need to
/// serialize content as json. However, some of the fields like 'ODataType' must be ignored
/// in order PATCH requests to succeed. Therefore Microsoft account synchronizer uses
/// special JsonSerializerSettings for ignoring some of the properties.
/// </summary>
public class MicrosoftJsonContractResolver : DefaultContractResolver
{
private readonly HashSet<string> ignoreProps = new HashSet<string>()
{
"ODataType"
};
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);
if (ignoreProps.Contains(property.PropertyName))
{
property.ShouldSerialize = _ => false;
}
return property;
}
}
}

View File

@@ -0,0 +1,49 @@
using System.Text.Json.Serialization.Metadata;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.MailItem;
using Wino.Core.Requests;
namespace Wino.Core.Integration.Json
{
public class ServerRequestTypeInfoResolver : DefaultJsonTypeInfoResolver
{
public ServerRequestTypeInfoResolver()
{
Modifiers.Add(new System.Action<JsonTypeInfo>(t =>
{
if (t.Type == typeof(IRequestBase))
{
t.PolymorphismOptions = new()
{
DerivedTypes =
{
new JsonDerivedType(typeof(AlwaysMoveToRequest), nameof(AlwaysMoveToRequest)),
new JsonDerivedType(typeof(ArchiveRequest), nameof(ArchiveRequest)),
new JsonDerivedType(typeof(ChangeFlagRequest), nameof(ChangeFlagRequest)),
new JsonDerivedType(typeof(CreateDraftRequest), nameof(CreateDraftRequest)),
new JsonDerivedType(typeof(DeleteRequest), nameof(DeleteRequest)),
new JsonDerivedType(typeof(EmptyFolderRequest), nameof(EmptyFolderRequest)),
new JsonDerivedType(typeof(MarkFolderAsReadRequest), nameof(MarkFolderAsReadRequest)),
new JsonDerivedType(typeof(MarkReadRequest), nameof(MarkReadRequest)),
new JsonDerivedType(typeof(MoveRequest), nameof(MoveRequest)),
new JsonDerivedType(typeof(MoveToFocusedRequest), nameof(MoveToFocusedRequest)),
new JsonDerivedType(typeof(RenameFolderRequest), nameof(RenameFolderRequest)),
new JsonDerivedType(typeof(SendDraftRequest), nameof(SendDraftRequest)),
}
};
}
else if (t.Type == typeof(IMailItem))
{
t.PolymorphismOptions = new JsonPolymorphismOptions()
{
DerivedTypes =
{
new JsonDerivedType(typeof(MailCopy), nameof(MailCopy)),
}
};
}
}));
}
}
}

View File

@@ -62,6 +62,15 @@ namespace Wino.Core.Integration.Processors
/// <returns>Whether the mime has b</returns>
Task<bool> IsMailExistsAsync(string messageId);
/// <summary>
/// Checks whether the mail exists in the folder.
/// When deciding Create or Update existing mail, we need to check if the mail exists in the folder.
/// </summary>
/// <param name="messageId">Message id</param>
/// <param name="folderId">Folder's local id.</param>
/// <returns>Whether mail exists in the folder or not.</returns>
Task<bool> IsMailExistsInFolderAsync(string messageId, Guid folderId);
/// <summary>
/// Updates Folder's delta synchronization identifier.
/// Only used in Outlook since it does per-folder sync.
@@ -70,6 +79,24 @@ namespace Wino.Core.Integration.Processors
/// <param name="synchronizationIdentifier">New synchronization identifier.</param>
/// <returns>New identifier if success.</returns>
Task UpdateFolderDeltaSynchronizationIdentifierAsync(Guid folderId, string deltaSynchronizationIdentifier);
/// <summary>
/// Outlook may expire folder's delta token after a while.
/// Recommended action for this scenario is to reset token and do full sync.
/// This method resets the token for the given folder.
/// </summary>
/// <param name="folderId">Local folder id to reset token for.</param>
/// <returns>Empty string to assign folder delta sync for.</returns>
Task<string> ResetFolderDeltaTokenAsync(Guid folderId);
/// <summary>
/// Outlook may expire account's delta token after a while.
/// This will result returning 410 GONE response from the API for synchronizing folders.
/// This method resets the token for the given account for re-syncing folders.
/// </summary>
/// <param name="accountId">Account identifier to reset delta token for.</param>
/// <returns>Empty string to assign account delta sync for.</returns>
Task<string> ResetAccountDeltaTokenAsync(Guid accountId);
}
public interface IImapChangeProcessor : IDefaultChangeProcessor
@@ -90,11 +117,11 @@ namespace Wino.Core.Integration.Processors
protected IMailService MailService = mailService;
protected IFolderService FolderService = folderService;
private readonly IAccountService _accountService = accountService;
protected IAccountService AccountService = accountService;
private readonly IMimeFileService _mimeFileService = mimeFileService;
public Task<string> UpdateAccountDeltaSynchronizationIdentifierAsync(Guid accountId, string synchronizationDeltaIdentifier)
=> _accountService.UpdateSynchronizationIdentifierAsync(accountId, synchronizationDeltaIdentifier);
=> AccountService.UpdateSynchronizationIdentifierAsync(accountId, synchronizationDeltaIdentifier);
public Task ChangeFlagStatusAsync(string mailCopyId, bool isFlagged)
=> MailService.ChangeFlagStatusAsync(mailCopyId, isFlagged);

View File

@@ -9,11 +9,29 @@ namespace Wino.Core.Integration.Processors
IFolderService folderService,
IMailService mailService,
IAccountService accountService,
IMimeFileService mimeFileService) : DefaultChangeProcessor(databaseService, folderService, mailService, accountService, mimeFileService), IOutlookChangeProcessor
IMimeFileService mimeFileService) : DefaultChangeProcessor(databaseService, folderService, mailService, accountService, mimeFileService)
, IOutlookChangeProcessor
{
public Task<bool> IsMailExistsAsync(string messageId)
=> MailService.IsMailExistsAsync(messageId);
public Task<bool> IsMailExistsInFolderAsync(string messageId, Guid folderId)
=> MailService.IsMailExistsAsync(messageId, folderId);
public Task<string> ResetAccountDeltaTokenAsync(Guid accountId)
=> AccountService.UpdateSynchronizationIdentifierAsync(accountId, null);
public async Task<string> ResetFolderDeltaTokenAsync(Guid folderId)
{
var folder = await FolderService.GetFolderAsync(folderId);
folder.DeltaToken = null;
await FolderService.UpdateFolderAsync(folder);
return string.Empty;
}
public Task UpdateFolderDeltaSynchronizationIdentifierAsync(Guid folderId, string synchronizationIdentifier)
=> Connection.ExecuteAsync("UPDATE MailItemFolder SET DeltaToken = ? WHERE Id = ?", synchronizationIdentifier, folderId);
}

Some files were not shown because too many files have changed in this diff Show More