From 6c00418f75d856683f55fa44dea1e34422aae786 Mon Sep 17 00:00:00 2001 From: Yair Aichenbaum <39923744+yaichenbaum@users.noreply.github.com> Date: Tue, 14 Apr 2020 15:36:39 -0400 Subject: [PATCH] v0.7.6 (#600) --- .devbots/needs-review.yml | 3 + Files.Launcher/Files.Launcher.csproj | 2 +- Files.Launcher/Program.cs | 14 +- Files.Launcher/app.config | 2 +- Files.Package/Package.appxmanifest | 107 ++-- Files/App.xaml.cs | 14 +- Files/BaseLayout.cs | 103 +++- Files/Dialogs/AddItemDialog.xaml.cs | 12 +- Files/Dialogs/ConsentDialog.xaml | 4 +- Files/Dialogs/RenameDialog.xaml | 4 +- Files/Files.csproj | 8 +- Files/Filesystem/Drives.cs | 5 +- Files/Helpers/NaturalStringComparer.cs | 54 ++ Files/Interacts/Interaction.cs | 256 ++++---- Files/LocationsList.cs | 14 +- Files/MultilingualResources/Files.de-DE.xlf | 174 +++++- Files/MultilingualResources/Files.es-ES.xlf | 290 ++++++--- Files/MultilingualResources/Files.fr-FR.xlf | 170 ++++- Files/MultilingualResources/Files.nl-NL.xlf | 170 ++++- Files/MultilingualResources/Files.pl-PL.xlf | 168 ++++- Files/MultilingualResources/Files.ru-RU.xlf | 403 +++++++----- Files/MultilingualResources/Files.tr-TR.xlf | 582 +++++++++++++++++ Files/MultilingualResources/Files.uk-UA.xlf | 583 ++++++++++++++++++ Files/MultilingualResources/Files.zh-Hans.xlf | 228 +++++-- Files/Navigation/NavigationActions.cs | 4 +- Files/Properties.xaml | 122 ++-- Files/Properties.xaml.cs | 14 + Files/ResourceController.cs | 14 + Files/Strings/de-DE/Resources.resw | 119 +++- Files/Strings/en-US/Resources.resw | 119 +++- Files/Strings/es-ES/Resources.resw | 304 ++++++++- Files/Strings/fr-FR/Resources.resw | 3 - Files/Strings/nl-NL/Resources.resw | 3 - Files/Strings/pl-PL/Resources.resw | 3 - Files/Strings/ru-RU/Resources.resw | 531 ++++++++-------- Files/Strings/tr-TR/Resources.resw | 327 ++++++++++ Files/Strings/uk-UA/Resources.resw | 408 ++++++++++++ Files/Strings/zh-Hans/Resources.resw | 204 +++++- .../LayoutModes/GenericFileBrowser.xaml | 33 +- .../LayoutModes/GenericFileBrowser.xaml.cs | 79 ++- .../UserControls/LayoutModes/PhotoAlbum.xaml | 6 + .../LayoutModes/PhotoAlbum.xaml.cs | 52 +- Files/UserControls/ModernSidebar.xaml.cs | 17 +- .../ModernNavigationToolbar.xaml | 14 + .../ModernNavigationToolbar.xaml.cs | 27 +- Files/UserControls/StatusBarControl.xaml | 4 + Files/UserControls/StatusBarControl.xaml.cs | 1 + Files/UserControls/YourHome.xaml.cs | 18 +- Files/View Models/ItemViewModel.cs | 69 ++- Files/View Models/SettingsViewModel.cs | 51 +- Files/Views/InstanceTabsView.xaml.cs | 81 +-- Files/Views/Pages/ModernShellPage.xaml.cs | 29 +- Files/Views/Pages/Settings.xaml | 42 +- Files/Views/Pages/Settings.xaml.cs | 37 +- Files/Views/SettingsPages/About.xaml | 14 +- Files/Views/SettingsPages/Appearance.xaml | 5 +- Files/Views/SettingsPages/Appearance.xaml.cs | 42 +- .../Views/SettingsPages/FilesAndFolders.xaml | 1 + Files/Views/SettingsPages/Flags.xaml | 1 + Files/Views/SettingsPages/OnStartup.xaml | 1 + Files/Views/SettingsPages/Preferences.xaml | 5 +- .../Views/SettingsPages/StartPageWidgets.xaml | 79 ++- azure-pipelines-build-test.yml | 12 + 63 files changed, 5179 insertions(+), 1086 deletions(-) create mode 100644 .devbots/needs-review.yml create mode 100644 Files/Helpers/NaturalStringComparer.cs create mode 100644 Files/MultilingualResources/Files.tr-TR.xlf create mode 100644 Files/MultilingualResources/Files.uk-UA.xlf create mode 100644 Files/ResourceController.cs create mode 100644 Files/Strings/tr-TR/Resources.resw create mode 100644 Files/Strings/uk-UA/Resources.resw diff --git a/.devbots/needs-review.yml b/.devbots/needs-review.yml new file mode 100644 index 000000000000..7f54cccdce75 --- /dev/null +++ b/.devbots/needs-review.yml @@ -0,0 +1,3 @@ +enabled: true +label: "needs-review" +delay: 30 diff --git a/Files.Launcher/Files.Launcher.csproj b/Files.Launcher/Files.Launcher.csproj index 553144604d7c..2e5b36bb0fc1 100644 --- a/Files.Launcher/Files.Launcher.csproj +++ b/Files.Launcher/Files.Launcher.csproj @@ -8,7 +8,7 @@ WinExe ProcessLauncher ProcessLauncher - v4.6.1 + v4.7.2 512 true true diff --git a/Files.Launcher/Program.cs b/Files.Launcher/Program.cs index 8ae7e1b36fbe..f84b2822730e 100644 --- a/Files.Launcher/Program.cs +++ b/Files.Launcher/Program.cs @@ -18,13 +18,13 @@ static void Main(string[] args) if (arguments.Equals("StartupTasks")) { // Detect User Paths - ApplicationData.Current.LocalSettings.Values["DetectedDesktopLocation"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Desktop", null); - ApplicationData.Current.LocalSettings.Values["DetectedDownloadsLocation"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "{374DE290-123F-4565-9164-39C4925E467B}", null); - ApplicationData.Current.LocalSettings.Values["DetectedDocumentsLocation"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Personal", null); - ApplicationData.Current.LocalSettings.Values["DetectedPicturesLocation"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "My Pictures", null); - ApplicationData.Current.LocalSettings.Values["DetectedMusicLocation"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "My Music", null); - ApplicationData.Current.LocalSettings.Values["DetectedVideosLocation"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "My Video", null); - ApplicationData.Current.LocalSettings.Values["DetectedOneDriveLocation"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\OneDrive", "UserFolder", null); + ApplicationData.Current.LocalSettings.Values["DesktopPath"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Desktop", null); + ApplicationData.Current.LocalSettings.Values["DownloadsPath"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "{374DE290-123F-4565-9164-39C4925E467B}", null); + ApplicationData.Current.LocalSettings.Values["DocumentsPath"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "Personal", null); + ApplicationData.Current.LocalSettings.Values["PicturesPath"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "My Pictures", null); + ApplicationData.Current.LocalSettings.Values["MusicPath"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "My Music", null); + ApplicationData.Current.LocalSettings.Values["VideosPath"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders", "My Video", null); + ApplicationData.Current.LocalSettings.Values["OneDrivePath"] = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\OneDrive", "UserFolder", null); // Check QuickLook Availability QuickLook.CheckQuickLookAvailability(localSettings); diff --git a/Files.Launcher/app.config b/Files.Launcher/app.config index 3dbff35f484e..312bb3f26fc8 100644 --- a/Files.Launcher/app.config +++ b/Files.Launcher/app.config @@ -1,3 +1,3 @@ - + diff --git a/Files.Package/Package.appxmanifest b/Files.Package/Package.appxmanifest index 2ae2f7ab03f5..a89c4924a919 100644 --- a/Files.Package/Package.appxmanifest +++ b/Files.Package/Package.appxmanifest @@ -1,56 +1,57 @@  - - - Files UWP - Preview - Yair A - Assets\StoreLogo.png - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + Files UWP - Preview + Yair A + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Files/App.xaml.cs b/Files/App.xaml.cs index 220e73517240..57792b209268 100644 --- a/Files/App.xaml.cs +++ b/Files/App.xaml.cs @@ -54,6 +54,7 @@ public static IShellPage CurrentInstance public static ObservableCollection linuxDistroItems = new ObservableCollection(); public static SettingsViewModel AppSettings { get; set; } public static InteractionViewModel InteractionViewModel { get; set; } + public static SelectedItemPropertiesViewModel SelectedItemPropertiesViewModel { get; set; } private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); @@ -80,6 +81,7 @@ public App() AppSettings = new SettingsViewModel(); InteractionViewModel = new InteractionViewModel(); + SelectedItemPropertiesViewModel = new SelectedItemPropertiesViewModel(); } private void RegisterUncaughtExceptionLogger() @@ -163,18 +165,6 @@ protected override void OnLaunched(LaunchActivatedEventArgs e) //start tracking app usage SystemInformation.TrackAppUse(e); - if (SystemInformation.IsAppUpdated) - { - var dialog = new ContentDialog() - { - Title = "What's new in v0.7.5", - Content = "• Fixed a crash that would sometimes occur when right clicking on a file or folder.\n• Fixed an issue where the status bar wouldn't hide on the new tab page.\n• Fixed an issue where clicking on the quick access item for home wouldn't navigate to the home page.\n• Fixed a bug that prevented users from right clicking on the navigation bar.", - PrimaryButtonText = "Lets go!" - }; - - dialog.ShowAsync(); - } - Logger.Info("App launched"); bool canEnablePrelaunch = Windows.Foundation.Metadata.ApiInformation.IsMethodPresent("Windows.ApplicationModel.Core.CoreApplication", "EnablePrelaunch"); diff --git a/Files/BaseLayout.cs b/Files/BaseLayout.cs index 5dc045c8b920..fada4a3c756a 100644 --- a/Files/BaseLayout.cs +++ b/Files/BaseLayout.cs @@ -8,6 +8,7 @@ using System.IO; using System.Linq; using System.Runtime.CompilerServices; +using Windows.ApplicationModel.DataTransfer; using Windows.Storage; using Windows.UI.Core; using Windows.UI.Xaml; @@ -73,6 +74,7 @@ internal set { IsItemSelected = true; } + SetSelectedItemsOnUi(value); NotifyPropertyChanged("SelectedItems"); } } @@ -98,6 +100,7 @@ internal set { IsItemSelected = true; } + SetSelectedItemOnUi(value); NotifyPropertyChanged("SelectedItem"); } } @@ -119,6 +122,12 @@ public BaseLayout() } } + protected abstract void SetSelectedItemOnUi(ListedItem selectedItem); + + protected abstract void SetSelectedItemsOnUi(List selectedItems); + + protected abstract ListedItem GetItemFromElement(object element); + private void AppSettings_LayoutModeChangeRequested(object sender, EventArgs e) { if (App.CurrentInstance.ContentPage != null) @@ -144,7 +153,7 @@ private void NotifyPropertyChanged([CallerMemberName] string propertyName = "") PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } - protected override void OnNavigatedTo(NavigationEventArgs eventArgs) + protected override async void OnNavigatedTo(NavigationEventArgs eventArgs) { base.OnNavigatedTo(eventArgs); // Add item jumping handler @@ -171,9 +180,9 @@ protected override void OnNavigatedTo(NavigationEventArgs eventArgs) App.CurrentInstance.NavigationToolbar.CanNavigateToParent = true; } - App.CurrentInstance.ViewModel.AddItemsToCollectionAsync(App.CurrentInstance.ViewModel.WorkingDirectory); - App.Clipboard_ContentChanged(null, null); + await App.CurrentInstance.ViewModel.RefreshItems(); + App.Clipboard_ContentChanged(null, null); App.CurrentInstance.NavigationToolbar.PathControlDisplayText = parameters; } @@ -273,5 +282,93 @@ protected virtual void Page_CharacterReceived(CoreWindow sender, CharacterReceiv char letterPressed = Convert.ToChar(args.KeyCode); App.CurrentInstance.InteractionOperations.PushJumpChar(letterPressed); } + + protected async void List_DragOver(object sender, DragEventArgs e) + { + if (e.DataView.Contains(StandardDataFormats.StorageItems)) + { + IReadOnlyList draggedItems = await e.DataView.GetStorageItemsAsync(); + // As long as one file doesn't already belong to this folder + if (draggedItems.Any(draggedItem => !Directory.GetParent(draggedItem.Path).FullName.Equals(App.CurrentInstance.ViewModel.WorkingDirectory, StringComparison.OrdinalIgnoreCase))) + { + e.AcceptedOperation = DataPackageOperation.Copy; + e.Handled = true; + } + else + { + e.AcceptedOperation = DataPackageOperation.None; + } + } + } + + protected async void List_Drop(object sender, DragEventArgs e) + { + if (e.DataView.Contains(StandardDataFormats.StorageItems)) + { + await AssociatedInteractions.PasteItems(e.DataView, App.CurrentInstance.ViewModel.WorkingDirectory, e.AcceptedOperation); + e.Handled = true; + } + } + + protected async void Item_DragStarting(object sender, DragStartingEventArgs e) + { + List selectedStorageItems = new List(); + foreach (ListedItem item in App.CurrentInstance.ContentPage.SelectedItems) + { + if (item.PrimaryItemAttribute == StorageItemTypes.File) + selectedStorageItems.Add(await StorageFile.GetFileFromPathAsync(item.ItemPath)); + else if (item.PrimaryItemAttribute == StorageItemTypes.Folder) + selectedStorageItems.Add(await StorageFolder.GetFolderFromPathAsync(item.ItemPath)); + } + + e.Data.SetStorageItems(selectedStorageItems); + e.DragUI.SetContentFromDataPackage(); + } + + protected async void Item_DragOver(object sender, DragEventArgs e) + { + ListedItem item = GetItemFromElement(sender); + if (e.DataView.Contains(StandardDataFormats.StorageItems)) + { + e.Handled = true; + IReadOnlyList draggedItems = await e.DataView.GetStorageItemsAsync(); + // Items from the same parent folder as this folder are dragged into this folder, so we move the items instead of copy + if (draggedItems.Any(draggedItem => Directory.GetParent(draggedItem.Path).FullName == Directory.GetParent(item.ItemPath).FullName)) + { + e.AcceptedOperation = DataPackageOperation.Move; + } + else + { + e.AcceptedOperation = DataPackageOperation.Copy; + } + } + } + + protected async void Item_Drop(object sender, DragEventArgs e) + { + e.Handled = true; + ListedItem rowItem = GetItemFromElement(sender); + await App.CurrentInstance.InteractionOperations.PasteItems(e.DataView, rowItem.ItemPath, e.AcceptedOperation); + } + + protected void InitializeDrag(UIElement element) + { + ListedItem item = GetItemFromElement(element); + if(item != null) + { + element.AllowDrop = false; + element.DragStarting -= Item_DragStarting; + element.DragStarting += Item_DragStarting; + element.DragOver -= Item_DragOver; + element.Drop -= Item_Drop; + if (item.PrimaryItemAttribute == StorageItemTypes.Folder) + { + element.AllowDrop = true; + element.DragOver += Item_DragOver; + element.Drop += Item_Drop; + } + } + } + } } diff --git a/Files/Dialogs/AddItemDialog.xaml.cs b/Files/Dialogs/AddItemDialog.xaml.cs index 014acc24fc3c..d8778a2c6dec 100644 --- a/Files/Dialogs/AddItemDialog.xaml.cs +++ b/Files/Dialogs/AddItemDialog.xaml.cs @@ -69,9 +69,9 @@ public static async void CreateFile(AddItemType fileType) } else { - folder = await folderToCreateItem.CreateFolderAsync("New Folder", CreationCollisionOption.GenerateUniqueName); + folder = await folderToCreateItem.CreateFolderAsync(ResourceController.GetTranslation("NewFolder"), CreationCollisionOption.GenerateUniqueName); } - TabInstance.ViewModel.AddFileOrFolder(new ListedItem(folder.FolderRelativeId) { ItemName = folder.DisplayName, ItemDateModifiedReal = DateTimeOffset.Now, LoadUnknownTypeGlyph = false, LoadFolderGlyph = true, LoadFileIcon = false, ItemType = "Folder", FileImage = null, ItemPath = folder.Path }); + TabInstance.ViewModel.AddFileOrFolder(new ListedItem(folder.FolderRelativeId) { PrimaryItemAttribute = StorageItemTypes.Folder, ItemName = folder.DisplayName, ItemDateModifiedReal = DateTimeOffset.Now, LoadUnknownTypeGlyph = false, LoadFolderGlyph = true, LoadFileIcon = false, ItemType = "Folder", FileImage = null, ItemPath = folder.Path }); } else if (fileType == AddItemType.TextDocument) { @@ -82,9 +82,9 @@ public static async void CreateFile(AddItemType fileType) } else { - item = await folderToCreateItem.CreateFileAsync("New Text Document" + ".txt", CreationCollisionOption.GenerateUniqueName); + item = await folderToCreateItem.CreateFileAsync(ResourceController.GetTranslation("NewTextDocument") + ".txt", CreationCollisionOption.GenerateUniqueName); } - TabInstance.ViewModel.AddFileOrFolder(new ListedItem(item.FolderRelativeId) { ItemName = item.DisplayName, ItemDateModifiedReal = DateTimeOffset.Now, LoadUnknownTypeGlyph = true, LoadFolderGlyph = false, LoadFileIcon = false, ItemType = item.DisplayType, FileImage = null, ItemPath = item.Path, FileExtension = item.FileType }); + TabInstance.ViewModel.AddFileOrFolder(new ListedItem(item.FolderRelativeId) { PrimaryItemAttribute = StorageItemTypes.File, ItemName = item.DisplayName, ItemDateModifiedReal = DateTimeOffset.Now, LoadUnknownTypeGlyph = true, LoadFolderGlyph = false, LoadFileIcon = false, ItemType = item.DisplayType, FileImage = null, ItemPath = item.Path, FileExtension = item.FileType }); } else if (fileType == AddItemType.BitmapImage) { @@ -95,9 +95,9 @@ public static async void CreateFile(AddItemType fileType) } else { - item = await folderToCreateItem.CreateFileAsync("New Bitmap Image" + ".bmp", CreationCollisionOption.GenerateUniqueName); + item = await folderToCreateItem.CreateFileAsync(ResourceController.GetTranslation("NewBitmapImage") + ".bmp", CreationCollisionOption.GenerateUniqueName); } - TabInstance.ViewModel.AddFileOrFolder(new ListedItem(item.FolderRelativeId) { ItemName = item.DisplayName, ItemDateModifiedReal = DateTimeOffset.Now, LoadUnknownTypeGlyph = true, LoadFolderGlyph = false, LoadFileIcon = false, ItemType = item.DisplayType, FileImage = null, ItemPath = item.Path, FileExtension = item.FileType }); + TabInstance.ViewModel.AddFileOrFolder(new ListedItem(item.FolderRelativeId) { PrimaryItemAttribute = StorageItemTypes.File, ItemName = item.DisplayName, ItemDateModifiedReal = DateTimeOffset.Now, LoadUnknownTypeGlyph = true, LoadFolderGlyph = false, LoadFileIcon = false, ItemType = item.DisplayType, FileImage = null, ItemPath = item.Path, FileExtension = item.FileType }); } } } diff --git a/Files/Dialogs/ConsentDialog.xaml b/Files/Dialogs/ConsentDialog.xaml index 6ccca39eb56c..cfda7a5389f9 100644 --- a/Files/Dialogs/ConsentDialog.xaml +++ b/Files/Dialogs/ConsentDialog.xaml @@ -7,9 +7,9 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:Windows10version1903="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 8)" - CornerRadius="4" Grid.RowSpan="4" DefaultButton="Primary" PrimaryButtonClick="PermissionDialog_PrimaryButtonClick" PrimaryButtonText="Grant Permission" x:Name="PermissionDialog" Title="Welcome to Files"> + CornerRadius="4" Grid.RowSpan="4" DefaultButton="Primary" PrimaryButtonClick="PermissionDialog_PrimaryButtonClick" PrimaryButtonText="Grant Permission" x:Name="PermissionDialog" Title="Welcome to Files" x:Uid="WelcomeDialog"> - + \ No newline at end of file diff --git a/Files/Dialogs/RenameDialog.xaml b/Files/Dialogs/RenameDialog.xaml index 553e2938563a..2b3bf298e3f6 100644 --- a/Files/Dialogs/RenameDialog.xaml +++ b/Files/Dialogs/RenameDialog.xaml @@ -7,9 +7,9 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:Windows10version1903="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 8)" - CornerRadius="4" Grid.RowSpan="4" DefaultButton="Primary" Title="Enter an item name" BorderThickness="0" SecondaryButtonClick="NameDialog_SecondaryButtonClick" PrimaryButtonClick="NameDialog_PrimaryButtonClick" x:Name="NameDialog" PrimaryButtonText="Set Name" SecondaryButtonText="Cancel"> + CornerRadius="4" Grid.RowSpan="4" DefaultButton="Primary" Title="Enter an item name" BorderThickness="0" SecondaryButtonClick="NameDialog_SecondaryButtonClick" PrimaryButtonClick="NameDialog_PrimaryButtonClick" x:Name="NameDialog" PrimaryButtonText="Set Name" SecondaryButtonText="Cancel" x:Uid="RenameDialog"> - + diff --git a/Files/Files.csproj b/Files/Files.csproj index 6c49066bfd18..824a48fd5311 100644 --- a/Files/Files.csproj +++ b/Files/Files.csproj @@ -150,6 +150,8 @@ ConfirmDeleteDialog.xaml + + ModernNavigationToolbar.xaml @@ -268,7 +270,6 @@ PreserveNewest - Always @@ -331,6 +332,8 @@ + + @@ -515,6 +518,9 @@ + + + diff --git a/Files/Filesystem/Drives.cs b/Files/Filesystem/Drives.cs index 0cae41835eeb..40044c8f8f09 100644 --- a/Files/Filesystem/Drives.cs +++ b/Files/Filesystem/Drives.cs @@ -14,6 +14,7 @@ using Windows.UI.Core; using Windows.UI.Xaml; using NLog; +using Windows.ApplicationModel.Resources; namespace Files.Filesystem { @@ -58,9 +59,9 @@ private async void DeviceWatcher_EnumerationCompleted(DeviceWatcher sender, obje { await CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.Low, () => { - if (App.sideBarItems.FirstOrDefault(x => x is HeaderTextItem && x.Text == "Drives") == null) + if (App.sideBarItems.FirstOrDefault(x => x is HeaderTextItem && x.Text == ResourceController.GetTranslation("SidebarDrives")) == null) { - App.sideBarItems.Add(new HeaderTextItem() { Text = "Drives" }); + App.sideBarItems.Add(new HeaderTextItem() { Text = ResourceController.GetTranslation("SidebarDrives") }); } foreach (DriveItem drive in Drives) { diff --git a/Files/Helpers/NaturalStringComparer.cs b/Files/Helpers/NaturalStringComparer.cs new file mode 100644 index 000000000000..d7d0215a64d5 --- /dev/null +++ b/Files/Helpers/NaturalStringComparer.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace Files.Helpers +{ + internal static class SafeNativeMethods + { + public static readonly Int32 NORM_IGNORECASE = 0x00000001; + public static readonly Int32 NORM_IGNORENONSPACE = 0x00000002; + public static readonly Int32 NORM_IGNORESYMBOLS = 0x00000004; + public static readonly Int32 LINGUISTIC_IGNORECASE = 0x00000010; + public static readonly Int32 LINGUISTIC_IGNOREDIACRITIC = 0x00000020; + public static readonly Int32 NORM_IGNOREKANATYPE = 0x00010000; + public static readonly Int32 NORM_IGNOREWIDTH = 0x00020000; + public static readonly Int32 NORM_LINGUISTIC_CASING = 0x08000000; + public static readonly Int32 SORT_STRINGSORT = 0x00001000; + public static readonly Int32 SORT_DIGITSASNUMBERS = 0x00000008; + + public static readonly String LOCALE_NAME_USER_DEFAULT = null; + public static readonly String LOCALE_NAME_INVARIANT = String.Empty; + public static readonly String LOCALE_NAME_SYSTEM_DEFAULT = "!sys-default-locale"; + + [DllImport("api-ms-win-core-string-l1-1-0 .dll", CharSet = CharSet.Unicode)] + public static extern Int32 CompareStringEx( + String localeName, + Int32 flags, + String str1, + Int32 count1, + String str2, + Int32 count2, + IntPtr versionInformation, + IntPtr reserved, + Int32 param + ); + } + + public class NaturalStringComparer : IComparer + { + public int Compare(object a, object b) + { + return SafeNativeMethods.CompareStringEx( + SafeNativeMethods.LOCALE_NAME_USER_DEFAULT, + SafeNativeMethods.SORT_DIGITSASNUMBERS, // Add other flags if required. + a.ToString(), + a.ToString().Length, + b.ToString(), + b.ToString().Length, + IntPtr.Zero, + IntPtr.Zero, + 0) - 2; + } + } +} diff --git a/Files/Interacts/Interaction.cs b/Files/Interacts/Interaction.cs index 87df7d55814d..c2331e38253b 100644 --- a/Files/Interacts/Interaction.cs +++ b/Files/Interacts/Interaction.cs @@ -33,6 +33,12 @@ using Windows.UI.WindowManagement.Preview; using Windows.UI; using Files.View_Models; +using System.Security.Cryptography; +using Windows.Security.Cryptography.Core; +using Microsoft.Toolkit.Uwp.Helpers; +using Windows.Security.Cryptography; +using Windows.Storage.Streams; +using GalaSoft.MvvmLight.Command; namespace Files.Interacts { @@ -346,13 +352,7 @@ private async void OpenSelectedItems(bool displayApplicationPicker) CurrentInstance.NavigationToolbar.PathControlDisplayText = selectedItemPath; (CurrentInstance.ContentPage as BaseLayout).AssociatedViewModel.EmptyTextState.IsVisible = Visibility.Collapsed; - App.CurrentInstance.SidebarSelectedItem = App.sideBarItems.FirstOrDefault(x => x.Path != null && x.Path.Equals(selectedItemPath, StringComparison.OrdinalIgnoreCase)); - if (App.CurrentInstance.SidebarSelectedItem == null) - { - App.CurrentInstance.SidebarSelectedItem = App.sideBarItems.FirstOrDefault(x => x.Path != null && x.Path.Equals(Path.GetPathRoot(selectedItemPath), StringComparison.OrdinalIgnoreCase)); - } CurrentInstance.ContentFrame.Navigate(sourcePageType, selectedItemPath, new SuppressNavigationTransitionInfo()); - } else { @@ -744,112 +744,70 @@ public async Task RenameFileItem(ListedItem item, string oldName, string n return true; } - public List dataGridRows = new List(); - public List gridViewItems = new List(); public async void CutItem_Click(object sender, RoutedEventArgs e) { DataPackage dataPackage = new DataPackage { RequestedOperation = DataPackageOperation.Move }; - App.pathsToDeleteAfterPaste.Clear(); List items = new List(); - if (App.CurrentInstance.CurrentPageType == typeof(GenericFileBrowser)) + var CurrentInstance = App.CurrentInstance; + if ((CurrentInstance.ContentPage as BaseLayout).SelectedItems.Count != 0) { - var CurrentInstance = App.CurrentInstance; - if ((CurrentInstance.ContentPage as BaseLayout).SelectedItems.Count != 0) + // First, reset DataGrid Rows that may be in "cut" command mode + foreach (ListedItem listedItem in CurrentInstance.ViewModel.FilesAndFolders) { - dataGridRows.Clear(); - FindChildren(dataGridRows, (CurrentInstance.ContentPage as GenericFileBrowser).AllView); - - // First, reset DataGrid Rows that may be in "cut" command mode - foreach (DataGridRow row in dataGridRows) + if (App.CurrentInstance.CurrentPageType == typeof(GenericFileBrowser)) { - if ((CurrentInstance.ContentPage as GenericFileBrowser).AllView.Columns[0].GetCellContent(row).Opacity < 1) - { - (CurrentInstance.ContentPage as GenericFileBrowser).AllView.Columns[0].GetCellContent(row).Opacity = 1; - } + FrameworkElement element = (CurrentInstance.ContentPage as GenericFileBrowser).AllView.Columns[0].GetCellContent(listedItem); + if (element != null) + element.Opacity = 1; } - - foreach (ListedItem StorItem in (CurrentInstance.ContentPage as BaseLayout).SelectedItems) - { - IEnumerator allItems = (CurrentInstance.ContentPage as GenericFileBrowser).AllView.ItemsSource.GetEnumerator(); - int index = -1; - while (allItems.MoveNext()) - { - index++; - var item = allItems.Current; - if (item == StorItem) - { - DataGridRow dataGridRow = dataGridRows[index]; - (CurrentInstance.ContentPage as GenericFileBrowser).AllView.Columns[0].GetCellContent(dataGridRow).Opacity = 0.4; - } - } - - App.pathsToDeleteAfterPaste.Add(StorItem.ItemPath); - if (StorItem.PrimaryItemAttribute == StorageItemTypes.File) - { - var item = await StorageFile.GetFileFromPathAsync(StorItem.ItemPath); - items.Add(item); - } - else - { - var item = await StorageFolder.GetFolderFromPathAsync(StorItem.ItemPath); - items.Add(item); - } - } - } - } - else if (App.CurrentInstance.CurrentPageType == typeof(PhotoAlbum)) - { - var CurrentInstance = App.CurrentInstance; - if ((CurrentInstance.ContentPage as BaseLayout).SelectedItems.Count != 0) - { - - gridViewItems.Clear(); - FindChildren(gridViewItems, (CurrentInstance.ContentPage as PhotoAlbum).FileList); - - // First, reset GridView items that may be in "cut" command mode - foreach (GridViewItem gridViewItem in gridViewItems) + else if (App.CurrentInstance.CurrentPageType == typeof(PhotoAlbum)) { List itemContentGrids = new List(); - FindChildren(itemContentGrids, (CurrentInstance.ContentPage as PhotoAlbum).FileList.ContainerFromItem(gridViewItem.Content)); + GridViewItem gridViewItem = (CurrentInstance.ContentPage as PhotoAlbum).FileList.ContainerFromItem(listedItem) as GridViewItem; + if (gridViewItem == null) + continue; + FindChildren(itemContentGrids, gridViewItem); var imageOfItem = itemContentGrids.Find(x => x.Tag?.ToString() == "ItemImage"); - if (imageOfItem.Opacity < 1) - { - imageOfItem.Opacity = 1; - } + imageOfItem.Opacity = 1; } + } - foreach (ListedItem StorItem in (CurrentInstance.ContentPage as BaseLayout).SelectedItems) + foreach (ListedItem listedItem in CurrentInstance.ContentPage.SelectedItems) + { + // Dim opacities accordingly + if (App.CurrentInstance.CurrentPageType == typeof(GenericFileBrowser)) + { + (CurrentInstance.ContentPage as GenericFileBrowser).AllView.Columns[0].GetCellContent(listedItem).Opacity = 0.4; + } else if (App.CurrentInstance.CurrentPageType == typeof(PhotoAlbum)) { - GridViewItem itemToDimForCut = (GridViewItem)(CurrentInstance.ContentPage as PhotoAlbum).FileList.ContainerFromItem(StorItem); + GridViewItem itemToDimForCut = (GridViewItem)(CurrentInstance.ContentPage as PhotoAlbum).FileList.ContainerFromItem(listedItem); List itemContentGrids = new List(); - FindChildren(itemContentGrids, (CurrentInstance.ContentPage as PhotoAlbum).FileList.ContainerFromItem(itemToDimForCut.Content)); + FindChildren(itemContentGrids, itemToDimForCut); var imageOfItem = itemContentGrids.Find(x => x.Tag?.ToString() == "ItemImage"); imageOfItem.Opacity = 0.4; + } - App.pathsToDeleteAfterPaste.Add(StorItem.ItemPath); - if (StorItem.PrimaryItemAttribute == StorageItemTypes.File) - { - var item = await StorageFile.GetFileFromPathAsync(StorItem.ItemPath); - items.Add(item); - } - else - { - var item = await StorageFolder.GetFolderFromPathAsync(StorItem.ItemPath); - items.Add(item); - } + if (listedItem.PrimaryItemAttribute == StorageItemTypes.File) + { + var item = await StorageFile.GetFileFromPathAsync(listedItem.ItemPath); + items.Add(item); + } + else + { + var item = await StorageFolder.GetFolderFromPathAsync(listedItem.ItemPath); + items.Add(item); } } } - IEnumerable EnumerableOfItems = items; - dataPackage.SetStorageItems(EnumerableOfItems); + dataPackage.SetStorageItems(items); Clipboard.SetContent(dataPackage); Clipboard.Flush(); } public string CopySourcePath; - public IReadOnlyList ItemsToPaste; + public IReadOnlyList itemsToPaste; public int itemsPasted; public async void CopyItem_ClickAsync(object sender, RoutedEventArgs e) @@ -904,64 +862,114 @@ public async void CopyItem_ClickAsync(object sender, RoutedEventArgs e) } if (items?.Count > 0) { - IEnumerable EnumerableOfItems = items; - dataPackage.SetStorageItems(EnumerableOfItems); + dataPackage.SetStorageItems(items); Clipboard.SetContent(dataPackage); Clipboard.Flush(); } } - public async void PasteItem_ClickAsync(object sender, RoutedEventArgs e) + enum ImpossibleActionResponseTypes { - string DestinationPath = CurrentInstance.ViewModel.WorkingDirectory; + Skip, + Abort + } + public async void PasteItem_ClickAsync(object sender, RoutedEventArgs e) + { DataPackageView packageView = Clipboard.GetContent(); - ItemsToPaste = await packageView.GetStorageItemsAsync(); + string destinationPath = CurrentInstance.ViewModel.WorkingDirectory; + + await PasteItems(packageView, destinationPath, packageView.RequestedOperation); + } + + public async Task PasteItems(DataPackageView packageView, string destinationPath, DataPackageOperation acceptedOperation) + { + itemsToPaste = await packageView.GetStorageItemsAsync(); + HashSet pastedItems = new HashSet(); itemsPasted = 0; - if (ItemsToPaste.Count > 3) + if (itemsToPaste.Count > 3) { - (App.CurrentInstance as ModernShellPage).UpdateProgressFlyout(InteractionOperationType.PasteItems, itemsPasted, ItemsToPaste.Count); + (App.CurrentInstance as ModernShellPage).UpdateProgressFlyout(InteractionOperationType.PasteItems, itemsPasted, itemsToPaste.Count); } - foreach (IStorageItem item in ItemsToPaste) + foreach (IStorageItem item in itemsToPaste) { - if (item.IsOfType(StorageItemTypes.Folder)) { - await CloneDirectoryAsync(item.Path, DestinationPath, item.Name, false); + if (destinationPath.Contains(item.Path, StringComparison.OrdinalIgnoreCase)) + { + ImpossibleActionResponseTypes responseType = ImpossibleActionResponseTypes.Abort; + ContentDialog dialog = new ContentDialog() + { + Title = ResourceController.GetTranslation("ErrorDialogThisActionCannotBeDone"), + Content = ResourceController.GetTranslation("ErrorDialogTheDestinationFolder") + " (" + destinationPath.Split(Path.DirectorySeparatorChar, StringSplitOptions.RemoveEmptyEntries).Last() + ") " + ResourceController.GetTranslation("ErrorDialogIsASubfolder") + " (" + item.Name + ")", + PrimaryButtonText = ResourceController.GetTranslation("ErrorDialogSkip"), + CloseButtonText = ResourceController.GetTranslation("ErrorDialogCancel"), + PrimaryButtonCommand = new RelayCommand(() => { responseType = ImpossibleActionResponseTypes.Skip; }), + CloseButtonCommand = new RelayCommand(() => { responseType = ImpossibleActionResponseTypes.Abort; }) + }; + await dialog.ShowAsync(); + if (responseType == ImpossibleActionResponseTypes.Skip) + { + continue; + } + else if (responseType == ImpossibleActionResponseTypes.Abort) + { + return; + } + } + else + { + StorageFolder pastedFolder = await CloneDirectoryAsync(item.Path, destinationPath, item.Name, false); + pastedItems.Add(pastedFolder); + if (destinationPath == CurrentInstance.ViewModel.WorkingDirectory) + CurrentInstance.ViewModel.AddFolder(pastedFolder.Path); + } } else if (item.IsOfType(StorageItemTypes.File)) { - if (ItemsToPaste.Count > 3) + if (itemsToPaste.Count > 3) { - (App.CurrentInstance as ModernShellPage).UpdateProgressFlyout(InteractionOperationType.PasteItems, ++itemsPasted, ItemsToPaste.Count); + (App.CurrentInstance as ModernShellPage).UpdateProgressFlyout(InteractionOperationType.PasteItems, ++itemsPasted, itemsToPaste.Count); } - StorageFile ClipboardFile = await StorageFile.GetFileFromPathAsync(item.Path); - await ClipboardFile.CopyAsync(await StorageFolder.GetFolderFromPathAsync(DestinationPath), item.Name, NameCollisionOption.GenerateUniqueName); + StorageFile clipboardFile = await StorageFile.GetFileFromPathAsync(item.Path); + StorageFile pastedFile = await clipboardFile.CopyAsync(await StorageFolder.GetFolderFromPathAsync(destinationPath), item.Name, NameCollisionOption.GenerateUniqueName); + pastedItems.Add(pastedFile); + if (destinationPath == CurrentInstance.ViewModel.WorkingDirectory) + CurrentInstance.ViewModel.AddFile(pastedFile.Path); } } - if (packageView.RequestedOperation == DataPackageOperation.Move) + if (acceptedOperation == DataPackageOperation.Move) { - foreach (string path in App.pathsToDeleteAfterPaste) + foreach (IStorageItem item in itemsToPaste) { - if (path.Contains(".")) + if (item.IsOfType(StorageItemTypes.File)) { - StorageFile file = await StorageFile.GetFileFromPathAsync(path); + StorageFile file = await StorageFile.GetFileFromPathAsync(item.Path); await file.DeleteAsync(); } - if (!path.Contains(".")) + else if (item.IsOfType(StorageItemTypes.Folder)) { - StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(path); + StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(item.Path); await folder.DeleteAsync(); } + ListedItem listedItem = CurrentInstance.ViewModel.FilesAndFolders.FirstOrDefault(listedItem => listedItem.ItemPath.Equals(item.Path, StringComparison.OrdinalIgnoreCase)); + if (listedItem != null) + CurrentInstance.ViewModel.RemoveFileOrFolder(listedItem); } } - + if (destinationPath == CurrentInstance.ViewModel.WorkingDirectory) + { + List pastedItemPaths = pastedItems.Select(item => item.Path).ToList(); + List copiedItems = CurrentInstance.ViewModel.FilesAndFolders.Where(listedItem => pastedItemPaths.Contains(listedItem.ItemPath)).ToList(); + CurrentInstance.ContentPage.SelectedItems = copiedItems; + } + packageView.ReportOperationCompleted(acceptedOperation); } - public async Task CloneDirectoryAsync(string SourcePath, string DestinationPath, string sourceRootName, bool suppressProgressFlyout) + public async Task CloneDirectoryAsync(string SourcePath, string DestinationPath, string sourceRootName, bool suppressProgressFlyout) { StorageFolder SourceFolder = await StorageFolder.GetFolderFromPathAsync(SourcePath); StorageFolder DestinationFolder = await StorageFolder.GetFolderFromPathAsync(DestinationPath); @@ -970,11 +978,11 @@ public async Task CloneDirectoryAsync(string SourcePath, string DestinationPath, foreach (StorageFile fileInSourceDir in await SourceFolder.GetFilesAsync()) { - if(ItemsToPaste != null) + if(itemsToPaste != null) { - if (ItemsToPaste.Count > 3 && !suppressProgressFlyout) + if (itemsToPaste.Count > 3 && !suppressProgressFlyout) { - (App.CurrentInstance as ModernShellPage).UpdateProgressFlyout(InteractionOperationType.PasteItems, ++itemsPasted, ItemsToPaste.Count + (await SourceFolder.GetItemsAsync()).Count); + (App.CurrentInstance as ModernShellPage).UpdateProgressFlyout(InteractionOperationType.PasteItems, ++itemsPasted, itemsToPaste.Count + (await SourceFolder.GetItemsAsync()).Count); } } @@ -982,17 +990,17 @@ public async Task CloneDirectoryAsync(string SourcePath, string DestinationPath, } foreach (StorageFolder folderinSourceDir in await SourceFolder.GetFoldersAsync()) { - if (ItemsToPaste != null) + if (itemsToPaste != null) { - if (ItemsToPaste.Count > 3 && !suppressProgressFlyout) + if (itemsToPaste.Count > 3 && !suppressProgressFlyout) { - (App.CurrentInstance as ModernShellPage).UpdateProgressFlyout(InteractionOperationType.PasteItems, ++itemsPasted, ItemsToPaste.Count + (await SourceFolder.GetItemsAsync()).Count); + (App.CurrentInstance as ModernShellPage).UpdateProgressFlyout(InteractionOperationType.PasteItems, ++itemsPasted, itemsToPaste.Count + (await SourceFolder.GetItemsAsync()).Count); } } await CloneDirectoryAsync(folderinSourceDir.Path, DestinationFolder.Path, folderinSourceDir.Name, false); } - + return createdRoot; } public void NewFolder_Click(object sender, RoutedEventArgs e) @@ -1084,9 +1092,9 @@ public void SelectAllItems() var CurrentInstance = App.CurrentInstance; foreach (ListedItem li in (CurrentInstance.ContentPage as GenericFileBrowser).AllView.ItemsSource) { - if (!(CurrentInstance.ContentPage as BaseLayout).SelectedItems.Contains(li)) + if (!(CurrentInstance.ContentPage as GenericFileBrowser).SelectedItems.Contains(li)) { - (CurrentInstance.ContentPage as BaseLayout).SelectedItems.Add(li); + (CurrentInstance.ContentPage as GenericFileBrowser).AllView.SelectedItems.Add(li); } } } @@ -1101,11 +1109,11 @@ public void ClearAllItems() if (App.CurrentInstance.CurrentPageType == typeof(GenericFileBrowser)) { var CurrentInstance = App.CurrentInstance; - (CurrentInstance.ContentPage as BaseLayout).SelectedItems.Clear(); + (CurrentInstance.ContentPage as GenericFileBrowser).AllView.SelectedItems.Clear(); } else if (App.CurrentInstance.CurrentPageType == typeof(PhotoAlbum)) { - (CurrentInstance.ContentPage as BaseLayout).SelectedItems.Clear(); + (CurrentInstance.ContentPage as PhotoAlbum).FileList.SelectedItems.Clear(); } } @@ -1150,5 +1158,19 @@ public void PushJumpChar(char letter) { App.CurrentInstance.ViewModel.JumpString += letter.ToString().ToLower(); } + + public async Task GetHashForFile(ListedItem fileItem, string nameOfAlg) + { + HashAlgorithmProvider algorithmProvider = HashAlgorithmProvider.OpenAlgorithm(nameOfAlg); + CryptographicHash objHash = algorithmProvider.CreateHash(); + var itemFromPath = await StorageFile.GetFileFromPathAsync(fileItem.ItemPath); + var fileBytes = await StorageFileHelper.ReadBytesAsync(itemFromPath); + + IBuffer buffer = CryptographicBuffer.CreateFromByteArray(fileBytes); + objHash.Append(buffer); + IBuffer bufferHash = objHash.GetValueAndReset(); + + return CryptographicBuffer.EncodeToHexString(bufferHash); + } } } diff --git a/Files/LocationsList.cs b/Files/LocationsList.cs index ce7c36c98ac3..641c5741f805 100644 --- a/Files/LocationsList.cs +++ b/Files/LocationsList.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using Files; +using System.Collections.Generic; namespace Locations { @@ -16,12 +17,11 @@ public class ItemLoader public static List itemsAdded = new List(); public static void DisplayItems() { - var resourceLoader = Windows.ApplicationModel.Resources.ResourceLoader.GetForViewIndependentUse(); - itemsAdded.Add(new FavoriteLocationItem() { ImageSource = "Assets/Cards/Gradients/Blue.png", Icon = "\xE896", Text = resourceLoader.GetString("SidebarDownloads"), Tag = "Downloads" }); - itemsAdded.Add(new FavoriteLocationItem() { ImageSource = "Assets/Cards/Gradients/Green.png", Icon = "\xE8A5", Text = resourceLoader.GetString("SidebarDocuments"), Tag = "Documents" }); - itemsAdded.Add(new FavoriteLocationItem() { ImageSource = "Assets/Cards/Gradients/Orange.png", Icon = "\xEB9F", Text = resourceLoader.GetString("SidebarPictures"), Tag = "Pictures" }); - itemsAdded.Add(new FavoriteLocationItem() { ImageSource = "Assets/Cards/Gradients/Pink.png", Icon = "\xEC4F", Text = resourceLoader.GetString("SidebarMusic"), Tag = "Music" }); - itemsAdded.Add(new FavoriteLocationItem() { ImageSource = "Assets/Cards/Gradients/Red.png", Icon = "\xE8B2", Text = resourceLoader.GetString("SidebarVideos"), Tag = "Videos" }); + itemsAdded.Add(new FavoriteLocationItem() { ImageSource = "Assets/Cards/Gradients/Blue.png", Icon = "\xE896", Text = ResourceController.GetTranslation("SidebarDownloads"), Tag = "Downloads" }); + itemsAdded.Add(new FavoriteLocationItem() { ImageSource = "Assets/Cards/Gradients/Green.png", Icon = "\xE8A5", Text = ResourceController.GetTranslation("SidebarDocuments"), Tag = "Documents" }); + itemsAdded.Add(new FavoriteLocationItem() { ImageSource = "Assets/Cards/Gradients/Orange.png", Icon = "\xEB9F", Text = ResourceController.GetTranslation("SidebarPictures"), Tag = "Pictures" }); + itemsAdded.Add(new FavoriteLocationItem() { ImageSource = "Assets/Cards/Gradients/Pink.png", Icon = "\xEC4F", Text = ResourceController.GetTranslation("SidebarMusic"), Tag = "Music" }); + itemsAdded.Add(new FavoriteLocationItem() { ImageSource = "Assets/Cards/Gradients/Red.png", Icon = "\xE8B2", Text = ResourceController.GetTranslation("SidebarVideos"), Tag = "Videos" }); } } } \ No newline at end of file diff --git a/Files/MultilingualResources/Files.de-DE.xlf b/Files/MultilingualResources/Files.de-DE.xlf index 1a8b4b1a7382..82e36f0a5f80 100644 --- a/Files/MultilingualResources/Files.de-DE.xlf +++ b/Files/MultilingualResources/Files.de-DE.xlf @@ -67,8 +67,9 @@ Feedback geben - Submit an issue report to provide the developers with information - Stelle den Entwicklern Informationen zur Verfügung durch das Erstellen eines Fehlerberichtes + Send the developers an issue report with more information + Stelle den Entwicklern Informationen zur Verfügung durch das Erstellen eines Fehlerberichtes + Please verify the translation’s accuracy as the source string was updated after it was translated. Third Party Licenses @@ -91,8 +92,9 @@ Datumsformat - Theme - Thema + App theme + Thema + Please verify the translation’s accuracy as the source string was updated after it was translated. Appearance @@ -114,10 +116,6 @@ Files and Folders Dateien und Ordner - - Settings - Einstellungen - About Über @@ -201,7 +199,7 @@ Permanently delete - Dauerhaft löschen + Endgültig löschen Show a confirmation dialog when deleting files or folders @@ -412,9 +410,8 @@ Bitmap Bild - Text Documnet - Textdokument - Please verify the translation’s accuracy as the source string was updated after it was translated. + Text Document + Textdokument List View @@ -425,6 +422,159 @@ Rasteransicht + Settings + Einstellungen + + + Name + Name + + + Date modified + Geändert + + + Type + Typ + + + Size + Größe + + + Welcome to Files + Willkommen in Files UWP + + + Grant Permission + Erlaubnis erteilen + + + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + Um loslegen zu können, musst du Files UWP die Erlaubnis erteilen, Dateien anzeigen zu dürfen. Diese Option wird die Einstellungen öffenen mit denen du diese Erlaubnis erteilen kannst. Anschließend muss die App neu gestartet werden. + + + File folder + Dateiordner + + + Enter an item name + Dateinamen eingeben + + + Enter an item name without an extension + Gebe den Dateinamen ohne Erweiterung ein + + + Set Name + Name festlegen + + + Cancel + Abbrechen + + + New tab + Neuer Tab + + + Windows default + System + Please verify the translation’s accuracy as the source string was updated after it was translated. + + + Light + Hell + + + Dark + Dunkel + + + Application + Anwendung + + + System + System + + + New Folder + Neuer Ordner + + + New Text Document + Neues Textdokument + + + New Bitmap Image + Neues Bitmap Bild + + + This folder is empty. + Dieser Ordner ist leer. + + + Back + Zurück + + + Forward + Vorwärts + + + Up + Hoch + + + Refresh + Aktualisieren + + + Create a new item + Neue Datei erstellen + + + Search + Suchen + + + More options + Mehr Optionen + + + Drives + Laufwerke + + + File + Datei + + + This action cannot be done + Aktion kann nicht ausgeführt werden + + + The destination folder + Der Ausgangsordner + + + is a subfolder of the source folder + ist ein Unterordner des Quellordners + + + Skip + Überspringen + + + Cancel + Abbrechen + + + MD5Hash: + MD5Hash: + + Settings Settings diff --git a/Files/MultilingualResources/Files.es-ES.xlf b/Files/MultilingualResources/Files.es-ES.xlf index 4e2557b7a206..363d3d052ea2 100644 --- a/Files/MultilingualResources/Files.es-ES.xlf +++ b/Files/MultilingualResources/Files.es-ES.xlf @@ -67,8 +67,8 @@ Envíar opiniones - Submit an issue report to provide the developers with information - Envía un informe de fallos a los desarrolladores + Send the developers an issue report with more information + Envía un informe de fallos a los desarrolladores con más información Third Party Licenses @@ -91,8 +91,8 @@ Formato de fecha - Theme - Tema + App theme + Tema de la Aplicación Appearance @@ -114,10 +114,6 @@ Files and Folders Carpetas y archivos - - Settings - Ajustes - About Sobre nosotros @@ -184,249 +180,401 @@ Delete Item(s) - Eliminar Archivo(s) + Eliminar Archivo(s) Cancel - Cancelar + Cancelar Delete - Eliminar + Eliminar Are you sure you want to delete the selected item(s)? - ¿Está seguro que desea eliminar el archivo seleccionado? + ¿Está seguro que desea eliminar el archivo seleccionado? Permanently delete - Eliminar permanentemente + Eliminar permanentemente Show a confirmation dialog when deleting files or folders - Mostrar un diálogo de confirmación al borrar archivos o carpetas + Mostrar un diálogo de confirmación al borrar archivos o carpetas Desktop - Escritorio + Escritorio Documents - Documentos + Documentos Downloads - Descargas + Descargas Home - Inicio + Inicio Music - Música + Música Pictures - Imágenes + Imágenes Videos - Videos + Videos New Tab - Nueva Pestaña + Nueva Pestaña Extract Compressed Archive - Extraer Archivo Comprimido + Extraer Archivo Comprimido Cancel - Cancelar + Cancelar Extract - Extraer + Extraer Pick a location to extract this compressed archive to. You'll need to stay in the current folder until we're done. A new tab will open up with the extracted items. - Elija una ubicación para extraer este archivo comprimido. Deberá permanecer en la carpeta actual hasta que hayamos terminado. Se abrirá una nueva pestaña con los elementos extraídos. + Elija una ubicación para extraer este archivo comprimido. Deberá permanecer en la carpeta actual hasta que hayamos terminado. Se abrirá una nueva pestaña con los elementos extraídos. Browse - Navegar + Examinar Sort by - Ordenar por + Ordenar por Name - Nombre + Nombre Date modified - Fecha de modificación + Fecha de modificación Type - Tipo + Tipo Size - Tamaño + Tamaño Ascending - Ascendente + Ascendente Descending - Descendente + Descendente Refresh - Actualizar + Actualizar Paste - Pegar + Pegar Open in Terminal... - Abrir en la Terminal... + Abrir en la Terminal... New - Nuevo + Nuevo Folder - Carpeta + Carpeta Bitmap Image - Imagen Bitmap + Imagen Bitmap Text Document - Documento de Texto + Documento de Texto Properties - Propiedades + Propiedades Extract - Extraer + Extraer Open with... - Abrir con... + Abrir con... Open in new tab - Abrir en nueva pestaña + Abrir en nueva pestaña Open in new window - Abrir en nueva ventana + Abrir en nueva ventana Set as desktop background - Establecer como fondo de escritorio + Establecer como fondo de escritorio Share - Compartir + Compartir Cut - Cortar + Cortar Copy - Copiar + Copiar Delete - Eliminar + Eliminar Rename - Renombrar + Renombrar Pin to sidebar - Anclar a la barra lateral + Anclar a la barra lateral Properties - Propiedades + Propiedades QuickLook - QuickLook + QuickLook New Window - Nueva Ventana + Nueva Ventana Copy Path - Copiar Ubicación + Copiar Ubicación Paste - Pegar + Pegar Open in Terminal... - Abrir en la Terminal... + Abrir en la Terminal... Enter a path - Ingrese una ubicación + Ingrese una ubicación Search - Buscar + Buscar Select All - Seleccionar Todo + Seleccionar Todo Clear Selection - Deseleccionar + Quitar Selección Folder - Carpeta + Carpeta Bitmap Image - Imagen Bitmap + Imagen Bitmap - Text Documnet - Documento de Texto + Text Document + Documento de Texto List View - Vista en Lista + Vista en Lista Grid View - Vista en Cuadrícula + Vista en Cuadrícula Settings - Ajustes + Ajustes + + + Name + Nombre + + + Date modified + Fecha de modificación + + + Type + Tipo + + + Size + Tamaño + + + Welcome to Files + Bienvenido a Archivos UWP + + + Grant Permission + Conceder Permiso + + + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + Para comenzar, deberá otorgarnos permiso para mostrar sus archivos. Esto abrirá una página de Configuración donde puede otorgarnos este permiso. Deberá volver a abrir la aplicación una vez completada. + + + File folder + Carpeta de archivos + + + Enter an item name + Ingrese un nombre de archivo + + + Enter an item name without an extension + Ingrese un nombre de archivo sin una extensión + + + Set Name + Establecer Nombre + + + Cancel + Cancelar + + + New tab + Nueva pestaña + + + Windows default + Predeterminado de Windows + + + Light + Claro + + + Dark + Oscuro + + + Application + Aplicación + + + System + Sistema + + + New Folder + Nueva Carpeta + + + New Text Document + Nuevo Documento de Texto + + + New Bitmap Image + Nueva Imagen Bitmap + + + This folder is empty. + Esta carpeta está vacía. + + + Back + Atrás + + + Forward + Adelante + + + Up + Arriba + + + Refresh + Actualizar + + + Create a new item + Crear un nuevo elemento + + + Search + Búsqueda + + + More options + Más opciones + + + Drives + Unidades + + + File + Archivo + + + MD5Hash: + HashMD5: + + + This action cannot be done + Esta acción no se puede completar + + + The destination folder + La carpeta de destino + + + is a subfolder of the source folder + es la misma que la carpeta de origen + + + Skip + Omitir + + + Cancel + Cancelar + + + Settings + Ajustes - \ No newline at end of file + diff --git a/Files/MultilingualResources/Files.fr-FR.xlf b/Files/MultilingualResources/Files.fr-FR.xlf index 95a2fa9d7d80..faed07f050bd 100644 --- a/Files/MultilingualResources/Files.fr-FR.xlf +++ b/Files/MultilingualResources/Files.fr-FR.xlf @@ -67,8 +67,9 @@ Soumettre un commentaire - Submit an issue report to provide the developers with information - Envoyez un rapport d'incident aux développeurs avec des informations + Send the developers an issue report with more information + Envoyez un rapport d'incident aux développeurs avec des informations + Please verify the translation’s accuracy as the source string was updated after it was translated. Third Party Licenses @@ -91,8 +92,9 @@ Format de la date - Theme - Thème + App theme + Thème + Please verify the translation’s accuracy as the source string was updated after it was translated. Appearance @@ -114,10 +116,6 @@ Files and Folders Fichiers et dossiers - - Settings - Paramètres - About À propos @@ -411,8 +409,8 @@ Image bitmap - Text Documnet - Document Texte + Text Document + Text Document List View @@ -426,6 +424,158 @@ Settings Settings + + MD5Hash: + MD5Hash: + + + This action cannot be done + This action cannot be done + + + The destination folder + The destination folder + + + is a subfolder of the source folder + is a subfolder of the source folder + + + Skip + Skip + + + Cancel + Cancel + + + Name + Name + + + Date modified + Date modified + + + Type + Type + + + Size + Size + + + Welcome to Files + Welcome to Files + + + Grant Permission + Grant Permission + + + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + + + File folder + File folder + + + Enter an item name + Enter an item name + + + Enter an item name without an extension + Enter an item name without an extension + + + Set Name + Set Name + + + Cancel + Cancel + + + New tab + New tab + + + Windows default + Windows default + + + Light + Light + + + Dark + Dark + + + Application + Application + + + System + System + + + New Folder + New Folder + + + New Text Document + New Text Document + + + New Bitmap Image + New Bitmap Image + + + This folder is empty. + This folder is empty. + + + Back + Back + + + Forward + Forward + + + Up + Up + + + Refresh + Refresh + + + Create a new item + Create a new item + + + Search + Search + + + More options + More options + + + Drives + Drives + + + File + File + + + Settings + Settings + diff --git a/Files/MultilingualResources/Files.nl-NL.xlf b/Files/MultilingualResources/Files.nl-NL.xlf index ac3aa50fa992..b6a4f90bef2b 100644 --- a/Files/MultilingualResources/Files.nl-NL.xlf +++ b/Files/MultilingualResources/Files.nl-NL.xlf @@ -67,8 +67,9 @@ Verstuur Feedback - Submit an issue report to provide the developers with information - Verzend een Issue Report naar de ontwikkelaars + Send the developers an issue report with more information + Verzend een Issue Report naar de ontwikkelaars + Please verify the translation’s accuracy as the source string was updated after it was translated. Third Party Licenses @@ -91,8 +92,9 @@ Datum formaat - Theme - Thema + App theme + Thema + Please verify the translation’s accuracy as the source string was updated after it was translated. Appearance @@ -118,10 +120,6 @@ Flags Vlaggen - - Settings - Instellingen - About Over @@ -411,8 +409,8 @@ Bitmap Image - Text Documnet - Text Documnet + Text Document + Text Document List View @@ -426,6 +424,158 @@ Settings Settings + + Name + Name + + + Date modified + Date modified + + + Type + Type + + + Size + Size + + + Welcome to Files + Welcome to Files + + + Grant Permission + Grant Permission + + + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + + + File folder + File folder + + + Enter an item name + Enter an item name + + + Enter an item name without an extension + Enter an item name without an extension + + + Set Name + Set Name + + + Cancel + Cancel + + + New tab + New tab + + + Windows default + Windows default + + + Light + Light + + + Dark + Dark + + + Application + Application + + + System + System + + + New Folder + New Folder + + + New Text Document + New Text Document + + + New Bitmap Image + New Bitmap Image + + + This folder is empty. + This folder is empty. + + + Back + Back + + + Forward + Forward + + + Up + Up + + + Refresh + Refresh + + + Create a new item + Create a new item + + + Search + Search + + + More options + More options + + + Drives + Drives + + + File + File + + + MD5Hash: + MD5Hash: + + + This action cannot be done + This action cannot be done + + + The destination folder + The destination folder + + + is a subfolder of the source folder + is a subfolder of the source folder + + + Skip + Skip + + + Cancel + Cancel + + + Settings + Settings + diff --git a/Files/MultilingualResources/Files.pl-PL.xlf b/Files/MultilingualResources/Files.pl-PL.xlf index e4aa55945587..2545e9e8088c 100644 --- a/Files/MultilingualResources/Files.pl-PL.xlf +++ b/Files/MultilingualResources/Files.pl-PL.xlf @@ -67,8 +67,9 @@ Prześlij opinię - Submit an issue report to provide the developers with information - Wyślij raport o problemie prosto do developera aplikacji + Send the developers an issue report with more information + Wyślij raport o problemie prosto do developera aplikacji + Please verify the translation’s accuracy as the source string was updated after it was translated. Third Party Licenses @@ -91,8 +92,9 @@ Format daty - Theme - Motyw + App theme + Motyw + Please verify the translation’s accuracy as the source string was updated after it was translated. Appearance @@ -118,10 +120,6 @@ Flags Flags - - Settings - Ustawienia - About O programie @@ -411,7 +409,7 @@ Obraz - mapa bitowa - Text Documnet + Text Document Dokument tekstowy @@ -426,6 +424,158 @@ Settings Settings + + Name + Name + + + Date modified + Date modified + + + Type + Type + + + Size + Size + + + Welcome to Files + Welcome to Files + + + Grant Permission + Grant Permission + + + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + + + File folder + File folder + + + Enter an item name + Enter an item name + + + Enter an item name without an extension + Enter an item name without an extension + + + Set Name + Set Name + + + Cancel + Cancel + + + New tab + New tab + + + Windows default + Windows default + + + Light + Light + + + Dark + Dark + + + Application + Application + + + System + System + + + New Folder + New Folder + + + New Text Document + New Text Document + + + New Bitmap Image + New Bitmap Image + + + This folder is empty. + This folder is empty. + + + Back + Back + + + Forward + Forward + + + Up + Up + + + Refresh + Refresh + + + Create a new item + Create a new item + + + Search + Search + + + More options + More options + + + Drives + Drives + + + File + File + + + MD5Hash: + MD5Hash: + + + This action cannot be done + This action cannot be done + + + The destination folder + The destination folder + + + is a subfolder of the source folder + is a subfolder of the source folder + + + Skip + Skip + + + Cancel + Cancel + + + Settings + Settings + diff --git a/Files/MultilingualResources/Files.ru-RU.xlf b/Files/MultilingualResources/Files.ru-RU.xlf index 7be30ceb3ee5..03d93ad1e81b 100644 --- a/Files/MultilingualResources/Files.ru-RU.xlf +++ b/Files/MultilingualResources/Files.ru-RU.xlf @@ -1,6 +1,6 @@  - +
@@ -12,11 +12,11 @@ Item Name - Имя + Имя: Path: - Путь: + Расположение: Size: @@ -28,7 +28,7 @@ Modified: - Измененo: + Изменено: Clear all items @@ -36,11 +36,11 @@ Files and folders you've previously accessed will show up here - Файлы и папки, с которыми вы ранее взаимодействовали будут отображатся сдесь + Файлы и папки, с которыми вы ранее взаимодействовали будут отображаться здесь Open file location - Открыть разположение файла + Открыть расположение файла Remove this item @@ -67,8 +67,9 @@ Отправить отзыв - Submit an issue report to provide the developers with information - Отправить отчет о проблеме, чтобы предоставить разработчикам больше информации о ней + Send the developers an issue report with more information + Отправить отчет о проблеме, чтобы предоставить разработчикам больше информации о ней + Please verify the translation’s accuracy as the source string was updated after it was translated. Third Party Licenses @@ -91,8 +92,9 @@ Формат даты - Theme - Тема + App theme + Тема + Please verify the translation’s accuracy as the source string was updated after it was translated. Appearance @@ -114,10 +116,6 @@ Files and Folders Файлы и папки - - Settings - Параметры - About О приложении @@ -152,7 +150,7 @@ Open a new tab - Откроть новую вкладку + Открыть новую вкладку Open a specific page or pages @@ -162,62 +160,10 @@ On Startup При запуске - - Desktop - Рабочий стол - - - Set custom desktop location - Задать свое расположение рабочего стола - - - Documents - Документы - - - Set custom documents location - Задать свое расположение документов - - - Загрузки - Загрузки - - - Set custom downloads location - Задать свое расположение загрузок - - - Music - Музыка - - - Set custom music location - Задать свое расположение музыки - - - OneDrive - OneDrive - - - Set custom OneDrive location - Задать свое расположение OneDrive - - - Pictures - Изображения - - - Set custom pictures location - Задать свое расположение изображений - Pin OneDrive to the sidebar Закрепить OneDrive в боковой панели - - Replace common locations - Заменить стандартные пути - Terminal Applications Стандартный терминал @@ -226,14 +172,6 @@ Preferences Предпочтения - - Video - Видео - - - Set custom video location - Задать свое расположение для видео - Unpin from Sidebar Открепить от боковой панели @@ -242,238 +180,403 @@ Flags Flags - - File - Файл - - - Home - Главная - - - Share - Поделиться - - - View - Вид - - - Closes this window - Закрыть это окно - - - Close Files - Закрыть Files - Delete Item(s) - Удалить элемент(ы) + Удалить элемент(ы) Cancel - Отменить + Отменить Delete - Удалить + Удалить Are you sure you want to delete the selected item(s)? - Вы уверены, что хотите удалить выбранный элемент(ы)? + Вы уверены, что хотите удалить выбранный элемент(ы)? Permanently delete - Удалить безвозвратно + Удалить безвозвратно Show a confirmation dialog when deleting files or folders - Показать диалог при удалении файлов или папок + Показать диалог при удалении файлов или папок Desktop - Рабочий стол + Рабочий стол Documents - Документы + Документы Downloads - Загрузки + Загрузки Home - Главная + Главная Music - Музыка + Музыка Pictures - Изображения + Изображения Videos - Видео + Видео Cancel - Отмена + Отмена Extract - Распаковать + Распаковать New Tab - Новая вкладка + Новая вкладка New Window - Новое окно + Новое окно Copy Path - Скопировать путь + Скопировать путь Paste - Вставить + Вставить Open in Terminal... - Открыть в терминале... + Открыть в терминале... Pick a location to extract this compressed archive to. You'll need to stay in the current folder until we're done. A new tab will open up with the extracted items. - Выберите куда распаковать архив. Вам нужно оставаться в текущей папке, пока операция выполняется. Так же будет открыта новая вкладка с распаковаными элементами. + Выберите куда распаковать архив. Вам нужно оставаться в текущей папке, пока операция выполняется. Так же будет открыта новая вкладка с распакованными элементами. Browse - Просматривать + Просматривать Enter a path - Введитие путь + Введите путь Search - Поиск + Поиск Sort by - Сортировка + Сортировка Name - Имя + Имя Date modified - Дата изменения + Дата изменения Type - Тип + Тип Size - Размер + Размер Ascending - По возрастанию + По возрастанию Descending - По убыванию + По убыванию Refresh - Обновить + Обновить Paste - Вставить + Вставить Open in Terminal... - Открыть в терминале... + Открыть в терминале... New - Новый + Создать Folder - Папка + Папку Bitmap Image - Изображение + Изображение Text Document - Текстовый документ + Текстовый документ Properties - Свойства + Свойства Extract - Извлечь + Извлечь Open with... - Открыть с помощью... + Открыть с помощью... Open in new tab - Открыть в новой вкладке + Открыть в новой вкладке Open in new window - Открыть в новом окне + Открыть в новом окне Set as desktop background - Применить как фон рабочего стола + Применить как фон рабочего стола Share - Поделится + Поделится Cut - Вырезать + Вырезать Copy - Скопировать + Скопировать Delete - Удалить + Удалить Rename - Переименовать + Переименовать Pin to sidebar - Закрепить в боковой панели + Закрепить в боковой панели Properties - Cвойства + Свойства QuickLook QuickLook + + Extract Compressed Archive + Извлечь архив + + + Folder + Папку + + + Bitmap Image + Изображение + + + Text Document + Текстовый документ + + + Name + Имя + + + Date modified + Дата изменения + + + Type + Тип + + + Size + Размер + + + Select All + Выделить все + + + Clear Selection + Очистить выделение + + + List View + Таблица + + + Grid View + Сетка + + + Settings + Параметры + + + Welcome to Files + Добро пожаловать в Files + + + Grant Permission + Предоставить разрешение + + + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + Для начала вам нужно дать нам разрешение на отображение ваших файлов. Откроется страница настроек, где вы можете предоставить нам это разрешение. Вам нужно будет снова открыть приложение после завершения. + + + File folder + Папка с файлами + + + Enter an item name + Введите название + + + Enter an item name without an extension + Введите название без расширения + + + Set Name + Сохранить + + + Cancel + Отмена + + + New tab + Новая вкладка + + + Windows default + Системная + Please verify the translation’s accuracy as the source string was updated after it was translated. + + + Light + Светлая + + + Dark + Темная + + + Application + По умолчанию + + + System + Системный + + + New Folder + Новая папка + + + New Text Document + Новый текстовый документ + + + New Bitmap Image + Рисунок + + + This folder is empty. + Эта папка пуста. + + + Back + Назад + + + Forward + Вперед + + + Up + Вверх + + + Refresh + Обновить + + + Create a new item + Создать + + + Search + Поиск + + + More options + Еще + + + Drives + Диски + + + File + Файл + + + This action cannot be done + This action cannot be done + + + The destination folder + The destination folder + + + is a subfolder of the source folder + is a subfolder of the source folder + + + Skip + Skip + + + Cancel + Cancel + + + MD5Hash: + MD5Hash: + + + Settings + Settings +
diff --git a/Files/MultilingualResources/Files.tr-TR.xlf b/Files/MultilingualResources/Files.tr-TR.xlf new file mode 100644 index 000000000000..93196112accc --- /dev/null +++ b/Files/MultilingualResources/Files.tr-TR.xlf @@ -0,0 +1,582 @@ + + + +
+ +
+ + + + Created: + Düzenlendiği Tarih: + + + Item Name + Öğe Adı + + + Path: + Yolu: + + + Size: + Boyut: + + + Item type: + Öğe Tipi: + + + Modified: + Değiştirilme Tarihi: + + + Clear all items + Bütün öğeleri temizle + + + Files and folders you've previously accessed will show up here + Daha önce eriştiğiniz dosya ve klasörler burada görünecek + + + Open file location + Dosya konumunu aç + + + Remove this item + Bu öğeyi sil + + + Recent items + Son öğeler + + + Files UWP + Files UWP + + + License: + Lisans: + + + Special thanks to: + Özel teşekkürler: + + + Submit Feedback + Geri Bildirim Gönder + + + Send the developers an issue report with more information + Geliştiricilere bilgi sağlamak için bir sorun raporu gönderin + Please verify the translation’s accuracy as the source string was updated after it was translated. + + + Third Party Licenses + Üçüncü Şahıs Lisansları + + + About + Hakkında + + + Website: + Web Sitesi: + + + Acrylic sidebar + Akrilik kenar çubuğu + + + Date format + Tarih formatı + + + App theme + Tema + Please verify the translation’s accuracy as the source string was updated after it was translated. + + + Appearance + Görünüm + + + Show drive letters + Sürücü harflerini göster + + + Show extensions for known file types + Bilinen dosya türleri için uzantıları göster + + + Show hidden files, folders, and drives + Gizli dosyaları, klasörleri ve sürücüleri göster + + + Files and Folders + Dosyalar ve Klasörler + + + Flags + Bayraklar + + + About + Hakkında + + + Appearance + Görünüm + + + Files and Folders + Dosyalar ve Klasörler + + + On Startup + Başlangıçta + + + Page Layouts + Sayfa Düzenleri + + + Preferences + Tercihler + + + Search + Ara + + + Continue where you left off + Kaldığınız yerden devam edin + + + Open a new tab + Yeni bir sekmede aç + + + Open a specific page or pages + Belirli bir sayfayı veya sayfaları açma + + + On Startup + Başlangıçta + + + Pin OneDrive to the sidebar + OneDrive'ı kenar çubuğuna sabitle + + + Terminal Applications + Terminal Uygulamaları + + + Preferences + Özellikler + + + Unpin from Sidebar + Kenar Çubuğundan sabitlemeyi kaldır + + + Delete Item(s) + Öğeleri Sil + + + Cancel + İptal + + + Delete + Sil + + + Are you sure you want to delete the selected item(s)? + Seçilen öğeyi silmek istediğinizden emin misiniz? + + + Permanently delete + Kalıcı Olarak Sil + + + Show a confirmation dialog when deleting files or folders + Dosya veya klasörleri silerken bir onay iletişim kutusu göster + + + Desktop + Masaüstü + + + Documents + Belgeler + + + Downloads + İndirilenler + + + Home + Ana Dosya + + + Music + Müzikler + + + Pictures + Resimler + + + Videos + Videolar + + + New Tab + Yeni Sekme + + + Extract Compressed Archive + Sıkıştırılmış Arşivi Çıkart + + + Cancel + İptal + + + Extract + Çıkart + + + Pick a location to extract this compressed archive to. You'll need to stay in the current folder until we're done. A new tab will open up with the extracted items. + Bu sıkıştırılmış arşivi çıkarmak için bir konum seçin. İşlem tamamlanana kadar geçerli klasörde kalmanız gerekir. Çıkarılan öğelerle yeni bir sekme açılacaktır. + + + Browse + Gözat + + + Sort by + Göre Sırala + + + Name + Adı + + + Date modified + Değiştirilme Tarihi + + + Type + Tipi + + + Size + Boyutu + + + Ascending + Yükselen + + + Descending + Azalan + + + Refresh + Yenile + + + Paste + Yapıştır + + + Open in Terminal... + Terminalde Aç... + + + New + Yeni + + + Folder + Dosya + + + Bitmap Image + Bit Eşlem Resmi + + + Text Document + Metin Belgesi + + + Properties + Özellikler + + + Extract + Sil + + + Open with... + Birlikte Aç... + + + Open in new tab + Yeni bir sekmede aç + + + Open in new window + Yeni bir pencerede aç + + + Set as desktop background + Masaüstü arkaplanı olarak ayarla + + + Share + Paylaş + + + Cut + Kes + + + Copy + Kopyala + + + Delete + Sil + + + Rename + Yeniden Adlandır + + + Pin to sidebar + Kenar çubuğa sabitle + + + Properties + Özellikler + + + QuickLook + QuickLook + + + New Window + Yeni Pencere + + + Copy Path + Kopyalama Yolu + + + Paste + Yapıştır + + + Open in Terminal... + Terminalde Aç... + + + Enter a path + Bir yol girin + + + Search + Ara + + + Select All + Hepsini seç + + + Clear Selection + Seçimi Temizle + + + Folder + Dosya + + + Bitmap Image + Bit Eşlem Resmi + + + Text Document + Metin Belgesi + + + List View + Liste Görünümü + + + Grid View + Izgara Görünümü + + + Settings + Özellikler + + + Name + Name + + + Date modified + Date modified + + + Type + Type + + + Size + Size + + + Welcome to Files + Welcome to Files + + + Grant Permission + Grant Permission + + + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + + + File folder + File folder + + + Enter an item name + Enter an item name + + + Enter an item name without an extension + Enter an item name without an extension + + + Set Name + Set Name + + + Cancel + Cancel + + + New tab + New tab + + + Windows default + Windows default + + + Light + Light + + + Dark + Dark + + + Application + Application + + + System + System + + + New Folder + New Folder + + + New Text Document + New Text Document + + + New Bitmap Image + New Bitmap Image + + + This folder is empty. + This folder is empty. + + + Back + Back + + + Forward + Forward + + + Up + Up + + + Refresh + Refresh + + + Create a new item + Create a new item + + + Search + Search + + + More options + More options + + + Drives + Drives + + + File + File + + + This action cannot be done + This action cannot be done + + + The destination folder + The destination folder + + + is a subfolder of the source folder + is a subfolder of the source folder + + + Skip + Skip + + + Cancel + Cancel + + + MD5Hash: + MD5Hash: + + + Settings + Settings + + + +
+
\ No newline at end of file diff --git a/Files/MultilingualResources/Files.uk-UA.xlf b/Files/MultilingualResources/Files.uk-UA.xlf new file mode 100644 index 000000000000..e3ee88764956 --- /dev/null +++ b/Files/MultilingualResources/Files.uk-UA.xlf @@ -0,0 +1,583 @@ + + + +
+ +
+ + + + Delete Item(s) + Видалити елемент(и) + + + Cancel + Скасувати + + + Delete + Видалити + + + Are you sure you want to delete the selected item(s)? + Ви впевнені, що хочете видалити обрані елементи? + + + Permanently delete + Остаточно видалити + + + Extract Compressed Archive + Розархівувати + + + Cancel + Скасувати + + + Extract + Розархівувати + + + New Tab + Створити вкладку + + + New Window + Створити вікно + + + Folder + Папку + + + Bitmap Image + Зображення + + + Text Document + Текстовий документ + + + Copy Path + Копіювати шлях + + + Paste + Вставити + + + Name + Ім’я + + + Date modified + Дата зміни + + + Type + Тип + + + Size + Розмір + + + Open in Terminal... + Відкрити через термінал... + + + Created: + Створено: + + + Item Name + Ім’я + + + Pick a location to extract this compressed archive to. You'll need to stay in the current folder until we're done. A new tab will open up with the extracted items. + Виберіть місце для вилучення цього стисненого архіву. Вам потрібно буде залишитися в поточній папці, поки ми не закінчимо. З відкритими елементами відкриється нова вкладка. + + + Browse + Огляд + + + Path: + Шлях: + + + Size: + Розмір: + + + Item type: + Тип: + + + Select All + Виділити все + + + Clear Selection + Очистити виділення + + + List View + Список + + + Grid View + Таблиця + + + Modified: + Змінено + + + Clear all items + Очистити все + + + Enter a path + Введіть шлях + + + Search + Пошук + + + Files and folders you've previously accessed will show up here + Тут відображатимуться файли та папки, до яких ви раніше отримували доступ + + + Open file location + Відкрити розташування файлу + + + Remove this item + Видалити цей елемент + + + Recent items + Останні файли + + + Files UWP + Files UWP + + + License: + Ліцензія + + + Special thanks to: + Особлива подяка: + + + Submit Feedback + Надіслати відгук + + + Send the developers an issue report with more information + Надішліть звіт про проблему, щоб надати розробникам інформацію + Please verify the translation’s accuracy as the source string was updated after it was translated. + + + Third Party Licenses + Third Party Licenses + + + About + Про програму + + + Website: + Веб-сайт + + + Acrylic sidebar + Бокова панель з ефектом акрила + + + Date format + Формат дати + + + App theme + Тема + Please verify the translation’s accuracy as the source string was updated after it was translated. + + + Appearance + Оформлення + + + Show drive letters + Відображати букви дисків + + + Show extensions for known file types + Показати розширення для відомих типів файлів + + + Show hidden files, folders, and drives + Відображати приховані файли, папки й диски + + + Files and Folders + Файли та папки + + + Flags + Flags + + + About + Про програму + + + Appearance + Оформлення + + + Files and Folders + Файли та папки + + + On Startup + При запуску + + + Page Layouts + Структура сторінки + + + Preferences + Налаштування + + + Search + Пошук + + + Continue where you left off + Продовжити, де ви зупинилися + + + Open a new tab + Відкрити нову вкладку + + + Open a specific page or pages + Відкрити певну сторінку або сторінки + + + On Startup + При запуску + + + Pin OneDrive to the sidebar + Закріпити OneDrive на бічній панелі + + + Show a confirmation dialog when deleting files or folders + Показувати діалогове вікно підтвердження під час видалення файлів або папок + + + Terminal Applications + Стандартний термінал + + + Preferences + Налаштування + + + Desktop + Робочий стіл + + + Documents + Документи + + + Downloads + Завантаження + + + Home + Головна + + + Music + Музика + + + Pictures + Зображення + + + Unpin from Sidebar + Відкріпити від бічної панелі + + + Videos + Відео + + + Settings + Налаштування + + + Sort by + Сортування + + + Name + Ім’я + + + Date modified + Дата зміни + + + Type + Тип + + + Size + Розмір + + + Ascending + За зростанням + + + Descending + За спаданням + + + Refresh + Оновити + + + Paste + Вставити + + + Open in Terminal... + Відкрити через термінал... + + + New + Створити + + + Folder + Папку + + + Bitmap Image + Зображення + + + Text Document + Текстовий документ + + + Properties + Властивості + + + Extract + Вилучити + + + Open with... + Відкрити за допомогою... + + + Open in new tab + Відкрити на новій вкладці + + + Open in new window + Відкрити в новому вікні + + + Set as desktop background + Установити як тло робочого стола + + + Share + Поділитися + + + Cut + Вирізати + + + Copy + Копіювати + + + Delete + Видалити + + + Rename + Перейменувати + + + Pin to sidebar + Закріпити в бічній панелі + + + Properties + Властивості + + + QuickLook + QuickLook + + + Welcome to Files + Ласкаво просимо до Files + + + Grant Permission + Надати дозвіл + + + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + Для початку вам потрібно надати нам дозвіл на показ ваших файлів. Це відкриє сторінку налаштувань, де ви можете надати нам цей дозвіл. Вам потрібно буде знову відкрити додаток після завершення. + + + File folder + Папка з файлами + + + Enter an item name + Введіть назву + + + Enter an item name without an extension + Введіть назву елемента без розширення + + + Set Name + Зберегти + + + Cancel + Скасувати + + + New tab + Нова вкладка + + + Windows default + Системна + Please verify the translation’s accuracy as the source string was updated after it was translated. + + + Light + Світла + + + Dark + Темна + + + Application + За замовчуванням + + + System + Системний + + + New Folder + Нова папка + + + New Text Document + Новий текстовий документ + + + New Bitmap Image + Новий точковий рисунок + + + This folder is empty. + Ця папка порожня. + + + Back + Назад + + + Forward + Вперед + + + Up + Вгору + + + Refresh + Оновити + + + Create a new item + Створити + + + Search + Пошук + + + More options + Більше + + + Drives + Диски + + + File + Файл + + + This action cannot be done + This action cannot be done + + + The destination folder + The destination folder + + + is a subfolder of the source folder + is a subfolder of the source folder + + + Skip + Skip + + + Cancel + Cancel + + + MD5Hash: + MD5Hash: + + + Settings + Settings + + + +
+
\ No newline at end of file diff --git a/Files/MultilingualResources/Files.zh-Hans.xlf b/Files/MultilingualResources/Files.zh-Hans.xlf index 8059547b407f..2f6254fd2f40 100644 --- a/Files/MultilingualResources/Files.zh-Hans.xlf +++ b/Files/MultilingualResources/Files.zh-Hans.xlf @@ -67,8 +67,9 @@ 提交反馈 - Submit an issue report to provide the developers with information - 向开发人员提交问题报告 + Send the developers an issue report with more information + 向开发人员提交问题报告 + Please verify the translation’s accuracy as the source string was updated after it was translated. Third Party Licenses @@ -91,8 +92,9 @@ 日期格式 - Theme - 主题 + App theme + 主题 + Please verify the translation’s accuracy as the source string was updated after it was translated. Appearance @@ -118,10 +120,6 @@ Flags 标记 - - Settings - 设置 - About 关于 @@ -260,35 +258,35 @@ Sort by - 排序方式 + 排序方式 Name - 名称 + 名称 Date modified - 修改日期 + 修改日期 Type - 类型 + 类型 Size - 大小 + 大小 Ascending - 升序 + 升序 Descending - 降序 + 降序 Refresh - 刷新 + 刷新 Paste @@ -296,15 +294,15 @@ Open in Terminal... - 在终端中打开... + 在终端中打开... New - 新建 + 新建 Folder - 文件夹 + 文件夹 Bitmap Image @@ -312,19 +310,19 @@ Text Document - 文本文档 + 文本文档 Properties - 属性 + 属性 Extract - 提取 + 提取 Open with... - 打开方式... + 打开方式... Open in new tab @@ -332,39 +330,39 @@ Open in new window - 在新窗口中打开 + 在新窗口中打开 Set as desktop background - 设为桌面背景 + 设为桌面背景 Share - 共享 + 共享 Cut - 剪切 + 剪切 Copy - 复制 + 复制 Delete - 删除 + 删除 Rename - 重命名 + 重命名 Pin to sidebar - 固定到侧边栏 + 固定到侧边栏 Properties - 属性 + 属性 QuickLook @@ -376,7 +374,7 @@ Copy Path - 复制路径 + 复制路径 Paste @@ -384,15 +382,15 @@ Open in Terminal... - 在终端中打开... + 在终端中打开... Enter a path - 输入路径 + 输入路径 Search - 搜索 + 搜索 Select All @@ -404,15 +402,15 @@ Folder - 文件夹 + 文件夹 Bitmap Image Bitmap 位图 - Text Documnet - 文本文档 + Text Document + 文本文档 List View @@ -423,6 +421,158 @@ 平铺 + Settings + 设置 + + + Name + 名称 + + + Date modified + 修改日期 + + + Type + 类型 + + + Size + 大小 + + + Welcome to Files + 欢迎使用 Files + + + Grant Permission + 授予权限 + + + To get started, you'll need to grant us permission to display your files. This will open a Settings page where you can grant us this permission. You'll need to reopen the app once completed. + 开始使用前,请授予我们权限以访问您的文件系统。Windows 设置将会被打开,然后您可以选择授予权限。您需要在完成设置后重启应用程序。 + + + File folder + 文件夹 + + + Enter an item name + 输入项目名称 + + + Enter an item name without an extension + 输入无扩展名的项目名称 + + + Set Name + 设置名称 + + + Cancel + 取消 + + + New tab + 新标签页 + + + Windows default + Windows default + + + Light + 浅色 + + + Dark + 深色 + + + Application + 应用程序 + + + System + 系统 + + + New Folder + 新建 文件夹 + + + New Text Document + 新建 文本文档 + + + New Bitmap Image + 新建 Bitmap 位图 + + + This folder is empty. + 该文件夹为空。 + + + Back + 返回 + + + Forward + 前进 + + + Up + 上移 + + + Refresh + 刷新 + + + Create a new item + 新建项目 + + + Search + 搜索 + + + More options + 更多选项 + + + Drives + 驱动器 + + + File + 文件 + + + MD5Hash: + MD5Hash: + + + This action cannot be done + 无法完成该操作 + + + The destination folder + 目标文件夹 + + + is a subfolder of the source folder + 是源文件夹的子文件夹 + + + Skip + 跳过 + + + Cancel + 取消 + + Settings Settings diff --git a/Files/Navigation/NavigationActions.cs b/Files/Navigation/NavigationActions.cs index 73278a3af53f..090429435d89 100644 --- a/Files/Navigation/NavigationActions.cs +++ b/Files/Navigation/NavigationActions.cs @@ -11,10 +11,10 @@ public class NavigationActions { public async static void Refresh_Click(object sender, RoutedEventArgs e) { - await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => + await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { var ContentOwnedViewModelInstance = App.CurrentInstance.ViewModel; - ContentOwnedViewModelInstance.AddItemsToCollectionAsync(ContentOwnedViewModelInstance.WorkingDirectory); + await ContentOwnedViewModelInstance.RefreshItems(); }); } diff --git a/Files/Properties.xaml b/Files/Properties.xaml index a6142dd30b66..49693f803406 100644 --- a/Files/Properties.xaml +++ b/Files/Properties.xaml @@ -1,65 +1,70 @@  - - - + + + - + + x:Name="Icon" + Width="40" + Height="40" + Margin="0,0" + HorizontalAlignment="Stretch" + VerticalAlignment="Stretch"> + x:Name="FolderGlyphIcon" + HorizontalAlignment="Stretch" + VerticalAlignment="Stretch" + x:Load="{x:Bind ItemProperties.LoadFolderGlyph, Mode=OneWay}" + FontFamily="Segoe MDL2 Assets" + FontSize="36" + Foreground="#ffe793" + Glyph="" /> + x:Name="EmptyImageIcon" + HorizontalAlignment="Stretch" + VerticalAlignment="Stretch" + x:Load="{x:Bind ItemProperties.LoadUnknownTypeGlyph, Mode=OneWay}" + FontFamily="Segoe MDL2 Assets" + FontSize="36" + Glyph="" /> + x:Name="itemIcon" + HorizontalAlignment="Stretch" + VerticalAlignment="Stretch" + x:Load="{x:Bind ItemProperties.LoadFileIcon, Mode=OneWay}" + Source="{x:Bind ItemProperties.FileIconSource, Mode=OneWay}" /> + x:Name="itemFileName" + x:Uid="PropertiesItemFileName" + Grid.Column="1" + Width="300" + Margin="0" + VerticalAlignment="Center" + BorderThickness="1" + IsReadOnly="True" + Text="{x:Bind ItemProperties.ItemName, Mode=OneWay}" /> - + @@ -71,7 +76,7 @@ x:Name="itemTypeValue" Grid.Column="1" IsTextSelectionEnabled="True" - Text="{x:Bind ItemProperties.ItemType,Mode=OneWay}" /> + Text="{x:Bind ItemProperties.ItemType, Mode=OneWay}" /> @@ -83,7 +88,7 @@ x:Name="itemPathValue" Grid.Column="2" IsTextSelectionEnabled="True" - Text="{x:Bind ItemProperties.ItemPath,Mode=OneWay}" + Text="{x:Bind ItemProperties.ItemPath, Mode=OneWay}" TextWrapping="Wrap" /> @@ -96,7 +101,19 @@ x:Name="itemSizeValue" Grid.Column="3" IsTextSelectionEnabled="True" - Text="{x:Bind ItemProperties.ItemSize,Mode=OneWay}" /> + Text="{x:Bind ItemProperties.ItemSize, Mode=OneWay}" /> + + + + + + + + @@ -109,7 +126,7 @@ x:Name="itemCreatedTimestampValue" Grid.Column="4" IsTextSelectionEnabled="True" - Text="{x:Bind ItemProperties.ItemCreatedTimestamp,Mode=OneWay}" /> + Text="{x:Bind ItemProperties.ItemCreatedTimestamp, Mode=OneWay}" /> @@ -121,16 +138,21 @@ x:Name="itemModifiedTimestampValue" Grid.Column="5" IsTextSelectionEnabled="True" - Text="{x:Bind ItemProperties.ItemModifiedTimestamp,Mode=OneWay}" /> + Text="{x:Bind ItemProperties.ItemModifiedTimestamp, Mode=OneWay}" /> - + - - + + -