117 Commits

Author SHA1 Message Date
Burak Kaan Köse
24c8cfd402 Revert padding for mail list container. 2024-08-31 18:23:22 +02:00
Burak Kaan Köse
8257b0b582 Merge pull request #345 from bkaankose/hotfix/Expander
New expander control for conversation threads
2024-08-31 16:12:32 +02:00
Burak Kaan Köse
e612f2c281 Remove redundant code. 2024-08-31 16:11:19 +02:00
Burak Kaan Köse
155df59b1d Increase pre-defined size to fit mail icon changes. 2024-08-31 16:11:11 +02:00
Burak Kaan Köse
6efab9f386 merged main 2024-08-31 15:31:29 +02:00
Burak Kaan Köse
422105a507 Merge pull request #344 from bkaankose/features/action-bar
Mail List action bar improvements
2024-08-31 15:28:59 +02:00
Burak Kaan Köse
d58438ab1d Removed margin and increased padding. 2024-08-31 15:26:22 +02:00
Burak Kaan Köse
209aa1a89f 4x top margin for mail list. 2024-08-31 15:22:20 +02:00
Aleh Khantsevich
07ac81583e Fix delete action on KeyPress 2024-08-31 15:11:28 +02:00
Burak Kaan Köse
ee6249bb17 Selecting first mail when thread is expanded. 2024-08-31 15:08:43 +02:00
Aleh Khantsevich
b8ca3f8604 Disable toolbar when nothing selected. 2024-08-31 14:29:57 +02:00
Aleh Khantsevich
85b5469d96 Fix wrong logic for set/unset flag 2024-08-31 14:19:43 +02:00
Aleh Khantsevich
d3ddf7b191 style/renaming 2024-08-31 13:56:31 +02:00
Aleh Khantsevich
ebf196ec73 Remove redundant message 2024-08-31 13:39:32 +02:00
Aleh Khantsevich
85c3833452 Make TopBar dynamic 2024-08-31 13:25:55 +02:00
Burak Kaan Köse
8fb4735fc2 Handling hover action tap delegates. 2024-08-31 03:37:04 +02:00
Burak Kaan Köse
6bb09f10d2 Finished wino expander implementation. 2024-08-31 03:18:43 +02:00
Aleh Khantsevich
a4ff67e8f4 Fix margins 2024-08-31 00:42:17 +02:00
Burak Kaan Köse
b9a1756f90 Moving expander chevron to mail display control. 2024-08-30 02:20:16 +02:00
Burak Kaan Köse
72ff8e67ed Merge branch 'main' into hotfix/Expander 2024-08-30 01:11:19 +02:00
Burak Kaan Köse
d7006365eb Merge pull request #342 from bkaankose/hotfix/InvalidContactCrashFix
Fixed invalid contacts causing folder loading to crash.
2024-08-30 01:05:01 +02:00
Burak Kaan Köse
86ef78b296 Fixed invalid contacts causing folder loading to crash. 2024-08-30 01:03:35 +02:00
Aleh Khantsevich
0d84e409c5 Fix button sizes 2024-08-30 00:15:13 +02:00
Burak Kaan Köse
17c7b33167 Merge pull request #341 from bkaankose/hotfix/FixGmailDelete
Fixing Gmail SENT label deletes.
2024-08-30 00:03:53 +02:00
Burak Kaan Köse
856e1613a0 Fixing Gmail sent folder deletes. 2024-08-29 23:58:39 +02:00
Burak Kaan Köse
8db34289a7 Fixing single threads for API threading strategy. 2024-08-29 23:43:49 +02:00
Burak Kaan Köse
3016f70349 Handling gmail errors. 2024-08-29 22:43:27 +02:00
Aleh Khantsevich
bdf212fdb3 Remove bottom padding of mail list 2024-08-29 17:36:50 +02:00
Aleh Khantsevich
c6216f54f8 simplify layout for mail list 2024-08-29 17:18:46 +02:00
Aleh Khantsevich
945c747e3e Added setting to show/hide action bar in mail list 2024-08-29 01:13:51 +02:00
Aleh Khantsevich
552fca8df7 Moved refresh and multi select buttons 2024-08-29 00:19:24 +02:00
Burak Kaan Köse
4dac160619 Fix 995 char limit on message headers for Outlook. 2024-08-28 22:17:13 +02:00
Burak Kaan Köse
fc0e746e1b Reduce outlook send draft delay to 6 secs. 2024-08-27 01:48:03 +02:00
Burak Kaan Köse
8374b5fc0c Fix replying issues with Outlook due to cc or bcc headers. 2024-08-27 01:47:50 +02:00
Burak Kaan Köse
52923ed35b Bump some more nugets, remove redundant events, and fix Outlook profile sync permission issue. 2024-08-26 22:09:00 +02:00
Aleh Khantsevich
f002ccfa3a Replace WinoPivot with segmented 2024-08-26 17:27:27 +02:00
Burak Kaan Köse
b64cc44531 Bumping some nugets. 2024-08-26 11:30:29 +02:00
Burak Kaan Köse
1b51982551 Merge pull request #335 from bkaankose/code-quality/tabbed-commandbar
Code Quality: TabbedCommandBar
2024-08-26 01:14:29 +02:00
Burak Kaan Köse
f4bbf6eb73 New expander control. 2024-08-26 01:07:51 +02:00
Aleh Khantsevich
10c94efa57 Fix priority button size 2024-08-26 00:58:41 +02:00
Aleh Khantsevich
c84316e974 Added translations for discard/send buttons in composer 2024-08-26 00:31:12 +02:00
Aleh Khantsevich
7e4d1fbf49 Replace custom pivot + command bar with tabbed commandbar 2024-08-25 23:52:55 +02:00
Burak Kaan Köse
31c7c8b46f Remove unused namespace. 2024-08-25 21:45:13 +02:00
Burak Kaan Köse
8cdb6646c4 Fixed account re-ordering issues with merged accounts. 2024-08-25 19:51:19 +02:00
Burak Kaan Köse
43a51e5f2f Per-session ImapSynchronizer protocol log based on accounts. 2024-08-25 10:32:07 +02:00
Burak Kaan Köse
d0b54ea44b Prevent delay between mail addings and better folder init cancellation. 2024-08-25 02:01:08 +02:00
Burak Kaan Köse
c8fce82dc1 Fix merged accounts report progress for incorrect account during synchronization. 2024-08-24 21:09:20 +02:00
Burak Kaan Köse
3ffccaa7e5 Fixed non-updating UI for thread items. 2024-08-24 18:12:20 +02:00
Burak Kaan Köse
3f7e7a1474 Generalized sender-from name for IMAP synchronizer. 2024-08-24 17:35:46 +02:00
Burak Kaan Köse
d30c15464b Fix account folder layout is not updated if there is a change after the synchronization. 2024-08-24 17:22:47 +02:00
Burak Kaan Köse
2a1f748469 Fix for to,cc and bcc fields are cut out in rendering page. 2024-08-24 17:22:03 +02:00
Burak Kaan Köse
74b429b1bf Applying default xaml styler configs. 2024-08-24 16:16:56 +02:00
Burak Kaan Köse
7afe1b517c Ignore task bar pinning errors. 2024-08-24 16:10:14 +02:00
Burak Kaan Köse
fcdcf5692f Fix indentation. 2024-08-24 16:06:36 +02:00
Burak Kaan Köse
735baa67ed Default XamlStyler config for the solution. 2024-08-24 16:06:14 +02:00
Burak Kaan Köse
ac00caf83e AccountContact comments. 2024-08-24 16:06:06 +02:00
Burak Kaan Köse
2ccda353e9 Debug log messages on updating flag changes. 2024-08-24 15:54:35 +02:00
Burak Kaan Köse
4257ca54b7 Fix updating folder on name changes for imap. 2024-08-24 15:54:12 +02:00
Burak Kaan Köse
20dd2ef98d Min log level to Debug for debug builds. 2024-08-24 15:53:46 +02:00
Burak Kaan Köse
8be52c9ddd Capitilize first letter of folder names if all capital for IMAP. 2024-08-24 15:38:52 +02:00
Burak Kaan Köse
3bea6619fa Enable all folder sync for gmail. 2024-08-24 15:38:23 +02:00
Burak Kaan Köse
0e5fb11c52 Fix for missing folder update changes for gmail. 2024-08-24 15:26:08 +02:00
Burak Kaan Köse
fc47f7701d Always focus to first line on editor focus. 2024-08-24 15:13:02 +02:00
Burak Kaan Köse
3e4ccf8de4 Merge pull request #331 from bkaankose/feature/ContactPictures
Account contact pictures
2024-08-24 12:55:04 +02:00
Burak Kaan Köse
8abb3c709b More logging for App.xaml.cs 2024-08-24 12:54:39 +02:00
Burak Kaan Köse
5263900620 Async cancellation support for contact picture loading. 2024-08-24 01:57:36 +02:00
Burak Kaan Köse
54ee9e5072 Remove redundant IsKnown property. 2024-08-24 01:57:19 +02:00
Burak Kaan Köse
20f4857405 Root contact concept. 2024-08-24 00:14:32 +02:00
Burak Kaan Köse
55110dd39d Merge pull request #333 from bkaankose/l10n_main
New Crowdin updates
2024-08-23 15:04:04 +02:00
Burak Kaan Köse
07d8111df9 New translations resources.json (Indonesian) 2024-08-23 15:03:46 +02:00
Burak Kaan Köse
a701b97f1e New translations resources.json (Portuguese, Brazilian) 2024-08-23 15:03:45 +02:00
Burak Kaan Köse
b025537d62 New translations resources.json (Galician) 2024-08-23 15:03:44 +02:00
Burak Kaan Köse
e68bc2de65 New translations resources.json (Chinese Simplified) 2024-08-23 15:03:43 +02:00
Burak Kaan Köse
d0b1c93382 New translations resources.json (Ukrainian) 2024-08-23 15:03:42 +02:00
Burak Kaan Köse
a08fa9eabf New translations resources.json (Turkish) 2024-08-23 15:03:40 +02:00
Burak Kaan Köse
65ef130bda New translations resources.json (Russian) 2024-08-23 15:03:39 +02:00
Burak Kaan Köse
32471a71e5 New translations resources.json (Polish) 2024-08-23 15:03:38 +02:00
Burak Kaan Köse
ca80f01907 New translations resources.json (Dutch) 2024-08-23 15:03:37 +02:00
Burak Kaan Köse
b1fae57922 New translations resources.json (Japanese) 2024-08-23 15:03:36 +02:00
Burak Kaan Köse
dea01dda2d New translations resources.json (Italian) 2024-08-23 15:03:35 +02:00
Burak Kaan Köse
9777619259 New translations resources.json (Finnish) 2024-08-23 15:03:34 +02:00
Burak Kaan Köse
6db0f84f8f New translations resources.json (Greek) 2024-08-23 15:03:32 +02:00
Burak Kaan Köse
84e382fcc5 New translations resources.json (German) 2024-08-23 15:03:31 +02:00
Burak Kaan Köse
eceed1b934 New translations resources.json (Danish) 2024-08-23 15:03:30 +02:00
Burak Kaan Köse
e7b5cd74a4 New translations resources.json (Czech) 2024-08-23 15:03:29 +02:00
Burak Kaan Köse
a98930791c New translations resources.json (Catalan) 2024-08-23 15:03:28 +02:00
Burak Kaan Köse
67b0389097 New translations resources.json (Spanish) 2024-08-23 15:03:27 +02:00
Burak Kaan Köse
ff30595fb4 New translations resources.json (French) 2024-08-23 15:03:26 +02:00
Burak Kaan Köse
d272b62c45 Remove commented code. 2024-08-23 14:54:30 +02:00
Burak Kaan Köse
c1973023d0 Fix for webview2 not focusing properly issue. 2024-08-23 03:00:22 +02:00
Burak Kaan Köse
ef4689619e Displaying contact picture for rendering page and small adjustments for addresses UI. 2024-08-23 02:23:52 +02:00
Burak Kaan Köse
9ed297a49d New contact picture display for address fields. 2024-08-23 02:23:27 +02:00
Burak Kaan Köse
9950729080 New contact retrival method. 2024-08-23 02:07:50 +02:00
Burak Kaan Köse
36eec9d061 Remove obsolete code. 2024-08-23 02:07:32 +02:00
Burak Kaan Köse
fd3a977009 Creating contract on profile update. 2024-08-23 02:07:25 +02:00
Burak Kaan Köse
ff88832cca Asynchronously load correct contact data for composer. 2024-08-23 02:06:58 +02:00
Burak Kaan Köse
d69b72b77d Fixed not-scrollable address infos for to,cc and bcc fields. 2024-08-23 02:06:28 +02:00
Burak Kaan Köse
d9bd9e996b Fix for duplicating incorrect address info in rendering page. 2024-08-23 02:05:15 +02:00
Burak Kaan Köse
f45580be70 Adding contact details for loaded mails and fixing background notification actions. 2024-08-23 01:07:00 +02:00
Burak Kaan Köse
0fbeb11304 Merge pull request #329 from bkaankose/feature/NewStartup
Handling app termination and reworked dialog messages.
2024-08-22 18:41:38 +02:00
Burak Kaan Köse
6a70c13b57 Merge pull request #330 from bkaankose/fix/editor-full-height
Make Jodit fill all available height of webview
2024-08-22 14:01:25 +02:00
Aleh Khantsevich
f797520e56 Make Jodit fill all available height of webview 2024-08-22 01:59:09 +02:00
Burak Kaan Köse
d060db3c96 Fixing an issue where doing folder config on account does not refresh the folder list. 2024-08-22 01:20:08 +02:00
Burak Kaan Köse
298344c2ab Remove async from adding attachments. 2024-08-22 00:57:46 +02:00
Burak Kaan Köse
53dbeadabb Prevent asking users for startup launch if they already did that. 2024-08-22 00:52:41 +02:00
Burak Kaan Köse
93087d7aa7 Ask for enable startup on first launch. 2024-08-22 00:51:10 +02:00
Burak Kaan Köse
c304517fc2 Revert debug code. 2024-08-21 23:30:57 +02:00
Burak Kaan Köse
af13e034c3 New resource strings for app closing handlers. 2024-08-21 23:22:32 +02:00
Burak Kaan Köse
e6b9d59160 Potential crash for imap. 2024-08-21 23:16:46 +02:00
Burak Kaan Köse
bd9cbe30c5 Fixed crashing issue with disposing composing page. 2024-08-21 23:14:59 +02:00
Burak Kaan Köse
f627226da9 Server termination and refactoring message dialogs. 2024-08-21 22:42:52 +02:00
Burak Kaan Köse
bab3272970 Fix couple potential crash issues due to unsupported APIs. 2024-08-21 19:50:14 +02:00
Burak Kaan Köse
003085db7e Merge pull request #328 from bkaankose/hotfix/LogsArchive
Fixing sharing logs
2024-08-21 13:58:39 +02:00
Burak Kaan Köse
8f98bd37c7 Implemented log archive. 2024-08-21 13:54:24 +02:00
Burak Kaan Köse
6971ef1ede Remove imap protocol log sharing since it's already moved to a separate dialog when error occurs during setup. 2024-08-21 13:49:38 +02:00
Burak Kaan Köse
0baac3dc49 Addressing some Outlook sending issues due to API delay. 2024-08-21 13:15:50 +02:00
Burak Kaan Köse
16feb8602d Getting rid of ARM32 and preperation for beta 1.8.3. 2024-08-21 03:54:36 +02:00
147 changed files with 4884 additions and 3841 deletions

42
Settings.XamlStyler Normal file
View File

@@ -0,0 +1,42 @@
{
"AttributesTolerance": 2,
"KeepFirstAttributeOnSameLine": false,
"MaxAttributeCharactersPerLine": 0,
"MaxAttributesPerLine": 1,
"NewlineExemptionElements": "RadialGradientBrush, GradientStop, LinearGradientBrush, ScaleTransform, SkewTransform, RotateTransform, TranslateTransform, Trigger, Condition, Setter",
"SeparateByGroups": false,
"AttributeIndentation": 0,
"AttributeIndentationStyle": 1,
"RemoveDesignTimeReferences": false,
"IgnoreDesignTimeReferencePrefix": false,
"EnableAttributeReordering": true,
"AttributeOrderingRuleGroups": [
"x:Class",
"xmlns, xmlns:x",
"xmlns:*",
"x:Key, Key, x:Name, Name, x:Uid, Uid, Title",
"Grid.Row, Grid.RowSpan, Grid.Column, Grid.ColumnSpan, Canvas.Left, Canvas.Top, Canvas.Right, Canvas.Bottom",
"Width, Height, MinWidth, MinHeight, MaxWidth, MaxHeight",
"Margin, Padding, HorizontalAlignment, VerticalAlignment, HorizontalContentAlignment, VerticalContentAlignment, Panel.ZIndex",
"*:*, *",
"PageSource, PageIndex, Offset, Color, TargetName, Property, Value, StartPoint, EndPoint",
"mc:Ignorable, d:IsDataSource, d:LayoutOverrides, d:IsStaticText",
"Storyboard.*, From, To, Duration"
],
"FirstLineAttributes": "",
"OrderAttributesByName": true,
"PutEndingBracketOnNewLine": false,
"RemoveEndingTagOfEmptyElement": true,
"SpaceBeforeClosingSlash": true,
"RootElementLineBreakRule": 0,
"ReorderVSM": 2,
"ReorderGridChildren": false,
"ReorderCanvasChildren": false,
"ReorderSetters": 0,
"FormatMarkupExtension": true,
"NoNewLineMarkupExtensions": "x:Bind, Binding",
"ThicknessSeparator": 2,
"ThicknessAttributes": "Margin, Padding, BorderThickness, ThumbnailClipMargin",
"FormatOnSave": true,
"CommentPadding": 2,
}

View File

@@ -38,26 +38,6 @@
<UseVSHostingProcess>false</UseVSHostingProcess> <UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
<PlatformTarget>ARM</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
<PlatformTarget>ARM</PlatformTarget>
<OutputPath>bin\ARM\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'">
<PlatformTarget>ARM64</PlatformTarget> <PlatformTarget>ARM64</PlatformTarget>
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>

View File

@@ -13,5 +13,6 @@
public const string ClientLogFile = "Client_.log"; public const string ClientLogFile = "Client_.log";
public const string ServerLogFile = "Server_.log"; public const string ServerLogFile = "Server_.log";
public const string LogArchiveFileName = "WinoLogs.zip";
} }
} }

View File

@@ -1,6 +1,6 @@
using SQLite; using System;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using SQLite;
namespace Wino.Core.Domain.Entities namespace Wino.Core.Domain.Entities
{ {
@@ -9,23 +9,41 @@ namespace Wino.Core.Domain.Entities
/// These values will be inserted during MIME fetch. /// These values will be inserted during MIME fetch.
/// </summary> /// </summary>
// TODO: This can easily evolve to Contact store, just like People app in Windows 10/11. // TODO: This can easily evolve to Contact store, just like People app in Windows 10/11.
// Do it. // Do it.
public class AddressInformation : IEquatable<AddressInformation> public class AccountContact : IEquatable<AccountContact>
{ {
/// <summary>
/// E-mail address of the contact.
/// </summary>
[PrimaryKey] [PrimaryKey]
public string Address { get; set; } public string Address { get; set; }
/// <summary>
/// Display name of the contact.
/// </summary>
public string Name { get; set; } public string Name { get; set; }
/// <summary>
/// Base64 encoded profile image of the contact.
/// </summary>
public string Base64ContactPicture { get; set; }
/// <summary>
/// All registered accounts have their contacts registered as root.
/// Root contacts must not be overridden by any configuration.
/// They are created on account creation.
/// </summary>
public bool IsRootContact { get; set; }
public string DisplayName => Address == Name ? Address : $"{Name} <{Address}>"; public string DisplayName => Address == Name ? Address : $"{Name} <{Address}>";
public override bool Equals(object obj) public override bool Equals(object obj)
{ {
return Equals(obj as AddressInformation); return Equals(obj as AccountContact);
} }
public bool Equals(AddressInformation other) public bool Equals(AccountContact other)
{ {
return !(other is null) && return !(other is null) &&
Address == other.Address && Address == other.Address &&
@@ -40,12 +58,12 @@ namespace Wino.Core.Domain.Entities
return hashCode; return hashCode;
} }
public static bool operator ==(AddressInformation left, AddressInformation right) public static bool operator ==(AccountContact left, AccountContact right)
{ {
return EqualityComparer<AddressInformation>.Default.Equals(left, right); return EqualityComparer<AccountContact>.Default.Equals(left, right);
} }
public static bool operator !=(AddressInformation left, AddressInformation right) public static bool operator !=(AccountContact left, AccountContact right)
{ {
return !(left == right); return !(left == right);
} }

View File

@@ -141,6 +141,15 @@ namespace Wino.Core.Domain.Entities
/// </summary> /// </summary>
[Ignore] [Ignore]
public MailAccount AssignedAccount { get; set; } public MailAccount AssignedAccount { get; set; }
/// <summary>
/// Contact information of the sender if exists.
/// Warning: This field is not populated by queries.
/// Services or View Models are responsible for populating this field.
/// </summary>
[Ignore]
public AccountContact SenderContact { get; set; }
public IEnumerable<Guid> GetContainingIds() => [UniqueId]; public IEnumerable<Guid> GetContainingIds() => [UniqueId];
public override string ToString() => $"{Subject} <-> {Id}"; public override string ToString() => $"{Subject} <-> {Id}";
} }

View File

@@ -1,11 +0,0 @@
namespace Wino.Core.Domain.Enums
{
public enum EditorToolbarSectionType
{
None,
Format,
Insert,
Draw,
Options
}
}

View File

@@ -1,8 +0,0 @@
namespace Wino.Core.Domain.Enums
{
public enum MenuPaneMode
{
Visible,
Hidden
}
}

View File

@@ -0,0 +1,10 @@
namespace Wino.Core.Domain.Enums
{
public enum WinoCustomMessageDialogIcon
{
Information,
Warning,
Error,
Question
}
}

View File

@@ -1,10 +1,18 @@
namespace Wino.Core.Domain.Interfaces using System.Threading.Tasks;
namespace Wino.Core.Domain.Interfaces
{ {
public interface IBackgroundTaskService public interface IBackgroundTaskService
{ {
/// <summary> /// <summary>
/// Unregisters all existing background tasks. Useful for migrations. /// Unregisters all background tasks once.
/// This is used to clean up the background tasks when the app is updated.
/// </summary> /// </summary>
void UnregisterAllBackgroundTask(); void UnregisterAllBackgroundTask();
/// <summary>
/// Registers required background tasks.
/// </summary>
Task RegisterBackgroundTasksAsync();
} }
} }

View File

@@ -1,9 +0,0 @@
using System.Threading.Tasks;
namespace Wino.Core.Domain.Interfaces
{
public interface IConfirmationDialog
{
Task<bool> ShowDialogAsync(string title, string message, string approveButtonTitle);
}
}

View File

@@ -15,11 +15,10 @@ namespace Wino.Core.Domain.Interfaces
Task<byte[]> PickWindowsFileContentAsync(params object[] typeFilters); Task<byte[]> PickWindowsFileContentAsync(params object[] typeFilters);
Task<bool> ShowConfirmationDialogAsync(string question, string title, string confirmationButtonTitle); Task<bool> ShowConfirmationDialogAsync(string question, string title, string confirmationButtonTitle);
Task<bool> ShowHardDeleteConfirmationAsync(); Task<bool> ShowHardDeleteConfirmationAsync();
Task<IStoreRatingDialog> ShowRatingDialogAsync();
Task HandleSystemFolderConfigurationDialogAsync(Guid accountId, IFolderService folderService); Task HandleSystemFolderConfigurationDialogAsync(Guid accountId, IFolderService folderService);
Task<bool> ShowCustomThemeBuilderDialogAsync(); Task<bool> ShowCustomThemeBuilderDialogAsync();
Task ShowMessageAsync(string message, string title); Task ShowMessageAsync(string message, string title, WinoCustomMessageDialogIcon icon);
void InfoBarMessage(string title, string message, InfoBarMessageType messageType); void InfoBarMessage(string title, string message, InfoBarMessageType messageType);
void InfoBarMessage(string title, string message, InfoBarMessageType messageType, string actionButtonText, Action action); void InfoBarMessage(string title, string message, InfoBarMessageType messageType, string actionButtonText, Action action);
@@ -53,6 +52,17 @@ namespace Wino.Core.Domain.Interfaces
/// </summary> /// </summary>
/// <returns>Signature information. Null if canceled.</returns> /// <returns>Signature information. Null if canceled.</returns>
Task<AccountSignature> ShowSignatureEditorDialog(AccountSignature signatureModel = null); Task<AccountSignature> ShowSignatureEditorDialog(AccountSignature signatureModel = null);
/// <summary>
/// Presents a dialog to the user for account alias creation/modification.
/// </summary>
/// <returns>Created alias model if not canceled.</returns>
Task<ICreateAccountAliasDialog> ShowCreateAccountAliasDialogAsync(); Task<ICreateAccountAliasDialog> ShowCreateAccountAliasDialogAsync();
Task<bool> ShowWinoCustomMessageDialogAsync(string title,
string description,
string approveButtonText,
WinoCustomMessageDialogIcon? icon,
string cancelButtonText = "",
string dontAskAgainConfigurationKey = "");
} }
} }

View File

@@ -8,5 +8,13 @@ namespace Wino.Core.Domain.Interfaces
Task<string> CopyFileAsync(string sourceFilePath, string destinationFolderPath); Task<string> CopyFileAsync(string sourceFilePath, string destinationFolderPath);
Task<Stream> GetFileStreamAsync(string folderPath, string fileName); Task<Stream> GetFileStreamAsync(string folderPath, string fileName);
Task<string> GetFileContentByApplicationUriAsync(string resourcePath); Task<string> GetFileContentByApplicationUriAsync(string resourcePath);
/// <summary>
/// Zips all existing logs and saves to picked destination folder.
/// </summary>
/// <param name="logsFolder">Folder path where logs are stored.</param>
/// <param name="destinationFolder">Target path to save the archive file.</param>
/// <returns>True if zip is created with at least one item, false if logs are not found.</returns>
Task<bool> SaveLogsToFolderAsync(string logsFolder, string destinationFolder);
} }
} }

View File

@@ -1,7 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using MimeKit;
using Wino.Core.Domain.Entities; using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Models.MailItem; using Wino.Core.Domain.Models.MailItem;
@@ -11,7 +11,7 @@ namespace Wino.Core.Domain.Interfaces
{ {
Task<MailCopy> GetSingleMailItemAsync(string mailCopyId, string remoteFolderId); Task<MailCopy> GetSingleMailItemAsync(string mailCopyId, string remoteFolderId);
Task<MailCopy> GetSingleMailItemAsync(Guid uniqueMailId); Task<MailCopy> GetSingleMailItemAsync(Guid uniqueMailId);
Task<List<IMailItem>> FetchMailsAsync(MailListInitializationOptions options); Task<List<IMailItem>> FetchMailsAsync(MailListInitializationOptions options, CancellationToken cancellationToken = default);
/// <summary> /// <summary>
/// Deletes all mail copies for all folders. /// Deletes all mail copies for all folders.

View File

@@ -155,5 +155,10 @@ namespace Wino.Core.Domain.Interfaces
/// Setting: Gets or sets what should happen to server app when the client is terminated. /// Setting: Gets or sets what should happen to server app when the client is terminated.
/// </summary> /// </summary>
ServerBackgroundMode ServerTerminationBehavior { get; set; } ServerBackgroundMode ServerTerminationBehavior { get; set; }
/// <summary>
/// Setting: Whether the mail list action bar is enabled or not.
/// </summary>
bool IsMailListActionBarEnabled { get; set; }
} }
} }

View File

@@ -48,7 +48,7 @@ namespace Wino.Core.Domain.Interfaces
/// We add small delay for the following synchronization after executing current requests to overcome this issue. /// We add small delay for the following synchronization after executing current requests to overcome this issue.
/// Default is false. /// Default is false.
/// </summary> /// </summary>
bool DelayExecution { get; } int ResynchronizationDelay { get; }
} }
public interface IRequest : IRequestBase public interface IRequest : IRequestBase

View File

@@ -1,8 +0,0 @@
namespace Wino.Core.Domain.Interfaces
{
public interface IStoreRatingDialog
{
bool DontAskAgain { get; }
bool RateWinoClicked { get; }
}
}

View File

@@ -9,7 +9,6 @@ namespace Wino.Core.Domain.Interfaces
public interface IThemeService : IInitializeAsync public interface IThemeService : IInitializeAsync
{ {
event EventHandler<ApplicationElementTheme> ElementThemeChanged; event EventHandler<ApplicationElementTheme> ElementThemeChanged;
event EventHandler<string> AccentColorChangedBySystem;
event EventHandler<string> AccentColorChanged; event EventHandler<string> AccentColorChanged;
Task<List<AppThemeBase>> GetAvailableThemesAsync(); Task<List<AppThemeBase>> GetAvailableThemesAsync();

View File

@@ -1,6 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Wino.Core.Domain.Entities; using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Models.Folders;
using Wino.Core.Domain.Models.MailItem; using Wino.Core.Domain.Models.MailItem;
namespace Wino.Core.Domain.Interfaces namespace Wino.Core.Domain.Interfaces
@@ -12,7 +13,7 @@ namespace Wino.Core.Domain.Interfaces
/// </summary> /// </summary>
/// <param name="items">Original mails.</param> /// <param name="items">Original mails.</param>
/// <returns>Original mails with thread mails.</returns> /// <returns>Original mails with thread mails.</returns>
Task<List<IMailItem>> ThreadItemsAsync(List<MailCopy> items); Task<List<IMailItem>> ThreadItemsAsync(List<MailCopy> items, IMailItemFolder threadingForFolder);
bool ShouldThreadWithItem(IMailItem originalItem, IMailItem targetItem); bool ShouldThreadWithItem(IMailItem originalItem, IMailItem targetItem);
} }
} }

View File

@@ -29,5 +29,6 @@ namespace Wino.Core.Domain.Models.MailItem
MailItemFolder AssignedFolder { get; } MailItemFolder AssignedFolder { get; }
MailAccount AssignedAccount { get; } MailAccount AssignedAccount { get; }
AccountContact SenderContact { get; }
} }
} }

View File

@@ -14,19 +14,19 @@ namespace Wino.Core.Domain.Models.MailItem
public IMailItem LatestMailItem => ThreadItems.LastOrDefault(); public IMailItem LatestMailItem => ThreadItems.LastOrDefault();
public IMailItem FirstMailItem => ThreadItems.FirstOrDefault(); public IMailItem FirstMailItem => ThreadItems.FirstOrDefault();
public void AddThreadItem(IMailItem item) public bool AddThreadItem(IMailItem item)
{ {
if (item == null) return; if (item == null) return false;
if (ThreadItems.Any(a => a.Id == item.Id)) if (ThreadItems.Any(a => a.Id == item.Id))
{ {
return; return false;
} }
if (item != null && item.IsDraft) if (item != null && item.IsDraft)
{ {
ThreadItems.Insert(0, item); ThreadItems.Insert(0, item);
return; return true;
} }
var insertItem = ThreadItems.FirstOrDefault(a => !a.IsDraft && a.CreationDate < item.CreationDate); var insertItem = ThreadItems.FirstOrDefault(a => !a.IsDraft && a.CreationDate < item.CreationDate);
@@ -39,6 +39,8 @@ namespace Wino.Core.Domain.Models.MailItem
ThreadItems.Insert(index, item); ThreadItems.Insert(index, item);
} }
return true;
} }
public IEnumerable<Guid> GetContainingIds() => ThreadItems?.Select(a => a.UniqueId) ?? default; public IEnumerable<Guid> GetContainingIds() => ThreadItems?.Select(a => a.UniqueId) ?? default;
@@ -85,6 +87,8 @@ namespace Wino.Core.Domain.Models.MailItem
public Guid FileId => LatestMailItem?.FileId ?? Guid.Empty; public Guid FileId => LatestMailItem?.FileId ?? Guid.Empty;
public AccountContact SenderContact => LatestMailItem?.SenderContact;
#endregion #endregion
} }
} }

View File

@@ -1,30 +0,0 @@
using Wino.Core.Domain.Enums;
namespace Wino.Core.Domain.Models.Reader
{
public class EditorToolbarSection
{
public EditorToolbarSectionType SectionType { get; set; }
public string Title
{
get
{
switch (SectionType)
{
case EditorToolbarSectionType.None:
return Translator.EditorToolbarOption_None;
case EditorToolbarSectionType.Format:
return Translator.EditorToolbarOption_Format;
case EditorToolbarSectionType.Insert:
return Translator.EditorToolbarOption_Insert;
case EditorToolbarSectionType.Draw:
return Translator.EditorToolbarOption_Draw;
case EditorToolbarSectionType.Options:
return Translator.EditorToolbarOption_Options;
default:
return "Unknown Editor Option";
}
}
}
}
}

View File

@@ -12,7 +12,7 @@ namespace Wino.Core.Domain.Models.Requests
public abstract void ApplyUIChanges(); public abstract void ApplyUIChanges();
public abstract void RevertUIChanges(); public abstract void RevertUIChanges();
public virtual bool DelayExecution => false; public virtual int ResynchronizationDelay => 0;
} }
public abstract record FolderRequestBase(MailItemFolder Folder, MailSynchronizerOperation Operation) : IFolderRequest public abstract record FolderRequestBase(MailItemFolder Folder, MailSynchronizerOperation Operation) : IFolderRequest
@@ -20,7 +20,7 @@ namespace Wino.Core.Domain.Models.Requests
public abstract void ApplyUIChanges(); public abstract void ApplyUIChanges();
public abstract void RevertUIChanges(); public abstract void RevertUIChanges();
public virtual bool DelayExecution => false; public virtual int ResynchronizationDelay => 0;
} }
public abstract record BatchRequestBase(IEnumerable<IRequest> Items, MailSynchronizerOperation Operation) : IBatchChangeRequest public abstract record BatchRequestBase(IEnumerable<IRequest> Items, MailSynchronizerOperation Operation) : IBatchChangeRequest
@@ -28,6 +28,7 @@ namespace Wino.Core.Domain.Models.Requests
public abstract void ApplyUIChanges(); public abstract void ApplyUIChanges();
public abstract void RevertUIChanges(); public abstract void RevertUIChanges();
public virtual bool DelayExecution => false; public virtual int ResynchronizationDelay => 0;
public virtual bool ExecuteSerialBatch => false;
} }
} }

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "initializing", "AccountCreationDialog_Initializing": "initializing",
"AccountCreationDialog_PreparingFolders": "We are getting folder information at the moment.", "AccountCreationDialog_PreparingFolders": "We are getting folder information at the moment.",
"AccountCreationDialog_SigninIn": "Account information is being saved.", "AccountCreationDialog_SigninIn": "Account information is being saved.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Account Name", "AccountEditDialog_Message": "Account Name",
"AccountEditDialog_Title": "Edit Account", "AccountEditDialog_Title": "Edit Account",
"AccountPickerDialog_Title": "Pick an account", "AccountPickerDialog_Title": "Pick an account",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe",
"AddHyperlink": "Add", "AddHyperlink": "Add",
"AutoDiscoveryProgressMessage": "Searching for mail settings...", "AutoDiscoveryProgressMessage": "Searching for mail settings...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Advanced Configuration", "BasicIMAPSetupDialog_AdvancedConfiguration": "Advanced Configuration",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Your credentials will only be stored locally on your computer.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Your credentials will only be stored locally on your computer.",
"BasicIMAPSetupDialog_Description": "Some accounts require additional steps to sign in", "BasicIMAPSetupDialog_Description": "Some accounts require additional steps to sign in",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Password", "BasicIMAPSetupDialog_Password": "Password",
"BasicIMAPSetupDialog_Title": "IMAP Account", "BasicIMAPSetupDialog_Title": "IMAP Account",
"Buttons_AddAccount": "Add Account", "Buttons_AddAccount": "Add Account",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Apply Theme", "Buttons_ApplyTheme": "Apply Theme",
"Buttons_Browse": "Browse", "Buttons_Browse": "Browse",
"Buttons_Cancel": "Cancel", "Buttons_Cancel": "Cancel",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Sign In", "Buttons_SignIn": "Sign In",
"Buttons_TryAgain": "Try Again", "Buttons_TryAgain": "Try Again",
"Buttons_Yes": "Yes", "Buttons_Yes": "Yes",
"Buttons_Reset": "Reset",
"Center": "Center", "Center": "Center",
"ComingSoon": "Coming soon...", "ComingSoon": "Coming soon...",
"ComposerFrom": "From: ", "ComposerFrom": "From: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Set custom wallpaper", "CustomThemeBuilder_WallpaperTitle": "Set custom wallpaper",
"DialogMessage_AccountLimitMessage": "You have reached the account creation limit.\nWould you like to purchase 'Unlimited Account' add-on to continue?", "DialogMessage_AccountLimitMessage": "You have reached the account creation limit.\nWould you like to purchase 'Unlimited Account' add-on to continue?",
"DialogMessage_AccountLimitTitle": "Account Limit Reached", "DialogMessage_AccountLimitTitle": "Account Limit Reached",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Do you want to permanently delete all the mails in this folder?", "DialogMessage_CleanupFolderMessage": "Do you want to permanently delete all the mails in this folder?",
"DialogMessage_CleanupFolderTitle": "Cleanup Folder", "DialogMessage_CleanupFolderTitle": "Cleanup Folder",
"DialogMessage_ComposerMissingRecipientMessage": "Message has no recipient.", "DialogMessage_ComposerMissingRecipientMessage": "Message has no recipient.",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website",
"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}.", "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}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Don't ask again", "Dialog_DontAskAgain": "Don't ask again",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"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.", "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", "DiscordChannelDisclaimerTitle": "Important Discord Information",
"Draft": "Draft", "Draft": "Draft",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Draw", "EditorToolbarOption_Draw": "Draw",
"EditorToolbarOption_Format": "Format", "EditorToolbarOption_Format": "Format",
"EditorToolbarOption_Insert": "Insert", "EditorToolbarOption_Insert": "Insert",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Light mode", "ElementTheme_Light": "Light mode",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.", "Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.", "Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled", "Exception_AuthenticationCanceled": "Authentication canceled",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "You must provide a name.", "Exception_CustomThemeMissingName": "You must provide a name.",
"Exception_CustomThemeMissingWallpaper": "You must provide a custom background image.", "Exception_CustomThemeMissingWallpaper": "You must provide a custom background image.",
"Exception_FailedToSynchronizeFolders": "Failed to synchronize folders", "Exception_FailedToSynchronizeFolders": "Failed to synchronize folders",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.", "Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.",
"Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.", "Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.",
"Exception_GoogleAuthError": "OAuth authorization error: {0}", "Exception_GoogleAuthError": "OAuth authorization error: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.", "Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.",
"Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.", "Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.",
"Info_UnsubscribeErrorMessage": "Failed to unsubscribe", "Info_UnsubscribeErrorMessage": "Failed to unsubscribe",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method", "ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security", "ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security",
"ImapAuthenticationMethod_Auto": "Auto", "ImapAuthenticationMethod_Auto": "Auto",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Folder Synchronization", "SettingsFolderSync_Title": "Folder Synchronization",
"SettingsFolderOptions_Title": "Folder Configuration", "SettingsFolderOptions_Title": "Folder Configuration",
"SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.", "SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Center Action", "SettingsHoverActionCenter": "Center Action",
"SettingsHoverActionLeft": "Left Action", "SettingsHoverActionLeft": "Left Action",
"SettingsHoverActionRight": "Right Action", "SettingsHoverActionRight": "Right Action",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Language & Time", "SettingsLanguageTime_Title": "Language & Time",
"SettingsLanguageTime_Description": "Wino display language, preferred time format.", "SettingsLanguageTime_Description": "Wino display language, preferred time format.",
"CategoriesFolderNameOverride": "Categories", "CategoriesFolderNameOverride": "Categories",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "More", "MoreFolderNameOverride": "More",
"SettingsOptions_Title": "Settings", "SettingsOptions_Title": "Settings",
"SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.", "SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.", "SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.",
"SettingsNotifications_Description": "Turn on or off notifications for this account.", "SettingsNotifications_Description": "Turn on or off notifications for this account.",
"SettingsNotifications_Title": "Notifications", "SettingsNotifications_Title": "Notifications",
"SettingsPaneLength_Description": "Change the width of the mail list.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Mail List Pane Length", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.", "SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.",
"SettingsPaypal_Title": "Donate via PayPal", "SettingsPaypal_Title": "Donate via PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Compact Mode", "SettingsPersonalizationMailDisplayCompactMode": "Compact Mode",

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "inicializace", "AccountCreationDialog_Initializing": "inicializace",
"AccountCreationDialog_PreparingFolders": "Stahování informací o složkách.", "AccountCreationDialog_PreparingFolders": "Stahování informací o složkách.",
"AccountCreationDialog_SigninIn": "Probíhá ukládání informací o účtu.", "AccountCreationDialog_SigninIn": "Probíhá ukládání informací o účtu.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Název účtu", "AccountEditDialog_Message": "Název účtu",
"AccountEditDialog_Title": "Upravit účet", "AccountEditDialog_Title": "Upravit účet",
"AccountPickerDialog_Title": "Vybrat účet", "AccountPickerDialog_Title": "Vybrat účet",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "např. Jan Novák", "AccountSettingsDialog_AccountNamePlaceholder": "např. Jan Novák",
"AddHyperlink": "Přidat", "AddHyperlink": "Přidat",
"AutoDiscoveryProgressMessage": "Vyhledávání v nastaveních mailu...", "AutoDiscoveryProgressMessage": "Vyhledávání v nastaveních mailu...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Pokročilá nastavení", "BasicIMAPSetupDialog_AdvancedConfiguration": "Pokročilá nastavení",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Vaše nastavení budou uložena pouze lokálně na vašem počítači.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Vaše nastavení budou uložena pouze lokálně na vašem počítači.",
"BasicIMAPSetupDialog_Description": "Některé účty vyžadují další kroky k přihlášení", "BasicIMAPSetupDialog_Description": "Některé účty vyžadují další kroky k přihlášení",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Heslo", "BasicIMAPSetupDialog_Password": "Heslo",
"BasicIMAPSetupDialog_Title": "IMAP účet", "BasicIMAPSetupDialog_Title": "IMAP účet",
"Buttons_AddAccount": "Přidat účet", "Buttons_AddAccount": "Přidat účet",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Použít motiv", "Buttons_ApplyTheme": "Použít motiv",
"Buttons_Browse": "Procházet", "Buttons_Browse": "Procházet",
"Buttons_Cancel": "Zrušit", "Buttons_Cancel": "Zrušit",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Přihlásit se", "Buttons_SignIn": "Přihlásit se",
"Buttons_TryAgain": "Zkusit znovu", "Buttons_TryAgain": "Zkusit znovu",
"Buttons_Yes": "Ano", "Buttons_Yes": "Ano",
"Buttons_Reset": "Reset",
"Center": "Nastřed", "Center": "Nastřed",
"ComingSoon": "Již brzy...", "ComingSoon": "Již brzy...",
"ComposerFrom": "Od: ", "ComposerFrom": "Od: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Nastav vlastní pozadí", "CustomThemeBuilder_WallpaperTitle": "Nastav vlastní pozadí",
"DialogMessage_AccountLimitMessage": "Dosáhli jste limitu vytvořených účtů. Chcete si zakoupit doplněk \"Neomezený účet\", aby jste mohli pokračovat?", "DialogMessage_AccountLimitMessage": "Dosáhli jste limitu vytvořených účtů. Chcete si zakoupit doplněk \"Neomezený účet\", aby jste mohli pokračovat?",
"DialogMessage_AccountLimitTitle": "Dosažen limit počtu účtú", "DialogMessage_AccountLimitTitle": "Dosažen limit počtu účtú",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Přejete si trvale smazat všechny maily v této složce?", "DialogMessage_CleanupFolderMessage": "Přejete si trvale smazat všechny maily v této složce?",
"DialogMessage_CleanupFolderTitle": "Vyprázdnit složku", "DialogMessage_CleanupFolderTitle": "Vyprázdnit složku",
"DialogMessage_ComposerMissingRecipientMessage": "Zpráva nemá žádného příjemce.", "DialogMessage_ComposerMissingRecipientMessage": "Zpráva nemá žádného příjemce.",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Chcete-li přestat dostávat zprávy od {0}, přejděte na jejich webové stránky a odhlašte se.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Chcete-li přestat dostávat zprávy od {0}, přejděte na jejich webové stránky a odhlašte se.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Přejít na web", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Přejít na web",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Chcete přestat dostávat zprávy od {0}? Wino se za vás odhlásí zasláním e-mailu z Vašeho e-mailového účtu na {1}.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "Chcete přestat dostávat zprávy od {0}? Wino se za vás odhlásí zasláním e-mailu z Vašeho e-mailového účtu na {1}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Příště se neptat", "Dialog_DontAskAgain": "Příště se neptat",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Wino nemá vlastní Discord server, ale speciální kanál 'wino-mail' je hostován na serveru 'Developer Sanctuary'.\nChcete-li získat informace o Winu, připojte se k vývojářskému serveru a sledujte 'wino-mail' kanál v rámci 'Community Projects'. \n\nBudete přesměrováni na stránku serveru 'Developer Sanctuary', protože Discord nepodporuje pozvánky přímo do kanálů.", "DiscordChannelDisclaimerMessage": "Wino nemá vlastní Discord server, ale speciální kanál 'wino-mail' je hostován na serveru 'Developer Sanctuary'.\nChcete-li získat informace o Winu, připojte se k vývojářskému serveru a sledujte 'wino-mail' kanál v rámci 'Community Projects'. \n\nBudete přesměrováni na stránku serveru 'Developer Sanctuary', protože Discord nepodporuje pozvánky přímo do kanálů.",
"DiscordChannelDisclaimerTitle": "Důležité Discord informace", "DiscordChannelDisclaimerTitle": "Důležité Discord informace",
"Draft": "Koncept", "Draft": "Koncept",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Nakreslit", "EditorToolbarOption_Draw": "Nakreslit",
"EditorToolbarOption_Format": "Formátovat", "EditorToolbarOption_Format": "Formátovat",
"EditorToolbarOption_Insert": "Vložit", "EditorToolbarOption_Insert": "Vložit",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Světlý režim", "ElementTheme_Light": "Světlý režim",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Nastavení poštovní schránky se nepodařilo najít.", "Exception_ImapAutoDiscoveryFailed": "Nastavení poštovní schránky se nepodařilo najít.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool selhal.", "Exception_ImapClientPoolFailed": "IMAP Client Pool selhal.",
"Exception_AuthenticationCanceled": "Ověřování bylo zrušeno", "Exception_AuthenticationCanceled": "Ověřování bylo zrušeno",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "Musíte zadat název.", "Exception_CustomThemeMissingName": "Musíte zadat název.",
"Exception_CustomThemeMissingWallpaper": "Musíte zadat vlastní obrázek pozadí.", "Exception_CustomThemeMissingWallpaper": "Musíte zadat vlastní obrázek pozadí.",
"Exception_FailedToSynchronizeFolders": "Synchronizace složek se nezdařila", "Exception_FailedToSynchronizeFolders": "Synchronizace složek se nezdařila",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri je při aktivaci null.", "Exception_GoogleAuthCallbackNull": "Callback uri je při aktivaci null.",
"Exception_GoogleAuthCorruptedCode": "Odpověď z autorizačního serveru je chybná.", "Exception_GoogleAuthCorruptedCode": "Odpověď z autorizačního serveru je chybná.",
"Exception_GoogleAuthError": "Chyba autorizace OAuth: {0}", "Exception_GoogleAuthError": "Chyba autorizace OAuth: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "Tento odkaz pro odhlášení je neplatný. Nepodařilo se odhlásit automatizované zasílání e-mailu.", "Info_UnsubscribeLinkInvalidMessage": "Tento odkaz pro odhlášení je neplatný. Nepodařilo se odhlásit automatizované zasílání e-mailu.",
"Info_UnsubscribeSuccessMessage": "Odběr {0} byl úspěšně odhlášen.", "Info_UnsubscribeSuccessMessage": "Odběr {0} byl úspěšně odhlášen.",
"Info_UnsubscribeErrorMessage": "Nepodařilo se odhlásit odběr", "Info_UnsubscribeErrorMessage": "Nepodařilo se odhlásit odběr",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Způsob ověření", "ImapAdvancedSetupDialog_AuthenticationMethod": "Způsob ověření",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Zabezpečení připojení", "ImapAdvancedSetupDialog_ConnectionSecurity": "Zabezpečení připojení",
"ImapAuthenticationMethod_Auto": "Auto", "ImapAuthenticationMethod_Auto": "Auto",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Synchronizace složek", "SettingsFolderSync_Title": "Synchronizace složek",
"SettingsFolderOptions_Title": "Nastavení složky", "SettingsFolderOptions_Title": "Nastavení složky",
"SettingsFolderOptions_Description": "Změnit nastavení jednotlivých složek, například povolit/zakázat synchronizaci, nebo zobrazit/skrýt počet nepřečtených e-mailů.", "SettingsFolderOptions_Description": "Změnit nastavení jednotlivých složek, například povolit/zakázat synchronizaci, nebo zobrazit/skrýt počet nepřečtených e-mailů.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Prostřední akce", "SettingsHoverActionCenter": "Prostřední akce",
"SettingsHoverActionLeft": "Levá akce", "SettingsHoverActionLeft": "Levá akce",
"SettingsHoverActionRight": "Pravá akce", "SettingsHoverActionRight": "Pravá akce",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Jazyk & čas", "SettingsLanguageTime_Title": "Jazyk & čas",
"SettingsLanguageTime_Description": "Jazyk aplikace Wino, preferovaný formát času.", "SettingsLanguageTime_Description": "Jazyk aplikace Wino, preferovaný formát času.",
"CategoriesFolderNameOverride": "Kategorie", "CategoriesFolderNameOverride": "Kategorie",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "Více", "MoreFolderNameOverride": "Více",
"SettingsOptions_Title": "Nastavení", "SettingsOptions_Title": "Nastavení",
"SettingsLinkAccounts_Description": "Sloučit více účtů do jednoho. Podívejte se na e-maily v jedné složce \"Doručená pošta\" společně.", "SettingsLinkAccounts_Description": "Sloučit více účtů do jednoho. Podívejte se na e-maily v jedné složce \"Doručená pošta\" společně.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "Zatím jste nenastavili žádný účet.", "SettingsNoAccountSetupMessage": "Zatím jste nenastavili žádný účet.",
"SettingsNotifications_Description": "Zapnout nebo vypnout oznámení pro tento účet.", "SettingsNotifications_Description": "Zapnout nebo vypnout oznámení pro tento účet.",
"SettingsNotifications_Title": "Oznámení", "SettingsNotifications_Title": "Oznámení",
"SettingsPaneLength_Description": "Změnit šířku seznamu e-mailů.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Délka panelu e-mailů", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Ukažte mnohem více lásky ❤️ Všechny dary jsou vítany.", "SettingsPaypal_Description": "Ukažte mnohem více lásky ❤️ Všechny dary jsou vítany.",
"SettingsPaypal_Title": "Přispět přes PayPal", "SettingsPaypal_Title": "Přispět přes PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Kompaktní režim", "SettingsPersonalizationMailDisplayCompactMode": "Kompaktní režim",

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "initializing", "AccountCreationDialog_Initializing": "initializing",
"AccountCreationDialog_PreparingFolders": "We are getting folder information at the moment.", "AccountCreationDialog_PreparingFolders": "We are getting folder information at the moment.",
"AccountCreationDialog_SigninIn": "Account information is being saved.", "AccountCreationDialog_SigninIn": "Account information is being saved.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Account Name", "AccountEditDialog_Message": "Account Name",
"AccountEditDialog_Title": "Edit Account", "AccountEditDialog_Title": "Edit Account",
"AccountPickerDialog_Title": "Pick an account", "AccountPickerDialog_Title": "Pick an account",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe",
"AddHyperlink": "Add", "AddHyperlink": "Add",
"AutoDiscoveryProgressMessage": "Searching for mail settings...", "AutoDiscoveryProgressMessage": "Searching for mail settings...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Advanced Configuration", "BasicIMAPSetupDialog_AdvancedConfiguration": "Advanced Configuration",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Your credentials will only be stored locally on your computer.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Your credentials will only be stored locally on your computer.",
"BasicIMAPSetupDialog_Description": "Some accounts require additional steps to sign in", "BasicIMAPSetupDialog_Description": "Some accounts require additional steps to sign in",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Password", "BasicIMAPSetupDialog_Password": "Password",
"BasicIMAPSetupDialog_Title": "IMAP Account", "BasicIMAPSetupDialog_Title": "IMAP Account",
"Buttons_AddAccount": "Add Account", "Buttons_AddAccount": "Add Account",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Apply Theme", "Buttons_ApplyTheme": "Apply Theme",
"Buttons_Browse": "Browse", "Buttons_Browse": "Browse",
"Buttons_Cancel": "Cancel", "Buttons_Cancel": "Cancel",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Sign In", "Buttons_SignIn": "Sign In",
"Buttons_TryAgain": "Try Again", "Buttons_TryAgain": "Try Again",
"Buttons_Yes": "Yes", "Buttons_Yes": "Yes",
"Buttons_Reset": "Reset",
"Center": "Center", "Center": "Center",
"ComingSoon": "Coming soon...", "ComingSoon": "Coming soon...",
"ComposerFrom": "From: ", "ComposerFrom": "From: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Set custom wallpaper", "CustomThemeBuilder_WallpaperTitle": "Set custom wallpaper",
"DialogMessage_AccountLimitMessage": "You have reached the account creation limit.\nWould you like to purchase 'Unlimited Account' add-on to continue?", "DialogMessage_AccountLimitMessage": "You have reached the account creation limit.\nWould you like to purchase 'Unlimited Account' add-on to continue?",
"DialogMessage_AccountLimitTitle": "Account Limit Reached", "DialogMessage_AccountLimitTitle": "Account Limit Reached",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Do you want to permanently delete all the mails in this folder?", "DialogMessage_CleanupFolderMessage": "Do you want to permanently delete all the mails in this folder?",
"DialogMessage_CleanupFolderTitle": "Cleanup Folder", "DialogMessage_CleanupFolderTitle": "Cleanup Folder",
"DialogMessage_ComposerMissingRecipientMessage": "Message has no recipient.", "DialogMessage_ComposerMissingRecipientMessage": "Message has no recipient.",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website",
"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}.", "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}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Don't ask again", "Dialog_DontAskAgain": "Don't ask again",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"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.", "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", "DiscordChannelDisclaimerTitle": "Important Discord Information",
"Draft": "Draft", "Draft": "Draft",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Draw", "EditorToolbarOption_Draw": "Draw",
"EditorToolbarOption_Format": "Format", "EditorToolbarOption_Format": "Format",
"EditorToolbarOption_Insert": "Insert", "EditorToolbarOption_Insert": "Insert",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Light mode", "ElementTheme_Light": "Light mode",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.", "Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.", "Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled", "Exception_AuthenticationCanceled": "Authentication canceled",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "You must provide a name.", "Exception_CustomThemeMissingName": "You must provide a name.",
"Exception_CustomThemeMissingWallpaper": "You must provide a custom background image.", "Exception_CustomThemeMissingWallpaper": "You must provide a custom background image.",
"Exception_FailedToSynchronizeFolders": "Failed to synchronize folders", "Exception_FailedToSynchronizeFolders": "Failed to synchronize folders",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.", "Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.",
"Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.", "Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.",
"Exception_GoogleAuthError": "OAuth authorization error: {0}", "Exception_GoogleAuthError": "OAuth authorization error: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.", "Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.",
"Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.", "Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.",
"Info_UnsubscribeErrorMessage": "Failed to unsubscribe", "Info_UnsubscribeErrorMessage": "Failed to unsubscribe",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method", "ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security", "ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security",
"ImapAuthenticationMethod_Auto": "Auto", "ImapAuthenticationMethod_Auto": "Auto",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Folder Synchronization", "SettingsFolderSync_Title": "Folder Synchronization",
"SettingsFolderOptions_Title": "Folder Configuration", "SettingsFolderOptions_Title": "Folder Configuration",
"SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.", "SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Center Action", "SettingsHoverActionCenter": "Center Action",
"SettingsHoverActionLeft": "Left Action", "SettingsHoverActionLeft": "Left Action",
"SettingsHoverActionRight": "Right Action", "SettingsHoverActionRight": "Right Action",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Language & Time", "SettingsLanguageTime_Title": "Language & Time",
"SettingsLanguageTime_Description": "Wino display language, preferred time format.", "SettingsLanguageTime_Description": "Wino display language, preferred time format.",
"CategoriesFolderNameOverride": "Categories", "CategoriesFolderNameOverride": "Categories",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "More", "MoreFolderNameOverride": "More",
"SettingsOptions_Title": "Settings", "SettingsOptions_Title": "Settings",
"SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.", "SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.", "SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.",
"SettingsNotifications_Description": "Turn on or off notifications for this account.", "SettingsNotifications_Description": "Turn on or off notifications for this account.",
"SettingsNotifications_Title": "Notifications", "SettingsNotifications_Title": "Notifications",
"SettingsPaneLength_Description": "Change the width of the mail list.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Mail List Pane Length", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.", "SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.",
"SettingsPaypal_Title": "Donate via PayPal", "SettingsPaypal_Title": "Donate via PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Compact Mode", "SettingsPersonalizationMailDisplayCompactMode": "Compact Mode",

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "Initialisierung", "AccountCreationDialog_Initializing": "Initialisierung",
"AccountCreationDialog_PreparingFolders": "Es werden Ordner-Informationen gesammelt.", "AccountCreationDialog_PreparingFolders": "Es werden Ordner-Informationen gesammelt.",
"AccountCreationDialog_SigninIn": "Kontoinformationen wurden gespeichert.", "AccountCreationDialog_SigninIn": "Kontoinformationen wurden gespeichert.",
"AccountCreationDialog_FetchingProfileInformation": "Lade Profildetails.",
"AccountEditDialog_Message": "Konto-Name", "AccountEditDialog_Message": "Konto-Name",
"AccountEditDialog_Title": "Konto bearbeiten", "AccountEditDialog_Title": "Konto bearbeiten",
"AccountPickerDialog_Title": "Konto auswählen", "AccountPickerDialog_Title": "Konto auswählen",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "z.B. Max Mustermann", "AccountSettingsDialog_AccountNamePlaceholder": "z.B. Max Mustermann",
"AddHyperlink": "Hinzufügen", "AddHyperlink": "Hinzufügen",
"AutoDiscoveryProgressMessage": "Es wird nach Mail-Einstellungen gesucht...", "AutoDiscoveryProgressMessage": "Es wird nach Mail-Einstellungen gesucht...",
"AppCloseBackgroundSynchronizationWarningTitle": "Hintergrundsynchronisierung",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "Sie beenden Wino Mail und das Schließungsverhalten der App ist auf \"Beenden\" gesetzt.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "Dadurch werden alle Hintergrundsynchronisierungen und Benachrichtigungen beendet.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Möchten Sie in den App-Einstellungen Wino Mail auf minimiert oder Hintergrundausführung einstellen?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Die Anwendung wird beim Start von Windows nicht gestartet.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "Dies führt dazu, dass Sie Benachrichtigungen verpassen, wenn Sie Ihren Computer neu starten.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Möchten Sie diese in den App-Einstellungen aktivieren?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Erweiterte Konfiguration", "BasicIMAPSetupDialog_AdvancedConfiguration": "Erweiterte Konfiguration",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Die Zugangsdaten werden nur lokal auf Ihrem Computer gespeichert.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Die Zugangsdaten werden nur lokal auf Ihrem Computer gespeichert.",
"BasicIMAPSetupDialog_Description": "Einige Konten benötigen zusätzliche Schritte zum Anmelden", "BasicIMAPSetupDialog_Description": "Einige Konten benötigen zusätzliche Schritte zum Anmelden",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Passwort", "BasicIMAPSetupDialog_Password": "Passwort",
"BasicIMAPSetupDialog_Title": "IMAP-Konto", "BasicIMAPSetupDialog_Title": "IMAP-Konto",
"Buttons_AddAccount": "Konto hinzufügen", "Buttons_AddAccount": "Konto hinzufügen",
"Buttons_AddNewAlias": "Neuen Alias hinzufügen",
"Buttons_SyncAliases": "Aliase synchronisieren",
"Buttons_ApplyTheme": "Thema anwenden", "Buttons_ApplyTheme": "Thema anwenden",
"Buttons_Browse": "Durchsuchen", "Buttons_Browse": "Durchsuchen",
"Buttons_Cancel": "Abbrechen", "Buttons_Cancel": "Abbrechen",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Anmelden", "Buttons_SignIn": "Anmelden",
"Buttons_TryAgain": "Wiederholen", "Buttons_TryAgain": "Wiederholen",
"Buttons_Yes": "Ja", "Buttons_Yes": "Ja",
"Buttons_Reset": "Zurücksetzen",
"Center": "Zentriert", "Center": "Zentriert",
"ComingSoon": "Bald verfügbar...", "ComingSoon": "Bald verfügbar...",
"ComposerFrom": "Von: ", "ComposerFrom": "Von: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Eigenen Hintergrund festlegen", "CustomThemeBuilder_WallpaperTitle": "Eigenen Hintergrund festlegen",
"DialogMessage_AccountLimitMessage": "Sie haben das Limit für die Kontenanzahl erreicht.\nMöchten Sie die Option \"Unbegrenzte Konten\" kaufen, um fortzufahren?", "DialogMessage_AccountLimitMessage": "Sie haben das Limit für die Kontenanzahl erreicht.\nMöchten Sie die Option \"Unbegrenzte Konten\" kaufen, um fortzufahren?",
"DialogMessage_AccountLimitTitle": "Kontolimit erreicht", "DialogMessage_AccountLimitTitle": "Kontolimit erreicht",
"DialogMessage_AliasNotSelectedTitle": "Fehlender Alias",
"DialogMessage_AliasNotSelectedMessage": "Sie müssen einen Alias wählen, bevor Sie eine Nachricht senden.",
"DialogMessage_AliasExistsTitle": "Existierender Alias",
"DialogMessage_AliasExistsMessage": "Dieser Alias wird bereits verwendet.",
"DialogMessage_InvalidAliasTitle": "Ungültiger Alias",
"DialogMessage_InvalidAliasMessage": "Dieser Alias ist ungültig. Stellen Sie sicher, dass alle Adressen des Alias gültige E-Mail-Adressen sind.",
"DialogMessage_CantDeleteRootAliasTitle": "Alias kann nicht gelöscht werden",
"DialogMessage_CantDeleteRootAliasMessage": "Der Root-Alias kann nicht gelöscht werden. Dies ist Ihre Hauptidentität, die mit der Konfiguration Ihres Kontos verknüpft ist.",
"DialogMessage_AliasCreatedTitle": "Neuer Alias erstellt",
"DialogMessage_AliasCreatedMessage": "Ein neuer Alias wurde erfolgreich erstellt.",
"DialogMessage_CleanupFolderMessage": "Möchten Sie alle Mails in diesem Ordner dauerhaft löschen?", "DialogMessage_CleanupFolderMessage": "Möchten Sie alle Mails in diesem Ordner dauerhaft löschen?",
"DialogMessage_CleanupFolderTitle": "Bereinigungs-Ordner", "DialogMessage_CleanupFolderTitle": "Bereinigungs-Ordner",
"DialogMessage_ComposerMissingRecipientMessage": "Nachricht hat keinen Empfänger.", "DialogMessage_ComposerMissingRecipientMessage": "Nachricht hat keinen Empfänger.",
@@ -82,7 +103,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Verknüpftes Konto umbenennen", "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_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_UnlinkAccountsConfirmationTitle": "Konten trennen",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject", "DialogMessage_EmptySubjectConfirmation": "Betreff fehlt",
"DialogMessage_EmptySubjectConfirmationMessage": "Nachricht hat keinen Betreff. Möchten Sie fortfahren?", "DialogMessage_EmptySubjectConfirmationMessage": "Nachricht hat keinen Betreff. Möchten Sie fortfahren?",
"DialogMessage_RenameFolderTitle": "Ordner umbenennen", "DialogMessage_RenameFolderTitle": "Ordner umbenennen",
"DialogMessage_RenameFolderMessage": "Geben Sie einen neuen Namen für diesen Ordner ein", "DialogMessage_RenameFolderMessage": "Geben Sie einen neuen Namen für diesen Ordner ein",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Um Nachrichten von {0} nicht mehr zu erhalten, gehen Sie auf die Webseite, um sich abzumelden.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Um Nachrichten von {0} nicht mehr zu erhalten, gehen Sie auf die Webseite, um sich abzumelden.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Zur Webseite", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Zur Webseite",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Möchten Sie den Empfang von Nachrichten von {0} beenden? Wino wird sich für Sie abmelden, indem es eine E-Mail aus Ihrem E-Mail-Konto an {1} sendet.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "Möchten Sie den Empfang von Nachrichten von {0} beenden? Wino wird sich für Sie abmelden, indem es eine E-Mail aus Ihrem E-Mail-Konto an {1} sendet.",
"DialogMessage_EnableStartupLaunchTitle": "Autostart aktivieren",
"DialogMessage_EnableStartupLaunchMessage": "Wino Mail kann beim Start von Windows minimiert gestartet werden, um keine Benachrichtigungen zu verpassen.\n\nMöchten Sie den Autostart aktivieren?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "Sie können den Autostart unter Einstellungen -> App-Einstellungen aktivieren.",
"Dialog_DontAskAgain": "Nicht mehr fragen", "Dialog_DontAskAgain": "Nicht mehr fragen",
"CreateAccountAliasDialog_Title": "Kontoalias erstellen",
"CreateAccountAliasDialog_Description": "Stellen Sie sicher, dass Ihr ausgehender Server das Senden von Mails von diesem Alias erlaubt.",
"CreateAccountAliasDialog_AliasAddress": "Adresse",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "z.B. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Antwortadresse",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Wino hat keinen eigenen Discord Server, aber der spezielle 'wino-mail'-Kanal wird auf dem 'Developer Sanctuary' Server gehostet (englisch).\nUm Updates über Wino zu erhalten, treten Sie gerne dem 'Developer Sactuary'-Server bei und folgen dem 'wino-mail'-Kanal unter 'Community Projects'.\n\nSie werden zur Server-URL weitergeleitet, da Discord keine Kanal-Einladungen unterstützt.", "DiscordChannelDisclaimerMessage": "Wino hat keinen eigenen Discord Server, aber der spezielle 'wino-mail'-Kanal wird auf dem 'Developer Sanctuary' Server gehostet (englisch).\nUm Updates über Wino zu erhalten, treten Sie gerne dem 'Developer Sactuary'-Server bei und folgen dem 'wino-mail'-Kanal unter 'Community Projects'.\n\nSie werden zur Server-URL weitergeleitet, da Discord keine Kanal-Einladungen unterstützt.",
"DiscordChannelDisclaimerTitle": "Wichtige Discord-Informationen", "DiscordChannelDisclaimerTitle": "Wichtige Discord-Informationen",
"Draft": "Entwurf", "Draft": "Entwurf",
"Busy": "Beschäftigt",
"EditorToolbarOption_Draw": "Zeichnen", "EditorToolbarOption_Draw": "Zeichnen",
"EditorToolbarOption_Format": "Format", "EditorToolbarOption_Format": "Format",
"EditorToolbarOption_Insert": "Einfügen", "EditorToolbarOption_Insert": "Einfügen",
@@ -105,7 +136,8 @@
"ElementTheme_Default": "Systemeinstellung verwenden", "ElementTheme_Default": "Systemeinstellung verwenden",
"ElementTheme_Light": "Heller Modus", "ElementTheme_Light": "Heller Modus",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino-Server ist fehlgeschlagen.",
"Exception_MailProcessing": "Diese Mail wird noch verarbeitet. Bitte versuchen Sie es in wenigen Sekunden erneut.",
"Exception_ImapAutoDiscoveryFailed": "Mailbox-Einstellungen konnten nicht gefunden werden.", "Exception_ImapAutoDiscoveryFailed": "Mailbox-Einstellungen konnten nicht gefunden werden.",
"Exception_ImapClientPoolFailed": "IMAP Client-Pool fehlgeschlagen.", "Exception_ImapClientPoolFailed": "IMAP Client-Pool fehlgeschlagen.",
"Exception_AuthenticationCanceled": "Authentifizierung abgebrochen", "Exception_AuthenticationCanceled": "Authentifizierung abgebrochen",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "Sie müssen einen Namen angeben.", "Exception_CustomThemeMissingName": "Sie müssen einen Namen angeben.",
"Exception_CustomThemeMissingWallpaper": "Sie müssen ein eigenes Hintergrundbild angeben.", "Exception_CustomThemeMissingWallpaper": "Sie müssen ein eigenes Hintergrundbild angeben.",
"Exception_FailedToSynchronizeFolders": "Fehler beim Synchronisieren der Ordner", "Exception_FailedToSynchronizeFolders": "Fehler beim Synchronisieren der Ordner",
"Exception_FailedToSynchronizeAliases": "Fehler beim Synchronisieren der Aliase",
"Exception_MissingAlias": "Der primäre Alias fehlt für dieses Konto. Erstellen des Entwurfs fehlgeschlagen.",
"Exception_FailedToSynchronizeProfileInformation": "Fehler beim Synchronisieren der Profilinformationen",
"Exception_GoogleAuthCallbackNull": "'Callback uri ist 'null' bei der Aktivierung.", "Exception_GoogleAuthCallbackNull": "'Callback uri ist 'null' bei der Aktivierung.",
"Exception_GoogleAuthCorruptedCode": "Korrupte Autorisierungsantwort.", "Exception_GoogleAuthCorruptedCode": "Korrupte Autorisierungsantwort.",
"Exception_GoogleAuthError": "OAuth Autorisierungsfehler: {0}", "Exception_GoogleAuthError": "OAuth Autorisierungsfehler: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "Dieser Abmeldelink ist ungültig. Fehler beim Abmelden der Liste.", "Info_UnsubscribeLinkInvalidMessage": "Dieser Abmeldelink ist ungültig. Fehler beim Abmelden der Liste.",
"Info_UnsubscribeSuccessMessage": "Erfolgreich von {0} abgemeldet.", "Info_UnsubscribeSuccessMessage": "Erfolgreich von {0} abgemeldet.",
"Info_UnsubscribeErrorMessage": "Abmeldung fehlgeschlagen", "Info_UnsubscribeErrorMessage": "Abmeldung fehlgeschlagen",
"Info_CantDeletePrimaryAliasMessage": "Der primäre Alias kann nicht gelöscht werden. Bitte ändern Sie Ihren Alias, bevor Sie diesen löschen.",
"Info_MailListSizeResetSuccessMessage": "Die Größe der Mailliste wurde zurückgesetzt.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Authentifizierungsmethode", "ImapAdvancedSetupDialog_AuthenticationMethod": "Authentifizierungsmethode",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Verbindungssicherheit", "ImapAdvancedSetupDialog_ConnectionSecurity": "Verbindungssicherheit",
"ImapAuthenticationMethod_Auto": "Auto", "ImapAuthenticationMethod_Auto": "Auto",
@@ -336,7 +373,7 @@
"ProtocolLogAvailable_Message": "Protokolle zur Diagnose sind verfügbar.", "ProtocolLogAvailable_Message": "Protokolle zur Diagnose sind verfügbar.",
"Results": "Ergebnisse", "Results": "Ergebnisse",
"Right": "Rechts", "Right": "Rechts",
"Reader_SaveAllAttachmentButtonText": "Save all attachments", "Reader_SaveAllAttachmentButtonText": "Alle Anhänge speichern",
"SynchronizationFolderReport_Success": "aktuell", "SynchronizationFolderReport_Success": "aktuell",
"SynchronizationFolderReport_Failed": "Synchronisierung fehlgeschlagen", "SynchronizationFolderReport_Failed": "Synchronisierung fehlgeschlagen",
"SearchBarPlaceholder": "Suche", "SearchBarPlaceholder": "Suche",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Ordner-Synchronisierung", "SettingsFolderSync_Title": "Ordner-Synchronisierung",
"SettingsFolderOptions_Title": "Ordnerkonfiguration", "SettingsFolderOptions_Title": "Ordnerkonfiguration",
"SettingsFolderOptions_Description": "Ändern Sie einzelne Ordnereinstellungen, wie z. B. das Ein-/Ausblenden des \"Ungelesen\"-Symbols oder das (De-)Aktivieren der Synchronisierung.", "SettingsFolderOptions_Description": "Ändern Sie einzelne Ordnereinstellungen, wie z. B. das Ein-/Ausblenden des \"Ungelesen\"-Symbols oder das (De-)Aktivieren der Synchronisierung.",
"SettingsManageAliases_Title": "Aliase",
"SettingsManageAliases_Description": "Sehen Sie die Mail-Aliase, die diesem Konto zugewiesen wurden, aktualisieren oder löschen Sie diese.",
"SettingsHoverActionCenter": "Zentrierte Aktion", "SettingsHoverActionCenter": "Zentrierte Aktion",
"SettingsHoverActionLeft": "Linke Aktion", "SettingsHoverActionLeft": "Linke Aktion",
"SettingsHoverActionRight": "Rechte Aktion", "SettingsHoverActionRight": "Rechte Aktion",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Sprache und Zeit", "SettingsLanguageTime_Title": "Sprache und Zeit",
"SettingsLanguageTime_Description": "Wino Anzeigesprache, bevorzugtes Zeitformat.", "SettingsLanguageTime_Description": "Wino Anzeigesprache, bevorzugtes Zeitformat.",
"CategoriesFolderNameOverride": "Kategorien", "CategoriesFolderNameOverride": "Kategorien",
"AccountAlias_Column_Verified": "Verifiziert",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primär",
"AccountAlias_Disclaimer_FirstLine": "Wino kann nur Aliase für Ihre Gmail-Konten importieren.",
"AccountAlias_Disclaimer_SecondLine": "Wenn Sie Aliase für Ihr Outlook- oder IMAP-Konto verwenden möchten, fügen Sie diese bitte selbst hinzu.",
"MoreFolderNameOverride": "Mehr", "MoreFolderNameOverride": "Mehr",
"SettingsOptions_Title": "Einstellungen", "SettingsOptions_Title": "Einstellungen",
"SettingsLinkAccounts_Description": "Mehrere Konten zu einem zusammenführen. Sehen Sie E-Mails in einem kombinierten Posteingang.", "SettingsLinkAccounts_Description": "Mehrere Konten zu einem zusammenführen. Sehen Sie E-Mails in einem kombinierten Posteingang.",
@@ -420,19 +464,19 @@
"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.", "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_Description": "Benachrichtigungen, Signaturen, Synchronisierung und andere Einstellungen pro Konto.",
"SettingsManageAccountSettings_Title": "Kontoeinstellungen verwalten", "SettingsManageAccountSettings_Title": "Kontoeinstellungen verwalten",
"SettingsAppPreferences_Title": "App Preferences", "SettingsAppPreferences_Title": "App-Präferenzen",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.", "SettingsAppPreferences_Description": "Allgemeine Einstellungen / Präferenzen für Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior", "SettingsAppPreferences_CloseBehavior_Title": "Verhalten der App beim Schließen",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?", "SettingsAppPreferences_CloseBehavior_Description": "Was soll passieren, wenn Sie die App schließen?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup", "SettingsAppPreferences_StartupBehavior_Title": "Beim Start von Windows minimiert starten",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.", "SettingsAppPreferences_StartupBehavior_Description": "Wino Mail das minimierte Starten erlauben, wenn Windows startet. Ermöglicht es, immer Benachrichtigungen zu erhalten.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.", "SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail wurde es erfolgreich gestattet, beim Starten von Windows im Hintergrund zu starten.",
"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_Disabled": "Wino Mail wird beim Start von Windows nicht gestartet. Dies führt dazu, dass Sie keine Benachrichtigungen erhalten, wenn Sie Ihren Computer neu starten.",
"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_DisabledByPolicy": "Ihre Administrator- oder Gruppenrichtlinien gestatten den automatischen Start von Programmen nicht. Daher kann für Wino Mail der automatische Start nicht aktiviert werden.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.", "SettingsAppPreferences_StartupBehavior_DisabledByUser": "Bitte gehen Sie zu Task-Manager -> Autostart von Apps, um Wino Mail den Autostart zu erlauben.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.", "SettingsAppPreferences_StartupBehavior_FatalError": "Ein schwerwiegender Fehler ist beim Ändern des Startmodus für Wino Mail aufgetreten.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable", "SettingsAppPreferences_StartupBehavior_Enable": "Aktivieren",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable", "SettingsAppPreferences_StartupBehavior_Disable": "Deaktivieren",
"SettingsReorderAccounts_Title": "Konten neu ordnen", "SettingsReorderAccounts_Title": "Konten neu ordnen",
"SettingsReorderAccounts_Description": "Ändern Sie die Konten-Reihenfolge in der Kontenliste.", "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_Description": "Elemente verschieben, um neuen Link hinzuzufügen oder bestehenden Link zu entfernen.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "Sie haben noch keine Konten eingerichtet.", "SettingsNoAccountSetupMessage": "Sie haben noch keine Konten eingerichtet.",
"SettingsNotifications_Description": "Benachrichtigungen für dieses Konto ein- oder ausschalten.", "SettingsNotifications_Description": "Benachrichtigungen für dieses Konto ein- oder ausschalten.",
"SettingsNotifications_Title": "Benachrichtigungen", "SettingsNotifications_Title": "Benachrichtigungen",
"SettingsPaneLength_Description": "Ändern Sie die Breite der Mail-Liste.", "SettingsPaneLengthReset_Description": "Setzen Sie die Größe der Mailliste auf die Originaleinstellung zurück, falls sie Probleme haben.",
"SettingsPaneLength_Title": "Länge des Maillisten-Fensters", "SettingsPaneLengthReset_Title": "Größe der Mailliste zurücksetzen",
"SettingsPaypal_Description": "Zeigen Sie viel mehr Liebe ❤️ Alle Spenden werden wertgeschätzt.", "SettingsPaypal_Description": "Zeigen Sie viel mehr Liebe ❤️ Alle Spenden werden wertgeschätzt.",
"SettingsPaypal_Title": "Über PayPal spenden", "SettingsPaypal_Title": "Über PayPal spenden",
"SettingsPersonalizationMailDisplayCompactMode": "Kompakter Modus", "SettingsPersonalizationMailDisplayCompactMode": "Kompakter Modus",
@@ -539,14 +583,14 @@
"SettingsSignature_EditSignature_Title": "Signatur bearbeiten", "SettingsSignature_EditSignature_Title": "Signatur bearbeiten",
"SettingsSignature_DeleteSignature_Title": "Signatur löschen", "SettingsSignature_DeleteSignature_Title": "Signatur löschen",
"SettingsSignature_NoneSignatureName": "Keine", "SettingsSignature_NoneSignatureName": "Keine",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray", "SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "In den System-Tray minimieren",
"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_MinimizeTray_Description": "Wino Mail wird weiterhin im System-Tray laufen. Startet beim Klicken des Symbols die Anwendung. Sie werden benachrichtigt, sobald neue Mails eintreffen.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Im Hintergrund ausführen",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail wird weiterhin im Hintergrund ausgeführt. Sie werden benachrichtigt, sobald neue Mails eintreffen.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Beenden",
"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.", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail wird nicht weiter ausgeführt werden. Sie werden nicht benachrichtigt, wenn neue Mails eintreffen. Starten Sie Wino Mail erneut, um die Mail-Synchronisation fortzusetzen.",
"TitleBarServerDisconnectedButton_Title": "no connection", "TitleBarServerDisconnectedButton_Title": "Keine Verbindung",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.", "TitleBarServerDisconnectedButton_Description": "Wino ist vom Netzwerk getrennt. Klicken Sie auf \"Erneut verbinden\", um die Verbindung wiederherzustellen.",
"TitleBarServerReconnectButton_Title": "reconnect", "TitleBarServerReconnectButton_Title": "Erneut verbinden",
"TitleBarServerReconnectingButton_Title": "connecting" "TitleBarServerReconnectingButton_Title": "Verbindung wird hergestellt"
} }

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "αρχικοποιείται", "AccountCreationDialog_Initializing": "αρχικοποιείται",
"AccountCreationDialog_PreparingFolders": "Προς το παρόν λαμβάνουμε πληροφορίες φακέλων.", "AccountCreationDialog_PreparingFolders": "Προς το παρόν λαμβάνουμε πληροφορίες φακέλων.",
"AccountCreationDialog_SigninIn": "Οι πληροφορίες λογαριασμού αποθηκεύονται.", "AccountCreationDialog_SigninIn": "Οι πληροφορίες λογαριασμού αποθηκεύονται.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Όνομα Λογαριασμού", "AccountEditDialog_Message": "Όνομα Λογαριασμού",
"AccountEditDialog_Title": "Επεξεργασία Λογαριασμού", "AccountEditDialog_Title": "Επεξεργασία Λογαριασμού",
"AccountPickerDialog_Title": "Επιλέξτε έναν λογαριασμό", "AccountPickerDialog_Title": "Επιλέξτε έναν λογαριασμό",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "πχ. Γιώργος Παπαδάκης", "AccountSettingsDialog_AccountNamePlaceholder": "πχ. Γιώργος Παπαδάκης",
"AddHyperlink": "Προσθήκη", "AddHyperlink": "Προσθήκη",
"AutoDiscoveryProgressMessage": "Αναζήτηση για ρυθμίσεις αλληλογραφίας...", "AutoDiscoveryProgressMessage": "Αναζήτηση για ρυθμίσεις αλληλογραφίας...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Σύνθετη Διαμόρφωση", "BasicIMAPSetupDialog_AdvancedConfiguration": "Σύνθετη Διαμόρφωση",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Τα διαπιστευτήριά σας θα αποθηκεύονται μόνο τοπικά στον υπολογιστή σας.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Τα διαπιστευτήριά σας θα αποθηκεύονται μόνο τοπικά στον υπολογιστή σας.",
"BasicIMAPSetupDialog_Description": "Ορισμένοι λογαριασμοί απαιτούν πρόσθετα βήματα για να συνδεθούν", "BasicIMAPSetupDialog_Description": "Ορισμένοι λογαριασμοί απαιτούν πρόσθετα βήματα για να συνδεθούν",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Κωδικόs πρόσβασης", "BasicIMAPSetupDialog_Password": "Κωδικόs πρόσβασης",
"BasicIMAPSetupDialog_Title": "Λογαριασμός IMAP", "BasicIMAPSetupDialog_Title": "Λογαριασμός IMAP",
"Buttons_AddAccount": "Προσθήκη Λογαριασμού", "Buttons_AddAccount": "Προσθήκη Λογαριασμού",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Εφαρμογή Θέματος", "Buttons_ApplyTheme": "Εφαρμογή Θέματος",
"Buttons_Browse": "Περιήγηση", "Buttons_Browse": "Περιήγηση",
"Buttons_Cancel": "Ακύρωση", "Buttons_Cancel": "Ακύρωση",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Σύνδεση", "Buttons_SignIn": "Σύνδεση",
"Buttons_TryAgain": "Προσπαθήστε ξανά", "Buttons_TryAgain": "Προσπαθήστε ξανά",
"Buttons_Yes": "Ναι", "Buttons_Yes": "Ναι",
"Buttons_Reset": "Reset",
"Center": "Κέντρο", "Center": "Κέντρο",
"ComingSoon": "Έρχεται σύντομα...", "ComingSoon": "Έρχεται σύντομα...",
"ComposerFrom": "Από: ", "ComposerFrom": "Από: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Ορισμός προσαρμοσμένης ταπετσαρίας", "CustomThemeBuilder_WallpaperTitle": "Ορισμός προσαρμοσμένης ταπετσαρίας",
"DialogMessage_AccountLimitMessage": "Έχετε φτάσει το όριο δημιουργίας λογαριασμού.\nΘα θέλατε να αγοράσετε το πρόσθετο 'Απεριόριστοι Λογαριασμοί' για να συνεχίσετε;", "DialogMessage_AccountLimitMessage": "Έχετε φτάσει το όριο δημιουργίας λογαριασμού.\nΘα θέλατε να αγοράσετε το πρόσθετο 'Απεριόριστοι Λογαριασμοί' για να συνεχίσετε;",
"DialogMessage_AccountLimitTitle": "Το Όριο Λογαριασμού Επιτεύχθη", "DialogMessage_AccountLimitTitle": "Το Όριο Λογαριασμού Επιτεύχθη",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Θέλετε να διαγράψετε μόνιμα όλα τα μηνύματα σε αυτό το φάκελο;", "DialogMessage_CleanupFolderMessage": "Θέλετε να διαγράψετε μόνιμα όλα τα μηνύματα σε αυτό το φάκελο;",
"DialogMessage_CleanupFolderTitle": "Εκκαθάριση Φακέλου", "DialogMessage_CleanupFolderTitle": "Εκκαθάριση Φακέλου",
"DialogMessage_ComposerMissingRecipientMessage": "Το μήνυμα δεν έχει παραλήπτη.", "DialogMessage_ComposerMissingRecipientMessage": "Το μήνυμα δεν έχει παραλήπτη.",
@@ -82,7 +103,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Μετονομασία Συνδεδεμένου Λογαριασμού", "DialogMessage_RenameLinkedAccountsTitle": "Μετονομασία Συνδεδεμένου Λογαριασμού",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Αυτή η λειτουργία δεν θα διαγράψει τους λογαριασμούς σας αλλά, απλά θα διαλύσει το σύνδεσμο για συνδέσεις κοινόχρηστων φακέλων. Θέλετε να συνεχίσετε;", "DialogMessage_UnlinkAccountsConfirmationMessage": "Αυτή η λειτουργία δεν θα διαγράψει τους λογαριασμούς σας αλλά, απλά θα διαλύσει το σύνδεσμο για συνδέσεις κοινόχρηστων φακέλων. Θέλετε να συνεχίσετε;",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Αποδέσμευση Λογαριασμού", "DialogMessage_UnlinkAccountsConfirmationTitle": "Αποδέσμευση Λογαριασμού",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject", "DialogMessage_EmptySubjectConfirmation": "Χωρίς Θέμα",
"DialogMessage_EmptySubjectConfirmationMessage": "Το μήνυμα δεν έχει θέμα. Θέλετε να συνεχίσετε;", "DialogMessage_EmptySubjectConfirmationMessage": "Το μήνυμα δεν έχει θέμα. Θέλετε να συνεχίσετε;",
"DialogMessage_RenameFolderTitle": "Μετονομασία Φακέλου", "DialogMessage_RenameFolderTitle": "Μετονομασία Φακέλου",
"DialogMessage_RenameFolderMessage": "Εισάγετε νέο όνομα για αυτόν το φάκελο", "DialogMessage_RenameFolderMessage": "Εισάγετε νέο όνομα για αυτόν το φάκελο",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Για να σταματήσετε να λαμβάνετε μηνύματα από το {0}, μεταβείτε στην ιστοσελίδα τους για να καταργήσετε την εγγραφή σας.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Για να σταματήσετε να λαμβάνετε μηνύματα από το {0}, μεταβείτε στην ιστοσελίδα τους για να καταργήσετε την εγγραφή σας.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Μεταβείτε στον ιστότοπο", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Μεταβείτε στον ιστότοπο",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Θέλετε να σταματήσετε να λαμβάνετε μηνύματα από τον{0}; Το Wino θα κάνει κατάργηση εγγραφής για εσάς στέλνοντας ένα email από τον λογαριασμό email σας στο {1}.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "Θέλετε να σταματήσετε να λαμβάνετε μηνύματα από τον{0}; Το Wino θα κάνει κατάργηση εγγραφής για εσάς στέλνοντας ένα email από τον λογαριασμό email σας στο {1}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Να μην ερωτηθώ ξανά", "Dialog_DontAskAgain": "Να μην ερωτηθώ ξανά",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Το Wino δεν έχει το δικό του διακομιστή στο Discord, αλλά το ειδικό κανάλι «wino-mail» φιλοξενείται στον διακομιστή «Developer Sanctuary».\nΓια να λάβετε τις ενημερώσεις σχετικά με το Wino παρακαλούμε γίνετε μέλος του διακομιστή Developer Sanctuary και ακολουθήστε το κανάλι «wino-mail» στο «Community Projects»\n\nΘα κατευθυνθείτε στο URL του διακομιστή καθώς το Discord δεν υποστηρίζει προσκλήσεις καναλιών.", "DiscordChannelDisclaimerMessage": "Το Wino δεν έχει το δικό του διακομιστή στο Discord, αλλά το ειδικό κανάλι «wino-mail» φιλοξενείται στον διακομιστή «Developer Sanctuary».\nΓια να λάβετε τις ενημερώσεις σχετικά με το Wino παρακαλούμε γίνετε μέλος του διακομιστή Developer Sanctuary και ακολουθήστε το κανάλι «wino-mail» στο «Community Projects»\n\nΘα κατευθυνθείτε στο URL του διακομιστή καθώς το Discord δεν υποστηρίζει προσκλήσεις καναλιών.",
"DiscordChannelDisclaimerTitle": "Σημαντικές Πληροφορίες για το Discord", "DiscordChannelDisclaimerTitle": "Σημαντικές Πληροφορίες για το Discord",
"Draft": "Πρόχειρο", "Draft": "Πρόχειρο",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Σχέδιο", "EditorToolbarOption_Draw": "Σχέδιο",
"EditorToolbarOption_Format": "Μορφή", "EditorToolbarOption_Format": "Μορφή",
"EditorToolbarOption_Insert": "Εισαγωγή", "EditorToolbarOption_Insert": "Εισαγωγή",
@@ -105,7 +136,8 @@
"ElementTheme_Default": "Χρήση ρυθμίσεων συστήματος", "ElementTheme_Default": "Χρήση ρυθμίσεων συστήματος",
"ElementTheme_Light": "Ανοιχτή λειτουργία", "ElementTheme_Light": "Ανοιχτή λειτουργία",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Ο διακομιστής Wino απέτυχε.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Δεν βρέθηκαν οι ρυθμίσεις γραμματοκιβωτίου.", "Exception_ImapAutoDiscoveryFailed": "Δεν βρέθηκαν οι ρυθμίσεις γραμματοκιβωτίου.",
"Exception_ImapClientPoolFailed": "Αποτυχία συγκέντρωσης πελάτη IMAP.", "Exception_ImapClientPoolFailed": "Αποτυχία συγκέντρωσης πελάτη IMAP.",
"Exception_AuthenticationCanceled": "Η ταυτοποίηση ακυρώθηκε", "Exception_AuthenticationCanceled": "Η ταυτοποίηση ακυρώθηκε",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "Πρέπει να δώσετε ένα όνομα.", "Exception_CustomThemeMissingName": "Πρέπει να δώσετε ένα όνομα.",
"Exception_CustomThemeMissingWallpaper": "Πρέπει να δώσετε μια προσαρμοσμένη εικόνα φόντου.", "Exception_CustomThemeMissingWallpaper": "Πρέπει να δώσετε μια προσαρμοσμένη εικόνα φόντου.",
"Exception_FailedToSynchronizeFolders": "Αποτυχία συγχρονισμού φακέλων", "Exception_FailedToSynchronizeFolders": "Αποτυχία συγχρονισμού φακέλων",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Το Callback uri είναι κενό κατά την ενεργοποίηση.", "Exception_GoogleAuthCallbackNull": "Το Callback uri είναι κενό κατά την ενεργοποίηση.",
"Exception_GoogleAuthCorruptedCode": "Κατεστραμμένη απάντηση εξουσιοδότησης.", "Exception_GoogleAuthCorruptedCode": "Κατεστραμμένη απάντηση εξουσιοδότησης.",
"Exception_GoogleAuthError": "Σφάλμα εξουσιοδότησης OAuth: {0}", "Exception_GoogleAuthError": "Σφάλμα εξουσιοδότησης OAuth: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "Αυτός ο σύνδεσμος κατάργησης εγγραφής δεν είναι έγκυρος. Αποτυχία διαγραφής από τη λίστα.", "Info_UnsubscribeLinkInvalidMessage": "Αυτός ο σύνδεσμος κατάργησης εγγραφής δεν είναι έγκυρος. Αποτυχία διαγραφής από τη λίστα.",
"Info_UnsubscribeSuccessMessage": "Επιτυχής κατάργηση εγγραφής από το {0}.", "Info_UnsubscribeSuccessMessage": "Επιτυχής κατάργηση εγγραφής από το {0}.",
"Info_UnsubscribeErrorMessage": "Αποτυχία κατάργησης εγγραφής", "Info_UnsubscribeErrorMessage": "Αποτυχία κατάργησης εγγραφής",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Μέθοδος επαλήθευσης", "ImapAdvancedSetupDialog_AuthenticationMethod": "Μέθοδος επαλήθευσης",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Ασφάλεια σύνδεσης", "ImapAdvancedSetupDialog_ConnectionSecurity": "Ασφάλεια σύνδεσης",
"ImapAuthenticationMethod_Auto": "Αυτόματο", "ImapAuthenticationMethod_Auto": "Αυτόματο",
@@ -336,7 +373,7 @@
"ProtocolLogAvailable_Message": "Τα αρχεία καταγραφής πρωτοκόλλου είναι διαθέσιμα για διαγνωστικά.", "ProtocolLogAvailable_Message": "Τα αρχεία καταγραφής πρωτοκόλλου είναι διαθέσιμα για διαγνωστικά.",
"Results": "Αποτελέσματα", "Results": "Αποτελέσματα",
"Right": "Δεξιά", "Right": "Δεξιά",
"Reader_SaveAllAttachmentButtonText": "Save all attachments", "Reader_SaveAllAttachmentButtonText": "Αποθήκευση όλων των συνημμένων",
"SynchronizationFolderReport_Success": "ενημερωμένο", "SynchronizationFolderReport_Success": "ενημερωμένο",
"SynchronizationFolderReport_Failed": "ο συγχρονισμός απέτυχε", "SynchronizationFolderReport_Failed": "ο συγχρονισμός απέτυχε",
"SearchBarPlaceholder": "Αναζήτηση", "SearchBarPlaceholder": "Αναζήτηση",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Συγχρονισμός Φακέλου", "SettingsFolderSync_Title": "Συγχρονισμός Φακέλου",
"SettingsFolderOptions_Title": "Διαμόρφωση Φακέλου", "SettingsFolderOptions_Title": "Διαμόρφωση Φακέλου",
"SettingsFolderOptions_Description": "Αλλάξτε μεμονωμένες ρυθμίσεις φακέλου, όπως ενεργοποίηση/απενεργοποίηση συγχρονισμού ή εμφάνιση/απόκρυψη σήματος ανάγνωσης.", "SettingsFolderOptions_Description": "Αλλάξτε μεμονωμένες ρυθμίσεις φακέλου, όπως ενεργοποίηση/απενεργοποίηση συγχρονισμού ή εμφάνιση/απόκρυψη σήματος ανάγνωσης.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Κεντρική Ενέργεια", "SettingsHoverActionCenter": "Κεντρική Ενέργεια",
"SettingsHoverActionLeft": "Αριστερή Ενέργεια", "SettingsHoverActionLeft": "Αριστερή Ενέργεια",
"SettingsHoverActionRight": "Δεξιά Ενέργεια", "SettingsHoverActionRight": "Δεξιά Ενέργεια",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Γλώσσα & Ώρα", "SettingsLanguageTime_Title": "Γλώσσα & Ώρα",
"SettingsLanguageTime_Description": "Εμφάνιση γλώσσας Wino, προτιμώμενη μορφή ώρας.", "SettingsLanguageTime_Description": "Εμφάνιση γλώσσας Wino, προτιμώμενη μορφή ώρας.",
"CategoriesFolderNameOverride": "Κατηγορίες", "CategoriesFolderNameOverride": "Κατηγορίες",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "Περισσότερα", "MoreFolderNameOverride": "Περισσότερα",
"SettingsOptions_Title": "Ρυθμίσεις", "SettingsOptions_Title": "Ρυθμίσεις",
"SettingsLinkAccounts_Description": "Συγχώνευση πολλαπλών λογαριασμών σε έναν. Δείτε τα μηνύματα σε ένα φάκελο Εισερχόμενα μαζί.", "SettingsLinkAccounts_Description": "Συγχώνευση πολλαπλών λογαριασμών σε έναν. Δείτε τα μηνύματα σε ένα φάκελο Εισερχόμενα μαζί.",
@@ -420,19 +464,19 @@
"SettingsFolderMenuStyle_Description": "Επιλέξτε αν οι φάκελοι λογαριασμού θα πρέπει να είναι εμφωλευμένοι μέσα σε ένα στοιχείο μενού του λογαριασμού ή όχι. Ενεργοποιήστε αυτήν την επιλογή αν σας αρέσει το παλιό σύστημα μενού στο Windows Mail", "SettingsFolderMenuStyle_Description": "Επιλέξτε αν οι φάκελοι λογαριασμού θα πρέπει να είναι εμφωλευμένοι μέσα σε ένα στοιχείο μενού του λογαριασμού ή όχι. Ενεργοποιήστε αυτήν την επιλογή αν σας αρέσει το παλιό σύστημα μενού στο Windows Mail",
"SettingsManageAccountSettings_Description": "Ειδοποιήσεις, υπογραφές, συγχρονισμός και άλλες ρυθμίσεις ανά λογαριασμό.", "SettingsManageAccountSettings_Description": "Ειδοποιήσεις, υπογραφές, συγχρονισμός και άλλες ρυθμίσεις ανά λογαριασμό.",
"SettingsManageAccountSettings_Title": "Ρυθμίσεις Διαχείρισης Λογαριασμού", "SettingsManageAccountSettings_Title": "Ρυθμίσεις Διαχείρισης Λογαριασμού",
"SettingsAppPreferences_Title": "App Preferences", "SettingsAppPreferences_Title": "Προτιμήσεις Εφαρμογής",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.", "SettingsAppPreferences_Description": "Γενικές ρυθμίσεις / προτιμήσεις για το Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior", "SettingsAppPreferences_CloseBehavior_Title": "Συμπεριφορά κλεισίματος εφαρμογής",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?", "SettingsAppPreferences_CloseBehavior_Description": "Τί πρέπει να συμβεί όταν κλείσετε την εφαρμογή;",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup", "SettingsAppPreferences_StartupBehavior_Title": "Εκκίνηση σε ελαχιστοποίηση κατά την έναρξη των Windows",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.", "SettingsAppPreferences_StartupBehavior_Description": "Επιτρέψτε στο Wino Mail να ξεκινήσει ελαχιστοποιημένο όταν ξεκινούν τα Windows. Επιτρέπει πάντα τη λήψη ειδοποιήσεων.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.", "SettingsAppPreferences_StartupBehavior_Enabled": "Το Wino Mail ορίστηκε να ξεκινάει στο παρασκήνιο κατά την εκκίνηση των Windows.",
"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_Disabled": "Το Wino Mail δε θα ξεκινήσει κατά την εκκίνηση των Windows. Αυτό θα προκαλέσει απώλεια ειδοποιήσεων όταν επανεκκινήσετε τον υπολογιστή σας.",
"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_DisabledByPolicy": "Ο διαχειριστής ή οι πολιτικές ομάδας έχουν απενεργοποιήσει την εκκίνηση εφαρμογών κατά την έναρξη. Έτσι, το Wino Mail δεν μπορεί να ρυθμιστεί για να ξεκινήσει κατά την εκκίνηση των Windows.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.", "SettingsAppPreferences_StartupBehavior_DisabledByUser": "Μεταβείτε στη Διαχείριση Εργασιών -> Καρτέλα εκκίνησης για να επιτρέψετε στο Wino Mail να ξεκινήσει κατά την εκκίνηση των Windows.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.", "SettingsAppPreferences_StartupBehavior_FatalError": "Μοιραίο σφάλμα προέκυψε κατά την αλλαγή της λειτουργίας εκκίνησης για το Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable", "SettingsAppPreferences_StartupBehavior_Enable": "Ενεργοποίηση",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable", "SettingsAppPreferences_StartupBehavior_Disable": "Απενεργοποίηση",
"SettingsReorderAccounts_Title": "Αναδιάταξη Λογαριασμών", "SettingsReorderAccounts_Title": "Αναδιάταξη Λογαριασμών",
"SettingsReorderAccounts_Description": "Αλλάξτε τη σειρά των λογαριασμών στη λίστα λογαριασμών.", "SettingsReorderAccounts_Description": "Αλλάξτε τη σειρά των λογαριασμών στη λίστα λογαριασμών.",
"SettingsManageLink_Description": "Μετακίνηση αντικειμένων για προσθήκη νέου συνδέσμου ή κατάργηση υπάρχοντος συνδέσμου.", "SettingsManageLink_Description": "Μετακίνηση αντικειμένων για προσθήκη νέου συνδέσμου ή κατάργηση υπάρχοντος συνδέσμου.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "Δεν έχετε ρυθμίσει κανέναν λογαριασμό ακόμα.", "SettingsNoAccountSetupMessage": "Δεν έχετε ρυθμίσει κανέναν λογαριασμό ακόμα.",
"SettingsNotifications_Description": "Ενεργοποίηση ή απενεργοποίηση ειδοποιήσεων για αυτόν τον λογαριασμό.", "SettingsNotifications_Description": "Ενεργοποίηση ή απενεργοποίηση ειδοποιήσεων για αυτόν τον λογαριασμό.",
"SettingsNotifications_Title": "Ειδοποιήσεις", "SettingsNotifications_Title": "Ειδοποιήσεις",
"SettingsPaneLength_Description": "Αλλαγή του πλάτους της λίστας αλληλογραφίας.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Μήκος Παραθύρου Λίστας Αλληλογραφίας", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Δείξτε πολύ περισσότερη αγάπη ❤️ Όλες οι δωρεές εκτιμούνται.", "SettingsPaypal_Description": "Δείξτε πολύ περισσότερη αγάπη ❤️ Όλες οι δωρεές εκτιμούνται.",
"SettingsPaypal_Title": "Δωρεά μέσω PayPal", "SettingsPaypal_Title": "Δωρεά μέσω PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Συμπαγής Λειτουργία", "SettingsPersonalizationMailDisplayCompactMode": "Συμπαγής Λειτουργία",
@@ -539,14 +583,14 @@
"SettingsSignature_EditSignature_Title": "Επεξεργασία υπογραφής", "SettingsSignature_EditSignature_Title": "Επεξεργασία υπογραφής",
"SettingsSignature_DeleteSignature_Title": "Διαγραφή υπογραφής", "SettingsSignature_DeleteSignature_Title": "Διαγραφή υπογραφής",
"SettingsSignature_NoneSignatureName": "Καμία", "SettingsSignature_NoneSignatureName": "Καμία",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray", "SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Ελαχιστοποίηση στο συρτάρι ειδοποιήσεων συστήματος",
"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_MinimizeTray_Description": "Το Wino Mail θα συνεχίσει να εκτελείται στο συαρτάρι συστήματος. Διαθέσιμο για εκκίνηση κάνοντας κλικ σε ένα εικονίδιο. Θα ειδοποιηθείτε καθώς φτάνουν νέα μηνύματα.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Εκτέλεση στο παρασκήνιο",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Το Wino Mail θα συνεχίσει να εκτελείται στο παρασκήνιο. Θα ειδοποιηθείτε καθώς φτάνουν νέα μηνύματα.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Τερματισμός",
"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.", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Το Wino Mail δεν θα συνεχίσει να τρέχει πουθενά. Δεν θα ειδοποιηθείτε καθώς φτάνουν νέα μηνύματα. Εκκινήστε ξανά το Wino Mail για να συνεχίσετε το συγχρονισμό αλληλογραφίας.",
"TitleBarServerDisconnectedButton_Title": "no connection", "TitleBarServerDisconnectedButton_Title": "χωρίς σύνδεση",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.", "TitleBarServerDisconnectedButton_Description": "Το Wino αποσυνδέθηκε από το δίκτυο. Κάντε κλικ στην επιλογή επανασύνδεση για επαναφορά της σύνδεσης.",
"TitleBarServerReconnectButton_Title": "reconnect", "TitleBarServerReconnectButton_Title": "επανασύνδεση",
"TitleBarServerReconnectingButton_Title": "connecting" "TitleBarServerReconnectingButton_Title": "γίνεται σύνδεση"
} }

View File

@@ -11,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe",
"AddHyperlink": "Add", "AddHyperlink": "Add",
"AutoDiscoveryProgressMessage": "Searching for mail settings...", "AutoDiscoveryProgressMessage": "Searching for mail settings...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Advanced Configuration", "BasicIMAPSetupDialog_AdvancedConfiguration": "Advanced Configuration",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Your credentials will only be stored locally on your computer.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Your credentials will only be stored locally on your computer.",
"BasicIMAPSetupDialog_Description": "Some accounts require additional steps to sign in", "BasicIMAPSetupDialog_Description": "Some accounts require additional steps to sign in",
@@ -46,6 +53,7 @@
"Buttons_TryAgain": "Try Again", "Buttons_TryAgain": "Try Again",
"Buttons_Yes": "Yes", "Buttons_Yes": "Yes",
"Buttons_Reset": "Reset", "Buttons_Reset": "Reset",
"Buttons_Send": "Send",
"Center": "Center", "Center": "Center",
"ComingSoon": "Coming soon...", "ComingSoon": "Coming soon...",
"ComposerFrom": "From: ", "ComposerFrom": "From: ",
@@ -105,6 +113,9 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website",
"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}.", "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}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Don't ask again", "Dialog_DontAskAgain": "Don't ask again",
"CreateAccountAliasDialog_Title": "Create Account Alias", "CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.", "CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
@@ -522,7 +533,9 @@
"SettingsStore_Title": "Rate in Store", "SettingsStore_Title": "Rate in Store",
"SettingsThreads_Description": "Organize messages into conversation threads.", "SettingsThreads_Description": "Organize messages into conversation threads.",
"SettingsThreads_Title": "Conversation Threading", "SettingsThreads_Title": "Conversation Threading",
"SettingsUnlinkAccounts_Description": "Remove the link between accounts. This will not delete your accounts.", "SettingsMailListActionBar_Description": "Hide/show action bar at top of message list.",
"SettingsMailListActionBar_Title": "Show mail list actions",
"SettingsUnlinkAccounts_Description": "Remove the link between accounts. his will not delete your accounts.",
"SettingsUnlinkAccounts_Title": "Unlink Accounts", "SettingsUnlinkAccounts_Title": "Unlink Accounts",
"SortingOption_Date": "by date", "SortingOption_Date": "by date",
"SortingOption_Name": "by name", "SortingOption_Name": "by name",

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "inicializando", "AccountCreationDialog_Initializing": "inicializando",
"AccountCreationDialog_PreparingFolders": "Estamos obteniendo información de la carpeta en este momento.", "AccountCreationDialog_PreparingFolders": "Estamos obteniendo información de la carpeta en este momento.",
"AccountCreationDialog_SigninIn": "La información de la cuenta se está guardando.", "AccountCreationDialog_SigninIn": "La información de la cuenta se está guardando.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Nombre de la Cuenta", "AccountEditDialog_Message": "Nombre de la Cuenta",
"AccountEditDialog_Title": "Editar cuenta", "AccountEditDialog_Title": "Editar cuenta",
"AccountPickerDialog_Title": "Elija una cuenta", "AccountPickerDialog_Title": "Elija una cuenta",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "por ejemplo: Juan López", "AccountSettingsDialog_AccountNamePlaceholder": "por ejemplo: Juan López",
"AddHyperlink": "Añadir", "AddHyperlink": "Añadir",
"AutoDiscoveryProgressMessage": "Buscando ajustes de correo...", "AutoDiscoveryProgressMessage": "Buscando ajustes de correo...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Configuración avanzada", "BasicIMAPSetupDialog_AdvancedConfiguration": "Configuración avanzada",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Sus credenciales sólo se almacenarán localmente en su ordenador.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Sus credenciales sólo se almacenarán localmente en su ordenador.",
"BasicIMAPSetupDialog_Description": "Algunas cuentas necesitan pasos adicionales para iniciar sesión", "BasicIMAPSetupDialog_Description": "Algunas cuentas necesitan pasos adicionales para iniciar sesión",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Contraseña", "BasicIMAPSetupDialog_Password": "Contraseña",
"BasicIMAPSetupDialog_Title": "Cuenta IMAP", "BasicIMAPSetupDialog_Title": "Cuenta IMAP",
"Buttons_AddAccount": "Añadir Cuenta", "Buttons_AddAccount": "Añadir Cuenta",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Aplicar Tema", "Buttons_ApplyTheme": "Aplicar Tema",
"Buttons_Browse": "Buscar", "Buttons_Browse": "Buscar",
"Buttons_Cancel": "Cancelar", "Buttons_Cancel": "Cancelar",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Iniciar Sesión", "Buttons_SignIn": "Iniciar Sesión",
"Buttons_TryAgain": "Inténtalo de nuevo", "Buttons_TryAgain": "Inténtalo de nuevo",
"Buttons_Yes": "Sí", "Buttons_Yes": "Sí",
"Buttons_Reset": "Reset",
"Center": "Centrar", "Center": "Centrar",
"ComingSoon": "Próximamente...", "ComingSoon": "Próximamente...",
"ComposerFrom": "De: ", "ComposerFrom": "De: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Establecer imagen de fondo personalizada", "CustomThemeBuilder_WallpaperTitle": "Establecer imagen de fondo personalizada",
"DialogMessage_AccountLimitMessage": "Has alcanzado el límite para crear cuentas.\n¿Te gustaría comprar el add-on 'Cuentas Ilimitadas' para continuar?", "DialogMessage_AccountLimitMessage": "Has alcanzado el límite para crear cuentas.\n¿Te gustaría comprar el add-on 'Cuentas Ilimitadas' para continuar?",
"DialogMessage_AccountLimitTitle": "Límite de Cuentas Alcanzado", "DialogMessage_AccountLimitTitle": "Límite de Cuentas Alcanzado",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "¿Quieres borrar permanentemente todos los correos en esta carpeta?", "DialogMessage_CleanupFolderMessage": "¿Quieres borrar permanentemente todos los correos en esta carpeta?",
"DialogMessage_CleanupFolderTitle": "Carpeta de Limpieza", "DialogMessage_CleanupFolderTitle": "Carpeta de Limpieza",
"DialogMessage_ComposerMissingRecipientMessage": "El mensaje no tiene destinatario.", "DialogMessage_ComposerMissingRecipientMessage": "El mensaje no tiene destinatario.",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Para dejar de recibir mensajes de {0}, ve a su sitio web para darse de baja.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Para dejar de recibir mensajes de {0}, ve a su sitio web para darse de baja.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Ir al sitio web", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Ir al sitio web",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "¿Quieres dejar de recibir mensajes de {0}? Wino cancelará su suscripción enviando un correo electrónico desde su cuenta de correo electrónico a {1}.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "¿Quieres dejar de recibir mensajes de {0}? Wino cancelará su suscripción enviando un correo electrónico desde su cuenta de correo electrónico a {1}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "No preguntar de nuevo", "Dialog_DontAskAgain": "No preguntar de nuevo",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Wino no tiene un servidor de Discordia propio, pero el canal especial 'wino-mail' está hospedado en servidor 'Developer Sanctuary'.\nPara obtener actualizaciones acerca de Wino únase al Santuario servidor de Desarrolladores y siga el canal 'wino-mail' en 'Community Projects'\n\nSerás redirigido a la URL del servidor cuando la Discordia no soporta canales invitados.", "DiscordChannelDisclaimerMessage": "Wino no tiene un servidor de Discordia propio, pero el canal especial 'wino-mail' está hospedado en servidor 'Developer Sanctuary'.\nPara obtener actualizaciones acerca de Wino únase al Santuario servidor de Desarrolladores y siga el canal 'wino-mail' en 'Community Projects'\n\nSerás redirigido a la URL del servidor cuando la Discordia no soporta canales invitados.",
"DiscordChannelDisclaimerTitle": "Información de Discord importante", "DiscordChannelDisclaimerTitle": "Información de Discord importante",
"Draft": "Borrador", "Draft": "Borrador",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Dibujar", "EditorToolbarOption_Draw": "Dibujar",
"EditorToolbarOption_Format": "Formato", "EditorToolbarOption_Format": "Formato",
"EditorToolbarOption_Insert": "Insertar", "EditorToolbarOption_Insert": "Insertar",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Modo claro", "ElementTheme_Light": "Modo claro",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "No se pudo encontrar la configuración del buzón.", "Exception_ImapAutoDiscoveryFailed": "No se pudo encontrar la configuración del buzón.",
"Exception_ImapClientPoolFailed": "Cola Cliente IMAP falló.", "Exception_ImapClientPoolFailed": "Cola Cliente IMAP falló.",
"Exception_AuthenticationCanceled": "Autenticación cancelada", "Exception_AuthenticationCanceled": "Autenticación cancelada",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "Debe proporcionar un nombre.", "Exception_CustomThemeMissingName": "Debe proporcionar un nombre.",
"Exception_CustomThemeMissingWallpaper": "Debe proporcionar una imagen de fondo personalizada.", "Exception_CustomThemeMissingWallpaper": "Debe proporcionar una imagen de fondo personalizada.",
"Exception_FailedToSynchronizeFolders": "Error al sincronizar carpetas", "Exception_FailedToSynchronizeFolders": "Error al sincronizar carpetas",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri nulo al activarse.", "Exception_GoogleAuthCallbackNull": "Callback uri nulo al activarse.",
"Exception_GoogleAuthCorruptedCode": "Respuesta de autorización corrupta.", "Exception_GoogleAuthCorruptedCode": "Respuesta de autorización corrupta.",
"Exception_GoogleAuthError": "Error de autorización de OAuth: {0}", "Exception_GoogleAuthError": "Error de autorización de OAuth: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "Este enlace de baja suscripción no es válido. Error al darse de baja de la lista.", "Info_UnsubscribeLinkInvalidMessage": "Este enlace de baja suscripción no es válido. Error al darse de baja de la lista.",
"Info_UnsubscribeSuccessMessage": "Se ha cancelado la suscripción de {0} correctamente.", "Info_UnsubscribeSuccessMessage": "Se ha cancelado la suscripción de {0} correctamente.",
"Info_UnsubscribeErrorMessage": "Error al anular suscripción", "Info_UnsubscribeErrorMessage": "Error al anular suscripción",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Método de autenticación", "ImapAdvancedSetupDialog_AuthenticationMethod": "Método de autenticación",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Seguridad de la conexión", "ImapAdvancedSetupDialog_ConnectionSecurity": "Seguridad de la conexión",
"ImapAuthenticationMethod_Auto": "Auto", "ImapAuthenticationMethod_Auto": "Auto",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Sincronización de carpetas", "SettingsFolderSync_Title": "Sincronización de carpetas",
"SettingsFolderOptions_Title": "Configuración de carpeta", "SettingsFolderOptions_Title": "Configuración de carpeta",
"SettingsFolderOptions_Description": "Cambie los ajustes de la carpeta individual como activar/desactivar la sincronización o muestra/oculta insignias no leídas.", "SettingsFolderOptions_Description": "Cambie los ajustes de la carpeta individual como activar/desactivar la sincronización o muestra/oculta insignias no leídas.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Centro de Acción", "SettingsHoverActionCenter": "Centro de Acción",
"SettingsHoverActionLeft": "Acción Izquierda", "SettingsHoverActionLeft": "Acción Izquierda",
"SettingsHoverActionRight": "Acción Derecha", "SettingsHoverActionRight": "Acción Derecha",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Idioma y Hora", "SettingsLanguageTime_Title": "Idioma y Hora",
"SettingsLanguageTime_Description": "Idioma de visualización de Wino, formato de hora preferido.", "SettingsLanguageTime_Description": "Idioma de visualización de Wino, formato de hora preferido.",
"CategoriesFolderNameOverride": "Categorías", "CategoriesFolderNameOverride": "Categorías",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "Más", "MoreFolderNameOverride": "Más",
"SettingsOptions_Title": "Ajustes", "SettingsOptions_Title": "Ajustes",
"SettingsLinkAccounts_Description": "Fusionar múltiples cuentas en una. Ver correos en una bandeja de entrada común.", "SettingsLinkAccounts_Description": "Fusionar múltiples cuentas en una. Ver correos en una bandeja de entrada común.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "Aún no has configurado ninguna cuenta.", "SettingsNoAccountSetupMessage": "Aún no has configurado ninguna cuenta.",
"SettingsNotifications_Description": "Activar o desactivar notificaciones para esta cuenta.", "SettingsNotifications_Description": "Activar o desactivar notificaciones para esta cuenta.",
"SettingsNotifications_Title": "Notificaciones", "SettingsNotifications_Title": "Notificaciones",
"SettingsPaneLength_Description": "Cambiar el ancho de la lista de correo.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Longitud del panel de la lista de correo", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Muestre mucho más amor ❤️ Todas las donaciones se agradecen.", "SettingsPaypal_Description": "Muestre mucho más amor ❤️ Todas las donaciones se agradecen.",
"SettingsPaypal_Title": "Dona vía PayPal", "SettingsPaypal_Title": "Dona vía PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Modo Compacto", "SettingsPersonalizationMailDisplayCompactMode": "Modo Compacto",

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "valmistellaan", "AccountCreationDialog_Initializing": "valmistellaan",
"AccountCreationDialog_PreparingFolders": "Valmistellaan kansioita", "AccountCreationDialog_PreparingFolders": "Valmistellaan kansioita",
"AccountCreationDialog_SigninIn": "Tallennetaan tilin tietoja.", "AccountCreationDialog_SigninIn": "Tallennetaan tilin tietoja.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Tilin nimi", "AccountEditDialog_Message": "Tilin nimi",
"AccountEditDialog_Title": "Muokkaa tiliä", "AccountEditDialog_Title": "Muokkaa tiliä",
"AccountPickerDialog_Title": "Valitse tili", "AccountPickerDialog_Title": "Valitse tili",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "esim. Matti Meikäläinen", "AccountSettingsDialog_AccountNamePlaceholder": "esim. Matti Meikäläinen",
"AddHyperlink": "Lisää", "AddHyperlink": "Lisää",
"AutoDiscoveryProgressMessage": "Haetaan sähköpostiasetuksia...", "AutoDiscoveryProgressMessage": "Haetaan sähköpostiasetuksia...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Lisäasetukset", "BasicIMAPSetupDialog_AdvancedConfiguration": "Lisäasetukset",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Käyttäjätietosi tallennetaan ainoastaan paikallisesti tietokoneellesi.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Käyttäjätietosi tallennetaan ainoastaan paikallisesti tietokoneellesi.",
"BasicIMAPSetupDialog_Description": "Jotkin tilit vaativat lisätoimia sisäänkirjautumista varten", "BasicIMAPSetupDialog_Description": "Jotkin tilit vaativat lisätoimia sisäänkirjautumista varten",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Salasana", "BasicIMAPSetupDialog_Password": "Salasana",
"BasicIMAPSetupDialog_Title": "IMAP-tili", "BasicIMAPSetupDialog_Title": "IMAP-tili",
"Buttons_AddAccount": "Lisää tili", "Buttons_AddAccount": "Lisää tili",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Vaihda teemaa", "Buttons_ApplyTheme": "Vaihda teemaa",
"Buttons_Browse": "Selaa", "Buttons_Browse": "Selaa",
"Buttons_Cancel": "Peruuta", "Buttons_Cancel": "Peruuta",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Kirjaudu sisään", "Buttons_SignIn": "Kirjaudu sisään",
"Buttons_TryAgain": "Yritä uudelleen", "Buttons_TryAgain": "Yritä uudelleen",
"Buttons_Yes": "Kyllä", "Buttons_Yes": "Kyllä",
"Buttons_Reset": "Reset",
"Center": "Keskitetty", "Center": "Keskitetty",
"ComingSoon": "Tulossa pian...", "ComingSoon": "Tulossa pian...",
"ComposerFrom": "Lähettäjä: ", "ComposerFrom": "Lähettäjä: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Aseta mukautettu taustakuva", "CustomThemeBuilder_WallpaperTitle": "Aseta mukautettu taustakuva",
"DialogMessage_AccountLimitMessage": "Sinulla on jo suurin sallittu määrä tilejä.\nHaluatko ostaa 'Rajattomat Tilit' lisäosan jatkaaksesi?", "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_AccountLimitTitle": "Suurin sallittu tilien määrä saavutettu",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Haluatko pysyvästi poistaa kaikki sähköpostit tästä kansiosta?", "DialogMessage_CleanupFolderMessage": "Haluatko pysyvästi poistaa kaikki sähköpostit tästä kansiosta?",
"DialogMessage_CleanupFolderTitle": "Siivoa Kansio", "DialogMessage_CleanupFolderTitle": "Siivoa Kansio",
"DialogMessage_ComposerMissingRecipientMessage": "Viestillä ei ole vastaanottajaa.", "DialogMessage_ComposerMissingRecipientMessage": "Viestillä ei ole vastaanottajaa.",
@@ -82,7 +103,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Uudelleennimeä yhdistetty tili", "DialogMessage_RenameLinkedAccountsTitle": "Uudelleennimeä yhdistetty tili",
"DialogMessage_UnlinkAccountsConfirmationMessage": "Tämä ei poista tilejäsi, ainoastaan yhteyden tilien jaettujen kansioiden välillä. Haluatko jatkaa?", "DialogMessage_UnlinkAccountsConfirmationMessage": "Tämä ei poista tilejäsi, ainoastaan yhteyden tilien jaettujen kansioiden välillä. Haluatko jatkaa?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "Poista tilien yhteys", "DialogMessage_UnlinkAccountsConfirmationTitle": "Poista tilien yhteys",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject", "DialogMessage_EmptySubjectConfirmation": "Aihe puuttuu",
"DialogMessage_EmptySubjectConfirmationMessage": "Viestillä ei ole aihetta. Haluatko jatkaa?", "DialogMessage_EmptySubjectConfirmationMessage": "Viestillä ei ole aihetta. Haluatko jatkaa?",
"DialogMessage_RenameFolderTitle": "Uudelleennimeä kansio", "DialogMessage_RenameFolderTitle": "Uudelleennimeä kansio",
"DialogMessage_RenameFolderMessage": "Anna uusi nimi tälle kansiolle", "DialogMessage_RenameFolderMessage": "Anna uusi nimi tälle kansiolle",
@@ -91,13 +112,23 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Lopettaaksesi viestien saamisen lähettäjältä {0}, mene heidän verkkosivuilleen peruuttaaksesi tilauksesi.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Lopettaaksesi viestien saamisen lähettäjältä {0}, mene heidän verkkosivuilleen peruuttaaksesi tilauksesi.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Avaa verkkosivu", "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}.", "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}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Älä kysy uudelleen", "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.", "CreateAccountAliasDialog_Title": "Create Account Alias",
"DiscordChannelDisclaimerTitle": "Important Discord Information", "CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"Draft": "Draft", "CreateAccountAliasDialog_AliasAddress": "Address",
"EditorToolbarOption_Draw": "Draw", "CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"EditorToolbarOption_Format": "Format", "CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"EditorToolbarOption_Insert": "Insert", "CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Winolla ei ole omaa Discord palvelinta, mutta 'wino-mail' kanava löytyy 'Developer Sanctuary' palvelimelta.\nSaadaksesi päivityksiä Winosta, liity Developer Sanctuary palvelimelle ja seuraa 'wino-mail' kanavaa 'Community Projects' osiossa.\n\nSinut uudelleenohjataan palvelimen osoitteeseen, koska Discord ei tue kanava kutsuja.",
"DiscordChannelDisclaimerTitle": "Tärkeää tietoa Discordista",
"Draft": "Luonnos",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Piirrä",
"EditorToolbarOption_Format": "Muotoile",
"EditorToolbarOption_Insert": "Liitä",
"EditorToolbarOption_None": "Ei mitään", "EditorToolbarOption_None": "Ei mitään",
"EditorToolbarOption_Options": "Asetukset", "EditorToolbarOption_Options": "Asetukset",
"EditorTooltip_WebViewEditor": "Käytä selainpohjaista editoria", "EditorTooltip_WebViewEditor": "Käytä selainpohjaista editoria",
@@ -105,14 +136,18 @@
"ElementTheme_Default": "Käytä järjestelmän asetuksia", "ElementTheme_Default": "Käytä järjestelmän asetuksia",
"ElementTheme_Light": "Vaalea teema", "ElementTheme_Light": "Vaalea teema",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino-palvelin ei saatavilla.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Postilaatikon asetuksia ei löytynyt.", "Exception_ImapAutoDiscoveryFailed": "Postilaatikon asetuksia ei löytynyt.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.", "Exception_ImapClientPoolFailed": "IMAP Client Pool ei saatavilla.",
"Exception_AuthenticationCanceled": "Tunnistautuminen peruutettu", "Exception_AuthenticationCanceled": "Tunnistautuminen peruutettu",
"Exception_CustomThemeExists": "Teema on jo olemassa.", "Exception_CustomThemeExists": "Teema on jo olemassa.",
"Exception_CustomThemeMissingName": "Sinun on annettava nimi.", "Exception_CustomThemeMissingName": "Sinun on annettava nimi.",
"Exception_CustomThemeMissingWallpaper": "Sinun on valittava taustakuva.", "Exception_CustomThemeMissingWallpaper": "Sinun on valittava taustakuva.",
"Exception_FailedToSynchronizeFolders": "Kansioiden synkronointi epäonnistui", "Exception_FailedToSynchronizeFolders": "Kansioiden synkronointi epäonnistui",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.", "Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.",
"Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.", "Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.",
"Exception_GoogleAuthError": "OAuth authorization error: {0}", "Exception_GoogleAuthError": "OAuth authorization error: {0}",
@@ -130,30 +165,30 @@
"Exception_UnsupportedSynchronizerOperation": "This operation is not supported for {0}", "Exception_UnsupportedSynchronizerOperation": "This operation is not supported for {0}",
"Exception_UserCancelSystemFolderSetupDialog": "User canceled system folder config dialog.", "Exception_UserCancelSystemFolderSetupDialog": "User canceled system folder config dialog.",
"Exception_InboxNotAvailable": "Couldn't setup account folders.", "Exception_InboxNotAvailable": "Couldn't setup account folders.",
"Files": "Files", "Files": "Tiedostot",
"FilteringOption_All": "All", "FilteringOption_All": "Kaikki",
"FilteringOption_Flagged": "Flagged", "FilteringOption_Flagged": "Merkitty",
"FilteringOption_Unread": "Unread", "FilteringOption_Unread": "Lukemattomat",
"FilteringOption_Files": "Has files", "FilteringOption_Files": "Liitteelliset",
"Focused": "Focused", "Focused": "Keskitetyt",
"FolderOperation_CreateSubFolder": "Create sub folder", "FolderOperation_CreateSubFolder": "Luo alikansio",
"FolderOperation_Delete": "Delete", "FolderOperation_Delete": "Poista",
"FolderOperation_DontSync": "Don't sync this folder", "FolderOperation_DontSync": "Älä synkronoi tätä kansiota",
"FolderOperation_Empty": "Empty this folder", "FolderOperation_Empty": "Tyhjennä kansio",
"FolderOperation_MarkAllAsRead": "Mark all as read", "FolderOperation_MarkAllAsRead": "Merkitse kaikki luetuksi",
"FolderOperation_Move": "Move", "FolderOperation_Move": "Siirrä",
"DragMoveToFolderCaption": "Move to {0}", "DragMoveToFolderCaption": "Siirrä sijaintiin {0}",
"FolderOperation_None": "None", "FolderOperation_None": "Ei mitään",
"FolderOperation_Pin": "Pin", "FolderOperation_Pin": "Kiinnitä",
"FolderOperation_Rename": "Rename", "FolderOperation_Rename": "Nimeä uudelleen",
"FolderOperation_Unpin": "Unpin", "FolderOperation_Unpin": "Poista kiinnitys",
"HoverActionOption_Archive": "Archive", "HoverActionOption_Archive": "Arkistoi",
"HoverActionOption_Delete": "Delete", "HoverActionOption_Delete": "Poista",
"HoverActionOption_MoveJunk": "Move to Junk", "HoverActionOption_MoveJunk": "Siirrä roskakoriin",
"HoverActionOption_ToggleFlag": "Flag / Unflag", "HoverActionOption_ToggleFlag": "Merkitse / Poista merkintä",
"HoverActionOption_ToggleRead": "Read / Unread", "HoverActionOption_ToggleRead": "Luettu / Lukematon",
"MergedAccountCommonFolderInbox": "Inbox", "MergedAccountCommonFolderInbox": "Saapuneet",
"MergedAccountCommonFolderSent": "Sent", "MergedAccountCommonFolderSent": "Lähetetyt",
"MergedAccountCommonFolderDraft": "Draft", "MergedAccountCommonFolderDraft": "Draft",
"MergedAccountCommonFolderJunk": "Junk", "MergedAccountCommonFolderJunk": "Junk",
"MergedAccountCommonFolderTrash": "Deleted", "MergedAccountCommonFolderTrash": "Deleted",
@@ -187,56 +222,56 @@
"GeneralTitle_Warning": "Warning", "GeneralTitle_Warning": "Warning",
"GeneralTitle_Info": "Information", "GeneralTitle_Info": "Information",
"Info_AccountCreatedMessage": "{0} is created", "Info_AccountCreatedMessage": "{0} is created",
"Info_AccountCreatedTitle": "Account Creation", "Info_AccountCreatedTitle": "Tilin luominen",
"Info_AccountCreationFailedTitle": "Account Creation Failed", "Info_AccountCreationFailedTitle": "Tilin luominen epäonnistui",
"Info_AccountDeletedMessage": "{0} is successfuly deleted.", "Info_AccountDeletedMessage": "{0} poistettiin onnistuneesti.",
"Info_AccountDeletedTitle": "Account Deleted", "Info_AccountDeletedTitle": "Tili poistettu",
"Info_AccountIssueFixFailedTitle": "Failed", "Info_AccountIssueFixFailedTitle": "Epäonnistui",
"Info_AccountIssueFixSuccessMessage": "Fixed all account issues.", "Info_AccountIssueFixSuccessMessage": "Kaikki tiliongelmat korjattu.",
"Info_AccountIssueFixSuccessTitle": "Success", "Info_AccountIssueFixSuccessTitle": "Onnistui",
"Info_AttachmentOpenFailedMessage": "Can't open this attachment.", "Info_AttachmentOpenFailedMessage": "Tätä liitettä ei voi avata.",
"Info_AttachmentOpenFailedTitle": "Failed", "Info_AttachmentOpenFailedTitle": "Epäonnistui",
"Info_AttachmentSaveFailedMessage": "Can't save this attachment.", "Info_AttachmentSaveFailedMessage": "Tätä liitettä ei voi tallentaa.",
"Info_AttachmentSaveFailedTitle": "Failed", "Info_AttachmentSaveFailedTitle": "Epäonnistui",
"Info_AttachmentSaveSuccessMessage": "Attachment is saved.", "Info_AttachmentSaveSuccessMessage": "Liite tallennettu.",
"Info_AttachmentSaveSuccessTitle": "Attachment Saved", "Info_AttachmentSaveSuccessTitle": "Liite tallennettu",
"Info_BackgroundExecutionDeniedMessage": "Background execution for the app is denied. This may affect background synchronization and live notifications.", "Info_BackgroundExecutionDeniedMessage": "Sovelluksen käyttäminen taustalla on estetty. Tämä voi vaikuttaa tausta synkronisointiin ja live-ilmoituksiin.",
"Info_BackgroundExecutionDeniedTitle": "Denied Background Execution", "Info_BackgroundExecutionDeniedTitle": "Taustakäyttö estetty",
"Info_BackgroundExecutionUnknownErrorMessage": "Unknown exception occurred when registering background synchronizer.", "Info_BackgroundExecutionUnknownErrorMessage": "Tuntematon virhe tapahtui rekisteröidessä taustasynkronisoijaa.",
"Info_BackgroundExecutionUnknownErrorTitle": "Background Execution Failure", "Info_BackgroundExecutionUnknownErrorTitle": "Tausta suoritus epäonnistui",
"Info_ComposerMissingMIMEMessage": "Couldn't locate the MIME file. Synchronizing may help.", "Info_ComposerMissingMIMEMessage": "MIME tiedostoa ei löytynyt. Synkronointi voi auttaa.",
"Info_ComposerMissingMIMETitle": "Failed", "Info_ComposerMissingMIMETitle": "Epäonnistui",
"Info_ContactExistsMessage": "This contact is already in the recipient list.", "Info_ContactExistsMessage": "Tämä yhteystieto on jo vastaanottajalistalla.",
"Info_ContactExistsTitle": "Contact Exists", "Info_ContactExistsTitle": "Yhteystieto olemassa",
"Info_DraftFolderMissingMessage": "Draft folder is missing for this account. Please check your account settings.", "Info_DraftFolderMissingMessage": "Luonnos kansio puuttuu tältä tililtä. Tarkasta tilisi asetukset.",
"Info_DraftFolderMissingTitle": "Missing Draft Folder", "Info_DraftFolderMissingTitle": "Luonnos kansio puuuttuu",
"Info_FileLaunchFailedTitle": "Failed to launch file", "Info_FileLaunchFailedTitle": "Tiedoston avaaminen epäonnistui",
"Info_InvalidAddressMessage": "'{0}' is not a valid e-mail address.", "Info_InvalidAddressMessage": "'{0}' ei ole kelvollinen sähköpostiosoite.",
"Info_InvalidAddressTitle": "Invalid Address", "Info_InvalidAddressTitle": "Virheellinen osoite",
"Info_InvalidMoveTargetMessage": "You can't move selected mails to this folder.", "Info_InvalidMoveTargetMessage": "Et voi siirtää valittuja viestejä tähän kansioon.",
"Info_InvalidMoveTargetTitle": "Invalid Move Target", "Info_InvalidMoveTargetTitle": "Virheellinen kohde",
"Info_LogsNotFoundMessage": "There are no logs to share.", "Info_LogsNotFoundMessage": "Ei jaettavia lokeja.",
"Info_LogsNotFoundTitle": "Logs Not Found", "Info_LogsNotFoundTitle": "Lokeja ei löytynyt",
"Info_LogsSavedMessage": "{0} is saved to selected folder.", "Info_LogsSavedMessage": "{0} tallennettiin valittuun kansioon.",
"Info_LogsSavedTitle": "Saved", "Info_LogsSavedTitle": "Tallennettu",
"Info_MailRenderingFailedMessage": "This mail is corrupted or can't be opened.\n{0}", "Info_MailRenderingFailedMessage": "Tämä viesti on vioittunut tai sitä ei voida avata.\n{0}",
"Info_MailRenderingFailedTitle": "Render Failed", "Info_MailRenderingFailedTitle": "Renderöinti epäonnistui",
"Info_MessageCorruptedMessage": "This message is corrupted.", "Info_MessageCorruptedMessage": "Tämä viesti on vioittunut.",
"Info_MessageCorruptedTitle": "Error", "Info_MessageCorruptedTitle": "Virhe",
"Info_MissingFolderMessage": "{0} doesn't exist for this account.", "Info_MissingFolderMessage": "{0} ei ole olemassa tällä tilillä.",
"Info_MissingFolderTitle": "Missing Folder", "Info_MissingFolderTitle": "Puuttuva kansio",
"Info_PDFSaveSuccessTitle": "Success", "Info_PDFSaveSuccessTitle": "Onnistui",
"Info_PDFSaveFailedTitle": "Failed to save PDF file", "Info_PDFSaveFailedTitle": "PDF tiedoston tallentaminen epäonnistui",
"Info_PDFSaveSuccessMessage": "PDF file is saved to {0}", "Info_PDFSaveSuccessMessage": "PDF tiedosto tallennettiin kohteeseen {0}",
"Info_PurchaseExistsMessage": "Looks like this product has already been purchased before.", "Info_PurchaseExistsMessage": "Näyttää sille, että tämä tuote on ostettu jo aikaisemmin.",
"Info_PurchaseExistsTitle": "Existing Product", "Info_PurchaseExistsTitle": "Tuote olemassa",
"Info_PurchaseThankYouMessage": "Thank You", "Info_PurchaseThankYouMessage": "Kiitos",
"Info_PurchaseThankYouTitle": "Purchase successful", "Info_PurchaseThankYouTitle": "Ostos onnistui",
"Info_RequestCreationFailedTitle": "Failed to Create Requests", "Info_RequestCreationFailedTitle": "Pyyntöjen luonti epäonnistui",
"Info_ReviewNetworkErrorMessage": "There was a network issue with your review.", "Info_ReviewNetworkErrorMessage": "Arvostelusi yhteydessä tapahtui virhe.",
"Info_ReviewNetworkErrorTitle": "Network Issue", "Info_ReviewNetworkErrorTitle": "Verkkovirhe",
"Info_ReviewNewMessage": "All feedbacks are appreciated. Thank you for the review!", "Info_ReviewNewMessage": "Kaikki palaute on tervetullutta. Kiitos arvostelustasi!",
"Info_ReviewSuccessTitle": "Thank you", "Info_ReviewSuccessTitle": "Kiitos",
"Info_ReviewUnknownErrorMessage": "There was an unknown issue with your review. ({0})", "Info_ReviewUnknownErrorMessage": "There was an unknown issue with your review. ({0})",
"Info_ReviewUnknownErrorTitle": "Unknown Error", "Info_ReviewUnknownErrorTitle": "Unknown Error",
"Info_ReviewUpdatedMessage": "Thank you for the updated review.", "Info_ReviewUpdatedMessage": "Thank you for the updated review.",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.", "Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.",
"Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.", "Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.",
"Info_UnsubscribeErrorMessage": "Failed to unsubscribe", "Info_UnsubscribeErrorMessage": "Failed to unsubscribe",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method", "ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security", "ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security",
"ImapAuthenticationMethod_Auto": "Auto", "ImapAuthenticationMethod_Auto": "Auto",
@@ -287,56 +324,56 @@
"MailOperation_MarkAsUnread": "Mark as unread", "MailOperation_MarkAsUnread": "Mark as unread",
"MailOperation_MarkNotJunk": "Mark as Not Junk", "MailOperation_MarkNotJunk": "Mark as Not Junk",
"MailOperation_Move": "Move", "MailOperation_Move": "Move",
"MailOperation_MoveFocused": "Move to Focused", "MailOperation_MoveFocused": "Siirrä keskitettyihin",
"MailOperation_MoveJunk": "Move to Junk", "MailOperation_MoveJunk": "Siirrä roskakoriin",
"MailOperation_MoveOther": "Move to Other", "MailOperation_MoveOther": "Siirrä 'muut' kansioon",
"MailOperation_Navigate": "Navigate", "MailOperation_Navigate": "Navigoi",
"MailOperation_Print": "Print", "MailOperation_Print": "Tulosta",
"MailOperation_Reply": "Reply", "MailOperation_Reply": "Vastaa",
"MailOperation_ReplyAll": "Reply all", "MailOperation_ReplyAll": "Vastaa kaikille",
"MailOperation_SaveAs": "Save As", "MailOperation_SaveAs": "Tallenna nimellä",
"MailOperation_SetFlag": "Set flag", "MailOperation_SetFlag": "Aseta merkintä",
"MailOperation_Unarchive": "Unarchive", "MailOperation_Unarchive": "Poista arkistointi",
"MailOperation_Zoom": "Zoom", "MailOperation_Zoom": "Zoomaa",
"MailsSelected": "{0} item(s) selected", "MailsSelected": "{0} kohta(a) valittu",
"MarkFlagUnflag": "Mark as flagged/unflagged", "MarkFlagUnflag": "Merkitse tai poista merkintä",
"MarkReadUnread": "Mark as read/unread", "MarkReadUnread": "Merkitse luetuksi / lukemattomaksi",
"MenuManageAccounts": "Manage Accounts", "MenuManageAccounts": "Tilien hallinta",
"MenuNewMail": "New Mail", "MenuNewMail": "Uusi sähköposti",
"MenuMergedAccountItemAccountsSuffix": " accounts", "MenuMergedAccountItemAccountsSuffix": " tilit",
"MenuRate": "Rate Wino", "MenuRate": "Arvostele Wino",
"MenuSettings": "Settings", "MenuSettings": "Asetukset",
"MergedAccountsAvailableAccountsTitle": "Available Accounts", "MergedAccountsAvailableAccountsTitle": "Saatavilla olevat tilit",
"More": "More", "More": "Lisää",
"MoveMailDialog_InvalidFolderMessage": "{0} is not a valid folder for this mail.", "MoveMailDialog_InvalidFolderMessage": "{0} ei ole kelvollinen kansio tälle viestille.",
"MoveMailDialog_Title": "Pick a folder", "MoveMailDialog_Title": "Valitse kansio",
"NewAccountDialog_AccountName": "Account Name", "NewAccountDialog_AccountName": "Tilin nimi",
"NewAccountDialog_AccountNameDefaultValue": "Personal", "NewAccountDialog_AccountNameDefaultValue": "Henkilökohtainen",
"NewAccountDialog_AccountNamePlaceholder": "eg. Personal Mail", "NewAccountDialog_AccountNamePlaceholder": "esim. Oma sähköposti",
"NewAccountDialog_Title": "Add New Account", "NewAccountDialog_Title": "Lisää uusi tili",
"NoMailSelected": "No message selected", "NoMailSelected": "Ei viestiä valittuna",
"NoMessageCrieteria": "No messages match your search criteria", "NoMessageCrieteria": "Mikään viesti ei vastaa hakuasi",
"NoMessageEmptyFolder": "This folder is empty", "NoMessageEmptyFolder": "Kansio tyhjä",
"Notifications_MultipleNotificationsMessage": "You have {0} new mails", "Notifications_MultipleNotificationsMessage": "Sinulla on {0} uutta sähköpostia",
"Notifications_MultipleNotificationsTitle": "New Mails", "Notifications_MultipleNotificationsTitle": "Uudet sähköpostit",
"Notifications_WinoUpdatedMessage": "Checkout new version {0}", "Notifications_WinoUpdatedMessage": "Tarkasta uusi versio {0}",
"Notifications_WinoUpdatedTitle": "Wino Mail has been updated.", "Notifications_WinoUpdatedTitle": "Wino Mail on päivitetty.",
"Other": "Other", "Other": "Muut",
"PaneLengthOption_Default": "Default", "PaneLengthOption_Default": "Oletus",
"PaneLengthOption_ExtraLarge": "Extra Large", "PaneLengthOption_ExtraLarge": "Extra suuri",
"PaneLengthOption_Large": "Large", "PaneLengthOption_Large": "Suuri",
"PaneLengthOption_Medium": "Medium", "PaneLengthOption_Medium": "Keskikokoinen",
"PaneLengthOption_Micro": "Micro", "PaneLengthOption_Micro": "Micro",
"PaneLengthOption_Small": "Small", "PaneLengthOption_Small": "Pieni",
"Photos": "Photos", "Photos": "Kuvat",
"PreparingFoldersMessage": "Preparing folders", "PreparingFoldersMessage": "Valmistellaan kansioita",
"ProviderDetail_Gmail_Description": "Google Account", "ProviderDetail_Gmail_Description": "Google-tili",
"ProviderDetail_IMAP_Description": "Custom IMAP/SMTP server", "ProviderDetail_IMAP_Description": "Mukautettu IMAP/SMTP palvelin",
"ProviderDetail_IMAP_Title": "IMAP Server", "ProviderDetail_IMAP_Title": "IMAP-palvelin",
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.", "ProtocolLogAvailable_Message": "Protokolla lokit ovat saatavilla diagnostiikkaan.",
"Results": "Results", "Results": "Tulokset",
"Right": "Right", "Right": "Oikea",
"Reader_SaveAllAttachmentButtonText": "Save all attachments", "Reader_SaveAllAttachmentButtonText": "Tallenna kaikki liitteet",
"SynchronizationFolderReport_Success": "up to date", "SynchronizationFolderReport_Success": "up to date",
"SynchronizationFolderReport_Failed": "synchronization is failed", "SynchronizationFolderReport_Failed": "synchronization is failed",
"SearchBarPlaceholder": "Search", "SearchBarPlaceholder": "Search",
@@ -387,7 +424,7 @@
"SettingsEnableLogs_Title": "Enable Logs", "SettingsEnableLogs_Title": "Enable Logs",
"SettingsEnableSignature": "Enable Signature", "SettingsEnableSignature": "Enable Signature",
"SettingsExpandOnStartup_Description": "Set whether Wino should expand this account's folders on startup.", "SettingsExpandOnStartup_Description": "Set whether Wino should expand this account's folders on startup.",
"SettingsExpandOnStartup_Title": "Expand Menu on Startup", "SettingsExpandOnStartup_Title": "Laajenna valikko käynnistäessä",
"SettingsExternalContent_Description": "Manage external content settings when rendering mails.", "SettingsExternalContent_Description": "Manage external content settings when rendering mails.",
"SettingsExternalContent_Title": "External Content", "SettingsExternalContent_Title": "External Content",
"SettingsFocusedInbox_Description": "Set whether Inbox should be split into two as Focused - Other.", "SettingsFocusedInbox_Description": "Set whether Inbox should be split into two as Focused - Other.",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Folder Synchronization", "SettingsFolderSync_Title": "Folder Synchronization",
"SettingsFolderOptions_Title": "Folder Configuration", "SettingsFolderOptions_Title": "Folder Configuration",
"SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.", "SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Center Action", "SettingsHoverActionCenter": "Center Action",
"SettingsHoverActionLeft": "Left Action", "SettingsHoverActionLeft": "Left Action",
"SettingsHoverActionRight": "Right Action", "SettingsHoverActionRight": "Right Action",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Language & Time", "SettingsLanguageTime_Title": "Language & Time",
"SettingsLanguageTime_Description": "Wino display language, preferred time format.", "SettingsLanguageTime_Description": "Wino display language, preferred time format.",
"CategoriesFolderNameOverride": "Categories", "CategoriesFolderNameOverride": "Categories",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "More", "MoreFolderNameOverride": "More",
"SettingsOptions_Title": "Settings", "SettingsOptions_Title": "Settings",
"SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.", "SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.", "SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.",
"SettingsNotifications_Description": "Turn on or off notifications for this account.", "SettingsNotifications_Description": "Turn on or off notifications for this account.",
"SettingsNotifications_Title": "Notifications", "SettingsNotifications_Title": "Notifications",
"SettingsPaneLength_Description": "Change the width of the mail list.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Mail List Pane Length", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.", "SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.",
"SettingsPaypal_Title": "Donate via PayPal", "SettingsPaypal_Title": "Donate via PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Compact Mode", "SettingsPersonalizationMailDisplayCompactMode": "Compact Mode",

View File

@@ -3,13 +3,21 @@
"AccountCreationDialog_Initializing": "initialisation", "AccountCreationDialog_Initializing": "initialisation",
"AccountCreationDialog_PreparingFolders": "Réception des informations du dossier.", "AccountCreationDialog_PreparingFolders": "Réception des informations du dossier.",
"AccountCreationDialog_SigninIn": "Enregistrement des informations du compte.", "AccountCreationDialog_SigninIn": "Enregistrement des informations du compte.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Nom du compte", "AccountEditDialog_Message": "Nom du compte",
"AccountEditDialog_Title": "Modifier le compte", "AccountEditDialog_Title": "Modifier le compte",
"AccountPickerDialog_Title": "Choisir un compte", "AccountPickerDialog_Title": "Choisir un compte",
"AccountSettingsDialog_AccountName": "Sender Display Name", "AccountSettingsDialog_AccountName": "Nom d'affichage de l'expéditeur",
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "ex. Jean Dupont",
"AddHyperlink": "Ajouter", "AddHyperlink": "Ajouter",
"AutoDiscoveryProgressMessage": "Recherche des paramètres de messagerie...", "AutoDiscoveryProgressMessage": "Recherche des paramètres de messagerie...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Paramètres avancés", "BasicIMAPSetupDialog_AdvancedConfiguration": "Paramètres avancés",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Vos identifiants seront uniquement stockés sur votre ordinateur.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Vos identifiants seront uniquement stockés sur votre ordinateur.",
"BasicIMAPSetupDialog_Description": "Certains comptes requièrent des étapes supplémentaires pour se connecter", "BasicIMAPSetupDialog_Description": "Certains comptes requièrent des étapes supplémentaires pour se connecter",
@@ -21,15 +29,17 @@
"BasicIMAPSetupDialog_Password": "Mot de passe", "BasicIMAPSetupDialog_Password": "Mot de passe",
"BasicIMAPSetupDialog_Title": "Compte IMAP", "BasicIMAPSetupDialog_Title": "Compte IMAP",
"Buttons_AddAccount": "Ajouter un compte", "Buttons_AddAccount": "Ajouter un compte",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Appliquer le thème", "Buttons_ApplyTheme": "Appliquer le thème",
"Buttons_Browse": "Parcourir", "Buttons_Browse": "Parcourir",
"Buttons_Cancel": "Annuler", "Buttons_Cancel": "Annuler",
"Buttons_Close": "Fermer", "Buttons_Close": "Fermer",
"Buttons_Create": "Créer", "Buttons_Create": "Créer",
"Buttons_CreateAccount": "Créer un compte", "Buttons_CreateAccount": "Créer un compte",
"Buttons_Copy": "Copy", "Buttons_Copy": "Copier",
"Buttons_Delete": "Supprimer", "Buttons_Delete": "Supprimer",
"Buttons_Edit": "Edit", "Buttons_Edit": "Editer",
"Buttons_Discard": "Ignorer", "Buttons_Discard": "Ignorer",
"Buttons_EnableImageRendering": "Activer", "Buttons_EnableImageRendering": "Activer",
"Buttons_No": "Non", "Buttons_No": "Non",
@@ -40,20 +50,21 @@
"Buttons_SaveConfiguration": "Enregistrer la configuration", "Buttons_SaveConfiguration": "Enregistrer la configuration",
"Buttons_Share": "Partager", "Buttons_Share": "Partager",
"Buttons_SignIn": "Connexion", "Buttons_SignIn": "Connexion",
"Buttons_TryAgain": "Try Again", "Buttons_TryAgain": "Réessayer",
"Buttons_Yes": "Oui", "Buttons_Yes": "Oui",
"Buttons_Reset": "Reset",
"Center": "Centrer", "Center": "Centrer",
"ComingSoon": "Bientôt disponible...", "ComingSoon": "Bientôt disponible...",
"ComposerFrom": "De : ", "ComposerFrom": "De : ",
"ComposerSubject": "Objet : ", "ComposerSubject": "Objet : ",
"ComposerTo": "À : ", "ComposerTo": "À : ",
"ClipboardTextCopied_Message": "{0} copied to clipboard.", "ClipboardTextCopied_Message": "{0} copié dans le presse-papiers.",
"ClipboardTextCopied_Title": "Copied", "ClipboardTextCopied_Title": "Copié",
"ClipboardTextCopyFailed_Message": "Failed to copy {0} to clipboard.", "ClipboardTextCopyFailed_Message": "Échec de la copie de {0} dans le presse-papiers.",
"ComposerToPlaceholder": "click enter to input addresses", "ComposerToPlaceholder": "cliquer sur entrée pour saisir les adresses",
"ComposerAttachmentsDropZone_Message": "Drop your files here", "ComposerAttachmentsDropZone_Message": "Déposez vos fichiers ici",
"ComposerImagesDropZone_Message": "Drop your images here", "ComposerImagesDropZone_Message": "Déposez vos images ici",
"ComposerAttachmentsDragDropAttach_Message": "Attach", "ComposerAttachmentsDragDropAttach_Message": "Attacher",
"CustomThemeBuilder_AccentColorDescription": "Définir une couleur d'accentuation personnalisée si vous le souhaitez. Ne pas sélectionner une couleur utilisera votre couleur d'accentuation Windows.", "CustomThemeBuilder_AccentColorDescription": "Définir une couleur d'accentuation personnalisée si vous le souhaitez. Ne pas sélectionner une couleur utilisera votre couleur d'accentuation Windows.",
"CustomThemeBuilder_AccentColorTitle": "Couleur d'accentuation", "CustomThemeBuilder_AccentColorTitle": "Couleur d'accentuation",
"CustomThemeBuilder_PickColor": "Choisir", "CustomThemeBuilder_PickColor": "Choisir",
@@ -64,12 +75,22 @@
"CustomThemeBuilder_WallpaperTitle": "Définir un fond d'écran personnalisé", "CustomThemeBuilder_WallpaperTitle": "Définir un fond d'écran personnalisé",
"DialogMessage_AccountLimitMessage": "Vous avez atteint la limite de création de compte.\nVoulez-vous acheter le module 'Compte illimité' pour continuer ?", "DialogMessage_AccountLimitMessage": "Vous avez atteint la limite de création de compte.\nVoulez-vous acheter le module 'Compte illimité' pour continuer ?",
"DialogMessage_AccountLimitTitle": "Limite de compte atteinte", "DialogMessage_AccountLimitTitle": "Limite de compte atteinte",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Voulez-vous supprimer définitivement tous les messages de ce dossier ?", "DialogMessage_CleanupFolderMessage": "Voulez-vous supprimer définitivement tous les messages de ce dossier ?",
"DialogMessage_CleanupFolderTitle": "Nettoyer le dossier", "DialogMessage_CleanupFolderTitle": "Nettoyer le dossier",
"DialogMessage_ComposerMissingRecipientMessage": "Le message n'a pas de destinataire.", "DialogMessage_ComposerMissingRecipientMessage": "Le message n'a pas de destinataire.",
"DialogMessage_ComposerValidationFailedTitle": "Validation échouée", "DialogMessage_ComposerValidationFailedTitle": "Validation échouée",
"DialogMessage_CreateLinkedAccountMessage": "Give this new link a name. Accounts will be merged under this name.", "DialogMessage_CreateLinkedAccountMessage": "Donnez un nom à ce nouveau lien. Les comptes seront fusionnés sous ce nom.",
"DialogMessage_CreateLinkedAccountTitle": "Account Link Name", "DialogMessage_CreateLinkedAccountTitle": "Nom du lien des comptes liés",
"DialogMessage_DeleteAccountConfirmationMessage": "Supprimer {0} ?", "DialogMessage_DeleteAccountConfirmationMessage": "Supprimer {0} ?",
"DialogMessage_DeleteAccountConfirmationTitle": "Toutes les données associées à ce compte seront définitivement supprimées du disque.", "DialogMessage_DeleteAccountConfirmationTitle": "Toutes les données associées à ce compte seront définitivement supprimées du disque.",
"DialogMessage_DiscardDraftConfirmationMessage": "Ce brouillon sera supprimé. Voulez-vous continuer ?", "DialogMessage_DiscardDraftConfirmationMessage": "Ce brouillon sera supprimé. Voulez-vous continuer ?",
@@ -79,63 +100,77 @@
"DialogMessage_NoAccountsForCreateMailMessage": "Vous n'avez aucun compte pour créer un message.", "DialogMessage_NoAccountsForCreateMailMessage": "Vous n'avez aucun compte pour créer un message.",
"DialogMessage_NoAccountsForCreateMailTitle": "Compte manquant", "DialogMessage_NoAccountsForCreateMailTitle": "Compte manquant",
"DialogMessage_RenameLinkedAccountsMessage": "Entrez un nouveau nom pour le compte lié", "DialogMessage_RenameLinkedAccountsMessage": "Entrez un nouveau nom pour le compte lié",
"DialogMessage_RenameLinkedAccountsTitle": "Rename Linked Account", "DialogMessage_RenameLinkedAccountsTitle": "Changer le nom du lien des comptes",
"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_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_UnlinkAccountsConfirmationTitle": "Dissocier les comptes",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject", "DialogMessage_EmptySubjectConfirmation": "Sujet manquant",
"DialogMessage_EmptySubjectConfirmationMessage": "Le message n'a pas d'objet. Voulez-vous continuer ?", "DialogMessage_EmptySubjectConfirmationMessage": "Le message n'a pas d'objet. Voulez-vous continuer ?",
"DialogMessage_RenameFolderTitle": "Rename Folder", "DialogMessage_RenameFolderTitle": "Renommer le dossier",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder", "DialogMessage_RenameFolderMessage": "Saisir un nouveau nom pour ce dossier",
"DialogMessage_UnsubscribeConfirmationTitle": "Unsubscribe", "DialogMessage_UnsubscribeConfirmationTitle": "Se désabonner",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "Do you want to stop getting messages from {0}?", "DialogMessage_UnsubscribeConfirmationOneClickMessage": "Voulez-vous cesser de recevoir des messages de {0} ?",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Pour ne plus recevoir de messages de {0}, rendez-vous sur leur site web pour vous désabonner.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Accéder au site 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}.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "Souhaitez-vous ne plus recevoir de messages de la part de {0} ? Wino se désabonnera pour vous en envoyant un e-mail de votre compte e-mail à {1}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Ne plus demander", "Dialog_DontAskAgain": "Ne plus demander",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Wino n'a pas son propre serveur Discord, mais un canal spécial « wino-mail » est hébergé sur le serveur « Developer Sanctuary ».\nPour obtenir les mises à jour sur Wino, veuillez rejoindre le serveur Developer Sanctuary et suivre le canal « wino-mail » sous « Projets communautaires ».\n\nVous serez dirigé vers l'URL du serveur car Discord ne prend pas en charge les invitations à des chaînes.", "DiscordChannelDisclaimerMessage": "Wino n'a pas son propre serveur Discord, mais un canal spécial « wino-mail » est hébergé sur le serveur « Developer Sanctuary ».\nPour obtenir les mises à jour sur Wino, veuillez rejoindre le serveur Developer Sanctuary et suivre le canal « wino-mail » sous « Projets communautaires ».\n\nVous serez dirigé vers l'URL du serveur car Discord ne prend pas en charge les invitations à des chaînes.",
"DiscordChannelDisclaimerTitle": "Informations importantes sur Discord", "DiscordChannelDisclaimerTitle": "Informations importantes sur Discord",
"Draft": "Brouillon", "Draft": "Brouillon",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Dessiner", "EditorToolbarOption_Draw": "Dessiner",
"EditorToolbarOption_Format": "Format", "EditorToolbarOption_Format": "Format",
"EditorToolbarOption_Insert": "Insérer", "EditorToolbarOption_Insert": "Insérer",
"EditorToolbarOption_None": "Aucun", "EditorToolbarOption_None": "Aucun",
"EditorToolbarOption_Options": "Options", "EditorToolbarOption_Options": "Options",
"EditorTooltip_WebViewEditor": "Use web view editor", "EditorTooltip_WebViewEditor": "Utiliser l'éditeur de vue web",
"ElementTheme_Dark": "Mode sombre", "ElementTheme_Dark": "Mode sombre",
"ElementTheme_Default": "Utiliser les paramètres du système", "ElementTheme_Default": "Utiliser les paramètres du système",
"ElementTheme_Light": "Mode clair", "ElementTheme_Light": "Mode clair",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Le serveur Wino a échoué.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.", "Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Impossible de trouver les paramètres de la boîte de réception.",
"Exception_ImapClientPoolFailed": "Échec du groupement de clients IMAP.", "Exception_ImapClientPoolFailed": "Échec du groupement de clients IMAP.",
"Exception_AuthenticationCanceled": "Authentification annulée", "Exception_AuthenticationCanceled": "Authentification annulée",
"Exception_CustomThemeExists": "Ce thème existe déjà.", "Exception_CustomThemeExists": "Ce thème existe déjà.",
"Exception_CustomThemeMissingName": "Vous devez indiquer un nom.", "Exception_CustomThemeMissingName": "Vous devez indiquer un nom.",
"Exception_CustomThemeMissingWallpaper": "Vous devez fournir une image d'arrière-plan personnalisée.", "Exception_CustomThemeMissingWallpaper": "Vous devez fournir une image d'arrière-plan personnalisée.",
"Exception_FailedToSynchronizeFolders": "Échec de la synchronisation des dossiers", "Exception_FailedToSynchronizeFolders": "Échec de la synchronisation des dossiers",
"Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.", "Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "L'url de rappel est nulle lors de l'activation.",
"Exception_GoogleAuthCorruptedCode": "Réponse dautorisation corrompue.", "Exception_GoogleAuthCorruptedCode": "Réponse dautorisation corrompue.",
"Exception_GoogleAuthError": "Erreur d'autorisation OAuth : {0}", "Exception_GoogleAuthError": "Erreur d'autorisation OAuth : {0}",
"Exception_GoogleAuthInvalidResponse": "Received request with invalid state ({0})", "Exception_GoogleAuthInvalidResponse": "Demande reçue avec un état invalide ({0})",
"Exception_GoogleAuthorizationCodeExchangeFailed": "Authorization code exchange failed.", "Exception_GoogleAuthorizationCodeExchangeFailed": "L'échange de code d'autorisation a échoué.",
"Exception_InvalidSystemFolderConfiguration": "La configuration du dossier système nest pas valide. Vérifiez la configuration et réessayez.", "Exception_InvalidSystemFolderConfiguration": "La configuration du dossier système nest pas valide. Vérifiez la configuration et réessayez.",
"Exception_NullAssignedAccount": "Assigned account is null", "Exception_NullAssignedAccount": "Le compte assigné est null",
"Exception_NullAssignedFolder": "Assigned folder is null", "Exception_NullAssignedFolder": "Le dossier assigné est null",
"Exception_SynchronizerFailureHTTP": "Response handling failed with error HTTP code {0}", "Exception_SynchronizerFailureHTTP": "Le traitement de la réponse a échoué avec le code d'erreur HTTP {0}",
"Exception_TokenGenerationFailed": "Échec de la génération du jeton", "Exception_TokenGenerationFailed": "Échec de la génération du jeton",
"Exception_TokenInfoRetrivalFailed": "Impossible de récupérer les informations de l'utilisateur.", "Exception_TokenInfoRetrivalFailed": "Impossible de récupérer les informations de l'utilisateur.",
"Exception_UnknowErrorDuringAuthentication": "Unknown error occurred during authentication", "Exception_UnknowErrorDuringAuthentication": "Une erreur inconnue s'est produite lors de l'authentification",
"Exception_UnsupportedAction": "Action {0} is not implemented in request processor", "Exception_UnsupportedAction": "L'action {0} n'est pas mise en œuvre dans le processeur de la demande",
"Exception_UnsupportedProvider": "Ce fournisseur n'est pas pris en charge.", "Exception_UnsupportedProvider": "Ce fournisseur n'est pas pris en charge.",
"Exception_UnsupportedSynchronizerOperation": "Cette opération n'est pas supportée pour {0}", "Exception_UnsupportedSynchronizerOperation": "Cette opération n'est pas supportée pour {0}",
"Exception_UserCancelSystemFolderSetupDialog": "L'utilisateur a annulé la boîte de dialogue de configuration du dossier système.", "Exception_UserCancelSystemFolderSetupDialog": "L'utilisateur a annulé la boîte de dialogue de configuration du dossier système.",
"Exception_InboxNotAvailable": "Couldn't setup account folders.", "Exception_InboxNotAvailable": "Impossible de configurer les dossiers du compte.",
"Files": "Fichiers", "Files": "Fichiers",
"FilteringOption_All": "Tout", "FilteringOption_All": "Tout",
"FilteringOption_Flagged": "Marqué", "FilteringOption_Flagged": "Marqué",
"FilteringOption_Unread": "Non lus", "FilteringOption_Unread": "Non lus",
"FilteringOption_Files": "Has files", "FilteringOption_Files": "Possède des pièces jointes",
"Focused": "Focused", "Focused": "Focalisé",
"FolderOperation_CreateSubFolder": "Créer un sous-dossier", "FolderOperation_CreateSubFolder": "Créer un sous-dossier",
"FolderOperation_Delete": "Supprimer", "FolderOperation_Delete": "Supprimer",
"FolderOperation_DontSync": "Ne pas synchroniser ce dossier", "FolderOperation_DontSync": "Ne pas synchroniser ce dossier",
@@ -177,14 +212,14 @@
"IMAPSetupDialog_UseSameConfig": "Utilisez le même nom d'utilisateur et mot de passe pour envoyer un e-mail", "IMAPSetupDialog_UseSameConfig": "Utilisez le même nom d'utilisateur et mot de passe pour envoyer un e-mail",
"IMAPSetupDialog_Username": "Nom dutilisateur", "IMAPSetupDialog_Username": "Nom dutilisateur",
"IMAPSetupDialog_UsernamePlaceholder": "johndoe, johndoe@fabrikam.com, domaine/johndoe", "IMAPSetupDialog_UsernamePlaceholder": "johndoe, johndoe@fabrikam.com, domaine/johndoe",
"IMAPSetupDialog_ConnectionFailedTitle": "Connection Failed", "IMAPSetupDialog_ConnectionFailedTitle": "Échec de la Connexion",
"IMAPSetupDialog_ConnectionFailedMessage": "IMAP connection failed.", "IMAPSetupDialog_ConnectionFailedMessage": "Échec de la connexion IMAP.",
"ImageRenderingDisabled": "L'affichage d'image est désactivé pour ce message.", "ImageRenderingDisabled": "L'affichage d'image est désactivé pour ce message.",
"InfoBarAction_Enable": "Activer", "InfoBarAction_Enable": "Activer",
"InfoBarMessage_SynchronizationDisabledFolder": "Ce dossier est désactivé pour la synchronisation.", "InfoBarMessage_SynchronizationDisabledFolder": "Ce dossier est désactivé pour la synchronisation.",
"InfoBarTitle_SynchronizationDisabledFolder": "Dossier désactivé", "InfoBarTitle_SynchronizationDisabledFolder": "Dossier désactivé",
"GeneralTitle_Error": "Error", "GeneralTitle_Error": "Erreur",
"GeneralTitle_Warning": "Warning", "GeneralTitle_Warning": "Avertissement",
"GeneralTitle_Info": "Information", "GeneralTitle_Info": "Information",
"Info_AccountCreatedMessage": "{0} est créé", "Info_AccountCreatedMessage": "{0} est créé",
"Info_AccountCreatedTitle": "Création de compte", "Info_AccountCreatedTitle": "Création de compte",
@@ -202,12 +237,12 @@
"Info_AttachmentSaveSuccessTitle": "Pièce jointe enregistrée", "Info_AttachmentSaveSuccessTitle": "Pièce jointe enregistrée",
"Info_BackgroundExecutionDeniedMessage": "L'exécution en arrière-plan de l'application est refusée. Cela peut affecter la synchronisation en arrière-plan et les notifications en direct.", "Info_BackgroundExecutionDeniedMessage": "L'exécution en arrière-plan de l'application est refusée. Cela peut affecter la synchronisation en arrière-plan et les notifications en direct.",
"Info_BackgroundExecutionDeniedTitle": "Exécution en arrière-plan refusée", "Info_BackgroundExecutionDeniedTitle": "Exécution en arrière-plan refusée",
"Info_BackgroundExecutionUnknownErrorMessage": "Unknown exception occurred when registering background synchronizer.", "Info_BackgroundExecutionUnknownErrorMessage": "Une exception inconnue s'est produite lors de l'enregistrement de la synchronisation en arrière-plan.",
"Info_BackgroundExecutionUnknownErrorTitle": "Échec de l'exécution en arrière-plan", "Info_BackgroundExecutionUnknownErrorTitle": "Échec de l'exécution en arrière-plan",
"Info_ComposerMissingMIMEMessage": "Impossible de trouver le fichier MIME. La synchronisation peut aider.", "Info_ComposerMissingMIMEMessage": "Impossible de trouver le fichier MIME. La synchronisation peut aider.",
"Info_ComposerMissingMIMETitle": "Failed", "Info_ComposerMissingMIMETitle": "Échec",
"Info_ContactExistsMessage": "Ce contact est déjà dans la liste des destinataires.", "Info_ContactExistsMessage": "Ce contact est déjà dans la liste des destinataires.",
"Info_ContactExistsTitle": "Contact Exists", "Info_ContactExistsTitle": "Le contact existe",
"Info_DraftFolderMissingMessage": "Le dossier Brouillon est manquant pour ce compte. Veuillez vérifier vos paramètres de compte.", "Info_DraftFolderMissingMessage": "Le dossier Brouillon est manquant pour ce compte. Veuillez vérifier vos paramètres de compte.",
"Info_DraftFolderMissingTitle": "Dossier brouillon manquant", "Info_DraftFolderMissingTitle": "Dossier brouillon manquant",
"Info_FileLaunchFailedTitle": "Échec du lancement du fichier", "Info_FileLaunchFailedTitle": "Échec du lancement du fichier",
@@ -223,11 +258,11 @@
"Info_MailRenderingFailedTitle": "Le rendu a échoué", "Info_MailRenderingFailedTitle": "Le rendu a échoué",
"Info_MessageCorruptedMessage": "Ce message est corrompu.", "Info_MessageCorruptedMessage": "Ce message est corrompu.",
"Info_MessageCorruptedTitle": "Erreur", "Info_MessageCorruptedTitle": "Erreur",
"Info_MissingFolderMessage": "{0} doesn't exist for this account.", "Info_MissingFolderMessage": "{0} n'existe pas pour ce compte.",
"Info_MissingFolderTitle": "Dossier manquant", "Info_MissingFolderTitle": "Dossier manquant",
"Info_PDFSaveSuccessTitle": "Success", "Info_PDFSaveSuccessTitle": "Réussi",
"Info_PDFSaveFailedTitle": "Failed to save PDF file", "Info_PDFSaveFailedTitle": "Impossible d'enregistrer le fichier",
"Info_PDFSaveSuccessMessage": "PDF file is saved to {0}", "Info_PDFSaveSuccessMessage": "Le fichier PDF est sauvegardé dans {0}",
"Info_PurchaseExistsMessage": "Il semble que ce produit ait déjà été acheté auparavant.", "Info_PurchaseExistsMessage": "Il semble que ce produit ait déjà été acheté auparavant.",
"Info_PurchaseExistsTitle": "Produit existant", "Info_PurchaseExistsTitle": "Produit existant",
"Info_PurchaseThankYouMessage": "Merci", "Info_PurchaseThankYouMessage": "Merci",
@@ -250,9 +285,11 @@
"Info_UnsupportedFunctionalityDescription": "Cette fonctionnalité nest pas encore implémentée.", "Info_UnsupportedFunctionalityDescription": "Cette fonctionnalité nest pas encore implémentée.",
"Info_UnsupportedFunctionalityTitle": "Non supporté", "Info_UnsupportedFunctionalityTitle": "Non supporté",
"Info_UnsubscribeLinkInvalidTitle": "Url de désinscription non valide", "Info_UnsubscribeLinkInvalidTitle": "Url de désinscription non valide",
"Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.", "Info_UnsubscribeLinkInvalidMessage": "Ce lien de désinscription est invalide. Impossible de se désabonner de la liste.",
"Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.", "Info_UnsubscribeSuccessMessage": "Désabonnement réussi de {0}.",
"Info_UnsubscribeErrorMessage": "Failed to unsubscribe", "Info_UnsubscribeErrorMessage": "Échec du désabonnement",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Méthode dauthentification", "ImapAdvancedSetupDialog_AuthenticationMethod": "Méthode dauthentification",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Sécurité de la connexion", "ImapAdvancedSetupDialog_ConnectionSecurity": "Sécurité de la connexion",
"ImapAuthenticationMethod_Auto": "Automatique", "ImapAuthenticationMethod_Auto": "Automatique",
@@ -269,10 +306,10 @@
"Justify": "Justifier", "Justify": "Justifier",
"Left": "Gauche", "Left": "Gauche",
"Link": "Lien", "Link": "Lien",
"LinkedAccountsCreatePolicyMessage": "you must have at least 2 accounts to create link\nlink will be removed on save", "LinkedAccountsCreatePolicyMessage": "vous devez avoir au moins 2 comptes pour créer le lien\nlien sera supprimé lors de la sauvegarde",
"LinkedAccountsTitle": "Comptes liés", "LinkedAccountsTitle": "Comptes liés",
"MailOperation_AlwaysMoveFocused": "Always Move to Focused", "MailOperation_AlwaysMoveFocused": "Toujours déplacer vers Focalisation",
"MailOperation_AlwaysMoveOther": "Always Move to Other", "MailOperation_AlwaysMoveOther": "Toujours déplacer vers Autre",
"MailOperation_Archive": "Archiver", "MailOperation_Archive": "Archiver",
"MailOperation_ClearFlag": "Enlever la balise", "MailOperation_ClearFlag": "Enlever la balise",
"MailOperation_DarkEditor": "Sombre", "MailOperation_DarkEditor": "Sombre",
@@ -287,7 +324,7 @@
"MailOperation_MarkAsUnread": "Marquer comme non lu", "MailOperation_MarkAsUnread": "Marquer comme non lu",
"MailOperation_MarkNotJunk": "Marquer comme non indésirable", "MailOperation_MarkNotJunk": "Marquer comme non indésirable",
"MailOperation_Move": "Déplacer", "MailOperation_Move": "Déplacer",
"MailOperation_MoveFocused": "Move to Focused", "MailOperation_MoveFocused": "Déplacer vers Focalisation",
"MailOperation_MoveJunk": "Déplacer vers indésirables", "MailOperation_MoveJunk": "Déplacer vers indésirables",
"MailOperation_MoveOther": "Déplacer vers autres", "MailOperation_MoveOther": "Déplacer vers autres",
"MailOperation_Navigate": "Naviguer", "MailOperation_Navigate": "Naviguer",
@@ -298,7 +335,7 @@
"MailOperation_SetFlag": "Définir drapeau", "MailOperation_SetFlag": "Définir drapeau",
"MailOperation_Unarchive": "Désarchiver", "MailOperation_Unarchive": "Désarchiver",
"MailOperation_Zoom": "Zoom", "MailOperation_Zoom": "Zoom",
"MailsSelected": "{0} item(s) selected", "MailsSelected": "{0} élément(s) sélectionné(s)",
"MarkFlagUnflag": "Marquer ou Démarquer ce message", "MarkFlagUnflag": "Marquer ou Démarquer ce message",
"MarkReadUnread": "Marquer comme lu/non lu", "MarkReadUnread": "Marquer comme lu/non lu",
"MenuManageAccounts": "Gérer les comptes", "MenuManageAccounts": "Gérer les comptes",
@@ -308,15 +345,15 @@
"MenuSettings": "Paramètres", "MenuSettings": "Paramètres",
"MergedAccountsAvailableAccountsTitle": "Comptes disponibles", "MergedAccountsAvailableAccountsTitle": "Comptes disponibles",
"More": "Plus", "More": "Plus",
"MoveMailDialog_InvalidFolderMessage": "{0} is not a valid folder for this mail.", "MoveMailDialog_InvalidFolderMessage": "{0} n'est pas un dossier valide pour ce courrier.",
"MoveMailDialog_Title": "Choisissez un dossier", "MoveMailDialog_Title": "Choisissez un dossier",
"NewAccountDialog_AccountName": "Nom du compte", "NewAccountDialog_AccountName": "Nom du compte",
"NewAccountDialog_AccountNameDefaultValue": "Personnel", "NewAccountDialog_AccountNameDefaultValue": "Personnel",
"NewAccountDialog_AccountNamePlaceholder": "Ex. courrier personnel", "NewAccountDialog_AccountNamePlaceholder": "Ex. courrier personnel",
"NewAccountDialog_Title": "Ajouter un nouveau compte", "NewAccountDialog_Title": "Ajouter un nouveau compte",
"NoMailSelected": "No message selected", "NoMailSelected": "Aucun message sélectionné",
"NoMessageCrieteria": "No messages match your search criteria", "NoMessageCrieteria": "Aucuns messages ne correspond à vos critères de recherche",
"NoMessageEmptyFolder": "This folder is empty", "NoMessageEmptyFolder": "Ce dossier est vide",
"Notifications_MultipleNotificationsMessage": "Vous avez {0} nouveaux messages", "Notifications_MultipleNotificationsMessage": "Vous avez {0} nouveaux messages",
"Notifications_MultipleNotificationsTitle": "Nouveaux courriers", "Notifications_MultipleNotificationsTitle": "Nouveaux courriers",
"Notifications_WinoUpdatedMessage": "Vérifier la nouvelle version {0}", "Notifications_WinoUpdatedMessage": "Vérifier la nouvelle version {0}",
@@ -333,21 +370,21 @@
"ProviderDetail_Gmail_Description": "Compte Google", "ProviderDetail_Gmail_Description": "Compte Google",
"ProviderDetail_IMAP_Description": "Serveur IMAP/SMTP personnalisé", "ProviderDetail_IMAP_Description": "Serveur IMAP/SMTP personnalisé",
"ProviderDetail_IMAP_Title": "Serveur IMAP", "ProviderDetail_IMAP_Title": "Serveur IMAP",
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.", "ProtocolLogAvailable_Message": "Les journaux de protocole sont disponibles pour les diagnostics.",
"Results": "Résultats", "Results": "Résultats",
"Right": "Droite", "Right": "Droite",
"Reader_SaveAllAttachmentButtonText": "Save all attachments", "Reader_SaveAllAttachmentButtonText": "Enregistrer toutes les pièces jointes",
"SynchronizationFolderReport_Success": "À jour", "SynchronizationFolderReport_Success": "À jour",
"SynchronizationFolderReport_Failed": "la synchronisation a échouée", "SynchronizationFolderReport_Failed": "la synchronisation a échouée",
"SearchBarPlaceholder": "Search", "SearchBarPlaceholder": "Rechercher",
"SearchingIn": "Searching in", "SearchingIn": "Recherche dans",
"SearchPivotName": "Results", "SearchPivotName": "Résultats",
"SettingsAboutGithub_Description": "Allez au dépôt GitHub du gestionnaire de tickets.", "SettingsAboutGithub_Description": "Allez au dépôt GitHub du gestionnaire de tickets.",
"SettingsAboutGithub_Title": "GitHub", "SettingsAboutGithub_Title": "GitHub",
"SettingsAccountManagementAppendMessage_Title": "Append messages to Sent folder", "SettingsAccountManagementAppendMessage_Title": "Ajouter les messages au dossier Envoyé",
"SettingsAccountManagementAppendMessage_Description": "Créer une copie du message dans le dossier Envoyé après l'envoi du brouillon. Activez cette option si vous ne voyez pas vos e-mails après les avoir envoyés dans le dossier Envoyés.", "SettingsAccountManagementAppendMessage_Description": "Créer une copie du message dans le dossier Envoyé après l'envoi du brouillon. Activez cette option si vous ne voyez pas vos e-mails après les avoir envoyés dans le dossier Envoyés.",
"SettingsEditLinkedInbox_Title": "Edit Linked Inbox", "SettingsEditLinkedInbox_Title": "Modifier la boîte de réception liée",
"SettingsEditLinkedInbox_Description": "Add / remove accounts, rename or break the link between accounts.", "SettingsEditLinkedInbox_Description": "Ajouter / supprimer des comptes, renommer ou rompre le lien entre les comptes.",
"SettingsAboutVersion": "Version ", "SettingsAboutVersion": "Version ",
"SettingsAboutWinoDescription": "Client de messagerie léger pour les périphériques Windows.", "SettingsAboutWinoDescription": "Client de messagerie léger pour les périphériques Windows.",
"SettingsAbout_Description": "En savoir plus sur Wino.", "SettingsAbout_Description": "En savoir plus sur Wino.",
@@ -359,29 +396,29 @@
"SettingsAccountName_Title": "Nom du compte", "SettingsAccountName_Title": "Nom du compte",
"SettingsApplicationTheme_Description": "Personnalisez Wino avec différents thèmes d'application personnalisés pour vous.", "SettingsApplicationTheme_Description": "Personnalisez Wino avec différents thèmes d'application personnalisés pour vous.",
"SettingsApplicationTheme_Title": "Thème de l'application", "SettingsApplicationTheme_Title": "Thème de l'application",
"SettingsAvailableThemes_Description": "Select a theme from Wino's own collection for your taste or apply your own themes.", "SettingsAvailableThemes_Description": "Sélectionnez un thème de la collection de Wino selon vos goûts ou appliquez vos propres thèmes.",
"SettingsAvailableThemes_Title": "Thèmes disponibles", "SettingsAvailableThemes_Title": "Thèmes disponibles",
"SettingsAutoSelectNextItem_Title": "Auto select next item", "SettingsAutoSelectNextItem_Title": "Sélection automatique de l'élément suivant",
"SettingsAutoSelectNextItem_Description": "Select the next item after you delete or move a mail.", "SettingsAutoSelectNextItem_Description": "Sélectionnez l'élément suivant après avoir supprimé ou déplacé un courrier.",
"SettingsCustomTheme_Description": "Créez votre propre thème personnalisé avec un fond d'écran personnalisé et une couleur d'accentuation.", "SettingsCustomTheme_Description": "Créez votre propre thème personnalisé avec un fond d'écran personnalisé et une couleur d'accentuation.",
"SettingsCustomTheme_Title": "Thème personnalisé", "SettingsCustomTheme_Title": "Thème personnalisé",
"SettingsConfigureSpecialFolders_Title": "Configure System Folders", "SettingsConfigureSpecialFolders_Title": "Configurer les dossiers système",
"SettingsConfigureSpecialFolders_Description": "Set folders with special functions. Folders such as Archive, Inbox, and Drafts are essential for Wino to function properly.", "SettingsConfigureSpecialFolders_Description": "Définir des dossiers avec des fonctions spéciales. Les dossiers tels que Archive, Boîte de réception et Brouillons sont essentiels au bon fonctionnement de Wino.",
"SettingConfigureSpecialFolders_Button": "Configure", "SettingConfigureSpecialFolders_Button": "Configurer",
"Error_FailedToSetupSystemFolders_Title": "Failed to setup system folders", "Error_FailedToSetupSystemFolders_Title": "Impossible de configurer les dossiers système",
"SettingsDeleteAccount_Description": "Supprimer tous les e-mails et identifiants associés à ce compte.", "SettingsDeleteAccount_Description": "Supprimer tous les e-mails et identifiants associés à ce compte.",
"SettingsDeleteAccount_Title": "Supprimer ce compte", "SettingsDeleteAccount_Title": "Supprimer ce compte",
"SettingsDeleteProtection_Description": "Wino devrait-il vous demander une comfirmation chaque fois que vous essayez de supprimer définitivement un mail en utilisant les touches Maj + Supprimer?", "SettingsDeleteProtection_Description": "Wino devrait-il vous demander une comfirmation chaque fois que vous essayez de supprimer définitivement un mail en utilisant les touches Maj + Supprimer?",
"SettingsDeleteProtection_Title": "Protection contre la suppression permanente", "SettingsDeleteProtection_Title": "Protection contre la suppression permanente",
"SettingsDiagnostics_Description": "Pour les développeurs", "SettingsDiagnostics_Description": "Pour les développeurs",
"SettingsDiagnostics_Title": "Diagnostics", "SettingsDiagnostics_Title": "Diagnostics",
"SettingsDiscord_Description": "Get regular development updates, join roadmap discussions and provide feedback.", "SettingsDiscord_Description": "Obtenez des mises à jour régulières sur le développement, participez aux discussions sur la feuille de route et donnez votre avis.",
"SettingsDiscord_Title": "Canal Discord", "SettingsDiscord_Title": "Canal Discord",
"SettingsElementThemeSelectionDisabled": "Element theme selection is disabled when application theme is selected other than Default.", "SettingsElementThemeSelectionDisabled": "La sélection du thème de l'élément est désactivée lorsque le thème de l'application sélectionné n'est pas le thème par défaut.",
"SettingsElementTheme_Description": "Select a Windows theme for Wino", "SettingsElementTheme_Description": "Sélectionnez un thème Windows pour Wino",
"SettingsElementTheme_Title": "Thème de l'élément", "SettingsElementTheme_Title": "Thème de l'élément",
"SettingsEnableHoverActions_Title": "Activer les actions de survol", "SettingsEnableHoverActions_Title": "Activer les actions de survol",
"SettingsEnableIMAPLogs_Description": "Enable this to provide details about IMAP connectivity issuses you had during IMAP server setup.", "SettingsEnableIMAPLogs_Description": "Activez cette option pour fournir des détails sur les problèmes de connectivité IMAP que vous avez rencontrés lors de la configuration du serveur IMAP.",
"SettingsEnableIMAPLogs_Title": "Activer les journaux de protocole IMAP", "SettingsEnableIMAPLogs_Title": "Activer les journaux de protocole IMAP",
"SettingsEnableLogs_Description": "Je pourrais avoir besoin de Logs pour que les tickets ouverts sur GitHub puissent être diagnostiqués. Aucun de ces journaux n'exposera vos identifiants ou vos informations sensées.", "SettingsEnableLogs_Description": "Je pourrais avoir besoin de Logs pour que les tickets ouverts sur GitHub puissent être diagnostiqués. Aucun de ces journaux n'exposera vos identifiants ou vos informations sensées.",
"SettingsEnableLogs_Title": "Activer les journaux", "SettingsEnableLogs_Title": "Activer les journaux",
@@ -392,55 +429,62 @@
"SettingsExternalContent_Title": "Contenu externe", "SettingsExternalContent_Title": "Contenu externe",
"SettingsFocusedInbox_Description": "Définit si la boîte de réception doit être divisée en deux en Prioritaire - Autre.", "SettingsFocusedInbox_Description": "Définit si la boîte de réception doit être divisée en deux en Prioritaire - Autre.",
"SettingsFocusedInbox_Title": "Boîte de réception Prioritaire", "SettingsFocusedInbox_Title": "Boîte de réception Prioritaire",
"SettingsFolderSync_Description": "Enable or disable specific folders for synchronization.", "SettingsFolderSync_Description": "Activer ou désactiver des dossiers spécifiques pour la synchronisation.",
"SettingsFolderSync_Title": "Folder Synchronization", "SettingsFolderSync_Title": "Synchronisation de dossier",
"SettingsFolderOptions_Title": "Folder Configuration", "SettingsFolderOptions_Title": "Configuration dossier",
"SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.", "SettingsFolderOptions_Description": "Modifier les paramètres des dossiers individuels, comme activer/désactiver la synchronisation ou afficher/masquer les badges non lus.",
"SettingsHoverActionCenter": "Center Action", "SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Action centrée",
"SettingsHoverActionLeft": "Action de gauche", "SettingsHoverActionLeft": "Action de gauche",
"SettingsHoverActionRight": "Action de droite", "SettingsHoverActionRight": "Action de droite",
"SettingsHoverActions_Description": "Select 3 actions to show up when you hover over the mails with cursor.", "SettingsHoverActions_Description": "Sélectionnez 3 actions à afficher lorsque vous survolez les messages avec le curseur.",
"SettingsHoverActions_Title": "Actions de survol", "SettingsHoverActions_Title": "Actions de survol",
"SettingsLanguage_Description": "Changer la langue d'affichage de Wino.", "SettingsLanguage_Description": "Changer la langue d'affichage de Wino.",
"SettingsLanguage_Title": "Langue d'affichage", "SettingsLanguage_Title": "Langue d'affichage",
"SettingsLanguageTime_Title": "Language & Time", "SettingsLanguageTime_Title": "Langue et heure",
"SettingsLanguageTime_Description": "Wino display language, preferred time format.", "SettingsLanguageTime_Description": "Langue d'affichage de Wino, format d'heure préféré.",
"CategoriesFolderNameOverride": "Catégories", "CategoriesFolderNameOverride": "Catégories",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "Plus", "MoreFolderNameOverride": "Plus",
"SettingsOptions_Title": "Paramètres", "SettingsOptions_Title": "Paramètres",
"SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.", "SettingsLinkAccounts_Description": "Fusionnez plusieurs comptes en un seul. Regroupez les messages d'une même boîte de réception.",
"SettingsLinkAccounts_Title": "Create Linked Accounts", "SettingsLinkAccounts_Title": "Créer des comptes liés",
"SettingsLinkedAccountsSave_Description": "Modify the current link with the new accounts.", "SettingsLinkedAccountsSave_Description": "Modifier le lien actuel avec les nouveaux comptes.",
"SettingsLinkedAccountsSave_Title": "Enregistrer les modifications", "SettingsLinkedAccountsSave_Title": "Enregistrer les modifications",
"SettingsLoadImages_Title": "Load images automatically", "SettingsLoadImages_Title": "Charger les images automatiquement",
"SettingsLoadStyles_Title": "Load styles automatically", "SettingsLoadStyles_Title": "Chargement automatique des styles",
"SettingsMailSpacing_Description": "Adjust the spacing for listing mails.", "SettingsMailSpacing_Description": "Ajuster l'espacement pour l'énumération des courriers.",
"SettingsMailSpacing_Title": "Espacement du courrier", "SettingsMailSpacing_Title": "Espacement du courrier",
"SettingsFolderMenuStyle_Title": "Create Nested Folders", "SettingsFolderMenuStyle_Title": "Créer des dossiers imbriqués",
"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", "SettingsFolderMenuStyle_Description": "Indique si les dossiers de compte doivent être imbriqués dans un élément de menu de compte ou non. Désactivez cette option si vous préférez l'ancien système de menu de Windows Mail",
"SettingsManageAccountSettings_Description": "Notifications, signatures, synchronisation et autres paramètres par compte.", "SettingsManageAccountSettings_Description": "Notifications, signatures, synchronisation et autres paramètres par compte.",
"SettingsManageAccountSettings_Title": "Manage Account Settings", "SettingsManageAccountSettings_Title": "Gérer les paramètres du compte",
"SettingsAppPreferences_Title": "App Preferences", "SettingsAppPreferences_Title": "Préférence de l'application",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.", "SettingsAppPreferences_Description": "Paramètres généraux / préférences pour Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior", "SettingsAppPreferences_CloseBehavior_Title": "Comportement de fermeture de l'application",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?", "SettingsAppPreferences_CloseBehavior_Description": "Que se passe-t-il lorsque vous fermez l'application?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup", "SettingsAppPreferences_StartupBehavior_Title": "Démarrage minimisé au démarrage de Windows",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.", "SettingsAppPreferences_StartupBehavior_Description": "Permettre à Wino Mail de se lancer en mode réduit au démarrage de Windows. Autorisez-le toujours à recevoir des notifications.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.", "SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail a été configuré avec succès pour être lancé en arrière-plan au démarrage de Windows.",
"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_Disabled": "Wino Mail ne sera pas lancé au démarrage de Windows. Vous ne recevrez donc pas de notifications lorsque vous redémarrerez votre ordinateur.",
"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_DisabledByPolicy": "Votre administrateur ou les stratégies de groupe ont désactivé l'exécution d'applications au démarrage. Ainsi, Wino Mail ne peut pas être lancé au démarrage de Windows.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.", "SettingsAppPreferences_StartupBehavior_DisabledByUser": "Veuillez aller dans le Gestionnaire des tâches -> onglet Démarrage pour permettre à Wino Mail de se lancer au démarrage de Windows.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.", "SettingsAppPreferences_StartupBehavior_FatalError": "Une erreur fatale s'est produite lors de la modification du mode de démarrage de Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable", "SettingsAppPreferences_StartupBehavior_Enable": "Activer",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable", "SettingsAppPreferences_StartupBehavior_Disable": "Désactiver",
"SettingsReorderAccounts_Title": "Reorder Accounts", "SettingsReorderAccounts_Title": "Réorganiser les comptes",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.", "SettingsReorderAccounts_Description": "Modifier l'ordre des comptes dans la liste des comptes.",
"SettingsManageLink_Description": "Move items to add new link or remove existing link.", "SettingsManageLink_Description": "Déplacer des éléments pour ajouter un nouveau lien ou supprimer un lien existant.",
"SettingsManageLink_Title": "Manage Link", "SettingsManageLink_Title": "Gérer le lien",
"SettingsMarkAsRead_Description": "Change what should happen to the selected item.", "SettingsMarkAsRead_Description": "Modifier ce qui doit arriver à l'élément sélectionné.",
"SettingsMarkAsRead_DontChange": "Don't automatically mark item as read", "SettingsMarkAsRead_DontChange": "Ne pas marquer automatiquement l'élément comme lu",
"SettingsMarkAsRead_SecondsToWait": "Secondes à attendre : ", "SettingsMarkAsRead_SecondsToWait": "Secondes à attendre : ",
"SettingsMarkAsRead_Timer": "When viewed in the reading pane", "SettingsMarkAsRead_Timer": "Lorsqu'il est affiché dans le volet de lecture",
"SettingsMarkAsRead_Title": "Marquer l'élément comme lu", "SettingsMarkAsRead_Title": "Marquer l'élément comme lu",
"SettingsMarkAsRead_WhenSelected": "Lorsque sélectionné", "SettingsMarkAsRead_WhenSelected": "Lorsque sélectionné",
"SettingsMessageList_Description": "Modifiez la façon dont vos messages doivent être organisés dans la liste de courriels.", "SettingsMessageList_Description": "Modifiez la façon dont vos messages doivent être organisés dans la liste de courriels.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "Vous n'avez pas encore configuré de comptes.", "SettingsNoAccountSetupMessage": "Vous n'avez pas encore configuré de comptes.",
"SettingsNotifications_Description": "Activer ou désactiver les notifications pour ce compte.", "SettingsNotifications_Description": "Activer ou désactiver les notifications pour ce compte.",
"SettingsNotifications_Title": "Notifications", "SettingsNotifications_Title": "Notifications",
"SettingsPaneLength_Description": "Modifie la largeur de la liste de courriels.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Longueur du panneau de la liste d'emails", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Montrez-nous plus d'amour ❤️ Tous les dons sont appréciés.", "SettingsPaypal_Description": "Montrez-nous plus d'amour ❤️ Tous les dons sont appréciés.",
"SettingsPaypal_Title": "Faire un don via PayPal", "SettingsPaypal_Title": "Faire un don via PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Mode compact", "SettingsPersonalizationMailDisplayCompactMode": "Mode compact",
@@ -459,10 +503,10 @@
"SettingsPersonalization_Title": "Personnalisation", "SettingsPersonalization_Title": "Personnalisation",
"SettingsPrivacyPolicy_Description": "Examinez la politique de confidentialité.", "SettingsPrivacyPolicy_Description": "Examinez la politique de confidentialité.",
"SettingsPrivacyPolicy_Title": "Politique de confidentialité", "SettingsPrivacyPolicy_Title": "Politique de confidentialité",
"SettingsReader_Title": "Reader", "SettingsReader_Title": "Lecteur",
"SettingsComposer_Title": "Composer", "SettingsComposer_Title": "Éditeur",
"SettingsReadComposePane_Description": "Fonts, external content.", "SettingsReadComposePane_Description": "Polices, contenu externe.",
"SettingsReadComposePane_Title": "Reader & Composer", "SettingsReadComposePane_Title": "Lecteur & Éditeur",
"SettingsReaderFont_Title": "Police par défaut du lecteur", "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.", "SettingsReaderFontFamily_Description": "Modifier la police par défaut et la taille de police pour la lecture des messages.",
"SettingsFontFamily_Title": "Famille de polices", "SettingsFontFamily_Title": "Famille de polices",
@@ -472,46 +516,46 @@
"SettingsComposerFontFamily_Description": "Modifier la police et la taille par défaut lors de la composition des mails.", "SettingsComposerFontFamily_Description": "Modifier la police et la taille par défaut lors de la composition des mails.",
"SettingsRenameMergeAccount_Description": "Changer le nom d'affichage des comptes liés.", "SettingsRenameMergeAccount_Description": "Changer le nom d'affichage des comptes liés.",
"SettingsRenameMergeAccount_Title": "Renommer", "SettingsRenameMergeAccount_Title": "Renommer",
"SettingsSemanticZoom_Description": "This will allow you to click on the headers in messages list and go to specific date", "SettingsSemanticZoom_Description": "Cela vous permettra de cliquer sur les en-têtes de la liste des messages et d'accéder à une date spécifique",
"SettingsSemanticZoom_Title": "Semantic Zoom for Date Headers", "SettingsSemanticZoom_Title": "Zoom sémantique sur les en-têtes de date",
"SettingsShowPreviewText_Description": "Hide/show thepreview text.", "SettingsShowPreviewText_Description": "Masquer/afficher le texte de l'aperçu.",
"SettingsShowPreviewText_Title": "Show Preview Text", "SettingsShowPreviewText_Title": "Afficher l'aperçu du texte",
"SettingsShowSenderPictures_Description": "Masquer/afficher les vignettes des images de l'expéditeur.", "SettingsShowSenderPictures_Description": "Masquer/afficher les vignettes des images de l'expéditeur.",
"SettingsShowSenderPictures_Title": "Afficher l'avatar de l'expéditeur", "SettingsShowSenderPictures_Title": "Afficher l'avatar de l'expéditeur",
"SettingsPrefer24HourClock_Title": "Display Clock Format in 24 Hours", "SettingsPrefer24HourClock_Title": "Afficher le format horloge en 24 heures",
"SettingsPrefer24HourClock_Description": "Les heures de réception du courrier seront affichées au format 24 heures au lieu de 12 (AM/PM)", "SettingsPrefer24HourClock_Description": "Les heures de réception du courrier seront affichées au format 24 heures au lieu de 12 (AM/PM)",
"SettingsSignature_Description": "Manage account signatures", "SettingsSignature_Description": "Gérer les signatures du compte",
"SettingsSignature_Title": "Signature", "SettingsSignature_Title": "Signature",
"SettingsStartupItem_Description": "Primary account item to load Inbox at startup.", "SettingsStartupItem_Description": "Élément principal du compte pour charger la boîte de réception au démarrage.",
"SettingsStartupItem_Title": "Startup Item", "SettingsStartupItem_Title": "Élément de démarrage",
"SettingsStore_Description": "Montrer nous un peu d'amour ❤️", "SettingsStore_Description": "Montrer nous un peu d'amour ❤️",
"SettingsStore_Title": "Évaluez l'application sur le store", "SettingsStore_Title": "Évaluez l'application sur le store",
"SettingsThreads_Description": "Organiser les messages en fils de conversation.", "SettingsThreads_Description": "Organiser les messages en fils de conversation.",
"SettingsThreads_Title": "Affichage en mode conversation", "SettingsThreads_Title": "Affichage en mode conversation",
"SettingsUnlinkAccounts_Description": "Remove the link between accounts. This will not delete your accounts.", "SettingsUnlinkAccounts_Description": "Supprimer le lien entre les comptes. Cela ne supprimera pas vos comptes.",
"SettingsUnlinkAccounts_Title": "Dissocier les comptes", "SettingsUnlinkAccounts_Title": "Dissocier les comptes",
"SortingOption_Date": "Par date", "SortingOption_Date": "Par date",
"SortingOption_Name": "Par nom", "SortingOption_Name": "Par nom",
"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_MessageFirstLine": "Tous les commentaires sont appréciés et ils permettront d'améliorer Wino à l'avenir. Souhaitez-vous donner une note à Wino dans Microsoft Store ?",
"StoreRatingDialog_MessageSecondLine": "Would you like to rate Wino Mail in Microsoft Store?", "StoreRatingDialog_MessageSecondLine": "Voulez-vous évaluer Wino Mail dans Microsoft Store ?",
"StoreRatingDialog_Title": "Vous aimez Wino ?", "StoreRatingDialog_Title": "Vous aimez Wino ?",
"SystemFolderConfigDialog_ArchiveFolderDescription": "Archived messages will be moved to here.", "SystemFolderConfigDialog_ArchiveFolderDescription": "Les messages archivés seront déplacés ici.",
"SystemFolderConfigDialog_ArchiveFolderHeader": "Archive Folder", "SystemFolderConfigDialog_ArchiveFolderHeader": "Dossier archive",
"SystemFolderConfigDialog_DeletedFolderDescription": "Deleted messages will be moved to here.", "SystemFolderConfigDialog_DeletedFolderDescription": "Les messages supprimés seront déplacés ici.",
"SystemFolderConfigDialog_DeletedFolderHeader": "Dossier supprimé", "SystemFolderConfigDialog_DeletedFolderHeader": "Dossier supprimé",
"SystemFolderConfigDialog_DraftFolderDescription": "Les nouveaux courriels/réponses seront créés ici.", "SystemFolderConfigDialog_DraftFolderDescription": "Les nouveaux courriels/réponses seront créés ici.",
"SystemFolderConfigDialog_DraftFolderHeader": "Dossier de brouillon", "SystemFolderConfigDialog_DraftFolderHeader": "Dossier de brouillon",
"SystemFolderConfigDialog_JunkFolderDescription": "Tous les courriers indésirables et spam/spam seront ici.", "SystemFolderConfigDialog_JunkFolderDescription": "Tous les courriers indésirables et spam/spam seront ici.",
"SystemFolderConfigDialog_JunkFolderHeader": "Dossier indésirable/spam", "SystemFolderConfigDialog_JunkFolderHeader": "Dossier indésirable/spam",
"SystemFolderConfigDialog_MessageFirstLine": "This IMAP server doesn't support SPECIAL-USE extension hence Wino couldn't setup the system folders properly.", "SystemFolderConfigDialog_MessageFirstLine": "Ce serveur IMAP ne supporte pas l'extension SPECIAL-USE et Wino n'a donc pas pu configurer les dossiers système correctement.",
"SystemFolderConfigDialog_MessageSecondLine": "Please select the appropriate folders for specific functionalities.", "SystemFolderConfigDialog_MessageSecondLine": "Veuillez sélectionner les dossiers appropriés pour des fonctionnalités spécifiques.",
"SystemFolderConfigDialog_SentFolderDescription": "Le dossier contenant les messages envoyés sera stocké.", "SystemFolderConfigDialog_SentFolderDescription": "Le dossier contenant les messages envoyés sera stocké.",
"SystemFolderConfigDialog_SentFolderHeader": "Dossier envoyé", "SystemFolderConfigDialog_SentFolderHeader": "Dossier envoyé",
"SystemFolderConfigDialog_Title": "Configurer les dossiers système", "SystemFolderConfigDialog_Title": "Configurer les dossiers système",
"SystemFolderConfigDialogValidation_InboxSelected": "You can't assign Inbox folder to any other system folder.", "SystemFolderConfigDialogValidation_InboxSelected": "Vous ne pouvez pas assigner de dossier de boîte de réception à un autre dossier système.",
"SystemFolderConfigDialogValidation_DuplicateSystemFolders": "Some of the system folders are used more than once in the configuration.", "SystemFolderConfigDialogValidation_DuplicateSystemFolders": "Certains dossiers du système sont utilisés plusieurs fois dans la configuration.",
"SystemFolderConfigSetupSuccess_Title": "System Folders Setup", "SystemFolderConfigSetupSuccess_Title": "Configuration des dossiers système",
"SystemFolderConfigSetupSuccess_Message": "System folders are successfully configured.", "SystemFolderConfigSetupSuccess_Message": "Les dossiers système sont configurés avec succès.",
"TestingImapConnectionMessage": "Test de la connexion au serveur...", "TestingImapConnectionMessage": "Test de la connexion au serveur...",
"Today": "Aujourd'hui", "Today": "Aujourd'hui",
"UnknownAddress": "Adresse inconnue", "UnknownAddress": "Adresse inconnue",
@@ -520,33 +564,33 @@
"UnknownSender": "Expéditeur inconnu", "UnknownSender": "Expéditeur inconnu",
"Unsubscribe": "Se désabonner", "Unsubscribe": "Se désabonner",
"ViewContactDetails": "Voir les détails", "ViewContactDetails": "Voir les détails",
"WinoUpgradeDescription": "Wino offers 3 accounts to start with for free. If you need more than 3 accounts, please upgrade", "WinoUpgradeDescription": "Wino offre 3 comptes gratuits pour commencer. Si vous avez besoin de plus de 3 comptes, veuillez passer à la version supérieure",
"WinoUpgradeMessage": "Mettre à niveau vers des comptes illimités", "WinoUpgradeMessage": "Mettre à niveau vers des comptes illimités",
"WinoUpgradeRemainingAccountsMessage": "{0} comptes gratuits utilisés sur {1}.", "WinoUpgradeRemainingAccountsMessage": "{0} comptes gratuits utilisés sur {1}.",
"Yesterday": "Hier", "Yesterday": "Hier",
"SignatureEditorDialog_Title": "Signature Editor", "SignatureEditorDialog_Title": "Éditeur de signature",
"SignatureEditorDialog_SignatureName_Placeholder": "Name your signature", "SignatureEditorDialog_SignatureName_Placeholder": "Nom de la signature",
"SignatureEditorDialog_SignatureName_TitleNew": "Signature name", "SignatureEditorDialog_SignatureName_TitleNew": "Nom de la signature",
"SignatureEditorDialog_SignatureName_TitleEdit": "Current signature name: {0}", "SignatureEditorDialog_SignatureName_TitleEdit": "Nom de la signature actuelle : {0}",
"SignatureDeleteDialog_Title": "Delete signature", "SignatureDeleteDialog_Title": "Supprimer la signature",
"SignatureDeleteDialog_Message": "Are you sure you want to delete \"{0}\" signature?", "SignatureDeleteDialog_Message": "Êtes-vous sûr de vouloir supprimer la signature « {0} » ?",
"SettingsSignature_ForNewMessages_Title": "For New Messages", "SettingsSignature_ForNewMessages_Title": "Pour les nouveaux messages",
"SettingsSignature_ForFollowingMessages_Title": "For Replies/Forwards", "SettingsSignature_ForFollowingMessages_Title": "Pour les réponses / les transferts",
"SettingsSignature_SignatureDefaults": "Signature defaults", "SettingsSignature_SignatureDefaults": "Signature par défaut",
"SettingsSignature_Signatures": "Signatures", "SettingsSignature_Signatures": "Signatures",
"SettingsSignature_AddCustomSignature_Title": "Add custom signature", "SettingsSignature_AddCustomSignature_Title": "Ajouter une signature personnalisée",
"SettingsSignature_AddCustomSignature_Button": "Add signature", "SettingsSignature_AddCustomSignature_Button": "Ajouter une signature",
"SettingsSignature_EditSignature_Title": "Edit signature", "SettingsSignature_EditSignature_Title": "Modifier la signature",
"SettingsSignature_DeleteSignature_Title": "Delete signature", "SettingsSignature_DeleteSignature_Title": "Supprimer la signature",
"SettingsSignature_NoneSignatureName": "None", "SettingsSignature_NoneSignatureName": "Aucun",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray", "SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Réduire dans la barre d'état système",
"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_MinimizeTray_Description": "Wino Mail fonctionne en permanence dans la barre d'état système. Il est possible de le lancer en cliquant sur une icône. Vous serez informé de l'arrivée de nouveaux messages.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Exécuter en arrière-plan",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail continuera à fonctionner en arrière-plan. Vous serez informé de l'arrivée de nouveaux courriers.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminer",
"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.", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail ne fonctionnera nulle part. Vous ne serez pas notifié de l'arrivée de nouveaux courriers. Lancez à nouveau Wino Mail pour continuer la synchronisation des courriers.",
"TitleBarServerDisconnectedButton_Title": "no connection", "TitleBarServerDisconnectedButton_Title": "pas de connexion",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.", "TitleBarServerDisconnectedButton_Description": "Wino est déconnecté du réseau. Cliquez sur reconnecter pour rétablir la connexion.",
"TitleBarServerReconnectButton_Title": "reconnect", "TitleBarServerReconnectButton_Title": "reconnecter",
"TitleBarServerReconnectingButton_Title": "connecting" "TitleBarServerReconnectingButton_Title": "connexion en cours"
} }

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "iniciando", "AccountCreationDialog_Initializing": "iniciando",
"AccountCreationDialog_PreparingFolders": "Neste intre estamos a obter información dos cartafois.", "AccountCreationDialog_PreparingFolders": "Neste intre estamos a obter información dos cartafois.",
"AccountCreationDialog_SigninIn": "A información da conta estase a gardar.", "AccountCreationDialog_SigninIn": "A información da conta estase a gardar.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Nome da conta", "AccountEditDialog_Message": "Nome da conta",
"AccountEditDialog_Title": "Editar conta", "AccountEditDialog_Title": "Editar conta",
"AccountPickerDialog_Title": "Escolla unha conta", "AccountPickerDialog_Title": "Escolla unha conta",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "p.ex. Manuel Rivas", "AccountSettingsDialog_AccountNamePlaceholder": "p.ex. Manuel Rivas",
"AddHyperlink": "Engadir", "AddHyperlink": "Engadir",
"AutoDiscoveryProgressMessage": "Estase a buscar a configuración do correo...", "AutoDiscoveryProgressMessage": "Estase a buscar a configuración do correo...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Opcións avanzadas", "BasicIMAPSetupDialog_AdvancedConfiguration": "Opcións avanzadas",
"BasicIMAPSetupDialog_CredentialLocalMessage": "As túas credencias so se gardarán localmente no teu ordenador.", "BasicIMAPSetupDialog_CredentialLocalMessage": "As túas credencias so se gardarán localmente no teu ordenador.",
"BasicIMAPSetupDialog_Description": "Algunhas contas precisan pasos adicionais para iniciar sesión", "BasicIMAPSetupDialog_Description": "Algunhas contas precisan pasos adicionais para iniciar sesión",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Contrasinal", "BasicIMAPSetupDialog_Password": "Contrasinal",
"BasicIMAPSetupDialog_Title": "Conta IMAP", "BasicIMAPSetupDialog_Title": "Conta IMAP",
"Buttons_AddAccount": "Engadir conta", "Buttons_AddAccount": "Engadir conta",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Aplicar tema", "Buttons_ApplyTheme": "Aplicar tema",
"Buttons_Browse": "Procurar", "Buttons_Browse": "Procurar",
"Buttons_Cancel": "Anular", "Buttons_Cancel": "Anular",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Iniciar sesión", "Buttons_SignIn": "Iniciar sesión",
"Buttons_TryAgain": "Téntao de novo", "Buttons_TryAgain": "Téntao de novo",
"Buttons_Yes": "Si", "Buttons_Yes": "Si",
"Buttons_Reset": "Reset",
"Center": "Centrar", "Center": "Centrar",
"ComingSoon": "Proximamente...", "ComingSoon": "Proximamente...",
"ComposerFrom": "De: ", "ComposerFrom": "De: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Escoller un fondo personalizado", "CustomThemeBuilder_WallpaperTitle": "Escoller un fondo personalizado",
"DialogMessage_AccountLimitMessage": "Chegou ó límite de contas. Para seguir, queres mercar a función de contas ilimitadas?", "DialogMessage_AccountLimitMessage": "Chegou ó límite de contas. Para seguir, queres mercar a función de contas ilimitadas?",
"DialogMessage_AccountLimitTitle": "Chegou ó límite de contas", "DialogMessage_AccountLimitTitle": "Chegou ó límite de contas",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Queres borrar todos os correos desta carpeta permanentemente?", "DialogMessage_CleanupFolderMessage": "Queres borrar todos os correos desta carpeta permanentemente?",
"DialogMessage_CleanupFolderTitle": "Carpeta de limpeza", "DialogMessage_CleanupFolderTitle": "Carpeta de limpeza",
"DialogMessage_ComposerMissingRecipientMessage": "A mensaxe non ten destinatario.", "DialogMessage_ComposerMissingRecipientMessage": "A mensaxe non ten destinatario.",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Para deixar de obter mensaxes de {0}, vai ao seu sitio web para desubscribirte.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Para deixar de obter mensaxes de {0}, vai ao seu sitio web para desubscribirte.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Ir á páxina web", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Ir á páxina web",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Queres deixar de recibir mensaxes de {0}? Wino desusbscribirate enviando un correo dende a túa conta a {1}.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "Queres deixar de recibir mensaxes de {0}? Wino desusbscribirate enviando un correo dende a túa conta a {1}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Non preguntar de novo", "Dialog_DontAskAgain": "Non preguntar de novo",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"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.", "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", "DiscordChannelDisclaimerTitle": "Información importante de Discord",
"Draft": "Borrador", "Draft": "Borrador",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Debuxar", "EditorToolbarOption_Draw": "Debuxar",
"EditorToolbarOption_Format": "Formato", "EditorToolbarOption_Format": "Formato",
"EditorToolbarOption_Insert": "Inserir", "EditorToolbarOption_Insert": "Inserir",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Modo claro", "ElementTheme_Light": "Modo claro",
"Emoji": "Emoticonas", "Emoji": "Emoticonas",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Non se puido encontrar os axustes da bandexa de correo.", "Exception_ImapAutoDiscoveryFailed": "Non se puido encontrar os axustes da bandexa de correo.",
"Exception_ImapClientPoolFailed": "Fallou a colección de conexións IMAP.", "Exception_ImapClientPoolFailed": "Fallou a colección de conexións IMAP.",
"Exception_AuthenticationCanceled": "Cancelouse a autenticación", "Exception_AuthenticationCanceled": "Cancelouse a autenticación",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "Debes proporcionar un nome.", "Exception_CustomThemeMissingName": "Debes proporcionar un nome.",
"Exception_CustomThemeMissingWallpaper": "Debes proporcionar unha imaxe de fondo personalizada.", "Exception_CustomThemeMissingWallpaper": "Debes proporcionar unha imaxe de fondo personalizada.",
"Exception_FailedToSynchronizeFolders": "Produciuse un erro ao sincronizar as carpetas", "Exception_FailedToSynchronizeFolders": "Produciuse un erro ao sincronizar as carpetas",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "A uri de retrochamada é nula na activación.", "Exception_GoogleAuthCallbackNull": "A uri de retrochamada é nula na activación.",
"Exception_GoogleAuthCorruptedCode": "A resposta da autenticación corrompiuse.", "Exception_GoogleAuthCorruptedCode": "A resposta da autenticación corrompiuse.",
"Exception_GoogleAuthError": "Error de autorización OAuth: {0}", "Exception_GoogleAuthError": "Error de autorización OAuth: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.", "Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.",
"Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.", "Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.",
"Info_UnsubscribeErrorMessage": "Failed to unsubscribe", "Info_UnsubscribeErrorMessage": "Failed to unsubscribe",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method", "ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security", "ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security",
"ImapAuthenticationMethod_Auto": "Auto", "ImapAuthenticationMethod_Auto": "Auto",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Folder Synchronization", "SettingsFolderSync_Title": "Folder Synchronization",
"SettingsFolderOptions_Title": "Folder Configuration", "SettingsFolderOptions_Title": "Folder Configuration",
"SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.", "SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Center Action", "SettingsHoverActionCenter": "Center Action",
"SettingsHoverActionLeft": "Left Action", "SettingsHoverActionLeft": "Left Action",
"SettingsHoverActionRight": "Right Action", "SettingsHoverActionRight": "Right Action",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Language & Time", "SettingsLanguageTime_Title": "Language & Time",
"SettingsLanguageTime_Description": "Wino display language, preferred time format.", "SettingsLanguageTime_Description": "Wino display language, preferred time format.",
"CategoriesFolderNameOverride": "Categories", "CategoriesFolderNameOverride": "Categories",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "More", "MoreFolderNameOverride": "More",
"SettingsOptions_Title": "Settings", "SettingsOptions_Title": "Settings",
"SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.", "SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.", "SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.",
"SettingsNotifications_Description": "Turn on or off notifications for this account.", "SettingsNotifications_Description": "Turn on or off notifications for this account.",
"SettingsNotifications_Title": "Notifications", "SettingsNotifications_Title": "Notifications",
"SettingsPaneLength_Description": "Change the width of the mail list.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Mail List Pane Length", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.", "SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.",
"SettingsPaypal_Title": "Donate via PayPal", "SettingsPaypal_Title": "Donate via PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Compact Mode", "SettingsPersonalizationMailDisplayCompactMode": "Compact Mode",

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "memulai", "AccountCreationDialog_Initializing": "memulai",
"AccountCreationDialog_PreparingFolders": "Kami sedang mendapatkan informasi folder.", "AccountCreationDialog_PreparingFolders": "Kami sedang mendapatkan informasi folder.",
"AccountCreationDialog_SigninIn": "Informasi akun sedang disimpan.", "AccountCreationDialog_SigninIn": "Informasi akun sedang disimpan.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Nama Akun", "AccountEditDialog_Message": "Nama Akun",
"AccountEditDialog_Title": "Sunting Akun", "AccountEditDialog_Title": "Sunting Akun",
"AccountPickerDialog_Title": "Pilih akun", "AccountPickerDialog_Title": "Pilih akun",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "misal: Budi Susilo", "AccountSettingsDialog_AccountNamePlaceholder": "misal: Budi Susilo",
"AddHyperlink": "Tambahkan", "AddHyperlink": "Tambahkan",
"AutoDiscoveryProgressMessage": "Mencari pengaturan surel...", "AutoDiscoveryProgressMessage": "Mencari pengaturan surel...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Pengaturan Lanjutan", "BasicIMAPSetupDialog_AdvancedConfiguration": "Pengaturan Lanjutan",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Informasi masuk akun Anda akan disimpan hanya di perangkat.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Informasi masuk akun Anda akan disimpan hanya di perangkat.",
"BasicIMAPSetupDialog_Description": "Beberapa akun membutuhkan tahapan tambahan untuk masuk", "BasicIMAPSetupDialog_Description": "Beberapa akun membutuhkan tahapan tambahan untuk masuk",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Kata Sandi", "BasicIMAPSetupDialog_Password": "Kata Sandi",
"BasicIMAPSetupDialog_Title": "Akun IMAP", "BasicIMAPSetupDialog_Title": "Akun IMAP",
"Buttons_AddAccount": "Tambahkan Akun", "Buttons_AddAccount": "Tambahkan Akun",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Terapkan Tema", "Buttons_ApplyTheme": "Terapkan Tema",
"Buttons_Browse": "Telusuri", "Buttons_Browse": "Telusuri",
"Buttons_Cancel": "Batal", "Buttons_Cancel": "Batal",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Masuk", "Buttons_SignIn": "Masuk",
"Buttons_TryAgain": "Coba Lagi", "Buttons_TryAgain": "Coba Lagi",
"Buttons_Yes": "Ya", "Buttons_Yes": "Ya",
"Buttons_Reset": "Reset",
"Center": "Tengah", "Center": "Tengah",
"ComingSoon": "Segera datang...", "ComingSoon": "Segera datang...",
"ComposerFrom": "Dari: ", "ComposerFrom": "Dari: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Atur latar belakang khusus", "CustomThemeBuilder_WallpaperTitle": "Atur latar belakang khusus",
"DialogMessage_AccountLimitMessage": "Anda telah mencapai batas akun.\nApakah Anda ingin membeli tambahan 'Akun Tidak Terbatas' untuk melanjutkan?", "DialogMessage_AccountLimitMessage": "Anda telah mencapai batas akun.\nApakah Anda ingin membeli tambahan 'Akun Tidak Terbatas' untuk melanjutkan?",
"DialogMessage_AccountLimitTitle": "Batas Akun Tercapai", "DialogMessage_AccountLimitTitle": "Batas Akun Tercapai",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Apakah Anda ingin menghapus semua surel di folder ini?", "DialogMessage_CleanupFolderMessage": "Apakah Anda ingin menghapus semua surel di folder ini?",
"DialogMessage_CleanupFolderTitle": "Bersihkan Folder", "DialogMessage_CleanupFolderTitle": "Bersihkan Folder",
"DialogMessage_ComposerMissingRecipientMessage": "Pesan tidak memiliki penerima.", "DialogMessage_ComposerMissingRecipientMessage": "Pesan tidak memiliki penerima.",
@@ -82,7 +103,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Ubah Nama Akun Tertaut", "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_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_UnlinkAccountsConfirmationTitle": "Lepas Tautan Akun",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject", "DialogMessage_EmptySubjectConfirmation": "Tidak Ada Perihal",
"DialogMessage_EmptySubjectConfirmationMessage": "Pesan tidak memiliki perihal. Apakah Anda ingin melanjutkan?", "DialogMessage_EmptySubjectConfirmationMessage": "Pesan tidak memiliki perihal. Apakah Anda ingin melanjutkan?",
"DialogMessage_RenameFolderTitle": "Ubah nama folder", "DialogMessage_RenameFolderTitle": "Ubah nama folder",
"DialogMessage_RenameFolderMessage": "Masukkan nama baru untuk folder ini", "DialogMessage_RenameFolderMessage": "Masukkan nama baru untuk folder ini",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Untuk berhenti mendapatkan pesan dari {0}, Anda harus mengunjungi situs mereka untuk berhenti berlangganan.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Untuk berhenti mendapatkan pesan dari {0}, Anda harus mengunjungi situs mereka untuk berhenti berlangganan.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Buka situs web", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Buka situs web",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Apakah Anda ingin berhenti mendapatkan pesan dari {0}? Wino akan mengirimkan surel dari akun Anda ke {1} untuk berhenti berlangganan.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "Apakah Anda ingin berhenti mendapatkan pesan dari {0}? Wino akan mengirimkan surel dari akun Anda ke {1} untuk berhenti berlangganan.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Jangan tanyakan lagi", "Dialog_DontAskAgain": "Jangan tanyakan lagi",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Wino tidak memiliki server Discord sendiri, tapi ada saluran 'wino-mail' di server 'Developer Sanctuary'.\nUntuk mendapatkan pembaruan tentang Wino, harap bergabung dengan server Developer Sanctuary dan ikuti saluran 'wino-mail' di bawah 'Community Projects\".\n\nAnda akan diarahkan ke alamat server karena Discord tidak mendukung undangan saluran.", "DiscordChannelDisclaimerMessage": "Wino tidak memiliki server Discord sendiri, tapi ada saluran 'wino-mail' di server 'Developer Sanctuary'.\nUntuk mendapatkan pembaruan tentang Wino, harap bergabung dengan server Developer Sanctuary dan ikuti saluran 'wino-mail' di bawah 'Community Projects\".\n\nAnda akan diarahkan ke alamat server karena Discord tidak mendukung undangan saluran.",
"DiscordChannelDisclaimerTitle": "Informasi tentang Discord", "DiscordChannelDisclaimerTitle": "Informasi tentang Discord",
"Draft": "Konsep", "Draft": "Konsep",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Gambar", "EditorToolbarOption_Draw": "Gambar",
"EditorToolbarOption_Format": "Format", "EditorToolbarOption_Format": "Format",
"EditorToolbarOption_Insert": "Sisipkan", "EditorToolbarOption_Insert": "Sisipkan",
@@ -105,7 +136,8 @@
"ElementTheme_Default": "Gunakan pengaturan sistem", "ElementTheme_Default": "Gunakan pengaturan sistem",
"ElementTheme_Light": "Mode terang", "ElementTheme_Light": "Mode terang",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Server Wino gagal.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Tidak dapat menemukan pengaturan kotak masuk.", "Exception_ImapAutoDiscoveryFailed": "Tidak dapat menemukan pengaturan kotak masuk.",
"Exception_ImapClientPoolFailed": "Gagal IMAP Client Pool.", "Exception_ImapClientPoolFailed": "Gagal IMAP Client Pool.",
"Exception_AuthenticationCanceled": "Otentikasi dibatalkan", "Exception_AuthenticationCanceled": "Otentikasi dibatalkan",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "Anda harus memberikan nama.", "Exception_CustomThemeMissingName": "Anda harus memberikan nama.",
"Exception_CustomThemeMissingWallpaper": "Anda harus memberikan gambar latar Anda sendiri.", "Exception_CustomThemeMissingWallpaper": "Anda harus memberikan gambar latar Anda sendiri.",
"Exception_FailedToSynchronizeFolders": "Gagal menyelaraskan folder", "Exception_FailedToSynchronizeFolders": "Gagal menyelaraskan folder",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Alamat panggilan menghasilkan balasan kosong.", "Exception_GoogleAuthCallbackNull": "Alamat panggilan menghasilkan balasan kosong.",
"Exception_GoogleAuthCorruptedCode": "Balasan otorisasi rusak.", "Exception_GoogleAuthCorruptedCode": "Balasan otorisasi rusak.",
"Exception_GoogleAuthError": "Galat otorisasi OAuth: {0}", "Exception_GoogleAuthError": "Galat otorisasi OAuth: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "Tautan untuk berhenti berlangganan ini tidak valid. Gagal berhenti langganan dari daftar.", "Info_UnsubscribeLinkInvalidMessage": "Tautan untuk berhenti berlangganan ini tidak valid. Gagal berhenti langganan dari daftar.",
"Info_UnsubscribeSuccessMessage": "Berhasil berhenti berlangganan dari {0}.", "Info_UnsubscribeSuccessMessage": "Berhasil berhenti berlangganan dari {0}.",
"Info_UnsubscribeErrorMessage": "Gagal berhenti berlangganan", "Info_UnsubscribeErrorMessage": "Gagal berhenti berlangganan",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Metode otentikasi", "ImapAdvancedSetupDialog_AuthenticationMethod": "Metode otentikasi",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Keamanan sambungan", "ImapAdvancedSetupDialog_ConnectionSecurity": "Keamanan sambungan",
"ImapAuthenticationMethod_Auto": "Otomatis", "ImapAuthenticationMethod_Auto": "Otomatis",
@@ -336,7 +373,7 @@
"ProtocolLogAvailable_Message": "Catatan log protokol kini tersedia untuk pengawakutuan.", "ProtocolLogAvailable_Message": "Catatan log protokol kini tersedia untuk pengawakutuan.",
"Results": "Hasil", "Results": "Hasil",
"Right": "Kanan", "Right": "Kanan",
"Reader_SaveAllAttachmentButtonText": "Save all attachments", "Reader_SaveAllAttachmentButtonText": "Simpan semua lampiran",
"SynchronizationFolderReport_Success": "terbaru", "SynchronizationFolderReport_Success": "terbaru",
"SynchronizationFolderReport_Failed": "penyelarasan gagal", "SynchronizationFolderReport_Failed": "penyelarasan gagal",
"SearchBarPlaceholder": "Cari", "SearchBarPlaceholder": "Cari",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Penyelarasan Folder", "SettingsFolderSync_Title": "Penyelarasan Folder",
"SettingsFolderOptions_Title": "Pengaturan Folder", "SettingsFolderOptions_Title": "Pengaturan Folder",
"SettingsFolderOptions_Description": "Ubah pengaturan folder tertentu seperti nyalakan/matikan penyelarasan atau tampilkan/sembunyikan lambang belum dibaca.", "SettingsFolderOptions_Description": "Ubah pengaturan folder tertentu seperti nyalakan/matikan penyelarasan atau tampilkan/sembunyikan lambang belum dibaca.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Tindakan Tengah", "SettingsHoverActionCenter": "Tindakan Tengah",
"SettingsHoverActionLeft": "Tindakan Kiri", "SettingsHoverActionLeft": "Tindakan Kiri",
"SettingsHoverActionRight": "Tindakan Kanan", "SettingsHoverActionRight": "Tindakan Kanan",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Bahasa & Waktu", "SettingsLanguageTime_Title": "Bahasa & Waktu",
"SettingsLanguageTime_Description": "Bahasa tampilan Wino, format waktu.", "SettingsLanguageTime_Description": "Bahasa tampilan Wino, format waktu.",
"CategoriesFolderNameOverride": "Kategori", "CategoriesFolderNameOverride": "Kategori",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "Lebih lanjut", "MoreFolderNameOverride": "Lebih lanjut",
"SettingsOptions_Title": "Pengaturan", "SettingsOptions_Title": "Pengaturan",
"SettingsLinkAccounts_Description": "Gabungkan beberapa akun. Lihat pesan baru di satu Kotak Masuk.", "SettingsLinkAccounts_Description": "Gabungkan beberapa akun. Lihat pesan baru di satu Kotak Masuk.",
@@ -420,19 +464,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.", "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_Description": "Pemberitahuan, tanda tangan, penyelarasan, dan pengaturan lain per akun.",
"SettingsManageAccountSettings_Title": "Kelole Pengaturan Akun", "SettingsManageAccountSettings_Title": "Kelole Pengaturan Akun",
"SettingsAppPreferences_Title": "App Preferences", "SettingsAppPreferences_Title": "Pengaturan Aplikasi",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.", "SettingsAppPreferences_Description": "Pengaturan umum untuk Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior", "SettingsAppPreferences_CloseBehavior_Title": "Perilaku saat menutup aplikasi",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?", "SettingsAppPreferences_CloseBehavior_Description": "Apa yang harus terjadi ketika Anda menutup aplikasi?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup", "SettingsAppPreferences_StartupBehavior_Title": "Mulai dan minimalkan saat menyalakan Windows",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.", "SettingsAppPreferences_StartupBehavior_Description": "Izinkan Wino Mail untuk berjalan dan diminimalkan saat Windows menyala. Selalu izinkan untuk menerima pemberitahuan.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.", "SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail berhasil diatur untuk dijalankan di latar belakang saat Windows menyala.",
"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_Disabled": "Wino Mail tidak akan dijalankan saat Windows menyala. Ini dapat membuat Anda melewatkan pemberitahuan saat komputer dimulai ulang.",
"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_DisabledByPolicy": "Administrator atau setelan grup tidak mengizinkan menjalankan aplikasi saat menyala. Wino Mail gagal diatur untuk berjalan saat Windows menyala.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.", "SettingsAppPreferences_StartupBehavior_DisabledByUser": "Izinkan Wino Mail untuk berjalan saat Windows menyala di Manajer Tugas > tab Aplikasi Pengaktifan.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.", "SettingsAppPreferences_StartupBehavior_FatalError": "Galat kritis terjadi saat mengubah modus mulai untuk Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable", "SettingsAppPreferences_StartupBehavior_Enable": "Nyalakan",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable", "SettingsAppPreferences_StartupBehavior_Disable": "Matikan",
"SettingsReorderAccounts_Title": "Urutkan Ulang Akun", "SettingsReorderAccounts_Title": "Urutkan Ulang Akun",
"SettingsReorderAccounts_Description": "Ubah urutan akun di daftar akun.", "SettingsReorderAccounts_Description": "Ubah urutan akun di daftar akun.",
"SettingsManageLink_Description": "Pindahkan item untuk menambahkan tautan baru atau hapus tautan yang sudah ada.", "SettingsManageLink_Description": "Pindahkan item untuk menambahkan tautan baru atau hapus tautan yang sudah ada.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "Anda belum menyiapkan akun.", "SettingsNoAccountSetupMessage": "Anda belum menyiapkan akun.",
"SettingsNotifications_Description": "Nyalakan atau matikan pemberitahuan untuk akun ini.", "SettingsNotifications_Description": "Nyalakan atau matikan pemberitahuan untuk akun ini.",
"SettingsNotifications_Title": "Pemberitahuan", "SettingsNotifications_Title": "Pemberitahuan",
"SettingsPaneLength_Description": "Ubah lebar daftar email.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Panjang Panel Daftar Surel", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Berikan lebih banyak cinta ❤️ Semua sumbangan sangat kami hargai.", "SettingsPaypal_Description": "Berikan lebih banyak cinta ❤️ Semua sumbangan sangat kami hargai.",
"SettingsPaypal_Title": "Sumbangkan melalui PayPal", "SettingsPaypal_Title": "Sumbangkan melalui PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Mode Ringkas", "SettingsPersonalizationMailDisplayCompactMode": "Mode Ringkas",
@@ -459,10 +503,10 @@
"SettingsPersonalization_Title": "Ubahsuaian", "SettingsPersonalization_Title": "Ubahsuaian",
"SettingsPrivacyPolicy_Description": "Tinjau kebijakan privasi.", "SettingsPrivacyPolicy_Description": "Tinjau kebijakan privasi.",
"SettingsPrivacyPolicy_Title": "Kebijakan Privasi", "SettingsPrivacyPolicy_Title": "Kebijakan Privasi",
"SettingsReader_Title": "Reader", "SettingsReader_Title": "Pembaca",
"SettingsComposer_Title": "Composer", "SettingsComposer_Title": "Bidang penulisan",
"SettingsReadComposePane_Description": "Fonts, external content.", "SettingsReadComposePane_Description": "Fon, konten eksternal.",
"SettingsReadComposePane_Title": "Reader & Composer", "SettingsReadComposePane_Title": "Pembaca dan Bidang Penulisan",
"SettingsReaderFont_Title": "Fon Pembaca Bawaan", "SettingsReaderFont_Title": "Fon Pembaca Bawaan",
"SettingsReaderFontFamily_Description": "Ubah fon bawaan dan ukuran fon saat membaca surel.", "SettingsReaderFontFamily_Description": "Ubah fon bawaan dan ukuran fon saat membaca surel.",
"SettingsFontFamily_Title": "Jenis Fon", "SettingsFontFamily_Title": "Jenis Fon",
@@ -539,14 +583,14 @@
"SettingsSignature_EditSignature_Title": "Sunting tanda tangan", "SettingsSignature_EditSignature_Title": "Sunting tanda tangan",
"SettingsSignature_DeleteSignature_Title": "Hapus 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_Title": "Minimalkan ke baki sistem",
"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_MinimizeTray_Description": "Wino Mail akan tetap berjalan di baki sistem. Anda dapat membuka Wino Mail dengan mengeklik ikon. Pemberitahuan surel baru akan tetap berfungsi.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Jalankan di latar belakang",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail akan tetap berjalan di latar belakang. Pemberitahuan surel baru akan tetap berfungsi.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Akhiri",
"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.", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail tidak akan berjalan saat ditutup. Pemberitahuan surel baru tidak akan berfungsi. Jalankan Wino Mail lagi untuk melanjutkan penyelarasan.",
"TitleBarServerDisconnectedButton_Title": "no connection", "TitleBarServerDisconnectedButton_Title": "tiada sambungan",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.", "TitleBarServerDisconnectedButton_Description": "Wino tidak tersambung ke jaringan. Klik sambungkan kembali untuk mencoba melanjutkan sambungan.",
"TitleBarServerReconnectButton_Title": "reconnect", "TitleBarServerReconnectButton_Title": "sambungkan kembali",
"TitleBarServerReconnectingButton_Title": "connecting" "TitleBarServerReconnectingButton_Title": "menyambungkan"
} }

View File

@@ -1,15 +1,23 @@
{ {
"AccountCreationDialog_Completed": "tutto fatto", "AccountCreationDialog_Completed": "fatto tutto",
"AccountCreationDialog_Initializing": "inizializzazione", "AccountCreationDialog_Initializing": "inizializzazione",
"AccountCreationDialog_PreparingFolders": "Stiamo ricevendo informazioni sulle cartelle al momento.", "AccountCreationDialog_PreparingFolders": "Stiamo ricevendo informazioni sulle cartelle al momento.",
"AccountCreationDialog_SigninIn": "Le informazioni dell'account sono in fase di salvataggio.", "AccountCreationDialog_SigninIn": "Le informazioni dell'account sono in fase di salvataggio.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Nome account", "AccountEditDialog_Message": "Nome account",
"AccountEditDialog_Title": "Modifica account", "AccountEditDialog_Title": "Modifica account",
"AccountPickerDialog_Title": "Scegli un account", "AccountPickerDialog_Title": "Scegli un account",
"AccountSettingsDialog_AccountName": "Sender Display Name", "AccountSettingsDialog_AccountName": "Nome visualizzato mittente",
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "es. Mario Rossi",
"AddHyperlink": "Aggiungi", "AddHyperlink": "Aggiungi",
"AutoDiscoveryProgressMessage": "Ricerca delle impostazioni della posta...", "AutoDiscoveryProgressMessage": "Ricerca delle impostazioni della posta...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Configurazione avanzata", "BasicIMAPSetupDialog_AdvancedConfiguration": "Configurazione avanzata",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Le tue credenziali verranno memorizzate solo localmente sul tuo computer.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Le tue credenziali verranno memorizzate solo localmente sul tuo computer.",
"BasicIMAPSetupDialog_Description": "Alcuni account richiedono passaggi aggiuntivi per accedere", "BasicIMAPSetupDialog_Description": "Alcuni account richiedono passaggi aggiuntivi per accedere",
@@ -21,15 +29,17 @@
"BasicIMAPSetupDialog_Password": "Password", "BasicIMAPSetupDialog_Password": "Password",
"BasicIMAPSetupDialog_Title": "Account IMAP", "BasicIMAPSetupDialog_Title": "Account IMAP",
"Buttons_AddAccount": "Aggiungi account", "Buttons_AddAccount": "Aggiungi account",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Applica Tema", "Buttons_ApplyTheme": "Applica Tema",
"Buttons_Browse": "Sfoglia", "Buttons_Browse": "Sfoglia",
"Buttons_Cancel": "Annulla", "Buttons_Cancel": "Annulla",
"Buttons_Close": "Chiudi", "Buttons_Close": "Chiudi",
"Buttons_Create": "Crea", "Buttons_Create": "Crea",
"Buttons_CreateAccount": "Crea account", "Buttons_CreateAccount": "Crea account",
"Buttons_Copy": "Copy", "Buttons_Copy": "Copia",
"Buttons_Delete": "Elimina", "Buttons_Delete": "Elimina",
"Buttons_Edit": "Edit", "Buttons_Edit": "Modifica",
"Buttons_Discard": "Scarta", "Buttons_Discard": "Scarta",
"Buttons_EnableImageRendering": "Attiva", "Buttons_EnableImageRendering": "Attiva",
"Buttons_No": "No", "Buttons_No": "No",
@@ -40,8 +50,9 @@
"Buttons_SaveConfiguration": "Salva configurazione", "Buttons_SaveConfiguration": "Salva configurazione",
"Buttons_Share": "Condividi", "Buttons_Share": "Condividi",
"Buttons_SignIn": "Accedi", "Buttons_SignIn": "Accedi",
"Buttons_TryAgain": "Try Again", "Buttons_TryAgain": "Riprova",
"Buttons_Yes": "Sì", "Buttons_Yes": "Sì",
"Buttons_Reset": "Reset",
"Center": "Centra", "Center": "Centra",
"ComingSoon": "Prossimamente...", "ComingSoon": "Prossimamente...",
"ComposerFrom": "Da: ", "ComposerFrom": "Da: ",
@@ -52,9 +63,9 @@
"ClipboardTextCopyFailed_Message": "Impossibile copiare {0} negli appunti.", "ClipboardTextCopyFailed_Message": "Impossibile copiare {0} negli appunti.",
"ComposerToPlaceholder": "clicca Invio per inserire gli indirizzi", "ComposerToPlaceholder": "clicca Invio per inserire gli indirizzi",
"ComposerAttachmentsDropZone_Message": "Trascina qui i tuoi file", "ComposerAttachmentsDropZone_Message": "Trascina qui i tuoi file",
"ComposerImagesDropZone_Message": "Drop your images here", "ComposerImagesDropZone_Message": "Trascina qui le tue immagini",
"ComposerAttachmentsDragDropAttach_Message": "Allega", "ComposerAttachmentsDragDropAttach_Message": "Allega",
"CustomThemeBuilder_AccentColorDescription": "Imposta un colore principale personalizzato, se vuoi. Non selezionare un colore userà il colore principale di Windows.", "CustomThemeBuilder_AccentColorDescription": "Imposta un colore principale personalizzato, se vuoi. Se non si selezionerà un colore verrà usato il colore principale di Windows.",
"CustomThemeBuilder_AccentColorTitle": "Colore principale", "CustomThemeBuilder_AccentColorTitle": "Colore principale",
"CustomThemeBuilder_PickColor": "Scegli", "CustomThemeBuilder_PickColor": "Scegli",
"CustomThemeBuilder_ThemeNameDescription": "Nome unico del tuo tema personalizzato.", "CustomThemeBuilder_ThemeNameDescription": "Nome unico del tuo tema personalizzato.",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Imposta uno sfondo personalizzato", "CustomThemeBuilder_WallpaperTitle": "Imposta uno sfondo personalizzato",
"DialogMessage_AccountLimitMessage": "Hai raggiunto il limite di creazione degli account.\nVuoi acquistare il componente aggiuntivo 'Account Illimitati' per continuare?", "DialogMessage_AccountLimitMessage": "Hai raggiunto il limite di creazione degli account.\nVuoi acquistare il componente aggiuntivo 'Account Illimitati' per continuare?",
"DialogMessage_AccountLimitTitle": "Raggiunto il limite degli account", "DialogMessage_AccountLimitTitle": "Raggiunto il limite degli account",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Vuoi eliminare definitivamente tutti i messaggi in questa cartella?", "DialogMessage_CleanupFolderMessage": "Vuoi eliminare definitivamente tutti i messaggi in questa cartella?",
"DialogMessage_CleanupFolderTitle": "Pulisci Cartella", "DialogMessage_CleanupFolderTitle": "Pulisci Cartella",
"DialogMessage_ComposerMissingRecipientMessage": "Il messaggio non ha alcun destinatario.", "DialogMessage_ComposerMissingRecipientMessage": "Il messaggio non ha alcun destinatario.",
@@ -82,37 +103,51 @@
"DialogMessage_RenameLinkedAccountsTitle": "Rinomina l'account collegato", "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_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_UnlinkAccountsConfirmationTitle": "Scollega account",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject", "DialogMessage_EmptySubjectConfirmation": "Oggetto mancante",
"DialogMessage_EmptySubjectConfirmationMessage": "Il messaggio non ha oggetto. Vuoi continuare?", "DialogMessage_EmptySubjectConfirmationMessage": "Il messaggio non ha oggetto. Vuoi continuare?",
"DialogMessage_RenameFolderTitle": "Rename Folder", "DialogMessage_RenameFolderTitle": "Rinomina cartella",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder", "DialogMessage_RenameFolderMessage": "Inserisci un nuovo nome per questa cartella",
"DialogMessage_UnsubscribeConfirmationTitle": "Disiscriviti", "DialogMessage_UnsubscribeConfirmationTitle": "Disiscriviti",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "Vuoi smettere di ricevere messaggi da {0}?", "DialogMessage_UnsubscribeConfirmationOneClickMessage": "Vuoi smettere di ricevere messaggi da {0}?",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Per smettere di ricevere messaggi da {0}, vai sul loro sito web per annullare l'iscrizione.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Per smettere di ricevere messaggi da {0}, vai sul loro sito web per annullare l'iscrizione.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Vai al sito", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Vai al sito",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Vuoi smettere di ricevere messaggi da {0}? Wino annullerà la tua iscrizione inviando una email dal tuo account email a {1}.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "Vuoi smettere di ricevere messaggi da {0}? Wino annullerà la tua iscrizione inviando una email dal tuo account email a {1}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Non chiedermelo più", "Dialog_DontAskAgain": "Non chiedermelo più",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Wino non ha il proprio server Discord, ma il canale speciale \"wino-mail\" è ospitato presso il server \"Developer Sanctuary\".\nPer ottenere gli aggiornamenti di Wino per favore unisciti al server Developer Sanctuary e segui il canale \"wino-mail\" sotto \"Community Projects\".\n\nSarai reindirizzato all'URL del server poiché Discord non supporta gli inviti del canale.", "DiscordChannelDisclaimerMessage": "Wino non ha il proprio server Discord, ma il canale speciale \"wino-mail\" è ospitato presso il server \"Developer Sanctuary\".\nPer ottenere gli aggiornamenti di Wino per favore unisciti al server Developer Sanctuary e segui il canale \"wino-mail\" sotto \"Community Projects\".\n\nSarai reindirizzato all'URL del server poiché Discord non supporta gli inviti del canale.",
"DiscordChannelDisclaimerTitle": "Informazioni importanti su Discord", "DiscordChannelDisclaimerTitle": "Informazioni importanti su Discord",
"Draft": "Bozza", "Draft": "Bozza",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Disegna", "EditorToolbarOption_Draw": "Disegna",
"EditorToolbarOption_Format": "Formato", "EditorToolbarOption_Format": "Formato",
"EditorToolbarOption_Insert": "Inserisci", "EditorToolbarOption_Insert": "Inserisci",
"EditorToolbarOption_None": "Vuoto", "EditorToolbarOption_None": "Vuoto",
"EditorToolbarOption_Options": "Opzioni", "EditorToolbarOption_Options": "Opzioni",
"EditorTooltip_WebViewEditor": "Use web view editor", "EditorTooltip_WebViewEditor": "Usa editor di visualizzazione web",
"ElementTheme_Dark": "Tema scuro", "ElementTheme_Dark": "Tema scuro",
"ElementTheme_Default": "Usa le impostazioni di sistema", "ElementTheme_Default": "Usa le impostazioni di sistema",
"ElementTheme_Light": "Tema chiaro", "ElementTheme_Light": "Tema chiaro",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Connessione al server Wino fallita.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.", "Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Impossibile trovare le impostazioni della casella postale.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool fallito.", "Exception_ImapClientPoolFailed": "IMAP Client Pool fallito.",
"Exception_AuthenticationCanceled": "Autenticazione annullata", "Exception_AuthenticationCanceled": "Autenticazione annullata",
"Exception_CustomThemeExists": "Questo tema esiste già.", "Exception_CustomThemeExists": "Questo tema esiste già.",
"Exception_CustomThemeMissingName": "È necessario fornire un nome.", "Exception_CustomThemeMissingName": "È necessario fornire un nome.",
"Exception_CustomThemeMissingWallpaper": "È necessario fornire un'immagine di sfondo personalizzata.", "Exception_CustomThemeMissingWallpaper": "È necessario fornire un'immagine di sfondo personalizzata.",
"Exception_FailedToSynchronizeFolders": "Sincronizzazione delle cartelle non riuscita", "Exception_FailedToSynchronizeFolders": "Sincronizzazione delle cartelle non riuscita",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Il Callback uri è nullo all'attivazione.", "Exception_GoogleAuthCallbackNull": "Il Callback uri è nullo all'attivazione.",
"Exception_GoogleAuthCorruptedCode": "Risposta all'autorizzazione corrotta.", "Exception_GoogleAuthCorruptedCode": "Risposta all'autorizzazione corrotta.",
"Exception_GoogleAuthError": "Errore di autorizzazione OAuth: {0}", "Exception_GoogleAuthError": "Errore di autorizzazione OAuth: {0}",
@@ -177,8 +212,8 @@
"IMAPSetupDialog_UseSameConfig": "Usa lo stesso nome utente e la stessa password per l'invio di email", "IMAPSetupDialog_UseSameConfig": "Usa lo stesso nome utente e la stessa password per l'invio di email",
"IMAPSetupDialog_Username": "Nome utente", "IMAPSetupDialog_Username": "Nome utente",
"IMAPSetupDialog_UsernamePlaceholder": "johndoe, johndoe@fabrikam.com, domain/johndoe", "IMAPSetupDialog_UsernamePlaceholder": "johndoe, johndoe@fabrikam.com, domain/johndoe",
"IMAPSetupDialog_ConnectionFailedTitle": "Connection Failed", "IMAPSetupDialog_ConnectionFailedTitle": "Connessione non riuscita",
"IMAPSetupDialog_ConnectionFailedMessage": "IMAP connection failed.", "IMAPSetupDialog_ConnectionFailedMessage": "Connessione IMAP non riuscita.",
"ImageRenderingDisabled": "La visualizzazione dell'immagine è disabilitata per questo messaggio.", "ImageRenderingDisabled": "La visualizzazione dell'immagine è disabilitata per questo messaggio.",
"InfoBarAction_Enable": "Attiva", "InfoBarAction_Enable": "Attiva",
"InfoBarMessage_SynchronizationDisabledFolder": "Questa cartella è disattivata per la sincronizzazione.", "InfoBarMessage_SynchronizationDisabledFolder": "Questa cartella è disattivata per la sincronizzazione.",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "Questo link di annullamento dell'iscrizione non è valido. Impossibile annullare l'iscrizione alla lista.", "Info_UnsubscribeLinkInvalidMessage": "Questo link di annullamento dell'iscrizione non è valido. Impossibile annullare l'iscrizione alla lista.",
"Info_UnsubscribeSuccessMessage": "Iscrizione a {0} annullata con successo.", "Info_UnsubscribeSuccessMessage": "Iscrizione a {0} annullata con successo.",
"Info_UnsubscribeErrorMessage": "Impossibile annullare l'iscrizione", "Info_UnsubscribeErrorMessage": "Impossibile annullare l'iscrizione",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Metodo di autenticazione", "ImapAdvancedSetupDialog_AuthenticationMethod": "Metodo di autenticazione",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Sicurezza della connessione", "ImapAdvancedSetupDialog_ConnectionSecurity": "Sicurezza della connessione",
"ImapAuthenticationMethod_Auto": "Automatico", "ImapAuthenticationMethod_Auto": "Automatico",
@@ -333,10 +370,10 @@
"ProviderDetail_Gmail_Description": "Account Google", "ProviderDetail_Gmail_Description": "Account Google",
"ProviderDetail_IMAP_Description": "Server IMAP/SMTP personalizzato", "ProviderDetail_IMAP_Description": "Server IMAP/SMTP personalizzato",
"ProviderDetail_IMAP_Title": "Server IMAP", "ProviderDetail_IMAP_Title": "Server IMAP",
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.", "ProtocolLogAvailable_Message": "I registri del protocollo sono disponibili per la diagnostica.",
"Results": "Risultati", "Results": "Risultati",
"Right": "Destra", "Right": "Destra",
"Reader_SaveAllAttachmentButtonText": "Save all attachments", "Reader_SaveAllAttachmentButtonText": "Salva tutti gli allegati",
"SynchronizationFolderReport_Success": "aggiornato", "SynchronizationFolderReport_Success": "aggiornato",
"SynchronizationFolderReport_Failed": "sincronizzazione fallita", "SynchronizationFolderReport_Failed": "sincronizzazione fallita",
"SearchBarPlaceholder": "Cerca", "SearchBarPlaceholder": "Cerca",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Sincronizzazione della Cartella", "SettingsFolderSync_Title": "Sincronizzazione della Cartella",
"SettingsFolderOptions_Title": "Configurazione della Cartella", "SettingsFolderOptions_Title": "Configurazione della Cartella",
"SettingsFolderOptions_Description": "Cambia le impostazioni delle singole cartelle come attivare/disattivare la sincronizzazione o mostrare/nascondere l'indicatore non letto.", "SettingsFolderOptions_Description": "Cambia le impostazioni delle singole cartelle come attivare/disattivare la sincronizzazione o mostrare/nascondere l'indicatore non letto.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Azione Centrale", "SettingsHoverActionCenter": "Azione Centrale",
"SettingsHoverActionLeft": "Azione di Sinistra", "SettingsHoverActionLeft": "Azione di Sinistra",
"SettingsHoverActionRight": "Azione di Destra", "SettingsHoverActionRight": "Azione di Destra",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Lingua e Ora", "SettingsLanguageTime_Title": "Lingua e Ora",
"SettingsLanguageTime_Description": "Lingua di visualizzazione di Wino, formato orario preferito.", "SettingsLanguageTime_Description": "Lingua di visualizzazione di Wino, formato orario preferito.",
"CategoriesFolderNameOverride": "Categorie", "CategoriesFolderNameOverride": "Categorie",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "Di più", "MoreFolderNameOverride": "Di più",
"SettingsOptions_Title": "Impostazioni", "SettingsOptions_Title": "Impostazioni",
"SettingsLinkAccounts_Description": "Unisci più account in uno. Vedi i messaggi da una Posta in arrivo comune.", "SettingsLinkAccounts_Description": "Unisci più account in uno. Vedi i messaggi da una Posta in arrivo comune.",
@@ -420,21 +464,21 @@
"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", "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_Description": "Notifiche, firme, sincronizzazione e altre impostazioni per account.",
"SettingsManageAccountSettings_Title": "Gestisci Impostazioni Account", "SettingsManageAccountSettings_Title": "Gestisci Impostazioni Account",
"SettingsAppPreferences_Title": "App Preferences", "SettingsAppPreferences_Title": "Preferenze dell'app",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.", "SettingsAppPreferences_Description": "Impostazioni generali / preferenze per Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior", "SettingsAppPreferences_CloseBehavior_Title": "Comportamento chiusura applicazione",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?", "SettingsAppPreferences_CloseBehavior_Description": "Cosa dovrebbe succedere quando chiudi l'app?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup", "SettingsAppPreferences_StartupBehavior_Title": "Avvia minimizzato all'avvio di Windows",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.", "SettingsAppPreferences_StartupBehavior_Description": "Consenti a Wino Mail di lanciarsi minimizzato all'avvio di Windows. Consentigli sempre di ricevere notifiche.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.", "SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail correttamente impostato per essere lanciato in background all'avvio di Windows.",
"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_Disabled": "Wino Mail non sarà avviato all'avvio di Windows. Questo ti farà perdere le notifiche quando riavvii il 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_DisabledByPolicy": "L'amministratore o i criteri di gruppo hanno disabilitato l'esecuzione di applicazioni all'avvio. Così, Wino Mail non può essere impostato per avviarsi all'avvio di Windows.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.", "SettingsAppPreferences_StartupBehavior_DisabledByUser": "Vai a Task Manager -> scheda Avvio per consentire a Wino Mail di avviarsi all'avvio di Windows.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.", "SettingsAppPreferences_StartupBehavior_FatalError": "Si è verificato un errore fatale modificando la modalità di avvio per Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable", "SettingsAppPreferences_StartupBehavior_Enable": "Abilita",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable", "SettingsAppPreferences_StartupBehavior_Disable": "Disabilita",
"SettingsReorderAccounts_Title": "Reorder Accounts", "SettingsReorderAccounts_Title": "Riordina account",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.", "SettingsReorderAccounts_Description": "Cambia l'ordine degli account nella lista account.",
"SettingsManageLink_Description": "Sposta gli elementi per aggiungere un nuovo collegamento o rimuovi un collegamento esistente.", "SettingsManageLink_Description": "Sposta gli elementi per aggiungere un nuovo collegamento o rimuovi un collegamento esistente.",
"SettingsManageLink_Title": "Gestisci Collegamenti", "SettingsManageLink_Title": "Gestisci Collegamenti",
"SettingsMarkAsRead_Description": "Cambia cosa dovrebbe accadere all'elemento selezionato.", "SettingsMarkAsRead_Description": "Cambia cosa dovrebbe accadere all'elemento selezionato.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "Non hai ancora configurato alcun account.", "SettingsNoAccountSetupMessage": "Non hai ancora configurato alcun account.",
"SettingsNotifications_Description": "Attiva o disattiva le notifiche per questo account.", "SettingsNotifications_Description": "Attiva o disattiva le notifiche per questo account.",
"SettingsNotifications_Title": "Notifiche", "SettingsNotifications_Title": "Notifiche",
"SettingsPaneLength_Description": "Cambia la larghezza dell'elenco dei messaggi.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Lunghezza del Pannello della Lista dei Messaggi", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Mostra molto più amore ❤️ Tutte le donazioni sono apprezzate.", "SettingsPaypal_Description": "Mostra molto più amore ❤️ Tutte le donazioni sono apprezzate.",
"SettingsPaypal_Title": "Dona con PayPal", "SettingsPaypal_Title": "Dona con PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Modalità Compatta", "SettingsPersonalizationMailDisplayCompactMode": "Modalità Compatta",
@@ -459,10 +503,10 @@
"SettingsPersonalization_Title": "Personalizzazione", "SettingsPersonalization_Title": "Personalizzazione",
"SettingsPrivacyPolicy_Description": "Verifica l'informativa sulla privacy.", "SettingsPrivacyPolicy_Description": "Verifica l'informativa sulla privacy.",
"SettingsPrivacyPolicy_Title": "Informativa sulla Privacy", "SettingsPrivacyPolicy_Title": "Informativa sulla Privacy",
"SettingsReader_Title": "Reader", "SettingsReader_Title": "Lettore",
"SettingsComposer_Title": "Composer", "SettingsComposer_Title": "Compositore",
"SettingsReadComposePane_Description": "Fonts, external content.", "SettingsReadComposePane_Description": "Caratteri, contenuto esterno.",
"SettingsReadComposePane_Title": "Reader & Composer", "SettingsReadComposePane_Title": "Lettore e compositore",
"SettingsReaderFont_Title": "Carattere di Lettura Predefinito", "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.", "SettingsReaderFontFamily_Description": "Cambia la famiglia di caratteri predefinita e la dimensione del carattere per la lettura dei nuovi messaggi.",
"SettingsFontFamily_Title": "Famiglia di Caratteri", "SettingsFontFamily_Title": "Famiglia di Caratteri",
@@ -480,7 +524,7 @@
"SettingsShowSenderPictures_Title": "Mostra Avatar del Mittente", "SettingsShowSenderPictures_Title": "Mostra Avatar del Mittente",
"SettingsPrefer24HourClock_Title": "Visualizza orologio in formato 24 Ore", "SettingsPrefer24HourClock_Title": "Visualizza orologio in formato 24 Ore",
"SettingsPrefer24HourClock_Description": "Gli orari di ricezione della posta saranno visualizzati in formato 24 ore invece di 12 (AM/PM)", "SettingsPrefer24HourClock_Description": "Gli orari di ricezione della posta saranno visualizzati in formato 24 ore invece di 12 (AM/PM)",
"SettingsSignature_Description": "Manage account signatures", "SettingsSignature_Description": "Gestisci firme account",
"SettingsSignature_Title": "Firma", "SettingsSignature_Title": "Firma",
"SettingsStartupItem_Description": "Elemento dell'account primario per caricare la Posta in arrivo all'avvio.", "SettingsStartupItem_Description": "Elemento dell'account primario per caricare la Posta in arrivo all'avvio.",
"SettingsStartupItem_Title": "Elemento Iniziale", "SettingsStartupItem_Title": "Elemento Iniziale",
@@ -524,29 +568,29 @@
"WinoUpgradeMessage": "Aggiorna a Account Illimitati", "WinoUpgradeMessage": "Aggiorna a Account Illimitati",
"WinoUpgradeRemainingAccountsMessage": "{0} di {1} account gratuiti utilizzati.", "WinoUpgradeRemainingAccountsMessage": "{0} di {1} account gratuiti utilizzati.",
"Yesterday": "Ieri", "Yesterday": "Ieri",
"SignatureEditorDialog_Title": "Signature Editor", "SignatureEditorDialog_Title": "Editor di firme",
"SignatureEditorDialog_SignatureName_Placeholder": "Name your signature", "SignatureEditorDialog_SignatureName_Placeholder": "Nomina la tua firma",
"SignatureEditorDialog_SignatureName_TitleNew": "Signature name", "SignatureEditorDialog_SignatureName_TitleNew": "Nome della firma",
"SignatureEditorDialog_SignatureName_TitleEdit": "Current signature name: {0}", "SignatureEditorDialog_SignatureName_TitleEdit": "Nome firma attuale: {0}",
"SignatureDeleteDialog_Title": "Delete signature", "SignatureDeleteDialog_Title": "Elimina firma",
"SignatureDeleteDialog_Message": "Are you sure you want to delete \"{0}\" signature?", "SignatureDeleteDialog_Message": "Sei sicuro di voler eliminare la firma \"{0}\"?",
"SettingsSignature_ForNewMessages_Title": "For New Messages", "SettingsSignature_ForNewMessages_Title": "Per nuovi messaggi",
"SettingsSignature_ForFollowingMessages_Title": "For Replies/Forwards", "SettingsSignature_ForFollowingMessages_Title": "Per risposte/inoltri",
"SettingsSignature_SignatureDefaults": "Signature defaults", "SettingsSignature_SignatureDefaults": "Firme predefinite",
"SettingsSignature_Signatures": "Signatures", "SettingsSignature_Signatures": "Firme",
"SettingsSignature_AddCustomSignature_Title": "Add custom signature", "SettingsSignature_AddCustomSignature_Title": "Aggiungi firma personalizzata",
"SettingsSignature_AddCustomSignature_Button": "Add signature", "SettingsSignature_AddCustomSignature_Button": "Aggiungi firma",
"SettingsSignature_EditSignature_Title": "Edit signature", "SettingsSignature_EditSignature_Title": "Modifica firma",
"SettingsSignature_DeleteSignature_Title": "Delete signature", "SettingsSignature_DeleteSignature_Title": "Elimina firma",
"SettingsSignature_NoneSignatureName": "None", "SettingsSignature_NoneSignatureName": "Nessuno",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray", "SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimizza nell'area di notifica",
"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_MinimizeTray_Description": "Wino Mail continuerà a funzionare nell'area di notifica. Disponibile per il lancio facendo clic su un'icona. Sarai avvisato quando arriveranno nuovi messaggi.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Esegui in background",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail continuerà a essere in esecuzione in background. Sarai avvisato quando arriveranno nuovi messaggi.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Termina",
"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.", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail non continuerà a funzionare da nessuna parte. Non sarai avvisato quando arrivano nuove e-mail. Avvia nuovamente Wino Mail per continuare la sincronizzazione della posta.",
"TitleBarServerDisconnectedButton_Title": "no connection", "TitleBarServerDisconnectedButton_Title": "nessuna connessione",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.", "TitleBarServerDisconnectedButton_Description": "Wino è disconnesso dalla rete. Clicca di nuovo per ripristinare la connessione.",
"TitleBarServerReconnectButton_Title": "reconnect", "TitleBarServerReconnectButton_Title": "riconnetti",
"TitleBarServerReconnectingButton_Title": "connecting" "TitleBarServerReconnectingButton_Title": "in connessione"
} }

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "初期化中", "AccountCreationDialog_Initializing": "初期化中",
"AccountCreationDialog_PreparingFolders": "現在フォルダ情報を取得中です。", "AccountCreationDialog_PreparingFolders": "現在フォルダ情報を取得中です。",
"AccountCreationDialog_SigninIn": "アカウント情報を保存しています。", "AccountCreationDialog_SigninIn": "アカウント情報を保存しています。",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "アカウント名", "AccountEditDialog_Message": "アカウント名",
"AccountEditDialog_Title": "アカウントの編集", "AccountEditDialog_Title": "アカウントの編集",
"AccountPickerDialog_Title": "アカウントを選択", "AccountPickerDialog_Title": "アカウントを選択",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe",
"AddHyperlink": "追加", "AddHyperlink": "追加",
"AutoDiscoveryProgressMessage": "メール設定を検索中...", "AutoDiscoveryProgressMessage": "メール設定を検索中...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "詳細設定", "BasicIMAPSetupDialog_AdvancedConfiguration": "詳細設定",
"BasicIMAPSetupDialog_CredentialLocalMessage": "認証情報はローカルにのみ保存されます。", "BasicIMAPSetupDialog_CredentialLocalMessage": "認証情報はローカルにのみ保存されます。",
"BasicIMAPSetupDialog_Description": "一部のアカウントではサインインするために追加の手順が必要です。", "BasicIMAPSetupDialog_Description": "一部のアカウントではサインインするために追加の手順が必要です。",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "パスワード", "BasicIMAPSetupDialog_Password": "パスワード",
"BasicIMAPSetupDialog_Title": "IMAPアカウント", "BasicIMAPSetupDialog_Title": "IMAPアカウント",
"Buttons_AddAccount": "アカウントを追加", "Buttons_AddAccount": "アカウントを追加",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "テーマを適用", "Buttons_ApplyTheme": "テーマを適用",
"Buttons_Browse": "閲覧", "Buttons_Browse": "閲覧",
"Buttons_Cancel": "キャンセル", "Buttons_Cancel": "キャンセル",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "サインイン", "Buttons_SignIn": "サインイン",
"Buttons_TryAgain": "Try Again", "Buttons_TryAgain": "Try Again",
"Buttons_Yes": "はい", "Buttons_Yes": "はい",
"Buttons_Reset": "Reset",
"Center": "中央", "Center": "中央",
"ComingSoon": "近日公開", "ComingSoon": "近日公開",
"ComposerFrom": "差出人: ", "ComposerFrom": "差出人: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "カスタム壁紙を設定", "CustomThemeBuilder_WallpaperTitle": "カスタム壁紙を設定",
"DialogMessage_AccountLimitMessage": "アカウントの作成上限に達しました。\n「無制限アカウント」アドオンを購入して続行しますか", "DialogMessage_AccountLimitMessage": "アカウントの作成上限に達しました。\n「無制限アカウント」アドオンを購入して続行しますか",
"DialogMessage_AccountLimitTitle": "アカウントの上限に達しました", "DialogMessage_AccountLimitTitle": "アカウントの上限に達しました",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "このフォルダ内のすべてのメールを完全に削除しますか?", "DialogMessage_CleanupFolderMessage": "このフォルダ内のすべてのメールを完全に削除しますか?",
"DialogMessage_CleanupFolderTitle": "フォルダのクリーンアップ", "DialogMessage_CleanupFolderTitle": "フォルダのクリーンアップ",
"DialogMessage_ComposerMissingRecipientMessage": "メッセージに宛先がありません。", "DialogMessage_ComposerMissingRecipientMessage": "メッセージに宛先がありません。",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website",
"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}.", "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}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Don't ask again", "Dialog_DontAskAgain": "Don't ask again",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"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.", "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", "DiscordChannelDisclaimerTitle": "Important Discord Information",
"Draft": "Draft", "Draft": "Draft",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Draw", "EditorToolbarOption_Draw": "Draw",
"EditorToolbarOption_Format": "Format", "EditorToolbarOption_Format": "Format",
"EditorToolbarOption_Insert": "Insert", "EditorToolbarOption_Insert": "Insert",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Light mode", "ElementTheme_Light": "Light mode",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.", "Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.", "Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled", "Exception_AuthenticationCanceled": "Authentication canceled",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "You must provide a name.", "Exception_CustomThemeMissingName": "You must provide a name.",
"Exception_CustomThemeMissingWallpaper": "You must provide a custom background image.", "Exception_CustomThemeMissingWallpaper": "You must provide a custom background image.",
"Exception_FailedToSynchronizeFolders": "Failed to synchronize folders", "Exception_FailedToSynchronizeFolders": "Failed to synchronize folders",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.", "Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.",
"Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.", "Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.",
"Exception_GoogleAuthError": "OAuth authorization error: {0}", "Exception_GoogleAuthError": "OAuth authorization error: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.", "Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.",
"Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.", "Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.",
"Info_UnsubscribeErrorMessage": "Failed to unsubscribe", "Info_UnsubscribeErrorMessage": "Failed to unsubscribe",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method", "ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security", "ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security",
"ImapAuthenticationMethod_Auto": "Auto", "ImapAuthenticationMethod_Auto": "Auto",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Folder Synchronization", "SettingsFolderSync_Title": "Folder Synchronization",
"SettingsFolderOptions_Title": "Folder Configuration", "SettingsFolderOptions_Title": "Folder Configuration",
"SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.", "SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Center Action", "SettingsHoverActionCenter": "Center Action",
"SettingsHoverActionLeft": "Left Action", "SettingsHoverActionLeft": "Left Action",
"SettingsHoverActionRight": "Right Action", "SettingsHoverActionRight": "Right Action",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Language & Time", "SettingsLanguageTime_Title": "Language & Time",
"SettingsLanguageTime_Description": "Wino display language, preferred time format.", "SettingsLanguageTime_Description": "Wino display language, preferred time format.",
"CategoriesFolderNameOverride": "Categories", "CategoriesFolderNameOverride": "Categories",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "More", "MoreFolderNameOverride": "More",
"SettingsOptions_Title": "Settings", "SettingsOptions_Title": "Settings",
"SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.", "SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.", "SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.",
"SettingsNotifications_Description": "Turn on or off notifications for this account.", "SettingsNotifications_Description": "Turn on or off notifications for this account.",
"SettingsNotifications_Title": "Notifications", "SettingsNotifications_Title": "Notifications",
"SettingsPaneLength_Description": "Change the width of the mail list.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Mail List Pane Length", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.", "SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.",
"SettingsPaypal_Title": "Donate via PayPal", "SettingsPaypal_Title": "Donate via PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Compact Mode", "SettingsPersonalizationMailDisplayCompactMode": "Compact Mode",

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "bezig met initialiseren", "AccountCreationDialog_Initializing": "bezig met initialiseren",
"AccountCreationDialog_PreparingFolders": "Bezig met ontvangen van mapgegevens.", "AccountCreationDialog_PreparingFolders": "Bezig met ontvangen van mapgegevens.",
"AccountCreationDialog_SigninIn": "Accountinformatie wordt opgeslagen.", "AccountCreationDialog_SigninIn": "Accountinformatie wordt opgeslagen.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Accountnaam", "AccountEditDialog_Message": "Accountnaam",
"AccountEditDialog_Title": "Bewerk account", "AccountEditDialog_Title": "Bewerk account",
"AccountPickerDialog_Title": "Kies een account", "AccountPickerDialog_Title": "Kies een account",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe",
"AddHyperlink": "Toevoegen", "AddHyperlink": "Toevoegen",
"AutoDiscoveryProgressMessage": "Zoeken naar mailinstellingen...", "AutoDiscoveryProgressMessage": "Zoeken naar mailinstellingen...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Geavanceerde configuratie", "BasicIMAPSetupDialog_AdvancedConfiguration": "Geavanceerde configuratie",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Uw inloggegevens worden alleen lokaal opgeslagen op uw computer.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Uw inloggegevens worden alleen lokaal opgeslagen op uw computer.",
"BasicIMAPSetupDialog_Description": "Sommige accounts vereisen aanvullende stappen om in te loggen", "BasicIMAPSetupDialog_Description": "Sommige accounts vereisen aanvullende stappen om in te loggen",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Wachtwoord", "BasicIMAPSetupDialog_Password": "Wachtwoord",
"BasicIMAPSetupDialog_Title": "IMAP account", "BasicIMAPSetupDialog_Title": "IMAP account",
"Buttons_AddAccount": "Account toevoegen", "Buttons_AddAccount": "Account toevoegen",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Thema toepassen", "Buttons_ApplyTheme": "Thema toepassen",
"Buttons_Browse": "Bladeren", "Buttons_Browse": "Bladeren",
"Buttons_Cancel": "Annuleren", "Buttons_Cancel": "Annuleren",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Aanmelden", "Buttons_SignIn": "Aanmelden",
"Buttons_TryAgain": "Try Again", "Buttons_TryAgain": "Try Again",
"Buttons_Yes": "Ja", "Buttons_Yes": "Ja",
"Buttons_Reset": "Reset",
"Center": "Centreren", "Center": "Centreren",
"ComingSoon": "Binnenkort beschikbaar...", "ComingSoon": "Binnenkort beschikbaar...",
"ComposerFrom": "Van: ", "ComposerFrom": "Van: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Aangepaste achtergrond instellen", "CustomThemeBuilder_WallpaperTitle": "Aangepaste achtergrond instellen",
"DialogMessage_AccountLimitMessage": "U hebt de limiet voor het aanmaken van accounts bereikt.\nWilt u de 'Onbeperkt aantal accounts' add-on kopen om door te gaan?", "DialogMessage_AccountLimitMessage": "U hebt de limiet voor het aanmaken van accounts bereikt.\nWilt u de 'Onbeperkt aantal accounts' add-on kopen om door te gaan?",
"DialogMessage_AccountLimitTitle": "Limiet accounts bereikt", "DialogMessage_AccountLimitTitle": "Limiet accounts bereikt",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Wilt u alle e-mails in deze map permanent verwijderen?", "DialogMessage_CleanupFolderMessage": "Wilt u alle e-mails in deze map permanent verwijderen?",
"DialogMessage_CleanupFolderTitle": "Opschonen map", "DialogMessage_CleanupFolderTitle": "Opschonen map",
"DialogMessage_ComposerMissingRecipientMessage": "Bericht heeft geen ontvanger.", "DialogMessage_ComposerMissingRecipientMessage": "Bericht heeft geen ontvanger.",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website",
"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}.", "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}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Niet opnieuw vragen", "Dialog_DontAskAgain": "Niet opnieuw vragen",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Wino heeft geen eigen Discord server, maar het speciale 'wino-mail' kanaal is gehost op de 'Developer Sanctuary' server.\nOm updates over Wino te krijgen, sluit je je aan bij de Developer Sanctuary server en volg je 'wino-mail' kanaal onder 'Community Projects'\n\nJe wordt doorgestuurd naar de server-URL omdat Discord geen kanaaluitnodigingen ondersteunt.", "DiscordChannelDisclaimerMessage": "Wino heeft geen eigen Discord server, maar het speciale 'wino-mail' kanaal is gehost op de 'Developer Sanctuary' server.\nOm updates over Wino te krijgen, sluit je je aan bij de Developer Sanctuary server en volg je 'wino-mail' kanaal onder 'Community Projects'\n\nJe wordt doorgestuurd naar de server-URL omdat Discord geen kanaaluitnodigingen ondersteunt.",
"DiscordChannelDisclaimerTitle": "Belangrijke informatie over Discord", "DiscordChannelDisclaimerTitle": "Belangrijke informatie over Discord",
"Draft": "Concept", "Draft": "Concept",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Tekenen", "EditorToolbarOption_Draw": "Tekenen",
"EditorToolbarOption_Format": "Opmaak", "EditorToolbarOption_Format": "Opmaak",
"EditorToolbarOption_Insert": "Invoegen", "EditorToolbarOption_Insert": "Invoegen",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Lichte modus", "ElementTheme_Light": "Lichte modus",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.", "Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool is mislukt.", "Exception_ImapClientPoolFailed": "IMAP Client Pool is mislukt.",
"Exception_AuthenticationCanceled": "Authenticatie geannuleerd", "Exception_AuthenticationCanceled": "Authenticatie geannuleerd",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "U moet een naam invullen.", "Exception_CustomThemeMissingName": "U moet een naam invullen.",
"Exception_CustomThemeMissingWallpaper": "U moet een aangepaste achtergrondafbeelding invoeren.", "Exception_CustomThemeMissingWallpaper": "U moet een aangepaste achtergrondafbeelding invoeren.",
"Exception_FailedToSynchronizeFolders": "Synchroniseren van mappen mislukt", "Exception_FailedToSynchronizeFolders": "Synchroniseren van mappen mislukt",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri is null bij het activeren.", "Exception_GoogleAuthCallbackNull": "Callback uri is null bij het activeren.",
"Exception_GoogleAuthCorruptedCode": "Beschadigd autorisatieantwoord.", "Exception_GoogleAuthCorruptedCode": "Beschadigd autorisatieantwoord.",
"Exception_GoogleAuthError": "OAuth autorisatiefout: {0}", "Exception_GoogleAuthError": "OAuth autorisatiefout: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "Deze afmeldlink is ongeldig. Afmelden van de lijst is mislukt.", "Info_UnsubscribeLinkInvalidMessage": "Deze afmeldlink is ongeldig. Afmelden van de lijst is mislukt.",
"Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.", "Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.",
"Info_UnsubscribeErrorMessage": "Failed to unsubscribe", "Info_UnsubscribeErrorMessage": "Failed to unsubscribe",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Authenticatiemethode", "ImapAdvancedSetupDialog_AuthenticationMethod": "Authenticatiemethode",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Beveiliging van verbinding", "ImapAdvancedSetupDialog_ConnectionSecurity": "Beveiliging van verbinding",
"ImapAuthenticationMethod_Auto": "Automatisch", "ImapAuthenticationMethod_Auto": "Automatisch",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Folder Synchronization", "SettingsFolderSync_Title": "Folder Synchronization",
"SettingsFolderOptions_Title": "Folder Configuration", "SettingsFolderOptions_Title": "Folder Configuration",
"SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.", "SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Center Action", "SettingsHoverActionCenter": "Center Action",
"SettingsHoverActionLeft": "Left Action", "SettingsHoverActionLeft": "Left Action",
"SettingsHoverActionRight": "Right Action", "SettingsHoverActionRight": "Right Action",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Language & Time", "SettingsLanguageTime_Title": "Language & Time",
"SettingsLanguageTime_Description": "Wino display language, preferred time format.", "SettingsLanguageTime_Description": "Wino display language, preferred time format.",
"CategoriesFolderNameOverride": "Categories", "CategoriesFolderNameOverride": "Categories",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "More", "MoreFolderNameOverride": "More",
"SettingsOptions_Title": "Settings", "SettingsOptions_Title": "Settings",
"SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.", "SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.", "SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.",
"SettingsNotifications_Description": "Turn on or off notifications for this account.", "SettingsNotifications_Description": "Turn on or off notifications for this account.",
"SettingsNotifications_Title": "Notifications", "SettingsNotifications_Title": "Notifications",
"SettingsPaneLength_Description": "Change the width of the mail list.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Mail List Pane Length", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.", "SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.",
"SettingsPaypal_Title": "Donate via PayPal", "SettingsPaypal_Title": "Donate via PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Compact Mode", "SettingsPersonalizationMailDisplayCompactMode": "Compact Mode",

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "inicjowanie", "AccountCreationDialog_Initializing": "inicjowanie",
"AccountCreationDialog_PreparingFolders": "Trwa pobieranie informacji o folderach.", "AccountCreationDialog_PreparingFolders": "Trwa pobieranie informacji o folderach.",
"AccountCreationDialog_SigninIn": "Zapisywanie danych konta.", "AccountCreationDialog_SigninIn": "Zapisywanie danych konta.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Nazwa konta", "AccountEditDialog_Message": "Nazwa konta",
"AccountEditDialog_Title": "Edytuj konto", "AccountEditDialog_Title": "Edytuj konto",
"AccountPickerDialog_Title": "Wybierz konto", "AccountPickerDialog_Title": "Wybierz konto",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe",
"AddHyperlink": "Dodaj", "AddHyperlink": "Dodaj",
"AutoDiscoveryProgressMessage": "Wyszukiwanie ustawień poczty...", "AutoDiscoveryProgressMessage": "Wyszukiwanie ustawień poczty...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Konfiguracja zaawansowana", "BasicIMAPSetupDialog_AdvancedConfiguration": "Konfiguracja zaawansowana",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Twoje dane logowania będą przechowywane lokalnie tylko na Twoim komputerze.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Twoje dane logowania będą przechowywane lokalnie tylko na Twoim komputerze.",
"BasicIMAPSetupDialog_Description": "Niektóre konta wymagają dodatkowych kroków do zalogowania", "BasicIMAPSetupDialog_Description": "Niektóre konta wymagają dodatkowych kroków do zalogowania",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Hasło", "BasicIMAPSetupDialog_Password": "Hasło",
"BasicIMAPSetupDialog_Title": "Konto IMAP", "BasicIMAPSetupDialog_Title": "Konto IMAP",
"Buttons_AddAccount": "Dodaj konto", "Buttons_AddAccount": "Dodaj konto",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Zastosuj motyw", "Buttons_ApplyTheme": "Zastosuj motyw",
"Buttons_Browse": "Przeglądaj", "Buttons_Browse": "Przeglądaj",
"Buttons_Cancel": "Anuluj", "Buttons_Cancel": "Anuluj",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Zaloguj się", "Buttons_SignIn": "Zaloguj się",
"Buttons_TryAgain": "Try Again", "Buttons_TryAgain": "Try Again",
"Buttons_Yes": "Tak", "Buttons_Yes": "Tak",
"Buttons_Reset": "Reset",
"Center": "Wyśrodkuj", "Center": "Wyśrodkuj",
"ComingSoon": "Już wkrótce...", "ComingSoon": "Już wkrótce...",
"ComposerFrom": "Od: ", "ComposerFrom": "Od: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Ustaw niestandardową tapetę", "CustomThemeBuilder_WallpaperTitle": "Ustaw niestandardową tapetę",
"DialogMessage_AccountLimitMessage": "Osiągnąłeś limit utworzonych kont.\nCzy chcesz kupić dodatek \"Nielimitowane konto\", aby kontynuować?", "DialogMessage_AccountLimitMessage": "Osiągnąłeś limit utworzonych kont.\nCzy chcesz kupić dodatek \"Nielimitowane konto\", aby kontynuować?",
"DialogMessage_AccountLimitTitle": "Osiągnięto limit konta", "DialogMessage_AccountLimitTitle": "Osiągnięto limit konta",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Czy chcesz trwale usunąć wszystkie wiadomości z tego folderu?", "DialogMessage_CleanupFolderMessage": "Czy chcesz trwale usunąć wszystkie wiadomości z tego folderu?",
"DialogMessage_CleanupFolderTitle": "Opróżnianie folderu", "DialogMessage_CleanupFolderTitle": "Opróżnianie folderu",
"DialogMessage_ComposerMissingRecipientMessage": "Wiadomość nie ma odbiorcy.", "DialogMessage_ComposerMissingRecipientMessage": "Wiadomość nie ma odbiorcy.",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Aby przestać otrzymywać wiadomości od {0}, przejdź do strony internetowej tego serwisu, aby zrezygnować.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Aby przestać otrzymywać wiadomości od {0}, przejdź do strony internetowej tego serwisu, aby zrezygnować.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Przejdź na stronę", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Przejdź na stronę",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Czy chcesz przestać otrzymywać wiadomości od {0}? Wino zrezygnuje z subskrypcji, wysyłając wiadomości z konta e-mail do {1}.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "Czy chcesz przestać otrzymywać wiadomości od {0}? Wino zrezygnuje z subskrypcji, wysyłając wiadomości z konta e-mail do {1}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Nie pytaj ponownie", "Dialog_DontAskAgain": "Nie pytaj ponownie",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Wino nie ma własnego serwera Discorda, ale specjalny kanał \"wino-mail\" który jest hostowany na serwerze \"Developer Sanctuary\".\nAby otrzymywać najświeższe informacje o Wino dołącz do serwera Developer Sanctuary i obserwuj kanał 'wino-mail' pod 'Community Projects'\n\nZostaniesz przekierowany na adres URL serwera, ponieważ Discord nie obsługuje kanałów zaproszeń.", "DiscordChannelDisclaimerMessage": "Wino nie ma własnego serwera Discorda, ale specjalny kanał \"wino-mail\" który jest hostowany na serwerze \"Developer Sanctuary\".\nAby otrzymywać najświeższe informacje o Wino dołącz do serwera Developer Sanctuary i obserwuj kanał 'wino-mail' pod 'Community Projects'\n\nZostaniesz przekierowany na adres URL serwera, ponieważ Discord nie obsługuje kanałów zaproszeń.",
"DiscordChannelDisclaimerTitle": "Ważne informacje o kanale na Discordzie", "DiscordChannelDisclaimerTitle": "Ważne informacje o kanale na Discordzie",
"Draft": "Wersja robocza", "Draft": "Wersja robocza",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Rysowanie", "EditorToolbarOption_Draw": "Rysowanie",
"EditorToolbarOption_Format": "Formatowanie", "EditorToolbarOption_Format": "Formatowanie",
"EditorToolbarOption_Insert": "Wstawianie", "EditorToolbarOption_Insert": "Wstawianie",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Tryb jasny", "ElementTheme_Light": "Tryb jasny",
"Emoji": "Emotikony", "Emoji": "Emotikony",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.", "Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "Pula klienta IMAP nie powiodła się.", "Exception_ImapClientPoolFailed": "Pula klienta IMAP nie powiodła się.",
"Exception_AuthenticationCanceled": "Anulowano uwierzytelnianie", "Exception_AuthenticationCanceled": "Anulowano uwierzytelnianie",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "Musisz podać nazwę.", "Exception_CustomThemeMissingName": "Musisz podać nazwę.",
"Exception_CustomThemeMissingWallpaper": "Musisz podać niestandardowy obraz tła.", "Exception_CustomThemeMissingWallpaper": "Musisz podać niestandardowy obraz tła.",
"Exception_FailedToSynchronizeFolders": "Nie udało się zsynchronizować folderów", "Exception_FailedToSynchronizeFolders": "Nie udało się zsynchronizować folderów",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Adres uri wywołania zwrotnego jest pusty przy aktywacji.", "Exception_GoogleAuthCallbackNull": "Adres uri wywołania zwrotnego jest pusty przy aktywacji.",
"Exception_GoogleAuthCorruptedCode": "Uszkodzona odpowiedź autoryzacji.", "Exception_GoogleAuthCorruptedCode": "Uszkodzona odpowiedź autoryzacji.",
"Exception_GoogleAuthError": "Błąd autoryzacji OAuth: {0}", "Exception_GoogleAuthError": "Błąd autoryzacji OAuth: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "Link anulowania subskrypcji jest nieprawidłowy. Nie udało się wypisać z listy subskrybentów.", "Info_UnsubscribeLinkInvalidMessage": "Link anulowania subskrypcji jest nieprawidłowy. Nie udało się wypisać z listy subskrybentów.",
"Info_UnsubscribeSuccessMessage": "Pomyślnie anulowano subskrypcję z {0}.", "Info_UnsubscribeSuccessMessage": "Pomyślnie anulowano subskrypcję z {0}.",
"Info_UnsubscribeErrorMessage": "Anulowanie subskrypcji nie powiodło się", "Info_UnsubscribeErrorMessage": "Anulowanie subskrypcji nie powiodło się",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Metoda autoryzacji", "ImapAdvancedSetupDialog_AuthenticationMethod": "Metoda autoryzacji",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Zabezpieczenia dot. połączenia", "ImapAdvancedSetupDialog_ConnectionSecurity": "Zabezpieczenia dot. połączenia",
"ImapAuthenticationMethod_Auto": "Automatyczne", "ImapAuthenticationMethod_Auto": "Automatyczne",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Synchronizacja folderów", "SettingsFolderSync_Title": "Synchronizacja folderów",
"SettingsFolderOptions_Title": "Konfiguracja folderów", "SettingsFolderOptions_Title": "Konfiguracja folderów",
"SettingsFolderOptions_Description": "Zmień ustawienia poszczególnych folderów, takie jak wyłączenie lub włączenie synchronizacji lub pokazywanie i ukrywanie ikony nieprzeczytanych wiadomości.", "SettingsFolderOptions_Description": "Zmień ustawienia poszczególnych folderów, takie jak wyłączenie lub włączenie synchronizacji lub pokazywanie i ukrywanie ikony nieprzeczytanych wiadomości.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Akcja ze środka", "SettingsHoverActionCenter": "Akcja ze środka",
"SettingsHoverActionLeft": "Akcja z lewej", "SettingsHoverActionLeft": "Akcja z lewej",
"SettingsHoverActionRight": "Akcja z prawej", "SettingsHoverActionRight": "Akcja z prawej",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Język i czas", "SettingsLanguageTime_Title": "Język i czas",
"SettingsLanguageTime_Description": "Język wyświetlania Wino, preferowany format czasu.", "SettingsLanguageTime_Description": "Język wyświetlania Wino, preferowany format czasu.",
"CategoriesFolderNameOverride": "Kategorie", "CategoriesFolderNameOverride": "Kategorie",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "Więcej", "MoreFolderNameOverride": "Więcej",
"SettingsOptions_Title": "Ustawienia", "SettingsOptions_Title": "Ustawienia",
"SettingsLinkAccounts_Description": "Scal wiele kont w jedno. Przeglądaj wiadomości z jednej skrzynki odbiorczej razem.", "SettingsLinkAccounts_Description": "Scal wiele kont w jedno. Przeglądaj wiadomości z jednej skrzynki odbiorczej razem.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "Nie skonfigurowano jeszcze żadnych kont.", "SettingsNoAccountSetupMessage": "Nie skonfigurowano jeszcze żadnych kont.",
"SettingsNotifications_Description": "Włącz lub wyłącz powiadomienia dla tego konta.", "SettingsNotifications_Description": "Włącz lub wyłącz powiadomienia dla tego konta.",
"SettingsNotifications_Title": "Powiadomienia", "SettingsNotifications_Title": "Powiadomienia",
"SettingsPaneLength_Description": "Zmień szerokość listy wiadomości.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Długość panelu listy wiadomości", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Okaż dużo więcej miłości ❤️ Za wszystkie darowizny dziękuję.", "SettingsPaypal_Description": "Okaż dużo więcej miłości ❤️ Za wszystkie darowizny dziękuję.",
"SettingsPaypal_Title": "Wspomóż przez PayPal", "SettingsPaypal_Title": "Wspomóż przez PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Tryb kompaktowy", "SettingsPersonalizationMailDisplayCompactMode": "Tryb kompaktowy",

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "iniciando", "AccountCreationDialog_Initializing": "iniciando",
"AccountCreationDialog_PreparingFolders": "Estamos recebendo informações sobre as pastas no momento.", "AccountCreationDialog_PreparingFolders": "Estamos recebendo informações sobre as pastas no momento.",
"AccountCreationDialog_SigninIn": "Informações da conta estão sendo salvas.", "AccountCreationDialog_SigninIn": "Informações da conta estão sendo salvas.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Nome da Conta", "AccountEditDialog_Message": "Nome da Conta",
"AccountEditDialog_Title": "Editar Conta", "AccountEditDialog_Title": "Editar Conta",
"AccountPickerDialog_Title": "Escolha uma conta", "AccountPickerDialog_Title": "Escolha uma conta",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "Por exemplo, João Silva", "AccountSettingsDialog_AccountNamePlaceholder": "Por exemplo, João Silva",
"AddHyperlink": "Adicionar", "AddHyperlink": "Adicionar",
"AutoDiscoveryProgressMessage": "Procurando por configurações de e-mail...", "AutoDiscoveryProgressMessage": "Procurando por configurações de e-mail...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Configuração Avançada", "BasicIMAPSetupDialog_AdvancedConfiguration": "Configuração Avançada",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Suas credenciais só serão armazenadas localmente no seu computador.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Suas credenciais só serão armazenadas localmente no seu computador.",
"BasicIMAPSetupDialog_Description": "Algumas contas requerem passos adicionais para realizar o login", "BasicIMAPSetupDialog_Description": "Algumas contas requerem passos adicionais para realizar o login",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Senha", "BasicIMAPSetupDialog_Password": "Senha",
"BasicIMAPSetupDialog_Title": "Conta IMAP", "BasicIMAPSetupDialog_Title": "Conta IMAP",
"Buttons_AddAccount": "Adicionar Conta", "Buttons_AddAccount": "Adicionar Conta",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Aplicar Tema", "Buttons_ApplyTheme": "Aplicar Tema",
"Buttons_Browse": "Navegar", "Buttons_Browse": "Navegar",
"Buttons_Cancel": "Cancelar", "Buttons_Cancel": "Cancelar",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Entrar", "Buttons_SignIn": "Entrar",
"Buttons_TryAgain": "Tentar Novamente", "Buttons_TryAgain": "Tentar Novamente",
"Buttons_Yes": "Sim", "Buttons_Yes": "Sim",
"Buttons_Reset": "Reset",
"Center": "Centro", "Center": "Centro",
"ComingSoon": "Em breve...", "ComingSoon": "Em breve...",
"ComposerFrom": "De: ", "ComposerFrom": "De: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Definir papel de parede personalizado", "CustomThemeBuilder_WallpaperTitle": "Definir papel de parede personalizado",
"DialogMessage_AccountLimitMessage": "Você atingiu o limite de contas criadas.\nVocê gostaria de comprar o complemento 'Acesso Ilimitado' para continuar?", "DialogMessage_AccountLimitMessage": "Você atingiu o limite de contas criadas.\nVocê gostaria de comprar o complemento 'Acesso Ilimitado' para continuar?",
"DialogMessage_AccountLimitTitle": "Limite de Contas Alcançado", "DialogMessage_AccountLimitTitle": "Limite de Contas Alcançado",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Você quer apagar permanentemente todos os e-mails nesta pasta?", "DialogMessage_CleanupFolderMessage": "Você quer apagar permanentemente todos os e-mails nesta pasta?",
"DialogMessage_CleanupFolderTitle": "Limpar Pasta", "DialogMessage_CleanupFolderTitle": "Limpar Pasta",
"DialogMessage_ComposerMissingRecipientMessage": "A mensagem não possui destinatário.", "DialogMessage_ComposerMissingRecipientMessage": "A mensagem não possui destinatário.",
@@ -82,7 +103,7 @@
"DialogMessage_RenameLinkedAccountsTitle": "Renomear conta vinculada", "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_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_UnlinkAccountsConfirmationTitle": "Desvincular Contas",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject", "DialogMessage_EmptySubjectConfirmation": "Faltando Assunto",
"DialogMessage_EmptySubjectConfirmationMessage": "Mensagem não possui assunto. Você deseja continuar?", "DialogMessage_EmptySubjectConfirmationMessage": "Mensagem não possui assunto. Você deseja continuar?",
"DialogMessage_RenameFolderTitle": "Renomear Pasta", "DialogMessage_RenameFolderTitle": "Renomear Pasta",
"DialogMessage_RenameFolderMessage": "Escolha um novo nome para esta pasta", "DialogMessage_RenameFolderMessage": "Escolha um novo nome para esta pasta",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Para parar de receber mensagens de {0}, vá para o site deles para cancelar a inscrição.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Para parar de receber mensagens de {0}, vá para o site deles para cancelar a inscrição.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Ir para o site", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Ir para o site",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Você quer parar de receber mensagens de {0}? Wino cancelará a inscrição para você enviando um e-mail da sua conta para {1}.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "Você quer parar de receber mensagens de {0}? Wino cancelará a inscrição para você enviando um e-mail da sua conta para {1}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Não perguntar novamente", "Dialog_DontAskAgain": "Não perguntar novamente",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Wino não possui um servidor próprio do Discord, mas o canal especial 'wino-mail' está presente no servidor 'Developer Sanctuary'. Para obter atualizações sobre o Wino, por favor se junto ao servidor Developer Sanctuary e siga o canal 'wino-mail' em 'Community Projects'\n\nVocê será direcionado para a URL do servidor, já que o Discord não tem suporte a convites a um canal.", "DiscordChannelDisclaimerMessage": "Wino não possui um servidor próprio do Discord, mas o canal especial 'wino-mail' está presente no servidor 'Developer Sanctuary'. Para obter atualizações sobre o Wino, por favor se junto ao servidor Developer Sanctuary e siga o canal 'wino-mail' em 'Community Projects'\n\nVocê será direcionado para a URL do servidor, já que o Discord não tem suporte a convites a um canal.",
"DiscordChannelDisclaimerTitle": "Informações importantes do Discord", "DiscordChannelDisclaimerTitle": "Informações importantes do Discord",
"Draft": "Rascunho", "Draft": "Rascunho",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Desenhar", "EditorToolbarOption_Draw": "Desenhar",
"EditorToolbarOption_Format": "Formato", "EditorToolbarOption_Format": "Formato",
"EditorToolbarOption_Insert": "Inserir", "EditorToolbarOption_Insert": "Inserir",
@@ -105,7 +136,8 @@
"ElementTheme_Default": "Usar configurações do sistema", "ElementTheme_Default": "Usar configurações do sistema",
"ElementTheme_Light": "Modo claro", "ElementTheme_Light": "Modo claro",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "O servidor do Wino falhou.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Não foi possível encontrar configurações da caixa de e-mail.", "Exception_ImapAutoDiscoveryFailed": "Não foi possível encontrar configurações da caixa de e-mail.",
"Exception_ImapClientPoolFailed": "Client Pool do IMAP falhou.", "Exception_ImapClientPoolFailed": "Client Pool do IMAP falhou.",
"Exception_AuthenticationCanceled": "Autenticação cancelada", "Exception_AuthenticationCanceled": "Autenticação cancelada",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "Você deve escrever um nome.", "Exception_CustomThemeMissingName": "Você deve escrever um nome.",
"Exception_CustomThemeMissingWallpaper": "Você deve fornecer uma imagem de fundo personalizada.", "Exception_CustomThemeMissingWallpaper": "Você deve fornecer uma imagem de fundo personalizada.",
"Exception_FailedToSynchronizeFolders": "Erro ao sincronizar pastas", "Exception_FailedToSynchronizeFolders": "Erro ao sincronizar pastas",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri é 'null' na ativação.", "Exception_GoogleAuthCallbackNull": "Callback uri é 'null' na ativação.",
"Exception_GoogleAuthCorruptedCode": "Resposta de autorização corrompida.", "Exception_GoogleAuthCorruptedCode": "Resposta de autorização corrompida.",
"Exception_GoogleAuthError": "Erro de autorização OAuth: {0}", "Exception_GoogleAuthError": "Erro de autorização OAuth: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "Este link de descadastramento é inválido. Falha ao cancelar a inscrição da lista.", "Info_UnsubscribeLinkInvalidMessage": "Este link de descadastramento é inválido. Falha ao cancelar a inscrição da lista.",
"Info_UnsubscribeSuccessMessage": "Inscrição de {0} cancelada com sucesso.", "Info_UnsubscribeSuccessMessage": "Inscrição de {0} cancelada com sucesso.",
"Info_UnsubscribeErrorMessage": "Falha ao Cancelar Inscrição", "Info_UnsubscribeErrorMessage": "Falha ao Cancelar Inscrição",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Método de autenticação", "ImapAdvancedSetupDialog_AuthenticationMethod": "Método de autenticação",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Segurança de Conexão", "ImapAdvancedSetupDialog_ConnectionSecurity": "Segurança de Conexão",
"ImapAuthenticationMethod_Auto": "Automático", "ImapAuthenticationMethod_Auto": "Automático",
@@ -336,7 +373,7 @@
"ProtocolLogAvailable_Message": "Os registros do protocolo estão disponíveis para diagnósticos.", "ProtocolLogAvailable_Message": "Os registros do protocolo estão disponíveis para diagnósticos.",
"Results": "Resultados", "Results": "Resultados",
"Right": "Direita", "Right": "Direita",
"Reader_SaveAllAttachmentButtonText": "Save all attachments", "Reader_SaveAllAttachmentButtonText": "Salvar todos os anexos",
"SynchronizationFolderReport_Success": "Atualizado", "SynchronizationFolderReport_Success": "Atualizado",
"SynchronizationFolderReport_Failed": "Falha na sincronização", "SynchronizationFolderReport_Failed": "Falha na sincronização",
"SearchBarPlaceholder": "Pesquisar", "SearchBarPlaceholder": "Pesquisar",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Sincronização de pastas", "SettingsFolderSync_Title": "Sincronização de pastas",
"SettingsFolderOptions_Title": "Configuração de pastas", "SettingsFolderOptions_Title": "Configuração de pastas",
"SettingsFolderOptions_Description": "Altere as configurações de pastas individuais como ativar/desativar a sincronização ou exibir/ocultar como não lida.", "SettingsFolderOptions_Description": "Altere as configurações de pastas individuais como ativar/desativar a sincronização ou exibir/ocultar como não lida.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Centralizar Ação", "SettingsHoverActionCenter": "Centralizar Ação",
"SettingsHoverActionLeft": "Ação à esquerda", "SettingsHoverActionLeft": "Ação à esquerda",
"SettingsHoverActionRight": "Ação à direita", "SettingsHoverActionRight": "Ação à direita",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Idioma & Horário", "SettingsLanguageTime_Title": "Idioma & Horário",
"SettingsLanguageTime_Description": "Idioma de exibição do Wino, formato de hora preferido.", "SettingsLanguageTime_Description": "Idioma de exibição do Wino, formato de hora preferido.",
"CategoriesFolderNameOverride": "Categorias", "CategoriesFolderNameOverride": "Categorias",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "Mais", "MoreFolderNameOverride": "Mais",
"SettingsOptions_Title": "Configurações", "SettingsOptions_Title": "Configurações",
"SettingsLinkAccounts_Description": "Junte várias contas em uma só. Veja e-mails em uma caixa de entrada.", "SettingsLinkAccounts_Description": "Junte várias contas em uma só. Veja e-mails em uma caixa de entrada.",
@@ -420,19 +464,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", "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_Description": "Notificações, assinaturas, sincronização e outras configurações por conta.",
"SettingsManageAccountSettings_Title": "Gerenciar configurações de conta", "SettingsManageAccountSettings_Title": "Gerenciar configurações de conta",
"SettingsAppPreferences_Title": "App Preferences", "SettingsAppPreferences_Title": "Preferências do Aplicativo",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.", "SettingsAppPreferences_Description": "Configurações gerais / Preferências para o Wino Mail.",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior", "SettingsAppPreferences_CloseBehavior_Title": "Comportamento do aplicativo fechado",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?", "SettingsAppPreferences_CloseBehavior_Description": "O que deveria acontecer quando você fecha o aplicativo?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup", "SettingsAppPreferences_StartupBehavior_Title": "Iniciar minimizado na inicialização do Windows",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.", "SettingsAppPreferences_StartupBehavior_Description": "Permitir que o Wino inicie minimizado com o Windows. Sempre permita que ele receba notificações.",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.", "SettingsAppPreferences_StartupBehavior_Enabled": "Wino foi definido com sucesso para ser iniciado de fundo na inicialização do Windows.",
"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_Disabled": "O Wino Mail não será iniciado na inicialização do Windows. Isso fará com que você perca as notificações quando reiniciar o computador.",
"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_DisabledByPolicy": "Suas políticas de administrador ou grupo desativaram a execução de aplicativos na inicialização. Assim, o Wino Mail não pode ser configurado para iniciar com o Windows na inicialização.",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.", "SettingsAppPreferences_StartupBehavior_DisabledByUser": "Por favor, vá para o Gerenciador de Tarefas -> Aplicativos de Inicialização para permitir que o Wino Mail inicie no Windows.",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.", "SettingsAppPreferences_StartupBehavior_FatalError": "Ocorreu um erro fatal ao alterar o modo de inicialização do Wino Mail.",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable", "SettingsAppPreferences_StartupBehavior_Enable": "Habilitar",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable", "SettingsAppPreferences_StartupBehavior_Disable": "Desabilitar",
"SettingsReorderAccounts_Title": "Reordenar Contas", "SettingsReorderAccounts_Title": "Reordenar Contas",
"SettingsReorderAccounts_Description": "Altere a ordem das contas na lista de conta.", "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.", "SettingsManageLink_Description": "Mova os itens para adicionar um novo vínculo ou remover o vínculo existente.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "Você ainda não configurou nenhuma conta.", "SettingsNoAccountSetupMessage": "Você ainda não configurou nenhuma conta.",
"SettingsNotifications_Description": "Ative ou desative as notificações para esta conta.", "SettingsNotifications_Description": "Ative ou desative as notificações para esta conta.",
"SettingsNotifications_Title": "Notificações", "SettingsNotifications_Title": "Notificações",
"SettingsPaneLength_Description": "Altere a largura da lista de e-mails.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Comprimento do painel da lista de e-mail", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Mostre muito mais amor ❤️ Todas as doações são apreciadas.", "SettingsPaypal_Description": "Mostre muito mais amor ❤️ Todas as doações são apreciadas.",
"SettingsPaypal_Title": "Doe pelo PayPal", "SettingsPaypal_Title": "Doe pelo PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Modo Compacto", "SettingsPersonalizationMailDisplayCompactMode": "Modo Compacto",
@@ -539,14 +583,14 @@
"SettingsSignature_EditSignature_Title": "Editar assinatura", "SettingsSignature_EditSignature_Title": "Editar assinatura",
"SettingsSignature_DeleteSignature_Title": "Excluir assinatura", "SettingsSignature_DeleteSignature_Title": "Excluir assinatura",
"SettingsSignature_NoneSignatureName": "Nenhum", "SettingsSignature_NoneSignatureName": "Nenhum",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray", "SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimizar para a bandeja de sistema",
"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_MinimizeTray_Description": "O Wino Mail continuará em execução na bandeja do sistema. Disponível para iniciar clicando no ícone. Você será notificado assim que novos e-mails chegaram.",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Executar em segundo plano",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "O Wino Mail continuará em execução em segundo plano. Você será notificado quando chegarem novos e-mails.",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Encerrar",
"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.", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "O Wino Mail não será executado em nenhum lugar. Você não será notificado quando chegarem novos e-mails. Inicie o Wino Mail novamente para continuar a sincronização de e-mail.",
"TitleBarServerDisconnectedButton_Title": "no connection", "TitleBarServerDisconnectedButton_Title": "Sem conexão",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.", "TitleBarServerDisconnectedButton_Description": "Wino está desconectado da rede. Clique em reconectar para restaurar a conexão.",
"TitleBarServerReconnectButton_Title": "reconnect", "TitleBarServerReconnectButton_Title": "Reconectar",
"TitleBarServerReconnectingButton_Title": "connecting" "TitleBarServerReconnectingButton_Title": "Conectando"
} }

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "инициализация", "AccountCreationDialog_Initializing": "инициализация",
"AccountCreationDialog_PreparingFolders": "На данный момент мы получаем информацию о папках.", "AccountCreationDialog_PreparingFolders": "На данный момент мы получаем информацию о папках.",
"AccountCreationDialog_SigninIn": "Данные учетной записи сохраняются.", "AccountCreationDialog_SigninIn": "Данные учетной записи сохраняются.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Имя пользователя", "AccountEditDialog_Message": "Имя пользователя",
"AccountEditDialog_Title": "Редактировать учетную запись", "AccountEditDialog_Title": "Редактировать учетную запись",
"AccountPickerDialog_Title": "Выберите учетную запись", "AccountPickerDialog_Title": "Выберите учетную запись",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "напр. Иван Иванов", "AccountSettingsDialog_AccountNamePlaceholder": "напр. Иван Иванов",
"AddHyperlink": "Добавить", "AddHyperlink": "Добавить",
"AutoDiscoveryProgressMessage": "Поиск настроек почты...", "AutoDiscoveryProgressMessage": "Поиск настроек почты...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Расширенная конфигурация", "BasicIMAPSetupDialog_AdvancedConfiguration": "Расширенная конфигурация",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Ваши учетные данные будут храниться только локально на вашем компьютере.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Ваши учетные данные будут храниться только локально на вашем компьютере.",
"BasicIMAPSetupDialog_Description": "Некоторые учетные записи требуют дополнительных шагов для входа", "BasicIMAPSetupDialog_Description": "Некоторые учетные записи требуют дополнительных шагов для входа",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Пароль", "BasicIMAPSetupDialog_Password": "Пароль",
"BasicIMAPSetupDialog_Title": "Учетная запись IMAP", "BasicIMAPSetupDialog_Title": "Учетная запись IMAP",
"Buttons_AddAccount": "Добавить учетную запись", "Buttons_AddAccount": "Добавить учетную запись",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Применить тему", "Buttons_ApplyTheme": "Применить тему",
"Buttons_Browse": "Обзор", "Buttons_Browse": "Обзор",
"Buttons_Cancel": "Отмена", "Buttons_Cancel": "Отмена",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Войти", "Buttons_SignIn": "Войти",
"Buttons_TryAgain": "Повторить", "Buttons_TryAgain": "Повторить",
"Buttons_Yes": "Да", "Buttons_Yes": "Да",
"Buttons_Reset": "Reset",
"Center": "Центр", "Center": "Центр",
"ComingSoon": "Скоро...", "ComingSoon": "Скоро...",
"ComposerFrom": "От: ", "ComposerFrom": "От: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Установить пользовательские обои", "CustomThemeBuilder_WallpaperTitle": "Установить пользовательские обои",
"DialogMessage_AccountLimitMessage": "Вы достигли предела создания учетной записи.\nХотите приобрести дополнение 'Неограниченная учетная запись', чтобы продолжить?", "DialogMessage_AccountLimitMessage": "Вы достигли предела создания учетной записи.\nХотите приобрести дополнение 'Неограниченная учетная запись', чтобы продолжить?",
"DialogMessage_AccountLimitTitle": "Достигнут лимит учетных записей", "DialogMessage_AccountLimitTitle": "Достигнут лимит учетных записей",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Вы хотите навсегда удалить все письма в этой папке?", "DialogMessage_CleanupFolderMessage": "Вы хотите навсегда удалить все письма в этой папке?",
"DialogMessage_CleanupFolderTitle": "Очистить папку", "DialogMessage_CleanupFolderTitle": "Очистить папку",
"DialogMessage_ComposerMissingRecipientMessage": "Сообщение не имеет получателя.", "DialogMessage_ComposerMissingRecipientMessage": "Сообщение не имеет получателя.",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Чтобы перестать получать сообщения от {0}, перейдите на их сайт и откажитесь от подписки.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "Чтобы перестать получать сообщения от {0}, перейдите на их сайт и откажитесь от подписки.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Перейти на сайт", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Перейти на сайт",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "Вы хотите перестать получать сообщения от {0}? Wino отпишется от рассылки за вас, отправив письмо с вашего почтового ящика на адрес {1}.", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "Вы хотите перестать получать сообщения от {0}? Wino отпишется от рассылки за вас, отправив письмо с вашего почтового ящика на адрес {1}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Больше не спрашивать", "Dialog_DontAskAgain": "Больше не спрашивать",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "У Wino нет собственного сервера Discord, но специальный канал 'wino-mail' размещен на сервере 'Developer Sanctuary'.\nЧтобы получать обновления о Wino, пожалуйста, присоединитесь к серверу Developer Sanctuary и следите за каналом 'wino-mail' в разделе 'Community Projects'.\n\nВы будете направлены на URL сервера, так как Discord не поддерживает приглашения на канал.", "DiscordChannelDisclaimerMessage": "У Wino нет собственного сервера Discord, но специальный канал 'wino-mail' размещен на сервере 'Developer Sanctuary'.\nЧтобы получать обновления о Wino, пожалуйста, присоединитесь к серверу Developer Sanctuary и следите за каналом 'wino-mail' в разделе 'Community Projects'.\n\nВы будете направлены на URL сервера, так как Discord не поддерживает приглашения на канал.",
"DiscordChannelDisclaimerTitle": "Важная информация о Discord", "DiscordChannelDisclaimerTitle": "Важная информация о Discord",
"Draft": "Черновик", "Draft": "Черновик",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Рисование", "EditorToolbarOption_Draw": "Рисование",
"EditorToolbarOption_Format": "Форматирование", "EditorToolbarOption_Format": "Форматирование",
"EditorToolbarOption_Insert": "Вставить", "EditorToolbarOption_Insert": "Вставить",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Светлая тема", "ElementTheme_Light": "Светлая тема",
"Emoji": "Эмодзи", "Emoji": "Эмодзи",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Не удалось найти настройки почтового ящика.", "Exception_ImapAutoDiscoveryFailed": "Не удалось найти настройки почтового ящика.",
"Exception_ImapClientPoolFailed": "Сбой пула клиентов IMAP.", "Exception_ImapClientPoolFailed": "Сбой пула клиентов IMAP.",
"Exception_AuthenticationCanceled": "Аутентификация отменена", "Exception_AuthenticationCanceled": "Аутентификация отменена",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "Необходимо указать название.", "Exception_CustomThemeMissingName": "Необходимо указать название.",
"Exception_CustomThemeMissingWallpaper": "Необходимо предоставить пользовательское фоновое изображение.", "Exception_CustomThemeMissingWallpaper": "Необходимо предоставить пользовательское фоновое изображение.",
"Exception_FailedToSynchronizeFolders": "Не удалось синхронизировать папки", "Exception_FailedToSynchronizeFolders": "Не удалось синхронизировать папки",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri пустой при активации.", "Exception_GoogleAuthCallbackNull": "Callback uri пустой при активации.",
"Exception_GoogleAuthCorruptedCode": "Поврежденный ответ авторизации.", "Exception_GoogleAuthCorruptedCode": "Поврежденный ответ авторизации.",
"Exception_GoogleAuthError": "Ошибка авторизации OAuth: {0}", "Exception_GoogleAuthError": "Ошибка авторизации OAuth: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "Ссылка недействительна. Не удалось отписаться от списка рассылки.", "Info_UnsubscribeLinkInvalidMessage": "Ссылка недействительна. Не удалось отписаться от списка рассылки.",
"Info_UnsubscribeSuccessMessage": "Вы отписались от {0}.", "Info_UnsubscribeSuccessMessage": "Вы отписались от {0}.",
"Info_UnsubscribeErrorMessage": "Не удалось отменить подписку", "Info_UnsubscribeErrorMessage": "Не удалось отменить подписку",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Метод авторизации", "ImapAdvancedSetupDialog_AuthenticationMethod": "Метод авторизации",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Безопасность соединения", "ImapAdvancedSetupDialog_ConnectionSecurity": "Безопасность соединения",
"ImapAuthenticationMethod_Auto": "Автоматически", "ImapAuthenticationMethod_Auto": "Автоматически",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Синхронизация папок", "SettingsFolderSync_Title": "Синхронизация папок",
"SettingsFolderOptions_Title": "Настройка папки", "SettingsFolderOptions_Title": "Настройка папки",
"SettingsFolderOptions_Description": "Измените настройки отдельных папок, например включите/выключите синхронизацию или покажите/скройте значок непрочитанного.", "SettingsFolderOptions_Description": "Измените настройки отдельных папок, например включите/выключите синхронизацию или покажите/скройте значок непрочитанного.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Кнопка по центру", "SettingsHoverActionCenter": "Кнопка по центру",
"SettingsHoverActionLeft": "Левая кнопка", "SettingsHoverActionLeft": "Левая кнопка",
"SettingsHoverActionRight": "Правая кнопка", "SettingsHoverActionRight": "Правая кнопка",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Язык и время", "SettingsLanguageTime_Title": "Язык и время",
"SettingsLanguageTime_Description": "Язык интерфейса приложения, предпочитаемый формат времени.", "SettingsLanguageTime_Description": "Язык интерфейса приложения, предпочитаемый формат времени.",
"CategoriesFolderNameOverride": "Категории", "CategoriesFolderNameOverride": "Категории",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "Ещё", "MoreFolderNameOverride": "Ещё",
"SettingsOptions_Title": "Параметры", "SettingsOptions_Title": "Параметры",
"SettingsLinkAccounts_Description": "Объедините несколько учетных записей в одну. Просматривайте письма из одной папки \"Входящие\".", "SettingsLinkAccounts_Description": "Объедините несколько учетных записей в одну. Просматривайте письма из одной папки \"Входящие\".",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "Вы еще не создали ни одной учетной записи.", "SettingsNoAccountSetupMessage": "Вы еще не создали ни одной учетной записи.",
"SettingsNotifications_Description": "Включите или отключите уведомления для этой учетной записи.", "SettingsNotifications_Description": "Включите или отключите уведомления для этой учетной записи.",
"SettingsNotifications_Title": "Уведомления", "SettingsNotifications_Title": "Уведомления",
"SettingsPaneLength_Description": "Измените ширину почтового списка.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Длина панели почтового списка", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Проявите больше любви ❤️ Все пожертвования высоко ценятся.", "SettingsPaypal_Description": "Проявите больше любви ❤️ Все пожертвования высоко ценятся.",
"SettingsPaypal_Title": "Пожертвовать через PayPal", "SettingsPaypal_Title": "Пожертвовать через PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Компактный режим", "SettingsPersonalizationMailDisplayCompactMode": "Компактный режим",

View File

@@ -1,55 +1,66 @@
{ {
"AccountCreationDialog_Completed": "all done", "AccountCreationDialog_Completed": "hepsi tamam",
"AccountCreationDialog_Initializing": "başlatılıyor", "AccountCreationDialog_Initializing": "başlatılıyor",
"AccountCreationDialog_PreparingFolders": "Klasör bilgileri yükleniyor.", "AccountCreationDialog_PreparingFolders": "Klasör bilgileri yükleniyor.",
"AccountCreationDialog_SigninIn": "Hesap bilgileri kaydediliyor.", "AccountCreationDialog_SigninIn": "Hesap bilgileri kaydediliyor.",
"AccountEditDialog_Message": "Account Name", "AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Hesap Adı",
"AccountEditDialog_Title": "Hesabı Düzenle", "AccountEditDialog_Title": "Hesabı Düzenle",
"AccountPickerDialog_Title": "Pick an account", "AccountPickerDialog_Title": "Bir hesap seçiniz",
"AccountSettingsDialog_AccountName": "Sender Display Name", "AccountSettingsDialog_AccountName": "nderen Adı",
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "örnek. Burak Köse",
"AddHyperlink": "Add", "AddHyperlink": "Ekle",
"AutoDiscoveryProgressMessage": "Searching for mail settings...", "AutoDiscoveryProgressMessage": "Sunucu ayarları aranıyor...",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Advanced Configuration", "AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Your credentials will only be stored locally on your computer.", "AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"BasicIMAPSetupDialog_Description": "Some accounts require additional steps to sign in", "AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"BasicIMAPSetupDialog_DisplayName": "Display Name", "AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"BasicIMAPSetupDialog_DisplayNamePlaceholder": "eg. John Doe", "AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"BasicIMAPSetupDialog_LearnMore": "Learn more", "AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"BasicIMAPSetupDialog_MailAddress": "E-Mail Address", "AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Gelişmiş Ayarlar",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Hassas bilgileriniz yalnızca kendi bilgisayarınızda saklanacak.",
"BasicIMAPSetupDialog_Description": "Bazı hesaplar ekstra adımlar gerektirebilir",
"BasicIMAPSetupDialog_DisplayName": "Görünen Ad",
"BasicIMAPSetupDialog_DisplayNamePlaceholder": "örnek. Burak Köse",
"BasicIMAPSetupDialog_LearnMore": "Daha fazla bilgi edinin",
"BasicIMAPSetupDialog_MailAddress": "E-Posta adresi",
"BasicIMAPSetupDialog_MailAddressPlaceholder": "johndoe@fabrikam.com", "BasicIMAPSetupDialog_MailAddressPlaceholder": "johndoe@fabrikam.com",
"BasicIMAPSetupDialog_Password": "Password", "BasicIMAPSetupDialog_Password": "Parola",
"BasicIMAPSetupDialog_Title": "IMAP Account", "BasicIMAPSetupDialog_Title": "IMAP Hesabı",
"Buttons_AddAccount": "Add Account", "Buttons_AddAccount": "Hesap Ekle",
"Buttons_ApplyTheme": "Apply Theme", "Buttons_AddNewAlias": "Add New Alias",
"Buttons_Browse": "Browse", "Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_Cancel": "Cancel", "Buttons_ApplyTheme": "Temayı Uygula",
"Buttons_Close": "Close", "Buttons_Browse": "Gözat",
"Buttons_Create": "Create", "Buttons_Cancel": "İptal Et",
"Buttons_CreateAccount": "Create Account", "Buttons_Close": "Kapat",
"Buttons_Copy": "Copy", "Buttons_Create": "Oluştur",
"Buttons_Delete": "Delete", "Buttons_CreateAccount": "Hesap Oluştur",
"Buttons_Edit": "Edit", "Buttons_Copy": "Kopyala",
"Buttons_Discard": "Discard", "Buttons_Delete": "Sil",
"Buttons_EnableImageRendering": "Enable", "Buttons_Edit": "Düzenle",
"Buttons_No": "No", "Buttons_Discard": "Vazgeç",
"Buttons_Open": "Open", "Buttons_EnableImageRendering": "Etkinleştir",
"Buttons_Purchase": "Purchase", "Buttons_No": "Hayır",
"Buttons_RateWino": "Rate Wino", "Buttons_Open": "Aç",
"Buttons_Save": "Save", "Buttons_Purchase": "Satın Al",
"Buttons_SaveConfiguration": "Save Configuration", "Buttons_RateWino": "Wino'yu Puanla",
"Buttons_Share": "Share", "Buttons_Save": "Kaydet",
"Buttons_SignIn": "Sign In", "Buttons_SaveConfiguration": "Ayarları Kaydet",
"Buttons_TryAgain": "Try Again", "Buttons_Share": "Paylaş",
"Buttons_Yes": "Yes", "Buttons_SignIn": "Oturum Aç",
"Center": "Center", "Buttons_TryAgain": "Tekrar Dene",
"ComingSoon": "Coming soon...", "Buttons_Yes": "Evet",
"ComposerFrom": "From: ", "Buttons_Reset": "Reset",
"ComposerSubject": "Subject: ", "Center": "Orta",
"ComposerTo": "To: ", "ComingSoon": "Yakında...",
"ClipboardTextCopied_Message": "{0} copied to clipboard.", "ComposerFrom": "Gönderen: ",
"ClipboardTextCopied_Title": "Copied", "ComposerSubject": "Konu: ",
"ClipboardTextCopyFailed_Message": "Failed to copy {0} to clipboard.", "ComposerTo": "Gönderilen: ",
"ClipboardTextCopied_Message": "\"{0}\" panoya kopyalandı.",
"ClipboardTextCopied_Title": "Kopyalandı",
"ClipboardTextCopyFailed_Message": "{0} kopyalanamadı.",
"ComposerToPlaceholder": "click enter to input addresses", "ComposerToPlaceholder": "click enter to input addresses",
"ComposerAttachmentsDropZone_Message": "Drop your files here", "ComposerAttachmentsDropZone_Message": "Drop your files here",
"ComposerImagesDropZone_Message": "Drop your images here", "ComposerImagesDropZone_Message": "Drop your images here",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Set custom wallpaper", "CustomThemeBuilder_WallpaperTitle": "Set custom wallpaper",
"DialogMessage_AccountLimitMessage": "You have reached the account creation limit.\nWould you like to purchase 'Unlimited Account' add-on to continue?", "DialogMessage_AccountLimitMessage": "You have reached the account creation limit.\nWould you like to purchase 'Unlimited Account' add-on to continue?",
"DialogMessage_AccountLimitTitle": "Account Limit Reached", "DialogMessage_AccountLimitTitle": "Account Limit Reached",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Do you want to permanently delete all the mails in this folder?", "DialogMessage_CleanupFolderMessage": "Do you want to permanently delete all the mails in this folder?",
"DialogMessage_CleanupFolderTitle": "Cleanup Folder", "DialogMessage_CleanupFolderTitle": "Cleanup Folder",
"DialogMessage_ComposerMissingRecipientMessage": "Message has no recipient.", "DialogMessage_ComposerMissingRecipientMessage": "Message has no recipient.",
@@ -73,8 +94,8 @@
"DialogMessage_DeleteAccountConfirmationMessage": "Delete {0}?", "DialogMessage_DeleteAccountConfirmationMessage": "Delete {0}?",
"DialogMessage_DeleteAccountConfirmationTitle": "All data associated with this account will be deleted from disk permanently.", "DialogMessage_DeleteAccountConfirmationTitle": "All data associated with this account will be deleted from disk permanently.",
"DialogMessage_DiscardDraftConfirmationMessage": "This draft will be discarded. Do you want to continue?", "DialogMessage_DiscardDraftConfirmationMessage": "This draft will be discarded. Do you want to continue?",
"DialogMessage_DiscardDraftConfirmationTitle": "Discard Draft", "DialogMessage_DiscardDraftConfirmationTitle": "Taslağı Sil",
"DialogMessage_HardDeleteConfirmationMessage": "Permanent Delete", "DialogMessage_HardDeleteConfirmationMessage": "Kalıcı Olarak Sil",
"DialogMessage_HardDeleteConfirmationTitle": "Message(s) will be permanently deleted. Do you want to continue?", "DialogMessage_HardDeleteConfirmationTitle": "Message(s) will be permanently deleted. Do you want to continue?",
"DialogMessage_NoAccountsForCreateMailMessage": "You don't have any accounts to create message from.", "DialogMessage_NoAccountsForCreateMailMessage": "You don't have any accounts to create message from.",
"DialogMessage_NoAccountsForCreateMailTitle": "Account Missing", "DialogMessage_NoAccountsForCreateMailTitle": "Account Missing",
@@ -84,17 +105,27 @@
"DialogMessage_UnlinkAccountsConfirmationTitle": "Unlink Accounts", "DialogMessage_UnlinkAccountsConfirmationTitle": "Unlink Accounts",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject", "DialogMessage_EmptySubjectConfirmation": "Missing Subject",
"DialogMessage_EmptySubjectConfirmationMessage": "Message has no subject. Do you want to continue?", "DialogMessage_EmptySubjectConfirmationMessage": "Message has no subject. Do you want to continue?",
"DialogMessage_RenameFolderTitle": "Rename Folder", "DialogMessage_RenameFolderTitle": "Klasörü Yeniden Adlandır",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder", "DialogMessage_RenameFolderMessage": "Enter new name for this folder",
"DialogMessage_UnsubscribeConfirmationTitle": "Unsubscribe", "DialogMessage_UnsubscribeConfirmationTitle": "Unsubscribe",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "Do you want to stop getting messages from {0}?", "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_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website",
"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}.", "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}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Don't ask again", "Dialog_DontAskAgain": "Don't ask again",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"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.", "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", "DiscordChannelDisclaimerTitle": "Important Discord Information",
"Draft": "Draft", "Draft": "Draft",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Draw", "EditorToolbarOption_Draw": "Draw",
"EditorToolbarOption_Format": "Format", "EditorToolbarOption_Format": "Format",
"EditorToolbarOption_Insert": "Insert", "EditorToolbarOption_Insert": "Insert",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Light mode", "ElementTheme_Light": "Light mode",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.", "Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.", "Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled", "Exception_AuthenticationCanceled": "Authentication canceled",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "You must provide a name.", "Exception_CustomThemeMissingName": "You must provide a name.",
"Exception_CustomThemeMissingWallpaper": "You must provide a custom background image.", "Exception_CustomThemeMissingWallpaper": "You must provide a custom background image.",
"Exception_FailedToSynchronizeFolders": "Failed to synchronize folders", "Exception_FailedToSynchronizeFolders": "Failed to synchronize folders",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.", "Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.",
"Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.", "Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.",
"Exception_GoogleAuthError": "OAuth authorization error: {0}", "Exception_GoogleAuthError": "OAuth authorization error: {0}",
@@ -161,11 +196,11 @@
"IMAPSetupDialog_AccountType": "Account type", "IMAPSetupDialog_AccountType": "Account type",
"IMAPSetupDialog_DisplayName": "Display Name", "IMAPSetupDialog_DisplayName": "Display Name",
"IMAPSetupDialog_DisplayNamePlaceholder": "eg. John Doe", "IMAPSetupDialog_DisplayNamePlaceholder": "eg. John Doe",
"IMAPSetupDialog_IncomingMailServer": "Incoming mail server", "IMAPSetupDialog_IncomingMailServer": "Gelen posta sunucusu",
"IMAPSetupDialog_IncomingMailServerPort": "Port", "IMAPSetupDialog_IncomingMailServerPort": "Port",
"IMAPSetupDialog_MailAddress": "Email address", "IMAPSetupDialog_MailAddress": "E-posta adresi",
"IMAPSetupDialog_MailAddressPlaceholder": "someone@example.com", "IMAPSetupDialog_MailAddressPlaceholder": "birisi@example.com",
"IMAPSetupDialog_OutgoingMailServer": "Outgoing (SMTP) mail server", "IMAPSetupDialog_OutgoingMailServer": "Giden Sunucu (SMTP) Adresi",
"IMAPSetupDialog_OutgoingMailServerPassword": "Outgoing server password", "IMAPSetupDialog_OutgoingMailServerPassword": "Outgoing server password",
"IMAPSetupDialog_OutgoingMailServerPort": "Port", "IMAPSetupDialog_OutgoingMailServerPort": "Port",
"IMAPSetupDialog_OutgoingMailServerRequireAuthentication": "Outgoing server requires authentication", "IMAPSetupDialog_OutgoingMailServerRequireAuthentication": "Outgoing server requires authentication",
@@ -177,7 +212,7 @@
"IMAPSetupDialog_UseSameConfig": "Use the same username and password for sending email", "IMAPSetupDialog_UseSameConfig": "Use the same username and password for sending email",
"IMAPSetupDialog_Username": "Username", "IMAPSetupDialog_Username": "Username",
"IMAPSetupDialog_UsernamePlaceholder": "johndoe, johndoe@fabrikam.com, domain/johndoe", "IMAPSetupDialog_UsernamePlaceholder": "johndoe, johndoe@fabrikam.com, domain/johndoe",
"IMAPSetupDialog_ConnectionFailedTitle": "Connection Failed", "IMAPSetupDialog_ConnectionFailedTitle": "Bağlantı Başarısız",
"IMAPSetupDialog_ConnectionFailedMessage": "IMAP connection failed.", "IMAPSetupDialog_ConnectionFailedMessage": "IMAP connection failed.",
"ImageRenderingDisabled": "Image rendering is disabled for this message.", "ImageRenderingDisabled": "Image rendering is disabled for this message.",
"InfoBarAction_Enable": "Enable", "InfoBarAction_Enable": "Enable",
@@ -191,7 +226,7 @@
"Info_AccountCreationFailedTitle": "Account Creation Failed", "Info_AccountCreationFailedTitle": "Account Creation Failed",
"Info_AccountDeletedMessage": "{0} is successfuly deleted.", "Info_AccountDeletedMessage": "{0} is successfuly deleted.",
"Info_AccountDeletedTitle": "Account Deleted", "Info_AccountDeletedTitle": "Account Deleted",
"Info_AccountIssueFixFailedTitle": "Failed", "Info_AccountIssueFixFailedTitle": "Başarısız oldu",
"Info_AccountIssueFixSuccessMessage": "Fixed all account issues.", "Info_AccountIssueFixSuccessMessage": "Fixed all account issues.",
"Info_AccountIssueFixSuccessTitle": "Success", "Info_AccountIssueFixSuccessTitle": "Success",
"Info_AttachmentOpenFailedMessage": "Can't open this attachment.", "Info_AttachmentOpenFailedMessage": "Can't open this attachment.",
@@ -253,68 +288,70 @@
"Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.", "Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.",
"Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.", "Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.",
"Info_UnsubscribeErrorMessage": "Failed to unsubscribe", "Info_UnsubscribeErrorMessage": "Failed to unsubscribe",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method", "ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security", "ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security",
"ImapAuthenticationMethod_Auto": "Auto", "ImapAuthenticationMethod_Auto": "Auto",
"ImapAuthenticationMethod_CramMD5": "CRAM-MD5", "ImapAuthenticationMethod_CramMD5": "CRAM-MD5",
"ImapAuthenticationMethod_DigestMD5": "DIGEST-MD5", "ImapAuthenticationMethod_DigestMD5": "DIGEST-MD5",
"ImapAuthenticationMethod_None": "No authentication", "ImapAuthenticationMethod_None": "Kimlik doğrulama yok",
"ImapAuthenticationMethod_Plain": "Normal password", "ImapAuthenticationMethod_Plain": "Normal password",
"ImapAuthenticationMethod_EncryptedPassword": "Encrypted password", "ImapAuthenticationMethod_EncryptedPassword": "Encrypted password",
"ImapAuthenticationMethod_Ntlm": "NTLM", "ImapAuthenticationMethod_Ntlm": "NTLM",
"ImapConnectionSecurity_None": "None", "ImapConnectionSecurity_None": "None",
"ImapConnectionSecurity_SslTls": "SSL/TLS", "ImapConnectionSecurity_SslTls": "SSL/TLS",
"ImapConnectionSecurity_StartTls": "STARTTLS", "ImapConnectionSecurity_StartTls": "STARTTLS",
"ImapConnectionSecurity_Auto": "Auto", "ImapConnectionSecurity_Auto": "Otomatik",
"Justify": "Justify", "Justify": "Yasla",
"Left": "Left", "Left": "Sol",
"Link": "Link", "Link": "Bağlantı",
"LinkedAccountsCreatePolicyMessage": "you must have at least 2 accounts to create link\nlink will be removed on save", "LinkedAccountsCreatePolicyMessage": "hesap bağlantısı oluşturabilmeniz için en az 2 adet hesap gerekli\nkaydet'e basıldığında hesap bağlantısı silinecektir",
"LinkedAccountsTitle": "Linked Accounts", "LinkedAccountsTitle": "Bağlı Hesaplar",
"MailOperation_AlwaysMoveFocused": "Always Move to Focused", "MailOperation_AlwaysMoveFocused": "Her Zaman Odaklanmış'a Taşı",
"MailOperation_AlwaysMoveOther": "Always Move to Other", "MailOperation_AlwaysMoveOther": "Her Zaman Diğer'e Taşı",
"MailOperation_Archive": "Archive", "MailOperation_Archive": "Arşivle",
"MailOperation_ClearFlag": "Clear flag", "MailOperation_ClearFlag": "Bayrağı sil",
"MailOperation_DarkEditor": "Dark", "MailOperation_DarkEditor": "Koyu",
"MailOperation_Delete": "Delete", "MailOperation_Delete": "Sil",
"MailOperation_ExportPDF": "Export to PDF", "MailOperation_ExportPDF": "PDF'e Aktar",
"MailOperation_Find": "Find", "MailOperation_Find": "Bul",
"MailOperation_Forward": "Forward", "MailOperation_Forward": "İlet",
"MailOperation_Ignore": "Ignore", "MailOperation_Ignore": "Yoksay",
"MailOperation_LightEditor": "Light", "MailOperation_LightEditor": "ık",
"MailOperation_MarkAsJunk": "Mark as junk", "MailOperation_MarkAsJunk": "Gereksiz olarak işaretle",
"MailOperation_MarkAsRead": "Mark as read", "MailOperation_MarkAsRead": "Okundu olarak işaretle",
"MailOperation_MarkAsUnread": "Mark as unread", "MailOperation_MarkAsUnread": "Okunmadı olarak işaretle",
"MailOperation_MarkNotJunk": "Mark as Not Junk", "MailOperation_MarkNotJunk": "Gerekli Olarak İşaretle",
"MailOperation_Move": "Move", "MailOperation_Move": "Taşı",
"MailOperation_MoveFocused": "Move to Focused", "MailOperation_MoveFocused": "Odaklanmış'a Taşı",
"MailOperation_MoveJunk": "Move to Junk", "MailOperation_MoveJunk": "Spam'e Taşı",
"MailOperation_MoveOther": "Move to Other", "MailOperation_MoveOther": "Diğer'e Taşı",
"MailOperation_Navigate": "Navigate", "MailOperation_Navigate": "Gezin",
"MailOperation_Print": "Print", "MailOperation_Print": "Yazdır",
"MailOperation_Reply": "Reply", "MailOperation_Reply": "Yanıtla",
"MailOperation_ReplyAll": "Reply all", "MailOperation_ReplyAll": "Tümünü yanıtla",
"MailOperation_SaveAs": "Save As", "MailOperation_SaveAs": "Farklı kaydet",
"MailOperation_SetFlag": "Set flag", "MailOperation_SetFlag": "Bayrak ekle",
"MailOperation_Unarchive": "Unarchive", "MailOperation_Unarchive": "Arşivden çıkar",
"MailOperation_Zoom": "Zoom", "MailOperation_Zoom": "Yakınlaştır",
"MailsSelected": "{0} item(s) selected", "MailsSelected": "{0} seçili",
"MarkFlagUnflag": "Mark as flagged/unflagged", "MarkFlagUnflag": "Bayrak ekle/kaldır",
"MarkReadUnread": "Mark as read/unread", "MarkReadUnread": "Okundu/okunmadı olarak işaretle",
"MenuManageAccounts": "Manage Accounts", "MenuManageAccounts": "Hesapları Yönet",
"MenuNewMail": "New Mail", "MenuNewMail": "Yeni Posta",
"MenuMergedAccountItemAccountsSuffix": " accounts", "MenuMergedAccountItemAccountsSuffix": " hesaplar",
"MenuRate": "Rate Wino", "MenuRate": "Wino'yu Puanla",
"MenuSettings": "Settings", "MenuSettings": "Ayarlar",
"MergedAccountsAvailableAccountsTitle": "Available Accounts", "MergedAccountsAvailableAccountsTitle": "Mevcut hesaplar",
"More": "More", "More": "Daha fazla",
"MoveMailDialog_InvalidFolderMessage": "{0} is not a valid folder for this mail.", "MoveMailDialog_InvalidFolderMessage": "{0} bu e-posta için geçersiz.",
"MoveMailDialog_Title": "Pick a folder", "MoveMailDialog_Title": "Bir klasör seçin",
"NewAccountDialog_AccountName": "Account Name", "NewAccountDialog_AccountName": "Hesap Adı",
"NewAccountDialog_AccountNameDefaultValue": "Personal", "NewAccountDialog_AccountNameDefaultValue": "Kişisel",
"NewAccountDialog_AccountNamePlaceholder": "eg. Personal Mail", "NewAccountDialog_AccountNamePlaceholder": "örnek. Kişisel Hesabım",
"NewAccountDialog_Title": "Add New Account", "NewAccountDialog_Title": "Yeni hesap ekle",
"NoMailSelected": "No message selected", "NoMailSelected": "İleti seçilmedi",
"NoMessageCrieteria": "No messages match your search criteria", "NoMessageCrieteria": "No messages match your search criteria",
"NoMessageEmptyFolder": "This folder is empty", "NoMessageEmptyFolder": "This folder is empty",
"Notifications_MultipleNotificationsMessage": "You have {0} new mails", "Notifications_MultipleNotificationsMessage": "You have {0} new mails",
@@ -365,56 +402,63 @@
"SettingsAutoSelectNextItem_Description": "Select the next item after you delete or move a mail.", "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_Description": "Create your own custom theme with custom wallpaper and accent color.",
"SettingsCustomTheme_Title": "Custom Theme", "SettingsCustomTheme_Title": "Custom Theme",
"SettingsConfigureSpecialFolders_Title": "Configure System Folders", "SettingsConfigureSpecialFolders_Title": "Sistem Klasörlerini Ayarla",
"SettingsConfigureSpecialFolders_Description": "Set folders with special functions. Folders such as Archive, Inbox, and Drafts are essential for Wino to function properly.", "SettingsConfigureSpecialFolders_Description": "Özel işlevleri olan klasörleri belirleyin. Arşiv, Gelen Kutusu ve Taslaklar Wino'nun düzgün çalışabilmesi için önemlidir.",
"SettingConfigureSpecialFolders_Button": "Configure", "SettingConfigureSpecialFolders_Button": "Ayarla",
"Error_FailedToSetupSystemFolders_Title": "Failed to setup system folders", "Error_FailedToSetupSystemFolders_Title": "Sistem klasörleri ayarlanamadı",
"SettingsDeleteAccount_Description": "Delete all e-mails and credentials associated with this account.", "SettingsDeleteAccount_Description": "Bu hesapa bağlı bütün bilgi ve e-postaları sil.",
"SettingsDeleteAccount_Title": "Delete this account", "SettingsDeleteAccount_Title": "Bu hesabı sil",
"SettingsDeleteProtection_Description": "Should Wino ask you for comfirmation every time you try to permanently delete a mail using Shift + Del keys?", "SettingsDeleteProtection_Description": "Wino her seferinde Shift + Del tuşlarıyla kalıcı olarak silmek istediğiniz e-postalar için uyarı mesajı göstersin mi?",
"SettingsDeleteProtection_Title": "Permanent Delete Protection", "SettingsDeleteProtection_Title": "Kalıcı Silme Koruması",
"SettingsDiagnostics_Description": "For developers", "SettingsDiagnostics_Description": "Geliştiriciler için",
"SettingsDiagnostics_Title": "Diagnostics", "SettingsDiagnostics_Title": "Teşhis",
"SettingsDiscord_Description": "Get regular development updates, join roadmap discussions and provide feedback.", "SettingsDiscord_Description": "Güncel geliştirme güncellemelerini öğrenin. Yeni fikirler sunun ve geribildirim sağlayın.",
"SettingsDiscord_Title": "Discord Channel", "SettingsDiscord_Title": "Discord Kanalı",
"SettingsElementThemeSelectionDisabled": "Element theme selection is disabled when application theme is selected other than Default.", "SettingsElementThemeSelectionDisabled": "Uygulama teması 'Varsayılan' dışında ayarlandığında element temaları aktif değildir.",
"SettingsElementTheme_Description": "Select a Windows theme for Wino", "SettingsElementTheme_Description": "Wino için bir Windows teması seçin",
"SettingsElementTheme_Title": "Element Theme", "SettingsElementTheme_Title": "Element Teması",
"SettingsEnableHoverActions_Title": "Enable hover actions", "SettingsEnableHoverActions_Title": "Üzerine gelme eylemlerini aktifleştir",
"SettingsEnableIMAPLogs_Description": "Enable this to provide details about IMAP connectivity issuses you had during IMAP server setup.", "SettingsEnableIMAPLogs_Description": "IMAP hesap oluştururken karşılaştığınız hatalar ile ilgili detayları aktlfleştirmek için bunu açınız.",
"SettingsEnableIMAPLogs_Title": "Enable IMAP Protocol Logs", "SettingsEnableIMAPLogs_Title": "IMAP protokol loglarını aktifleştir",
"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_Description": "Uygulama kapanmalarını teşhis etmek için loglara ihtiyacım olabilir. Hiçbir log sizin kişisel bilgilerinizi ya da hesap parolalarınızı barındırmaz.",
"SettingsEnableLogs_Title": "Enable Logs", "SettingsEnableLogs_Title": "Logları Aktifleştir",
"SettingsEnableSignature": "Enable Signature", "SettingsEnableSignature": "İmzayı Etkinleştir",
"SettingsExpandOnStartup_Description": "Set whether Wino should expand this account's folders on startup.", "SettingsExpandOnStartup_Description": "Uygulama açıldığında bu hesabın genişletilip genişletilmemesini belirleyin.",
"SettingsExpandOnStartup_Title": "Expand Menu on Startup", "SettingsExpandOnStartup_Title": "ılışta Genişlet",
"SettingsExternalContent_Description": "Manage external content settings when rendering mails.", "SettingsExternalContent_Description": "E-posta açılırken dış içerikleri yönet.",
"SettingsExternalContent_Title": "External Content", "SettingsExternalContent_Title": "Dış İçerikler",
"SettingsFocusedInbox_Description": "Set whether Inbox should be split into two as Focused - Other.", "SettingsFocusedInbox_Description": "Gelen Kutusu'nu Odaklanmış ve Diğer olarak ayrıştarılmasını kontrol edin.",
"SettingsFocusedInbox_Title": "Focused Inbox", "SettingsFocusedInbox_Title": "Odaklanmış Gelen Kutusu",
"SettingsFolderSync_Description": "Enable or disable specific folders for synchronization.", "SettingsFolderSync_Description": "Bazı klasörler için senkronizasyonu açın veya kapatın.",
"SettingsFolderSync_Title": "Folder Synchronization", "SettingsFolderSync_Title": "Klasör Senkronizasyonu",
"SettingsFolderOptions_Title": "Folder Configuration", "SettingsFolderOptions_Title": "Klasör Yapılandırması",
"SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.", "SettingsFolderOptions_Description": "Bazı klasörler için senkronizasyon ya da okunmamış posta bildirimlerini açma/kapatma gibi ayarları kontrol edin.",
"SettingsHoverActionCenter": "Center Action", "SettingsManageAliases_Title": "Aliases",
"SettingsHoverActionLeft": "Left Action", "SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionRight": "Right Action", "SettingsHoverActionCenter": "Orta Aksiyon",
"SettingsHoverActions_Description": "Select 3 actions to show up when you hover over the mails with cursor.", "SettingsHoverActionLeft": "Sol Aksiyon",
"SettingsHoverActions_Title": "Hover Actions", "SettingsHoverActionRight": "Sağ Aksiyon",
"SettingsLanguage_Description": "Change display language for Wino.", "SettingsHoverActions_Description": "Postaların üzerine gelilndiğinde hızlı aksiyon tuşlarını belirlemek için 3 adet aksiyon seçin.",
"SettingsLanguage_Title": "Display Language", "SettingsHoverActions_Title": "Hızlı Aksiyonlar",
"SettingsLanguageTime_Title": "Language & Time", "SettingsLanguage_Description": "Dili değiştirin.",
"SettingsLanguageTime_Description": "Wino display language, preferred time format.", "SettingsLanguage_Title": "Görüntüleme Dili",
"CategoriesFolderNameOverride": "Categories", "SettingsLanguageTime_Title": "Dil ve Zaman",
"MoreFolderNameOverride": "More", "SettingsLanguageTime_Description": "Uygulama dili ve tercih edilen zaman gösterimi.",
"SettingsOptions_Title": "Settings", "CategoriesFolderNameOverride": "Kategoriler",
"SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.", "AccountAlias_Column_Verified": "Verified",
"SettingsLinkAccounts_Title": "Create Linked Accounts", "AccountAlias_Column_Alias": "Alias",
"SettingsLinkedAccountsSave_Description": "Modify the current link with the new accounts.", "AccountAlias_Column_IsPrimaryAlias": "Primary",
"SettingsLinkedAccountsSave_Title": "Save Changes", "AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"SettingsLoadImages_Title": "Load images automatically", "AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"SettingsLoadStyles_Title": "Load styles automatically", "MoreFolderNameOverride": "Daha fazla",
"SettingsMailSpacing_Description": "Adjust the spacing for listing mails.", "SettingsOptions_Title": "Ayarlar",
"SettingsLinkAccounts_Description": "Birden fazla hesabı birbirine bağlayarak beraber kullanın.",
"SettingsLinkAccounts_Title": "Bağlantılı Hesap Oluştur",
"SettingsLinkedAccountsSave_Description": "Yeni bağlantılı hesap birleştirmesini düzenleyin.",
"SettingsLinkedAccountsSave_Title": "Değişiklikleri Kaydet",
"SettingsLoadImages_Title": "Resimleri otomatik olarak yükle",
"SettingsLoadStyles_Title": "Stilleri otomatik olarak yükle",
"SettingsMailSpacing_Description": "E-postalar arasındaki boşluğu ayarlayın.",
"SettingsMailSpacing_Title": "Mail Spacing", "SettingsMailSpacing_Title": "Mail Spacing",
"SettingsFolderMenuStyle_Title": "Create Nested Folders", "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", "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",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.", "SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.",
"SettingsNotifications_Description": "Turn on or off notifications for this account.", "SettingsNotifications_Description": "Turn on or off notifications for this account.",
"SettingsNotifications_Title": "Notifications", "SettingsNotifications_Title": "Notifications",
"SettingsPaneLength_Description": "Change the width of the mail list.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Mail List Pane Length", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.", "SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.",
"SettingsPaypal_Title": "Donate via PayPal", "SettingsPaypal_Title": "Donate via PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Compact Mode", "SettingsPersonalizationMailDisplayCompactMode": "Compact Mode",
@@ -465,56 +509,56 @@
"SettingsReadComposePane_Title": "Reader & Composer", "SettingsReadComposePane_Title": "Reader & Composer",
"SettingsReaderFont_Title": "Default Reader Font", "SettingsReaderFont_Title": "Default Reader Font",
"SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.", "SettingsReaderFontFamily_Description": "Change the default font family and font size for reading mails.",
"SettingsFontFamily_Title": "Font Family", "SettingsFontFamily_Title": "Yazı Tipi",
"SettingsFontSize_Title": "Font Size", "SettingsFontSize_Title": "Yazı Boyutu",
"SettingsFontPreview_Title": "Preview", "SettingsFontPreview_Title": "Önizleme",
"SettingsComposerFont_Title": "Default Composer Font", "SettingsComposerFont_Title": "Varsayılan Editör Yazı Tipi",
"SettingsComposerFontFamily_Description": "Change the default font family and font size for composing mails.", "SettingsComposerFontFamily_Description": "E-posta oluştururken kullanılan yazı tipini değiştirin.",
"SettingsRenameMergeAccount_Description": "Change the display name of the linked accounts.", "SettingsRenameMergeAccount_Description": "Bağlı hesabın adını değiştirin.",
"SettingsRenameMergeAccount_Title": "Rename", "SettingsRenameMergeAccount_Title": "Yeniden adlandır",
"SettingsSemanticZoom_Description": "This will allow you to click on the headers in messages list and go to specific date", "SettingsSemanticZoom_Description": "Bu seçenek e-postaların tarihlerine tıklayarak o tarihe ait mesajları görüntülemenizi sağlar",
"SettingsSemanticZoom_Title": "Semantic Zoom for Date Headers", "SettingsSemanticZoom_Title": "Tarih Başlıkları için Semantik Yakınlaştırma",
"SettingsShowPreviewText_Description": "Hide/show thepreview text.", "SettingsShowPreviewText_Description": "Önizlemeyi aç/kapat.",
"SettingsShowPreviewText_Title": "Show Preview Text", "SettingsShowPreviewText_Title": "Önizleme",
"SettingsShowSenderPictures_Description": "Hide/show the thumbnail sender pictures.", "SettingsShowSenderPictures_Description": "Gönderen resmini göster/gösterme.",
"SettingsShowSenderPictures_Title": "Show Sender Avatars", "SettingsShowSenderPictures_Title": "Gönderen Resimleri",
"SettingsPrefer24HourClock_Title": "Display Clock Format in 24 Hours", "SettingsPrefer24HourClock_Title": "24 saatlik format",
"SettingsPrefer24HourClock_Description": "Mail recieve times will be displayed in 24 hour format instead of 12 (AM/PM)", "SettingsPrefer24HourClock_Description": "E-posta gönderim tarihleri 24 saatlik zaman diliminde gösterilecektir",
"SettingsSignature_Description": "Manage account signatures", "SettingsSignature_Description": "Hesap imzalarını ayarla",
"SettingsSignature_Title": "Signature", "SettingsSignature_Title": "İmza",
"SettingsStartupItem_Description": "Primary account item to load Inbox at startup.", "SettingsStartupItem_Description": "Uygulama açıldığında Gelen Kutusu'na gidilecek hesap.",
"SettingsStartupItem_Title": "Startup Item", "SettingsStartupItem_Title": "Başlangıç Hesabı",
"SettingsStore_Description": "Show some love ❤️", "SettingsStore_Description": "Biraz sevgi gösterin ❤️",
"SettingsStore_Title": "Rate in Store", "SettingsStore_Title": "Mağaza'da Puanla",
"SettingsThreads_Description": "Organize messages into conversation threads.", "SettingsThreads_Description": "Bağlı mesajları tek bir liste halinde kategorize eder.",
"SettingsThreads_Title": "Conversation Threading", "SettingsThreads_Title": "Mesaj Gruplama",
"SettingsUnlinkAccounts_Description": "Remove the link between accounts. This will not delete your accounts.", "SettingsUnlinkAccounts_Description": "Hesap bağlantısını koparın. Bu işlem hesaplarınızı silmez.",
"SettingsUnlinkAccounts_Title": "Unlink Accounts", "SettingsUnlinkAccounts_Title": "Hesap Bağlantısını Kopar",
"SortingOption_Date": "by date", "SortingOption_Date": "tarihe göre",
"SortingOption_Name": "by name", "SortingOption_Name": "isme göre",
"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_MessageFirstLine": "Bütün geribildirimler benim için değerlidir. Microsoft Mağaza'da Wino'yu puanlamak ister misiniz?",
"StoreRatingDialog_MessageSecondLine": "Would you like to rate Wino Mail in Microsoft Store?", "StoreRatingDialog_MessageSecondLine": "Mıcrosoft Mağaza'da Wino'yu puanlamak ister misiniz?",
"StoreRatingDialog_Title": "Enjoying Wino?", "StoreRatingDialog_Title": "Wino'dan keyif alıyor musunuz?",
"SystemFolderConfigDialog_ArchiveFolderDescription": "Archived messages will be moved to here.", "SystemFolderConfigDialog_ArchiveFolderDescription": "Arşivlenmiş postalar buraya taşınacaktır.",
"SystemFolderConfigDialog_ArchiveFolderHeader": "Archive Folder", "SystemFolderConfigDialog_ArchiveFolderHeader": "Arşiv Klasörü",
"SystemFolderConfigDialog_DeletedFolderDescription": "Deleted messages will be moved to here.", "SystemFolderConfigDialog_DeletedFolderDescription": "Silinmiş mesajlar buraya taşınacaktır.",
"SystemFolderConfigDialog_DeletedFolderHeader": "Deleted Folder", "SystemFolderConfigDialog_DeletedFolderHeader": "Silinmiş Klasörü",
"SystemFolderConfigDialog_DraftFolderDescription": "New mails/replies will be crafted in here.", "SystemFolderConfigDialog_DraftFolderDescription": "Yeni postalar burada oluşturulacaktır.",
"SystemFolderConfigDialog_DraftFolderHeader": "Draft Folder", "SystemFolderConfigDialog_DraftFolderHeader": "Taslaklar Klasörü",
"SystemFolderConfigDialog_JunkFolderDescription": "All spam/junk mails will be here.", "SystemFolderConfigDialog_JunkFolderDescription": "Bütün gereksiz mesajlar buraya taşınacaktır.",
"SystemFolderConfigDialog_JunkFolderHeader": "Junk/Spam Folder", "SystemFolderConfigDialog_JunkFolderHeader": "Gereksiz (Spam) Klasörü",
"SystemFolderConfigDialog_MessageFirstLine": "This IMAP server doesn't support SPECIAL-USE extension hence Wino couldn't setup the system folders properly.", "SystemFolderConfigDialog_MessageFirstLine": "Bu IMAP sunucusu SPECIAL-USE eklentisini desteklemiyor. Bu nedenle Wino sistem klasörlerini otomatik olarak ayarlayamadı.",
"SystemFolderConfigDialog_MessageSecondLine": "Please select the appropriate folders for specific functionalities.", "SystemFolderConfigDialog_MessageSecondLine": "Lütfen özel işlevler için klasörleri belirleyin.",
"SystemFolderConfigDialog_SentFolderDescription": "Folder that sent messages will be stored.", "SystemFolderConfigDialog_SentFolderDescription": "Gönderilmiş mesajlar burada toplanacaktır.",
"SystemFolderConfigDialog_SentFolderHeader": "Sent Folder", "SystemFolderConfigDialog_SentFolderHeader": "Gönderilenler Klasörü",
"SystemFolderConfigDialog_Title": "Configure System Folders", "SystemFolderConfigDialog_Title": "Sistem Klasörlerini Ayarlayın",
"SystemFolderConfigDialogValidation_InboxSelected": "You can't assign Inbox folder to any other system folder.", "SystemFolderConfigDialogValidation_InboxSelected": "Gelen Kutusu'nu başka bir sistem klasörü olarak seçemezsiniz.",
"SystemFolderConfigDialogValidation_DuplicateSystemFolders": "Some of the system folders are used more than once in the configuration.", "SystemFolderConfigDialogValidation_DuplicateSystemFolders": "Bazı sistem klasörleri birden fazla işlevle kullanılamaz.",
"SystemFolderConfigSetupSuccess_Title": "System Folders Setup", "SystemFolderConfigSetupSuccess_Title": "Sistem Klasörleri Ayarlaması",
"SystemFolderConfigSetupSuccess_Message": "System folders are successfully configured.", "SystemFolderConfigSetupSuccess_Message": "Sistem klasörleri başarıyla ayarlandı.",
"TestingImapConnectionMessage": "Testing server connection...", "TestingImapConnectionMessage": "Sunucu bağlantısı kontrol ediliyor...",
"Today": "Today", "Today": "Bugün",
"UnknownAddress": "unknown address", "UnknownAddress": "bilinmeyen adres",
"UnknownDateHeader": "Unknown Date", "UnknownDateHeader": "Unknown Date",
"UnknownGroupAddress": "unknown Mail Group Address", "UnknownGroupAddress": "unknown Mail Group Address",
"UnknownSender": "Unknown Sender", "UnknownSender": "Unknown Sender",

View File

@@ -3,6 +3,7 @@
"AccountCreationDialog_Initializing": "initializing", "AccountCreationDialog_Initializing": "initializing",
"AccountCreationDialog_PreparingFolders": "We are getting folder information at the moment.", "AccountCreationDialog_PreparingFolders": "We are getting folder information at the moment.",
"AccountCreationDialog_SigninIn": "Account information is being saved.", "AccountCreationDialog_SigninIn": "Account information is being saved.",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "Account Name", "AccountEditDialog_Message": "Account Name",
"AccountEditDialog_Title": "Edit Account", "AccountEditDialog_Title": "Edit Account",
"AccountPickerDialog_Title": "Pick an account", "AccountPickerDialog_Title": "Pick an account",
@@ -10,6 +11,13 @@
"AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "eg. John Doe",
"AddHyperlink": "Add", "AddHyperlink": "Add",
"AutoDiscoveryProgressMessage": "Searching for mail settings...", "AutoDiscoveryProgressMessage": "Searching for mail settings...",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "Advanced Configuration", "BasicIMAPSetupDialog_AdvancedConfiguration": "Advanced Configuration",
"BasicIMAPSetupDialog_CredentialLocalMessage": "Your credentials will only be stored locally on your computer.", "BasicIMAPSetupDialog_CredentialLocalMessage": "Your credentials will only be stored locally on your computer.",
"BasicIMAPSetupDialog_Description": "Some accounts require additional steps to sign in", "BasicIMAPSetupDialog_Description": "Some accounts require additional steps to sign in",
@@ -21,6 +29,8 @@
"BasicIMAPSetupDialog_Password": "Password", "BasicIMAPSetupDialog_Password": "Password",
"BasicIMAPSetupDialog_Title": "IMAP Account", "BasicIMAPSetupDialog_Title": "IMAP Account",
"Buttons_AddAccount": "Add Account", "Buttons_AddAccount": "Add Account",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "Apply Theme", "Buttons_ApplyTheme": "Apply Theme",
"Buttons_Browse": "Browse", "Buttons_Browse": "Browse",
"Buttons_Cancel": "Cancel", "Buttons_Cancel": "Cancel",
@@ -42,6 +52,7 @@
"Buttons_SignIn": "Sign In", "Buttons_SignIn": "Sign In",
"Buttons_TryAgain": "Try Again", "Buttons_TryAgain": "Try Again",
"Buttons_Yes": "Yes", "Buttons_Yes": "Yes",
"Buttons_Reset": "Reset",
"Center": "Center", "Center": "Center",
"ComingSoon": "Coming soon...", "ComingSoon": "Coming soon...",
"ComposerFrom": "From: ", "ComposerFrom": "From: ",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "Set custom wallpaper", "CustomThemeBuilder_WallpaperTitle": "Set custom wallpaper",
"DialogMessage_AccountLimitMessage": "You have reached the account creation limit.\nWould you like to purchase 'Unlimited Account' add-on to continue?", "DialogMessage_AccountLimitMessage": "You have reached the account creation limit.\nWould you like to purchase 'Unlimited Account' add-on to continue?",
"DialogMessage_AccountLimitTitle": "Account Limit Reached", "DialogMessage_AccountLimitTitle": "Account Limit Reached",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "Do you want to permanently delete all the mails in this folder?", "DialogMessage_CleanupFolderMessage": "Do you want to permanently delete all the mails in this folder?",
"DialogMessage_CleanupFolderTitle": "Cleanup Folder", "DialogMessage_CleanupFolderTitle": "Cleanup Folder",
"DialogMessage_ComposerMissingRecipientMessage": "Message has no recipient.", "DialogMessage_ComposerMissingRecipientMessage": "Message has no recipient.",
@@ -91,10 +112,20 @@
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "To stop getting messages from {0}, go to their website to unsubscribe.",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "Go to website",
"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}.", "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}.",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "Don't ask again", "Dialog_DontAskAgain": "Don't ask again",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"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.", "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", "DiscordChannelDisclaimerTitle": "Important Discord Information",
"Draft": "Draft", "Draft": "Draft",
"Busy": "Busy",
"EditorToolbarOption_Draw": "Draw", "EditorToolbarOption_Draw": "Draw",
"EditorToolbarOption_Format": "Format", "EditorToolbarOption_Format": "Format",
"EditorToolbarOption_Insert": "Insert", "EditorToolbarOption_Insert": "Insert",
@@ -106,6 +137,7 @@
"ElementTheme_Light": "Light mode", "ElementTheme_Light": "Light mode",
"Emoji": "Emoji", "Emoji": "Emoji",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino server failed.",
"Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.", "Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.",
"Exception_ImapClientPoolFailed": "IMAP Client Pool failed.", "Exception_ImapClientPoolFailed": "IMAP Client Pool failed.",
"Exception_AuthenticationCanceled": "Authentication canceled", "Exception_AuthenticationCanceled": "Authentication canceled",
@@ -113,6 +145,9 @@
"Exception_CustomThemeMissingName": "You must provide a name.", "Exception_CustomThemeMissingName": "You must provide a name.",
"Exception_CustomThemeMissingWallpaper": "You must provide a custom background image.", "Exception_CustomThemeMissingWallpaper": "You must provide a custom background image.",
"Exception_FailedToSynchronizeFolders": "Failed to synchronize folders", "Exception_FailedToSynchronizeFolders": "Failed to synchronize folders",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.", "Exception_GoogleAuthCallbackNull": "Callback uri is null on activation.",
"Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.", "Exception_GoogleAuthCorruptedCode": "Corrupted authorization response.",
"Exception_GoogleAuthError": "OAuth authorization error: {0}", "Exception_GoogleAuthError": "OAuth authorization error: {0}",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.", "Info_UnsubscribeLinkInvalidMessage": "This unsubscribe link is invalid. Failed to unsubscribe from the list.",
"Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.", "Info_UnsubscribeSuccessMessage": "Successfully unsubscribed from {0}.",
"Info_UnsubscribeErrorMessage": "Failed to unsubscribe", "Info_UnsubscribeErrorMessage": "Failed to unsubscribe",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method", "ImapAdvancedSetupDialog_AuthenticationMethod": "Authentication method",
"ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security", "ImapAdvancedSetupDialog_ConnectionSecurity": "Connection security",
"ImapAuthenticationMethod_Auto": "Auto", "ImapAuthenticationMethod_Auto": "Auto",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "Folder Synchronization", "SettingsFolderSync_Title": "Folder Synchronization",
"SettingsFolderOptions_Title": "Folder Configuration", "SettingsFolderOptions_Title": "Folder Configuration",
"SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.", "SettingsFolderOptions_Description": "Change individual folder settings like enable/disable sync or show/hide unread badge.",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "Center Action", "SettingsHoverActionCenter": "Center Action",
"SettingsHoverActionLeft": "Left Action", "SettingsHoverActionLeft": "Left Action",
"SettingsHoverActionRight": "Right Action", "SettingsHoverActionRight": "Right Action",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "Language & Time", "SettingsLanguageTime_Title": "Language & Time",
"SettingsLanguageTime_Description": "Wino display language, preferred time format.", "SettingsLanguageTime_Description": "Wino display language, preferred time format.",
"CategoriesFolderNameOverride": "Categories", "CategoriesFolderNameOverride": "Categories",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "More", "MoreFolderNameOverride": "More",
"SettingsOptions_Title": "Settings", "SettingsOptions_Title": "Settings",
"SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.", "SettingsLinkAccounts_Description": "Merge multiple accounts into one. See mails from one Inbox together.",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.", "SettingsNoAccountSetupMessage": "You didn't setup any accounts yet.",
"SettingsNotifications_Description": "Turn on or off notifications for this account.", "SettingsNotifications_Description": "Turn on or off notifications for this account.",
"SettingsNotifications_Title": "Notifications", "SettingsNotifications_Title": "Notifications",
"SettingsPaneLength_Description": "Change the width of the mail list.", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "Mail List Pane Length", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.", "SettingsPaypal_Description": "Show much more love ❤️ All donations are appreciated.",
"SettingsPaypal_Title": "Donate via PayPal", "SettingsPaypal_Title": "Donate via PayPal",
"SettingsPersonalizationMailDisplayCompactMode": "Compact Mode", "SettingsPersonalizationMailDisplayCompactMode": "Compact Mode",

View File

@@ -3,13 +3,21 @@
"AccountCreationDialog_Initializing": "正在初始化", "AccountCreationDialog_Initializing": "正在初始化",
"AccountCreationDialog_PreparingFolders": "我们正在获取文件夹信息。", "AccountCreationDialog_PreparingFolders": "我们正在获取文件夹信息。",
"AccountCreationDialog_SigninIn": "正在保存账户信息。", "AccountCreationDialog_SigninIn": "正在保存账户信息。",
"AccountCreationDialog_FetchingProfileInformation": "Fetching profile details.",
"AccountEditDialog_Message": "账户名称", "AccountEditDialog_Message": "账户名称",
"AccountEditDialog_Title": "编辑账户", "AccountEditDialog_Title": "编辑账户",
"AccountPickerDialog_Title": "选择账户", "AccountPickerDialog_Title": "选择账户",
"AccountSettingsDialog_AccountName": "Sender Display Name", "AccountSettingsDialog_AccountName": "发件人名称",
"AccountSettingsDialog_AccountNamePlaceholder": "例如: John Doe", "AccountSettingsDialog_AccountNamePlaceholder": "例如: John Doe",
"AddHyperlink": "添加", "AddHyperlink": "添加",
"AutoDiscoveryProgressMessage": "正在搜索邮件设置…", "AutoDiscoveryProgressMessage": "正在搜索邮件设置…",
"AppCloseBackgroundSynchronizationWarningTitle": "Background Synchronization",
"AppCloseTerminateBehaviorWarningMessageFirstLine": "You are terminating Wino Mail and your app close behavior is set to 'Terminate'.",
"AppCloseTerminateBehaviorWarningMessageSecondLine": "This will stop all background synchronizations and notifications.",
"AppCloseTerminateBehaviorWarningMessageThirdLine": "Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?",
"AppCloseStartupLaunchDisabledWarningMessageFirstLine": "Application has not been set to launch on Windows startup.",
"AppCloseStartupLaunchDisabledWarningMessageSecondLine": "This will cause you to miss notifications when you restart your computer.",
"AppCloseStartupLaunchDisabledWarningMessageThirdLine": "Do you want to go to App Preferences page to enable it?",
"BasicIMAPSetupDialog_AdvancedConfiguration": "高级设置", "BasicIMAPSetupDialog_AdvancedConfiguration": "高级设置",
"BasicIMAPSetupDialog_CredentialLocalMessage": "您的凭据将仅存储在您的计算机上。", "BasicIMAPSetupDialog_CredentialLocalMessage": "您的凭据将仅存储在您的计算机上。",
"BasicIMAPSetupDialog_Description": "部分账户需要额外的登录步骤", "BasicIMAPSetupDialog_Description": "部分账户需要额外的登录步骤",
@@ -21,13 +29,15 @@
"BasicIMAPSetupDialog_Password": "密码", "BasicIMAPSetupDialog_Password": "密码",
"BasicIMAPSetupDialog_Title": "IMAP 账户", "BasicIMAPSetupDialog_Title": "IMAP 账户",
"Buttons_AddAccount": "添加账户", "Buttons_AddAccount": "添加账户",
"Buttons_AddNewAlias": "Add New Alias",
"Buttons_SyncAliases": "Synchronize Aliases",
"Buttons_ApplyTheme": "应用主题", "Buttons_ApplyTheme": "应用主题",
"Buttons_Browse": "浏览", "Buttons_Browse": "浏览",
"Buttons_Cancel": "取消", "Buttons_Cancel": "取消",
"Buttons_Close": "关闭", "Buttons_Close": "关闭",
"Buttons_Create": "创建", "Buttons_Create": "创建",
"Buttons_CreateAccount": "添加账户", "Buttons_CreateAccount": "添加账户",
"Buttons_Copy": "Copy", "Buttons_Copy": "复制",
"Buttons_Delete": "删除", "Buttons_Delete": "删除",
"Buttons_Edit": "编辑", "Buttons_Edit": "编辑",
"Buttons_Discard": "放弃", "Buttons_Discard": "放弃",
@@ -40,8 +50,9 @@
"Buttons_SaveConfiguration": "保存设置", "Buttons_SaveConfiguration": "保存设置",
"Buttons_Share": "分享", "Buttons_Share": "分享",
"Buttons_SignIn": "登录", "Buttons_SignIn": "登录",
"Buttons_TryAgain": "Try Again", "Buttons_TryAgain": "重试",
"Buttons_Yes": "是", "Buttons_Yes": "是",
"Buttons_Reset": "Reset",
"Center": "中心", "Center": "中心",
"ComingSoon": "即将到来...", "ComingSoon": "即将到来...",
"ComposerFrom": "来自: ", "ComposerFrom": "来自: ",
@@ -51,8 +62,8 @@
"ClipboardTextCopied_Title": "已复制", "ClipboardTextCopied_Title": "已复制",
"ClipboardTextCopyFailed_Message": "无法将 {0} 复制到剪贴板。", "ClipboardTextCopyFailed_Message": "无法将 {0} 复制到剪贴板。",
"ComposerToPlaceholder": "点击输入地址", "ComposerToPlaceholder": "点击输入地址",
"ComposerAttachmentsDropZone_Message": "Drop your files here", "ComposerAttachmentsDropZone_Message": "将文件拖放至此",
"ComposerImagesDropZone_Message": "Drop your images here", "ComposerImagesDropZone_Message": "将图片拖放至此",
"ComposerAttachmentsDragDropAttach_Message": "附件", "ComposerAttachmentsDragDropAttach_Message": "附件",
"CustomThemeBuilder_AccentColorDescription": "设置自定义颜色。若未选择颜色,将使用 Windows 默认颜色。", "CustomThemeBuilder_AccentColorDescription": "设置自定义颜色。若未选择颜色,将使用 Windows 默认颜色。",
"CustomThemeBuilder_AccentColorTitle": "主题色", "CustomThemeBuilder_AccentColorTitle": "主题色",
@@ -64,6 +75,16 @@
"CustomThemeBuilder_WallpaperTitle": "设置自定义壁纸", "CustomThemeBuilder_WallpaperTitle": "设置自定义壁纸",
"DialogMessage_AccountLimitMessage": "您已达到免费用户可创建账户数量上限3个。\n是否购买支持作者以“解除可创建账户数量上限”", "DialogMessage_AccountLimitMessage": "您已达到免费用户可创建账户数量上限3个。\n是否购买支持作者以“解除可创建账户数量上限”",
"DialogMessage_AccountLimitTitle": "已达到账户限制", "DialogMessage_AccountLimitTitle": "已达到账户限制",
"DialogMessage_AliasNotSelectedTitle": "Missing Alias",
"DialogMessage_AliasNotSelectedMessage": "You must select an alias before sending a message.",
"DialogMessage_AliasExistsTitle": "Existing Alias",
"DialogMessage_AliasExistsMessage": "This alias is already in use.",
"DialogMessage_InvalidAliasTitle": "Invalid Alias",
"DialogMessage_InvalidAliasMessage": "This alias is not valid. Make sure all addresses of the alias are valid e-mail addresses.",
"DialogMessage_CantDeleteRootAliasTitle": "Can't Delete Alias",
"DialogMessage_CantDeleteRootAliasMessage": "Root alias can't be deleted. This is your main identity associated with your account setup.",
"DialogMessage_AliasCreatedTitle": "Created New Alias",
"DialogMessage_AliasCreatedMessage": "New alias is succesfully created.",
"DialogMessage_CleanupFolderMessage": "您想永久删除此文件夹中的所有邮件吗?", "DialogMessage_CleanupFolderMessage": "您想永久删除此文件夹中的所有邮件吗?",
"DialogMessage_CleanupFolderTitle": "清空文件夹", "DialogMessage_CleanupFolderTitle": "清空文件夹",
"DialogMessage_ComposerMissingRecipientMessage": "邮件没有收件人。", "DialogMessage_ComposerMissingRecipientMessage": "邮件没有收件人。",
@@ -82,37 +103,51 @@
"DialogMessage_RenameLinkedAccountsTitle": "重命名已链接账户", "DialogMessage_RenameLinkedAccountsTitle": "重命名已链接账户",
"DialogMessage_UnlinkAccountsConfirmationMessage": "此操作不会删除您的账户,只会断开共享文件夹的连接。是否继续?", "DialogMessage_UnlinkAccountsConfirmationMessage": "此操作不会删除您的账户,只会断开共享文件夹的连接。是否继续?",
"DialogMessage_UnlinkAccountsConfirmationTitle": "取消链接账户", "DialogMessage_UnlinkAccountsConfirmationTitle": "取消链接账户",
"DialogMessage_EmptySubjectConfirmation": "Missing Subject", "DialogMessage_EmptySubjectConfirmation": "缺少标题",
"DialogMessage_EmptySubjectConfirmationMessage": "邮件没有主题。您想要继续吗?", "DialogMessage_EmptySubjectConfirmationMessage": "邮件没有主题。您想要继续吗?",
"DialogMessage_RenameFolderTitle": "Rename Folder", "DialogMessage_RenameFolderTitle": "重命名文件夹",
"DialogMessage_RenameFolderMessage": "Enter new name for this folder", "DialogMessage_RenameFolderMessage": "输入新的文件夹名称",
"DialogMessage_UnsubscribeConfirmationTitle": "取消订阅", "DialogMessage_UnsubscribeConfirmationTitle": "取消订阅",
"DialogMessage_UnsubscribeConfirmationOneClickMessage": "您想要停止从 {0} 处获取信息吗?", "DialogMessage_UnsubscribeConfirmationOneClickMessage": "您想要停止从 {0} 处获取信息吗?",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "要停止从 {0} 处获取消息,请前往他们的网站退订。", "DialogMessage_UnsubscribeConfirmationGoToWebsiteMessage": "要停止从 {0} 处获取消息,请前往他们的网站退订。",
"DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "前往网站", "DialogMessage_UnsubscribeConfirmationGoToWebsiteConfirmButton": "前往网站",
"DialogMessage_UnsubscribeConfirmationMailtoMessage": "您想要停止从 {0} 处获取消息吗? Wino将通过向 {1} 发送一封电子邮件以取消订阅。", "DialogMessage_UnsubscribeConfirmationMailtoMessage": "您想要停止从 {0} 处获取消息吗? Wino将通过向 {1} 发送一封电子邮件以取消订阅。",
"DialogMessage_EnableStartupLaunchTitle": "Enable Startup Launch",
"DialogMessage_EnableStartupLaunchMessage": "Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications.\n\nDo you want to enable startup launch?",
"DialogMessage_EnableStartupLaunchDeniedMessage": "You can enable startup launch from Settings -> App Preferences.",
"Dialog_DontAskAgain": "不再询问", "Dialog_DontAskAgain": "不再询问",
"CreateAccountAliasDialog_Title": "Create Account Alias",
"CreateAccountAliasDialog_Description": "Make sure your outgoing server allows sending mails from this alias.",
"CreateAccountAliasDialog_AliasAddress": "Address",
"CreateAccountAliasDialog_AliasAddressPlaceholder": "eg. support@mydomain.com",
"CreateAccountAliasDialog_ReplyToAddress": "Reply-To Address",
"CreateAccountAliasDialog_ReplyToAddressPlaceholder": "admin@mydomain.com",
"DiscordChannelDisclaimerMessage": "Wino 没有自己的 Discord 服务器,但在 Developer Sanctuary 服务器上设有专门的 wino-mail 频道。如果要获取有关 Wino 的更新,请加入 Developer Sanctuary 服务器,并关注 Community Projects下的 wino-mail 频道。\n\n因为 Discord 不支持频道邀请,所以你需要通过网页加入频道。", "DiscordChannelDisclaimerMessage": "Wino 没有自己的 Discord 服务器,但在 Developer Sanctuary 服务器上设有专门的 wino-mail 频道。如果要获取有关 Wino 的更新,请加入 Developer Sanctuary 服务器,并关注 Community Projects下的 wino-mail 频道。\n\n因为 Discord 不支持频道邀请,所以你需要通过网页加入频道。",
"DiscordChannelDisclaimerTitle": "重要的 Discord 信息", "DiscordChannelDisclaimerTitle": "重要的 Discord 信息",
"Draft": "草稿", "Draft": "草稿",
"Busy": "Busy",
"EditorToolbarOption_Draw": "绘制", "EditorToolbarOption_Draw": "绘制",
"EditorToolbarOption_Format": "格式", "EditorToolbarOption_Format": "格式",
"EditorToolbarOption_Insert": "插入", "EditorToolbarOption_Insert": "插入",
"EditorToolbarOption_None": "无", "EditorToolbarOption_None": "无",
"EditorToolbarOption_Options": "选项", "EditorToolbarOption_Options": "选项",
"EditorTooltip_WebViewEditor": "Use web view editor", "EditorTooltip_WebViewEditor": "使用 WebView 编辑器",
"ElementTheme_Dark": "深色模式", "ElementTheme_Dark": "深色模式",
"ElementTheme_Default": "使用系统设置", "ElementTheme_Default": "使用系统设置",
"ElementTheme_Light": "浅色模式", "ElementTheme_Light": "浅色模式",
"Emoji": "表情", "Emoji": "表情",
"Exception_WinoServerException": "Wino server failed.", "Exception_WinoServerException": "Wino 服务器连接失败",
"Exception_ImapAutoDiscoveryFailed": "Couldn't find mailbox settings.", "Exception_MailProcessing": "This mail is still being processed. Please try again after few seconds.",
"Exception_ImapAutoDiscoveryFailed": "找不到邮箱配置。",
"Exception_ImapClientPoolFailed": "IMAP 客户端池失败。", "Exception_ImapClientPoolFailed": "IMAP 客户端池失败。",
"Exception_AuthenticationCanceled": "身份验证已取消", "Exception_AuthenticationCanceled": "身份验证已取消",
"Exception_CustomThemeExists": "此主题已经存在。", "Exception_CustomThemeExists": "此主题已经存在。",
"Exception_CustomThemeMissingName": "您必须提供名称。", "Exception_CustomThemeMissingName": "您必须提供名称。",
"Exception_CustomThemeMissingWallpaper": "您必须提供自定义背景图像。", "Exception_CustomThemeMissingWallpaper": "您必须提供自定义背景图像。",
"Exception_FailedToSynchronizeFolders": "同步文件夹失败", "Exception_FailedToSynchronizeFolders": "同步文件夹失败",
"Exception_FailedToSynchronizeAliases": "Failed to synchronize aliases",
"Exception_MissingAlias": "Primary alias does not exist for this account. Creating draft failed.",
"Exception_FailedToSynchronizeProfileInformation": "Failed to synchronize profile information",
"Exception_GoogleAuthCallbackNull": "Callback uri 在激活时无效。", "Exception_GoogleAuthCallbackNull": "Callback uri 在激活时无效。",
"Exception_GoogleAuthCorruptedCode": "授权响应不正确。", "Exception_GoogleAuthCorruptedCode": "授权响应不正确。",
"Exception_GoogleAuthError": "OAuth 授权错误: {0}", "Exception_GoogleAuthError": "OAuth 授权错误: {0}",
@@ -177,8 +212,8 @@
"IMAPSetupDialog_UseSameConfig": "发送电子邮件时使用同一用户名和密码", "IMAPSetupDialog_UseSameConfig": "发送电子邮件时使用同一用户名和密码",
"IMAPSetupDialog_Username": "用户名", "IMAPSetupDialog_Username": "用户名",
"IMAPSetupDialog_UsernamePlaceholder": "示例johndoe, johndoe@fabrikam.com, domain/johndoe", "IMAPSetupDialog_UsernamePlaceholder": "示例johndoe, johndoe@fabrikam.com, domain/johndoe",
"IMAPSetupDialog_ConnectionFailedTitle": "Connection Failed", "IMAPSetupDialog_ConnectionFailedTitle": "连接失败",
"IMAPSetupDialog_ConnectionFailedMessage": "IMAP connection failed.", "IMAPSetupDialog_ConnectionFailedMessage": "IMAP 连接失败",
"ImageRenderingDisabled": "此邮件的图像渲染已禁用。", "ImageRenderingDisabled": "此邮件的图像渲染已禁用。",
"InfoBarAction_Enable": "启用", "InfoBarAction_Enable": "启用",
"InfoBarMessage_SynchronizationDisabledFolder": "此文件夹已禁用同步。", "InfoBarMessage_SynchronizationDisabledFolder": "此文件夹已禁用同步。",
@@ -253,6 +288,8 @@
"Info_UnsubscribeLinkInvalidMessage": "此退订链接无效。取消订阅列表失败。", "Info_UnsubscribeLinkInvalidMessage": "此退订链接无效。取消订阅列表失败。",
"Info_UnsubscribeSuccessMessage": "成功取消了来自 {0} 处的订阅!", "Info_UnsubscribeSuccessMessage": "成功取消了来自 {0} 处的订阅!",
"Info_UnsubscribeErrorMessage": "取消订阅失败", "Info_UnsubscribeErrorMessage": "取消订阅失败",
"Info_CantDeletePrimaryAliasMessage": "Primary alias can't be deleted. Please change your alias before deleting this one",
"Info_MailListSizeResetSuccessMessage": "The Mail List size has been reset.",
"ImapAdvancedSetupDialog_AuthenticationMethod": "身份验证方法", "ImapAdvancedSetupDialog_AuthenticationMethod": "身份验证方法",
"ImapAdvancedSetupDialog_ConnectionSecurity": "连接安全性", "ImapAdvancedSetupDialog_ConnectionSecurity": "连接安全性",
"ImapAuthenticationMethod_Auto": "自动", "ImapAuthenticationMethod_Auto": "自动",
@@ -333,10 +370,10 @@
"ProviderDetail_Gmail_Description": "Google 账号", "ProviderDetail_Gmail_Description": "Google 账号",
"ProviderDetail_IMAP_Description": "自定义 IMAP/SMTP 服务器", "ProviderDetail_IMAP_Description": "自定义 IMAP/SMTP 服务器",
"ProviderDetail_IMAP_Title": "IMAP 服务器", "ProviderDetail_IMAP_Title": "IMAP 服务器",
"ProtocolLogAvailable_Message": "Protocol logs are available for diagnostics.", "ProtocolLogAvailable_Message": "协议诊断日志已可用。",
"Results": "结果", "Results": "结果",
"Right": "右侧", "Right": "右侧",
"Reader_SaveAllAttachmentButtonText": "Save all attachments", "Reader_SaveAllAttachmentButtonText": "保存附件",
"SynchronizationFolderReport_Success": "已是最新", "SynchronizationFolderReport_Success": "已是最新",
"SynchronizationFolderReport_Failed": "同步失败", "SynchronizationFolderReport_Failed": "同步失败",
"SearchBarPlaceholder": "搜索", "SearchBarPlaceholder": "搜索",
@@ -396,6 +433,8 @@
"SettingsFolderSync_Title": "文件夹同步", "SettingsFolderSync_Title": "文件夹同步",
"SettingsFolderOptions_Title": "文件夹设置", "SettingsFolderOptions_Title": "文件夹设置",
"SettingsFolderOptions_Description": "更改个人文件夹设置,如启用/禁用同步或显示/隐藏未读标志。", "SettingsFolderOptions_Description": "更改个人文件夹设置,如启用/禁用同步或显示/隐藏未读标志。",
"SettingsManageAliases_Title": "Aliases",
"SettingsManageAliases_Description": "See e-mail aliases assigned for this account, update or delete them.",
"SettingsHoverActionCenter": "中心动作", "SettingsHoverActionCenter": "中心动作",
"SettingsHoverActionLeft": "左侧动作", "SettingsHoverActionLeft": "左侧动作",
"SettingsHoverActionRight": "右侧动作", "SettingsHoverActionRight": "右侧动作",
@@ -406,6 +445,11 @@
"SettingsLanguageTime_Title": "语言和时间", "SettingsLanguageTime_Title": "语言和时间",
"SettingsLanguageTime_Description": "Wino显示语言首选时间格式", "SettingsLanguageTime_Description": "Wino显示语言首选时间格式",
"CategoriesFolderNameOverride": "分类", "CategoriesFolderNameOverride": "分类",
"AccountAlias_Column_Verified": "Verified",
"AccountAlias_Column_Alias": "Alias",
"AccountAlias_Column_IsPrimaryAlias": "Primary",
"AccountAlias_Disclaimer_FirstLine": "Wino can only import aliases for your Gmail accounts.",
"AccountAlias_Disclaimer_SecondLine": "If you want to use aliases for your Outlook or IMAP account, please add them yourself.",
"MoreFolderNameOverride": "更多", "MoreFolderNameOverride": "更多",
"SettingsOptions_Title": "设置", "SettingsOptions_Title": "设置",
"SettingsLinkAccounts_Description": "将多个账户合并为一个。在同一个收件箱内查看所有邮件。", "SettingsLinkAccounts_Description": "将多个账户合并为一个。在同一个收件箱内查看所有邮件。",
@@ -420,21 +464,21 @@
"SettingsFolderMenuStyle_Description": "控制账户文件夹是否应嵌套在账户菜单中。 如果您喜欢Windows邮件中的旧菜单关闭此选项", "SettingsFolderMenuStyle_Description": "控制账户文件夹是否应嵌套在账户菜单中。 如果您喜欢Windows邮件中的旧菜单关闭此选项",
"SettingsManageAccountSettings_Description": "每个账户的通知、签名、同步等设置。", "SettingsManageAccountSettings_Description": "每个账户的通知、签名、同步等设置。",
"SettingsManageAccountSettings_Title": "管理账户设置", "SettingsManageAccountSettings_Title": "管理账户设置",
"SettingsAppPreferences_Title": "App Preferences", "SettingsAppPreferences_Title": "应用设置",
"SettingsAppPreferences_Description": "General settings / preferences for Wino Mail.", "SettingsAppPreferences_Description": "Wino Mail 的常规 / 首选项设置",
"SettingsAppPreferences_CloseBehavior_Title": "Application close behavior", "SettingsAppPreferences_CloseBehavior_Title": "应用关闭后行为",
"SettingsAppPreferences_CloseBehavior_Description": "What should happen when you close the app?", "SettingsAppPreferences_CloseBehavior_Description": "当关闭应用时 Wino Mail 应该怎么做?",
"SettingsAppPreferences_StartupBehavior_Title": "Start minimized on Windows startup", "SettingsAppPreferences_StartupBehavior_Title": " Windows 启动并最小化应用",
"SettingsAppPreferences_StartupBehavior_Description": "Allow Wino Mail to launch minimized when Windows starts. Always allow it to receive notifications.", "SettingsAppPreferences_StartupBehavior_Description": "允许 Wino Mail 随 Windows 最小化自启动。总是允许接收应用通知。",
"SettingsAppPreferences_StartupBehavior_Enabled": "Wino Mail successfully set to be launched in the background on Windows startup.", "SettingsAppPreferences_StartupBehavior_Enabled": "Wino 成功设置为随 Windows 自启动。",
"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_Disabled": "Wino Mail 将不会随 Windows 自动。可能会导致重启系统后错过邮件通知。",
"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_DisabledByPolicy": "管理员或组策略禁止了应用随 Windows 自启动,因此 Wino Mail 无法随 Windows 自启动。",
"SettingsAppPreferences_StartupBehavior_DisabledByUser": "Please go to Task Manager -> Startup tab to allow Wino Mail to launch on Windows startup.", "SettingsAppPreferences_StartupBehavior_DisabledByUser": "请前往「任务管理器 」-「启动应用」标签以允许 Wino Mail 随 Windows 自启动。",
"SettingsAppPreferences_StartupBehavior_FatalError": "Fatal error occurred while changing the startup mode for Wino Mail.", "SettingsAppPreferences_StartupBehavior_FatalError": "更改 Wino Mail 启动模式发生严重错误。",
"SettingsAppPreferences_StartupBehavior_Enable": "Enable", "SettingsAppPreferences_StartupBehavior_Enable": "启用",
"SettingsAppPreferences_StartupBehavior_Disable": "Disable", "SettingsAppPreferences_StartupBehavior_Disable": "禁用",
"SettingsReorderAccounts_Title": "Reorder Accounts", "SettingsReorderAccounts_Title": "重新排列账号",
"SettingsReorderAccounts_Description": "Change the order of accounts in the account list.", "SettingsReorderAccounts_Description": "改变账号在账号列表中的顺序。",
"SettingsManageLink_Description": "移动项目以添加新链接或删除现有链接。", "SettingsManageLink_Description": "移动项目以添加新链接或删除现有链接。",
"SettingsManageLink_Title": "管理账户链接", "SettingsManageLink_Title": "管理账户链接",
"SettingsMarkAsRead_Description": "更改应对选定项目进行何种操作。", "SettingsMarkAsRead_Description": "更改应对选定项目进行何种操作。",
@@ -448,8 +492,8 @@
"SettingsNoAccountSetupMessage": "您尚未设置任何账户。", "SettingsNoAccountSetupMessage": "您尚未设置任何账户。",
"SettingsNotifications_Description": "开启或关闭此账户的通知。", "SettingsNotifications_Description": "开启或关闭此账户的通知。",
"SettingsNotifications_Title": "通知", "SettingsNotifications_Title": "通知",
"SettingsPaneLength_Description": "更改邮件列表的宽度。", "SettingsPaneLengthReset_Description": "Reset the size of the mail list to original if you have issues with it.",
"SettingsPaneLength_Title": "邮件列表视图长度", "SettingsPaneLengthReset_Title": "Reset Mail List Size",
"SettingsPaypal_Description": "展示更多的爱吧 ❤️ 我们感激所有的捐赠。", "SettingsPaypal_Description": "展示更多的爱吧 ❤️ 我们感激所有的捐赠。",
"SettingsPaypal_Title": "通过 PayPal 捐赠", "SettingsPaypal_Title": "通过 PayPal 捐赠",
"SettingsPersonalizationMailDisplayCompactMode": "紧凑模式", "SettingsPersonalizationMailDisplayCompactMode": "紧凑模式",
@@ -459,10 +503,10 @@
"SettingsPersonalization_Title": "个性化", "SettingsPersonalization_Title": "个性化",
"SettingsPrivacyPolicy_Description": "查看隐私政策。", "SettingsPrivacyPolicy_Description": "查看隐私政策。",
"SettingsPrivacyPolicy_Title": "隐私政策", "SettingsPrivacyPolicy_Title": "隐私政策",
"SettingsReader_Title": "Reader", "SettingsReader_Title": "阅读器",
"SettingsComposer_Title": "Composer", "SettingsComposer_Title": "编辑器",
"SettingsReadComposePane_Description": "Fonts, external content.", "SettingsReadComposePane_Description": "字体与外部内容。",
"SettingsReadComposePane_Title": "Reader & Composer", "SettingsReadComposePane_Title": "阅读器和编辑器",
"SettingsReaderFont_Title": "默认阅读字体", "SettingsReaderFont_Title": "默认阅读字体",
"SettingsReaderFontFamily_Description": "更改阅读邮件的默认字体和字体大小。", "SettingsReaderFontFamily_Description": "更改阅读邮件的默认字体和字体大小。",
"SettingsFontFamily_Title": "字体", "SettingsFontFamily_Title": "字体",
@@ -480,7 +524,7 @@
"SettingsShowSenderPictures_Title": "显示发件人头像", "SettingsShowSenderPictures_Title": "显示发件人头像",
"SettingsPrefer24HourClock_Title": "使用 24 小时制时间格式", "SettingsPrefer24HourClock_Title": "使用 24 小时制时间格式",
"SettingsPrefer24HourClock_Description": "邮件接收时间将显示为 24 小时制,而不是 12 小时制(上午/下午)", "SettingsPrefer24HourClock_Description": "邮件接收时间将显示为 24 小时制,而不是 12 小时制(上午/下午)",
"SettingsSignature_Description": "Manage account signatures", "SettingsSignature_Description": "管理账户签名",
"SettingsSignature_Title": "签名", "SettingsSignature_Title": "签名",
"SettingsStartupItem_Description": "启动时加载收件箱的主要账户项。", "SettingsStartupItem_Description": "启动时加载收件箱的主要账户项。",
"SettingsStartupItem_Title": "启动项", "SettingsStartupItem_Title": "启动项",
@@ -524,29 +568,29 @@
"WinoUpgradeMessage": "升级为无限账户数", "WinoUpgradeMessage": "升级为无限账户数",
"WinoUpgradeRemainingAccountsMessage": "已使用 {0} 个免费账户,共 {1} 个。", "WinoUpgradeRemainingAccountsMessage": "已使用 {0} 个免费账户,共 {1} 个。",
"Yesterday": "昨天", "Yesterday": "昨天",
"SignatureEditorDialog_Title": "Signature Editor", "SignatureEditorDialog_Title": "签名编辑器",
"SignatureEditorDialog_SignatureName_Placeholder": "Name your signature", "SignatureEditorDialog_SignatureName_Placeholder": "为签名命名",
"SignatureEditorDialog_SignatureName_TitleNew": "Signature name", "SignatureEditorDialog_SignatureName_TitleNew": "签名名称",
"SignatureEditorDialog_SignatureName_TitleEdit": "Current signature name: {0}", "SignatureEditorDialog_SignatureName_TitleEdit": "当前签名:{0}",
"SignatureDeleteDialog_Title": "Delete signature", "SignatureDeleteDialog_Title": "删除签名",
"SignatureDeleteDialog_Message": "Are you sure you want to delete \"{0}\" signature?", "SignatureDeleteDialog_Message": "确定要删除签名「{0}」吗?",
"SettingsSignature_ForNewMessages_Title": "For New Messages", "SettingsSignature_ForNewMessages_Title": "用于新邮件",
"SettingsSignature_ForFollowingMessages_Title": "For Replies/Forwards", "SettingsSignature_ForFollowingMessages_Title": "用于回复和转发",
"SettingsSignature_SignatureDefaults": "Signature defaults", "SettingsSignature_SignatureDefaults": "默认签名",
"SettingsSignature_Signatures": "Signatures", "SettingsSignature_Signatures": "签名",
"SettingsSignature_AddCustomSignature_Title": "Add custom signature", "SettingsSignature_AddCustomSignature_Title": "添加自定义签名",
"SettingsSignature_AddCustomSignature_Button": "Add signature", "SettingsSignature_AddCustomSignature_Button": "添加签名",
"SettingsSignature_EditSignature_Title": "Edit signature", "SettingsSignature_EditSignature_Title": "编辑签名",
"SettingsSignature_DeleteSignature_Title": "Delete signature", "SettingsSignature_DeleteSignature_Title": "删除签名",
"SettingsSignature_NoneSignatureName": "None", "SettingsSignature_NoneSignatureName": "",
"SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "Minimize to system tray", "SettingsAppPreferences_ServerBackgroundingMode_MinimizeTray_Title": "最小化到系统托盘",
"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_MinimizeTray_Description": "Wino Mail 将在系统托盘上继续运行。点击托盘图标时将启动应用。当收到新邮件时将推送通知。",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "Run in the background", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Title": "后台运行",
"SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail will keep running in the background. You will be notified as new mails arrive.", "SettingsAppPreferences_ServerBackgroundingMode_Invisible_Description": "Wino Mail 将在后台运行。当收到新邮件时将推送通知。",
"SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "Terminate", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Title": "终止进程",
"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.", "SettingsAppPreferences_ServerBackgroundingMode_Terminate_Description": "Wino Mail 将不会时刻保持运行。收到新邮件时不会再推送通知。当再次启动应用时才会继续同步邮件。",
"TitleBarServerDisconnectedButton_Title": "no connection", "TitleBarServerDisconnectedButton_Title": "无网络连接",
"TitleBarServerDisconnectedButton_Description": "Wino is disconnected from the network. Click reconnect to restore connection.", "TitleBarServerDisconnectedButton_Description": "Wino 已断开网络连接。点击「重新连接」重试。",
"TitleBarServerReconnectButton_Title": "reconnect", "TitleBarServerReconnectButton_Title": "重新连接",
"TitleBarServerReconnectingButton_Title": "connecting" "TitleBarServerReconnectingButton_Title": "正在连接"
} }

View File

@@ -78,6 +78,41 @@ namespace Wino.Core.Domain
/// </summary> /// </summary>
public static string AutoDiscoveryProgressMessage => Resources.GetTranslatedString(@"AutoDiscoveryProgressMessage"); public static string AutoDiscoveryProgressMessage => Resources.GetTranslatedString(@"AutoDiscoveryProgressMessage");
/// <summary>
/// Background Synchronization
/// </summary>
public static string AppCloseBackgroundSynchronizationWarningTitle => Resources.GetTranslatedString(@"AppCloseBackgroundSynchronizationWarningTitle");
/// <summary>
/// You are terminating Wino Mail and your app close behavior is set to 'Terminate'.
/// </summary>
public static string AppCloseTerminateBehaviorWarningMessageFirstLine => Resources.GetTranslatedString(@"AppCloseTerminateBehaviorWarningMessageFirstLine");
/// <summary>
/// This will stop all background synchronizations and notifications.
/// </summary>
public static string AppCloseTerminateBehaviorWarningMessageSecondLine => Resources.GetTranslatedString(@"AppCloseTerminateBehaviorWarningMessageSecondLine");
/// <summary>
/// Do you want to go to App Preferences to set Wino Mail to run minimized or in the background?
/// </summary>
public static string AppCloseTerminateBehaviorWarningMessageThirdLine => Resources.GetTranslatedString(@"AppCloseTerminateBehaviorWarningMessageThirdLine");
/// <summary>
/// Application has not been set to launch on Windows startup.
/// </summary>
public static string AppCloseStartupLaunchDisabledWarningMessageFirstLine => Resources.GetTranslatedString(@"AppCloseStartupLaunchDisabledWarningMessageFirstLine");
/// <summary>
/// This will cause you to miss notifications when you restart your computer.
/// </summary>
public static string AppCloseStartupLaunchDisabledWarningMessageSecondLine => Resources.GetTranslatedString(@"AppCloseStartupLaunchDisabledWarningMessageSecondLine");
/// <summary>
/// Do you want to go to App Preferences page to enable it?
/// </summary>
public static string AppCloseStartupLaunchDisabledWarningMessageThirdLine => Resources.GetTranslatedString(@"AppCloseStartupLaunchDisabledWarningMessageThirdLine");
/// <summary> /// <summary>
/// Advanced Configuration /// Advanced Configuration
/// </summary> /// </summary>
@@ -253,6 +288,11 @@ namespace Wino.Core.Domain
/// </summary> /// </summary>
public static string Buttons_Reset => Resources.GetTranslatedString(@"Buttons_Reset"); public static string Buttons_Reset => Resources.GetTranslatedString(@"Buttons_Reset");
/// <summary>
/// Send
/// </summary>
public static string Buttons_Send => Resources.GetTranslatedString(@"Buttons_Send");
/// <summary> /// <summary>
/// Center /// Center
/// </summary> /// </summary>
@@ -548,6 +588,21 @@ namespace Wino.Core.Domain
/// </summary> /// </summary>
public static string DialogMessage_UnsubscribeConfirmationMailtoMessage => Resources.GetTranslatedString(@"DialogMessage_UnsubscribeConfirmationMailtoMessage"); public static string DialogMessage_UnsubscribeConfirmationMailtoMessage => Resources.GetTranslatedString(@"DialogMessage_UnsubscribeConfirmationMailtoMessage");
/// <summary>
/// Enable Startup Launch
/// </summary>
public static string DialogMessage_EnableStartupLaunchTitle => Resources.GetTranslatedString(@"DialogMessage_EnableStartupLaunchTitle");
/// <summary>
/// Let Wino Mail automatically launch minimized on Windows startup to not miss any notifications. Do you want to enable startup launch?
/// </summary>
public static string DialogMessage_EnableStartupLaunchMessage => Resources.GetTranslatedString(@"DialogMessage_EnableStartupLaunchMessage");
/// <summary>
/// You can enable startup launch from Settings -> App Preferences.
/// </summary>
public static string DialogMessage_EnableStartupLaunchDeniedMessage => Resources.GetTranslatedString(@"DialogMessage_EnableStartupLaunchDeniedMessage");
/// <summary> /// <summary>
/// Don't ask again /// Don't ask again
/// </summary> /// </summary>
@@ -2634,7 +2689,17 @@ namespace Wino.Core.Domain
public static string SettingsThreads_Title => Resources.GetTranslatedString(@"SettingsThreads_Title"); public static string SettingsThreads_Title => Resources.GetTranslatedString(@"SettingsThreads_Title");
/// <summary> /// <summary>
/// Remove the link between accounts. This will not delete your accounts. /// Hide/show action bar at top of message list.
/// </summary>
public static string SettingsMailListActionBar_Description => Resources.GetTranslatedString(@"SettingsMailListActionBar_Description");
/// <summary>
/// Show mail list actions
/// </summary>
public static string SettingsMailListActionBar_Title => Resources.GetTranslatedString(@"SettingsMailListActionBar_Title");
/// <summary>
/// Remove the link between accounts. his will not delete your accounts.
/// </summary> /// </summary>
public static string SettingsUnlinkAccounts_Description => Resources.GetTranslatedString(@"SettingsUnlinkAccounts_Description"); public static string SettingsUnlinkAccounts_Description => Resources.GetTranslatedString(@"SettingsUnlinkAccounts_Description");

View File

@@ -62,7 +62,7 @@
</PackageReference> </PackageReference>
<PackageReference Include="MimeKit" Version="4.7.1" /> <PackageReference Include="MimeKit" Version="4.7.1" />
<PackageReference Include="MailKit" Version="4.7.1.1" /> <PackageReference Include="MailKit" Version="4.7.1.1" />
<PackageReference Include="sqlite-net-pcl" Version="1.8.116" /> <PackageReference Include="sqlite-net-pcl" Version="1.9.172" />
<PackageReference Include="System.Text.Json" Version="8.0.4" /> <PackageReference Include="System.Text.Json" Version="8.0.4" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -1,4 +1,7 @@
using Serilog; using System;
using System.Linq;
using System.Threading.Tasks;
using Serilog;
using Windows.ApplicationModel.Background; using Windows.ApplicationModel.Background;
using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Interfaces;
@@ -7,6 +10,7 @@ namespace Wino.Core.UWP.Services
public class BackgroundTaskService : IBackgroundTaskService public class BackgroundTaskService : IBackgroundTaskService
{ {
private const string IsBackgroundTasksUnregisteredKey = nameof(IsBackgroundTasksUnregisteredKey); private const string IsBackgroundTasksUnregisteredKey = nameof(IsBackgroundTasksUnregisteredKey);
public const string ToastNotificationActivationHandlerTaskName = "ToastNotificationActivationHandlerTask";
private readonly IConfigurationService _configurationService; private readonly IConfigurationService _configurationService;
@@ -17,7 +21,7 @@ namespace Wino.Core.UWP.Services
public void UnregisterAllBackgroundTask() public void UnregisterAllBackgroundTask()
{ {
if (!_configurationService.Get(IsBackgroundTasksUnregisteredKey, false)) if (_configurationService.Get(IsBackgroundTasksUnregisteredKey, false))
{ {
foreach (var task in BackgroundTaskRegistration.AllTasks) foreach (var task in BackgroundTaskRegistration.AllTasks)
{ {
@@ -28,5 +32,32 @@ namespace Wino.Core.UWP.Services
_configurationService.Set(IsBackgroundTasksUnregisteredKey, true); _configurationService.Set(IsBackgroundTasksUnregisteredKey, true);
} }
} }
public Task RegisterBackgroundTasksAsync()
{
return RegisterToastNotificationHandlerBackgroundTaskAsync();
}
public async Task RegisterToastNotificationHandlerBackgroundTaskAsync()
{
// If background task is already registered, do nothing.
if (BackgroundTaskRegistration.AllTasks.Any(i => i.Value.Name.Equals(ToastNotificationActivationHandlerTaskName)))
return;
// Otherwise request access
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
// Create the background task
BackgroundTaskBuilder builder = new BackgroundTaskBuilder()
{
Name = ToastNotificationActivationHandlerTaskName
};
// Assign the toast action trigger
builder.SetTrigger(new ToastNotificationActionTrigger());
// And register the task
BackgroundTaskRegistration registration = builder.Register();
}
} }
} }

View File

@@ -1,7 +1,9 @@
using System; using System;
using System.IO; using System.IO;
using System.IO.Compression;
using System.Threading.Tasks; using System.Threading.Tasks;
using Windows.Storage; using Windows.Storage;
using Wino.Core.Domain;
using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Interfaces;
namespace Wino.Core.UWP.Services namespace Wino.Core.UWP.Services
@@ -34,5 +36,27 @@ namespace Wino.Core.UWP.Services
return await createdFile.OpenStreamForWriteAsync(); return await createdFile.OpenStreamForWriteAsync();
} }
public async Task<bool> SaveLogsToFolderAsync(string logsFolder, string destinationFolder)
{
var logFiles = Directory.GetFiles(logsFolder, "*.log");
if (logFiles.Length == 0) return false;
using var fileStream = await GetFileStreamAsync(destinationFolder, Constants.LogArchiveFileName);
using var archive = new ZipArchive(fileStream, ZipArchiveMode.Create, true);
foreach (var logFile in logFiles)
{
using FileStream logFileStream = File.Open(logFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
var zipArchiveEntry = archive.CreateEntry(Path.GetFileName(logFile), CompressionLevel.Fastest);
using var zipStream = zipArchiveEntry.Open();
await logFileStream.CopyToAsync(zipStream);
}
return true;
}
} }
} }

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using CommunityToolkit.WinUI.Notifications; using CommunityToolkit.WinUI.Notifications;
using Serilog;
using Windows.Data.Xml.Dom; using Windows.Data.Xml.Dom;
using Windows.UI.Notifications; using Windows.UI.Notifications;
using Wino.Core.Domain; using Wino.Core.Domain;
@@ -38,6 +39,8 @@ namespace Wino.Core.UWP.Services
{ {
var mailCount = downloadedMailItems.Count(); var mailCount = downloadedMailItems.Count();
try
{
// If there are more than 3 mails, just display 1 general toast. // If there are more than 3 mails, just display 1 general toast.
if (mailCount > 3) if (mailCount > 3)
{ {
@@ -70,8 +73,8 @@ namespace Wino.Core.UWP.Services
foreach (var mailItem in validItems) foreach (var mailItem in validItems)
{ {
//if (mailItem.IsRead) if (mailItem.IsRead)
// continue; continue;
var builder = new ToastContentBuilder(); var builder = new ToastContentBuilder();
builder.SetToastScenario(ToastScenario.Default); builder.SetToastScenario(ToastScenario.Default);
@@ -117,6 +120,11 @@ namespace Wino.Core.UWP.Services
await UpdateTaskbarIconBadgeAsync(); await UpdateTaskbarIconBadgeAsync();
} }
} }
catch (Exception ex)
{
Log.Error(ex, "Failed to create notifications.");
}
}
private ToastButton GetDismissButton() private ToastButton GetDismissButton()
=> new ToastButton() => new ToastButton()
@@ -142,10 +150,10 @@ namespace Wino.Core.UWP.Services
public async Task UpdateTaskbarIconBadgeAsync() public async Task UpdateTaskbarIconBadgeAsync()
{ {
int totalUnreadCount = 0; int totalUnreadCount = 0;
var badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForApplication();
try try
{ {
var badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForApplication();
var accounts = await _accountService.GetAccountsAsync(); var accounts = await _accountService.GetAccountsAsync();
foreach (var account in accounts) foreach (var account in accounts)
@@ -178,11 +186,9 @@ namespace Wino.Core.UWP.Services
else else
badgeUpdater.Clear(); badgeUpdater.Clear();
} }
catch (System.Exception ex) catch (Exception ex)
{ {
// TODO: Log exceptions. Log.Error(ex, "Error while updating taskbar badge.");
badgeUpdater.Clear();
} }
} }

View File

@@ -64,6 +64,12 @@ namespace Wino.Core.UWP.Services
set => SetPropertyAndSave(nameof(IsThreadingEnabled), value); set => SetPropertyAndSave(nameof(IsThreadingEnabled), value);
} }
public bool IsMailListActionBarEnabled
{
get => _configurationService.Get(nameof(IsMailListActionBarEnabled), false);
set => SetPropertyAndSave(nameof(IsMailListActionBarEnabled), value);
}
public bool IsShowSenderPicturesEnabled public bool IsShowSenderPicturesEnabled
{ {
get => _configurationService.Get(nameof(IsShowSenderPicturesEnabled), true); get => _configurationService.Get(nameof(IsShowSenderPicturesEnabled), true);

View File

@@ -23,9 +23,6 @@ namespace Wino.Core.UWP.Services
_dialogService = dialogService; _dialogService = dialogService;
} }
private void SetRated()
=> _configurationService.SetRoaming(RatedStorageKey, true);
private bool IsAskingThresholdExceeded() private bool IsAskingThresholdExceeded()
{ {
var latestAskedDate = _configurationService.Get(LatestAskedKey, DateTime.MinValue); var latestAskedDate = _configurationService.Get(LatestAskedKey, DateTime.MinValue);
@@ -62,15 +59,14 @@ namespace Wino.Core.UWP.Services
{ {
if (!IsAskingThresholdExceeded()) return; if (!IsAskingThresholdExceeded()) return;
var ratingDialogResult = await _dialogService.ShowRatingDialogAsync(); var isRateWinoApproved = await _dialogService.ShowWinoCustomMessageDialogAsync(Translator.StoreRatingDialog_Title,
Translator.StoreRatingDialog_MessageFirstLine,
Translator.Buttons_RateWino,
Domain.Enums.WinoCustomMessageDialogIcon.Question,
Translator.Buttons_No,
RatedStorageKey);
if (ratingDialogResult == null) if (isRateWinoApproved)
return;
if (ratingDialogResult.DontAskAgain)
SetRated();
if (ratingDialogResult.RateWinoClicked)
{ {
// In case of failure of this call, we will navigate users to Store page directly. // In case of failure of this call, we will navigate users to Store page directly.
@@ -107,7 +103,7 @@ namespace Wino.Core.UWP.Services
else else
_dialogService.InfoBarMessage(Translator.Info_ReviewSuccessTitle, Translator.Info_ReviewNewMessage, Domain.Enums.InfoBarMessageType.Success); _dialogService.InfoBarMessage(Translator.Info_ReviewSuccessTitle, Translator.Info_ReviewNewMessage, Domain.Enums.InfoBarMessageType.Success);
SetRated(); _configurationService.Set(RatedStorageKey, true);
break; break;
case StoreRateAndReviewStatus.CanceledByUser: case StoreRateAndReviewStatus.CanceledByUser:
break; break;

View File

@@ -46,7 +46,6 @@ namespace Wino.Services
public event EventHandler<ApplicationElementTheme> ElementThemeChanged; public event EventHandler<ApplicationElementTheme> ElementThemeChanged;
public event EventHandler<string> AccentColorChanged; public event EventHandler<string> AccentColorChanged;
public event EventHandler<string> AccentColorChangedBySystem;
private const string AccentColorKey = nameof(AccentColorKey); private const string AccentColorKey = nameof(AccentColorKey);
private const string CurrentApplicationThemeKey = nameof(CurrentApplicationThemeKey); private const string CurrentApplicationThemeKey = nameof(CurrentApplicationThemeKey);

View File

@@ -250,6 +250,9 @@ namespace Wino.Core.UWP.Services
case nameof(AccountSynchronizationProgressUpdatedMessage): case nameof(AccountSynchronizationProgressUpdatedMessage):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<AccountSynchronizationProgressUpdatedMessage>(messageJson)); WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<AccountSynchronizationProgressUpdatedMessage>(messageJson));
break; break;
case nameof(AccountFolderConfigurationUpdated):
WeakReferenceMessenger.Default.Send(JsonSerializer.Deserialize<AccountFolderConfigurationUpdated>(messageJson));
break;
default: default:
throw new Exception("Invalid data type name passed to client."); throw new Exception("Invalid data type name passed to client.");
} }

View File

@@ -37,26 +37,6 @@
<UseVSHostingProcess>false</UseVSHostingProcess> <UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM'">
<PlatformTarget>ARM</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\ARM\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<NoWarn>;2008</NoWarn>
<DebugType>full</DebugType>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|ARM'">
<PlatformTarget>ARM</PlatformTarget>
<OutputPath>bin\ARM\Release\</OutputPath>
<DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>
<Optimize>true</Optimize>
<NoWarn>;2008</NoWarn>
<DebugType>pdbonly</DebugType>
<UseVSHostingProcess>false</UseVSHostingProcess>
<ErrorReport>prompt</ErrorReport>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|ARM64'">
<PlatformTarget>ARM64</PlatformTarget> <PlatformTarget>ARM64</PlatformTarget>
<DebugSymbols>true</DebugSymbols> <DebugSymbols>true</DebugSymbols>
@@ -132,7 +112,7 @@
<Version>7.1.2</Version> <Version>7.1.2</Version>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.AppCenter.Analytics"> <PackageReference Include="Microsoft.AppCenter.Analytics">
<Version>5.0.4</Version> <Version>5.0.5</Version>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform"> <PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
<Version>6.2.14</Version> <Version>6.2.14</Version>

View File

@@ -26,8 +26,6 @@ namespace Wino.Core.Authenticators
private readonly INativeAppService _nativeAppService; private readonly INativeAppService _nativeAppService;
public event EventHandler<string> InteractiveAuthenticationRequired;
public GmailAuthenticator(ITokenService tokenService, INativeAppService nativeAppService) : base(tokenService) public GmailAuthenticator(ITokenService tokenService, INativeAppService nativeAppService) : base(tokenService)
{ {
_nativeAppService = nativeAppService; _nativeAppService = nativeAppService;

View File

@@ -28,7 +28,16 @@ namespace Wino.Core.Authenticators
public string ClientId { get; } = "b19c2035-d740-49ff-b297-de6ec561b208"; public string ClientId { get; } = "b19c2035-d740-49ff-b297-de6ec561b208";
private readonly string[] MailScope = ["email", "mail.readwrite", "offline_access", "mail.send", "Mail.Send.Shared", "Mail.ReadWrite.Shared"]; private readonly string[] MailScope =
[
"email",
"mail.readwrite",
"offline_access",
"mail.send",
"Mail.Send.Shared",
"Mail.ReadWrite.Shared",
"User.Read"
];
public override MailProviderType ProviderType => MailProviderType.Outlook; public override MailProviderType ProviderType => MailProviderType.Outlook;

View File

@@ -76,9 +76,7 @@ namespace Wino.Core.Extensions
public static MailItemFolder GetLocalFolder(this Label label, ListLabelsResponse labelsResponse, Guid accountId) public static MailItemFolder GetLocalFolder(this Label label, ListLabelsResponse labelsResponse, Guid accountId)
{ {
bool isAllCapital = label.Name.All(a => char.IsUpper(a)); var normalizedLabelName = GetFolderName(label.Name);
var normalizedLabelName = GetFolderName(label);
// Even though we normalize the label name, check is done by capitalizing the label name. // Even though we normalize the label name, check is done by capitalizing the label name.
var capitalNormalizedLabelName = normalizedLabelName.ToUpper(); var capitalNormalizedLabelName = normalizedLabelName.ToUpper();
@@ -92,10 +90,10 @@ namespace Wino.Core.Extensions
// without realizing that they are hidden in Gmail settings. Therefore, it makes more sense to ignore Gmail's configuration // without realizing that they are hidden in Gmail settings. Therefore, it makes more sense to ignore Gmail's configuration
// since Wino allows folder visibility configuration separately. // since Wino allows folder visibility configuration separately.
// Overridden hidden labels are shown in the UI, but they have their synchronization disabled. // Overridden hidden labels are shown in the UI.
// This is mainly because 'All Mails' label is hidden by default in Gmail, but there is no point to download all mails. // Also Gmail does not support folder sync enable/disable options due to history changes.
// By default all folders will be enabled for synchronization.
bool shouldEnableSynchronization = label.LabelListVisibility != FOLDER_HIDE_IDENTIFIER;
bool isHidden = false; bool isHidden = false;
bool isChildOfCategoryFolder = label.Name.StartsWith(CATEGORY_PREFIX); bool isChildOfCategoryFolder = label.Name.StartsWith(CATEGORY_PREFIX);
@@ -114,7 +112,7 @@ namespace Wino.Core.Extensions
RemoteFolderId = label.Id, RemoteFolderId = label.Id,
Id = Guid.NewGuid(), Id = Guid.NewGuid(),
MailAccountId = accountId, MailAccountId = accountId,
IsSynchronizationEnabled = shouldEnableSynchronization, IsSynchronizationEnabled = true,
SpecialFolderType = specialFolderType, SpecialFolderType = specialFolderType,
IsSystemFolder = isSystemFolder, IsSystemFolder = isSystemFolder,
IsSticky = isSticky, IsSticky = isSticky,
@@ -155,14 +153,14 @@ namespace Wino.Core.Extensions
return labelsResponse.Labels.FirstOrDefault(a => a.Name == parentLabelName)?.Id ?? string.Empty; return labelsResponse.Labels.FirstOrDefault(a => a.Name == parentLabelName)?.Id ?? string.Empty;
} }
public static string GetFolderName(Label label) public static string GetFolderName(string fullFolderName)
{ {
if (string.IsNullOrEmpty(label.Name)) return string.Empty; if (string.IsNullOrEmpty(fullFolderName)) return string.Empty;
// Folders with "//" at the end has "/" as the name. // Folders with "//" at the end has "/" as the name.
if (label.Name.EndsWith(FOLDER_SEPERATOR_STRING)) return FOLDER_SEPERATOR_STRING; if (fullFolderName.EndsWith(FOLDER_SEPERATOR_STRING)) return FOLDER_SEPERATOR_STRING;
string[] parts = label.Name.Split(FOLDER_SEPERATOR_CHAR); string[] parts = fullFolderName.Split(FOLDER_SEPERATOR_CHAR);
var lastPart = parts[parts.Length - 1]; var lastPart = parts[parts.Length - 1];

View File

@@ -136,6 +136,8 @@ namespace Wino.Core.Extensions
if (message == null) if (message == null)
return string.Empty; return string.Empty;
return message.From.Mailboxes.FirstOrDefault()?.Name ?? message.Sender?.Name ?? Translator.UnknownSender;
// From MimeKit // From MimeKit
// The "From" header specifies the author(s) of the message. // The "From" header specifies the author(s) of the message.
@@ -145,43 +147,44 @@ namespace Wino.Core.Extensions
// Also handle: https://stackoverflow.com/questions/46474030/mailkit-from-address // Also handle: https://stackoverflow.com/questions/46474030/mailkit-from-address
if (message.Sender != null) //if (message.Sender != null)
return string.IsNullOrEmpty(message.Sender.Name) ? message.Sender.Address : message.Sender.Name; // return string.IsNullOrEmpty(message.Sender.Name) ? message.Sender.Address : message.Sender.Name;
else if (message.From?.Mailboxes != null) //else if (message.From?.Mailboxes != null)
{ //{
var firstAvailableName = message.From.Mailboxes.FirstOrDefault(a => !string.IsNullOrEmpty(a.Name))?.Name; // var firstAvailableName = message.From.Mailboxes.FirstOrDefault(a => !string.IsNullOrEmpty(a.Name))?.Name;
if (string.IsNullOrEmpty(firstAvailableName)) // if (string.IsNullOrEmpty(firstAvailableName))
{ // {
var firstAvailableAddress = message.From.Mailboxes.FirstOrDefault(a => !string.IsNullOrEmpty(a.Address))?.Address; // var firstAvailableAddress = message.From.Mailboxes.FirstOrDefault(a => !string.IsNullOrEmpty(a.Address))?.Address;
if (!string.IsNullOrEmpty(firstAvailableAddress)) // if (!string.IsNullOrEmpty(firstAvailableAddress))
{ // {
return firstAvailableAddress; // return firstAvailableAddress;
} // }
} // }
return firstAvailableName; // return firstAvailableName;
} //}
// No sender, no from, I don't know what to do. //// No sender, no from, I don't know what to do.
return Translator.UnknownSender; //return Translator.UnknownSender;
} }
// TODO: This is wrong. // TODO: This is wrong.
public static string GetActualSenderAddress(MimeMessage mime) public static string GetActualSenderAddress(MimeMessage message)
{ {
if (mime == null) return message.From.Mailboxes.FirstOrDefault()?.Address ?? message.Sender?.Address ?? Translator.UnknownSender;
return string.Empty; //if (mime == null)
// return string.Empty;
bool hasSingleFromMailbox = mime.From.Mailboxes.Count() == 1; //bool hasSingleFromMailbox = mime.From.Mailboxes.Count() == 1;
if (hasSingleFromMailbox) //if (hasSingleFromMailbox)
return mime.From.Mailboxes.First().GetAddress(idnEncode: true); // return mime.From.Mailboxes.First().GetAddress(idnEncode: true);
else if (mime.Sender != null) //else if (mime.Sender != null)
return mime.Sender.GetAddress(idnEncode: true); // return mime.Sender.GetAddress(idnEncode: true);
else //else
return Translator.UnknownSender; // return Translator.UnknownSender;
} }
} }
} }

View File

@@ -1,4 +1,5 @@
using System; using System;
using System.Linq;
using MailKit; using MailKit;
using Wino.Core.Domain.Entities; using Wino.Core.Domain.Entities;
@@ -8,14 +9,28 @@ namespace Wino.Core.Extensions
{ {
public static MailItemFolder GetLocalFolder(this IMailFolder mailkitMailFolder) public static MailItemFolder GetLocalFolder(this IMailFolder mailkitMailFolder)
{ {
bool isAllCapital = mailkitMailFolder.Name?.All(a => char.IsUpper(a)) ?? false;
return new MailItemFolder() return new MailItemFolder()
{ {
Id = Guid.NewGuid(), Id = Guid.NewGuid(),
FolderName = mailkitMailFolder.Name, FolderName = isAllCapital ? mailkitMailFolder.Name.OnlyCapitilizeFirstLetter() : mailkitMailFolder.Name,
RemoteFolderId = mailkitMailFolder.FullName, RemoteFolderId = mailkitMailFolder.FullName,
ParentRemoteFolderId = mailkitMailFolder.ParentFolder?.FullName, ParentRemoteFolderId = mailkitMailFolder.ParentFolder?.FullName,
SpecialFolderType = Domain.Enums.SpecialFolderType.Other SpecialFolderType = Domain.Enums.SpecialFolderType.Other
}; };
} }
public static string OnlyCapitilizeFirstLetter(this string s)
{
if (string.IsNullOrEmpty(s))
return string.Empty;
s = s.ToLower();
char[] a = s.ToCharArray();
a[0] = char.ToUpper(a[0]);
return new string(a);
}
} }
} }

View File

@@ -7,8 +7,6 @@ using MimeKit;
using MimeKit.IO; using MimeKit.IO;
using MimeKit.IO.Filters; using MimeKit.IO.Filters;
using MimeKit.Utils; using MimeKit.Utils;
using Wino.Core.Domain;
using Wino.Core.Domain.Entities;
namespace Wino.Core.Extensions namespace Wino.Core.Extensions
{ {
@@ -41,16 +39,6 @@ namespace Wino.Core.Extensions
} }
} }
public static AddressInformation ToAddressInformation(this MailboxAddress address)
{
if (address == null)
return new AddressInformation() { Name = Translator.UnknownSender, Address = Translator.UnknownAddress };
if (string.IsNullOrEmpty(address.Name))
address.Name = address.Address;
return new AddressInformation() { Name = address.Name, Address = address.Address };
}
/// <summary> /// <summary>
/// Sets html body replacing base64 images with cid linked resources. /// Sets html body replacing base64 images with cid linked resources.

View File

@@ -180,7 +180,7 @@ namespace Wino.Core.Extensions
// Some headers also require to start with X- or x-. // Some headers also require to start with X- or x-.
string[] headersToIgnore = ["Date", "To", "MIME-Version", "From", "Subject", "Message-Id"]; string[] headersToIgnore = ["Date", "To", "Cc", "Bcc", "MIME-Version", "From", "Subject", "Message-Id"];
string[] headersToModify = ["In-Reply-To", "Reply-To", "References", "Thread-Topic"]; string[] headersToModify = ["In-Reply-To", "Reply-To", "References", "Thread-Topic"];
var headers = new List<InternetMessageHeader>(); var headers = new List<InternetMessageHeader>();
@@ -191,15 +191,12 @@ namespace Wino.Core.Extensions
{ {
if (!headersToIgnore.Contains(header.Field)) if (!headersToIgnore.Contains(header.Field))
{ {
if (headersToModify.Contains(header.Field)) var headerName = headersToModify.Contains(header.Field) ? $"X-{header.Field}" : header.Field;
{
headers.Add(new InternetMessageHeader() { Name = $"X-{header.Field}", Value = header.Value });
}
else
{
headers.Add(new InternetMessageHeader() { Name = header.Field, Value = header.Value });
}
// No header value should exceed 995 characters.
var headerValue = header.Value.Length >= 995 ? header.Value.Substring(0, 995) : header.Value;
headers.Add(new InternetMessageHeader() { Name = headerName, Value = headerValue });
includedHeaderCount++; includedHeaderCount++;
} }

View File

@@ -21,7 +21,6 @@ namespace Wino.Core.Integration.Processors
{ {
Task UpdateAccountAsync(MailAccount account); Task UpdateAccountAsync(MailAccount account);
Task<string> UpdateAccountDeltaSynchronizationIdentifierAsync(Guid accountId, string deltaSynchronizationIdentifier); Task<string> UpdateAccountDeltaSynchronizationIdentifierAsync(Guid accountId, string deltaSynchronizationIdentifier);
Task CreateAssignmentAsync(Guid accountId, string mailCopyId, string remoteFolderId);
Task DeleteAssignmentAsync(Guid accountId, string mailCopyId, string remoteFolderId); Task DeleteAssignmentAsync(Guid accountId, string mailCopyId, string remoteFolderId);
Task ChangeMailReadStatusAsync(string mailCopyId, bool isRead); Task ChangeMailReadStatusAsync(string mailCopyId, bool isRead);
Task ChangeFlagStatusAsync(string mailCopyId, bool isFlagged); Task ChangeFlagStatusAsync(string mailCopyId, bool isFlagged);
@@ -53,6 +52,7 @@ namespace Wino.Core.Integration.Processors
public interface IGmailChangeProcessor : IDefaultChangeProcessor public interface IGmailChangeProcessor : IDefaultChangeProcessor
{ {
Task MapLocalDraftAsync(string mailCopyId, string newDraftId, string newThreadId); Task MapLocalDraftAsync(string mailCopyId, string newDraftId, string newThreadId);
Task CreateAssignmentAsync(Guid accountId, string mailCopyId, string remoteFolderId);
} }
public interface IOutlookChangeProcessor : IDefaultChangeProcessor public interface IOutlookChangeProcessor : IDefaultChangeProcessor
@@ -135,8 +135,7 @@ namespace Wino.Core.Integration.Processors
public Task DeleteAssignmentAsync(Guid accountId, string mailCopyId, string remoteFolderId) public Task DeleteAssignmentAsync(Guid accountId, string mailCopyId, string remoteFolderId)
=> MailService.DeleteAssignmentAsync(accountId, mailCopyId, remoteFolderId); => MailService.DeleteAssignmentAsync(accountId, mailCopyId, remoteFolderId);
public Task CreateAssignmentAsync(Guid accountId, string mailCopyId, string remoteFolderId)
=> MailService.CreateAssignmentAsync(accountId, mailCopyId, remoteFolderId);
public Task DeleteMailAsync(Guid accountId, string mailId) public Task DeleteMailAsync(Guid accountId, string mailId)
=> MailService.DeleteMailAsync(accountId, mailId); => MailService.DeleteMailAsync(accountId, mailId);
@@ -168,8 +167,6 @@ namespace Wino.Core.Integration.Processors
public Task<List<MailCopy>> GetDownloadedUnreadMailsAsync(Guid accountId, IEnumerable<string> downloadedMailCopyIds) public Task<List<MailCopy>> GetDownloadedUnreadMailsAsync(Guid accountId, IEnumerable<string> downloadedMailCopyIds)
=> MailService.GetDownloadedUnreadMailsAsync(accountId, downloadedMailCopyIds); => MailService.GetDownloadedUnreadMailsAsync(accountId, downloadedMailCopyIds);
public Task SaveMimeFileAsync(Guid fileId, MimeMessage mimeMessage, Guid accountId) public Task SaveMimeFileAsync(Guid fileId, MimeMessage mimeMessage, Guid accountId)
=> _mimeFileService.SaveMimeMessageAsync(fileId, mimeMessage, accountId); => _mimeFileService.SaveMimeMessageAsync(fileId, mimeMessage, accountId);

View File

@@ -1,4 +1,5 @@
using System.Threading.Tasks; using System;
using System.Threading.Tasks;
using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Interfaces;
using Wino.Core.Services; using Wino.Core.Services;
@@ -12,5 +13,8 @@ namespace Wino.Core.Integration.Processors
public Task MapLocalDraftAsync(string mailCopyId, string newDraftId, string newThreadId) public Task MapLocalDraftAsync(string mailCopyId, string newDraftId, string newThreadId)
=> MailService.MapLocalDraftAsync(mailCopyId, newDraftId, newThreadId); => MailService.MapLocalDraftAsync(mailCopyId, newDraftId, newThreadId);
public Task CreateAssignmentAsync(Guid accountId, string mailCopyId, string remoteFolderId)
=> MailService.CreateAssignmentAsync(accountId, mailCopyId, remoteFolderId);
} }
} }

View File

@@ -5,6 +5,7 @@ using System.Threading.Tasks;
using Wino.Core.Domain.Entities; using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums; using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Folders;
using Wino.Core.Domain.Models.MailItem; using Wino.Core.Domain.Models.MailItem;
using Wino.Core.Services; using Wino.Core.Services;
@@ -27,7 +28,7 @@ namespace Wino.Core.Integration.Threading
} }
///<inheritdoc/> ///<inheritdoc/>
public async Task<List<IMailItem>> ThreadItemsAsync(List<MailCopy> items) public async Task<List<IMailItem>> ThreadItemsAsync(List<MailCopy> items, IMailItemFolder threadingForFolder)
{ {
var assignedAccount = items[0].AssignedAccount; var assignedAccount = items[0].AssignedAccount;
@@ -62,12 +63,44 @@ namespace Wino.Core.Integration.Threading
} }
var thread = new ThreadMailItem(); var thread = new ThreadMailItem();
foreach (var childThreadItem in threadItem) foreach (var childThreadItem in threadItem)
{
if (thread.ThreadItems.Any(a => a.Id == childThreadItem.Id))
{
// Mail already exist in the thread.
// There should be only 1 instance of the mail in the thread.
// Make sure we add the correct one.
// Add the one with threading folder.
var threadingFolderItem = threadItem.FirstOrDefault(a => a.Id == childThreadItem.Id && a.FolderId == threadingForFolder.Id);
if (threadingFolderItem == null) continue;
// Remove the existing one.
thread.ThreadItems.Remove(thread.ThreadItems.First(a => a.Id == childThreadItem.Id));
// Add the correct one for listing.
thread.AddThreadItem(threadingFolderItem);
}
else
{ {
thread.AddThreadItem(childThreadItem); thread.AddThreadItem(childThreadItem);
} }
}
if (thread.ThreadItems.Count > 1)
{
resultList.Add(thread); resultList.Add(thread);
} }
else
{
// Don't make threads if the thread has only one item.
// Gmail has may have multiple assignments for the same item.
resultList.Add(thread.ThreadItems.First());
}
}
} }
return resultList; return resultList;

View File

@@ -5,6 +5,7 @@ using System.Threading.Tasks;
using SqlKata; using SqlKata;
using Wino.Core.Domain.Entities; using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Folders;
using Wino.Core.Domain.Models.MailItem; using Wino.Core.Domain.Models.MailItem;
using Wino.Core.Extensions; using Wino.Core.Extensions;
using Wino.Core.Services; using Wino.Core.Services;
@@ -58,7 +59,7 @@ namespace Wino.Core.Integration.Threading
return _databaseService.Connection.FindWithQueryAsync<MailCopy>(query.GetRawQuery()); return _databaseService.Connection.FindWithQueryAsync<MailCopy>(query.GetRawQuery());
} }
public async Task<List<IMailItem>> ThreadItemsAsync(List<MailCopy> items) public async Task<List<IMailItem>> ThreadItemsAsync(List<MailCopy> items, IMailItemFolder threadingForFolder)
{ {
var threads = new List<ThreadMailItem>(); var threads = new List<ThreadMailItem>();

View File

@@ -146,20 +146,17 @@ namespace Wino.Core.MenuItems
accountMenuItem ??= this.OfType<MergedAccountMenuItem>() accountMenuItem ??= this.OfType<MergedAccountMenuItem>()
.FirstOrDefault(a => a.HoldingAccounts.Any(b => b.Id == accountId))?.SubMenuItems .FirstOrDefault(a => a.HoldingAccounts.Any(b => b.Id == accountId))?.SubMenuItems
.OfType<AccountMenuItem>() .OfType<AccountMenuItem>()
.FirstOrDefault(); .FirstOrDefault(a => a.AccountId == accountId);
return accountMenuItem; return accountMenuItem;
} }
public async Task ReplaceFoldersAsync(IEnumerable<IMenuItem> folders) public void ReplaceFolders(IEnumerable<IMenuItem> folders)
{
await _dispatcher.ExecuteOnUIThread(() =>
{ {
ClearFolderAreaMenuItems(); ClearFolderAreaMenuItems();
Items.Add(new SeperatorItem()); Items.Add(new SeperatorItem());
AddRange(folders); AddRange(folders);
});
} }
/// <summary> /// <summary>
@@ -194,9 +191,13 @@ namespace Wino.Core.MenuItems
{ {
item.IsExpanded = false; item.IsExpanded = false;
item.IsSelected = false; item.IsSelected = false;
});
RemoveRange(itemsToRemove); try
{
Remove(item);
}
catch (Exception) { }
});
} }
} }
} }

View File

@@ -31,8 +31,6 @@ namespace Wino.Core.Requests
} }
} }
public override bool DelayExecution => false;
public List<Guid> SynchronizationFolderIds => [Folder.Id]; public List<Guid> SynchronizationFolderIds => [Folder.Id];
} }
} }

View File

@@ -42,5 +42,7 @@ namespace Wino.Core.Requests
{ {
Items.ForEach(item => WeakReferenceMessenger.Default.Send(new MailAddedMessage(item.Item))); Items.ForEach(item => WeakReferenceMessenger.Default.Send(new MailAddedMessage(item.Item)));
} }
public override int ResynchronizationDelay => 3000;
} }
} }

View File

@@ -45,7 +45,8 @@ namespace Wino.Core.Requests
} }
[EditorBrowsable(EditorBrowsableState.Never)] [EditorBrowsable(EditorBrowsableState.Never)]
public record BatchSendDraftRequestRequest(IEnumerable<IRequest> Items, SendDraftPreparationRequest Request) : BatchRequestBase(Items, MailSynchronizerOperation.Send) public record BatchSendDraftRequestRequest(IEnumerable<IRequest> Items,
SendDraftPreparationRequest Request) : BatchRequestBase(Items, MailSynchronizerOperation.Send)
{ {
public override void ApplyUIChanges() public override void ApplyUIChanges()
{ {
@@ -57,6 +58,7 @@ namespace Wino.Core.Requests
Items.ForEach(item => WeakReferenceMessenger.Default.Send(new MailAddedMessage(item.Item))); Items.ForEach(item => WeakReferenceMessenger.Default.Send(new MailAddedMessage(item.Item)));
} }
public override bool DelayExecution => true; public override int ResynchronizationDelay => 6000;
public override bool ExecuteSerialBatch => true;
} }
} }

View File

@@ -332,6 +332,18 @@ namespace Wino.Core.Services
account.SenderName = profileInformation.SenderName; account.SenderName = profileInformation.SenderName;
account.Base64ProfilePictureData = profileInformation.Base64ProfilePictureData; account.Base64ProfilePictureData = profileInformation.Base64ProfilePictureData;
// Forcefully add or update a contact data with the provided information.
var accountContact = new AccountContact()
{
Address = account.Address,
Name = account.SenderName,
Base64ContactPicture = account.Base64ProfilePictureData,
IsRootContact = true
};
await Connection.InsertOrReplaceAsync(accountContact).ConfigureAwait(false);
await UpdateAccountAsync(account).ConfigureAwait(false); await UpdateAccountAsync(account).ConfigureAwait(false);
} }
} }
@@ -531,7 +543,6 @@ namespace Wino.Core.Services
if (shouldUpdateIdentifier) if (shouldUpdateIdentifier)
{ {
_logger.Debug("Updating synchronization identifier for {Name}. From: {SynchronizationDeltaIdentifier} To: {NewIdentifier}", account.Name, account.SynchronizationDeltaIdentifier, newIdentifier);
account.SynchronizationDeltaIdentifier = newIdentifier; account.SynchronizationDeltaIdentifier = newIdentifier;
await UpdateAccountAsync(account); await UpdateAccountAsync(account);

View File

@@ -10,8 +10,8 @@ namespace Wino.Core.Services
{ {
public interface IContactService public interface IContactService
{ {
Task<List<AddressInformation>> GetAddressInformationAsync(string queryText); Task<List<AccountContact>> GetAddressInformationAsync(string queryText);
Task<AddressInformation> GetAddressInformationByAddressAsync(string address); Task<AccountContact> GetAddressInformationByAddressAsync(string address);
Task SaveAddressInformationAsync(MimeMessage message); Task SaveAddressInformationAsync(MimeMessage message);
} }
@@ -19,25 +19,22 @@ namespace Wino.Core.Services
{ {
public ContactService(IDatabaseService databaseService) : base(databaseService) { } public ContactService(IDatabaseService databaseService) : base(databaseService) { }
public Task<List<AddressInformation>> GetAddressInformationAsync(string queryText) public Task<List<AccountContact>> GetAddressInformationAsync(string queryText)
{ {
if (queryText == null || queryText.Length < 2) if (queryText == null || queryText.Length < 2)
return Task.FromResult<List<AddressInformation>>(null); return Task.FromResult<List<AccountContact>>(null);
var query = new Query(nameof(AddressInformation)); var query = new Query(nameof(AccountContact));
query.WhereContains("Address", queryText); query.WhereContains("Address", queryText);
query.OrWhereContains("Name", queryText); query.OrWhereContains("Name", queryText);
var rawLikeQuery = query.GetRawQuery(); var rawLikeQuery = query.GetRawQuery();
return Connection.QueryAsync<AddressInformation>(rawLikeQuery); return Connection.QueryAsync<AccountContact>(rawLikeQuery);
} }
public async Task<AddressInformation> GetAddressInformationByAddressAsync(string address) public Task<AccountContact> GetAddressInformationByAddressAsync(string address)
{ => Connection.Table<AccountContact>().Where(a => a.Address == address).FirstOrDefaultAsync();
return await Connection.Table<AddressInformation>().Where(a => a.Address == address).FirstOrDefaultAsync()
?? new AddressInformation() { Name = address, Address = address };
}
public async Task SaveAddressInformationAsync(MimeMessage message) public async Task SaveAddressInformationAsync(MimeMessage message)
{ {
@@ -45,10 +42,21 @@ namespace Wino.Core.Services
.GetRecipients(true) .GetRecipients(true)
.Where(a => !string.IsNullOrEmpty(a.Name) && !string.IsNullOrEmpty(a.Address)); .Where(a => !string.IsNullOrEmpty(a.Name) && !string.IsNullOrEmpty(a.Address));
var addressInformations = recipients.Select(a => new AddressInformation() { Name = a.Name, Address = a.Address }); var addressInformations = recipients.Select(a => new AccountContact() { Name = a.Name, Address = a.Address });
foreach (var info in addressInformations) foreach (var info in addressInformations)
{
var currentContact = await GetAddressInformationByAddressAsync(info.Address).ConfigureAwait(false);
if (currentContact == null)
{
await Connection.InsertAsync(info).ConfigureAwait(false);
}
else if (!currentContact.IsRootContact) // Don't update root contacts. They belong to accounts.
{
await Connection.InsertOrReplaceAsync(info).ConfigureAwait(false); await Connection.InsertOrReplaceAsync(info).ConfigureAwait(false);
} }
} }
} }
}
}

View File

@@ -80,27 +80,26 @@ namespace Wino.Core.Services
} }
else else
{ {
bool isAllFlagged = selectedMailItems.All(a => a.IsFlagged);
bool isAllRead = selectedMailItems.All(a => a.IsRead); bool isAllRead = selectedMailItems.All(a => a.IsRead);
bool isAllUnread = selectedMailItems.All(a => !a.IsRead); bool isAllUnread = selectedMailItems.All(a => !a.IsRead);
bool isAllFlagged = selectedMailItems.All(a => a.IsFlagged);
bool isAllNotFlagged = selectedMailItems.All(a => !a.IsFlagged);
if (isAllRead) List<MailOperationMenuItem> readOperations = (isAllRead, isAllUnread) switch
operationList.Add(MailOperationMenuItem.Create(MailOperation.MarkAsUnread));
else
{ {
if (!isAllUnread) (true, false) => [MailOperationMenuItem.Create(MailOperation.MarkAsUnread)],
operationList.Add(MailOperationMenuItem.Create(MailOperation.MarkAsUnread)); (false, true) => [MailOperationMenuItem.Create(MailOperation.MarkAsRead)],
_ => [MailOperationMenuItem.Create(MailOperation.MarkAsRead), MailOperationMenuItem.Create(MailOperation.MarkAsUnread)]
};
operationList.AddRange(readOperations);
operationList.Add(MailOperationMenuItem.Create(MailOperation.MarkAsRead)); List<MailOperationMenuItem> flagsOperations = (isAllFlagged, isAllNotFlagged) switch
}
if (isAllFlagged)
operationList.Add(MailOperationMenuItem.Create(MailOperation.ClearFlag));
else
{ {
operationList.Add(MailOperationMenuItem.Create(MailOperation.ClearFlag)); (true, false) => [MailOperationMenuItem.Create(MailOperation.ClearFlag)],
operationList.Add(MailOperationMenuItem.Create(MailOperation.SetFlag)); (false, true) => [MailOperationMenuItem.Create(MailOperation.SetFlag)],
} _ => [MailOperationMenuItem.Create(MailOperation.SetFlag), MailOperationMenuItem.Create(MailOperation.ClearFlag)]
};
operationList.AddRange(flagsOperations);
} }
// Ignore // Ignore

View File

@@ -14,7 +14,7 @@ namespace Wino.Core.Services
public class DatabaseService : IDatabaseService public class DatabaseService : IDatabaseService
{ {
private const string DatabaseName = "Wino172.db"; private const string DatabaseName = "Wino180.db";
private bool _isInitialized = false; private bool _isInitialized = false;
private readonly IApplicationConfiguration _folderConfiguration; private readonly IApplicationConfiguration _folderConfiguration;
@@ -57,7 +57,7 @@ namespace Wino.Core.Services
typeof(MailItemFolder), typeof(MailItemFolder),
typeof(MailAccount), typeof(MailAccount),
typeof(TokenInformation), typeof(TokenInformation),
typeof(AddressInformation), typeof(AccountContact),
typeof(CustomServerInformation), typeof(CustomServerInformation),
typeof(AccountSignature), typeof(AccountSignature),
typeof(MergedInbox), typeof(MergedInbox),

View File

@@ -387,11 +387,6 @@ namespace Wino.Core.Services
if (configuration == null) if (configuration == null)
throw new ArgumentNullException(nameof(configuration)); throw new ArgumentNullException(nameof(configuration));
var account = await _accountService.GetAccountAsync(accountId);
if (account == null)
throw new ArgumentNullException(nameof(account));
// Update system folders for this account. // Update system folders for this account.
await Task.WhenAll(UpdateSystemFolderInternalAsync(configuration.SentFolder, SpecialFolderType.Sent), await Task.WhenAll(UpdateSystemFolderInternalAsync(configuration.SentFolder, SpecialFolderType.Sent),
@@ -400,9 +395,8 @@ namespace Wino.Core.Services
UpdateSystemFolderInternalAsync(configuration.TrashFolder, SpecialFolderType.Deleted), UpdateSystemFolderInternalAsync(configuration.TrashFolder, SpecialFolderType.Deleted),
UpdateSystemFolderInternalAsync(configuration.ArchiveFolder, SpecialFolderType.Archive)); UpdateSystemFolderInternalAsync(configuration.ArchiveFolder, SpecialFolderType.Archive));
await _accountService.UpdateAccountAsync(account);
return account; return await _accountService.GetAccountAsync(accountId).ConfigureAwait(false);
} }
private Task UpdateSystemFolderInternalAsync(MailItemFolder folder, SpecialFolderType assignedSpecialFolderType) private Task UpdateSystemFolderInternalAsync(MailItemFolder folder, SpecialFolderType assignedSpecialFolderType)
@@ -492,13 +486,6 @@ namespace Wino.Core.Services
return; return;
} }
var account = await _accountService.GetAccountAsync(folder.MailAccountId).ConfigureAwait(false);
if (account == null)
{
_logger.Warning("Account with id {MailAccountId} does not exist. Cannot update folder.", folder.MailAccountId);
return;
}
_logger.Debug("Updating folder {FolderName}", folder.Id, folder.FolderName); _logger.Debug("Updating folder {FolderName}", folder.Id, folder.FolderName);
await Connection.UpdateAsync(folder).ConfigureAwait(false); await Connection.UpdateAsync(folder).ConfigureAwait(false);
@@ -558,36 +545,11 @@ namespace Wino.Core.Services
public Task<List<MailFolderPairMetadata>> GetMailFolderPairMetadatasAsync(string mailCopyId) public Task<List<MailFolderPairMetadata>> GetMailFolderPairMetadatasAsync(string mailCopyId)
=> GetMailFolderPairMetadatasAsync(new List<string>() { mailCopyId }); => GetMailFolderPairMetadatasAsync(new List<string>() { mailCopyId });
public async Task<List<MailItemFolder>> GetSynchronizationFoldersAsync(SynchronizationOptions options) public async Task<List<MailItemFolder>> GetSynchronizationFoldersAsync(SynchronizationOptions options)
{ {
var folders = new List<MailItemFolder>(); var folders = new List<MailItemFolder>();
if (options.Type == SynchronizationType.Inbox) if (options.Type == SynchronizationType.Full)
{
var inboxFolder = await GetSpecialFolderByAccountIdAsync(options.AccountId, SpecialFolderType.Inbox);
var sentFolder = await GetSpecialFolderByAccountIdAsync(options.AccountId, SpecialFolderType.Sent);
var draftFolder = await GetSpecialFolderByAccountIdAsync(options.AccountId, SpecialFolderType.Draft);
// For properly creating threads we need Sent and Draft to be synchronized as well.
if (sentFolder != null && sentFolder.IsSynchronizationEnabled)
{
folders.Add(sentFolder);
}
if (draftFolder != null && draftFolder.IsSynchronizationEnabled)
{
folders.Add(draftFolder);
}
// User might've disabled inbox synchronization somehow...
if (inboxFolder != null && inboxFolder.IsSynchronizationEnabled)
{
folders.Add(inboxFolder);
}
}
else if (options.Type == SynchronizationType.Full)
{ {
// Only get sync enabled folders. // Only get sync enabled folders.
@@ -598,19 +560,75 @@ namespace Wino.Core.Services
folders.AddRange(synchronizationFolders); folders.AddRange(synchronizationFolders);
} }
else
{
// Inbox, Sent and Draft folders must always be synchronized regardless of whether they are enabled or not.
// Custom folder sync will add additional folders to the list if not specified.
var mustHaveFolders = await GetInboxSynchronizationFoldersAsync(options.AccountId);
if (options.Type == SynchronizationType.Inbox)
{
return mustHaveFolders;
}
else if (options.Type == SynchronizationType.Custom) else if (options.Type == SynchronizationType.Custom)
{ {
// Only get the specified and enabled folders. // Only get the specified and enabled folders.
var synchronizationFolders = await Connection.Table<MailItemFolder>() var synchronizationFolders = await Connection.Table<MailItemFolder>()
.Where(a => a.MailAccountId == options.AccountId && a.IsSynchronizationEnabled && options.SynchronizationFolderIds.Contains(a.Id)) .Where(a => a.MailAccountId == options.AccountId && options.SynchronizationFolderIds.Contains(a.Id))
.ToListAsync(); .ToListAsync();
// Order is important for moving. // Order is important for moving.
// By implementation, removing mail folders must be synchronized first. Requests are made in that order for custom sync. // By implementation, removing mail folders must be synchronized first. Requests are made in that order for custom sync.
// eg. Moving item from Folder A to Folder B. If we start syncing Folder B first, we might miss adding assignment for Folder A. // eg. Moving item from Folder A to Folder B. If we start syncing Folder B first, we might miss adding assignment for Folder A.
folders.AddRange(synchronizationFolders.OrderBy(a => options.SynchronizationFolderIds.IndexOf(a.Id))); var orderedCustomFolders = synchronizationFolders.OrderBy(a => options.SynchronizationFolderIds.IndexOf(a.Id));
foreach (var item in orderedCustomFolders)
{
if (!mustHaveFolders.Any(a => a.Id == item.Id))
{
mustHaveFolders.Add(item);
}
}
}
return mustHaveFolders;
}
return folders;
}
private async Task<List<MailItemFolder>> GetInboxSynchronizationFoldersAsync(Guid accountId)
{
var folders = new List<MailItemFolder>();
var inboxFolder = await GetSpecialFolderByAccountIdAsync(accountId, SpecialFolderType.Inbox);
var sentFolder = await GetSpecialFolderByAccountIdAsync(accountId, SpecialFolderType.Sent);
var draftFolder = await GetSpecialFolderByAccountIdAsync(accountId, SpecialFolderType.Draft);
var deletedFolder = await GetSpecialFolderByAccountIdAsync(accountId, SpecialFolderType.Deleted);
if (deletedFolder != null)
{
folders.Add(deletedFolder);
}
if (inboxFolder != null)
{
folders.Add(inboxFolder);
}
// For properly creating threads we need Sent and Draft to be synchronized as well.
if (sentFolder != null)
{
folders.Add(sentFolder);
}
if (draftFolder != null)
{
folders.Add(draftFolder);
} }
return folders; return folders;

View File

@@ -19,7 +19,11 @@ namespace Wino.Core.Services
public void RefreshLoggingLevel() public void RefreshLoggingLevel()
{ {
_levelSwitch.MinimumLevel = _preferencesService.IsLoggingEnabled ? Serilog.Events.LogEventLevel.Debug : Serilog.Events.LogEventLevel.Fatal; #if DEBUG
_levelSwitch.MinimumLevel = Serilog.Events.LogEventLevel.Debug;
#else
_levelSwitch.MinimumLevel = _preferencesService.IsLoggingEnabled ? Serilog.Events.LogEventLevel.Information : Serilog.Events.LogEventLevel.Fatal;
#endif
} }
public void SetupLogger(string fullLogFilePath) public void SetupLogger(string fullLogFilePath)

View File

@@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Kiota.Abstractions.Extensions; using Microsoft.Kiota.Abstractions.Extensions;
using MimeKit; using MimeKit;
@@ -193,7 +194,7 @@ namespace Wino.Core.Services
return query.GetRawQuery(); return query.GetRawQuery();
} }
public async Task<List<IMailItem>> FetchMailsAsync(MailListInitializationOptions options) public async Task<List<IMailItem>> FetchMailsAsync(MailListInitializationOptions options, CancellationToken cancellationToken = default)
{ {
var query = BuildMailFetchQuery(options); var query = BuildMailFetchQuery(options);
@@ -201,6 +202,7 @@ namespace Wino.Core.Services
Dictionary<Guid, MailItemFolder> folderCache = []; Dictionary<Guid, MailItemFolder> folderCache = [];
Dictionary<Guid, MailAccount> accountCache = []; Dictionary<Guid, MailAccount> accountCache = [];
Dictionary<string, AccountContact> contactCache = [];
// Populate Folder Assignment for each single mail, to be able later group by "MailAccountId". // Populate Folder Assignment for each single mail, to be able later group by "MailAccountId".
// This is needed to execute threading strategy by account type. // This is needed to execute threading strategy by account type.
@@ -215,6 +217,8 @@ namespace Wino.Core.Services
if (!options.CreateThreads) if (!options.CreateThreads)
{ {
cancellationToken.ThrowIfCancellationRequested();
// Threading is disabled. Just return everything as it is. // Threading is disabled. Just return everything as it is.
mails.Sort(options.SortingOptionType == SortingOptionType.ReceiveDate ? new DateComparer() : new NameComparer()); mails.Sort(options.SortingOptionType == SortingOptionType.ReceiveDate ? new DateComparer() : new NameComparer());
@@ -228,6 +232,8 @@ namespace Wino.Core.Services
// Each account items must be threaded separately. // Each account items must be threaded separately.
foreach (var group in mails.GroupBy(a => a.AssignedAccount.Id)) foreach (var group in mails.GroupBy(a => a.AssignedAccount.Id))
{ {
cancellationToken.ThrowIfCancellationRequested();
var accountId = group.Key; var accountId = group.Key;
var groupAccount = mails.First(a => a.AssignedAccount.Id == accountId).AssignedAccount; var groupAccount = mails.First(a => a.AssignedAccount.Id == accountId).AssignedAccount;
@@ -235,12 +241,13 @@ namespace Wino.Core.Services
// Only thread items from Draft and Sent folders must present here. // Only thread items from Draft and Sent folders must present here.
// Otherwise this strategy will fetch the items that are in Deleted folder as well. // Otherwise this strategy will fetch the items that are in Deleted folder as well.
var accountThreadedItems = await threadingStrategy.ThreadItemsAsync([.. group]); var accountThreadedItems = await threadingStrategy.ThreadItemsAsync([.. group], options.Folders.First());
// Populate threaded items with folder and account assignments. // Populate threaded items with folder and account assignments.
// Almost everything already should be in cache from initial population. // Almost everything already should be in cache from initial population.
foreach (var mail in accountThreadedItems) foreach (var mail in accountThreadedItems)
{ {
cancellationToken.ThrowIfCancellationRequested();
await LoadAssignedPropertiesWithCacheAsync(mail, folderCache, accountCache).ConfigureAwait(false); await LoadAssignedPropertiesWithCacheAsync(mail, folderCache, accountCache).ConfigureAwait(false);
} }
@@ -251,11 +258,14 @@ namespace Wino.Core.Services
} }
threadedItems.Sort(options.SortingOptionType == SortingOptionType.ReceiveDate ? new DateComparer() : new NameComparer()); threadedItems.Sort(options.SortingOptionType == SortingOptionType.ReceiveDate ? new DateComparer() : new NameComparer());
cancellationToken.ThrowIfCancellationRequested();
return threadedItems; return threadedItems;
// Recursive function to populate folder and account assignments for each mail item. // Recursive function to populate folder and account assignments for each mail item.
async Task LoadAssignedPropertiesWithCacheAsync(IMailItem mail, Dictionary<Guid, MailItemFolder> folderCache, Dictionary<Guid, MailAccount> accountCache) async Task LoadAssignedPropertiesWithCacheAsync(IMailItem mail,
Dictionary<Guid, MailItemFolder> folderCache,
Dictionary<Guid, MailAccount> accountCache)
{ {
if (mail is ThreadMailItem threadMailItem) if (mail is ThreadMailItem threadMailItem)
{ {
@@ -276,6 +286,7 @@ namespace Wino.Core.Services
folderAssignment = await _folderService.GetFolderAsync(mailCopy.FolderId).ConfigureAwait(false); folderAssignment = await _folderService.GetFolderAsync(mailCopy.FolderId).ConfigureAwait(false);
_ = folderCache.TryAdd(mailCopy.FolderId, folderAssignment); _ = folderCache.TryAdd(mailCopy.FolderId, folderAssignment);
} }
if (folderAssignment != null) if (folderAssignment != null)
{ {
var isAccountCached = accountCache.TryGetValue(folderAssignment.MailAccountId, out accountAssignment); var isAccountCached = accountCache.TryGetValue(folderAssignment.MailAccountId, out accountAssignment);
@@ -283,15 +294,55 @@ namespace Wino.Core.Services
{ {
accountAssignment = await _accountService.GetAccountAsync(folderAssignment.MailAccountId).ConfigureAwait(false); accountAssignment = await _accountService.GetAccountAsync(folderAssignment.MailAccountId).ConfigureAwait(false);
_ = accountCache.TryAdd(folderAssignment.MailAccountId, accountAssignment); _ = accountCache.TryAdd(folderAssignment.MailAccountId, accountAssignment);
}
}
AccountContact contactAssignment = null;
bool isContactCached = !string.IsNullOrEmpty(mailCopy.FromAddress) ?
contactCache.TryGetValue(mailCopy.FromAddress, out contactAssignment) :
false;
if (!isContactCached && accountAssignment != null)
{
contactAssignment = await GetSenderContactForAccountAsync(accountAssignment, mailCopy.FromAddress).ConfigureAwait(false);
if (contactAssignment != null)
{
_ = contactCache.TryAdd(mailCopy.FromAddress, contactAssignment);
} }
} }
mailCopy.AssignedFolder = folderAssignment; mailCopy.AssignedFolder = folderAssignment;
mailCopy.AssignedAccount = accountAssignment; mailCopy.AssignedAccount = accountAssignment;
mailCopy.SenderContact = contactAssignment ?? CreateUnknownContact(mailCopy.FromName, mailCopy.FromAddress);
} }
} }
} }
private AccountContact CreateUnknownContact(string fromName, string fromAddress)
{
if (string.IsNullOrEmpty(fromName) && string.IsNullOrEmpty(fromAddress))
{
return new AccountContact()
{
Name = Translator.UnknownSender,
Address = Translator.UnknownAddress
};
}
else
{
if (string.IsNullOrEmpty(fromName)) fromName = fromAddress;
return new AccountContact()
{
Name = fromName,
Address = fromAddress
};
}
}
private async Task<List<MailCopy>> GetMailItemsAsync(string mailCopyId) private async Task<List<MailCopy>> GetMailItemsAsync(string mailCopyId)
{ {
var mailCopies = await Connection.Table<MailCopy>().Where(a => a.Id == mailCopyId).ToListAsync(); var mailCopies = await Connection.Table<MailCopy>().Where(a => a.Id == mailCopyId).ToListAsync();
@@ -304,11 +355,24 @@ namespace Wino.Core.Services
return mailCopies; return mailCopies;
} }
private Task<AccountContact> GetSenderContactForAccountAsync(MailAccount account, string fromAddress)
{
// Make sure to return the latest up to date contact information for the original account.
if (fromAddress == account.Address)
{
return Task.FromResult(new AccountContact() { Address = account.Address, Name = account.SenderName, Base64ContactPicture = account.Base64ProfilePictureData });
}
else
{
return _contactService.GetAddressInformationByAddressAsync(fromAddress);
}
}
private async Task LoadAssignedPropertiesAsync(MailCopy mailCopy) private async Task LoadAssignedPropertiesAsync(MailCopy mailCopy)
{ {
if (mailCopy == null) return; if (mailCopy == null) return;
// Load AssignedAccount and AssignedFolder. // Load AssignedAccount, AssignedFolder and SenderContact.
var folder = await _folderService.GetFolderAsync(mailCopy.FolderId); var folder = await _folderService.GetFolderAsync(mailCopy.FolderId);
@@ -320,6 +384,7 @@ namespace Wino.Core.Services
mailCopy.AssignedAccount = account; mailCopy.AssignedAccount = account;
mailCopy.AssignedFolder = folder; mailCopy.AssignedFolder = folder;
mailCopy.SenderContact = await GetSenderContactForAccountAsync(account, mailCopy.FromAddress).ConfigureAwait(false);
} }
public async Task<MailCopy> GetSingleMailItemWithoutFolderAssignmentAsync(string mailCopyId) public async Task<MailCopy> GetSingleMailItemWithoutFolderAssignmentAsync(string mailCopyId)
@@ -370,12 +435,11 @@ namespace Wino.Core.Services
foreach (var mailItem in allMails) foreach (var mailItem in allMails)
{ {
await DeleteMailInternalAsync(mailItem).ConfigureAwait(false); // Delete mime file as well.
// Delete mime file.
// Even though Gmail might have multiple copies for the same mail, we only have one MIME file for all. // Even though Gmail might have multiple copies for the same mail, we only have one MIME file for all.
// Their FileId is inserted same. // Their FileId is inserted same.
await _mimeFileService.DeleteMimeMessageAsync(accountId, mailItem.FileId);
await DeleteMailInternalAsync(mailItem, preserveMimeFile: false).ConfigureAwait(false);
} }
} }
@@ -395,7 +459,7 @@ namespace Wino.Core.Services
return; return;
} }
_logger.Debug("Inserting mail {MailCopyId} to Folder {FolderId}", mailCopy.Id, mailCopy.FolderId); _logger.Debug("Inserting mail {MailCopyId} to {FolderName}", mailCopy.Id, mailCopy.AssignedFolder.FolderName);
await Connection.InsertAsync(mailCopy).ConfigureAwait(false); await Connection.InsertAsync(mailCopy).ConfigureAwait(false);
@@ -418,7 +482,7 @@ namespace Wino.Core.Services
ReportUIChange(new MailUpdatedMessage(mailCopy)); ReportUIChange(new MailUpdatedMessage(mailCopy));
} }
private async Task DeleteMailInternalAsync(MailCopy mailCopy) private async Task DeleteMailInternalAsync(MailCopy mailCopy, bool preserveMimeFile)
{ {
if (mailCopy == null) if (mailCopy == null)
{ {
@@ -427,14 +491,14 @@ namespace Wino.Core.Services
return; return;
} }
_logger.Debug("Deleting mail {Id} with Folder {FolderId}", mailCopy.Id, mailCopy.FolderId); _logger.Debug("Deleting mail {Id} from folder {FolderName}", mailCopy.Id, mailCopy.AssignedFolder.FolderName);
await Connection.DeleteAsync(mailCopy).ConfigureAwait(false); await Connection.DeleteAsync(mailCopy).ConfigureAwait(false);
// If there are no more copies exists of the same mail, delete the MIME file as well. // If there are no more copies exists of the same mail, delete the MIME file as well.
var isMailExists = await IsMailExistsAsync(mailCopy.Id).ConfigureAwait(false); var isMailExists = await IsMailExistsAsync(mailCopy.Id).ConfigureAwait(false);
if (!isMailExists) if (!isMailExists && !preserveMimeFile)
{ {
await _mimeFileService.DeleteMimeMessageAsync(mailCopy.AssignedAccount.Id, mailCopy.FileId).ConfigureAwait(false); await _mimeFileService.DeleteMimeMessageAsync(mailCopy.AssignedAccount.Id, mailCopy.FileId).ConfigureAwait(false);
} }
@@ -455,7 +519,7 @@ namespace Wino.Core.Services
return; return;
} }
_logger.Information("Updating {MailCopyCount} mail copies with Id {MailCopyId}", mailCopies.Count, mailCopyId); _logger.Debug("Updating {MailCopyCount} mail copies with Id {MailCopyId}", mailCopies.Count, mailCopyId);
foreach (var mailCopy in mailCopies) foreach (var mailCopy in mailCopies)
{ {
@@ -466,13 +530,15 @@ namespace Wino.Core.Services
await UpdateMailAsync(mailCopy).ConfigureAwait(false); await UpdateMailAsync(mailCopy).ConfigureAwait(false);
} }
else else
_logger.Information("Skipped updating mail because it is already in the desired state."); _logger.Debug("Skipped updating mail because it is already in the desired state.");
} }
} }
public Task ChangeReadStatusAsync(string mailCopyId, bool isRead) public Task ChangeReadStatusAsync(string mailCopyId, bool isRead)
=> UpdateAllMailCopiesAsync(mailCopyId, (item) => => UpdateAllMailCopiesAsync(mailCopyId, (item) =>
{ {
if (item.IsRead == isRead) return false;
item.IsRead = isRead; item.IsRead = isRead;
return true; return true;
@@ -481,6 +547,8 @@ namespace Wino.Core.Services
public Task ChangeFlagStatusAsync(string mailCopyId, bool isFlagged) public Task ChangeFlagStatusAsync(string mailCopyId, bool isFlagged)
=> UpdateAllMailCopiesAsync(mailCopyId, (item) => => UpdateAllMailCopiesAsync(mailCopyId, (item) =>
{ {
if (item.IsFlagged == isFlagged) return false;
item.IsFlagged = isFlagged; item.IsFlagged = isFlagged;
return true; return true;
@@ -511,6 +579,19 @@ namespace Wino.Core.Services
return; return;
} }
if (mailCopy.AssignedFolder.SpecialFolderType == SpecialFolderType.Sent &&
localFolder.SpecialFolderType == SpecialFolderType.Deleted)
{
// Sent item is deleted.
// Gmail does not delete the sent items, but moves them to the deleted folder.
// API doesn't allow removing Sent label.
// Here we intercept this behavior, removing the Sent copy of the mail and adding the Deleted copy.
// This way item will only be visible in Trash folder as in Gmail Web UI.
// Don't delete MIME file since if exists.
await DeleteMailInternalAsync(mailCopy, preserveMimeFile: true).ConfigureAwait(false);
}
// Copy one of the mail copy and assign it to the new folder. // Copy one of the mail copy and assign it to the new folder.
// We don't need to create a new MIME pack. // We don't need to create a new MIME pack.
// Therefore FileId is not changed for the new MailCopy. // Therefore FileId is not changed for the new MailCopy.
@@ -542,7 +623,7 @@ namespace Wino.Core.Services
return; return;
} }
await DeleteMailInternalAsync(mailItem).ConfigureAwait(false); await DeleteMailInternalAsync(mailItem, preserveMimeFile: false).ConfigureAwait(false);
} }
public async Task<bool> CreateMailAsync(Guid accountId, NewMailItemPackage package) public async Task<bool> CreateMailAsync(Guid accountId, NewMailItemPackage package)
@@ -575,6 +656,7 @@ namespace Wino.Core.Services
mailCopy.UniqueId = Guid.NewGuid(); mailCopy.UniqueId = Guid.NewGuid();
mailCopy.AssignedAccount = account; mailCopy.AssignedAccount = account;
mailCopy.AssignedFolder = assignedFolder; mailCopy.AssignedFolder = assignedFolder;
mailCopy.SenderContact = await GetSenderContactForAccountAsync(account, mailCopy.FromAddress).ConfigureAwait(false);
mailCopy.FolderId = assignedFolder.Id; mailCopy.FolderId = assignedFolder.Id;
// Only save MIME files if they don't exists. // Only save MIME files if they don't exists.

View File

@@ -13,6 +13,7 @@ namespace Wino.Core.Services
private bool isInitialized = false; private bool isInitialized = false;
private readonly IAccountService _accountService; private readonly IAccountService _accountService;
private readonly IApplicationConfiguration _applicationConfiguration;
private readonly IOutlookChangeProcessor _outlookChangeProcessor; private readonly IOutlookChangeProcessor _outlookChangeProcessor;
private readonly IGmailChangeProcessor _gmailChangeProcessor; private readonly IGmailChangeProcessor _gmailChangeProcessor;
private readonly IImapChangeProcessor _imapChangeProcessor; private readonly IImapChangeProcessor _imapChangeProcessor;
@@ -26,7 +27,8 @@ namespace Wino.Core.Services
IImapChangeProcessor imapChangeProcessor, IImapChangeProcessor imapChangeProcessor,
IOutlookAuthenticator outlookAuthenticator, IOutlookAuthenticator outlookAuthenticator,
IGmailAuthenticator gmailAuthenticator, IGmailAuthenticator gmailAuthenticator,
IAccountService accountService) IAccountService accountService,
IApplicationConfiguration applicationConfiguration)
{ {
_outlookChangeProcessor = outlookChangeProcessor; _outlookChangeProcessor = outlookChangeProcessor;
_gmailChangeProcessor = gmailChangeProcessor; _gmailChangeProcessor = gmailChangeProcessor;
@@ -34,6 +36,7 @@ namespace Wino.Core.Services
_outlookAuthenticator = outlookAuthenticator; _outlookAuthenticator = outlookAuthenticator;
_gmailAuthenticator = gmailAuthenticator; _gmailAuthenticator = gmailAuthenticator;
_accountService = accountService; _accountService = accountService;
_applicationConfiguration = applicationConfiguration;
} }
public async Task<IBaseSynchronizer> GetAccountSynchronizerAsync(Guid accountId) public async Task<IBaseSynchronizer> GetAccountSynchronizerAsync(Guid accountId)
@@ -67,7 +70,7 @@ namespace Wino.Core.Services
case Domain.Enums.MailProviderType.Gmail: case Domain.Enums.MailProviderType.Gmail:
return new GmailSynchronizer(mailAccount, _gmailAuthenticator, _gmailChangeProcessor); return new GmailSynchronizer(mailAccount, _gmailAuthenticator, _gmailChangeProcessor);
case Domain.Enums.MailProviderType.IMAP4: case Domain.Enums.MailProviderType.IMAP4:
return new ImapSynchronizer(mailAccount, _imapChangeProcessor); return new ImapSynchronizer(mailAccount, _imapChangeProcessor, _applicationConfiguration);
default: default:
break; break;
} }

View File

@@ -206,12 +206,18 @@ namespace Wino.Core.Synchronizers
} }
// Let servers to finish their job. Sometimes the servers doesn't respond immediately. // Let servers to finish their job. Sometimes the servers doesn't respond immediately.
// Bug: if Outlook can't create the message in Sent Items folder before this delay,
// message will not appear in user's inbox since it's not in the Sent Items folder.
bool shouldDelayExecution = batches.Any(a => a.DelayExecution); bool shouldDelayExecution =
(Account.ProviderType == MailProviderType.Outlook || Account.ProviderType == MailProviderType.Office365)
&& batches.Any(a => a.ResynchronizationDelay > 0);
if (shouldDelayExecution) if (shouldDelayExecution)
{ {
await Task.Delay(2000); var maxDelay = batches.Aggregate(0, (max, next) => Math.Max(max, next.ResynchronizationDelay));
await Task.Delay(maxDelay);
} }
// Start the internal synchronization. // Start the internal synchronization.

View File

@@ -4,6 +4,7 @@ using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Messaging;
using Google.Apis.Gmail.v1; using Google.Apis.Gmail.v1;
using Google.Apis.Gmail.v1.Data; using Google.Apis.Gmail.v1.Data;
using Google.Apis.Http; using Google.Apis.Http;
@@ -27,6 +28,7 @@ using Wino.Core.Extensions;
using Wino.Core.Http; using Wino.Core.Http;
using Wino.Core.Integration.Processors; using Wino.Core.Integration.Processors;
using Wino.Core.Requests; using Wino.Core.Requests;
using Wino.Messaging.UI;
namespace Wino.Core.Synchronizers namespace Wino.Core.Synchronizers
{ {
@@ -341,6 +343,9 @@ namespace Wino.Core.Synchronizers
if (ShouldUpdateFolder(remoteFolder, existingLocalFolder)) if (ShouldUpdateFolder(remoteFolder, existingLocalFolder))
{ {
existingLocalFolder.FolderName = remoteFolder.Name; existingLocalFolder.FolderName = remoteFolder.Name;
existingLocalFolder.TextColorHex = remoteFolder.Color?.TextColor;
existingLocalFolder.BackgroundColorHex = remoteFolder.Color?.BackgroundColor;
updatedFolders.Add(existingLocalFolder); updatedFolders.Add(existingLocalFolder);
} }
else else
@@ -362,6 +367,11 @@ namespace Wino.Core.Synchronizers
{ {
await _gmailChangeProcessor.UpdateFolderAsync(folder).ConfigureAwait(false); await _gmailChangeProcessor.UpdateFolderAsync(folder).ConfigureAwait(false);
} }
if (insertedFolders.Any() || deletedFolders.Any() || updatedFolders.Any())
{
WeakReferenceMessenger.Default.Send(new AccountFolderConfigurationUpdated(Account.Id));
}
} }
catch (Exception) catch (Exception)
{ {
@@ -370,7 +380,16 @@ namespace Wino.Core.Synchronizers
} }
private bool ShouldUpdateFolder(Label remoteFolder, MailItemFolder existingLocalFolder) private bool ShouldUpdateFolder(Label remoteFolder, MailItemFolder existingLocalFolder)
=> existingLocalFolder.FolderName.Equals(GoogleIntegratorExtensions.GetFolderName(remoteFolder), StringComparison.OrdinalIgnoreCase) == false; {
var remoteFolderName = GoogleIntegratorExtensions.GetFolderName(remoteFolder.Name);
var localFolderName = GoogleIntegratorExtensions.GetFolderName(existingLocalFolder.FolderName);
bool isNameChanged = !localFolderName.Equals(remoteFolderName, StringComparison.OrdinalIgnoreCase);
bool isColorChanged = existingLocalFolder.BackgroundColorHex != remoteFolder.Color?.BackgroundColor ||
existingLocalFolder.TextColorHex != remoteFolder.Color?.TextColor;
return isNameChanged || isColorChanged;
}
/// <summary> /// <summary>
/// Returns a single get request to retrieve the raw message with the given id /// Returns a single get request to retrieve the raw message with the given id
@@ -576,13 +595,23 @@ namespace Wino.Core.Synchronizers
{ {
return CreateBatchedHttpBundleFromGroup(request, (items) => return CreateBatchedHttpBundleFromGroup(request, (items) =>
{ {
// Sent label can't be removed from mails for Gmail.
// They are automatically assigned by Gmail.
// When you delete sent mail from gmail web portal, it's moved to Trash
// but still has Sent label. It's just hidden from the user.
// Proper assignments will be done later on CreateAssignment call to mimic this behavior.
var batchModifyRequest = new BatchModifyMessagesRequest var batchModifyRequest = new BatchModifyMessagesRequest
{ {
Ids = items.Select(a => a.Item.Id.ToString()).ToList(), Ids = items.Select(a => a.Item.Id.ToString()).ToList(),
AddLabelIds = new[] { request.ToFolder.RemoteFolderId }, AddLabelIds = [request.ToFolder.RemoteFolderId]
RemoveLabelIds = new[] { request.FromFolder.RemoteFolderId }
}; };
// Only add remove label ids if the source folder is not sent folder.
if (request.FromFolder.SpecialFolderType != SpecialFolderType.Sent)
{
batchModifyRequest.RemoveLabelIds = [request.FromFolder.RemoteFolderId];
}
return _gmailService.Users.Messages.BatchModify(batchModifyRequest, "me"); return _gmailService.Users.Messages.BatchModify(batchModifyRequest, "me");
}); });
} }
@@ -774,6 +803,8 @@ namespace Wino.Core.Synchronizers
var bundleRequestCount = bundle.Count(); var bundleRequestCount = bundle.Count();
var bundleTasks = new List<Task>();
for (int k = 0; k < bundleRequestCount; k++) for (int k = 0; k < bundleRequestCount; k++)
{ {
var requestBundle = bundle.ElementAt(k); var requestBundle = bundle.ElementAt(k);
@@ -783,37 +814,40 @@ namespace Wino.Core.Synchronizers
request.ApplyUIChanges(); request.ApplyUIChanges();
// TODO: Queue is synchronous. Create a task bucket to await all processing. nativeBatchRequest.Queue<object>(nativeRequest, (content, error, index, message)
nativeBatchRequest.Queue<object>(nativeRequest, async (content, error, index, message) => bundleTasks.Add(ProcessSingleNativeRequestResponseAsync(requestBundle, error, message, cancellationToken)));
=> await ProcessSingleNativeRequestResponseAsync(requestBundle, error, message, cancellationToken).ConfigureAwait(false));
} }
await nativeBatchRequest.ExecuteAsync(cancellationToken).ConfigureAwait(false); await nativeBatchRequest.ExecuteAsync(cancellationToken).ConfigureAwait(false);
await Task.WhenAll(bundleTasks);
} }
} }
private void ProcessGmailRequestError(RequestError error) private void ProcessGmailRequestError(RequestError error, IRequestBundle<IClientServiceRequest> bundle)
{ {
if (error == null) return; if (error == null) return;
// OutOfMemoryException is a known bug in Gmail SDK. // OutOfMemoryException is a known bug in Gmail SDK.
if (error.Code == 0) if (error.Code == 0)
{ {
bundle?.Request.RevertUIChanges();
throw new OutOfMemoryException(error.Message); throw new OutOfMemoryException(error.Message);
} }
// Entity not found. // Entity not found.
if (error.Code == 404) if (error.Code == 404)
{ {
bundle?.Request.RevertUIChanges();
throw new SynchronizerEntityNotFoundException(error.Message); throw new SynchronizerEntityNotFoundException(error.Message);
} }
if (!string.IsNullOrEmpty(error.Message)) if (!string.IsNullOrEmpty(error.Message))
{ {
bundle?.Request.RevertUIChanges();
error.Errors?.ForEach(error => _logger.Error("Unknown Gmail SDK error for {Name}\n{Error}", Account.Name, error)); error.Errors?.ForEach(error => _logger.Error("Unknown Gmail SDK error for {Name}\n{Error}", Account.Name, error));
// TODO: Debug throw new SynchronizerException(error.Message);
// throw new SynchronizerException(error.Message);
} }
} }
@@ -832,7 +866,7 @@ namespace Wino.Core.Synchronizers
{ {
try try
{ {
ProcessGmailRequestError(error); ProcessGmailRequestError(error, null);
} }
catch (OutOfMemoryException) catch (OutOfMemoryException)
{ {
@@ -881,7 +915,7 @@ namespace Wino.Core.Synchronizers
HttpResponseMessage httpResponseMessage, HttpResponseMessage httpResponseMessage,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
ProcessGmailRequestError(error); ProcessGmailRequestError(error, bundle);
if (bundle is HttpRequestBundle<IClientServiceRequest, Message> messageBundle) if (bundle is HttpRequestBundle<IClientServiceRequest, Message> messageBundle)
{ {

View File

@@ -1,8 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Messaging;
using MailKit; using MailKit;
using MailKit.Net.Imap; using MailKit.Net.Imap;
using MailKit.Search; using MailKit.Search;
@@ -21,6 +23,7 @@ using Wino.Core.Integration.Processors;
using Wino.Core.Mime; using Wino.Core.Mime;
using Wino.Core.Requests; using Wino.Core.Requests;
using Wino.Core.Requests.Bundles; using Wino.Core.Requests.Bundles;
using Wino.Messaging.UI;
namespace Wino.Core.Synchronizers namespace Wino.Core.Synchronizers
{ {
@@ -34,6 +37,7 @@ namespace Wino.Core.Synchronizers
private readonly ILogger _logger = Log.ForContext<ImapSynchronizer>(); private readonly ILogger _logger = Log.ForContext<ImapSynchronizer>();
private readonly ImapClientPool _clientPool; private readonly ImapClientPool _clientPool;
private readonly IImapChangeProcessor _imapChangeProcessor; private readonly IImapChangeProcessor _imapChangeProcessor;
private readonly IApplicationConfiguration _applicationConfiguration;
// Minimum summary items to Fetch for mail synchronization from IMAP. // Minimum summary items to Fetch for mail synchronization from IMAP.
private readonly MessageSummaryItems mailSynchronizationFlags = private readonly MessageSummaryItems mailSynchronizationFlags =
@@ -61,14 +65,30 @@ namespace Wino.Core.Synchronizers
public override uint BatchModificationSize => 1000; public override uint BatchModificationSize => 1000;
public override uint InitialMessageDownloadCountPerFolder => 250; public override uint InitialMessageDownloadCountPerFolder => 250;
public ImapSynchronizer(MailAccount account, IImapChangeProcessor imapChangeProcessor) : base(account) public ImapSynchronizer(MailAccount account,
IImapChangeProcessor imapChangeProcessor,
IApplicationConfiguration applicationConfiguration) : base(account)
{ {
_clientPool = new ImapClientPool(Account.ServerInformation); // Create client pool with account protocol log.
_imapChangeProcessor = imapChangeProcessor; _imapChangeProcessor = imapChangeProcessor;
_applicationConfiguration = applicationConfiguration;
_clientPool = new ImapClientPool(Account.ServerInformation, CreateAccountProtocolLogFileStream());
idleDoneToken = new CancellationTokenSource(); idleDoneToken = new CancellationTokenSource();
} }
private Stream CreateAccountProtocolLogFileStream()
{
if (Account == null) throw new ArgumentNullException(nameof(Account));
var logFile = Path.Combine(_applicationConfiguration.ApplicationDataFolderPath, $"Protocol_{Account.Address}.log");
// Each session should start a new log.
if (File.Exists(logFile)) File.Delete(logFile);
return new FileStream(logFile, FileMode.CreateNew);
}
// TODO // TODO
// private async void NoOpTimerTriggered(object state) => await AwaitInboxIdleAsync(); // private async void NoOpTimerTriggered(object state) => await AwaitInboxIdleAsync();
@@ -263,7 +283,6 @@ namespace Wino.Core.Synchronizers
{ {
return CreateTaskBundle(async (ImapClient client) => return CreateTaskBundle(async (ImapClient client) =>
{ {
var remoteDraftFolder = await client.GetFolderAsync(request.DraftPreperationRequest.CreatedLocalDraftCopy.AssignedFolder.RemoteFolderId).ConfigureAwait(false); var remoteDraftFolder = await client.GetFolderAsync(request.DraftPreperationRequest.CreatedLocalDraftCopy.AssignedFolder.RemoteFolderId).ConfigureAwait(false);
await remoteDraftFolder.OpenAsync(FolderAccess.ReadWrite).ConfigureAwait(false); await remoteDraftFolder.OpenAsync(FolderAccess.ReadWrite).ConfigureAwait(false);
@@ -717,6 +736,11 @@ namespace Wino.Core.Synchronizers
{ {
await _imapChangeProcessor.UpdateFolderAsync(folder).ConfigureAwait(false); await _imapChangeProcessor.UpdateFolderAsync(folder).ConfigureAwait(false);
} }
if (insertedFolders.Any() || deletedFolders.Any() || updatedFolders.Any())
{
WeakReferenceMessenger.Default.Send(new AccountFolderConfigurationUpdated(Account.Id));
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -785,6 +809,7 @@ namespace Wino.Core.Synchronizers
EventHandler<MessageFlagsChangedEventArgs> MessageFlagsChangedHandler = async (s, e) => EventHandler<MessageFlagsChangedEventArgs> MessageFlagsChangedHandler = async (s, e) =>
{ {
if (imapFolder == null) return; if (imapFolder == null) return;
if (e.UniqueId == null) return;
var localMailCopyId = MailkitClientExtensions.CreateUid(folder.Id, e.UniqueId.Value.Id); var localMailCopyId = MailkitClientExtensions.CreateUid(folder.Id, e.UniqueId.Value.Id);
@@ -997,6 +1022,7 @@ namespace Wino.Core.Synchronizers
/// </summary> /// </summary>
/// <param name="remoteFolder">Remote folder</param> /// <param name="remoteFolder">Remote folder</param>
/// <param name="localFolder">Local folder.</param> /// <param name="localFolder">Local folder.</param>
public bool ShouldUpdateFolder(IMailFolder remoteFolder, MailItemFolder localFolder) => remoteFolder.Name != localFolder.FolderName; public bool ShouldUpdateFolder(IMailFolder remoteFolder, MailItemFolder localFolder)
=> !localFolder.FolderName.Equals(remoteFolder.Name, StringComparison.OrdinalIgnoreCase);
} }
} }

View File

@@ -5,12 +5,14 @@ using System.IO;
using System.Linq; using System.Linq;
using System.Net; using System.Net;
using System.Text; using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes; using System.Text.Json.Nodes;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.Graph; using Microsoft.Graph;
using Microsoft.Graph.Models; using Microsoft.Graph.Models;
using Microsoft.Graph.Models.ODataErrors;
using Microsoft.Kiota.Abstractions; using Microsoft.Kiota.Abstractions;
using Microsoft.Kiota.Abstractions.Authentication; using Microsoft.Kiota.Abstractions.Authentication;
using Microsoft.Kiota.Http.HttpClientLibrary.Middleware; using Microsoft.Kiota.Http.HttpClientLibrary.Middleware;
@@ -145,8 +147,7 @@ namespace Wino.Core.Synchronizers
{ {
var synchronizationFolders = await _outlookChangeProcessor.GetSynchronizationFoldersAsync(options).ConfigureAwait(false); var synchronizationFolders = await _outlookChangeProcessor.GetSynchronizationFoldersAsync(options).ConfigureAwait(false);
_logger.Information("Found {Count} folders to synchronize.", synchronizationFolders.Count); _logger.Information(string.Format("{1} Folders: {0}", string.Join(",", synchronizationFolders.Select(a => a.FolderName)), synchronizationFolders.Count));
_logger.Information(string.Format("Folders: {0}", string.Join(",", synchronizationFolders.Select(a => a.FolderName))));
for (int i = 0; i < synchronizationFolders.Count; i++) for (int i = 0; i < synchronizationFolders.Count; i++)
{ {
@@ -184,8 +185,6 @@ namespace Wino.Core.Synchronizers
{ {
var downloadedMessageIds = new List<string>(); var downloadedMessageIds = new List<string>();
_logger.Debug("Started synchronization for folder {FolderName}", folder.FolderName);
cancellationToken.ThrowIfCancellationRequested(); cancellationToken.ThrowIfCancellationRequested();
string latestDeltaLink = string.Empty; string latestDeltaLink = string.Empty;
@@ -194,6 +193,8 @@ namespace Wino.Core.Synchronizers
Microsoft.Graph.Me.MailFolders.Item.Messages.Delta.DeltaGetResponse messageCollectionPage = null; Microsoft.Graph.Me.MailFolders.Item.Messages.Delta.DeltaGetResponse messageCollectionPage = null;
_logger.Debug("Synchronizing {FolderName}", folder.FolderName);
if (isInitialSync) if (isInitialSync)
{ {
_logger.Debug("No sync identifier for Folder {FolderName}. Performing initial sync.", folder.FolderName); _logger.Debug("No sync identifier for Folder {FolderName}. Performing initial sync.", folder.FolderName);
@@ -211,9 +212,6 @@ namespace Wino.Core.Synchronizers
{ {
var currentDeltaToken = folder.DeltaToken; var currentDeltaToken = folder.DeltaToken;
_logger.Debug("Sync identifier found for Folder {FolderName}. Performing delta sync.", folder.FolderName);
_logger.Debug("Current delta token: {CurrentDeltaToken}", currentDeltaToken);
var requestInformation = _graphClient.Me.MailFolders[folder.RemoteFolderId].Messages.Delta.ToGetRequestInformation((config) => var requestInformation = _graphClient.Me.MailFolders[folder.RemoteFolderId].Messages.Delta.ToGetRequestInformation((config) =>
{ {
config.QueryParameters.Top = (int)InitialMessageDownloadCountPerFolder; config.QueryParameters.Top = (int)InitialMessageDownloadCountPerFolder;
@@ -257,9 +255,6 @@ namespace Wino.Core.Synchronizers
_logger.Debug("Downloaded {Count} messages for folder {FolderName}", downloadedMessageIds.Count, folder.FolderName); _logger.Debug("Downloaded {Count} messages for folder {FolderName}", downloadedMessageIds.Count, folder.FolderName);
} }
_logger.Debug("Iterator completed for folder {FolderName}", folder.FolderName);
_logger.Debug("Extracted latest delta link is {LatestDeltaLink}", latestDeltaLink);
//Store delta link for tracking new changes. //Store delta link for tracking new changes.
if (!string.IsNullOrEmpty(latestDeltaLink)) if (!string.IsNullOrEmpty(latestDeltaLink))
{ {
@@ -478,6 +473,8 @@ namespace Wino.Core.Synchronizers
/// </summary> /// </summary>
/// <returns>Base64 encoded profile picture.</returns> /// <returns>Base64 encoded profile picture.</returns>
private async Task<string> GetUserProfilePictureAsync() private async Task<string> GetUserProfilePictureAsync()
{
try
{ {
var photoStream = await _graphClient.Me.Photos["48x48"].Content.GetAsync(); var photoStream = await _graphClient.Me.Photos["48x48"].Content.GetAsync();
@@ -487,6 +484,18 @@ namespace Wino.Core.Synchronizers
return Convert.ToBase64String(byteArray); return Convert.ToBase64String(byteArray);
} }
catch (ODataError odataError) when (odataError.Error.Code == "ImageNotFound")
{
// Accounts without profile picture will throw this error.
// At this point nothing we can do. Just return empty string.
return string.Empty;
}
catch (Exception)
{
throw;
}
}
/// <summary> /// <summary>
/// Get the user's display name. /// Get the user's display name.
@@ -507,6 +516,27 @@ namespace Wino.Core.Synchronizers
return new ProfileInformation(senderName, profilePictureData); return new ProfileInformation(senderName, profilePictureData);
} }
/// <summary>
/// POST requests are handled differently in batches in Graph SDK.
/// Batch basically ignores the step's coontent-type and body.
/// Manually create a POST request with empty body and send it.
/// </summary>
/// <param name="requestInformation">Post request information.</param>
/// <param name="content">Content object to serialize.</param>
/// <returns>Updated post request information.</returns>
private RequestInformation PreparePostRequestInformation(RequestInformation requestInformation, object content = null)
{
requestInformation.Headers.Clear();
string contentJson = content == null ? "{}" : JsonSerializer.Serialize(content);
requestInformation.Content = new MemoryStream(Encoding.UTF8.GetBytes(contentJson));
requestInformation.HttpMethod = Method.POST;
requestInformation.Headers.Add("Content-Type", "application/json");
return requestInformation;
}
#region Mail Integration #region Mail Integration
public override bool DelaySendOperationSynchronization() => true; public override bool DelaySendOperationSynchronization() => true;
@@ -520,7 +550,8 @@ namespace Wino.Core.Synchronizers
return CreateBatchedHttpBundle(request, (item) => return CreateBatchedHttpBundle(request, (item) =>
{ {
return _graphClient.Me.Messages[item.Item.Id.ToString()].Move.ToPostRequestInformation(requestBody); return PreparePostRequestInformation(_graphClient.Me.Messages[item.Item.Id.ToString()].Move.ToPostRequestInformation(requestBody),
requestBody);
}); });
} }
@@ -665,20 +696,8 @@ namespace Wino.Core.Synchronizers
// Send draft. // Send draft.
// POST requests are handled differently in batches in Graph SDK.
// Batch basically ignores the step's coontent-type and body.
// Manually create a POST request with empty body and send it.
var sendDraftRequest = _graphClient.Me.Messages[mailCopyId].Send.ToPostRequestInformation((config) => var sendDraftRequest = PreparePostRequestInformation(_graphClient.Me.Messages[mailCopyId].Send.ToPostRequestInformation());
{
config.Headers.Add("Content-Type", "application/json");
});
sendDraftRequest.Headers.Clear();
sendDraftRequest.Content = new MemoryStream(Encoding.UTF8.GetBytes("{}"));
sendDraftRequest.HttpMethod = Method.POST;
sendDraftRequest.Headers.Add("Content-Type", "application/json");
var sendDraftRequestBundle = new HttpRequestBundle<RequestInformation>(sendDraftRequest, request); var sendDraftRequestBundle = new HttpRequestBundle<RequestInformation>(sendDraftRequest, request);
@@ -724,6 +743,8 @@ namespace Wino.Core.Synchronizers
{ {
var batchRequestInformations = BatchExtension.Batch(batchedRequests, (int)MaximumAllowedBatchRequestSize); var batchRequestInformations = BatchExtension.Batch(batchedRequests, (int)MaximumAllowedBatchRequestSize);
bool serializeRequests = false;
foreach (var batch in batchRequestInformations) foreach (var batch in batchRequestInformations)
{ {
var batchContent = new BatchRequestContentCollection(_graphClient); var batchContent = new BatchRequestContentCollection(_graphClient);
@@ -734,6 +755,14 @@ namespace Wino.Core.Synchronizers
{ {
var bundle = batch.ElementAt(i); var bundle = batch.ElementAt(i);
if (bundle.Request is BatchRequestBase batchBundleRequest && batchBundleRequest.ExecuteSerialBatch)
{
// This bundle needs to run every request in serial.
// By default requests are executed in parallel.
serializeRequests = true;
}
var request = bundle.Request; var request = bundle.Request;
var nativeRequest = bundle.NativeRequest; var nativeRequest = bundle.NativeRequest;
@@ -753,7 +782,7 @@ namespace Wino.Core.Synchronizers
// Set execution type to serial instead of parallel if needed. // Set execution type to serial instead of parallel if needed.
// Each step will depend on the previous one. // Each step will depend on the previous one.
if (itemCount > 1) if (serializeRequests)
{ {
for (int i = 1; i < itemCount; i++) for (int i = 1; i < itemCount; i++)
{ {
@@ -762,7 +791,6 @@ namespace Wino.Core.Synchronizers
currentStep.Value.DependsOn = [previousStep.Key]; currentStep.Value.DependsOn = [previousStep.Key];
} }
} }
// Execute batch. This will collect responses from network call for each batch step. // Execute batch. This will collect responses from network call for each batch step.
@@ -791,9 +819,11 @@ namespace Wino.Core.Synchronizers
{ {
if (!httpResponseMessage.IsSuccessStatusCode) if (!httpResponseMessage.IsSuccessStatusCode)
{ {
bundle.Request.RevertUIChanges();
var content = await httpResponseMessage.Content.ReadAsStringAsync(); var content = await httpResponseMessage.Content.ReadAsStringAsync();
var errorJson = JsonObject.Parse(content); var errorJson = JsonObject.Parse(content);
var errorString = $"({httpResponseMessage.StatusCode}) {errorJson["error"]["code"]} - {errorJson["error"]["message"]}"; var errorString = $"{httpResponseMessage.StatusCode} [{bundle.Request.GetType().Name}]\n{errorJson["error"]["code"]} - {errorJson["error"]["message"]}\n";
exceptionBag.Add(errorString); exceptionBag.Add(errorString);
} }
@@ -818,12 +848,6 @@ namespace Wino.Core.Synchronizers
public override async Task<List<NewMailItemPackage>> CreateNewMailPackagesAsync(Message message, MailItemFolder assignedFolder, CancellationToken cancellationToken = default) public override async Task<List<NewMailItemPackage>> CreateNewMailPackagesAsync(Message message, MailItemFolder assignedFolder, CancellationToken cancellationToken = default)
{ {
bool isMailExists = await _outlookChangeProcessor.IsMailExistsAsync(message.Id);
if (isMailExists)
{
return null;
}
var mimeMessage = await DownloadMimeMessageAsync(message.Id, cancellationToken).ConfigureAwait(false); var mimeMessage = await DownloadMimeMessageAsync(message.Id, cancellationToken).ConfigureAwait(false);
var mailCopy = message.AsMailCopy(); var mailCopy = message.AsMailCopy();

View File

@@ -18,7 +18,7 @@
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" /> <PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
<PackageReference Include="Google.Apis.Gmail.v1" Version="1.68.0.3427" /> <PackageReference Include="Google.Apis.Gmail.v1" Version="1.68.0.3427" />
<PackageReference Include="Google.Apis.PeopleService.v1" Version="1.68.0.3359" /> <PackageReference Include="Google.Apis.PeopleService.v1" Version="1.68.0.3359" />
<PackageReference Include="HtmlAgilityPack" Version="1.11.63" /> <PackageReference Include="HtmlAgilityPack" Version="1.11.64" />
<PackageReference Include="HtmlKit" Version="1.1.0" /> <PackageReference Include="HtmlKit" Version="1.1.0" />
<PackageReference Include="IsExternalInit" Version="1.0.3"> <PackageReference Include="IsExternalInit" Version="1.0.3">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
@@ -27,16 +27,16 @@
<PackageReference Include="MailKit" Version="4.7.1.1" /> <PackageReference Include="MailKit" Version="4.7.1.1" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.Graph" Version="5.56.0" /> <PackageReference Include="Microsoft.Graph" Version="5.56.0" />
<PackageReference Include="Microsoft.Identity.Client" Version="4.63.0" /> <PackageReference Include="Microsoft.Identity.Client" Version="4.64.0" />
<PackageReference Include="Microsoft.Identity.Client.Broker" Version="4.63.0" /> <PackageReference Include="Microsoft.Identity.Client.Broker" Version="4.64.0" />
<PackageReference Include="Microsoft.Identity.Client.Extensions.Msal" Version="4.63.0" /> <PackageReference Include="Microsoft.Identity.Client.Extensions.Msal" Version="4.64.0" />
<PackageReference Include="MimeKit" Version="4.7.1" /> <PackageReference Include="MimeKit" Version="4.7.1" />
<PackageReference Include="morelinq" Version="4.1.0" /> <PackageReference Include="morelinq" Version="4.3.0" />
<PackageReference Include="Nito.AsyncEx.Tasks" Version="5.1.2" /> <PackageReference Include="Nito.AsyncEx.Tasks" Version="5.1.2" />
<PackageReference Include="Serilog" Version="3.1.1" /> <PackageReference Include="Serilog" Version="4.0.1" />
<PackageReference Include="Serilog.Exceptions" Version="8.4.0" /> <PackageReference Include="Serilog.Exceptions" Version="8.4.0" />
<PackageReference Include="Serilog.Sinks.Debug" Version="2.0.0" /> <PackageReference Include="Serilog.Sinks.Debug" Version="3.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="5.0.0" /> <PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="SkiaSharp" Version="2.88.8" /> <PackageReference Include="SkiaSharp" Version="2.88.8" />
<PackageReference Include="SqlKata" Version="2.4.0" /> <PackageReference Include="SqlKata" Version="2.4.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0" /> <PackageReference Include="System.Text.Encoding.CodePages" Version="8.0.0" />

View File

@@ -1,14 +1,13 @@
using System; using System;
using System.IO;
using System.Threading.Tasks; using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Input;
using Wino.Core.Domain; using Wino.Core.Domain;
using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Interfaces;
using Wino.Core.Services;
namespace Wino.Mail.ViewModels namespace Wino.Mail.ViewModels
{ {
public class AboutPageViewModel : BaseViewModel public partial class AboutPageViewModel : BaseViewModel
{ {
private readonly IStoreRatingService _storeRatingService; private readonly IStoreRatingService _storeRatingService;
private readonly INativeAppService _nativeAppService; private readonly INativeAppService _nativeAppService;
@@ -22,9 +21,6 @@ namespace Wino.Mail.ViewModels
public string PrivacyPolicyUrl => "https://www.winomail.app/privacy_policy.html"; public string PrivacyPolicyUrl => "https://www.winomail.app/privacy_policy.html";
public string PaypalUrl => "https://paypal.me/bkaankose?country.x=PL&locale.x=en_US"; public string PaypalUrl => "https://paypal.me/bkaankose?country.x=PL&locale.x=en_US";
public AsyncRelayCommand<object> NavigateCommand { get; set; }
public AsyncRelayCommand ShareWinoLogCommand { get; set; }
public AsyncRelayCommand ShareProtocolLogCommand { get; set; }
public IPreferencesService PreferencesService { get; } public IPreferencesService PreferencesService { get; }
public AboutPageViewModel(IStoreRatingService storeRatingService, public AboutPageViewModel(IStoreRatingService storeRatingService,
@@ -42,9 +38,6 @@ namespace Wino.Mail.ViewModels
_fileService = fileService; _fileService = fileService;
PreferencesService = preferencesService; PreferencesService = preferencesService;
NavigateCommand = new AsyncRelayCommand<object>(Navigate);
ShareWinoLogCommand = new AsyncRelayCommand(ShareWinoLogAsync);
ShareProtocolLogCommand = new AsyncRelayCommand(ShareProtocolLogAsync);
} }
protected override void OnActivated() protected override void OnActivated()
@@ -70,35 +63,28 @@ namespace Wino.Mail.ViewModels
} }
} }
private Task ShareProtocolLogAsync() [RelayCommand]
=> SaveLogInternalAsync(ImapTestService.ProtocolLogFileName); private async Task ShareWinoLogAsync()
private Task ShareWinoLogAsync()
=> SaveLogInternalAsync(Constants.ClientLogFile);
private async Task SaveLogInternalAsync(string sourceFileName)
{ {
var appDataFolder = _appInitializerService.ApplicationDataFolderPath; var appDataFolder = _appInitializerService.ApplicationDataFolderPath;
var logFile = Path.Combine(appDataFolder, sourceFileName);
if (!File.Exists(logFile))
{
DialogService.InfoBarMessage(Translator.Info_LogsNotFoundTitle, Translator.Info_LogsNotFoundMessage, Core.Domain.Enums.InfoBarMessageType.Warning);
return;
}
var selectedFolderPath = await DialogService.PickWindowsFolderAsync(); var selectedFolderPath = await DialogService.PickWindowsFolderAsync();
if (string.IsNullOrEmpty(selectedFolderPath)) return; if (string.IsNullOrEmpty(selectedFolderPath)) return;
var copiedFilePath = await _fileService.CopyFileAsync(logFile, selectedFolderPath); var areLogsSaved = await _fileService.SaveLogsToFolderAsync(appDataFolder, selectedFolderPath).ConfigureAwait(false);
var copiedFileName = Path.GetFileName(copiedFilePath); if (areLogsSaved)
{
DialogService.InfoBarMessage(Translator.Info_LogsSavedTitle, string.Format(Translator.Info_LogsSavedMessage, copiedFileName), Core.Domain.Enums.InfoBarMessageType.Success); DialogService.InfoBarMessage(Translator.Info_LogsSavedTitle, string.Format(Translator.Info_LogsSavedMessage, Constants.LogArchiveFileName), InfoBarMessageType.Success);
}
else
{
DialogService.InfoBarMessage(Translator.Info_LogsNotFoundTitle, Translator.Info_LogsNotFoundMessage, InfoBarMessageType.Error);
}
} }
[RelayCommand]
private async Task Navigate(object url) private async Task Navigate(object url)
{ {
if (url is string stringUrl) if (url is string stringUrl)
@@ -109,7 +95,9 @@ namespace Wino.Mail.ViewModels
{ {
// Discord disclaimer message about server. // Discord disclaimer message about server.
if (stringUrl == DiscordChannelUrl) if (stringUrl == DiscordChannelUrl)
await DialogService.ShowMessageAsync(Translator.DiscordChannelDisclaimerMessage, Translator.DiscordChannelDisclaimerTitle); await DialogService.ShowMessageAsync(Translator.DiscordChannelDisclaimerMessage,
Translator.DiscordChannelDisclaimerTitle,
WinoCustomMessageDialogIcon.Warning);
await _nativeAppService.LaunchUriAsync(new Uri(stringUrl)); await _nativeAppService.LaunchUriAsync(new Uri(stringUrl));
} }

View File

@@ -98,14 +98,18 @@ namespace Wino.Mail.ViewModels
// Check existence. // Check existence.
if (AccountAliases.Any(a => a.AliasAddress == newAlias.AliasAddress)) if (AccountAliases.Any(a => a.AliasAddress == newAlias.AliasAddress))
{ {
await DialogService.ShowMessageAsync(Translator.DialogMessage_AliasExistsTitle, Translator.DialogMessage_AliasExistsMessage); await DialogService.ShowMessageAsync(Translator.DialogMessage_AliasExistsTitle,
Translator.DialogMessage_AliasExistsMessage,
WinoCustomMessageDialogIcon.Warning);
return; return;
} }
// Validate all addresses. // Validate all addresses.
if (!EmailValidator.Validate(newAlias.AliasAddress) || (!string.IsNullOrEmpty(newAlias.ReplyToAddress) && !EmailValidator.Validate(newAlias.ReplyToAddress))) if (!EmailValidator.Validate(newAlias.AliasAddress) || (!string.IsNullOrEmpty(newAlias.ReplyToAddress) && !EmailValidator.Validate(newAlias.ReplyToAddress)))
{ {
await DialogService.ShowMessageAsync(Translator.DialogMessage_InvalidAliasMessage, Translator.DialogMessage_InvalidAliasTitle); await DialogService.ShowMessageAsync(Translator.DialogMessage_InvalidAliasMessage,
Translator.DialogMessage_InvalidAliasTitle,
WinoCustomMessageDialogIcon.Warning);
return; return;
} }
@@ -125,14 +129,18 @@ namespace Wino.Mail.ViewModels
// Primary aliases can't be deleted. // Primary aliases can't be deleted.
if (alias.IsPrimary) if (alias.IsPrimary)
{ {
await DialogService.ShowMessageAsync(Translator.Info_CantDeletePrimaryAliasMessage, Translator.GeneralTitle_Warning); await DialogService.ShowMessageAsync(Translator.Info_CantDeletePrimaryAliasMessage,
Translator.GeneralTitle_Warning,
WinoCustomMessageDialogIcon.Warning);
return; return;
} }
// Root aliases can't be deleted. // Root aliases can't be deleted.
if (alias.IsRootAlias) if (alias.IsRootAlias)
{ {
await DialogService.ShowMessageAsync(Translator.DialogMessage_CantDeleteRootAliasTitle, Translator.DialogMessage_CantDeleteRootAliasMessage); await DialogService.ShowMessageAsync(Translator.DialogMessage_CantDeleteRootAliasTitle,
Translator.DialogMessage_CantDeleteRootAliasMessage,
WinoCustomMessageDialogIcon.Warning);
return; return;
} }

View File

@@ -37,7 +37,9 @@ namespace Wino.Mail.ViewModels
IRecipient<MergedInboxRenamed>, IRecipient<MergedInboxRenamed>,
IRecipient<LanguageChanged>, IRecipient<LanguageChanged>,
IRecipient<AccountMenuItemsReordered>, IRecipient<AccountMenuItemsReordered>,
IRecipient<AccountSynchronizationProgressUpdatedMessage> IRecipient<AccountSynchronizationProgressUpdatedMessage>,
IRecipient<NavigateAppPreferencesRequested>,
IRecipient<AccountFolderConfigurationUpdated>
{ {
#region Menu Items #region Menu Items
@@ -59,12 +61,16 @@ namespace Wino.Mail.ViewModels
#endregion #endregion
private const string IsActivateStartupLaunchAskedKey = nameof(IsActivateStartupLaunchAskedKey);
public IStatePersistanceService StatePersistenceService { get; } public IStatePersistanceService StatePersistenceService { get; }
public IWinoServerConnectionManager ServerConnectionManager { get; } public IWinoServerConnectionManager ServerConnectionManager { get; }
public IPreferencesService PreferencesService { get; } public IPreferencesService PreferencesService { get; }
public IWinoNavigationService NavigationService { get; } public IWinoNavigationService NavigationService { get; }
private readonly IFolderService _folderService; private readonly IFolderService _folderService;
private readonly IConfigurationService _configurationService;
private readonly IStartupBehaviorService _startupBehaviorService;
private readonly IAccountService _accountService; private readonly IAccountService _accountService;
private readonly IContextMenuItemService _contextMenuItemService; private readonly IContextMenuItemService _contextMenuItemService;
private readonly IStoreRatingService _storeRatingService; private readonly IStoreRatingService _storeRatingService;
@@ -98,7 +104,9 @@ namespace Wino.Mail.ViewModels
IWinoRequestDelegator winoRequestDelegator, IWinoRequestDelegator winoRequestDelegator,
IFolderService folderService, IFolderService folderService,
IStatePersistanceService statePersistanceService, IStatePersistanceService statePersistanceService,
IWinoServerConnectionManager serverConnectionManager) : base(dialogService) IWinoServerConnectionManager serverConnectionManager,
IConfigurationService configurationService,
IStartupBehaviorService startupBehaviorService) : base(dialogService)
{ {
StatePersistenceService = statePersistanceService; StatePersistenceService = statePersistanceService;
ServerConnectionManager = serverConnectionManager; ServerConnectionManager = serverConnectionManager;
@@ -115,6 +123,8 @@ namespace Wino.Mail.ViewModels
PreferencesService = preferencesService; PreferencesService = preferencesService;
NavigationService = navigationService; NavigationService = navigationService;
_configurationService = configurationService;
_startupBehaviorService = startupBehaviorService;
_backgroundTaskService = backgroundTaskService; _backgroundTaskService = backgroundTaskService;
_mimeFileService = mimeFileService; _mimeFileService = mimeFileService;
_nativeAppService = nativeAppService; _nativeAppService = nativeAppService;
@@ -174,43 +184,44 @@ namespace Wino.Mail.ViewModels
var accounts = await _accountService.GetAccountsAsync().ConfigureAwait(false); var accounts = await _accountService.GetAccountsAsync().ConfigureAwait(false);
// Group accounts by merged account. List<Guid> initializedAccountIds = new();
var groupedAccounts = accounts.GroupBy(a => a.MergedInboxId).OrderBy(a => a.Key != null);
foreach (var group in groupedAccounts) foreach (var account in accounts)
{ {
var mergedInboxId = group.Key; // Already initialized with one of the previous merged accounts.
if (mergedInboxId == null) if (initializedAccountIds.Contains(account.Id)) continue;
{
// Single accounts.
// Preserve the order while listing.
var orderedGroup = group.OrderBy(a => a.Order); bool isMergedAccount = account.MergedInboxId != null;
foreach (var account in orderedGroup) if (isMergedAccount)
{ {
await ExecuteUIThread(() => var mergedAccountId = account.MergedInboxId.Value;
{ var mergedAccounts = accounts.Where(a => a.MergedInboxId == mergedAccountId);
MenuItems.Add(new AccountMenuItem(account, null)); var mergedInbox = mergedAccounts.First().MergedInbox;
});
}
}
else
{
// Merged accounts.
var mergedInbox = group.First().MergedInbox;
var mergedAccountMenuItem = new MergedAccountMenuItem(mergedInbox, group, null);
foreach (var accountItem in group) var mergedAccountMenuItem = new MergedAccountMenuItem(mergedInbox, mergedAccounts, null);
foreach (var mergedAccount in mergedAccounts)
{ {
mergedAccountMenuItem.SubMenuItems.Add(new AccountMenuItem(accountItem, mergedAccountMenuItem)); initializedAccountIds.Add(mergedAccount.Id);
mergedAccountMenuItem.SubMenuItems.Add(new AccountMenuItem(mergedAccount, mergedAccountMenuItem));
} }
await ExecuteUIThread(() => await ExecuteUIThread(() =>
{ {
MenuItems.Add(mergedAccountMenuItem); MenuItems.Add(mergedAccountMenuItem);
}); });
}
else
{
await ExecuteUIThread(() =>
{
MenuItems.Add(new AccountMenuItem(account, null));
});
initializedAccountIds.Add(account.Id);
} }
} }
@@ -229,21 +240,64 @@ namespace Wino.Mail.ViewModels
public override async void OnNavigatedTo(NavigationMode mode, object parameters) public override async void OnNavigatedTo(NavigationMode mode, object parameters)
{ {
base.OnNavigatedTo(mode, parameters); base.OnNavigatedTo(mode, parameters);
await CreateFooterItemsAsync(); await CreateFooterItemsAsync();
await RecreateMenuItemsAsync(); await RecreateMenuItemsAsync();
await ProcessLaunchOptionsAsync(); await ProcessLaunchOptionsAsync();
await ForceAllAccountSynchronizationsAsync(); await ForceAllAccountSynchronizationsAsync();
ConfigureBackgroundTasks(); await MakeSureEnableStartupLaunchAsync();
await ConfigureBackgroundTasksAsync();
} }
private void ConfigureBackgroundTasks() private async Task MakeSureEnableStartupLaunchAsync()
{
if (!_configurationService.Get<bool>(IsActivateStartupLaunchAskedKey, false))
{
var currentBehavior = await _startupBehaviorService.GetCurrentStartupBehaviorAsync();
// User somehow already enabled Wino before the first launch.
if (currentBehavior == StartupBehaviorResult.Enabled)
{
_configurationService.Set(IsActivateStartupLaunchAskedKey, true);
return;
}
bool isAccepted = await DialogService.ShowWinoCustomMessageDialogAsync(Translator.DialogMessage_EnableStartupLaunchTitle,
Translator.DialogMessage_EnableStartupLaunchMessage,
Translator.Buttons_Yes,
WinoCustomMessageDialogIcon.Information,
Translator.Buttons_No);
bool shouldDisplayLaterOnMessage = !isAccepted;
if (isAccepted)
{
var behavior = await _startupBehaviorService.ToggleStartupBehavior(true);
shouldDisplayLaterOnMessage = behavior != StartupBehaviorResult.Enabled;
}
if (shouldDisplayLaterOnMessage)
{
await DialogService.ShowWinoCustomMessageDialogAsync(Translator.DialogMessage_EnableStartupLaunchTitle,
Translator.DialogMessage_EnableStartupLaunchDeniedMessage,
Translator.Buttons_Close,
WinoCustomMessageDialogIcon.Information);
}
_configurationService.Set(IsActivateStartupLaunchAskedKey, true);
}
}
private async Task ConfigureBackgroundTasksAsync()
{ {
try try
{ {
// This will only unregister once. Safe to execute multiple times.
_backgroundTaskService.UnregisterAllBackgroundTask(); _backgroundTaskService.UnregisterAllBackgroundTask();
await _backgroundTaskService.RegisterBackgroundTasksAsync();
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -527,7 +581,7 @@ namespace Wino.Mail.ViewModels
StatePersistenceService.CoreWindowTitle = "Wino Mail"; StatePersistenceService.CoreWindowTitle = "Wino Mail";
} }
public async Task MenuItemInvokedOrSelectedAsync(IMenuItem clickedMenuItem) public async Task MenuItemInvokedOrSelectedAsync(IMenuItem clickedMenuItem, object parameter = null)
{ {
if (clickedMenuItem == null) return; if (clickedMenuItem == null) return;
@@ -561,11 +615,11 @@ namespace Wino.Mail.ViewModels
} }
else if (clickedMenuItem is SettingsItem) else if (clickedMenuItem is SettingsItem)
{ {
NavigationService.Navigate(WinoPage.SettingsPage); NavigationService.Navigate(WinoPage.SettingsPage, parameter, NavigationReferenceFrame.ShellFrame, NavigationTransitionType.None);
} }
else if (clickedMenuItem is ManageAccountsMenuItem) else if (clickedMenuItem is ManageAccountsMenuItem)
{ {
NavigationService.Navigate(WinoPage.AccountManagementPage); NavigationService.Navigate(WinoPage.AccountManagementPage, parameter, NavigationReferenceFrame.ShellFrame, NavigationTransitionType.None);
} }
else if (clickedMenuItem is IAccountMenuItem clickedAccountMenuItem && latestSelectedAccountMenuItem != clickedAccountMenuItem) else if (clickedMenuItem is IAccountMenuItem clickedAccountMenuItem && latestSelectedAccountMenuItem != clickedAccountMenuItem)
{ {
@@ -573,7 +627,7 @@ namespace Wino.Mail.ViewModels
} }
} }
private async Task ChangeLoadedAccountAsync(IAccountMenuItem clickedBaseAccountMenuItem, bool navigateInbox = true) public async Task ChangeLoadedAccountAsync(IAccountMenuItem clickedBaseAccountMenuItem, bool navigateInbox = true)
{ {
if (clickedBaseAccountMenuItem == null) return; if (clickedBaseAccountMenuItem == null) return;
@@ -582,6 +636,9 @@ namespace Wino.Mail.ViewModels
await MenuItems.SetAccountMenuItemEnabledStatusAsync(false); await MenuItems.SetAccountMenuItemEnabledStatusAsync(false);
// Load account folder structure and replace the visible folders.
var folders = await _folderService.GetAccountFoldersForDisplayAsync(clickedBaseAccountMenuItem);
await ExecuteUIThread(() => await ExecuteUIThread(() =>
{ {
clickedBaseAccountMenuItem.IsEnabled = false; clickedBaseAccountMenuItem.IsEnabled = false;
@@ -594,12 +651,10 @@ namespace Wino.Mail.ViewModels
clickedBaseAccountMenuItem.IsSelected = true; clickedBaseAccountMenuItem.IsSelected = true;
latestSelectedAccountMenuItem = clickedBaseAccountMenuItem; latestSelectedAccountMenuItem = clickedBaseAccountMenuItem;
MenuItems.ReplaceFolders(folders);
}); });
// Load account folder structure and replace the visible folders.
var folders = await _folderService.GetAccountFoldersForDisplayAsync(clickedBaseAccountMenuItem);
await MenuItems.ReplaceFoldersAsync(folders);
await UpdateUnreadItemCountAsync(); await UpdateUnreadItemCountAsync();
await MenuItems.SetAccountMenuItemEnabledStatusAsync(true); await MenuItems.SetAccountMenuItemEnabledStatusAsync(true);
@@ -721,7 +776,19 @@ namespace Wino.Mail.ViewModels
if (!accounts.Any()) if (!accounts.Any())
{ {
await DialogService.ShowMessageAsync(Translator.DialogMessage_NoAccountsForCreateMailMessage, Translator.DialogMessage_NoAccountsForCreateMailTitle); var isManageAccountClicked = await DialogService.ShowWinoCustomMessageDialogAsync(Translator.DialogMessage_NoAccountsForCreateMailMessage,
Translator.DialogMessage_NoAccountsForCreateMailTitle,
Translator.MenuManageAccounts,
WinoCustomMessageDialogIcon.Information,
string.Empty);
if (isManageAccountClicked)
{
SelectedMenuItem = ManageAccountsMenuItem;
}
return; return;
} }
@@ -823,8 +890,15 @@ namespace Wino.Mail.ViewModels
Messenger.Send(new NewSynchronizationRequested(options, SynchronizationSource.Client)); Messenger.Send(new NewSynchronizationRequested(options, SynchronizationSource.Client));
try
{
await _nativeAppService.PinAppToTaskbarAsync(); await _nativeAppService.PinAppToTaskbarAsync();
} }
catch (Exception ex)
{
Log.Error(ex, "Failed to pin Wino to taskbar.");
}
}
// TODO: Handle by messaging. // TODO: Handle by messaging.
private async Task SetAccountAttentionAsync(Guid accountId, AccountAttentionReason reason) private async Task SetAccountAttentionAsync(Guid accountId, AccountAttentionReason reason)
@@ -850,7 +924,9 @@ namespace Wino.Mail.ViewModels
if (!accounts.Any()) if (!accounts.Any())
{ {
await DialogService.ShowMessageAsync(Translator.DialogMessage_NoAccountsForCreateMailMessage, Translator.DialogMessage_NoAccountsForCreateMailTitle); await DialogService.ShowMessageAsync(Translator.DialogMessage_NoAccountsForCreateMailMessage,
Translator.DialogMessage_NoAccountsForCreateMailTitle,
WinoCustomMessageDialogIcon.Warning);
} }
else if (accounts.Count == 1) else if (accounts.Count == 1)
{ {
@@ -892,6 +968,17 @@ namespace Wino.Mail.ViewModels
} }
} }
public async void Receive(AccountFolderConfigurationUpdated message)
{
// Reloading of folders is needed to re-create folder tree if the account is loaded.
if (MenuItems.TryGetAccountMenuItem(message.AccountId, out IAccountMenuItem accountMenuItem) &&
latestSelectedAccountMenuItem == accountMenuItem)
{
await ChangeLoadedAccountAsync(accountMenuItem, true);
}
}
public async void Receive(MergedInboxRenamed message) public async void Receive(MergedInboxRenamed message)
{ {
var mergedInboxMenuItem = MenuItems.FirstOrDefault(a => a.EntityId == message.MergedInboxId); var mergedInboxMenuItem = MenuItems.FirstOrDefault(a => a.EntityId == message.MergedInboxId);
@@ -918,7 +1005,8 @@ namespace Wino.Mail.ViewModels
{ {
if (!MenuItems.TryGetAccountMenuItem(item.Key, out IAccountMenuItem menuItem)) return; if (!MenuItems.TryGetAccountMenuItem(item.Key, out IAccountMenuItem menuItem)) return;
MenuItems.Move(MenuItems.IndexOf(menuItem), item.Value); // Adding +1 since first item is always reserved for CreateMailMenuItem.
MenuItems.Move(MenuItems.IndexOf(menuItem), item.Value + 1);
} }
} }
@@ -961,5 +1049,10 @@ namespace Wino.Mail.ViewModels
await ExecuteUIThread(() => { accountMenuItem.SynchronizationProgress = message.Progress; }); await ExecuteUIThread(() => { accountMenuItem.SynchronizationProgress = message.Progress; });
} }
public async void Receive(NavigateAppPreferencesRequested message)
{
await MenuItemInvokedOrSelectedAsync(SettingsItem, WinoPage.AppPreferencesPage);
}
} }
} }

View File

@@ -193,7 +193,7 @@ namespace Wino.Mail.ViewModels.Collections
if (item is MailItemViewModel itemViewModel) if (item is MailItemViewModel itemViewModel)
{ {
await ExecuteUIThread(() => { itemViewModel.Update(addedItem); }); await ExecuteUIThread(() => { itemViewModel.MailCopy = addedItem; });
UpdateUniqueIdHashes(itemViewModel, false); UpdateUniqueIdHashes(itemViewModel, false);
UpdateUniqueIdHashes(addedItem, true); UpdateUniqueIdHashes(addedItem, true);
@@ -230,7 +230,7 @@ namespace Wino.Mail.ViewModels.Collections
UpdateUniqueIdHashes(itemViewModel, false); UpdateUniqueIdHashes(itemViewModel, false);
UpdateUniqueIdHashes(addedItem, true); UpdateUniqueIdHashes(addedItem, true);
await ExecuteUIThread(() => { itemViewModel.Update(addedItem); }); await ExecuteUIThread(() => { itemViewModel.MailCopy = addedItem; });
shouldExit = true; shouldExit = true;
} }
@@ -349,7 +349,10 @@ namespace Wino.Mail.ViewModels.Collections
UpdateUniqueIdHashes(itemContainer.ItemViewModel, false); UpdateUniqueIdHashes(itemContainer.ItemViewModel, false);
} }
itemContainer.ItemViewModel?.Update(updatedMailCopy); if (itemContainer.ItemViewModel != null)
{
itemContainer.ItemViewModel.MailCopy = updatedMailCopy;
}
UpdateUniqueIdHashes(updatedMailCopy, true); UpdateUniqueIdHashes(updatedMailCopy, true);

View File

@@ -15,7 +15,6 @@ using Wino.Core.Domain.Exceptions;
using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.MailItem; using Wino.Core.Domain.Models.MailItem;
using Wino.Core.Domain.Models.Navigation; using Wino.Core.Domain.Models.Navigation;
using Wino.Core.Domain.Models.Reader;
using Wino.Core.Extensions; using Wino.Core.Extensions;
using Wino.Core.Services; using Wino.Core.Services;
using Wino.Mail.ViewModels.Data; using Wino.Mail.ViewModels.Data;
@@ -85,33 +84,15 @@ namespace Wino.Mail.ViewModels
public ObservableCollection<MailAttachmentViewModel> IncludedAttachments { get; set; } = []; public ObservableCollection<MailAttachmentViewModel> IncludedAttachments { get; set; } = [];
public ObservableCollection<MailAccount> Accounts { get; set; } = []; public ObservableCollection<MailAccount> Accounts { get; set; } = [];
public ObservableCollection<AddressInformation> ToItems { get; set; } = []; public ObservableCollection<AccountContact> ToItems { get; set; } = [];
public ObservableCollection<AddressInformation> CCItems { get; set; } = []; public ObservableCollection<AccountContact> CCItems { get; set; } = [];
public ObservableCollection<AddressInformation> BCCItems { get; set; } = []; public ObservableCollection<AccountContact> BCCItems { get; set; } = [];
public List<EditorToolbarSection> ToolbarSections { get; set; } =
[
new EditorToolbarSection(){ SectionType = EditorToolbarSectionType.Format },
new EditorToolbarSection(){ SectionType = EditorToolbarSectionType.Insert },
new EditorToolbarSection(){ SectionType = EditorToolbarSectionType.Draw },
new EditorToolbarSection(){ SectionType = EditorToolbarSectionType.Options }
];
private EditorToolbarSection selectedToolbarSection;
public EditorToolbarSection SelectedToolbarSection
{
get => selectedToolbarSection;
set => SetProperty(ref selectedToolbarSection, value);
}
#endregion #endregion
public INativeAppService NativeAppService { get; } public INativeAppService NativeAppService { get; }
private readonly IMailService _mailService; private readonly IMailService _mailService;
private readonly ILaunchProtocolService _launchProtocolService;
private readonly IMimeFileService _mimeFileService; private readonly IMimeFileService _mimeFileService;
private readonly IFolderService _folderService; private readonly IFolderService _folderService;
private readonly IAccountService _accountService; private readonly IAccountService _accountService;
@@ -123,7 +104,6 @@ namespace Wino.Mail.ViewModels
public ComposePageViewModel(IDialogService dialogService, public ComposePageViewModel(IDialogService dialogService,
IMailService mailService, IMailService mailService,
ILaunchProtocolService launchProtocolService,
IMimeFileService mimeFileService, IMimeFileService mimeFileService,
INativeAppService nativeAppService, INativeAppService nativeAppService,
IFolderService folderService, IFolderService folderService,
@@ -141,13 +121,10 @@ namespace Wino.Mail.ViewModels
_folderService = folderService; _folderService = folderService;
_mailService = mailService; _mailService = mailService;
_launchProtocolService = launchProtocolService;
_mimeFileService = mimeFileService; _mimeFileService = mimeFileService;
_accountService = accountService; _accountService = accountService;
_worker = worker; _worker = worker;
_winoServerConnectionManager = winoServerConnectionManager; _winoServerConnectionManager = winoServerConnectionManager;
SelectedToolbarSection = ToolbarSections[0];
} }
[RelayCommand] [RelayCommand]
@@ -161,7 +138,9 @@ namespace Wino.Mail.ViewModels
if (!ToItems.Any()) if (!ToItems.Any())
{ {
await DialogService.ShowMessageAsync(Translator.DialogMessage_ComposerMissingRecipientMessage, Translator.DialogMessage_ComposerValidationFailedTitle); await DialogService.ShowMessageAsync(Translator.DialogMessage_ComposerMissingRecipientMessage,
Translator.DialogMessage_ComposerValidationFailedTitle,
WinoCustomMessageDialogIcon.Warning);
return; return;
} }
@@ -202,17 +181,7 @@ namespace Wino.Mail.ViewModels
await _worker.ExecuteAsync(draftSendPreparationRequest); await _worker.ExecuteAsync(draftSendPreparationRequest);
} }
public async Task IncludeAttachmentAsync(MailAttachmentViewModel viewModel) public async Task UpdateMimeChangesAsync()
{
//if (bodyBuilder == null) return;
//bodyBuilder.Attachments.Add(viewModel.FileName, new MemoryStream(viewModel.Content));
//LoadAttachments();
IncludedAttachments.Add(viewModel);
}
private async Task UpdateMimeChangesAsync()
{ {
if (isUpdatingMimeBlocked || CurrentMimeMessage == null || ComposingAccount == null || CurrentMailDraftItem == null) return; if (isUpdatingMimeBlocked || CurrentMimeMessage == null || ComposingAccount == null || CurrentMailDraftItem == null) return;
@@ -271,31 +240,6 @@ namespace Wino.Mail.ViewModels
} }
} }
private void ClearCurrentMimeAttachments()
{
var attachments = new List<MimePart>();
var multiparts = new List<Multipart>();
var iter = new MimeIterator(CurrentMimeMessage);
// collect our list of attachments and their parent multiparts
while (iter.MoveNext())
{
var multipart = iter.Parent as Multipart;
var part = iter.Current as MimePart;
if (multipart != null && part != null && part.IsAttachment)
{
// keep track of each attachment's parent multipart
multiparts.Add(multipart);
attachments.Add(part);
}
}
// now remove each attachment from its parent multipart...
for (int i = 0; i < attachments.Count; i++)
multiparts[i].Remove(attachments[i]);
}
private async Task SaveBodyAsync() private async Task SaveBodyAsync()
{ {
if (GetHTMLBodyFunction != null) if (GetHTMLBodyFunction != null)
@@ -336,13 +280,12 @@ namespace Wino.Mail.ViewModels
} }
} }
public override async void OnNavigatedFrom(NavigationMode mode, object parameters) public override void OnNavigatedFrom(NavigationMode mode, object parameters)
{ {
base.OnNavigatedFrom(mode, parameters); base.OnNavigatedFrom(mode, parameters);
await UpdateMimeChangesAsync().ConfigureAwait(false); /// Do not put any code here.
/// Make sure to use Page's OnNavigatedTo instead.
Messenger.Send(new KillChromiumRequested());
} }
public override async void OnNavigatedTo(NavigationMode mode, object parameters) public override async void OnNavigatedTo(NavigationMode mode, object parameters)
@@ -447,7 +390,7 @@ namespace Wino.Mail.ViewModels
var renderModel = _mimeFileService.GetMailRenderModel(replyingMime, mimeFilePath); var renderModel = _mimeFileService.GetMailRenderModel(replyingMime, mimeFilePath);
await ExecuteUIThread(() => await ExecuteUIThread(async () =>
{ {
// Extract information // Extract information
@@ -457,9 +400,9 @@ namespace Wino.Mail.ViewModels
CCItems.Clear(); CCItems.Clear();
BCCItems.Clear(); BCCItems.Clear();
LoadAddressInfo(replyingMime.To, ToItems); await LoadAddressInfoAsync(replyingMime.To, ToItems);
LoadAddressInfo(replyingMime.Cc, CCItems); await LoadAddressInfoAsync(replyingMime.Cc, CCItems);
LoadAddressInfo(replyingMime.Bcc, BCCItems); await LoadAddressInfoAsync(replyingMime.Bcc, BCCItems);
LoadAttachments(); LoadAttachments();
@@ -485,14 +428,19 @@ namespace Wino.Mail.ViewModels
} }
} }
private void LoadAddressInfo(InternetAddressList list, ObservableCollection<AddressInformation> collection) private async Task LoadAddressInfoAsync(InternetAddressList list, ObservableCollection<AccountContact> collection)
{ {
foreach (var item in list) foreach (var item in list)
{ {
if (item is MailboxAddress mailboxAddress) if (item is MailboxAddress mailboxAddress)
collection.Add(mailboxAddress.ToAddressInformation()); {
var foundContact = await ContactService.GetAddressInformationByAddressAsync(mailboxAddress.Address).ConfigureAwait(false)
?? new AccountContact() { Name = mailboxAddress.Name, Address = mailboxAddress.Address };
await ExecuteUIThread(() => { collection.Add(foundContact); });
}
else if (item is GroupAddress groupAddress) else if (item is GroupAddress groupAddress)
LoadAddressInfo(groupAddress.Members, collection); await LoadAddressInfoAsync(groupAddress.Members, collection);
} }
} }
@@ -518,7 +466,7 @@ namespace Wino.Mail.ViewModels
} }
} }
private void SaveAddressInfo(IEnumerable<AddressInformation> addresses, InternetAddressList list) private void SaveAddressInfo(IEnumerable<AccountContact> addresses, InternetAddressList list)
{ {
list.Clear(); list.Clear();
@@ -526,11 +474,12 @@ namespace Wino.Mail.ViewModels
list.Add(new MailboxAddress(item.Name, item.Address)); list.Add(new MailboxAddress(item.Name, item.Address));
} }
public async Task<AddressInformation> GetAddressInformationAsync(string tokenText, ObservableCollection<AddressInformation> collection) public async Task<AccountContact> GetAddressInformationAsync(string tokenText, ObservableCollection<AccountContact> collection)
{ {
// Get model from the service. This will make sure the name is properly included if there is any record. // Get model from the service. This will make sure the name is properly included if there is any record.
var info = await ContactService.GetAddressInformationByAddressAsync(tokenText); var info = await ContactService.GetAddressInformationByAddressAsync(tokenText)
?? new AccountContact() { Name = tokenText, Address = tokenText };
// Don't add if there is already that address in the collection. // Don't add if there is already that address in the collection.
if (collection.Any(a => a.Address == info.Address)) if (collection.Any(a => a.Address == info.Address))
@@ -559,7 +508,7 @@ namespace Wino.Mail.ViewModels
{ {
await ExecuteUIThread(() => await ExecuteUIThread(() =>
{ {
CurrentMailDraftItem.Update(updatedMail); CurrentMailDraftItem.MailCopy = updatedMail;
DiscardCommand.NotifyCanExecuteChanged(); DiscardCommand.NotifyCanExecuteChanged();
SendCommand.NotifyCanExecuteChanged(); SendCommand.NotifyCanExecuteChanged();

View File

@@ -11,12 +11,12 @@ namespace Wino.Mail.ViewModels.Data
/// </summary> /// </summary>
public partial class MailItemViewModel(MailCopy mailCopy) : ObservableObject, IMailItem public partial class MailItemViewModel(MailCopy mailCopy) : ObservableObject, IMailItem
{ {
public MailCopy MailCopy { get; private set; } = mailCopy; [ObservableProperty]
private MailCopy mailCopy = mailCopy;
public Guid UniqueId => ((IMailItem)MailCopy).UniqueId; public Guid UniqueId => ((IMailItem)MailCopy).UniqueId;
public string ThreadId => ((IMailItem)MailCopy).ThreadId; public string ThreadId => ((IMailItem)MailCopy).ThreadId;
public string MessageId => ((IMailItem)MailCopy).MessageId; public string MessageId => ((IMailItem)MailCopy).MessageId;
public string FromName => ((IMailItem)MailCopy).FromName ?? FromAddress;
public DateTime CreationDate => ((IMailItem)MailCopy).CreationDate; public DateTime CreationDate => ((IMailItem)MailCopy).CreationDate;
public string References => ((IMailItem)MailCopy).References; public string References => ((IMailItem)MailCopy).References;
public string InReplyTo => ((IMailItem)MailCopy).InReplyTo; public string InReplyTo => ((IMailItem)MailCopy).InReplyTo;
@@ -33,6 +33,12 @@ namespace Wino.Mail.ViewModels.Data
set => SetProperty(MailCopy.IsFlagged, value, MailCopy, (u, n) => u.IsFlagged = n); set => SetProperty(MailCopy.IsFlagged, value, MailCopy, (u, n) => u.IsFlagged = n);
} }
public string FromName
{
get => string.IsNullOrEmpty(MailCopy.FromName) ? MailCopy.FromAddress : MailCopy.FromName;
set => SetProperty(MailCopy.FromName, value, MailCopy, (u, n) => u.FromName = n);
}
public bool IsFocused public bool IsFocused
{ {
get => MailCopy.IsFocused; get => MailCopy.IsFocused;
@@ -93,20 +99,7 @@ namespace Wino.Mail.ViewModels.Data
public Guid FileId => ((IMailItem)MailCopy).FileId; public Guid FileId => ((IMailItem)MailCopy).FileId;
public void Update(MailCopy updatedMailItem) public AccountContact SenderContact => ((IMailItem)MailCopy).SenderContact;
{
MailCopy = updatedMailItem;
OnPropertyChanged(nameof(IsRead));
OnPropertyChanged(nameof(IsFocused));
OnPropertyChanged(nameof(IsFlagged));
OnPropertyChanged(nameof(IsDraft));
OnPropertyChanged(nameof(DraftId));
OnPropertyChanged(nameof(Subject));
OnPropertyChanged(nameof(PreviewText));
OnPropertyChanged(nameof(FromAddress));
OnPropertyChanged(nameof(HasAttachments));
}
public IEnumerable<Guid> GetContainingIds() => new[] { UniqueId }; public IEnumerable<Guid> GetContainingIds() => new[] { UniqueId };
} }

View File

@@ -14,16 +14,18 @@ namespace Wino.Mail.ViewModels.Data
/// </summary> /// </summary>
public partial class ThreadMailItemViewModel : ObservableObject, IMailItemThread, IComparable<string>, IComparable<DateTime> public partial class ThreadMailItemViewModel : ObservableObject, IMailItemThread, IComparable<string>, IComparable<DateTime>
{ {
public ObservableCollection<IMailItem> ThreadItems => ((IMailItemThread)_threadMailItem).ThreadItems; public ObservableCollection<IMailItem> ThreadItems => ((IMailItemThread)MailItem).ThreadItems;
public AccountContact SenderContact => ((IMailItemThread)MailItem).SenderContact;
private readonly ThreadMailItem _threadMailItem; [ObservableProperty]
private ThreadMailItem mailItem;
[ObservableProperty] [ObservableProperty]
private bool isThreadExpanded; private bool isThreadExpanded;
public ThreadMailItemViewModel(ThreadMailItem threadMailItem) public ThreadMailItemViewModel(ThreadMailItem threadMailItem)
{ {
_threadMailItem = new ThreadMailItem(); MailItem = new ThreadMailItem();
// Local copies // Local copies
foreach (var item in threadMailItem.ThreadItems) foreach (var item in threadMailItem.ThreadItems)
@@ -32,7 +34,7 @@ namespace Wino.Mail.ViewModels.Data
} }
} }
public ThreadMailItem GetThreadMailItem() => _threadMailItem; public ThreadMailItem GetThreadMailItem() => MailItem;
public IEnumerable<MailCopy> GetMailCopies() public IEnumerable<MailCopy> GetMailCopies()
=> ThreadItems.OfType<MailItemViewModel>().Select(a => a.MailCopy); => ThreadItems.OfType<MailItemViewModel>().Select(a => a.MailCopy);
@@ -42,9 +44,9 @@ namespace Wino.Mail.ViewModels.Data
if (mailItem == null) return; if (mailItem == null) return;
if (mailItem is MailCopy mailCopy) if (mailItem is MailCopy mailCopy)
_threadMailItem.AddThreadItem(new MailItemViewModel(mailCopy)); MailItem.AddThreadItem(new MailItemViewModel(mailCopy));
else if (mailItem is MailItemViewModel mailItemViewModel) else if (mailItem is MailItemViewModel mailItemViewModel)
_threadMailItem.AddThreadItem(mailItemViewModel); MailItem.AddThreadItem(mailItemViewModel);
else else
Debugger.Break(); Debugger.Break();
} }
@@ -75,46 +77,43 @@ namespace Wino.Mail.ViewModels.Data
public void NotifyPropertyChanges() public void NotifyPropertyChanges()
{ {
OnPropertyChanged(nameof(Subject)); // TODO
OnPropertyChanged(nameof(PreviewText)); // Stupid temporary fix for not updating UI.
OnPropertyChanged(nameof(FromName)); // This view model must be reworked with ThreadMailItem together.
OnPropertyChanged(nameof(FromAddress));
OnPropertyChanged(nameof(HasAttachments));
OnPropertyChanged(nameof(IsFlagged)); var current = MailItem;
OnPropertyChanged(nameof(IsDraft));
OnPropertyChanged(nameof(IsRead)); MailItem = null;
OnPropertyChanged(nameof(IsFocused)); MailItem = current;
OnPropertyChanged(nameof(CreationDate));
} }
public IMailItem LatestMailItem => ((IMailItemThread)_threadMailItem).LatestMailItem; public IMailItem LatestMailItem => ((IMailItemThread)MailItem).LatestMailItem;
public IMailItem FirstMailItem => ((IMailItemThread)_threadMailItem).FirstMailItem; public IMailItem FirstMailItem => ((IMailItemThread)MailItem).FirstMailItem;
public string Id => ((IMailItem)_threadMailItem).Id; public string Id => ((IMailItem)MailItem).Id;
public string Subject => ((IMailItem)_threadMailItem).Subject; public string Subject => ((IMailItem)MailItem).Subject;
public string ThreadId => ((IMailItem)_threadMailItem).ThreadId; public string ThreadId => ((IMailItem)MailItem).ThreadId;
public string MessageId => ((IMailItem)_threadMailItem).MessageId; public string MessageId => ((IMailItem)MailItem).MessageId;
public string References => ((IMailItem)_threadMailItem).References; public string References => ((IMailItem)MailItem).References;
public string PreviewText => ((IMailItem)_threadMailItem).PreviewText; public string PreviewText => ((IMailItem)MailItem).PreviewText;
public string FromName => ((IMailItem)_threadMailItem).FromName; public string FromName => ((IMailItem)MailItem).FromName;
public DateTime CreationDate => ((IMailItem)_threadMailItem).CreationDate; public DateTime CreationDate => ((IMailItem)MailItem).CreationDate;
public string FromAddress => ((IMailItem)_threadMailItem).FromAddress; public string FromAddress => ((IMailItem)MailItem).FromAddress;
public bool HasAttachments => ((IMailItem)_threadMailItem).HasAttachments; public bool HasAttachments => ((IMailItem)MailItem).HasAttachments;
public bool IsFlagged => ((IMailItem)_threadMailItem).IsFlagged; public bool IsFlagged => ((IMailItem)MailItem).IsFlagged;
public bool IsFocused => ((IMailItem)_threadMailItem).IsFocused; public bool IsFocused => ((IMailItem)MailItem).IsFocused;
public bool IsRead => ((IMailItem)_threadMailItem).IsRead; public bool IsRead => ((IMailItem)MailItem).IsRead;
public bool IsDraft => ((IMailItem)_threadMailItem).IsDraft; public bool IsDraft => ((IMailItem)MailItem).IsDraft;
public string DraftId => string.Empty; public string DraftId => string.Empty;
public string InReplyTo => ((IMailItem)_threadMailItem).InReplyTo; public string InReplyTo => ((IMailItem)MailItem).InReplyTo;
public MailItemFolder AssignedFolder => ((IMailItem)_threadMailItem).AssignedFolder; public MailItemFolder AssignedFolder => ((IMailItem)MailItem).AssignedFolder;
public MailAccount AssignedAccount => ((IMailItem)_threadMailItem).AssignedAccount; public MailAccount AssignedAccount => ((IMailItem)MailItem).AssignedAccount;
public Guid UniqueId => ((IMailItem)_threadMailItem).UniqueId; public Guid UniqueId => ((IMailItem)MailItem).UniqueId;
public Guid FileId => ((IMailItem)_threadMailItem).FileId; public Guid FileId => ((IMailItem)MailItem).FileId;
public int CompareTo(DateTime other) => CreationDate.CompareTo(other); public int CompareTo(DateTime other) => CreationDate.CompareTo(other);
public int CompareTo(string other) => FromName.CompareTo(other); public int CompareTo(string other) => FromName.CompareTo(other);
@@ -122,6 +121,6 @@ namespace Wino.Mail.ViewModels.Data
// Get single mail item view model out of the only item in thread items. // Get single mail item view model out of the only item in thread items.
public MailItemViewModel GetSingleItemViewModel() => ThreadItems.First() as MailItemViewModel; public MailItemViewModel GetSingleItemViewModel() => ThreadItems.First() as MailItemViewModel;
public IEnumerable<Guid> GetContainingIds() => ((IMailItemThread)_threadMailItem).GetContainingIds(); public IEnumerable<Guid> GetContainingIds() => ((IMailItemThread)MailItem).GetContainingIds();
} }
} }

View File

@@ -41,8 +41,7 @@ namespace Wino.Mail.ViewModels
IRecipient<MailItemSelectionRemovedEvent>, IRecipient<MailItemSelectionRemovedEvent>,
IRecipient<AccountSynchronizationCompleted>, IRecipient<AccountSynchronizationCompleted>,
IRecipient<NewSynchronizationRequested>, IRecipient<NewSynchronizationRequested>,
IRecipient<AccountSynchronizerStateChanged>, IRecipient<AccountSynchronizerStateChanged>
IRecipient<SelectedMailItemsChanged>
{ {
private bool isChangingFolder = false; private bool isChangingFolder = false;
@@ -63,6 +62,7 @@ namespace Wino.Mail.ViewModels
public ObservableCollection<MailItemViewModel> SelectedItems { get; set; } = []; public ObservableCollection<MailItemViewModel> SelectedItems { get; set; } = [];
public ObservableCollection<FolderPivotViewModel> PivotFolders { get; set; } = []; public ObservableCollection<FolderPivotViewModel> PivotFolders { get; set; } = [];
public ObservableCollection<MailOperationMenuItem> ActionItems { get; set; } = [];
private readonly SemaphoreSlim listManipulationSemepahore = new SemaphoreSlim(1); private readonly SemaphoreSlim listManipulationSemepahore = new SemaphoreSlim(1);
private CancellationTokenSource listManipulationCancellationTokenSource = new CancellationTokenSource(); private CancellationTokenSource listManipulationCancellationTokenSource = new CancellationTokenSource();
@@ -200,6 +200,13 @@ namespace Wino.Mail.ViewModels
}; };
} }
private void SetupTopBarActions()
{
ActionItems.Clear();
var actions = GetAvailableMailActions(SelectedItems);
actions.ForEach(a => ActionItems.Add(a));
}
#region Properties #region Properties
/// <summary> /// <summary>
@@ -365,7 +372,7 @@ namespace Wino.Mail.ViewModels
NotifyItemSelected(); NotifyItemSelected();
Messenger.Send(new SelectedMailItemsChanged(SelectedItems.Count)); SetupTopBarActions();
} }
private void UpdateFolderPivots() private void UpdateFolderPivots()
@@ -415,19 +422,31 @@ namespace Wino.Mail.ViewModels
[RelayCommand] [RelayCommand]
public Task ExecuteHoverAction(MailOperationPreperationRequest request) => ExecuteMailOperationAsync(request); public Task ExecuteHoverAction(MailOperationPreperationRequest request) => ExecuteMailOperationAsync(request);
[RelayCommand]
private async Task ExecuteTopBarAction(MailOperationMenuItem menuItem)
{
if (menuItem == null || !SelectedItems.Any()) return;
await HandleMailOperation(menuItem.Operation, SelectedItems);
}
/// <summary> /// <summary>
/// Executes the requested mail operation for currently selected items. /// Executes the requested mail operation for currently selected items.
/// </summary> /// </summary>
/// <param name="operation">Action to execute for selected items.</param> /// <param name="operation">Action to execute for selected items.</param>
[RelayCommand] [RelayCommand]
private async Task MailOperationAsync(int mailOperationIndex) private async Task ExecuteMailOperation(MailOperation mailOperation)
{ {
if (!SelectedItems.Any()) return; if (!SelectedItems.Any()) return;
// Commands don't like enums. So it has to be int. await HandleMailOperation(mailOperation, SelectedItems);
var operation = (MailOperation)mailOperationIndex; }
var package = new MailOperationPreperationRequest(operation, SelectedItems.Select(a => a.MailCopy)); private async Task HandleMailOperation(MailOperation mailOperation, IEnumerable<MailItemViewModel> mailItems)
{
if (!mailItems.Any()) return;
var package = new MailOperationPreperationRequest(mailOperation, mailItems.Select(a => a.MailCopy));
await ExecuteMailOperationAsync(package); await ExecuteMailOperationAsync(package);
} }
@@ -614,8 +633,6 @@ namespace Wino.Mail.ViewModels
try try
{ {
await listManipulationSemepahore.WaitAsync();
if (ActiveFolder == null) return; if (ActiveFolder == null) return;
// At least accounts must match. // At least accounts must match.
@@ -631,6 +648,8 @@ namespace Wino.Mail.ViewModels
// Item should be prevented from being added to the list due to filter. // Item should be prevented from being added to the list due to filter.
if (!shouldPreventIgnoringFilter && ShouldPreventItemAdd(addedMail)) return; if (!shouldPreventIgnoringFilter && ShouldPreventItemAdd(addedMail)) return;
await listManipulationSemepahore.WaitAsync();
await MailCollection.AddAsync(addedMail); await MailCollection.AddAsync(addedMail);
await ExecuteUIThread(() => { NotifyItemFoundState(); }); await ExecuteUIThread(() => { NotifyItemFoundState(); });
@@ -649,6 +668,8 @@ namespace Wino.Mail.ViewModels
Debug.WriteLine($"Updating {updatedMail.Id}-> {updatedMail.UniqueId}"); Debug.WriteLine($"Updating {updatedMail.Id}-> {updatedMail.UniqueId}");
await MailCollection.UpdateMailCopy(updatedMail); await MailCollection.UpdateMailCopy(updatedMail);
await ExecuteUIThread(() => { SetupTopBarActions(); });
} }
protected override async void OnMailRemoved(MailCopy removedMail) protected override async void OnMailRemoved(MailCopy removedMail)
@@ -762,12 +783,17 @@ namespace Wino.Mail.ViewModels
// Folder is changed during initialization. // Folder is changed during initialization.
// Just cancel the existing one and wait for new initialization. // Just cancel the existing one and wait for new initialization.
if (listManipulationSemepahore.CurrentCount == 0) //if (listManipulationSemepahore.CurrentCount == 0)
{ //{
Debug.WriteLine("Canceling initialization of mails."); // Debug.WriteLine("Canceling initialization of mails.");
// listManipulationCancellationTokenSource.Cancel();
// listManipulationCancellationTokenSource.Token.ThrowIfCancellationRequested();
//}
if (!listManipulationCancellationTokenSource.IsCancellationRequested)
{
listManipulationCancellationTokenSource.Cancel(); listManipulationCancellationTokenSource.Cancel();
listManipulationCancellationTokenSource.Token.ThrowIfCancellationRequested();
} }
listManipulationCancellationTokenSource = new CancellationTokenSource(); listManipulationCancellationTokenSource = new CancellationTokenSource();
@@ -794,8 +820,10 @@ namespace Wino.Mail.ViewModels
SearchQuery, SearchQuery,
MailCollection.MailCopyIdHashSet); MailCollection.MailCopyIdHashSet);
var items = await _mailService.FetchMailsAsync(initializationOptions).ConfigureAwait(false); var items = await _mailService.FetchMailsAsync(initializationOptions, cancellationToken).ConfigureAwait(false);
if (!listManipulationCancellationTokenSource.IsCancellationRequested)
{
// Here they are already threaded if needed. // Here they are already threaded if needed.
// We don't need to insert them one by one. // We don't need to insert them one by one.
// Just create VMs and do bulk insert. // Just create VMs and do bulk insert.
@@ -804,6 +832,7 @@ namespace Wino.Mail.ViewModels
await ExecuteUIThread(() => { MailCollection.AddRange(viewModels, true); }); await ExecuteUIThread(() => { MailCollection.AddRange(viewModels, true); });
} }
}
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
Debug.WriteLine("Initialization of mails canceled."); Debug.WriteLine("Initialization of mails canceled.");
@@ -1004,7 +1033,5 @@ namespace Wino.Mail.ViewModels
await ExecuteUIThread(() => { IsAccountSynchronizerInSynchronization = isAnyAccountSynchronizing; }); await ExecuteUIThread(() => { IsAccountSynchronizerInSynchronization = isAnyAccountSynchronizing; });
} }
public void Receive(SelectedMailItemsChanged message) => NotifyItemSelected();
} }
} }

View File

@@ -20,7 +20,6 @@ using Wino.Core.Domain.Models.MailItem;
using Wino.Core.Domain.Models.Menus; using Wino.Core.Domain.Models.Menus;
using Wino.Core.Domain.Models.Navigation; using Wino.Core.Domain.Models.Navigation;
using Wino.Core.Domain.Models.Reader; using Wino.Core.Domain.Models.Reader;
using Wino.Core.Extensions;
using Wino.Core.Services; using Wino.Core.Services;
using Wino.Mail.ViewModels.Data; using Wino.Mail.ViewModels.Data;
using Wino.Mail.ViewModels.Messages; using Wino.Mail.ViewModels.Messages;
@@ -39,6 +38,7 @@ namespace Wino.Mail.ViewModels
private readonly Core.Domain.Interfaces.IMailService _mailService; private readonly Core.Domain.Interfaces.IMailService _mailService;
private readonly IFileService _fileService; private readonly IFileService _fileService;
private readonly IWinoRequestDelegator _requestDelegator; private readonly IWinoRequestDelegator _requestDelegator;
private readonly IContactService _contactService;
private readonly IClipboardService _clipboardService; private readonly IClipboardService _clipboardService;
private readonly IUnsubscriptionService _unsubscriptionService; private readonly IUnsubscriptionService _unsubscriptionService;
private readonly IWinoServerConnectionManager _winoServerConnectionManager; private readonly IWinoServerConnectionManager _winoServerConnectionManager;
@@ -104,13 +104,16 @@ namespace Wino.Mail.ViewModels
[ObservableProperty] [ObservableProperty]
private string fromName; private string fromName;
[ObservableProperty]
private string contactPicture;
[ObservableProperty] [ObservableProperty]
private DateTime creationDate; private DateTime creationDate;
public ObservableCollection<AddressInformation> ToItems { get; set; } = new ObservableCollection<AddressInformation>(); public ObservableCollection<AccountContact> ToItems { get; set; } = new ObservableCollection<AccountContact>();
public ObservableCollection<AddressInformation> CCItemsItems { get; set; } = new ObservableCollection<AddressInformation>(); public ObservableCollection<AccountContact> CCItemsItems { get; set; } = new ObservableCollection<AccountContact>();
public ObservableCollection<AddressInformation> BCCItems { get; set; } = new ObservableCollection<AddressInformation>(); public ObservableCollection<AccountContact> BCCItems { get; set; } = new ObservableCollection<AccountContact>();
public ObservableCollection<MailAttachmentViewModel> Attachments { get; set; } = new ObservableCollection<MailAttachmentViewModel>(); public ObservableCollection<MailAttachmentViewModel> Attachments { get; set; } = new ObservableCollection<MailAttachmentViewModel>();
public ObservableCollection<MailOperationMenuItem> MenuItems { get; set; } = new ObservableCollection<MailOperationMenuItem>(); public ObservableCollection<MailOperationMenuItem> MenuItems { get; set; } = new ObservableCollection<MailOperationMenuItem>();
@@ -128,6 +131,7 @@ namespace Wino.Mail.ViewModels
IFileService fileService, IFileService fileService,
IWinoRequestDelegator requestDelegator, IWinoRequestDelegator requestDelegator,
IStatePersistanceService statePersistenceService, IStatePersistanceService statePersistenceService,
IContactService contactService,
IClipboardService clipboardService, IClipboardService clipboardService,
IUnsubscriptionService unsubscriptionService, IUnsubscriptionService unsubscriptionService,
IPreferencesService preferencesService, IPreferencesService preferencesService,
@@ -135,6 +139,7 @@ namespace Wino.Mail.ViewModels
{ {
NativeAppService = nativeAppService; NativeAppService = nativeAppService;
StatePersistenceService = statePersistenceService; StatePersistenceService = statePersistenceService;
_contactService = contactService;
PreferencesService = preferencesService; PreferencesService = preferencesService;
_winoServerConnectionManager = winoServerConnectionManager; _winoServerConnectionManager = winoServerConnectionManager;
_clipboardService = clipboardService; _clipboardService = clipboardService;
@@ -402,9 +407,12 @@ namespace Wino.Mail.ViewModels
var renderingOptions = PreferencesService.GetRenderingOptions(); var renderingOptions = PreferencesService.GetRenderingOptions();
await ExecuteUIThread(() => await ExecuteUIThread(async () =>
{ {
Attachments.Clear(); Attachments.Clear();
ToItems.Clear();
CCItemsItems.Clear();
BCCItems.Clear();
Subject = message.Subject; Subject = message.Subject;
@@ -412,11 +420,12 @@ namespace Wino.Mail.ViewModels
FromAddress = message.From.Mailboxes.FirstOrDefault()?.Address ?? Translator.UnknownAddress; FromAddress = message.From.Mailboxes.FirstOrDefault()?.Address ?? Translator.UnknownAddress;
FromName = message.From.Mailboxes.FirstOrDefault()?.Name ?? Translator.UnknownSender; FromName = message.From.Mailboxes.FirstOrDefault()?.Name ?? Translator.UnknownSender;
CreationDate = message.Date.DateTime; CreationDate = message.Date.DateTime;
ContactPicture = initializedMailItemViewModel.SenderContact?.Base64ContactPicture;
// Extract to,cc and bcc // Extract to,cc and bcc
LoadAddressInfo(message.To, ToItems); await LoadAddressInfoAsync(message.To, ToItems);
LoadAddressInfo(message.Cc, CCItemsItems); await LoadAddressInfoAsync(message.Cc, CCItemsItems);
LoadAddressInfo(message.Bcc, BCCItems); await LoadAddressInfoAsync(message.Bcc, BCCItems);
// Automatically disable images for Junk folder to prevent pixel tracking. // Automatically disable images for Junk folder to prevent pixel tracking.
// This can only work for selected mail item rendering, not for EML file rendering. // This can only work for selected mail item rendering, not for EML file rendering.
@@ -470,16 +479,19 @@ namespace Wino.Mail.ViewModels
StatePersistenceService.IsReadingMail = false; StatePersistenceService.IsReadingMail = false;
} }
private void LoadAddressInfo(InternetAddressList list, ObservableCollection<AddressInformation> collection) private async Task LoadAddressInfoAsync(InternetAddressList list, ObservableCollection<AccountContact> collection)
{ {
collection.Clear();
foreach (var item in list) foreach (var item in list)
{ {
if (item is MailboxAddress mailboxAddress) if (item is MailboxAddress mailboxAddress)
collection.Add(mailboxAddress.ToAddressInformation()); {
var foundContact = await _contactService.GetAddressInformationByAddressAsync(mailboxAddress.Address).ConfigureAwait(false)
?? new AccountContact() { Name = mailboxAddress.Name, Address = mailboxAddress.Address };
await ExecuteUIThread(() => { collection.Add(foundContact); });
}
else if (item is GroupAddress groupAddress) else if (item is GroupAddress groupAddress)
LoadAddressInfo(groupAddress.Members, collection); await LoadAddressInfoAsync(groupAddress.Members, collection);
} }
} }

View File

@@ -6,13 +6,6 @@ namespace Wino.Mail.ViewModels.Messages
/// When the rendering page is active, but new item is requested to be rendered. /// When the rendering page is active, but new item is requested to be rendered.
/// To not trigger navigation again and re-use existing Chromium. /// To not trigger navigation again and re-use existing Chromium.
/// </summary> /// </summary>
public class NewMailItemRenderingRequestedEvent /// <param name="MailItemViewModel"></param>
{ public record NewMailItemRenderingRequestedEvent(MailItemViewModel MailItemViewModel);
public NewMailItemRenderingRequestedEvent(MailItemViewModel mailItemViewModel)
{
MailItemViewModel = mailItemViewModel;
}
public MailItemViewModel MailItemViewModel { get; }
}
} }

View File

@@ -5,6 +5,7 @@ using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Input;
using Wino.Core.Domain; using Wino.Core.Domain;
using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums; using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Interfaces; using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Personalization; using Wino.Core.Domain.Models.Personalization;
@@ -21,6 +22,14 @@ namespace Wino.Mail.ViewModels
private bool isPropChangeDisabled = false; private bool isPropChangeDisabled = false;
// Sample mail copy to use in previewing mail display modes.
public MailCopy DemoPreviewMailCopy { get; } = new MailCopy()
{
FromName = "Sender Name",
Subject = "Mail Subject",
PreviewText = "Thank you for using Wino Mail. We hope you enjoy the experience.",
};
#region Personalization #region Personalization
public bool IsSelectedWindowsAccentColor => SelectedAppColor == Colors.LastOrDefault(); public bool IsSelectedWindowsAccentColor => SelectedAppColor == Colors.LastOrDefault();
@@ -212,21 +221,9 @@ namespace Wino.Mail.ViewModels
_themeService.AccentColorChanged -= AccentColorChanged; _themeService.AccentColorChanged -= AccentColorChanged;
_themeService.ElementThemeChanged -= ElementThemeChanged; _themeService.ElementThemeChanged -= ElementThemeChanged;
_themeService.AccentColorChangedBySystem -= AccentColorChangedBySystem;
_themeService.AccentColorChanged += AccentColorChanged; _themeService.AccentColorChanged += AccentColorChanged;
_themeService.ElementThemeChanged += ElementThemeChanged; _themeService.ElementThemeChanged += ElementThemeChanged;
_themeService.AccentColorChangedBySystem += AccentColorChangedBySystem;
}
private void AccentColorChangedBySystem(object sender, string newAccentColorHex)
{
var accentInList = Colors.FirstOrDefault(a => a.IsAccentColor);
if (accentInList != null)
{
accentInList.Hex = newAccentColorHex;
}
} }
private void AccentColorChanged(object sender, string e) private void AccentColorChanged(object sender, string e)
@@ -260,7 +257,6 @@ namespace Wino.Mail.ViewModels
_themeService.AccentColorChanged -= AccentColorChanged; _themeService.AccentColorChanged -= AccentColorChanged;
_themeService.ElementThemeChanged -= ElementThemeChanged; _themeService.ElementThemeChanged -= ElementThemeChanged;
_themeService.AccentColorChangedBySystem -= AccentColorChangedBySystem;
if (AppThemes != null) if (AppThemes != null)
{ {

View File

@@ -12,8 +12,8 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.AppCenter.Crashes" Version="5.0.4" /> <PackageReference Include="Microsoft.AppCenter.Crashes" Version="5.0.5" />
<PackageReference Include="System.Reactive" Version="6.0.0" /> <PackageReference Include="System.Reactive" Version="6.0.1" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -4,12 +4,15 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:controls="using:Wino.Controls" xmlns:controls="using:Wino.Controls"
xmlns:selectors="using:Wino.Selectors" xmlns:selectors="using:Wino.Selectors"
xmlns:styles="using:Wino.Styles"
xmlns:wino="using:Wino"> xmlns:wino="using:Wino">
<Application.Resources> <Application.Resources>
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ms-appx:///CommunityToolkit.WinUI.Controls.Segmented/Segmented/Segmented.xaml" />
<ResourceDictionary Source="/Styles/Converters.xaml" /> <ResourceDictionary Source="/Styles/Converters.xaml" />
<ResourceDictionary Source="/Styles/FontIcons.xaml" /> <ResourceDictionary Source="/Styles/FontIcons.xaml" />
<ResourceDictionary Source="/Styles/Colors.xaml" /> <ResourceDictionary Source="/Styles/Colors.xaml" />
@@ -19,6 +22,9 @@
<ResourceDictionary Source="/Styles/ItemContainerStyles.xaml" /> <ResourceDictionary Source="/Styles/ItemContainerStyles.xaml" />
<ResourceDictionary Source="/Styles/WinoInfoBar.xaml" /> <ResourceDictionary Source="/Styles/WinoInfoBar.xaml" />
<styles:CustomMessageDialogStyles />
<styles:WinoExpanderStyle />
<ResourceDictionary> <ResourceDictionary>
<x:Double x:Key="AppBarButtonContentHeight">19</x:Double> <x:Double x:Key="AppBarButtonContentHeight">19</x:Double>
@@ -41,7 +47,7 @@
</Style> </Style>
<!-- Border style for each page's root border for separation of zones. --> <!-- Border style for each page's root border for separation of zones. -->
<Style TargetType="Border" x:Key="PageRootBorderStyle"> <Style x:Key="PageRootBorderStyle" TargetType="Border">
<Setter Property="Margin" Value="7,0,7,7" /> <Setter Property="Margin" Value="7,0,7,7" />
<Setter Property="Background" Value="{ThemeResource WinoContentZoneBackgroud}" /> <Setter Property="Background" Value="{ThemeResource WinoContentZoneBackgroud}" />
<Setter Property="BorderBrush" Value="{StaticResource CardStrokeColorDefaultBrush}" /> <Setter Property="BorderBrush" Value="{StaticResource CardStrokeColorDefaultBrush}" />
@@ -50,7 +56,7 @@
</Style> </Style>
<!-- Custom Grid style for info panels. --> <!-- Custom Grid style for info panels. -->
<Style TargetType="Grid" x:Key="InformationAreaGridStyle"> <Style x:Key="InformationAreaGridStyle" TargetType="Grid">
<Setter Property="Background" Value="{ThemeResource CardBackgroundFillColorDefaultBrush}" /> <Setter Property="Background" Value="{ThemeResource CardBackgroundFillColorDefaultBrush}" />
<Setter Property="BorderBrush" Value="{ThemeResource DividerStrokeColorDefaultBrush}" /> <Setter Property="BorderBrush" Value="{ThemeResource DividerStrokeColorDefaultBrush}" />
<Setter Property="CornerRadius" Value="8" /> <Setter Property="CornerRadius" Value="8" />
@@ -166,6 +172,10 @@
</Setter> </Setter>
</Style> </Style>
<!-- Attachment Icon Templates -->
<DataTemplate x:Key="NoneTemplate"> <DataTemplate x:Key="NoneTemplate">
<Image Source="/Assets/FileTypes/type_none.png" /> <Image Source="/Assets/FileTypes/type_none.png" />
</DataTemplate> </DataTemplate>

View File

@@ -21,6 +21,7 @@ using Windows.Foundation.Metadata;
using Windows.Storage; using Windows.Storage;
using Windows.System.Profile; using Windows.System.Profile;
using Windows.UI; using Windows.UI;
using Windows.UI.Core.Preview;
using Windows.UI.Notifications; using Windows.UI.Notifications;
using Windows.UI.ViewManagement; using Windows.UI.ViewManagement;
using Windows.UI.Xaml; using Windows.UI.Xaml;
@@ -38,6 +39,7 @@ using Wino.Core.UWP;
using Wino.Core.UWP.Services; using Wino.Core.UWP.Services;
using Wino.Mail.ViewModels; using Wino.Mail.ViewModels;
using Wino.Messaging.Client.Connection; using Wino.Messaging.Client.Connection;
using Wino.Messaging.Client.Navigation;
using Wino.Messaging.Server; using Wino.Messaging.Server;
using Wino.Services; using Wino.Services;
@@ -107,6 +109,78 @@ namespace Wino
WeakReferenceMessenger.Default.Register(this); WeakReferenceMessenger.Default.Register(this);
} }
private async void ApplicationCloseRequested(object sender, SystemNavigationCloseRequestedPreviewEventArgs e)
{
var deferral = e.GetDeferral();
// Wino should notify user on app close if:
// 1. User has at least 1 registered account.
// 2. Startup behavior is not Enabled.
// 3. Server terminate behavior is set to Terminate.
var accountService = Services.GetService<IAccountService>();
var accounts = await accountService.GetAccountsAsync();
if (accounts.Count > 0)
{
// User has some accounts. Check if Wino Server runs on system startup.
var dialogService = Services.GetService<IDialogService>();
var startupBehaviorService = Services.GetService<IStartupBehaviorService>();
var preferencesService = Services.GetService<IPreferencesService>();
var currentStartupBehavior = await startupBehaviorService.GetCurrentStartupBehaviorAsync();
bool? isGoToAppPreferencesRequested = null;
if (preferencesService.ServerTerminationBehavior == ServerBackgroundMode.Terminate)
{
// Starting the server is fine, but check if server termination behavior is set to terminate.
// This state will kill the server once the app is terminated.
isGoToAppPreferencesRequested = await _dialogService.ShowWinoCustomMessageDialogAsync(Translator.AppCloseBackgroundSynchronizationWarningTitle,
$"{Translator.AppCloseTerminateBehaviorWarningMessageFirstLine}\n{Translator.AppCloseTerminateBehaviorWarningMessageSecondLine}\n\n{Translator.AppCloseTerminateBehaviorWarningMessageThirdLine}",
Translator.Buttons_Yes,
WinoCustomMessageDialogIcon.Warning,
Translator.Buttons_No,
"DontAskTerminateServerBehavior");
}
if (isGoToAppPreferencesRequested == null && currentStartupBehavior != StartupBehaviorResult.Enabled)
{
// Startup behavior is not enabled.
isGoToAppPreferencesRequested = await dialogService.ShowWinoCustomMessageDialogAsync(Translator.AppCloseBackgroundSynchronizationWarningTitle,
$"{Translator.AppCloseStartupLaunchDisabledWarningMessageFirstLine}\n{Translator.AppCloseStartupLaunchDisabledWarningMessageSecondLine}\n\n{Translator.AppCloseStartupLaunchDisabledWarningMessageThirdLine}",
Translator.Buttons_Yes,
WinoCustomMessageDialogIcon.Warning,
Translator.Buttons_No,
"DontAskDisabledStartup");
}
if (isGoToAppPreferencesRequested == true)
{
WeakReferenceMessenger.Default.Send(new NavigateAppPreferencesRequested());
e.Handled = true;
}
else if (preferencesService.ServerTerminationBehavior == ServerBackgroundMode.Terminate)
{
try
{
var isServerKilled = await _appServiceConnectionManager.GetResponseAsync<bool, TerminateServerRequested>(new TerminateServerRequested());
Log.Information("Server is killed.");
}
catch (Exception ex)
{
Log.Error(ex, "Failed to kill server.");
}
}
}
deferral.Complete();
}
private async void OnResuming(object sender, object e) private async void OnResuming(object sender, object e)
{ {
// App Service connection was lost on suspension. // App Service connection was lost on suspension.
@@ -230,9 +304,10 @@ namespace Wino
{ {
base.OnWindowCreated(args); base.OnWindowCreated(args);
LogActivation("Window is created."); LogActivation($"OnWindowCreated -> IsWindowNull: {args.Window == null}");
ConfigureTitleBar(); ConfigureTitleBar();
TryRegisterAppCloseChange();
} }
protected override async void OnLaunched(LaunchActivatedEventArgs args) protected override async void OnLaunched(LaunchActivatedEventArgs args)
@@ -245,11 +320,23 @@ namespace Wino
} }
} }
private void TryRegisterAppCloseChange()
{
try
{
var systemNavigationManagerPreview = SystemNavigationManagerPreview.GetForCurrentView();
systemNavigationManagerPreview.CloseRequested -= ApplicationCloseRequested;
systemNavigationManagerPreview.CloseRequested += ApplicationCloseRequested;
}
catch { }
}
protected override async void OnFileActivated(FileActivatedEventArgs args) protected override async void OnFileActivated(FileActivatedEventArgs args)
{ {
base.OnFileActivated(args); base.OnFileActivated(args);
Log.Information($"File activation for {args.Files.Count} item(s)."); LogActivation($"OnFileActivated -> ItemCount: {args.Files.Count}, Kind: {args.Kind}, PreviousExecutionState: {args.PreviousExecutionState}");
await ActivateWinoAsync(args); await ActivateWinoAsync(args);
} }
@@ -269,6 +356,8 @@ namespace Wino
if (args.TaskInstance.TriggerDetails is AppServiceTriggerDetails appServiceTriggerDetails) if (args.TaskInstance.TriggerDetails is AppServiceTriggerDetails appServiceTriggerDetails)
{ {
LogActivation("OnBackgroundActivated -> AppServiceTriggerDetails received.");
// Only accept connections from callers in the same package // Only accept connections from callers in the same package
if (appServiceTriggerDetails.CallerPackageFamilyName == Package.Current.Id.FamilyName) if (appServiceTriggerDetails.CallerPackageFamilyName == Package.Current.Id.FamilyName)
{ {
@@ -286,6 +375,8 @@ namespace Wino
{ {
// Notification action is triggered and the app is not running. // Notification action is triggered and the app is not running.
LogActivation("OnBackgroundActivated -> ToastNotificationActionTriggerDetail received.");
toastActionBackgroundTaskDeferral = args.TaskInstance.GetDeferral(); toastActionBackgroundTaskDeferral = args.TaskInstance.GetDeferral();
args.TaskInstance.Canceled += OnToastActionClickedBackgroundTaskCanceled; args.TaskInstance.Canceled += OnToastActionClickedBackgroundTaskCanceled;

File diff suppressed because one or more lines are too long

View File

@@ -142,8 +142,6 @@ namespace Wino.Views
if (ViewModel.MenuItems.TryGetFolderMenuItem(message.FolderId, out IBaseFolderMenuItem foundMenuItem)) if (ViewModel.MenuItems.TryGetFolderMenuItem(message.FolderId, out IBaseFolderMenuItem foundMenuItem))
{ {
if (foundMenuItem == null) return;
foundMenuItem.Expand(); foundMenuItem.Expand();
await ViewModel.NavigateFolderAsync(foundMenuItem); await ViewModel.NavigateFolderAsync(foundMenuItem);
@@ -153,7 +151,27 @@ namespace Wino.Views
if (message.NavigateMailItem == null) return; if (message.NavigateMailItem == null) return;
// At this point folder is navigated and items are loaded. // At this point folder is navigated and items are loaded.
WeakReferenceMessenger.Default.Send(new MailItemNavigationRequested(message.NavigateMailItem.UniqueId)); WeakReferenceMessenger.Default.Send(new MailItemNavigationRequested(message.NavigateMailItem.UniqueId, ScrollToItem: true));
}
else if (ViewModel.MenuItems.TryGetAccountMenuItem(message.NavigateMailItem.AssignedAccount.Id, out IAccountMenuItem accountMenuItem))
{
// Loaded account is different. First change the folder items and navigate.
await ViewModel.ChangeLoadedAccountAsync(accountMenuItem, navigateInbox: false);
// Find the folder.
if (ViewModel.MenuItems.TryGetFolderMenuItem(message.FolderId, out IBaseFolderMenuItem accountFolderMenuItem))
{
accountFolderMenuItem.Expand();
await ViewModel.NavigateFolderAsync(accountFolderMenuItem);
navigationView.SelectedItem = accountFolderMenuItem;
// At this point folder is navigated and items are loaded.
WeakReferenceMessenger.Default.Send(new MailItemNavigationRequested(message.NavigateMailItem.UniqueId, ScrollToItem: true));
}
} }
}); });
} }

View File

@@ -1,8 +1,8 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
using System.Windows.Input; using System.Windows.Input;
using CommunityToolkit.Mvvm.Messaging; using CommunityToolkit.Mvvm.Messaging;
using Microsoft.UI.Xaml.Controls;
using MoreLinq; using MoreLinq;
using Serilog; using Serilog;
using Windows.UI.Xaml; using Windows.UI.Xaml;
@@ -48,8 +48,15 @@ namespace Wino.Controls.Advanced
set { SetValue(LoadMoreCommandProperty, value); } set { SetValue(LoadMoreCommandProperty, value); }
} }
public bool IsThreadScrollingEnabled
{
get { return (bool)GetValue(IsThreadScrollingEnabledProperty); }
set { SetValue(IsThreadScrollingEnabledProperty, value); }
}
public static readonly DependencyProperty IsThreadScrollingEnabledProperty = DependencyProperty.Register(nameof(IsThreadScrollingEnabled), typeof(bool), typeof(WinoListView), new PropertyMetadata(false));
public static readonly DependencyProperty LoadMoreCommandProperty = DependencyProperty.Register(nameof(LoadMoreCommand), typeof(ICommand), typeof(WinoListView), new PropertyMetadata(null)); public static readonly DependencyProperty LoadMoreCommandProperty = DependencyProperty.Register(nameof(LoadMoreCommand), typeof(ICommand), typeof(WinoListView), new PropertyMetadata(null));
public static readonly DependencyProperty IsThreadListViewProperty = DependencyProperty.Register(nameof(IsThreadListView), typeof(bool), typeof(WinoListView), new PropertyMetadata(false)); public static readonly DependencyProperty IsThreadListViewProperty = DependencyProperty.Register(nameof(IsThreadListView), typeof(bool), typeof(WinoListView), new PropertyMetadata(false, new PropertyChangedCallback(OnIsThreadViewChanged)));
public static readonly DependencyProperty ItemDeletedCommandProperty = DependencyProperty.Register(nameof(ItemDeletedCommand), typeof(ICommand), typeof(WinoListView), new PropertyMetadata(null)); public static readonly DependencyProperty ItemDeletedCommandProperty = DependencyProperty.Register(nameof(ItemDeletedCommand), typeof(ICommand), typeof(WinoListView), new PropertyMetadata(null));
public WinoListView() public WinoListView()
@@ -65,7 +72,6 @@ namespace Wino.Controls.Advanced
DragItemsCompleted += ItemDragCompleted; DragItemsCompleted += ItemDragCompleted;
DragItemsStarting += ItemDragStarting; DragItemsStarting += ItemDragStarting;
SelectionChanged += SelectedItemsChanged; SelectionChanged += SelectedItemsChanged;
ItemClick += MailItemClicked;
ProcessKeyboardAccelerators += ProcessDelKey; ProcessKeyboardAccelerators += ProcessDelKey;
} }
@@ -85,6 +91,22 @@ namespace Wino.Controls.Advanced
internalScrollviewer.ViewChanged += InternalScrollVeiwerViewChanged; internalScrollviewer.ViewChanged += InternalScrollVeiwerViewChanged;
} }
private static void OnIsThreadViewChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
if (obj is WinoListView winoListView)
{
winoListView.AdjustThreadViewContainerVisuals();
}
}
private void AdjustThreadViewContainerVisuals()
{
if (IsThreadListView)
{
ItemContainerTransitions.Clear();
}
}
private double lastestRaisedOffset = 0; private double lastestRaisedOffset = 0;
private int lastItemSize = 0; private int lastItemSize = 0;
@@ -120,7 +142,7 @@ namespace Wino.Controls.Advanced
{ {
args.Handled = true; args.Handled = true;
ItemDeletedCommand?.Execute((int)MailOperation.SoftDelete); ItemDeletedCommand?.Execute(MailOperation.SoftDelete);
} }
} }
@@ -160,19 +182,6 @@ namespace Wino.Controls.Advanced
} }
} }
private void MailItemClicked(object sender, ItemClickEventArgs e)
{
if (e.ClickedItem is ThreadMailItemViewModel clickedThread)
{
clickedThread.IsThreadExpanded = !clickedThread.IsThreadExpanded;
if (!clickedThread.IsThreadExpanded)
{
SelectedItems.Clear();
}
}
}
public void ChangeSelectionMode(ListViewSelectionMode selectionMode) public void ChangeSelectionMode(ListViewSelectionMode selectionMode)
{ {
SelectionMode = selectionMode; SelectionMode = selectionMode;
@@ -294,6 +303,10 @@ namespace Wino.Controls.Advanced
removedMailItemViewModel.IsSelected = false; removedMailItemViewModel.IsSelected = false;
WeakReferenceMessenger.Default.Send(new MailItemSelectionRemovedEvent(removedMailItemViewModel)); WeakReferenceMessenger.Default.Send(new MailItemSelectionRemovedEvent(removedMailItemViewModel));
} }
else if (removedItem is ThreadMailItemViewModel removedThreadItemViewModel)
{
removedThreadItemViewModel.IsThreadExpanded = false;
}
} }
} }
@@ -311,10 +324,19 @@ namespace Wino.Controls.Advanced
} }
else if (addedItem is ThreadMailItemViewModel threadMailItemViewModel) else if (addedItem is ThreadMailItemViewModel threadMailItemViewModel)
{ {
threadMailItemViewModel.IsThreadExpanded = true; if (IsThreadScrollingEnabled)
{
if (internalScrollviewer != null && ContainerFromItem(threadMailItemViewModel) is FrameworkElement threadFrameworkElement)
{
internalScrollviewer.ScrollToElement(threadFrameworkElement, true, true, bringToTopOrLeft: true);
}
}
// Don't select thread containers. // Try to select first item.
SelectedItems.Remove(addedItem); if (GetThreadInternalListView(threadMailItemViewModel) is WinoListView internalListView)
{
internalListView.SelectFirstItem();
}
} }
} }
} }
@@ -336,16 +358,23 @@ namespace Wino.Controls.Advanced
}); });
} }
} }
else
{
if (SelectionMode == ListViewSelectionMode.Extended && SelectedItems.Count == 1)
{
// Tell main list view to unselect all his items.
if (SelectedItems[0] is MailItemViewModel selectedMailItemViewModel)
{
WeakReferenceMessenger.Default.Send(new ResetSingleMailItemSelectionEvent(selectedMailItemViewModel));
} }
public async void SelectFirstItem()
{
if (Items.Count > 0)
{
if (Items[0] is MailItemViewModel firstMailItemViewModel)
{
// Make sure the invisible container is realized.
await Task.Delay(250);
if (ContainerFromItem(firstMailItemViewModel) is ListViewItem firstItemContainer)
{
firstItemContainer.IsSelected = true;
}
firstMailItemViewModel.IsSelected = true;
} }
} }
} }
@@ -356,7 +385,7 @@ namespace Wino.Controls.Advanced
if (itemContainer is ListViewItem listItem) if (itemContainer is ListViewItem listItem)
{ {
var expander = listItem.GetChildByName<Expander>("ThreadExpander"); var expander = listItem.GetChildByName<WinoExpander>("ThreadExpander");
if (expander != null) if (expander != null)
return expander.Content as WinoListView; return expander.Content as WinoListView;
@@ -370,7 +399,6 @@ namespace Wino.Controls.Advanced
DragItemsCompleted -= ItemDragCompleted; DragItemsCompleted -= ItemDragCompleted;
DragItemsStarting -= ItemDragStarting; DragItemsStarting -= ItemDragStarting;
SelectionChanged -= SelectedItemsChanged; SelectionChanged -= SelectedItemsChanged;
ItemClick -= MailItemClicked;
ProcessKeyboardAccelerators -= ProcessDelKey; ProcessKeyboardAccelerators -= ProcessDelKey;
if (internalScrollviewer != null) if (internalScrollviewer != null)

View File

@@ -1,5 +1,9 @@
using System; using System;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using Fernandezja.ColorHashSharp; using Fernandezja.ColorHashSharp;
using Windows.UI; using Windows.UI;
using Windows.UI.Xaml; using Windows.UI.Xaml;
@@ -22,7 +26,16 @@ namespace Wino.Controls
public static readonly DependencyProperty FromNameProperty = DependencyProperty.Register(nameof(FromName), typeof(string), typeof(ImagePreviewControl), new PropertyMetadata(string.Empty, OnAddressInformationChanged)); public static readonly DependencyProperty FromNameProperty = DependencyProperty.Register(nameof(FromName), typeof(string), typeof(ImagePreviewControl), new PropertyMetadata(string.Empty, OnAddressInformationChanged));
public static readonly DependencyProperty FromAddressProperty = DependencyProperty.Register(nameof(FromAddress), typeof(string), typeof(ImagePreviewControl), new PropertyMetadata(string.Empty, OnAddressInformationChanged)); public static readonly DependencyProperty FromAddressProperty = DependencyProperty.Register(nameof(FromAddress), typeof(string), typeof(ImagePreviewControl), new PropertyMetadata(string.Empty, OnAddressInformationChanged));
public static readonly DependencyProperty IsKnownProperty = DependencyProperty.Register(nameof(IsKnown), typeof(bool), typeof(ImagePreviewControl), new PropertyMetadata(false)); public static readonly DependencyProperty SenderContactPictureProperty = DependencyProperty.Register(nameof(SenderContactPicture), typeof(string), typeof(ImagePreviewControl), new PropertyMetadata(string.Empty, new PropertyChangedCallback(OnAddressInformationChanged)));
/// <summary>
/// Gets or sets base64 string of the sender contact picture.
/// </summary>
public string SenderContactPicture
{
get { return (string)GetValue(SenderContactPictureProperty); }
set { SetValue(SenderContactPictureProperty, value); }
}
public string FromName public string FromName
{ {
@@ -36,20 +49,13 @@ namespace Wino.Controls
set { SetValue(FromAddressProperty, value); } set { SetValue(FromAddressProperty, value); }
} }
public bool IsKnown
{
get { return (bool)GetValue(IsKnownProperty); }
set { SetValue(IsKnownProperty, value); }
}
#endregion #endregion
private Ellipse Ellipse; private Ellipse Ellipse;
private Grid InitialsGrid; private Grid InitialsGrid;
private TextBlock InitialsTextblock; private TextBlock InitialsTextblock;
private Image KnownHostImage; private Image KnownHostImage;
private CancellationTokenSource contactPictureLoadingCancellationTokenSource;
public ImagePreviewControl() public ImagePreviewControl()
{ {
@@ -74,22 +80,30 @@ namespace Wino.Controls
control.UpdateInformation(); control.UpdateInformation();
} }
private void UpdateInformation() private async void UpdateInformation()
{ {
if (KnownHostImage == null || InitialsGrid == null || InitialsTextblock == null || (string.IsNullOrEmpty(FromName) && string.IsNullOrEmpty(FromAddress))) if (KnownHostImage == null || InitialsGrid == null || InitialsTextblock == null || (string.IsNullOrEmpty(FromName) && string.IsNullOrEmpty(FromAddress)))
return; return;
// Cancel active image loading if exists.
if (!contactPictureLoadingCancellationTokenSource?.IsCancellationRequested ?? false)
{
contactPictureLoadingCancellationTokenSource.Cancel();
}
var host = ThumbnailService.GetHost(FromAddress); var host = ThumbnailService.GetHost(FromAddress);
bool isKnownHost = false;
if (!string.IsNullOrEmpty(host)) if (!string.IsNullOrEmpty(host))
{ {
var tuple = ThumbnailService.CheckIsKnown(host); var tuple = ThumbnailService.CheckIsKnown(host);
IsKnown = tuple.Item1; isKnownHost = tuple.Item1;
host = tuple.Item2; host = tuple.Item2;
} }
if (IsKnown) if (isKnownHost)
{ {
// Unrealize others. // Unrealize others.
@@ -104,14 +118,53 @@ namespace Wino.Controls
KnownHostImage.Visibility = Visibility.Collapsed; KnownHostImage.Visibility = Visibility.Collapsed;
InitialsGrid.Visibility = Visibility.Visible; InitialsGrid.Visibility = Visibility.Visible;
if (!string.IsNullOrEmpty(SenderContactPicture))
{
contactPictureLoadingCancellationTokenSource = new CancellationTokenSource();
try
{
var brush = await GetContactImageBrushAsync();
if (!contactPictureLoadingCancellationTokenSource?.Token.IsCancellationRequested ?? false)
{
Ellipse.Fill = brush;
InitialsTextblock.Text = string.Empty;
}
}
catch (Exception)
{
// Log exception.
Debugger.Break();
}
}
else
{
var colorHash = new ColorHash(); var colorHash = new ColorHash();
var rgb = colorHash.Rgb(FromAddress); var rgb = colorHash.Rgb(FromAddress);
Ellipse.Fill = new SolidColorBrush(Color.FromArgb(rgb.A, rgb.R, rgb.G, rgb.B)); Ellipse.Fill = new SolidColorBrush(Color.FromArgb(rgb.A, rgb.R, rgb.G, rgb.B));
InitialsTextblock.Text = ExtractInitialsFromName(FromName); InitialsTextblock.Text = ExtractInitialsFromName(FromName);
} }
} }
}
private async Task<ImageBrush> GetContactImageBrushAsync()
{
// Load the image from base64 string.
var bitmapImage = new BitmapImage();
var imageArray = Convert.FromBase64String(SenderContactPicture);
var imageStream = new MemoryStream(imageArray);
var randomAccessImageStream = imageStream.AsRandomAccessStream();
randomAccessImageStream.Seek(0);
await bitmapImage.SetSourceAsync(randomAccessImageStream);
return new ImageBrush() { ImageSource = bitmapImage };
}
public string ExtractInitialsFromName(string name) public string ExtractInitialsFromName(string name)
{ {

View File

@@ -2,10 +2,21 @@
x:Class="Wino.Controls.MailItemDisplayInformationControl" x:Class="Wino.Controls.MailItemDisplayInformationControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:animatedvisuals="using:Microsoft.UI.Xaml.Controls.AnimatedVisuals"
xmlns:controls="using:Wino.Controls" xmlns:controls="using:Wino.Controls"
xmlns:enums="using:Wino.Core.Domain.Enums"
xmlns:domain="using:Wino.Core.Domain" xmlns:domain="using:Wino.Core.Domain"
xmlns:enums="using:Wino.Core.Domain.Enums"
xmlns:helpers="using:Wino.Helpers" xmlns:helpers="using:Wino.Helpers"
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
FocusVisualMargin="8"
FocusVisualPrimaryBrush="{StaticResource SystemControlRevealFocusVisualBrush}"
FocusVisualPrimaryThickness="2"
FocusVisualSecondaryBrush="{StaticResource SystemControlFocusVisualSecondaryBrush}"
FocusVisualSecondaryThickness="1"
PointerEntered="ControlPointerEntered" PointerEntered="ControlPointerEntered"
PointerExited="ControlPointerExited"> PointerExited="ControlPointerExited">
@@ -20,26 +31,24 @@
</Style> </Style>
</UserControl.Resources> </UserControl.Resources>
<Grid Background="Transparent" Tapped="ThreadHeaderTapped"> <Grid>
<Grid.RowDefinitions>
<RowDefinition x:Name="ContainerHeight" Height="Auto" />
</Grid.RowDefinitions>
<Grid <Grid
x:Name="RootContainer" x:Name="RootContainer"
Padding="0,1" Padding="0,1"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
x:DefaultBindMode="OneWay"> x:DefaultBindMode="OneWay">
<!-- Custom Interaction Focus Indicator --> <!-- Custom Interaction Focus Indicator -->
<Ellipse <Ellipse
Width="8" Width="8"
Height="8" Height="8"
Canvas.ZIndex="9999"
Margin="0,12,8,0" Margin="0,12,8,0"
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalAlignment="Top" VerticalAlignment="Top"
Visibility="{x:Bind IsCustomFocused, Mode=OneWay}" Canvas.ZIndex="9999"
Fill="{ThemeResource SystemAccentColor}" /> Fill="{ThemeResource SystemAccentColor}"
Visibility="{x:Bind IsCustomFocused, Mode=OneWay}" />
<Border <Border
x:Name="RootContainerVisualWrapper" x:Name="RootContainerVisualWrapper"
@@ -61,8 +70,9 @@
HorizontalAlignment="Center" HorizontalAlignment="Center"
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="14" FontSize="14"
FromAddress="{x:Bind FromAddress, Mode=OneWay}" FromAddress="{x:Bind MailItem.FromAddress, Mode=OneWay}"
FromName="{x:Bind DisplayName, Mode=OneWay}" FromName="{x:Bind MailItem.FromName, Mode=OneWay}"
SenderContactPicture="{x:Bind MailItem.SenderContact.Base64ContactPicture}"
Visibility="{x:Bind IsAvatarVisible, Mode=OneWay}" /> Visibility="{x:Bind IsAvatarVisible, Mode=OneWay}" />
<Grid <Grid
@@ -90,7 +100,7 @@
<TextBlock <TextBlock
x:Name="DraftTitle" x:Name="DraftTitle"
Margin="0,0,4,0" Margin="0,0,4,0"
x:Load="{x:Bind IsDraft, Mode=OneWay}" x:Load="{x:Bind MailItem.IsDraft, Mode=OneWay}"
Foreground="{StaticResource DeleteBrush}"> Foreground="{StaticResource DeleteBrush}">
<Run Text="[" /><Run Text="{x:Bind domain:Translator.Draft}" /><Run Text="]" /> <Run Text=" " /> <Run Text="[" /><Run Text="{x:Bind domain:Translator.Draft}" /><Run Text="]" /> <Run Text=" " />
@@ -100,7 +110,7 @@
<TextBlock <TextBlock
x:Name="SenderText" x:Name="SenderText"
Grid.Column="1" Grid.Column="1"
Text="{x:Bind DisplayName}" Text="{x:Bind MailItem.FromName}"
TextTrimming="WordEllipsis" /> TextTrimming="WordEllipsis" />
<!-- Hover button --> <!-- Hover button -->
@@ -139,25 +149,52 @@
</Grid> </Grid>
<!-- Subject + IsDraft --> <!-- Subject + IsDraft -->
<Grid Grid.Row="1" ColumnSpacing="4"> <Grid Grid.Row="1">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" /> <ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" /> <ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions> </Grid.ColumnDefinitions>
<local:AnimatedIcon
xmlns:local="using:Microsoft.UI.Xaml.Controls"
x:Name="ExpandCollapseChevron"
Width="14"
Height="14"
Margin="-4,0,2,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
local:AnimatedIcon.State="NormalOff"
AutomationProperties.AccessibilityView="Raw"
Foreground="{ThemeResource ApplicationForegroundThemeBrush}"
RenderTransformOrigin="0.5, 0.5"
Visibility="{x:Bind IsThreadExpanderVisible, Mode=OneWay}">
<animatedvisuals:AnimatedChevronRightDownSmallVisualSource />
<local:AnimatedIcon.FallbackIconSource>
<local:FontIconSource
FontFamily="{StaticResource SymbolThemeFontFamily}"
FontSize="12"
Glyph="&#xE76C;"
IsTextScaleFactorEnabled="False" />
</local:AnimatedIcon.FallbackIconSource>
<local:AnimatedIcon.RenderTransform />
</local:AnimatedIcon>
<TextBlock <TextBlock
x:Name="TitleText" x:Name="TitleText"
Grid.Column="1"
MaxLines="1" MaxLines="1"
Text="{x:Bind Subject}" Text="{x:Bind MailItem.Subject}"
TextTrimming="CharacterEllipsis" /> TextTrimming="CharacterEllipsis" />
<TextBlock <TextBlock
Grid.Column="1" Grid.Column="2"
Margin="4,0,0,0"
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalAlignment="Center" VerticalAlignment="Center"
FontSize="11" FontSize="11"
Opacity="0.7" Opacity="0.7"
Text="{x:Bind helpers:XamlHelpers.GetMailItemDisplaySummaryForListing(IsDraft, ReceivedDate, Prefer24HourTimeFormat)}" /> Text="{x:Bind helpers:XamlHelpers.GetMailItemDisplaySummaryForListing(MailItem.IsDraft, MailItem.CreationDate, Prefer24HourTimeFormat)}" />
</Grid> </Grid>
<!-- Message --> <!-- Message -->
@@ -173,10 +210,10 @@
<Grid x:Name="PreviewTextContainer"> <Grid x:Name="PreviewTextContainer">
<TextBlock <TextBlock
x:Name="PreviewTextblock" x:Name="PreviewTextblock"
x:Load="{x:Bind helpers:XamlHelpers.ShouldDisplayPreview(Snippet), Mode=OneWay}" x:Load="{x:Bind helpers:XamlHelpers.ShouldDisplayPreview(MailItem.PreviewText), Mode=OneWay}"
MaxLines="1" MaxLines="1"
Opacity="0.7" Opacity="0.7"
Text="{x:Bind Snippet}" Text="{x:Bind MailItem.PreviewText}"
TextTrimming="CharacterEllipsis" /> TextTrimming="CharacterEllipsis" />
</Grid> </Grid>
@@ -190,12 +227,12 @@
<ContentPresenter <ContentPresenter
x:Name="HasAttachmentContent" x:Name="HasAttachmentContent"
x:Load="{x:Bind HasAttachments, Mode=OneWay}" x:Load="{x:Bind MailItem.HasAttachments, Mode=OneWay}"
ContentTemplate="{StaticResource AttachmentSymbolControlTemplate}" /> ContentTemplate="{StaticResource AttachmentSymbolControlTemplate}" />
<ContentPresenter <ContentPresenter
x:Name="IsFlaggedContent" x:Name="IsFlaggedContent"
x:Load="{x:Bind IsFlagged, Mode=OneWay}" x:Load="{x:Bind MailItem.IsFlagged, Mode=OneWay}"
ContentTemplate="{StaticResource FlaggedSymbolControlTemplate}" /> ContentTemplate="{StaticResource FlaggedSymbolControlTemplate}" />
</StackPanel> </StackPanel>
</Grid> </Grid>
@@ -209,7 +246,7 @@
<VisualStateGroup x:Name="ReadStates"> <VisualStateGroup x:Name="ReadStates">
<VisualState x:Name="Unread"> <VisualState x:Name="Unread">
<VisualState.StateTriggers> <VisualState.StateTriggers>
<StateTrigger IsActive="{x:Bind IsRead, Converter={StaticResource ReverseBooleanConverter}, Mode=OneWay}" /> <StateTrigger IsActive="{x:Bind MailItem.IsRead, Converter={StaticResource ReverseBooleanConverter}, Mode=OneWay}" />
</VisualState.StateTriggers> </VisualState.StateTriggers>
<VisualState.Setters> <VisualState.Setters>
@@ -225,7 +262,7 @@
<VisualStateGroup x:Name="SizingStates"> <VisualStateGroup x:Name="SizingStates">
<VisualState x:Name="Compact"> <VisualState x:Name="Compact">
<VisualState.Setters> <VisualState.Setters>
<Setter Target="ContainerHeight.Height" Value="50" /> <Setter Target="RootContainer.Height" Value="60" />
<Setter Target="ContentGrid.Padding" Value="8,0" /> <Setter Target="ContentGrid.Padding" Value="8,0" />
<Setter Target="PreviewTextContainer.Visibility" Value="Collapsed" /> <Setter Target="PreviewTextContainer.Visibility" Value="Collapsed" />
</VisualState.Setters> </VisualState.Setters>
@@ -237,7 +274,7 @@
<!-- Medium --> <!-- Medium -->
<VisualState x:Name="Medium"> <VisualState x:Name="Medium">
<VisualState.Setters> <VisualState.Setters>
<Setter Target="ContainerHeight.Height" Value="65" /> <Setter Target="RootContainer.Height" Value="80" />
<Setter Target="ContentGrid.Padding" Value="6,0" /> <Setter Target="ContentGrid.Padding" Value="6,0" />
<Setter Target="PreviewTextContainer.Visibility" Value="Visible" /> <Setter Target="PreviewTextContainer.Visibility" Value="Visible" />
</VisualState.Setters> </VisualState.Setters>
@@ -249,7 +286,7 @@
<!-- Spacious --> <!-- Spacious -->
<VisualState x:Name="Spacious"> <VisualState x:Name="Spacious">
<VisualState.Setters> <VisualState.Setters>
<Setter Target="ContainerHeight.Height" Value="Auto" /> <Setter Target="RootContainer.Height" Value="Auto" />
<Setter Target="ContentGrid.Padding" Value="12,12,6,12" /> <Setter Target="ContentGrid.Padding" Value="12,12,6,12" />
<Setter Target="PreviewTextContainer.Visibility" Value="Visible" /> <Setter Target="PreviewTextContainer.Visibility" Value="Visible" />
</VisualState.Setters> </VisualState.Setters>
@@ -271,6 +308,19 @@
</VisualState.StateTriggers> </VisualState.StateTriggers>
</VisualState> </VisualState>
</VisualStateGroup> </VisualStateGroup>
<!-- Thread Expanding States -->
<VisualStateGroup x:Name="ExpanderStates">
<VisualState x:Name="NotExpanded" />
<VisualState x:Name="ExpandedState">
<VisualState.Setters>
<Setter Target="ExpandCollapseChevron.(controls:AnimatedIcon.State)" Value="NormalOn" />
</VisualState.Setters>
<VisualState.StateTriggers>
<StateTrigger IsActive="{x:Bind IsThreadExpanded, Mode=OneWay}" />
</VisualState.StateTriggers>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups> </VisualStateManager.VisualStateGroups>
</Grid> </Grid>
</UserControl> </UserControl>

View File

@@ -1,11 +1,9 @@
using System; using System.Linq;
using System.ComponentModel;
using System.Numerics; using System.Numerics;
using System.Windows.Input; using System.Windows.Input;
using Microsoft.UI.Xaml.Controls;
using Windows.UI.Xaml; using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Input; using Wino.Core.Domain.Entities;
using Wino.Core.Domain.Enums; using Wino.Core.Domain.Enums;
using Wino.Core.Domain.Models.MailItem; using Wino.Core.Domain.Models.MailItem;
using Wino.Extensions; using Wino.Extensions;
@@ -13,25 +11,18 @@ using Wino.Mail.ViewModels.Data;
namespace Wino.Controls namespace Wino.Controls
{ {
public sealed partial class MailItemDisplayInformationControl : UserControl, INotifyPropertyChanged public sealed partial class MailItemDisplayInformationControl : UserControl
{ {
public ImagePreviewControl GetImagePreviewControl() => ContactImage; public ImagePreviewControl GetImagePreviewControl() => ContactImage;
public bool IsRunningHoverAction { get; set; }
public static readonly DependencyProperty DisplayModeProperty = DependencyProperty.Register(nameof(DisplayMode), typeof(MailListDisplayMode), typeof(MailItemDisplayInformationControl), new PropertyMetadata(MailListDisplayMode.Spacious)); public static readonly DependencyProperty DisplayModeProperty = DependencyProperty.Register(nameof(DisplayMode), typeof(MailListDisplayMode), typeof(MailItemDisplayInformationControl), new PropertyMetadata(MailListDisplayMode.Spacious));
public static readonly DependencyProperty ShowPreviewTextProperty = DependencyProperty.Register(nameof(ShowPreviewText), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(true)); public static readonly DependencyProperty ShowPreviewTextProperty = DependencyProperty.Register(nameof(ShowPreviewText), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(true));
public static readonly DependencyProperty SnippetProperty = DependencyProperty.Register(nameof(Snippet), typeof(string), typeof(MailItemDisplayInformationControl), new PropertyMetadata(string.Empty));
public static readonly DependencyProperty FromNameProperty = DependencyProperty.Register(nameof(FromName), typeof(string), typeof(MailItemDisplayInformationControl), new PropertyMetadata(string.Empty));
public static readonly DependencyProperty SubjectProperty = DependencyProperty.Register(nameof(Subject), typeof(string), typeof(MailItemDisplayInformationControl), new PropertyMetadata("(no-subject)"));
public static readonly DependencyProperty IsReadProperty = DependencyProperty.Register(nameof(IsRead), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(false));
public static readonly DependencyProperty IsFlaggedProperty = DependencyProperty.Register(nameof(IsFlagged), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(false));
public static readonly DependencyProperty FromAddressProperty = DependencyProperty.Register(nameof(FromAddress), typeof(string), typeof(MailItemDisplayInformationControl), new PropertyMetadata(string.Empty));
public static readonly DependencyProperty HasAttachmentsProperty = DependencyProperty.Register(nameof(HasAttachments), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(false));
public static readonly DependencyProperty IsCustomFocusedProperty = DependencyProperty.Register(nameof(IsCustomFocused), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(false)); public static readonly DependencyProperty IsCustomFocusedProperty = DependencyProperty.Register(nameof(IsCustomFocused), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(false));
public static readonly DependencyProperty ReceivedDateProperty = DependencyProperty.Register(nameof(ReceivedDate), typeof(DateTime), typeof(MailItemDisplayInformationControl), new PropertyMetadata(default(DateTime)));
public static readonly DependencyProperty IsDraftProperty = DependencyProperty.Register(nameof(IsDraft), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(false));
public static readonly DependencyProperty IsAvatarVisibleProperty = DependencyProperty.Register(nameof(IsAvatarVisible), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(true)); public static readonly DependencyProperty IsAvatarVisibleProperty = DependencyProperty.Register(nameof(IsAvatarVisible), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(true));
public static readonly DependencyProperty IsSubjectVisibleProperty = DependencyProperty.Register(nameof(IsSubjectVisible), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(true)); public static readonly DependencyProperty IsSubjectVisibleProperty = DependencyProperty.Register(nameof(IsSubjectVisible), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(true));
public static readonly DependencyProperty ConnectedExpanderProperty = DependencyProperty.Register(nameof(ConnectedExpander), typeof(Expander), typeof(MailItemDisplayInformationControl), new PropertyMetadata(null)); public static readonly DependencyProperty ConnectedExpanderProperty = DependencyProperty.Register(nameof(ConnectedExpander), typeof(WinoExpander), typeof(MailItemDisplayInformationControl), new PropertyMetadata(null));
public static readonly DependencyProperty LeftHoverActionProperty = DependencyProperty.Register(nameof(LeftHoverAction), typeof(MailOperation), typeof(MailItemDisplayInformationControl), new PropertyMetadata(MailOperation.None)); public static readonly DependencyProperty LeftHoverActionProperty = DependencyProperty.Register(nameof(LeftHoverAction), typeof(MailOperation), typeof(MailItemDisplayInformationControl), new PropertyMetadata(MailOperation.None));
public static readonly DependencyProperty CenterHoverActionProperty = DependencyProperty.Register(nameof(CenterHoverAction), typeof(MailOperation), typeof(MailItemDisplayInformationControl), new PropertyMetadata(MailOperation.None)); public static readonly DependencyProperty CenterHoverActionProperty = DependencyProperty.Register(nameof(CenterHoverAction), typeof(MailOperation), typeof(MailItemDisplayInformationControl), new PropertyMetadata(MailOperation.None));
public static readonly DependencyProperty RightHoverActionProperty = DependencyProperty.Register(nameof(RightHoverAction), typeof(MailOperation), typeof(MailItemDisplayInformationControl), new PropertyMetadata(MailOperation.None)); public static readonly DependencyProperty RightHoverActionProperty = DependencyProperty.Register(nameof(RightHoverAction), typeof(MailOperation), typeof(MailItemDisplayInformationControl), new PropertyMetadata(MailOperation.None));
@@ -39,6 +30,20 @@ namespace Wino.Controls
public static readonly DependencyProperty MailItemProperty = DependencyProperty.Register(nameof(MailItem), typeof(IMailItem), typeof(MailItemDisplayInformationControl), new PropertyMetadata(null)); public static readonly DependencyProperty MailItemProperty = DependencyProperty.Register(nameof(MailItem), typeof(IMailItem), typeof(MailItemDisplayInformationControl), new PropertyMetadata(null));
public static readonly DependencyProperty IsHoverActionsEnabledProperty = DependencyProperty.Register(nameof(IsHoverActionsEnabled), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(true)); public static readonly DependencyProperty IsHoverActionsEnabledProperty = DependencyProperty.Register(nameof(IsHoverActionsEnabled), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(true));
public static readonly DependencyProperty Prefer24HourTimeFormatProperty = DependencyProperty.Register(nameof(Prefer24HourTimeFormat), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(false)); public static readonly DependencyProperty Prefer24HourTimeFormatProperty = DependencyProperty.Register(nameof(Prefer24HourTimeFormat), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(false));
public static readonly DependencyProperty IsThreadExpanderVisibleProperty = DependencyProperty.Register(nameof(IsThreadExpanderVisible), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(false));
public static readonly DependencyProperty IsThreadExpandedProperty = DependencyProperty.Register(nameof(IsThreadExpanded), typeof(bool), typeof(MailItemDisplayInformationControl), new PropertyMetadata(false));
public bool IsThreadExpanded
{
get { return (bool)GetValue(IsThreadExpandedProperty); }
set { SetValue(IsThreadExpandedProperty, value); }
}
public bool IsThreadExpanderVisible
{
get { return (bool)GetValue(IsThreadExpanderVisibleProperty); }
set { SetValue(IsThreadExpanderVisibleProperty, value); }
}
public bool Prefer24HourTimeFormat public bool Prefer24HourTimeFormat
{ {
@@ -82,12 +87,9 @@ namespace Wino.Controls
set { SetValue(RightHoverActionProperty, value); } set { SetValue(RightHoverActionProperty, value); }
} }
public WinoExpander ConnectedExpander
public event PropertyChangedEventHandler PropertyChanged;
public Expander ConnectedExpander
{ {
get { return (Expander)GetValue(ConnectedExpanderProperty); } get { return (WinoExpander)GetValue(ConnectedExpanderProperty); }
set { SetValue(ConnectedExpanderProperty, value); } set { SetValue(ConnectedExpanderProperty, value); }
} }
@@ -103,85 +105,12 @@ namespace Wino.Controls
set { SetValue(IsAvatarVisibleProperty, value); } set { SetValue(IsAvatarVisibleProperty, value); }
} }
public bool IsDraft
{
get { return (bool)GetValue(IsDraftProperty); }
set { SetValue(IsDraftProperty, value); }
}
public DateTime ReceivedDate
{
get { return (DateTime)GetValue(ReceivedDateProperty); }
set { SetValue(ReceivedDateProperty, value); }
}
public bool IsCustomFocused public bool IsCustomFocused
{ {
get { return (bool)GetValue(IsCustomFocusedProperty); } get { return (bool)GetValue(IsCustomFocusedProperty); }
set { SetValue(IsCustomFocusedProperty, value); } set { SetValue(IsCustomFocusedProperty, value); }
} }
public bool HasAttachments
{
get { return (bool)GetValue(HasAttachmentsProperty); }
set { SetValue(HasAttachmentsProperty, value); }
}
public bool IsRead
{
get { return (bool)GetValue(IsReadProperty); }
set { SetValue(IsReadProperty, value); }
}
public bool IsFlagged
{
get { return (bool)GetValue(IsFlaggedProperty); }
set { SetValue(IsFlaggedProperty, value); }
}
public string FromAddress
{
get { return (string)GetValue(FromAddressProperty); }
set
{
SetValue(FromAddressProperty, value);
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DisplayName)));
}
}
public string DisplayName
{
get
{
if (string.IsNullOrEmpty(FromName))
return FromAddress;
return FromName;
}
}
public string FromName
{
get => (string)GetValue(FromNameProperty);
set
{
SetValue(FromNameProperty, value);
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(DisplayName)));
}
}
public string Subject
{
get { return (string)GetValue(SubjectProperty); }
set { SetValue(SubjectProperty, value); }
}
public string Snippet
{
get { return (string)GetValue(SnippetProperty); }
set { SetValue(SnippetProperty, value); }
}
public bool ShowPreviewText public bool ShowPreviewText
{ {
get { return (bool)GetValue(ShowPreviewTextProperty); } get { return (bool)GetValue(ShowPreviewTextProperty); }
@@ -194,8 +123,6 @@ namespace Wino.Controls
set { SetValue(DisplayModeProperty, value); } set { SetValue(DisplayModeProperty, value); }
} }
private bool tappedHandlingFlag = false;
public MailItemDisplayInformationControl() public MailItemDisplayInformationControl()
{ {
this.InitializeComponent(); this.InitializeComponent();
@@ -232,38 +159,22 @@ namespace Wino.Controls
private void ExecuteHoverAction(MailOperation operation) private void ExecuteHoverAction(MailOperation operation)
{ {
IsRunningHoverAction = true;
MailOperationPreperationRequest package = null; MailOperationPreperationRequest package = null;
if (MailItem is MailItemViewModel mailItemViewModel) if (MailItem is MailCopy mailCopy)
package = new MailOperationPreperationRequest(operation, mailItemViewModel.MailCopy, toggleExecution: true); package = new MailOperationPreperationRequest(operation, mailCopy, toggleExecution: true);
else if (MailItem is ThreadMailItemViewModel threadMailItemViewModel) else if (MailItem is ThreadMailItemViewModel threadMailItemViewModel)
package = new MailOperationPreperationRequest(operation, threadMailItemViewModel.GetMailCopies(), toggleExecution: true); package = new MailOperationPreperationRequest(operation, threadMailItemViewModel.GetMailCopies(), toggleExecution: true);
else if (MailItem is ThreadMailItem threadMailItem)
package = new MailOperationPreperationRequest(operation, threadMailItem.ThreadItems.Cast<MailItemViewModel>().Select(a => a.MailCopy), toggleExecution: true);
if (package == null) return; if (package == null) return;
tappedHandlingFlag = true;
HoverActionExecutedCommand?.Execute(package); HoverActionExecutedCommand?.Execute(package);
} }
private void ThreadHeaderTapped(object sender, TappedRoutedEventArgs e)
{
// Due to CanDrag=True, outer expander doesn't get the click event and it doesn't expand. We expand here manually.
// Also hover action button clicks will be delegated here after the execution runs.
// We should not expand the thread if the reason we are here is for hover actions.
if (tappedHandlingFlag)
{
tappedHandlingFlag = false;
e.Handled = true;
return;
}
if (ConnectedExpander == null) return;
ConnectedExpander.IsExpanded = !ConnectedExpander.IsExpanded;
}
private void FirstActionClicked(object sender, RoutedEventArgs e) private void FirstActionClicked(object sender, RoutedEventArgs e)
{ {
ExecuteHoverAction(LeftHoverAction); ExecuteHoverAction(LeftHoverAction);

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