From ed6fe34192af83d1939ef3d5de9b07b332a90de4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Feb 2026 22:42:54 +0000 Subject: [PATCH 01/20] Bump actions/upload-artifact from 6 to 7 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v6...v7) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/dotnet.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 0659ae645..655b8ca7d 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -54,28 +54,28 @@ jobs: shell: powershell run: .\Scripts\post_build.ps1 - name: Upload Plugin Nupkg - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: Plugin nupkg path: | Output\Release\Flow.Launcher.Plugin.*.nupkg compression-level: 0 - name: Upload Setup - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: Flow Installer path: | Output\Packages\Flow-Launcher-*.exe compression-level: 0 - name: Upload Portable Version - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: Portable Version path: | Output\Packages\Flow-Launcher-Portable.zip compression-level: 0 - name: Upload Full Nupkg - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: Full nupkg path: | @@ -83,7 +83,7 @@ jobs: compression-level: 0 - name: Upload Release Information - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: RELEASES path: | From 2e0db3b90f300926284763dc38e7d7005ceb9432 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 27 Feb 2026 18:30:29 +0800 Subject: [PATCH 02/20] Add MinimumAppVersion support for plugins Introduced MinimumAppVersion property to PluginMetadata, enabling plugins to specify required Flow Launcher version. Plugin installation now checks this requirement and prompts users if unsatisfied. Minimum app version logic moved to PluginManager and applied to manifest updates. Added localized strings for user prompts. Refactored SameOrLesserPluginVersionExists to accept PluginMetadata. --- .../ExternalPlugins/PluginsManifest.cs | 28 +---------- Flow.Launcher.Core/Plugin/PluginManager.cs | 50 ++++++++++++++++--- Flow.Launcher.Plugin/PluginMetadata.cs | 5 ++ Flow.Launcher/Languages/en.xaml | 2 + 4 files changed, 53 insertions(+), 32 deletions(-) diff --git a/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs b/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs index 4fed10d25..ba332d0a4 100644 --- a/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs +++ b/Flow.Launcher.Core/ExternalPlugins/PluginsManifest.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using Flow.Launcher.Plugin; -using Flow.Launcher.Infrastructure; +using Flow.Launcher.Core.Plugin; namespace Flow.Launcher.Core.ExternalPlugins { @@ -41,11 +41,10 @@ namespace Flow.Launcher.Core.ExternalPlugins return false; var updatedPluginResults = new List(); - var appVersion = SemanticVersioning.Version.Parse(Constant.Version); for (int i = 0; i < results.Count; i++) { - if (IsMinimumAppVersionSatisfied(results[i], appVersion)) + if (PluginManager.IsMinimumAppVersionSatisfied(results[i].Name, results[i].MinimumAppVersion)) updatedPluginResults.Add(results[i]); } @@ -72,28 +71,5 @@ namespace Flow.Launcher.Core.ExternalPlugins return false; } - - private static bool IsMinimumAppVersionSatisfied(UserPlugin plugin, SemanticVersioning.Version appVersion) - { - if (string.IsNullOrEmpty(plugin.MinimumAppVersion)) - return true; - - try - { - if (appVersion >= SemanticVersioning.Version.Parse(plugin.MinimumAppVersion)) - return true; - } - catch (Exception e) - { - PublicApi.Instance.LogException(ClassName, $"Failed to parse the minimum app version {plugin.MinimumAppVersion} for plugin {plugin.Name}. " - + "Plugin excluded from manifest", e); - return false; - } - - PublicApi.Instance.LogInfo(ClassName, $"Plugin {plugin.Name} requires minimum Flow Launcher version {plugin.MinimumAppVersion}, " - + $"but current version is {Constant.Version}. Plugin excluded from manifest."); - - return false; - } } } diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index b808e2a7f..5e5706656 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text.Json; using System.Threading; using System.Threading.Tasks; +using System.Windows; using Flow.Launcher.Core.ExternalPlugins; using Flow.Launcher.Core.Resource; using Flow.Launcher.Infrastructure; @@ -813,15 +814,13 @@ namespace Flow.Launcher.Core.Plugin return string.Empty; } - private static bool SameOrLesserPluginVersionExists(string metadataPath) + private static bool SameOrLesserPluginVersionExists(PluginMetadata metadata) { - var newMetadata = JsonSerializer.Deserialize(File.ReadAllText(metadataPath)); - - if (!Version.TryParse(newMetadata.Version, out var newVersion)) + if (!Version.TryParse(metadata.Version, out var newVersion)) return true; // If version is not valid, we assume it is lesser than any existing version // Get all plugins even if initialization failed so that we can check if the plugin with the same ID exists - return GetAllInitializedPlugins(includeFailed: true).Any(x => x.Metadata.ID == newMetadata.ID + return GetAllInitializedPlugins(includeFailed: true).Any(x => x.Metadata.ID == metadata.ID && Version.TryParse(x.Metadata.Version, out var version) && newVersion <= version); } @@ -897,13 +896,27 @@ namespace Flow.Launcher.Core.Plugin return false; } - if (SameOrLesserPluginVersionExists(metadataJsonFilePath)) + var newMetadata = JsonSerializer.Deserialize(File.ReadAllText(metadataJsonFilePath)); + + if (SameOrLesserPluginVersionExists(newMetadata)) { PublicApi.Instance.ShowMsgError(Localize.failedToInstallPluginTitle(plugin.Name), Localize.pluginExistAlreadyMessage()); return false; } + if (!IsMinimumAppVersionSatisfied(newMetadata.Name, newMetadata.MinimumAppVersion)) + { + // Ask users if they want to install the plugin that doesn't satisfy the minimum app version requirement + if (PublicApi.Instance.ShowMsgBox( + Localize.pluginMinimumAppVersionUnsatisfiedMessage(newMetadata.Name), + Localize.pluginMinimumAppVersionUnsatisfiedTitle(newMetadata.Name, newMetadata.MinimumAppVersion), + MessageBoxButton.YesNo) == MessageBoxResult.No) + { + return false; + } + } + var folderName = string.IsNullOrEmpty(plugin.Version) ? $"{plugin.Name}-{Guid.NewGuid()}" : $"{plugin.Name}-{plugin.Version}"; var defaultPluginIDs = new List @@ -1050,6 +1063,31 @@ namespace Flow.Launcher.Core.Plugin return true; } + internal static bool IsMinimumAppVersionSatisfied(string pluginName, string minimumAppVersion) + { + if (string.IsNullOrEmpty(minimumAppVersion)) + return true; + + var appVersion = Version.Parse(Constant.Version); + + try + { + if (appVersion >= Version.Parse(minimumAppVersion)) + return true; + } + catch (Exception e) + { + PublicApi.Instance.LogException(ClassName, $"Failed to parse the minimum app version {minimumAppVersion} for plugin {pluginName}. " + + "Plugin excluded from manifest", e); + return false; + } + + PublicApi.Instance.LogInfo(ClassName, $"Plugin {pluginName} requires minimum Flow Launcher version {minimumAppVersion}, " + + $"but current version is {Constant.Version}. Plugin excluded from manifest."); + + return false; + } + #endregion #endregion diff --git a/Flow.Launcher.Plugin/PluginMetadata.cs b/Flow.Launcher.Plugin/PluginMetadata.cs index 09803cbd7..253573910 100644 --- a/Flow.Launcher.Plugin/PluginMetadata.cs +++ b/Flow.Launcher.Plugin/PluginMetadata.cs @@ -137,6 +137,11 @@ namespace Flow.Launcher.Plugin [JsonIgnore] public int QueryCount { get; set; } + /// + /// The minimum Flow Launcher version required for this plugin. Default is "". + /// + public string MinimumAppVersion { get; set; } = string.Empty; + /// /// The path to the plugin settings directory which is not validated. /// It is used to store plugin settings files and data files. diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 145e1883d..a271ca484 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -232,6 +232,8 @@ 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} + {0} requires Flow {1}+ version to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it? Note that you'd better update Flow to the latest version to ensure that {0} works without issues Plugin Store From 8e4f7258ffa44ab82bf3b25e05b2cb78a2b52ff3 Mon Sep 17 00:00:00 2001 From: Jack Ye Date: Fri, 27 Feb 2026 18:36:54 +0800 Subject: [PATCH 03/20] Improve translations Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- Flow.Launcher/Languages/en.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index a271ca484..273c29950 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -233,7 +233,7 @@ 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} {0} requires Flow {1}+ version to run - Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it? Note that you'd better update Flow to the latest version to ensure that {0} works without issues + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it? We recommend updating Flow to the latest version to ensure that {0} works without issues. Plugin Store From b1b18ee2154a3d1e7917f594fca77141b6319987 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 27 Feb 2026 18:42:07 +0800 Subject: [PATCH 04/20] Improve error handling for invalid plugin.json files Previously, installing a plugin with an invalid or corrupted plugin.json would cause an unhandled exception. Now, deserialization errors are caught, a user-friendly error message is shown, and the exception is logged. Added a new localized error message for this scenario in en.xaml. --- Flow.Launcher.Core/Plugin/PluginManager.cs | 14 +++++++++++++- Flow.Launcher/Languages/en.xaml | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index 5e5706656..e4972453f 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -896,7 +896,19 @@ namespace Flow.Launcher.Core.Plugin return false; } - var newMetadata = JsonSerializer.Deserialize(File.ReadAllText(metadataJsonFilePath)); + PluginMetadata newMetadata; + try + { + newMetadata = JsonSerializer.Deserialize(File.ReadAllText(metadataJsonFilePath)); + } + catch (Exception ex) + { + PublicApi.Instance.ShowMsgError(Localize.failedToInstallPluginTitle(plugin.Name), + Localize.pluginJsonInvalidOrCorrupted()); + PublicApi.Instance.LogException(ClassName, + $"Failed to deserialize plugin metadata for plugin {plugin.Name} from file {metadataJsonFilePath}", ex); + return false; + } if (SameOrLesserPluginVersionExists(newMetadata)) { diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 273c29950..26c9d35e0 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -234,6 +234,7 @@ Error creating setting panel for plugin {0}:{1}{2} {0} requires Flow {1}+ version to run Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it? We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plugin Store From b02a5a265d0442dd8b06374e75b7b4d612408224 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 27 Feb 2026 18:48:59 +0800 Subject: [PATCH 05/20] Refactor plugin min version check and improve logging Refactored the plugin minimum app version check to use Version.TryParse instead of try-catch with Version.Parse, preventing exceptions on invalid input. Improved error handling by logging parse failures as errors and version mismatches as info, making the logic clearer and more robust. --- Flow.Launcher.Core/Plugin/PluginManager.cs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index e4972453f..f78b59360 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -1082,17 +1082,16 @@ namespace Flow.Launcher.Core.Plugin var appVersion = Version.Parse(Constant.Version); - try + if (!Version.TryParse(minimumAppVersion, out var minimumVersion)) { - if (appVersion >= Version.Parse(minimumAppVersion)) + PublicApi.Instance.LogError(ClassName, + $"Failed to parse the minimum app version {minimumAppVersion} for plugin {pluginName}. " + + "Plugin excluded from manifest"); + return false; // If the minimum app version specified in plugin.json is invalid, we assume it is not satisfied + } + + if (appVersion >= minimumVersion) return true; - } - catch (Exception e) - { - PublicApi.Instance.LogException(ClassName, $"Failed to parse the minimum app version {minimumAppVersion} for plugin {pluginName}. " - + "Plugin excluded from manifest", e); - return false; - } PublicApi.Instance.LogInfo(ClassName, $"Plugin {pluginName} requires minimum Flow Launcher version {minimumAppVersion}, " + $"but current version is {Constant.Version}. Plugin excluded from manifest."); From 590bf20204a969d595ecfa88556bbbd9a45c3c03 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 27 Feb 2026 18:53:30 +0800 Subject: [PATCH 06/20] Add null check for plugin metadata deserialization Throw a JsonException if deserializing plugin metadata from JSON returns null. This prevents null metadata from being used and improves error handling for invalid or corrupted plugin.json files. --- Flow.Launcher.Core/Plugin/PluginManager.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index f78b59360..36c63ab93 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -899,7 +899,8 @@ namespace Flow.Launcher.Core.Plugin PluginMetadata newMetadata; try { - newMetadata = JsonSerializer.Deserialize(File.ReadAllText(metadataJsonFilePath)); + newMetadata = JsonSerializer.Deserialize(File.ReadAllText(metadataJsonFilePath)) ?? + throw new JsonException("Deserialized metadata is null"); } catch (Exception ex) { From ba1908d605ac7e4e312f4874b23f2ad0c9113915 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 27 Feb 2026 18:54:13 +0800 Subject: [PATCH 07/20] Update plugin min version warning message formatting Improved the message shown when a plugin requires a newer Flow Launcher version by adding line breaks for clarity and updating the title wording. Adjusted code to pass Environment.NewLine and modified resource strings in en.xaml to support the new format. --- Flow.Launcher.Core/Plugin/PluginManager.cs | 4 ++-- Flow.Launcher/Languages/en.xaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index 36c63ab93..eaeab01b8 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -922,7 +922,7 @@ namespace Flow.Launcher.Core.Plugin { // Ask users if they want to install the plugin that doesn't satisfy the minimum app version requirement if (PublicApi.Instance.ShowMsgBox( - Localize.pluginMinimumAppVersionUnsatisfiedMessage(newMetadata.Name), + Localize.pluginMinimumAppVersionUnsatisfiedMessage(newMetadata.Name, Environment.NewLine), Localize.pluginMinimumAppVersionUnsatisfiedTitle(newMetadata.Name, newMetadata.MinimumAppVersion), MessageBoxButton.YesNo) == MessageBoxResult.No) { @@ -1092,7 +1092,7 @@ namespace Flow.Launcher.Core.Plugin } if (appVersion >= minimumVersion) - return true; + return true; PublicApi.Instance.LogInfo(ClassName, $"Plugin {pluginName} requires minimum Flow Launcher version {minimumAppVersion}, " + $"but current version is {Constant.Version}. Plugin excluded from manifest."); diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 26c9d35e0..9d9d66f73 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -232,8 +232,8 @@ 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} - {0} requires Flow {1}+ version to run - Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it? We recommend updating Flow to the latest version to ensure that {0} works without issues. + {0} requires Flow {1} version to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. Failed to install plugin because plugin.json is invalid or corrupted From dca90916fe41ef290baffc37616430c4cd7febae Mon Sep 17 00:00:00 2001 From: Jack Ye Date: Fri, 27 Feb 2026 19:02:50 +0800 Subject: [PATCH 08/20] Fix translations Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- Flow.Launcher/Languages/en.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml index 9d9d66f73..1b2b01ef8 100644 --- a/Flow.Launcher/Languages/en.xaml +++ b/Flow.Launcher/Languages/en.xaml @@ -232,7 +232,7 @@ 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} - {0} requires Flow {1} version to run + {0} requires Flow version {1} to run Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. Failed to install plugin because plugin.json is invalid or corrupted From 48878d2d8c785ac8a7672dc951b8aac261afc445 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 27 Feb 2026 19:04:30 +0800 Subject: [PATCH 09/20] Make log message context-neutral --- Flow.Launcher.Core/Plugin/PluginManager.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index eaeab01b8..b2eeac9a5 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -1086,16 +1086,16 @@ namespace Flow.Launcher.Core.Plugin if (!Version.TryParse(minimumAppVersion, out var minimumVersion)) { PublicApi.Instance.LogError(ClassName, - $"Failed to parse the minimum app version {minimumAppVersion} for plugin {pluginName}. " - + "Plugin excluded from manifest"); + $"Failed to parse the minimum app version {minimumAppVersion} for plugin {pluginName}."); return false; // If the minimum app version specified in plugin.json is invalid, we assume it is not satisfied } if (appVersion >= minimumVersion) return true; - PublicApi.Instance.LogInfo(ClassName, $"Plugin {pluginName} requires minimum Flow Launcher version {minimumAppVersion}, " - + $"but current version is {Constant.Version}. Plugin excluded from manifest."); + PublicApi.Instance.LogInfo(ClassName, + $"Plugin {pluginName} requires minimum Flow Launcher version {minimumAppVersion}, " + + $"but current version is {Constant.Version}."); return false; } From 036a3761eae5ae3ffed41e1a0ef5636fd96e8df5 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 27 Feb 2026 19:05:25 +0800 Subject: [PATCH 10/20] Remove log for plugin version mismatch in PluginManager Logging when a plugin's minimum Flow Launcher version is not met has been removed. The method now returns false without logging any informational message. --- Flow.Launcher.Core/Plugin/PluginManager.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index b2eeac9a5..e11cae269 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -1078,6 +1078,7 @@ namespace Flow.Launcher.Core.Plugin internal static bool IsMinimumAppVersionSatisfied(string pluginName, string minimumAppVersion) { + // If the minimum app version is not specified in plugin.json, this plugin is compatible with all app versions if (string.IsNullOrEmpty(minimumAppVersion)) return true; @@ -1093,10 +1094,6 @@ namespace Flow.Launcher.Core.Plugin if (appVersion >= minimumVersion) return true; - PublicApi.Instance.LogInfo(ClassName, - $"Plugin {pluginName} requires minimum Flow Launcher version {minimumAppVersion}, " - + $"but current version is {Constant.Version}."); - return false; } From cce80ac5aacfe726c8af17fbd31cd307fecfa3a8 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Fri, 27 Feb 2026 19:14:03 +0800 Subject: [PATCH 11/20] Ensure temporary folder deletion --- Flow.Launcher.Core/Plugin/PluginManager.cs | 183 +++++++++++---------- 1 file changed, 94 insertions(+), 89 deletions(-) diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs index e11cae269..78464ddc9 100644 --- a/Flow.Launcher.Core/Plugin/PluginManager.cs +++ b/Flow.Launcher.Core/Plugin/PluginManager.cs @@ -880,111 +880,116 @@ namespace Flow.Launcher.Core.Plugin var tempFolderPluginPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); System.IO.Compression.ZipFile.ExtractToDirectory(zipFilePath, tempFolderPluginPath); - if(!plugin.IsFromLocalInstallPath) - File.Delete(zipFilePath); - - var pluginFolderPath = GetContainingFolderPathAfterUnzip(tempFolderPluginPath); - - var metadataJsonFilePath = string.Empty; - if (File.Exists(Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName))) - metadataJsonFilePath = Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName); - - if (string.IsNullOrEmpty(metadataJsonFilePath) || string.IsNullOrEmpty(pluginFolderPath)) - { - PublicApi.Instance.ShowMsgError(Localize.failedToInstallPluginTitle(plugin.Name), - Localize.fileNotFoundMessage(pluginFolderPath)); - return false; - } - - PluginMetadata newMetadata; try { - newMetadata = JsonSerializer.Deserialize(File.ReadAllText(metadataJsonFilePath)) ?? - throw new JsonException("Deserialized metadata is null"); - } - catch (Exception ex) - { - PublicApi.Instance.ShowMsgError(Localize.failedToInstallPluginTitle(plugin.Name), - Localize.pluginJsonInvalidOrCorrupted()); - PublicApi.Instance.LogException(ClassName, - $"Failed to deserialize plugin metadata for plugin {plugin.Name} from file {metadataJsonFilePath}", ex); - return false; - } + if (!plugin.IsFromLocalInstallPath) + File.Delete(zipFilePath); - if (SameOrLesserPluginVersionExists(newMetadata)) - { - PublicApi.Instance.ShowMsgError(Localize.failedToInstallPluginTitle(plugin.Name), - Localize.pluginExistAlreadyMessage()); - return false; - } + var pluginFolderPath = GetContainingFolderPathAfterUnzip(tempFolderPluginPath); - if (!IsMinimumAppVersionSatisfied(newMetadata.Name, newMetadata.MinimumAppVersion)) - { - // Ask users if they want to install the plugin that doesn't satisfy the minimum app version requirement - if (PublicApi.Instance.ShowMsgBox( - Localize.pluginMinimumAppVersionUnsatisfiedMessage(newMetadata.Name, Environment.NewLine), - Localize.pluginMinimumAppVersionUnsatisfiedTitle(newMetadata.Name, newMetadata.MinimumAppVersion), - MessageBoxButton.YesNo) == MessageBoxResult.No) + var metadataJsonFilePath = string.Empty; + if (File.Exists(Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName))) + metadataJsonFilePath = Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName); + + if (string.IsNullOrEmpty(metadataJsonFilePath) || string.IsNullOrEmpty(pluginFolderPath)) { + PublicApi.Instance.ShowMsgError(Localize.failedToInstallPluginTitle(plugin.Name), + Localize.fileNotFoundMessage(pluginFolderPath)); return false; } - } - var folderName = string.IsNullOrEmpty(plugin.Version) ? $"{plugin.Name}-{Guid.NewGuid()}" : $"{plugin.Name}-{plugin.Version}"; - - var defaultPluginIDs = new List + PluginMetadata newMetadata; + try { - "0ECADE17459B49F587BF81DC3A125110", // BrowserBookmark - "CEA0FDFC6D3B4085823D60DC76F28855", // Calculator - "572be03c74c642baae319fc283e561a8", // Explorer - "6A122269676E40EB86EB543B945932B9", // PluginIndicator - "9f8f9b14-2518-4907-b211-35ab6290dee7", // PluginsManager - "b64d0a79-329a-48b0-b53f-d658318a1bf6", // ProcessKiller - "791FC278BA414111B8D1886DFE447410", // Program - "D409510CD0D2481F853690A07E6DC426", // Shell - "CEA08895D2544B019B2E9C5009600DF4", // Sys - "0308FD86DE0A4DEE8D62B9B535370992", // URL - "565B73353DBF4806919830B9202EE3BF", // WebSearch - "5043CETYU6A748679OPA02D27D99677A" // WindowsSettings - }; + newMetadata = JsonSerializer.Deserialize(File.ReadAllText(metadataJsonFilePath)) ?? + throw new JsonException("Deserialized metadata is null"); + } + catch (Exception ex) + { + PublicApi.Instance.ShowMsgError(Localize.failedToInstallPluginTitle(plugin.Name), + Localize.pluginJsonInvalidOrCorrupted()); + PublicApi.Instance.LogException(ClassName, + $"Failed to deserialize plugin metadata for plugin {plugin.Name} from file {metadataJsonFilePath}", ex); + return false; + } - // Treat default plugin differently, it needs to be removable along with each flow release - var installDirectory = !defaultPluginIDs.Any(x => x == plugin.ID) - ? DataLocation.PluginsDirectory - : Constant.PreinstalledDirectory; + if (SameOrLesserPluginVersionExists(newMetadata)) + { + PublicApi.Instance.ShowMsgError(Localize.failedToInstallPluginTitle(plugin.Name), + Localize.pluginExistAlreadyMessage()); + return false; + } - var newPluginPath = Path.Combine(installDirectory, folderName); + if (!IsMinimumAppVersionSatisfied(newMetadata.Name, newMetadata.MinimumAppVersion)) + { + // Ask users if they want to install the plugin that doesn't satisfy the minimum app version requirement + if (PublicApi.Instance.ShowMsgBox( + Localize.pluginMinimumAppVersionUnsatisfiedMessage(newMetadata.Name, Environment.NewLine), + Localize.pluginMinimumAppVersionUnsatisfiedTitle(newMetadata.Name, newMetadata.MinimumAppVersion), + MessageBoxButton.YesNo) == MessageBoxResult.No) + { + return false; + } + } - FilesFolders.CopyAll(pluginFolderPath, newPluginPath, (s) => PublicApi.Instance.ShowMsgBox(s)); + var folderName = string.IsNullOrEmpty(plugin.Version) ? $"{plugin.Name}-{Guid.NewGuid()}" : $"{plugin.Name}-{plugin.Version}"; - // Check if marker file exists and delete it - try - { - var markerFilePath = Path.Combine(newPluginPath, DataLocation.PluginDeleteFile); - if (File.Exists(markerFilePath)) - File.Delete(markerFilePath); + var defaultPluginIDs = new List + { + "0ECADE17459B49F587BF81DC3A125110", // BrowserBookmark + "CEA0FDFC6D3B4085823D60DC76F28855", // Calculator + "572be03c74c642baae319fc283e561a8", // Explorer + "6A122269676E40EB86EB543B945932B9", // PluginIndicator + "9f8f9b14-2518-4907-b211-35ab6290dee7", // PluginsManager + "b64d0a79-329a-48b0-b53f-d658318a1bf6", // ProcessKiller + "791FC278BA414111B8D1886DFE447410", // Program + "D409510CD0D2481F853690A07E6DC426", // Shell + "CEA08895D2544B019B2E9C5009600DF4", // Sys + "0308FD86DE0A4DEE8D62B9B535370992", // URL + "565B73353DBF4806919830B9202EE3BF", // WebSearch + "5043CETYU6A748679OPA02D27D99677A" // WindowsSettings + }; + + // Treat default plugin differently, it needs to be removable along with each flow release + var installDirectory = !defaultPluginIDs.Any(x => x == plugin.ID) + ? DataLocation.PluginsDirectory + : Constant.PreinstalledDirectory; + + var newPluginPath = Path.Combine(installDirectory, folderName); + + FilesFolders.CopyAll(pluginFolderPath, newPluginPath, (s) => PublicApi.Instance.ShowMsgBox(s)); + + // Check if marker file exists and delete it + try + { + var markerFilePath = Path.Combine(newPluginPath, DataLocation.PluginDeleteFile); + if (File.Exists(markerFilePath)) + File.Delete(markerFilePath); + } + catch (Exception e) + { + PublicApi.Instance.LogException(ClassName, $"Failed to delete plugin marker file in {newPluginPath}", e); + } + + if (checkModified) + { + ModifiedPlugins.Add(plugin.ID); + } + + return true; } - catch (Exception e) + finally { - PublicApi.Instance.LogException(ClassName, $"Failed to delete plugin marker file in {newPluginPath}", e); + try + { + if (Directory.Exists(tempFolderPluginPath)) + Directory.Delete(tempFolderPluginPath, true); + } + catch (Exception e) + { + PublicApi.Instance.LogException(ClassName, $"Failed to delete temp folder {tempFolderPluginPath}", e); + } } - - try - { - if (Directory.Exists(tempFolderPluginPath)) - Directory.Delete(tempFolderPluginPath, true); - } - catch (Exception e) - { - PublicApi.Instance.LogException(ClassName, $"Failed to delete temp folder {tempFolderPluginPath}", e); - } - - if (checkModified) - { - ModifiedPlugins.Add(plugin.ID); - } - - return true; } internal static async Task UninstallPluginAsync(PluginMetadata plugin, bool removePluginFromSettings, bool removePluginSettings, bool checkModified) From a2f224225e33d4401992423ced546f74544f51f5 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Mon, 2 Mar 2026 18:20:09 +0800 Subject: [PATCH 12/20] Move progress bar animation init to Loaded event InitProgressbarAnimation is now triggered by the progress bar's Loaded event instead of during main window initialization. This ensures the animation starts only after the progress bar is fully loaded, improving reliability and preventing potential UI timing issues. --- Flow.Launcher/MainWindow.xaml | 1 + Flow.Launcher/MainWindow.xaml.cs | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 747975b2a..9d6b51dcc 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -342,6 +342,7 @@ Margin="12 0 12 0" HorizontalAlignment="Center" VerticalAlignment="Bottom" + Loaded="ProgressBar_Loaded" StrokeThickness="2" Visibility="{Binding ProgressBarVisibility, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" X1="-100" diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 06b2dda9e..60517db97 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -199,9 +199,6 @@ namespace Flow.Launcher ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark; } - // Initialize position - InitProgressbarAnimation(); - // Force update position UpdatePosition(); @@ -354,6 +351,11 @@ namespace Flow.Launcher } } + private void ProgressBar_Loaded(object sender, RoutedEventArgs e) + { + InitProgressbarAnimation(); + } + private async void OnClosing(object sender, CancelEventArgs e) { if (!CanClose) From 9abf136ea22427bc271326fcbaf533a3601607cf Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Wed, 4 Mar 2026 12:48:48 +0800 Subject: [PATCH 13/20] Improve SolidColorBrush usage and property checks in Theme Refactor background brush creation to assign, freeze, and reuse SolidColorBrush instances for better WPF performance. Replace string-based property checks with type-safe Control.BackgroundProperty comparisons for improved robustness. --- Flow.Launcher.Core/Resource/Theme.cs | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index c3bb6190f..62713b441 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -673,13 +673,17 @@ namespace Flow.Launcher.Core.Resource // If the BackdropType is Mica or MicaAlt, set the windowborderstyle's background to transparent if (backdropType == BackdropTypes.Mica || backdropType == BackdropTypes.MicaAlt) { - windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property.Name == "Background")); - windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)))); + windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property == Control.BackgroundProperty)); + var brush = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)); + brush.Freeze(); + windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, brush)); } else if (backdropType == BackdropTypes.Acrylic) { - windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property.Name == "Background")); - windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, new SolidColorBrush(Colors.Transparent))); + windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property == Control.BackgroundProperty)); + var brush = new SolidColorBrush(Colors.Transparent); + brush.Freeze(); + windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, brush)); } // For themes with blur enabled, the window border is rendered by the system, so it's treated as a simple rectangle regardless of thickness. @@ -803,7 +807,9 @@ namespace Flow.Launcher.Core.Resource // Apply background color (remove transparency in color) Color backgroundColor = Color.FromRgb(bgColor.Value.R, bgColor.Value.G, bgColor.Value.B); - previewStyle.Setters.Add(new Setter(Border.BackgroundProperty, new SolidColorBrush(backgroundColor))); + var brush = new SolidColorBrush(backgroundColor); + brush.Freeze(); + previewStyle.Setters.Add(new Setter(Border.BackgroundProperty, brush)); // The blur theme keeps the corner round fixed (applying DWM code to modify it causes rendering issues). // The non-blur theme retains the previously set WindowBorderStyle. @@ -917,11 +923,15 @@ namespace Flow.Launcher.Core.Resource // Only set the background to transparent if the theme supports blur if (backdropType == BackdropTypes.Mica || backdropType == BackdropTypes.MicaAlt) { - mainWindow.Background = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)); + var backgroundBrush = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)); + backgroundBrush.Freeze(); + mainWindow.Background = backgroundBrush; } else { - mainWindow.Background = new SolidColorBrush(selectedBG); + var backgroundBrush = new SolidColorBrush(selectedBG); + backgroundBrush.Freeze(); + mainWindow.Background = backgroundBrush; } } } From 984b3dabdc7fd0e31afb0b52e2a79f359efe6dc6 Mon Sep 17 00:00:00 2001 From: Jack Ye Date: Wed, 4 Mar 2026 18:25:25 +0800 Subject: [PATCH 14/20] Fix Explorer plugin Quick Access items missing from general search results (#4294) --- Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index 9420e3d3a..28ab1d2e2 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -299,9 +299,6 @@ namespace Flow.Launcher.Plugin.Explorer.Search private List GetQuickAccessResultsFilteredByActionKeyword(Query query, List actions) { - if (!Settings.QuickAccessKeywordEnabled) - return []; - var results = QuickAccess.AccessLinkListMatched(query, Settings.QuickAccessLinks); if (results.Count == 0) return []; From 71944ab6cdc638b128f214703d07e6dd16c1405f Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Wed, 4 Mar 2026 18:42:19 +0800 Subject: [PATCH 15/20] Use DynamicResource for TextBox SelectionBrush Changed SelectionBrush in TextBox style from StaticResource to DynamicResource for SystemAccentColorLight1Brush. This enables automatic updates to the selection color when the resource changes at runtime, improving theme responsiveness. --- Flow.Launcher/Themes/Win11Light.xaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Flow.Launcher/Themes/Win11Light.xaml b/Flow.Launcher/Themes/Win11Light.xaml index 1dd53916b..acb0a2784 100644 --- a/Flow.Launcher/Themes/Win11Light.xaml +++ b/Flow.Launcher/Themes/Win11Light.xaml @@ -52,7 +52,7 @@ - + From ed14c45fd241b37ba0e36ad91be5d2c516b8a833 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sun, 8 Mar 2026 23:46:08 +0800 Subject: [PATCH 16/20] Refactor brush creation with ThemeHelper utility Introduce ThemeHelper.GetFreezeSolidColorBrush to centralize and reuse SolidColorBrush creation and freezing logic. Refactor Theme.cs to use this helper, improving code clarity and maintainability. Also, use Brushes.Transparent directly where appropriate. --- Flow.Launcher.Core/Resource/Theme.cs | 22 ++++++---------------- Flow.Launcher.Core/Resource/ThemeHelper.cs | 13 +++++++++++++ 2 files changed, 19 insertions(+), 16 deletions(-) create mode 100644 Flow.Launcher.Core/Resource/ThemeHelper.cs diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index 62713b441..5e0e2894a 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -674,16 +674,12 @@ namespace Flow.Launcher.Core.Resource if (backdropType == BackdropTypes.Mica || backdropType == BackdropTypes.MicaAlt) { windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property == Control.BackgroundProperty)); - var brush = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)); - brush.Freeze(); - windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, brush)); + windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, ThemeHelper.GetFreezeSolidColorBrush(Color.FromArgb(1, 0, 0, 0)))); } else if (backdropType == BackdropTypes.Acrylic) { windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property == Control.BackgroundProperty)); - var brush = new SolidColorBrush(Colors.Transparent); - brush.Freeze(); - windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, brush)); + windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Transparent)); } // For themes with blur enabled, the window border is rendered by the system, so it's treated as a simple rectangle regardless of thickness. @@ -806,10 +802,8 @@ namespace Flow.Launcher.Core.Resource } // Apply background color (remove transparency in color) - Color backgroundColor = Color.FromRgb(bgColor.Value.R, bgColor.Value.G, bgColor.Value.B); - var brush = new SolidColorBrush(backgroundColor); - brush.Freeze(); - previewStyle.Setters.Add(new Setter(Border.BackgroundProperty, brush)); + var backgroundColor = Color.FromRgb(bgColor.Value.R, bgColor.Value.G, bgColor.Value.B); + previewStyle.Setters.Add(new Setter(Border.BackgroundProperty, ThemeHelper.GetFreezeSolidColorBrush(backgroundColor))); // The blur theme keeps the corner round fixed (applying DWM code to modify it causes rendering issues). // The non-blur theme retains the previously set WindowBorderStyle. @@ -923,15 +917,11 @@ namespace Flow.Launcher.Core.Resource // Only set the background to transparent if the theme supports blur if (backdropType == BackdropTypes.Mica || backdropType == BackdropTypes.MicaAlt) { - var backgroundBrush = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0)); - backgroundBrush.Freeze(); - mainWindow.Background = backgroundBrush; + mainWindow.Background = ThemeHelper.GetFreezeSolidColorBrush(Color.FromArgb(1, 0, 0, 0)); } else { - var backgroundBrush = new SolidColorBrush(selectedBG); - backgroundBrush.Freeze(); - mainWindow.Background = backgroundBrush; + mainWindow.Background = ThemeHelper.GetFreezeSolidColorBrush(selectedBG); } } } diff --git a/Flow.Launcher.Core/Resource/ThemeHelper.cs b/Flow.Launcher.Core/Resource/ThemeHelper.cs new file mode 100644 index 000000000..dd998e19a --- /dev/null +++ b/Flow.Launcher.Core/Resource/ThemeHelper.cs @@ -0,0 +1,13 @@ +using System.Windows.Media; + +namespace Flow.Launcher.Core.Resource; + +public static class ThemeHelper +{ + public static SolidColorBrush GetFreezeSolidColorBrush(Color color) + { + var brush = new SolidColorBrush(color); + brush.Freeze(); + return brush; + } +} From 36e15d3809664e54539bb4bc0fe0ba96922cb9f9 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sun, 8 Mar 2026 23:48:10 +0800 Subject: [PATCH 17/20] Refactor: move CopyStyle to ThemeHelper class Moved the CopyStyle method from Theme to a new static ThemeHelper class for better code organization and reusability. Updated all references in Theme to use ThemeHelper.CopyStyle. Added ThemeHelper.cs and necessary using directives. --- Flow.Launcher.Core/Resource/Theme.cs | 17 +---------------- Flow.Launcher.Core/Resource/ThemeHelper.cs | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index 5e0e2894a..8b678e0b9 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -798,7 +798,7 @@ namespace Flow.Launcher.Core.Resource Application.Current.Resources["WindowBorderStyle"] is Style originalStyle) { // Copy the original style, including the base style if it exists - CopyStyle(originalStyle, previewStyle); + ThemeHelper.CopyStyle(originalStyle, previewStyle); } // Apply background color (remove transparency in color) @@ -817,21 +817,6 @@ namespace Flow.Launcher.Core.Resource Application.Current.Resources["PreviewWindowBorderStyle"] = previewStyle; } - private void CopyStyle(Style originalStyle, Style targetStyle) - { - // If the style is based on another style, copy the base style first - if (originalStyle.BasedOn != null) - { - CopyStyle(originalStyle.BasedOn, targetStyle); - } - - // Copy the setters from the original style - foreach (var setter in originalStyle.Setters.OfType()) - { - targetStyle.Setters.Add(new Setter(setter.Property, setter.Value)); - } - } - private void ColorizeWindow(string theme, BackdropTypes backdropType) { var dict = GetThemeResourceDictionary(theme); diff --git a/Flow.Launcher.Core/Resource/ThemeHelper.cs b/Flow.Launcher.Core/Resource/ThemeHelper.cs index dd998e19a..ad7f1c957 100644 --- a/Flow.Launcher.Core/Resource/ThemeHelper.cs +++ b/Flow.Launcher.Core/Resource/ThemeHelper.cs @@ -1,9 +1,26 @@ -using System.Windows.Media; +using System.Linq; +using System.Windows; +using System.Windows.Media; namespace Flow.Launcher.Core.Resource; public static class ThemeHelper { + public static void CopyStyle(Style originalStyle, Style targetStyle) + { + // If the style is based on another style, copy the base style first + if (originalStyle.BasedOn != null) + { + CopyStyle(originalStyle.BasedOn, targetStyle); + } + + // Copy the setters from the original style + foreach (var setter in originalStyle.Setters.OfType()) + { + targetStyle.Setters.Add(new Setter(setter.Property, setter.Value)); + } + } + public static SolidColorBrush GetFreezeSolidColorBrush(Color color) { var brush = new SolidColorBrush(color); From 7766d7053da399ec1dabeb752566dd6a86066592 Mon Sep 17 00:00:00 2001 From: Jack251970 <1160210343@qq.com> Date: Sun, 8 Mar 2026 23:49:09 +0800 Subject: [PATCH 18/20] Rename GetFreezeSolidColorBrush to GetFrozenSolidColorBrush Renamed the method GetFreezeSolidColorBrush to GetFrozenSolidColorBrush in ThemeHelper.cs for improved naming consistency. Updated all references in Theme.cs accordingly. No changes to functionality. --- Flow.Launcher.Core/Resource/Theme.cs | 8 ++++---- Flow.Launcher.Core/Resource/ThemeHelper.cs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Flow.Launcher.Core/Resource/Theme.cs b/Flow.Launcher.Core/Resource/Theme.cs index 8b678e0b9..4d15857e6 100644 --- a/Flow.Launcher.Core/Resource/Theme.cs +++ b/Flow.Launcher.Core/Resource/Theme.cs @@ -674,7 +674,7 @@ namespace Flow.Launcher.Core.Resource if (backdropType == BackdropTypes.Mica || backdropType == BackdropTypes.MicaAlt) { windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType().FirstOrDefault(x => x.Property == Control.BackgroundProperty)); - windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, ThemeHelper.GetFreezeSolidColorBrush(Color.FromArgb(1, 0, 0, 0)))); + windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, ThemeHelper.GetFrozenSolidColorBrush(Color.FromArgb(1, 0, 0, 0)))); } else if (backdropType == BackdropTypes.Acrylic) { @@ -803,7 +803,7 @@ namespace Flow.Launcher.Core.Resource // Apply background color (remove transparency in color) var backgroundColor = Color.FromRgb(bgColor.Value.R, bgColor.Value.G, bgColor.Value.B); - previewStyle.Setters.Add(new Setter(Border.BackgroundProperty, ThemeHelper.GetFreezeSolidColorBrush(backgroundColor))); + previewStyle.Setters.Add(new Setter(Border.BackgroundProperty, ThemeHelper.GetFrozenSolidColorBrush(backgroundColor))); // The blur theme keeps the corner round fixed (applying DWM code to modify it causes rendering issues). // The non-blur theme retains the previously set WindowBorderStyle. @@ -902,11 +902,11 @@ namespace Flow.Launcher.Core.Resource // Only set the background to transparent if the theme supports blur if (backdropType == BackdropTypes.Mica || backdropType == BackdropTypes.MicaAlt) { - mainWindow.Background = ThemeHelper.GetFreezeSolidColorBrush(Color.FromArgb(1, 0, 0, 0)); + mainWindow.Background = ThemeHelper.GetFrozenSolidColorBrush(Color.FromArgb(1, 0, 0, 0)); } else { - mainWindow.Background = ThemeHelper.GetFreezeSolidColorBrush(selectedBG); + mainWindow.Background = ThemeHelper.GetFrozenSolidColorBrush(selectedBG); } } } diff --git a/Flow.Launcher.Core/Resource/ThemeHelper.cs b/Flow.Launcher.Core/Resource/ThemeHelper.cs index ad7f1c957..cd6b04c53 100644 --- a/Flow.Launcher.Core/Resource/ThemeHelper.cs +++ b/Flow.Launcher.Core/Resource/ThemeHelper.cs @@ -21,7 +21,7 @@ public static class ThemeHelper } } - public static SolidColorBrush GetFreezeSolidColorBrush(Color color) + public static SolidColorBrush GetFrozenSolidColorBrush(Color color) { var brush = new SolidColorBrush(color); brush.Freeze(); From 5ef6a2b68843d1ef56c60ae1b2cf9dfe6751d433 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 9 Mar 2026 13:44:49 +1100 Subject: [PATCH 19/20] New Crowdin updates (#4293) --- Flow.Launcher/Languages/ar.xaml | 3 + Flow.Launcher/Languages/cs.xaml | 3 + Flow.Launcher/Languages/da.xaml | 3 + Flow.Launcher/Languages/de.xaml | 3 + Flow.Launcher/Languages/es-419.xaml | 3 + Flow.Launcher/Languages/es.xaml | 7 ++- Flow.Launcher/Languages/fr.xaml | 3 + Flow.Launcher/Languages/he.xaml | 3 + Flow.Launcher/Languages/it.xaml | 3 + Flow.Launcher/Languages/ja.xaml | 3 + Flow.Launcher/Languages/ko.xaml | 5 +- Flow.Launcher/Languages/nb.xaml | 3 + Flow.Launcher/Languages/nl.xaml | 3 + Flow.Launcher/Languages/pl.xaml | 3 + Flow.Launcher/Languages/pt-br.xaml | 3 + Flow.Launcher/Languages/pt-pt.xaml | 3 + Flow.Launcher/Languages/ru.xaml | 3 + Flow.Launcher/Languages/sk.xaml | 3 + Flow.Launcher/Languages/sr-Cyrl-RS.xaml | 3 + Flow.Launcher/Languages/sr.xaml | 3 + Flow.Launcher/Languages/tr.xaml | 3 + Flow.Launcher/Languages/uk-UA.xaml | 3 + Flow.Launcher/Languages/vi.xaml | 51 ++++++++-------- Flow.Launcher/Languages/zh-cn.xaml | 3 + Flow.Launcher/Languages/zh-tw.xaml | 3 + .../Languages/es.xaml | 2 +- .../Languages/uk-UA.xaml | 2 +- .../Languages/vi.xaml | 8 +-- .../Languages/vi.xaml | 58 +++++++++---------- .../Languages/vi.xaml | 4 +- .../Languages/vi.xaml | 8 +-- .../Languages/vi.xaml | 8 +-- .../Languages/es.xaml | 2 +- .../Languages/pt-pt.xaml | 2 +- .../Languages/uk-UA.xaml | 2 +- .../Languages/vi.xaml | 14 ++--- .../Languages/zh-cn.xaml | 2 +- .../Languages/es.xaml | 2 +- 38 files changed, 159 insertions(+), 84 deletions(-) diff --git a/Flow.Launcher/Languages/ar.xaml b/Flow.Launcher/Languages/ar.xaml index b1c9ca426..f36cc0d12 100644 --- a/Flow.Launcher/Languages/ar.xaml +++ b/Flow.Launcher/Languages/ar.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted متجر الإضافات diff --git a/Flow.Launcher/Languages/cs.xaml b/Flow.Launcher/Languages/cs.xaml index b55026e28..cadf9bad7 100644 --- a/Flow.Launcher/Languages/cs.xaml +++ b/Flow.Launcher/Languages/cs.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Obchod s pluginy diff --git a/Flow.Launcher/Languages/da.xaml b/Flow.Launcher/Languages/da.xaml index 7d4094c84..5889fb709 100644 --- a/Flow.Launcher/Languages/da.xaml +++ b/Flow.Launcher/Languages/da.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plugin-butik diff --git a/Flow.Launcher/Languages/de.xaml b/Flow.Launcher/Languages/de.xaml index 32f8d5d2b..f65f0476c 100644 --- a/Flow.Launcher/Languages/de.xaml +++ b/Flow.Launcher/Languages/de.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plug-in-Store diff --git a/Flow.Launcher/Languages/es-419.xaml b/Flow.Launcher/Languages/es-419.xaml index 40e8cb978..76cc06eb5 100644 --- a/Flow.Launcher/Languages/es-419.xaml +++ b/Flow.Launcher/Languages/es-419.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Tienda de Plugins diff --git a/Flow.Launcher/Languages/es.xaml b/Flow.Launcher/Languages/es.xaml index 049b33858..6fcf3f9ad 100644 --- a/Flow.Launcher/Languages/es.xaml +++ b/Flow.Launcher/Languages/es.xaml @@ -79,8 +79,8 @@ Después de la desinstalación, es necesario eliminar manualmente la tarea (Flow.Launcher Startup) mediante el Programador de Tareas Error de configuración de arranque al iniciar Ocultar Flow Launcher cuando se pierde el foco - Show taskbar when Flow Launcher is opened - Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars. + Mostrar la barra de tareas cuando Flow Launcher está abierto + Muestra temporalmente la barra de tareas cuando Flow Launcher está abierto, útil para barras de tareas que se ocultan automáticamente. No mostrar notificaciones de nuevas versiones Ubicación de la ventana de búsqueda Recordar última ubicación @@ -237,6 +237,9 @@ 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 al crear el panel de configuración para el complemento {0}:{1}{2} + {0} requiere la versión {1} de Flow para ejecutarse + Flow no cumple los requisitos mínimos de versión para ejecutar {0}. ¿Desea continuar con la instalación?{1}{1}Recomendamos actualizar Flow a la última versión para garantizar que {0} funcione sin problemas. + No se pudo instalar el plugin porque plugin.json no es válido o está dañado Tienda complementos diff --git a/Flow.Launcher/Languages/fr.xaml b/Flow.Launcher/Languages/fr.xaml index d60d53a1c..da194dedf 100644 --- a/Flow.Launcher/Languages/fr.xaml +++ b/Flow.Launcher/Languages/fr.xaml @@ -237,6 +237,9 @@ 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} + {0} nécessite la version {1} de Flow pour fonctionner + Flow ne répond pas aux exigences de version minimale pour que {0} puisse fonctionner. Voulez-vous continuer l'installation ?{1}{1}Nous vous recommandons de mettre à jour Flow vers la dernière version pour vous assurer que {0} fonctionne sans problème. + Impossible d'installer le plugin car plugin.json est invalide ou corrompu Magasin des Plugins diff --git a/Flow.Launcher/Languages/he.xaml b/Flow.Launcher/Languages/he.xaml index 926d94886..a8c1bbacd 100644 --- a/Flow.Launcher/Languages/he.xaml +++ b/Flow.Launcher/Languages/he.xaml @@ -236,6 +236,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted חנות תוספים diff --git a/Flow.Launcher/Languages/it.xaml b/Flow.Launcher/Languages/it.xaml index 92afa5436..fb50f3ce4 100644 --- a/Flow.Launcher/Languages/it.xaml +++ b/Flow.Launcher/Languages/it.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Negozio dei Plugin diff --git a/Flow.Launcher/Languages/ja.xaml b/Flow.Launcher/Languages/ja.xaml index 39b23f269..b9c539ec9 100644 --- a/Flow.Launcher/Languages/ja.xaml +++ b/Flow.Launcher/Languages/ja.xaml @@ -237,6 +237,9 @@ 展開されたzipファイルからplugin.jsonが見つからないか、このパス {0} が存在しません 同じIDとバージョンのプラグインがすでに存在するか、またはこのダウンロードしたプラグインよりもバージョンが大きいです プラグイン {0}の設定パネル作成中にエラーが発生しました:{1}{2} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted プラグインストア diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 22f3bb011..072e8e1b9 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -228,6 +228,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted 플러그인 스토어 @@ -571,7 +574,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in 확인 아니오 - 배경 + 백그라운드 버전 diff --git a/Flow.Launcher/Languages/nb.xaml b/Flow.Launcher/Languages/nb.xaml index 1ef057125..adc4e3417 100644 --- a/Flow.Launcher/Languages/nb.xaml +++ b/Flow.Launcher/Languages/nb.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Programtillegg butikk diff --git a/Flow.Launcher/Languages/nl.xaml b/Flow.Launcher/Languages/nl.xaml index 412781b55..e8e9bc90b 100644 --- a/Flow.Launcher/Languages/nl.xaml +++ b/Flow.Launcher/Languages/nl.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plugin Winkel diff --git a/Flow.Launcher/Languages/pl.xaml b/Flow.Launcher/Languages/pl.xaml index efc2ade55..fc1c07162 100644 --- a/Flow.Launcher/Languages/pl.xaml +++ b/Flow.Launcher/Languages/pl.xaml @@ -236,6 +236,9 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Sklep z wtyczkami diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml index a7cf5ac68..590de12c5 100644 --- a/Flow.Launcher/Languages/pt-br.xaml +++ b/Flow.Launcher/Languages/pt-br.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Loja de Plugins diff --git a/Flow.Launcher/Languages/pt-pt.xaml b/Flow.Launcher/Languages/pt-pt.xaml index a2b58b1a0..f4a1c3605 100644 --- a/Flow.Launcher/Languages/pt-pt.xaml +++ b/Flow.Launcher/Languages/pt-pt.xaml @@ -236,6 +236,9 @@ 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} + {0} requer Flow Launcher v {1} para ser executado + A sua versão Flow Launcher não cumpre os reuisitos mínimos para executar {0}. Pretende continuar com a instalação?{1}{1}Deve atualizar Flow Launcher para a versão mais recente para poder usufruir de {0} sem quaisquer problemas. + Não foi possível instalar o plugin uma vez que plugin.json parece estar danificado. Loja de plugins diff --git a/Flow.Launcher/Languages/ru.xaml b/Flow.Launcher/Languages/ru.xaml index 544816684..6817325da 100644 --- a/Flow.Launcher/Languages/ru.xaml +++ b/Flow.Launcher/Languages/ru.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Магазин плагинов diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index c47b47ae1..42c623e1f 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -238,6 +238,9 @@ Nevykonali sa žiadne zmeny. 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} + Plugin {0} vyžaduje na spustenie minimálnu verziu Flow Launcheru {1} + Flow Launcher nespĺňa minimálne požiadavky na verziu na spustenie {0}. Chcete pokračovať v inštalácii?{1}{1}Odporúčame aktualizovať Flow Launcher na najnovšiu verziu, aby {0} fungoval bez problémov. + Inštalácia pluginu zlyhala z dôvodu neplatného alebo poškodeného súboru plugin.json Repozitár pluginov diff --git a/Flow.Launcher/Languages/sr-Cyrl-RS.xaml b/Flow.Launcher/Languages/sr-Cyrl-RS.xaml index 824b48dbf..caa1ba9c2 100644 --- a/Flow.Launcher/Languages/sr-Cyrl-RS.xaml +++ b/Flow.Launcher/Languages/sr-Cyrl-RS.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plugin Store diff --git a/Flow.Launcher/Languages/sr.xaml b/Flow.Launcher/Languages/sr.xaml index 3ee982819..9e2315239 100644 --- a/Flow.Launcher/Languages/sr.xaml +++ b/Flow.Launcher/Languages/sr.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plugin Store diff --git a/Flow.Launcher/Languages/tr.xaml b/Flow.Launcher/Languages/tr.xaml index 023eb2aa6..1baa3a3e5 100644 --- a/Flow.Launcher/Languages/tr.xaml +++ b/Flow.Launcher/Languages/tr.xaml @@ -237,6 +237,9 @@ 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 Eklenti {0} için ayar paneli oluşturulurken hata oluştu: {1}{2} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Eklenti Mağazası diff --git a/Flow.Launcher/Languages/uk-UA.xaml b/Flow.Launcher/Languages/uk-UA.xaml index 0da6c7a47..097eb8224 100644 --- a/Flow.Launcher/Languages/uk-UA.xaml +++ b/Flow.Launcher/Languages/uk-UA.xaml @@ -237,6 +237,9 @@ Не вдалося знайти файл plugin.json у розпакованому zip-файлі або цей шлях {0} не існує. Вже існує плагін з таким самим ідентифікатором та версією, або версія цього плагіну вища за версію завантаженого. Помилка створення панелі налаштувань для плагіну {0}: {1}{2} + Для роботи {0} необхідна {1} версія Flow + Flow не відповідає мінімальним вимогам версії для запуску {0}. Чи хочете ви продовжити його встановлення?{1}{1}Ми рекомендуємо оновити Flow до останньої версії, аби забезпечити безперебійну роботу {0}. + Не вдалося встановити плагін, оскільки файл plugin.json є недійсним або пошкодженим Магазин плагінів diff --git a/Flow.Launcher/Languages/vi.xaml b/Flow.Launcher/Languages/vi.xaml index 463c11d0b..a85d1c93a 100644 --- a/Flow.Launcher/Languages/vi.xaml +++ b/Flow.Launcher/Languages/vi.xaml @@ -13,32 +13,32 @@ Click yes if you would like select the {0} executable again. Click no if you would like to download {1} Unable to set {0} executable path, please try from Flow's settings (scroll down to the bottom). - Fail to Init Plugins + Khởi tạo các Plugin thất bại Plugins: {0} - fail to load and would be disabled, please contact plugin creator for help - Flow Launcher needs to restart to finish disabling portable mode, after the restart your portable data profile will be deleted and roaming data profile kept - Flow Launcher needs to restart to finish enabling portable mode, after the restart your roaming data profile will be deleted and portable data profile kept - Flow Launcher has detected you enabled portable mode, would you like to move it to a different location? - Flow Launcher has detected you disabled portable mode, the relevant shortcuts and uninstaller entry have been created + Flow Launcher cần được khởi động lại để hoàn tất tắt chế độ Portable. Sau khi khởi động lại, hồ sơ dữ liệu Portable của bạn sẽ bị xóa và hồ sơ dữ liệu Roaming sẽ được giữ lại + Flow Launcher cần được khởi động lại để hoàn tất bật chế độ Portable. Sau khi khởi động lại, hồ sơ dữ liệu Roaming của bạn sẽ bị xóa và hồ sơ dữ liệu Portable sẽ được giữ lại + Flow Launcher nhận thấy bạn đã bật chế độ Portable. Bạn có muốn chuyển Flow Launcher tới một vị trí khác không? + Flow Launcher nhận thấy bạn đã tắt chế độ Portable. Những shortcut liên quan và mục gỡ cài đặt đã được tạo 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. 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 + Hãy xem log để biết thêm thông tin - Please try again + Xin vui lòng thử lại Unable to parse Http Proxy Failed to install TypeScript environment. Please try again later - Failed to install Python environment. Please try again later. + Cài đặt môi trường Python thất bại. Xin vui lòng thử lại sau. Không thể đăng ký phím nóng "{0}". Phím nóng có thể được sử dụng bởi một chương trình khác. Chuyển sang phím nóng khác hoặc thoát khỏi chương trình khác. - Failed to unregister hotkey "{0}". Please try again or see log for details + Hủy đăng ký phím nóng "{0}" thất bại. Xin vui lòng thử lại hoặc xem log để biết thêm chi tiết Flow Launcher Không thể khởi động {0} Định dạng tệp plugin Flow Launcher không chính xác @@ -63,11 +63,11 @@ Tạm dừng sử dụng phím nóng. Đặt lại vị trí Cài lại vị trí cửa sổ tìm kiếm - Type here to search - {0}: This plugin is still initializing... + Gõ vào đây để tìm kiếm + {0}: Plugin này vẫn đang được khởi tạo... Select this result to requery - {0}: Failed to respond! - Select this result for more info + {0}: Phản hồi thất bại! + Hãy chọn kết quả này để biết thêm thông tin Cài đặt @@ -75,14 +75,14 @@ Chế độ Portabler Lưu trữ tất cả cài đặt và dữ liệu người dùng trong một thư mục (hữu ích khi sử dụng với thiết bị lưu trữ di động hoặc dịch vụ đám mây). Khởi động Flow Launcher khi khởi động hệ thống - Use logon task instead of startup entry for faster startup experience - After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler + Dùng logon task thay cho startup entry để khởi động nhanh hơn + Sau khi gỡ cài đặt, bạn cần tự xóa task này (Flow.Launcher Startup) bằng Task Scheduler Không lưu được tính năng tự khởi động khi khởi động hệ thống Ẩn Flow Launcher khi mất tiêu điểm - Show taskbar when Flow Launcher is opened - Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars. + Hiện thanh tác vụ khi đang mở Flow Launcher + Tạm thời hiện thanh tác vụ khi Flow Launcher được bật, hữu ích khi bạn dùng taskbar tự động ẩn. Không hiển thị thông báo khi có phiên bản mới - Search Window Location + Vị trí cửa sổ tìm kiếm Ghi nhớ vị trí cuối cùng Màn hình bằng con trỏ chuột Màn hình có cửa sổ được tập trung @@ -117,7 +117,7 @@ Luôn bắt đầu nhập ở chế độ tiếng Anh Tạm thời chuyển phương thức nhập sang tiếng Anh khi kích hoạt Flow. Cập nhật tự động - Automatically check and update the app when available + Tự động kiểm tra và cập nhật app khi có phiên bản mới Chọn Ẩn Flow Launcher khi khởi động Flow Launcher sẽ ẩn trong khay hệ thống sau khi khởi động. @@ -173,9 +173,9 @@ 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 + Trang chủ Show home page results when query text is empty. - Show History Results in Home Page + Hiện lịch sử kết quả ở trang chủ Maximum History Results Shown in Home Page History Style Choose the type of history to show in the History and Home Page @@ -212,7 +212,7 @@ Đã bật Ưu tiên Search Delay - Home Page + Trang chủ Ưu tiên hiện tại Ưu tiên mới Ưu tiên @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Tải tiện ích mở rộng @@ -255,7 +258,7 @@ Lỗi cài đặt plugin Lỗi cài đặt plugin Error updating plugin - Keep plugin settings + Giữ lại các cài đặt plugin Do you want to keep the settings of the plugin for the next usage? Plugin {0} successfully installed. Please restart Flow. Plugin {0} successfully uninstalled. Please restart Flow. @@ -545,7 +548,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 + Trang chủ Enable the plugin home page state if you like to show the plugin results when query is empty. diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml index 089ba2dd1..65c67e744 100644 --- a/Flow.Launcher/Languages/zh-cn.xaml +++ b/Flow.Launcher/Languages/zh-cn.xaml @@ -237,6 +237,9 @@ 无法从提取的zip文件中找到plugin.json,或者此路径 {0} 不存在 已存在相同ID和版本的插件,或者存在版本大于此下载的插件 为插件 {0} 创建设置面板时出错:{1}{2} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted 插件商店 diff --git a/Flow.Launcher/Languages/zh-tw.xaml b/Flow.Launcher/Languages/zh-tw.xaml index 7aacc2190..0a75dc6d2 100644 --- a/Flow.Launcher/Languages/zh-tw.xaml +++ b/Flow.Launcher/Languages/zh-tw.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted 插件商店 diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml index 2fc2732e4..b5cf7c638 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml @@ -12,7 +12,7 @@ Coma (,) Punto (.) Número máximo de decimales - Show thousands separator in results + Mostrar separador de miles en los resultados Ha fallado la copia, inténtelo más tarde Mostrar mensaje de error cuando falle el cálculo diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml index c02fa6d46..c7d8d5305 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml @@ -12,7 +12,7 @@ Кома (,) Крапка (.) Макс. кількість знаків після коми - Show thousands separator in results + Показати роздільник тисяч у результатах Копіювання не вдалося, спробуйте пізніше Показувати повідомлення про помилку, якщо обчислення не вдалося diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml index 96d6549d6..7ff43c1a2 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml @@ -2,7 +2,7 @@ Máy tính - Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. + Thực hiện các phép tính toán học, bao gồm cả các số thuộc hệ thập lục phân và các hàm nâng cao như 'min(1,2,3)', 'sqrt(123)' và '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 @@ -12,7 +12,7 @@ Dấu phẩy (,) dấu chấm (.) Tối đa. chữ số thập phân - Show thousands separator in results - Copy failed, please try later - Show error message when calculation fails + Hiển thị dấu phân cách hàng nghìn trong kết quả + Sao chép thất bại, xin vui lòng thử lại sau + Hiển thị thông báo lỗi khi tính toán thất bại diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml index 3b960522d..9c98eaa7e 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml @@ -103,7 +103,7 @@ Permanently delete current folder Tên Type - Path + Đường dẫn Ngày tháng Thư Mục Xóa đã chọn @@ -148,35 +148,35 @@ Failed to load Everything SDK - Warning: Everything service is not running - Error while querying Everything + Cảnh báo: service Everything hiện không chạy + Có lỗi khi truy vấn Everything Sắp xếp theo - Name ↑ - Name ↓ - Path ↑ - Path ↓ - Size ↑ - Size ↓ - Extension ↑ - Extension ↓ + Tên ↑ + Tên ↓ + Đường dẫn ↑ + Đường dẫn ↓ + Kích thước ↑ + Kích thước ↓ + Tiện ích mở rộng ↑ + Tiện ích mở rộng ↓ Type Name ↑ Type Name ↓ - Date Created ↑ - Date Created ↓ - Date Modified ↑ - Date Modified ↓ + Ngày tạo ↑ + Ngày tạo ↓ + Ngày chỉnh sửa ↑ + Ngày chỉnh sửa ↓ 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 ↓ + Số lần chạy ↑ + Số lần chạy ↓ + Ngày chỉnh sửa gần nhất ↑ + Ngày chỉnh sửa gần nhất ↓ + Ngày truy cập ↑ + Ngày truy cập ↓ + Ngày chạy ↑ + Ngày chạy ↓ Warning: This is not a Fast Sort option, searches may be slow @@ -204,10 +204,10 @@ Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). - Today - {0} days ago - 1 month ago - {0} months ago - 1 year ago - {0} years ago + Hôm nay + {0} ngày trước + 1 tháng trước + {0} tháng trước + 1 năm trước + {0} năm trước diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/vi.xaml index 58fcba3eb..74d2a674b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/vi.xaml @@ -1,9 +1,9 @@  - Activate {0} plugin action keyword + Kích hoạt từ khóa cho plugin {0} Chỉ báo plugin - Cung cấp plugin gợi ý từ hành động + Cung cấp các gợi ý từ khóa cho plugin diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml index 1a2a5c93a..797efd4ac 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml @@ -13,7 +13,7 @@ Cài đặt Plugin Tải về và cài đặt Đã gỡ cài đặt plugin - Keep plugin settings + Giữ lại các cài đặt plugin Do you want to keep the settings of the plugin for the next usage? Đã cài đặt thành công plugin. Đang khởi động lại Flow, vui lòng đợi... Không thể tìm thấy tệp siêu dữ liệu plugin.json từ tệp zip được giải nén. @@ -29,10 +29,10 @@ Đã cài đặt plugin Tải xuống bản kê khai plugin không thành công Vui lòng kiểm tra xem bạn có thể kết nối với github.com không. Lỗi này có nghĩa là bạn không thể cài đặt hoặc cập nhật plugin. - Update all plugins - Would you like to update all plugins? + Cập nhật tất cả plugin + Bạn có muốn cập nhật tất cả các plugin không? Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. - Would you like to update {0} plugins? + Bạn có muốn cập nhật {0} plugin không? {0} plugins successfully updated. Restarting Flow, please wait... Plugin {0} successfully updated. Restarting Flow, please wait... Cài đặt từ một nguồn không xác định diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml index 86a7673b0..7808a7fce 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml @@ -6,15 +6,15 @@ Nhấn phím bất kỳ để đóng cửa sổ này... Không đóng dấu nhắc lệnh sau khi thực hiện lệnh Luôn chạy với tư cách quản trị viên - Use Windows Terminal + Sử dụng Windows Terminal Xóa lựa chọn đã chọn Vỏ - Allows to execute system commands from Flow Launcher + Cho phép thực thi các lệnh hệ thống từ Flow Launcher lệnh này đã được thực thi {0} lần thực thi lệnh thông qua lệnh shell Chạy với quyền quản trị Sao chép lệnh Chỉ hiển thị số lượng lệnh được sử dụng nhiều nhất: - Command not found: {0} - Error running the command: {0} + Không tìm thấy lệnh: {0} + Lỗi khi chạy lệnh: {0} diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml index 0a97e1c17..27a1db798 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml @@ -2,7 +2,7 @@ - Skip confirmation when Shutting down, Restarting, or Logging off + Omitir la confirmación al apagar, reiniciar o cerrar sesión Nombre diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml index 433011195..c58fd5758 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml @@ -2,7 +2,7 @@ - Skip confirmation when Shutting down, Restarting, or Logging off + Ignorar confirmação ao desligar, reiniciar ou terminar sessão Nome diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml index ff65ac8ac..feb0d1432 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml @@ -2,7 +2,7 @@ - Skip confirmation when Shutting down, Restarting, or Logging off + Пропустити підтвердження під час вимкнення, перезапуску або виходу із системи Назва diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml index 58c4ed7e3..478a6977f 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml @@ -9,13 +9,13 @@ Mô Tả Lệnh - Shutdown - Restart - Restart With Advanced Boot Options - Log Off/Sign Out - Lock - Sleep - Hibernate + Tắt máy + Khởi động lại + Khởi động lại với các tùy chọn khởi động nâng cao + Đăng xuất + Khóa máy + Chế độ ngủ + Chế độ ngủ đông Index Option Empty Recycle Bin Open Recycle Bin diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml index c485cce4a..b95a2c4c5 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml @@ -2,7 +2,7 @@ - Skip confirmation when Shutting down, Restarting, or Logging off + 关闭、重启或注销时跳过确认 名称 diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml index c2c5e50c2..3d5feb783 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml @@ -19,7 +19,7 @@ URL Busca en Usar autocompletado en consultas de búsqueda - Max Suggestions + Sugerencias máximas Autocompletar datos desde: Por favor, seleccione una búsqueda web ¿Está seguro de que desea eliminar {0}? From 0d9cc7ef831eb95520f3e6168adb513c1c4a2bb0 Mon Sep 17 00:00:00 2001 From: Jeremy Wu Date: Mon, 9 Mar 2026 14:23:36 +1100 Subject: [PATCH 20/20] Release 2.1.1 (#4327) --- .github/workflows/dotnet.yml | 10 ++-- Flow.Launcher/Languages/ar.xaml | 3 + Flow.Launcher/Languages/cs.xaml | 3 + Flow.Launcher/Languages/da.xaml | 3 + Flow.Launcher/Languages/de.xaml | 3 + Flow.Launcher/Languages/es-419.xaml | 3 + Flow.Launcher/Languages/es.xaml | 7 ++- Flow.Launcher/Languages/fr.xaml | 3 + Flow.Launcher/Languages/he.xaml | 3 + Flow.Launcher/Languages/it.xaml | 3 + Flow.Launcher/Languages/ja.xaml | 3 + Flow.Launcher/Languages/ko.xaml | 5 +- Flow.Launcher/Languages/nb.xaml | 3 + Flow.Launcher/Languages/nl.xaml | 3 + Flow.Launcher/Languages/pl.xaml | 3 + Flow.Launcher/Languages/pt-br.xaml | 3 + Flow.Launcher/Languages/pt-pt.xaml | 3 + Flow.Launcher/Languages/ru.xaml | 3 + Flow.Launcher/Languages/sk.xaml | 3 + Flow.Launcher/Languages/sr-Cyrl-RS.xaml | 3 + Flow.Launcher/Languages/sr.xaml | 3 + Flow.Launcher/Languages/tr.xaml | 3 + Flow.Launcher/Languages/uk-UA.xaml | 3 + Flow.Launcher/Languages/vi.xaml | 51 ++++++++-------- Flow.Launcher/Languages/zh-cn.xaml | 3 + Flow.Launcher/Languages/zh-tw.xaml | 3 + Flow.Launcher/MainWindow.xaml | 1 + Flow.Launcher/MainWindow.xaml.cs | 8 ++- Flow.Launcher/Themes/Win11Light.xaml | 2 +- ...low.Launcher.Plugin.BrowserBookmark.csproj | 6 +- .../Languages/es.xaml | 2 +- .../Languages/uk-UA.xaml | 2 +- .../Languages/vi.xaml | 8 +-- .../Languages/vi.xaml | 58 +++++++++---------- .../Search/SearchManager.cs | 3 - .../Languages/vi.xaml | 4 +- .../Languages/vi.xaml | 8 +-- .../Languages/vi.xaml | 8 +-- .../Languages/es.xaml | 2 +- .../Languages/pt-pt.xaml | 2 +- .../Languages/uk-UA.xaml | 2 +- .../Languages/vi.xaml | 14 ++--- .../Languages/zh-cn.xaml | 2 +- .../Languages/es.xaml | 2 +- appveyor.yml | 2 +- 45 files changed, 177 insertions(+), 98 deletions(-) diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 0659ae645..655b8ca7d 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -54,28 +54,28 @@ jobs: shell: powershell run: .\Scripts\post_build.ps1 - name: Upload Plugin Nupkg - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: Plugin nupkg path: | Output\Release\Flow.Launcher.Plugin.*.nupkg compression-level: 0 - name: Upload Setup - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: Flow Installer path: | Output\Packages\Flow-Launcher-*.exe compression-level: 0 - name: Upload Portable Version - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: Portable Version path: | Output\Packages\Flow-Launcher-Portable.zip compression-level: 0 - name: Upload Full Nupkg - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: Full nupkg path: | @@ -83,7 +83,7 @@ jobs: compression-level: 0 - name: Upload Release Information - uses: actions/upload-artifact@v6 + uses: actions/upload-artifact@v7 with: name: RELEASES path: | diff --git a/Flow.Launcher/Languages/ar.xaml b/Flow.Launcher/Languages/ar.xaml index b1c9ca426..f36cc0d12 100644 --- a/Flow.Launcher/Languages/ar.xaml +++ b/Flow.Launcher/Languages/ar.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted متجر الإضافات diff --git a/Flow.Launcher/Languages/cs.xaml b/Flow.Launcher/Languages/cs.xaml index b55026e28..cadf9bad7 100644 --- a/Flow.Launcher/Languages/cs.xaml +++ b/Flow.Launcher/Languages/cs.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Obchod s pluginy diff --git a/Flow.Launcher/Languages/da.xaml b/Flow.Launcher/Languages/da.xaml index 7d4094c84..5889fb709 100644 --- a/Flow.Launcher/Languages/da.xaml +++ b/Flow.Launcher/Languages/da.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plugin-butik diff --git a/Flow.Launcher/Languages/de.xaml b/Flow.Launcher/Languages/de.xaml index 32f8d5d2b..f65f0476c 100644 --- a/Flow.Launcher/Languages/de.xaml +++ b/Flow.Launcher/Languages/de.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plug-in-Store diff --git a/Flow.Launcher/Languages/es-419.xaml b/Flow.Launcher/Languages/es-419.xaml index 40e8cb978..76cc06eb5 100644 --- a/Flow.Launcher/Languages/es-419.xaml +++ b/Flow.Launcher/Languages/es-419.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Tienda de Plugins diff --git a/Flow.Launcher/Languages/es.xaml b/Flow.Launcher/Languages/es.xaml index 049b33858..6fcf3f9ad 100644 --- a/Flow.Launcher/Languages/es.xaml +++ b/Flow.Launcher/Languages/es.xaml @@ -79,8 +79,8 @@ Después de la desinstalación, es necesario eliminar manualmente la tarea (Flow.Launcher Startup) mediante el Programador de Tareas Error de configuración de arranque al iniciar Ocultar Flow Launcher cuando se pierde el foco - Show taskbar when Flow Launcher is opened - Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars. + Mostrar la barra de tareas cuando Flow Launcher está abierto + Muestra temporalmente la barra de tareas cuando Flow Launcher está abierto, útil para barras de tareas que se ocultan automáticamente. No mostrar notificaciones de nuevas versiones Ubicación de la ventana de búsqueda Recordar última ubicación @@ -237,6 +237,9 @@ 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 al crear el panel de configuración para el complemento {0}:{1}{2} + {0} requiere la versión {1} de Flow para ejecutarse + Flow no cumple los requisitos mínimos de versión para ejecutar {0}. ¿Desea continuar con la instalación?{1}{1}Recomendamos actualizar Flow a la última versión para garantizar que {0} funcione sin problemas. + No se pudo instalar el plugin porque plugin.json no es válido o está dañado Tienda complementos diff --git a/Flow.Launcher/Languages/fr.xaml b/Flow.Launcher/Languages/fr.xaml index d60d53a1c..da194dedf 100644 --- a/Flow.Launcher/Languages/fr.xaml +++ b/Flow.Launcher/Languages/fr.xaml @@ -237,6 +237,9 @@ 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} + {0} nécessite la version {1} de Flow pour fonctionner + Flow ne répond pas aux exigences de version minimale pour que {0} puisse fonctionner. Voulez-vous continuer l'installation ?{1}{1}Nous vous recommandons de mettre à jour Flow vers la dernière version pour vous assurer que {0} fonctionne sans problème. + Impossible d'installer le plugin car plugin.json est invalide ou corrompu Magasin des Plugins diff --git a/Flow.Launcher/Languages/he.xaml b/Flow.Launcher/Languages/he.xaml index 926d94886..a8c1bbacd 100644 --- a/Flow.Launcher/Languages/he.xaml +++ b/Flow.Launcher/Languages/he.xaml @@ -236,6 +236,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted חנות תוספים diff --git a/Flow.Launcher/Languages/it.xaml b/Flow.Launcher/Languages/it.xaml index 92afa5436..fb50f3ce4 100644 --- a/Flow.Launcher/Languages/it.xaml +++ b/Flow.Launcher/Languages/it.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Negozio dei Plugin diff --git a/Flow.Launcher/Languages/ja.xaml b/Flow.Launcher/Languages/ja.xaml index 39b23f269..b9c539ec9 100644 --- a/Flow.Launcher/Languages/ja.xaml +++ b/Flow.Launcher/Languages/ja.xaml @@ -237,6 +237,9 @@ 展開されたzipファイルからplugin.jsonが見つからないか、このパス {0} が存在しません 同じIDとバージョンのプラグインがすでに存在するか、またはこのダウンロードしたプラグインよりもバージョンが大きいです プラグイン {0}の設定パネル作成中にエラーが発生しました:{1}{2} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted プラグインストア diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml index 22f3bb011..072e8e1b9 100644 --- a/Flow.Launcher/Languages/ko.xaml +++ b/Flow.Launcher/Languages/ko.xaml @@ -228,6 +228,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted 플러그인 스토어 @@ -571,7 +574,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in 확인 아니오 - 배경 + 백그라운드 버전 diff --git a/Flow.Launcher/Languages/nb.xaml b/Flow.Launcher/Languages/nb.xaml index 1ef057125..adc4e3417 100644 --- a/Flow.Launcher/Languages/nb.xaml +++ b/Flow.Launcher/Languages/nb.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Programtillegg butikk diff --git a/Flow.Launcher/Languages/nl.xaml b/Flow.Launcher/Languages/nl.xaml index 412781b55..e8e9bc90b 100644 --- a/Flow.Launcher/Languages/nl.xaml +++ b/Flow.Launcher/Languages/nl.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plugin Winkel diff --git a/Flow.Launcher/Languages/pl.xaml b/Flow.Launcher/Languages/pl.xaml index efc2ade55..fc1c07162 100644 --- a/Flow.Launcher/Languages/pl.xaml +++ b/Flow.Launcher/Languages/pl.xaml @@ -236,6 +236,9 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Sklep z wtyczkami diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml index a7cf5ac68..590de12c5 100644 --- a/Flow.Launcher/Languages/pt-br.xaml +++ b/Flow.Launcher/Languages/pt-br.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Loja de Plugins diff --git a/Flow.Launcher/Languages/pt-pt.xaml b/Flow.Launcher/Languages/pt-pt.xaml index a2b58b1a0..f4a1c3605 100644 --- a/Flow.Launcher/Languages/pt-pt.xaml +++ b/Flow.Launcher/Languages/pt-pt.xaml @@ -236,6 +236,9 @@ 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} + {0} requer Flow Launcher v {1} para ser executado + A sua versão Flow Launcher não cumpre os reuisitos mínimos para executar {0}. Pretende continuar com a instalação?{1}{1}Deve atualizar Flow Launcher para a versão mais recente para poder usufruir de {0} sem quaisquer problemas. + Não foi possível instalar o plugin uma vez que plugin.json parece estar danificado. Loja de plugins diff --git a/Flow.Launcher/Languages/ru.xaml b/Flow.Launcher/Languages/ru.xaml index 544816684..6817325da 100644 --- a/Flow.Launcher/Languages/ru.xaml +++ b/Flow.Launcher/Languages/ru.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Магазин плагинов diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index c47b47ae1..42c623e1f 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -238,6 +238,9 @@ Nevykonali sa žiadne zmeny. 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} + Plugin {0} vyžaduje na spustenie minimálnu verziu Flow Launcheru {1} + Flow Launcher nespĺňa minimálne požiadavky na verziu na spustenie {0}. Chcete pokračovať v inštalácii?{1}{1}Odporúčame aktualizovať Flow Launcher na najnovšiu verziu, aby {0} fungoval bez problémov. + Inštalácia pluginu zlyhala z dôvodu neplatného alebo poškodeného súboru plugin.json Repozitár pluginov diff --git a/Flow.Launcher/Languages/sr-Cyrl-RS.xaml b/Flow.Launcher/Languages/sr-Cyrl-RS.xaml index 824b48dbf..caa1ba9c2 100644 --- a/Flow.Launcher/Languages/sr-Cyrl-RS.xaml +++ b/Flow.Launcher/Languages/sr-Cyrl-RS.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plugin Store diff --git a/Flow.Launcher/Languages/sr.xaml b/Flow.Launcher/Languages/sr.xaml index 3ee982819..9e2315239 100644 --- a/Flow.Launcher/Languages/sr.xaml +++ b/Flow.Launcher/Languages/sr.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Plugin Store diff --git a/Flow.Launcher/Languages/tr.xaml b/Flow.Launcher/Languages/tr.xaml index 023eb2aa6..1baa3a3e5 100644 --- a/Flow.Launcher/Languages/tr.xaml +++ b/Flow.Launcher/Languages/tr.xaml @@ -237,6 +237,9 @@ 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 Eklenti {0} için ayar paneli oluşturulurken hata oluştu: {1}{2} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Eklenti Mağazası diff --git a/Flow.Launcher/Languages/uk-UA.xaml b/Flow.Launcher/Languages/uk-UA.xaml index 0da6c7a47..097eb8224 100644 --- a/Flow.Launcher/Languages/uk-UA.xaml +++ b/Flow.Launcher/Languages/uk-UA.xaml @@ -237,6 +237,9 @@ Не вдалося знайти файл plugin.json у розпакованому zip-файлі або цей шлях {0} не існує. Вже існує плагін з таким самим ідентифікатором та версією, або версія цього плагіну вища за версію завантаженого. Помилка створення панелі налаштувань для плагіну {0}: {1}{2} + Для роботи {0} необхідна {1} версія Flow + Flow не відповідає мінімальним вимогам версії для запуску {0}. Чи хочете ви продовжити його встановлення?{1}{1}Ми рекомендуємо оновити Flow до останньої версії, аби забезпечити безперебійну роботу {0}. + Не вдалося встановити плагін, оскільки файл plugin.json є недійсним або пошкодженим Магазин плагінів diff --git a/Flow.Launcher/Languages/vi.xaml b/Flow.Launcher/Languages/vi.xaml index 463c11d0b..a85d1c93a 100644 --- a/Flow.Launcher/Languages/vi.xaml +++ b/Flow.Launcher/Languages/vi.xaml @@ -13,32 +13,32 @@ Click yes if you would like select the {0} executable again. Click no if you would like to download {1} Unable to set {0} executable path, please try from Flow's settings (scroll down to the bottom). - Fail to Init Plugins + Khởi tạo các Plugin thất bại Plugins: {0} - fail to load and would be disabled, please contact plugin creator for help - Flow Launcher needs to restart to finish disabling portable mode, after the restart your portable data profile will be deleted and roaming data profile kept - Flow Launcher needs to restart to finish enabling portable mode, after the restart your roaming data profile will be deleted and portable data profile kept - Flow Launcher has detected you enabled portable mode, would you like to move it to a different location? - Flow Launcher has detected you disabled portable mode, the relevant shortcuts and uninstaller entry have been created + Flow Launcher cần được khởi động lại để hoàn tất tắt chế độ Portable. Sau khi khởi động lại, hồ sơ dữ liệu Portable của bạn sẽ bị xóa và hồ sơ dữ liệu Roaming sẽ được giữ lại + Flow Launcher cần được khởi động lại để hoàn tất bật chế độ Portable. Sau khi khởi động lại, hồ sơ dữ liệu Roaming của bạn sẽ bị xóa và hồ sơ dữ liệu Portable sẽ được giữ lại + Flow Launcher nhận thấy bạn đã bật chế độ Portable. Bạn có muốn chuyển Flow Launcher tới một vị trí khác không? + Flow Launcher nhận thấy bạn đã tắt chế độ Portable. Những shortcut liên quan và mục gỡ cài đặt đã được tạo 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. 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 + Hãy xem log để biết thêm thông tin - Please try again + Xin vui lòng thử lại Unable to parse Http Proxy Failed to install TypeScript environment. Please try again later - Failed to install Python environment. Please try again later. + Cài đặt môi trường Python thất bại. Xin vui lòng thử lại sau. Không thể đăng ký phím nóng "{0}". Phím nóng có thể được sử dụng bởi một chương trình khác. Chuyển sang phím nóng khác hoặc thoát khỏi chương trình khác. - Failed to unregister hotkey "{0}". Please try again or see log for details + Hủy đăng ký phím nóng "{0}" thất bại. Xin vui lòng thử lại hoặc xem log để biết thêm chi tiết Flow Launcher Không thể khởi động {0} Định dạng tệp plugin Flow Launcher không chính xác @@ -63,11 +63,11 @@ Tạm dừng sử dụng phím nóng. Đặt lại vị trí Cài lại vị trí cửa sổ tìm kiếm - Type here to search - {0}: This plugin is still initializing... + Gõ vào đây để tìm kiếm + {0}: Plugin này vẫn đang được khởi tạo... Select this result to requery - {0}: Failed to respond! - Select this result for more info + {0}: Phản hồi thất bại! + Hãy chọn kết quả này để biết thêm thông tin Cài đặt @@ -75,14 +75,14 @@ Chế độ Portabler Lưu trữ tất cả cài đặt và dữ liệu người dùng trong một thư mục (hữu ích khi sử dụng với thiết bị lưu trữ di động hoặc dịch vụ đám mây). Khởi động Flow Launcher khi khởi động hệ thống - Use logon task instead of startup entry for faster startup experience - After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler + Dùng logon task thay cho startup entry để khởi động nhanh hơn + Sau khi gỡ cài đặt, bạn cần tự xóa task này (Flow.Launcher Startup) bằng Task Scheduler Không lưu được tính năng tự khởi động khi khởi động hệ thống Ẩn Flow Launcher khi mất tiêu điểm - Show taskbar when Flow Launcher is opened - Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars. + Hiện thanh tác vụ khi đang mở Flow Launcher + Tạm thời hiện thanh tác vụ khi Flow Launcher được bật, hữu ích khi bạn dùng taskbar tự động ẩn. Không hiển thị thông báo khi có phiên bản mới - Search Window Location + Vị trí cửa sổ tìm kiếm Ghi nhớ vị trí cuối cùng Màn hình bằng con trỏ chuột Màn hình có cửa sổ được tập trung @@ -117,7 +117,7 @@ Luôn bắt đầu nhập ở chế độ tiếng Anh Tạm thời chuyển phương thức nhập sang tiếng Anh khi kích hoạt Flow. Cập nhật tự động - Automatically check and update the app when available + Tự động kiểm tra và cập nhật app khi có phiên bản mới Chọn Ẩn Flow Launcher khi khởi động Flow Launcher sẽ ẩn trong khay hệ thống sau khi khởi động. @@ -173,9 +173,9 @@ 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 + Trang chủ Show home page results when query text is empty. - Show History Results in Home Page + Hiện lịch sử kết quả ở trang chủ Maximum History Results Shown in Home Page History Style Choose the type of history to show in the History and Home Page @@ -212,7 +212,7 @@ Đã bật Ưu tiên Search Delay - Home Page + Trang chủ Ưu tiên hiện tại Ưu tiên mới Ưu tiên @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted Tải tiện ích mở rộng @@ -255,7 +258,7 @@ Lỗi cài đặt plugin Lỗi cài đặt plugin Error updating plugin - Keep plugin settings + Giữ lại các cài đặt plugin Do you want to keep the settings of the plugin for the next usage? Plugin {0} successfully installed. Please restart Flow. Plugin {0} successfully uninstalled. Please restart Flow. @@ -545,7 +548,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 + Trang chủ Enable the plugin home page state if you like to show the plugin results when query is empty. diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml index 089ba2dd1..65c67e744 100644 --- a/Flow.Launcher/Languages/zh-cn.xaml +++ b/Flow.Launcher/Languages/zh-cn.xaml @@ -237,6 +237,9 @@ 无法从提取的zip文件中找到plugin.json,或者此路径 {0} 不存在 已存在相同ID和版本的插件,或者存在版本大于此下载的插件 为插件 {0} 创建设置面板时出错:{1}{2} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted 插件商店 diff --git a/Flow.Launcher/Languages/zh-tw.xaml b/Flow.Launcher/Languages/zh-tw.xaml index 7aacc2190..0a75dc6d2 100644 --- a/Flow.Launcher/Languages/zh-tw.xaml +++ b/Flow.Launcher/Languages/zh-tw.xaml @@ -237,6 +237,9 @@ 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} + {0} requires Flow version {1} to run + Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues. + Failed to install plugin because plugin.json is invalid or corrupted 插件商店 diff --git a/Flow.Launcher/MainWindow.xaml b/Flow.Launcher/MainWindow.xaml index 747975b2a..9d6b51dcc 100644 --- a/Flow.Launcher/MainWindow.xaml +++ b/Flow.Launcher/MainWindow.xaml @@ -342,6 +342,7 @@ Margin="12 0 12 0" HorizontalAlignment="Center" VerticalAlignment="Bottom" + Loaded="ProgressBar_Loaded" StrokeThickness="2" Visibility="{Binding ProgressBarVisibility, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" X1="-100" diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs index 942cccbe9..735e8188a 100644 --- a/Flow.Launcher/MainWindow.xaml.cs +++ b/Flow.Launcher/MainWindow.xaml.cs @@ -199,9 +199,6 @@ namespace Flow.Launcher ThemeManager.Current.ApplicationTheme = ApplicationTheme.Dark; } - // Initialize position - InitProgressbarAnimation(); - // Force update position UpdatePosition(); @@ -353,6 +350,11 @@ namespace Flow.Launcher } } + private void ProgressBar_Loaded(object sender, RoutedEventArgs e) + { + InitProgressbarAnimation(); + } + private async void OnClosing(object sender, CancelEventArgs e) { if (!CanClose) diff --git a/Flow.Launcher/Themes/Win11Light.xaml b/Flow.Launcher/Themes/Win11Light.xaml index 1dd53916b..acb0a2784 100644 --- a/Flow.Launcher/Themes/Win11Light.xaml +++ b/Flow.Launcher/Themes/Win11Light.xaml @@ -52,7 +52,7 @@ - + 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 b17b6f466..aff73ea77 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj @@ -51,6 +51,8 @@ $(OutputPath)runtimes\linux-s390x; $(OutputPath)runtimes\linux-x64; $(OutputPath)runtimes\linux-x86; + $(OutputPath)runtimes\linux-musl-riscv64; + $(OutputPath)runtimes\linux-riscv64; $(OutputPath)runtimes\maccatalyst-arm64; $(OutputPath)runtimes\maccatalyst-x64; $(OutputPath)runtimes\osx; @@ -74,6 +76,8 @@ $(PublishDir)runtimes\linux-s390x; $(PublishDir)runtimes\linux-x64; $(PublishDir)runtimes\linux-x86; + $(PublishDir)runtimes\linux-musl-riscv64; + $(PublishDir)runtimes\linux-riscv64; $(PublishDir)runtimes\maccatalyst-arm64; $(PublishDir)runtimes\maccatalyst-x64; $(PublishDir)runtimes\osx; @@ -110,4 +114,4 @@ - + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml index 2fc2732e4..b5cf7c638 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/es.xaml @@ -12,7 +12,7 @@ Coma (,) Punto (.) Número máximo de decimales - Show thousands separator in results + Mostrar separador de miles en los resultados Ha fallado la copia, inténtelo más tarde Mostrar mensaje de error cuando falle el cálculo diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml index c02fa6d46..c7d8d5305 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml @@ -12,7 +12,7 @@ Кома (,) Крапка (.) Макс. кількість знаків після коми - Show thousands separator in results + Показати роздільник тисяч у результатах Копіювання не вдалося, спробуйте пізніше Показувати повідомлення про помилку, якщо обчислення не вдалося diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml index 96d6549d6..7ff43c1a2 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml @@ -2,7 +2,7 @@ Máy tính - Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'. + Thực hiện các phép tính toán học, bao gồm cả các số thuộc hệ thập lục phân và các hàm nâng cao như 'min(1,2,3)', 'sqrt(123)' và '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 @@ -12,7 +12,7 @@ Dấu phẩy (,) dấu chấm (.) Tối đa. chữ số thập phân - Show thousands separator in results - Copy failed, please try later - Show error message when calculation fails + Hiển thị dấu phân cách hàng nghìn trong kết quả + Sao chép thất bại, xin vui lòng thử lại sau + Hiển thị thông báo lỗi khi tính toán thất bại diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml index 3b960522d..9c98eaa7e 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml @@ -103,7 +103,7 @@ Permanently delete current folder Tên Type - Path + Đường dẫn Ngày tháng Thư Mục Xóa đã chọn @@ -148,35 +148,35 @@ Failed to load Everything SDK - Warning: Everything service is not running - Error while querying Everything + Cảnh báo: service Everything hiện không chạy + Có lỗi khi truy vấn Everything Sắp xếp theo - Name ↑ - Name ↓ - Path ↑ - Path ↓ - Size ↑ - Size ↓ - Extension ↑ - Extension ↓ + Tên ↑ + Tên ↓ + Đường dẫn ↑ + Đường dẫn ↓ + Kích thước ↑ + Kích thước ↓ + Tiện ích mở rộng ↑ + Tiện ích mở rộng ↓ Type Name ↑ Type Name ↓ - Date Created ↑ - Date Created ↓ - Date Modified ↑ - Date Modified ↓ + Ngày tạo ↑ + Ngày tạo ↓ + Ngày chỉnh sửa ↑ + Ngày chỉnh sửa ↓ 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 ↓ + Số lần chạy ↑ + Số lần chạy ↓ + Ngày chỉnh sửa gần nhất ↑ + Ngày chỉnh sửa gần nhất ↓ + Ngày truy cập ↑ + Ngày truy cập ↓ + Ngày chạy ↑ + Ngày chạy ↓ Warning: This is not a Fast Sort option, searches may be slow @@ -204,10 +204,10 @@ Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). - Today - {0} days ago - 1 month ago - {0} months ago - 1 year ago - {0} years ago + Hôm nay + {0} ngày trước + 1 tháng trước + {0} tháng trước + 1 năm trước + {0} năm trước diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index 9420e3d3a..28ab1d2e2 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -299,9 +299,6 @@ namespace Flow.Launcher.Plugin.Explorer.Search private List GetQuickAccessResultsFilteredByActionKeyword(Query query, List actions) { - if (!Settings.QuickAccessKeywordEnabled) - return []; - var results = QuickAccess.AccessLinkListMatched(query, Settings.QuickAccessLinks); if (results.Count == 0) return []; diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/vi.xaml index 58fcba3eb..74d2a674b 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/vi.xaml @@ -1,9 +1,9 @@  - Activate {0} plugin action keyword + Kích hoạt từ khóa cho plugin {0} Chỉ báo plugin - Cung cấp plugin gợi ý từ hành động + Cung cấp các gợi ý từ khóa cho plugin diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml index 1a2a5c93a..797efd4ac 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml @@ -13,7 +13,7 @@ Cài đặt Plugin Tải về và cài đặt Đã gỡ cài đặt plugin - Keep plugin settings + Giữ lại các cài đặt plugin Do you want to keep the settings of the plugin for the next usage? Đã cài đặt thành công plugin. Đang khởi động lại Flow, vui lòng đợi... Không thể tìm thấy tệp siêu dữ liệu plugin.json từ tệp zip được giải nén. @@ -29,10 +29,10 @@ Đã cài đặt plugin Tải xuống bản kê khai plugin không thành công Vui lòng kiểm tra xem bạn có thể kết nối với github.com không. Lỗi này có nghĩa là bạn không thể cài đặt hoặc cập nhật plugin. - Update all plugins - Would you like to update all plugins? + Cập nhật tất cả plugin + Bạn có muốn cập nhật tất cả các plugin không? Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. - Would you like to update {0} plugins? + Bạn có muốn cập nhật {0} plugin không? {0} plugins successfully updated. Restarting Flow, please wait... Plugin {0} successfully updated. Restarting Flow, please wait... Cài đặt từ một nguồn không xác định diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml index 86a7673b0..7808a7fce 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml @@ -6,15 +6,15 @@ Nhấn phím bất kỳ để đóng cửa sổ này... Không đóng dấu nhắc lệnh sau khi thực hiện lệnh Luôn chạy với tư cách quản trị viên - Use Windows Terminal + Sử dụng Windows Terminal Xóa lựa chọn đã chọn Vỏ - Allows to execute system commands from Flow Launcher + Cho phép thực thi các lệnh hệ thống từ Flow Launcher lệnh này đã được thực thi {0} lần thực thi lệnh thông qua lệnh shell Chạy với quyền quản trị Sao chép lệnh Chỉ hiển thị số lượng lệnh được sử dụng nhiều nhất: - Command not found: {0} - Error running the command: {0} + Không tìm thấy lệnh: {0} + Lỗi khi chạy lệnh: {0} diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml index 0a97e1c17..27a1db798 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml @@ -2,7 +2,7 @@ - Skip confirmation when Shutting down, Restarting, or Logging off + Omitir la confirmación al apagar, reiniciar o cerrar sesión Nombre diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml index 433011195..c58fd5758 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml @@ -2,7 +2,7 @@ - Skip confirmation when Shutting down, Restarting, or Logging off + Ignorar confirmação ao desligar, reiniciar ou terminar sessão Nome diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml index ff65ac8ac..feb0d1432 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml @@ -2,7 +2,7 @@ - Skip confirmation when Shutting down, Restarting, or Logging off + Пропустити підтвердження під час вимкнення, перезапуску або виходу із системи Назва diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml index 58c4ed7e3..478a6977f 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml @@ -9,13 +9,13 @@ Mô Tả Lệnh - Shutdown - Restart - Restart With Advanced Boot Options - Log Off/Sign Out - Lock - Sleep - Hibernate + Tắt máy + Khởi động lại + Khởi động lại với các tùy chọn khởi động nâng cao + Đăng xuất + Khóa máy + Chế độ ngủ + Chế độ ngủ đông Index Option Empty Recycle Bin Open Recycle Bin diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml index c485cce4a..b95a2c4c5 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml @@ -2,7 +2,7 @@ - Skip confirmation when Shutting down, Restarting, or Logging off + 关闭、重启或注销时跳过确认 名称 diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml index c2c5e50c2..3d5feb783 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml @@ -19,7 +19,7 @@ URL Busca en Usar autocompletado en consultas de búsqueda - Max Suggestions + Sugerencias máximas Autocompletar datos desde: Por favor, seleccione una búsqueda web ¿Está seguro de que desea eliminar {0}? diff --git a/appveyor.yml b/appveyor.yml index 467ddefbe..66513a298 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '2.1.0.{build}' +version: '2.1.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