diff --git a/Flow.Launcher.Core/ExternalPlugins/CommunityPluginSource.cs b/Flow.Launcher.Core/ExternalPlugins/CommunityPluginSource.cs index 6f3b23e1120..841099dd1e2 100644 --- a/Flow.Launcher.Core/ExternalPlugins/CommunityPluginSource.cs +++ b/Flow.Launcher.Core/ExternalPlugins/CommunityPluginSource.cs @@ -73,6 +73,17 @@ public async Task> FetchAsync(CancellationToken token) return null; } } + catch (OperationCanceledException) when (token.IsCancellationRequested) + { + API.LogDebug(ClassName, $"Fetching from {ManifestFileUrl} was cancelled by caller."); + return null; + } + catch (TaskCanceledException) + { + // Likely an HttpClient timeout or external cancellation not requested by our token + API.LogWarn(ClassName, $"Fetching from {ManifestFileUrl} timed out."); + return null; + } catch (Exception e) { if (e is HttpRequestException or WebException or SocketException || e.InnerException is TimeoutException) diff --git a/Flow.Launcher.Core/Flow.Launcher.Core.csproj b/Flow.Launcher.Core/Flow.Launcher.Core.csproj index 5279500619f..1369d7e5d0a 100644 --- a/Flow.Launcher.Core/Flow.Launcher.Core.csproj +++ b/Flow.Launcher.Core/Flow.Launcher.Core.csproj @@ -55,8 +55,8 @@ - - + + diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs b/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs index 435d97ab712..9212dada6de 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs @@ -27,6 +27,7 @@ public class JsonRPCPluginSettings : ISavable private JsonStorage> _storage = null!; + private static readonly double MainGridColumn0MaxWidthRatio = 0.6; private static readonly Thickness SettingPanelMargin = (Thickness)Application.Current.FindResource("SettingPanelMargin"); private static readonly Thickness SettingPanelItemLeftMargin = (Thickness)Application.Current.FindResource("SettingPanelItemLeftMargin"); private static readonly Thickness SettingPanelItemTopBottomMargin = (Thickness)Application.Current.FindResource("SettingPanelItemTopBottomMargin"); @@ -156,7 +157,7 @@ public Control CreateSettingPanel() { if (!NeedCreateSettingPanel()) return null!; - // Create main grid with two columns (Column 1: Auto, Column 2: *) + // Create main grid with two columns (Column 0: Auto, Column 1: *) var mainPanel = new Grid { Margin = SettingPanelMargin, VerticalAlignment = VerticalAlignment.Center }; mainPanel.ColumnDefinitions.Add(new ColumnDefinition() { @@ -200,7 +201,7 @@ public Control CreateSettingPanel() { Text = attributes.Label, VerticalAlignment = VerticalAlignment.Center, - TextWrapping = TextWrapping.WrapWithOverflow + TextWrapping = TextWrapping.Wrap }; // Create a text block for description @@ -211,7 +212,7 @@ public Control CreateSettingPanel() { Text = attributes.Description, VerticalAlignment = VerticalAlignment.Center, - TextWrapping = TextWrapping.WrapWithOverflow + TextWrapping = TextWrapping.Wrap }; desc.SetResourceReference(TextBlock.StyleProperty, "SettingPanelTextBlockDescriptionStyle"); // for theme change @@ -247,7 +248,8 @@ public Control CreateSettingPanel() VerticalAlignment = VerticalAlignment.Center, Margin = SettingPanelItemLeftTopBottomMargin, Text = Settings[attributes.Name] as string ?? string.Empty, - ToolTip = attributes.Description + ToolTip = attributes.Description, + TextWrapping = TextWrapping.Wrap }; textBox.TextChanged += (_, _) => @@ -269,7 +271,8 @@ public Control CreateSettingPanel() VerticalAlignment = VerticalAlignment.Center, Margin = SettingPanelItemLeftMargin, Text = Settings[attributes.Name] as string ?? string.Empty, - ToolTip = attributes.Description + ToolTip = attributes.Description, + TextWrapping = TextWrapping.Wrap }; textBox.TextChanged += (_, _) => @@ -333,7 +336,7 @@ public Control CreateSettingPanel() HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Center, Margin = SettingPanelItemLeftTopBottomMargin, - TextWrapping = TextWrapping.WrapWithOverflow, + TextWrapping = TextWrapping.Wrap, AcceptsReturn = true, Text = Settings[attributes.Name] as string ?? string.Empty, ToolTip = attributes.Description @@ -488,6 +491,8 @@ Settings[attributes.Name] is bool isChecked rowCount++; } + mainPanel.SizeChanged += MainPanel_SizeChanged; + // Wrap the main grid in a user control return new UserControl() { @@ -495,6 +500,28 @@ Settings[attributes.Name] is bool isChecked }; } + private void MainPanel_SizeChanged(object sender, SizeChangedEventArgs e) + { + if (sender is not Grid grid) return; + + var workingWidth = grid.ActualWidth; + + if (workingWidth <= 0) return; + + var constrainedWidth = MainGridColumn0MaxWidthRatio * workingWidth; + + // Set MaxWidth of column 0 and its children + // We must set MaxWidth of its children to make text wrapping work correctly + grid.ColumnDefinitions[0].MaxWidth = constrainedWidth; + foreach (var child in grid.Children) + { + if (child is FrameworkElement element && Grid.GetColumn(element) == 0 && Grid.GetColumnSpan(element) == 1) + { + element.MaxWidth = constrainedWidth; + } + } + } + private static bool NeedSaveInSettings(string type) { return type != "textBlock" && type != "separator" && type != "hyperlink"; diff --git a/Flow.Launcher.Core/Resource/Internationalization.cs b/Flow.Launcher.Core/Resource/Internationalization.cs index 8261feab3d0..983f8b23495 100644 --- a/Flow.Launcher.Core/Resource/Internationalization.cs +++ b/Flow.Launcher.Core/Resource/Internationalization.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -14,7 +14,7 @@ namespace Flow.Launcher.Core.Resource { - public class Internationalization + public class Internationalization : IDisposable { private static readonly string ClassName = nameof(Internationalization); @@ -30,6 +30,7 @@ public class Internationalization private readonly List _languageDirectories = []; private readonly List _oldResources = []; private static string SystemLanguageCode; + private readonly SemaphoreSlim _langChangeLock = new(1, 1); public Internationalization(Settings settings) { @@ -185,20 +186,33 @@ private static Language GetLanguageByLanguageCode(string languageCode) private async Task ChangeLanguageAsync(Language language, bool updateMetadata = true) { - // Remove old language files and load language - RemoveOldLanguageFiles(); - if (language != AvailableLanguages.English) + await _langChangeLock.WaitAsync(); + + try { - LoadLanguage(language); - } + // Remove old language files and load language + RemoveOldLanguageFiles(); + if (language != AvailableLanguages.English) + { + LoadLanguage(language); + } - // Change culture info - ChangeCultureInfo(language.LanguageCode); + // Change culture info + ChangeCultureInfo(language.LanguageCode); - if (updateMetadata) + if (updateMetadata) + { + // Raise event for plugins after culture is set + await Task.Run(UpdatePluginMetadataTranslations); + } + } + catch (Exception e) { - // Raise event for plugins after culture is set - await Task.Run(UpdatePluginMetadataTranslations); + API.LogException(ClassName, $"Failed to change language to <{language.LanguageCode}>", e); + } + finally + { + _langChangeLock.Release(); } } @@ -257,6 +271,7 @@ private void RemoveOldLanguageFiles() { dicts.Remove(r); } + _oldResources.Clear(); } private void LoadLanguage(Language language) @@ -368,5 +383,15 @@ public static void UpdatePluginMetadataTranslations() } #endregion + + #region IDisposable + + public void Dispose() + { + RemoveOldLanguageFiles(); + _langChangeLock.Dispose(); + } + + #endregion } } diff --git a/Flow.Launcher.Core/packages.lock.json b/Flow.Launcher.Core/packages.lock.json index 5e9abc24cf4..b7a00d94d10 100644 --- a/Flow.Launcher.Core/packages.lock.json +++ b/Flow.Launcher.Core/packages.lock.json @@ -13,15 +13,15 @@ }, "FSharp.Core": { "type": "Direct", - "requested": "[9.0.300, )", - "resolved": "9.0.300", - "contentHash": "TVt2J7RCE1KCS2IaONF+p8/KIZ1eHNbW+7qmKF6hGoD4tXl+o07ja1mPtFjMqRa5uHMFaTrGTPn/m945WnDLiQ==" + "requested": "[9.0.303, )", + "resolved": "9.0.303", + "contentHash": "6JlV8aD8qQvcmfoe/PMOxCHXc0uX4lR23u0fAyQtnVQxYULLoTZgwgZHSnRcuUHOvS3wULFWcwdnP1iwslH60g==" }, "Meziantou.Framework.Win32.Jobs": { "type": "Direct", - "requested": "[3.4.3, )", - "resolved": "3.4.3", - "contentHash": "REjInKnQ0OrhjjtSMPQtLtdURctCroB4L8Sd2gjTOYDysklvsdnrStx1tHS7uLv+fSyFF3aazZmo5Ka0v1oz/w==" + "requested": "[3.4.4, )", + "resolved": "3.4.4", + "contentHash": "AivBzH5wM1NHBLehclim+o37SmireP7JxCRUoTilsc/h7LH9+YCPjb6Ig6y0khnQhFcO1P8RHYw4oiR15TGHUg==" }, "Microsoft.IO.RecyclableMemoryStream": { "type": "Direct", @@ -90,8 +90,8 @@ }, "JetBrains.Annotations": { "type": "Transitive", - "resolved": "2024.3.0", - "contentHash": "ox5pkeLQXjvJdyAB4b2sBYAlqZGLh3PjSnP1bQNVx72ONuTJ9+34/+Rq91Fc0dG29XG9RgZur9+NcP4riihTug==" + "resolved": "2025.2.2", + "contentHash": "0X56ZRizuHdrnPpgXjWV7f2tQO1FlQg5O1967OGKnI/4ZRNOK642J8L7brM1nYvrxTTU5TP1yRyXLRLaXLPQ8A==" }, "MemoryPack": { "type": "Transitive", @@ -199,21 +199,21 @@ }, "NLog": { "type": "Transitive", - "resolved": "6.0.1", - "contentHash": "qDWiqy8/xdpZKtHna/645KbalwP86N2NFJEzfqhcv+Si4V2iNaEfR/dCneuF/4+Dcwl3f7jHMXj3ndWYftV3Ug==" + "resolved": "6.0.4", + "contentHash": "Xr+lIk1ZlTTFXEqnxQVLxrDqZlt2tm5X+/AhJbaY2emb/dVtGDiU5QuEtj3gHtwV/SWlP/rJ922I/BPuOJXlRw==" }, "NLog.OutputDebugString": { "type": "Transitive", - "resolved": "6.0.1", - "contentHash": "wwJCQLaHVzuRf8TsXB+EEdrzVvE3dnzCSMQMDgwkw3AXp8VSp3JSVF/Q/H0oEqggKgKhPs13hh3a7svyQr4s3A==", + "resolved": "6.0.4", + "contentHash": "TOP2Ap9BbE98B/l/TglnguowOD0rXo8B/20xAgvj9shO/kf6IJ5M4QMhVxq72mrneJ/ANhHY7Jcd+xJbzuI5PA==", "dependencies": { - "NLog": "6.0.1" + "NLog": "6.0.4" } }, "SharpVectors.Wpf": { "type": "Transitive", - "resolved": "1.8.4.2", - "contentHash": "PNxLkMBJnV8A+6yH9OqOlhLJegvWP/dvh0rAJp2l0kcrR+rB4R2tQ9vhUqka+UilH4atN8T6zvjDOizVyfz2Ng==" + "resolved": "1.8.5", + "contentHash": "WURdBDq5AE8RjKV9pFS7lNkJe81gxja9SaMGE4URq9GJUZ6M+5DGUL0Lm3B0iYW2/Meyowaz4ffGsyW+RBSTtg==" }, "Splat": { "type": "Transitive", @@ -254,14 +254,14 @@ "Ben.Demystifier": "[0.4.1, )", "BitFaster.Caching": "[2.5.4, )", "CommunityToolkit.Mvvm": "[8.4.0, )", - "Flow.Launcher.Plugin": "[4.7.0, )", + "Flow.Launcher.Plugin": "[5.0.0, )", "InputSimulator": "[1.0.4, )", "MemoryPack": "[1.21.4, )", "Microsoft.VisualStudio.Threading": "[17.14.15, )", "NHotkey.Wpf": "[3.0.0, )", - "NLog": "[6.0.1, )", - "NLog.OutputDebugString": "[6.0.1, )", - "SharpVectors.Wpf": "[1.8.4.2, )", + "NLog": "[6.0.4, )", + "NLog.OutputDebugString": "[6.0.4, )", + "SharpVectors.Wpf": "[1.8.5, )", "System.Drawing.Common": "[7.0.0, )", "ToolGood.Words.Pinyin": "[3.1.0.3, )" } @@ -269,7 +269,7 @@ "flow.launcher.plugin": { "type": "Project", "dependencies": { - "JetBrains.Annotations": "[2024.3.0, )" + "JetBrains.Annotations": "[2025.2.2, )" } } } diff --git a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj index c32c3624830..5b4eaf89394 100644 --- a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj +++ b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj @@ -56,24 +56,24 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all - + diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index 64d323de6c5..598347fd21f 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -22,7 +22,7 @@ public static class ImageLoader private static Lock storageLock { get; } = new(); private static BinaryStorage> _storage; private static readonly ConcurrentDictionary GuidToKey = new(); - private static IImageHashGenerator _hashGenerator; + private static ImageHashGenerator _hashGenerator; private static readonly bool EnableImageHash = true; public static ImageSource Image => ImageCache[Constant.ImageIcon, false]; public static ImageSource MissingImage => ImageCache[Constant.MissingImgIcon, false]; @@ -31,7 +31,7 @@ public static class ImageLoader public const int FullIconSize = 256; public const int FullImageSize = 320; - private static readonly string[] ImageExtensions = { ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".ico" }; + private static readonly string[] ImageExtensions = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".ico"]; private static readonly string SvgExtension = ".svg"; public static async Task InitializeAsync() @@ -327,7 +327,7 @@ public static async ValueTask LoadAsync(string path, bool loadFullI return img; } - private static ImageSource LoadFullImage(string path) + private static BitmapImage LoadFullImage(string path) { BitmapImage image = new BitmapImage(); image.BeginInit(); @@ -364,7 +364,7 @@ private static ImageSource LoadFullImage(string path) return image; } - private static ImageSource LoadSvgImage(string path, bool loadFullImage = false) + private static RenderTargetBitmap LoadSvgImage(string path, bool loadFullImage = false) { // Set up drawing settings var desiredHeight = loadFullImage ? FullImageSize : SmallIconSize; diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs index 24584115d8c..9c795f952a9 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomBrowserViewModel.cs @@ -1,11 +1,18 @@ +using System.Text.Json.Serialization; +using CommunityToolkit.Mvvm.DependencyInjection; using Flow.Launcher.Plugin; -using System.Text.Json.Serialization; namespace Flow.Launcher.Infrastructure.UserSettings { public class CustomBrowserViewModel : BaseModel { + // We should not initialize API in static constructor because it will create another API instance + private static IPublicAPI api = null; + private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService(); + public string Name { get; set; } + [JsonIgnore] + public string DisplayName => Name == "Default" ? API.GetTranslation("defaultBrowser_default") : Name; public string Path { get; set; } public string PrivateArg { get; set; } public bool EnablePrivate { get; set; } @@ -26,8 +33,10 @@ public CustomBrowserViewModel Copy() Editable = Editable }; } + + public void OnDisplayNameChanged() + { + OnPropertyChanged(nameof(DisplayName)); + } } } - - - diff --git a/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs index c54c30478b3..2af0bb0e53a 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/CustomExplorerViewModel.cs @@ -1,10 +1,18 @@ -using Flow.Launcher.Plugin; +using System.Text.Json.Serialization; +using CommunityToolkit.Mvvm.DependencyInjection; +using Flow.Launcher.Plugin; -namespace Flow.Launcher.ViewModel +namespace Flow.Launcher.Infrastructure.UserSettings { public class CustomExplorerViewModel : BaseModel { + // We should not initialize API in static constructor because it will create another API instance + private static IPublicAPI api = null; + private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService(); + public string Name { get; set; } + [JsonIgnore] + public string DisplayName => Name == "Explorer" ? API.GetTranslation("fileManagerExplorer") : Name; public string Path { get; set; } public string FileArgument { get; set; } = "\"%d\""; public string DirectoryArgument { get; set; } = "\"%d\""; @@ -21,5 +29,10 @@ public CustomExplorerViewModel Copy() Editable = Editable }; } + + public void OnDisplayNameChanged() + { + OnPropertyChanged(nameof(DisplayName)); + } } } diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs index 0c34020500f..d49cd276a16 100644 --- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs +++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs @@ -9,7 +9,6 @@ using Flow.Launcher.Infrastructure.Storage; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; -using Flow.Launcher.ViewModel; namespace Flow.Launcher.Infrastructure.UserSettings { diff --git a/Flow.Launcher.Infrastructure/Win32Helper.cs b/Flow.Launcher.Infrastructure/Win32Helper.cs index 8117339254d..5d30b740d78 100644 --- a/Flow.Launcher.Infrastructure/Win32Helper.cs +++ b/Flow.Launcher.Infrastructure/Win32Helper.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; @@ -904,5 +904,19 @@ public static void EnableWin32DarkMode(string colorScheme) } #endregion + + #region File / Folder Dialog + + public static string SelectFile() + { + var dlg = new OpenFileDialog(); + var result = dlg.ShowDialog(); + if (result == true) + return dlg.FileName; + + return string.Empty; + } + + #endregion } } diff --git a/Flow.Launcher.Infrastructure/packages.lock.json b/Flow.Launcher.Infrastructure/packages.lock.json index abd250f7c44..47c94d5f6ab 100644 --- a/Flow.Launcher.Infrastructure/packages.lock.json +++ b/Flow.Launcher.Infrastructure/packages.lock.json @@ -25,9 +25,9 @@ }, "Fody": { "type": "Direct", - "requested": "[6.9.2, )", - "resolved": "6.9.2", - "contentHash": "YBHobPGogb0vYhGYIxn/ndWqTjNWZveDi5jdjrcshL2vjwU3gQGyDeI7vGgye+2rAM5fGRvlLgNWLW3DpviS/w==" + "requested": "[6.9.3, )", + "resolved": "6.9.3", + "contentHash": "1CUGgFdyECDKgi5HaUBhdv6k+VG9Iy4OCforGfHyar3xQXAJypZkzymgKtWj/4SPd6nSG0Qi7NH71qHrDSZLaA==" }, "InputSimulator": { "type": "Direct", @@ -58,9 +58,9 @@ }, "Microsoft.Windows.CsWin32": { "type": "Direct", - "requested": "[0.3.183, )", - "resolved": "0.3.183", - "contentHash": "Ze3aE2y7xgzKxEWtNb4SH0CExXpCHr3sbmwnvMiWMzJhWDX/G4Rs5wgg2UNs3VN+qVHh/DkDWLCPaVQv/b//Nw==", + "requested": "[0.3.205, )", + "resolved": "0.3.205", + "contentHash": "U5wGAnyKd7/I2YMd43nogm81VMtjiKzZ9dsLMVI4eAB7jtv5IEj0gprj0q/F3iRmAIaGv5omOf8iSYx2+nE6BQ==", "dependencies": { "Microsoft.Windows.SDK.Win32Docs": "0.1.42-alpha", "Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview", @@ -78,17 +78,17 @@ }, "NLog": { "type": "Direct", - "requested": "[6.0.1, )", - "resolved": "6.0.1", - "contentHash": "qDWiqy8/xdpZKtHna/645KbalwP86N2NFJEzfqhcv+Si4V2iNaEfR/dCneuF/4+Dcwl3f7jHMXj3ndWYftV3Ug==" + "requested": "[6.0.4, )", + "resolved": "6.0.4", + "contentHash": "Xr+lIk1ZlTTFXEqnxQVLxrDqZlt2tm5X+/AhJbaY2emb/dVtGDiU5QuEtj3gHtwV/SWlP/rJ922I/BPuOJXlRw==" }, "NLog.OutputDebugString": { "type": "Direct", - "requested": "[6.0.1, )", - "resolved": "6.0.1", - "contentHash": "wwJCQLaHVzuRf8TsXB+EEdrzVvE3dnzCSMQMDgwkw3AXp8VSp3JSVF/Q/H0oEqggKgKhPs13hh3a7svyQr4s3A==", + "requested": "[6.0.4, )", + "resolved": "6.0.4", + "contentHash": "TOP2Ap9BbE98B/l/TglnguowOD0rXo8B/20xAgvj9shO/kf6IJ5M4QMhVxq72mrneJ/ANhHY7Jcd+xJbzuI5PA==", "dependencies": { - "NLog": "6.0.1" + "NLog": "6.0.4" } }, "PropertyChanged.Fody": { @@ -102,9 +102,9 @@ }, "SharpVectors.Wpf": { "type": "Direct", - "requested": "[1.8.4.2, )", - "resolved": "1.8.4.2", - "contentHash": "PNxLkMBJnV8A+6yH9OqOlhLJegvWP/dvh0rAJp2l0kcrR+rB4R2tQ9vhUqka+UilH4atN8T6zvjDOizVyfz2Ng==" + "requested": "[1.8.5, )", + "resolved": "1.8.5", + "contentHash": "WURdBDq5AE8RjKV9pFS7lNkJe81gxja9SaMGE4URq9GJUZ6M+5DGUL0Lm3B0iYW2/Meyowaz4ffGsyW+RBSTtg==" }, "System.Drawing.Common": { "type": "Direct", @@ -123,8 +123,8 @@ }, "JetBrains.Annotations": { "type": "Transitive", - "resolved": "2024.3.0", - "contentHash": "ox5pkeLQXjvJdyAB4b2sBYAlqZGLh3PjSnP1bQNVx72ONuTJ9+34/+Rq91Fc0dG29XG9RgZur9+NcP4riihTug==" + "resolved": "2025.2.2", + "contentHash": "0X56ZRizuHdrnPpgXjWV7f2tQO1FlQg5O1967OGKnI/4ZRNOK642J8L7brM1nYvrxTTU5TP1yRyXLRLaXLPQ8A==" }, "MemoryPack.Core": { "type": "Transitive", @@ -190,7 +190,7 @@ "flow.launcher.plugin": { "type": "Project", "dependencies": { - "JetBrains.Annotations": "[2024.3.0, )" + "JetBrains.Annotations": "[2025.2.2, )" } } } diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index ae245427947..1ae0b1f5898 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -1,4 +1,4 @@ - + net9.0-windows @@ -68,13 +68,13 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Flow.Launcher.Plugin/packages.lock.json b/Flow.Launcher.Plugin/packages.lock.json index af835c59870..70f71f20d29 100644 --- a/Flow.Launcher.Plugin/packages.lock.json +++ b/Flow.Launcher.Plugin/packages.lock.json @@ -4,15 +4,15 @@ "net9.0-windows7.0": { "Fody": { "type": "Direct", - "requested": "[6.9.2, )", - "resolved": "6.9.2", - "contentHash": "YBHobPGogb0vYhGYIxn/ndWqTjNWZveDi5jdjrcshL2vjwU3gQGyDeI7vGgye+2rAM5fGRvlLgNWLW3DpviS/w==" + "requested": "[6.9.3, )", + "resolved": "6.9.3", + "contentHash": "1CUGgFdyECDKgi5HaUBhdv6k+VG9Iy4OCforGfHyar3xQXAJypZkzymgKtWj/4SPd6nSG0Qi7NH71qHrDSZLaA==" }, "JetBrains.Annotations": { "type": "Direct", - "requested": "[2024.3.0, )", - "resolved": "2024.3.0", - "contentHash": "ox5pkeLQXjvJdyAB4b2sBYAlqZGLh3PjSnP1bQNVx72ONuTJ9+34/+Rq91Fc0dG29XG9RgZur9+NcP4riihTug==" + "requested": "[2025.2.2, )", + "resolved": "2025.2.2", + "contentHash": "0X56ZRizuHdrnPpgXjWV7f2tQO1FlQg5O1967OGKnI/4ZRNOK642J8L7brM1nYvrxTTU5TP1yRyXLRLaXLPQ8A==" }, "Microsoft.SourceLink.GitHub": { "type": "Direct", @@ -26,9 +26,9 @@ }, "Microsoft.Windows.CsWin32": { "type": "Direct", - "requested": "[0.3.183, )", - "resolved": "0.3.183", - "contentHash": "Ze3aE2y7xgzKxEWtNb4SH0CExXpCHr3sbmwnvMiWMzJhWDX/G4Rs5wgg2UNs3VN+qVHh/DkDWLCPaVQv/b//Nw==", + "requested": "[0.3.205, )", + "resolved": "0.3.205", + "contentHash": "U5wGAnyKd7/I2YMd43nogm81VMtjiKzZ9dsLMVI4eAB7jtv5IEj0gprj0q/F3iRmAIaGv5omOf8iSYx2+nE6BQ==", "dependencies": { "Microsoft.Windows.SDK.Win32Docs": "0.1.42-alpha", "Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview", diff --git a/Flow.Launcher.Test/Flow.Launcher.Test.csproj b/Flow.Launcher.Test/Flow.Launcher.Test.csproj index 33479c5a062..11ccff05b05 100644 --- a/Flow.Launcher.Test/Flow.Launcher.Test.csproj +++ b/Flow.Launcher.Test/Flow.Launcher.Test.csproj @@ -39,6 +39,7 @@ + @@ -49,8 +50,8 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Flow.Launcher.Test/Plugins/CalculatorTest.cs b/Flow.Launcher.Test/Plugins/CalculatorTest.cs new file mode 100644 index 00000000000..b075813dbb6 --- /dev/null +++ b/Flow.Launcher.Test/Plugins/CalculatorTest.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using Flow.Launcher.Plugin.Calculator; +using Mages.Core; +using NUnit.Framework; +using NUnit.Framework.Legacy; + +namespace Flow.Launcher.Test.Plugins +{ + [TestFixture] + public class CalculatorPluginTest + { + private readonly Main _plugin; + private readonly Settings _settings = new() + { + DecimalSeparator = DecimalSeparator.UseSystemLocale, + MaxDecimalPlaces = 10, + ShowErrorMessage = false // Make sure we return the empty results when error occurs + }; + private readonly Engine _engine = new(new Configuration + { + Scope = new Dictionary + { + { "e", Math.E }, // e is not contained in the default mages engine + } + }); + + public CalculatorPluginTest() + { + _plugin = new Main(); + + var settingField = typeof(Main).GetField("_settings", BindingFlags.NonPublic | BindingFlags.Instance); + if (settingField == null) + Assert.Fail("Could not find field '_settings' on Flow.Launcher.Plugin.Calculator.Main"); + settingField.SetValue(_plugin, _settings); + + var engineField = typeof(Main).GetField("MagesEngine", BindingFlags.NonPublic | BindingFlags.Static); + if (engineField == null) + Assert.Fail("Could not find static field 'MagesEngine' on Flow.Launcher.Plugin.Calculator.Main"); + engineField.SetValue(null, _engine); + } + + // Basic operations + [TestCase(@"1+1", "2")] + [TestCase(@"2-1", "1")] + [TestCase(@"2*2", "4")] + [TestCase(@"4/2", "2")] + [TestCase(@"2^3", "8")] + // Decimal places + [TestCase(@"10/3", "3.3333333333")] + // Parentheses + [TestCase(@"(1+2)*3", "9")] + [TestCase(@"2^(1+2)", "8")] + // Functions + [TestCase(@"pow(2,3)", "8")] + [TestCase(@"min(1,-1,-2)", "-2")] + [TestCase(@"max(1,-1,-2)", "1")] + [TestCase(@"sqrt(16)", "4")] + [TestCase(@"sin(pi)", "0.0000000000")] + [TestCase(@"cos(0)", "1")] + [TestCase(@"tan(0)", "0")] + [TestCase(@"log10(100)", "2")] + [TestCase(@"log(100)", "2")] + [TestCase(@"log2(8)", "3")] + [TestCase(@"ln(e)", "1")] + [TestCase(@"abs(-5)", "5")] + // Constants + [TestCase(@"pi", "3.1415926536")] + // Complex expressions + [TestCase(@"(2+3)*sqrt(16)-log(100)/ln(e)", "18")] + [TestCase(@"sin(pi/2)+cos(0)+tan(0)", "2")] + // Error handling (should return empty result) + [TestCase(@"10/0", "")] + [TestCase(@"sqrt(-1)", "")] + [TestCase(@"log(0)", "")] + [TestCase(@"invalid_expression", "")] + public void CalculatorTest(string expression, string result) + { + ClassicAssert.AreEqual(GetCalculationResult(expression), result); + } + + private string GetCalculationResult(string expression) + { + var results = _plugin.Query(new Plugin.Query() + { + Search = expression + }); + return results.Count > 0 ? results[0].Title : string.Empty; + } + } +} diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs index 0360c761e5a..8ec11e5ffb8 100644 --- a/Flow.Launcher/App.xaml.cs +++ b/Flow.Launcher/App.xaml.cs @@ -45,6 +45,7 @@ public partial class App : IDisposable, ISingleInstanceApp private static Settings _settings; private static MainWindow _mainWindow; private readonly MainViewModel _mainVM; + private readonly Internationalization _internationalization; // To prevent two disposals running at the same time. private static readonly object _disposingLock = new(); @@ -107,6 +108,7 @@ public App() API = Ioc.Default.GetRequiredService(); _settings.Initialize(); _mainVM = Ioc.Default.GetRequiredService(); + _internationalization = Ioc.Default.GetRequiredService(); } catch (Exception e) { @@ -193,7 +195,7 @@ await API.StopwatchLogInfoAsync(ClassName, "Startup cost", async () => Win32Helper.EnableWin32DarkMode(_settings.ColorScheme); // Initialize language before portable clean up since it needs translations - await Ioc.Default.GetRequiredService().InitializeLanguageAsync(); + await _internationalization.InitializeLanguageAsync(); Ioc.Default.GetRequiredService().PreStartCleanUpAfterPortabilityUpdate(); @@ -421,6 +423,7 @@ protected virtual void Dispose(bool disposing) _mainWindow?.Dispatcher.Invoke(_mainWindow.Dispose); _mainVM?.Dispose(); DialogJump.Dispose(); + _internationalization.Dispose(); } API.LogInfo(ClassName, "End Flow Launcher dispose ----------------------------------------------------"); diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index fa23d888667..a99d4d8c2f5 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -40,49 +40,11 @@ - + - + @@ -132,7 +94,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive @@ -141,8 +103,8 @@ - - + + @@ -152,7 +114,7 @@ - + diff --git a/Flow.Launcher/Helper/WallpaperPathRetrieval.cs b/Flow.Launcher/Helper/WallpaperPathRetrieval.cs index 93b9a8aaa23..fd04b3e88fc 100644 --- a/Flow.Launcher/Helper/WallpaperPathRetrieval.cs +++ b/Flow.Launcher/Helper/WallpaperPathRetrieval.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Linq; +using System.Threading; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; @@ -16,7 +17,7 @@ public static class WallpaperPathRetrieval private const int MaxCacheSize = 3; private static readonly Dictionary<(string, DateTime), ImageBrush> WallpaperCache = new(); - private static readonly object CacheLock = new(); + private static readonly Lock CacheLock = new(); public static Brush GetWallpaperBrush() { @@ -31,7 +32,7 @@ public static Brush GetWallpaperBrush() var wallpaperPath = Win32Helper.GetWallpaperPath(); if (string.IsNullOrEmpty(wallpaperPath) || !File.Exists(wallpaperPath)) { - App.API.LogInfo(ClassName, $"Wallpaper path is invalid: {wallpaperPath}"); + App.API.LogError(ClassName, $"Wallpaper path is invalid: {wallpaperPath}"); var wallpaperColor = GetWallpaperColor(); return new SolidColorBrush(wallpaperColor); } @@ -47,17 +48,22 @@ public static Brush GetWallpaperBrush() return cachedWallpaper; } } - - using var fileStream = File.OpenRead(wallpaperPath); - var decoder = BitmapDecoder.Create(fileStream, BitmapCreateOptions.DelayCreation, BitmapCacheOption.None); - var frame = decoder.Frames[0]; - var originalWidth = frame.PixelWidth; - var originalHeight = frame.PixelHeight; + + int originalWidth, originalHeight; + // Use `using ()` instead of `using var` sentence here to ensure the wallpaper file is not locked + using (var fileStream = File.OpenRead(wallpaperPath)) + { + var decoder = BitmapDecoder.Create(fileStream, BitmapCreateOptions.DelayCreation, BitmapCacheOption.None); + var frame = decoder.Frames[0]; + originalWidth = frame.PixelWidth; + originalHeight = frame.PixelHeight; + } if (originalWidth == 0 || originalHeight == 0) { - App.API.LogInfo(ClassName, $"Failed to load bitmap: Width={originalWidth}, Height={originalHeight}"); - return new SolidColorBrush(Colors.Transparent); + App.API.LogError(ClassName, $"Failed to load bitmap: Width={originalWidth}, Height={originalHeight}"); + var wallpaperColor = GetWallpaperColor(); + return new SolidColorBrush(wallpaperColor); } // Calculate the scaling factor to fit the image within 800x600 while preserving aspect ratio @@ -70,7 +76,9 @@ public static Brush GetWallpaperBrush() // Set DecodePixelWidth and DecodePixelHeight to resize the image while preserving aspect ratio var bitmap = new BitmapImage(); bitmap.BeginInit(); + bitmap.CacheOption = BitmapCacheOption.OnLoad; // Use OnLoad to ensure the wallpaper file is not locked bitmap.UriSource = new Uri(wallpaperPath); + bitmap.CreateOptions = BitmapCreateOptions.IgnoreColorProfile; bitmap.DecodePixelWidth = decodedPixelWidth; bitmap.DecodePixelHeight = decodedPixelHeight; bitmap.EndInit(); @@ -104,13 +112,13 @@ public static Brush GetWallpaperBrush() private static Color GetWallpaperColor() { - RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Colors", false); + using var key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Colors", false); var result = key?.GetValue("Background", null); if (result is string strResult) { try { - var parts = strResult.Trim().Split(new[] { ' ' }, 3).Select(byte.Parse).ToList(); + var parts = strResult.Trim().Split([' '], 3).Select(byte.Parse).ToList(); return Color.FromRgb(parts[0], parts[1], parts[2]); } catch (Exception ex) diff --git a/Flow.Launcher/Languages/ar.xaml b/Flow.Launcher/Languages/ar.xaml index 9c252f7a79d..b8845c3f526 100644 --- a/Flow.Launcher/Languages/ar.xaml +++ b/Flow.Launcher/Languages/ar.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} متجر الإضافات @@ -467,8 +468,10 @@ فتح المجلد Advanced Log Level - Debug + Silent + خطأ Info + Debug Setting Window Font @@ -490,6 +493,7 @@ حجة للملف The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer متصفح الويب الافتراضي @@ -500,6 +504,8 @@ نافذة جديدة تبويب جديد الوضع الخاص + Default + New Profile تغيير الأولوية diff --git a/Flow.Launcher/Languages/cs.xaml b/Flow.Launcher/Languages/cs.xaml index 57415948fd2..30a1cdbb9d6 100644 --- a/Flow.Launcher/Languages/cs.xaml +++ b/Flow.Launcher/Languages/cs.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Obchod s pluginy @@ -467,8 +468,10 @@ Open Folder Advanced Log Level - Debug + Silent + Chyba Info + Debug Setting Window Font @@ -490,6 +493,7 @@ Argumenty pro Soubor The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Výchozí prohlížeč @@ -500,6 +504,8 @@ Nové okno Nová karta Soukromý režim + Default + New Profile Změnit prioritu diff --git a/Flow.Launcher/Languages/da.xaml b/Flow.Launcher/Languages/da.xaml index 363d8de9adf..067ea16fcd8 100644 --- a/Flow.Launcher/Languages/da.xaml +++ b/Flow.Launcher/Languages/da.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Plugin-butik @@ -467,8 +468,10 @@ Open Folder Advanced Log Level - Debug + Silent + Error Info + Debug Setting Window Font @@ -490,6 +493,7 @@ Arg for fil The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Default Web Browser @@ -500,6 +504,8 @@ New Window New Tab Privattilstand + Default + New Profile Skift prioritet diff --git a/Flow.Launcher/Languages/de.xaml b/Flow.Launcher/Languages/de.xaml index fc16826bd16..529531b5807 100644 --- a/Flow.Launcher/Languages/de.xaml +++ b/Flow.Launcher/Languages/de.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Plug-in-Store @@ -467,8 +468,10 @@ Ordner öffnen Erweitert Log-Ebene - Debug + Silent + Fehler Info + Debug Einstellung der Fensterschriftart @@ -490,6 +493,7 @@ Arg For File Der Dateimanager '{0}' konnte nicht unter '{1}' gefunden werden. Möchten Sie fortfahren? Pfadfehler bei Dateimanager + File Explorer Webbrowser per Default @@ -500,6 +504,8 @@ Neues Fenster Neuer Tab Privater Modus + Default + New Profile Priorität ändern diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index d2f78e1f6e0..fba57a59359 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -485,6 +485,7 @@ Arg For File The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Default Web Browser @@ -495,6 +496,8 @@ New Window New Tab Private Mode + Default + New Profile Change Priority diff --git a/Flow.Launcher/Languages/es-419.xaml b/Flow.Launcher/Languages/es-419.xaml index b3333c7a99d..e18cdb3fec5 100644 --- a/Flow.Launcher/Languages/es-419.xaml +++ b/Flow.Launcher/Languages/es-419.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Tienda de Plugins @@ -467,8 +468,10 @@ Open Folder Advanced Log Level - Debug + Silent + Error Info + Debug Setting Window Font @@ -490,6 +493,7 @@ Arg para Archivo The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Navegador Web Predeterminado @@ -500,6 +504,8 @@ Nueva Ventana Nueva Pestaña Modo Privado + Default + New Profile Cambiar Prioridad diff --git a/Flow.Launcher/Languages/es.xaml b/Flow.Launcher/Languages/es.xaml index 73cd943a225..faaef8451c6 100644 --- a/Flow.Launcher/Languages/es.xaml +++ b/Flow.Launcher/Languages/es.xaml @@ -24,8 +24,8 @@ Flow Launcher ha detectado que los datos de usario existen tanto en {0} como en {1}. {2}{2}Por favor, elimine {1} para continuar. No se han producido cambios. - El siguiente complemento ha sufrido un error y no puede cargarse: - Los siguientes complementos han sufrido un error y no pueden cargarse: + El siguiente complemento ha sufrido un fallo y no se puede cargar: + Los siguientes complementos han sufrido un fallo y no se pueden cargar: Por favor, consulte los registros para más información @@ -224,6 +224,7 @@ Fallo al desinstalar {0} No se puede encontrar plugin.json en el archivo zip extraído, o esta ruta {0} no existe Ya existe un complemento con el mismo ID y versión, o la versión es superior a la de este complemento descargado + Error creating setting panel for plugin {0}:{1}{2} Tienda complementos @@ -332,7 +333,7 @@ Cambia el texto del marcador de posición. La entrada vacía utilizará: {0} Tamaño fijo de la ventana El tamaño de la ventana no se puede ajustar mediante arrastre. - Since Always Preview is on, maximum results shown may not take effect because preview panel requires a certain minimum height + Dado que la vista previa está siempre activada, es posible que no se muestren los resultados máximos, ya que el panel de vista previa requiere una altura mínima determinada Atajo de teclado @@ -395,7 +396,7 @@ Mostrar distintivos en resultados Para los complementos compatibles, se muestran distintivos que ayudan a distinguirlos más fácilmente. Mostrar distintivos en resultados solo para consulta global - Mostrar distintivos solo para los resultados de consultas globales + Muestra distintivos solo para los resultados de consultas globales Salto de diálogo Introducir atajo de teclado para acceder rápidamente a la ventana de diálogo Abrir/Guardar como en la ruta del administrador de archivos actual. Salto de diálogo @@ -467,8 +468,10 @@ Abrir carpeta Avanzado Nivel de registro - Depuración + Silencioso + Error Información + Depuración Configuración de fuente de la ventana @@ -490,6 +493,7 @@ Argumentos del archivo El administrador de archivos '{0}' no pudo ser localizado en '{1}'. ¿Desea continuar? Error de ruta del administrador de archivos + File Explorer Navegador web predeterminado @@ -500,6 +504,8 @@ Nueva ventana Nueva pestaña Modo privado + Default + New Profile Cambiar la prioridad diff --git a/Flow.Launcher/Languages/fr.xaml b/Flow.Launcher/Languages/fr.xaml index ced3aabe053..8aa1b5cd578 100644 --- a/Flow.Launcher/Languages/fr.xaml +++ b/Flow.Launcher/Languages/fr.xaml @@ -224,6 +224,7 @@ Échec de la désinstallation de {0} Impossible de trouver le fichier plugin.json dans le fichier zip extrait, ou ce chemin {0} n'existe pas Un plugin avec le même ID et la même version existe déjà, ou la version est supérieure à ce plugin téléchargé + Erreur lors de la création du panneau de configuration pour le plugin {0}:{1}{2} Magasin des Plugins @@ -466,8 +467,10 @@ Ouvrir le dossier Avancé Niveau de journalisation - Débogage + Silencieux + Erreur Info + Débogage Réglage de la police de la fenêtre @@ -489,6 +492,7 @@ Arguments pour le fichier Le gestionnaire de fichiers '{0}' n'a pas pu être situé à '{1}'. Souhaitez-vous continuer ? Erreur de chemin du gestionnaire de fichiers + Explorateur de fichiers Navigateur web par défaut @@ -499,6 +503,8 @@ Nouvelle fenêtre Nouvel onglet Mode privé + Par défaut + Nouveau profil Changer la priorité diff --git a/Flow.Launcher/Languages/he.xaml b/Flow.Launcher/Languages/he.xaml index 164f13afd81..f9f0ba2e3cb 100644 --- a/Flow.Launcher/Languages/he.xaml +++ b/Flow.Launcher/Languages/he.xaml @@ -223,6 +223,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} חנות תוספים @@ -466,8 +467,10 @@ פתח תיקיה Advanced רמת יומן - ניפוי שגיאות + Silent + שגיאה מידע + ניפוי שגיאות Setting Window Font @@ -489,6 +492,7 @@ ארגומנט לקובץ לא ניתן היה לאתר את מנהל הקבצים '{0}' ב-'{1}'. האם ברצונך להמשיך? שגיאת נתיב למנהל הקבצים + File Explorer דפדפן ברירת מחדל @@ -499,6 +503,8 @@ חלון חדש כרטיסייה חדשה מצב פרטיות + Default + New Profile שנה עדיפות diff --git a/Flow.Launcher/Languages/it.xaml b/Flow.Launcher/Languages/it.xaml index e1d0fadcad5..60584807ca1 100644 --- a/Flow.Launcher/Languages/it.xaml +++ b/Flow.Launcher/Languages/it.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Negozio dei Plugin @@ -467,8 +468,10 @@ Apri Cartella Advanced Log Level - Debug + Silent + Error Info + Debug Setting Window Font @@ -490,6 +493,7 @@ Arg Per Cartella The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Browser predefinito @@ -500,6 +504,8 @@ Nuova Finestra Nuova Scheda Modalità Privata + Default + New Profile Cambia Priorità diff --git a/Flow.Launcher/Languages/ja.xaml b/Flow.Launcher/Languages/ja.xaml index 13cd30fd779..de142733fbc 100644 --- a/Flow.Launcher/Languages/ja.xaml +++ b/Flow.Launcher/Languages/ja.xaml @@ -2,43 +2,43 @@ - Flow detected you have installed {0} plugins, which will require {1} to run. Would you like to download {1}? + Flow はあなたが {0} プラグインをインストールしており、実行するために {1} が必要であることを検知しました。{1} をインストールしますか? {2}{2} - Click no if it's already installed, and you will be prompted to select the folder that contains the {1} executable + {1}がすでにインストールされている場合は「いいえ」をクリックし、それが入っているフォルダーを選択してください - Please select the {0} executable + {0} の実行ファイルを選択してください - Your selected {0} executable is invalid. + あなたが選択した {0} の実行ファイルが不正です。 {2}{2} - Click yes if you would like select the {0} executable again. Click no if you would like to download {1} + {0} の実行ファイルをもう一度選択する場合は「はい」を、{1} をダウンロードする場合は「いいえ」を選択してください - Unable to set {0} executable path, please try from Flow's settings (scroll down to the bottom). - Fail to Init Plugins - Plugins: {0} - fail to load and would be disabled, please contact plugin creator for help + {0} の実行可能ファイルのパスを設定できません。Flow の設定から試してください(下までスクロールしてください)。 + プラグインの起動失敗 + プラグイン: {0} の読み込みに失敗したため、無効になりました。プラグインの作成者にお問い合わせください Flow Launcherはポータブルモードの無効化のために再起動する必要があります。再起動の後、ポータブルな形式の設定項目は削除され、あなたのパソコンのフォルダに保存されます Flow Launcherはポータブルモードの有効化のために再起動する必要があります。再起動の後、パソコンに保存された設定項目は削除され、ポータブルな形式で保存されます Flow Launcherはポータブルモードの有効化を検知しました。Flow Launcherを別の場所に移動しますか? Flow Launcherはポータブルモードの無効化を検知しました。関連するショートカットやアンインストーラーが配置されます - Flow Launcher detected your user data exists both in {0} and {1}. {2}{2}Please delete {1} in order to proceed. No changes have occurred. + Flow Launcherはあなたのユーザーデータが{0} と {1} の両方に存在することを検知しました。{2}{2}続行するには、{1}を削除してください。処理は中断されました。 - The following plugin has errored and cannot be loaded: - The following plugins have errored and cannot be loaded: - Please refer to the logs for more information + 以下のプラグインにエラーがあるためロードできません: + 以下のプラグインにエラーがあるためロードできません: + 詳細はログを参照してください - Please try again - Unable to parse Http Proxy + もう一度お試しください + Http プロキシをパースできません - Failed to install TypeScript environment. Please try again later - Failed to install Python environment. Please try again later. + TypeScript環境のインストールに失敗しました。後でもう一度お試しください + Python 環境のインストールに失敗しました。後でもう一度お試しください。 ホットキー "{0}" の登録に失敗しました。このホットキーは別のプログラムで使用されている可能性があります。別のホットキーに変更するか、このホットキーを使用しているプログラムを終了してください。 - Failed to unregister hotkey "{0}". Please try again or see log for details + ホットキー「{0}」の登録解除に失敗しました。もう一度試すか、ログを参照して詳細を確認してください Flow Launcher {0}の起動に失敗しました Flow Launcherプラグインの形式が正しくありません @@ -58,7 +58,7 @@ 全て選択 ファイル フォルダー - Text + テキスト ゲームモード ホットキーの使用を一時停止します。 位置のリセット @@ -73,7 +73,7 @@ スタートアップ時にFlow Launcherを起動する 起動の高速化のためにスタートアップではなくログオンタスクを使用 アンインストール後は、「タスク スケジューラ」からこのタスク(Flow.Launcher Startup)を手動で削除する必要があります。 - Error setting launch on startup + スタートアップ時に起動の設定失敗 フォーカスを失った時にFlow Launcherを隠す 最新版が入手可能であっても、アップグレードメッセージを表示しない 検索ウィンドウの位置 @@ -111,7 +111,7 @@ 常に英語モードで入力を開始する Flowを起動したとき、一時的に入力方法を英語モードに変更します。 自動更新 - Automatically check and update the app when available + 利用可能な場合、Flow Launcherを自動的に確認して更新します 選択 起動時にFlow Launcherを隠す 起動後、Flow Launcher の検索ウィンドウは非表示になり、トレイに格納されます。 @@ -123,10 +123,10 @@ 標準 ピンインによる検索 - Pinyin is the standard system of romanized spelling for translating Chinese. Please note, enabling this can significantly increase memory usage during search. - Use Double Pinyin - Use Double Pinyin instead of Full Pinyin to search. - Double Pinyin Schema + Pinyinは中国語を翻訳するためのローマ字入力の標準的な方法です。有効にすると、検索時のメモリ使用量が大幅に増加する可能性があります。 + 双拼入力を使用 + 検索するときに全拼の代わりに双拼を使用する。 + 双拼の入力方式 Xiao He Zi Ran Ma Wei Ruan @@ -142,10 +142,10 @@ 現在のテーマでぼかしの効果が有効になっている場合、影の効果を有効にすることはできません 検索遅延 入力中に短い遅延を追加することで、UIのちらつきや結果の読み込みを軽減します。平均的なタイピング速度のユーザーにおすすめです。 - Enter the wait time (in ms) until input is considered complete. This can only be edited if Search Delay is enabled. + 入力中の結果表示までの待ち時間をミリ秒単位で入力します。これは、検索遅延が有効な場合にのみ編集できます。 デフォルトの検索遅延時間 入力が停止した後に結果が表示されるまでの待ち時間。値が大きいほど長く待機します。(単位 ms) - Information for Korean IME user + 韓国語IMEユーザーへの情報 The Korean input method used in Windows 11 may cause some issues in Flow Launcher. @@ -160,29 +160,29 @@ - Open Language and Region System Settings + システムの言語と地域設定を開く Opens the Korean IME setting location. Go to Korean > Language Options > Keyboard - Microsoft IME > Compatibility 開く - Use Previous Korean IME + 前の韓国語IMEを使用 You can change the Previous Korean IME settings directly from here Failed to change Korean IME setting - Please check your system registry access or contact support. + システムのレジストリへのアクセスが可能か確認するか、サポートにお問い合わせください。 ホームページ 検索文字列が空の場合、ホームページの結果を表示します。 クエリの履歴をホームページに表示 ホームページに表示される最大の履歴の数 - This can only be edited if plugin supports Home feature and Home Page is enabled. - Show Search Window at Foremost + これは、プラグインがホーム機能をサポートし、ホームページが有効な場合にのみ編集することができます。 + 検索ウィンドウを最前面に表示 他のプログラムの 'Always on Top' (最前面に表示)設定を上書きし、常に最前面のウィンドウで Flow を表示します。 - プラグインストアでプラグインを変更した後に再起動します + プラグインストアでプラグインを変更した後に再起動 プラグインストア経由でプラグインをインストール、アンインストール、または更新した後、Flow Lancherを自動的に再起動します 不明なソースの警告を表示 不明なソースからプラグインをインストールするときに警告を表示する - Auto update plugins - Automatically check plugin updates and notify if there are any updates available + プラグインの自動アップデート + プラグインの更新を自動的にチェックし、利用可能な更新がある場合に通知します - Search Plugin + プラグインの検索 Ctrl+F でプラグインを検索します 検索結果が見つかりませんでした 別の検索を試してみてください。 @@ -191,20 +191,20 @@ プラグインを探す 有効 無効 - Action keyword Setting + アクションキーワードの設定 キーワード - Current action keyword - New action keyword - Change Action Keywords - Plugin search delay time - Change Plugin Search Delay Time + 現在のアクションキーワード + 新しいアクションキーワード + アクションキーワードの変更 + プラグインの検索遅延時間 + プラグインの検索遅延時間を変更 詳細設定: 有効 重要度 検索遅延 ホームページ - Current Priority - New Priority + 現在の優先度 + 新しい優先度 重要度 プラグインの結果の優先度を変更します。 プラグイン・ディレクトリ @@ -214,59 +214,60 @@ バージョン ウェブサイト アンインストール - Fail to remove plugin settings - Plugins: {0} - Fail to remove plugin settings files, please remove them manually - Fail to remove plugin cache - Plugins: {0} - Fail to remove plugin cache files, please remove them manually - {0} modified already - Please restart Flow before making any further changes - Fail to install {0} - Fail to uninstall {0} - Unable to find plugin.json from the extracted zip file, or this path {0} does not exist - A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + プラグイン設定の削除に失敗 + プラグイン: {0} - プラグイン設定ファイルの削除に失敗しました。手動で削除してください + プラグインキャッシュの削除に失敗 + プラグイン: {0} - プラグインキャッシュファイルの削除に失敗しました。手動で削除してください + {0} は既に変更されています + これ以上変更を加える前に Flow Launcher を再起動してください + {0} のインストールに失敗 + {0} のアンインストールに失敗 + 展開されたzipファイルからplugin.jsonが見つからないか、このパス {0} が存在しません + 同じIDとバージョンのプラグインがすでに存在するか、またはこのダウンロードしたプラグインよりもバージョンが大きいです + Error creating setting panel for plugin {0}:{1}{2} プラグインストア 新規リリース 最近の更新 プラグイン - Installed + インストール済み 更新 インストール アンインストール 更新 - Plugin already installed - New Version - This plugin has been updated within the last 7 days + プラグインは既にインストールされています + 新しいバージョン + このプラグインは過去1週間以内に更新されました 新しいアップデートが利用可能です プラグインのインストール失敗 プラグインのアンインストール失敗 - Error updating plugin + プラグインの更新に失敗 プラグインの設定を維持 再びインストールして使用するときのためにプラグインの設定を維持しますか? - Plugin {0} successfully installed. Please restart Flow. - Plugin {0} successfully uninstalled. Please restart Flow. - Plugin {0} successfully updated. Please restart Flow. + プラグイン {0} のインストールに成功しました。Flow を再起動してください。 + プラグイン {0} のアンインストールに成功しました。Flow を再起動してください。 + プラグイン {0} が正常に更新されました。Flow を再起動してください。 プラグインのインストール {0} by {1} {2}{2}このプラグインをインストールしますか? プラグインのアンインストール {0} by {1} {2}{2}このプラグインをアンインストールしますか? - Plugin update - {0} by {1} {2}{2}Would you like to update this plugin? - Downloading plugin - Automatically restart after installing/uninstalling/updating plugins in plugin store - Zip file does not have a valid plugin.json configuration + プラグインの更新 + {0} by {1} {2}{2}このプラグインを更新しますか? + プラグインをダウンロード中 + プラグインストア経由でのプラグインのインストール 、アンインストール、または更新後に自動的に再起動します + Zipファイルに有効なplugin.jsonファイルがありません 不明なソースからのインストール このプラグインは不明なソースから提供されており、潜在的なリスクを含んでいる可能性があります!{0}{0}このプラグインの開発元をよく調べ、安全であることをご自身で確かめてください。{0}{0}それでもあなたはこのプラグインをインストールしますか?{0}{0}(この警告は設定の「一般」セクションで無効にすることができます) - Zip files - Please select zip file + Zip ファイル + zipファイルを選択してください ローカルパスからプラグインをインストール - No update available - All plugins are up to date - Plugin updates available - Update plugins - Check plugin updates - Plugins are successfully updated. Please restart Flow. + 利用可能な更新はありません + すべてのプラグインが最新です + プラグインの更新が利用可能 + プラグインを更新 + プラグインの更新を確認 + プラグインが正常に更新されました。Flow を再起動してください。 テーマ @@ -285,13 +286,13 @@ 検索バーの高さ アイテムの高さ 検索ボックスのフォント - Result Title Font - Result Subtitle Font + 結果のタイトルのフォント + 結果のサブタイトルのフォント リセット - Reset to the recommended font and size settings. - Import Theme Size - If a size value intended by the theme designer is available, it will be retrieved and applied. - Customize + 推奨されるフォントとサイズの設定にリセットします。 + テーマ中のサイズをインポート + テーマのデザイナーによって意図されたサイズ値が利用可能なとき、それを取得して適用します。 + カスタマイズ ウィンドウモード 透過度 テーマ {0} が存在しません、デフォルトのテーマに戻します。 @@ -306,7 +307,7 @@ 検索ウィンドウが開いたとき、小さな音を鳴らします 効果音の音量 効果音の音量を調整します - Windows Media Player is unavailable and is required for Flow's volume adjustment. Please check your installation if you need to adjust volume. + Windows Media Player は Flow を使った音量調整に必要です。ボリュームを調整する必要がある場合は、Windows Media Player がインストールされているかどうか確認してください。 アニメーション UIでアニメーションを使用します アニメーション速度 @@ -324,15 +325,15 @@ アクリル マイカ マイカ(代替) - This theme supports two (light/dark) modes. - This theme supports Blur Transparent Background. + このテーマはライト/ダークの2モードに対応しています。 + このテーマは背景をぼかした透明効果をサポートしています。 プレースホルダーを表示 クエリが空の場合にプレースホルダを表示します 検索欄の案内文 - Change placeholder text. Input empty will use: {0} + プレースホルダのテキストを変更します。空にすると、 {0} が使用されます ウィンドウサイズの固定 ウィンドウのサイズを固定し、ドラッグでの変更を無効にします。 - Since Always Preview is on, maximum results shown may not take effect because preview panel requires a certain minimum height + 「常にプレビューする」が有効になっているため、プレビューパネルの高さの確保のために「結果の最大表示件数」設定は無視される可能性があります ホットキー @@ -372,51 +373,51 @@ カスタムクエリ ホットキー Custom Query Shortcut 組み込みショートカット - Query + クエリー ショートカット 展開 説明 削除 編集 追加 - None + なし 項目を選択してください {0} プラグインのホットキーを本当に削除しますか? 本当にこのショートカットを削除しますか?: {0} を {1} に展開 - Get text from clipboard. + クリップボードからテキストを取得します。 アクティブなエクスプローラーからパスを取得します。 検索ウィンドウの落陰効果 - Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. - Window Width Size - You can also quickly adjust this by using Ctrl+[ and Ctrl+]. + 影の効果は GPU に大きな負荷をかけます。お使いのコンピューターの性能が限定的な場合、無効にすることをおすすめします。 + ウィンドウ幅のサイズ + Ctrl+Plus と Ctrl+Minus を使用すれば、簡単に調整することもできます。 Segoe Fluent アイコンを使用する サポートされているクエリ結果にSegoe Fluentアイコンを使用する - Press Key - Show Result Badges + キーを入力 + 結果のバッジを表示 サポートされているプラグインでは、バッジが表示され、より簡単に区別できます。 - Show Result Badges for Global Query Only - Show badges for global query results only - Dialog Jump - Enter shortcut to quickly navigate the Open/Save As dialog window to the path of the current file manager. - Dialog Jump - When Open/Save As dialog window opens, quickly navigate to the current path of the file manager. - Dialog Jump Automatically - When Open/Save As dialog window is displayed, automatically navigate to the path of the current file manager. (Experimental) - Show Dialog Jump Window - Display Dialog Jump search window when the open/save dialog window is shown to quickly navigate to file/folder locations. - Dialog Jump Window Position - Select position for the Dialog Jump search window - Fixed under the Open/Save As dialog window. Displayed on open and stays until the window is closed - Default search window position. Displayed when triggered by search window hotkey - Dialog Jump Result Navigation Behaviour - Behaviour to navigate Open/Save As dialog window to the selected result path - Left click or Enter key - Right click - Dialog Jump File Navigation Behaviour - Behaviour to navigate Open/Save As dialog window when the result is a file path - Fill full path in file name box - Fill full path in file name box and open - Fill directory in path box + グローバルクエリのみ、結果のバッジを表示 + グローバルクエリの結果にのみバッジを表示する + ダイアログジャンプ + ショートカットを入力して、「名前を付けて開く/保存」ダイアログ・ウィンドウを現在のファイルマネージャのパスにすばやくナビゲートします。 + ダイアログジャンプ + 「名前を付けて開く/保存」ダイアログウィンドウが開いたら、すぐにファイルマネージャの現在のパスに移動します。 + 自動ダイアログジャンプ + 開く/名前を付けて保存ダイアログが表示されると、自動的に現在のファイルマネージャのパスに移動させます。 (実験的) + ダイアログジャンプウィンドウを表示 + 「名前をつけて保存/開く」ダイアログウィンドウが表示されたときにダイアログジャンプのウィンドウを開いて、ファイルやフォルダーを素早く開く。 + ダイアログジャンプのウィンドウの位置 + ダイアログジャンプ検索ウィンドウの位置を選択します + 「名前を付けて開く/保存」ダイアログウィンドウの下に固定。ウィンドウが閉じるまで開いたまま表示されます + デフォルトの検索ウィンドウの位置。検索ウィンドウのホットキーによってトリガーされたときに表示されます + ダイアログジャンプの検索結果の開き方 + 「開く/名前を付けて保存」ダイアログウィンドウの選択した結果パスに移動する動作 + 左クリックまたはEnter キー + 右クリック + ダイアログジャンプのファイルに対する動作 + 結果がファイルパスの場合の、「開く/名前を付けて保存」ダイアログウィンドウに対する動作 + フルパスをファイル名ボックスに入力 + フルパスをファイル名ボックスに入力して開く + パスボックスに含まれるフォルダを入力 HTTP プロキシ @@ -467,44 +468,49 @@ フォルダーを開く 上級者向け機能 ログレベル - デバッグ + Silent + エラー 情報 + デバッグ 設定ウィンドウで使用するフォント - See more release notes on GitHub - Failed to fetch release notes - Please check your network connection or ensure GitHub is accessible - Flow Launcher has been updated to {0} - Click here to view the release notes + GitHub で詳細なリリース ノートを見る + リリースノートの取得に失敗 + ネットワーク接続を確認するか、GitHubにアクセスできることを確認してください + Flow Launcher が {0}に更新されました + ここをクリックしてリリースノートを表示 デフォルトのファイルマネージャー - Learn more - Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files. - For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank. - File Manager - Profile Name - File Manager Path - Arg For Folder - Arg For File - The file manager '{0}' could not be located at '{1}'. Would you like to continue? - File Manager Path Error + 詳細を見る + 使用したいファイルマネージャーのファイルの位置を指定し、コマンドライン引数を入力してください。"%d" は開こうとしているフォルダーのパスを表し、「フォルダー用の引数」の欄で特定のフォルダーを開くために使用されます。"%f" は開こうとしているファイルのパスを表し、「ファイル用の引数」の欄で特定のファイルを開くために使用されます。 + 例として、ファイルマネージャーが "totalcmd.exe /A c:\windows" というコマンドを c:\windows というフォルダを開くために使用する場合を考えます。この場合、ファイルマネージャーのパスは totalcmd.exe で、フォルダー用の引数は /A "%d" になります。QTTabBarのように、パスのみを要求するファイルマネージャーの場合、”%d” をファイルマネージャーのパスの欄に指定し、残りを空欄にしてください。 + ファイル マネージャー + プロファイル名 + ファイルマネージャーのパス + フォルダー用の引数 + ファイル用の引数 + ファイルマネージャー '{0}' は、'{1}' に見つかりませんでした。続行しますか? + ファイルマネージャのパスエラー + File Explorer デフォルトのウェブブラウザー - The default setting follows the OS default browser setting. If specified separately, flow uses that browser. - Browser - Browser Name - Browser Path - New Window - New Tab - Private Mode + デフォルトの設定は、OS のデフォルトのブラウザ設定に従います。別々に指定すると、Flow はそのブラウザを使用します。 + ブラウザー + ブラウザー名 + ブラウザーのパス + 新しいウィンドウ + 新しいタブ + プライベートモード + Default + New Profile - Change Priority - Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number - Please provide an valid integer for Priority! + 優先度の変更 + 数値が大きいほど、結果の上の方に表示されます。試しに5として設定してみてください。 結果を他のプラグインよりも低くしたい場合は、負の数字を入力してください + 優先度には有効な整数を入力してください! 古いアクションキーワード @@ -514,33 +520,33 @@ 指定されたプラグインが見つかりません 新しいアクションキーワードを空にすることはできません 新しいアクションキーワードは他のプラグインに割り当てられています。他のアクションキーワードを入力してください - This new Action Keyword is the same as old, please choose a different one + そのアクションキーワードは以前のものと同じです。他のアクションキーワードを入力してください 成功しました - Completed successfully - Failed to copy - Enter the action keywords you like to use to start the plugin and use whitespace to divide them. Use * if you don't want to specify any, and the plugin will be triggered without any action keywords. + 正常に完了しました + コピーに失敗 + プラグインを起動するためのアクションキーワードを、空白区切りで入力してください。特定のキーワードを使用せずにプラグインを使用したい場合、* を入力してください。 - Search Delay Time Setting - Input the search delay time in ms you like to use for the plugin. Input empty if you don't want to specify any, and the plugin will use default search delay time. + 検索の遅延時間の設定 + プラグインに使用したい検索の遅延時間をミリ秒で入力します。 何も指定したくない場合は空にしておくと、プラグインはデフォルトの検索の遅延時間を使用します。 ホームページ - Enable the plugin home page state if you like to show the plugin results when query is empty. + クエリが空のときにプラグインの結果を表示したい場合は、プラグインのホームページの設定を有効にします。 カスタムクエリのホットキー - Press a custom hotkey to open Flow Launcher and input the specified query automatically. + カスタムホットキーを押して Flow Launcher を開き、指定したクエリを自動的に入力します。 プレビュー ホットキーは使用できません。新しいホットキーを選択してください - Hotkey is invalid + そのホットキーは無効です 更新 - Binding Hotkey - Current hotkey is unavailable. - This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey. - This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}". - Press the keys you want to use for this function. - Hotkey and action keyword are empty + ホットキーの設定 + 現在のホットキーは使用できません。 + このホットキーは "{0}" で予約されており、使用できません。別のホットキーを選択してください。 + このホットキーは "{0}" によってすでに使用されています。「上書き」を押すと、"{0}"から削除されます。 + この機能に使用するキーを押してください。 + ホットキーとアクションキーワードが空です カスタムクエリのショートカット @@ -551,11 +557,11 @@ そのショートカットは既に存在します。新しいショートカットを入力するか、既存のショートカットを編集してください。 ショートカット、展開の少なくとも一方が空です。 - Shortcut is invalid + ショートカットが無効です 保存 - Overwrite + 上書き キャンセル リセット 削除 @@ -580,46 +586,46 @@ クラッシュレポートの送信に失敗しました Flow Launcherにエラーが発生しました Please open new issue in - 1. Upload log file: {0} - 2. Copy below exception message + 1. ログファイルをアップロード: {0} + 2. 例外メッセージ以下をコピー - File Manager Error + ファイルマネージャのエラー - The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General. + 指定されたファイルマネージャーが見つかりませんでした。設定 > 一般でカスタムファイルマネージャの設定を確認してください。 - Error - An error occurred while opening the folder. {0} - An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window + エラー + フォルダを開く際にエラーが発生しました。 {0} + ブラウザでURLを開く際にエラーが発生しました。設定ウィンドウの一般セクションでデフォルトのウェブブラウザ設定を確認してください - Please wait... + しばらくお待ちください… - Checking for new update + 新しい更新を確認中 Flow Launcherは既に最新です - Update found - Updating... + 更新が見つかりました + 更新中… - Flow Launcher was not able to move your user profile data to the new update version. - Please manually move your profile data folder from {0} to {1} + Flow Launcherはユーザープロファイルデータを新しいバージョンに移動できませんでした。 + 手動で {0} から {1}にプロフィールデータフォルダを移動してください - New Update + 新しい更新 Flow Launcher の最新バージョン V{0} が入手可能です Flow Launcherのアップデート中にエラーが発生しました 更新 キャンセル - Update Failed - Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. + アップデート失敗 + 接続を確認し、その後プロキシ設定を github-cloud.s3.amazonaws.com に更新してみてください。 このアップデートでは、Flow Launcherの再起動が必要です 次のファイルがアップデートされます 更新ファイル一覧 アップデートの詳細 - Restart Flow Launcher after updating plugins - {0}: Update from v{1} to v{2} - No plugin selected + プラグインを更新した後、Flow Launcher を再起動する + {0}: v{1} から v{2} へ更新 + プラグインが選択されていません スキップ @@ -642,18 +648,18 @@ コンテキストメニューを開く ファイルのあるフォルダを開く 管理者として実行、または、 デフォルトのファイルマネージャでフォルダを開く - Query History + クエリの履歴 コンテキストメニューから検索結果に戻る - Autocomplete + 自動補完 選択したアイテムを開く、または、実行する Flow Launcherの設定ウインドウを開く プラグインデータのリロード - Select first result - Select last result - Run current query again + 最初の結果を選択 + 最後の結果を選択 + 現在のクエリをもう一度実行 結果を開く - Open result #{0} + #{0} を開く 天気 天気についてのGoogle検索 diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 6cf1a627450..131aa50cb6a 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -215,6 +215,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} 플러그인 스토어 @@ -458,8 +459,10 @@ 폴더 열기 Advanced 로그 레벨 - Debug + Silent + Error Info + Debug 설정창 글꼴 @@ -481,6 +484,7 @@ 파일경로 인수 The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer 기본 웹 브라우저 @@ -491,6 +495,8 @@ 새 창 새 탭 사생활 보호 모드 + Default + New Profile 중요도 변경 diff --git a/Flow.Launcher/Languages/nb.xaml b/Flow.Launcher/Languages/nb.xaml index 57afaa87b55..a27f66d11dc 100644 --- a/Flow.Launcher/Languages/nb.xaml +++ b/Flow.Launcher/Languages/nb.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Programtillegg butikk @@ -467,8 +468,10 @@ Åpne mappe Advanced Log Level - Debug + Silent + Feil Info + Debug Setting Window Font @@ -490,6 +493,7 @@ Arg for fil The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Standard nettleser @@ -500,6 +504,8 @@ Nytt vindu Ny fane Privat modus + Default + New Profile Endre prioritet diff --git a/Flow.Launcher/Languages/nl.xaml b/Flow.Launcher/Languages/nl.xaml index 5b7ba1d21de..4160918587a 100644 --- a/Flow.Launcher/Languages/nl.xaml +++ b/Flow.Launcher/Languages/nl.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Plugin Winkel @@ -467,8 +468,10 @@ Map openen Advanced Log Level - Debug + Silent + Error Info + Debug Setting Window Font @@ -490,6 +493,7 @@ Arg voor bestand The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Standaard webbrowser @@ -500,6 +504,8 @@ Nieuw Venster Nieuw tabblad Privé modus + Default + New Profile Prioriteit wijzigen diff --git a/Flow.Launcher/Languages/pl.xaml b/Flow.Launcher/Languages/pl.xaml index 92b91d28798..1295e66c917 100644 --- a/Flow.Launcher/Languages/pl.xaml +++ b/Flow.Launcher/Languages/pl.xaml @@ -223,6 +223,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Sklep z wtyczkami @@ -466,8 +467,10 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros Otwórz folder Zaawansowane Poziom logowania - Debug + Silent + Błąd Info + Debug Ustawienia czcionki okna @@ -489,6 +492,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros Arg dla pliku Menedżer plików „{0}” nie został znaleziony w lokalizacji „{1}”. Czy chcesz kontynuować? Błąd ścieżki do menedżera plików + File Explorer Domyślna przeglądarka @@ -499,6 +503,8 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros Nowe okno Nowa zakładka Tryb prywatny + Default + New Profile Zmień priorytet diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml index 9b0db5a9e83..91193bd0aed 100644 --- a/Flow.Launcher/Languages/pt-br.xaml +++ b/Flow.Launcher/Languages/pt-br.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Loja de Plugins @@ -467,8 +468,10 @@ Open Folder Advanced Log Level - Debug + Silent + Error Info + Debug Setting Window Font @@ -490,6 +493,7 @@ Arg para Arquivo The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Navegador da Web Padrão @@ -500,6 +504,8 @@ Nova Janela Nova Aba Modo Privado + Default + New Profile Alterar Prioridade diff --git a/Flow.Launcher/Languages/pt-pt.xaml b/Flow.Launcher/Languages/pt-pt.xaml index 1a68f23f45d..08057382187 100644 --- a/Flow.Launcher/Languages/pt-pt.xaml +++ b/Flow.Launcher/Languages/pt-pt.xaml @@ -223,6 +223,7 @@ Falha ao desinstalar {0} Não foi possível encontrar plugin.json no ficheiro zip ou, então, o caminho {0} não existe. Já existe um plugin com a mesma ID e versão ou, então, a versão instalada é superior à do plugin descarregado. + Erro ao criar o painel de definição para o plugin {0}:{1}{2} Loja de plugins @@ -331,7 +332,7 @@ O texto do marcador de posição. Se vazio, será utilizado: {0} Janela com tamanho fixo Não pode ajustar o tamanho da janela por arrasto. - Since Always Preview is on, maximum results shown may not take effect because preview panel requires a certain minimum height + Como a opção "Pré-visualizar sempre" está ativa, os resultados máximos mostrados podem não ter efeito porque o painel de visualização requer uma altura mínima Tecla de atalho @@ -465,8 +466,10 @@ Abrir pasta Avançado Nível de registo - Depuração + Silencioso + Erro Informação + Depuração Tipo de letra da aplicação @@ -488,6 +491,7 @@ Argumento para ficheiro Não foi possível encontrar o gestor de ficheiros '{0}' em '{1}'. Deseja continuar? Erro no caminho do gestor de ficheiros + Gestor de ficheiros Navegador web padrão @@ -498,6 +502,8 @@ Nova janela Novo separador Modo privado + Padrão + Novo perfil Alterar prioridade diff --git a/Flow.Launcher/Languages/ru.xaml b/Flow.Launcher/Languages/ru.xaml index 43d26aff2e2..c506d07654e 100644 --- a/Flow.Launcher/Languages/ru.xaml +++ b/Flow.Launcher/Languages/ru.xaml @@ -167,7 +167,7 @@ You can change the Previous Korean IME settings directly from here Failed to change Korean IME setting Please check your system registry access or contact support. - Home Page + Главная страница Show home page results when query text is empty. Show History Results in Home Page Maximum History Results Shown in Home Page @@ -199,10 +199,10 @@ Plugin search delay time Change Plugin Search Delay Time Advanced Settings: - Enabled + Включено Приоритет Search Delay - Home Page + Главная страница Текущий приоритет Новый приоритет Приоритет @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Магазин плагинов @@ -467,8 +468,10 @@ Open Folder Advanced Log Level - Debug + Silent + Ошибка Info + Debug Setting Window Font @@ -490,6 +493,7 @@ Аргумент для файла The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Браузер по умолчанию @@ -500,6 +504,8 @@ Новое окно Новая вкладка Приватный режим + Default + New Profile Изменить приоритет @@ -525,7 +531,7 @@ Input the search delay time in ms you like to use for the plugin. Input empty if you don't want to specify any, and the plugin will use default search delay time. - Home Page + Главная страница Enable the plugin home page state if you like to show the plugin results when query is empty. diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 855c0635e39..e909a24b1d5 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -176,7 +176,7 @@ Nevykonali sa žiadne zmeny. Zobraziť vyhľadávacie okno v popredí Prepíše nastavenie "Vždy na vrchu" ostatných programov a zobrazí navrchu Flow. Reštartovať po úprave pluginu cez Repozitár pluginov - Automaticky reštartovať Flow Launcher po inštalácii/odinštalácii/aktualizáciu pluginu cez Repozitár pluginov + Automaticky reštartovať Flow Launcher po inštalácii/odinštalácii/aktualizácii pluginu cez Repozitár pluginov Zobraziť upozornenie na neznámy zdroj Zobraziť upozornenie pri inštalácii z neznámych zdrojov Automaticky aktualizovať pluginy @@ -225,6 +225,7 @@ Nevykonali sa žiadne zmeny. Nepodarilo sa odinštalovať {0} Súbor plugin.json sa nenašiel v rozbalenom zip súbore, alebo táto cesta {0} neexistuje Plugin s rovnakým ID už existuje, alebo ide o vyššiu verziu ako stiahnutý plugin + Chyba pri vytváraní panelu nastavení pre plugin {0}:{1}{2} Repozitár pluginov @@ -255,7 +256,7 @@ Nevykonali sa žiadne zmeny. Aktualizácia pluginu {0} od {1} {2}{2}Chcete aktualizovať tento plugin? Sťahovanie pluginu - Automaticky reštartovať po inštalácii/odinštalácii/aktualizáciu pluginov cez Repozitár pluginov + Automaticky reštartovať po inštalácii/odinštalácii/aktualizácii pluginov cez Repozitár pluginov V zipe sa nenachádza platná konfigurácia plugin.json Inštalácia z neznámeho zdroja Tento plugin pochádza z neznámeho zdroja a môže predstavovať potenciálne riziká!{0}{0}Uistite sa, že viete, odkiaľ tento plugin pochádza, a že je bezpečný.{0}{0}Stále chcete pokračovať?{0}{0}(Toto upozornenie môžete vypnúť sekcii Všeobecné v nastaveniach) @@ -267,7 +268,7 @@ Nevykonali sa žiadne zmeny. Dostupná aktualizácia pluginu Aktualizovať pluginy Skontrolovať dostupnosť aktualizácií - Pluginy {0} boli úspešne aktualizované. Prosím, reštartuje Flow. + Pluginy boli úspešne aktualizované. Prosím, reštartuje Flow. Motív @@ -396,28 +397,28 @@ Nevykonali sa žiadne zmeny. Zobraziť výsledok v odznaku Ak to plugin podporuje, zobrazí sa jeho ikona v odznaku na jednoduchšie odlíšenie. Zobraziť výsledok v odznaku len pre globálne vyhľadávanie - Show badges for global query results only - Dialog Jump - Enter shortcut to quickly navigate the Open/Save As dialog window to the path of the current file manager. - Dialog Jump - When Open/Save As dialog window opens, quickly navigate to the current path of the file manager. - Dialog Jump Automatically - When Open/Save As dialog window is displayed, automatically navigate to the path of the current file manager. (Experimental) - Show Dialog Jump Window - Display Dialog Jump search window when the open/save dialog window is shown to quickly navigate to file/folder locations. - Dialog Jump Window Position - Select position for the Dialog Jump search window - Fixed under the Open/Save As dialog window. Displayed on open and stays until the window is closed - Default search window position. Displayed when triggered by search window hotkey - Dialog Jump Result Navigation Behaviour - Behaviour to navigate Open/Save As dialog window to the selected result path - Left click or Enter key - Right click - Dialog Jump File Navigation Behaviour - Behaviour to navigate Open/Save As dialog window when the result is a file path - Fill full path in file name box - Fill full path in file name box and open - Fill directory in path box + Zobrazí výsledok v odznaku len pre výsledky globálneho vyhľadávania + Rýchly prechod + Zadajte skratku na rýchly prechod na aktuálnu cestu správcu súborov v dialógovom okne Otvoriť/Uložiť. + Rýchly prechod + Keď sa otvorí dialógové okno Otvoriť/Uložiť, rýchlo prejdete na aktuálnu cestu správcu súborov. + Automatický rýchly prechod + Keď je otvorené dialógové okno Otvoriť/Uložiť, automaticky prejsť na cestu v aktuálnom správcovi súborov (Experimentálne) + Zobraziť okno na rýchly prechod + Zobraziť okno rýchleho prechodu, keď je zobrazené dialógové okno Ovoriť/Uložiť na rýchlu navigáciu do umiestnenia súborov/priečinkov. + Umiestnenie okna "rýchly prechod" + Vyberte umiestnenie vyhľadávacieho okna pre "rýchly prechod" + Fixné pod oknom Otvoriť/Uložiť. Zostane zobrazené po otvorení až do uzavretia okna + Predvolená pozícia vyhľadávacieho okna. Zobrazí sa po zadaní skratky na otvorenie vyhľadávacieho okna + Akcia na prechod k výsledku rýchleho prechodu + Ako prejsť na vybranú cestu v otvorenom dialógovom okne Otvoriť/Uložiť + Kliknutie ľavým tlačidlom myši alebo klávesom Enter + Kliknutie pravým tlačidlom myši + Akcia na prechod k súboru rýchleho prechodu + Akcia, ktorá sa vykoná na navigáciu v dialógovom okne Otvoriť/Uložiť, ak výsledkom je súbor + Vložiť celú cestu k súboru do poľa názvu súboru + Vložiť celú cestu k súboru do poľa názvu súboru a otvoriť + Vložiť priečinok do poľa s cestou HTTP proxy @@ -468,8 +469,10 @@ Nevykonali sa žiadne zmeny. Otvoriť priečinok Rozšírené Úroveň logovania - Debug + Žiadne + Chyba Info + Debug Nastavenie písma okna @@ -482,8 +485,8 @@ Nevykonali sa žiadne zmeny. Vyberte správcu súborov Viac informácií - Zadajte umiestnenie súboru správcu súborov, ktorý používate, a podľa potreby pridajte argumenty. "%d" predstavuje cestu k priečinku, ktorý sa má otvoriť, používa sa v poli Arg pre priečinok a pri príkazoch na otvorenie konkrétnych priečinkov. "%f" predstavuje cestu k súboru, ktorá sa má otvoriť a používa sa v poli Arg pre súbor a pri príkazoch na otvorenie konkrétnych súborov. - Napríklad, ak správca súborov používa príkaz ako "totalcmd.exe /A c:\windows" na otvorenie priečinka c:\windows, cesta správcu súborov bude totalcmd.exe a Arg pre priečinok bude /A "%d". Niektorí správcovia súborov, ako napríklad QTTabBar, môžu vyžadovať len zadanie cesty, v tomto prípade použite "%d" ako cestu správcu súborov a zvyšok súborov nechajte prázdny. + Zadajte umiestnenie súboru správcu súborov, ktorý používate, a podľa potreby pridajte argumenty. "%d" predstavuje cestu k priečinku, ktorý sa má otvoriť, používa sa v poli Arg. pre priečinok a pri príkazoch na otvorenie konkrétnych priečinkov. "%f" predstavuje cestu k súboru, ktorá sa má otvoriť a používa sa v poli Arg. pre súbor a pri príkazoch na otvorenie konkrétnych súborov. + Napríklad, ak správca súborov používa príkaz ako "totalcmd.exe /A c:\windows" na otvorenie priečinka c:\windows, cesta správcu súborov bude totalcmd.exe a Arg. pre priečinok bude /A "%d". Niektorí správcovia súborov, ako napríklad QTTabBar, môžu vyžadovať len zadanie cesty, v tomto prípade použite "%d" ako cestu správcu súborov a zvyšok súborov nechajte prázdny. Správca súborov Názov profilu Cesta k správcovi súborov @@ -491,6 +494,7 @@ Nevykonali sa žiadne zmeny. Arg. pre súbor Správca súborov '{0}' sa nenachádza na '{1}'. Chcete pokračovať? Chyba v ceste k správcovi súborov + Prieskumník Predvolený webový prehliadač @@ -501,6 +505,8 @@ Nevykonali sa žiadne zmeny. Nové okno Nová karta Privátny režim + Predvolené + Nový profil Zmena priority diff --git a/Flow.Launcher/Languages/sr-Cyrl-RS.xaml b/Flow.Launcher/Languages/sr-Cyrl-RS.xaml index 4e6c35d98fd..189e882ec3a 100644 --- a/Flow.Launcher/Languages/sr-Cyrl-RS.xaml +++ b/Flow.Launcher/Languages/sr-Cyrl-RS.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Plugin Store @@ -467,8 +468,10 @@ Open Folder Advanced Log Level - Debug + Silent + Error Info + Debug Setting Window Font @@ -490,6 +493,7 @@ Arg For File The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Default Web Browser @@ -500,6 +504,8 @@ New Window New Tab Private Mode + Default + New Profile Change Priority diff --git a/Flow.Launcher/Languages/sr.xaml b/Flow.Launcher/Languages/sr.xaml index e1495efd6e3..636942ac436 100644 --- a/Flow.Launcher/Languages/sr.xaml +++ b/Flow.Launcher/Languages/sr.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Plugin Store @@ -467,8 +468,10 @@ Open Folder Advanced Log Level - Debug + Silent + Error Info + Debug Setting Window Font @@ -490,6 +493,7 @@ Arg For File The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Default Web Browser @@ -500,6 +504,8 @@ New Window New Tab Private Mode + Default + New Profile Change Priority diff --git a/Flow.Launcher/Languages/tr.xaml b/Flow.Launcher/Languages/tr.xaml index a91b7997dff..e91ba5b3f4e 100644 --- a/Flow.Launcher/Languages/tr.xaml +++ b/Flow.Launcher/Languages/tr.xaml @@ -224,6 +224,7 @@ {0} kaldırılamıyor plugin.json dosyası çıkarılan zip dosyasında bulunamadı veya {0} yolu mevcut değil Bu eklentiyle aynı ID ve sürüme sahip bir eklenti zaten var, ya da mevcut sürüm daha yüksek + Error creating setting panel for plugin {0}:{1}{2} Eklenti Mağazası @@ -405,14 +406,14 @@ Diyalog Atlama Penceresini Göster Dosya/klasör konumlarına hızlı erişim için aç/kaydet penceresi gösterildiğinde Diyalog Atlama arama penceresini görüntüle. Diyalog Atlama Penceresi Konumu - Select position for the Dialog Jump search window + Diyalog Atlama arama penceresi için konum seçin Farklı Aç/Kaydet iletişim penceresinin altında düzeltildi. Açıldığında görüntülenir ve pencere kapatılana kadar kalır Varsayılan arama penceresi konumu. Arama penceresi kısayol tuşu tarafından tetiklendiğinde görüntülenir - Dialog Jump Result Navigation Behaviour + Diyalog Atlama Sonucu Gezinme Davranışı Farklı Aç/Kaydet iletişim penceresini seçilen sonuç yoluna yönlendirmek için davranış Sol tık veya Enter tuşu Sağ tık - Dialog Jump File Navigation Behaviour + Dialog Jump Dosya Gezinme Davranışı Sonuç bir dosya yolu olduğunda Farklı Aç/Kaydet iletişim penceresinde gezinme davranışı Dosya adı kutusuna tam yolu girin Dosya adı kutusuna tam yolu girin ve açın @@ -467,8 +468,10 @@ Klasörü Aç Gelişmiş Günlük Düzeyi - Hata ayıklama + Sessiz + Hata Bilgi + Hata ayıklama Pencere Yazı Tipini Ayarla @@ -490,6 +493,7 @@ Dosya Açarken '{0}' dosya yöneticisi '{1}' konumunda bulunamadı. Devam etmek ister misiniz? Dosya Yöneticisi Yol Hatası + File Explorer İnternet Tarayıcı Seçenekleri @@ -500,6 +504,8 @@ Yeni Pencere Yeni Sekme Gizli Mod için Bağımsız Değişken + Default + New Profile Önceliği Ayarla diff --git a/Flow.Launcher/Languages/uk-UA.xaml b/Flow.Launcher/Languages/uk-UA.xaml index 55d12a14ea1..42541d04623 100644 --- a/Flow.Launcher/Languages/uk-UA.xaml +++ b/Flow.Launcher/Languages/uk-UA.xaml @@ -224,6 +224,7 @@ Не вдалося видалити {0} Не вдалося знайти файл plugin.json у розпакованому zip-файлі або цей шлях {0} не існує. Вже існує плагін з таким самим ідентифікатором та версією, або версія цього плагіну вища за версію завантаженого. + Помилка створення панелі налаштувань для плагіну {0}: {1}{2} Магазин плагінів @@ -467,8 +468,10 @@ Відкрити теку Розширені Рівень журналювання - Налагодження + Без звуку + Помилка Інформація + Налагодження Встановлення шрифту вікна @@ -490,6 +493,7 @@ Аргумент для файлу Не вдалося знайти файловий менеджер «{0}» за адресою «{1}». Чи бажаєте продовжити? Помилка шляху до файлового менеджера + Файловий провідник Типовий веббраузер @@ -500,6 +504,8 @@ Нове вікно Нова вкладка Приватний режим + Типово + Новий профіль Змінити пріоритет diff --git a/Flow.Launcher/Languages/vi.xaml b/Flow.Launcher/Languages/vi.xaml index 29aaffc8a5e..f56703b7a6e 100644 --- a/Flow.Launcher/Languages/vi.xaml +++ b/Flow.Launcher/Languages/vi.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} Tải tiện ích mở rộng @@ -469,8 +470,10 @@ Mở thư mục Advanced Log Level - Debug + Silent + Lỗi Info + Debug Setting Window Font @@ -492,6 +495,7 @@ Đối số cho tệp The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer Trình duyệt web tiêu chuẩn @@ -502,6 +506,8 @@ Cửa sổ mới Thẻ Mới Chế độ riêng tư + Default + New Profile Thay đổi mức độ ưu tiên diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml index 0f8934fe464..3b368f1701e 100644 --- a/Flow.Launcher/Languages/zh-cn.xaml +++ b/Flow.Launcher/Languages/zh-cn.xaml @@ -224,6 +224,7 @@ 卸载 {0} 失败 无法从提取的zip文件中找到plugin.json,或者此路径 {0} 不存在 已存在相同ID和版本的插件,或者存在版本大于此下载的插件 + Error creating setting panel for plugin {0}:{1}{2} 插件商店 @@ -467,8 +468,10 @@ 打开文件夹 高级 日志等级 - 调试 + 静默 + 错误 信息 + 调试 设置窗口字体 @@ -490,6 +493,7 @@ 选中文件路径参数 文件管理器 '{0}' 不能在 '{1}'中定位。您想要继续吗? 文件管理器路径错误 + 文件资源管理器 默认浏览器 @@ -500,6 +504,8 @@ 新窗口 新标签 隐身模式 + 默认 + 新配置 更改优先级 diff --git a/Flow.Launcher/Languages/zh-tw.xaml b/Flow.Launcher/Languages/zh-tw.xaml index 0cec258f1b4..c80e8b09274 100644 --- a/Flow.Launcher/Languages/zh-tw.xaml +++ b/Flow.Launcher/Languages/zh-tw.xaml @@ -224,6 +224,7 @@ Fail to uninstall {0} Unable to find plugin.json from the extracted zip file, or this path {0} does not exist A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin + Error creating setting panel for plugin {0}:{1}{2} 插件商店 @@ -467,8 +468,10 @@ Open Folder Advanced Log Level - Debug + Silent + Error Info + Debug Setting Window Font @@ -490,6 +493,7 @@ 檔案參數 The file manager '{0}' could not be located at '{1}'. Would you like to continue? File Manager Path Error + File Explorer 預設瀏覽器 @@ -500,6 +504,8 @@ 新增視窗 新增分頁 無痕模式 + Default + New Profile 更改優先度 diff --git a/Flow.Launcher/SelectBrowserWindow.xaml b/Flow.Launcher/SelectBrowserWindow.xaml index d51d597b751..67c22b07d19 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml +++ b/Flow.Launcher/SelectBrowserWindow.xaml @@ -92,7 +92,7 @@ SelectedIndex="{Binding SelectedCustomBrowserIndex}"> - + diff --git a/Flow.Launcher/SelectBrowserWindow.xaml.cs b/Flow.Launcher/SelectBrowserWindow.xaml.cs index 565b4cbc338..290712aad62 100644 --- a/Flow.Launcher/SelectBrowserWindow.xaml.cs +++ b/Flow.Launcher/SelectBrowserWindow.xaml.cs @@ -1,6 +1,7 @@ using System.Windows; using System.Windows.Controls; using CommunityToolkit.Mvvm.DependencyInjection; +using Flow.Launcher.Infrastructure; using Flow.Launcher.ViewModel; namespace Flow.Launcher @@ -31,7 +32,7 @@ private void btnDone_Click(object sender, RoutedEventArgs e) private void btnBrowseFile_Click(object sender, RoutedEventArgs e) { - var selectedFilePath = _viewModel.SelectFile(); + var selectedFilePath = Win32Helper.SelectFile(); if (!string.IsNullOrEmpty(selectedFilePath)) { diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml b/Flow.Launcher/SelectFileManagerWindow.xaml index b3b219d1c1e..cd4bec42466 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml +++ b/Flow.Launcher/SelectFileManagerWindow.xaml @@ -102,7 +102,7 @@ SelectedIndex="{Binding SelectedCustomExplorerIndex}"> - + diff --git a/Flow.Launcher/SelectFileManagerWindow.xaml.cs b/Flow.Launcher/SelectFileManagerWindow.xaml.cs index d9c672aff67..5143f9a56f8 100644 --- a/Flow.Launcher/SelectFileManagerWindow.xaml.cs +++ b/Flow.Launcher/SelectFileManagerWindow.xaml.cs @@ -2,6 +2,7 @@ using System.Windows.Controls; using System.Windows.Navigation; using CommunityToolkit.Mvvm.DependencyInjection; +using Flow.Launcher.Infrastructure; using Flow.Launcher.ViewModel; namespace Flow.Launcher @@ -32,13 +33,13 @@ private void btnDone_Click(object sender, RoutedEventArgs e) private void Hyperlink_RequestNavigate(object sender, RequestNavigateEventArgs e) { - _viewModel.OpenUrl(e.Uri.AbsoluteUri); + App.API.OpenUrl(e.Uri.AbsoluteUri); e.Handled = true; } private void btnBrowseFile_Click(object sender, RoutedEventArgs e) { - var selectedFilePath = _viewModel.SelectFile(); + var selectedFilePath = Win32Helper.SelectFile(); if (!string.IsNullOrEmpty(selectedFilePath)) { diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneAboutViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneAboutViewModel.cs index 1efc8997204..647b367013c 100644 --- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneAboutViewModel.cs +++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneAboutViewModel.cs @@ -231,35 +231,41 @@ private bool ClearCacheFolder() } }); - // Firstly, delete plugin cache directories - pluginCacheDirectory.EnumerateDirectories("*", SearchOption.TopDirectoryOnly) - .ToList() - .ForEach(dir => - { - try - { - // Plugin may create directories in its cache directory - dir.Delete(recursive: true); - } - catch (Exception e) - { - App.API.LogException(ClassName, $"Failed to delete cache directory: {dir.Name}", e); - success = false; - } - }); - - // Then, delete plugin directory - var dir = GetPluginCacheDir(); - try - { - dir.Delete(recursive: false); - } - catch (Exception e) + // Check if plugin cache directory exists before attempting to delete + // Or it will throw DirectoryNotFoundException in `pluginCacheDirectory.EnumerateDirectories` + if (pluginCacheDirectory.Exists) { - App.API.LogException(ClassName, $"Failed to delete cache directory: {dir.Name}", e); - success = false; + // Firstly, delete plugin cache directories + pluginCacheDirectory.EnumerateDirectories("*", SearchOption.TopDirectoryOnly) + .ToList() + .ForEach(dir => + { + try + { + // Plugin may create directories in its cache directory + dir.Delete(recursive: true); + } + catch (Exception e) + { + App.API.LogException(ClassName, $"Failed to delete cache directory: {dir.Name}", e); + success = false; + } + }); + + // Then, delete plugin directory + var dir = pluginCacheDirectory; + try + { + dir.Delete(recursive: false); + } + catch (Exception e) + { + App.API.LogException(ClassName, $"Failed to delete cache directory: {dir.Name}", e); + success = false; + } } + // Raise regardless to cover scenario where size needs to be recalculated if the folder is manually removed on disk. OnPropertyChanged(nameof(CacheFolderSize)); return success; diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs index ec75ddf9040..b47b53654b4 100644 --- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs +++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; @@ -219,6 +219,8 @@ private void UpdateEnumDropdownLocalizations() DropdownDataGeneric.UpdateLabels(DialogJumpFileResultBehaviours); // Since we are using Binding instead of DynamicResource, we need to manually trigger the update OnPropertyChanged(nameof(AlwaysPreviewToolTip)); + Settings.CustomExplorer.OnDisplayNameChanged(); + Settings.CustomBrowser.OnDisplayNameChanged(); } public string Language diff --git a/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml b/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml index 81e15df6950..07cc7b6a750 100644 --- a/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml +++ b/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml @@ -403,7 +403,7 @@ MaxWidth="250" Margin="10 0 0 0" Command="{Binding SelectFileManagerCommand}" - Content="{Binding Settings.CustomExplorer.Name}" /> + Content="{Binding Settings.CustomExplorer.DisplayName}" /> + Content="{Binding Settings.CustomBrowser.DisplayName}" /> diff --git a/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs b/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs index 67bbbd9301f..e3a0e4e4404 100644 --- a/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs +++ b/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs @@ -17,8 +17,13 @@ public int SelectedCustomBrowserIndex get => selectedCustomBrowserIndex; set { - selectedCustomBrowserIndex = value; - OnPropertyChanged(nameof(CustomBrowser)); + // When one custom browser is selected and removed, the index will become -1, so we need to ignore this change + if (value < 0) return; + if (selectedCustomBrowserIndex != value) + { + selectedCustomBrowserIndex = value; + OnPropertyChanged(nameof(CustomBrowser)); + } } } @@ -40,22 +45,12 @@ public bool SaveSettings() return true; } - internal string SelectFile() - { - var dlg = new Microsoft.Win32.OpenFileDialog(); - var result = dlg.ShowDialog(); - if (result == true) - return dlg.FileName; - - return string.Empty; - } - [RelayCommand] private void Add() { CustomBrowsers.Add(new() { - Name = "New Profile" + Name = App.API.GetTranslation("defaultBrowser_new_profile") }); SelectedCustomBrowserIndex = CustomBrowsers.Count - 1; } diff --git a/Flow.Launcher/ViewModel/SelectFileManagerViewModel.cs b/Flow.Launcher/ViewModel/SelectFileManagerViewModel.cs index 77f004980b1..f6a32e3fed5 100644 --- a/Flow.Launcher/ViewModel/SelectFileManagerViewModel.cs +++ b/Flow.Launcher/ViewModel/SelectFileManagerViewModel.cs @@ -21,6 +21,8 @@ public int SelectedCustomExplorerIndex get => selectedCustomExplorerIndex; set { + // When one custom file manager is selected and removed, the index will become -1, so we need to ignore this change + if (value < 0) return; if (selectedCustomExplorerIndex != value) { selectedCustomExplorerIndex = value; @@ -98,27 +100,12 @@ private static bool IsFileManagerValid(string path) } } - internal void OpenUrl(string absoluteUri) - { - App.API.OpenUrl(absoluteUri); - } - - internal string SelectFile() - { - var dlg = new Microsoft.Win32.OpenFileDialog(); - var result = dlg.ShowDialog(); - if (result == true) - return dlg.FileName; - - return string.Empty; - } - [RelayCommand] private void Add() { CustomExplorers.Add(new() { - Name = "New Profile" + Name = App.API.GetTranslation("defaultBrowser_new_profile") }); SelectedCustomExplorerIndex = CustomExplorers.Count - 1; } diff --git a/Flow.Launcher/packages.lock.json b/Flow.Launcher/packages.lock.json index 32b78c3348c..c90db6b0cdd 100644 --- a/Flow.Launcher/packages.lock.json +++ b/Flow.Launcher/packages.lock.json @@ -16,9 +16,9 @@ }, "Fody": { "type": "Direct", - "requested": "[6.9.2, )", - "resolved": "6.9.2", - "contentHash": "YBHobPGogb0vYhGYIxn/ndWqTjNWZveDi5jdjrcshL2vjwU3gQGyDeI7vGgye+2rAM5fGRvlLgNWLW3DpviS/w==" + "requested": "[6.9.3, )", + "resolved": "6.9.3", + "contentHash": "1CUGgFdyECDKgi5HaUBhdv6k+VG9Iy4OCforGfHyar3xQXAJypZkzymgKtWj/4SPd6nSG0Qi7NH71qHrDSZLaA==" }, "MdXaml": { "type": "Direct", @@ -71,41 +71,41 @@ }, "Microsoft.Extensions.DependencyInjection": { "type": "Direct", - "requested": "[9.0.7, )", - "resolved": "9.0.7", - "contentHash": "i05AYA91vgq0as84ROVCyltD2gnxaba/f1Qw2rG7mUsS0gv8cPTr1Gm7jPQHq7JTr4MJoQUcanLVs16tIOUJaQ==", + "requested": "[9.0.9, )", + "resolved": "9.0.9", + "contentHash": "zQV2WOSP+3z1EuK91ULxfGgo2Y75bTRnmJHp08+w/YXAyekZutX/qCd88/HOMNh35MDW9mJJJxPpMPS+1Rww8A==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9" } }, "Microsoft.Extensions.Hosting": { "type": "Direct", - "requested": "[9.0.7, )", - "resolved": "9.0.7", - "contentHash": "Dkv55VfitwJjPUk9mFHxT9MJAd8su7eJNaCHhBU/Y9xFqw3ZNHwrpeptXeaXiaPtfQq+alMmawIz1Impk5pHkQ==", - "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.7", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7", - "Microsoft.Extensions.Configuration.Binder": "9.0.7", - "Microsoft.Extensions.Configuration.CommandLine": "9.0.7", - "Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.7", - "Microsoft.Extensions.Configuration.FileExtensions": "9.0.7", - "Microsoft.Extensions.Configuration.Json": "9.0.7", - "Microsoft.Extensions.Configuration.UserSecrets": "9.0.7", - "Microsoft.Extensions.DependencyInjection": "9.0.7", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7", - "Microsoft.Extensions.Diagnostics": "9.0.7", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.7", - "Microsoft.Extensions.FileProviders.Physical": "9.0.7", - "Microsoft.Extensions.Hosting.Abstractions": "9.0.7", - "Microsoft.Extensions.Logging": "9.0.7", - "Microsoft.Extensions.Logging.Abstractions": "9.0.7", - "Microsoft.Extensions.Logging.Configuration": "9.0.7", - "Microsoft.Extensions.Logging.Console": "9.0.7", - "Microsoft.Extensions.Logging.Debug": "9.0.7", - "Microsoft.Extensions.Logging.EventLog": "9.0.7", - "Microsoft.Extensions.Logging.EventSource": "9.0.7", - "Microsoft.Extensions.Options": "9.0.7" + "requested": "[9.0.9, )", + "resolved": "9.0.9", + "contentHash": "DmRsWH3g8yZGho/pLQ79hxhM2ctE1eDTZ/HbAnrD/uw8m+P2pRRJOoBVxlrhbhMP3/y3oAJoy0yITasfmilbTg==", + "dependencies": { + "Microsoft.Extensions.Configuration": "9.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", + "Microsoft.Extensions.Configuration.Binder": "9.0.9", + "Microsoft.Extensions.Configuration.CommandLine": "9.0.9", + "Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.9", + "Microsoft.Extensions.Configuration.FileExtensions": "9.0.9", + "Microsoft.Extensions.Configuration.Json": "9.0.9", + "Microsoft.Extensions.Configuration.UserSecrets": "9.0.9", + "Microsoft.Extensions.DependencyInjection": "9.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", + "Microsoft.Extensions.Diagnostics": "9.0.9", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9", + "Microsoft.Extensions.FileProviders.Physical": "9.0.9", + "Microsoft.Extensions.Hosting.Abstractions": "9.0.9", + "Microsoft.Extensions.Logging": "9.0.9", + "Microsoft.Extensions.Logging.Abstractions": "9.0.9", + "Microsoft.Extensions.Logging.Configuration": "9.0.9", + "Microsoft.Extensions.Logging.Console": "9.0.9", + "Microsoft.Extensions.Logging.Debug": "9.0.9", + "Microsoft.Extensions.Logging.EventLog": "9.0.9", + "Microsoft.Extensions.Logging.EventSource": "9.0.9", + "Microsoft.Extensions.Options": "9.0.9" } }, "Microsoft.Toolkit.Uwp.Notifications": { @@ -154,9 +154,9 @@ }, "VirtualizingWrapPanel": { "type": "Direct", - "requested": "[2.3.0, )", - "resolved": "2.3.0", - "contentHash": "Dpmtcpn2HqAWZR0NkN7Qd4YCjf+sdQcemIMKm2suZVbOIB9NsmKZnYaQDIpXWTh87a9+nArVto6Od1cM2ohzCQ==" + "requested": "[2.3.1, )", + "resolved": "2.3.1", + "contentHash": "imph3SJqFFgX8vc7XRBcftfgzIL7Q+uE0Tvk7dbY0KY0tcqUCs0ZmKV3Gt9QX2745v6bSw6ns8UHpXtiptHqdA==" }, "AvalonEdit": { "type": "Transitive", @@ -196,8 +196,8 @@ }, "FSharp.Core": { "type": "Transitive", - "resolved": "9.0.300", - "contentHash": "TVt2J7RCE1KCS2IaONF+p8/KIZ1eHNbW+7qmKF6hGoD4tXl+o07ja1mPtFjMqRa5uHMFaTrGTPn/m945WnDLiQ==" + "resolved": "9.0.303", + "contentHash": "6JlV8aD8qQvcmfoe/PMOxCHXc0uX4lR23u0fAyQtnVQxYULLoTZgwgZHSnRcuUHOvS3wULFWcwdnP1iwslH60g==" }, "HtmlAgilityPack": { "type": "Transitive", @@ -211,8 +211,8 @@ }, "JetBrains.Annotations": { "type": "Transitive", - "resolved": "2024.3.0", - "contentHash": "ox5pkeLQXjvJdyAB4b2sBYAlqZGLh3PjSnP1bQNVx72ONuTJ9+34/+Rq91Fc0dG29XG9RgZur9+NcP4riihTug==" + "resolved": "2025.2.2", + "contentHash": "0X56ZRizuHdrnPpgXjWV7f2tQO1FlQg5O1967OGKnI/4ZRNOK642J8L7brM1nYvrxTTU5TP1yRyXLRLaXLPQ8A==" }, "MemoryPack": { "type": "Transitive", @@ -249,249 +249,249 @@ }, "Meziantou.Framework.Win32.Jobs": { "type": "Transitive", - "resolved": "3.4.3", - "contentHash": "REjInKnQ0OrhjjtSMPQtLtdURctCroB4L8Sd2gjTOYDysklvsdnrStx1tHS7uLv+fSyFF3aazZmo5Ka0v1oz/w==" + "resolved": "3.4.4", + "contentHash": "AivBzH5wM1NHBLehclim+o37SmireP7JxCRUoTilsc/h7LH9+YCPjb6Ig6y0khnQhFcO1P8RHYw4oiR15TGHUg==" }, "Microsoft.Extensions.Configuration": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "oxGR51+w5cXm5B9gU6XwpAB2sTiyPSmZm7hjvv0rzRnmL5o/KZzE103AuQj7sK26OBupjVzU/bZxDWvvU4nhEg==", + "resolved": "9.0.9", + "contentHash": "w87wF/90/VI0ZQBhf4rbMEeyEy0vi2WKjFmACsNAKNaorY+ZlVz7ddyXkbADvaWouMKffNmR0yQOGcrvSSvKGg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7", - "Microsoft.Extensions.Primitives": "9.0.7" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", + "Microsoft.Extensions.Primitives": "9.0.9" } }, "Microsoft.Extensions.Configuration.Abstractions": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "lut/kiVvNsQ120VERMUYSFhpXPpKjjql+giy03LesASPBBcC0o6+aoFdzJH9GaYpFTQ3fGVhVjKjvJDoAW5/IQ==", + "resolved": "9.0.9", + "contentHash": "p5RKAY9POvs3axwA/AQRuJeM8AHuE8h4qbP1NxQeGm0ep46aXz1oCLAp/oOYxX1GsjStgdhHrN3XXLLXr0+b3w==", "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.7" + "Microsoft.Extensions.Primitives": "9.0.9" } }, "Microsoft.Extensions.Configuration.Binder": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "ExY+zXHhU4o9KC2alp3ZdLWyVWVRSn5INqax5ABk+HEOHlAHzomhJ7ek9HHliyOMiVGoYWYaMFOGr9q59mSAGA==", + "resolved": "9.0.9", + "contentHash": "6SIp/6Bngk4jm2W36JekZbiIbFPdE/eMUtrJEqIqHGpd1zar3jvgnwxnpWQfzUiGrkyY8q8s6V82zkkEZozghA==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9" } }, "Microsoft.Extensions.Configuration.CommandLine": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "LqwdkMNFeRyuqExewBSaWj8roEgZH8JQ9zEAmHl5ZFcnhCvjAdHICdYVRIiSEq9RWGB731LL8kZJM8tdTKEscA==", + "resolved": "9.0.9", + "contentHash": "9bzGOcHoTi8ijrj0MHh5qUY6n9CuittZUqEOj5iE0ZJoSCfG0BI9nhcpd8MC9bOOgjZW5OeizKO8rgta9lSVyA==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.7", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7" + "Microsoft.Extensions.Configuration": "9.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9" } }, "Microsoft.Extensions.Configuration.EnvironmentVariables": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "R8kgazVpDr4k1K7MeWPLAwsi5VpwrhE3ubXK38D9gpHEvf9XhZhJ8kWHKK00LDg5hJ7pMQLggdZ7XFdQ5182Ug==", + "resolved": "9.0.9", + "contentHash": "AB8suTh4STAMGDkPer5vL0YNp09eplvbkIbOfFJ1z8D1zOiFF8Hipk9FhCLU4Ea6TosWmGrK30ZIUO9KvAeFcg==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.7", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7" + "Microsoft.Extensions.Configuration": "9.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9" } }, "Microsoft.Extensions.Configuration.FileExtensions": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "3LVg32iMfR9ENeegXAo73L+877iOcQauLJsXlKZNVSsLA/HbPgClZdeMGdjLSkaidYw3l02XbXTlOdGYNgu91Q==", + "resolved": "9.0.9", + "contentHash": "fvgubCs++wTowHWuQ5TAyZV0S6ldA59U+tBVqFr4/WLd0oEf6ESbdBN2CFaVdn4sZqnarqMnl2O3++RG/Jrf/w==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.7", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.7", - "Microsoft.Extensions.FileProviders.Physical": "9.0.7", - "Microsoft.Extensions.Primitives": "9.0.7" + "Microsoft.Extensions.Configuration": "9.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9", + "Microsoft.Extensions.FileProviders.Physical": "9.0.9", + "Microsoft.Extensions.Primitives": "9.0.9" } }, "Microsoft.Extensions.Configuration.Json": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "3HQV326liEInT9UKEc+k73f1ECwNhvDS/DJAe5WvtMKDJTJqTH2ujrUC2ZlK/j6pXyPbV9f0Ku8JB20JveGImg==", + "resolved": "9.0.9", + "contentHash": "PiPYo1GTinR2ECM80zYdZUIFmde6jj5DryXUcOJg3yIjh+KQMQr42e+COD03QUsUiqNkJk511wVTnVpTm2AVZA==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.7", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7", - "Microsoft.Extensions.Configuration.FileExtensions": "9.0.7", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.7" + "Microsoft.Extensions.Configuration": "9.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", + "Microsoft.Extensions.Configuration.FileExtensions": "9.0.9", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9" } }, "Microsoft.Extensions.Configuration.UserSecrets": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "ouDuPgRdeF4TJXKUh+lbm6QwyWwnCy+ijiqfFM2cI5NmW83MwKg1WNp2nCdMVcwQW8wJXteF/L9lA6ZPS3bCIQ==", + "resolved": "9.0.9", + "contentHash": "bFaNxfU8gQJX3K/Dd6XT0YIJ5ZVihdAY6Z02p2nVTUHjUsaWflLIucZOgB/ecSNnN3zbbBEf1oFC7q5NHTZIHw==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7", - "Microsoft.Extensions.Configuration.Json": "9.0.7", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.7", - "Microsoft.Extensions.FileProviders.Physical": "9.0.7" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", + "Microsoft.Extensions.Configuration.Json": "9.0.9", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9", + "Microsoft.Extensions.FileProviders.Physical": "9.0.9" } }, "Microsoft.Extensions.DependencyInjection.Abstractions": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "iPK1FxbGFr2Xb+4Y+dTYI8Gupu9pOi8I3JPuPsrogUmEhe2hzZ9LpCmolMEBhVDo2ikcSr7G5zYiwaapHSQTew==" + "resolved": "9.0.9", + "contentHash": "/hymojfWbE9AlDOa0mczR44m00Jj+T3+HZO0ZnVTI032fVycI0ZbNOVFP6kqZMcXiLSYXzR2ilcwaRi6dzeGyA==" }, "Microsoft.Extensions.Diagnostics": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "6ykfInm6yw7pPHJACgnrPUXxUWVslFnzad44K/siXk6Ovan6fNMnXxI5X9vphHJuZ4JbMOdPIgsfTmLD+Dyxug==", + "resolved": "9.0.9", + "contentHash": "gtzl9SD6CvFYOb92qEF41Z9rICzYniM342TWbbJwN3eLS6a5fCLFvO1pQGtpMSnP3h1zHXupMEeKSA9musWYCQ==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.7", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.7", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.7" + "Microsoft.Extensions.Configuration": "9.0.9", + "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.9", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.9" } }, "Microsoft.Extensions.Diagnostics.Abstractions": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "d39Ov1JpeWCGLCOTinlaDkujhrSAQ0HFxb7Su1BjhCKBfmDcQ6Ia1i3JI6kd3NFgwi1dexTunu82daDNwt7E6w==", + "resolved": "9.0.9", + "contentHash": "YHGmxccrVZ2Ar3eI+/NdbOHkd1/HzrHvmQ5yBsp0Gl7jTyBe6qcXNYjUt9v9JIO+Z14la44+YYEe63JSqs1fYg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7", - "Microsoft.Extensions.Options": "9.0.7" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", + "Microsoft.Extensions.Options": "9.0.9" } }, "Microsoft.Extensions.FileProviders.Abstractions": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "y9djCca1cz/oz/J8jTxtoecNiNvaiGBJeWd7XOPxonH+FnfHqcfslJMcSr5JMinmWFyS7eh3C9L6m6oURZ5lSA==", + "resolved": "9.0.9", + "contentHash": "M1ZhL9QkBQ/k6l/Wjgcli5zrV86HzytQ+gQiNtk9vs9Ge1fb17KKZil9T6jd15p2x/BGfXpup7Hg55CC0kkfig==", "dependencies": { - "Microsoft.Extensions.Primitives": "9.0.7" + "Microsoft.Extensions.Primitives": "9.0.9" } }, "Microsoft.Extensions.FileProviders.Physical": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "JYEPYrb+YBpFTCdmSBrk8cg3wAi1V4so7ccq04qbhg3FQHQqgJk28L3heEOKMXcZobOBUjTnGCFJD49Ez9kG5w==", + "resolved": "9.0.9", + "contentHash": "sRrPtEwbK23OCFOQ36Xn6ofiB0/nl54/BOdR7lJ/Vwg3XlyvUdmyXvFUS1EU5ltn+sQtbcPuy1l0hsysO8++SQ==", "dependencies": { - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.7", - "Microsoft.Extensions.FileSystemGlobbing": "9.0.7", - "Microsoft.Extensions.Primitives": "9.0.7" + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9", + "Microsoft.Extensions.FileSystemGlobbing": "9.0.9", + "Microsoft.Extensions.Primitives": "9.0.9" } }, "Microsoft.Extensions.FileSystemGlobbing": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "5VKpTH2ME0SSs0lrtkpKgjCeHzXR5ka/H+qThPwuWi78wHubApZ/atD7w69FDt0OOM7UMV6LIbkqEQgoby4IXA==" + "resolved": "9.0.9", + "contentHash": "iQAgORaVIlkhcpxFnVEfjqNWfQCwBEEH7x2IanTwGafA6Tb4xiBoDWySTxUo3MV2NUV/PmwS/8OhT/elPnJCnw==" }, "Microsoft.Extensions.Hosting.Abstractions": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "yG2JCXAR+VqI1mKqynLPNJlNlrUJeEISEpX4UznOp2uM4IEFz3pDDauzyMvTjICutEJtOigJ1yWBvxbaIlibBw==", + "resolved": "9.0.9", + "contentHash": "ORA4dICNz7cuwupPkjXpSuoiK6GMg0aygInBIQCCFEimwoHntRKdJqB59faxq2HHJuTPW3NsZm5EjN5P5Zh6nQ==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7", - "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.7", - "Microsoft.Extensions.FileProviders.Abstractions": "9.0.7", - "Microsoft.Extensions.Logging.Abstractions": "9.0.7" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", + "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.9", + "Microsoft.Extensions.FileProviders.Abstractions": "9.0.9", + "Microsoft.Extensions.Logging.Abstractions": "9.0.9" } }, "Microsoft.Extensions.Logging": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "fdIeQpXYV8yxSWG03cCbU2Otdrq4NWuhnQLXokWLv3L9YcK055E7u8WFJvP+uuP4CFeCEoqZQL4yPcjuXhCZrg==", + "resolved": "9.0.9", + "contentHash": "MaCB0Y9hNDs4YLu3HCJbo199WnJT8xSgajG1JYGANz9FkseQ5f3v/llu3HxLI6mjDlu7pa7ps9BLPWjKzsAAzQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection": "9.0.7", - "Microsoft.Extensions.Logging.Abstractions": "9.0.7", - "Microsoft.Extensions.Options": "9.0.7" + "Microsoft.Extensions.DependencyInjection": "9.0.9", + "Microsoft.Extensions.Logging.Abstractions": "9.0.9", + "Microsoft.Extensions.Options": "9.0.9" } }, "Microsoft.Extensions.Logging.Abstractions": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "sMM6NEAdUTE/elJ2wqjOi0iBWqZmSyaTByLF9e8XHv6DRJFFnOe0N+s8Uc6C91E4SboQCfLswaBIZ+9ZXA98AA==", + "resolved": "9.0.9", + "contentHash": "FEgpSF+Z9StMvrsSViaybOBwR0f0ZZxDm8xV5cSOFiXN/t+ys+rwAlTd/6yG7Ld1gfppgvLcMasZry3GsI9lGA==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9" } }, "Microsoft.Extensions.Logging.Configuration": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "AEBty9rvFGvdFRqgIDEhQmiCnIfQWyzVoOZrO244cfu+n9M+wI1QLDpuROVILlplIBtLVmOezAF7d1H3Qog6Xw==", + "resolved": "9.0.9", + "contentHash": "Abuo+S0Sg+Ke6vzSh5Ell+lwJJM+CEIqg1ImtWnnqF6a/ibJkQnmFJi4/ekEw/0uAcdFKJXtGV7w6cFN0nyXeg==", "dependencies": { - "Microsoft.Extensions.Configuration": "9.0.7", - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7", - "Microsoft.Extensions.Configuration.Binder": "9.0.7", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7", - "Microsoft.Extensions.Logging": "9.0.7", - "Microsoft.Extensions.Logging.Abstractions": "9.0.7", - "Microsoft.Extensions.Options": "9.0.7", - "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.7" + "Microsoft.Extensions.Configuration": "9.0.9", + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", + "Microsoft.Extensions.Configuration.Binder": "9.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", + "Microsoft.Extensions.Logging": "9.0.9", + "Microsoft.Extensions.Logging.Abstractions": "9.0.9", + "Microsoft.Extensions.Options": "9.0.9", + "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.9" } }, "Microsoft.Extensions.Logging.Console": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "pEHlNa8iCfKsBFA3YVDn/8EicjSU/m8uDfyoR0i4svONDss4Yu9Kznw53E/TyI+TveTo7CwRid4kfd4pLYXBig==", + "resolved": "9.0.9", + "contentHash": "x3+W7IfW9Tg3sV+sU9N1039M4CqklaAecwhz9qNtjOCBdmg7h96JaL+NAvhYgZgweVJTJaxAvuO8I+ZZehE7Pg==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7", - "Microsoft.Extensions.Logging": "9.0.7", - "Microsoft.Extensions.Logging.Abstractions": "9.0.7", - "Microsoft.Extensions.Logging.Configuration": "9.0.7", - "Microsoft.Extensions.Options": "9.0.7" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", + "Microsoft.Extensions.Logging": "9.0.9", + "Microsoft.Extensions.Logging.Abstractions": "9.0.9", + "Microsoft.Extensions.Logging.Configuration": "9.0.9", + "Microsoft.Extensions.Options": "9.0.9" } }, "Microsoft.Extensions.Logging.Debug": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "MxzZj7XbsYJwfjclVTjJym2/nVIkksu7l7tC/4HYy+YRdDmpE4B+hTzCXu3BNfLNhdLPZsWpyXuYe6UGgWDm3g==", + "resolved": "9.0.9", + "contentHash": "q8IbjIzTjfaGfuf9LAuG3X9BytAWj2hWhLU61rEkit847oaSSbcdx/yybY3yL9RgVG1u9ctk7kbCv18M+7Fi6Q==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7", - "Microsoft.Extensions.Logging": "9.0.7", - "Microsoft.Extensions.Logging.Abstractions": "9.0.7" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", + "Microsoft.Extensions.Logging": "9.0.9", + "Microsoft.Extensions.Logging.Abstractions": "9.0.9" } }, "Microsoft.Extensions.Logging.EventLog": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "usrMVsY7c8M8fESt34Y3eEIQIlRlKXfPDlI+vYEb6xT7SUjhua2ey3NpHgQktiTgz8Uo5RiWqGD8ieiyo2WaDA==", + "resolved": "9.0.9", + "contentHash": "1SX5+mv16SBb5NrtLNxIvUt8PHbdvDloZazQdxz1CNM39jG7yeF6olH3sceQ4ONF0oVD5mVUsTag0iVX4xgyog==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7", - "Microsoft.Extensions.Logging": "9.0.7", - "Microsoft.Extensions.Logging.Abstractions": "9.0.7", - "Microsoft.Extensions.Options": "9.0.7", - "System.Diagnostics.EventLog": "9.0.7" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", + "Microsoft.Extensions.Logging": "9.0.9", + "Microsoft.Extensions.Logging.Abstractions": "9.0.9", + "Microsoft.Extensions.Options": "9.0.9", + "System.Diagnostics.EventLog": "9.0.9" } }, "Microsoft.Extensions.Logging.EventSource": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "/wwi6ckTEegCExFV6gVToCO7CvysZnmE50fpdkYUsSMh0ue9vRkQ7uOqkHyHol93ASYTEahrp+guMtS/+fZKaA==", + "resolved": "9.0.9", + "contentHash": "rGQi5mImot7tTFxj1tQWknWjOBHX1+gsX1WLmQNl5WHr4Sx1kXUBGDuRUjfx4c8pe/hcYHdalAmgk7RdusW6Jw==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7", - "Microsoft.Extensions.Logging": "9.0.7", - "Microsoft.Extensions.Logging.Abstractions": "9.0.7", - "Microsoft.Extensions.Options": "9.0.7", - "Microsoft.Extensions.Primitives": "9.0.7" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", + "Microsoft.Extensions.Logging": "9.0.9", + "Microsoft.Extensions.Logging.Abstractions": "9.0.9", + "Microsoft.Extensions.Options": "9.0.9", + "Microsoft.Extensions.Primitives": "9.0.9" } }, "Microsoft.Extensions.Options": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "trJnF6cRWgR5uMmHpGoHmM1wOVFdIYlELlkO9zX+RfieK0321Y55zrcs4AaEymKup7dxgEN/uJU25CAcMNQRXw==", + "resolved": "9.0.9", + "contentHash": "loxGGHE1FC2AefwPHzrjPq7X92LQm64qnU/whKfo6oWaceewPUVYQJBJs3S3E2qlWwnCpeZ+dGCPTX+5dgVAuQ==", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7", - "Microsoft.Extensions.Primitives": "9.0.7" + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", + "Microsoft.Extensions.Primitives": "9.0.9" } }, "Microsoft.Extensions.Options.ConfigurationExtensions": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "pE/jeAWHEIy/8HsqYA+I1+toTsdvsv+WywAcRoNSvPoFwjOREa8Fqn7D0/i0PbiXsDLFupltTTctliePx8ib4w==", + "resolved": "9.0.9", + "contentHash": "n4DCdnn2qs6V5U06Sx62FySEAZsJiJJgOzrPHDh9hPK7c2W8hEabC76F3Re3tGPjpiKa02RvB6FxZyxo8iICzg==", "dependencies": { - "Microsoft.Extensions.Configuration.Abstractions": "9.0.7", - "Microsoft.Extensions.Configuration.Binder": "9.0.7", - "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.7", - "Microsoft.Extensions.Options": "9.0.7", - "Microsoft.Extensions.Primitives": "9.0.7" + "Microsoft.Extensions.Configuration.Abstractions": "9.0.9", + "Microsoft.Extensions.Configuration.Binder": "9.0.9", + "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.9", + "Microsoft.Extensions.Options": "9.0.9", + "Microsoft.Extensions.Primitives": "9.0.9" } }, "Microsoft.Extensions.Primitives": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "ti/zD9BuuO50IqlvhWQs9GHxkCmoph5BHjGiWKdg2t6Or8XoyAfRJiKag+uvd/fpASnNklfsB01WpZ4fhAe0VQ==" + "resolved": "9.0.9", + "contentHash": "z4pyMePOrl733ltTowbN565PxBw1oAr8IHmIXNDiDqd22nFpYltX9KhrNC/qBWAG1/Zx5MHX+cOYhWJQYCO/iw==" }, "Microsoft.IO.RecyclableMemoryStream": { "type": "Transitive", @@ -590,15 +590,15 @@ }, "NLog": { "type": "Transitive", - "resolved": "6.0.1", - "contentHash": "qDWiqy8/xdpZKtHna/645KbalwP86N2NFJEzfqhcv+Si4V2iNaEfR/dCneuF/4+Dcwl3f7jHMXj3ndWYftV3Ug==" + "resolved": "6.0.4", + "contentHash": "Xr+lIk1ZlTTFXEqnxQVLxrDqZlt2tm5X+/AhJbaY2emb/dVtGDiU5QuEtj3gHtwV/SWlP/rJ922I/BPuOJXlRw==" }, "NLog.OutputDebugString": { "type": "Transitive", - "resolved": "6.0.1", - "contentHash": "wwJCQLaHVzuRf8TsXB+EEdrzVvE3dnzCSMQMDgwkw3AXp8VSp3JSVF/Q/H0oEqggKgKhPs13hh3a7svyQr4s3A==", + "resolved": "6.0.4", + "contentHash": "TOP2Ap9BbE98B/l/TglnguowOD0rXo8B/20xAgvj9shO/kf6IJ5M4QMhVxq72mrneJ/ANhHY7Jcd+xJbzuI5PA==", "dependencies": { - "NLog": "6.0.1" + "NLog": "6.0.4" } }, "runtime.osx.10.10-x64.CoreCompat.System.Drawing": { @@ -608,8 +608,8 @@ }, "SharpVectors.Wpf": { "type": "Transitive", - "resolved": "1.8.4.2", - "contentHash": "PNxLkMBJnV8A+6yH9OqOlhLJegvWP/dvh0rAJp2l0kcrR+rB4R2tQ9vhUqka+UilH4atN8T6zvjDOizVyfz2Ng==" + "resolved": "1.8.5", + "contentHash": "WURdBDq5AE8RjKV9pFS7lNkJe81gxja9SaMGE4URq9GJUZ6M+5DGUL0Lm3B0iYW2/Meyowaz4ffGsyW+RBSTtg==" }, "Splat": { "type": "Transitive", @@ -672,8 +672,8 @@ }, "System.Diagnostics.EventLog": { "type": "Transitive", - "resolved": "9.0.7", - "contentHash": "AJ+9fyCtQUImntxAJ9l4PZiCd4iepuk4pm7Qcno7PBIWQnfXlvwKuFsGk2H+QyY69GUVzDP2heELW6ho5BCXUg==" + "resolved": "9.0.9", + "contentHash": "wpsUfnyv8E5K4WQaok6weewvAbQhcLwXFcHBm5U0gdEaBs85N//ssuYvRPFWwz2rO/9/DFP3A1sGMzUFBj8y3w==" }, "System.Drawing.Common": { "type": "Transitive", @@ -838,10 +838,10 @@ "type": "Project", "dependencies": { "Droplex": "[1.7.0, )", - "FSharp.Core": "[9.0.300, )", + "FSharp.Core": "[9.0.303, )", "Flow.Launcher.Infrastructure": "[1.0.0, )", - "Flow.Launcher.Plugin": "[4.7.0, )", - "Meziantou.Framework.Win32.Jobs": "[3.4.3, )", + "Flow.Launcher.Plugin": "[5.0.0, )", + "Meziantou.Framework.Win32.Jobs": "[3.4.4, )", "Microsoft.IO.RecyclableMemoryStream": "[3.0.1, )", "SemanticVersioning": "[3.0.0, )", "StreamJsonRpc": "[2.22.11, )", @@ -854,14 +854,14 @@ "Ben.Demystifier": "[0.4.1, )", "BitFaster.Caching": "[2.5.4, )", "CommunityToolkit.Mvvm": "[8.4.0, )", - "Flow.Launcher.Plugin": "[4.7.0, )", + "Flow.Launcher.Plugin": "[5.0.0, )", "InputSimulator": "[1.0.4, )", "MemoryPack": "[1.21.4, )", "Microsoft.VisualStudio.Threading": "[17.14.15, )", "NHotkey.Wpf": "[3.0.0, )", - "NLog": "[6.0.1, )", - "NLog.OutputDebugString": "[6.0.1, )", - "SharpVectors.Wpf": "[1.8.4.2, )", + "NLog": "[6.0.4, )", + "NLog.OutputDebugString": "[6.0.4, )", + "SharpVectors.Wpf": "[1.8.5, )", "System.Drawing.Common": "[7.0.0, )", "ToolGood.Words.Pinyin": "[3.1.0.3, )" } @@ -869,7 +869,7 @@ "flow.launcher.plugin": { "type": "Project", "dependencies": { - "JetBrains.Annotations": "[2024.3.0, )" + "JetBrains.Annotations": "[2025.2.2, )" } } } diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj index 901dc2a374b..9cb2469d9d7 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj @@ -34,6 +34,7 @@ prompt 4 false + $(NoWarn);FLSG0007 @@ -103,9 +104,9 @@ - - - + + + diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Helper/FaviconHelper.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Helper/FaviconHelper.cs index 1820a783634..82b0890337c 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Helper/FaviconHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Helper/FaviconHelper.cs @@ -106,12 +106,13 @@ public static byte[] TryConvertToWebp(byte[] data) { try { - using (var image = SKImage.FromBitmap(bitmap)) - using (var webp = image.Encode(SKEncodedImageFormat.Webp, 65)) - { - if (webp != null) - return webp.ToArray(); - } + using var image = SKImage.FromBitmap(bitmap); + if (image is null) + return null; + + using var webp = image.Encode(SKEncodedImageFormat.Webp, 65); + if (webp != null) + return webp.ToArray(); } finally { diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ja.xaml index 6700bce1902..d60739468be 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ja.xaml @@ -6,15 +6,15 @@ ブラウザのブックマークを検索します - Failed to set url in clipboard + クリップボードにURLをコピーできませんでした - Bookmark Data - Open bookmarks in: - New window - New tab - Set browser from path: - Choose + ブックマークのデータ + ブックマークを開く場所: + 新しいウインドウ + 新しいタブ + 以下のパスからブラウザーを設定: + 選択 URLをコピー ブックマークのURLをクリップボードにコピー 次のブラウザから読み込む: diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj b/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj index 43a2c2f3cec..b3cee425d4e 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj @@ -33,6 +33,7 @@ prompt 4 false + $(NoWarn);FLSG0007 @@ -62,7 +63,7 @@ - + diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ar.xaml index 759ba99de67..324c9197241 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ar.xaml @@ -1,8 +1,8 @@ - + آلة حاسبة - تمكنك من إجراء العمليات الحسابية. (جرب 5*3-2 في Flow Launcher) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. ليست رقمًا (NaN) التعبير خاطئ أو غير مكتمل (هل نسيت بعض الأقواس؟) نسخ هذا الرقم إلى الحافظة @@ -13,4 +13,5 @@ نقطة (.) أقصى عدد من المنازل العشرية Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/cs.xaml index f5dbe8e2003..844c2dc30c8 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/cs.xaml @@ -1,8 +1,8 @@ - + Kalkulačka - Umožňuje provádět matematické výpočty.(Try 5*3-2 v průtokovém spouštěči) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Není číslo (NaN) Nesprávný nebo neúplný výraz (Nezapomněli jste na závorky?) Kopírování výsledku do schránky @@ -13,4 +13,5 @@ Tečka (.) Desetinná místa Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/da.xaml index 2f2777aa15a..405a39e92c2 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/da.xaml @@ -1,8 +1,8 @@ - + Calculator - Perform mathematical calculations (including hexadecimal values). Use ',' or '.' as thousand separator or decimal place. + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Not a number (NaN) Expression wrong or incomplete (Did you forget some parentheses?) Copy this number to the clipboard @@ -13,4 +13,5 @@ Dot (.) Max. decimal places Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/de.xaml index 46f5efe23eb..4dc634db21c 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/de.xaml @@ -1,8 +1,8 @@ - + Rechner - Ermöglicht mathematische Berechnungen. (Versuchen Sie 5*3-2 in Flow Launcher) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Nicht eine Zahl (NaN) Ausdruck falsch oder unvollständig (Haben Sie einige Klammern vergessen?) Diese Zahl in die Zwischenablage kopieren @@ -13,4 +13,5 @@ Punkt (.) Max. Dezimalstellen Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/en.xaml index b71e5d8a0e0..b12972b1b84 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/en.xaml @@ -4,7 +4,7 @@ xmlns:system="clr-namespace:System;assembly=mscorlib"> Calculator - Perform mathematical calculations (including hexadecimal values). Use ',' or '.' as thousand separator or decimal place. + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Not a number (NaN) Expression wrong or incomplete (Did you forget some parentheses?) Copy this number to the clipboard @@ -15,4 +15,5 @@ Dot (.) Max. decimal places Copy failed, please try later + Show error message when calculation fails \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es-419.xaml index dce29cba5cd..12b4fdb0a76 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es-419.xaml @@ -1,8 +1,8 @@ - + Calculadora - Permite hacer cálculos matemáticos. (Pruebe con 5*3-2 en Flow Launcher) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. No es un número (NaN) Expresión incorrecta o incompleta (¿Olvidó algún paréntesis?) Copiar este número al portapapeles @@ -13,4 +13,5 @@ Punto (.) Número máximo de decimales Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml index 7f1775e2e9d..05a862d78e8 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml @@ -1,8 +1,8 @@ - + Calculadora - Realiza cálculos matemáticos (incluyendo valores hexadecimales). Utilizar ',' o '.' como separador de miles o decimal. + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. No es un número (NaN) Expresión incorrecta o incompleta (¿Ha olvidado algunos paréntesis?) Copiar este número al portapapeles @@ -13,4 +13,5 @@ Punto (.) Número máximo de decimales Ha fallado la copia, inténtelo más tarde + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/fr.xaml index a6db348116d..3219e517a5b 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/fr.xaml @@ -1,8 +1,8 @@ - + Calculatrice - Effectuer des calculs mathématiques (y compris les valeurs hexadécimales). Utilisez ',' ou '.' comme séparateur de milliers ou décimaux. + Effectuez des calculs mathématiques, y compris les valeurs hexadécimales et les fonctions avancées telles que 'min(1,2,3)', 'sqrt(123)' et 'cos(123)'. Pas un nombre (NaN) Expression incorrecte ou incomplète (avez-vous oublié certaines parenthèses ?) Copier ce chiffre dans le presse-papiers @@ -13,4 +13,5 @@ Point (.) Décimales max. Échec de la copie, réessayer plus tard + Afficher le message d'erreur lorsque le calcul échoue diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/he.xaml index b053c890547..7ee027743b2 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/he.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/he.xaml @@ -1,8 +1,8 @@ - + מחשבו - מאפשר לבצע חישובים מתמטיים. (נסה 5*3-2 ב-Flow Launcher) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. לא מספר (NaN) הביטוי שגוי או לא שלם (האם שכחת סוגריים?) העתק מספר זה ללוח @@ -13,4 +13,5 @@ נקודה (.) מספר מקסימלי של מקומות עשרוניים Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/it.xaml index 5b724e82ebb..a0e61ff326e 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/it.xaml @@ -1,8 +1,8 @@ - + Calcolatrice - Consente di eseguire calcoli matematici (provare 5*3-2 in Flow Launcher) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Non è un numero (NaN) Espressione sbagliata o incompleta (avete dimenticato delle parentesi?) Copiare questo numero negli appunti @@ -13,4 +13,5 @@ Punto (.) Max. cifre decimali Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ja.xaml index bbd06006f1b..da0b64bdb2f 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ja.xaml @@ -1,16 +1,17 @@  - Calculator - Perform mathematical calculations (including hexadecimal values). Use ',' or '.' as thousand separator or decimal place. - Not a number (NaN) - Expression wrong or incomplete (Did you forget some parentheses?) + 電卓 + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. + 数値で表せません (NaN) + 式が間違っているか不完全です(括弧を忘れていませんか?) この数字をクリップボードにコピーします 小数点の区切り記号 - The decimal separator to be used in the output. + 出力で使用される小数点の区切り文字。 システムのロケールを使用 コンマ(,) ドット (.) 小数点以下の最大桁数 - Copy failed, please try later + コピーに失敗しました。後でやり直してください + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ko.xaml index e4ca16d4142..a595f483933 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ko.xaml @@ -1,8 +1,8 @@ - + 계산기 - 수학 계산을 할 수 있습니다. Flow Launcher에서 5*3-2를 입력해보세요. + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. 숫자가 아님 (NaN) 표현식이 잘못되었거나 불완전합니다. (괄호를 깜빡하셨나요?) 해당 숫자를 클립보드에 복사 @@ -13,4 +13,5 @@ 마침표 (.) 최대 소수점 아래 자릿 수 Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nb.xaml index 9ae31e976d7..9b6b1f8086c 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nb.xaml @@ -1,8 +1,8 @@ - + Kalkulator - Lar deg gjøre matematiske beregninger. (Prøv 5*3-2 i Flow Launcher) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Ikke et tall (NaN) Uttrykk feil eller ufullstendig (glem noen parenteser?) Kopier dette nummeret til utklippstavlen @@ -13,4 +13,5 @@ Prikk (.) Maks. desimaler Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nl.xaml index 2f2777aa15a..405a39e92c2 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nl.xaml @@ -1,8 +1,8 @@ - + Calculator - Perform mathematical calculations (including hexadecimal values). Use ',' or '.' as thousand separator or decimal place. + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Not a number (NaN) Expression wrong or incomplete (Did you forget some parentheses?) Copy this number to the clipboard @@ -13,4 +13,5 @@ Dot (.) Max. decimal places Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pl.xaml index e73298dcaf0..03f50ca2385 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pl.xaml @@ -1,8 +1,8 @@ - + Kalkulator - Szybkie wykonywanie obliczeń matematycznych. (Spróbuj wpisać 5*3-2 w oknie Flow Launchera) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Nie liczba (NaN) Wyrażenie niepoprawne lub niekompletne (Czy zapomniałeś o nawiasach?) Skopiuj ten numer do schowka @@ -13,4 +13,5 @@ Kropka (.) Maks. liczba miejsc po przecinku Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-br.xaml index 73a60d42f09..9afc3b784c2 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-br.xaml @@ -1,8 +1,8 @@ - + Calculadora - Permite fazer cálculos matemáticos.(Tente 5*3-2 no Flow Launcher) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Não é um número (NaN) Expressão errada ou incompleta (Você esqueceu de adicionar parênteses?) Copiar este numero para a área de transferência @@ -13,4 +13,5 @@ Ponto (.) Max. decimal places Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-pt.xaml index 7ec52be8cc8..1201e2555b5 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pt-pt.xaml @@ -1,8 +1,8 @@ - + Calculadora - Execução de cálculos matemáticos (incluindo valores hexadecimais). Utilize ',' ou '.' como separador de milhares ou de casas decimais. + Execute cálculos matemáticos, incluindo valores hexadecimais e funções avançadas como 'min(1,2,3)', 'sqrt(123)' e 'cos(123)'. Não é número (NN) Expressão errada ou incompleta (esqueceu-se de algum parêntese?) Copiar número para a área de transferência @@ -13,4 +13,5 @@ Ponto (.) Número máximo de casas decimais Falha ao copiar. Por favor tente mais tarde. + Mostrar mensagem de erro se o cálculo falhar diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ru.xaml index 43a7d44c7d7..7b40770cd42 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ru.xaml @@ -1,8 +1,8 @@ - + Калькулятор - Позволяет выполнять математические вычисления. (Попробуйте 5*3-2 в Flow Launcher) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Не является числом (NaN) Выражение неправильное или неполное (Вы забыли скобки?) Скопировать этот номер в буфер обмена @@ -13,4 +13,5 @@ Точка (.) Макс. число знаков после запятой Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml index 498b6eb5021..f398ab3e269 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sk.xaml @@ -1,8 +1,8 @@ - + Kalkulačka - Vykonávanie matematických výpočtov (vrátane hexadecimálnych hodnôt). Ako oddeľovač tisícov alebo desatinného miesta použite ',' alebo '.'. + Vykonávajte matematické výpočty vrátane hexadecimálnych hodnôt a pokročilých funkcií, ako napríklad "min(1,2,3)", "sqrt(123)" a "cos(123)". Nie je číslo (NaN) Nesprávny alebo neúplný výraz (Nezabudli ste na zátvorky?) Kopírovať výsledok do schránky @@ -13,4 +13,5 @@ Bodka (.) Desatinné miesta Kopírovanie zlyhalo, skúste to neskôr + Zobraziť chybovú správu, keď výpočet zlyhá diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sr-Cyrl-RS.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sr-Cyrl-RS.xaml index 98e3aebb576..405a39e92c2 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sr-Cyrl-RS.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sr-Cyrl-RS.xaml @@ -2,7 +2,7 @@ Calculator - Perform mathematical calculations (including hexadecimal values). Use ',' or '.' as thousand separator or decimal place. + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Not a number (NaN) Expression wrong or incomplete (Did you forget some parentheses?) Copy this number to the clipboard @@ -13,4 +13,5 @@ Dot (.) Max. decimal places Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sr.xaml index 2f2777aa15a..405a39e92c2 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/sr.xaml @@ -1,8 +1,8 @@ - + Calculator - Perform mathematical calculations (including hexadecimal values). Use ',' or '.' as thousand separator or decimal place. + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Not a number (NaN) Expression wrong or incomplete (Did you forget some parentheses?) Copy this number to the clipboard @@ -13,4 +13,5 @@ Dot (.) Max. decimal places Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/tr.xaml index b41fc06566b..aec5bec43b5 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/tr.xaml @@ -1,8 +1,8 @@ - + Hesap Makinesi - Matematiksel hesaplamalar yapmaya yarar. (5*3-2 yazmayı deneyin) + Onaltılık değerler ve 'min(1,2,3)', 'sqrt(123)' ve 'cos(123)' gibi gelişmiş fonksiyonlar dahil olmak üzere matematiksel hesaplamalar gerçekleştirin. Sayı değil (NaN) İfade hatalı ya da eksik. (Parantez koymayı mı unuttunuz?) Bu sayıyı panoya kopyala @@ -13,4 +13,5 @@ Nokta (.) Maks. ondalık basamak Kopyalama başarısız oldu, lütfen daha sonra deneyin + Hesaplama başarısız olduğunda hata mesajı göster diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml index 14042dffd08..c2af4bbe3d1 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml @@ -1,8 +1,8 @@ - + Калькулятор - Виконуйте математичні обчислення (включаючи шістнадцяткові значення). Використовуйте «,» або «.» як роздільник тисяч або десяткових знаків. + Виконуйте математичні розрахунки, включаючи шістнадцяткові значення та розширені функції, такі як «min(1,2,3)», «sqrt(123)» та «cos(123)». Не є числом (NaN) Вираз неправильний або неповний (Ви забули якісь дужки?) Скопіюйте це число в буфер обміну @@ -13,4 +13,5 @@ Крапка (.) Макс. кількість знаків після коми Копіювання не вдалося, спробуйте пізніше + Показувати повідомлення про помилку, якщо обчислення не вдалося diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml index 20717d1dbfa..6efbda3e492 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml @@ -1,8 +1,8 @@ - + Máy tính - Cho phép thực hiện các phép tính toán học. (Thử 5*3-2 trong Flow Launcher) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. Không phải là số (NaN) Biểu thức sai hoặc không đầy đủ (Bạn có quên một số dấu ngoặc đơn không?) Sao chép số này vào clipboard @@ -13,4 +13,5 @@ dấu chấm (.) Tối đa. chữ số thập phân Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-cn.xaml index 445ed394ff9..234c613c665 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-cn.xaml @@ -1,8 +1,8 @@ - + 计算器 - 执行数学计算(包括十六进制值)。使用 , 或 . 作为分隔符或小数点。 + 进行数学计算,包括十六进制值和高级函数,如“最小(1,2,3)”、“sqrt(123)”和“cos123”等。 请输入数字 表达错误或不完整(您是否忘记了一些括号?) 将结果复制到剪贴板 @@ -13,4 +13,5 @@ 点(.) 小数点后最大位数 复制失败,请稍后再试 + 计算错误时显示错误消息 diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-tw.xaml index 7c8acf40b2d..b56e4660fbb 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/zh-tw.xaml @@ -1,8 +1,8 @@ - + 計算機 - 為 Flow Launcher 提供數學計算功能。(試著在 Flow Launcher 輸入 5*3-2) + Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. 不是一個數 (NaN) Expression wrong or incomplete (Did you forget some parentheses?) 複製此數至剪貼簿 @@ -13,4 +13,5 @@ 點 (.) 小數點後最大位數 Copy failed, please try later + Show error message when calculation fails diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs b/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs index 6878c54b4a8..9d5e4700fff 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs @@ -13,30 +13,24 @@ namespace Flow.Launcher.Plugin.Calculator { public class Main : IPlugin, IPluginI18n, ISettingProvider { - private static readonly Regex RegValidExpressChar = MainRegexHelper.GetRegValidExpressChar(); - private static readonly Regex RegBrackets = MainRegexHelper.GetRegBrackets(); private static readonly Regex ThousandGroupRegex = MainRegexHelper.GetThousandGroupRegex(); private static readonly Regex NumberRegex = MainRegexHelper.GetNumberRegex(); + private static readonly Regex PowRegex = MainRegexHelper.GetPowRegex(); + private static readonly Regex LogRegex = MainRegexHelper.GetLogRegex(); + private static readonly Regex LnRegex = MainRegexHelper.GetLnRegex(); + private static readonly Regex FunctionRegex = MainRegexHelper.GetFunctionRegex(); private static Engine MagesEngine; private const string Comma = ","; private const string Dot = "."; + private const string IcoPath = "Images/calculator.png"; + private static readonly List EmptyResults = []; internal static PluginInitContext Context { get; set; } = null!; private Settings _settings; private SettingsViewModel _viewModel; - /// - /// Holds the formatting information for a single query. - /// This is used to ensure thread safety by keeping query state local. - /// - private class ParsingContext - { - public string InputDecimalSeparator { get; set; } - public bool InputUsesGroupSeparators { get; set; } - } - public void Init(PluginInitContext context) { Context = context; @@ -54,38 +48,98 @@ public void Init(PluginInitContext context) public List Query(Query query) { - if (!CanCalculate(query)) + if (string.IsNullOrWhiteSpace(query.Search)) { - return new List(); + return EmptyResults; } - var context = new ParsingContext(); - try { - var expression = NumberRegex.Replace(query.Search, m => NormalizeNumber(m.Value, context)); + var search = query.Search; + bool isFunctionPresent = FunctionRegex.IsMatch(search); + + // Mages is case sensitive, so we need to convert all function names to lower case. + search = FunctionRegex.Replace(search, m => m.Value.ToLowerInvariant()); + + var decimalSep = GetDecimalSeparator(); + var groupSep = GetGroupSeparator(decimalSep); + var expression = NumberRegex.Replace(search, m => NormalizeNumber(m.Value, isFunctionPresent, decimalSep, groupSep)); + + // WORKAROUND START: The 'pow' function in Mages v3.0.0 is broken. + // https://github.com/FlorianRappl/Mages/issues/132 + // We bypass it by rewriting any pow(x,y) expression to the equivalent (x^y) expression + // before the engine sees it. This loop handles nested calls. + { + string previous; + do + { + previous = expression; + expression = PowRegex.Replace(previous, PowMatchEvaluator); + } while (previous != expression); + } + // WORKAROUND END + + // WORKAROUND START: The 'log' & 'ln' function in Mages v3.0.0 are broken. + // https://github.com/FlorianRappl/Mages/issues/137 + // We bypass it by rewriting any log & ln expression to the equivalent (log10 & log) expression + // before the engine sees it. This loop handles nested calls. + { + string previous; + do + { + previous = expression; + expression = LogRegex.Replace(previous, LogMatchEvaluator); + } while (previous != expression); + } + { + string previous; + do + { + previous = expression; + expression = LnRegex.Replace(previous, LnMatchEvaluator); + } while (previous != expression); + } + // WORKAROUND END var result = MagesEngine.Interpret(expression); - if (result?.ToString() == "NaN") + if (result == null || string.IsNullOrEmpty(result.ToString())) + { + if (!_settings.ShowErrorMessage) return EmptyResults; + return + [ + new Result + { + Title = Localize.flowlauncher_plugin_calculator_expression_not_complete(), + IcoPath = IcoPath + } + ]; + } + + if (result.ToString() == "NaN") + { result = Localize.flowlauncher_plugin_calculator_not_a_number(); + } if (result is Function) + { result = Localize.flowlauncher_plugin_calculator_expression_not_complete(); + } - if (!string.IsNullOrEmpty(result?.ToString())) + if (!string.IsNullOrEmpty(result.ToString())) { decimal roundedResult = Math.Round(Convert.ToDecimal(result), _settings.MaxDecimalPlaces, MidpointRounding.AwayFromZero); - string newResult = FormatResult(roundedResult, context); + string newResult = FormatResult(roundedResult); - return new List - { + return + [ new Result { Title = newResult, - IcoPath = "Images/calculator.png", + IcoPath = IcoPath, Score = 300, - SubTitle = Localize.flowlauncher_plugin_calculator_copy_number_to_clipboard(), + // Check context nullability for unit testing + SubTitle = Context == null ? string.Empty : Localize.flowlauncher_plugin_calculator_copy_number_to_clipboard(), CopyText = newResult, Action = c => { @@ -101,118 +155,206 @@ public List Query(Query query) } } } - }; + ]; } } catch (Exception) { - // ignored + // Mages engine can throw various exceptions, for simplicity we catch them all and show a generic message. + if (!_settings.ShowErrorMessage) return EmptyResults; + return + [ + new Result + { + Title = Localize.flowlauncher_plugin_calculator_expression_not_complete(), + IcoPath = IcoPath + } + ]; } - return new List(); + return EmptyResults; } - /// - /// Parses a string representation of a number, detecting its format. It uses structural analysis - /// and falls back to system culture for truly ambiguous cases (e.g., "1,234"). - /// It populates the provided ParsingContext with the detected format for later use. - /// - /// A normalized number string with '.' as the decimal separator for the Mages engine. - private string NormalizeNumber(string numberStr, ParsingContext context) + private static string PowMatchEvaluator(Match m) { - var systemGroupSep = CultureInfo.CurrentCulture.NumberFormat.NumberGroupSeparator; - int dotCount = numberStr.Count(f => f == '.'); - int commaCount = numberStr.Count(f => f == ','); + // m.Groups[1].Value will be `(...)` with parens + var contentWithParen = m.Groups[1].Value; + // remove outer parens. `(min(2,3), 4)` becomes `min(2,3), 4` + var argsContent = contentWithParen[1..^1]; - // Case 1: Unambiguous mixed separators (e.g., "1.234,56") - if (dotCount > 0 && commaCount > 0) + var bracketCount = 0; + var splitIndex = -1; + + // Find the top-level comma that separates the two arguments of pow. + for (var i = 0; i < argsContent.Length; i++) { - context.InputUsesGroupSeparators = true; - if (numberStr.LastIndexOf('.') > numberStr.LastIndexOf(',')) - { - context.InputDecimalSeparator = Dot; - return numberStr.Replace(Comma, string.Empty); - } - else + switch (argsContent[i]) { - context.InputDecimalSeparator = Comma; - return numberStr.Replace(Dot, string.Empty).Replace(Comma, Dot); + case '(': + case '[': + bracketCount++; + break; + case ')': + case ']': + bracketCount--; + break; + case ',' when bracketCount == 0: + splitIndex = i; + break; } + + if (splitIndex != -1) + break; + } + + if (splitIndex == -1) + { + // This indicates malformed arguments for pow, e.g., pow(5) or pow(). + // Return original string to let Mages handle the error. + return m.Value; + } + + var arg1 = argsContent[..splitIndex].Trim(); + var arg2 = argsContent[(splitIndex + 1)..].Trim(); + + // Check for empty arguments which can happen with stray commas, e.g., pow(,5) + if (string.IsNullOrEmpty(arg1) || string.IsNullOrEmpty(arg2)) + { + return m.Value; } - // Case 2: Only dots - if (dotCount > 0) + return $"({arg1}^{arg2})"; + } + + private static string LogMatchEvaluator(Match m) + { + // m.Groups[1].Value will be `(...)` with parens + var contentWithParen = m.Groups[1].Value; + var argsContent = contentWithParen[1..^1]; + + // log is unary — if malformed, return original to let Mages handle it + var arg = argsContent.Trim(); + if (string.IsNullOrEmpty(arg)) return m.Value; + + // log(x) -> log10(x) (natural log) + return $"(log10({arg}))"; + } + + private static string LnMatchEvaluator(Match m) + { + // m.Groups[1].Value will be `(...)` with parens + var contentWithParen = m.Groups[1].Value; + var argsContent = contentWithParen[1..^1]; + + // ln is unary — if malformed, return original to let Mages handle it + var arg = argsContent.Trim(); + if (string.IsNullOrEmpty(arg)) return m.Value; + + // ln(x) -> log(x) (natural log) + return $"(log({arg}))"; + } + private static string NormalizeNumber(string numberStr, bool isFunctionPresent, string decimalSep, string groupSep) + { + if (isFunctionPresent) { - if (dotCount > 1) + // STRICT MODE: When functions are present, ',' is ALWAYS an argument separator. + if (numberStr.Contains(',')) { - context.InputUsesGroupSeparators = true; - return numberStr.Replace(Dot, string.Empty); + return numberStr; } - // A number is ambiguous if it has a single Dot in the thousands position, - // and does not start with a "0." or "." - bool isAmbiguous = numberStr.Length - numberStr.LastIndexOf('.') == 4 - && !numberStr.StartsWith("0.") - && !numberStr.StartsWith("."); - if (isAmbiguous) + + string processedStr = numberStr; + + // Handle group separator, with special care for ambiguous dot. + if (!string.IsNullOrEmpty(groupSep)) { - if (systemGroupSep == Dot) + if (groupSep == ".") { - context.InputUsesGroupSeparators = true; - return numberStr.Replace(Dot, string.Empty); + var parts = processedStr.Split('.'); + if (parts.Length > 1) + { + var culture = CultureInfo.CurrentCulture; + if (IsValidGrouping(parts, culture.NumberFormat.NumberGroupSizes)) + { + processedStr = processedStr.Replace(groupSep, ""); + } + // If not grouped, it's likely a decimal number, so we don't strip dots. + } } else { - context.InputDecimalSeparator = Dot; - return numberStr; + processedStr = processedStr.Replace(groupSep, ""); } } - else // Unambiguous decimal (e.g., "12.34" or "0.123" or ".123") + + // Handle decimal separator. + if (decimalSep != ".") { - context.InputDecimalSeparator = Dot; - return numberStr; + processedStr = processedStr.Replace(decimalSep, "."); } + + return processedStr; } + else + { + // LENIENT MODE: No functions are present, so we can be flexible. + string processedStr = numberStr; + if (!string.IsNullOrEmpty(groupSep)) + { + processedStr = processedStr.Replace(groupSep, ""); + } + if (decimalSep != ".") + { + processedStr = processedStr.Replace(decimalSep, "."); + } + return processedStr; + } + } + + private static bool IsValidGrouping(string[] parts, int[] groupSizes) + { + if (parts.Length <= 1) return true; + + if (groupSizes is null || groupSizes.Length == 0 || groupSizes[0] == 0) + return false; // has groups, but culture defines none. - // Case 3: Only commas - if (commaCount > 0) + var firstPart = parts[0]; + if (firstPart.StartsWith('-')) firstPart = firstPart[1..]; + if (firstPart.Length == 0) return false; // e.g. ",123" + + if (firstPart.Length > groupSizes[0]) return false; + + var lastGroupSize = groupSizes.Last(); + var canRepeatLastGroup = lastGroupSize != 0; + + int groupIndex = 0; + for (int i = parts.Length - 1; i > 0; i--) { - if (commaCount > 1) + int expectedSize; + if (groupIndex < groupSizes.Length) { - context.InputUsesGroupSeparators = true; - return numberStr.Replace(Comma, string.Empty); + expectedSize = groupSizes[groupIndex]; } - // A number is ambiguous if it has a single Comma in the thousands position, - // and does not start with a "0," or "," - bool isAmbiguous = numberStr.Length - numberStr.LastIndexOf(',') == 4 - && !numberStr.StartsWith("0,") - && !numberStr.StartsWith(","); - if (isAmbiguous) + else if(canRepeatLastGroup) { - if (systemGroupSep == Comma) - { - context.InputUsesGroupSeparators = true; - return numberStr.Replace(Comma, string.Empty); - } - else - { - context.InputDecimalSeparator = Comma; - return numberStr.Replace(Comma, Dot); - } + expectedSize = lastGroupSize; } - else // Unambiguous decimal (e.g., "12,34" or "0,123" or ",123") + else { - context.InputDecimalSeparator = Comma; - return numberStr.Replace(Comma, Dot); + return false; } + + if (parts[i].Length != expectedSize) return false; + + groupIndex++; } - // Case 4: No separators - return numberStr; + return true; } - private string FormatResult(decimal roundedResult, ParsingContext context) + private string FormatResult(decimal roundedResult) { - string decimalSeparator = context.InputDecimalSeparator ?? GetDecimalSeparator(); + string decimalSeparator = GetDecimalSeparator(); string groupSeparator = GetGroupSeparator(decimalSeparator); string resultStr = roundedResult.ToString(CultureInfo.InvariantCulture); @@ -221,7 +363,7 @@ private string FormatResult(decimal roundedResult, ParsingContext context) string integerPart = parts[0]; string fractionalPart = parts.Length > 1 ? parts[1] : string.Empty; - if (context.InputUsesGroupSeparators && integerPart.Length > 3) + if (integerPart.Length > 3) { integerPart = ThousandGroupRegex.Replace(integerPart, groupSeparator); } @@ -236,29 +378,23 @@ private string FormatResult(decimal roundedResult, ParsingContext context) private string GetGroupSeparator(string decimalSeparator) { - // This logic is now independent of the system's group separator - // to ensure consistent output for unit testing. - return decimalSeparator == Dot ? Comma : Dot; - } - - private bool CanCalculate(Query query) - { - if (query.Search.Length < 2) - { - return false; - } + var culture = CultureInfo.CurrentCulture; + var systemGroupSeparator = culture.NumberFormat.NumberGroupSeparator; - if (!RegValidExpressChar.IsMatch(query.Search)) + if (_settings.DecimalSeparator == DecimalSeparator.UseSystemLocale) { - return false; + return systemGroupSeparator; } - if (!IsBracketComplete(query.Search)) + // When a custom decimal separator is used, + // use the system's group separator unless it conflicts with the custom decimal separator. + if (decimalSeparator == systemGroupSeparator) { - return false; + // Conflict: use the opposite of the decimal separator as a fallback. + return decimalSeparator == Dot ? Comma : Dot; } - return true; + return systemGroupSeparator; } private string GetDecimalSeparator() @@ -273,25 +409,6 @@ private string GetDecimalSeparator() }; } - private static bool IsBracketComplete(string query) - { - var matchs = RegBrackets.Matches(query); - var leftBracketCount = 0; - foreach (Match match in matchs) - { - if (match.Value == "(" || match.Value == "[") - { - leftBracketCount++; - } - else - { - leftBracketCount--; - } - } - - return leftBracketCount == 0; - } - public string GetTranslatedPluginTitle() { return Localize.flowlauncher_plugin_calculator_plugin_name(); diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/MainRegexHelper.cs b/Plugins/Flow.Launcher.Plugin.Calculator/MainRegexHelper.cs index f4e2090e740..a8b582ccce5 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/MainRegexHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/MainRegexHelper.cs @@ -4,16 +4,21 @@ namespace Flow.Launcher.Plugin.Calculator; internal static partial class MainRegexHelper { - - [GeneratedRegex(@"[\(\)\[\]]", RegexOptions.Compiled)] - public static partial Regex GetRegBrackets(); - - [GeneratedRegex(@"^(ceil|floor|exp|pi|e|max|min|det|abs|log|ln|sqrt|sin|cos|tan|arcsin|arccos|arctan|eigval|eigvec|eig|sum|polar|plot|round|sort|real|zeta|bin2dec|hex2dec|oct2dec|factorial|sign|isprime|isinfty|==|~=|&&|\|\||(?:\<|\>)=?|[ei]|[0-9]|0x[\da-fA-F]+|[\+\%\-\*\/\^\., ""]|[\(\)\|\!\[\]])+$", RegexOptions.Compiled)] - public static partial Regex GetRegValidExpressChar(); - - [GeneratedRegex(@"[\d\.,]+", RegexOptions.Compiled)] + [GeneratedRegex(@"-?[\d\.,'\u00A0\u202F]+", RegexOptions.Compiled | RegexOptions.CultureInvariant)] public static partial Regex GetNumberRegex(); [GeneratedRegex(@"\B(?=(\d{3})+(?!\d))", RegexOptions.Compiled)] public static partial Regex GetThousandGroupRegex(); + + [GeneratedRegex(@"\bpow(\((?:[^()\[\]]|\((?)|\)(?<-Depth>)|\[(?)|\](?<-Depth>))*(?(Depth)(?!))\))", RegexOptions.Compiled | RegexOptions.RightToLeft | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)] + public static partial Regex GetPowRegex(); + + [GeneratedRegex(@"\blog(\((?:[^()\[\]]|\((?)|\)(?<-Depth>)|\[(?)|\](?<-Depth>))*(?(Depth)(?!))\))", RegexOptions.Compiled | RegexOptions.RightToLeft | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)] + public static partial Regex GetLogRegex(); + + [GeneratedRegex(@"\bln(\((?:[^()\[\]]|\((?)|\)(?<-Depth>)|\[(?)|\](?<-Depth>))*(?(Depth)(?!))\))", RegexOptions.Compiled | RegexOptions.RightToLeft | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)] + public static partial Regex GetLnRegex(); + + [GeneratedRegex(@"\b(sqrt|pow|factorial|abs|sign|ceil|floor|round|exp|log|log2|log10|min|max|lt|eq|gt|sin|cos|tan|arcsin|arccos|arctan|isnan|isint|isprime|isinfty|rand|randi|type|is|as|length|throw|catch|eval|map|clamp|lerp|regex|shuffle)\s*\(", RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant)] + public static partial Regex GetFunctionRegex(); } diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Settings.cs b/Plugins/Flow.Launcher.Plugin.Calculator/Settings.cs index 8354863b852..cac0f308016 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Settings.cs @@ -1,9 +1,11 @@  -namespace Flow.Launcher.Plugin.Calculator +namespace Flow.Launcher.Plugin.Calculator; + +public class Settings { - public class Settings - { - public DecimalSeparator DecimalSeparator { get; set; } = DecimalSeparator.UseSystemLocale; - public int MaxDecimalPlaces { get; set; } = 10; - } + public DecimalSeparator DecimalSeparator { get; set; } = DecimalSeparator.UseSystemLocale; + + public int MaxDecimalPlaces { get; set; } = 10; + + public bool ShowErrorMessage { get; set; } = false; } diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs b/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs index 87ae72fb681..79236bdf8e5 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs @@ -1,31 +1,25 @@ using System.Collections.Generic; using System.Linq; -namespace Flow.Launcher.Plugin.Calculator.ViewModels -{ - public class SettingsViewModel : BaseModel - { - public SettingsViewModel(Settings settings) - { - Settings = settings; - } +namespace Flow.Launcher.Plugin.Calculator.ViewModels; - public Settings Settings { get; init; } +public class SettingsViewModel(Settings settings) : BaseModel +{ + public Settings Settings { get; } = settings; - public static IEnumerable MaxDecimalPlacesRange => Enumerable.Range(1, 20); + public static IEnumerable MaxDecimalPlacesRange => Enumerable.Range(1, 20); - public List AllDecimalSeparator { get; } = DecimalSeparatorLocalized.GetValues(); + public List AllDecimalSeparator { get; } = DecimalSeparatorLocalized.GetValues(); - public DecimalSeparator SelectedDecimalSeparator + public DecimalSeparator SelectedDecimalSeparator + { + get => Settings.DecimalSeparator; + set { - get => Settings.DecimalSeparator; - set + if (Settings.DecimalSeparator != value) { - if (Settings.DecimalSeparator != value) - { - Settings.DecimalSeparator = value; - OnPropertyChanged(); - } + Settings.DecimalSeparator = value; + OnPropertyChanged(); } } } diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml index 8d240ef3971..9e7549b2df1 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml @@ -15,6 +15,7 @@ + @@ -58,5 +59,14 @@ ItemsSource="{Binding MaxDecimalPlacesRange}" SelectedItem="{Binding Settings.MaxDecimalPlaces}" /> + diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml.cs b/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml.cs index 7bc307d111c..9e75e7bfb3b 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml.cs @@ -1,22 +1,16 @@ using System.Windows.Controls; using Flow.Launcher.Plugin.Calculator.ViewModels; -namespace Flow.Launcher.Plugin.Calculator.Views +namespace Flow.Launcher.Plugin.Calculator.Views; + +public partial class CalculatorSettings : UserControl { - /// - /// Interaction logic for CalculatorSettings.xaml - /// - public partial class CalculatorSettings : UserControl - { - private readonly SettingsViewModel _viewModel; - private readonly Settings _settings; + private readonly SettingsViewModel _viewModel; - public CalculatorSettings(Settings settings) - { - _viewModel = new SettingsViewModel(settings); - _settings = _viewModel.Settings; - DataContext = _viewModel; - InitializeComponent(); - } + public CalculatorSettings(Settings settings) + { + _viewModel = new SettingsViewModel(settings); + DataContext = _viewModel; + InitializeComponent(); } } diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json index c9435e04315..93df9ec72dd 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json @@ -2,7 +2,7 @@ "ID": "CEA0FDFC6D3B4085823D60DC76F28855", "ActionKeyword": "*", "Name": "Calculator", - "Description": "Perform mathematical calculations (including hexadecimal values). Use ',' or '.' as thousand separator or decimal place.", + "Description": "Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'.", "Author": "cxfksword, dcog989", "Version": "1.0.0", "Language": "csharp", diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj b/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj index af33f4da2ce..b7c54e57847 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj @@ -19,6 +19,7 @@ ..\..\Output\Release\Plugins\Flow.Launcher.Plugin.Explorer + $(NoWarn);FLSG0007 @@ -47,8 +48,8 @@ - - + + diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml index b2bf99515b4..608fe88a159 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml @@ -22,6 +22,7 @@ حدث خطأ أثناء البحث: {0} تعذر فتح المجلد تعذر فتح الملف + This new action keyword is already assigned to another plugin, please choose a different one حذف diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml index 0acdb5ca163..2381d501b27 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml @@ -22,6 +22,7 @@ Při vyhledávání došlo k chybě: {0} Adresář nelze otevřít Nelze otevřít soubor + This new action keyword is already assigned to another plugin, please choose a different one Smazat diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml index 66816de93e1..f5f13e5a3a2 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml @@ -22,6 +22,7 @@ Error occurred during search: {0} Could not open folder Could not open file + This new action keyword is already assigned to another plugin, please choose a different one Slet diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml index 8ddb958adfc..8e352e614b7 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml @@ -22,6 +22,7 @@ Fehler aufgetreten während Suche: {0} Ordner konnte nicht geöffnet werden Datei konnte nicht geöffnet werden + This new action keyword is already assigned to another plugin, please choose a different one Löschen diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml index f80a559654b..7379571a769 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml @@ -22,6 +22,7 @@ Error occurred during search: {0} Could not open folder Could not open file + This new action keyword is already assigned to another plugin, please choose a different one Eliminar diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml index 474ba9a4c0b..0a1d73c2834 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml @@ -22,6 +22,7 @@ Se ha producido un error durante la búsqueda: {0} No se ha podido abrir la carpeta No se ha podido abrir el archivo + This new action keyword is already assigned to another plugin, please choose a different one Eliminar diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml index 096cd4a0d93..d9b767b9cec 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml @@ -22,6 +22,7 @@ Une erreur s'est produite pendant la recherche : {0} Impossible d'ouvrir le dossier Impossible d'ouvrir le fichier + This new action keyword is already assigned to another plugin, please choose a different one Supprimer diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml index a4e4445ae2b..a84d7707dad 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml @@ -22,6 +22,7 @@ אירעה שגיאה במהלך החיפוש: {0} לא ניתן היה לפתוח את התיקייה לא ניתן היה לפתוח את הקובץ + This new action keyword is already assigned to another plugin, please choose a different one מחק diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml index f3fa1e1e6c1..a88ad2da1d3 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml @@ -22,6 +22,7 @@ Errore durante la ricerca: {0} Impossibile aprire la cartella Impossibile aprire il file + This new action keyword is already assigned to another plugin, please choose a different one Cancella diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml index d0b045175a1..8a701ebc6f0 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml @@ -2,17 +2,17 @@ - Please make a selection first - Please select a folder path. - Please choose a different name or folder path. - Are you sure you want to delete this quick access link? - Are you sure you want to delete this index search excluded path? - Please select a folder link - Are you sure you want to delete {0}? - Are you sure you want to permanently delete this file? - Are you sure you want to permanently delete this file/folder? - Deletion successful - Successfully deleted {0} + 項目を選択してください + フォルダのパスを選択してください。 + 別の名前またはフォルダのパスを選択してください。 + このクイックアクセスリンクを削除してもよろしいですか? + このインデックス検索の除外パスを削除してもよろしいですか? + フォルダーのリンクを選択してください + {0} を削除してもよろしいですか? + このファイルを完全に削除してもよろしいですか? + このファイルやフォルダーを完全に削除してもよろしいですか? + 削除に成功 + {0} は正常に削除されました Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword The required service for Windows Index Search does not appear to be running @@ -20,8 +20,9 @@ The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return Explorer Alternative Error occurred during search: {0} - Could not open folder - Could not open file + フォルダーを開けませんでした + ファイルを開けませんでした + This new action keyword is already assigned to another plugin, please choose a different one 削除 @@ -31,7 +32,7 @@ アクションキーワードのカスタマイズ Customise Quick Access Quick Access Links - Everything Setting + Everything の設定 プレビューパネル サイズ 作成日時 @@ -39,8 +40,8 @@ File Age ファイル情報の表示 日付と時刻の形式 - Sort Option: - Everything Path: + 並べ替え方法: + Everything のパス: Launch Hidden Editor Path Shell Path @@ -64,16 +65,16 @@ Direct Enumeration ファイル エディターのパス フォルダー エディターのパス - Enabled - Disabled + 有効 + 無効 Content Search Engine Directory Recursive Search Engine Index Search Engine Windowsのインデックスオプションを開く Excluded File Types (comma seperated) - For example: exe,jpg,png - Maximum results + 例: exe,jpg,png + 結果の最大表示件数 The maximum number of results requested from active search engine @@ -81,17 +82,17 @@ Windows SearchまたはEverythingを使って、ファイルやフォルダーを検索・管理します - Ctrl + Enter to open the directory + Ctrl + Enter でフォルダーを開く Ctrl + Enter to open the containing folder {0}{4}Size: {1}{4}Date created: {2}{4}Date modified: {3} - Unknown + 不明 {0}{3}Space free: {1}{3}Total size: {2} パスをコピー 現在の項目のパスをコピー - Copy name - Copy name of current item to clipboard + 名前をコピー + 現在の項目の名前をクリップボードにコピーする コピー 現在のファイルをコピー 現在のフォルダーをコピー @@ -99,13 +100,13 @@ 現在のファイルを完全に削除 現在のフォルダーを完全に削除 名前 - Type - Path + 種類 + パス ファイル フォルダー - Delete the selected - Run as different user - Run the selected using a different user account + 選択したものを削除する + 別のユーザーとして実行 + 別のユーザーアカウントを使用して選択したものを実行する フォルダーを開く 現在の項目が含まれている場所を開きます エディターで開く: @@ -119,9 +120,9 @@ Windowsインデックスオプションを開けませんでした クイックアクセスに追加 現在の項目をクイックアクセスに追加 - Successfully Added + 正常に追加されました クイックアクセスに追加しました - Successfully Removed + 削除に成功しました Successfully removed from Quick Access エクスプローラーの検索アクティベーション用アクションキーワードで開けるように、クイックアクセスに追加します クイックアクセスから削除 @@ -130,81 +131,81 @@ Windowsの右クリックメニューを表示 アプリで開く 開くためのプログラムを選択します - Fail to delete {0} + {0} の削除に失敗しました File not found: {0} - Fail to open {0} - Fail to set text in clipboard - Fail to set files/folders in clipboard + {0} の削除に失敗しました + クリップボードにテキストをコピーできませんでした + ファイル/フォルダのコピーに失敗しました - {0} free of {1} - Open in Default File Manager + 空き領域 {1} 中の {0} + デフォルトのファイルマネージャーで開く Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. - Failed to load Everything SDK - Warning: Everything service is not running - Error while querying Everything - Sort By - Name ↑ - Name ↓ - Path ↑ - Path ↓ - Size ↑ - Size ↓ - Extension ↑ - Extension ↓ - Type Name ↑ - Type Name ↓ - Date Created ↑ - Date Created ↓ - Date Modified ↑ - Date Modified ↓ + Everything SDK の読み込みに失敗しました + 警告: Everythingのサービスが実行されていません + Everything へのクエリ中にエラーが発生しました + 並べ替え順 + 名前 ↑ + 名前 ↓ + パス ↑ + パス ↓ + サイズ ↑ + サイズ ↓ + 拡張子 ↑ + 拡張子 ↓ + 種類名 ↑ + 種類名 ↓ + 作成日時 ↑ + 作成日時 ↓ + 更新日時 ↑ + 更新日時 ↓ Attributes ↑ Attributes ↓ File List FileName ↑ File List FileName ↓ - Run Count ↑ - Run Count ↓ + 実行回数 ↑ + 実行回数 ↓ Date Recently Changed ↑ Date Recently Changed ↓ - Date Accessed ↑ - Date Accessed ↓ - Date Run ↑ - Date Run ↓ + アクセス日時 ↑ + アクセス日時 ↓ + 実行日時 ↑ + 実行日時 ↓ - Warning: This is not a Fast Sort option, searches may be slow + 警告:これは高速な並べ替えオプションではありません。検索が遅くなる場合があります Search Full Path - Enable File/Folder Run Count + ファイル/フォルダの実行カウントを有効にする - Click to launch or install Everything - Everything Installation - Installing Everything service. Please wait... - Successfully installed Everything service - Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com + クリックして Everything を起動またはインストール + Everything のインストール + Everything サービスをインストールしています。お待ちください… + Everything サービスを正常にインストールしました + Everything サービスを自動的にインストールできませんでした。https://www.voidtools.com から手動でインストールしてください Click here to start it Everythingのインストールが見つかりませんでした。手動で場所を指定しますか?{0}{0}「いいえ」をクリックすると、Everythingが自動的にインストールされます。 - Do you want to enable content search for Everything? - It can be very slow without index (which is only supported in Everything v1.5+) + Everything でのコンテンツ検索を有効にしますか? + インデックスなしでは非常に遅くなることがあります(Everything v1.5以降でのみサポートされています) - Unable to find Everything.exe - Failed to install Everything, please install it manually + Everything.exe が見つかりません + Everything のインストールに失敗しました。手動でインストールしてください - Native Context Menu - Display native context menu (experimental) - Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). - Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Windowsのコンテキストメニュー + Windowsのコンテキストメニューを表示(実験的) + 以下では、コンテキストメニューに表示する項目を指定することができます。部分的 (例: 「開」)、または完全な項目名を指定することができます (「開く」)。 + 以下では、コンテキストメニューから除外する項目を指定することができます。部分的 (例: 「開」)、または完全な項目名を指定することができます (「開く」)。 - Today - {0} days ago - 1 month ago - {0} months ago - 1 year ago - {0} years ago + 今日 + {0} 日前 + 1 か月前 + {0} か月前 + 1 年前 + {0} 年前 diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml index 3195ff6e5be..e437926c874 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml @@ -22,6 +22,7 @@ Error occurred during search: {0} Could not open folder Could not open file + This new action keyword is already assigned to another plugin, please choose a different one 삭제 diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml index 5efdead0c33..b0672d3ad82 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml @@ -22,6 +22,7 @@ Feil oppstod under søk: {0} Kunne ikke åpne mappe Kunne ikke åpne fil + This new action keyword is already assigned to another plugin, please choose a different one Slett diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml index cc6d350c920..3de4ce5e52c 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml @@ -22,6 +22,7 @@ Error occurred during search: {0} Could not open folder Could not open file + This new action keyword is already assigned to another plugin, please choose a different one Verwijder diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml index c981c2832e5..1a01e8b90a2 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml @@ -22,6 +22,7 @@ Wystąpił błąd podczas wyszukiwania: {0} Nie można otworzyć folderu Nie można otworzyć pliku + This new action keyword is already assigned to another plugin, please choose a different one Usuń diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml index fe4fa320a24..9a3a4ffeb75 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml @@ -22,6 +22,7 @@ Error occurred during search: {0} Could not open folder Could not open file + This new action keyword is already assigned to another plugin, please choose a different one Apagar diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml index d0651cc53e8..2d33768f9a7 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml @@ -22,6 +22,7 @@ Ocorreu um erro ao pesquisar: {0} Não foi possível abrir a pasta Não foi possível abrir o ficheiro + This new action keyword is already assigned to another plugin, please choose a different one Eliminar diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml index 1644745ae99..cb28fcfd554 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml @@ -22,6 +22,7 @@ При поиске произошла ошибка: {0} Не удалось открыть папку Не удалось открыть файл + This new action keyword is already assigned to another plugin, please choose a different one Удалить @@ -57,14 +58,14 @@ Quick Access: Current Action Keyword Подтвердить - Enabled + Включено When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword Everything Windows Index Direct Enumeration Путь к редактору файлов Путь к редактору папки - Enabled + Включено Отключён Content Search Engine diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml index 3ca738b69c5..1350969b6b5 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml @@ -22,6 +22,7 @@ Počas vyhľadávania došlo k chybe: {0} Nepodarilo sa otvoriť priečinok Nepodarilo sa otvoriť súbor + Nový aktivačný príkaz už bol priradený inému pluginu, prosím, zvoľte iný aktivačný príkaz Odstrániť diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr-Cyrl-RS.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr-Cyrl-RS.xaml index 19fe6dc648e..e7979f6dd3b 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr-Cyrl-RS.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr-Cyrl-RS.xaml @@ -22,6 +22,7 @@ Error occurred during search: {0} Could not open folder Could not open file + This new action keyword is already assigned to another plugin, please choose a different one Delete diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml index f8effbd7cf3..ef7e6a5c321 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml @@ -22,6 +22,7 @@ Error occurred during search: {0} Could not open folder Could not open file + This new action keyword is already assigned to another plugin, please choose a different one Obriši diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml index aefe8af30d0..3e491ea22db 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml @@ -22,6 +22,7 @@ Arama sırasında hata oluştu: {0} Klasör açılamadı Dosya açılamadı + This new action keyword is already assigned to another plugin, please choose a different one Sil @@ -123,7 +124,7 @@ Hızlı Erişim'e başarıyla eklendi Başarıyla Kaldırıldı Hızlı Erişim'den başarıyla kaldırıldı - Add to Quick Access so it can be opened with Explorer's Search Activation action keyword + Dosya Gezgini'nin Arama Etkinleştirme anahtar sözcüğü ile açılabilmesi için Hızlı Erişim'e ekleyin Hızlı Erişimden Kaldır Hızlı Erişimden Kaldır Geçerli öğeyi Hızlı Erişim'den kaldır diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml index 823c33193d8..60a08a82f39 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml @@ -22,6 +22,7 @@ Виникла помилка під час пошуку: {0} Не вдалося відкрити папку Не вдалося відкрити файл + This new action keyword is already assigned to another plugin, please choose a different one Видалити diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml index 7b64af3d832..6416fc447f6 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml @@ -22,6 +22,7 @@ Đã xảy ra lỗi trong quá trình tìm kiếm: {0} Không thể mở thư mục Không thể mở file + This new action keyword is already assigned to another plugin, please choose a different one Xóa diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml index 8ad979ac8c2..1cab71d8ddb 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml @@ -22,6 +22,7 @@ 搜索时发生错误:{0} 无法打开文件夹 无法打开文件 + This new action keyword is already assigned to another plugin, please choose a different one 删除 diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml index 39f260499a6..d64cd769819 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml @@ -22,6 +22,7 @@ Error occurred during search: {0} Could not open folder Could not open file + This new action keyword is already assigned to another plugin, please choose a different one 刪除 diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs b/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs index 7292697ce33..ae2235c5cf9 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs @@ -577,8 +577,8 @@ public string ExcludedFileTypes } } - public int MaxResultLowerLimit => 1; - public int MaxResultUpperLimit => 100000; + public int MaxResultLowerLimit { get; } = 1; + public int MaxResultUpperLimit { get; } = 100000; public int MaxResult { @@ -592,7 +592,7 @@ public int MaxResult #region Everything FastSortWarning - public List AllEverythingSortOptions = EverythingSortOptionLocalized.GetValues(); + public List AllEverythingSortOptions { get; } = EverythingSortOptionLocalized.GetValues(); public EverythingSortOption SelectedEverythingSortOption { diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ja.xaml index 893948d3dcc..85188e6228f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/ja.xaml @@ -1,9 +1,9 @@  - Activate {0} plugin action keyword + {0} プラグインのアクションキーワード - Plugin Indicator - Provides plugins action words suggestions + プラグインインジケーター + プラグインのアクションキーワードの一覧を検索します diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml index d62f0f61bfc..f51b692e6b7 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml @@ -2,69 +2,69 @@ - Downloading plugin - Successfully downloaded - Error: Unable to download the plugin - {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. - {0} by {1} {2}{2}Would you like to uninstall this plugin? - {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. - {0} by {1} {2}{2}Would you like to install this plugin? - Plugin Install - Installing Plugin - Download and install {0} - Plugin Uninstall - Keep plugin settings - Do you want to keep the settings of the plugin for the next usage? + プラグインをダウンロード中 + {0} のダウンロードに成功 + エラー: プラグインをダウンロードできません + {0} by {1} {2}{3}このプラグインをアンインストールしますか?アンインストール後、Flow Launcherは自動的に再起動されます。 + {0} by {1} {2}{2}このプラグインをアンインストールしますか? + {0} by {1} {2}{3}このプラグインをインストールしますか?インストール後、Flow Launcherは自動的に再起動されます。 + {0} by {1} {2}{2}このプラグインをインストールしますか? + プラグインのインストール + プラグインをインストール中 + {0} をダウンロードしてインストール中 + プラグインのアンインストール + プラグインの設定を保持 + 再びインストールして使用するときのためにプラグインの設定を維持しますか? Plugin successfully installed. Restarting Flow, please wait... - Unable to find the plugin.json metadata file from the extracted zip file. - Error: A plugin which has the same or greater version with {0} already exists. - Error installing plugin - Error occurred while trying to install {0} - Error uninstalling plugin - No update available - All plugins are up to date - {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. - {0} by {1} {2}{2}Would you like to update this plugin? - Plugin Update - This plugin is already installed - Plugin Manifest Download Failed - Please check if you can connect to github.com. This error means you may not be able to install or update plugins. - Update all plugins - Would you like to update all plugins? - Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. - Would you like to update {0} plugins? - {0} plugins successfully updated. Restarting Flow, please wait... - Plugin {0} successfully updated. Restarting Flow, please wait... - Installing from an unknown source - You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) + 展開されたzipファイルからplugin.jsonメタデータファイルが見つかりません。 + エラー: {0} と同じまたはそれ以上のバージョンを持つプラグインが既に存在します。 + プラグインのインストール失敗 + {0} のインストール中にエラーが発生しました + プラグインのアンインストール失敗 + 利用可能な更新はありません + すべてのプラグインが最新です + {0} by {1} {2}{3}このプラグインを更新しますか?更新後、Flow Launcherは自動的に再起動されます。 + {0} by {1} {2}{2}このプラグインを更新しますか? + プラグインの更新 + このプラグインは既にインストールされています + プラグインマニフェストのダウンロードに失敗 + github.com に接続できるかどうかを確認してください。このエラーはプラグインをインストールまたは更新できないことを意味します。 + すべてのプラグインを更新 + すべてのプラグインを更新しますか? + {0} 個のプラグインを更新してもよいですか?{1}すべてのプラグインを更新した後、Flow Launcher が再起動します。 + {0} 個のプラグインを更新してもよいですか? + {0} 個のプラグインが正常に更新されました。Flow を再起動しています。お待ちください… + プラグイン {0} が正常に更新されました。Flow を再起動しています。お待ちください… + 不明なソースからインストール中 + あなたは不明なソースから提供されたプラグインをインストールしようとしており、潜在的なリスクを含んでいる可能性があります!{0}{0}このプラグインの開発元をよく調べ、安全であることをご自身で確かめてください。{0}{0}それでもあなたはこのプラグインをインストールしますか?{0}{0}(この警告は設定で無効にすることができます) - Plugin {0} successfully installed. Please restart Flow. - Plugin {0} successfully uninstalled. Please restart Flow. - Plugin {0} successfully updated. Please restart Flow. - {0} plugins successfully updated. Please restart Flow. - Plugin {0} has already been modified. Please restart Flow before making any further changes. - {0} modified already - Please restart Flow before making any further changes + プラグイン {0} のインストールに成功しました。Flow を再起動してください。 + プラグイン {0} のアンインストールに成功しました。Flow を再起動してください。 + プラグイン {0} が正常に更新されました。Flow を再起動してください。 + {0} 個のプラグインが正常に更新されました。Flow を再起動してください。 + プラグイン {0} は既に変更されています。Flow Launcher を再起動してからもう一度お試しください。 + {0} は既に変更されています + これ以上変更を加える前に Flow Launcher を再起動してください - Invalid zip installer file - Please check if there is a plugin.json in {0} + 無効な zip インストーラーファイル + {0} に plugin.json があるか確認してください - Plugins Manager - Install, uninstall or update Flow Launcher plugins via the search window - Unknown Author + プラグインマネージャー + 検索ウィンドウから Flow Launcher のプラグインをインストール、アンインストール、または更新する + 不明な作者 - Open website - Visit the plugin's website - See source code - See the plugin's source code - Suggest an enhancement or submit an issue - Suggest an enhancement or submit an issue to the plugin developer - Go to Flow's plugins repository - Visit the PluginsManifest repository to see community-made plugin submissions + ウェブサイトを開く + プラグインのウェブサイトを開く + ソースコードを参照 + プラグインのソースコードを見る + 改善を提案するか、問題を報告してください + プラグイン開発者に機能改善を提案するか問題を報告してください + Flow のプラグインリポジトリに移動 + PluginsManifest リポジトリにアクセスして、コミュニティで作られたプラグインを表示する 不明な提供元からインストールするとき警告する - Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager + プラグインマネージャー経由でプラグインをインストール、アンインストール、または更新した後、Flow Lancher を自動的に再起動します diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml index 18913c7c65a..5ecd203f803 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml @@ -56,8 +56,8 @@ Перейти на сайт - Visit the plugin's website - See source code + Перейти на сайт плагина + Посмотреть исходный код See the plugin's source code Suggest an enhancement or submit an issue Suggest an enhancement or submit an issue to the plugin developer diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml index f788c9ce3c7..22d8aee6e18 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml @@ -66,5 +66,5 @@ Upozornenie na inštaláciu z neznámeho zdroja - Automaticky reštartovať Flow Launcher po inštalácii/odinštalácii/aktualizáciu pluginu cez Správcu pluginov + Automaticky reštartovať Flow Launcher po inštalácii/odinštalácii/aktualizácii pluginu cez Správcu pluginov diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Flow.Launcher.Plugin.ProcessKiller.csproj b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Flow.Launcher.Plugin.ProcessKiller.csproj index 2da97ebbd4c..0a7a02a452e 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Flow.Launcher.Plugin.ProcessKiller.csproj +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Flow.Launcher.Plugin.ProcessKiller.csproj @@ -52,7 +52,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ja.xaml index 0a7176d2c4f..bda1ec5f52a 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/ja.xaml @@ -1,14 +1,14 @@  - Process Killer - Kill running processes from Flow Launcher + プロセスキラー + Flow Launcherから実行中のプロセスを終了します - kill all instances of "{0}" - kill {0} processes - kill all instances + "{0}" のすべてのインスタンスを終了する + {0} プロセスを終了する + すべてのインスタンスを終了する - Show title for processes with visible windows - Put processes with visible windows on the top + ウィンドウが表示されているプロセスのタイトルを表示する + ウィンドウが表示されているプロセスを上に表示する diff --git a/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj b/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj index da2b19d7c86..e9515fab448 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj +++ b/Plugins/Flow.Launcher.Plugin.Program/Flow.Launcher.Plugin.Program.csproj @@ -64,12 +64,12 @@ - - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml index 0134627c5ec..38879713d56 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml @@ -2,98 +2,98 @@ - Reset Default + デフォルトにリセット 削除 編集 追加 名前 - 有効 - Enabled - 無効 - Status - Enabled - Disabled + 有効化 + 有効 + 無効化 + 状態 + 有効 + 無効 場所 - All Programs - File Type - Reindex - Indexing - Index Sources - Options - UWP Apps - When enabled, Flow will load UWP Applications - Start Menu - When enabled, Flow will load programs from the start menu - Registry - When enabled, Flow will load programs from the registry - PATH - When enabled, Flow will load programs from the PATH environment variable + すべてのプログラム + ファイルの種類 + 再読み込み + インデックス作成中 + インデックスのソース + オプション + UWP アプリ + 有効にすると、Flow は UWP アプリケーションを読み込みます + スタートメニュー + 有効にすると、Flowはスタートメニューからプログラムを読み込みます + レジストリー + 有効にすると、Flowはレジストリーからプログラムを読み込みます + PATH変数 + 有効にすると、Flow は環境変数のPATHに登録されたフォルダーからプログラムを読み込みます アプリのパスを非表示 UWPやlnkなどの実行可能ファイルについて、サブタイトル領域にファイルパスが表示されないようにします。 - Hide uninstallers - Hides programs with common uninstaller names, such as unins000.exe + アンインストーラーを非表示 + unins000.exe のような一般的な名前のアンインストーラのプログラムを非表示にします プログラムの説明で検索 - Flow will search program's description - Hide duplicated apps - Hide duplicated Win32 programs that are already in the UWP list - Suffixes - Max Depth + Flow はプログラムの説明を検索します + 重複したアプリを非表示 + UWPリストに既に存在するアプリと同じ名前の、Win32プログラムを非表示にする + 接尾辞 + 最大の深さ - Directory: - Browse - File Suffixes: - Maximum Search Depth (-1 is unlimited): + フォルダー + 選択 + ファイル名の末尾: + 最大の検索の深さ (-1に設定すると無制限): - Please select a program source - Are your sure to delete {0}? - Please select program sources that are not added by you - Please select program sources that are added by you - Another program source with the same location already exists. + プログラムのソースを選択してください + 選択したプログラムソースを削除してもよろしいですか? + あなたが追加していないプログラムのソースを選択してください + あなたが追加したプログラムのソースを選択してください + 同じ場所を持つ別のプログラムのソースが既に存在します。 - Program Source - Edit directory and status of this program source. + プログラムのソース + このプログラムのソースのフォルダーとステータスを編集します。 更新 - Program Plugin will only index files with selected suffixes and .url files with selected protocols. + プログラムプラグインは、選択されたファイル名の末尾と .url ファイルのみをインデックス化します。 Sucessfully update file suffixes - File suffixes can't be empty - Protocols can't be empty + ファイル名の末尾は空にできません + プロトコルは空にできません Index file suffixes - URL Protocols - Steam Games - Epic Games + ショートカット(URL) + Steam ゲーム + Epic ゲーム Http/Https - Custom URL Protocols - Custom File Suffixes + カスタムURLプロトコルを指定 + カスタムファイル名の末尾を指定 - Insert file suffixes you want to index. Suffixes should be separated by ';'. (ex>bat;py) + インデックスするファイル名の末尾を入力してください。サフィックスは';'で区切る必要があります。(例>bat;py) - Insert protocols of .url files you want to index. Protocols should be separated by ';', and should end with "://". (ex>ftp://;mailto://) + インデックスしたい.urlファイルのプロトコルを入力してください。プロトコルは';'で区切られ、"://"で終了する必要があります。(例>ftp://;mailto://) 別のユーザーとして実行 管理者として実行 - Open containing folder - Hide - Open target folder + 保存先のフォルダーを開く + 非表示にする + ターゲットフォルダーを開く プログラム Flow Launcherでプログラムを検索 - Invalid Path + 不正なパス - Customized Explorer - Args - You can customize the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available. - Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details. + カスタムされたエクスプローラー + 引数 + エクスプローラーで使用したい環境変数を入力することで、コンテナフォルダを開く際に使用するエクスプローラをカスタマイズできます。 環境変数が利用可能かどうかをテストするために、コマンドプロンプトを使用すると便利です。 + カスタマイズされたエクスプローラに追加したいカスタムの引数を入力します。 %s は親ディレクトリ、 %f はフルパス (win32でのみ動作します)です。 詳細についてはエクスプローラのウェブサイトをご覧ください。 - 成功しまし - Error - Successfully disabled this program from displaying in your query - This app is not intended to be run as administrator - Unable to run {0} + 成功しました + エラー + このプログラムは検索結果に表示されなくなりました + このアプリは管理者として実行されることを想定されていません + {0} を実行できません diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs index 7c30c0c96c2..0258a10d2c7 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs @@ -31,7 +31,7 @@ public class Main : ISettingProvider, IAsyncPlugin, IPluginI18n, IContextMenu, I internal static PluginInitContext Context { get; private set; } - private static readonly List emptyResults = new(); + private static readonly List emptyResults = []; private static readonly MemoryCacheOptions cacheOptions = new() { SizeLimit = 1560 }; private static MemoryCache cache = new(cacheOptions); @@ -84,7 +84,6 @@ public async Task> QueryAsync(Query query, CancellationToken token) { await _win32sLock.WaitAsync(token); await _uwpsLock.WaitAsync(token); - try { // Collect all UWP Windows app directories @@ -117,7 +116,7 @@ public async Task> QueryAsync(Query query, CancellationToken token) } }, token); - resultList = resultList.Any() ? resultList : emptyResults; + resultList = resultList.Count != 0 ? resultList : emptyResults; entry.SetSize(resultList.Count); entry.SetSlidingExpiration(TimeSpan.FromHours(8)); @@ -250,14 +249,26 @@ static void MoveFile(string sourcePath, string destinationPath) } await _win32sLock.WaitAsync(); - _win32s = await context.API.LoadCacheBinaryStorageAsync(Win32CacheName, pluginCacheDirectory, new List()); - _win32sCount = _win32s.Count; - _win32sLock.Release(); + try + { + _win32s = await context.API.LoadCacheBinaryStorageAsync(Win32CacheName, pluginCacheDirectory, new List()); + _win32sCount = _win32s.Count; + } + finally + { + _win32sLock.Release(); + } await _uwpsLock.WaitAsync(); - _uwps = await context.API.LoadCacheBinaryStorageAsync(UwpCacheName, pluginCacheDirectory, new List()); - _uwpsCount = _uwps.Count; - _uwpsLock.Release(); + try + { + _uwps = await context.API.LoadCacheBinaryStorageAsync(UwpCacheName, pluginCacheDirectory, new List()); + _uwpsCount = _uwps.Count; + } + finally + { + _uwpsLock.Release(); + } }); Context.API.LogInfo(ClassName, $"Number of preload win32 programs <{_win32sCount}>"); Context.API.LogInfo(ClassName, $"Number of preload uwps <{_uwpsCount}>"); @@ -408,38 +419,46 @@ private static async Task DisableProgramAsync(IProgram programToDelete) return; await _uwpsLock.WaitAsync(); - if (_uwps.Any(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier)) + var reindexUwps = true; + try { + reindexUwps = _uwps.Any(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier); var program = _uwps.First(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier); program.Enabled = false; _settings.DisabledProgramSources.Add(new ProgramSource(program)); + } + finally + { _uwpsLock.Release(); + } - // Reindex UWP programs + // Reindex UWP programs + if (reindexUwps) + { _ = Task.Run(IndexUwpProgramsAsync); return; } - else - { - _uwpsLock.Release(); - } await _win32sLock.WaitAsync(); - if (_win32s.Any(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier)) + var reindexWin32s = true; + try { + reindexWin32s = _win32s.Any(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier); var program = _win32s.First(x => x.UniqueIdentifier == programToDelete.UniqueIdentifier); program.Enabled = false; _settings.DisabledProgramSources.Add(new ProgramSource(program)); + } + finally + { _win32sLock.Release(); + } - // Reindex Win32 programs + // Reindex Win32 programs + if (reindexWin32s) + { _ = Task.Run(IndexWin32ProgramsAsync); return; } - else - { - _win32sLock.Release(); - } } public static void StartProcess(Func runProcess, ProcessStartInfo info) diff --git a/Plugins/Flow.Launcher.Plugin.Program/Views/Commands/ProgramSettingDisplay.cs b/Plugins/Flow.Launcher.Plugin.Program/Views/Commands/ProgramSettingDisplay.cs index b89a2a6ba9e..2a6a3e987b8 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Views/Commands/ProgramSettingDisplay.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Views/Commands/ProgramSettingDisplay.cs @@ -19,18 +19,30 @@ internal static List LoadProgramSources() internal static async Task DisplayAllProgramsAsync() { await Main._win32sLock.WaitAsync(); - var win32 = Main._win32s + try + { + var win32 = Main._win32s .Where(t1 => !ProgramSetting.ProgramSettingDisplayList.Any(x => x.UniqueIdentifier == t1.UniqueIdentifier)) .Select(x => new ProgramSource(x)); - ProgramSetting.ProgramSettingDisplayList.AddRange(win32); - Main._win32sLock.Release(); + ProgramSetting.ProgramSettingDisplayList.AddRange(win32); + } + finally + { + Main._win32sLock.Release(); + } await Main._uwpsLock.WaitAsync(); - var uwp = Main._uwps + try + { + var uwp = Main._uwps .Where(t1 => !ProgramSetting.ProgramSettingDisplayList.Any(x => x.UniqueIdentifier == t1.UniqueIdentifier)) .Select(x => new ProgramSource(x)); - ProgramSetting.ProgramSettingDisplayList.AddRange(uwp); - Main._uwpsLock.Release(); + ProgramSetting.ProgramSettingDisplayList.AddRange(uwp); + } + finally + { + Main._uwpsLock.Release(); + } } internal static async Task SetProgramSourcesStatusAsync(List selectedProgramSourcesToDisable, bool status) @@ -44,24 +56,36 @@ internal static async Task SetProgramSourcesStatusAsync(List sele } await Main._win32sLock.WaitAsync(); - foreach (var program in Main._win32s) + try { - if (selectedProgramSourcesToDisable.Any(x => x.UniqueIdentifier == program.UniqueIdentifier && program.Enabled != status)) + foreach (var program in Main._win32s) { - program.Enabled = status; + if (selectedProgramSourcesToDisable.Any(x => x.UniqueIdentifier == program.UniqueIdentifier && program.Enabled != status)) + { + program.Enabled = status; + } } } - Main._win32sLock.Release(); + finally + { + Main._win32sLock.Release(); + } await Main._uwpsLock.WaitAsync(); - foreach (var program in Main._uwps) + try { - if (selectedProgramSourcesToDisable.Any(x => x.UniqueIdentifier == program.UniqueIdentifier && program.Enabled != status)) + foreach (var program in Main._uwps) { - program.Enabled = status; + if (selectedProgramSourcesToDisable.Any(x => x.UniqueIdentifier == program.UniqueIdentifier && program.Enabled != status)) + { + program.Enabled = status; + } } } - Main._uwpsLock.Release(); + finally + { + Main._uwpsLock.Release(); + } } internal static void StoreDisabledInSettings() diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ja.xaml index 440d33697df..475a6b4fb25 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ja.xaml @@ -1,20 +1,20 @@  - Replace Win+R - Close Command Prompt after pressing any key - Press any key to close this window... - Do not close Command Prompt after command execution - Always run as administrator - Use Windows Terminal - Run as different user - Shell - Allows to execute system commands from Flow Launcher - this command has been executed {0} times - execute command through command shell + Win+Rを置き換え + 任意のキーを押して、実行後のコマンドプロンプトを閉じる + このウィンドウを閉じるには、任意のキーを押してください… + コマンド実行後にコマンドプロンプトを閉じない + 常に管理者として実行 + Windows ターミナルを使用する + 別のユーザーとして実行 + シェル + Flow Launcherからシステムコマンドを実行できます + このコマンドは {0} 回実行されました + コマンドシェル経由でコマンドを実行する 管理者として実行 - Copy the command - Only show number of most used commands: - Command not found: {0} - Error running the command: {0} + コマンドをコピー + コマンド履歴に表示されるコマンドの最大数: + コマンドが見つかりません: {0} + コマンド実行中にエラーが発生しました: {0} diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj b/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj index 8e54e1894ff..44fc9a8cf72 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj +++ b/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj @@ -58,7 +58,7 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml index 398c39c9fb4..00aa91fb991 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml @@ -8,12 +8,12 @@ シャットダウン 再起動 - Restart With Advanced Boot Options - Log Off/Sign Out - Lock - Sleep - Hibernate - Index Option + 詳細ブートオプションで再起動 + ログオフ / サインアウト + ロック + スリープ + 休止状態 + 検索のオプション ごみ箱を空にする ごみ箱を開く 終了 @@ -21,19 +21,19 @@ Flow Launcherを再起動する 設定 プラグインデータのリロード - Check For Update - Open Log Location - Flow Launcher Tips - Flow Launcher UserData Folder - Toggle Game Mode - Set the Flow Launcher Theme + 更新を確認 + ログの場所を開く + Flow Launcher のヒント + Flow Launcher のユーザーデータフォルダー + ゲームモードの切り替え + Flow Launcher のテーマを設定 編集 コンピュータをシャットダウンする コンピュータを再起動する - Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options + セーフモードおよびデバッグモードやその他のオプションを使用するため、コンピュータを再起動して詳細ブートオプションを表示します ログオフ このコンピュータをロックする Flow Launcherを終了する @@ -42,36 +42,36 @@ スリープ ゴミ箱を空にする ごみ箱を開く - Indexing Options - Hibernate computer - Save all Flow Launcher settings - Refreshes plugin data with new content - Open Flow Launcher's log location - Check for new Flow Launcher update - Visit Flow Launcher's documentation for more help and how to use tips - Open the location where Flow Launcher's settings are stored - Toggle Game Mode - Quickly change the Flow Launcher theme + インデックスのオプション + コンピューターを休止状態にする + Flow Launcher の全ての設定を保存 + プラグインのデータを再読み込みし、新しいコンテンツを適用する + Flow Launcher のログがある場所を開く + 新しい Flow Launcher の更新を確認する + Flow Launcher のドキュメントを開いて、ヘルプと使い方のヒントを確認する + Flow Launcher の設定が保存されている場所を開く + ゲームモードの切り替え + Flow Launcher のテーマを素早く変更する - 成功しまし - All Flow Launcher settings saved - Reloaded all applicable plugin data - Are you sure you want to shut the computer down? + 成功 + Flow Launcher のすべての設定が保存されました + 該当するすべてのプラグインデータを再読み込みしました + 本当にコンピューターをシャットダウンしますか? 本当にコンピューターを再起動しますか? 高度な起動オプションでコンピューターを再起動しますか? 本当にログオフしますか? - Error - Failed to empty the recycle bin. This might happen if:{0}- Some items are currently in use{0}- Some items can't be deleted due to permissions{0}Please close any applications that might be using these files and try again. + エラー + ゴミ箱を空にできませんでした。以下の原因が考えられます:{0}ー 現在使用中のアイテムがある{0}- 権限が原因で削除できないアイテムがある{0}ファイルを使用しているアプリケーションを終了してから、再度お試しください。 - Command Keyword Setting - Custom Command Keyword - Enter a keyword to search for command: {0}. This keyword is used to match your query. - Command Keyword + コマンドキーワードの設定 + カスタムのコマンドキーワード + コマンド: {0}を検索するキーワードを入力してください。このキーワードはクエリに一致するために使用されます。 + コマンドキーワード リセット 確認 キャンセル - Please enter a non-empty command keyword + 空でないコマンドキーワードを入力してください システムコマンド システム関連のコマンドを提供します。例:シャットダウン、ロック、設定など diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml index 69746e8368c..0313a791855 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml @@ -69,11 +69,11 @@ Enter a keyword to search for command: {0}. This keyword is used to match your query. Command Keyword Reset - Confirm + Подтвердить Отменить Please enter a non-empty command keyword - System Commands + Системные команды Provides System related commands. e.g. shutdown, lock, settings etc. diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/ja.xaml index 532ff793d5c..4275713a153 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/ja.xaml @@ -1,9 +1,9 @@  - Open search in: - New Window - New Tab + 検索を開く: + 新しいウィンドウ + 新しいタブ 次のURLを開く:{0} 次のURLを開くことができません:{0} @@ -11,7 +11,7 @@ URL 入力したURLをFlow Launcherから開くプラグインです。 - Please set your browser path: - Choose + ブラウザのパスを設定してください: + 選択 Application(*.exe)|*.exe|All files|*.* diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/ru.xaml index 5110f65ef7d..15c1eeadbf4 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/ru.xaml @@ -2,8 +2,8 @@ Open search in: - New Window - New Tab + Новое окно + Новая вкладка Open url:{0} Can't open url:{0} diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml index 16c5fb3e988..ebc7d6196e5 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml @@ -1,37 +1,38 @@  - Search Source Setting - Open search in: - New Window - New Tab - Set browser from path: - Choose + 検索ソース設定 + 検索を開く: + 新しいウィンドウ + 新しいタブ + 以下のパスからブラウザーを設定: + 選択 削除 編集 追加 - Enabled - Private Mode - Enabled - Disabled - Confirm + 有効化 + プライベートモード + 有効 + 無効 + 確認 キーワード URL 検索 - Use Search Query Autocomplete - Autocomplete Data from: + 検索クエリのサジェストを有効にする + サジェストデータの情報源: web検索を選択してください - Are you sure you want to delete {0}? - If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads - https://www.netflix.com/search?q=Casino + {0} を削除してもよろしいですか? + 特定のウェブサイトでの検索をFlowに追加したい場合、まず、 ウェブサイトの検索バーにダミーの文字列を入力して検索を開始します。 次に、ブラウザのアドレスバーの内容をコピーし、下のURLフィールドに貼り付けます。 テスト文字列を {q}に置き換えます。例えば、Netflixでカジノを検索すると、アドレスバーは以下のようになります + https://www.netflix.com/search?q=Casino - Now copy this entire string and paste it in the URL field below. - Then replace casino with {q}. - Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} + コピーしたURLを下のURL欄に貼り付けてください。 + 次に、casinoという文字列を{q}に置き換えます。 + すると、Netflixで検索を行うためのURLは以下のようになります +https://www.netflix.com/search?q={q} - Copy URL - Copy search URL to clipboard + URL をコピー + 検索URLをクリップボードにコピーする タイトル @@ -44,7 +45,7 @@ キーワードを入力してください URLを入力してください キーワードはすでに存在します。違うキーワードを入力してください - 成功しまし + 成功しました Hint: You do not need to place custom images in this directory, if Flow's version is updated they will be lost. Flow will automatically copy any images outside of this directory across to WebSearch's custom image location. Web検索 diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml index 67435b5b9b8..6539f9617d2 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml @@ -3,25 +3,25 @@ Search Source Setting Open search in: - New Window - New Tab + Новое окно + Новая вкладка Установить браузер по пути: Выберите Удалить Редактировать Добавить - Enabled + Включено Приватный режим - Enabled + Включено Отключён - Confirm + Подтвердить Action Keyword URL - Search + Поиск Use Search Query Autocomplete Autocomplete Data from: Please select a web search - Are you sure you want to delete {0}? + Вы уверены, что хотите удалить {0}? If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads https://www.netflix.com/search?q=Casino @@ -34,13 +34,13 @@ Copy search URL to clipboard - Title + Название Состояние - Select Icon - Icon + Выбрать иконку + Иконка Отменить Invalid web search - Please enter a title + Пожалуйста, укажите название Please enter an action keyword Please enter a URL Action keyword already exists, please enter a different one diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx index 6625a42ddc2..3a2f991a165 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx @@ -251,10 +251,10 @@ アプリ - クロックとリージョン + 時計とリージョン - Control Panel + コントロールパネル Cortana @@ -456,7 +456,7 @@ Area Personalization - + コマンド The command to direct start a setting @@ -468,7 +468,7 @@ Area Privacy - Control Panel + コントロールパネル Type of the setting is a "(legacy) Control Panel setting" @@ -1117,7 +1117,7 @@ Area Control Panel (legacy settings) - + パスワード password.cpl @@ -1667,7 +1667,7 @@ Area UserAccounts - Windows Insider Program + Windows Insider プログラム Area UpdateAndSecurity @@ -2314,7 +2314,7 @@ View all problem reports - 16-Bit Application Support + 16 ビットアプリケーションのサポート Set up dialling rules @@ -2326,10 +2326,10 @@ Give administrative rights to a domain user - Choose when to turn off display + 表示をオフにするタイミングを選択 - Move the pointer with the keypad using MouseKeys + マウスキーを使用してキーパッドでポインタを移動する Change Windows SideShow-compatible device settings @@ -2338,16 +2338,16 @@ Adjust commonly used mobility settings - Change text-to-speech settings + テキスト読み上げの設定を変更 - Set the time and date + 時刻と日付を設定 - Change location settings + 位置情報の設定を変更 - Change mouse settings + マウスの設定を変更 Manage Storage Spaces @@ -2362,46 +2362,46 @@ Change system sounds - Adjust ClearType text + ClearTypeテキストを調整 - Turn screen saver on or off + スクリーンセーバーのオン/オフを切り替え - Find and fix windows update problems + Windows Update の問題を見つけて修正 - Change Bluetooth settings + Bluetooth 設定の変更 - Connect to a network + ネットワークに接続 - Change the search provider in Internet Explorer + Internet Explorer の検索プロバイダを変更する Join a domain - Add a device + 端末を追加 - Find and fix problems with Windows Search + Windows検索の問題を見つけて解決 - Choose a power plan + 電源プランを選択 Change how the mouse pointer looks when it’s moving - Uninstall a program + プログラムのアンインストール Create and format hard disk partitions - Change date, time or number formats + 日付、時刻、数の書式を変更 Change PC wake-up settings @@ -2416,10 +2416,10 @@ Manage advanced sharing settings - Change battery settings + バッテリー設定の変更 - Rename this computer + このコンピューターの名前を変更 Lock or unlock the taskbar @@ -2431,7 +2431,7 @@ Change the time zone - Start speech recognition + 音声認識を開始 View installed updates @@ -2458,34 +2458,34 @@ Restore data, files or computer from backup (Windows 7) - Set your default programs + 既定のプログラムを設定 Set up a broadband connection - Calibrate the screen for pen or touch input + ペンまたはタッチ入力の画面をキャリブレーション Manage user certificates - Schedule tasks + タスクのスケジュール - Ignore repeated keystrokes using FilterKeys + フィルタキーを使用して繰り返しのキー入力を無視 - Find and fix bluescreen problems + ブルースクリーンの問題を見つけて修正 Hear a tone when keys are pressed - Delete browsing history + 閲覧履歴を削除 - Change what the power buttons do + 電源ボタンの動作を変更 Create standard user account @@ -2494,21 +2494,21 @@ Take speech tutorials - View system resource usage in Task Manager + タスク マネージャーでシステム リソースの使用状況を表示 - Create an account + アカウントを新規作成 - Get more features with a new edition of Windows + Windowsの新しいエディションでより多くの機能を入手 - Control Panel + コントロールパネル TaskLink - Unknown + 不明 \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.tr-TR.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.tr-TR.resx index d920e7550a1..746499a42f7 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.tr-TR.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.tr-TR.resx @@ -1773,13 +1773,13 @@ Sorunları bul ve düzelt - Change settings for content received using Tap and send + Dokun ve gönder kullanılarak alınan içerik için ayarları değiştir Medya veya cihazlar için varsayılan ayarları değiştir - Print the speech reference card + Konuşma referans kartını yazdır Ekran rengini kalibre et @@ -1815,13 +1815,13 @@ Fare düğmelerini özelleştir - Set tablet buttons to perform certain tasks + Belirli görevleri gerçekleştirmek için tablet düğmelerini ayarla Yüklü yazı tiplerini görüntüle - Change the way currency is displayed + Para biriminin görüntülenme şeklini değiştirme Grup ilkesini düzenle @@ -1908,7 +1908,7 @@ Güvenilirlik geçmişini görüntüle - Access RemoteApp and desktops + RemoteApp ve masaüstlerine eriş ODBC veri kaynaklarını ayarla @@ -1926,7 +1926,7 @@ Microsoft Pinyin SimpleFast Seçenekleri - Change what closing the lid does + Güç düğmesiyle kapatmanın ne yapacağını değiştirin Gereksiz animasyonları kapat @@ -1935,16 +1935,16 @@ Geri yükleme noktası oluştur - Turn off automatic window arrangement + Otomatik pencere düzenlemesini kapatın Sorun Giderme Geçmişi - Diagnose your computer's memory problems + Bilgisayarınızın bellek sorunlarını teşhis edin - View recommended actions to keep Windows running smoothly + Windows'un sorunsuz çalışmasını sağlamak için önerilen eylemleri görüntüleyin İmleç yanıp sönme hızını değiştir @@ -1956,22 +1956,22 @@ Parola sıfırlama diski oluştur - Configure advanced user profile properties + Gelişmiş kullanıcı profili özelliklerini yapılandır - Start or stop using AutoPlay for all media and devices + Tüm medya ve aygıtlar için Otomatik Kullan'ı etkinleştir veya devre dışı bırak - Change Automatic Maintenance settings + Otomatik Bakım ayarlarını değiştir Açmak için tek veya çift tıkla - Select users who can use remote desktop + Uzak masaüstünü kullanabilecek kullanıcıları seç - Show which programs are installed on your computer + Bilgisayarımda hangi programların yüklü olduğunu göster Bilgisayarınıza uzaktan erişime izin ver @@ -1986,22 +1986,22 @@ Klavyenin çalışma şeklini değiştir - Automatically adjust for daylight saving time + Gün ışığından yararlanma saatine göre otomatik ayarla - Change the order of Windows SideShow gadgets + Windows SideShow araçlarının sırasını değiştir Klavye durumunu kontrol et - Control the computer without the mouse or keyboard + Bilgisayarı fare veya klavye olmadan kontrol et Bir programı değiştir veya kaldır - Change multi-touch gesture settings + Çoklu dokunma hareketi ayarlarını değiştir ODBC veri kaynaklarını ayarla (64-bit) @@ -2016,7 +2016,7 @@ Görev çubuğunda benzer pencereleri gruplama - Change Windows SideShow settings + Windows SideShow ayarlarını değiştir Video için sesli açıklama kullan @@ -2058,13 +2058,13 @@ Çevrim dışı dosyaları yönet - Review your computer's status and resolve issues + Bilgisayarınızın durumunu gözden geçirin ve sorunları çözün Microsoft ChangJie Ayarları - Replace sounds with visual cues + Sesleri görsel ipuçlarıyla değiştirin Geçici İnternet dosyası ayarlarını değiştir @@ -2082,7 +2082,7 @@ Kurtarma anahtarınızı yedekleyin - Save backup copies of your files with File History + Dosya Geçmişi ile dosyalarınızın yedek kopyalarını kaydedin Geçerli erişilebilirlik ayarlarını görüntüle @@ -2103,7 +2103,7 @@ Sistem ses seviyesini ayarla - Defragment and optimise your drives + Sürücülerinizi birleştirin ve optimize edin ODBC veri kaynaklarını ayarla (32-bit) @@ -2112,16 +2112,16 @@ Yazı Tipi Ayarlarını Değiştir - Magnify portions of the screen using Magnifier + Büyüteç kullanarak ekranın bazı bölümlerini büyütme - Change the file type associated with a file extension + Bir dosya uzantısı ile ilişkili dosya türünü değiştir Olay günlüklerini görüntüle - Manage Windows Credentials + Windows Kimlik Bilgilerini Yönet Bir mikrofon ayarla @@ -2173,10 +2173,10 @@ Fare tıklama ayarlarını değiştir - Change advanced colour management settings for displays, scanners and printers + Ekranlar, tarayıcılar ve yazıcılar için gelişmiş renk yönetimi ayarlarını değiştirme - Let Windows suggest Ease of Access settings + Windows'un Erişim Kolaylığı ayarlarını önermesine izin verin Gereksiz dosyaları silerek disk alanını temizle @@ -2188,7 +2188,7 @@ Özel Karakter Düzenleyici - Record steps to reproduce a problem + Bir sorunu yeniden üretmek için adımları kaydedin Windows'un görünümünü ve performansını ayarla @@ -2209,7 +2209,7 @@ Windows'un arama şeklini değiştir - Set flicks to perform certain tasks + Belirli görevleri gerçekleştirmek için fiskeleri ayarla Hesap türünü değiştir @@ -2239,13 +2239,13 @@ Bağlantıları nasıl açacağınızı seçin - Allow Remote Assistance invitations to be sent from this computer + Bu bilgisayara Uzaktan Yardım bağlantılarına izin ver Görev Yöneticisi - Turn flicks on or off + Fiskeleri açın veya kapatın Bir dil ekleyin @@ -2254,7 +2254,7 @@ Ağ durumunu ve görevlerini görüntüle - Turn Magnifier on or off + Büyüteci aç veya kapat Bu bilgisayarın adına bakın @@ -2320,22 +2320,22 @@ Arama kurallarını ayarla - Enable or disable session cookies + Oturum çerezlerini etkinleştir veya devre dışı bırak - Give administrative rights to a domain user + Bir etki alanı kullanıcısına yönetici hakları verme - Choose when to turn off display + Ekranın ne zaman kapatılacağını seçin - Move the pointer with the keypad using MouseKeys + MouseKeys kullanarak imleci tuş takımıyla hareket ettirme - Change Windows SideShow-compatible device settings + Windows SideShow uyumlu cihaz ayarlarını değiştir - Adjust commonly used mobility settings + Sık kullanılan mobilite ayarlarını yapın Metinden sese ayarlarını değiştir @@ -2362,7 +2362,7 @@ Sistem seslerini değiştir - Adjust ClearType text + ClearType metnini ayarla Ekran koruyucuyu aç/kapat @@ -2392,7 +2392,7 @@ Bir güç planı seç - Change how the mouse pointer looks when it’s moving + Fare işaretçisinin hareket ederken nasıl görüneceğini değiştir Bir program kaldır @@ -2443,7 +2443,7 @@ Dosya ve klasörler için arama seçeneklerini değiştir - Adjust settings before giving a presentation + Sunum yapmadan önce ayarları yapın Bir belgeyi veya resmi tara @@ -2464,7 +2464,7 @@ Geniş bant bağlantısı kur - Calibrate the screen for pen or touch input + Kalem veya dokunmatik giriş için ekranı kalibre edin Kullanıcı sertifikalarını yönet @@ -2473,7 +2473,7 @@ Görevleri planla - Ignore repeated keystrokes using FilterKeys + Filtre Tuşları kullanarak tekrarlanan tuş vuruşlarını yok say Mavi ekran sorunlarını bul ve düzelt diff --git a/appveyor.yml b/appveyor.yml index 911e3042333..f95b8dc0883 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '2.0.0.{build}' +version: '2.0.1.{build}' # Do not build on tags because we create a release on merge to master. Otherwise will upload artifacts twice changing the hash, as well as triggering duplicate GitHub release action & NuGet deployments. skip_tags: true