diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
index 177c00fa2..5b3419041 100644
--- a/.github/actions/spelling/expect.txt
+++ b/.github/actions/spelling/expect.txt
@@ -99,3 +99,7 @@ pluginsmanager
alreadyexists
Softpedia
img
+Reloadable
+metadatas
+WMP
+VSTHRD
diff --git a/.github/actions/spelling/patterns.txt b/.github/actions/spelling/patterns.txt
index 5ef8859fc..f308ec599 100644
--- a/.github/actions/spelling/patterns.txt
+++ b/.github/actions/spelling/patterns.txt
@@ -133,3 +133,4 @@
\bPortuguês (Brasil)\b
\bčeština\b
\bPortuguês\b
+\bIoc\b
diff --git a/.github/update_release_pr.py b/.github/update_release_pr.py
index ccea511b3..be523bfe8 100644
--- a/.github/update_release_pr.py
+++ b/.github/update_release_pr.py
@@ -1,11 +1,12 @@
from os import getenv
+from typing import Optional
import requests
def get_github_prs(token: str, owner: str, repo: str, label: str = "", state: str = "all") -> list[dict]:
"""
- Fetches pull requests from a GitHub repository that match a given milestone and label.
+ Fetches pull requests from a GitHub repository that match a given label and state.
Args:
token (str): GitHub token.
@@ -23,39 +24,10 @@ def get_github_prs(token: str, owner: str, repo: str, label: str = "", state: st
"Accept": "application/vnd.github.v3+json",
}
- milestone_id = None
- milestone_url = f"https://api.github.com/repos/{owner}/{repo}/milestones"
- params = {"state": "open"}
-
- try:
- response = requests.get(milestone_url, headers=headers, params=params)
- response.raise_for_status()
- milestones = response.json()
-
- if len(milestones) > 2:
- print("More than two milestones found, unable to determine the milestone required.")
- exit(1)
-
- # milestones.pop()
- for ms in milestones:
- if ms["title"] != "Future":
- milestone_id = ms["number"]
- print(f"Gathering PRs with milestone {ms['title']}...")
- break
-
- if not milestone_id:
- print(f"No suitable milestone found in repository '{owner}/{repo}'.")
- exit(1)
-
- except requests.exceptions.RequestException as e:
- print(f"Error fetching milestones: {e}")
- exit(1)
-
- # This endpoint allows filtering by milestone and label. A PR in GH's perspective is a type of issue.
+ # This endpoint allows filtering by label(and milestone). A PR in GH's perspective is a type of issue.
prs_url = f"https://api.github.com/repos/{owner}/{repo}/issues"
params = {
"state": state,
- "milestone": milestone_id,
"labels": label,
"per_page": 100,
}
@@ -83,7 +55,9 @@ def get_github_prs(token: str, owner: str, repo: str, label: str = "", state: st
return all_prs
-def get_prs(pull_request_items: list[dict], label: str = "", state: str = "all") -> list[dict]:
+def get_prs(
+ pull_request_items: list[dict], label: str = "", state: str = "all", milestone_title: Optional[str] = None
+) -> list[dict]:
"""
Returns a list of pull requests after applying the label and state filters.
@@ -91,6 +65,8 @@ def get_prs(pull_request_items: list[dict], label: str = "", state: str = "all")
pull_request_items (list[dict]): List of PR items.
label (str): The label name. Filter is not applied when empty string.
state (str): State of PR, e.g. open, closed, all
+ milestone_title (Optional[str]): The milestone title to filter by. This is the milestone number you created
+ in GitHub, e.g. '1.20.0'. If None, no milestone filtering is applied.
Returns:
list: A list of dictionaries, where each dictionary represents a pull request.
@@ -99,22 +75,32 @@ def get_prs(pull_request_items: list[dict], label: str = "", state: str = "all")
pr_list = []
count = 0
for pr in pull_request_items:
- if state in [pr["state"], "all"] and (not label or [item for item in pr["labels"] if item["name"] == label]):
- pr_list.append(pr)
- count += 1
+ if state not in [pr["state"], "all"]:
+ continue
- print(f"Found {count} PRs with {label if label else 'no filter on'} label and state as {state}")
+ if label and not [item for item in pr["labels"] if item["name"] == label]:
+ continue
+
+ if milestone_title:
+ if pr["milestone"] is None or pr["milestone"]["title"] != milestone_title:
+ continue
+
+ pr_list.append(pr)
+ count += 1
+
+ print(
+ f"Found {count} PRs with {label if label else 'no filter on'} label, state as {state}, and milestone {milestone_title if milestone_title else "any"}"
+ )
return pr_list
-def get_prs_assignees(pull_request_items: list[dict], label: str = "", state: str = "all") -> list[str]:
+
+def get_prs_assignees(pull_request_items: list[dict]) -> list[str]:
"""
- Returns a list of pull request assignees after applying the label and state filters, excludes jjw24.
+ Returns a list of pull request assignees, excludes jjw24.
Args:
- pull_request_items (list[dict]): List of PR items.
- label (str): The label name. Filter is not applied when empty string.
- state (str): State of PR, e.g. open, closed, all
+ pull_request_items (list[dict]): List of PR items to get the assignees from.
Returns:
list: A list of strs, where each string is an assignee name. List is not distinct, so can contain
@@ -123,13 +109,13 @@ def get_prs_assignees(pull_request_items: list[dict], label: str = "", state: st
"""
assignee_list = []
for pr in pull_request_items:
- if state in [pr["state"], "all"] and (not label or [item for item in pr["labels"] if item["name"] == label]):
- [assignee_list.append(assignee["login"]) for assignee in pr["assignees"] if assignee["login"] != "jjw24" ]
+ [assignee_list.append(assignee["login"]) for assignee in pr["assignees"] if assignee["login"] != "jjw24"]
- print(f"Found {len(assignee_list)} assignees with {label if label else 'no filter on'} label and state as {state}")
+ print(f"Found {len(assignee_list)} assignees")
return assignee_list
+
def get_pr_descriptions(pull_request_items: list[dict]) -> str:
"""
Returns the concatenated string of pr title and number in the format of
@@ -207,15 +193,16 @@ if __name__ == "__main__":
print(f"Fetching {state} PRs for {repository_owner}/{repository_name} ...")
- pull_requests = get_github_prs(github_token, repository_owner, repository_name)
+ # First, get all PRs to find the release PR and determine the milestone
+ all_pull_requests = get_github_prs(github_token, repository_owner, repository_name)
- if not pull_requests:
- print("No matching pull requests found")
+ if not all_pull_requests:
+ print("No pull requests found")
exit(1)
- print(f"\nFound total of {len(pull_requests)} pull requests")
+ print(f"\nFound total of {len(all_pull_requests)} pull requests")
- release_pr = get_prs(pull_requests, "release", "open")
+ release_pr = get_prs(all_pull_requests, "release", "open")
if len(release_pr) != 1:
print(f"Unable to find the exact release PR. Returned result: {release_pr}")
@@ -223,14 +210,25 @@ if __name__ == "__main__":
print(f"Found release PR: {release_pr[0]['title']}")
- enhancement_prs = get_prs(pull_requests, "enhancement", "closed")
- bug_fix_prs = get_prs(pull_requests, "bug", "closed")
+ release_milestone_title = release_pr[0].get("milestone", {}).get("title", None)
+
+ if not release_milestone_title:
+ print("Release PR does not have a milestone assigned.")
+ exit(1)
+
+ print(f"Using milestone number: {release_milestone_title}")
+
+ enhancement_prs = get_prs(all_pull_requests, "enhancement", "closed", release_milestone_title)
+ bug_fix_prs = get_prs(all_pull_requests, "bug", "closed", release_milestone_title)
+
+ if len(enhancement_prs) == 0 and len(bug_fix_prs) == 0:
+ print(f"No PRs with {release_milestone_title} milestone were found")
description_content = "# Release notes\n"
description_content += f"## Features\n{get_pr_descriptions(enhancement_prs)}" if enhancement_prs else ""
description_content += f"## Bug fixes\n{get_pr_descriptions(bug_fix_prs)}" if bug_fix_prs else ""
- assignees = list(set(get_prs_assignees(pull_requests, "enhancement", "closed") + get_prs_assignees(pull_requests, "bug", "closed")))
+ assignees = list(set(get_prs_assignees(enhancement_prs) + get_prs_assignees(bug_fix_prs)))
assignees.sort(key=str.lower)
description_content += f"### Authors:\n{', '.join(assignees)}"
diff --git a/Flow.Launcher.Core/Plugin/PluginInstaller.cs b/Flow.Launcher.Core/Plugin/PluginInstaller.cs
new file mode 100644
index 000000000..33963c01a
--- /dev/null
+++ b/Flow.Launcher.Core/Plugin/PluginInstaller.cs
@@ -0,0 +1,353 @@
+using System;
+using System.IO;
+using System.IO.Compression;
+using System.Linq;
+using System.Text.Json;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows;
+using CommunityToolkit.Mvvm.DependencyInjection;
+using Flow.Launcher.Infrastructure.UserSettings;
+using Flow.Launcher.Plugin;
+
+namespace Flow.Launcher.Core.Plugin;
+
+///
+/// Class for installing, updating, and uninstalling plugins.
+///
+public static class PluginInstaller
+{
+ private static readonly string ClassName = nameof(PluginInstaller);
+
+ private static readonly Settings Settings = Ioc.Default.GetRequiredService();
+
+ // We should not initialize API in static constructor because it will create another API instance
+ private static IPublicAPI api = null;
+ private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService();
+
+ ///
+ /// Installs a plugin and restarts the application if required by settings. Prompts user for confirmation and handles download if needed.
+ ///
+ /// The plugin to install.
+ /// A Task representing the asynchronous install operation.
+ public static async Task InstallPluginAndCheckRestartAsync(UserPlugin newPlugin)
+ {
+ if (API.PluginModified(newPlugin.ID))
+ {
+ API.ShowMsgError(string.Format(API.GetTranslation("pluginModifiedAlreadyTitle"), newPlugin.Name),
+ API.GetTranslation("pluginModifiedAlreadyMessage"));
+ return;
+ }
+
+ if (API.ShowMsgBox(
+ string.Format(
+ API.GetTranslation("InstallPromptSubtitle"),
+ newPlugin.Name, newPlugin.Author, Environment.NewLine),
+ API.GetTranslation("InstallPromptTitle"),
+ button: MessageBoxButton.YesNo) != MessageBoxResult.Yes) return;
+
+ try
+ {
+ // at minimum should provide a name, but handle plugin that is not downloaded from plugins manifest and is a url download
+ var downloadFilename = string.IsNullOrEmpty(newPlugin.Version)
+ ? $"{newPlugin.Name}-{Guid.NewGuid()}.zip"
+ : $"{newPlugin.Name}-{newPlugin.Version}.zip";
+
+ var filePath = Path.Combine(Path.GetTempPath(), downloadFilename);
+
+ using var cts = new CancellationTokenSource();
+
+ if (!newPlugin.IsFromLocalInstallPath)
+ {
+ await DownloadFileAsync(
+ $"{API.GetTranslation("DownloadingPlugin")} {newPlugin.Name}",
+ newPlugin.UrlDownload, filePath, cts);
+ }
+ else
+ {
+ filePath = newPlugin.LocalInstallPath;
+ }
+
+ // check if user cancelled download before installing plugin
+ if (cts.IsCancellationRequested)
+ {
+ return;
+ }
+
+ if (!File.Exists(filePath))
+ {
+ throw new FileNotFoundException($"Plugin {newPlugin.ID} zip file not found at {filePath}", filePath);
+ }
+
+ if (!API.InstallPlugin(newPlugin, filePath))
+ {
+ return;
+ }
+
+ if (!newPlugin.IsFromLocalInstallPath)
+ {
+ File.Delete(filePath);
+ }
+ }
+ catch (Exception e)
+ {
+ API.LogException(ClassName, "Failed to install plugin", e);
+ API.ShowMsgError(API.GetTranslation("ErrorInstallingPlugin"));
+ return; // do not restart on failure
+ }
+
+ if (Settings.AutoRestartAfterChanging)
+ {
+ API.RestartApp();
+ }
+ else
+ {
+ API.ShowMsg(
+ API.GetTranslation("installbtn"),
+ string.Format(
+ API.GetTranslation(
+ "InstallSuccessNoRestart"),
+ newPlugin.Name));
+ }
+ }
+
+ ///
+ /// Installs a plugin from a local zip file and restarts the application if required by settings. Validates the zip and prompts user for confirmation.
+ ///
+ /// The path to the plugin zip file.
+ /// A Task representing the asynchronous install operation.
+ public static async Task InstallPluginAndCheckRestartAsync(string filePath)
+ {
+ UserPlugin plugin;
+ try
+ {
+ using ZipArchive archive = ZipFile.OpenRead(filePath);
+ var pluginJsonEntry = archive.Entries.FirstOrDefault(x => x.Name == "plugin.json") ??
+ throw new FileNotFoundException("The zip file does not contain a plugin.json file.");
+
+ using Stream stream = pluginJsonEntry.Open();
+ plugin = JsonSerializer.Deserialize(stream);
+ plugin.IcoPath = "Images\\zipfolder.png";
+ plugin.LocalInstallPath = filePath;
+ }
+ catch (Exception e)
+ {
+ API.LogException(ClassName, "Failed to validate zip file", e);
+ API.ShowMsgError(API.GetTranslation("ZipFileNotHavePluginJson"));
+ return;
+ }
+
+ if (API.PluginModified(plugin.ID))
+ {
+ API.ShowMsgError(string.Format(API.GetTranslation("pluginModifiedAlreadyTitle"), plugin.Name),
+ API.GetTranslation("pluginModifiedAlreadyMessage"));
+ return;
+ }
+
+ if (Settings.ShowUnknownSourceWarning)
+ {
+ if (!InstallSourceKnown(plugin.Website)
+ && API.ShowMsgBox(string.Format(
+ API.GetTranslation("InstallFromUnknownSourceSubtitle"), Environment.NewLine),
+ API.GetTranslation("InstallFromUnknownSourceTitle"),
+ MessageBoxButton.YesNo) == MessageBoxResult.No)
+ return;
+ }
+
+ await InstallPluginAndCheckRestartAsync(plugin);
+ }
+
+ ///
+ /// Uninstalls a plugin and restarts the application if required by settings. Prompts user for confirmation and whether to keep plugin settings.
+ ///
+ /// The plugin metadata to uninstall.
+ /// A Task representing the asynchronous uninstall operation.
+ public static async Task UninstallPluginAndCheckRestartAsync(PluginMetadata oldPlugin)
+ {
+ if (API.PluginModified(oldPlugin.ID))
+ {
+ API.ShowMsgError(string.Format(API.GetTranslation("pluginModifiedAlreadyTitle"), oldPlugin.Name),
+ API.GetTranslation("pluginModifiedAlreadyMessage"));
+ return;
+ }
+
+ if (API.ShowMsgBox(
+ string.Format(
+ API.GetTranslation("UninstallPromptSubtitle"),
+ oldPlugin.Name, oldPlugin.Author, Environment.NewLine),
+ API.GetTranslation("UninstallPromptTitle"),
+ button: MessageBoxButton.YesNo) != MessageBoxResult.Yes) return;
+
+ var removePluginSettings = API.ShowMsgBox(
+ API.GetTranslation("KeepPluginSettingsSubtitle"),
+ API.GetTranslation("KeepPluginSettingsTitle"),
+ button: MessageBoxButton.YesNo) == MessageBoxResult.No;
+
+ try
+ {
+ if (!await API.UninstallPluginAsync(oldPlugin, removePluginSettings))
+ {
+ return;
+ }
+ }
+ catch (Exception e)
+ {
+ API.LogException(ClassName, "Failed to uninstall plugin", e);
+ API.ShowMsgError(API.GetTranslation("ErrorUninstallingPlugin"));
+ return; // don not restart on failure
+ }
+
+ if (Settings.AutoRestartAfterChanging)
+ {
+ API.RestartApp();
+ }
+ else
+ {
+ API.ShowMsg(
+ API.GetTranslation("uninstallbtn"),
+ string.Format(
+ API.GetTranslation(
+ "UninstallSuccessNoRestart"),
+ oldPlugin.Name));
+ }
+ }
+
+ ///
+ /// Updates a plugin to a new version and restarts the application if required by settings. Prompts user for confirmation and handles download if needed.
+ ///
+ /// The new plugin version to install.
+ /// The existing plugin metadata to update.
+ /// A Task representing the asynchronous update operation.
+ public static async Task UpdatePluginAndCheckRestartAsync(UserPlugin newPlugin, PluginMetadata oldPlugin)
+ {
+ if (API.ShowMsgBox(
+ string.Format(
+ API.GetTranslation("UpdatePromptSubtitle"),
+ oldPlugin.Name, oldPlugin.Author, Environment.NewLine),
+ API.GetTranslation("UpdatePromptTitle"),
+ button: MessageBoxButton.YesNo) != MessageBoxResult.Yes) return;
+
+ try
+ {
+ var filePath = Path.Combine(Path.GetTempPath(), $"{newPlugin.Name}-{newPlugin.Version}.zip");
+
+ using var cts = new CancellationTokenSource();
+
+ if (!newPlugin.IsFromLocalInstallPath)
+ {
+ await DownloadFileAsync(
+ $"{API.GetTranslation("DownloadingPlugin")} {newPlugin.Name}",
+ newPlugin.UrlDownload, filePath, cts);
+ }
+ else
+ {
+ filePath = newPlugin.LocalInstallPath;
+ }
+
+ // check if user cancelled download before installing plugin
+ if (cts.IsCancellationRequested)
+ {
+ return;
+ }
+
+ if (!await API.UpdatePluginAsync(oldPlugin, newPlugin, filePath))
+ {
+ return;
+ }
+ }
+ catch (Exception e)
+ {
+ API.LogException(ClassName, "Failed to update plugin", e);
+ API.ShowMsgError(API.GetTranslation("ErrorUpdatingPlugin"));
+ return; // do not restart on failure
+ }
+
+ if (Settings.AutoRestartAfterChanging)
+ {
+ API.RestartApp();
+ }
+ else
+ {
+ API.ShowMsg(
+ API.GetTranslation("updatebtn"),
+ string.Format(
+ API.GetTranslation(
+ "UpdateSuccessNoRestart"),
+ newPlugin.Name));
+ }
+ }
+
+ ///
+ /// Downloads a file from a URL to a local path, optionally showing a progress box and handling cancellation.
+ ///
+ /// The title for the progress box.
+ /// The URL to download from.
+ /// The local file path to save to.
+ /// Cancellation token source for cancelling the download.
+ /// Whether to delete the file if it already exists.
+ /// Whether to show a progress box during download.
+ /// A Task representing the asynchronous download operation.
+ private static async Task DownloadFileAsync(string progressBoxTitle, string downloadUrl, string filePath, CancellationTokenSource cts, bool deleteFile = true, bool showProgress = true)
+ {
+ if (deleteFile && File.Exists(filePath))
+ File.Delete(filePath);
+
+ if (showProgress)
+ {
+ var exceptionHappened = false;
+ await API.ShowProgressBoxAsync(progressBoxTitle,
+ async (reportProgress) =>
+ {
+ if (reportProgress == null)
+ {
+ // when reportProgress is null, it means there is exception with the progress box
+ // so we record it with exceptionHappened and return so that progress box will close instantly
+ exceptionHappened = true;
+ return;
+ }
+ else
+ {
+ await API.HttpDownloadAsync(downloadUrl, filePath, reportProgress, cts.Token).ConfigureAwait(false);
+ }
+ }, cts.Cancel);
+
+ // if exception happened while downloading and user does not cancel downloading,
+ // we need to redownload the plugin
+ if (exceptionHappened && (!cts.IsCancellationRequested))
+ await API.HttpDownloadAsync(downloadUrl, filePath, token: cts.Token).ConfigureAwait(false);
+ }
+ else
+ {
+ await API.HttpDownloadAsync(downloadUrl, filePath, token: cts.Token).ConfigureAwait(false);
+ }
+ }
+
+ ///
+ /// Determines if the plugin install source is a known/approved source (e.g., GitHub and matches an existing plugin author).
+ ///
+ /// The URL to check.
+ /// True if the source is known, otherwise false.
+ private static bool InstallSourceKnown(string url)
+ {
+ if (string.IsNullOrEmpty(url))
+ return false;
+
+ var pieces = url.Split('/');
+
+ if (pieces.Length < 4)
+ return false;
+
+ var author = pieces[3];
+ var acceptedHost = "github.com";
+ var acceptedSource = "https://github.com";
+ var constructedUrlPart = string.Format("{0}/{1}/", acceptedSource, author);
+
+ if (!Uri.TryCreate(url, UriKind.Absolute, out var uri) || uri.Host != acceptedHost)
+ return false;
+
+ return API.GetAllPlugins().Any(x =>
+ !string.IsNullOrEmpty(x.Metadata.Website) &&
+ x.Metadata.Website.StartsWith(constructedUrlPart)
+ );
+ }
+}
diff --git a/Flow.Launcher.Core/Plugin/PluginManager.cs b/Flow.Launcher.Core/Plugin/PluginManager.cs
index 9b525f331..d88f2f050 100644
--- a/Flow.Launcher.Core/Plugin/PluginManager.cs
+++ b/Flow.Launcher.Core/Plugin/PluginManager.cs
@@ -18,15 +18,12 @@ using ISavable = Flow.Launcher.Plugin.ISavable;
namespace Flow.Launcher.Core.Plugin
{
///
- /// The entry for managing Flow Launcher plugins
+ /// Class for co-ordinating and managing all plugin lifecycle.
///
public static class PluginManager
{
private static readonly string ClassName = nameof(PluginManager);
- private static IEnumerable _contextMenuPlugins;
- private static IEnumerable _homePlugins;
-
public static List AllPlugins { get; private set; }
public static readonly HashSet GlobalPlugins = new();
public static readonly Dictionary NonGlobalPlugins = new();
@@ -36,8 +33,12 @@ namespace Flow.Launcher.Core.Plugin
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService();
private static PluginsSettings Settings;
- private static List _metadatas;
- private static readonly List _modifiedPlugins = new();
+ private static readonly ConcurrentBag ModifiedPlugins = new();
+
+ private static IEnumerable _contextMenuPlugins;
+ private static IEnumerable _homePlugins;
+ private static IEnumerable _resultUpdatePlugin;
+ private static IEnumerable _translationPlugins;
///
/// Directories that will hold Flow Launcher plugin directory
@@ -173,12 +174,18 @@ namespace Flow.Launcher.Core.Plugin
///
public static void LoadPlugins(PluginsSettings settings)
{
- _metadatas = PluginConfig.Parse(Directories);
+ var metadatas = PluginConfig.Parse(Directories);
Settings = settings;
- Settings.UpdatePluginSettings(_metadatas);
- AllPlugins = PluginsLoader.Plugins(_metadatas, Settings);
+ Settings.UpdatePluginSettings(metadatas);
+ AllPlugins = PluginsLoader.Plugins(metadatas, Settings);
// Since dotnet plugins need to get assembly name first, we should update plugin directory after loading plugins
- UpdatePluginDirectory(_metadatas);
+ UpdatePluginDirectory(metadatas);
+
+ // Initialize plugin enumerable after all plugins are initialized
+ _contextMenuPlugins = GetPluginsForInterface();
+ _homePlugins = GetPluginsForInterface();
+ _resultUpdatePlugin = GetPluginsForInterface();
+ _translationPlugins = GetPluginsForInterface();
}
private static void UpdatePluginDirectory(List metadatas)
@@ -248,9 +255,6 @@ namespace Flow.Launcher.Core.Plugin
await Task.WhenAll(InitTasks);
- _contextMenuPlugins = GetPluginsForInterface();
- _homePlugins = GetPluginsForInterface();
-
foreach (var plugin in AllPlugins)
{
// set distinct on each plugin's action keywords helps only firing global(*) and action keywords once where a plugin
@@ -290,7 +294,14 @@ namespace Flow.Launcher.Core.Plugin
return Array.Empty();
if (!NonGlobalPlugins.TryGetValue(query.ActionKeyword, out var plugin))
- return GlobalPlugins;
+ {
+ return GlobalPlugins.Where(p => !PluginModified(p.Metadata.ID)).ToList();
+ }
+
+ if (API.PluginModified(plugin.Metadata.ID))
+ {
+ return Array.Empty();
+ }
return new List
{
@@ -300,7 +311,7 @@ namespace Flow.Launcher.Core.Plugin
public static ICollection ValidPluginsForHomeQuery()
{
- return _homePlugins.ToList();
+ return _homePlugins.Where(p => !PluginModified(p.Metadata.ID)).ToList();
}
public static async Task> QueryForPluginAsync(PluginPair pair, Query query, CancellationToken token)
@@ -402,16 +413,26 @@ namespace Flow.Launcher.Core.Plugin
return AllPlugins.FirstOrDefault(o => o.Metadata.ID == id);
}
- public static IEnumerable GetPluginsForInterface() where T : IFeatures
+ private static IEnumerable GetPluginsForInterface() where T : IFeatures
{
// Handle scenario where this is called before all plugins are instantiated, e.g. language change on startup
return AllPlugins?.Where(p => p.Plugin is T) ?? Array.Empty();
}
+ public static IList GetResultUpdatePlugin()
+ {
+ return _resultUpdatePlugin.Where(p => !PluginModified(p.Metadata.ID)).ToList();
+ }
+
+ public static IList GetTranslationPlugins()
+ {
+ return _translationPlugins.Where(p => !PluginModified(p.Metadata.ID)).ToList();
+ }
+
public static List GetContextMenusForPlugin(Result result)
{
var results = new List();
- var pluginPair = _contextMenuPlugins.FirstOrDefault(o => o.Metadata.ID == result.PluginID);
+ var pluginPair = _contextMenuPlugins.Where(p => !PluginModified(p.Metadata.ID)).FirstOrDefault(o => o.Metadata.ID == result.PluginID);
if (pluginPair != null)
{
var plugin = (IContextMenu)pluginPair.Plugin;
@@ -439,7 +460,7 @@ namespace Flow.Launcher.Core.Plugin
public static bool IsHomePlugin(string id)
{
- return _homePlugins.Any(p => p.Metadata.ID == id);
+ return _homePlugins.Where(p => !PluginModified(p.Metadata.ID)).Any(p => p.Metadata.ID == id);
}
public static bool ActionKeywordRegistered(string actionKeyword)
@@ -529,44 +550,62 @@ namespace Flow.Launcher.Core.Plugin
private static bool SameOrLesserPluginVersionExists(string metadataPath)
{
var newMetadata = JsonSerializer.Deserialize(File.ReadAllText(metadataPath));
+
+ if (!Version.TryParse(newMetadata.Version, out var newVersion))
+ return true; // If version is not valid, we assume it is lesser than any existing version
+
return AllPlugins.Any(x => x.Metadata.ID == newMetadata.ID
- && newMetadata.Version.CompareTo(x.Metadata.Version) <= 0);
+ && Version.TryParse(x.Metadata.Version, out var version)
+ && newVersion <= version);
}
#region Public functions
public static bool PluginModified(string id)
{
- return _modifiedPlugins.Contains(id);
+ return ModifiedPlugins.Contains(id);
}
- public static async Task UpdatePluginAsync(PluginMetadata existingVersion, UserPlugin newVersion, string zipFilePath)
+ public static async Task UpdatePluginAsync(PluginMetadata existingVersion, UserPlugin newVersion, string zipFilePath)
{
- InstallPlugin(newVersion, zipFilePath, checkModified:false);
- await UninstallPluginAsync(existingVersion, removePluginFromSettings:false, removePluginSettings:false, checkModified: false);
- _modifiedPlugins.Add(existingVersion.ID);
+ if (PluginModified(existingVersion.ID))
+ {
+ API.ShowMsgError(string.Format(API.GetTranslation("pluginModifiedAlreadyTitle"), existingVersion.Name),
+ API.GetTranslation("pluginModifiedAlreadyMessage"));
+ return false;
+ }
+
+ var installSuccess = InstallPlugin(newVersion, zipFilePath, checkModified: false);
+ if (!installSuccess) return false;
+
+ var uninstallSuccess = await UninstallPluginAsync(existingVersion, removePluginFromSettings: false, removePluginSettings: false, checkModified: false);
+ if (!uninstallSuccess) return false;
+
+ ModifiedPlugins.Add(existingVersion.ID);
+ return true;
}
- public static void InstallPlugin(UserPlugin plugin, string zipFilePath)
+ public static bool InstallPlugin(UserPlugin plugin, string zipFilePath)
{
- InstallPlugin(plugin, zipFilePath, checkModified: true);
+ return InstallPlugin(plugin, zipFilePath, checkModified: true);
}
- public static async Task UninstallPluginAsync(PluginMetadata plugin, bool removePluginFromSettings = true, bool removePluginSettings = false)
+ public static async Task UninstallPluginAsync(PluginMetadata plugin, bool removePluginSettings = false)
{
- await UninstallPluginAsync(plugin, removePluginFromSettings, removePluginSettings, true);
+ return await UninstallPluginAsync(plugin, removePluginFromSettings: true, removePluginSettings: removePluginSettings, checkModified: true);
}
#endregion
#region Internal functions
- internal static void InstallPlugin(UserPlugin plugin, string zipFilePath, bool checkModified)
+ internal static bool InstallPlugin(UserPlugin plugin, string zipFilePath, bool checkModified)
{
if (checkModified && PluginModified(plugin.ID))
{
- // Distinguish exception from installing same or less version
- throw new ArgumentException($"Plugin {plugin.Name} {plugin.ID} has been modified.", nameof(plugin));
+ API.ShowMsgError(string.Format(API.GetTranslation("pluginModifiedAlreadyTitle"), plugin.Name),
+ API.GetTranslation("pluginModifiedAlreadyMessage"));
+ return false;
}
// Unzip plugin files to temp folder
@@ -584,12 +623,16 @@ namespace Flow.Launcher.Core.Plugin
if (string.IsNullOrEmpty(metadataJsonFilePath) || string.IsNullOrEmpty(pluginFolderPath))
{
- throw new FileNotFoundException($"Unable to find plugin.json from the extracted zip file, or this path {pluginFolderPath} does not exist");
+ API.ShowMsgError(string.Format(API.GetTranslation("failedToInstallPluginTitle"), plugin.Name),
+ string.Format(API.GetTranslation("fileNotFoundMessage"), pluginFolderPath));
+ return false;
}
if (SameOrLesserPluginVersionExists(metadataJsonFilePath))
{
- throw new InvalidOperationException($"A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin {plugin.Name}");
+ API.ShowMsgError(string.Format(API.GetTranslation("failedToInstallPluginTitle"), plugin.Name),
+ API.GetTranslation("pluginExistAlreadyMessage"));
+ return false;
}
var folderName = string.IsNullOrEmpty(plugin.Version) ? $"{plugin.Name}-{Guid.NewGuid()}" : $"{plugin.Name}-{plugin.Version}";
@@ -631,15 +674,19 @@ namespace Flow.Launcher.Core.Plugin
if (checkModified)
{
- _modifiedPlugins.Add(plugin.ID);
+ ModifiedPlugins.Add(plugin.ID);
}
+
+ return true;
}
- internal static async Task UninstallPluginAsync(PluginMetadata plugin, bool removePluginFromSettings, bool removePluginSettings, bool checkModified)
+ internal static async Task UninstallPluginAsync(PluginMetadata plugin, bool removePluginFromSettings, bool removePluginSettings, bool checkModified)
{
if (checkModified && PluginModified(plugin.ID))
{
- throw new ArgumentException($"Plugin {plugin.Name} has been modified");
+ API.ShowMsgError(string.Format(API.GetTranslation("pluginModifiedAlreadyTitle"), plugin.Name),
+ API.GetTranslation("pluginModifiedAlreadyMessage"));
+ return false;
}
if (removePluginSettings || removePluginFromSettings)
@@ -693,6 +740,12 @@ namespace Flow.Launcher.Core.Plugin
}
Settings.RemovePluginSettings(plugin.ID);
AllPlugins.RemoveAll(p => p.Metadata.ID == plugin.ID);
+ GlobalPlugins.RemoveWhere(p => p.Metadata.ID == plugin.ID);
+ var keysToRemove = NonGlobalPlugins.Where(p => p.Value.Metadata.ID == plugin.ID).Select(p => p.Key).ToList();
+ foreach (var key in keysToRemove)
+ {
+ NonGlobalPlugins.Remove(key);
+ }
}
// Marked for deletion. Will be deleted on next start up
@@ -700,8 +753,10 @@ namespace Flow.Launcher.Core.Plugin
if (checkModified)
{
- _modifiedPlugins.Add(plugin.ID);
+ ModifiedPlugins.Add(plugin.ID);
}
+
+ return true;
}
#endregion
diff --git a/Flow.Launcher.Core/Resource/Internationalization.cs b/Flow.Launcher.Core/Resource/Internationalization.cs
index 24edc5ed8..7b7d6eef6 100644
--- a/Flow.Launcher.Core/Resource/Internationalization.cs
+++ b/Flow.Launcher.Core/Resource/Internationalization.cs
@@ -74,7 +74,7 @@ namespace Flow.Launcher.Core.Resource
private void AddPluginLanguageDirectories()
{
- foreach (var plugin in PluginManager.GetPluginsForInterface())
+ foreach (var plugin in PluginManager.GetTranslationPlugins())
{
var location = Assembly.GetAssembly(plugin.Plugin.GetType()).Location;
var dir = Path.GetDirectoryName(location);
@@ -278,7 +278,8 @@ namespace Flow.Launcher.Core.Resource
private void UpdatePluginMetadataTranslations()
{
- foreach (var p in PluginManager.GetPluginsForInterface())
+ // Update plugin metadata name & description
+ foreach (var p in PluginManager.GetTranslationPlugins())
{
if (p.Plugin is not IPluginI18n pluginI18N) return;
try
diff --git a/Flow.Launcher.Infrastructure/IAlphabet.cs b/Flow.Launcher.Infrastructure/IAlphabet.cs
new file mode 100644
index 000000000..d13eeb414
--- /dev/null
+++ b/Flow.Launcher.Infrastructure/IAlphabet.cs
@@ -0,0 +1,22 @@
+namespace Flow.Launcher.Infrastructure
+{
+ ///
+ /// Translate a language to English letters using a given rule.
+ ///
+ public interface IAlphabet
+ {
+ ///
+ /// Translate a string to English letters, using a given rule.
+ ///
+ /// String to translate.
+ ///
+ public (string translation, TranslationMapping map) Translate(string stringToTranslate);
+
+ ///
+ /// Determine if a string should be translated to English letter with this Alphabet.
+ ///
+ /// String to translate.
+ ///
+ public bool ShouldTranslate(string stringToTranslate);
+ }
+}
diff --git a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs
index 8eaa757be..b5344c7e9 100644
--- a/Flow.Launcher.Infrastructure/PinyinAlphabet.cs
+++ b/Flow.Launcher.Infrastructure/PinyinAlphabet.cs
@@ -1,209 +1,148 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
-using System.Linq;
+using System.Collections.ObjectModel;
+using System.IO;
using System.Text;
-using JetBrains.Annotations;
+using System.Text.Json;
+using CommunityToolkit.Mvvm.DependencyInjection;
using Flow.Launcher.Infrastructure.UserSettings;
using ToolGood.Words.Pinyin;
-using CommunityToolkit.Mvvm.DependencyInjection;
+using Flow.Launcher.Infrastructure.Logger;
namespace Flow.Launcher.Infrastructure
{
- public class TranslationMapping
- {
- private bool constructed;
-
- private List originalIndexs = new List();
- private List translatedIndexs = new List();
- private int translatedLength = 0;
-
- public string key { get; private set; }
-
- public void setKey(string key)
- {
- this.key = key;
- }
-
- public void AddNewIndex(int originalIndex, int translatedIndex, int length)
- {
- if (constructed)
- throw new InvalidOperationException("Mapping shouldn't be changed after constructed");
-
- originalIndexs.Add(originalIndex);
- translatedIndexs.Add(translatedIndex);
- translatedIndexs.Add(translatedIndex + length);
- translatedLength += length - 1;
- }
-
- public int MapToOriginalIndex(int translatedIndex)
- {
- if (translatedIndex > translatedIndexs.Last())
- return translatedIndex - translatedLength - 1;
-
- int lowerBound = 0;
- int upperBound = originalIndexs.Count - 1;
-
- int count = 0;
-
- // Corner case handle
- if (translatedIndex < translatedIndexs[0])
- return translatedIndex;
- if (translatedIndex > translatedIndexs.Last())
- {
- int indexDef = 0;
- for (int k = 0; k < originalIndexs.Count; k++)
- {
- indexDef += translatedIndexs[k * 2 + 1] - translatedIndexs[k * 2];
- }
-
- return translatedIndex - indexDef - 1;
- }
-
- // Binary Search with Range
- for (int i = originalIndexs.Count / 2;; count++)
- {
- if (translatedIndex < translatedIndexs[i * 2])
- {
- // move to lower middle
- upperBound = i;
- i = (i + lowerBound) / 2;
- }
- else if (translatedIndex > translatedIndexs[i * 2 + 1] - 1)
- {
- lowerBound = i;
- // move to upper middle
- // due to floor of integer division, move one up on corner case
- i = (i + upperBound + 1) / 2;
- }
- else
- return originalIndexs[i];
-
- if (upperBound - lowerBound <= 1 &&
- translatedIndex > translatedIndexs[lowerBound * 2 + 1] &&
- translatedIndex < translatedIndexs[upperBound * 2])
- {
- int indexDef = 0;
-
- for (int j = 0; j < upperBound; j++)
- {
- indexDef += translatedIndexs[j * 2 + 1] - translatedIndexs[j * 2];
- }
-
- return translatedIndex - indexDef - 1;
- }
- }
- }
-
- public void endConstruct()
- {
- if (constructed)
- throw new InvalidOperationException("Mapping has already been constructed");
- constructed = true;
- }
- }
-
- ///
- /// Translate a language to English letters using a given rule.
- ///
- public interface IAlphabet
- {
- ///
- /// Translate a string to English letters, using a given rule.
- ///
- /// String to translate.
- ///
- public (string translation, TranslationMapping map) Translate(string stringToTranslate);
-
- ///
- /// Determine if a string can be translated to English letter with this Alphabet.
- ///
- /// String to translate.
- ///
- public bool CanBeTranslated(string stringToTranslate);
- }
-
public class PinyinAlphabet : IAlphabet
{
private ConcurrentDictionary _pinyinCache =
- new ConcurrentDictionary();
+ new();
- private Settings _settings;
+ private readonly Settings _settings;
+
+ private ReadOnlyDictionary currentDoublePinyinTable;
public PinyinAlphabet()
{
- Initialize(Ioc.Default.GetRequiredService());
+ _settings = Ioc.Default.GetRequiredService();
+ LoadDoublePinyinTable();
+
+ _settings.PropertyChanged += (sender, e) =>
+ {
+ if (e.PropertyName == nameof(Settings.UseDoublePinyin) ||
+ e.PropertyName == nameof(Settings.DoublePinyinSchema))
+ {
+ Reload();
+ }
+ };
}
- private void Initialize([NotNull] Settings settings)
+ public void Reload()
{
- _settings = settings ?? throw new ArgumentNullException(nameof(settings));
+ LoadDoublePinyinTable();
+ _pinyinCache.Clear();
}
- public bool CanBeTranslated(string stringToTranslate)
+ private void CreateDoublePinyinTableFromStream(Stream jsonStream)
{
- return WordsHelper.HasChinese(stringToTranslate);
+ Dictionary> table = JsonSerializer.Deserialize>>(jsonStream);
+ string schemaKey = _settings.DoublePinyinSchema.ToString(); // Convert enum to string
+ if (!table.TryGetValue(schemaKey, out var value))
+ {
+ throw new ArgumentException("DoublePinyinSchema is invalid or double pinyin table is broken.");
+ }
+ currentDoublePinyinTable = new ReadOnlyDictionary(value);
+ }
+
+ private void LoadDoublePinyinTable()
+ {
+ if (_settings.UseDoublePinyin)
+ {
+ var tablePath = Path.Join(AppContext.BaseDirectory, "Resources", "double_pinyin.json");
+ try
+ {
+ using var fs = File.OpenRead(tablePath);
+ CreateDoublePinyinTableFromStream(fs);
+ }
+ catch (System.Exception e)
+ {
+ Log.Exception(nameof(PinyinAlphabet), "Failed to load double pinyin table from file: " + tablePath, e);
+ currentDoublePinyinTable = new ReadOnlyDictionary(new Dictionary());
+ }
+ }
+ else
+ {
+ currentDoublePinyinTable = new ReadOnlyDictionary(new Dictionary());
+ }
+ }
+
+ public bool ShouldTranslate(string stringToTranslate)
+ {
+ // If a string has Chinese characters, we don't need to translate it to pinyin.
+ return _settings.ShouldUsePinyin && !WordsHelper.HasChinese(stringToTranslate);
}
public (string translation, TranslationMapping map) Translate(string content)
{
- if (_settings.ShouldUsePinyin)
- {
- if (!_pinyinCache.ContainsKey(content))
- {
- return BuildCacheFromContent(content);
- }
- else
- {
- return _pinyinCache[content];
- }
- }
- return (content, null);
+ if (!_settings.ShouldUsePinyin || !WordsHelper.HasChinese(content))
+ return (content, null);
+
+ return _pinyinCache.TryGetValue(content, out var value)
+ ? value
+ : BuildCacheFromContent(content);
}
private (string translation, TranslationMapping map) BuildCacheFromContent(string content)
{
- if (WordsHelper.HasChinese(content))
+ var resultList = WordsHelper.GetPinyinList(content);
+
+ var resultBuilder = new StringBuilder();
+ var map = new TranslationMapping();
+
+ var previousIsChinese = false;
+
+ for (var i = 0; i < resultList.Length; i++)
{
- var resultList = WordsHelper.GetPinyinList(content);
-
- StringBuilder resultBuilder = new StringBuilder();
- TranslationMapping map = new TranslationMapping();
-
- bool pre = false;
-
- for (int i = 0; i < resultList.Length; i++)
+ if (content[i] >= 0x3400 && content[i] <= 0x9FD5)
{
- if (content[i] >= 0x3400 && content[i] <= 0x9FD5)
+ string translated = _settings.UseDoublePinyin ? ToDoublePin(resultList[i]) : resultList[i];
+ if (i > 0)
{
- map.AddNewIndex(i, resultBuilder.Length, resultList[i].Length + 1);
resultBuilder.Append(' ');
- resultBuilder.Append(resultList[i]);
- pre = true;
- }
- else
- {
- if (pre)
- {
- pre = false;
- resultBuilder.Append(' ');
- }
-
- resultBuilder.Append(resultList[i]);
}
+ map.AddNewIndex(resultBuilder.Length, translated.Length);
+ resultBuilder.Append(translated);
+ previousIsChinese = true;
+ }
+ else
+ {
+ if (previousIsChinese)
+ {
+ previousIsChinese = false;
+ resultBuilder.Append(' ');
+ }
+ map.AddNewIndex(resultBuilder.Length, resultList[i].Length);
+ resultBuilder.Append(resultList[i]);
}
-
- map.endConstruct();
-
- var key = resultBuilder.ToString();
- map.setKey(key);
-
- return _pinyinCache[content] = (key, map);
- }
- else
- {
- return (content, null);
}
+
+ map.endConstruct();
+
+ var key = resultBuilder.ToString();
+
+ return _pinyinCache[content] = (key, map);
}
+
+ #region Double Pinyin
+
+ private string ToDoublePin(string fullPinyin)
+ {
+ if (currentDoublePinyinTable.TryGetValue(fullPinyin, out var doublePinyinValue))
+ {
+ return doublePinyinValue;
+ }
+ return fullPinyin;
+ }
+
+ #endregion
}
}
diff --git a/Flow.Launcher.Infrastructure/StringMatcher.cs b/Flow.Launcher.Infrastructure/StringMatcher.cs
index e85c5d6f4..2882cb8f0 100644
--- a/Flow.Launcher.Infrastructure/StringMatcher.cs
+++ b/Flow.Launcher.Infrastructure/StringMatcher.cs
@@ -68,7 +68,7 @@ namespace Flow.Launcher.Infrastructure
query = query.Trim();
TranslationMapping translationMapping = null;
- if (_alphabet is not null && !_alphabet.CanBeTranslated(query))
+ if (_alphabet is not null && _alphabet.ShouldTranslate(query))
{
// We assume that if a query can be translated (containing characters of a language, like Chinese)
// it actually means user doesn't want it to be translated to English letters.
@@ -228,7 +228,7 @@ namespace Flow.Launcher.Infrastructure
return new MatchResult(false, UserSettingSearchPrecision);
}
- private bool IsAcronym(string stringToCompare, int compareStringIndex)
+ private static bool IsAcronym(string stringToCompare, int compareStringIndex)
{
if (IsAcronymChar(stringToCompare, compareStringIndex) || IsAcronymNumber(stringToCompare, compareStringIndex))
return true;
@@ -237,7 +237,7 @@ namespace Flow.Launcher.Infrastructure
}
// When counting acronyms, treat a set of numbers as one acronym ie. Visual 2019 as 2 acronyms instead of 5
- private bool IsAcronymCount(string stringToCompare, int compareStringIndex)
+ private static bool IsAcronymCount(string stringToCompare, int compareStringIndex)
{
if (IsAcronymChar(stringToCompare, compareStringIndex))
return true;
diff --git a/Flow.Launcher.Infrastructure/TranslationMapping.cs b/Flow.Launcher.Infrastructure/TranslationMapping.cs
new file mode 100644
index 000000000..5b02ae666
--- /dev/null
+++ b/Flow.Launcher.Infrastructure/TranslationMapping.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Collections.Generic;
+
+namespace Flow.Launcher.Infrastructure
+{
+ public class TranslationMapping
+ {
+ private bool constructed;
+
+ // Assuming one original item maps to multi translated items
+ // list[i] is the last translated index + 1 of original index i
+ private readonly List originalToTranslated = new();
+
+ public void AddNewIndex(int translatedIndex, int length)
+ {
+ if (constructed)
+ throw new InvalidOperationException("Mapping shouldn't be changed after constructed");
+
+ originalToTranslated.Add(translatedIndex + length);
+ }
+
+ public int MapToOriginalIndex(int translatedIndex)
+ {
+ int loc = originalToTranslated.BinarySearch(translatedIndex);
+ return loc >= 0 ? loc : ~loc;
+ }
+
+ public void endConstruct()
+ {
+ if (constructed)
+ throw new InvalidOperationException("Mapping has already been constructed");
+ constructed = true;
+ }
+ }
+}
diff --git a/Flow.Launcher.Infrastructure/UserSettings/PluginHotkey.cs b/Flow.Launcher.Infrastructure/UserSettings/PluginHotkey.cs
index 9dc395aca..0c5c38028 100644
--- a/Flow.Launcher.Infrastructure/UserSettings/PluginHotkey.cs
+++ b/Flow.Launcher.Infrastructure/UserSettings/PluginHotkey.cs
@@ -1,4 +1,5 @@
-using Flow.Launcher.Plugin;
+using System;
+using Flow.Launcher.Plugin;
namespace Flow.Launcher.Infrastructure.UserSettings
{
@@ -6,5 +7,26 @@ namespace Flow.Launcher.Infrastructure.UserSettings
{
public string Hotkey { get; set; }
public string ActionKeyword { get; set; }
+
+ public CustomPluginHotkey(string hotkey, string actionKeyword)
+ {
+ Hotkey = hotkey;
+ ActionKeyword = actionKeyword;
+ }
+
+ public override bool Equals(object other)
+ {
+ if (other is CustomPluginHotkey otherHotkey)
+ {
+ return Hotkey == otherHotkey.Hotkey && ActionKeyword == otherHotkey.ActionKeyword;
+ }
+
+ return false;
+ }
+
+ public override int GetHashCode()
+ {
+ return HashCode.Combine(Hotkey, ActionKeyword);
+ }
}
}
diff --git a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs
index 2dbdf0bf8..6b10d693d 100644
--- a/Flow.Launcher.Infrastructure/UserSettings/Settings.cs
+++ b/Flow.Launcher.Infrastructure/UserSettings/Settings.cs
@@ -40,9 +40,37 @@ namespace Flow.Launcher.Infrastructure.UserSettings
}
public string Hotkey { get; set; } = $"{KeyConstant.Alt} + {KeyConstant.Space}";
- public string OpenResultModifiers { get; set; } = KeyConstant.Alt;
+
+ private string _openResultModifiers = KeyConstant.Alt;
+ public string OpenResultModifiers
+ {
+ get => _openResultModifiers;
+ set
+ {
+ if (_openResultModifiers != value)
+ {
+ _openResultModifiers = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
public string ColorScheme { get; set; } = "System";
- public bool ShowOpenResultHotkey { get; set; } = true;
+
+ private bool _showOpenResultHotkey = true;
+ public bool ShowOpenResultHotkey
+ {
+ get => _showOpenResultHotkey;
+ set
+ {
+ if (_showOpenResultHotkey != value)
+ {
+ _showOpenResultHotkey = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
public double WindowSize { get; set; } = 580;
public string PreviewHotkey { get; set; } = $"F1";
public string AutoCompleteHotkey { get; set; } = $"{KeyConstant.Ctrl} + Tab";
@@ -87,7 +115,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings
}
}
public bool UseDropShadowEffect { get; set; } = true;
- public BackdropTypes BackdropType{ get; set; } = BackdropTypes.None;
+ public BackdropTypes BackdropType { get; set; } = BackdropTypes.None;
public string ReleaseNotesVersion { get; set; } = string.Empty;
/* Appearance Settings. It should be separated from the setting later.*/
@@ -200,9 +228,12 @@ namespace Flow.Launcher.Infrastructure.UserSettings
}
}
}
-
+
public int MaxHistoryResultsToShowForHomePage { get; set; } = 5;
+ public bool AutoRestartAfterChanging { get; set; } = false;
+ public bool ShowUnknownSourceWarning { get; set; } = true;
+
public int CustomExplorerIndex { get; set; } = 0;
[JsonIgnore]
@@ -299,6 +330,36 @@ namespace Flow.Launcher.Infrastructure.UserSettings
///
public bool ShouldUsePinyin { get; set; } = false;
+ private bool _useDoublePinyin = false;
+ public bool UseDoublePinyin
+ {
+ get => _useDoublePinyin;
+ set
+ {
+ if (_useDoublePinyin != value)
+ {
+ _useDoublePinyin = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
+ private DoublePinyinSchemas _doublePinyinSchema = DoublePinyinSchemas.XiaoHe;
+
+ [JsonInclude, JsonConverter(typeof(JsonStringEnumConverter))]
+ public DoublePinyinSchemas DoublePinyinSchema
+ {
+ get => _doublePinyinSchema;
+ set
+ {
+ if (_doublePinyinSchema != value)
+ {
+ _doublePinyinSchema = value;
+ OnPropertyChanged();
+ }
+ }
+ }
+
public bool AlwaysPreview { get; set; } = false;
public bool AlwaysStartEn { get; set; } = false;
@@ -461,7 +522,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings
if (!string.IsNullOrEmpty(SettingWindowHotkey))
list.Add(new(SettingWindowHotkey, "SettingWindowHotkey", () => SettingWindowHotkey = ""));
if (!string.IsNullOrEmpty(OpenHistoryHotkey))
- list.Add(new(OpenHistoryHotkey, "OpenHistoryHotkey", () => OpenHistoryHotkey = ""));
+ list.Add(new(OpenHistoryHotkey, "OpenHistoryHotkey", () => OpenHistoryHotkey = ""));
if (!string.IsNullOrEmpty(OpenContextMenuHotkey))
list.Add(new(OpenContextMenuHotkey, "OpenContextMenuHotkey", () => OpenContextMenuHotkey = ""));
if (!string.IsNullOrEmpty(SelectNextPageHotkey))
@@ -567,9 +628,22 @@ namespace Flow.Launcher.Infrastructure.UserSettings
public enum BackdropTypes
{
- None,
+ None,
Acrylic,
Mica,
MicaAlt
}
+
+ public enum DoublePinyinSchemas
+ {
+ XiaoHe,
+ ZiRanMa,
+ WeiRuan,
+ ZhiNengABC,
+ ZiGuangPinYin,
+ PinYinJiaJia,
+ XingKongJianDao,
+ DaNiu,
+ XiaoLang
+ }
}
diff --git a/Flow.Launcher.Infrastructure/Win32Helper.cs b/Flow.Launcher.Infrastructure/Win32Helper.cs
index 86e7b7c97..32ed31137 100644
--- a/Flow.Launcher.Infrastructure/Win32Helper.cs
+++ b/Flow.Launcher.Infrastructure/Win32Helper.cs
@@ -791,5 +791,41 @@ namespace Flow.Launcher.Infrastructure
}
#endregion
+
+ #region Win32 Dark Mode
+
+ /*
+ * Inspired by https://github.com/ysc3839/win32-darkmode
+ */
+
+ [DllImport("uxtheme.dll", EntryPoint = "#135", SetLastError = true)]
+ private static extern int SetPreferredAppMode(int appMode);
+
+ public static void EnableWin32DarkMode(string colorScheme)
+ {
+ try
+ {
+ // Undocumented API from Windows 10 1809
+ if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) &&
+ Environment.OSVersion.Version.Build >= 17763)
+ {
+ var flag = colorScheme switch
+ {
+ Constant.Light => 3, // ForceLight
+ Constant.Dark => 2, // ForceDark
+ Constant.System => 1, // AllowDark
+ _ => 0 // Default
+ };
+ _ = SetPreferredAppMode(flag);
+ }
+
+ }
+ catch
+ {
+ // Ignore errors on unsupported OS
+ }
+ }
+
+ #endregion
}
}
diff --git a/Flow.Launcher.Plugin/EventHandler.cs b/Flow.Launcher.Plugin/EventHandler.cs
index 893b0ba80..47ab24757 100644
--- a/Flow.Launcher.Plugin/EventHandler.cs
+++ b/Flow.Launcher.Plugin/EventHandler.cs
@@ -39,7 +39,14 @@ namespace Flow.Launcher.Plugin
///
///
public delegate void VisibilityChangedEventHandler(object sender, VisibilityChangedEventArgs args);
-
+
+ ///
+ /// A delegate for when the actual application theme is changed
+ ///
+ ///
+ ///
+ public delegate void ActualApplicationThemeChangedEventHandler(object sender, ActualApplicationThemeChangedEventArgs args);
+
///
/// The event args for
///
@@ -77,4 +84,15 @@ namespace Flow.Launcher.Plugin
///
public Query Query { get; set; }
}
+
+ ///
+ /// The event args for
+ ///
+ public class ActualApplicationThemeChangedEventArgs : EventArgs
+ {
+ ///
+ /// if the application has changed actual theme
+ ///
+ public bool IsDark { get; init; }
+ }
}
diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj
index 4a49e9589..1831bf46f 100644
--- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj
+++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj
@@ -14,10 +14,10 @@
- 4.6.0
- 4.6.0
- 4.6.0
- 4.6.0
+ 4.7.0
+ 4.7.0
+ 4.7.0
+ 4.7.0Flow.Launcher.PluginFlow-LauncherMIT
@@ -27,6 +27,7 @@
truetrueReadme.md
+ true
diff --git a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
index f47ee5e11..cfa813d3f 100644
--- a/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
+++ b/Flow.Launcher.Plugin/Interfaces/IPublicAPI.cs
@@ -23,8 +23,8 @@ namespace Flow.Launcher.Plugin
///
/// query text
///
- /// Force requery. By default, Flow Launcher will not fire query if your query is same with existing one.
- /// Set this to to force Flow Launcher requerying
+ /// Force requery. By default, Flow Launcher will not fire query if your query is same with existing one.
+ /// Set this to to force Flow Launcher re-querying
///
void ChangeQuery(string query, bool requery = false);
@@ -49,7 +49,7 @@ namespace Flow.Launcher.Plugin
///
/// Text to save on clipboard
/// When true it will directly copy the file/folder from the path specified in text
- /// Whether to show the default notification from this method after copy is done.
+ /// Whether to show the default notification from this method after copy is done.
/// It will show file/folder/text is copied successfully.
/// Turn this off to show your own notification after copy is done.>
public void CopyToClipboard(string text, bool directCopy = false, bool showDefaultNotification = true);
@@ -65,7 +65,7 @@ namespace Flow.Launcher.Plugin
void SavePluginSettings();
///
- /// Reloads any Plugins that have the
+ /// Reloads any Plugins that have the
/// IReloadable implemented. It refeshes
/// Plugin's in memory data with new content
/// added by user.
@@ -97,7 +97,7 @@ namespace Flow.Launcher.Plugin
/// Show the MainWindow when hiding
///
void ShowMainWindow();
-
+
///
/// Focus the query text box in the main window
///
@@ -115,7 +115,7 @@ namespace Flow.Launcher.Plugin
bool IsMainWindowVisible();
///
- /// Invoked when the visibility of the main window has changed. Currently, the plugin will continue to be subscribed even if it is turned off.
+ /// Invoked when the visibility of the main window has changed. Currently, the plugin will continue to be subscribed even if it is turned off.
///
event VisibilityChangedEventHandler VisibilityChanged;
@@ -171,7 +171,7 @@ namespace Flow.Launcher.Plugin
string GetTranslation(string key);
///
- /// Get all loaded plugins
+ /// Get all loaded plugins
///
///
List GetAllPlugins();
@@ -229,7 +229,7 @@ namespace Flow.Launcher.Plugin
MatchResult FuzzySearch(string query, string stringToCompare);
///
- /// Http download the spefic url and return as string
+ /// Http download the specific url and return as string
///
/// URL to call Http Get
/// Cancellation Token
@@ -237,7 +237,7 @@ namespace Flow.Launcher.Plugin
Task HttpGetStringAsync(string url, CancellationToken token = default);
///
- /// Http download the spefic url and return as stream
+ /// Http download the specific url and return as stream
///
/// URL to call Http Get
/// Cancellation Token
@@ -305,8 +305,8 @@ namespace Flow.Launcher.Plugin
void LogError(string className, string message, [CallerMemberName] string methodName = "");
///
- /// Log an Exception. Will throw if in debug mode so developer will be aware,
- /// otherwise logs the eror message. This is the primary logging method used for Flow
+ /// Log an Exception. Will throw if in debug mode so developer will be aware,
+ /// otherwise logs the eror message. This is the primary logging method used for Flow
///
void LogException(string className, string message, Exception e, [CallerMemberName] string methodName = "");
@@ -393,7 +393,7 @@ namespace Flow.Launcher.Plugin
///
/// Reloads the query.
- /// When current results are from context menu or history, it will go back to query results before requerying.
+ /// When current results are from context menu or history, it will go back to query results before re-querying.
///
/// Choose the first result after reload if true; keep the last selected result if false. Default is true.
public void ReQuery(bool reselect = true);
@@ -547,8 +547,10 @@ namespace Flow.Launcher.Plugin
///
/// Path to the zip file containing the plugin. It will be unzipped to the temporary directory, removed and installed.
///
- ///
- public Task UpdatePluginAsync(PluginMetadata pluginMetadata, UserPlugin plugin, string zipFilePath);
+ ///
+ /// True if the plugin is updated successfully, false otherwise.
+ ///
+ public Task UpdatePluginAsync(PluginMetadata pluginMetadata, UserPlugin plugin, string zipFilePath);
///
/// Install a plugin. By default will remove the zip file if installation is from url,
@@ -558,7 +560,10 @@ namespace Flow.Launcher.Plugin
///
/// Path to the zip file containing the plugin. It will be unzipped to the temporary directory, removed and installed.
///
- public void InstallPlugin(UserPlugin plugin, string zipFilePath);
+ ///
+ /// True if the plugin is installed successfully, false otherwise.
+ ///
+ public bool InstallPlugin(UserPlugin plugin, string zipFilePath);
///
/// Uninstall a plugin
@@ -567,8 +572,10 @@ namespace Flow.Launcher.Plugin
///
/// Plugin has their own settings. If this is set to true, the plugin settings will be removed.
///
- ///
- public Task UninstallPluginAsync(PluginMetadata pluginMetadata, bool removePluginSettings = false);
+ ///
+ /// True if the plugin is updated successfully, false otherwise.
+ ///
+ public Task UninstallPluginAsync(PluginMetadata pluginMetadata, bool removePluginSettings = false);
///
/// Log debug message of the time taken to execute a method
@@ -595,5 +602,16 @@ namespace Flow.Launcher.Plugin
///
/// The time taken to execute the method in milliseconds
public Task StopwatchLogInfoAsync(string className, string message, Func action, [CallerMemberName] string methodName = "");
+
+ ///
+ /// Representing whether the application is using a dark theme
+ ///
+ ///
+ bool IsApplicationDarkTheme();
+
+ ///
+ /// Invoked when the actual theme of the application has changed. Currently, the plugin will continue to be subscribed even if it is turned off.
+ ///
+ event ActualApplicationThemeChangedEventHandler ActualApplicationThemeChanged;
}
}
diff --git a/Flow.Launcher.Test/TranslationMappingTest.cs b/Flow.Launcher.Test/TranslationMappingTest.cs
new file mode 100644
index 000000000..10d765f5a
--- /dev/null
+++ b/Flow.Launcher.Test/TranslationMappingTest.cs
@@ -0,0 +1,56 @@
+using Flow.Launcher.Infrastructure;
+using NUnit.Framework;
+using NUnit.Framework.Legacy;
+
+namespace Flow.Launcher.Test
+{
+ [TestFixture]
+ public class TranslationMappingTest
+ {
+ [Test]
+ public void AddNewIndex_ShouldAddTranslatedIndexPlusLength()
+ {
+ var mapping = new TranslationMapping();
+ mapping.AddNewIndex(5, 3);
+ mapping.AddNewIndex(8, 2);
+
+ // 5+3=8, 8+2=10
+ ClassicAssert.AreEqual(2, GetOriginalToTranslatedCount(mapping));
+ ClassicAssert.AreEqual(8, GetOriginalToTranslatedAt(mapping, 0));
+ ClassicAssert.AreEqual(10, GetOriginalToTranslatedAt(mapping, 1));
+ }
+
+ [TestCase(0, 0)]
+ [TestCase(2, 1)]
+ [TestCase(3, 1)]
+ [TestCase(5, 2)]
+ [TestCase(6, 2)]
+ public void MapToOriginalIndex_ShouldReturnExpectedIndex(int translatedIndex, int expectedOriginalIndex)
+ {
+ var mapping = new TranslationMapping();
+ // a测试
+ // a Ce Shi
+ mapping.AddNewIndex(0, 1);
+ mapping.AddNewIndex(2, 2);
+ mapping.AddNewIndex(5, 3);
+
+
+ var result = mapping.MapToOriginalIndex(translatedIndex);
+ ClassicAssert.AreEqual(expectedOriginalIndex, result);
+ }
+
+ private int GetOriginalToTranslatedCount(TranslationMapping mapping)
+ {
+ var field = typeof(TranslationMapping).GetField("originalToTranslated", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+ var list = (System.Collections.Generic.List)field.GetValue(mapping);
+ return list.Count;
+ }
+
+ private int GetOriginalToTranslatedAt(TranslationMapping mapping, int index)
+ {
+ var field = typeof(TranslationMapping).GetField("originalToTranslated", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
+ var list = (System.Collections.Generic.List)field.GetValue(mapping);
+ return list[index];
+ }
+ }
+}
diff --git a/Flow.Launcher/App.xaml.cs b/Flow.Launcher/App.xaml.cs
index 5df1f88ae..7b82748fc 100644
--- a/Flow.Launcher/App.xaml.cs
+++ b/Flow.Launcher/App.xaml.cs
@@ -188,6 +188,9 @@ namespace Flow.Launcher
Notification.Install();
+ // Enable Win32 dark mode if the system is in dark mode before creating all windows
+ Win32Helper.EnableWin32DarkMode(_settings.ColorScheme);
+
Ioc.Default.GetRequiredService().PreStartCleanUpAfterPortabilityUpdate();
API.LogInfo(ClassName, "Begin Flow Launcher startup ----------------------------------------------------");
@@ -208,6 +211,9 @@ namespace Flow.Launcher
Http.Proxy = _settings.Proxy;
+ // Initialize plugin manifest before initializing plugins so that they can use the manifest instantly
+ await API.UpdatePluginManifestAsync();
+
await PluginManager.InitializePluginsAsync();
// Change language after all plugins are initialized because we need to update plugin title based on their api
diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml b/Flow.Launcher/CustomQueryHotkeySetting.xaml
index 0171e6d79..db99b704a 100644
--- a/Flow.Launcher/CustomQueryHotkeySetting.xaml
+++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml
@@ -119,7 +119,8 @@
Grid.Column="1"
Margin="10"
HorizontalAlignment="Stretch"
- VerticalAlignment="Center" />
+ VerticalAlignment="Center"
+ Text="{Binding ActionKeyword}" />
diff --git a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs
index 77febde9d..2ee08bf85 100644
--- a/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs
+++ b/Flow.Launcher/CustomQueryHotkeySetting.xaml.cs
@@ -1,73 +1,52 @@
-using System.Collections.ObjectModel;
-using System.Linq;
-using System.Windows;
-using System.Windows.Input;
+using System.Windows;
using System.Windows.Controls;
-using Flow.Launcher.Helper;
+using System.Windows.Input;
using Flow.Launcher.Infrastructure.UserSettings;
namespace Flow.Launcher
{
public partial class CustomQueryHotkeySetting : Window
{
- private readonly Settings _settings;
+ public string Hotkey { get; set; } = string.Empty;
+ public string ActionKeyword { get; set; } = string.Empty;
- private bool update;
- private CustomPluginHotkey updateCustomHotkey;
+ private readonly bool update;
+ private readonly CustomPluginHotkey originalCustomHotkey;
- public CustomQueryHotkeySetting(Settings settings)
+ public CustomQueryHotkeySetting()
{
- _settings = settings;
InitializeComponent();
+ tbAdd.Visibility = Visibility.Visible;
+ }
+
+ public CustomQueryHotkeySetting(CustomPluginHotkey hotkey)
+ {
+ originalCustomHotkey = hotkey;
+ update = true;
+ ActionKeyword = originalCustomHotkey.ActionKeyword;
+ InitializeComponent();
+ tbUpdate.Visibility = Visibility.Visible;
+ HotkeyControl.SetHotkey(originalCustomHotkey.Hotkey, false);
}
private void BtnCancel_OnClick(object sender, RoutedEventArgs e)
{
+ DialogResult = false;
Close();
}
private void btnAdd_OnClick(object sender, RoutedEventArgs e)
{
- if (!update)
+ Hotkey = HotkeyControl.CurrentHotkey.ToString();
+
+ if (string.IsNullOrEmpty(Hotkey) && string.IsNullOrEmpty(ActionKeyword))
{
- _settings.CustomPluginHotkeys ??= new ObservableCollection();
-
- var pluginHotkey = new CustomPluginHotkey
- {
- Hotkey = HotkeyControl.CurrentHotkey.ToString(), ActionKeyword = tbAction.Text
- };
- _settings.CustomPluginHotkeys.Add(pluginHotkey);
-
- HotKeyMapper.SetCustomQueryHotkey(pluginHotkey);
- }
- else
- {
- var oldHotkey = updateCustomHotkey.Hotkey;
- updateCustomHotkey.ActionKeyword = tbAction.Text;
- updateCustomHotkey.Hotkey = HotkeyControl.CurrentHotkey.ToString();
- //remove origin hotkey
- HotKeyMapper.RemoveHotkey(oldHotkey);
- HotKeyMapper.SetCustomQueryHotkey(updateCustomHotkey);
- }
-
- Close();
- }
-
- public void UpdateItem(CustomPluginHotkey item)
- {
- updateCustomHotkey = _settings.CustomPluginHotkeys.FirstOrDefault(o =>
- o.ActionKeyword == item.ActionKeyword && o.Hotkey == item.Hotkey);
- if (updateCustomHotkey == null)
- {
- App.API.ShowMsgBox(App.API.GetTranslation("invalidPluginHotkey"));
- Close();
+ App.API.ShowMsgBox(App.API.GetTranslation("emptyPluginHotkey"));
return;
}
- tbAction.Text = updateCustomHotkey.ActionKeyword;
- HotkeyControl.SetHotkey(updateCustomHotkey.Hotkey, false);
- update = true;
- lblAdd.Text = App.API.GetTranslation("update");
+ DialogResult = !update || originalCustomHotkey.Hotkey != Hotkey || originalCustomHotkey.ActionKeyword != ActionKeyword;
+ Close();
}
private void BtnTestActionKeyword_OnClick(object sender, RoutedEventArgs e)
@@ -79,6 +58,7 @@ namespace Flow.Launcher
private void cmdEsc_OnPress(object sender, ExecutedRoutedEventArgs e)
{
+ DialogResult = false;
Close();
}
diff --git a/Flow.Launcher/CustomShortcutSetting.xaml.cs b/Flow.Launcher/CustomShortcutSetting.xaml.cs
index e180f6570..f4644a267 100644
--- a/Flow.Launcher/CustomShortcutSetting.xaml.cs
+++ b/Flow.Launcher/CustomShortcutSetting.xaml.cs
@@ -43,12 +43,14 @@ namespace Flow.Launcher
App.API.ShowMsgBox(App.API.GetTranslation("emptyShortcut"));
return;
}
+
// Check if key is modified or adding a new one
if (((update && originalKey != Key) || !update) && _hotkeyVm.DoesShortcutExist(Key))
{
App.API.ShowMsgBox(App.API.GetTranslation("duplicateShortcut"));
return;
}
+
DialogResult = !update || originalKey != Key || originalValue != Value;
Close();
}
diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj
index d75d15a21..37e1f6bcf 100644
--- a/Flow.Launcher/Flow.Launcher.csproj
+++ b/Flow.Launcher/Flow.Launcher.csproj
@@ -127,6 +127,9 @@
PreserveNewest
+
+ PreserveNewest
+
diff --git a/Flow.Launcher/Languages/ar.xaml b/Flow.Launcher/Languages/ar.xaml
index b0d4b6818..80fde6441 100644
--- a/Flow.Launcher/Languages/ar.xaml
+++ b/Flow.Launcher/Languages/ar.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
تعذر تعيين مسار الملف التنفيذي لـ {0}، يرجى المحاولة من إعدادات Flow (قم بالتمرير إلى الأسفل).فشل في تهيئة الإضافات
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesالبحث عن إضافة
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginمتجر الإضافات
@@ -191,6 +201,28 @@
إصدار جديدتم تحديث هذه الإضافة في آخر 7 أياميتوفر تحديث جديد
+ خطأ في تثبيت الإضاف
+ خطأ في إلغاء تثبيت الإضافة
+ Error updating plugin
+ Keep plugin settings
+ Do you want to keep the settings of the plugin for the next usage?
+ تم تثبيت الإضافة {0} بنجاح. يرجى إعادة تشغيل Flow.
+ تم إلغاء تثبيت الإضافة {0} بنجاح. يرجى إعادة تشغيل Flow.
+ تم تحديث الإضافة {0} بنجاح. يرجى إعادة تشغيل Flow.
+ Plugin install
+ {0} بواسطة {1} {2}{2}هل ترغب في تثبيت هذه الإضافة؟
+ Plugin uninstall
+ {0} بواسطة {1} {2}{2}هل ترغب في إلغاء تثبيت هذه الإضافة؟
+ Plugin update
+ {0} بواسطة {1} {2}{2}هل ترغب في تحديث هذه الإضافة؟
+ تحميل الإضاف
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ التثبيت من مصدر غير معرو
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathالسمة
@@ -383,7 +415,7 @@
اختر مدير الملفاتLearn moreيرجى تحديد موقع ملف مدير الملفات الذي تستخدمه وإضافة الحجج حسب الحاجة. يمثل "%d" مسار الدليل المفتوح، ويستخدمه الحقل "الحجة للمجلد" للأوامر التي تفتح أدلة محددة. يمثل "%f" مسار الملف المفتوح، ويستخدمه الحقل "الحجة للملف" للأوامر التي تفتح ملفات محددة.
- على سبيل المثال، إذا كان مدير الملفات يستخدم أمرًا مثل "totalcmd.exe /A c:\windows" لفتح دليل c:\windows، فإن مسار مدير الملفات سيكون totalcmd.exe، وحجة المجلد ستكون /A "%d". قد تحتاج بعض مديري الملفات مثل QTTabBar فقط إلى توفير مسار، في هذه الحالة استخدم "%d" كمسار مدير الملفات واترك باقي الحقول فارغة.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.مدير الملفاتاسم الملف الشخصيمسار مدير الملفات
@@ -434,13 +466,14 @@
اضغط على مفتاح اختصار مخصص لفتح Flow Launcher وإدخال الاستعلام المحدد تلقائيًا.معاينةمفتاح الاختصار غير متاح، يرجى اختيار مفتاح اختصار جديد
- مفتاح اختصار غير صالح للإضافة
+ Hotkey is invalidتحديثربط مفتاح الاختصارمفتاح الاختصار الحالي غير متاح.تم حجز هذا المفتاح لـ "{0}" ولا يمكن استخدامه. يرجى اختيار مفتاح اختصار آخر.يتم استخدام هذا المفتاح بالفعل من قبل "{0}". إذا ضغطت على "استبدال"، سيتم إزالته من "{0}".اضغط على المفاتيح التي تريد استخدامها لهذه الوظيفة.
+ Hotkey and action keyword are emptyاختصار الاستعلام المخصص
@@ -451,6 +484,7 @@
الاختصار موجود بالفعل، يرجى إدخال اختصار جديد أو تعديل الموجود.الاختصار و/أو توسيعه فارغ.
+ Shortcut is invalidحفظ
diff --git a/Flow.Launcher/Languages/cs.xaml b/Flow.Launcher/Languages/cs.xaml
index 254298f80..aa13f2203 100644
--- a/Flow.Launcher/Languages/cs.xaml
+++ b/Flow.Launcher/Languages/cs.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesVyhledat plugin
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginObchod s pluginy
@@ -191,6 +201,28 @@
Nová verzeTento plugin byl aktualizován během posledních 7 dníNová aktualizace je k dispozici
+ Chyba instalace pluginu
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Stahování pluginu
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Instalace z neznámého zdroje
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathMotiv
@@ -383,7 +415,7 @@
Vybrat správce souborůLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.Správce souborůJméno profiluCesta k správci souborů
@@ -434,13 +466,14 @@
Stisknutím vlastní klávesové zkratky otevřete nástroj Flow Launcher a automaticky zadejte dotaz.NáhledKlávesová zkratka je nedostupná, zadejte prosím novou zkratku
- Neplatná klávesová zkratka pluginu
+ Hotkey is invalidAktualizovatBinding HotkeyCurrent hotkey is unavailable.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".Press the keys you want to use for this function.
+ Hotkey and action keyword are emptyVlastní klávesová zkratka pro zadávání dotazů
@@ -451,6 +484,7 @@ Pokud před zkratku při zadávání přidáte znak "@", bude odpovíd
Zkratka již existuje, zadejte novou zkratku nebo upravte stávající.Zkratka a/nebo její plné znění je prázdné.
+ Shortcut is invalidUložit
diff --git a/Flow.Launcher/Languages/da.xaml b/Flow.Launcher/Languages/da.xaml
index 567532865..d734b4356 100644
--- a/Flow.Launcher/Languages/da.xaml
+++ b/Flow.Launcher/Languages/da.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesSearch Plugin
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginPlugin-butik
@@ -191,6 +201,28 @@
New VersionThis plugin has been updated within the last 7 daysNew Update is Available
+ Error installing plugin
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Downloading plugin
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathTema
@@ -383,7 +415,7 @@
Select File ManagerLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.FilhåndteringProfilnavnSti til filhåndtering
@@ -434,13 +466,14 @@
Press a custom hotkey to open Flow Launcher and input the specified query automatically.VisGenvejstast er utilgængelig, vælg venligst en ny genvejstast
- Ugyldig plugin genvejstast
+ Hotkey is invalidOpdaterBinding HotkeyCurrent hotkey is unavailable.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".Press the keys you want to use for this function.
+ Hotkey and action keyword are emptyCustom Query Shortcut
@@ -451,6 +484,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
Shortcut already exists, please enter a new Shortcut or edit the existing one.Shortcut and/or its expansion is empty.
+ Shortcut is invalidGem
diff --git a/Flow.Launcher/Languages/de.xaml b/Flow.Launcher/Languages/de.xaml
index 940881129..ca2a1bd0b 100644
--- a/Flow.Launcher/Languages/de.xaml
+++ b/Flow.Launcher/Languages/de.xaml
@@ -10,11 +10,11 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
Der Pfad zur ausführbaren Datei {0} kann nicht festgelegt werden. Bitte versuchen Sie es in den Einstellungen von Flow (scrollen Sie nach unten).Plug-ins können nicht initialisiert werden
- Plug-ins: {0} - nicht geladen werden und wird deaktiviert, bitte kontaktieren Sie den Ersteller des Plug-ins für Hilfe
+ Plug-ins: {0} - können nicht geladen werden und wird deaktiviert, bitte kontaktieren Sie den Ersteller des Plug-ins für HilfeHotkey "{0}" konnte nicht registriert werden. Der Hotkey ist möglicherweise von einem anderen Programm in Verwendung. Wechseln Sie zu einem anderen Hotkey oder beenden Sie das andere Programm.
@@ -41,7 +41,7 @@
TextSpielmodusAussetzen der Verwendung von Hotkeys.
- Position zurücksetzen
+ Zurücksetzen der PositionPosition des Suchfensters zurücksetzenZum Suchen hier tippen
@@ -56,7 +56,7 @@
Fehler bei Einstellungsstart beim StartFlow Launcher ausblenden, wenn Fokus verloren gehtVersionsbenachrichtigungen nicht zeigen
- Search Window Location
+ Ort des SuchfenstersLetzte Position merkenMonitor mit MauscursorMonitor mit fokussiertem Fenster
@@ -65,8 +65,8 @@
Position des Suchfensters auf MonitorZentriertOben zentriert
- Links oben
- Rechts oben
+ Oben links
+ Oben rechtsBenutzerdefinierte PositionSpracheLetzter Abfragestil
@@ -106,38 +106,42 @@
Immer VorschauVorschau-Panel immer öffnen, wenn Flow aktiviert ist. Drücken Sie {0}, um Vorschau umzuschalten.Schatteneffekt ist nicht erlaubt, während das aktuelle Theme den Unschärfe-Effekt aktiviert hat
- Search Delay
- Adds a short delay while typing to reduce UI flicker and result load. Recommended if your typing speed is average.
- Enter the wait time (in ms) until input is considered complete. This can only be edited if Search Delay is enabled.
- Default Search Delay Time
- Wait time before showing results after typing stops. Higher values wait longer. (ms)
- Information for Korean IME user
+ Suchverzögerung
+ Fügt eine kurze Verzögerung beim Tippen hinzu, um das Flackern der Benutzeroberfläche und die Ergebnislast zu verringern. Empfohlen, wenn Ihre Tippgeschwindigkeit durchschnittlich ist.
+ Geben Sie die Wartezeit (in ms) ein, bis die Eingabe als abgeschlossen gilt. Dies kann nur bearbeitet werden, wenn die Suchverzögerung aktiviert ist.
+ Suchverzögerungszeit per Default
+ Wartezeit, bevor die Ergebnisse nach Tippstopps angezeigt werden. Bei höheren Werten wird länger gewartet. (ms)
+ Informationen für koreanischen IME-Benutzer
- The Korean input method used in Windows 11 may cause some issues in Flow Launcher.
+ Die in Windows 11 verwendete koreanische Eingabemethode kann einige Probleme im Flow Launcher verursachen.
- If you experience any problems, you may need to enable "Use previous version of Korean IME".
+ Wenn Sie irgendwelche Probleme haben, müssen Sie unter Umständen "Vorherige Version der koreanischen IME" aktivieren.
- Open Setting in Windows 11 and go to:
+ Öffnen Sie die Einstellung in Windows 11 und gehen Sie zu:
- Time & Language > Language & Region > Korean > Language Options > Keyboard - Microsoft IME > Compatibility,
+ Time & Language > Language & Region > Koreanisch > Sprachoptionen > Tastatur - Microsoft IME > Kompatibilität,
- and enable "Use previous version of Microsoft IME".
+ und aktivieren Sie "Vorherige Version von Microsoft IME".
Sprach- und Regionen-Systemeinstellungen öffnen
- Opens the Korean IME setting location. Go to Korean > Language Options > Keyboard - Microsoft IME > Compatibility
+ Öffnet den Ort für koreanische IME-Einstellung. Gehen Sie zu Koreanisch > Sprachoptionen > Tastatur - Microsoft IME > KompatibilitätÖffnenVorherige koreanische IME verwenden
- You can change the Previous Korean IME settings directly from here
+ Sie können die Einstellungen des vorherigen koreanischen IME direkt von hier aus ändernHomepage
- Show home page results when query text is empty.
- Show History Results in Home Page
- Maximum History Results Shown in Home Page
- This can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Ergebnisse der Homepage zeigen, wenn Abfragetext leer ist.
+ Historie-Ergebnisse auf Homepage zeigen
+ Maximal gezeigte Historie-Ergebnisse auf Homepage
+ Dies kann nur bearbeitet werden, wenn das Plug-in das Home-Feature unterstützt und die Homepage aktiviert ist.
+ Suchfenster an vorderster zeigen
+ Setzt die Einstellung 'Immer im Vordergrund' anderer Programme außer Kraft und zeigt Flow in der vordersten Position an.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesPlug-in suchen
@@ -154,12 +158,12 @@
Aktuelles Action-SchlüsselwortNeues Aktions-SchlüsselwortAktions-Schlüsselwörter ändern
- Plugin search delay time
- Change Plugin Search Delay Time
+ Suchverzögerungszeit für Plug-in
+ Suchverzögerungszeit für Plug-in ändernErweiterte EinstellungenAktiviertPriorität
- Search Delay
+ SuchverzögerungHomepageAktuelle PrioritätNeue Priorität
@@ -174,8 +178,14 @@
DeinstallierenPlug-in-Einstellungen können nicht entfernt werdenPlug-ins: {0} - Plug-in-Einstellungsdateien können nicht entfernt werden, bitte entfernen Sie diese manuell
- Fail to remove plugin cache
- Plugins: {0} - Fail to remove plugin cache files, please remove them manually
+ Plug-in-Cache kann nicht entfernt werden
+ Plug-ins: {0} - Plug-in-Cache-Dateien können nicht entfernt werden, bitte entfernen Sie diese manuell
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginPlug-in-Store
@@ -191,6 +201,28 @@
Neue VersionDieses Plug-in ist innerhalb der letzten 7 Tage aktualisiert wordenNeues Update ist verfügbar
+ Fehler bei Installation des Plug-ins
+ Fehler bei Deinstallation des Plug-ins
+ Error updating plugin
+ Plug-in-Einstellungen beibehalten
+ Möchten Sie die Einstellungen des Plug-ins für die nächste Nutzung beibehalten?
+ Plug-in {0} erfolgreich installiert. Bitte starten Sie Flow neu.
+ Plug-in {0} erfolgreich deinstalliert. Bitte starten Sie Flow neu.
+ Plug-in {0} erfolgreich aktualisiert. Bitte starten Sie Flow neu.
+ Plugin install
+ {0} von {1} {2}{2}Möchten Sie dieses Plug-in installieren?
+ Plugin uninstall
+ {0} von {1} {2}{2}Möchten Sie dieses Plug-in deinstallieren?
+ Plugin update
+ {0} von {1} {2}{2}Möchten Sie dieses Plugin aktualisieren?
+ Plug-in wird heruntergeladen
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installation aus unbekannter Quelle
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathTheme
@@ -212,9 +244,9 @@
Schriftart des ErgebnistitelsSchriftart des Ergebnis-UntertitelsZurücksetzen
- Reset to the recommended font and size settings.
- Import Theme Size
- If a size value intended by the theme designer is available, it will be retrieved and applied.
+ Auf die empfohlenen Schriftart- und Größeneinstellungen zurücksetzen.
+ Theme-Größe importieren
+ Wenn ein vom Theme-Designer vorgesehener Größenwert verfügbar ist, wird dieser abgerufen und angewendet.Individuell anpassenFenstermodusOpazität
@@ -242,8 +274,8 @@
UhrDatumBackdrop-Typ
- The backdrop effect is not applied in the preview.
- Backdrop supported starting from Windows 11 build 22000 and above
+ Der Backdrop-Effekt wird in der Vorschau nicht angewendet.
+ Backdrop wird ab Windows 11 Build 22000 und darüber unterstütztKeineAcrylicMica
@@ -251,11 +283,11 @@
Dieses Theme unterstützt zwei Modi (hell/dunkel).Dieses Theme unterstützt Unschärfe und transparenten Hintergrund.Platzhalter zeigen
- Display placeholder when query is empty
+ Platzhalter anzeigen, wenn Abfrage leer istPlatzhaltertext
- Change placeholder text. Input empty will use: {0}
+ Platzhaltertext ändern. Eingabe leer wird verwendet: {0}Festgelegte Fenstergröße
- The window size is not adjustable by dragging.
+ Die Fenstergröße ist durch Ziehen nicht anpassbar.Hotkey
@@ -316,8 +348,8 @@
Segoe Fluent-Icons für Abfrageergebnisse verwenden, wo unterstütztTaste drückenErgebnis-Badges zeigen
- For supported plugins, badges are displayed to help distinguish them more easily.
- Show Result Badges for Global Query Only
+ Für unterstützte Plug-ins werden Badges zur besseren Unterscheidung angezeigt.
+ Ergebnis-Badges nur für globale Abfrage zeigenHTTP-Proxy
@@ -360,41 +392,41 @@
Sind Sie sicher, dass Sie alle Logs löschen wollen?Cache-OrdnerCache leeren
- Are you sure you want to delete all caches?
- Failed to clear part of folders and files. Please see log file for more information
+ Sind Sie sicher, dass Sie alle Caches löschen wollen?
+ Ein Teil der Ordner und Dateien konnte nicht gelöscht werden. Weitere Informationen entnehmen Sie bitte der LogdateiAssistentSpeicherort für BenutzerdatenBenutzereinstellungen und installierte Plug-ins werden im Ordner für Benutzerdaten gespeichert. Dieser Speicherort kann variieren, je nachdem, ob sich das Programm im portablen Modus befindet oder nicht.Ordner öffnen
- Advanced
+ ErweitertLog-EbeneDebugInfo
- Setting Window Font
+ Einstellung der Fensterschriftart
- See more release notes on GitHub
- Failed to fetch release notes
- Please check your network connection or ensure GitHub is accessible
- Flow Launcher has been updated to {0}
- Click here to view the release notes
+ Weitere Versionshinweise finden Sie auf GitHub
+ Versionshinweise konnten nicht abgerufen werden
+ Bitte überprüfen Sie Ihre Netzwerkverbindung oder stellen Sie sicher, dass GitHub erreichbar ist
+ Flow Launcher ist aktualisiert worden auf {0}
+ Klicken Sie hier, um die Versionshinweise anzusehenDateimanager auswählenMehr erfahrenBitte geben Sie den Dateiort des von Ihnen verwendeten Dateimanagers an und fügen Sie bei Bedarf Argumente hinzu. Das „%d“ repräsentiert den dafür zu öffnenden Verzeichnispfad, der vom Feld Arg for Folder und für Befehle zum Öffnen bestimmter Verzeichnisse verwendet wird. Das „%f“ repräsentiert den dafür zu öffnenden Dateipfad, der vom Feld Arg for File und für Befehle zum Öffnen bestimmter Dateien verwendet wird.
- Zum Beispiel, wenn der Dateimanager einen Befehl wie „totalcmd.exe /A c:\windows“ verwendet, um das Verzeichnis c:\windows zu öffnen, lautet der Dateimanager-Pfad „totalcmd.exe“ und der Arg for Folder „/A %d“. Bestimmte Dateimanager wie QTTabBar kann nur die Angabe eines Pfades erfordern, in diesem Fall verwenden Sie „%d“ als den Dateimanager-Pfad und lassen den Rest der Felder blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.DateimanagerProfilnameDateimanager-PfadArg For FolderArg For File
- The file manager '{0}' could not be located at '{1}'. Would you like to continue?
- File Manager Path Error
+ Der Dateimanager '{0}' konnte nicht unter '{1}' gefunden werden. Möchten Sie fortfahren?
+ Pfadfehler bei DateimanagerWebbrowser per Default
- Die Defaulteinstellung folgt der Default-Browsereinstellung des Betriebssystems. Wenn separat angegeben, verwendet Flow diesen Browser.
+ Die Defaulteinstellung folgt der Default-Browsereinstellung des Betriebssystems (OS). Wenn separat spezifiziert, verwendet Flow diesen Browser.BrowserBrowser-NameBrowser-Pfad
@@ -412,45 +444,47 @@
Neues Aktions-SchlüsselwortAbbrechenFertig
- Das angegebene Plug-in kann nicht gefunden werden
+ Das spezifizierte Plug-in kann nicht gefunden werdenNeues Aktions-Schlüsselwort darf nicht leer seinDieses neue Aktions-Schlüsselwort ist bereits einem anderen Plug-in zugewiesen, bitte wählen Sie ein anderesDieses neue Aktions-Schlüsselwort ist dasselbe wie das alte, bitte wählen Sie ein anderesErfolgErfolgreich abgeschlossen
- Failed to copy
+ Kopieren nicht möglichGeben Sie die Aktions-Schlüsselwörter ein, die Sie zum Starten des Plug-ins verwenden möchten, und trennen Sie sie durch Leerzeichen voneinander ab. Verwenden Sie *, wenn Sie keine spezifizieren möchten, und das Plug-in wird ohne jegliche Aktions-Schlüsselwörter ausgelöst.
- Search Delay Time Setting
- Input the search delay time in ms you like to use for the plugin. Input empty if you don't want to specify any, and the plugin will use default search delay time.
+ Einstellung der Suchverzögerungszeit
+ Geben Sie die Suchverzögerungszeit in ms ein, die Sie für das Plug-in verwenden möchten. Eingabe leer, wenn Sie keine Angaben machen wollen, und das Plug-in wird die Default-Suchverzögerungszeit verwenden.Homepage
- Enable the plugin home page state if you like to show the plugin results when query is empty.
+ Aktivieren Sie den Zustand der Plug-in-Homepage, wenn Sie die Plug-in-Ergebnisse anzeigen möchten, wenn Abfrage leer ist.Benutzerdefinierter Abfrage-Hotkey
- Drücken Sie einen benutzerdefinierten Hotkey, um Flow Launcher zu öffnen und die angegebene Abfrage automatisch einzugeben.
+ Drücken Sie einen benutzerdefinierten Hotkey, um Flow Launcher zu öffnen und die spezifizierte Abfrage automatisch einzugeben.VorschauHotkey ist nicht verfügbar, bitte wählen Sie einen neuen Hotkey aus
- Plug-in-Hotkey ungültig
+ Hotkey is invalidAktualisierenBindung HotkeyAktueller Hotkey ist nicht verfügbar.Dieser Hotkey ist für "{0}" reserviert und kann nicht verwendet werden. Bitte wählen Sie einen anderen Hotkey.Dieser Hotkey ist bereits in Verwendung von "{0}". Wenn Sie "Überschreiben" drücken, wird dieser aus "{0}" entfernt.Drücken Sie die Tasten, die Sie für diese Funktion verwenden möchten.
+ Hotkey and action keyword are emptyBenutzerdefinierter Abfrage-Shortcut
- Geben Sie einen Shortcut ein, der sich automatisch auf die angegebene Abfrage erweitert.
+ Geben Sie einen Shortcut ein, der sich automatisch auf die spezifizierte Abfrage erweitert.Ein Shortcut wird erweitert, wenn dieser genau mit der Abfrage übereinstimmt.
Wenn Sie bei der Eingabe eines Shortcuts ein '@'-Präfix hinzufügen, stimmt dieser mit jeder beliebigen Position in der Abfrage überein. Integrierte Shortcuts stimmen mit jeder Position in einer Abfrage überein.
Shortcut ist bereits vorhanden, bitte geben Sie einen neuen Shortcut ein oder bearbeiten Sie den vorhandenen.Shortcut und/oder dessen Erweiterung ist leer.
+ Shortcut is invalidSpeichern
@@ -483,13 +517,13 @@ Wenn Sie bei der Eingabe eines Shortcuts ein '@'-Präfix hinzufügen, stimmt die
2. Kopieren Sie die Ausnahmemeldung unterhalb
- File Manager Error
+ Fehler bei Dateimanager
- The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
+ Der spezifizierte Dateimanager konnte nicht gefunden werden. Bitte überprüfen Sie die Einstellung des benutzerdefinierten Dateimanagers unter Einstellungen > Allgemein.
Fehler
- An error occurred while opening the folder. {0}
- An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window
+ Beim Öffnen des Ordners ist ein Fehler aufgetreten. {0}
+ Beim Öffnen der URL im Browser ist ein Fehler aufgetreten. Bitte überprüfen Sie die Konfiguration Ihres Default-Webbrowsers im Abschnitt „Allgemein“ des EinstellungsfenstersBitte warten Sie ...
diff --git a/Flow.Launcher/Languages/en.xaml b/Flow.Launcher/Languages/en.xaml
index bd4cbd282..2fca06605 100644
--- a/Flow.Launcher/Languages/en.xaml
+++ b/Flow.Launcher/Languages/en.xaml
@@ -12,7 +12,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -105,6 +105,19 @@
RegularSearch with PinyinAllows using Pinyin to search. Pinyin is the standard system of romanized spelling for translating Chinese.
+ Use Double Pinyin
+ Allows using Double Pinyin to search. Double Pinyin is a variation of Pinyin that uses two characters.
+ Double Pinyin Schema
+ Xiao He
+ Zi Ran Ma
+ Wei Ruan
+ Zhi Neng ABC
+ Zi Guang Pin Yin
+ Pin Yin Jia Jia
+ Xing Kong Jian Dao
+ Da Niu
+ Xiao Lang
+
Always PreviewAlways open preview panel when Flow activates. Press {0} to toggle preview.Shadow effect is not allowed while current theme has blur effect enabled
@@ -133,6 +146,10 @@
This can only be edited if plugin supports Home feature and Home Page is enabled.Show Search Window at ForemostOverrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesSearch Plugin
@@ -171,6 +188,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginPlugin Store
@@ -186,6 +209,28 @@
New VersionThis plugin has been updated within the last 7 daysNew Update is Available
+ Error installing plugin
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Downloading plugin
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathTheme
@@ -378,7 +423,7 @@
Select File ManagerLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.File ManagerProfile NameFile Manager Path
@@ -429,13 +474,14 @@
Press a custom hotkey to open Flow Launcher and input the specified query automatically.PreviewHotkey is unavailable, please select a new hotkey
- Invalid plugin hotkey
+ Hotkey is invalidUpdateBinding HotkeyCurrent hotkey is unavailable.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".Press the keys you want to use for this function.
+ Hotkey and action keyword are emptyCustom Query Shortcut
@@ -444,6 +490,7 @@
Shortcut already exists, please enter a new Shortcut or edit the existing one.Shortcut and/or its expansion is empty.
+ Shortcut is invalidSave
diff --git a/Flow.Launcher/Languages/es-419.xaml b/Flow.Launcher/Languages/es-419.xaml
index 40fa76c3d..814cea882 100644
--- a/Flow.Launcher/Languages/es-419.xaml
+++ b/Flow.Launcher/Languages/es-419.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesSearch Plugin
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginTienda de Plugins
@@ -191,6 +201,28 @@
New VersionThis plugin has been updated within the last 7 daysNew Update is Available
+ Error installing plugin
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Downloading plugin
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathTema
@@ -383,7 +415,7 @@
Seleccionar Gestor de ArchivosLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.Gestor de ArchivosNombre de PerfilRuta del Gestor de Archivos
@@ -434,13 +466,14 @@
Presione la tecla de acceso personalizada para insertar automáticamente la consulta especificada.Vista previaTecla no disponible, por favor seleccione una nueva tecla de acceso directo
- Tecla de acceso directo al plugin inválida
+ Hotkey is invalidActualizarBinding HotkeyCurrent hotkey is unavailable.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".Press the keys you want to use for this function.
+ Hotkey and action keyword are emptyCustom Query Shortcut
@@ -451,6 +484,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
Shortcut already exists, please enter a new Shortcut or edit the existing one.Shortcut and/or its expansion is empty.
+ Shortcut is invalidGuardar
diff --git a/Flow.Launcher/Languages/es.xaml b/Flow.Launcher/Languages/es.xaml
index 1a8b22303..c65773212 100644
--- a/Flow.Launcher/Languages/es.xaml
+++ b/Flow.Launcher/Languages/es.xaml
@@ -8,7 +8,7 @@
Por favor, seleccione el ejecutable {0}
- El ejecutable {0} seleccionado no es válido.
+ El ejecutable seleccionado {0} no es válido.
{2}{2}
Pulsar Sí, si desea seleccionar de nuevo el ejecutable {0}. Pulsar No, si desea descargar {1}
@@ -136,8 +136,12 @@
Mostrar historial de resultados en la página de inicioNúmero máximo de resultados del historial en la página de inicioEsto solo se puede editar si el complemento soporta la función de Inicio y la Página de Inicio está activada.
- Show Search Window at Topmost
- Show search window above other windows
+ Mostrar ventana de búsqueda en primer plano
+ Anula el ajuste «Siempre arriba» de otros programas y muestra Flow en primer plano.
+ Reiniciar después de modificar el complemento a través de la Tienda de complementos
+ Reiniciar Flow Launcher automáticamente después de instalar/desinstalar/actualizar el complemento a través de la Tienda de complementos
+ Mostrar advertencia de fuente desconocida
+ Mostrar advertencia al instalar complementos desde fuentes desconocidasBuscar complemento
@@ -176,6 +180,12 @@
Complementos: {0} - Fallo al eliminar los archivos de configuración del complemento, por favor elimínelos manualmenteFallo al eliminar la caché del complementoComplementos: {0} - Fallo al eliminar los archivos de caché del complemento, por favor elimínelos manualmente
+ {0} ya está modificado
+ Reiniciar Flow antes de realizar más cambios
+ No se pudo instalar {0}
+ No se pudo desinstalar {0}
+ No se puede encontrar plugin.json en el archivo zip extraído, o esta ruta {0} no existe
+ Ya existe un complemento con el mismo ID y versión, o la versión es superior a la de este complemento descargadoTienda complementos
@@ -191,6 +201,28 @@
Nueva versiónEste complemento ha sido actualizado en los últimos 7 díasNueva actualización disponible
+ Error al instalar el complemento
+ Error al desinstalar el complemento
+ Error al actualizar el complemento
+ Mantener la configuración del complemento
+ ¿Desea mantener la configuración del complemento para el próximo uso?
+ Complemento {0} instalado correctamente. Por favor, reinicie Flow.
+ Complemento {0} desinstalado correctamente. Por favor, reinicie Flow.
+ Complemento {0} actualizado correctamente. Por favor, reinicie Flow.
+ Instalar complemento
+ {0} por {1} {2}{2}¿Desea instalar este complemento?
+ Desinstalar complemento
+ {0} por {1} {2}{2}¿Desea desinstalar este complemento?
+ Actualizar complemento
+ {0} por {1} {2}{2}¿Desea actualizar este complemento?
+ Descargando complemento
+ Reiniciar automáticamente después de instalar/desinstalar/actualizar complementos en la Tienda de complementos
+ El archivo Zip no tiene una configuración de plugin.json válida
+ Instalando desde una fuente desconocida
+ ¡Este complemento es de una fuente desconocida y puede contener riesgos potenciales!{0}{0}Asegúrese de entender de dónde proviene este complemento y que es seguro.{0}{0}¿Desea continuar aún?{0}{0}(Puede desactivar esta advertencia en la sección general de la ventana de configuración)
+ Archivos Zip
+ Por favor, seleccione archivo zip
+ Instalar complemento desde la ruta localTema
@@ -368,7 +400,7 @@
Abrir carpetaAvanzadoNivel de registro
- Depurar
+ DepuraciónInformaciónConfiguración de fuente de la ventana
@@ -404,7 +436,7 @@
Cambiar la prioridad
- Cuanto mayor sea el número, más arriba se situará el resultado. Inténtelo con 5. Si desea que los resultados se situén más abajo que los de cualquier otro complemento, utilice un número negativo
+ Cuanto mayor sea el número, más arriba se situará el resultado. Probar con 5. Si se desea que los resultados se sitúen más abajo que los de cualquier otro complemento, utilizar un número negativo¡Por favor, proporcione un número entero válido para la prioridad!
@@ -419,7 +451,7 @@
CorrectoFinalizado correctamenteNo se pudo copiar
- Introduzca las palabras clave de acción que desea utilizar para iniciar el complemento y utilice espacios en blanco para separarlas. Utilice * si no desea especificar ninguna, para que el complemento se inicie sin ninguna palabra clave de acción.
+ Introducir las palabras claves de acción que se desean utilizar para iniciar el complemento, utilizando espacios en blanco para separarlas. Utilizar * si no se desea especificar ninguna, para que el complemento se inicie sin ninguna palabra clave de acción.Ajuste del tiempo de retardo de búsqueda
@@ -427,20 +459,21 @@
Página de inicio
- Activar el estado de la página de inicio del complemento si se desea mostrar los resultados del complemento cuando la consulta está vacía.
+ Activar el estado página de inicio del complemento si se desea mostrar los resultados del complemento cuando la consulta esté vacía.Atajo de teclado de consulta personalizadaPulse el atajo de teclado personalizado para abrir Flow Launcher y realizar automáticamente la consulta especificada.Vista previaEl atajo de teclado no está disponible, por favor seleccione uno nuevo
- Atajo de teclado de complemento no válido
+ La tecla de acceso rápido no es válidaActualizarAtajo de teclado vinculadoEl atajo de teclado actual no está disponible.Este atajo de teclado está reservado para "{0}" y no se puede utilizar. Por favor, elija otro atajo de teclado.Este atajo de teclado ya está siendo utilizado por "{0}". Si pulsa «Sobrescribir», se eliminará de "{0}".Pulsar las teclas que se deseen utilizar para esta función.
+ La tecla de acceso rápido y la palabra clave de acción están vacíasAcceso directo de consulta personalizada
@@ -451,6 +484,7 @@ Si añade un prefijo "@" al introducir un acceso directo, éste coinci
El acceso directo ya existe, por favor introduzca uno nuevo o edite el existente.El acceso directo y/o su expansión están vacíos.
+ El acceso directo no es válidoGuardar
diff --git a/Flow.Launcher/Languages/fr.xaml b/Flow.Launcher/Languages/fr.xaml
index e70e75a26..52013a7db 100644
--- a/Flow.Launcher/Languages/fr.xaml
+++ b/Flow.Launcher/Languages/fr.xaml
@@ -8,9 +8,9 @@
Veuillez sélectionner l'exécutable {0}
- L'exécutable {0} que vous avez sélectionné est invalide.
+ L'exécutable {0} que vous avez sélectionné n'est pas valide.
{2}{2}
- Cliquez sur oui si vous souhaitez sélectionner l'exécutable {0} à nouveau. Cliquez sur non si vous souhaitez télécharger {1}.
+ Cliquez sur oui si vous souhaitez sélectionner à nouveau l'exécutable {0}. Cliquez sur non si vous souhaitez télécharger {1}
Impossible de définir {0} comme chemin d'accès vers l'exécutable. Veuillez essayer à partir des paramètres de Flow (défiler vers le bas).Échec de l'initialisation des plugins
@@ -137,7 +137,11 @@
Maximum de résultats de l'historique affichés sur la page d'accueilCeci ne peut être édité que si le plugin prend en charge la fonction Accueil et que la page d'accueil est activée.Afficher la fenêtre de recherche en premier plan
- Afficher la fenêtre de recherche au-dessus des autres fenêtres
+ Outrepasse le paramètre 'toujours en premier plan' des autres programmes et affiche Flow Launcher en première position.
+ Redémarrer après modification du plugin via le magasin des plugins
+ Redémarrez automatiquement Flow Launcher après l'installation / désinstallation / mise à jour du plugin via le magasin des plugins
+ Afficher l'avertissement de source inconnue
+ Afficher un avertissement lors de l'installation de plugins à partir de sources inconnuesRechercher des plugins
@@ -176,6 +180,12 @@
Plugins : {0} - Échec de la suppression des fichiers de configuration des plugins, veuillez les supprimer manuellementÉchec de la suppression du cache du pluginPlugins : {0} - Échec de la suppression des fichiers cache des plugins, veuillez les supprimer manuellement
+ {0} est déjà modifié
+ Veuillez redémarrer Flow avant d'apporter d'autres modifications
+ Échec de l'installation de {0}
+ Échec de la désinstallation de {0}
+ Impossible de trouver le fichier plugin.json dans le fichier zip extrait, ou ce chemin {0} n'existe pas
+ Un plugin avec le même ID et la même version existe déjà, ou la version est supérieure à ce plugin téléchargéMagasin des Plugins
@@ -191,6 +201,28 @@
Nouvelle versionCette extension a été mis à jour au cours des 7 derniers joursUne nouvelle mise à jour est disponible
+ Erreur lors de l'installation du plugin
+ Erreur lors de la désinstallation du plugin
+ Erreur de mise à jour du plugin
+ Garder les paramètres du plugin
+ Souhaitez-vous conserver les paramètres du plugin pour la prochaine utilisation ?
+ Plugin {0} installé avec succès. Veuillez redémarrer Flow.
+ Plugin {0} désinstallé avec succès. Veuillez redémarrer Flow.
+ Plugin {0} mis à jour avec succès. Veuillez redémarrer Flow.
+ Installation du plugin
+ {0} par {1} {2}{2}Voulez-vous installer ce plugin ?
+ Désinstallation du plugin
+ {0} par {1} {2}{2}Voulez-vous désinstaller ce plugin ?
+ Mise à jour du plugin
+ {0} par {1} {2}{2}Voulez-vous mettre à jour ce plugin ?
+ Téléchargement du plugin
+ Redémarrer automatiquement après l'installation / désinstallation / mise à jour des plugins dans le magasin des plugins
+ Le fichier zip n'a pas de configuration plugin.json valide
+ Installation depuis une source inconnue
+ Ce plugin provient d'une source inconnue et il peut contenir des risques !{0}{0}Veuillez vous assurer de comprendre d'où vient ce plugin et qu'il est sûr. {0} {0} Souhaitez-vous continuer ? {0} {0} (vous pouvez désactiver cet avertissement dans la section général des paramètres)
+ Fichiers zip
+ Veuillez sélectionner un fichier zip
+ Installer le plugin depuis le chemin localThèmes
@@ -382,7 +414,7 @@
Sélectionner le gestionnaire de fichiersEn savoir plusVeuillez spécifier l'emplacement du fichier de l'explorateur de fichiers que vous utilisez et ajouter des arguments si nécessaire. Le "%d" représente le chemin du répertoire à ouvrir, utilisé par le champ Arg for Folder et pour les commandes ouvrant des répertoires spécifiques. Le "%f" représente le chemin du fichier à ouvrir, utilisé par le champ Arg for File et pour les commandes ouvrant des fichiers spécifiques.
- Par exemple, si l'explorateur de fichiers utilise une commande telle que "totalcmd.exe /A c:\windows" pour ouvrir le répertoire c:\windows, le chemin de l'explorateur de fichiers sera totalcmd.exe et l'argument Arg For Folder sera /A "%d"". Certains explorateurs de fichiers comme QTTabBar peuvent simplement nécessiter qu'un chemin soit fourni, dans ce cas, utilisez "%d" comme chemin de l'explorateur de fichiers et laissez le reste des fichiers vides.
+ Par exemple, si le gestionnaire de fichiers utilise une commande telle que "totalcmd.exe /A c:\windows" pour ouvrir le répertoire c:\windows, le chemin du gestionnaire de fichiers sera totalcmd.exe, et le chemin du dossier sera /A "%d". Certains gestionnaires de fichiers, comme QTTabBar, peuvent se contenter d'un simple chemin d'accès. Dans ce cas, utilisez "%d" comme chemin d'accès au gestionnaire de fichiers et laissez le reste des champs vides.Gestionnaire de fichiersNom du profilChemin du gestionnaire de fichiers
@@ -433,13 +465,14 @@
Appuyez sur le raccourci personnalisé pour insérer automatiquement la requête spécifiée.PrévisualiserRaccourci indisponible. Veuillez en choisir un autre.
- Raccourci invalide
+ La touche de raccourci n'est pas valideActualiserRaccourci de liaisonLe raccourci clavier actuel n'est pas disponible.Ce raccourci est réservé à "{0}" et ne peut pas être utilisé. Veuillez choisir un autre raccourci clavier.Ce raccourci est déjà utilisé par "{0}". Si vous appuyez sur "Écraser", il sera supprimé de "{0}".Appuyez sur les touches que vous voulez utiliser pour cette fonction.
+ Les touches de raccourci et les mots-clés d'action sont videsRaccourci de requête personnalisée
@@ -450,6 +483,7 @@ Si vous ajoutez un préfixe "@" lors de la saisie d'un raccourci, celu
Le raccourci existe déjà, veuillez entrer un nouveau raccourci ou modifier le raccourci existant.Raccourci et/ou son expansion est vide.
+ Le raccourci n'est pas valideSauvegarder
diff --git a/Flow.Launcher/Languages/he.xaml b/Flow.Launcher/Languages/he.xaml
index 23f4b7541..b72125214 100644
--- a/Flow.Launcher/Languages/he.xaml
+++ b/Flow.Launcher/Languages/he.xaml
@@ -8,9 +8,9 @@
אנא בחר את קובץ ההפעלה {0}
- קובץ ההפעלה {0} שבחרת אינו חוקי.
+ Your selected {0} executable is invalid.
{2}{2}
- לחץ על כן אם ברצונך, בחר את {0} ההפעלה הקודמת. לחץ על לא אם ברצונך להוריד את {1}
+ Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
לא ניתן להגדיר נתיב הפעלה {0}, אנא נסה שוב בהגדרות Flow (גלול עד למטה).נכשל בהפעלת תוספים
@@ -135,8 +135,12 @@
Show History Results in Home PageMaximum History Results Shown in Home Pageניתן לערוך זאת רק אם התוסף תומך בתכונת הבית ודף הבית מופעל.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ עוקף את הגדרת תמיד עליון של תוכנות אחרות, ומציג את Flow במיקום הגבוה ביותר.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesחפש תוסף
@@ -175,6 +179,12 @@
תוספים: {0} - נכשל בהסרת קבצי הגדרות התוסף, יש להסירם ידניתנכשל בהסרת מטמון התוסףתוספים: {0} - נכשל בהסרת קובצי מטמון התוסף, אנא הסר אותם ידנית
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginחנות תוספים
@@ -190,6 +200,28 @@
גרסה חדשהתוסף זה עודכן במהלך 7 הימים האחרוניםעדכון חדש זמין
+ שגיאה בהתקנת תוסף
+ שגיאה בהסרת תוסף
+ Error updating plugin
+ שמור הגדרות תוסף
+ האם ברצונך לשמור את הגדרות התוסף לשימוש הבא?
+ התוסף {0} הותקן בהצלחה. נא הפעל מחדש את Flow.
+ התוסף {0} הוסר בהצלחה. נא הפעל מחדש את Flow.
+ התוסף {0} עודכן בהצלחה. נא הפעל מחדש את Flow.
+ Plugin install
+ {0} מאת {1} {2}{2}האם ברצונך להתקין תוסף זה?
+ Plugin uninstall
+ {0} מאת {1} {2}{2}האם ברצונך להסיר תוסף זה?
+ Plugin update
+ {0} מאת {1} {2}{2}האם ברצונך לעדכן תוסף זה?
+ מוריד תוסף
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ מתקין ממקור לא מוכ
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathערכת נושא
@@ -382,7 +414,7 @@
בחר מנהל קבציםלמד עודאנא ציין את מיקום הקובץ של מנהל הקבצים שבו אתה משתמש והוסף ארגומנטים כנדרש. "%d" מייצג את נתיב התיקייה שיש לפתוח, ומשמש בשדה ארגומנט לתיקייה ובפקודות לפתיחת תיקיות מסוימות. "%f" מייצג את נתיב הקובץ שיש לפתוח, ומשמש בשדה ארגומנט לקובץ ובפקודות לפתיחת קבצים מסוימים.
- לדוגמה, אם מנהל הקבצים משתמש בפקודה כגון "totalcmd.exe /A c:\windows" כדי לפתוח את התיקייה c:\windows, נתיב מנהל הקבצים יהיה totalcmd.exe, והארגומנט לתיקייה יהיה /A "%d". מנהלי קבצים מסוימים, כגון QTTabBar, עשויים לדרוש רק ציון נתיב, במקרה כזה השתמש ב-"%d" כנתיב מנהל הקבצים והשאר את שאר השדות ריקים.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.מנהל קבציםשם פרופילנתיב מנהל קבצים
@@ -433,13 +465,14 @@
הקש על מקש קיצור מותאם אישית כדי לפתוח את Flow Launcher ולהזין את השאילתה שצוינה באופן אוטומטי.תצוגה מקדימהמקש הקיצור אינו זמין, אנא בחר מקש קיצור חדש
- מקש קיצור לא חוקי לתוסף
+ Hotkey is invalidעדכוןשיוך מקש קיצורמקש הקיצור הנוכחי אינו זמין.מקש קיצור זה שמור עבור "{0}" ואינו ניתן לשימוש. אנא בחר מקש קיצור אחר.מקש קיצור זה כבר נמצא בשימוש על ידי "{0}". אם תלחץ על "החלף", הוא יוסר מ-"{0}".הקש על המקשים שברצונך להשתמש בהם עבור פעולה זו.
+ Hotkey and action keyword are emptyקיצור דרך לשאילתה מותאמת אישית
@@ -450,6 +483,7 @@
קיצור דרך כבר קיים, אנא הזן קיצור דרך חדש או ערוך את הקיים.קיצור הדרך ו/או ההרחבה שלו ריקים.
+ Shortcut is invalidשמור
diff --git a/Flow.Launcher/Languages/it.xaml b/Flow.Launcher/Languages/it.xaml
index f41d960f1..83867d00e 100644
--- a/Flow.Launcher/Languages/it.xaml
+++ b/Flow.Launcher/Languages/it.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesPlugin di ricerca
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginNegozio dei Plugin
@@ -191,6 +201,28 @@
Nuova versioneQuesto plugin è stato aggiornato negli ultimi 7 giorniNuovo aggiornamento disponibile
+ Errore durante l'installazione del plugin
+ Errore durante la disinstallazione del plugin
+ Error updating plugin
+ Keep plugin settings
+ Do you want to keep the settings of the plugin for the next usage?
+ Il plugin {0} installato con successo. Riavviare Flow.
+ Il plugin {0} disinstallato con successo. Riavviare Flow.
+ Il plugin {0} aggiornato con successo. Riavviare Flow.
+ Plugin install
+ {0} di {1} {2}{2}Vuoi installare questo plugin?
+ Plugin uninstall
+ {0} di {1} {2}{2}Vuoi disinstallare questo plugin?
+ Plugin update
+ {0} di {1} {2}{2}Vuoi aggiornare questo plugin?
+ Download del plugin
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installazione da una fonte sconosciuta
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathTema
@@ -383,7 +415,7 @@
Seleziona Gestore FileLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.Gestore FileNome ProfiloPercorso Gestore File
@@ -434,13 +466,14 @@
Premere un tasto di scelta rapida personalizzato per aprire Flow Launcher e inserire automaticamente la query specificata.AnteprimaTasto di scelta rapida non disponibile, per favore scegli un nuovo tasto di scelta rapida
- Tasto di scelta rapida plugin non valido
+ Hotkey is invalidAggiornaRegistrare ScorciatoieScorciatoia corrente non disponibile.Questa scorciatoia è riservata per "{0}" e non può essere utilizzata. Si prega di scegliere un'altra scorciatoia.Questa scorciatoia è già in uso da "{0}". Premendo "Sovrascrivi", verrà rimossa da "{0}".Premi i tasti che vuoi usare per questa funzione.
+ Hotkey and action keyword are emptyScorciatoia per ricerca personalizzata
@@ -451,6 +484,7 @@ Se si aggiunge un prefisso '@' mentre si inserisce una scorciatoia, corrisponde
La scorciatoia esiste già, inserisci una nuova scorciatoia o modifica quella esistente.La scorciatoia e/o la sua espansione sono vuote.
+ Shortcut is invalidSalva
diff --git a/Flow.Launcher/Languages/ja.xaml b/Flow.Launcher/Languages/ja.xaml
index 6c1b364f3..22451ed27 100644
--- a/Flow.Launcher/Languages/ja.xaml
+++ b/Flow.Launcher/Languages/ja.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -93,7 +93,7 @@
自動更新選択起動時にFlow Launcherを隠す
- Flow Launcher search window is hidden in the tray after starting up.
+ 起動後、Flow Launcher の検索ウィンドウは非表示になり、トレイに格納されます。トレイアイコンを隠すトレイアイコンが非表示になっているときは、検索ウィンドウを右クリックすることで設定メニューを開くことができます。クエリ検索精度
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesSearch Plugin
@@ -176,11 +180,17 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginプラグインストアNew Release
- Recently Updated
+ 最近の更新プラグインInstalled更新
@@ -191,6 +201,28 @@
New VersionThis plugin has been updated within the last 7 days新しいアップデートが利用可能です
+ Error installing plugin
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Downloading plugin
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathテーマ
@@ -262,8 +294,8 @@
ホットキーFlow Launcherを開くFlow Launcher の表示/非表示を切り替えるショートカットを入力してください。
- Toggle Preview
- Enter shortcut to show/hide preview in search window.
+ プレビューの切り替え
+ 検索ウィンドウでプレビューの表示/非表示を切り替えるショートカットを入力してください。Hotkey PresetsList of currently registered hotkeys結果修飾子を開く
@@ -272,8 +304,8 @@
Show result selection hotkey with results.自動補完選択された項目に対して自動補完を実行します。
- Select Next Item
- Select Previous Item
+ 次の項目を選択
+ 前の項目を選択Next PagePrevious PageCycle Previous Query
@@ -291,13 +323,13 @@
Quick Adjust Window WidthQuick Adjust Window HeightUse when require plugins to reload and update their existing data.
- You can add one more hotkey for this function.
+ この機能のホットキーはもう一つ追加できます。カスタムクエリ ホットキーCustom Query Shortcut
- Built-in Shortcut
+ 組み込みショートカットQuery
- Shortcut
- Expansion
+ ショートカット
+ 展開説明削除編集
@@ -305,9 +337,9 @@
None項目選択してください{0} プラグインのホットキーを本当に削除しますか?
- Are you sure you want to delete shortcut: {0} with expansion {1}?
+ 本当にこのショートカットを削除しますか?: {0} を {1} に展開Get text from clipboard.
- Get path from active explorer.
+ アクティブなエクスプローラーからパスを取得します。Query window shadow effectShadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited.Window Width Size
@@ -363,8 +395,8 @@
Are you sure you want to delete all caches?Failed to clear part of folders and files. Please see log file for more informationWizard
- User Data Location
- User settings and installed plugins are saved in the user data folder. This location may vary depending on whether it's in portable mode or not.
+ ユーザーデータの場所
+ ユーザー設定とインストールされているプラグインは、ユーザーデータフォルダに保存されます。この場所は、ポータブルモードかどうかによって異なる場合があります。Open FolderAdvancedLog Level
@@ -383,7 +415,7 @@
デフォルトのファイルマネージャーLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.File ManagerProfile NameFile Manager Path
@@ -434,23 +466,25 @@
Press a custom hotkey to open Flow Launcher and input the specified query automatically.プレビューホットキーは使用できません。新しいホットキーを選択してください
- プラグインホットキーは無効です
+ Hotkey is invalid更新Binding HotkeyCurrent hotkey is unavailable.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".Press the keys you want to use for this function.
+ Hotkey and action keyword are empty
- Custom Query Shortcut
- Enter a shortcut that automatically expands to the specified query.
- A shortcut is expanded when it exactly matches the query.
+ カスタムクエリショートカット
+ 指定したクエリに自動的に展開するショートカットを入力してください。
+ クエリに正確に一致すると、ショートカットが展開されます。
-If you add an '@' prefix while inputting a shortcut, it matches any position in the query. Builtin shortcuts match any position in a query.
+ショートカットの入力で「@」プレフィクスをつけた場合、クエリのどこにあってもマッチするようになります。組み込みのショートカットはクエリのどこにあってもマッチします。
- Shortcut already exists, please enter a new Shortcut or edit the existing one.
- Shortcut and/or its expansion is empty.
+ ショートカットが既に存在します。新しいショートカットを入力するか、既存のショートカットを編集してください。
+ ショートカット、展開の少なくとも一方が空です。
+ Shortcut is invalid保存
diff --git a/Flow.Launcher/Languages/ko.xaml b/Flow.Launcher/Languages/ko.xaml
index 1b1eaf4fa..b0c13d2e6 100644
--- a/Flow.Launcher/Languages/ko.xaml
+++ b/Flow.Launcher/Languages/ko.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -127,8 +127,12 @@
히스토리를 홈페이지에 표시홈페이지에 표시할 최대 히스토리 수This can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sources플러그인 검색
@@ -167,6 +171,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin플러그인 스토어
@@ -182,6 +192,28 @@
새 버전이 플러그인은 최근 7일 사이 업데이트 되었습니다새 업데이트 설치 가능
+ Error installing plugin
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ 플러그인 다운로드 중
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local path테마
@@ -374,7 +406,7 @@
파일관리자 선택더 알아보기사용 중인 파일 관리자의 파일 위치를 지정하고, 필요한 경우 인수를 추가하세요. "%d"는 열고자 하는 디렉터리 경로를 나타내며, 폴더용 인수 필드 및 특정 디렉터리를 여는 명령어에서 사용됩니다. "%f"는 열고자 하는 파일 경로를 나타내며, 파일용 인수 필드 및 특정 파일을 여는 명령어에서 사용됩니다.
- 예를 들어, 파일 관리자가 totalcmd.exe /A c:\windows와 같은 명령어로 c:\windows 디렉터리를 연다면, 파일 관리자 경로는 totalcmd.exe가 되고, 폴더용 인수는 /A "%d"가 됩니다. QTTabBar와 같은 일부 파일 관리자는 경로만 전달하면 되는 경우가 있으므로, 이 경우에는 파일 관리자 경로에 "%d"를 입력하고 나머지 필드는 비워두세요.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.파일관리자프로필 이름파일관리자 경로
@@ -425,13 +457,14 @@
Press a custom hotkey to open Flow Launcher and input the specified query automatically.미리보기단축키를 사용할 수 없습니다. 다른 단축키를 입력하세요.
- 플러그인 단축키가 유효하지 않습니다.
+ Hotkey is invalid업데이트Binding HotkeyCurrent hotkey is unavailable.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".이 기능에 사용할 키를 눌러주세요.
+ Hotkey and action keyword are empty사용자 지정 쿼리 단축어
@@ -442,6 +475,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
Shortcut already exists, please enter a new Shortcut or edit the existing one.Shortcut and/or its expansion is empty.
+ Shortcut is invalid저장
diff --git a/Flow.Launcher/Languages/nb.xaml b/Flow.Launcher/Languages/nb.xaml
index 07dc84c36..c3879e203 100644
--- a/Flow.Launcher/Languages/nb.xaml
+++ b/Flow.Launcher/Languages/nb.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
Kan ikke angi {0} kjørbar bane, prøv fra Flows innstillinger (bla ned til bunnen).Mislykkes i å initialisere programtillegg
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesSøk etter programtillegg
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginProgramtillegg butikk
@@ -191,6 +201,28 @@
Ny versjonDette programtillegget er oppdatert i løpet av de siste 7 dageneNy oppdatering er tilgjengelig
+ Feil ved installering av programtillegg
+ Feil ved avinstallering av programtillegg
+ Error updating plugin
+ Keep plugin settings
+ Do you want to keep the settings of the plugin for the next usage?
+ Programtillegg {0} installert. Vennligst start Flow på nytt.
+ Programtillegg {0} avinstallert. Vennligst start Flow på nytt.
+ Programtillegg {0} oppdatert. Vennligst restart Flow.
+ Plugin install
+ {0} av {1} {2}{2}Vil du installere dette programtillegget?
+ Plugin uninstall
+ {0} av {1} {2}{2}Vil du avinstallere dette programtillegget?
+ Plugin update
+ {0} av {1} {2}{2}Vil du oppdatere dette programtillegget?
+ Laster ned programtillegg
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installerer fra en ukjent kilde
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathDrakt
@@ -383,7 +415,7 @@
Velg filbehandlerLearn moreVennligst spesifiser filplasseringen til filbehandleren du bruker, og legg til argumenter etter behov. "%d" representerer katalogbanen som skal åpnes for, brukt av Arg for mappe-feltet og for kommandoer som åpner spesifikke kataloger. "%f" representerer filbanen som skal åpnes for, brukt av Arg for fil-feltet og for kommandoer som åpner spesifikke filer.
- For eksempel, hvis filbehandleren bruker en kommando som "totalcmd.exe /A c:windows" for å åpne c:windows-katalogen, vil filbehandlingsbanen bli totalcmd.exe, og Arg For Folder vil være /A "%d". Enkelte filbehandlere som QTTabBar kan bare kreve at en bane oppgis, i dette tilfellet bruker du "%d" som filbehandlingsbane og lar resten av feltene stå tomme.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.FilbehandlerProfilnavnFilbehandler sti
@@ -434,13 +466,14 @@
Trykk på en egendefinert hurtigtast for å åpne Flow Launcher og skrive inn den angitte spørringen automatisk.ForhåndsvisHurtigtast er utilgjengelig, vennligst velg en ny hurtigtast
- Ugyldig hurtigtast for programtillegg
+ Hotkey is invalidOppdaterBinding av hurtigtastNåværende hurtigtast er utilgjengelig.Denne hurtigtasten er reservert for "{0}" og kan ikke brukes. Velg en annen hurtigtast.Denne hurtigtasten er allerede i bruk av "{0}". Hvis du trykker "Overskriv" vil den bli fjernet fra "{0}".Trykk på tastene du vil bruke for denne funksjonen.
+ Hotkey and action keyword are emptySnarvei for egendefinert spørring
@@ -451,6 +484,7 @@ Hvis du legger til et @-prefiks mens du legger inn en snarvei, samsvarer det med
Snarveien eksisterer allerede, skriv inn en ny snarvei eller rediger den eksisterende.Snarvei og/eller utvidelsen er tom.
+ Shortcut is invalidLagre
diff --git a/Flow.Launcher/Languages/nl.xaml b/Flow.Launcher/Languages/nl.xaml
index c74c95010..96a7e43dd 100644
--- a/Flow.Launcher/Languages/nl.xaml
+++ b/Flow.Launcher/Languages/nl.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesPlug-ins zoeken
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginPlugin Winkel
@@ -191,6 +201,28 @@
Nieuwe VersieDeze plug-in is in de laatste 7 dagen bijgewerktNieuwe update beschikbaar
+ Error installing plugin
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Downloading plugin
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathThema
@@ -383,7 +415,7 @@
Bestandsbeheerder selecterenLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.BestandsbeheerderProfielnaamBestandsbeheerder pad
@@ -434,13 +466,14 @@
Druk op een aangepaste sneltoets om Flow Launcher te openen en de opgegeven query automatisch in te voeren.VoorbeeldSneltoets is niet beschikbaar, selecteer een nieuwe sneltoets
- Ongeldige plugin sneltoets
+ Hotkey is invalidBijwerkenSneltoets koppelenHuidige sneltoets is niet beschikbaar.Deze sneltoets is gereserveerd voor "{0}" en kan niet worden gebruikt. Kies een andere sneltoets.Deze sneltoets is al in gebruik door "{0}". Als u op "Overschrijven" klikt, zal deze verwijderd worden uit "{0}".Druk op de toetsen die u wilt gebruiken voor deze functie.
+ Hotkey and action keyword are emptyAangepaste Query Snelkoppeling
@@ -451,6 +484,7 @@ Als u een '@' voorvoegsel toevoegt tijdens het invoeren van een snelkoppeling, m
Snelkoppeling bestaat al, vul een nieuwe snelkoppeling in of pas de bestaande aan.Snelkoppeling en/of uitbreiding is leeg.
+ Shortcut is invalidOpslaan
diff --git a/Flow.Launcher/Languages/pl.xaml b/Flow.Launcher/Languages/pl.xaml
index e9ac041f8..ff3c548ad 100644
--- a/Flow.Launcher/Languages/pl.xaml
+++ b/Flow.Launcher/Languages/pl.xaml
@@ -8,9 +8,9 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
Wybierz plik wykonywalny {0}
- Wybrany plik wykonywalny {0} jest nieprawidłowy.
+ Your selected {0} executable is invalid.
{2}{2}
- Kliknij Tak, jeśli chcesz ponownie wybrać plik wykonywalny {0}. Kliknij Nie, jeśli chcesz pobrać {1}
+ Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
Nie można ustawić ścieżki do pliku wykonywalnego {0}. Spróbuj ponownie w ustawieniach Flow (przewiń na sam dół).Nie udało się zainicjować wtyczek
@@ -24,8 +24,8 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
Niepoprawny format pliku wtyczkiUstaw jako najwyższy wynik dla tego zapytaniaUsuń ten najwyższy wynik dla tego zapytania
- Wyszukaj: {0}
- Ostatni czas wykonywania: {0}
+ Wykonaj zapytanie: {0}
+ Czas ostatniego wykonania: {0}OtwórzUstawieniaO programie
@@ -59,7 +59,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
Pozycja okna wyszukiwaniaZapamiętaj Ostatnią PozycjęMonitoruj kursorem myszy
- Monitor z Dostosowanym Oknem
+ Monitor z aktywnym oknemMonitor głównyMonitor Niestandardowy Pozycja okna wyszukiwania na monitorze
@@ -111,33 +111,36 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
Wprowadź czas oczekiwania (w ms), po którym wprowadzanie zostanie uznane za zakończone. Edycja jest możliwa tylko, gdy włączone jest Opóźnienie wyszukiwania.Domyślne opóźnienie wyszukiwaniaOpóźnienie (ms) przed pokazaniem wyników po zakończeniu pisania. Wyższe wartości oznaczają dłuższe oczekiwanie.
- Information for Korean IME user
+ Informacje dla koreańskich użytkowników IME
- The Korean input method used in Windows 11 may cause some issues in Flow Launcher.
+ Metoda wprowadzania koreańskiego używana w Windows 11 może powodować pewne problemy w Flow Launcher.
- If you experience any problems, you may need to enable "Use previous version of Korean IME".
+ Jeśli napotkasz jakiekolwiek problemy, może być konieczne włączenie opcji „Użyj poprzedniej wersji koreańskiego IME”.
+ Otwórz Ustawienia w Windows 11 i przejdź do:
- Open Setting in Windows 11 and go to:
+ Czas i język > Język i region > Koreański > Opcje języka > Klawiatura – Microsoft IME > Zgodność,
- Time & Language > Language & Region > Korean > Language Options > Keyboard - Microsoft IME > Compatibility,
-
- and enable "Use previous version of Microsoft IME".
+ a następnie włącz opcję „Użyj poprzedniej wersji Microsoft IME”.
- Open Language and Region System Settings
- Opens the Korean IME setting location. Go to Korean > Language Options > Keyboard - Microsoft IME > Compatibility
+ Otwórz ustawienia systemowe języka i regionu
+ Otwiera lokalizację ustawień koreańskiego edytora IME. Przejdź do: Język koreański > Opcje języka > Klawiatura – Microsoft IME > Zgodność.Otwórz
- Use Previous Korean IME
- You can change the Previous Korean IME settings directly from here
- Home Page
- Show home page results when query text is empty.
- Show History Results in Home Page
- Maximum History Results Shown in Home Page
- This can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Użyj poprzedniego koreańskiego IME
+ Możesz bezpośrednio zmienić ustawienia poprzedniego koreańskiego IME tutaj
+ Strona główna
+ Wyświetl wyniki strony głównej, gdy pole wyszukiwania jest puste.
+ Pokaż wyniki historii na stronie głównej
+ Maksymalna liczba wyników historii wyświetlanych na stronie głównej
+ Można edytować tylko wtedy, gdy wtyczka obsługuje funkcję Strona główna i jest ona włączona.
+ Wyświetl okno wyszukiwania na wierzchu
+ Wyświetl okno wyszukiwania ponad innymi oknami
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesSzukaj wtyczek
@@ -160,7 +163,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
AktywnyPriorytetOpóźnienie wyszukiwania
- Home Page
+ Strona głównaObecny PriorytetNowy PriorytetPriorytet
@@ -176,6 +179,12 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
Wtyczki: {0} – nie udało się usunąć plików ustawień wtyczek, usuń je ręcznieNie udało się usunąć cache wtyczkiWtyczki: {0} - Nie udało się usunąć plików cache wtyczki, usuń je ręcznie
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginSklep z wtyczkami
@@ -184,23 +193,45 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
WtyczkiZainstalowanyOdśwież
- Instalacja
- Odinstalowywanie
+ Zainstaluj
+ OdinstalujAktualizuj
- Plugin już jest zainstalowany
+ Ta wtyczka jest już zainstalowanaNowa wersjaTa wtyczka została zaktualizowana w ciągu ostatnich 7 dni
- Dostępna jest nowa aktualizacja
+ Aktualizacja jest dostępna
+ Błąd podczas instalacji wtyczki
+ Błąd podczas odinstalowywania wtyczki
+ Error updating plugin
+ Zachowaj ustawienia wtyczki
+ Czy chcesz zachować ustawienia wtyczki do następnego użycia?
+ Wtyczka {0} została pomyślnie zainstalowana. Proszę ponownie uruchomić Flow.
+ Wtyczka {0} została pomyślnie odinstalowana. Proszę ponownie uruchomić Flow.
+ Wtyczka {0} została pomyślnie zaktualizowana. Proszę ponownie uruchomić Flow.
+ Plugin install
+ {0} autorstwa {1} {2}{2}Czy chcesz zainstalować tę wtyczkę?
+ Plugin uninstall
+ {0} autorstwa {1} {2}{2}Czy chcesz odinstalować tę wtyczkę?
+ Plugin update
+ {0} autorstwa {1} {2}{2}Czy chcesz zaktualizować tę wtyczkę?
+ Pobieranie wtyczki
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Instalowanie z nieznanego źródła
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local path
- Skórka
+ MotywWygląd
- Znajdź więcej skórek
+ Znajdź więcej motywówJak utworzyć motywCześć,ExplorerWyszukiwanie plików, folderów i zawartości plików
- Wyszukiwarka internetowa
+ Szukaj w sieciWyszukiwanie w Internecie z obsługą różnych wyszukiwarekProgramyUruchamiaj programy jako administrator lub inny użytkownik
@@ -223,7 +254,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
Folder motywówOtwórz folder motywówSchemat kolorów
- Domyślne ustawienie systemowe
+ Domyślny systemowyJasnyCiemnyEfekty dźwiękowe
@@ -241,10 +272,10 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
NiestandardowaZegarData
- Typ tła
+ Efekt tłaEfekt tła nie jest stosowany w podglądzie.Efekt tła obsługiwany od Windows 11 kompilacja 22000 i nowszych
- Brak
+ ŻadenAkrylMikaMica Alt
@@ -358,7 +389,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
Folder dziennikaWyczyść logiCzy na pewno chcesz usunąć wszystkie logi?
- Cache Folder
+ Folder pamięci podręcznejWyczyść pamięć podręcznąCzy na pewno chcesz usunąć wszystkie pamięci podręczne?Nie udało się wyczyścić części folderów i plików. Więcej informacji w pliku dziennika
@@ -366,31 +397,31 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
Lokalizacja danych użytkownikaUstawienia użytkownika i zainstalowane wtyczki są zapisywane w folderze danych użytkownika. Ta lokalizacja może się różnić w zależności od tego, czy aplikacja jest w trybie przenośnym, czy nie.Otwórz folder
- Advanced
+ ZaawansowanePoziom logowaniaDebugInfoUstawienia czcionki okna
- See more release notes on GitHub
- Failed to fetch release notes
- Please check your network connection or ensure GitHub is accessible
- Flow Launcher has been updated to {0}
- Click here to view the release notes
+ Zobacz więcej informacji o wydaniach na GitHub
+ Nie udało się pobrać informacji o wydaniach
+ Sprawdź swoje połączenie z siecią lub upewnij się, że GitHub jest dostępny
+ Flow Launcher został zaktualizowany do wersji {0}
+ Kliknij tutaj, aby zobaczyć informacje o wydaniuWybierz menedżer plików
- Learn more
+ Więcej informacjiProszę określić lokalizację pliku menedżera plików, którego używasz i dodać argumenty według potrzeb. Symbol "%d" reprezentuje ścieżkę katalogu do otwarcia, używaną w polu Arg dla Folderu oraz dla poleceń otwierających konkretne katalogi. Symbol "%f" reprezentuje ścieżkę pliku do otwarcia, używaną w polu Arg dla Pliku oraz dla poleceń otwierających konkretne pliki.
- Na przykład, jeśli menedżer plików używa polecenia takiego jak „totalcmd.exe /A c:\windows" do otwarcia katalogu c:\windows, Ścieżka Menedżera Plików będzie totalcmd.exe, a Argument dla Folderu będzie /A "%d". Niektóre menedżery plików, takie jak QTTabBar, mogą wymagać jedynie podania ścieżki; w takim przypadku użyj "%d" jako Ścieżki Menedżera Plików, a pozostałe pola pozostaw puste.
- Menadżer plików
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.
+ Menedżer plikówNazwa profiluŚcieżka menedżera plikówArg dla folderuArg dla pliku
- The file manager '{0}' could not be located at '{1}'. Would you like to continue?
- File Manager Path Error
+ Menedżer plików „{0}” nie został znaleziony w lokalizacji „{1}”. Czy chcesz kontynuować?
+ Błąd ścieżki do menedżera plikówDomyślna przeglądarka
@@ -418,7 +449,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
Nowe słowo kluczowe akcji jest takie samo jak poprzednie. Wybierz inneSukcesZakończono pomyślnie
- Failed to copy
+ Nie udało się skopiowaćWpisz słowa kluczowe uruchamiające wtyczkę (oddzielone spacją). Wpisz *, aby uruchamiać wtyczkę bez słów kluczowych.
@@ -426,21 +457,22 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
Podaj czas opóźnienia wyszukiwania (w ms) dla wtyczki. Pozostaw puste, aby użyć wartości domyślnej.
- Home Page
- Enable the plugin home page state if you like to show the plugin results when query is empty.
+ Strona główna
+ Włącz stan strony głównej wtyczki, jeśli chcesz wyświetlać wyniki wtyczki, gdy pole wyszukiwania jest puste.Skrót klawiszowy niestandardowych zapytaNaciśnij niestandardowy klawisz skrótu, aby otworzyć Flow Launcher i automatycznie wprowadzić określone zapytanie.PodglądSkrót klawiszowy jest niedostępny, musisz podać inny skrót klawiszowy
- Niepoprawny skrót klawiszowy
+ Hotkey is invalidAktualizujPrzypisywanie skrótówBieżący skrót klawiszowy jest niedostępny.Ten skrót klawiszowy jest zarezerwowany dla "{0}" i nie może być użyty. Proszę wybrać inny skrót.Ten skrót klawiszowy jest już używany przez "{0}". Jeśli naciśniesz "Nadpisz", zostanie on usunięty z "{0}".Naciśnij klawisze, których chcesz użyć dla tej funkcji.
+ Hotkey and action keyword are emptyNiestandardowy skrót zapytania
@@ -451,6 +483,7 @@ Jeśli dodasz prefiks '@' podczas wprowadzania skrótu, będzie on pasował do d
Skrót już istnieje, wprowadź nowy skrót lub edytuj istniejący.Skrót i/lub jego rozwinięcie jest puste.
+ Shortcut is invalidZapisz
@@ -483,13 +516,13 @@ Jeśli dodasz prefiks '@' podczas wprowadzania skrótu, będzie on pasował do d
2. Skopiuj poniższą wiadomość wyjątku
- File Manager Error
+ Błąd menedżera plików
- The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
+ Nie można znaleźć określonego menedżera plików. Sprawdź ustawienie Niestandardowy menedżer plików w Ustawienia > Ogólne.
Błąd
- An error occurred while opening the folder. {0}
- An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window
+ Wystąpił błąd podczas otwierania folderu. {0}
+ Wystąpił błąd podczas otwierania adresu URL w przeglądarce. Sprawdź konfigurację domyślnej przeglądarki internetowej w sekcji Ogólne okna ustawieńProszę czekać...
diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml
index 3e83c1924..fcdb14590 100644
--- a/Flow.Launcher/Languages/pt-br.xaml
+++ b/Flow.Launcher/Languages/pt-br.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesBuscar Plugin
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginLoja de Plugins
@@ -191,6 +201,28 @@
Nova VersãoEste plugin foi atualizado nos últimos 7 diasNova Atualização Disponível
+ Error installing plugin
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Downloading plugin
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathTema
@@ -383,7 +415,7 @@
Selecione o Gerenciador de ArquivosLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.Gerenciador de ArquivosNome do PerfilCaminho do Gerenciador de Arquivos
@@ -434,13 +466,14 @@
Aperte uma tecla de atalho personalizada para abrir o Flow Launcher e insira a pesquisa especificada automaticamente.PréviaAtalho indisponível, escolha outro
- Atalho de plugin inválido
+ Hotkey is invalidAtualizarBinding HotkeyCurrent hotkey is unavailable.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".Press the keys you want to use for this function.
+ Hotkey and action keyword are emptyAtalho Personalidado de Pesquisa
@@ -451,6 +484,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
O atalho já existe, por favor, digite um novo atalho ou edite o existente.Atalho e/ou sua expansão está vazia.
+ Shortcut is invalidSalvar
diff --git a/Flow.Launcher/Languages/pt-pt.xaml b/Flow.Launcher/Languages/pt-pt.xaml
index 1bb97f764..5d64d429f 100644
--- a/Flow.Launcher/Languages/pt-pt.xaml
+++ b/Flow.Launcher/Languages/pt-pt.xaml
@@ -8,9 +8,9 @@
Por favor, selecione o executável {0}
- O executável {0} é inválido.
+ Your selected {0} executable is invalid.
{2}{2}
- Clique Sim se quiser escolher o novo executável {0}. Clique Não se quiser descarregar {1}.
+ Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
Não foi possível definir o caminho do executável {0}. Experimente definir o caminho nas definições (desloque até ao fundo).Falha ao iniciar os plugins
@@ -135,8 +135,12 @@
Mostrar histórico na página inicialMáximo de resultados a mostrar na Página inicialEsta opção apenas pode ser editada se o plugin tiver suporte a Página inicial e se estiver ativo.
- Janela de pesquisa por cima
- Mostrar caixa de pesquisa por cima das outras janelas
+ Janela de pesquisa à frente
+ Sobrepõe a definição 'Sempre na frente' das outras aplicações e mostra Flow Launcher à frente de qualquer janela.
+ Reiniciar após modificar o plugin via Loja de plugins
+ Reiniciar Flow Launcher após instalar/desinstalar/atualizar um plugin via Loja de plugins
+ Mostrar aviso de origem desconhecida
+ Mostrar aviso ao instalar plugins de origens desconhecidasPesquisar plugins
@@ -175,6 +179,12 @@
Plugin: {0} - Falha ao remover o ficheiro de definições do plugin. Experimente remover manualmente.Falha ao limpar a cache do pluginPlugin: {0} - Falha ao remover os ficheiros em cache do plugin. Experimente remover manualmente.
+ {0} já modificado
+ Reinicie Flow Launcher antes de fazer mais alterações
+ Falha ao instalar {0}
+ Falha ao desinstalar {0}
+ Não foi possível encontrar plugin.json no ficheiro zip ou, então, o caminho {0} não existe.
+ Já existe um plugin com a mesma ID e versão ou, então, a versão instalada é superior à do plugin descarregado.Loja de plugins
@@ -190,6 +200,28 @@
Nova versãoEste plugin foi atualizado nos últimos 7 diasAtualização disponível
+ Erro ao instalar o plugin
+ Erro ao desinstalar o plugin
+ Erro ao atualizar o plugin
+ Manter definições
+ Deseja manter as definições do plugin para o caso de o voltar a instalar?
+ Plugin {0} instalado com sucesso. Por favor, reinicie o Flow Launcher.
+ Plugin {0} desinstalado com sucesso. Por favor, reinicie o Flow Launcher.
+ Plugin {0} atualizado com sucesso. Por favor, reinicie o Flow Launcher.
+ Instalador de plugins
+ {0} de {1} {2}{2}Gostaria de instalar este plugin?
+ Desinstalador de plugins
+ {0} de {1} {2}{2}Gostaria de desinstalar este plugin?
+ Atualização de plugins
+ {0} de {1} {2}{2}Gostaria de atualizar este plugin?
+ Descarregar plugin
+ Reiniciar automaticamente após instalar/desinstalar/atualizar plugins via Loja de plugins
+ O ficheiro zip não possui uma configuração "plugin.json" válida
+ Instalar a partir de fontes desconhecidas
+ Este plugin provém de uma origem desconhecida e pode apresentar riscos!{0}{0}Certifique-se de que a origem é fiável e que o plugin é seguro.{0}{0}Deseja, ainda assim, continuar?{0}{0}Pode desativar este aviso na secção Geral das definições.
+ Ficheiros Zip
+ Selecione o ficheiro Zip
+ Instalar plugin de um caminho localTema
@@ -381,7 +413,7 @@
Selecione o gestor de ficheirosSaber maisPor favor, especifique a localização do executável do seu gestor de ficheiros e adicione os argumentos necessários. "%d" representa o caminho do diretório a abrir, usado pelo argumento do campo Pasta e para comandos que abrem diretórios específicos. "%f" representa o caminho do ficheiro a abrir, usado pelo argumento do campo Ficheiro e para comandos que abrem ficheiros específicos.
- Por exemplo, se o gestor de ficheiros utilizar o comando "totalcmd.exe /A c:\windows" para abrir o diretório c:\windows , o caminho para o gestor de ficheiros será totalcmd. exe e os argumentos para a Pasta serão /A "%d". Alguns gestores de ficheiros, como QTTabBar podem apenas exigir que especifique o caminho. Para estes, deve utilizar "%d" como caminho para o gestor de ficheiros e deixar o resto dos campos em branco.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.Gestor de ficheirosNome do perfilCaminho do gestor de ficheiros
@@ -432,13 +464,14 @@
Prima uma tecla de atalho personalizada para abrir Flow Launcher e escrever automaticamente a pesquisa.AntevisãoTecla de atalho indisponível, por favor escolha outra
- Tecla de atalho inválida
+ Hotkey is invalidAtualizarAssociar tecla de atalhoA tecla de atalho atual não está disponível.Esta tecla de atalho está reservada para "{0}" e não pode ser usada. Por favor, escolha outra.Esta tecla de atalho está a ser utilizada por "{0}". Se escolher "Substituir", será removida de "{0}".Prima as teclas que pretende utilizar para esta função.
+ Hotkey and action keyword are emptyAtalho de consulta personalizada
@@ -449,6 +482,7 @@ Se adicionar o prefixo '@' durante a introdução do atalho, será utilizada qua
Este atallho já existe. Por favor escolha outro ou edite o existente.O atalho e/ou a expansão não estão preenchidos.
+ Shortcut is invalidGuardar
diff --git a/Flow.Launcher/Languages/ru.xaml b/Flow.Launcher/Languages/ru.xaml
index d52afae1f..aa4505580 100644
--- a/Flow.Launcher/Languages/ru.xaml
+++ b/Flow.Launcher/Languages/ru.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesПоиск плагина
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginМагазин плагинов
@@ -191,6 +201,28 @@
Новая версияЭтот плагин был обновлён за последние 7 днейДоступно новое обновление
+ Error installing plugin
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Downloading plugin
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathТема
@@ -383,7 +415,7 @@
Выбор менеджера файловLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.Файловый менеджерИмя профиляПуть к файловому менеджеру
@@ -434,13 +466,14 @@
Нажмите свою горячую клавишу, чтобы открыть Flow Launcher и автоматически ввести заданный запрос.ПредпросмотрГорячая клавиша недоступна. Пожалуйста, задайте новую
- Недействительная горячая клавиша плагина
+ Hotkey is invalidОбновитьBinding HotkeyCurrent hotkey is unavailable.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".Press the keys you want to use for this function.
+ Hotkey and action keyword are emptyЯрлык пользовательского запроса
@@ -451,6 +484,7 @@
Ярлык уже существует, пожалуйста, введите новый ярлык или измените существующий.Ярлык и/или его расширение пусты.
+ Shortcut is invalidСохранить
diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml
index 7aa6ecc65..f7a2ce05a 100644
--- a/Flow.Launcher/Languages/sk.xaml
+++ b/Flow.Launcher/Languages/sk.xaml
@@ -136,8 +136,12 @@
Zobraziť výsledky histórie na Domovskej stránkeMaximálny počet zobrazených výsledkov histórie na Domovskej stránkeÚprava je možná len vtedy, ak plugin podporuje funkciu Domovská stránka a Domovská stránka je povolená.
- Zobraziť vyhľadávacie okno navrchu
- Zobraziť okno vyhľadávania nad ostatnými oknami
+ Zobraziť vyhľadávacie okno v popredí
+ Prepíše nastavenie "Vždy na vrchu" ostatných programov a zobrazí navrchu Flow.
+ Reštartovať po úprave pluginu cez Repozitár pluginov
+ Automaticky reštartovať Flow Launcher po inštalácii/odinštalácii/aktualizáciu pluginu cez Repozitár pluginov
+ Zobraziť upozornenie na neznámy zdroj
+ Zobraziť upozornenie pri inštalácii z neznámych zdrojovVyhľadať plugin
@@ -176,6 +180,12 @@
Pluginy: {0} – Nepodarilo sa odstrániť súbory s nastaveniami pluginu, odstráňte ich manuálneNepodarilo sa odstrániť vyrovnávaciu pamäť pluginuPluginy: {0} – Nepodarilo sa odstrániť vyrovnávaciu pamäť pluginu, odstráňte ju manuálne
+ Plugin {0} už bol upravený
+ Pred vykonaním ďalších zmien reštartujte Flow Launcher
+ Nepodarilo sa nainštalovať {0}
+ Nepodarilo sa odinštalovať {0}
+ Súbor plugin.json sa nenašiel v rozbalenom zip súbore, alebo táto cesta {0} neexistuje
+ Plugin s rovnakým ID už existuje, alebo ide o vyššiu verziu ako stiahnutý pluginRepozitár pluginov
@@ -191,6 +201,28 @@
Nová verziaTento plugin bol aktualizovaný za posledných 7 dníK dispozícii je nová aktualizácia
+ Chyba inštalácie pluginu
+ Chyba odinštalácie pluginu
+ Chyba aktualizácie pluginu
+ Ponechať nastavenia pluginu
+ Chcete zachovať nastavenia pluginu na ďalšie použitie?
+ Plugin {0} bol úspešne nainštalovaný. Prosím, reštartuje Flow.
+ Plugin {0} bol úspešne odinštalovaný. Prosím, reštartuje Flow.
+ Plugin {0} bol úspešne aktualizovaný. Prosím, reštartuje Flow.
+ Inštalácia pluginu
+ {0} od {1} {2}{2}Chcete nainštalovať tento plugin?
+ Odinštalácia pluginu
+ {0} od {1} {2}{2}Chcete odinštalovať tento plugin?
+ Aktualizácia pluginu
+ {0} od {1} {2}{2}Chcete aktualizovať tento plugin?
+ Sťahovanie pluginu
+ Automaticky reštartovať po inštalácii/odinštalácii/aktualizáciu pluginov cez Repozitár pluginov
+ V zipe sa nenachádza platná konfigurácia plugin.json
+ Inštalácia z neznámeho zdroja
+ Tento plugin pochádza z neznámeho zdroja a môže predstavovať potenciálne riziká!{0}{0}Uistite sa, že viete, odkiaľ tento plugin pochádza, a že je bezpečný.{0}{0}Stále chcete pokračovať?{0}{0}(Toto upozornenie môžete vypnúť sekcii Všeobecné v nastaveniach)
+ Zip súbory
+ Vyberte zip súbor
+ Inštalovať plugin z miestneho úložiskaMotív
@@ -434,13 +466,14 @@
Stlačením vlastnej klávesovej skratky otvoríte Flow Launcher a automaticky vložíte zadaný dotaz.NáhľadKlávesová skratka je nedostupná, prosím, zadajte novú skratku
- Neplatná klávesová skratka pluginu
+ Klávesová skratka je neplatnáAktualizovaťPriradenie klávesovej skratkyAktuálna klávesová skratka nie je k dispozícii.Táto skratka je rezervovaná pre "{0}" a nemôže byť použitá. Prosím, vyberte inú skratku.Táto skratka sa používa pre "{0}". Ak stlačíte "Prepísať", odstráni sa pre "{0}".Stlačte kláves, ktorý chcete nastaviť pre túto funkciu.
+ Klávesová skratka a aktivačný príkaz sú prázdneKlávesová skratka vlastného dopytu
@@ -451,6 +484,7 @@ Ak pri zadávaní skratky pred ňu pridáte "@", bude sa zhodovať s
Skratka už existuje, zadajte novú skratku alebo upravte existujúcu.Skratka a/alebo jej celé znenie je prázdne.
+ Skratka je neplatnáUložiť
diff --git a/Flow.Launcher/Languages/sr.xaml b/Flow.Launcher/Languages/sr.xaml
index ae7aa7af2..16bd5aeb8 100644
--- a/Flow.Launcher/Languages/sr.xaml
+++ b/Flow.Launcher/Languages/sr.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesSearch Plugin
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginPlugin Store
@@ -191,6 +201,28 @@
New VersionThis plugin has been updated within the last 7 daysNew Update is Available
+ Error installing plugin
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Downloading plugin
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathTema
@@ -383,7 +415,7 @@
Select File ManagerLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.File ManagerProfile NameFile Manager Path
@@ -434,13 +466,14 @@
Press a custom hotkey to open Flow Launcher and input the specified query automatically.PregledPrečica je nedustupna, molim Vas izaberite drugu prečicu
- Nepravlna prečica za plugin
+ Hotkey is invalidAžurirajBinding HotkeyCurrent hotkey is unavailable.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".Press the keys you want to use for this function.
+ Hotkey and action keyword are emptyCustom Query Shortcut
@@ -451,6 +484,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
Shortcut already exists, please enter a new Shortcut or edit the existing one.Shortcut and/or its expansion is empty.
+ Shortcut is invalidSačuvaj
diff --git a/Flow.Launcher/Languages/tr.xaml b/Flow.Launcher/Languages/tr.xaml
index 5c118be01..032891900 100644
--- a/Flow.Launcher/Languages/tr.xaml
+++ b/Flow.Launcher/Languages/tr.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesEklenti Ara
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginEklenti Mağazası
@@ -191,6 +201,28 @@
Yeni SürümBu eklenti son 7 gün içerisinde güncellenmiş.Yeni Bir Güncelleme Mevcut
+ Error installing plugin
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Downloading plugin
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathTemalar
@@ -383,7 +415,7 @@
Dosya Yöneticisi SeçenekleriDaha fazla bilgiPlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.Dosya YöneticisiProfil AdıDosya Yöneticisi Yolu
@@ -434,13 +466,14 @@
Flow Launcher'ı açıp otomatik olarak girdiğiniz sorguyu aratması için bir kısayol atayın.ÖnizlemeKısayol tuşu kullanılamıyor, lütfen başka bir kombinasyon girin.
- Geçersiz eklenti kısayol tuşu
+ Hotkey is invalidGüncelleKısayol AtanıyorKullanılamıyorBu kısayol "{0}" için ayrılmıştır, lütfen başka bir kısayol deneyin.Bu kısayol zaten "{0}" için kullanılıyor. Eğer "Üstüne Yaz"'ı seçerseniz, "{0}" sorgusu bu kısayol ile kullanılamayacak.Bu işleve atamak istediğiniz kısayol tuşlarına basın.
+ Hotkey and action keyword are emptyÖzel Kısaltmalar
@@ -449,6 +482,7 @@
Anahtar kelime zaten mevcut. Yeni bir kısaltma girin veya mevcut kısaltmayı düzenleyin.Kısaltma ve/veya sorgu eksik.
+ Shortcut is invalidKaydet
diff --git a/Flow.Launcher/Languages/uk-UA.xaml b/Flow.Launcher/Languages/uk-UA.xaml
index a8ee67653..c5dcd3e28 100644
--- a/Flow.Launcher/Languages/uk-UA.xaml
+++ b/Flow.Launcher/Languages/uk-UA.xaml
@@ -8,9 +8,9 @@
Будласка оберіть виконуваник {0}
- Your selected {0} executable is invalid.
+ Ви вибрали невірний виконуваний файл {0}.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ Щоб знову вибрати виконуваний файл {0}, натисніть «Так». Натисніть «Ні», щоб завантажити {1}
Не вдається встановити шлях до виконуваника {0}, будласка спробуйте в налаштуваннях Flow (прокрутіть вниз до кінця).Невдача ініціалізації плагінів
@@ -18,7 +18,7 @@
Не вдалося зареєструвати гарячу клавішу "{0}". Можливо, гаряча клавіша використовується іншою програмою. Змініть її на іншу гарячу клавішу або вийдіть з програми, де вона використовується.
- Failed to unregister hotkey "{0}". Please try again or see log for details
+ Не вдалося скасувати реєстрацію гарячої клавіші «{0}». Спробуйте ще раз або перегляньте журнал для отримання подробицьFlow LauncherНе вдалося запустити {0}Невірний формат файлу плагіна Flow Launcher
@@ -42,8 +42,8 @@
Режим гриПризупинити використання гарячих клавіш.Скидання позиції
- Reset search window position
- Type here to search
+ Скинути положення вікна пошуку
+ Напишіть тут, аби знайтиНалаштування
@@ -51,12 +51,12 @@
Портативний режимЗберігати всі налаштування і дані користувача в одній теці (буде корисно при видаленні дисків або хмарних сервісах).Запускати Flow Launcher при запуску системи
- 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
+ Для швидшого запуску використовуйте завдання при вході в систему, а не після запуску
+ Після видалення, вам необхідно вручну видалити це завдання (Flow.Launcher Startup) через планувальник завданьПомилка запуску налаштування під час запускуСховати Flow Launcher, якщо втрачено фокусНе повідомляти про доступні нові версії
- Search Window Location
+ Розташування вікна пошукуПам'ятати останню позиціюМонітор з курсором мишіМонітор зі сфокусованим вікном
@@ -74,8 +74,8 @@
Зберегти останній запитВибрати останній запитОчистити останній запит
- Preserve Last Action Keyword
- Select Last Action Keyword
+ Зберігати останнє ключове слово дії
+ Вибрати ключове слово останньої діїМаксимальна кількість результатівВи також можете швидко налаштувати цей параметр за допомогою клавіш CTRL+Плюс чи CTRL+Мінус.Ігнорувати гарячі клавіші в повноекранному режимі
@@ -106,38 +106,42 @@
Завжди переглядатиЗавжди відкривати панель попереднього перегляду при активації Flow. Натисніть {0}, щоб переключити попередній перегляд.Ефект тіні не дозволено, коли поточна тема має ефект розмиття
- Search Delay
- Adds a short delay while typing to reduce UI flicker and result load. Recommended if your typing speed is average.
- Enter the wait time (in ms) until input is considered complete. This can only be edited if Search Delay is enabled.
- Default Search Delay Time
- Wait time before showing results after typing stops. Higher values wait longer. (ms)
- Information for Korean IME user
+ Затримка пошуку
+ Додає невелику затримку під час набору тексту, щоб зменшити мерехтіння інтерфейсу та навантаження на результати. Рекомендується, якщо у вас середня швидкість друкування.
+ Введіть час очікування (в мілісекундах) до завершення введення. Цей параметр можна редагувати лише в разі ввімкнення функції «Затримка пошуку».
+ Типовий час затримки пошуку
+ Час очікування перед відображенням результатів після завершення введення тексту. Чим вище значення, тим довше очікування. (мс)
+ Інформація для користувачів корейської IME
- The Korean input method used in Windows 11 may cause some issues in Flow Launcher.
+ Корейський метод введення, який використовується у Windows 11, може спричинити деякі проблеми в Flow Launcher.
- If you experience any problems, you may need to enable "Use previous version of Korean IME".
+ Якщо у вас виникли проблеми, можливо, вам доведеться ввімкнути параметр «Використовувати попередню версію корейського IME».
- Open Setting in Windows 11 and go to:
+ Відкрийте налаштування у Windows 11 і перейдіть до:
- Time & Language > Language & Region > Korean > Language Options > Keyboard - Microsoft IME > Compatibility,
+ Час і мова > Мова і регіон > Корейська > Параметри мови > Клавіатура - Microsoft IME > Сумісність,
- and enable "Use previous version of Microsoft IME".
+ та увімкніть параметр «Використовувати попередню версію Microsoft IME».
- Open Language and Region System Settings
- Opens the Korean IME setting location. Go to Korean > Language Options > Keyboard - Microsoft IME > Compatibility
+ Відкрити налаштування системи мови та регіону
+ Відкриває вікно налаштувань корейського IME. Перейдіть до Корейської > Параметри мови > Клавіатура - Microsoft IME > СумісністьВідкрити
- Use Previous Korean IME
- You can change the Previous Korean IME settings directly from here
- Home Page
- Show home page results when query text is empty.
- Show History Results in Home Page
- Maximum History Results Shown in Home Page
- This can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Використовувати попередній корейський IME
+ Ви можете змінити попередні налаштування корейського IME безпосередньо звідси.
+ Головна сторінка
+ Показувати результати на головній сторінці, коли текст запиту порожній.
+ Показати результати історії на головній
+ Максимальна кількість результатів історії, що показуються на головній
+ Це можна редагувати тільки в тому випадку, якщо плагін підтримує функцію «Головна сторінка» і вона ввімкнена.
+ Показувати вікно пошуку на передньому плані
+ Перекриває налаштування «Завжди зверху» інших програм і виводить Flow на передній план.
+ Перезапустіть після модифікації плагіну через Магазин плагінів
+ Автоматично перезапускати Flow Launcher після встановлення / видалення / оновлення плагіну через Магазин плагінів
+ Показувати попередження про невідоме джерело
+ Показувати попередження під час встановлення плагінів із невідомих джерелПлагін для пошуку
@@ -154,13 +158,13 @@
Поточна гаряча клавішаНова гаряча клавішаЗмінити гарячі клавіши
- Plugin search delay time
- Change Plugin Search Delay Time
- Advanced Settings:
+ Час затримки пошуку плагіну
+ Змінити час затримки пошуку плагінів
+ Додаткові налаштування:УвімкненоПріоритет
- Search Delay
- Home Page
+ Затримка пошуку
+ Головна сторінкаПоточний пріоритетНовий пріоритетПріоритет
@@ -172,10 +176,16 @@
ВерсіяСайтВидалити
- Fail to remove plugin settings
- Plugins: {0} - Fail to remove plugin settings files, please remove them manually
- Fail to remove plugin cache
- Plugins: {0} - Fail to remove plugin cache files, please remove them manually
+ Не вдалося видалити налаштування плагіну
+ Плагіни: {0} — Не вдалося видалити файли налаштувань плагінів, видаліть їх вручну.
+ Не вдалося видалити кеш плагіну
+ Плагіни: {0} — Не вдалося видалити файли кешу плагінів, видаліть їх вручну
+ {0} вже змінено
+ Перезапустіть Flow перед тим, як вносити будь-які подальші зміни.
+ Не вдалося встановити {0}
+ Не вдалося видалити {0}
+ Не вдалося знайти файл plugin.json у розпакованому zip-файлі або цей шлях {0} не існує.
+ Вже існує плагін з таким самим ідентифікатором та версією, або версія цього плагіну вища за версію завантаженого.Магазин плагінів
@@ -191,6 +201,28 @@
Нова версіяЦей плагін було оновлено протягом останніх 7 днівДоступне нове оновлення
+ Помилка під час встановлення плагіна
+ Помилка видалення плагіну
+ Помилка під час оновлення плагіну
+ Зберегти налаштування плагіну
+ Ви хочете зберегти налаштування плагіну для наступного використання?
+ Плагін {0} успішно встановлено. Будь ласка, перезапустіть Flow.
+ Плагін {0} успішно видалено. Будь ласка, перезапустіть Flow.
+ Плагін {0} успішно оновлено. Будь ласка, перезапустіть Flow.
+ Встановлення плагіна
+ {0} від {1} {2}{2}Бажаєте встановити цей плагін?
+ Видалення плагіну
+ {0} від {1} {2}{2}Бажаєте видалити цей плагін?
+ Оновлення плагіну
+ {0} від {1} {2}{2}Бажаєте оновити цей плагін?
+ Завантаження плагіну
+ Автоматично перезапускати після встановлення / видалення / оновлення плагінів у магазині плагінів
+ Zip-файл не має дійсної конфігурації plugin.json.
+ Встановлення з невідомого джерела
+ Цей плагін походить із невідомого джерела та може містити потенційні ризики!{0}{0}Переконайтеся, що ви знаєте, звідки походить він походить, і що він є безпечним.{0}{0}Ви все одно хочете продовжити?{0}{0}(Ви можете вимкнути це попередження в загальному розділі вікна налаштувань)
+ Zip-файли
+ Виберіть zip-файл
+ Встановити плагін із локального шляхуТема
@@ -212,9 +244,9 @@
Шрифт заголовка результатуШрифт підзаголовка результатуСкинути
- Reset to the recommended font and size settings.
- Import Theme Size
- If a size value intended by the theme designer is available, it will be retrieved and applied.
+ Скинути до рекомендованих налаштувань шрифту та розміру.
+ Імпортувати розмір теми
+ Якщо значення розміру, передбачене дизайнером теми, доступне, воно буде отримане та застосоване.ПідлаштуватиВіконний режимПрозорість
@@ -241,21 +273,21 @@
КористувацькаГодинникДата
- Backdrop Type
- The backdrop effect is not applied in the preview.
- Backdrop supported starting from Windows 11 build 22000 and above
+ Тип тла
+ Ефект тла не застосовується у передпоказі.
+ Тло підтримується починаючи з Windows 11 версії 22000 і вищеНема
- Acrylic
- Mica
- Mica Alt
- This theme supports two (light/dark) modes.
+ Акрил
+ Слюда
+ Слюда (альтернатива)
+ Ця тема підтримує два (світлу/темну) режими.Ця тема підтримує розмитий прозорий фон.
- Show placeholder
- Display placeholder when query is empty
- Placeholder text
- Change placeholder text. Input empty will use: {0}
- Fixed Window Size
- The window size is not adjustable by dragging.
+ Показати заповнювач
+ Показувати заповнювач, коли запит порожній
+ Текст заповнювача
+ Змінення тексту заповнювача. Ввід буде використовувати: {0}
+ Фіксований розмір вікна
+ Розмір вікна не можна регулювати шляхом перетягування.Гаряча клавіша
@@ -315,9 +347,9 @@
Використання іконок Segoe FluentВикористання іконок Segoe Fluent Icons для результатів запитів, де це підтримуєтьсяНатисніть клавішу
- Show Result Badges
- For supported plugins, badges are displayed to help distinguish them more easily.
- Show Result Badges for Global Query Only
+ Показувати значки результатів
+ Для підтримуваних плагінів показуються значки для легшого розрізнення.
+ Показувати значки результатів тільки для глобального запитуHTTP-проксі
@@ -358,39 +390,39 @@
Тека журналуОчистити журналиВи впевнені, що хочете видалити всі журнали?
- Cache Folder
- Clear Caches
- Are you sure you want to delete all caches?
- Failed to clear part of folders and files. Please see log file for more information
+ Кеш теки
+ Очистити кеш
+ Дійсно хочете видалити весь кеш?
+ Не вдалося очистити частину тек і файлів. Перегляньте файл журналу для отримання додаткової інформаціїЧаклунРозташування даних користувачаНалаштування користувача та встановлені плагіни зберігаються у теці даних користувача. Це місце може змінюватися залежно від того, чи перебуває програма в портативному режимі, чи ні.Відкрити теку
- Advanced
- Log Level
- Debug
- Info
- Setting Window Font
+ Розширені
+ Рівень журналювання
+ Налагодження
+ Інформація
+ Встановлення шрифту вікна
- See more release notes on GitHub
- Failed to fetch release notes
- Please check your network connection or ensure GitHub is accessible
- Flow Launcher has been updated to {0}
- Click here to view the release notes
+ Дізнатися більше про версію на GitHub
+ Не вдалося отримати примітки до випуску
+ Перевірте своє мережеве з'єднання або переконайтеся, що GitHub є доступним
+ Flow Launcher було оновлено до {0}
+ Натисніть тут, щоби переглянути примітки до випускуВиберіть файловий менеджер
- Learn more
- Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ Докладніше
+ Вкажіть розташування файлу у файловому менеджері, який ви використовуєте, та додайте необхідні аргументи. «%d» позначає шлях до каталогу, який потрібно відкрити, і використовується в полі «Аргумент для теки» та для команд, що відкривають певні каталоги. «%f» позначає шлях до файлу, який потрібно відкрити, і використовується в полі «Аргумент для файлу» та для команд, що відкривають певні файли.
+ Наприклад, якщо файловий менеджер використовує таку команду, як «totalcmd.exe /A c:\windows» для відкриття каталогу c:\windows, шлях файлового менеджера буде totalcmd.exe, а аргумент для теки — /A «%d». Деякі файлові менеджери, такі як QTTabBar, можуть вимагати лише вказати шлях, у цьому випадку використовуйте «%d» як шлях файлового менеджера і залиште решту полів порожніми.Файловий менеджерІм'я профілюШлях до файлового менеджераАргумент для папкиАргумент для файлу
- The file manager '{0}' could not be located at '{1}'. Would you like to continue?
- File Manager Path Error
+ Не вдалося знайти файловий менеджер «{0}» за адресою «{1}». Чи бажаєте продовжити?
+ Помилка шляху до файлового менеджераВеб-браузер за замовчуванням
@@ -415,32 +447,33 @@
Не вдалося знайти вказаний плагінНова гаряча клавіша не може бути порожньоюНова гаряча клавіша вже використовується іншим плагіном. Будь ласка, вкажіть нову
- This new Action Keyword is the same as old, please choose a different one
+ Це нове ключове слово дії є таким самим, як і старе, виберіть інше.УспішноУспішно завершено
- Failed to copy
- Enter the action keywords you like to use to start the plugin and use whitespace to divide them. Use * if you don't want to specify any, and the plugin will be triggered without any action keywords.
+ Не вдалося скопіювати
+ Введіть ключові слова дій, які ви хочете використовувати для запуску плагіну, й розділіть їх пробілами. Якщо ви не хочете вказувати жодних ключових слів, використовуйте *, і плагін буде запускатися без них.
- Search Delay Time Setting
- Input the search delay time in ms you like to use for the plugin. Input empty if you don't want to specify any, and the plugin will use default search delay time.
+ Налаштування часу затримки пошуку
+ Введіть час затримки пошуку в мілісекундах, який ви хочете використовувати для плагіну. Якщо ви не хочете вказувати час затримки, залиште поле порожнім, і плагін буде використовувати типовий час затримки пошуку.
- Home Page
- Enable the plugin home page state if you like to show the plugin results when query is empty.
+ Головна сторінка
+ Увімкніть стан головної сторінки плагіну, якщо ви хочете показувати його результати, коли запит порожній.Задані гарячі клавіші для запитівНатисніть спеціальну гарячу клавішу, щоб відкрити Flow Launcher і автоматично ввести вказаний запит.ПереглянутиГаряча клавіша недоступна. Будь ласка, вкажіть нову
- Недійсна гаряча клавіша плагіна
+ Гаряча клавіша недійснаОновитиПрив'язка галавішіПоточна галавіша недоступна.Ця галавіша зарезервована для «{0}» і не може бути використана. Будласка, виберіть іншу галавішу.Ця галавіша вже використовується «{0}». Якщо ви натиснете «Перезаписати», її буде вилучено з «{0}».Натисніть клавіші, які ви хочете використовувати для цієї функції.
+ Гаряча клавіша та ключове слово дії порожніВласне скорочення запиту
@@ -451,6 +484,7 @@
Скорочення вже існує, будь ласка, введіть нове або відредагуйте існуюче.Скорочення та/або його розширення є порожнім.
+ Комбінація клавіш недійсна.Зберегти
@@ -478,18 +512,18 @@
Звіт успішно відправленоНе вдалося відправити звітСтався збій в додатку Flow Launcher
- Please open new issue in
- 1. Upload log file: {0}
- 2. Copy below exception message
+ Створіть нову проблему в
+ 1. Завантажте файл журналу: {0}
+ 2. Скопіюйте нижче повідомлення про виняток
- File Manager Error
+ Помилка файлового менеджера
- The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
+ Вказаний файловий менеджер не знайдено. Перевірте налаштування вашого файлового менеджера в розділі Налаштування > Загальні.
Помилка
- An error occurred while opening the folder. {0}
- An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window
+ Під час відкриття теки сталася помилка. {0}
+ Під час відкриття URL-адреси в браузері сталася помилка. Перевірте налаштування типового веббраузера у розділі «Загальні» вікна налаштувань.Будь ласка, зачекайте...
diff --git a/Flow.Launcher/Languages/vi.xaml b/Flow.Launcher/Languages/vi.xaml
index a2875f3c0..2a8769863 100644
--- a/Flow.Launcher/Languages/vi.xaml
+++ b/Flow.Launcher/Languages/vi.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesPlugin tìm kiếm
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded pluginTải tiện ích mở rộng
@@ -191,6 +201,28 @@
Phiên bản mớiPlugin này đã được cập nhật trong vòng 7 ngày quaĐã có bản cập nhật mới
+ Lỗi cài đặt plugin
+ Lỗi cài đặt plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ Plugin đang được tải
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Cài đặt từ một nguồn không xác định
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local pathGiao Diện
@@ -385,7 +417,7 @@
Chọn trình quản lý tệpLearn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.Trình quản lý ngày thángTên hồ sơĐường dẫn quản lý tệp
@@ -436,13 +468,14 @@
Nhấn phím nóng tùy chỉnh để mở Flow Launcher và tự động nhập truy vấn được chỉ định.Xem trướcTổ hợp phím không khả dụng, vui lòng chọn tổ hợp phím khác
- Tổ hợp phím plugin không hợp lệ
+ Hotkey is invalidCập nhậtBinding HotkeyPhím nóng hiện tại không có sẵn.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".Press the keys you want to use for this function.
+ Hotkey and action keyword are emptyPhím tắt truy vấn tùy chỉnh
@@ -455,6 +488,7 @@
Phím tắt đã tồn tại, vui lòng nhập Phím tắt mới hoặc chỉnh sửa phím tắt hiện có.Phím tắt và/hoặc phần mở rộng của nó trống.
+ Shortcut is invalidLưu
diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml
index 698eee1e3..0f5e1e165 100644
--- a/Flow.Launcher/Languages/zh-cn.xaml
+++ b/Flow.Launcher/Languages/zh-cn.xaml
@@ -136,8 +136,12 @@
在主页中显示历史记录在主页显示的最大历史结果数这只能在插件支持主页功能和主页启用时进行编辑。
- Show Search Window at Topmost
- Show search window above other windows
+ 将搜索窗口置于顶层
+ 覆盖其他“总是在顶部”的程序窗口并在最顶层的位置显示 Flow Launcher 搜索窗口。
+ 通过插件商店修改插件后重启
+ 通过插件商店安装/卸载/更新插件后自动重启 Flow Launcher
+ 显示未知来源警告
+ 安装来自未知来源的插件时显示警告搜索插件
@@ -176,6 +180,12 @@
插件:{0} - 移除插件设置文件失败,请手动删除移除插件缓存失败插件:{0} - 移除插件设置文件失败,请手动删除
+ {0} 已修改
+ 请在进行任何进一步更改之前重新启动 Flow
+ 安装 {0} 失败
+ 卸载 {0} 失败
+ 无法从提取的zip文件中找到plugin.json,或者此路径 {0} 不存在
+ 已存在相同ID和版本的插件,或者存在版本大于此下载的插件插件商店
@@ -191,6 +201,28 @@
新版本此插件在过去7天内有更新有可用的更新
+ 安装插件时出错
+ 卸载插件时出错
+ 更新插件时出错
+ 保留插件设置
+ 你想要保留插件设置以便下一次的使用吗?
+ 成功安装插件{0}。请重新启动 Flow Launcher。
+ 成功卸载插件{0}。请重新启动 Flow Launcher。
+ 成功更新插件{0}。请重新启动 Flow Launcher。
+ 插件安装
+ {0} 作者: {1} {2}{2}您想要安装这个插件吗?
+ 插件卸载
+ {0} 作者: {1} {2}{2}您想要卸载这个插件吗?
+ 插件更新
+ {0} 作者: {1} {2}{2}您想要更新这个插件吗?
+ 下载插件
+ 插件商店安装/卸载/更新插件后自动重启
+ Zip 文件没有有效的 plugin.json 配置
+ 从未知源安装
+ 您正在从未知源安装此插件,它可能包含潜在风险!{0}{0}请确保您了解来源以及安全性。{0}{0}您想要继续吗?{0}{0}(您可以通过设置关闭此警告)
+ Zip 文件
+ 请选择 zip 文件
+ 从本地路径安装插件主题
@@ -434,13 +466,14 @@
输入一个自定义的快捷键来打开 Flow Launcher 并自动输入指定的查询。预览热键不可用,请选择一个新的热键
- 插件热键不合法
+ 热键无效更新绑定热键当前热键不可用。此热键为“{0}”保留,无法使用。请选择其他热键。此热键已被“{0}”使用。如果按“覆盖”,则会将其从“{0}”中删除。按下您想要用于此功能的键。
+ 热键和操作关键字为空自定义查询捷径
@@ -451,6 +484,7 @@
捷径已存在,请输入一个新的或者编辑已有的。捷径及其展开均不能为空。
+ 快捷键无效保存
diff --git a/Flow.Launcher/Languages/zh-tw.xaml b/Flow.Launcher/Languages/zh-tw.xaml
index 0f6ad3f5b..959f75f97 100644
--- a/Flow.Launcher/Languages/zh-tw.xaml
+++ b/Flow.Launcher/Languages/zh-tw.xaml
@@ -10,7 +10,7 @@
Your selected {0} executable is invalid.
{2}{2}
- Click yes if you would like select the {0} executable agian. Click no if you would like to download {1}
+ 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
@@ -136,8 +136,12 @@
Show History Results in Home PageMaximum History Results Shown in Home PageThis can only be edited if plugin supports Home feature and Home Page is enabled.
- Show Search Window at Topmost
- Show search window above other windows
+ Show Search Window at Foremost
+ Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.
+ Restart after modifying plugin via Plugin Store
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugin Store
+ Show unknown source warning
+ Show warning when installing plugins from unknown sourcesSearch Plugin
@@ -176,6 +180,12 @@
Plugins: {0} - Fail to remove plugin settings files, please remove them manuallyFail to remove plugin cachePlugins: {0} - Fail to remove plugin cache files, please remove them manually
+ {0} modified already
+ Please restart Flow before making any further changes
+ Fail to install {0}
+ Fail to uninstall {0}
+ Unable to find plugin.json from the extracted zip file, or this path {0} does not exist
+ A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin插件商店
@@ -191,6 +201,28 @@
New VersionThis plugin has been updated within the last 7 daysNew Update is Available
+ 安裝插件時發生錯誤
+ Error uninstalling plugin
+ Error updating plugin
+ Keep plugin settings
+ 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.
+ Plugin {0} successfully updated. Please restart Flow.
+ Plugin install
+ {0} by {1} {2}{2}Would you like to install this plugin?
+ Plugin uninstall
+ {0} by {1} {2}{2}Would you like to uninstall this plugin?
+ Plugin update
+ {0} by {1} {2}{2}Would you like to update this plugin?
+ 正在下載擴充功能
+ Automatically restart after installing/uninstalling/updating plugins in plugin store
+ Zip file does not have a valid plugin.json configuration
+ Installing from an unknown source
+ This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)
+ Zip files
+ Please select zip file
+ Install plugin from local path主題
@@ -383,7 +415,7 @@
選擇檔案管理器Learn morePlease specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.
- For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fileds blank.
+ For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.檔案管理器檔案名稱檔案管理器路徑
@@ -434,13 +466,14 @@
Press a custom hotkey to open Flow Launcher and input the specified query automatically.預覽快捷鍵不存在,請設定一個新的快捷鍵
- 擴充功能熱鍵無法使用
+ Hotkey is invalid更新Binding HotkeyCurrent hotkey is unavailable.This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".Press the keys you want to use for this function.
+ Hotkey and action keyword are emptyCustom Query Shortcut
@@ -451,6 +484,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
Shortcut already exists, please enter a new Shortcut or edit the existing one.Shortcut and/or its expansion is empty.
+ Shortcut is invalid儲存
diff --git a/Flow.Launcher/MainWindow.xaml.cs b/Flow.Launcher/MainWindow.xaml.cs
index f4d7ad8eb..0c8fb4d02 100644
--- a/Flow.Launcher/MainWindow.xaml.cs
+++ b/Flow.Launcher/MainWindow.xaml.cs
@@ -20,6 +20,7 @@ using Flow.Launcher.Infrastructure;
using Flow.Launcher.Infrastructure.Hotkey;
using Flow.Launcher.Infrastructure.Image;
using Flow.Launcher.Infrastructure.UserSettings;
+using Flow.Launcher.Plugin;
using Flow.Launcher.Plugin.SharedCommands;
using Flow.Launcher.ViewModel;
using Microsoft.Win32;
@@ -43,6 +44,9 @@ namespace Flow.Launcher
#region Private Fields
+ // Class Name
+ private static readonly string ClassName = nameof(MainWindow);
+
// Dependency Injection
private readonly Settings _settings;
private readonly Theme _theme;
@@ -91,8 +95,8 @@ namespace Flow.Launcher
InitSoundEffects();
DataObject.AddPastingHandler(QueryTextBox, QueryTextBox_OnPaste);
- ModernWpf.ThemeManager.Current.ActualApplicationThemeChanged += ThemeManager_ActualApplicationThemeChanged;
SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;
+ _viewModel.ActualApplicationThemeChanged += ViewModel_ActualApplicationThemeChanged;
}
#endregion
@@ -101,7 +105,7 @@ namespace Flow.Launcher
#pragma warning disable VSTHRD100 // Avoid async void methods
- private void ThemeManager_ActualApplicationThemeChanged(ModernWpf.ThemeManager sender, object args)
+ private void ViewModel_ActualApplicationThemeChanged(object sender, ActualApplicationThemeChangedEventArgs args)
{
_ = _theme.RefreshFrameAsync();
}
@@ -283,6 +287,10 @@ namespace Flow.Launcher
break;
case nameof(Settings.Language):
UpdateNotifyIconText();
+ if (_settings.ShowHomePage && _viewModel.QueryResultsSelected() && string.IsNullOrEmpty(_viewModel.QueryText))
+ {
+ _viewModel.QueryResults();
+ }
break;
case nameof(Settings.Hotkey):
UpdateNotifyIconText();
@@ -1251,14 +1259,21 @@ namespace Flow.Launcher
private void QueryTextBox_OnPaste(object sender, DataObjectPastingEventArgs e)
{
- var isText = e.SourceDataObject.GetDataPresent(DataFormats.UnicodeText, true);
- if (isText)
+ try
{
- var text = e.SourceDataObject.GetData(DataFormats.UnicodeText) as string;
- text = text.Replace(Environment.NewLine, " ");
- DataObject data = new DataObject();
- data.SetData(DataFormats.UnicodeText, text);
- e.DataObject = data;
+ var isText = e.SourceDataObject.GetDataPresent(DataFormats.UnicodeText, true);
+ if (isText)
+ {
+ var text = e.SourceDataObject.GetData(DataFormats.UnicodeText) as string;
+ text = text.Replace(Environment.NewLine, " ");
+ DataObject data = new DataObject();
+ data.SetData(DataFormats.UnicodeText, text);
+ e.DataObject = data;
+ }
+ }
+ catch (Exception ex)
+ {
+ App.API.LogException(ClassName, "Failed to paste text", ex);
}
}
@@ -1351,7 +1366,7 @@ namespace Flow.Launcher
_notifyIcon?.Dispose();
animationSoundWMP?.Close();
animationSoundWPF?.Dispose();
- ModernWpf.ThemeManager.Current.ActualApplicationThemeChanged -= ThemeManager_ActualApplicationThemeChanged;
+ _viewModel.ActualApplicationThemeChanged -= ViewModel_ActualApplicationThemeChanged;
SystemEvents.PowerModeChanged -= SystemEvents_PowerModeChanged;
}
diff --git a/Flow.Launcher/ProgressBoxEx.xaml.cs b/Flow.Launcher/ProgressBoxEx.xaml.cs
index 840c8bade..119463348 100644
--- a/Flow.Launcher/ProgressBoxEx.xaml.cs
+++ b/Flow.Launcher/ProgressBoxEx.xaml.cs
@@ -19,32 +19,32 @@ namespace Flow.Launcher
public static async Task ShowAsync(string caption, Func, Task> reportProgressAsync, Action cancelProgress = null)
{
- ProgressBoxEx prgBox = null;
+ ProgressBoxEx progressBox = null;
try
{
if (!Application.Current.Dispatcher.CheckAccess())
{
await Application.Current.Dispatcher.InvokeAsync(() =>
{
- prgBox = new ProgressBoxEx(cancelProgress)
+ progressBox = new ProgressBoxEx(cancelProgress)
{
Title = caption
};
- prgBox.TitleTextBlock.Text = caption;
- prgBox.Show();
+ progressBox.TitleTextBlock.Text = caption;
+ progressBox.Show();
});
}
else
{
- prgBox = new ProgressBoxEx(cancelProgress)
+ progressBox = new ProgressBoxEx(cancelProgress)
{
Title = caption
};
- prgBox.TitleTextBlock.Text = caption;
- prgBox.Show();
+ progressBox.TitleTextBlock.Text = caption;
+ progressBox.Show();
}
- await reportProgressAsync(prgBox.ReportProgress).ConfigureAwait(false);
+ await reportProgressAsync(progressBox.ReportProgress).ConfigureAwait(false);
}
catch (Exception e)
{
@@ -58,12 +58,12 @@ namespace Flow.Launcher
{
await Application.Current.Dispatcher.InvokeAsync(() =>
{
- prgBox?.Close();
+ progressBox?.Close();
});
}
else
{
- prgBox?.Close();
+ progressBox?.Close();
}
}
}
diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs
index 6e82032ff..d865a087b 100644
--- a/Flow.Launcher/PublicAPIInstance.cs
+++ b/Flow.Launcher/PublicAPIInstance.cs
@@ -14,23 +14,24 @@ using System.Windows;
using System.Windows.Media;
using CommunityToolkit.Mvvm.DependencyInjection;
using Flow.Launcher.Core;
+using Flow.Launcher.Core.ExternalPlugins;
using Flow.Launcher.Core.Plugin;
using Flow.Launcher.Core.Resource;
-using Flow.Launcher.Core.ExternalPlugins;
using Flow.Launcher.Core.Storage;
using Flow.Launcher.Helper;
using Flow.Launcher.Infrastructure;
-using Flow.Launcher.Infrastructure.Http;
using Flow.Launcher.Infrastructure.Hotkey;
+using Flow.Launcher.Infrastructure.Http;
using Flow.Launcher.Infrastructure.Image;
using Flow.Launcher.Infrastructure.Logger;
using Flow.Launcher.Infrastructure.Storage;
using Flow.Launcher.Infrastructure.UserSettings;
using Flow.Launcher.Plugin;
-using Flow.Launcher.Plugin.SharedModels;
using Flow.Launcher.Plugin.SharedCommands;
+using Flow.Launcher.Plugin.SharedModels;
using Flow.Launcher.ViewModel;
using JetBrains.Annotations;
+using ModernWpf;
using Squirrel;
using Stopwatch = Flow.Launcher.Infrastructure.Stopwatch;
@@ -566,13 +567,13 @@ namespace Flow.Launcher
public bool PluginModified(string id) => PluginManager.PluginModified(id);
- public Task UpdatePluginAsync(PluginMetadata pluginMetadata, UserPlugin plugin, string zipFilePath) =>
+ public Task UpdatePluginAsync(PluginMetadata pluginMetadata, UserPlugin plugin, string zipFilePath) =>
PluginManager.UpdatePluginAsync(pluginMetadata, plugin, zipFilePath);
- public void InstallPlugin(UserPlugin plugin, string zipFilePath) =>
+ public bool InstallPlugin(UserPlugin plugin, string zipFilePath) =>
PluginManager.InstallPlugin(plugin, zipFilePath);
- public Task UninstallPluginAsync(PluginMetadata pluginMetadata, bool removePluginSettings = false) =>
+ public Task UninstallPluginAsync(PluginMetadata pluginMetadata, bool removePluginSettings = false) =>
PluginManager.UninstallPluginAsync(pluginMetadata, removePluginSettings);
public long StopwatchLogDebug(string className, string message, Action action, [CallerMemberName] string methodName = "") =>
@@ -587,6 +588,17 @@ namespace Flow.Launcher
public Task StopwatchLogInfoAsync(string className, string message, Func action, [CallerMemberName] string methodName = "") =>
Stopwatch.InfoAsync(className, message, action, methodName);
+ public bool IsApplicationDarkTheme()
+ {
+ return ThemeManager.Current.ActualApplicationTheme == ApplicationTheme.Dark;
+ }
+
+ public event ActualApplicationThemeChangedEventHandler ActualApplicationThemeChanged
+ {
+ add => _mainVM.ActualApplicationThemeChanged += value;
+ remove => _mainVM.ActualApplicationThemeChanged -= value;
+ }
+
#endregion
#region Private Methods
diff --git a/Flow.Launcher/ReleaseNotesWindow.xaml.cs b/Flow.Launcher/ReleaseNotesWindow.xaml.cs
index 59646f35a..ce7a3e084 100644
--- a/Flow.Launcher/ReleaseNotesWindow.xaml.cs
+++ b/Flow.Launcher/ReleaseNotesWindow.xaml.cs
@@ -189,31 +189,46 @@ namespace Flow.Launcher
var releases = JsonSerializer.Deserialize>(releaseNotesJSON);
// Get the latest releases
- var latestReleases = releases.OrderByDescending(release => release.PublishedDate).Take(3);
+ var latestReleases = releases.OrderByDescending(release => release.PublishedDate).Take(3).ToList();
// Build the release notes in Markdown format
var releaseNotesHtmlBuilder = new StringBuilder(string.Empty);
- foreach (var release in latestReleases)
+
+ for (int i = 0; i < latestReleases.Count; i++)
{
+ var release = latestReleases[i];
releaseNotesHtmlBuilder.AppendLine("# " + release.Name);
// Because MdXaml.Html package cannot correctly render images without units,
// We need to manually add unit for images
// E.g. Replace with
var notes = ImageUnitRegex().Replace(release.ReleaseNotes, m =>
- {
- var prefix = m.Groups[1].Value;
- var widthValue = m.Groups[2].Value;
- var quote = m.Groups[3].Value;
- var suffix = m.Groups[4].Value;
- // Only replace if width is number like 500 without units like 500px
- if (IsNumber(widthValue))
- return $"{prefix}{widthValue}px{quote}{suffix}";
- return m.Value;
- });
+ {
+ var prefix = m.Groups[1].Value;
+ var widthValue = m.Groups[2].Value;
+ var quote = m.Groups[3].Value;
+ var suffix = m.Groups[4].Value;
+ // Only replace if width is number like 500 without units like 500px
+ if (IsNumber(widthValue))
+ return $"{prefix}{widthValue}px{quote}{suffix}";
+ return m.Value;
+ });
releaseNotesHtmlBuilder.AppendLine(notes);
releaseNotesHtmlBuilder.AppendLine();
+
+ // Add separator if it is not last release note
+ if (i < latestReleases.Count - 1)
+ {
+ releaseNotesHtmlBuilder.Append(" ");
+ releaseNotesHtmlBuilder.Append("\n\n");
+
+ releaseNotesHtmlBuilder.AppendLine("---");
+
+ releaseNotesHtmlBuilder.Append("\n\n");
+ releaseNotesHtmlBuilder.Append(" ");
+ releaseNotesHtmlBuilder.Append("\n\n");
+ }
}
return releaseNotesHtmlBuilder.ToString();
diff --git a/Flow.Launcher/Resources/Controls/Card.xaml b/Flow.Launcher/Resources/Controls/Card.xaml
index 33c1299a9..e3c5f8194 100644
--- a/Flow.Launcher/Resources/Controls/Card.xaml
+++ b/Flow.Launcher/Resources/Controls/Card.xaml
@@ -38,21 +38,21 @@
-
+
-
+
-
+
diff --git a/Flow.Launcher/Resources/Controls/Card.xaml.cs b/Flow.Launcher/Resources/Controls/Card.xaml.cs
index c8f788aca..6a70dded2 100644
--- a/Flow.Launcher/Resources/Controls/Card.xaml.cs
+++ b/Flow.Launcher/Resources/Controls/Card.xaml.cs
@@ -9,7 +9,10 @@ namespace Flow.Launcher.Resources.Controls
{
Default,
Inside,
- InsideFit
+ InsideFit,
+ First,
+ Middle,
+ Last
}
public Card()
diff --git a/Flow.Launcher/Resources/double_pinyin.json b/Flow.Launcher/Resources/double_pinyin.json
new file mode 100644
index 000000000..83972038f
--- /dev/null
+++ b/Flow.Launcher/Resources/double_pinyin.json
@@ -0,0 +1 @@
+{"XiaoHe":{"Lv":"lv","Lve":"lt","Lue":"lt","Nv":"nv","Nve":"nt","Nue":"nt","A":"aa","O":"oo","E":"ee","Ai":"ai","Ei":"ei","Ao":"ao","Ou":"ou","An":"an","En":"en","Ang":"ah","Eng":"eg","Er":"er","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yc","You":"yz","Yan":"yj","Yin":"yb","Yang":"yh","Ying":"yk","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wd","Wei":"ww","Wan":"wj","Wen":"wf","Wang":"wh","Weng":"wg","Yu":"yu","Yue":"yt","Yuan":"yr","Yun":"yy","Yong":"ys","Ba":"ba","Bai":"bd","Ban":"bj","Bang":"bh","Bao":"bc","Bei":"bw","Ben":"bf","Beng":"bg","Bi":"bi","Bian":"bm","Biang":"bl","Biao":"bn","Bie":"bp","Bin":"bb","Bing":"bk","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cd","Can":"cj","Cang":"ch","Cao":"cc","Ce":"ce","Cen":"cf","Ceng":"cg","Cha":"ia","Chai":"id","Chan":"ij","Chang":"ih","Chao":"ic","Che":"ie","Chen":"if","Cheng":"ig","Chi":"ii","Chong":"is","Chou":"iz","Chu":"iu","Chua":"ix","Chuai":"ik","Chuan":"ir","Chuang":"il","Chui":"iv","Chun":"iy","Chuo":"io","Ci":"ci","Cong":"cs","Cou":"cz","Cu":"cu","Cuan":"cr","Cui":"cv","Cun":"cy","Cuo":"co","Da":"da","Dai":"dd","Dan":"dj","Dang":"dh","Dao":"dc","De":"de","Dei":"dw","Den":"df","Deng":"dg","Di":"di","Dia":"dx","Dian":"dm","Diao":"dn","Die":"dp","Ding":"dk","Diu":"dq","Dong":"ds","Dou":"dz","Du":"du","Duan":"dr","Dui":"dv","Dun":"dy","Duo":"do","Fa":"fa","Fan":"fj","Fang":"fh","Fei":"fw","Fen":"ff","Feng":"fg","Fiao":"fn","Fo":"fo","Fou":"fz","Fu":"fu","Ga":"ga","Gai":"gd","Gan":"gj","Gang":"gh","Gao":"gc","Ge":"ge","Gei":"gw","Gen":"gf","Geng":"gg","Gong":"gs","Gou":"gz","Gu":"gu","Gua":"gx","Guai":"gk","Guan":"gr","Guang":"gl","Gui":"gv","Gun":"gy","Guo":"go","Ha":"ha","Hai":"hd","Han":"hj","Hang":"hh","Hao":"hc","He":"he","Hei":"hw","Hen":"hf","Heng":"hg","Hong":"hs","Hou":"hz","Hu":"hu","Hua":"hx","Huai":"hk","Huan":"hr","Huang":"hl","Hui":"hv","Hun":"hy","Huo":"ho","Ji":"ji","Jia":"jx","Jian":"jm","Jiang":"jl","Jiao":"jn","Jie":"jp","Jin":"jb","Jing":"jk","Jiong":"js","Jiu":"jq","Ju":"ju","Juan":"jr","Jue":"jt","Jun":"jy","Ka":"ka","Kai":"kd","Kan":"kj","Kang":"kh","Kao":"kc","Ke":"ke","Ken":"kf","Keng":"kg","Kong":"ks","Kou":"kz","Ku":"ku","Kua":"kx","Kuai":"kk","Kuan":"kr","Kuang":"kl","Kui":"kv","Kun":"ky","Kuo":"ko","La":"la","Lai":"ld","Lan":"lj","Lang":"lh","Lao":"lc","Le":"le","Lei":"lw","Leng":"lg","Li":"li","Lia":"lx","Lian":"lm","Liang":"ll","Liao":"ln","Lie":"lp","Lin":"lb","Ling":"lk","Liu":"lq","Lo":"lo","Long":"ls","Lou":"lz","Lu":"lu","Luan":"lr","Lun":"ly","Luo":"lo","Ma":"ma","Mai":"md","Man":"mj","Mang":"mh","Mao":"mc","Me":"me","Mei":"mw","Men":"mf","Meng":"mg","Mi":"mi","Mian":"mm","Miao":"mn","Mie":"mp","Min":"mb","Ming":"mk","Miu":"mq","Mo":"mo","Mou":"mz","Mu":"mu","Na":"na","Nai":"nd","Nan":"nj","Nang":"nh","Nao":"nc","Ne":"ne","Nei":"nw","Nen":"nf","Neng":"ng","Ni":"ni","Nian":"nm","Niang":"nl","Niao":"nn","Nie":"np","Nin":"nb","Ning":"nk","Niu":"nq","Nong":"ns","Nou":"nz","Nu":"nu","Nuan":"nr","Nun":"ny","Nuo":"no","Pa":"pa","Pai":"pd","Pan":"pj","Pang":"ph","Pao":"pc","Pei":"pw","Pen":"pf","Peng":"pg","Pi":"pi","Pian":"pm","Piao":"pn","Pie":"pp","Pin":"pb","Ping":"pk","Po":"po","Pou":"pz","Pu":"pu","Qi":"qi","Qia":"qx","Qian":"qm","Qiang":"ql","Qiao":"qn","Qie":"qp","Qin":"qb","Qing":"qk","Qiong":"qs","Qiu":"qq","Qu":"qu","Quan":"qr","Que":"qt","Qun":"qy","Ran":"rj","Rang":"rh","Rao":"rc","Re":"re","Ren":"rf","Reng":"rg","Ri":"ri","Rong":"rs","Rou":"rz","Ru":"ru","Rua":"rx","Ruan":"rr","Rui":"rv","Run":"ry","Ruo":"ro","Sa":"sa","Sai":"sd","San":"sj","Sang":"sh","Sao":"sc","Se":"se","Sen":"sf","Seng":"sg","Sha":"ua","Shai":"ud","Shan":"uj","Shang":"uh","Shao":"uc","She":"ue","Shei":"uw","Shen":"uf","Sheng":"ug","Shi":"ui","Shou":"uz","Shu":"uu","Shua":"ux","Shuai":"uk","Shuan":"ur","Shuang":"ul","Shui":"uv","Shun":"uy","Shuo":"uo","Si":"si","Song":"ss","Sou":"sz","Su":"su","Suan":"sr","Sui":"sv","Sun":"sy","Suo":"so","Ta":"ta","Tai":"td","Tan":"tj","Tang":"th","Tao":"tc","Te":"te","Tei":"tw","Teng":"tg","Ti":"ti","Tian":"tm","Tiao":"tn","Tie":"tp","Ting":"tk","Tong":"ts","Tou":"tz","Tu":"tu","Tuan":"tr","Tui":"tv","Tun":"ty","Tuo":"to","Xi":"xi","Xia":"xx","Xian":"xm","Xiang":"xl","Xiao":"xn","Xie":"xp","Xin":"xb","Xing":"xk","Xiong":"xs","Xiu":"xq","Xu":"xu","Xuan":"xr","Xue":"xt","Xun":"xy","Za":"za","Zai":"zd","Zan":"zj","Zang":"zh","Zao":"zc","Ze":"ze","Zei":"zw","Zen":"zf","Zeng":"zg","Zha":"va","Zhai":"vd","Zhan":"vj","Zhang":"vh","Zhao":"vc","Zhe":"ve","Zhen":"vf","Zheng":"vg","Zhi":"vi","Zhong":"vs","Zhou":"vz","Zhu":"vu","Zhua":"vx","Zhuai":"vk","Zhuan":"vr","Zhuang":"vl","Zhui":"vv","Zhun":"vy","Zhuo":"vo","Zi":"zi","Zong":"zs","Zou":"zz","Zu":"zu","Zuan":"zr","Zui":"zv","Zun":"zy","Zuo":"zo"},"ZiRanMa":{"Lv":"lv","Lve":"lt","Lue":"lt","Nv":"nv","Nve":"nt","Nue":"nt","A":"aa","O":"oo","E":"ee","Ai":"ai","Ei":"ei","Ao":"ao","Ou":"ou","An":"an","En":"en","Ang":"ah","Eng":"eg","Er":"er","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yk","You":"yb","Yan":"yj","Yin":"yn","Yang":"yh","Ying":"yy","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wl","Wei":"wz","Wan":"wj","Wen":"wf","Wang":"wh","Weng":"wg","Yu":"yu","Yue":"yt","Yuan":"yr","Yun":"yp","Yong":"ys","Ba":"ba","Bai":"bl","Ban":"bj","Bang":"bh","Bao":"bk","Bei":"bz","Ben":"bf","Beng":"bg","Bi":"bi","Bian":"bm","Biang":"bd","Biao":"bc","Bie":"bx","Bin":"bn","Bing":"by","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cl","Can":"cj","Cang":"ch","Cao":"ck","Ce":"ce","Cen":"cf","Ceng":"cg","Cha":"ia","Chai":"il","Chan":"ij","Chang":"ih","Chao":"ik","Che":"ie","Chen":"if","Cheng":"ig","Chi":"ii","Chong":"is","Chou":"ib","Chu":"iu","Chua":"iw","Chuai":"iy","Chuan":"ir","Chuang":"id","Chui":"iv","Chun":"ip","Chuo":"io","Ci":"ci","Cong":"cs","Cou":"cb","Cu":"cu","Cuan":"cr","Cui":"cv","Cun":"cp","Cuo":"co","Da":"da","Dai":"dl","Dan":"dj","Dang":"dh","Dao":"dk","De":"de","Dei":"dz","Den":"df","Deng":"dg","Di":"di","Dia":"dw","Dian":"dm","Diao":"dc","Die":"dx","Ding":"dy","Diu":"dq","Dong":"ds","Dou":"db","Du":"du","Duan":"dr","Dui":"dv","Dun":"dp","Duo":"do","Fa":"fa","Fan":"fj","Fang":"fh","Fei":"fz","Fen":"ff","Feng":"fg","Fiao":"fc","Fo":"fo","Fou":"fb","Fu":"fu","Ga":"ga","Gai":"gl","Gan":"gj","Gang":"gh","Gao":"gk","Ge":"ge","Gei":"gz","Gen":"gf","Geng":"gg","Gong":"gs","Gou":"gb","Gu":"gu","Gua":"gw","Guai":"gy","Guan":"gr","Guang":"gd","Gui":"gv","Gun":"gp","Guo":"go","Ha":"ha","Hai":"hl","Han":"hj","Hang":"hh","Hao":"hk","He":"he","Hei":"hz","Hen":"hf","Heng":"hg","Hong":"hs","Hou":"hb","Hu":"hu","Hua":"hw","Huai":"hy","Huan":"hr","Huang":"hd","Hui":"hv","Hun":"hp","Huo":"ho","Ji":"ji","Jia":"jw","Jian":"jm","Jiang":"jd","Jiao":"jc","Jie":"jx","Jin":"jn","Jing":"jy","Jiong":"js","Jiu":"jq","Ju":"ju","Juan":"jr","Jue":"jt","Jun":"jp","Ka":"ka","Kai":"kl","Kan":"kj","Kang":"kh","Kao":"kk","Ke":"ke","Ken":"kf","Keng":"kg","Kong":"ks","Kou":"kb","Ku":"ku","Kua":"kw","Kuai":"ky","Kuan":"kr","Kuang":"kd","Kui":"kv","Kun":"kp","Kuo":"ko","La":"la","Lai":"ll","Lan":"lj","Lang":"lh","Lao":"lk","Le":"le","Lei":"lz","Leng":"lg","Li":"li","Lia":"lw","Lian":"lm","Liang":"ld","Liao":"lc","Lie":"lx","Lin":"ln","Ling":"ly","Liu":"lq","Lo":"lo","Long":"ls","Lou":"lb","Lu":"lu","Luan":"lr","Lun":"lp","Luo":"lo","Ma":"ma","Mai":"ml","Man":"mj","Mang":"mh","Mao":"mk","Me":"me","Mei":"mz","Men":"mf","Meng":"mg","Mi":"mi","Mian":"mm","Miao":"mc","Mie":"mx","Min":"mn","Ming":"my","Miu":"mq","Mo":"mo","Mou":"mb","Mu":"mu","Na":"na","Nai":"nl","Nan":"nj","Nang":"nh","Nao":"nk","Ne":"ne","Nei":"nz","Nen":"nf","Neng":"ng","Ni":"ni","Nian":"nm","Niang":"nd","Niao":"nc","Nie":"nx","Nin":"nn","Ning":"ny","Niu":"nq","Nong":"ns","Nou":"nb","Nu":"nu","Nuan":"nr","Nun":"np","Nuo":"no","Pa":"pa","Pai":"pl","Pan":"pj","Pang":"ph","Pao":"pk","Pei":"pz","Pen":"pf","Peng":"pg","Pi":"pi","Pian":"pm","Piao":"pc","Pie":"px","Pin":"pn","Ping":"py","Po":"po","Pou":"pb","Pu":"pu","Qi":"qi","Qia":"qw","Qian":"qm","Qiang":"qd","Qiao":"qc","Qie":"qx","Qin":"qn","Qing":"qy","Qiong":"qs","Qiu":"qq","Qu":"qu","Quan":"qr","Que":"qt","Qun":"qp","Ran":"rj","Rang":"rh","Rao":"rk","Re":"re","Ren":"rf","Reng":"rg","Ri":"ri","Rong":"rs","Rou":"rb","Ru":"ru","Rua":"rw","Ruan":"rr","Rui":"rv","Run":"rp","Ruo":"ro","Sa":"sa","Sai":"sl","San":"sj","Sang":"sh","Sao":"sk","Se":"se","Sen":"sf","Seng":"sg","Sha":"ua","Shai":"ul","Shan":"uj","Shang":"uh","Shao":"uk","She":"ue","Shei":"uz","Shen":"uf","Sheng":"ug","Shi":"ui","Shou":"ub","Shu":"uu","Shua":"uw","Shuai":"uy","Shuan":"ur","Shuang":"ud","Shui":"uv","Shun":"up","Shuo":"uo","Si":"si","Song":"ss","Sou":"sb","Su":"su","Suan":"sr","Sui":"sv","Sun":"sp","Suo":"so","Ta":"ta","Tai":"tl","Tan":"tj","Tang":"th","Tao":"tk","Te":"te","Tei":"tz","Teng":"tg","Ti":"ti","Tian":"tm","Tiao":"tc","Tie":"tx","Ting":"ty","Tong":"ts","Tou":"tb","Tu":"tu","Tuan":"tr","Tui":"tv","Tun":"tp","Tuo":"to","Xi":"xi","Xia":"xw","Xian":"xm","Xiang":"xd","Xiao":"xc","Xie":"xx","Xin":"xn","Xing":"xy","Xiong":"xs","Xiu":"xq","Xu":"xu","Xuan":"xr","Xue":"xt","Xun":"xp","Za":"za","Zai":"zl","Zan":"zj","Zang":"zh","Zao":"zk","Ze":"ze","Zei":"zz","Zen":"zf","Zeng":"zg","Zha":"va","Zhai":"vl","Zhan":"vj","Zhang":"vh","Zhao":"vk","Zhe":"ve","Zhen":"vf","Zheng":"vg","Zhi":"vi","Zhong":"vs","Zhou":"vb","Zhu":"vu","Zhua":"vw","Zhuai":"vy","Zhuan":"vr","Zhuang":"vd","Zhui":"vv","Zhun":"vp","Zhuo":"vo","Zi":"zi","Zong":"zs","Zou":"zb","Zu":"zu","Zuan":"zr","Zui":"zv","Zun":"zp","Zuo":"zo"},"WeiRuan":{"Lv":"ly","Lve":"lt","Lue":"lt","Nv":"ny","Nve":"nt","Nue":"nt","A":"oa","O":"oo","E":"oe","Ai":"ol","Ei":"oz","Ao":"ok","Ou":"ob","An":"oj","En":"of","Ang":"oh","Eng":"og","Er":"or","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yk","You":"yb","Yan":"yj","Yin":"yn","Yang":"yh","Ying":"y;","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wl","Wei":"wz","Wan":"wj","Wen":"wf","Wang":"wh","Weng":"wg","Yu":"yu","Yue":"yt","Yuan":"yr","Yun":"yp","Yong":"ys","Ba":"ba","Bai":"bl","Ban":"bj","Bang":"bh","Bao":"bk","Bei":"bz","Ben":"bf","Beng":"bg","Bi":"bi","Bian":"bm","Biang":"bd","Biao":"bc","Bie":"bx","Bin":"bn","Bing":"b;","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cl","Can":"cj","Cang":"ch","Cao":"ck","Ce":"ce","Cen":"cf","Ceng":"cg","Cha":"ia","Chai":"il","Chan":"ij","Chang":"ih","Chao":"ik","Che":"ie","Chen":"if","Cheng":"ig","Chi":"ii","Chong":"is","Chou":"ib","Chu":"iu","Chua":"iw","Chuai":"iy","Chuan":"ir","Chuang":"id","Chui":"iv","Chun":"ip","Chuo":"io","Ci":"ci","Cong":"cs","Cou":"cb","Cu":"cu","Cuan":"cr","Cui":"cv","Cun":"cp","Cuo":"co","Da":"da","Dai":"dl","Dan":"dj","Dang":"dh","Dao":"dk","De":"de","Dei":"dz","Den":"df","Deng":"dg","Di":"di","Dia":"dw","Dian":"dm","Diao":"dc","Die":"dx","Ding":"d;","Diu":"dq","Dong":"ds","Dou":"db","Du":"du","Duan":"dr","Dui":"dv","Dun":"dp","Duo":"do","Fa":"fa","Fan":"fj","Fang":"fh","Fei":"fz","Fen":"ff","Feng":"fg","Fiao":"fc","Fo":"fo","Fou":"fb","Fu":"fu","Ga":"ga","Gai":"gl","Gan":"gj","Gang":"gh","Gao":"gk","Ge":"ge","Gei":"gz","Gen":"gf","Geng":"gg","Gong":"gs","Gou":"gb","Gu":"gu","Gua":"gw","Guai":"gy","Guan":"gr","Guang":"gd","Gui":"gv","Gun":"gp","Guo":"go","Ha":"ha","Hai":"hl","Han":"hj","Hang":"hh","Hao":"hk","He":"he","Hei":"hz","Hen":"hf","Heng":"hg","Hong":"hs","Hou":"hb","Hu":"hu","Hua":"hw","Huai":"hy","Huan":"hr","Huang":"hd","Hui":"hv","Hun":"hp","Huo":"ho","Ji":"ji","Jia":"jw","Jian":"jm","Jiang":"jd","Jiao":"jc","Jie":"jx","Jin":"jn","Jing":"j;","Jiong":"js","Jiu":"jq","Ju":"ju","Juan":"jr","Jue":"jt","Jun":"jp","Ka":"ka","Kai":"kl","Kan":"kj","Kang":"kh","Kao":"kk","Ke":"ke","Ken":"kf","Keng":"kg","Kong":"ks","Kou":"kb","Ku":"ku","Kua":"kw","Kuai":"ky","Kuan":"kr","Kuang":"kd","Kui":"kv","Kun":"kp","Kuo":"ko","La":"la","Lai":"ll","Lan":"lj","Lang":"lh","Lao":"lk","Le":"le","Lei":"lz","Leng":"lg","Li":"li","Lia":"lw","Lian":"lm","Liang":"ld","Liao":"lc","Lie":"lx","Lin":"ln","Ling":"l;","Liu":"lq","Lo":"lo","Long":"ls","Lou":"lb","Lu":"lu","Luan":"lr","Lun":"lp","Luo":"lo","Ma":"ma","Mai":"ml","Man":"mj","Mang":"mh","Mao":"mk","Me":"me","Mei":"mz","Men":"mf","Meng":"mg","Mi":"mi","Mian":"mm","Miao":"mc","Mie":"mx","Min":"mn","Ming":"m;","Miu":"mq","Mo":"mo","Mou":"mb","Mu":"mu","Na":"na","Nai":"nl","Nan":"nj","Nang":"nh","Nao":"nk","Ne":"ne","Nei":"nz","Nen":"nf","Neng":"ng","Ni":"ni","Nian":"nm","Niang":"nd","Niao":"nc","Nie":"nx","Nin":"nn","Ning":"n;","Niu":"nq","Nong":"ns","Nou":"nb","Nu":"nu","Nuan":"nr","Nun":"np","Nuo":"no","Pa":"pa","Pai":"pl","Pan":"pj","Pang":"ph","Pao":"pk","Pei":"pz","Pen":"pf","Peng":"pg","Pi":"pi","Pian":"pm","Piao":"pc","Pie":"px","Pin":"pn","Ping":"p;","Po":"po","Pou":"pb","Pu":"pu","Qi":"qi","Qia":"qw","Qian":"qm","Qiang":"qd","Qiao":"qc","Qie":"qx","Qin":"qn","Qing":"q;","Qiong":"qs","Qiu":"qq","Qu":"qu","Quan":"qr","Que":"qt","Qun":"qp","Ran":"rj","Rang":"rh","Rao":"rk","Re":"re","Ren":"rf","Reng":"rg","Ri":"ri","Rong":"rs","Rou":"rb","Ru":"ru","Rua":"rw","Ruan":"rr","Rui":"rv","Run":"rp","Ruo":"ro","Sa":"sa","Sai":"sl","San":"sj","Sang":"sh","Sao":"sk","Se":"se","Sen":"sf","Seng":"sg","Sha":"ua","Shai":"ul","Shan":"uj","Shang":"uh","Shao":"uk","She":"ue","Shei":"uz","Shen":"uf","Sheng":"ug","Shi":"ui","Shou":"ub","Shu":"uu","Shua":"uw","Shuai":"uy","Shuan":"ur","Shuang":"ud","Shui":"uv","Shun":"up","Shuo":"uo","Si":"si","Song":"ss","Sou":"sb","Su":"su","Suan":"sr","Sui":"sv","Sun":"sp","Suo":"so","Ta":"ta","Tai":"tl","Tan":"tj","Tang":"th","Tao":"tk","Te":"te","Tei":"tz","Teng":"tg","Ti":"ti","Tian":"tm","Tiao":"tc","Tie":"tx","Ting":"t;","Tong":"ts","Tou":"tb","Tu":"tu","Tuan":"tr","Tui":"tv","Tun":"tp","Tuo":"to","Xi":"xi","Xia":"xw","Xian":"xm","Xiang":"xd","Xiao":"xc","Xie":"xx","Xin":"xn","Xing":"x;","Xiong":"xs","Xiu":"xq","Xu":"xu","Xuan":"xr","Xue":"xt","Xun":"xp","Za":"za","Zai":"zl","Zan":"zj","Zang":"zh","Zao":"zk","Ze":"ze","Zei":"zz","Zen":"zf","Zeng":"zg","Zha":"va","Zhai":"vl","Zhan":"vj","Zhang":"vh","Zhao":"vk","Zhe":"ve","Zhen":"vf","Zheng":"vg","Zhi":"vi","Zhong":"vs","Zhou":"vb","Zhu":"vu","Zhua":"vw","Zhuai":"vy","Zhuan":"vr","Zhuang":"vd","Zhui":"vv","Zhun":"vp","Zhuo":"vo","Zi":"zi","Zong":"zs","Zou":"zb","Zu":"zu","Zuan":"zr","Zui":"zv","Zun":"zp","Zuo":"zo"},"ZhiNengABC":{"Lv":"lv","Lve":"lm","Lue":"lm","Nv":"nv","Nve":"nm","Nue":"nm","A":"oa","O":"oo","E":"oe","Ai":"ol","Ei":"oq","Ao":"ok","Ou":"ob","An":"oj","En":"of","Ang":"oh","Eng":"og","Er":"or","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yk","You":"yb","Yan":"yj","Yin":"yc","Yang":"yh","Ying":"yy","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wl","Wei":"wq","Wan":"wj","Wen":"wf","Wang":"wh","Weng":"wg","Yu":"yu","Yue":"ym","Yuan":"yp","Yun":"yn","Yong":"ys","Ba":"ba","Bai":"bl","Ban":"bj","Bang":"bh","Bao":"bk","Bei":"bq","Ben":"bf","Beng":"bg","Bi":"bi","Bian":"bw","Biang":"bt","Biao":"bz","Bie":"bx","Bin":"bc","Bing":"by","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cl","Can":"cj","Cang":"ch","Cao":"ck","Ce":"ce","Cen":"cf","Ceng":"cg","Cha":"ea","Chai":"el","Chan":"ej","Chang":"eh","Chao":"ek","Che":"ee","Chen":"ef","Cheng":"eg","Chi":"ei","Chong":"es","Chou":"eb","Chu":"eu","Chua":"ed","Chuai":"ec","Chuan":"ep","Chuang":"et","Chui":"em","Chun":"en","Chuo":"eo","Ci":"ci","Cong":"cs","Cou":"cb","Cu":"cu","Cuan":"cp","Cui":"cm","Cun":"cn","Cuo":"co","Da":"da","Dai":"dl","Dan":"dj","Dang":"dh","Dao":"dk","De":"de","Dei":"dq","Den":"df","Deng":"dg","Di":"di","Dia":"dd","Dian":"dw","Diao":"dz","Die":"dx","Ding":"dy","Diu":"dr","Dong":"ds","Dou":"db","Du":"du","Duan":"dp","Dui":"dm","Dun":"dn","Duo":"do","Fa":"fa","Fan":"fj","Fang":"fh","Fei":"fq","Fen":"ff","Feng":"fg","Fiao":"fz","Fo":"fo","Fou":"fb","Fu":"fu","Ga":"ga","Gai":"gl","Gan":"gj","Gang":"gh","Gao":"gk","Ge":"ge","Gei":"gq","Gen":"gf","Geng":"gg","Gong":"gs","Gou":"gb","Gu":"gu","Gua":"gd","Guai":"gc","Guan":"gp","Guang":"gt","Gui":"gm","Gun":"gn","Guo":"go","Ha":"ha","Hai":"hl","Han":"hj","Hang":"hh","Hao":"hk","He":"he","Hei":"hq","Hen":"hf","Heng":"hg","Hong":"hs","Hou":"hb","Hu":"hu","Hua":"hd","Huai":"hc","Huan":"hp","Huang":"ht","Hui":"hm","Hun":"hn","Huo":"ho","Ji":"ji","Jia":"jd","Jian":"jw","Jiang":"jt","Jiao":"jz","Jie":"jx","Jin":"jc","Jing":"jy","Jiong":"js","Jiu":"jr","Ju":"ju","Juan":"jp","Jue":"jm","Jun":"jn","Ka":"ka","Kai":"kl","Kan":"kj","Kang":"kh","Kao":"kk","Ke":"ke","Ken":"kf","Keng":"kg","Kong":"ks","Kou":"kb","Ku":"ku","Kua":"kd","Kuai":"kc","Kuan":"kp","Kuang":"kt","Kui":"km","Kun":"kn","Kuo":"ko","La":"la","Lai":"ll","Lan":"lj","Lang":"lh","Lao":"lk","Le":"le","Lei":"lq","Leng":"lg","Li":"li","Lia":"ld","Lian":"lw","Liang":"lt","Liao":"lz","Lie":"lx","Lin":"lc","Ling":"ly","Liu":"lr","Lo":"lo","Long":"ls","Lou":"lb","Lu":"lu","Luan":"lp","Lun":"ln","Luo":"lo","Ma":"ma","Mai":"ml","Man":"mj","Mang":"mh","Mao":"mk","Me":"me","Mei":"mq","Men":"mf","Meng":"mg","Mi":"mi","Mian":"mw","Miao":"mz","Mie":"mx","Min":"mc","Ming":"my","Miu":"mr","Mo":"mo","Mou":"mb","Mu":"mu","Na":"na","Nai":"nl","Nan":"nj","Nang":"nh","Nao":"nk","Ne":"ne","Nei":"nq","Nen":"nf","Neng":"ng","Ni":"ni","Nian":"nw","Niang":"nt","Niao":"nz","Nie":"nx","Nin":"nc","Ning":"ny","Niu":"nr","Nong":"ns","Nou":"nb","Nu":"nu","Nuan":"np","Nun":"nn","Nuo":"no","Pa":"pa","Pai":"pl","Pan":"pj","Pang":"ph","Pao":"pk","Pei":"pq","Pen":"pf","Peng":"pg","Pi":"pi","Pian":"pw","Piao":"pz","Pie":"px","Pin":"pc","Ping":"py","Po":"po","Pou":"pb","Pu":"pu","Qi":"qi","Qia":"qd","Qian":"qw","Qiang":"qt","Qiao":"qz","Qie":"qx","Qin":"qc","Qing":"qy","Qiong":"qs","Qiu":"qr","Qu":"qu","Quan":"qp","Que":"qm","Qun":"qn","Ran":"rj","Rang":"rh","Rao":"rk","Re":"re","Ren":"rf","Reng":"rg","Ri":"ri","Rong":"rs","Rou":"rb","Ru":"ru","Rua":"rd","Ruan":"rp","Rui":"rm","Run":"rn","Ruo":"ro","Sa":"sa","Sai":"sl","San":"sj","Sang":"sh","Sao":"sk","Se":"se","Sen":"sf","Seng":"sg","Sha":"va","Shai":"vl","Shan":"vj","Shang":"vh","Shao":"vk","She":"ve","Shei":"vq","Shen":"vf","Sheng":"vg","Shi":"vi","Shou":"vb","Shu":"vu","Shua":"vd","Shuai":"vc","Shuan":"vp","Shuang":"vt","Shui":"vm","Shun":"vn","Shuo":"vo","Si":"si","Song":"ss","Sou":"sb","Su":"su","Suan":"sp","Sui":"sm","Sun":"sn","Suo":"so","Ta":"ta","Tai":"tl","Tan":"tj","Tang":"th","Tao":"tk","Te":"te","Tei":"tq","Teng":"tg","Ti":"ti","Tian":"tw","Tiao":"tz","Tie":"tx","Ting":"ty","Tong":"ts","Tou":"tb","Tu":"tu","Tuan":"tp","Tui":"tm","Tun":"tn","Tuo":"to","Xi":"xi","Xia":"xd","Xian":"xw","Xiang":"xt","Xiao":"xz","Xie":"xx","Xin":"xc","Xing":"xy","Xiong":"xs","Xiu":"xr","Xu":"xu","Xuan":"xp","Xue":"xm","Xun":"xn","Za":"za","Zai":"zl","Zan":"zj","Zang":"zh","Zao":"zk","Ze":"ze","Zei":"zq","Zen":"zf","Zeng":"zg","Zha":"aa","Zhai":"al","Zhan":"aj","Zhang":"ah","Zhao":"ak","Zhe":"ae","Zhen":"af","Zheng":"ag","Zhi":"ai","Zhong":"as","Zhou":"ab","Zhu":"au","Zhua":"ad","Zhuai":"ac","Zhuan":"ap","Zhuang":"at","Zhui":"am","Zhun":"an","Zhuo":"ao","Zi":"zi","Zong":"zs","Zou":"zb","Zu":"zu","Zuan":"zp","Zui":"zm","Zun":"zn","Zuo":"zo"},"ZiGuangPinYin":{"Lv":"lv","Lve":"ln","Lue":"ln","Nv":"nv","Nve":"nn","Nue":"nn","A":"oa","O":"oo","E":"oe","Ai":"op","Ei":"ok","Ao":"oq","Ou":"oz","An":"or","En":"ow","Ang":"os","Eng":"ot","Er":"oj","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yq","You":"yz","Yan":"yr","Yin":"yy","Yang":"ys","Ying":"yc","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wp","Wei":"wk","Wan":"wr","Wen":"ww","Wang":"ws","Weng":"wt","Yu":"yu","Yue":"yn","Yuan":"yl","Yun":"ym","Yong":"yh","Ba":"ba","Bai":"bp","Ban":"br","Bang":"bs","Bao":"bq","Bei":"bk","Ben":"bw","Beng":"bt","Bi":"bi","Bian":"bf","Biang":"bg","Biao":"bb","Bie":"bd","Bin":"by","Bing":"bc","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cp","Can":"cr","Cang":"cs","Cao":"cq","Ce":"ce","Cen":"cw","Ceng":"ct","Cha":"aa","Chai":"ap","Chan":"ar","Chang":"as","Chao":"aq","Che":"ae","Chen":"aw","Cheng":"at","Chi":"ai","Chong":"ah","Chou":"az","Chu":"au","Chua":"ax","Chuai":"ay","Chuan":"al","Chuang":"ag","Chui":"an","Chun":"am","Chuo":"ao","Ci":"ci","Cong":"ch","Cou":"cz","Cu":"cu","Cuan":"cl","Cui":"cn","Cun":"cm","Cuo":"co","Da":"da","Dai":"dp","Dan":"dr","Dang":"ds","Dao":"dq","De":"de","Dei":"dk","Den":"dw","Deng":"dt","Di":"di","Dia":"dx","Dian":"df","Diao":"db","Die":"dd","Ding":"dc","Diu":"dj","Dong":"dh","Dou":"dz","Du":"du","Duan":"dl","Dui":"dn","Dun":"dm","Duo":"do","Fa":"fa","Fan":"fr","Fang":"fs","Fei":"fk","Fen":"fw","Feng":"ft","Fiao":"fb","Fo":"fo","Fou":"fz","Fu":"fu","Ga":"ga","Gai":"gp","Gan":"gr","Gang":"gs","Gao":"gq","Ge":"ge","Gei":"gk","Gen":"gw","Geng":"gt","Gong":"gh","Gou":"gz","Gu":"gu","Gua":"gx","Guai":"gy","Guan":"gl","Guang":"gg","Gui":"gn","Gun":"gm","Guo":"go","Ha":"ha","Hai":"hp","Han":"hr","Hang":"hs","Hao":"hq","He":"he","Hei":"hk","Hen":"hw","Heng":"ht","Hong":"hh","Hou":"hz","Hu":"hu","Hua":"hx","Huai":"hy","Huan":"hl","Huang":"hg","Hui":"hn","Hun":"hm","Huo":"ho","Ji":"ji","Jia":"jx","Jian":"jf","Jiang":"jg","Jiao":"jb","Jie":"jd","Jin":"jy","Jing":"jc","Jiong":"jh","Jiu":"jj","Ju":"ju","Juan":"jl","Jue":"jn","Jun":"jm","Ka":"ka","Kai":"kp","Kan":"kr","Kang":"ks","Kao":"kq","Ke":"ke","Ken":"kw","Keng":"kt","Kong":"kh","Kou":"kz","Ku":"ku","Kua":"kx","Kuai":"ky","Kuan":"kl","Kuang":"kg","Kui":"kn","Kun":"km","Kuo":"ko","La":"la","Lai":"lp","Lan":"lr","Lang":"ls","Lao":"lq","Le":"le","Lei":"lk","Leng":"lt","Li":"li","Lia":"lx","Lian":"lf","Liang":"lg","Liao":"lb","Lie":"ld","Lin":"ly","Ling":"lc","Liu":"lj","Lo":"lo","Long":"lh","Lou":"lz","Lu":"lu","Luan":"ll","Lun":"lm","Luo":"lo","Ma":"ma","Mai":"mp","Man":"mr","Mang":"ms","Mao":"mq","Me":"me","Mei":"mk","Men":"mw","Meng":"mt","Mi":"mi","Mian":"mf","Miao":"mb","Mie":"md","Min":"my","Ming":"mc","Miu":"mj","Mo":"mo","Mou":"mz","Mu":"mu","Na":"na","Nai":"np","Nan":"nr","Nang":"ns","Nao":"nq","Ne":"ne","Nei":"nk","Nen":"nw","Neng":"nt","Ni":"ni","Nian":"nf","Niang":"ng","Niao":"nb","Nie":"nd","Nin":"ny","Ning":"nc","Niu":"nj","Nong":"nh","Nou":"nz","Nu":"nu","Nuan":"nl","Nun":"nm","Nuo":"no","Pa":"pa","Pai":"pp","Pan":"pr","Pang":"ps","Pao":"pq","Pei":"pk","Pen":"pw","Peng":"pt","Pi":"pi","Pian":"pf","Piao":"pb","Pie":"pd","Pin":"py","Ping":"pc","Po":"po","Pou":"pz","Pu":"pu","Qi":"qi","Qia":"qx","Qian":"qf","Qiang":"qg","Qiao":"qb","Qie":"qd","Qin":"qy","Qing":"qc","Qiong":"qh","Qiu":"qj","Qu":"qu","Quan":"ql","Que":"qn","Qun":"qm","Ran":"rr","Rang":"rs","Rao":"rq","Re":"re","Ren":"rw","Reng":"rt","Ri":"ri","Rong":"rh","Rou":"rz","Ru":"ru","Rua":"rx","Ruan":"rl","Rui":"rn","Run":"rm","Ruo":"ro","Sa":"sa","Sai":"sp","San":"sr","Sang":"ss","Sao":"sq","Se":"se","Sen":"sw","Seng":"st","Sha":"ia","Shai":"ip","Shan":"ir","Shang":"is","Shao":"iq","She":"ie","Shei":"ik","Shen":"iw","Sheng":"it","Shi":"ii","Shou":"iz","Shu":"iu","Shua":"ix","Shuai":"iy","Shuan":"il","Shuang":"ig","Shui":"in","Shun":"im","Shuo":"io","Si":"si","Song":"sh","Sou":"sz","Su":"su","Suan":"sl","Sui":"sn","Sun":"sm","Suo":"so","Ta":"ta","Tai":"tp","Tan":"tr","Tang":"ts","Tao":"tq","Te":"te","Tei":"tk","Teng":"tt","Ti":"ti","Tian":"tf","Tiao":"tb","Tie":"td","Ting":"tc","Tong":"th","Tou":"tz","Tu":"tu","Tuan":"tl","Tui":"tn","Tun":"tm","Tuo":"to","Xi":"xi","Xia":"xx","Xian":"xf","Xiang":"xg","Xiao":"xb","Xie":"xd","Xin":"xy","Xing":"xc","Xiong":"xh","Xiu":"xj","Xu":"xu","Xuan":"xl","Xue":"xn","Xun":"xm","Za":"za","Zai":"zp","Zan":"zr","Zang":"zs","Zao":"zq","Ze":"ze","Zei":"zk","Zen":"zw","Zeng":"zt","Zha":"ua","Zhai":"up","Zhan":"ur","Zhang":"us","Zhao":"uq","Zhe":"ue","Zhen":"uw","Zheng":"ut","Zhi":"ui","Zhong":"uh","Zhou":"uz","Zhu":"uu","Zhua":"ux","Zhuai":"uy","Zhuan":"ul","Zhuang":"ug","Zhui":"un","Zhun":"um","Zhuo":"uo","Zi":"zi","Zong":"zh","Zou":"zz","Zu":"zu","Zuan":"zl","Zui":"zn","Zun":"zm","Zuo":"zo"},"PinYinJiaJia":{"Lv":"lv","Lve":"lx","Lue":"lx","Nv":"nv","Nve":"nx","Nue":"nx","A":"aa","O":"oo","E":"ee","Ai":"as","Ei":"ew","Ao":"ad","Ou":"op","An":"af","En":"er","Ang":"ag","Eng":"et","Er":"eq","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"yd","You":"yp","Yan":"yf","Yin":"yl","Yang":"yg","Ying":"yq","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"ws","Wei":"ww","Wan":"wf","Wen":"wr","Wang":"wg","Weng":"wt","Yu":"yu","Yue":"yx","Yuan":"yc","Yun":"yz","Yong":"yy","Ba":"ba","Bai":"bs","Ban":"bf","Bang":"bg","Bao":"bd","Bei":"bw","Ben":"br","Beng":"bt","Bi":"bi","Bian":"bj","Biang":"bh","Biao":"bk","Bie":"bm","Bin":"bl","Bing":"bq","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cs","Can":"cf","Cang":"cg","Cao":"cd","Ce":"ce","Cen":"cr","Ceng":"ct","Cha":"ua","Chai":"us","Chan":"uf","Chang":"ug","Chao":"ud","Che":"ue","Chen":"ur","Cheng":"ut","Chi":"ui","Chong":"uy","Chou":"up","Chu":"uu","Chua":"ub","Chuai":"ux","Chuan":"uc","Chuang":"uh","Chui":"uv","Chun":"uz","Chuo":"uo","Ci":"ci","Cong":"cy","Cou":"cp","Cu":"cu","Cuan":"cc","Cui":"cv","Cun":"cz","Cuo":"co","Da":"da","Dai":"ds","Dan":"df","Dang":"dg","Dao":"dd","De":"de","Dei":"dw","Den":"dr","Deng":"dt","Di":"di","Dia":"db","Dian":"dj","Diao":"dk","Die":"dm","Ding":"dq","Diu":"dn","Dong":"dy","Dou":"dp","Du":"du","Duan":"dc","Dui":"dv","Dun":"dz","Duo":"do","Fa":"fa","Fan":"ff","Fang":"fg","Fei":"fw","Fen":"fr","Feng":"ft","Fiao":"fk","Fo":"fo","Fou":"fp","Fu":"fu","Ga":"ga","Gai":"gs","Gan":"gf","Gang":"gg","Gao":"gd","Ge":"ge","Gei":"gw","Gen":"gr","Geng":"gt","Gong":"gy","Gou":"gp","Gu":"gu","Gua":"gb","Guai":"gx","Guan":"gc","Guang":"gh","Gui":"gv","Gun":"gz","Guo":"go","Ha":"ha","Hai":"hs","Han":"hf","Hang":"hg","Hao":"hd","He":"he","Hei":"hw","Hen":"hr","Heng":"ht","Hong":"hy","Hou":"hp","Hu":"hu","Hua":"hb","Huai":"hx","Huan":"hc","Huang":"hh","Hui":"hv","Hun":"hz","Huo":"ho","Ji":"ji","Jia":"jb","Jian":"jj","Jiang":"jh","Jiao":"jk","Jie":"jm","Jin":"jl","Jing":"jq","Jiong":"jy","Jiu":"jn","Ju":"ju","Juan":"jc","Jue":"jx","Jun":"jz","Ka":"ka","Kai":"ks","Kan":"kf","Kang":"kg","Kao":"kd","Ke":"ke","Ken":"kr","Keng":"kt","Kong":"ky","Kou":"kp","Ku":"ku","Kua":"kb","Kuai":"kx","Kuan":"kc","Kuang":"kh","Kui":"kv","Kun":"kz","Kuo":"ko","La":"la","Lai":"ls","Lan":"lf","Lang":"lg","Lao":"ld","Le":"le","Lei":"lw","Leng":"lt","Li":"li","Lia":"lb","Lian":"lj","Liang":"lh","Liao":"lk","Lie":"lm","Lin":"ll","Ling":"lq","Liu":"ln","Lo":"lo","Long":"ly","Lou":"lp","Lu":"lu","Luan":"lc","Lun":"lz","Luo":"lo","Ma":"ma","Mai":"ms","Man":"mf","Mang":"mg","Mao":"md","Me":"me","Mei":"mw","Men":"mr","Meng":"mt","Mi":"mi","Mian":"mj","Miao":"mk","Mie":"mm","Min":"ml","Ming":"mq","Miu":"mn","Mo":"mo","Mou":"mp","Mu":"mu","Na":"na","Nai":"ns","Nan":"nf","Nang":"ng","Nao":"nd","Ne":"ne","Nei":"nw","Nen":"nr","Neng":"nt","Ni":"ni","Nian":"nj","Niang":"nh","Niao":"nk","Nie":"nm","Nin":"nl","Ning":"nq","Niu":"nn","Nong":"ny","Nou":"np","Nu":"nu","Nuan":"nc","Nun":"nz","Nuo":"no","Pa":"pa","Pai":"ps","Pan":"pf","Pang":"pg","Pao":"pd","Pei":"pw","Pen":"pr","Peng":"pt","Pi":"pi","Pian":"pj","Piao":"pk","Pie":"pm","Pin":"pl","Ping":"pq","Po":"po","Pou":"pp","Pu":"pu","Qi":"qi","Qia":"qb","Qian":"qj","Qiang":"qh","Qiao":"qk","Qie":"qm","Qin":"ql","Qing":"qq","Qiong":"qy","Qiu":"qn","Qu":"qu","Quan":"qc","Que":"qx","Qun":"qz","Ran":"rf","Rang":"rg","Rao":"rd","Re":"re","Ren":"rr","Reng":"rt","Ri":"ri","Rong":"ry","Rou":"rp","Ru":"ru","Rua":"rb","Ruan":"rc","Rui":"rv","Run":"rz","Ruo":"ro","Sa":"sa","Sai":"ss","San":"sf","Sang":"sg","Sao":"sd","Se":"se","Sen":"sr","Seng":"st","Sha":"ia","Shai":"is","Shan":"if","Shang":"ig","Shao":"id","She":"ie","Shei":"iw","Shen":"ir","Sheng":"it","Shi":"ii","Shou":"ip","Shu":"iu","Shua":"ib","Shuai":"ix","Shuan":"ic","Shuang":"ih","Shui":"iv","Shun":"iz","Shuo":"io","Si":"si","Song":"sy","Sou":"sp","Su":"su","Suan":"sc","Sui":"sv","Sun":"sz","Suo":"so","Ta":"ta","Tai":"ts","Tan":"tf","Tang":"tg","Tao":"td","Te":"te","Tei":"tw","Teng":"tt","Ti":"ti","Tian":"tj","Tiao":"tk","Tie":"tm","Ting":"tq","Tong":"ty","Tou":"tp","Tu":"tu","Tuan":"tc","Tui":"tv","Tun":"tz","Tuo":"to","Xi":"xi","Xia":"xb","Xian":"xj","Xiang":"xh","Xiao":"xk","Xie":"xm","Xin":"xl","Xing":"xq","Xiong":"xy","Xiu":"xn","Xu":"xu","Xuan":"xc","Xue":"xx","Xun":"xz","Za":"za","Zai":"zs","Zan":"zf","Zang":"zg","Zao":"zd","Ze":"ze","Zei":"zw","Zen":"zr","Zeng":"zt","Zha":"va","Zhai":"vs","Zhan":"vf","Zhang":"vg","Zhao":"vd","Zhe":"ve","Zhen":"vr","Zheng":"vt","Zhi":"vi","Zhong":"vy","Zhou":"vp","Zhu":"vu","Zhua":"vb","Zhuai":"vx","Zhuan":"vc","Zhuang":"vh","Zhui":"vv","Zhun":"vz","Zhuo":"vo","Zi":"zi","Zong":"zy","Zou":"zp","Zu":"zu","Zuan":"zc","Zui":"zv","Zun":"zz","Zuo":"zo"},"XingKongJianDao":{"Lv":"lv","Lve":"ly","Lue":"ly","Nv":"nv","Nve":"ny","Nue":"ny","A":"xa","O":"xo","E":"xe","Ai":"xj","Ei":"xw","Ao":"xs","Ou":"xt","An":"xd","En":"xk","Ang":"xf","Eng":"xh","Er":"xu","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"ys","You":"yt","Yan":"yd","Yin":"yb","Yang":"yf","Ying":"yg","Wu":"wj","Wa":"ws","Wo":"wo","Wai":"wh","Wei":"ww","Wan":"wf","Wen":"wn","Wang":"wp","Weng":"wr","Yu":"yv","Yue":"yy","Yuan":"yr","Yun":"yw","Yong":"yl","Ba":"ba","Bai":"bj","Ban":"bd","Bang":"bf","Bao":"bs","Bei":"bw","Ben":"bk","Beng":"bh","Bi":"bi","Bian":"bm","Biang":"bx","Biao":"bp","Bie":"bc","Bin":"bb","Bing":"bg","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"cj","Can":"cd","Cang":"cf","Cao":"cs","Ce":"ce","Cen":"ck","Ceng":"ch","Cha":"ja","Chai":"jj","Chan":"jd","Chang":"jf","Chao":"js","Che":"je","Chen":"jk","Cheng":"jh","Chi":"wi","Chong":"wl","Chou":"jt","Chu":"ju","Chua":"wx","Chuai":"wg","Chuan":"wr","Chuang":"wn","Chui":"wy","Chun":"jz","Chuo":"jo","Ci":"ci","Cong":"cl","Cou":"ct","Cu":"cu","Cuan":"cr","Cui":"cy","Cun":"cz","Cuo":"co","Da":"da","Dai":"dj","Dan":"dd","Dang":"df","Dao":"ds","De":"de","Dei":"dw","Den":"dk","Deng":"dh","Di":"di","Dia":"dx","Dian":"dm","Diao":"dp","Die":"dc","Ding":"dg","Diu":"dq","Dong":"dl","Dou":"dt","Du":"du","Duan":"dr","Dui":"dy","Dun":"dz","Duo":"do","Fa":"fs","Fan":"ff","Fang":"fp","Fei":"fw","Fen":"fn","Feng":"fr","Fiao":"fp","Fo":"fl","Fou":"fd","Fu":"fl","Ga":"ga","Gai":"gj","Gan":"gd","Gang":"gf","Gao":"gs","Ge":"ge","Gei":"gw","Gen":"gk","Geng":"gh","Gong":"gl","Gou":"gt","Gu":"gu","Gua":"gx","Guai":"gg","Guan":"gr","Guang":"gn","Gui":"gy","Gun":"gz","Guo":"go","Ha":"ha","Hai":"hj","Han":"hd","Hang":"hf","Hao":"hs","He":"he","Hei":"hw","Hen":"hk","Heng":"hh","Hong":"hl","Hou":"ht","Hu":"hu","Hua":"hx","Huai":"hg","Huan":"hr","Huang":"hn","Hui":"hy","Hun":"hz","Huo":"ho","Ji":"jk","Jia":"js","Jian":"jm","Jiang":"jn","Jiao":"jp","Jie":"jc","Jin":"jb","Jing":"jg","Jiong":"jy","Jiu":"jq","Ju":"jv","Juan":"jt","Jue":"jh","Jun":"jw","Ka":"ka","Kai":"kj","Kan":"kd","Kang":"kf","Kao":"ks","Ke":"ke","Ken":"kk","Keng":"kh","Kong":"kl","Kou":"kt","Ku":"ku","Kua":"kx","Kuai":"kg","Kuan":"kr","Kuang":"kn","Kui":"ky","Kun":"kz","Kuo":"ko","La":"la","Lai":"lj","Lan":"ld","Lang":"lf","Lao":"ls","Le":"le","Lei":"lw","Leng":"lh","Li":"li","Lia":"lx","Lian":"lm","Liang":"ln","Liao":"lp","Lie":"lc","Lin":"lb","Ling":"lg","Liu":"lq","Lo":"ll","Long":"ll","Lou":"lt","Lu":"lu","Luan":"lr","Lun":"lz","Luo":"lo","Ma":"ma","Mai":"mj","Man":"md","Mang":"mf","Mao":"ms","Me":"me","Mei":"mw","Men":"mk","Meng":"mh","Mi":"mi","Mian":"mm","Miao":"mp","Mie":"mc","Min":"mb","Ming":"mg","Miu":"mq","Mo":"mo","Mou":"mt","Mu":"mu","Na":"na","Nai":"nj","Nan":"nd","Nang":"nf","Nao":"ns","Ne":"ne","Nei":"nw","Nen":"nk","Neng":"nh","Ni":"ni","Nian":"nm","Niang":"nn","Niao":"np","Nie":"nc","Nin":"nb","Ning":"ng","Niu":"nq","Nong":"nl","Nou":"nt","Nu":"nu","Nuan":"nr","Nun":"nz","Nuo":"no","Pa":"pa","Pai":"pj","Pan":"pd","Pang":"pf","Pao":"ps","Pei":"pw","Pen":"pk","Peng":"ph","Pi":"pi","Pian":"pm","Piao":"pp","Pie":"pc","Pin":"pb","Ping":"pg","Po":"po","Pou":"pt","Pu":"pu","Qi":"qk","Qia":"qs","Qian":"qm","Qiang":"qx","Qiao":"qp","Qie":"qc","Qin":"qb","Qing":"qg","Qiong":"qy","Qiu":"qq","Qu":"qv","Quan":"qt","Que":"qh","Qun":"qw","Ran":"rd","Rang":"rf","Rao":"rs","Re":"re","Ren":"rk","Reng":"rh","Ri":"ri","Rong":"rl","Rou":"rt","Ru":"ru","Rua":"rx","Ruan":"rr","Rui":"ry","Run":"rz","Ruo":"ro","Sa":"sa","Sai":"sj","San":"sd","Sang":"sf","Sao":"ss","Se":"se","Sen":"sk","Seng":"sh","Sha":"ea","Shai":"ej","Shan":"ed","Shang":"ef","Shao":"es","She":"ee","Shei":"ew","Shen":"ek","Sheng":"eh","Shi":"ei","Shou":"et","Shu":"eu","Shua":"ex","Shuai":"eg","Shuan":"er","Shuang":"en","Shui":"ey","Shun":"ez","Shuo":"eo","Si":"si","Song":"sl","Sou":"st","Su":"su","Suan":"sr","Sui":"sy","Sun":"sz","Suo":"so","Ta":"ta","Tai":"tj","Tan":"td","Tang":"tf","Tao":"ts","Te":"te","Tei":"tw","Teng":"th","Ti":"ti","Tian":"tm","Tiao":"tp","Tie":"tc","Ting":"tg","Tong":"tl","Tou":"tt","Tu":"tu","Tuan":"tr","Tui":"ty","Tun":"tz","Tuo":"to","Xi":"xi","Xia":"xx","Xian":"xm","Xiang":"xn","Xiao":"xp","Xie":"xc","Xin":"xb","Xing":"xg","Xiong":"xl","Xiu":"xq","Xu":"xv","Xuan":"xr","Xue":"xy","Xun":"xw","Za":"za","Zai":"zj","Zan":"zd","Zang":"zf","Zao":"zs","Ze":"ze","Zei":"zw","Zen":"zk","Zeng":"zh","Zha":"qa","Zhai":"fj","Zhan":"qd","Zhang":"qf","Zhao":"fs","Zhe":"fe","Zhen":"qk","Zheng":"qh","Zhi":"fi","Zhong":"fy","Zhou":"qt","Zhu":"qu","Zhua":"fx","Zhuai":"fg","Zhuan":"fr","Zhuang":"fn","Zhui":"fy","Zhun":"fz","Zhuo":"qo","Zi":"zi","Zong":"zl","Zou":"zt","Zu":"zu","Zuan":"zr","Zui":"zy","Zun":"zz","Zuo":"zo"},"DaNiu":{"Lv":"lv","Lve":"lx","Lue":"lx","Nv":"nv","Nve":"nx","Nue":"nx","A":"ea","O":"eo","E":"ee","Ai":"eh","Ei":"ew","Ao":"es","Ou":"er","An":"ed","En":"ek","Ang":"ef","Eng":"ej","Er":"eu","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"ys","You":"yr","Yan":"yd","Yin":"yb","Yang":"yf","Ying":"yg","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wh","Wei":"ww","Wan":"wd","Wen":"wk","Wang":"wf","Weng":"wj","Yu":"yu","Yue":"yh","Yuan":"yj","Yun":"yw","Yong":"yl","Ba":"ba","Bai":"bh","Ban":"bd","Bang":"bf","Bao":"bs","Bei":"bw","Ben":"bk","Beng":"bj","Bi":"bi","Bian":"bc","Biang":"bn","Biao":"bm","Bie":"bp","Bin":"bb","Bing":"bg","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"ch","Can":"cd","Cang":"cf","Cao":"cs","Ce":"ce","Cen":"ck","Ceng":"cj","Cha":"ia","Chai":"ih","Chan":"id","Chang":"if","Chao":"is","Che":"ie","Chen":"ik","Cheng":"ij","Chi":"ii","Chong":"il","Chou":"ir","Chu":"iu","Chua":"iq","Chuai":"ig","Chuan":"iz","Chuang":"ix","Chui":"in","Chun":"iy","Chuo":"io","Ci":"ci","Cong":"cl","Cou":"cr","Cu":"cu","Cuan":"cz","Cui":"cn","Cun":"cy","Cuo":"co","Da":"da","Dai":"dh","Dan":"dd","Dang":"df","Dao":"ds","De":"de","Dei":"dw","Den":"dk","Deng":"dj","Di":"di","Dia":"dk","Dian":"dc","Diao":"dm","Die":"dp","Ding":"dg","Diu":"dt","Dong":"dl","Dou":"dr","Du":"du","Duan":"dz","Dui":"dn","Dun":"dy","Duo":"do","Fa":"fa","Fan":"fd","Fang":"ff","Fei":"fw","Fen":"fk","Feng":"fj","Fiao":"fm","Fo":"fo","Fou":"fr","Fu":"fu","Ga":"ga","Gai":"gh","Gan":"gd","Gang":"gf","Gao":"gs","Ge":"ge","Gei":"gw","Gen":"gk","Geng":"gj","Gong":"gl","Gou":"gr","Gu":"gu","Gua":"gq","Guai":"gg","Guan":"gz","Guang":"gx","Gui":"gn","Gun":"gy","Guo":"go","Ha":"ha","Hai":"hh","Han":"hd","Hang":"hf","Hao":"hs","He":"he","Hei":"hw","Hen":"hk","Heng":"hj","Hong":"hl","Hou":"hr","Hu":"hu","Hua":"hq","Huai":"hg","Huan":"hz","Huang":"hx","Hui":"hn","Hun":"hy","Huo":"ho","Ji":"ji","Jia":"jk","Jian":"jc","Jiang":"jn","Jiao":"jm","Jie":"jp","Jin":"jb","Jing":"jg","Jiong":"jl","Jiu":"jt","Ju":"ju","Juan":"jj","Jue":"jh","Jun":"jw","Ka":"ka","Kai":"kh","Kan":"kd","Kang":"kf","Kao":"ks","Ke":"ke","Ken":"kk","Keng":"kj","Kong":"kl","Kou":"kr","Ku":"ku","Kua":"kq","Kuai":"kg","Kuan":"kz","Kuang":"kx","Kui":"kn","Kun":"ky","Kuo":"ko","La":"la","Lai":"lh","Lan":"ld","Lang":"lf","Lao":"ls","Le":"le","Lei":"lw","Leng":"lj","Li":"li","Lia":"lk","Lian":"lc","Liang":"ln","Liao":"lm","Lie":"lp","Lin":"lb","Ling":"lg","Liu":"lt","Lo":"lo","Long":"ll","Lou":"lr","Lu":"lu","Luan":"lz","Lun":"ly","Luo":"lo","Ma":"ma","Mai":"mh","Man":"md","Mang":"mf","Mao":"ms","Me":"me","Mei":"mw","Men":"mk","Meng":"mj","Mi":"mi","Mian":"mc","Miao":"mm","Mie":"mp","Min":"mb","Ming":"mg","Miu":"mt","Mo":"mo","Mou":"mr","Mu":"mu","Na":"na","Nai":"nh","Nan":"nd","Nang":"nf","Nao":"ns","Ne":"ne","Nei":"nw","Nen":"nk","Neng":"nj","Ni":"ni","Nian":"nc","Niang":"nn","Niao":"nm","Nie":"np","Nin":"nb","Ning":"ng","Niu":"nt","Nong":"nl","Nou":"nr","Nu":"nu","Nuan":"nz","Nun":"ny","Nuo":"no","Pa":"pa","Pai":"ph","Pan":"pd","Pang":"pf","Pao":"ps","Pei":"pw","Pen":"pk","Peng":"pj","Pi":"pi","Pian":"pc","Piao":"pm","Pie":"pp","Pin":"pb","Ping":"pg","Po":"po","Pou":"pr","Pu":"pu","Qi":"qi","Qia":"qk","Qian":"qc","Qiang":"qn","Qiao":"qm","Qie":"qp","Qin":"qb","Qing":"qg","Qiong":"ql","Qiu":"qt","Qu":"qu","Quan":"qj","Que":"qh","Qun":"qw","Ran":"rd","Rang":"rf","Rao":"rs","Re":"re","Ren":"rk","Reng":"rj","Ri":"ri","Rong":"rl","Rou":"rr","Ru":"ru","Rua":"rq","Ruan":"rz","Rui":"rn","Run":"ry","Ruo":"ro","Sa":"sa","Sai":"sh","San":"sd","Sang":"sf","Sao":"ss","Se":"se","Sen":"sk","Seng":"sj","Sha":"ua","Shai":"uh","Shan":"ud","Shang":"uf","Shao":"us","She":"ue","Shei":"uw","Shen":"uk","Sheng":"uj","Shi":"ui","Shou":"ur","Shu":"uu","Shua":"uq","Shuai":"ug","Shuan":"uz","Shuang":"ux","Shui":"un","Shun":"uy","Shuo":"uo","Si":"si","Song":"sl","Sou":"sr","Su":"su","Suan":"sz","Sui":"sn","Sun":"sy","Suo":"so","Ta":"ta","Tai":"th","Tan":"td","Tang":"tf","Tao":"ts","Te":"te","Tei":"tw","Teng":"tj","Ti":"ti","Tian":"tc","Tiao":"tm","Tie":"tp","Ting":"tg","Tong":"tl","Tou":"tr","Tu":"tu","Tuan":"tz","Tui":"tn","Tun":"ty","Tuo":"to","Xi":"xi","Xia":"xk","Xian":"xc","Xiang":"xn","Xiao":"xm","Xie":"xp","Xin":"xb","Xing":"xg","Xiong":"xl","Xiu":"xt","Xu":"xu","Xuan":"xj","Xue":"xh","Xun":"xw","Za":"za","Zai":"zh","Zan":"zd","Zang":"zf","Zao":"zs","Ze":"ze","Zei":"zw","Zen":"zk","Zeng":"zj","Zha":"aa","Zhai":"ah","Zhan":"ad","Zhang":"af","Zhao":"as","Zhe":"ae","Zhen":"ak","Zheng":"aj","Zhi":"ai","Zhong":"al","Zhou":"ar","Zhu":"au","Zhua":"aq","Zhuai":"ag","Zhuan":"az","Zhuang":"ax","Zhui":"an","Zhun":"ay","Zhuo":"ao","Zi":"zi","Zong":"zl","Zou":"zr","Zu":"zu","Zuan":"zz","Zui":"zn","Zun":"zy","Zuo":"zo"},"XiaoLang":{"Lv":"lx","Lve":"lb","Lue":"lb","Nv":"nx","Nve":"nb","Nue":"nb","A":"aa","O":"oo","E":"uu","Ai":"ai","Ei":"ui","Ao":"ao","Ou":"ou","An":"an","En":"un","Ang":"ah","Eng":"un","Er":"ur","Yi":"yi","Ya":"ya","Yo":"yo","Ye":"ye","Yao":"ys","You":"yr","Yan":"yj","Yin":"yd","Yang":"yh","Ying":"yv","Wu":"wu","Wa":"wa","Wo":"wo","Wai":"wk","Wei":"ww","Wan":"wj","Wen":"wm","Wang":"wh","Weng":"wn","Yu":"yu","Yue":"yb","Yuan":"yg","Yun":"yy","Yong":"yl","Ba":"ba","Bai":"bk","Ban":"bj","Bang":"bh","Bao":"bs","Bei":"bw","Ben":"bm","Beng":"bn","Bi":"bi","Bian":"bf","Biang":"bm","Biao":"bc","Bie":"bp","Bin":"bd","Bing":"bv","Bo":"bo","Bu":"bu","Ca":"ca","Cai":"ck","Can":"cj","Cang":"ch","Cao":"cs","Ce":"ce","Cen":"cm","Ceng":"cn","Cha":"ia","Chai":"ik","Chan":"ij","Chang":"ih","Chao":"is","Che":"ie","Chen":"im","Cheng":"in","Chi":"ii","Chong":"il","Chou":"ir","Chu":"iu","Chua":"if","Chuai":"iv","Chuan":"ig","Chuang":"iz","Chui":"id","Chun":"iy","Chuo":"io","Ci":"ci","Cong":"cl","Cou":"cr","Cu":"cu","Cuan":"cg","Cui":"cd","Cun":"cy","Cuo":"co","Da":"da","Dai":"dk","Dan":"dj","Dang":"dh","Dao":"ds","De":"de","Dei":"dw","Den":"dm","Deng":"dn","Di":"di","Dia":"dk","Dian":"df","Diao":"dc","Die":"dp","Ding":"dv","Diu":"dt","Dong":"dl","Dou":"dr","Du":"du","Duan":"dg","Dui":"dd","Dun":"dy","Duo":"do","Fa":"fa","Fan":"fj","Fang":"fh","Fei":"fw","Fen":"fm","Feng":"fn","Fiao":"fc","Fo":"fo","Fou":"fr","Fu":"fu","Ga":"ga","Gai":"gk","Gan":"gj","Gang":"gh","Gao":"gs","Ge":"ge","Gei":"gw","Gen":"gm","Geng":"gn","Gong":"gl","Gou":"gr","Gu":"gu","Gua":"gf","Guai":"gv","Guan":"gg","Guang":"gz","Gui":"gd","Gun":"gy","Guo":"go","Ha":"ha","Hai":"hk","Han":"hj","Hang":"hh","Hao":"hs","He":"he","Hei":"hw","Hen":"hm","Heng":"hn","Hong":"hl","Hou":"hr","Hu":"hu","Hua":"hf","Huai":"hv","Huan":"hg","Huang":"hz","Hui":"hd","Hun":"hy","Huo":"ho","Ji":"ji","Jia":"jk","Jian":"jf","Jiang":"jm","Jiao":"jc","Jie":"jp","Jin":"jd","Jing":"jv","Jiong":"jj","Jiu":"jt","Ju":"ju","Juan":"jg","Jue":"jb","Jun":"jy","Ka":"ka","Kai":"kk","Kan":"kj","Kang":"kh","Kao":"ks","Ke":"ke","Ken":"km","Keng":"kn","Kong":"kl","Kou":"kr","Ku":"ku","Kua":"kf","Kuai":"kv","Kuan":"kg","Kuang":"kz","Kui":"kd","Kun":"ky","Kuo":"ko","La":"la","Lai":"lk","Lan":"lj","Lang":"lh","Lao":"ls","Le":"le","Lei":"lw","Leng":"ln","Li":"li","Lia":"lk","Lian":"lf","Liang":"lm","Liao":"lc","Lie":"lp","Lin":"ld","Ling":"lv","Liu":"lt","Lo":"lo","Long":"ll","Lou":"lr","Lu":"lu","Luan":"lg","Lun":"ly","Luo":"lo","Ma":"ma","Mai":"mk","Man":"mj","Mang":"mh","Mao":"ms","Me":"me","Mei":"mw","Men":"mm","Meng":"mn","Mi":"mi","Mian":"mf","Miao":"mc","Mie":"mp","Min":"md","Ming":"mv","Miu":"mt","Mo":"mo","Mou":"mr","Mu":"mu","Na":"na","Nai":"nk","Nan":"nj","Nang":"nh","Nao":"ns","Ne":"ne","Nei":"nw","Nen":"nm","Neng":"nn","Ni":"ni","Nian":"nf","Niang":"nm","Niao":"nc","Nie":"np","Nin":"nd","Ning":"nv","Niu":"nt","Nong":"nl","Nou":"nr","Nu":"nu","Nuan":"ng","Nun":"ny","Nuo":"no","Pa":"pa","Pai":"pk","Pan":"pj","Pang":"ph","Pao":"ps","Pei":"pw","Pen":"pm","Peng":"pn","Pi":"pi","Pian":"pf","Piao":"pc","Pie":"pp","Pin":"pd","Ping":"pv","Po":"po","Pou":"pr","Pu":"pu","Qi":"qi","Qia":"qk","Qian":"qf","Qiang":"qm","Qiao":"qc","Qie":"qp","Qin":"qd","Qing":"qv","Qiong":"qj","Qiu":"qt","Qu":"qu","Quan":"qg","Que":"qb","Qun":"qy","Ran":"rj","Rang":"rh","Rao":"rs","Re":"re","Ren":"rm","Reng":"rn","Ri":"ri","Rong":"rl","Rou":"rr","Ru":"ru","Rua":"rf","Ruan":"rg","Rui":"rd","Run":"ry","Ruo":"ro","Sa":"sa","Sai":"sk","San":"sj","Sang":"sh","Sao":"ss","Se":"se","Sen":"sm","Seng":"sn","Sha":"va","Shai":"vk","Shan":"vj","Shang":"vh","Shao":"vs","She":"ve","Shei":"vw","Shen":"vm","Sheng":"vn","Shi":"vi","Shou":"vr","Shu":"vu","Shua":"vf","Shuai":"vv","Shuan":"vg","Shuang":"vz","Shui":"vd","Shun":"vy","Shuo":"vo","Si":"si","Song":"sl","Sou":"sr","Su":"su","Suan":"sg","Sui":"sd","Sun":"sy","Suo":"so","Ta":"ta","Tai":"tk","Tan":"tj","Tang":"th","Tao":"ts","Te":"te","Tei":"tw","Teng":"tn","Ti":"ti","Tian":"tf","Tiao":"tc","Tie":"tp","Ting":"tv","Tong":"tl","Tou":"tr","Tu":"tu","Tuan":"tg","Tui":"td","Tun":"ty","Tuo":"to","Xi":"xi","Xia":"xk","Xian":"xf","Xiang":"xm","Xiao":"xc","Xie":"xp","Xin":"xd","Xing":"xv","Xiong":"xj","Xiu":"xt","Xu":"xu","Xuan":"xg","Xue":"xb","Xun":"xy","Za":"za","Zai":"zk","Zan":"zj","Zang":"zh","Zao":"zs","Ze":"ze","Zei":"zw","Zen":"zm","Zeng":"zn","Zha":"ea","Zhai":"ek","Zhan":"ej","Zhang":"eh","Zhao":"es","Zhe":"ee","Zhen":"em","Zheng":"en","Zhi":"ei","Zhong":"el","Zhou":"er","Zhu":"eu","Zhua":"ef","Zhuai":"ev","Zhuan":"eg","Zhuang":"ez","Zhui":"ed","Zhun":"ey","Zhuo":"eo","Zi":"zi","Zong":"zl","Zou":"zr","Zu":"zu","Zuan":"zg","Zui":"zd","Zun":"zy","Zuo":"zo"}}
\ No newline at end of file
diff --git a/Flow.Launcher/ResultListBox.xaml b/Flow.Launcher/ResultListBox.xaml
index 8cb15400f..e469bb63b 100644
--- a/Flow.Launcher/ResultListBox.xaml
+++ b/Flow.Launcher/ResultListBox.xaml
@@ -36,6 +36,7 @@
+
@@ -66,7 +67,7 @@
Grid.Column="2"
Margin="0 0 10 0"
VerticalAlignment="Center"
- Visibility="{Binding ShowOpenResultHotkey}">
+ Visibility="{Binding Settings.ShowOpenResultHotkey, Mode=OneWay, Converter={StaticResource BoolToVisibilityConverter}}">
@@ -79,7 +80,7 @@
Style="{DynamicResource ItemHotkeyStyle}">
-
+
diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs
index bec59a2b1..e5b70cd87 100644
--- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs
+++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneGeneralViewModel.cs
@@ -35,6 +35,7 @@ public partial class SettingsPaneGeneralViewModel : BaseModel
public class SearchWindowAlignData : DropdownDataGeneric { }
public class SearchPrecisionData : DropdownDataGeneric { }
public class LastQueryModeData : DropdownDataGeneric { }
+ public class DoublePinyinSchemaData : DropdownDataGeneric { }
public bool StartFlowLauncherOnSystemStartup
{
@@ -177,6 +178,7 @@ public partial class SettingsPaneGeneralViewModel : BaseModel
DropdownDataGeneric.UpdateLabels(SearchWindowAligns);
DropdownDataGeneric.UpdateLabels(SearchPrecisionScores);
DropdownDataGeneric.UpdateLabels(LastQueryModes);
+ DropdownDataGeneric.UpdateLabels(DoublePinyinSchemas);
// Since we are using Binding instead of DynamicResource, we need to manually trigger the update
OnPropertyChanged(nameof(AlwaysPreviewToolTip));
}
@@ -262,9 +264,25 @@ public partial class SettingsPaneGeneralViewModel : BaseModel
public bool ShouldUsePinyin
{
get => Settings.ShouldUsePinyin;
- set => Settings.ShouldUsePinyin = value;
+ set
+ {
+ if (value == false && UseDoublePinyin == true)
+ {
+ UseDoublePinyin = false;
+ }
+ Settings.ShouldUsePinyin = value;
+ }
}
+ public bool UseDoublePinyin
+ {
+ set => Settings.UseDoublePinyin = value;
+ get => Settings.UseDoublePinyin;
+ }
+
+ public List DoublePinyinSchemas { get; } =
+ DropdownDataGeneric.GetValues("DoublePinyinSchemas");
+
public List Languages => _translater.LoadAvailableLanguages();
public string AlwaysPreviewToolTip => string.Format(
diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneHotkeyViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneHotkeyViewModel.cs
index 7a7c19dd3..fdc9ef530 100644
--- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneHotkeyViewModel.cs
+++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneHotkeyViewModel.cs
@@ -69,15 +69,33 @@ public partial class SettingsPaneHotkeyViewModel : BaseModel
return;
}
- var window = new CustomQueryHotkeySetting(Settings);
- window.UpdateItem(item);
- window.ShowDialog();
+ var settingItem = Settings.CustomPluginHotkeys.FirstOrDefault(o =>
+ o.ActionKeyword == item.ActionKeyword && o.Hotkey == item.Hotkey);
+ if (settingItem == null)
+ {
+ App.API.ShowMsgBox(App.API.GetTranslation("invalidPluginHotkey"));
+ return;
+ }
+
+ var window = new CustomQueryHotkeySetting(settingItem);
+ if (window.ShowDialog() is not true) return;
+
+ var index = Settings.CustomPluginHotkeys.IndexOf(settingItem);
+ Settings.CustomPluginHotkeys[index] = new CustomPluginHotkey(window.Hotkey, window.ActionKeyword);
+ HotKeyMapper.RemoveHotkey(settingItem.Hotkey); // remove origin hotkey
+ HotKeyMapper.SetCustomQueryHotkey(Settings.CustomPluginHotkeys[index]); // set new hotkey
}
[RelayCommand]
private void CustomHotkeyAdd()
{
- new CustomQueryHotkeySetting(Settings).ShowDialog();
+ var window = new CustomQueryHotkeySetting();
+ if (window.ShowDialog() is true)
+ {
+ var customHotkey = new CustomPluginHotkey(window.Hotkey, window.ActionKeyword);
+ Settings.CustomPluginHotkeys.Add(customHotkey);
+ HotKeyMapper.SetCustomQueryHotkey(customHotkey); // set new hotkey
+ }
}
[RelayCommand]
@@ -114,10 +132,18 @@ public partial class SettingsPaneHotkeyViewModel : BaseModel
return;
}
- var window = new CustomShortcutSetting(item.Key, item.Value, this);
+ var settingItem = Settings.CustomShortcuts.FirstOrDefault(o =>
+ o.Key == item.Key && o.Value == item.Value);
+ if (settingItem == null)
+ {
+ App.API.ShowMsgBox(App.API.GetTranslation("invalidShortcut"));
+ return;
+ }
+
+ var window = new CustomShortcutSetting(settingItem.Key, settingItem.Value, this);
if (window.ShowDialog() is not true) return;
- var index = Settings.CustomShortcuts.IndexOf(item);
+ var index = Settings.CustomShortcuts.IndexOf(settingItem);
Settings.CustomShortcuts[index] = new CustomShortcutModel(window.Key, window.Value);
}
diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs
index 07df0682d..efe67d016 100644
--- a/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs
+++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPanePluginStoreViewModel.cs
@@ -1,7 +1,9 @@
-using System.Collections.Generic;
+using System;
+using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Input;
+using Flow.Launcher.Core.Plugin;
using Flow.Launcher.Plugin;
using Flow.Launcher.ViewModel;
@@ -96,6 +98,35 @@ public partial class SettingsPanePluginStoreViewModel : BaseModel
}
}
+ [RelayCommand]
+ private async Task InstallPluginAsync()
+ {
+ var file = GetFileFromDialog(
+ App.API.GetTranslation("SelectZipFile"),
+ $"{App.API.GetTranslation("ZipFiles")} (*.zip)|*.zip");
+
+ if (!string.IsNullOrEmpty(file))
+ await PluginInstaller.InstallPluginAndCheckRestartAsync(file);
+ }
+
+ private static string GetFileFromDialog(string title, string filter = "")
+ {
+ var dlg = new Microsoft.Win32.OpenFileDialog
+ {
+ InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + "\\Downloads",
+ Multiselect = false,
+ CheckFileExists = true,
+ CheckPathExists = true,
+ Title = title,
+ Filter = filter
+ };
+ var result = dlg.ShowDialog();
+ if (result == true)
+ return dlg.FileName;
+
+ return string.Empty;
+ }
+
public bool SatisfiesFilter(PluginStoreItemViewModel plugin)
{
// Check plugin language
diff --git a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs
index b62a35495..3bee2a2b6 100644
--- a/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs
+++ b/Flow.Launcher/SettingPages/ViewModels/SettingsPaneThemeViewModel.cs
@@ -136,6 +136,7 @@ public partial class SettingsPaneThemeViewModel : BaseModel
};
Settings.ColorScheme = value;
_ = _theme.RefreshFrameAsync();
+ Win32Helper.EnableWin32DarkMode(value);
}
}
diff --git a/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml b/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml
index 7f8555d65..df0243ce8 100644
--- a/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml
+++ b/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml
@@ -91,7 +91,10 @@
-
+
@@ -196,7 +200,10 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ Sub="{DynamicResource KoreanImeRegistryTooltip}"
+ Type="First">
+ Sub="{DynamicResource KoreanImeOpenLinkToolTip}"
+ Type="Last">
diff --git a/Flow.Launcher/SettingPages/Views/SettingsPaneHotkey.xaml b/Flow.Launcher/SettingPages/Views/SettingsPaneHotkey.xaml
index 89eb2dccd..d7f5772bb 100644
--- a/Flow.Launcher/SettingPages/Views/SettingsPaneHotkey.xaml
+++ b/Flow.Launcher/SettingPages/Views/SettingsPaneHotkey.xaml
@@ -51,7 +51,10 @@
-
+
-
+
+
-
+
-
+
-
+
-
+
-
+
+ Sub="{Binding BackdropSubText}"
+ Type="First">
+ Icon=""
+ Type="Last">
-
+
-
+ ())
+ foreach (var pair in PluginManager.GetResultUpdatePlugin())
{
var plugin = (IResultUpdated)pair.Plugin;
plugin.ResultsUpdated += (s, e) =>
@@ -821,6 +834,7 @@ namespace Flow.Launcher.ViewModel
public bool MainWindowVisibilityStatus { get; set; } = true;
public event VisibilityChangedEventHandler VisibilityChanged;
+ public event ActualApplicationThemeChangedEventHandler ActualApplicationThemeChanged;
public Visibility ClockPanelVisibility { get; set; }
public Visibility SearchIconVisibility { get; set; }
@@ -1975,6 +1989,7 @@ namespace Flow.Launcher.ViewModel
{
_resultsViewUpdateTask.Dispose();
}
+ ThemeManager.Current.ActualApplicationThemeChanged -= ThemeManager_ActualApplicationThemeChanged;
_disposed = true;
}
}
diff --git a/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs b/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs
index d1cf74501..f5523212e 100644
--- a/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs
+++ b/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs
@@ -1,5 +1,5 @@
using System;
-using System.Linq;
+using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Input;
using Flow.Launcher.Core.Plugin;
using Flow.Launcher.Plugin;
@@ -9,27 +9,28 @@ namespace Flow.Launcher.ViewModel
{
public partial class PluginStoreItemViewModel : BaseModel
{
- private PluginPair PluginManagerData => PluginManager.GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7");
+ private readonly UserPlugin _newPlugin;
+ private readonly PluginPair _oldPluginPair;
+
public PluginStoreItemViewModel(UserPlugin plugin)
{
- _plugin = plugin;
+ _newPlugin = plugin;
+ _oldPluginPair = PluginManager.GetPluginForId(plugin.ID);
}
- private UserPlugin _plugin;
+ public string ID => _newPlugin.ID;
+ public string Name => _newPlugin.Name;
+ public string Description => _newPlugin.Description;
+ public string Author => _newPlugin.Author;
+ public string Version => _newPlugin.Version;
+ public string Language => _newPlugin.Language;
+ public string Website => _newPlugin.Website;
+ public string UrlDownload => _newPlugin.UrlDownload;
+ public string UrlSourceCode => _newPlugin.UrlSourceCode;
+ public string IcoPath => _newPlugin.IcoPath;
- public string ID => _plugin.ID;
- public string Name => _plugin.Name;
- public string Description => _plugin.Description;
- public string Author => _plugin.Author;
- public string Version => _plugin.Version;
- public string Language => _plugin.Language;
- public string Website => _plugin.Website;
- public string UrlDownload => _plugin.UrlDownload;
- public string UrlSourceCode => _plugin.UrlSourceCode;
- public string IcoPath => _plugin.IcoPath;
-
- public bool LabelInstalled => PluginManager.GetPluginForId(_plugin.ID) != null;
- public bool LabelUpdate => LabelInstalled && new Version(_plugin.Version) > new Version(PluginManager.GetPluginForId(_plugin.ID).Metadata.Version);
+ public bool LabelInstalled => _oldPluginPair != null;
+ public bool LabelUpdate => LabelInstalled && new Version(_newPlugin.Version) > new Version(_oldPluginPair.Metadata.Version);
internal const string None = "None";
internal const string RecentlyUpdated = "RecentlyUpdated";
@@ -41,15 +42,15 @@ namespace Flow.Launcher.ViewModel
get
{
string category = None;
- if (DateTime.Now - _plugin.LatestReleaseDate < TimeSpan.FromDays(7))
+ if (DateTime.Now - _newPlugin.LatestReleaseDate < TimeSpan.FromDays(7))
{
category = RecentlyUpdated;
}
- if (DateTime.Now - _plugin.DateAdded < TimeSpan.FromDays(7))
+ if (DateTime.Now - _newPlugin.DateAdded < TimeSpan.FromDays(7))
{
category = NewRelease;
}
- if (PluginManager.GetPluginForId(_plugin.ID) != null)
+ if (_oldPluginPair != null)
{
category = Installed;
}
@@ -59,11 +60,22 @@ namespace Flow.Launcher.ViewModel
}
[RelayCommand]
- private void ShowCommandQuery(string action)
+ private async Task ShowCommandQueryAsync(string action)
{
- var actionKeyword = PluginManagerData.Metadata.ActionKeywords.Any() ? PluginManagerData.Metadata.ActionKeywords[0] + " " : String.Empty;
- App.API.ChangeQuery($"{actionKeyword}{action} {_plugin.Name}");
- App.API.ShowMainWindow();
+ switch (action)
+ {
+ case "install":
+ await PluginInstaller.InstallPluginAndCheckRestartAsync(_newPlugin);
+ break;
+ case "uninstall":
+ await PluginInstaller.UninstallPluginAndCheckRestartAsync(_oldPluginPair.Metadata);
+ break;
+ case "update":
+ await PluginInstaller.UpdatePluginAndCheckRestartAsync(_newPlugin, _oldPluginPair.Metadata);
+ break;
+ default:
+ break;
+ }
}
}
}
diff --git a/Flow.Launcher/ViewModel/PluginViewModel.cs b/Flow.Launcher/ViewModel/PluginViewModel.cs
index 01fa3d203..ea222d023 100644
--- a/Flow.Launcher/ViewModel/PluginViewModel.cs
+++ b/Flow.Launcher/ViewModel/PluginViewModel.cs
@@ -1,5 +1,4 @@
-using System.Linq;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
@@ -32,21 +31,6 @@ namespace Flow.Launcher.ViewModel
}
}
- private static string PluginManagerActionKeyword
- {
- get
- {
- var keyword = PluginManager
- .GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7")
- .Metadata.ActionKeywords.FirstOrDefault();
- return keyword switch
- {
- null or "*" => string.Empty,
- _ => keyword
- };
- }
- }
-
private async Task LoadIconAsync()
{
Image = await App.API.LoadImageAsync(PluginPair.Metadata.IcoPath);
@@ -186,10 +170,9 @@ namespace Flow.Launcher.ViewModel
}
[RelayCommand]
- private void OpenDeletePluginWindow()
+ private async Task OpenDeletePluginWindowAsync()
{
- App.API.ChangeQuery($"{PluginManagerActionKeyword} uninstall {PluginPair.Metadata.Name}".Trim(), true);
- App.API.ShowMainWindow();
+ await PluginInstaller.UninstallPluginAndCheckRestartAsync(PluginPair.Metadata);
}
[RelayCommand]
diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs
index 648ac49bb..c58abae28 100644
--- a/Flow.Launcher/ViewModel/ResultViewModel.cs
+++ b/Flow.Launcher/ViewModel/ResultViewModel.cs
@@ -64,9 +64,6 @@ namespace Flow.Launcher.ViewModel
public Settings Settings { get; }
- public Visibility ShowOpenResultHotkey =>
- Settings.ShowOpenResultHotkey ? Visibility.Visible : Visibility.Collapsed;
-
public Visibility ShowDefaultPreview => Result.PreviewPanel == null ? Visibility.Visible : Visibility.Collapsed;
public Visibility ShowCustomizedPreview => Result.PreviewPanel == null ? Visibility.Collapsed : Visibility.Visible;
@@ -152,8 +149,6 @@ namespace Flow.Launcher.ViewModel
private bool PreviewImageAvailable => !string.IsNullOrEmpty(Result.Preview.PreviewImagePath) || Result.Preview.PreviewDelegate != null;
- public string OpenResultModifiers => Settings.OpenResultModifiers;
-
public string ShowTitleToolTip => string.IsNullOrEmpty(Result.TitleToolTip)
? Result.Title
: Result.TitleToolTip;
diff --git a/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs b/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs
index 1eee6dba5..67bbbd930 100644
--- a/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs
+++ b/Flow.Launcher/ViewModel/SelectBrowserViewModel.cs
@@ -1,6 +1,5 @@
using System.Collections.ObjectModel;
using System.Linq;
-using System.Windows;
using CommunityToolkit.Mvvm.Input;
using Flow.Launcher.Infrastructure.UserSettings;
using Flow.Launcher.Plugin;
diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml
index 4a764bbfa..66e30855f 100644
--- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml
+++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml
@@ -26,6 +26,6 @@
Wenn Sie nicht Chrome, Firefox oder Edge verwenden oder deren portable Version nutzen, müssen Sie das Lesezeichen-Datenverzeichnis hinzufügen und die richtige Browser-Engine auswählen, damit dieses Plug-in funktioniert.Zum Beispiel: Die Engine von Brave ist Chromium, und deren Standardspeicherort der Lesezeichen-Daten ist:
%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". Bei der Firefox-Engine ist das Lesezeichenverzeichnis der Ordner userdata, der die Datei places.sqlite enthält.
- Load favicons (can be time consuming during startup)
+ Favicons laden (kann während des Starts zeitaufwendig sein)
diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml
index 2dff7543f..9f92d86b1 100644
--- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml
@@ -19,12 +19,12 @@
Ścieżka katalogu danychDodajEdytuj
- Usu
+ UsuńPrzeglądajInneSilnik przeglądarkiJeśli nie używasz Chrome, Firefox lub Edge, lub używasz ich wersji przenośnej, musisz dodać katalog danych zakładek i wybrać poprawny silnik przeglądarki, aby wtyczka działała.Na przykład: silnikiem przeglądarki Brave jest Chromium, a domyślna lokalizacja danych zakładek to: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". W przypadku silnika Firefoksa, katalog zakładek to folder danych użytkownika zawierający plik places.sqlite.
- Load favicons (can be time consuming during startup)
+ Wczytaj ikony ulubionych (może być czasochłonne podczas uruchamiania)
diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml
index b8fd4fb83..07ccc2ea4 100644
--- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml
@@ -25,6 +25,6 @@
Браузерний рушійЯкщо ви не використовуєте Chrome, Firefox або Edge, або використовуєте їхні портативні версії, вам потрібно додати каталог даних закладок і вибрати правильний рушій браузера, щоб цей плагін працював.Наприклад: Рушій Brave - Chromium, і за замовчуванням розташування даних закладок: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". Для браузера Firefox директорія закладок - це папка userdata, що містить файл places.sqlite.
- Load favicons (can be time consuming during startup)
+ Завантажити піктограми (може зайняти багато часу під час запуску)
diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs b/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs
index f35e64237..b598995df 100644
--- a/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs
@@ -19,7 +19,7 @@ namespace Flow.Launcher.Plugin.Calculator
@"bin2dec|hex2dec|oct2dec|" +
@"factorial|sign|isprime|isinfty|" +
@"==|~=|&&|\|\||(?:\<|\>)=?|" +
- @"[ei]|[0-9]|[\+\%\-\*\/\^\., ""]|[\(\)\|\!\[\]]" +
+ @"[ei]|[0-9]|0x[\da-fA-F]+|[\+\%\-\*\/\^\., ""]|[\(\)\|\!\[\]]" +
@")+$", RegexOptions.Compiled);
private static readonly Regex RegBrackets = new Regex(@"[\(\)\[\]]", RegexOptions.Compiled);
private static Engine MagesEngine;
diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json
index 485babd26..3168edfcc 100644
--- a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json
@@ -2,11 +2,11 @@
"ID": "CEA0FDFC6D3B4085823D60DC76F28855",
"ActionKeyword": "*",
"Name": "Calculator",
- "Description": "Provide mathematical calculations.(Try 5*3-2 in Flow Launcher)",
+ "Description": "Perform mathematical calculations (including hexadecimal values)",
"Author": "cxfksword",
"Version": "1.0.0",
"Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.Calculator.dll",
"IcoPath": "Images\\calculator.png"
-}
\ No newline at end of file
+}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml
index d327dcebb..ebdb0ff35 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml
@@ -96,8 +96,11 @@
حذفحذف الملف الحالي نهائيًاحذف المجلد الحالي نهائيًا
- المسار:
- Name:
+ اسم البرنامج
+ Type
+ المسار
+ ملف
+ مجلدحذف المحددتشغيل كمستخدم مختلفتشغيل العنصر المحدد باستخدام حساب مستخدم مختلف
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml
index 80e181a8f..38f4f145e 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml
@@ -96,8 +96,11 @@
SmazatTrvale odstranit aktuální souborTrvale smazat aktuální složku
- Cesta:
- Name:
+ Jméno
+ Type
+ Cesta
+ Soubor
+ SložkaOdstranit vybranýSpustit jako jiný uživatelSpustí vybranou položku jako uživatel s jiným účtem
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml
index 7cbe281d8..8c011814c 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml
@@ -96,8 +96,11 @@
SletPermanently delete current filePermanently delete current folder
- Path:
- Name:
+ Name
+ Type
+ Path
+ File
+ FolderDelete the selectedRun as different userRun the selected using a different user account
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml
index 10700a0ee..1d8c3937a 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml
@@ -3,8 +3,8 @@
Bitte treffen Sie zuerst eine Auswahl
- Please select a folder path.
- Please choose a different name or folder path.
+ Bitte wählen Sie einen Ordnerpfad aus.
+ Bitte wählen Sie einen anderen Namen oder Ordnerpfad.Bitte wählen Sie einen Ordner-Link ausSind Sie sicher, dass Sie {0} löschen wollen?Sind Sie sicher, dass Sie diese Datei dauerhaft löschen möchten?
@@ -27,14 +27,14 @@
HinzufügenAllgemeine EinstellungAktions-Schlüsselwörter individuell anpassen
- Customise Quick Access
+ Schnellzugriff individuell anpassenSchnellzugriff-LinksEveryhting-EinstellungVorschau-PanelGrößeErstellungsdatumÄnderungsdatum
- File Age
+ DateialterDatei-Info anzeigenDatums- und ZeitformatSortieroption:
@@ -44,7 +44,7 @@
Shell-PfadIndexsuche ausgeschlossene PfadeOrt des Suchergebnisses als Arbeitsverzeichnis der ausführbaren Datei verwenden
- Display more information like size and age in tooltips
+ Mehr Informationen wie Größe und Alter in Tooltips anzeigenDrücken Sie Enter, um Ordner im Default-Dateimanager zu öffnenIndexsuche für Pfadsuche verwendenIndexierungsoptionen
@@ -81,23 +81,26 @@
Strg+Enter, um das Verzeichnis zu öffnenStrg+Enter, um den enthaltenden Ordner zu öffnen
- {0}{4}Size: {1}{4}Date created: {2}{4}Date modified: {3}
+ {0}{4}Größe: {1}{4}Erstellungsdatum: {2}{4}Änderunsgdatum: {3}Unbekannt
- {0}{3}Space free: {1}{3}Total size: {2}
+ {0}{3}Platz frei: {1}{3}Größe total: {2}Pfad kopierenPfad des aktuellen Elements in Zwischenablage kopieren
- Copy name
- Copy name of current item to clipboard
+ Name kopieren
+ Name des aktuellen Elements in Zwischenablage kopierenKopierenAktuelle Datei in Zwischenablage kopierenAktuellen Ordner in Zwischenablage kopierenLöschenAktuelle Datei dauerhaft löschenAktuellen Ordner dauerhaft löschen
- Pfad:
- Name:
+ Name
+ Typ
+ Pfad
+ Datei
+ OrdnerAusgewähltes löschenAls anderer Benutzer ausführenAusgewähltes unter Verwendung eines anderen Benutzerkontos ausführen
@@ -164,12 +167,12 @@
Everything-Dienst erfolgreich installiertDer Everything-Dienst konnte nicht automatisch installiert werden. Bitte installieren Sie ihn manuell über https://www.voidtools.comKlicken Sie hier, um es zu starten
- Es kann keine Everything-Installation gefuinden werden, möchten Sie einen Ort manuell auswählen?{0}{0}Klicken Sie auf Nein und Everything wird automatisch für Sie installiert
+ Es kann keine Everything-Installation gefunden werden, möchten Sie einen Ort manuell auswählen?{0}{0}Klicken Sie auf Nein und Everything wird automatisch für Sie installiertMöchten Sie die Inhaltssuche für Everything aktivieren?Es kann sehr langsam sein ohne Index (was nur in Everything v1.5+ unterstützt wird)
- Unable to find Everything.exe
- Failed to install Everything, please install it manually
+ Everything.exe kann nicht gefunden werden
+ Everything konnte nicht installiert werden, bitte installieren Sie es manuellNatives Kontextmenü
@@ -178,10 +181,10 @@
Unten können Sie die Elemente angeben, die Sie aus dem Kontextmenü ausschließen möchten. Diese können partiell (z. B. „Stift mit“) oder vollständig („Öffnen mit“) sein.
- Today
- {0} days ago
- 1 month ago
- {0} months ago
- 1 year ago
- {0} years ago
+ Heute
+ Vor {0} Tagen
+ Vor 1 Monat
+ Vor {0} Monaten
+ Vor 1 Jahr
+ Vor {0} Jahren
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml
index 4e372adbe..ae541a745 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml
@@ -96,8 +96,11 @@
EliminarPermanently delete current filePermanently delete current folder
- Path:
- Name:
+ Name
+ Type
+ Ruta
+ Archivo
+ CarpetaDelete the selectedRun as different userRun the selected using a different user account
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml
index 4f5977fa1..10ee4a9a4 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml
@@ -34,7 +34,7 @@
TamañoFecha de creaciónFecha de modificación
- Edad del archivo
+ Antigüedad del archivoMostrar información del archivoFormato de fecha y horaOrdenar por:
@@ -44,7 +44,7 @@
Ruta del ShellRutas excluídas del índice de búsquedaUsar la ubicación de los resultados de búsqueda como directorio de trabajo del ejecutable
- Mostrar más información, como tamaño y antigüedad, en los consejos (tooltips)
+ Mostrar más información, como el tamaño y la antigüedad, en los mensajes emergentesPulsar Entrar para abrir la carpeta en el administrador de archivos predeterminadoUsar búsqueda indexada para buscar rutasOpciones de indexación
@@ -96,8 +96,11 @@
EliminarElimina permanentemente el archivo actualElimina permanentemente la carpeta actual
- Ruta:
- Nombre:
+ Nombre
+ Tipo
+ Ruta
+ Archivo
+ CarpetaElimina el seleccionadoEjecutar como usuario diferenteEjecuta la selección usando una cuenta de usuario diferente
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml
index 726fbe7d7..8809004c7 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml
@@ -96,8 +96,11 @@
SupprimerSupprimer définitivement le fichier actuelSupprimer définitivement le dossier actuel
- Chemin :
- Nom :
+ Nom
+ Type
+ Chemin
+ Fichier
+ DossierSupprimer la sélectionExécuter en tant qu'utilisateur différentExécuter le programme sélectionné en utilisant un autre compte d'utilisateur
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml
index 6e955848d..a18a15aad 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml
@@ -96,8 +96,11 @@
מחקמחק לצמיתות את הקובץ הנוכחימחק לצמיתות את התיקייה הנוכחית
- נתיב:
- שם:
+ שם
+ Type
+ נתיב
+ קובץ
+ תיקייהמחק את הפריט שנבחרהפעל כמשתמש אחרהפעל את הפריט שנבחר באמצעות חשבון משתמש אחר
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml
index df756e886..3afaf2f25 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml
@@ -96,8 +96,11 @@
CancellaElimina permanentemente il file correnteElimina definitivamente la cartella corrente
- Percorso:
- Name:
+ Nome
+ Type
+ Percorso
+ File
+ CartellaElimina il selezionatoEsegui come utente differenteEsegui la selezione utilizzando un altro account utente
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml
index 3d944a2b8..648efe642 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml
@@ -96,8 +96,11 @@
削除現在のファイルを完全に削除現在のフォルダーを完全に削除
- Path:
- Name:
+ 名前
+ Type
+ Path
+ ファイル
+ フォルダーDelete the selectedRun as different userRun the selected using a different user account
@@ -138,7 +141,7 @@
Warning: Everything service is not runningError while querying EverythingSort By
- Name
+ 名前PathサイズExtension
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml
index 27e4aa76a..cf4d8b8ad 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml
@@ -96,8 +96,11 @@
삭제이 파일을 영구적으로 삭제이 폴더를 영구적으로 삭제
- 경로:
- Name:
+ Name
+ Type
+ Path
+ 파일
+ 폴더선택 항목을 삭제다른 유저 권한으로 실행선택한 사용자 계정으로 실행
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml
index e5ef88959..733136c36 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml
@@ -96,8 +96,11 @@
SlettSlett gjeldende fil permanentSlett gjeldende mappe permanent
- Sti:
- Name:
+ Navn
+ Type
+ Sti
+ Fil
+ MappeSlett valgteKjør som annen brukerKjør valgte med en annen brukerkonto
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml
index d8178a1f3..c4bfb639d 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml
@@ -96,8 +96,11 @@
VerwijderPermanently delete current filePermanently delete current folder
- Path:
- Name:
+ Name
+ Type
+ Pad
+ Bestand
+ MapDelete the selectedRun as different userRun the selected using a different user account
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml
index 5a29fd9ab..ddf56ab37 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml
@@ -2,9 +2,9 @@
- Pierw dokonaj wyboru
- Please select a folder path.
- Please choose a different name or folder path.
+ Najpierw dokonaj wyboru
+ Wybierz ścieżkę folderu.
+ Wybierz inną nazwę lub ścieżkę folderu.Musisz wybrać któryś folder z listyCzy jesteś pewien że chcesz usunąć {0}?Jesteś pewny, że chcesz usunąć ten plik trwale?
@@ -27,14 +27,14 @@
DodajUstawienia ogólneZmień słowa kluczowe akcji
- Customise Quick Access
+ Dostosuj Szybki DostępLinki szybkiego dostępuUstawienia EverythingPanel podgląduRozmiarData utworzeniaData modyfikacji
- File Age
+ Wiek plikuWyświetl informacje o plikuFormat daty i czasuOpcje sortowania:
@@ -44,7 +44,7 @@
Ścieżka powłokiWykluczone ścieżki indeksuUżyj lokalizacji wyników wyszukiwania jako katalogu roboczego pliku wykonywalnego
- Display more information like size and age in tooltips
+ Wyświetlaj więcej informacji, takich jak rozmiar i wiek w podpowiedziachNaciśnij Enter, aby otworzyć folder w domyślnym menedżerze plikówUżyj wyszukiwania indeksowego do przeszukiwania ścieżekOpcje indeksowania
@@ -81,23 +81,26 @@
Ctrl + Enter, aby otworzyć folderCtrl + Enter, aby otworzyć folder zawierający
- {0}{4}Size: {1}{4}Date created: {2}{4}Date modified: {3}
+ {0} {4}Rozmiar: {1} {4}Data utworzenia: {2} {4} Data modyfikacji: {3}Nieznane
- {0}{3}Space free: {1}{3}Total size: {2}
+ {0} {3}Wolna przestrzeń: {1} {3}Rozmiar całkowity: {2}Skopiuj ŚcieżkęKopiuj ścieżkę bieżącego elementu do schowka
- Copy name
- Copy name of current item to clipboard
+ Kopiuj nazwę
+ Kopiuj nazwę bieżącego elementu do schowkaKopiujKopiuj bieżący plik do schowkaKopiuj bieżący folder do schowkaUsuTrwale usuń bieżący plikTrwale usuń bieżący folder
- Ścieżka:
- Name:
+ Nazwa
+ Type
+ Ścieżka
+ Plik
+ FolderUsuń zaznaczoneUruchom jako inny użytkownikUruchom wybrane używając innego konta użytkownika
@@ -168,8 +171,8 @@
Czy chcesz włączyć wyszukiwanie zawartości dla programu Everything?Może działać bardzo wolno bez indeksu (który jest obsługiwany tylko w Everything w wersji 1.5 i nowszych)
- Unable to find Everything.exe
- Failed to install Everything, please install it manually
+ Nie znaleziono pliku Everything.exe
+ Błąd instalacji Everything, zainstaluj aplikację samodzielnieNatywne menu kontekstowe
@@ -178,10 +181,10 @@
Poniżej możesz określić elementy, które chcesz wykluczyć z menu kontekstowego. Mogą być one częściowe (np. "otw w") lub pełne ("Otwórz za pomocą").
- Today
- {0} days ago
- 1 month ago
- {0} months ago
- 1 year ago
- {0} years ago
+ Dzisiaj
+ {0} dni wcześniej
+ 1 miesiąc wcześniej
+ {0} miesięcy wcześniej
+ 1 rok temu
+ {0} lat temu
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml
index 5785a5616..d0a260290 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml
@@ -96,8 +96,11 @@
ApagarPermanently delete current filePermanently delete current folder
- Caminho:
- Name:
+ Nome
+ Type
+ Path
+ Arquivo
+ PastaDelete the selectedRun as different userRun the selected using a different user account
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml
index 5db8251e2..98a77d06a 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml
@@ -96,8 +96,11 @@
EliminarEliminar permanentemente o ficheiro atualEliminar permanentemente a pasta atual
- Caminho:
- Nome:
+ Nome
+ Tipo
+ Caminho
+ Ficheiro
+ PastaEliminar seleçãoExecutar com outro utilizadorExecutar ações com uma conta de utilizador diferente
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml
index 35bd1d87d..44a3a9b65 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml
@@ -96,8 +96,11 @@
УдалитьPermanently delete current filePermanently delete current folder
- Путь:
- Name:
+ Name
+ Type
+ Path
+ Файл
+ ПапкаDelete the selectedЗапустить от имени другого пользователяRun the selected using a different user account
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml
index 1323d6ae0..7c3f5deff 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml
@@ -96,8 +96,11 @@
OdstrániťNatrvalo odstrániť aktuálny súborNatrvalo odstrániť aktuálny priečinok
- Cesta:
- Názov:
+ Názov
+ Typ
+ Cesta
+ Súbor
+ PriečinokOdstrániť vybranýSpustiť ako iný používateľSpustí vybranú položku ako používateľ s iným kontom
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml
index 6af550884..4df64e4d5 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml
@@ -96,8 +96,11 @@
ObrišiPermanently delete current filePermanently delete current folder
- Path:
- Name:
+ Name
+ Type
+ Path
+ File
+ FolderDelete the selectedRun as different userRun the selected using a different user account
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml
index 44674952b..ed327e1bc 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml
@@ -96,8 +96,11 @@
SilMevcut dosyayı kalıcı olarak silMevcut klasörü kalıcı olarak sil
- Yol:
- Name:
+ Name
+ Type
+ Path
+ Dosya
+ KlasörSeçileni silBaşka bir kullanıcı olarak çalıştırRun the selected using a different user account
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml
index b203687e9..38829112c 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml
@@ -3,8 +3,8 @@
Будь ласка, спочатку зробіть вибір
- Please select a folder path.
- Please choose a different name or folder path.
+ Виберіть шлях до теки.
+ Виберіть інше ім'я або шлях до теки.Будь ласка, оберіть посилання на текуВи впевнені, що хочете видалити {0}?Ви впевнені, що хочете назавжди видалити цей файл?
@@ -27,14 +27,14 @@
ДодатиЗагальні налаштуванняНалаштувати ключові слова дії
- Customise Quick Access
+ Налаштування швидкого доступуПосилання швидкого доступуНалаштування EverythingПанель попереглядуРозмірДата створенняДата останньої зміни
- File Age
+ Дата створенняПоказати інформацію про файлФормат дати й часуВаріант сортування:
@@ -44,7 +44,7 @@
Шлях до оболонки ShellВиключені шляхи індексного пошукуВикористовувати розташування результату пошуку як робочу директорію виконуваного файлу
- Display more information like size and age in tooltips
+ Показувати більше інформації, наприклад розмір і дату створення, у підказкахНатисніть Enter, щоб відкрити папку у файловому менеджері за замовчуваннямВикористовуйте індексний пошук для пошуку шляхуПараметри індексації
@@ -81,23 +81,26 @@
Ctrl + Enter, щоб відкрити каталогCtrl + Enter, щоб відкрити відповідну папку
- {0}{4}Size: {1}{4}Date created: {2}{4}Date modified: {3}
+ {0}{4}Розмір: {1}{4}Дата створення: {2}{4}Дата змінення: {3}Невідомо
- {0}{3}Space free: {1}{3}Total size: {2}
+ {0}{3}Вільного місця: {1}{3}Загальний розмір: {2}Копіювати шляхКопіювати шлях до поточного елемента в буфер обміну
- Copy name
- Copy name of current item to clipboard
+ Копіювати назву
+ Скопіювати назву поточного елемента в буфер обмінуКопіюватиКопіювання поточного файлу в буфер обмінуКопіювати поточну папку в буфер обмінуВидалитиБезповоротно видалити поточний файлНазавжди видалити поточну папку
- Шлях:
- Name:
+ Назва
+ Тип
+ Шлях
+ Файл
+ ТекаВидалити вибранеЗапустити від імені іншого користувачаЗапустити вибране під обліковим записом іншого користувача
@@ -156,7 +159,7 @@
Попередження: Це не швидке сортування, пошук може бути повільнимШукати повний шлях
- Enable File/Folder Run Count
+ Увімкнути підрахунок запусків файлів / текНатисніть, щоб запустити або встановити EverythingВстановлення програми Everything
@@ -168,20 +171,20 @@
Бажаєте увімкнути пошук контенту для Everything?Без індексу (який підтримується лише у версії Everything v1.5+) воно може працювати дуже повільно
- Unable to find Everything.exe
- Failed to install Everything, please install it manually
+ Не вдалося знайти Everything.exe
+ Не вдалося встановити Everything, встановіть його вручнуРідне контекстне менюВідображати рідне контекстне меню (експериментально)Нижче ви можете вказати елементи, які хочете включити до контекстного меню, вони можуть бути частковими (наприклад, «шир пера») або повними («Відкрити за допомогою»).
- Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with').
+ Нижче ви можете вказати елементи, які ви хочете виключити з контекстного меню. Вони можуть бути частковими (наприклад, «pen wit») або повними («Відкрити за допомогою»).
- Today
- {0} days ago
- 1 month ago
- {0} months ago
- 1 year ago
- {0} years ago
+ Сьогодні
+ {0} дн. тому
+ Місяць тому
+ {0} міс. тому
+ Рік тому
+ {0} р. тому
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml
index f41276a67..de6f9a6a4 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml
@@ -96,8 +96,11 @@
XóaPermanently delete current filePermanently delete current folder
- Đường dẫn:
- Name:
+ Tên
+ Type
+ Path
+ Ngày tháng
+ Thư MụcXóa đã chọnXóa lựa chọn đã chọnChạy phần đã chọn bằng tài khoản người dùng khác
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml
index 9bce72062..79d8fc66d 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml
@@ -96,8 +96,11 @@
删除永久删除当前文件永久删除当前文件夹
- 路径:
- 名称:
+ 名称
+ 类型
+ 路径
+ 文件
+ 目录删除所选内容以其他用户身份运行使用其他用户帐户运行所选内容
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml
index 931c9de29..c4e22066d 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml
@@ -96,8 +96,11 @@
刪除Permanently delete current filePermanently delete current folder
- 路徑:
- Name:
+ 名稱
+ Type
+ 路徑
+ 檔案
+ 資料夾刪除所選內容Run as different userRun the selected using a different user account
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs
index 283820204..f1aea98b4 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Main.cs
@@ -17,7 +17,7 @@ namespace Flow.Launcher.Plugin.Explorer
{
internal static PluginInitContext Context { get; set; }
- internal Settings Settings;
+ internal static Settings Settings { get; set; }
private SettingsViewModel viewModel;
@@ -97,7 +97,7 @@ namespace Flow.Launcher.Plugin.Explorer
return Context.API.GetTranslation("plugin_explorer_plugin_description");
}
- private void FillQuickAccessLinkNames()
+ private static void FillQuickAccessLinkNames()
{
// Legacy version does not have names for quick access links, so we fill them with the path name.
foreach (var link in Settings.QuickAccessLinks)
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs
index 85b595390..32651ecb8 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/QuickAccessLinks/QuickAccess.cs
@@ -6,7 +6,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks
{
internal static class QuickAccess
{
- private const int quickAccessResultScore = 100;
+ private const int QuickAccessResultScore = 100;
internal static List AccessLinkListMatched(Query query, IEnumerable accessLinks)
{
@@ -19,8 +19,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks
.ThenBy(x => x.Name)
.Select(l => l.Type switch
{
- ResultType.Folder => ResultManager.CreateFolderResult(l.Name, l.Path, l.Path, query, quickAccessResultScore),
- ResultType.File => ResultManager.CreateFileResult(l.Path, query, quickAccessResultScore),
+ ResultType.Volume => ResultManager.CreateDriveSpaceDisplayResult(l.Path, query.ActionKeyword, QuickAccessResultScore),
+ ResultType.Folder => ResultManager.CreateFolderResult(l.Name, l.Path, l.Path, query, QuickAccessResultScore),
+ ResultType.File => ResultManager.CreateFileResult(l.Path, query, QuickAccessResultScore),
_ => throw new ArgumentOutOfRangeException()
})
.ToList();
@@ -32,8 +33,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks
.ThenBy(x => x.Name)
.Select(l => l.Type switch
{
- ResultType.Folder => ResultManager.CreateFolderResult(l.Name, l.Path, l.Path, query),
- ResultType.File => ResultManager.CreateFileResult(l.Path, query, quickAccessResultScore),
+ ResultType.Volume => ResultManager.CreateDriveSpaceDisplayResult(l.Path, query.ActionKeyword, QuickAccessResultScore),
+ ResultType.Folder => ResultManager.CreateFolderResult(l.Name, l.Path, l.Path, query, QuickAccessResultScore),
+ ResultType.File => ResultManager.CreateFileResult(l.Path, query, QuickAccessResultScore),
_ => throw new ArgumentOutOfRangeException()
}).ToList();
}
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs
index e87d2df97..7791a9881 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs
@@ -171,7 +171,17 @@ namespace Flow.Launcher.Plugin.Explorer.Search
};
}
+ internal static Result CreateDriveSpaceDisplayResult(string path, string actionKeyword, int score)
+ {
+ return CreateDriveSpaceDisplayResult(path, actionKeyword, score, SearchManager.UseIndexSearch(path));
+ }
+
internal static Result CreateDriveSpaceDisplayResult(string path, string actionKeyword, bool windowsIndexed = false)
+ {
+ return CreateDriveSpaceDisplayResult(path, actionKeyword, 500, windowsIndexed);
+ }
+
+ private static Result CreateDriveSpaceDisplayResult(string path, string actionKeyword, int score, bool windowsIndexed = false)
{
var progressBarColor = "#26a0da";
var title = string.Empty; // hide title when use progress bar,
@@ -197,7 +207,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
SubTitle = subtitle,
AutoCompleteText = GetPathWithActionKeyword(path, ResultType.Folder, actionKeyword),
IcoPath = path,
- Score = 500,
+ Score = score,
ProgressBar = progressValue,
ProgressBarColor = progressBarColor,
Preview = new Result.PreviewInfo
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
index 12df6c145..f4f87d4d4 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs
@@ -246,6 +246,18 @@ namespace Flow.Launcher.Plugin.Explorer.Search
public bool IsFileContentSearch(string actionKeyword) => actionKeyword == Settings.FileContentSearchActionKeyword;
+ public static bool UseIndexSearch(string path)
+ {
+ if (Main.Settings.IndexSearchEngine is not Settings.IndexSearchEngineOption.WindowsIndex)
+ return false;
+
+ // Check if the path is using windows index search
+ var pathToDirectory = FilesFolders.ReturnPreviousDirectoryIfIncompleteString(path);
+
+ return !Main.Settings.IndexSearchExcludedSubdirectoryPaths.Any(
+ x => FilesFolders.ReturnPreviousDirectoryIfIncompleteString(pathToDirectory).StartsWith(x.Path, StringComparison.OrdinalIgnoreCase))
+ && WindowsIndex.WindowsIndex.PathIsIndexed(pathToDirectory);
+ }
private bool UseWindowsIndexForDirectorySearch(string locationPath)
{
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/PreviewPanel.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Views/PreviewPanel.xaml
index e200a187f..0daa36e63 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/PreviewPanel.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/PreviewPanel.xaml
@@ -8,10 +8,7 @@
d:DesignHeight="300"
d:DesignWidth="300"
mc:Ignorable="d">
-
+
@@ -47,7 +44,7 @@
TextWrapping="Wrap" />
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/QuickAccessLinkSettings.xaml.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Views/QuickAccessLinkSettings.xaml.cs
index eb66e1efc..e6294b98b 100644
--- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/QuickAccessLinkSettings.xaml.cs
+++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/QuickAccessLinkSettings.xaml.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
+using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Forms;
@@ -14,6 +15,8 @@ namespace Flow.Launcher.Plugin.Explorer.Views;
[INotifyPropertyChanged]
public partial class QuickAccessLinkSettings
{
+ private static readonly string ClassName = nameof(QuickAccessLinkSettings);
+
private string _selectedPath;
public string SelectedPath
{
@@ -27,6 +30,9 @@ public partial class QuickAccessLinkSettings
if (string.IsNullOrEmpty(_selectedName))
{
SelectedName = _selectedPath.GetPathName();
+ }
+ if (!string.IsNullOrEmpty(_selectedPath))
+ {
_accessLinkType = GetResultType(_selectedPath);
}
}
@@ -187,13 +193,13 @@ public partial class QuickAccessLinkSettings
private static ResultType GetResultType(string path)
{
// Check if the path is a file or folder
- if (System.IO.File.Exists(path))
+ if (File.Exists(path))
{
return ResultType.File;
}
- else if (System.IO.Directory.Exists(path))
+ else if (Directory.Exists(path))
{
- if (string.Equals(System.IO.Path.GetPathRoot(path), path, StringComparison.OrdinalIgnoreCase))
+ if (string.Equals(Path.GetPathRoot(path), path, StringComparison.OrdinalIgnoreCase))
{
return ResultType.Volume;
}
@@ -205,6 +211,7 @@ public partial class QuickAccessLinkSettings
else
{
// This should not happen, but just in case, we assume it's a folder
+ Main.Context.API.LogError(ClassName, $"The path '{path}' does not exist or is invalid. Defaulting to Folder type.");
return ResultType.Folder;
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml
index 6fb809d90..8a75cde72 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml
@@ -43,10 +43,15 @@
تم تحديث الإضافة {0} بنجاح. يرجى إعادة تشغيل Flow.تم تحديث {0} إضافات بنجاح. يرجى إعادة تشغيل Flow.تم تعديل الإضافة {0} بالفعل. يرجى إعادة تشغيل Flow قبل إجراء أي تغييرات أخرى.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}مدير الإضافات
- إدارة تثبيت وإلغاء تثبيت أو تحديث إضافات Flow Launcher
+ Install, uninstall or update Flow Launcher plugins via the search windowمؤلف غير معروف
@@ -61,5 +66,5 @@
تحذير التثبيت من مصدر غير معروف
- إعادة تشغيل Flow Launcher تلقائيًا بعد تثبيت/إلغاء تثبيت/تحديث الإضافات
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml
index d47e1814b..5ca1700d4 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Správce pluginů
- Správa instalace, odinstalace nebo aktualizace pluginů Flow Launcheru
+ Install, uninstall or update Flow Launcher plugins via the search windowNeznámý autor
@@ -61,5 +66,5 @@
Upozornění na instalaci z neznámého zdroje
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml
index 616ce779b..a5d0231ce 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Plugins Manager
- Management of installing, uninstalling or updating Flow Launcher plugins
+ Install, uninstall or update Flow Launcher plugins via the search windowUnknown Author
@@ -61,5 +66,5 @@
Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml
index 47ea31cce..c7ef77801 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml
@@ -43,10 +43,15 @@
Plug-in {0} erfolgreich aktualisiert. Bitte starten Sie Flow neu.{0} Plug-ins erfolgreich aktualisiert. Bitte starten Sie Flow neu.Plug-in {0} ist bereits modifiziert worden. Bitte starten Sie Flow neu, bevor Sie irgendwelche weitere Änderungen vornehmen.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Plug-ins-Manager
- Verwaltung der Installation, Deinstallation oder Aktualisierung der Plug-ins von Flow Launcher
+ Install, uninstall or update Flow Launcher plugins via the search windowUnbekannter Autor
@@ -61,5 +66,5 @@
Warnung vor Installation aus unbekannter Quelle
- Automatischer Neustart von Flow Launcher nach Installation/Deinstallation/Aktualisierung von Plug-ins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml
index 573ca9051..fa2e65240 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/en.xaml
@@ -45,10 +45,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Plugins Manager
- Management of installing, uninstalling or updating Flow Launcher plugins
+ Install, uninstall or update Flow Launcher plugins via the search windowUnknown Author
@@ -63,5 +68,5 @@
Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
\ No newline at end of file
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml
index 616ce779b..a5d0231ce 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Plugins Manager
- Management of installing, uninstalling or updating Flow Launcher plugins
+ Install, uninstall or update Flow Launcher plugins via the search windowUnknown Author
@@ -61,5 +66,5 @@
Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml
index b0f25f3ea..b6a3a6cbc 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml
@@ -43,10 +43,15 @@
Complemento {0} actualizado correctamente. Por favor, reinicie Flow.{0} complementos se han actualizado correctamente. Por favor, reinicie Flow.El complemento {0} ya ha sido modificado. Por favor, reinicie Flow antes de realizar más cambios.
+ {0} ya está modificado
+ Reiniciar Flow antes de realizar más cambios
+
+ Archivo de instalación zip no válido
+ Por favor, compruebe si hay un plugin.json en {0}Administrador de complementos
- Administración de instalación, desinstalación o actualización de los complementos de Flow Launcher
+ Instalar, desinstalar o actualizar complementos de Flow Launcher desde la ventana de búsquedaAutor desconocido
@@ -61,5 +66,5 @@
Aviso de instalación desde fuentes desconocidas
- Reiniciar automáticamente Flow Launcher después de instalar/desinstalar/actualizar complementos
+ Reiniciar Flow Launcher automáticamente después de instalar/desinstalar/actualizar el complemento a través del Administrador de complementos
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml
index 3142ef86d..c95c97231 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml
@@ -43,10 +43,15 @@
Plugin {0} mis à jour avec succès. Veuillez redémarrer Flow.{0} plugins mis à jour avec succès. Veuillez redémarrer Flow.Le plugin {0} a déjà été modifié. Veuillez redémarrer Flow avant de faire d'autres modifications.
+ {0} est déjà modifié
+ Veuillez redémarrer Flow avant d'apporter d'autres modifications
+
+ Fichier d'installation zip invalide
+ Veuillez vérifier s'il y a un plugin.json dans {0}Gestionnaire de plugins
- Gestion de l'installation, de la désinstallation ou de la mise à jour des plugins Flow Launcher
+ Installer, désinstaller ou mettre à jour les plugins Flow Launcher via la fenêtre de rechercheAuteur inconnu
@@ -61,5 +66,5 @@
Avertissement d'installation à partir d'une source inconnue
- Redémarrer automatiquement Flow Launcher après l'installation/désinstallation/mise à jour des plugins
+ Redémarrer Flow Launcher automatiquement après l'installation/désinstallation/mise à jour du plugin via le gestionnaire de plugins
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/he.xaml
index 8c7f0cf02..3fe7fd968 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/he.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/he.xaml
@@ -43,10 +43,15 @@
התוסף {0} עודכן בהצלחה. נא הפעל מחדש את Flow.{0} תוספים עודכנו בהצלחה. נא הפעל מחדש את Flow.התוסף {0} כבר השתנה. נא הפעל מחדש את Flow לפני ביצוע שינויים נוספים.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}מנהל תוספים
- ניהול התקנה, הסרה או עדכון של תוספים עבור Flow Launcher
+ Install, uninstall or update Flow Launcher plugins via the search windowמחבר לא ידוע
@@ -61,5 +66,5 @@
אזהרה בעת התקנה ממקור לא ידוע
- הפעל מחדש את Flow Launcher באופן אוטומטי לאחר התקנה/הסרה/עדכון של תוספים
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml
index d154e59dc..3ccefa2db 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml
@@ -43,10 +43,15 @@
Il plugin {0} aggiornato con successo. Riavviare Flow.{0} plugin aggiornato con successo. Riavviare Flow.Il plugin {0} è già stato modificato. Riavviare Flow prima di fare altre modifiche.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Gestore dei plugin
- Gestione dell'installazione, disinstallazione o aggiornamento dei plugin di Flow Launcher
+ Install, uninstall or update Flow Launcher plugins via the search windowAutore Sconosciuto
@@ -61,5 +66,5 @@
Avviso di installazione da sorgenti sconosciute
- Riavvia automaticamente Flow Launcher dopo l'installazione/disinstallazione/aggiornamento dei plugin
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml
index 616ce779b..d62f0f61b 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Plugins Manager
- Management of installing, uninstalling or updating Flow Launcher plugins
+ Install, uninstall or update Flow Launcher plugins via the search windowUnknown Author
@@ -60,6 +65,6 @@
Visit the PluginsManifest repository to see community-made plugin submissions
- Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ 不明な提供元からインストールするとき警告する
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml
index f6f46448d..8c15f27ad 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}플러그인 관리자
- 플러그인의 설치/삭제/업데이트를 관리하는 플러그인
+ Install, uninstall or update Flow Launcher plugins via the search window알수없는 제작자
@@ -61,5 +66,5 @@
Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml
index b0fd2d10a..bccd55459 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml
@@ -43,10 +43,15 @@
Programtillegg {0} oppdatert. Vennligst restart Flow.{0} programtillegg oppdatert. Start Flow på nytt.Programtillegg {0} er allerede endret. Start Flow på nytt før nye endringer foretas.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Programtilleggsbehandling
- Administrasjon av installasjon, avinstallere eller oppdatere Flow Launcher programtillegg
+ Install, uninstall or update Flow Launcher plugins via the search windowUkjent utvikler
@@ -61,5 +66,5 @@
Advarsel om installering fra ukjent kilde
- Start Flow Launcher automatisk på nytt etter installasjon/avinstallering/oppdatering av programtillegg
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml
index 616ce779b..a5d0231ce 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Plugins Manager
- Management of installing, uninstalling or updating Flow Launcher plugins
+ Install, uninstall or update Flow Launcher plugins via the search windowUnknown Author
@@ -61,5 +66,5 @@
Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml
index 187900931..3124cc634 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml
@@ -43,10 +43,15 @@
Wtyczka {0} została pomyślnie zaktualizowana. Proszę ponownie uruchomić Flow.{0} wtyczek zaktualizowano pomyślnie. Proszę ponownie uruchomić Flow.Wtyczka {0} została już zmodyfikowana. Proszę ponownie uruchomić Flow przed wprowadzeniem dalszych zmian.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Menadżer wtyczek
- Zarządzanie instalowaniem, odinstalowywaniem i aktualizowaniem wtyczek Flow Launcher
+ Install, uninstall or update Flow Launcher plugins via the search windowNieznany autor
@@ -61,5 +66,5 @@
Ostrzeżenie o instalacji z nieznanego źródła
- Automatycznie uruchom ponownie Flow Launcher po zainstalowaniu/odinstalowaniu/zaktualizowaniu wtyczek
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml
index 179bcab97..2407d5b6e 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Plugins Manager
- Management of installing, uninstalling or updating Flow Launcher plugins
+ Install, uninstall or update Flow Launcher plugins via the search windowUnknown Author
@@ -61,5 +66,5 @@
Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml
index 01535c689..40cfc8253 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml
@@ -43,10 +43,15 @@
Plugin {0} atualizado com sucesso. Por favor, reinicie o Flow Launcher.{0} plugins atualizados com sucesso. Deve reiniciar Flow Launcher.O plugin {0} foi modificado. Por favor, reinicie o Flow Launcher antes de fazer mais alterações.
+ {0} já modificado
+ Reinicie Flow Launcher antes de fazer mais alterações
+
+ Ficheiro Zip inválido
+ Verifique se existe o ficheiro "plugin.json" em {0}Gestor de plugins
- Módulo para instalar, desinstalar e atualizar os plugins do Flow Launcher
+ Instalar, desinstalar ou atualizar plugins do Flow Launcher através da janela de pesquisaAutor desconhecido
@@ -61,5 +66,5 @@
Aviso ao instalar de fontes desconhecidas
- Reiniciar automaticamente após instalar/desinstalar/atualizar plugins
+ Reiniciar Flow Launcher após instalar/desinstalar/atualizar um plugin via Gestor de plugins
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml
index 5b0a379b5..18913c7c6 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Plugins Manager
- Management of installing, uninstalling or updating Flow Launcher plugins
+ Install, uninstall or update Flow Launcher plugins via the search windowАвтор неизвестен
@@ -61,5 +66,5 @@
Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml
index 5529b2fc1..f788c9ce3 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml
@@ -43,10 +43,15 @@
Plugin {0} bol úspešne aktualizovaný. Prosím, reštartuje Flow.Pluginy úspešne aktualizované ({0}). Reštartuje Flow.Plugin {0} už bol upravený. Prosím, reštartuje Flow pred ďalšími zmenami.
+ Plugin {0} už bol upravený
+ Pred vykonaním ďalších zmien reštartujte Flow Launcher
+
+ Neplatný inštalačný súbor zip
+ Skontrolujte, či sa v {0} nachádza plugin.jsonSprávca pluginov
- Správa inštalácie, odinštalácie alebo aktualizácie pluginov programu Flow Launcher
+ Inštalovať, odinštalovať alebo aktualizovať pluginy Flow Launchera cez vyhľadávacie oknoNeznámy autor
@@ -61,5 +66,5 @@
Upozornenie na inštaláciu z neznámeho zdroja
- Automaticky reštartovať Flow Launcher po inštalácií/odinštalácii/aktualizáciu pluginov
+ Automaticky reštartovať Flow Launcher po inštalácii/odinštalácii/aktualizáciu pluginu cez Správcu pluginov
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml
index 616ce779b..a5d0231ce 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Plugins Manager
- Management of installing, uninstalling or updating Flow Launcher plugins
+ Install, uninstall or update Flow Launcher plugins via the search windowUnknown Author
@@ -61,5 +66,5 @@
Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml
index 14f2e1309..ed9aaf4b3 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Plugins Manager
- Management of installing, uninstalling or updating Flow Launcher plugins
+ Install, uninstall or update Flow Launcher plugins via the search windowBilinmeyen Yazar
@@ -61,5 +66,5 @@
Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml
index 3d2b50a78..e07f417c7 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml
@@ -13,8 +13,8 @@
Встановлення плагінаЗавантажити та встановити {0}Видалення плагіна
- Keep plugin settings
- Do you want to keep the settings of the plugin for the next usage?
+ Зберегти налаштування плагіну
+ Хочете зберегти налаштування плагіну для наступного використання?Plugin successfully installed. Restarting Flow, please wait...Не вдалося знайти файл метаданих plugin.json у розпакованому zip-архіві.Помилка: Плагін, який має ідентичну або новішу версію з {0}, вже існує.
@@ -43,10 +43,15 @@
Плагін {0} успішно оновлено. Будь ласка, перезапустіть Flow.{0} плагіни успішно оновлено. Будь ласка, перезапустіть Flow.Плагін {0} вже було змінено. Будь ласка, перезапустіть Flow, перш ніж вносити будь-які подальші зміни.
+ {0} вже змінено
+ Перезапустіть Flow перед тим, як вносити будь-які подальші зміни.
+
+ Неправильний встановлюваний zip-файл
+ Перевірте, чи є файл plugin.json у {0}.Менеджер плагінів
- Керування встановленням, видаленням або оновленням плагінів Flow Launcher
+ Встановити, видалити або оновити плагіни Flow Launcher через вікно пошуку.Невідомий автор
@@ -61,5 +66,5 @@
Попередження про встановлення з невідомого джерела
- Автоматичний перезапуск Flow Launcher після встановлення/видалення/оновлення плагінів
+ Автоматично перезапускати Flow Launcher після встановлення / видалення / оновлення плагіну за допомогою Менеджера плагінів
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml
index 3f9315d60..1a2a5c93a 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/vi.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}Trình quản lý plugin
- Quản lý cài đặt, gỡ cài đặt hoặc cập nhật plugin Flow Launcher
+ Install, uninstall or update Flow Launcher plugins via the search windowKhông rõ tác giả
@@ -61,5 +66,5 @@
Cảnh báo cài đặt từ nguồn không xác định
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml
index 1a4199965..446609850 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml
@@ -43,10 +43,15 @@
成功更新插件{0}。请重新启动 Flow Launcher。插件 {0} 更新成功。请重新启动 Flow Launcher。插件 {0} 已被修改。请在进行任何进一步更改之前重新启动Flow。
+ {0} 已被修改
+ 请在进行任何进一步更改之前重新启动 Flow
+
+ 无效的 zip 安装程序文件
+ 请检查 {0} 中是否有plugin.json插件管理
- 安装,卸载或更新 Flow Launcher 插件
+ 通过搜索窗口安装、卸载或更新 Flow Launcher 插件未知作者
@@ -61,5 +66,5 @@
未知源安装警告
- 安装/卸载/更新插件后自动重启 Flow Launcher
+ 通过插件管理器安装/卸载/更新插件后自动重启 Flow Launcher
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml
index f16feb050..ddd24d0ed 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml
@@ -43,10 +43,15 @@
Plugin {0} successfully updated. Please restart Flow.{0} plugins successfully updated. Please restart Flow.Plugin {0} has already been modified. Please restart Flow before making any further changes.
+ {0} modified already
+ Please restart Flow before making any further changes
+
+ Invalid zip installer file
+ Please check if there is a plugin.json in {0}擴充功能管理
- Management of installing, uninstalling or updating Flow Launcher plugins
+ Install, uninstall or update Flow Launcher plugins via the search window未知的作者
@@ -61,5 +66,5 @@
Install from unknown source warning
- Automatically restart Flow Launcher after installing/uninstalling/updating plugins
+ Restart Flow Launcher automatically after installing/uninstalling/updating plugin via Plugins Manager
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs
index 25182f6d3..efbe8d7ba 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/PluginsManager.cs
@@ -114,6 +114,14 @@ namespace Flow.Launcher.Plugin.PluginsManager
return;
}
+ if (Context.API.PluginModified(plugin.ID))
+ {
+ Context.API.ShowMsgError(
+ string.Format(Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_title"), plugin.Name),
+ Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_message"));
+ return;
+ }
+
string message;
if (Settings.AutoRestartAfterChanging)
{
@@ -158,7 +166,8 @@ namespace Flow.Launcher.Plugin.PluginsManager
if (cts.IsCancellationRequested)
return;
else
- Install(plugin, filePath);
+ if (!Install(plugin, filePath))
+ return;
}
catch (HttpRequestException e)
{
@@ -196,7 +205,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
}
}
- private async Task DownloadFileAsync(string prgBoxTitle, string downloadUrl, string filePath, CancellationTokenSource cts, bool deleteFile = true, bool showProgress = true)
+ private async Task DownloadFileAsync(string progressBoxTitle, string downloadUrl, string filePath, CancellationTokenSource cts, bool deleteFile = true, bool showProgress = true)
{
if (deleteFile && File.Exists(filePath))
File.Delete(filePath);
@@ -204,12 +213,12 @@ namespace Flow.Launcher.Plugin.PluginsManager
if (showProgress)
{
var exceptionHappened = false;
- await Context.API.ShowProgressBoxAsync(prgBoxTitle,
+ await Context.API.ShowProgressBoxAsync(progressBoxTitle,
async (reportProgress) =>
{
if (reportProgress == null)
{
- // when reportProgress is null, it means there is expcetion with the progress box
+ // when reportProgress is null, it means there is exception with the progress box
// so we record it with exceptionHappened and return so that progress box will close instantly
exceptionHappened = true;
return;
@@ -242,6 +251,18 @@ namespace Flow.Launcher.Plugin.PluginsManager
if (FilesFolders.IsZipFilePath(search, checkFileExists: true))
{
pluginFromLocalPath = Utilities.GetPluginInfoFromZip(search);
+
+ if (pluginFromLocalPath == null) return new List
+ {
+ new()
+ {
+ Title = Context.API.GetTranslation("plugin_pluginsmanager_invalid_zip_title"),
+ SubTitle = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_invalid_zip_subtitle"),
+ search),
+ IcoPath = icoPath
+ }
+ };
+
pluginFromLocalPath.LocalInstallPath = search;
updateFromLocalPath = true;
}
@@ -261,6 +282,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
select
new
{
+ existingPlugin.Metadata.ID,
pluginUpdateSource.Name,
pluginUpdateSource.Author,
CurrentVersion = existingPlugin.Metadata.Version,
@@ -290,6 +312,14 @@ namespace Flow.Launcher.Plugin.PluginsManager
IcoPath = x.IcoPath,
Action = e =>
{
+ if (Context.API.PluginModified(x.ID))
+ {
+ Context.API.ShowMsgError(
+ string.Format(Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_title"), x.Name),
+ Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_message"));
+ return false;
+ }
+
string message;
if (Settings.AutoRestartAfterChanging)
{
@@ -340,8 +370,11 @@ namespace Flow.Launcher.Plugin.PluginsManager
}
else
{
- await Context.API.UpdatePluginAsync(x.PluginExistingMetadata, x.PluginNewUserPlugin,
- downloadToFilePath);
+ if (!await Context.API.UpdatePluginAsync(x.PluginExistingMetadata, x.PluginNewUserPlugin,
+ downloadToFilePath))
+ {
+ return;
+ }
if (Settings.AutoRestartAfterChanging)
{
@@ -406,6 +439,14 @@ namespace Flow.Launcher.Plugin.PluginsManager
IcoPath = icoPath,
AsyncAction = async e =>
{
+ if (resultsForUpdate.All(x => Context.API.PluginModified(x.ID)))
+ {
+ Context.API.ShowMsgError(Context.API.GetTranslation("plugin_pluginsmanager_install_error_title"),
+ string.Format(Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error"),
+ string.Join(" ", resultsForUpdate.Select(x => x.Name))));
+ return false;
+ }
+
string message;
if (Settings.AutoRestartAfterChanging)
{
@@ -427,6 +468,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
return false;
}
+ var anyPluginSuccess = false;
await Task.WhenAll(resultsForUpdate.Select(async plugin =>
{
var downloadToFilePath = Path.Combine(Path.GetTempPath(),
@@ -444,8 +486,11 @@ namespace Flow.Launcher.Plugin.PluginsManager
if (cts.IsCancellationRequested)
return;
else
- await Context.API.UpdatePluginAsync(plugin.PluginExistingMetadata, plugin.PluginNewUserPlugin,
- downloadToFilePath);
+ if (!await Context.API.UpdatePluginAsync(plugin.PluginExistingMetadata, plugin.PluginNewUserPlugin,
+ downloadToFilePath))
+ return;
+
+ anyPluginSuccess = true;
}
catch (Exception ex)
{
@@ -458,6 +503,8 @@ namespace Flow.Launcher.Plugin.PluginsManager
}
}));
+ if (!anyPluginSuccess) return false;
+
if (Settings.AutoRestartAfterChanging)
{
Context.API.ShowMsg(Context.API.GetTranslation("plugin_pluginsmanager_update_title"),
@@ -559,6 +606,20 @@ namespace Flow.Launcher.Plugin.PluginsManager
{
var plugin = Utilities.GetPluginInfoFromZip(localPath);
+ if (plugin == null)
+ {
+ return new List
+ {
+ new()
+ {
+ Title = Context.API.GetTranslation("plugin_pluginsmanager_invalid_zip_title"),
+ SubTitle = string.Format(Context.API.GetTranslation("plugin_pluginsmanager_invalid_zip_subtitle"),
+ localPath),
+ IcoPath = icoPath
+ }
+ };
+ }
+
plugin.LocalInstallPath = localPath;
return new List
@@ -600,14 +661,17 @@ namespace Flow.Launcher.Plugin.PluginsManager
return false;
var author = pieces[3];
+ var acceptedHost = "github.com";
var acceptedSource = "https://github.com";
var constructedUrlPart = string.Format("{0}/{1}/", acceptedSource, author);
- return url.StartsWith(acceptedSource) &&
- Context.API.GetAllPlugins().Any(x =>
- !string.IsNullOrEmpty(x.Metadata.Website) &&
- x.Metadata.Website.StartsWith(constructedUrlPart)
- );
+ if (!Uri.TryCreate(url, UriKind.Absolute, out var uri) || uri.Host != acceptedHost)
+ return false;
+
+ return Context.API.GetAllPlugins().Any(x =>
+ !string.IsNullOrEmpty(x.Metadata.Website) &&
+ x.Metadata.Website.StartsWith(constructedUrlPart)
+ );
}
internal async ValueTask> RequestInstallOrUpdateAsync(string search, CancellationToken token,
@@ -649,7 +713,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
return Search(results, search);
}
- private void Install(UserPlugin plugin, string downloadedFilePath)
+ private bool Install(UserPlugin plugin, string downloadedFilePath)
{
if (!File.Exists(downloadedFilePath))
throw new FileNotFoundException($"Plugin {plugin.ID} zip file not found at {downloadedFilePath}",
@@ -657,10 +721,13 @@ namespace Flow.Launcher.Plugin.PluginsManager
try
{
- Context.API.InstallPlugin(plugin, downloadedFilePath);
+ if (!Context.API.InstallPlugin(plugin, downloadedFilePath))
+ return false;
if (!plugin.IsFromLocalInstallPath)
File.Delete(downloadedFilePath);
+
+ return true;
}
catch (FileNotFoundException e)
{
@@ -682,6 +749,8 @@ namespace Flow.Launcher.Plugin.PluginsManager
plugin.Name));
Context.API.LogException(ClassName, e.Message, e);
}
+
+ return false;
}
internal List RequestUninstall(string search)
@@ -696,6 +765,14 @@ namespace Flow.Launcher.Plugin.PluginsManager
IcoPath = x.Metadata.IcoPath,
AsyncAction = async e =>
{
+ if (Context.API.PluginModified(x.Metadata.ID))
+ {
+ Context.API.ShowMsgError(
+ string.Format(Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_title"), x.Metadata.Name),
+ Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error_message"));
+ return false;
+ }
+
string message;
if (Settings.AutoRestartAfterChanging)
{
@@ -717,7 +794,10 @@ namespace Flow.Launcher.Plugin.PluginsManager
MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
Context.API.HideMainWindow();
- await UninstallAsync(x.Metadata);
+ if (!await UninstallAsync(x.Metadata))
+ {
+ return false;
+ }
if (Settings.AutoRestartAfterChanging)
{
Context.API.RestartApp();
@@ -742,7 +822,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
return Search(results, search);
}
- private async Task UninstallAsync(PluginMetadata plugin)
+ private async Task UninstallAsync(PluginMetadata plugin)
{
try
{
@@ -750,13 +830,14 @@ namespace Flow.Launcher.Plugin.PluginsManager
Context.API.GetTranslation("plugin_pluginsmanager_keep_plugin_settings_subtitle"),
Context.API.GetTranslation("plugin_pluginsmanager_keep_plugin_settings_title"),
button: MessageBoxButton.YesNo) == MessageBoxResult.No;
- await Context.API.UninstallPluginAsync(plugin, removePluginSettings);
+ return await Context.API.UninstallPluginAsync(plugin, removePluginSettings);
}
catch (ArgumentException e)
{
Context.API.LogException(ClassName, e.Message, e);
Context.API.ShowMsgError(Context.API.GetTranslation("plugin_pluginsmanager_uninstall_error_title"),
- Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error"));
+ string.Format(Context.API.GetTranslation("plugin_pluginsmanager_plugin_modified_error"), plugin.Name));
+ return false;
}
}
}
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs
index 4bb78f6ff..d76ce40c4 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs
@@ -65,9 +65,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
using (ZipArchive archive = System.IO.Compression.ZipFile.OpenRead(filePath))
{
- var pluginJsonPath = archive.Entries.FirstOrDefault(x => x.Name == "plugin.json").ToString();
- ZipArchiveEntry pluginJsonEntry = archive.GetEntry(pluginJsonPath);
-
+ var pluginJsonEntry = archive.Entries.FirstOrDefault(x => x.Name == "plugin.json");
if (pluginJsonEntry != null)
{
using Stream stream = pluginJsonEntry.Open();
diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json
index 327011ac3..949e9e9db 100644
--- a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json
+++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json
@@ -4,7 +4,7 @@
"pm"
],
"Name": "Plugins Manager",
- "Description": "Management of installing, uninstalling or updating Flow Launcher plugins",
+ "Description": "Install, uninstall or update Flow Launcher plugins via the search window",
"Author": "Jeremy Wu",
"Version": "1.0.0",
"Language": "csharp",
diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pl.xaml
index 7e59db5ec..1d7ff227b 100644
--- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/pl.xaml
@@ -8,7 +8,7 @@
zamknij {0} procesówzamknij wszystkie instancje
- Show title for processes with visible windows
- Put processes with visible windows on the top
+ Pokaż tytuł dla procesów z widocznymi oknami
+ Umieść procesy z widocznymi oknami na górze
diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml
index 56004028b..6d2086abc 100644
--- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml
@@ -8,7 +8,7 @@
вбити {0} процесіввбити всі екземпляри
- Show title for processes with visible windows
- Put processes with visible windows on the top
+ Показувати назву процесів із видимими вікнами
+ Помістити процеси з видимими вікнами у верхній частині
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml
index 7919ae7cb..cf716a153 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml
@@ -46,8 +46,8 @@
Bitte wählen Sie eine Programmquelle ausSind Sie sicher, dass Sie die ausgewählten Programmquellen löschen wollen?
- Please select program sources that are not added by you
- Please select program sources that are added by you
+ Bitte wählen Sie die Programmquellen aus, die nicht von Ihnen hinzugefügt werden
+ Bitte wählen Sie die Programmquellen aus, die von Ihnen hinzugefügt werdenEine andere Programmquelle mit dem gleichen Ort ist bereits vorhanden.Programmquelle
@@ -76,7 +76,7 @@
Als anderer Benutzer ausführenAls Administrator ausführenEnthaltenden Ordner öffnen
- Hide
+ AusblendenZielordner öffnenProgramm
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml
index 4a1d815ec..0134627c5 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/ja.xaml
@@ -6,14 +6,14 @@
削除編集追加
- Name
+ 名前有効Enabled無効StatusEnabledDisabled
- Location
+ 場所All ProgramsFile TypeReindex
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml
index 290954d5f..29158b2ce 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml
@@ -34,8 +34,8 @@
Приховує програми з поширеними назвами деінсталяторів, наприклад, unins000.exeПошук в описі програмиFlow буде шукати опис програми
- Hide duplicated apps
- Hide duplicated Win32 programs that are already in the UWP list
+ Приховати дублікати застосунків
+ Приховати дублікати програми Win32, які вже є в списку UWPСуфіксиМаксимальна глибина
@@ -46,8 +46,8 @@
Будь ласка, виберіть джерело програмиВи впевнені, що хочете видалити вибрані джерела програм?
- Please select program sources that are not added by you
- Please select program sources that are added by you
+ Виберіть джерела програм, які не були додані вами.
+ Виберіть джерела програм, які були додані вами.Інше програмне джерело з тим самим розташуванням вже існує.Вихідний код програми
@@ -76,7 +76,7 @@
Запустити від імені іншого користувачаЗапустити від імені адміністратораВідкрити папку
- Hide
+ ПриховатиВідкрити цільову папкуПрограма
@@ -86,7 +86,7 @@
Кастомізований провідникАргументи
- You can customize the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.
+ Ви можете налаштувати провідник, який використовується для відкриття теки контейнера, ввівши змінну середовища провідника, який ви хочете використовувати. Буде корисно використовувати CMD, аби перевірити, чи доступна змінна середовища.Введіть спеціальні аргументи, які ви хочете додати до вашого провідника. %s для батьківського каталогу, %f для повного шляху (працює лише для win32). Докладнішу інформацію можна знайти на веб-сайті провідника.
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Main.cs b/Plugins/Flow.Launcher.Plugin.Program/Main.cs
index b9187a801..b34f0a65b 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Main.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Main.cs
@@ -103,7 +103,7 @@ namespace Flow.Launcher.Plugin.Program
.Where(p => HideDuplicatedWindowsAppFilter(p, uwpsDirectories))
.Where(p => p.Enabled)
.Select(p => p.Result(query.Search, Context.API))
- .Where(r => r?.Score > 0)
+ .Where(r => string.IsNullOrEmpty(query.Search) || r?.Score > 0)
.ToList();
}
catch (OperationCanceledException)
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWPPackage.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWPPackage.cs
index cb33250e1..28f774333 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/UWPPackage.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/UWPPackage.cs
@@ -290,12 +290,13 @@ namespace Flow.Launcher.Plugin.Program.Programs
}
private static readonly Channel PackageChangeChannel = Channel.CreateBounded(1);
+ private static PackageCatalog? catalog;
public static async Task WatchPackageChangeAsync()
{
if (Environment.OSVersion.Version.Major >= 10)
{
- var catalog = PackageCatalog.OpenForCurrentUser();
+ catalog ??= PackageCatalog.OpenForCurrentUser();
catalog.PackageInstalling += (_, args) =>
{
if (args.IsComplete)
@@ -424,7 +425,7 @@ namespace Flow.Launcher.Plugin.Program.Programs
}
}
- if (!matchResult.IsSearchPrecisionScoreMet())
+ if (!matchResult.IsSearchPrecisionScoreMet() && !string.IsNullOrEmpty(query))
return null;
var result = new Result
@@ -468,7 +469,6 @@ namespace Flow.Launcher.Plugin.Program.Programs
}
};
-
return result;
}
diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
index a87b002d4..7aca8f3b6 100644
--- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
+++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs
@@ -136,7 +136,7 @@ namespace Flow.Launcher.Plugin.Program.Programs
List candidates = new List();
- if (!matchResult.IsSearchPrecisionScoreMet())
+ if (!matchResult.IsSearchPrecisionScoreMet() && !string.IsNullOrEmpty(query))
{
if (ExecutableName != null) // only lnk program will need this one
{
diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml
index d209cb739..d47474784 100644
--- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml
@@ -6,7 +6,7 @@
Натисніть будь-яку клавішу, щоб закрити це вікно...Не закривати командний рядок після виконання командиЗавжди запускати від імені адміністратора
- Use Windows Terminal
+ Використовувати Термінал WindowsЗапустити від імені іншого користувачаShellДозволяє виконувати системні команди з Flow Launcher
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml
index 27fee87be..7d131d944 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml
@@ -2,7 +2,7 @@
- Name
+ 名前説明コマンド
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml
index c09a447d2..33cee56d8 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml
@@ -69,7 +69,7 @@
ZresetujPotwierdźAnuluj
- Please enter a non-empty command keyword
+ Proszę wprowadzić niepuste słowo kluczowe poleceniaKomendy systemoweWykonywanie komend systemowych, np. wyłącz, zablokuj komputer, otwórz ustawienia itp.
diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml
index 19d69511b..c82be249a 100644
--- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml
@@ -26,7 +26,7 @@
Поради щодо Flow LauncherТека UserData Flow LauncherПеремкнути режим гри
- Set the Flow Launcher Theme
+ Встановити тему Flow LauncherРедагувати
@@ -51,7 +51,7 @@
Перегляньте документацію Flow Launcher для отримання додаткової допомоги та підказок щодо використання порадВідкрити каталог, де зберігаються налаштування Flow LauncherПеремкнути режим гри
- Quickly change the Flow Launcher theme
+ Швидко змінити тему Flow LauncherУспішно
@@ -62,14 +62,14 @@
Ви впевнені, що хочете перезавантажити комп'ютер за допомогою додаткових параметрів завантаження?Ви впевнені, що хочете вийти з системи?
- Command Keyword Setting
- Custom Command Keyword
- Enter a keyword to search for command: {0}. This keyword is used to match your query.
- Command Keyword
+ Налаштування ключового слова команди
+ Власне ключове слово команди
+ Введіть ключове слово для пошуку команди: {0}. Це ключове слово використовується для відповідності вашому запиту.
+ Ключове слово командиСкинутиПідтвердитиСкасувати
- Please enter a non-empty command keyword
+ Введіть непорожнє ключове слово командиСистемні командиНадає команди, пов'язані з системою, наприклад, вимкнення, блокування, налаштування тощо.
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml
index d693a3f28..05ee39777 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml
@@ -17,7 +17,7 @@
WyzwalaczAdres URLSzukaj
- Use Search Query Autocomplete
+ Użyj autouzupełniania zapytań wyszukiwaniaAutouzupełnianie danych z:Musisz wybrać coś z listyCzy jesteś pewien że chcesz usunąć {0}?
diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml
index 5536a7e68..51e1efc6e 100644
--- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml
+++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml
@@ -17,7 +17,7 @@
Ключове слово діїURLПошук
- Use Search Query Autocomplete
+ Використовувати автозаповнення пошукового запитуАвтозаповнення даних з:Будь ласка, виберіть пошуковий запит в ІнтернетіВи впевнені, що хочете видалити {0}?
@@ -29,8 +29,8 @@
Таким чином, загальна формула для пошуку на Netflix має вигляд https://www.netflix.com/search?q={q}
- Copy URL
- Copy search URL to clipboard
+ Копіювати URL
+ Скопіювати URL-адресу пошуку в буфер обмінуНазва
diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx
index d9de28e4b..e963e34da 100644
--- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx
+++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx
@@ -348,7 +348,7 @@
Area UpdateAndSecurity
- Sichern und wiederherstellen
+ Sichern und WiederherstellenArea Control Panel (legacy settings)
@@ -1324,7 +1324,7 @@
Area Control Panel (legacy settings)
- Remotedesktop
+ Remote-DesktopArea System
@@ -1752,7 +1752,7 @@
Einen Dateityp immer in einem spezifischen Programm öffnen lassen
- Stimme ändern
+ Ändern der Stimme des ErzählersTastaturprobleme finden und beheben
@@ -1761,7 +1761,7 @@
Screenreader verwenden
- Arbeitsgruppe auf diesem Computer Anzeigen
+ Anzeigen, zu welcher Arbeitsgruppe dieser Computer gehörtMausrad-Einstellungen ändern
@@ -1773,7 +1773,7 @@
Probleme finden und beheben
- Einstellung für empfangene Inhalte von Tippen und Senden
+ Ändern der Einstellungen für Inhalte, die über Tippen und Senden empfangen werdenChange default settings for media or devices
@@ -1812,7 +1812,7 @@
Ein Bluetooth-Gerät hinzufügen
- Customise the mouse buttons
+ Individuelles Anpassen der MaustastenSet tablet buttons to perform certain tasks
@@ -1869,16 +1869,16 @@
Scanner und Kameras ansehen
- Microsoft IME Register Word (Japanese)
+ Microsoft IME Register Word (Japanisch)
- Restore your files with File History
+ Ihre Dateien mit File History wiederherstellenTurn On-Screen keyboard on or off
- Block or allow third-party cookies
+ Cookies von Drittanbietern blockieren oder zulassenAudioaufzeichnungsprobleme finden und beheben
@@ -1902,7 +1902,7 @@
Preview, delete, show or hide fonts
- Microsoft Quick Settings
+ Microsoft-SchnelleinstellungenView reliability history
@@ -1917,7 +1917,7 @@
Sicherheitsrichtlinien zurücksetzen
- Pop-ups blockieren oder erlauben
+ Pop-ups blockieren oder zulassenAutovervollständigung im Internet Explorer ein- oder ausschalten
@@ -1938,7 +1938,7 @@
Automatische Fensteranordnung ausschalten
- Troubleshooting History
+ FehlerbehebungshistorieSpeicherprobleme Ihres Computers diagnostizieren
@@ -1968,13 +1968,13 @@
Specify single- or double-click to open
- Select users who can use remote desktop
+ Benutzer auswählen, die den Remote-Desktop verwenden können
- Show which programs are installed on your computer
+ Anzeigen, welche Programme auf Ihrem Computer installiert sind
- Allow remote access to your computer
+ Remote-Zugriff auf Ihren Computer erlaubenErweiterte Systemeinstellungen ansehen
@@ -2082,7 +2082,7 @@
Ihren Wiederherstellungsschlüssel sichern
- Save backup copies of your files with File History
+ Backup-Kopien Ihrer Dateien mit File History speichernView current accessibility settings
@@ -2143,7 +2143,7 @@
Windows-Features ein- oder ausschalten
- Betriebssystem, welches auf deinem Computer läuft, anzeigen
+ Anzeigen, welches Betriebssystem auf Ihrem Computer ausgeführt wirdLokale Dienste ansehen
@@ -2176,7 +2176,7 @@
Change advanced colour management settings for displays, scanners and printers
- Lasse Windows Vereinfachte Zugriffseinstellungen vorschlagen
+ Windows die Einstellungen für erleichterte Bedienung vorschlagen lassenClear disk space by deleting unnecessary files
@@ -2191,16 +2191,16 @@
Record steps to reproduce a problem
- Aussehen und Leistung von Windows anpassen
+ Anpassen des Erscheinungsbildes und der Leistung von WindowsEinstellungen für Microsoft IME (Japanisch)
- Lade jemanden ein, sich mit deinem PC zu verbinden und dir zu helfen oder anderen zu helfen
+ Laden Sie jemanden ein, eine Verbindung zu Ihrem PC herzustellen und Ihnen zu helfen, oder bieten Sie an, jemand anderem zu helfen
- Programme für frühere Versionen von Windows ausführen
+ Programme ausführen, die für frühere Versionen von Windows entwickelt wurdenChoose the order of how your screen rotates
@@ -2239,7 +2239,7 @@
Wählen Sie, wie Sie Links öffnen
- Allow Remote Assistance invitations to be sent from this computer
+ Erlauben, dass Einladungen zur Remote-Unterstützung von diesem Computer aus gesendet werdenTask-Manager
@@ -2257,7 +2257,7 @@
Lupe ein- oder ausschalten
- See the name of this computer
+ Den Namen dieses Computers ansehenNetzwerkverbindungen ansehen
@@ -2302,13 +2302,13 @@
How to change the size of virtual memory
- Hear text read aloud with Narrator
+ Text mit Erzähler vorlesen lassenSet up USB game controllers
- Show which domain your computer is on
+ Anzeigen, in welcher Domäne sich Ihr Computer befindetAlle Problemberichte ansehen
@@ -2401,7 +2401,7 @@
Create and format hard disk partitions
- Change date, time or number formats
+ Datums-, Zeit- oder Zahlenformate ändernChange PC wake-up settings
@@ -2452,13 +2452,13 @@
Change the way measurements are displayed
- Press key combinations one at a time
+ Tastenkombinationen nacheinander drücken
- Restore data, files or computer from backup (Windows 7)
+ Daten, Dateien oder Computer aus Backup wiederherstellen (Windows 7)
- Set your default programs
+ Ihre per Default vorgegebenen Programme festlegenEine Breitbandverbindung einrichten
@@ -2473,10 +2473,10 @@
Geplante Tasks
- Ignore repeated keystrokes using FilterKeys
+ Wiederholte Tastenanschläge unter Verwendung von FilterKeys ignorieren
- Find and fix bluescreen problems
+ Probleme mit Bluescreens finden und behebenEinen Ton hören, wenn Tasten gedrückt werden
@@ -2485,16 +2485,16 @@
Browsing-Historie löschen
- Change what the power buttons do
+ Ändern, was die Power-Tasten bewirken
- Create standard user account
+ Standard-Benutzerkonto erstellenTake speech tutorials
- View system resource usage in Task Manager
+ Systemressourcennutzung im Task-Manager ansehenEinen Account erstellen
diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx
index 91be8a392..6625a42dd 100644
--- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx
+++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ja-JP.resx
@@ -837,7 +837,7 @@
ライト モード
- Location
+ 場所Area Privacy
diff --git a/appveyor.yml b/appveyor.yml
index 646594f4a..39e2a114c 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,4 +1,4 @@
-version: '1.20.1.{build}'
+version: '1.20.2.{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