diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt index 00cc67ea0..19f257ead 100644 --- a/.github/actions/spelling/allow.txt +++ b/.github/actions/spelling/allow.txt @@ -3,3 +3,21 @@ https ssh ubuntu runcount +nunit +velopack +vpk +vsc +appveyor +appwrite +IME +hotkey +prioritise +runas +softpedia +sourcelink +TRAYMOUSEMESSAGE +uninstaller +vkcode +winget +workaround +nupkg diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt index 224014eba..feb6f0ff0 100644 --- a/.github/actions/spelling/excludes.txt +++ b/.github/actions/spelling/excludes.txt @@ -71,3 +71,4 @@ ignore$ \.csproj$ \.DotSettings$ \.targets$ +.*Test.cs$ diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt index 2d6fdb7f0..ca2edec26 100644 --- a/.github/actions/spelling/expect.txt +++ b/.github/actions/spelling/expect.txt @@ -106,3 +106,12 @@ alreadyexists JsonRPC JsonRPCV2 Softpedia +img +ime +LPWStr +flowlauncher +hotkeys +LPW +productversion +requery +Wnd diff --git a/.github/actions/spelling/patterns.txt b/.github/actions/spelling/patterns.txt index f29f57ad5..fd134d799 100644 --- a/.github/actions/spelling/patterns.txt +++ b/.github/actions/spelling/patterns.txt @@ -27,7 +27,14 @@ # Automatically suggested patterns # hit-count: 360 file-count: 108 # IServiceProvider -\bI(?=(?:[A-Z][a-z]{2,})+\b) +# IPublicAPI +\bI(?=(?:[A-Z][a-z]{2,}[A-Z]*)+\b) + +# KListener +\bK(?=(?:[A-Z][a-z]{2,})+\b) + +# TApplication +\bT(?=(?:[A-Z][a-z]{2,})+\b) # hit-count: 297 file-count: 18 # uuid: diff --git a/.github/workflows/default_plugins.yml b/.github/workflows/default_plugins.yml index a2283defe..2cb04fe0d 100644 --- a/.github/workflows/default_plugins.yml +++ b/.github/workflows/default_plugins.yml @@ -18,7 +18,7 @@ jobs: dotnet-version: 7.0.x - name: Determine New Plugin Updates - uses: dorny/paths-filter@v2 + uses: dorny/paths-filter@v3 id: changes with: filters: | diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml new file mode 100644 index 000000000..561d0decc --- /dev/null +++ b/.github/workflows/dotnet.yml @@ -0,0 +1,107 @@ +# This workflow will build a .NET project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net + +name: .NET + +on: + workflow_dispatch: + push: + branches: + - dev + - master + pull_request: + branches: + - dev + - master + +jobs: + build: + + runs-on: windows-latest + env: + FlowVersion: 1.17.2 + NUGET_CERT_REVOCATION_MODE: offline + BUILD_NUMBER: ${{ github.run_number }} + steps: + - uses: actions/checkout@v4 + - name: Set Flow.Launcher.csproj version + id: update + uses: vers-one/dotnet-project-version-updater@v1.5 + with: + file: | + "**/SolutionAssemblyInfo.cs" + version: ${{ env.FlowVersion }}.${{ env.BUILD_NUMBER }} + - uses: actions/cache@v4 + name: Restore Nuget Cache + with: + path: | + ~/.nuget/packages + key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }} + restore-keys: | + ${{ runner.os }}-nuget + - uses: actions/cache@v4 + name: Restore dotnet tool Cache + with: + path: | + ~/.dotnet/tools + key: ${{ runner.os }}-dotnet-tools-${{ hashFiles('~/.dotnet/tools/**') }} + restore-keys: | + ${{ runner.os }}-dotnet-tools + - name: Setup .NET + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 7.0.x +# - name: Install vpk + # Install vpk tool (dotnet tool install will not reinstall if already installed) + # We will update the cli by removing cache +# run: dotnet tool install -g vpk + - name: Restore dependencies + run: dotnet restore + - name: Build + run: dotnet build --no-restore -c Release + - name: Initialize Service + run: | + sc config WSearch start= auto # Starts Windows Search service- Needed for running ExplorerTest + net start WSearch + - name: Test + run: dotnet test --no-build --verbosity normal -c Release + - name: Perform post_build tasks + shell: pwsh + run: .\Scripts\post_build.ps1 -flowversion "${env:FlowVersion}-build.${env:BUILD_NUMBER}" + - name: Upload Plugin Nupkg + uses: actions/upload-artifact@v4 + with: + name: Plugin nupkg + path: | + Output\Release\Flow.Launcher.Plugin.*.nupkg + compression-level: 0 + - name: Upload Setup + uses: actions/upload-artifact@v4 + with: + name: Flow Installer + path: | + Releases\FlowLauncher-*.exe + compression-level: 0 + - name: Upload Portable Version + uses: actions/upload-artifact@v4 + with: + name: Portable Version + path: | + Releases\FlowLauncher-*-Portable.zip + compression-level: 0 +# - name: Upload Full Nupkg +# uses: actions/upload-artifact@v4 +# with: +# name: Full nupkg +# path: | +# Releases\FlowLauncher-*-full.nupkg +# +# compression-level: 0 +# - name: Upload Release Information +# uses: actions/upload-artifact@v4 +# with: +# name: RELEASES +# path: | +# Releases\RELEASES* +# compression-level: 0 +# diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index dd3fb2fca..719f2556e 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -6,6 +6,11 @@ on: schedule: - cron: '30 1 * * *' +env: + days-before-stale: 60 + days-before-close: 7 + exempt-issue-labels: 'keep-fresh' + jobs: stale: runs-on: ubuntu-latest @@ -15,12 +20,12 @@ jobs: steps: - uses: actions/stale@v9 with: - stale-issue-message: 'This issue is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 5 days.' - days-before-stale: 45 - days-before-close: 7 + stale-issue-message: 'This issue is stale because it has been open ${{ env.days-before-stale }} days with no activity. Remove stale label or comment or this will be closed in ${{ env.days-before-stale }} days.\n\nAlternatively this issue can be kept open by adding one of the following labels:\n${{ env.exempt-issue-labels }}' + days-before-stale: ${{ env.days-before-stale }} + days-before-close: ${{ env.days-before-close }} days-before-pr-close: -1 exempt-all-milestones: true close-issue-message: 'This issue was closed because it has been stale for 7 days with no activity. If you feel this issue still needs attention please feel free to reopen.' stale-pr-label: 'no-pr-activity' - exempt-issue-labels: 'keep-fresh' + exempt-issue-labels: ${{ env.exempt-issue-labels }} exempt-pr-labels: 'keep-fresh,awaiting-approval,work-in-progress' diff --git a/Flow.Launcher.Core/Configuration/IPortable.cs b/Flow.Launcher.Core/Configuration/IPortable.cs index e56b0188c..a741a0e9d 100644 --- a/Flow.Launcher.Core/Configuration/IPortable.cs +++ b/Flow.Launcher.Core/Configuration/IPortable.cs @@ -5,12 +5,6 @@ namespace Flow.Launcher.Core.Configuration { void EnablePortableMode(); void DisablePortableMode(); - void RemoveShortcuts(); - void RemoveUninstallerEntry(); - void CreateShortcuts(); - void CreateUninstallerEntry(); - void MoveUserDataFolder(string fromLocation, string toLocation); - void VerifyUserDataAfterMove(string fromLocation, string toLocation); bool CanUpdatePortability(); } -} \ No newline at end of file +} diff --git a/Flow.Launcher.Core/Configuration/Portable.cs b/Flow.Launcher.Core/Configuration/Portable.cs index b58154dcb..631e94845 100644 --- a/Flow.Launcher.Core/Configuration/Portable.cs +++ b/Flow.Launcher.Core/Configuration/Portable.cs @@ -1,5 +1,4 @@ using Microsoft.Win32; -using Squirrel; using System; using System.IO; using System.Reflection; @@ -9,41 +8,26 @@ using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin.SharedCommands; using System.Linq; +using Flow.Launcher.Core.Plugin; +using Velopack; +using Velopack.Locators; +using Velopack.Windows; namespace Flow.Launcher.Core.Configuration { public class Portable : IPortable { - /// - /// As at Squirrel.Windows version 1.5.2, UpdateManager needs to be disposed after finish - /// - /// - private UpdateManager NewUpdateManager() - { - var applicationFolderName = Constant.ApplicationDirectory - .Split(new[] { Path.DirectorySeparatorChar }, StringSplitOptions.None) - .Last(); - - return new UpdateManager(string.Empty, applicationFolderName, Constant.RootDirectory); - } - public void DisablePortableMode() { try { MoveUserDataFolder(DataLocation.PortableDataPath, DataLocation.RoamingDataPath); -#if !DEBUG - // Create shortcuts and uninstaller are not required in debug mode, - // otherwise will repoint the path of the actual installed production version to the debug version - CreateShortcuts(); - CreateUninstallerEntry(); -#endif IndicateDeletion(DataLocation.PortableDataPath); MessageBox.Show("Flow Launcher needs to restart to finish disabling portable mode, " + - "after the restart your portable data profile will be deleted and roaming data profile kept"); + "after the restart your portable data profile will be deleted and roaming data profile kept"); - UpdateManager.RestartApp(Constant.ApplicationFileName); + PluginManager.API.RestartApp(); } catch (Exception e) { @@ -56,18 +40,12 @@ namespace Flow.Launcher.Core.Configuration try { MoveUserDataFolder(DataLocation.RoamingDataPath, DataLocation.PortableDataPath); -#if !DEBUG - // Remove shortcuts and uninstaller are not required in debug mode, - // otherwise will delete the actual installed production version - RemoveShortcuts(); - RemoveUninstallerEntry(); -#endif IndicateDeletion(DataLocation.RoamingDataPath); MessageBox.Show("Flow Launcher needs to restart to finish enabling portable mode, " + - "after the restart your roaming data profile will be deleted and portable data profile kept"); + "after the restart your roaming data profile will be deleted and portable data profile kept"); - UpdateManager.RestartApp(Constant.ApplicationFileName); + PluginManager.API.RestartApp(); } catch (Exception e) { @@ -75,23 +53,6 @@ namespace Flow.Launcher.Core.Configuration } } - public void RemoveShortcuts() - { - using (var portabilityUpdater = NewUpdateManager()) - { - portabilityUpdater.RemoveShortcutsForExecutable(Constant.ApplicationFileName, ShortcutLocation.StartMenu); - portabilityUpdater.RemoveShortcutsForExecutable(Constant.ApplicationFileName, ShortcutLocation.Desktop); - portabilityUpdater.RemoveShortcutsForExecutable(Constant.ApplicationFileName, ShortcutLocation.Startup); - } - } - - public void RemoveUninstallerEntry() - { - using (var portabilityUpdater = NewUpdateManager()) - { - portabilityUpdater.RemoveUninstallerRegistryEntry(); - } - } public void MoveUserDataFolder(string fromLocation, string toLocation) { @@ -104,36 +65,10 @@ namespace Flow.Launcher.Core.Configuration FilesFolders.VerifyBothFolderFilesEqual(fromLocation, toLocation); } - public void CreateShortcuts() + + internal void IndicateDeletion(string filePathToDelete) { - using (var portabilityUpdater = NewUpdateManager()) - { - portabilityUpdater.CreateShortcutsForExecutable(Constant.ApplicationFileName, ShortcutLocation.StartMenu, false); - portabilityUpdater.CreateShortcutsForExecutable(Constant.ApplicationFileName, ShortcutLocation.Desktop, false); - portabilityUpdater.CreateShortcutsForExecutable(Constant.ApplicationFileName, ShortcutLocation.Startup, false); - } - } - - public void CreateUninstallerEntry() - { - var uninstallRegSubKey = @"Software\Microsoft\Windows\CurrentVersion\Uninstall"; - - using (var baseKey = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default)) - using (var subKey1 = baseKey.CreateSubKey(uninstallRegSubKey, RegistryKeyPermissionCheck.ReadWriteSubTree)) - using (var subKey2 = subKey1.CreateSubKey(Constant.FlowLauncher, RegistryKeyPermissionCheck.ReadWriteSubTree)) - { - subKey2.SetValue("DisplayIcon", Path.Combine(Constant.ApplicationDirectory, "app.ico"), RegistryValueKind.String); - } - - using (var portabilityUpdater = NewUpdateManager()) - { - _ = portabilityUpdater.CreateUninstallerRegistryEntry(); - } - } - - internal void IndicateDeletion(string filePathTodelete) - { - var deleteFilePath = Path.Combine(filePathTodelete, DataLocation.DeletionIndicatorFile); + var deleteFilePath = Path.Combine(filePathToDelete, DataLocation.DeletionIndicatorFile); using (var _ = File.CreateText(deleteFilePath)) { } @@ -145,15 +80,27 @@ namespace Flow.Launcher.Core.Configuration /// public void PreStartCleanUpAfterPortabilityUpdate() { + // check whether the package locate in %LocalAppData% + // if not create the portable data folder + // Don't create the folder if the version is 1.0.0 (Dev) to allow potential debugging with data in the project folder + // It is still possible to create the UserData folder for dev version manually but we want to keep the current behavior + if (!Constant.ProgramDirectory.IsSubPathOf( + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)) + && Constant.Version != "1.0.0") + { + Directory.CreateDirectory(DataLocation.PortableDataPath); + } + // Specify here so this method does not rely on other environment variables to initialise - var portableDataDir = Path.Combine(Directory.GetParent(Assembly.GetExecutingAssembly().Location.NonNull()).ToString(), "UserData"); - var roamingDataDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlowLauncher"); + var portableDataDir = DataLocation.PortableDataPath; + var roamingDataDir = DataLocation.RoamingDataPath; + // Get full path to the .dead files for each case var portableDataDeleteFilePath = Path.Combine(portableDataDir, DataLocation.DeletionIndicatorFile); var roamingDataDeleteFilePath = Path.Combine(roamingDataDir, DataLocation.DeletionIndicatorFile); - // If the data folder in %appdata% is marked for deletion, + // If the data folder in %AppData% is marked for deletion, // delete it and prompt the user to pick the portable data location if (File.Exists(roamingDataDeleteFilePath)) { @@ -161,7 +108,7 @@ namespace Flow.Launcher.Core.Configuration if (MessageBox.Show("Flow Launcher has detected you enabled portable mode, " + "would you like to move it to a different location?", string.Empty, - MessageBoxButton.YesNo) == MessageBoxResult.Yes) + MessageBoxButton.YesNo) == MessageBoxResult.Yes) { FilesFolders.OpenPath(Constant.RootDirectory); @@ -175,7 +122,7 @@ namespace Flow.Launcher.Core.Configuration FilesFolders.RemoveFolderIfExists(portableDataDir); MessageBox.Show("Flow Launcher has detected you disabled portable mode, " + - "the relevant shortcuts and uninstaller entry have been created"); + "the relevant shortcuts and uninstaller entry have been created"); } } @@ -187,8 +134,8 @@ namespace Flow.Launcher.Core.Configuration if (roamingLocationExists && portableLocationExists) { MessageBox.Show(string.Format("Flow Launcher detected your user data exists both in {0} and " + - "{1}. {2}{2}Please delete {1} in order to proceed. No changes have occurred.", - DataLocation.PortableDataPath, DataLocation.RoamingDataPath, Environment.NewLine)); + "{1}. {2}{2}Please delete {1} in order to proceed. No changes have occurred.", + DataLocation.PortableDataPath, DataLocation.RoamingDataPath, Environment.NewLine)); return false; } diff --git a/Flow.Launcher.Core/ExternalPlugins/CommunityPluginSource.cs b/Flow.Launcher.Core/ExternalPlugins/CommunityPluginSource.cs index d3ee4695c..68be746f2 100644 --- a/Flow.Launcher.Core/ExternalPlugins/CommunityPluginSource.cs +++ b/Flow.Launcher.Core/ExternalPlugins/CommunityPluginSource.cs @@ -5,6 +5,8 @@ using System.Collections.Generic; using System.Net; using System.Net.Http; using System.Net.Http.Json; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; @@ -16,6 +18,11 @@ namespace Flow.Launcher.Core.ExternalPlugins private List plugins = new(); + private static JsonSerializerOptions PluginStoreItemSerializationOption = new JsonSerializerOptions() + { + DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault + }; + /// /// Fetch and deserialize the contents of a plugins.json file found at . /// We use conditional http requests to keep repeat requests fast. @@ -32,12 +39,15 @@ namespace Flow.Launcher.Core.ExternalPlugins request.Headers.Add("If-None-Match", latestEtag); - using var response = await Http.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, token).ConfigureAwait(false); + using var response = await Http.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, token) + .ConfigureAwait(false); if (response.StatusCode == HttpStatusCode.OK) { - this.plugins = await response.Content.ReadFromJsonAsync>(cancellationToken: token).ConfigureAwait(false); - this.latestEtag = response.Headers.ETag.Tag; + this.plugins = await response.Content + .ReadFromJsonAsync>(PluginStoreItemSerializationOption, cancellationToken: token) + .ConfigureAwait(false); + this.latestEtag = response.Headers.ETag?.Tag; Log.Info(nameof(CommunityPluginSource), $"Loaded {this.plugins.Count} plugins from {ManifestFileUrl}"); return this.plugins; @@ -49,7 +59,8 @@ namespace Flow.Launcher.Core.ExternalPlugins } else { - Log.Warn(nameof(CommunityPluginSource), $"Failed to load resource {ManifestFileUrl} with response {response.StatusCode}"); + Log.Warn(nameof(CommunityPluginSource), + $"Failed to load resource {ManifestFileUrl} with response {response.StatusCode}"); throw new Exception($"Failed to load resource {ManifestFileUrl} with response {response.StatusCode}"); } } diff --git a/Flow.Launcher.Core/ExternalPlugins/UserPlugin.cs b/Flow.Launcher.Core/ExternalPlugins/UserPlugin.cs index bb1279b2c..64c4cd627 100644 --- a/Flow.Launcher.Core/ExternalPlugins/UserPlugin.cs +++ b/Flow.Launcher.Core/ExternalPlugins/UserPlugin.cs @@ -14,8 +14,8 @@ namespace Flow.Launcher.Core.ExternalPlugins public string UrlDownload { get; set; } public string UrlSourceCode { get; set; } public string IcoPath { get; set; } - public DateTime LatestReleaseDate { get; set; } - public DateTime DateAdded { get; set; } + public DateTime? LatestReleaseDate { get; set; } + public DateTime? DateAdded { get; set; } } } diff --git a/Flow.Launcher.Core/Flow.Launcher.Core.csproj b/Flow.Launcher.Core/Flow.Launcher.Core.csproj index 9c77a2b7d..69e9b580e 100644 --- a/Flow.Launcher.Core/Flow.Launcher.Core.csproj +++ b/Flow.Launcher.Core/Flow.Launcher.Core.csproj @@ -55,9 +55,10 @@ - - - + + + + diff --git a/Flow.Launcher.Core/Plugin/ExecutablePluginV2.cs b/Flow.Launcher.Core/Plugin/ExecutablePluginV2.cs index ee1b315c2..852f57b9f 100644 --- a/Flow.Launcher.Core/Plugin/ExecutablePluginV2.cs +++ b/Flow.Launcher.Core/Plugin/ExecutablePluginV2.cs @@ -12,15 +12,9 @@ namespace Flow.Launcher.Core.Plugin public ExecutablePluginV2(string filename) { - StartInfo = new ProcessStartInfo - { - FileName = filename, - UseShellExecute = false, - CreateNoWindow = true, - RedirectStandardOutput = true, - RedirectStandardError = true - }; + StartInfo = new ProcessStartInfo { FileName = filename }; } + protected override MessageHandlerType MessageHandler { get; } = MessageHandlerType.NewLineDelimited; } } diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs b/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs index 3848af6a4..408d9785d 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPluginSettings.cs @@ -37,7 +37,7 @@ namespace Flow.Launcher.Core.Plugin _storage = new JsonStorage>(SettingPath); Settings = await _storage.LoadAsync(); - if (Settings != null || Configuration == null) + if (Configuration == null) { return; } diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPluginV2.cs b/Flow.Launcher.Core/Plugin/JsonRPCPluginV2.cs index 390da072b..46c72624a 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPluginV2.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPluginV2.cs @@ -15,8 +15,6 @@ namespace Flow.Launcher.Core.Plugin { internal abstract class JsonRPCPluginV2 : JsonRPCPluginBase, IAsyncDisposable, IAsyncReloadable, IResultUpdated { - public abstract string SupportedLanguage { get; set; } - public const string JsonRpc = "JsonRPC"; protected abstract IDuplexPipe ClientPipe { get; set; } @@ -41,9 +39,23 @@ namespace Flow.Launcher.Core.Plugin } } + private JoinableTaskFactory JTF { get; } = new JoinableTaskFactory(new JoinableTaskContext()); + public override List LoadContextMenus(Result selectedResult) { - throw new NotImplementedException(); + try + { + var res = JTF.Run(() => RPC.InvokeWithCancellationAsync("context_menu", + new object[] { selectedResult.ContextData })); + + var results = ParseResults(res); + + return results; + } + catch + { + return new List(); + } } public override async Task> QueryAsync(Query query, CancellationToken token) @@ -51,7 +63,7 @@ namespace Flow.Launcher.Core.Plugin try { var res = await RPC.InvokeWithCancellationAsync("query", - new[] { query }, + new object[] { query, Settings.Inner }, token); var results = ParseResults(res); @@ -88,12 +100,26 @@ namespace Flow.Launcher.Core.Plugin public event ResultUpdatedEventHandler ResultsUpdated; + protected enum MessageHandlerType + { + HeaderDelimited, + LengthHeaderDelimited, + NewLineDelimited + } + + protected abstract MessageHandlerType MessageHandler { get; } + private void SetupJsonRPC() { var formatter = new SystemTextJsonFormatter { JsonSerializerOptions = RequestSerializeOption }; - var handler = new NewLineDelimitedMessageHandler(ClientPipe, - formatter); + IJsonRpcMessageHandler handler = MessageHandler switch + { + MessageHandlerType.HeaderDelimited => new HeaderDelimitedMessageHandler(ClientPipe, formatter), + MessageHandlerType.LengthHeaderDelimited => new LengthHeaderMessageHandler(ClientPipe, formatter), + MessageHandlerType.NewLineDelimited => new NewLineDelimitedMessageHandler(ClientPipe, formatter), + _ => throw new ArgumentOutOfRangeException() + }; RPC = new JsonRpc(handler, new JsonRPCPublicAPI(Context.API)); diff --git a/Flow.Launcher.Core/Plugin/NodePlugin.cs b/Flow.Launcher.Core/Plugin/NodePlugin.cs index 40eb057cb..aeac18ca9 100644 --- a/Flow.Launcher.Core/Plugin/NodePlugin.cs +++ b/Flow.Launcher.Core/Plugin/NodePlugin.cs @@ -28,20 +28,21 @@ namespace Flow.Launcher.Core.Plugin protected override Task RequestAsync(JsonRPCRequestModel request, CancellationToken token = default) { - _startInfo.ArgumentList[1] = JsonSerializer.Serialize(request); + _startInfo.ArgumentList[1] = JsonSerializer.Serialize(request, RequestSerializeOption); return ExecuteAsync(_startInfo, token); } protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default) { // since this is not static, request strings will build up in ArgumentList if index is not specified - _startInfo.ArgumentList[1] = JsonSerializer.Serialize(rpcRequest); + _startInfo.ArgumentList[1] = JsonSerializer.Serialize(rpcRequest, RequestSerializeOption); return Execute(_startInfo); } public override async Task InitAsync(PluginInitContext context) { _startInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath); + _startInfo.ArgumentList.Add(string.Empty); _startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory; await base.InitAsync(context); } diff --git a/Flow.Launcher.Core/Plugin/NodePluginV2.cs b/Flow.Launcher.Core/Plugin/NodePluginV2.cs index 6c95777f0..c8cc37c57 100644 --- a/Flow.Launcher.Core/Plugin/NodePluginV2.cs +++ b/Flow.Launcher.Core/Plugin/NodePluginV2.cs @@ -10,29 +10,21 @@ namespace Flow.Launcher.Core.Plugin /// /// Execution of JavaScript & TypeScript plugins /// - internal class NodePluginV2 : ProcessStreamPluginV2 + internal sealed class NodePluginV2 : ProcessStreamPluginV2 { public NodePluginV2(string filename) { - StartInfo = new ProcessStartInfo - { - FileName = filename, - UseShellExecute = false, - CreateNoWindow = true, - RedirectStandardOutput = true, - RedirectStandardError = true - }; + StartInfo = new ProcessStartInfo { FileName = filename, }; } - public override string SupportedLanguage { get; set; } protected override ProcessStartInfo StartInfo { get; set; } public override async Task InitAsync(PluginInitContext context) { StartInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath); - StartInfo.ArgumentList.Add(string.Empty); - StartInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory; await base.InitAsync(context); } + + protected override MessageHandlerType MessageHandler { get; } = MessageHandlerType.HeaderDelimited; } } diff --git a/Flow.Launcher.Core/Plugin/ProcessStreamPluginV2.cs b/Flow.Launcher.Core/Plugin/ProcessStreamPluginV2.cs index a476f06e9..a14baf271 100644 --- a/Flow.Launcher.Core/Plugin/ProcessStreamPluginV2.cs +++ b/Flow.Launcher.Core/Plugin/ProcessStreamPluginV2.cs @@ -1,23 +1,38 @@ -using System; +#nullable enable + +using System; using System.Collections.Generic; using System.Diagnostics; using System.IO.Pipelines; using System.Threading.Tasks; using Flow.Launcher.Infrastructure; using Flow.Launcher.Plugin; +using Meziantou.Framework.Win32; +using Microsoft.VisualBasic.ApplicationServices; using Nerdbank.Streams; namespace Flow.Launcher.Core.Plugin { internal abstract class ProcessStreamPluginV2 : JsonRPCPluginV2 { + private static JobObject _jobObject = new JobObject(); - public override string SupportedLanguage { get; set; } - protected sealed override IDuplexPipe ClientPipe { get; set; } + static ProcessStreamPluginV2() + { + _jobObject.SetLimits(new JobObjectLimits() + { + Flags = JobObjectLimitFlags.KillOnJobClose | JobObjectLimitFlags.DieOnUnhandledException | + JobObjectLimitFlags.SilentBreakawayOk + }); + + _jobObject.AssignProcess(Process.GetCurrentProcess()); + } + + protected sealed override IDuplexPipe ClientPipe { get; set; } = null!; protected abstract ProcessStartInfo StartInfo { get; set; } - protected Process ClientProcess { get; set; } + protected Process ClientProcess { get; set; } = null!; public override async Task InitAsync(PluginInitContext context) { @@ -25,11 +40,17 @@ namespace Flow.Launcher.Core.Plugin StartInfo.EnvironmentVariables["FLOW_PROGRAM_DIRECTORY"] = Constant.ProgramDirectory; StartInfo.EnvironmentVariables["FLOW_APPLICATION_DIRECTORY"] = Constant.ApplicationDirectory; - StartInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath); + StartInfo.RedirectStandardError = true; + StartInfo.RedirectStandardInput = true; + StartInfo.RedirectStandardOutput = true; + StartInfo.CreateNoWindow = true; + StartInfo.UseShellExecute = false; StartInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory; - ClientProcess = Process.Start(StartInfo); - ArgumentNullException.ThrowIfNull(ClientProcess); + var process = Process.Start(StartInfo); + ArgumentNullException.ThrowIfNull(process); + ClientProcess = process; + _jobObject.AssignProcess(ClientProcess); SetupPipe(ClientProcess); @@ -37,15 +58,15 @@ namespace Flow.Launcher.Core.Plugin await base.InitAsync(context); } - + private void SetupPipe(Process process) { var (reader, writer) = (PipeReader.Create(process.StandardOutput.BaseStream), PipeWriter.Create(process.StandardInput.BaseStream)); ClientPipe = new DuplexPipe(reader, writer); } - - + + public override async Task ReloadDataAsync() { var oldProcess = ClientProcess; @@ -57,8 +78,8 @@ namespace Flow.Launcher.Core.Plugin await oldProcess.WaitForExitAsync(); oldProcess.Dispose(); } - - + + public override async ValueTask DisposeAsync() { ClientProcess.Kill(true); diff --git a/Flow.Launcher.Core/Plugin/PythonPluginV2.cs b/Flow.Launcher.Core/Plugin/PythonPluginV2.cs index 4a8d8d7de..5c36e0eea 100644 --- a/Flow.Launcher.Core/Plugin/PythonPluginV2.cs +++ b/Flow.Launcher.Core/Plugin/PythonPluginV2.cs @@ -18,20 +18,11 @@ namespace Flow.Launcher.Core.Plugin { internal sealed class PythonPluginV2 : ProcessStreamPluginV2 { - public override string SupportedLanguage { get; set; } = AllowedLanguage.Python; protected override ProcessStartInfo StartInfo { get; set; } - + public PythonPluginV2(string filename) { - StartInfo = new ProcessStartInfo - { - FileName = filename, - UseShellExecute = false, - CreateNoWindow = true, - RedirectStandardOutput = true, - RedirectStandardError = true, - RedirectStandardInput = true - }; + StartInfo = new ProcessStartInfo { FileName = filename, }; var path = Path.Combine(Constant.ProgramDirectory, JsonRpc); StartInfo.EnvironmentVariables["PYTHONPATH"] = path; @@ -39,5 +30,13 @@ namespace Flow.Launcher.Core.Plugin //Add -B flag to tell python don't write .py[co] files. Because .pyc contains location infos which will prevent python portable StartInfo.ArgumentList.Add("-B"); } + + public override async Task InitAsync(PluginInitContext context) + { + StartInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath); + await base.InitAsync(context); + } + + protected override MessageHandlerType MessageHandler { get; } = MessageHandlerType.NewLineDelimited; } } diff --git a/Flow.Launcher.Core/Properties/AssemblyInfo.cs b/Flow.Launcher.Core/Properties/AssemblyInfo.cs index ad60e2c9f..77c4fb79a 100644 --- a/Flow.Launcher.Core/Properties/AssemblyInfo.cs +++ b/Flow.Launcher.Core/Properties/AssemblyInfo.cs @@ -1,3 +1,4 @@ -using System.Runtime.CompilerServices; +using System.Reflection; +using System.Runtime.CompilerServices; [assembly: InternalsVisibleTo("Flow.Launcher.Test")] diff --git a/Flow.Launcher.Core/Updater.cs b/Flow.Launcher.Core/Updater.cs index 3f64b273e..7fc50a02d 100644 --- a/Flow.Launcher.Core/Updater.cs +++ b/Flow.Launcher.Core/Updater.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.IO; using System.Net; using System.Net.Http; using System.Net.Sockets; @@ -7,7 +8,6 @@ using System.Linq; using System.Threading.Tasks; using System.Windows; using JetBrains.Annotations; -using Squirrel; using Flow.Launcher.Core.Resource; using Flow.Launcher.Plugin.SharedCommands; using Flow.Launcher.Infrastructure; @@ -17,6 +17,11 @@ using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; using System.Text.Json.Serialization; using System.Threading; +using System.Windows.Shapes; +using Velopack; +using Velopack.Locators; +using Velopack.Sources; +using Path = System.IO.Path; namespace Flow.Launcher.Core { @@ -40,15 +45,23 @@ namespace Flow.Launcher.Core api.ShowMsg(api.GetTranslation("pleaseWait"), api.GetTranslation("update_flowlauncher_update_check")); - using var updateManager = await GitHubUpdateManagerAsync(GitHubRepository).ConfigureAwait(false); + var updateManager = new UpdateManager(new GithubSource(GitHubRepository, null, false)); // UpdateApp CheckForUpdate will return value only if the app is squirrel installed - var newUpdateInfo = await updateManager.CheckForUpdate().NonNull().ConfigureAwait(false); + var newUpdateInfo = await updateManager.CheckForUpdatesAsync().ConfigureAwait(false); - var newReleaseVersion = Version.Parse(newUpdateInfo.FutureReleaseEntry.Version.ToString()); + if (newUpdateInfo == null) + { + if (!silentUpdate) + api.ShowMsg(api.GetTranslation("update_flowlauncher_fail"), + api.GetTranslation("update_flowlauncher_check_connection")); + return; + } + + var newReleaseVersion = Version.Parse(newUpdateInfo.TargetFullRelease.Version.ToString()); var currentVersion = Version.Parse(Constant.Version); - Log.Info($"|Updater.UpdateApp|Future Release <{newUpdateInfo.FutureReleaseEntry.Formatted()}>"); + Log.Info($"|Updater.UpdateApp|Future Release <{newUpdateInfo.TargetFullRelease.Formatted()}>"); if (newReleaseVersion <= currentVersion) { @@ -61,40 +74,45 @@ namespace Flow.Launcher.Core api.ShowMsg(api.GetTranslation("update_flowlauncher_update_found"), api.GetTranslation("update_flowlauncher_updating")); - await updateManager.DownloadReleases(newUpdateInfo.ReleasesToApply).ConfigureAwait(false); - - await updateManager.ApplyReleases(newUpdateInfo).ConfigureAwait(false); + await updateManager.DownloadUpdatesAsync(newUpdateInfo).ConfigureAwait(false); if (DataLocation.PortableDataLocationInUse()) { - var targetDestination = updateManager.RootAppDirectory + $"\\app-{newReleaseVersion.ToString()}\\{DataLocation.PortableFolderName}"; - FilesFolders.CopyAll(DataLocation.PortableDataPath, targetDestination); - if (!FilesFolders.VerifyBothFolderFilesEqual(DataLocation.PortableDataPath, targetDestination)) - MessageBox.Show(string.Format(api.GetTranslation("update_flowlauncher_fail_moving_portable_user_profile_data"), + var targetDestination = Path.Combine(VelopackLocator.GetDefault(null).RootAppDir!, + DataLocation.PortableFolderName); + + DataLocation.PortableDataPath.CopyAll(targetDestination); + if (!DataLocation.PortableDataPath.VerifyBothFolderFilesEqual(targetDestination)) + MessageBox.Show(string.Format( + api.GetTranslation("update_flowlauncher_fail_moving_portable_user_profile_data"), DataLocation.PortableDataPath, targetDestination)); } - else - { - await updateManager.CreateUninstallerRegistryEntry().ConfigureAwait(false); - } var newVersionTips = NewVersionTips(newReleaseVersion.ToString()); Log.Info($"|Updater.UpdateApp|Update success:{newVersionTips}"); - if (MessageBox.Show(newVersionTips, api.GetTranslation("update_flowlauncher_new_update"), MessageBoxButton.YesNo) == MessageBoxResult.Yes) + if (MessageBox.Show(newVersionTips, api.GetTranslation("update_flowlauncher_new_update"), + MessageBoxButton.YesNo) == MessageBoxResult.Yes) { - UpdateManager.RestartApp(Constant.ApplicationFileName); + updateManager.ApplyUpdatesAndRestart(newUpdateInfo); + } + else + { + updateManager.WaitExitThenApplyUpdates(newUpdateInfo); } } catch (Exception e) { - if ((e is HttpRequestException or WebException or SocketException || e.InnerException is TimeoutException)) - Log.Exception($"|Updater.UpdateApp|Check your connection and proxy settings to github-cloud.s3.amazonaws.com.", e); + if ((e is HttpRequestException or WebException or SocketException || + e.InnerException is TimeoutException)) + Log.Exception( + $"|Updater.UpdateApp|Check your connection and proxy settings to github-cloud.s3.amazonaws.com.", + e); else Log.Exception($"|Updater.UpdateApp|Error Occurred", e); - + if (!silentUpdate) api.ShowMsg(api.GetTranslation("update_flowlauncher_fail"), api.GetTranslation("update_flowlauncher_check_connection")); @@ -105,40 +123,19 @@ namespace Flow.Launcher.Core } } - [UsedImplicitly] - private class GithubRelease + public static void RecoverPortableData() { - [JsonPropertyName("prerelease")] - public bool Prerelease { get; [UsedImplicitly] set; } + var locator = VelopackLocator.GetDefault(null); - [JsonPropertyName("published_at")] - public DateTime PublishedAt { get; [UsedImplicitly] set; } + var portableDataLocation = Path.Combine(VelopackLocator.GetDefault(null).RootAppDir!, + DataLocation.PortableFolderName); - [JsonPropertyName("html_url")] - public string HtmlUrl { get; [UsedImplicitly] set; } - } - - // https://github.com/Squirrel/Squirrel.Windows/blob/master/src/Squirrel/UpdateManager.Factory.cs - private async Task GitHubUpdateManagerAsync(string repository) - { - var uri = new Uri(repository); - var api = $"https://api.github.com/repos{uri.AbsolutePath}/releases"; - - await using var jsonStream = await Http.GetStreamAsync(api).ConfigureAwait(false); - - var releases = await System.Text.Json.JsonSerializer.DeserializeAsync>(jsonStream).ConfigureAwait(false); - var latest = releases.Where(r => !r.Prerelease).OrderByDescending(r => r.PublishedAt).First(); - var latestUrl = latest.HtmlUrl.Replace("/tag/", "/download/"); - - var client = new WebClient + if (Path.Exists(portableDataLocation)) { - Proxy = Http.WebProxy - }; - var downloader = new FileDownloader(client); + portableDataLocation.CopyAll(Path.Combine(locator.AppContentDir!, DataLocation.PortableFolderName)); + } - var manager = new UpdateManager(latestUrl, urlDownloader: downloader); - - return manager; + Directory.Delete(portableDataLocation); } public string NewVersionTips(string version) diff --git a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj index a2962a04f..99e8fe1ad 100644 --- a/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj +++ b/Flow.Launcher.Infrastructure/Flow.Launcher.Infrastructure.csproj @@ -51,6 +51,7 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Flow.Launcher.Infrastructure/Image/ImageCache.cs b/Flow.Launcher.Infrastructure/Image/ImageCache.cs index 009496f30..55545b9a7 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageCache.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageCache.cs @@ -3,20 +3,18 @@ using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading; -using System.Threading.Tasks; using System.Windows.Media; -using Avalonia.Media; -using Avalonia.Media.Imaging; +using FastCache; +using FastCache.Services; namespace Flow.Launcher.Infrastructure.Image { - [Serializable] public class ImageUsage { public int usage; - public IImage imageSource; + public ImageSource imageSource; - public ImageUsage(int usage, IImage image) + public ImageUsage(int usage, ImageSource image) { this.usage = usage; imageSource = image; @@ -26,88 +24,61 @@ namespace Flow.Launcher.Infrastructure.Image public class ImageCache { private const int MaxCached = 150; - public ConcurrentDictionary<(string, bool), ImageUsage> Data { get; } = new(); - private const int permissibleFactor = 2; - private SemaphoreSlim semaphore = new(1, 1); public void Initialize(Dictionary<(string, bool), int> usage) { foreach (var key in usage.Keys) { - Data[key] = new ImageUsage(usage[key], null); + Cached.Save(key, new ImageUsage(usage[key], null), TimeSpan.MaxValue, MaxCached); } } - public IImage this[string path, bool isFullImage = false] + public ImageSource this[string path, bool isFullImage = false] { get { - if (!Data.TryGetValue((path, isFullImage), out var value)) + if (!Cached.TryGet((path, isFullImage), out var value)) { return null; } - value.usage++; - return value.imageSource; + value.Value.usage++; + return value.Value.imageSource; } set { - Data.AddOrUpdate( - (path, isFullImage), - new ImageUsage(0, value), - (k, v) => - { - v.imageSource = value; - v.usage++; - return v; - } - ); - - SliceExtra(); - - async Task SliceExtra() + if (Cached.TryGet((path, isFullImage), out var cached)) { - // To prevent the dictionary from drastically increasing in size by caching images, the dictionary size is not allowed to grow more than the permissibleFactor * maxCached size - // This is done so that we don't constantly perform this resizing operation and also maintain the image cache size at the same time - if (Data.Count > permissibleFactor * MaxCached) - { - await semaphore.WaitAsync().ConfigureAwait(false); - // To delete the images from the data dictionary based on the resizing of the Usage Dictionary - // Double Check to avoid concurrent remove - if (Data.Count > permissibleFactor * MaxCached) - foreach (var key in Data.OrderBy(x => x.Value.usage).Take(Data.Count - MaxCached) - .Select(x => x.Key)) - Data.TryRemove(key, out _); - semaphore.Release(); - } + cached.Value.imageSource = value; + cached.Value.usage++; } + + Cached.Save((path, isFullImage), new ImageUsage(0, value), TimeSpan.MaxValue, + MaxCached); } } public bool ContainsKey(string key, bool isFullImage) { - return key is not null && Data.ContainsKey((key, isFullImage)) && - Data[(key, isFullImage)].imageSource != null; + return Cached.TryGet((key, isFullImage), out _); } - public bool TryGetValue(string key, bool isFullImage, out IImage image) + public bool TryGetValue(string key, bool isFullImage, out ImageSource image) { - if (key is not null) + if (Cached.TryGet((key, isFullImage), out var value)) { - bool hasKey = Data.TryGetValue((key, isFullImage), out var imageUsage); - image = hasKey ? imageUsage.imageSource : null; - return hasKey; - } - else - { - image = null; - return false; + image = value.Value.imageSource; + value.Value.usage++; + return image != null; } + + image = null; + return false; } public int CacheSize() { - return Data.Count; + return CacheManager.TotalCount<(string, bool), ImageUsage>(); } /// @@ -115,7 +86,14 @@ namespace Flow.Launcher.Infrastructure.Image /// public int UniqueImagesInCache() { - return Data.Values.Select(x => x.imageSource).Distinct().Count(); + return CacheManager.EnumerateEntries<(string, bool), ImageUsage>().Select(x => x.Value.imageSource) + .Distinct() + .Count(); + } + + public IEnumerable> EnumerateEntries() + { + return CacheManager.EnumerateEntries<(string, bool), ImageUsage>(); } } } diff --git a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs index cae4c3075..5fc7fdd1c 100644 --- a/Flow.Launcher.Infrastructure/Image/ImageLoader.cs +++ b/Flow.Launcher.Infrastructure/Image/ImageLoader.cs @@ -52,7 +52,7 @@ namespace Flow.Launcher.Infrastructure.Image { await Stopwatch.NormalAsync("|ImageLoader.Initialize|Preload images cost", async () => { - foreach (var ((path, isFullImage), _) in ImageCache.Data) + foreach (var ((path, isFullImage), _) in usage) { await LoadAsync(path, isFullImage); } @@ -68,7 +68,7 @@ namespace Flow.Launcher.Infrastructure.Image try { - await _storage.SaveAsync(ImageCache.Data + await _storage.SaveAsync(ImageCache.EnumerateEntries() .ToDictionary( x => x.Key, x => x.Value.usage)); @@ -122,9 +122,12 @@ namespace Flow.Launcher.Infrastructure.Image return new ImageResult(MissingImage, ImageType.Error); } - if (ImageCache.ContainsKey(path, loadFullImage)) + // extra scope for use of same variable name { - return new ImageResult(ImageCache[path, loadFullImage], ImageType.Cache); + if (ImageCache.TryGetValue(path, loadFullImage, out var imageSource)) + { + return new ImageResult(imageSource, ImageType.Cache); + } } if (Uri.TryCreate(path, UriKind.RelativeOrAbsolute, out var uriResult) diff --git a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj index f4bba8037..a1707d863 100644 --- a/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj +++ b/Flow.Launcher.Plugin/Flow.Launcher.Plugin.csproj @@ -14,10 +14,10 @@ - 4.1.1 - 4.1.1 - 4.1.1 - 4.1.1 + 4.2.0 + 4.2.0 + 4.2.0 + 4.2.0 Flow.Launcher.Plugin Flow-Launcher MIT diff --git a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs index 4137ca8d0..39ad6304c 100644 --- a/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs +++ b/Flow.Launcher.Plugin/SharedCommands/FilesFolders.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.IO; #pragma warning disable IDE0005 using System.Windows; + #pragma warning restore IDE0005 namespace Flow.Launcher.Plugin.SharedCommands @@ -14,9 +15,27 @@ namespace Flow.Launcher.Plugin.SharedCommands { private const string FileExplorerProgramName = "explorer"; + /// + /// Checks if is a subpath of + /// + /// + /// + /// + public static bool IsSubPathOf(this string subPath, string basePath) + { + var rel = Path.GetRelativePath( + basePath.Replace('\\', '/'), + subPath.Replace('\\', '/')); + return rel != "." + && rel != ".." + && !rel.StartsWith("../") + && !Path.IsPathRooted(rel); + } + + /// /// Copies the folder and all of its files and folders - /// including subfolders to the target location + /// including subFolders to the target location /// /// /// @@ -45,15 +64,15 @@ namespace Flow.Launcher.Plugin.SharedCommands FileInfo[] files = dir.GetFiles(); foreach (FileInfo file in files) { - string temppath = Path.Combine(targetPath, file.Name); - file.CopyTo(temppath, false); + string tempPath = Path.Combine(targetPath, file.Name); + file.CopyTo(tempPath, false); } // Recursively copy subdirectories by calling itself on each subdirectory until there are no more to copy - foreach (DirectoryInfo subdir in dirs) + foreach (DirectoryInfo subDir in dirs) { - string temppath = Path.Combine(targetPath, subdir.Name); - CopyAll(subdir.FullName, temppath); + string tempPath = Path.Combine(targetPath, subDir.Name); + CopyAll(subDir.FullName, tempPath); } } catch (Exception) @@ -65,7 +84,6 @@ namespace Flow.Launcher.Plugin.SharedCommands RemoveFolderIfExists(targetPath); #endif } - } /// @@ -82,10 +100,12 @@ namespace Flow.Launcher.Plugin.SharedCommands var fromDir = new DirectoryInfo(fromPath); var toDir = new DirectoryInfo(toPath); - if (fromDir.GetFiles("*", SearchOption.AllDirectories).Length != toDir.GetFiles("*", SearchOption.AllDirectories).Length) + if (fromDir.GetFiles("*", SearchOption.AllDirectories).Length != + toDir.GetFiles("*", SearchOption.AllDirectories).Length) return false; - if (fromDir.GetDirectories("*", SearchOption.AllDirectories).Length != toDir.GetDirectories("*", SearchOption.AllDirectories).Length) + if (fromDir.GetDirectories("*", SearchOption.AllDirectories).Length != + toDir.GetDirectories("*", SearchOption.AllDirectories).Length) return false; return true; @@ -99,7 +119,6 @@ namespace Flow.Launcher.Plugin.SharedCommands return false; #endif } - } /// @@ -151,9 +170,7 @@ namespace Flow.Launcher.Plugin.SharedCommands { var psi = new ProcessStartInfo { - FileName = FileExplorerProgramName, - UseShellExecute = true, - Arguments = '"' + fileOrFolderPath + '"' + FileName = FileExplorerProgramName, UseShellExecute = true, Arguments = '"' + fileOrFolderPath + '"' }; try { @@ -279,7 +296,7 @@ namespace Flow.Launcher.Plugin.SharedCommands && !rel.StartsWith(@"..\") && !Path.IsPathRooted(rel); } - + /// /// Returns path ended with "\" /// diff --git a/Flow.Launcher.Test/FilesFoldersTest.cs b/Flow.Launcher.Test/FilesFoldersTest.cs index 3dead9918..2621fc2da 100644 --- a/Flow.Launcher.Test/FilesFoldersTest.cs +++ b/Flow.Launcher.Test/FilesFoldersTest.cs @@ -1,5 +1,6 @@ using Flow.Launcher.Plugin.SharedCommands; using NUnit.Framework; +using NUnit.Framework.Legacy; namespace Flow.Launcher.Test { @@ -35,7 +36,7 @@ namespace Flow.Launcher.Test [TestCase(@"c:\barr", @"c:\foo\..\bar\baz", false)] public void GivenTwoPaths_WhenCheckPathContains_ThenShouldBeExpectedResult(string parentPath, string path, bool expectedResult) { - Assert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path)); + ClassicAssert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path)); } // Equality @@ -47,7 +48,7 @@ namespace Flow.Launcher.Test [TestCase(@"c:\foo", @"c:\foo\", true)] public void GivenTwoPathsAreTheSame_WhenCheckPathContains_ThenShouldBeExpectedResult(string parentPath, string path, bool expectedResult) { - Assert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path, allowEqual: expectedResult)); + ClassicAssert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path, allowEqual: expectedResult)); } } } diff --git a/Flow.Launcher.Test/Flow.Launcher.Test.csproj b/Flow.Launcher.Test/Flow.Launcher.Test.csproj index d18841e69..0c44eaf81 100644 --- a/Flow.Launcher.Test/Flow.Launcher.Test.csproj +++ b/Flow.Launcher.Test/Flow.Launcher.Test.csproj @@ -49,12 +49,13 @@ - + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + \ No newline at end of file diff --git a/Flow.Launcher.Test/FuzzyMatcherTest.cs b/Flow.Launcher.Test/FuzzyMatcherTest.cs index d7f143218..c22e21a81 100644 --- a/Flow.Launcher.Test/FuzzyMatcherTest.cs +++ b/Flow.Launcher.Test/FuzzyMatcherTest.cs @@ -6,6 +6,7 @@ using NUnit.Framework; using Flow.Launcher.Infrastructure; using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedModels; +using NUnit.Framework.Legacy; namespace Flow.Launcher.Test { @@ -71,10 +72,10 @@ namespace Flow.Launcher.Test results = results.Where(x => x.Score > 0).OrderByDescending(x => x.Score).ToList(); - Assert.IsTrue(results.Count == 3); - Assert.IsTrue(results[0].Title == "Inste"); - Assert.IsTrue(results[1].Title == "Install Package"); - Assert.IsTrue(results[2].Title == "file open in browser-test"); + ClassicAssert.IsTrue(results.Count == 3); + ClassicAssert.IsTrue(results[0].Title == "Inste"); + ClassicAssert.IsTrue(results[1].Title == "Install Package"); + ClassicAssert.IsTrue(results[2].Title == "file open in browser-test"); } [TestCase("Chrome")] @@ -84,7 +85,7 @@ namespace Flow.Launcher.Test var matcher = new StringMatcher(); var scoreResult = matcher.FuzzyMatch(searchString, compareString).RawScore; - Assert.True(scoreResult == 0); + ClassicAssert.True(scoreResult == 0); } [TestCase("chr")] @@ -125,7 +126,7 @@ namespace Flow.Launcher.Test Debug.WriteLine("###############################################"); Debug.WriteLine(""); - Assert.IsFalse(filteredResult.Any(x => x.Score < precisionScore)); + ClassicAssert.IsFalse(filteredResult.Any(x => x.Score < precisionScore)); } } @@ -151,7 +152,7 @@ namespace Flow.Launcher.Test var rawScore = matcher.FuzzyMatch(queryString, compareString).RawScore; // Should - Assert.AreEqual(expectedScore, rawScore, + ClassicAssert.AreEqual(expectedScore, rawScore, $"Expected score for compare string '{compareString}': {expectedScore}, Actual: {rawScore}"); } @@ -195,7 +196,7 @@ namespace Flow.Launcher.Test Debug.WriteLine(""); // Should - Assert.AreEqual(expectedPrecisionResult, matchResult.IsSearchPrecisionScoreMet(), + ClassicAssert.AreEqual(expectedPrecisionResult, matchResult.IsSearchPrecisionScoreMet(), $"Query: {queryString}{Environment.NewLine} " + $"Compare: {compareString}{Environment.NewLine}" + $"Raw Score: {matchResult.RawScore}{Environment.NewLine}" + @@ -246,7 +247,7 @@ namespace Flow.Launcher.Test Debug.WriteLine(""); // Should - Assert.AreEqual(expectedPrecisionResult, matchResult.IsSearchPrecisionScoreMet(), + ClassicAssert.AreEqual(expectedPrecisionResult, matchResult.IsSearchPrecisionScoreMet(), $"Query:{queryString}{Environment.NewLine} " + $"Compare:{compareString}{Environment.NewLine}" + $"Raw Score: {matchResult.RawScore}{Environment.NewLine}" + @@ -277,7 +278,7 @@ namespace Flow.Launcher.Test Debug.WriteLine(""); // Should - Assert.True(compareString1Result.Score > compareString2Result.Score, + ClassicAssert.True(compareString1Result.Score > compareString2Result.Score, $"Query: \"{queryString}\"{Environment.NewLine} " + $"CompareString1: \"{compareString1}\", Score: {compareString1Result.Score}{Environment.NewLine}" + $"Should be greater than{Environment.NewLine}" + @@ -310,7 +311,7 @@ namespace Flow.Launcher.Test Debug.WriteLine(""); // Should - Assert.True(compareString1Result.Score > compareString2Result.Score, + ClassicAssert.True(compareString1Result.Score > compareString2Result.Score, $"Query: \"{queryString}\"{Environment.NewLine} " + $"CompareString1: \"{compareString1}\", Score: {compareString1Result.Score}{Environment.NewLine}" + $"Should be greater than{Environment.NewLine}" + @@ -335,8 +336,8 @@ namespace Flow.Launcher.Test var firstScore = new[] {firstNameMatch, firstDescriptionMatch, firstExecutableNameMatch}.Max(); var secondScore = new[] {secondNameMatch, secondDescriptionMatch, secondExecutableNameMatch}.Max(); - // Assert - Assert.IsTrue(firstScore > secondScore, + // ClassicAssert + ClassicAssert.IsTrue(firstScore > secondScore, $"Query: \"{queryString}\"{Environment.NewLine} " + $"Name of first: \"{firstName}\", Final Score: {firstScore}{Environment.NewLine}" + $"Should be greater than{Environment.NewLine}" + @@ -360,7 +361,7 @@ namespace Flow.Launcher.Test { var matcher = new StringMatcher(); var score = matcher.FuzzyMatch(queryString, compareString).Score; - Assert.IsTrue(score == desiredScore, + ClassicAssert.IsTrue(score == desiredScore, $@"Query: ""{queryString}"" CompareString: ""{compareString}"" Score: {score} diff --git a/Flow.Launcher.Test/HttpTest.cs b/Flow.Launcher.Test/HttpTest.cs index e72ad7a67..27c939634 100644 --- a/Flow.Launcher.Test/HttpTest.cs +++ b/Flow.Launcher.Test/HttpTest.cs @@ -2,6 +2,7 @@ using NUnit.Framework; using System; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Infrastructure.Http; +using NUnit.Framework.Legacy; namespace Flow.Launcher.Test { @@ -16,16 +17,16 @@ namespace Flow.Launcher.Test proxy.Enabled = true; proxy.Server = "127.0.0.1"; - Assert.AreEqual(Http.WebProxy.Address, new Uri($"http://{proxy.Server}:{proxy.Port}")); - Assert.IsNull(Http.WebProxy.Credentials); + ClassicAssert.AreEqual(Http.WebProxy.Address, new Uri($"http://{proxy.Server}:{proxy.Port}")); + ClassicAssert.IsNull(Http.WebProxy.Credentials); proxy.UserName = "test"; - Assert.NotNull(Http.WebProxy.Credentials); - Assert.AreEqual(Http.WebProxy.Credentials.GetCredential(Http.WebProxy.Address, "Basic").UserName, proxy.UserName); - Assert.AreEqual(Http.WebProxy.Credentials.GetCredential(Http.WebProxy.Address, "Basic").Password, ""); + ClassicAssert.NotNull(Http.WebProxy.Credentials); + ClassicAssert.AreEqual(Http.WebProxy.Credentials.GetCredential(Http.WebProxy.Address, "Basic").UserName, proxy.UserName); + ClassicAssert.AreEqual(Http.WebProxy.Credentials.GetCredential(Http.WebProxy.Address, "Basic").Password, ""); proxy.Password = "test password"; - Assert.AreEqual(Http.WebProxy.Credentials.GetCredential(Http.WebProxy.Address, "Basic").Password, proxy.Password); + ClassicAssert.AreEqual(Http.WebProxy.Credentials.GetCredential(Http.WebProxy.Address, "Basic").Password, proxy.Password); } } } diff --git a/Flow.Launcher.Test/PluginLoadTest.cs b/Flow.Launcher.Test/PluginLoadTest.cs index d6ba48f19..f41c10c18 100644 --- a/Flow.Launcher.Test/PluginLoadTest.cs +++ b/Flow.Launcher.Test/PluginLoadTest.cs @@ -3,6 +3,7 @@ using Flow.Launcher.Core.Plugin; using Flow.Launcher.Plugin; using System.Collections.Generic; using System.Linq; +using NUnit.Framework.Legacy; namespace Flow.Launcher.Test { @@ -56,15 +57,15 @@ namespace Flow.Launcher.Test (var unique, var duplicates) = PluginConfig.GetUniqueLatestPluginMetadata(duplicateList); // Then - Assert.True(unique.FirstOrDefault().ID == "CEA0TYUC6D3B4085823D60DC76F28855" && unique.FirstOrDefault().Version == "1.0.2"); - Assert.True(unique.Count() == 1); + ClassicAssert.True(unique.FirstOrDefault().ID == "CEA0TYUC6D3B4085823D60DC76F28855" && unique.FirstOrDefault().Version == "1.0.2"); + ClassicAssert.True(unique.Count() == 1); - Assert.False(duplicates.Any(x => x.Version == "1.0.2" && x.ID == "CEA0TYUC6D3B4085823D60DC76F28855")); - Assert.True(duplicates.Count() == 6); + ClassicAssert.False(duplicates.Any(x => x.Version == "1.0.2" && x.ID == "CEA0TYUC6D3B4085823D60DC76F28855")); + ClassicAssert.True(duplicates.Count() == 6); } [Test] - public void GivenDuplicatePluginMetadatasWithNoUniquePluginWhenLoadedThenShouldReturnEmptyList() + public void GivenDuplicatePluginMetaDataWithNoUniquePluginWhenLoadedThenShouldReturnEmptyList() { // Given var duplicateList = new List @@ -85,8 +86,8 @@ namespace Flow.Launcher.Test (var unique, var duplicates) = PluginConfig.GetUniqueLatestPluginMetadata(duplicateList); // Then - Assert.True(unique.Count() == 0); - Assert.True(duplicates.Count() == 2); + ClassicAssert.True(unique.Count() == 0); + ClassicAssert.True(duplicates.Count() == 2); } } } diff --git a/Flow.Launcher.Test/Plugins/ExplorerTest.cs b/Flow.Launcher.Test/Plugins/ExplorerTest.cs index e9d37433f..ead4a25cf 100644 --- a/Flow.Launcher.Test/Plugins/ExplorerTest.cs +++ b/Flow.Launcher.Test/Plugins/ExplorerTest.cs @@ -11,6 +11,7 @@ using System.IO; using System.Runtime.Versioning; using System.Threading; using System.Threading.Tasks; +using NUnit.Framework.Legacy; using static Flow.Launcher.Plugin.Explorer.Search.SearchManager; namespace Flow.Launcher.Test.Plugins @@ -57,7 +58,7 @@ namespace Flow.Launcher.Test.Plugins var result = QueryConstructor.TopLevelDirectoryConstraint(folderPath); // Then - Assert.IsTrue(result == expectedString, + ClassicAssert.IsTrue(result == expectedString, $"Expected QueryWhereRestrictions string: {expectedString}{Environment.NewLine} " + $"Actual: {result}{Environment.NewLine}"); } @@ -74,7 +75,7 @@ namespace Flow.Launcher.Test.Plugins var queryString = queryConstructor.Directory(folderPath); // Then - Assert.IsTrue(queryString.Replace(" ", " ") == expectedString.Replace(" ", " "), + ClassicAssert.IsTrue(queryString.Replace(" ", " ") == expectedString.Replace(" ", " "), $"Expected string: {expectedString}{Environment.NewLine} " + $"Actual string was: {queryString}{Environment.NewLine}"); } @@ -94,7 +95,7 @@ namespace Flow.Launcher.Test.Plugins var queryString = queryConstructor.Directory(folderPath, userSearchString); // Then - Assert.AreEqual(expectedString, queryString); + ClassicAssert.AreEqual(expectedString, queryString); } [SupportedOSPlatform("windows7.0")] @@ -105,7 +106,7 @@ namespace Flow.Launcher.Test.Plugins const string resultString = QueryConstructor.RestrictionsForAllFilesAndFoldersSearch; // Then - Assert.AreEqual(expectedString, resultString); + ClassicAssert.AreEqual(expectedString, resultString); } [SupportedOSPlatform("windows7.0")] @@ -128,7 +129,7 @@ namespace Flow.Launcher.Test.Plugins var resultString = queryConstructor.FilesAndFolders(userSearchString); // Then - Assert.AreEqual(expectedString, resultString); + ClassicAssert.AreEqual(expectedString, resultString); } @@ -144,7 +145,7 @@ namespace Flow.Launcher.Test.Plugins var resultString = QueryConstructor.RestrictionsForFileContentSearch(querySearchString); // Then - Assert.IsTrue(resultString == expectedString, + ClassicAssert.IsTrue(resultString == expectedString, $"Expected QueryWhereRestrictions string: {expectedString}{Environment.NewLine} " + $"Actual string was: {resultString}{Environment.NewLine}"); } @@ -162,7 +163,7 @@ namespace Flow.Launcher.Test.Plugins var resultString = queryConstructor.FileContent(userSearchString); // Then - Assert.IsTrue(resultString == expectedString, + ClassicAssert.IsTrue(resultString == expectedString, $"Expected query string: {expectedString}{Environment.NewLine} " + $"Actual string was: {resultString}{Environment.NewLine}"); } @@ -181,7 +182,7 @@ namespace Flow.Launcher.Test.Plugins var result = searchManager.IsFileContentSearch(query.ActionKeyword); // Then - Assert.IsTrue(result, + ClassicAssert.IsTrue(result, $"Expected True for file content search. {Environment.NewLine} " + $"Actual result was: {result}{Environment.NewLine}"); } @@ -202,7 +203,7 @@ namespace Flow.Launcher.Test.Plugins var result = FilesFolders.IsLocationPathString(querySearchString); //Then - Assert.IsTrue(result == expectedResult, + ClassicAssert.IsTrue(result == expectedResult, $"Expected query search string check result is: {expectedResult} {Environment.NewLine} " + $"Actual check result is {result} {Environment.NewLine}"); @@ -229,7 +230,7 @@ namespace Flow.Launcher.Test.Plugins var previousDirectoryPath = FilesFolders.GetPreviousExistingDirectory(previousLocationExists, path); //Then - Assert.IsTrue(previousDirectoryPath == expectedString, + ClassicAssert.IsTrue(previousDirectoryPath == expectedString, $"Expected path string: {expectedString} {Environment.NewLine} " + $"Actual path string is {previousDirectoryPath} {Environment.NewLine}"); } @@ -242,7 +243,7 @@ namespace Flow.Launcher.Test.Plugins var returnedPath = FilesFolders.ReturnPreviousDirectoryIfIncompleteString(path); //Then - Assert.IsTrue(returnedPath == expectedString, + ClassicAssert.IsTrue(returnedPath == expectedString, $"Expected path string: {expectedString} {Environment.NewLine} " + $"Actual path string is {returnedPath} {Environment.NewLine}"); } @@ -256,7 +257,7 @@ namespace Flow.Launcher.Test.Plugins var resultString = QueryConstructor.RecursiveDirectoryConstraint(path); // Then - Assert.AreEqual(expectedString, resultString); + ClassicAssert.AreEqual(expectedString, resultString); } [SupportedOSPlatform("windows7.0")] @@ -270,7 +271,7 @@ namespace Flow.Launcher.Test.Plugins var resultString = DirectoryInfoSearch.ConstructSearchCriteria(path); // Then - Assert.AreEqual(expectedString, resultString); + ClassicAssert.AreEqual(expectedString, resultString); } [TestCase("c:\\somefolder\\someotherfolder", ResultType.Folder, "irrelevant", false, true, "c:\\somefolder\\someotherfolder\\")] @@ -301,7 +302,7 @@ namespace Flow.Launcher.Test.Plugins var result = ResultManager.GetPathWithActionKeyword(path, type, actionKeyword); // Then - Assert.AreEqual(result, expectedResult); + ClassicAssert.AreEqual(result, expectedResult); } [TestCase("c:\\somefolder\\somefile", ResultType.File, "irrelevant", false, true, "e c:\\somefolder\\somefile")] @@ -330,7 +331,7 @@ namespace Flow.Launcher.Test.Plugins var result = ResultManager.GetPathWithActionKeyword(path, type, actionKeyword); // Then - Assert.AreEqual(result, expectedResult); + ClassicAssert.AreEqual(result, expectedResult); } [TestCase("somefolder", "c:\\somefolder\\", ResultType.Folder, "q", false, false, "q somefolder")] @@ -362,7 +363,7 @@ namespace Flow.Launcher.Test.Plugins var result = ResultManager.GetAutoCompleteText(title, query, path, resultType); // Then - Assert.AreEqual(result, expectedResult); + ClassicAssert.AreEqual(result, expectedResult); } [TestCase("somefile", "c:\\somefolder\\somefile", ResultType.File, "q", false, false, "q somefile")] @@ -394,7 +395,7 @@ namespace Flow.Launcher.Test.Plugins var result = ResultManager.GetAutoCompleteText(title, query, path, resultType); // Then - Assert.AreEqual(result, expectedResult); + ClassicAssert.AreEqual(result, expectedResult); } [TestCase(@"c:\foo", @"c:\foo", true)] @@ -416,7 +417,7 @@ namespace Flow.Launcher.Test.Plugins }; // When, Then - Assert.AreEqual(expectedResult, comparator.Equals(result1, result2)); + ClassicAssert.AreEqual(expectedResult, comparator.Equals(result1, result2)); } [TestCase(@"c:\foo\", @"c:\foo\")] @@ -440,7 +441,7 @@ namespace Flow.Launcher.Test.Plugins var hash2 = comparator.GetHashCode(result2); // When, Then - Assert.IsTrue(hash1 == hash2); + ClassicAssert.IsTrue(hash1 == hash2); } [TestCase(@"%appdata%", true)] @@ -457,7 +458,7 @@ namespace Flow.Launcher.Test.Plugins var result = EnvironmentVariables.HasEnvironmentVar(path); // Then - Assert.AreEqual(result, expectedResult); + ClassicAssert.AreEqual(result, expectedResult); } } } diff --git a/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs b/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs index 3d05e5679..3a4952d75 100644 --- a/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs +++ b/Flow.Launcher.Test/Plugins/JsonRPCPluginTest.cs @@ -29,62 +29,62 @@ namespace Flow.Launcher.Test.Plugins } [TestCase("{\"result\":[],\"DebugMessage\":null}", Description = "Empty Result")] - [TestCase("{\"result\":[{\"JsonRPCAction\":null,\"Title\":\"something\",\"SubTitle\":\"\",\"ActionKeywordAssigned\":null,\"IcoPath\":null}],\"DebugMessage\":null}", Description = "One Result with Pascal Case")] - [TestCase("{\"result\":[{\"jsonRPCAction\":null,\"title\":\"something\",\"subTitle\":\"\",\"actionKeywordAssigned\":null,\"icoPath\":null}],\"debugMessage\":null}", Description = "One Result with camel Case")] - [TestCase("{\"result\":[{\"JsonRPCAction\":null,\"Title\":\"iii\",\"SubTitle\":\"\",\"ActionKeywordAssigned\":null,\"IcoPath\":null},{\"JsonRPCAction\":null,\"Title\":\"iii\",\"SubTitle\":\"\",\"ActionKeywordAssigned\":null,\"IcoPath\":null}],\"DebugMessage\":null}", Description = "Two Result with Pascal Case")] - [TestCase("{\"result\":[{\"jsonrpcAction\":null,\"TItLE\":\"iii\",\"Subtitle\":\"\",\"Actionkeywordassigned\":null,\"icoPath\":null},{\"jsonRPCAction\":null,\"tiTle\":\"iii\",\"subTitle\":\"\",\"ActionKeywordAssigned\":null,\"IcoPath\":null}],\"DebugMessage\":null}", Description = "Two Result with Weird Case")] + [TestCase( + "{\"result\":[{\"JsonRPCAction\":null,\"Title\":\"something\",\"SubTitle\":\"\",\"ActionKeywordAssigned\":null,\"IcoPath\":null}],\"DebugMessage\":null}", + Description = "One Result with Pascal Case")] + [TestCase( + "{\"result\":[{\"jsonRPCAction\":null,\"title\":\"something\",\"subTitle\":\"\",\"actionKeywordAssigned\":null,\"icoPath\":null}],\"debugMessage\":null}", + Description = "One Result with camel Case")] + [TestCase( + "{\"result\":[{\"JsonRPCAction\":null,\"Title\":\"iii\",\"SubTitle\":\"\",\"ActionKeywordAssigned\":null,\"IcoPath\":null},{\"JsonRPCAction\":null,\"Title\":\"iii\",\"SubTitle\":\"\",\"ActionKeywordAssigned\":null,\"IcoPath\":null}],\"DebugMessage\":null}", + Description = "Two Result with Pascal Case")] + [TestCase( + "{\"result\":[{\"jsonrpcAction\":null,\"TItLE\":\"iii\",\"Subtitle\":\"\",\"Actionkeywordassigned\":null,\"icoPath\":null},{\"jsonRPCAction\":null,\"tiTle\":\"iii\",\"subTitle\":\"\",\"ActionKeywordAssigned\":null,\"IcoPath\":null}],\"DebugMessage\":null}", + Description = "Two Result with Weird Case")] public async Task GivenVariousJsonText_WhenVariousNamingCase_ThenExpectNotNullResults_Async(string resultText) { - var results = await QueryAsync(new Query - { - Search = resultText - }, default); + var results = await QueryAsync(new Query { Search = resultText }, default); - Assert.IsNotNull(results); + Assert.That(results, Is.Not.Null); foreach (var result in results) { - Assert.IsNotNull(result); - Assert.IsNotNull(result.AsyncAction); - Assert.IsNotNull(result.Title); + Assert.That(result, Is.Not.Null); + Assert.That(result.AsyncAction, Is.Not.Null); + Assert.That(result.Title, Is.Not.Null); } - } public static List ResponseModelsSource = new() { new JsonRPCQueryResponseModel(0, new List()), - new JsonRPCQueryResponseModel(0, new List - { - new JsonRPCResult - { - Title = "Test1", SubTitle = "Test2" - } - }) + new JsonRPCQueryResponseModel(0, + new List { new JsonRPCResult { Title = "Test1", SubTitle = "Test2" } }) }; [TestCaseSource(typeof(JsonRPCPluginTest), nameof(ResponseModelsSource))] - public async Task GivenModel_WhenSerializeWithDifferentNamingPolicy_ThenExpectSameResult_Async(JsonRPCQueryResponseModel reference) + public async Task GivenModel_WhenSerializeWithDifferentNamingPolicy_ThenExpectSameResult_Async( + JsonRPCQueryResponseModel reference) { - var camelText = JsonSerializer.Serialize(reference, new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); + var camelText = JsonSerializer.Serialize(reference, + new JsonSerializerOptions() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }); var pascalText = JsonSerializer.Serialize(reference); var results1 = await QueryAsync(new Query { Search = camelText }, default); var results2 = await QueryAsync(new Query { Search = pascalText }, default); - Assert.IsNotNull(results1); - Assert.IsNotNull(results2); + Assert.That(results1, Is.Not.Null); + Assert.That(results2, Is.Not.Null); foreach (var ((result1, result2), referenceResult) in results1.Zip(results2).Zip(reference.Result)) { - Assert.AreEqual(result1, result2); - Assert.AreEqual(result1, referenceResult); + Assert.That(result1, Is.EqualTo(result2)); + Assert.That(result1, Is.EqualTo(referenceResult)); - Assert.IsNotNull(result1); - Assert.IsNotNull(result1.AsyncAction); + Assert.That(result1, Is.Not.Null); + Assert.That(result1.AsyncAction, Is.Not.Null); } } - } } diff --git a/Flow.Launcher.Test/Plugins/UrlPluginTest.cs b/Flow.Launcher.Test/Plugins/UrlPluginTest.cs index 7ccac5bd5..5cd75d160 100644 --- a/Flow.Launcher.Test/Plugins/UrlPluginTest.cs +++ b/Flow.Launcher.Test/Plugins/UrlPluginTest.cs @@ -10,23 +10,23 @@ namespace Flow.Launcher.Test public void URLMatchTest() { var plugin = new Main(); - Assert.IsTrue(plugin.IsURL("http://www.google.com")); - Assert.IsTrue(plugin.IsURL("https://www.google.com")); - Assert.IsTrue(plugin.IsURL("http://google.com")); - Assert.IsTrue(plugin.IsURL("www.google.com")); - Assert.IsTrue(plugin.IsURL("google.com")); - Assert.IsTrue(plugin.IsURL("http://localhost")); - Assert.IsTrue(plugin.IsURL("https://localhost")); - Assert.IsTrue(plugin.IsURL("http://localhost:80")); - Assert.IsTrue(plugin.IsURL("https://localhost:80")); - Assert.IsTrue(plugin.IsURL("http://110.10.10.10")); - Assert.IsTrue(plugin.IsURL("110.10.10.10")); - Assert.IsTrue(plugin.IsURL("ftp://110.10.10.10")); + Assert.That(plugin.IsURL("http://www.google.com"), Is.True); + Assert.That(plugin.IsURL("https://www.google.com"), Is.True); + Assert.That(plugin.IsURL("http://google.com"), Is.True); + Assert.That(plugin.IsURL("www.google.com"), Is.True); + Assert.That(plugin.IsURL("google.com"), Is.True); + Assert.That(plugin.IsURL("http://localhost"), Is.True); + Assert.That(plugin.IsURL("https://localhost"), Is.True); + Assert.That(plugin.IsURL("http://localhost:80"), Is.True); + Assert.That(plugin.IsURL("https://localhost:80"), Is.True); + Assert.That(plugin.IsURL("http://110.10.10.10"), Is.True); + Assert.That(plugin.IsURL("110.10.10.10"), Is.True); + Assert.That(plugin.IsURL("ftp://110.10.10.10"), Is.True); - Assert.IsFalse(plugin.IsURL("wwww")); - Assert.IsFalse(plugin.IsURL("wwww.c")); - Assert.IsFalse(plugin.IsURL("wwww.c")); + Assert.That(plugin.IsURL("wwww"), Is.False); + Assert.That(plugin.IsURL("wwww.c"), Is.False); + Assert.That(plugin.IsURL("wwww.c"), Is.False); } } } diff --git a/Flow.Launcher.Test/QueryBuilderTest.cs b/Flow.Launcher.Test/QueryBuilderTest.cs index aa0c8da12..d4808a4c5 100644 --- a/Flow.Launcher.Test/QueryBuilderTest.cs +++ b/Flow.Launcher.Test/QueryBuilderTest.cs @@ -2,6 +2,7 @@ using NUnit.Framework; using Flow.Launcher.Core.Plugin; using Flow.Launcher.Plugin; +using NUnit.Framework.Legacy; namespace Flow.Launcher.Test { @@ -17,17 +18,17 @@ namespace Flow.Launcher.Test Query q = QueryBuilder.Build("> ping google.com -n 20 -6", nonGlobalPlugins); - Assert.AreEqual("> ping google.com -n 20 -6", q.RawQuery); - Assert.AreEqual("ping google.com -n 20 -6", q.Search, "Search should not start with the ActionKeyword."); - Assert.AreEqual(">", q.ActionKeyword); + ClassicAssert.AreEqual("> ping google.com -n 20 -6", q.RawQuery); + ClassicAssert.AreEqual("ping google.com -n 20 -6", q.Search, "Search should not start with the ActionKeyword."); + ClassicAssert.AreEqual(">", q.ActionKeyword); - Assert.AreEqual(5, q.SearchTerms.Length, "The length of SearchTerms should match."); + ClassicAssert.AreEqual(5, q.SearchTerms.Length, "The length of SearchTerms should match."); - Assert.AreEqual("ping", q.FirstSearch); - Assert.AreEqual("google.com", q.SecondSearch); - Assert.AreEqual("-n", q.ThirdSearch); + ClassicAssert.AreEqual("ping", q.FirstSearch); + ClassicAssert.AreEqual("google.com", q.SecondSearch); + ClassicAssert.AreEqual("-n", q.ThirdSearch); - Assert.AreEqual("google.com -n 20 -6", q.SecondToEndSearch, "SecondToEndSearch should be trimmed of multiple whitespace characters"); + ClassicAssert.AreEqual("google.com -n 20 -6", q.SecondToEndSearch, "SecondToEndSearch should be trimmed of multiple whitespace characters"); } [Test] @@ -40,11 +41,11 @@ namespace Flow.Launcher.Test Query q = QueryBuilder.Build("> ping google.com -n 20 -6", nonGlobalPlugins); - Assert.AreEqual("> ping google.com -n 20 -6", q.Search); - Assert.AreEqual(q.Search, q.RawQuery, "RawQuery should be equal to Search."); - Assert.AreEqual(6, q.SearchTerms.Length, "The length of SearchTerms should match."); - Assert.AreNotEqual(">", q.ActionKeyword, "ActionKeyword should not match that of a disabled plugin."); - Assert.AreEqual("ping google.com -n 20 -6", q.SecondToEndSearch, "SecondToEndSearch should be trimmed of multiple whitespace characters"); + ClassicAssert.AreEqual("> ping google.com -n 20 -6", q.Search); + ClassicAssert.AreEqual(q.Search, q.RawQuery, "RawQuery should be equal to Search."); + ClassicAssert.AreEqual(6, q.SearchTerms.Length, "The length of SearchTerms should match."); + ClassicAssert.AreNotEqual(">", q.ActionKeyword, "ActionKeyword should not match that of a disabled plugin."); + ClassicAssert.AreEqual("ping google.com -n 20 -6", q.SecondToEndSearch, "SecondToEndSearch should be trimmed of multiple whitespace characters"); } [Test] @@ -52,13 +53,13 @@ namespace Flow.Launcher.Test { Query q = QueryBuilder.Build("file.txt file2 file3", new Dictionary()); - Assert.AreEqual("file.txt file2 file3", q.Search); - Assert.AreEqual("", q.ActionKeyword); + ClassicAssert.AreEqual("file.txt file2 file3", q.Search); + ClassicAssert.AreEqual("", q.ActionKeyword); - Assert.AreEqual("file.txt", q.FirstSearch); - Assert.AreEqual("file2", q.SecondSearch); - Assert.AreEqual("file3", q.ThirdSearch); - Assert.AreEqual("file2 file3", q.SecondToEndSearch); + ClassicAssert.AreEqual("file.txt", q.FirstSearch); + ClassicAssert.AreEqual("file2", q.SecondSearch); + ClassicAssert.AreEqual("file3", q.ThirdSearch); + ClassicAssert.AreEqual("file2 file3", q.SecondToEndSearch); } } } diff --git a/Flow.Launcher/Converters/BoolToIMEConversionModeConverter.cs b/Flow.Launcher/Converters/BoolToIMEConversionModeConverter.cs index 0bff23fe1..ffb7d65b8 100644 --- a/Flow.Launcher/Converters/BoolToIMEConversionModeConverter.cs +++ b/Flow.Launcher/Converters/BoolToIMEConversionModeConverter.cs @@ -9,18 +9,11 @@ namespace Flow.Launcher.Converters { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - if (value is bool v) + return value switch { - if (v) - { - return ImeConversionModeValues.Alphanumeric; - } - else - { - return ImeConversionModeValues.DoNotCare; - } - } - return ImeConversionModeValues.DoNotCare; + true => ImeConversionModeValues.Alphanumeric, + _ => ImeConversionModeValues.DoNotCare + }; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) @@ -33,18 +26,11 @@ namespace Flow.Launcher.Converters { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - if (value is bool v) + return value switch { - if (v) - { - return InputMethodState.Off; - } - else - { - return InputMethodState.DoNotCare; - } - } - return InputMethodState.DoNotCare; + true => InputMethodState.Off, + _ => InputMethodState.DoNotCare + }; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/Flow.Launcher/Converters/BoolToVisibilityConverter.cs b/Flow.Launcher/Converters/BoolToVisibilityConverter.cs index 627937c7f..ac3b2cfd0 100644 --- a/Flow.Launcher/Converters/BoolToVisibilityConverter.cs +++ b/Flow.Launcher/Converters/BoolToVisibilityConverter.cs @@ -8,28 +8,14 @@ namespace Flow.Launcher.Converters { public object Convert(object value, System.Type targetType, object parameter, CultureInfo culture) { - if (parameter != null) + return (value, parameter) switch { - if (value is true) - { - return Visibility.Collapsed; - } + (true, not null) => Visibility.Collapsed, + (_, not null) => Visibility.Visible, - else - { - return Visibility.Visible; - } - } - else { - if (value is true) - { - return Visibility.Visible; - } - - else { - return Visibility.Collapsed; - } - } + (true, null) => Visibility.Visible, + (_, null) => Visibility.Collapsed + }; } public object ConvertBack(object value, System.Type targetType, object parameter, CultureInfo culture) => throw new System.InvalidOperationException(); @@ -40,30 +26,14 @@ namespace Flow.Launcher.Converters { public object Convert(object value, System.Type targetType, object parameter, CultureInfo culture) { - if (parameter != null) + return (value, parameter) switch { - if (value is true) - { - return 0; - } + (true, not null) => 0, + (_, not null) => 5, - else - { - return 5; - } - } - else - { - if (value is true) - { - return 5; - } - - else - { - return 0; - } - } + (true, null) => 5, + (_, null) => 0 + }; } public object ConvertBack(object value, System.Type targetType, object parameter, CultureInfo culture) => throw new System.InvalidOperationException(); diff --git a/Flow.Launcher/Converters/BorderClipConverter.cs b/Flow.Launcher/Converters/BorderClipConverter.cs index c0bce2cd9..a8d9b34c6 100644 --- a/Flow.Launcher/Converters/BorderClipConverter.cs +++ b/Flow.Launcher/Converters/BorderClipConverter.cs @@ -13,34 +13,31 @@ namespace Flow.Launcher.Converters { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { - if (values.Length == 3 && values[0] is double && values[1] is double && values[2] is CornerRadius) + if (values is not [double width, double height, CornerRadius radius]) { - var width = (double)values[0]; - var height = (double)values[1]; - Path myPath = new Path(); - if (width < Double.Epsilon || height < Double.Epsilon) - { - return Geometry.Empty; - } - var radius = (CornerRadius)values[2]; - var radiusHeight = radius.TopLeft; - - // Drawing Round box for bottom round, and rect for top area of listbox. - var corner = new RectangleGeometry(new Rect(0, 0, width, height), radius.TopLeft, radius.TopLeft); - var box = new RectangleGeometry(new Rect(0, 0, width, radiusHeight), 0, 0); - - GeometryGroup myGeometryGroup = new GeometryGroup(); - myGeometryGroup.Children.Add(corner); - myGeometryGroup.Children.Add(box); - - CombinedGeometry c1 = new CombinedGeometry(GeometryCombineMode.Union, corner, box); - myPath.Data = c1; - - myPath.Data.Freeze(); - return myPath.Data; + return DependencyProperty.UnsetValue; } - return DependencyProperty.UnsetValue; + Path myPath = new Path(); + if (width < Double.Epsilon || height < Double.Epsilon) + { + return Geometry.Empty; + } + var radiusHeight = radius.TopLeft; + + // Drawing Round box for bottom round, and rect for top area of listbox. + var corner = new RectangleGeometry(new Rect(0, 0, width, height), radius.TopLeft, radius.TopLeft); + var box = new RectangleGeometry(new Rect(0, 0, width, radiusHeight), 0, 0); + + GeometryGroup myGeometryGroup = new GeometryGroup(); + myGeometryGroup.Children.Add(corner); + myGeometryGroup.Children.Add(box); + + CombinedGeometry c1 = new CombinedGeometry(GeometryCombineMode.Union, corner, box); + myPath.Data = c1; + + myPath.Data.Freeze(); + return myPath.Data; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) diff --git a/Flow.Launcher/Converters/HighlightTextConverter.cs b/Flow.Launcher/Converters/HighlightTextConverter.cs index cb62c0d3d..3f02443e2 100644 --- a/Flow.Launcher/Converters/HighlightTextConverter.cs +++ b/Flow.Launcher/Converters/HighlightTextConverter.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Globalization; -using System.Linq; using System.Windows; using System.Windows.Data; using System.Windows.Documents; @@ -12,30 +11,27 @@ namespace Flow.Launcher.Converters { public object Convert(object[] value, Type targetType, object parameter, CultureInfo cultureInfo) { - var text = value[0] as string; - var highlightData = value[1] as List; - - var textBlock = new Span(); - - if (highlightData == null || !highlightData.Any()) - { + if (value.Length < 2) + return new Run(string.Empty); + + if (value[0] is not string text) + return new Run(string.Empty); + + if (value[1] is not List { Count: > 0 } highlightData) // No highlight data, just return the text return new Run(text); - } + + var highlightStyle = (Style)Application.Current.FindResource("HighlightStyle"); + var textBlock = new Span(); for (var i = 0; i < text.Length; i++) { var currentCharacter = text.Substring(i, 1); - if (this.ShouldHighlight(highlightData, i)) + var run = new Run(currentCharacter) { - - textBlock.Inlines.Add(new Run(currentCharacter) { Style = (Style)Application.Current.FindResource("HighlightStyle") }); - - } - else - { - textBlock.Inlines.Add(new Run(currentCharacter)); - } + Style = ShouldHighlight(highlightData, i) ? highlightStyle : null + }; + textBlock.Inlines.Add(run); } return textBlock; } diff --git a/Flow.Launcher/Converters/IconRadiusConverter.cs b/Flow.Launcher/Converters/IconRadiusConverter.cs index c73bef8b2..d0bdc9d1c 100644 --- a/Flow.Launcher/Converters/IconRadiusConverter.cs +++ b/Flow.Launcher/Converters/IconRadiusConverter.cs @@ -8,15 +8,10 @@ namespace Flow.Launcher.Converters { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { - if (values.Length != 2) - throw new ArgumentException("IconRadiusConverter must have 2 parameters"); + if (values is not [double size, bool isIconCircular]) + throw new ArgumentException("IconRadiusConverter must have 2 parameters: [double, bool]"); - return values[1] switch - { - true => (double)values[0] / 2, - false => (double)values[0], - _ => throw new ArgumentException("The second argument should be boolean", nameof(values)) - }; + return isIconCircular ? size / 2 : size; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { diff --git a/Flow.Launcher/Converters/OpenResultHotkeyVisibilityConverter.cs b/Flow.Launcher/Converters/OpenResultHotkeyVisibilityConverter.cs index a44b07cab..7b7bd0906 100644 --- a/Flow.Launcher/Converters/OpenResultHotkeyVisibilityConverter.cs +++ b/Flow.Launcher/Converters/OpenResultHotkeyVisibilityConverter.cs @@ -22,6 +22,6 @@ namespace Flow.Launcher.Converters return number <= MaxVisibleHotkeys ? Visibility.Visible : Visibility.Collapsed; } - public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new System.InvalidOperationException(); + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new InvalidOperationException(); } } diff --git a/Flow.Launcher/Converters/OrdinalConverter.cs b/Flow.Launcher/Converters/OrdinalConverter.cs index 02b9bdbde..438d4effa 100644 --- a/Flow.Launcher/Converters/OrdinalConverter.cs +++ b/Flow.Launcher/Converters/OrdinalConverter.cs @@ -1,3 +1,4 @@ +using System; using System.Globalization; using System.Windows.Controls; using System.Windows.Data; @@ -6,18 +7,19 @@ namespace Flow.Launcher.Converters { public class OrdinalConverter : IValueConverter { - public object Convert(object value, System.Type targetType, object parameter, CultureInfo culture) + public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - if (value is ListBoxItem listBoxItem - && ItemsControl.ItemsControlFromItemContainer(listBoxItem) is ListBox listBox) + if (value is not ListBoxItem listBoxItem + || ItemsControl.ItemsControlFromItemContainer(listBoxItem) is not ListBox listBox) { - var res = listBox.ItemContainerGenerator.IndexFromContainer(listBoxItem) + 1; - return res == 10 ? 0 : res; // 10th item => HOTKEY+0 + return 0; } - return 0; + var res = listBox.ItemContainerGenerator.IndexFromContainer(listBoxItem) + 1; + return res == 10 ? 0 : res; // 10th item => HOTKEY+0 + } - public object ConvertBack(object value, System.Type targetType, object parameter, CultureInfo culture) => throw new System.InvalidOperationException(); + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new InvalidOperationException(); } } diff --git a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs index 1e39473e0..4a8c9e92b 100644 --- a/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs +++ b/Flow.Launcher/Converters/QuerySuggestionBoxConverter.cs @@ -12,32 +12,23 @@ namespace Flow.Launcher.Converters { public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { - if (values.Length != 3) - { + // values[0] is TextBox: The textbox displaying the autocomplete suggestion + // values[1] is ResultViewModel: Currently selected item in the list + // values[2] is string: Query text + if ( + values.Length != 3 || + values[0] is not TextBox queryTextBox || + values[1] is null || + values[2] is not string queryText || + string.IsNullOrEmpty(queryText) + ) return string.Empty; - } - var QueryTextBox = values[0] as TextBox; - - var queryText = (string)values[2]; - - if (string.IsNullOrEmpty(queryText)) - return string.Empty; - - // second prop is the current selected item result - var val = values[1]; - if (val == null) - { - return string.Empty; - } - if (!(val is ResultViewModel)) - { - return System.Windows.Data.Binding.DoNothing; - } + + if (values[1] is not ResultViewModel selectedItem) + return Binding.DoNothing; try { - var selectedItem = (ResultViewModel)val; - var selectedResult = selectedItem.Result; var selectedResultActionKeyword = string.IsNullOrEmpty(selectedResult.ActionKeywordAssigned) ? "" : selectedResult.ActionKeywordAssigned + " "; var selectedResultPossibleSuggestion = selectedResultActionKeyword + selectedResult.Title; @@ -50,17 +41,15 @@ namespace Flow.Launcher.Converters // When user typed lower case and result title is uppercase, we still want to display suggestion selectedItem.QuerySuggestionText = queryText + selectedResultPossibleSuggestion.Substring(queryText.Length); - // Check if Text will be larger then our QueryTextBox - System.Windows.Media.Typeface typeface = new Typeface(QueryTextBox.FontFamily, QueryTextBox.FontStyle, QueryTextBox.FontWeight, QueryTextBox.FontStretch); + // Check if Text will be larger than our QueryTextBox + Typeface typeface = new Typeface(queryTextBox.FontFamily, queryTextBox.FontStyle, queryTextBox.FontWeight, queryTextBox.FontStretch); // TODO: Obsolete warning? - System.Windows.Media.FormattedText ft = new FormattedText(QueryTextBox.Text, System.Globalization.CultureInfo.DefaultThreadCurrentCulture, System.Windows.FlowDirection.LeftToRight, typeface, QueryTextBox.FontSize, Brushes.Black); + var ft = new FormattedText(queryTextBox.Text, CultureInfo.DefaultThreadCurrentCulture, System.Windows.FlowDirection.LeftToRight, typeface, queryTextBox.FontSize, Brushes.Black); - var offset = QueryTextBox.Padding.Right; + var offset = queryTextBox.Padding.Right; - if ((ft.Width + offset) > QueryTextBox.ActualWidth || QueryTextBox.HorizontalOffset != 0) - { + if (ft.Width + offset > queryTextBox.ActualWidth || queryTextBox.HorizontalOffset != 0) return string.Empty; - }; return selectedItem.QuerySuggestionText; } diff --git a/Flow.Launcher/Converters/StringToKeyBindingConverter.cs b/Flow.Launcher/Converters/StringToKeyBindingConverter.cs index 3675f06fc..22526bd82 100644 --- a/Flow.Launcher/Converters/StringToKeyBindingConverter.cs +++ b/Flow.Launcher/Converters/StringToKeyBindingConverter.cs @@ -9,19 +9,17 @@ namespace Flow.Launcher.Converters { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - var mode = parameter as string; - var hotkeyStr = value as string; + if (parameter is not string mode || value is not string hotkeyStr) + return null; + var converter = new KeyGestureConverter(); var key = (KeyGesture)converter.ConvertFromString(hotkeyStr); - if (mode == "key") + return mode switch { - return key.Key; - } - else if (mode == "modifiers") - { - return key.Modifiers; - } - return null; + "key" => key?.Key, + "modifiers" => key?.Modifiers, + _ => null + }; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) diff --git a/Flow.Launcher/Converters/TextConverter.cs b/Flow.Launcher/Converters/TextConverter.cs index 90d445776..c0b34d053 100644 --- a/Flow.Launcher/Converters/TextConverter.cs +++ b/Flow.Launcher/Converters/TextConverter.cs @@ -10,23 +10,22 @@ namespace Flow.Launcher.Converters { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { - var ID = value.ToString(); - switch(ID) + var id = value?.ToString(); + var translationKey = id switch { - case PluginStoreItemViewModel.NewRelease: - return InternationalizationManager.Instance.GetTranslation("pluginStore_NewRelease"); - case PluginStoreItemViewModel.RecentlyUpdated: - return InternationalizationManager.Instance.GetTranslation("pluginStore_RecentlyUpdated"); - case PluginStoreItemViewModel.None: - return InternationalizationManager.Instance.GetTranslation("pluginStore_None"); - case PluginStoreItemViewModel.Installed: - return InternationalizationManager.Instance.GetTranslation("pluginStore_Installed"); - default: - return ID; - } + PluginStoreItemViewModel.NewRelease => "pluginStore_NewRelease", + PluginStoreItemViewModel.RecentlyUpdated => "pluginStore_RecentlyUpdated", + PluginStoreItemViewModel.None => "pluginStore_None", + PluginStoreItemViewModel.Installed => "pluginStore_Installed", + _ => null + }; + if (translationKey is null) + return id; + + return InternationalizationManager.Instance.GetTranslation(translationKey); } - public object ConvertBack(object value, System.Type targetType, object parameter, CultureInfo culture) => throw new System.InvalidOperationException(); + public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => throw new InvalidOperationException(); } } diff --git a/Flow.Launcher/Flow.Launcher.csproj b/Flow.Launcher/Flow.Launcher.csproj index 8d7d7fb1b..c4586fb56 100644 --- a/Flow.Launcher/Flow.Launcher.csproj +++ b/Flow.Launcher/Flow.Launcher.csproj @@ -117,6 +117,7 @@ + diff --git a/Flow.Launcher/Helper/SingleInstance.cs b/Flow.Launcher/Helper/SingleInstance.cs index cb457857c..d46051126 100644 --- a/Flow.Launcher/Helper/SingleInstance.cs +++ b/Flow.Launcher/Helper/SingleInstance.cs @@ -1,18 +1,20 @@ using System; using System.Collections.Generic; using System.ComponentModel; +using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; using System.IO.Pipes; +using System.Reflection; using System.Security; using System.Text; using System.Threading; using System.Threading.Tasks; -using Avalonia; -using Avalonia.Threading; +using System.Windows; +using Velopack; // http://blogs.microsoft.co.il/arik/2010/05/28/wpf-single-instance-application/ -// modified to allow single instace restart +// modified to allow single instance restart namespace Flow.Launcher.Helper { internal enum WM @@ -200,7 +202,7 @@ namespace Flow.Launcher.Helper /// For most apps, this will not be much of an issue. /// public static class SingleInstance - where TApplication : Avalonia.Application, ISingleInstanceApp + where TApplication : Application, ISingleInstanceApp { #region Private Fields @@ -218,16 +220,40 @@ namespace Flow.Launcher.Helper /// /// Application mutex. /// - internal static Mutex singleInstanceMutex; - - #endregion - - #region Public Properties + private static Mutex singleInstanceMutex; #endregion #region Public Methods + public static void Restart() + { + singleInstanceMutex?.ReleaseMutex(); + StopRemoteServiceTokenSource?.Cancel(); + + while (RemoteServiceRunning) + { + // busy wait + Thread.Sleep(10); + } + + var info = new ProcessStartInfo + { + Arguments = "/C choice /C Y /N /D Y /T 1 & START \"\" \"" + Environment.ProcessPath + "\"", + WindowStyle = ProcessWindowStyle.Hidden, + CreateNoWindow = true, + FileName = "cmd.exe" + }; + Process.Start(info); + Application.Current.Shutdown(); + } + + // this is always going to run only once + private static CancellationTokenSource StopRemoteServiceTokenSource { get; set; } + + private static volatile bool RemoteServiceRunning = true; + + /// /// Checks if the instance of the application attempting to start is the first instance. /// If not, activates the first instance. @@ -235,22 +261,23 @@ namespace Flow.Launcher.Helper /// True if this is the first instance of the application. public static bool InitializeAsFirstInstance(string uniqueName) { + StopRemoteServiceTokenSource = new CancellationTokenSource(); + // Build unique application Id and the IPC channel name. string applicationIdentifier = uniqueName + Environment.UserName; string channelName = String.Concat(applicationIdentifier, Delimiter, ChannelNameSuffix); // Create mutex based on unique application Id to check if this is the first instance of the application. - bool firstInstance; - singleInstanceMutex = new Mutex(true, applicationIdentifier, out firstInstance); + singleInstanceMutex = new Mutex(true, applicationIdentifier, out var firstInstance); if (firstInstance) { - _ = CreateRemoteService(channelName); + _ = Task.Run(() => StartRemoteServiceAsync(channelName, StopRemoteServiceTokenSource.Token)); return true; } else { - _ = SignalFirstInstance(channelName); + _ = Task.Run(() => SignalFirstInstanceAsync(channelName)); return false; } } @@ -261,6 +288,7 @@ namespace Flow.Launcher.Helper public static void Cleanup() { singleInstanceMutex?.ReleaseMutex(); + StopRemoteServiceTokenSource?.Cancel(); } #endregion @@ -277,15 +305,15 @@ namespace Flow.Launcher.Helper try { - // The application was not clickonce deployed, get args from standard API's + // The application was not ClickOnce deployed, get args from standard API's args = Environment.GetCommandLineArgs(); } catch (NotSupportedException) { - // The application was clickonce deployed - // Clickonce deployed apps cannot recieve traditional commandline arguments - // As a workaround commandline arguments can be written to a shared location before - // the app is launched and the app can obtain its commandline arguments from the + // The application was ClickOnce deployed + // ClickOnce deployed apps cannot receive traditional command line arguments + // As a workaround command line arguments can be written to a shared location before + // the app is launched and the app can obtain its command line arguments from the // shared location string appFolderPath = Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), uniqueApplicationName); @@ -295,10 +323,8 @@ namespace Flow.Launcher.Helper { try { - using (TextReader reader = new StreamReader(cmdLinePath, Encoding.Unicode)) - { - args = NativeMethods.CommandLineToArgvW(reader.ReadToEnd()); - } + using TextReader reader = new StreamReader(cmdLinePath, Encoding.Unicode); + args = NativeMethods.CommandLineToArgvW(reader.ReadToEnd()); File.Delete(cmdLinePath); } @@ -308,10 +334,7 @@ namespace Flow.Launcher.Helper } } - if (args == null) - { - args = new string[] { }; - } + args ??= Array.Empty(); return new List(args); } @@ -321,42 +344,48 @@ namespace Flow.Launcher.Helper /// Once receives signal from client, will activate first instance. /// /// Application's IPC channel name. - private static async Task CreateRemoteService(string channelName) + /// Cancellation token + private static async Task StartRemoteServiceAsync(string channelName, CancellationToken token = default) { - using (NamedPipeServerStream pipeServer = new NamedPipeServerStream(channelName, PipeDirection.In)) + try { + await using NamedPipeServerStream pipeServer = new NamedPipeServerStream(channelName, PipeDirection.In); while (true) { - // Wait for connection to the pipe - await pipeServer.WaitForConnectionAsync(); - if (Application.Current != null) + if (token.IsCancellationRequested) { - - // Do an asynchronous call to ActivateFirstInstance function - Dispatcher.UIThread.Invoke(ActivateFirstInstance); + break; } - // Disconect client + // Wait for connection to the pipe + await pipeServer.WaitForConnectionAsync(token); + if (Application.Current != null) + { + // Do an asynchronous call to ActivateFirstInstance function + Application.Current.Dispatcher.Invoke(ActivateFirstInstance); + } + + // Disconnect client pipeServer.Disconnect(); } } + finally + { + RemoteServiceRunning = false; + } } /// /// Creates a client pipe and sends a signal to server to launch first instance /// /// Application's IPC channel name. - /// - /// Command line arguments for the second instance, passed to the first instance to take appropriate action. - /// - private static async Task SignalFirstInstance(string channelName) + private static async Task SignalFirstInstanceAsync(string channelName) { // Create a client pipe connected to server - using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", channelName, PipeDirection.Out)) - { - // Connect to the available pipe - await pipeClient.ConnectAsync(0); - } + await using NamedPipeClientStream pipeClient = + new NamedPipeClientStream(".", channelName, PipeDirection.Out); + // Connect to the available pipe + await pipeClient.ConnectAsync(0); } /// @@ -382,7 +411,7 @@ namespace Flow.Launcher.Helper return; } - ((TApplication)Application.Current)!.OnSecondAppStarted(); + ((TApplication)Application.Current).OnSecondAppStarted(); } #endregion diff --git a/Flow.Launcher/Languages/de.xaml b/Flow.Launcher/Languages/de.xaml index 217404da0..a360140d6 100644 --- a/Flow.Launcher/Languages/de.xaml +++ b/Flow.Launcher/Languages/de.xaml @@ -113,7 +113,7 @@ Erweiterungen laden New Release Recently Updated - Plugins + Erweiterungen Installed Aktualisieren Installieren @@ -173,13 +173,13 @@ Preview Hotkey Enter shortcut to show/hide preview in search window. Öffnen Sie die Ergebnismodifikatoren - Select a modifier key to open selected result via keyboard. + Wählen Sie eine Modifikatortaste, um das ausgewählte Ergebnis über die Tastatur zu öffnen. Hotkey anzeigen - Show result selection hotkey with results. + Hotkey für die Ergebnisauswahl mit Ergebnissen anzeigen. Benutzerdefinierte Abfrage Tastenkombination Custom Query Shortcut Built-in Shortcut - Query + Abfrage Shortcut Expansion Beschreibung @@ -191,12 +191,12 @@ Are you sure you want to delete shortcut: {0} with expansion {1}? Get text from clipboard. Get path from active explorer. - Query window shadow effect - Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. - Window Width Size + Schatteneffekt im Abfragefenster + Der Schatteneffekt beansprucht die GPU stark. Nicht empfohlen, wenn die Leistung deines Computers begrenzt ist. + Fenstergröße Breite You can also quickly adjust this by using Ctrl+[ and Ctrl+]. - Use Segoe Fluent Icons - Use Segoe Fluent Icons for query results where supported + Segoe Fluent Icons verwenden + Segoe Fluent Icons für Abfrageergebnisse verwenden, sofern unterstützt Press Key @@ -226,15 +226,15 @@ Nach Aktuallisierungen Suchen Become A Sponsor Eine neue Version ({0}) ist vorhanden. Bitte starten Sie Flow Launcher neu. - Check updates failed, please check your connection and proxy settings to api.github.com. + Überprüfung der Updates fehlgeschlagen. Bitte überprüfen Sie Ihre Verbindungs- und Proxy-Einstellungen zu api.github.com. - Download updates failed, please check your connection and proxy settings to github-cloud.s3.amazonaws.com, - or go to https://github.com/Flow-Launcher/Flow.Launcher/releases to download updates manually. + Das Herunterladen von Updates ist fehlgeschlagen. Bitte überprüfen Sie Ihre Verbindungs- und Proxy-Einstellungen zu github-cloud.s3.amazonaws.com, + oder gehen Sie zu https://github.com/Flow-Launcher/Flow.Launcher/releases, um Updates manuell herunterzuladen. Versionshinweise - Usage Tips - DevTools - Setting Folder + Verwendungshinweise + Entwicklerwerkzeuge + Einstellungsordner Protokoll-Verzeichnis Protokolldateien leeren Sind Sie sicher, dass Sie alle Protokolle löschen möchten? @@ -246,13 +246,13 @@ "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". Datei-Manager Profilname - File Manager Path + Dateimanager-Pfad Argumente für Ordner Argumente für Datei Standard-Webbrowser - The default setting follows the OS default browser setting. If specified separately, flow uses that browser. + Die Standardeinstellung verwendet die Browser-Standardeinstellung des Betriebssystems. Falls angegeben, verwendet Flow diesen Browser. Browser Browser-Name Browserpfad @@ -262,8 +262,8 @@ Priorität ändern - Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number - Please provide an valid integer for Priority! + Je höher die Zahl, desto höher wird das Ergebnis gewertet. Versuchen Sie es mit einer 5. Sollen die Ergebnisse tiefer sein als diejenigen anderer Plugins, verwenden Sie eine negative Zahl + Bitte eine gültige Ganzzahl angeben für die Priorität! Altes Aktionsschlüsselwort @@ -274,7 +274,7 @@ Neues Aktionsschlüsselwort darf nicht leer sein Aktionsschlüsselwort ist schon bei einem anderen Plugin in verwendung. Bitte stellen Sie ein anderes Aktionsschlüsselwort ein. Erfolgreich - Completed successfully + Erfolgreich abgeschlossen Benutzen Sie * wenn Sie ein Aktionsschlüsselwort definieren wollen. @@ -347,10 +347,10 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse. Flow Launcher starts with the hotkey below, go ahead and try it out now. To change it, click on the input and press the desired hotkey on the keyboard. Tastenkombination - Action Keyword and Commands + Aktions-Schlüsselwort und Befehle Search the web, launch applications or run various functions through Flow Launcher plugins. Certain functions start with an action keyword, and if necessary, they can be used without action keywords. Try the queries below in Flow Launcher. - Let's Start Flow Launcher - Finished. Enjoy Flow Launcher. Don't forget the hotkey to start :) + Starte Flow-Launcher + Fertig. Genießen Sie Flow Launcher. Die Tastenkombination nicht vergessen, um Flow Launcher zu starten :) @@ -372,7 +372,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in Shell-Befehl s Bluetooth Bluetooth in Windows-Einstellungen - sn - Sticky Notes + nt + Notizen diff --git a/Flow.Launcher/Languages/es.xaml b/Flow.Launcher/Languages/es.xaml index 0ca8b6905..bcfef1f04 100644 --- a/Flow.Launcher/Languages/es.xaml +++ b/Flow.Launcher/Languages/es.xaml @@ -188,7 +188,7 @@ Añadir Por favor, seleccione un elemento ¿Está seguro que desea eliminar el atajo de teclado de consulta personalizada {0}? - ¿Está seguro que desea eliminar el acceso directo: {0} con la expansión {1}? + ¿Está seguro de que desea eliminar el acceso directo: {0} con la expansión {1}? Obtiene el texto del portapapeles. Obtiene la ruta del explorador activo. Efecto de sombra de la ventana de consultas @@ -237,7 +237,7 @@ Carpeta de configuración Carpeta de registros Eliminar registros - ¿Está seguro que desea eliminar todos los registros? + ¿Está seguro de que desea eliminar todos los registros? Asistente diff --git a/Flow.Launcher/Languages/fr.xaml b/Flow.Launcher/Languages/fr.xaml index 144f0e6fa..c33cefbfb 100644 --- a/Flow.Launcher/Languages/fr.xaml +++ b/Flow.Launcher/Languages/fr.xaml @@ -1,7 +1,7 @@  - Failed to register hotkey "{0}". The hotkey may be in use by another program. Change to a different hotkey, or exit another program. + Échec lors de l'enregistrement du raccourci : {0} Flow Launcher Impossible de lancer {0} Le format de fichier n'est pas un plugin Flow Launcher valide @@ -28,7 +28,7 @@ Rétablir la position de la fenêtre de recherche - Paramètres - Flow Launcher + Paramètres Général Mode Portable Stocker tous les paramètres et données utilisateur dans un seul dossier (Pratique en cas d'utilisation de disques amovibles ou de services cloud). @@ -287,9 +287,9 @@ Raccourci de requête personnalisée Entrez un raccourci qui s'étend automatiquement à la requête spécifiée. - A shortcut is expanded when it exactly matches the query. + Un raccourci est développé lorsqu'il correspond exactement à la requête. -If you add an '@' prefix while inputting a shortcut, it matches any position in the query. Builtin shortcuts match any position in a query. +Si vous ajoutez un préfixe "@" lors de la saisie d'un raccourci, celui-ci correspond à n'importe quelle position dans la requête. Les raccourcis intégrés correspondent à n'importe quelle position dans une requête. Le raccourci existe déjà, veuillez entrer un nouveau raccourci ou modifier le raccourci existant. Raccourci et/ou son expansion est vide. diff --git a/Flow.Launcher/Languages/it.xaml b/Flow.Launcher/Languages/it.xaml index 5c970f301..2b5157962 100644 --- a/Flow.Launcher/Languages/it.xaml +++ b/Flow.Launcher/Languages/it.xaml @@ -1,7 +1,7 @@  - Failed to register hotkey "{0}". The hotkey may be in use by another program. Change to a different hotkey, or exit another program. + Registrazione del tasto di scelta rapida "{0}" non riuscita. Il tasto di scelta rapida potrebbe essere in uso da un altro programma. Passa a un altro tasto di scelta rapida o esci da un altro programma. Flow Launcher Avvio fallito {0} Formato file plugin non valido @@ -17,15 +17,15 @@ Copia Taglia Incolla - Undo - Select All + Annulla + Seleziona Tutto File Cartella Testo Modalità gioco Sospendere l'uso dei tasti di scelta rapida. - Position Reset - Reset search window position + Ripristina Posizione + Ripristina posizione finestra di ricerca Impostazioni @@ -33,21 +33,21 @@ Modalità portatile Memorizzare tutte le impostazioni e i dati dell'utente in un'unica cartella (utile se utilizzato con unità rimovibili o servizi cloud). Avvia Wow all'avvio di Windows - Error setting launch on startup + Errore nell'impostazione del lancio all'avvio Nascondi Flow Launcher quando perde il focus Non mostrare le notifiche per una nuova versione - Search Window Position - Remember Last Position - Monitor with Mouse Cursor - Monitor with Focused Window - Primary Monitor - Custom Monitor - Search Window Position on Monitor - Center - Center Top - Left Top - Right Top - Custom Position + Posizione Finestra Di Ricerca + Ricorda L'Ultima Posizione + Monitora con il cursore del mouse + Monitora con la finestra in primo piano + Monitor Principale + Monitor Personalizzato + Posizione della finestra di ricerca sul monitor + Centro + Centrato in alto + Sinistra in alto + Destra in alto + Posizione personalizzata Lingua Comportamento ultima ricerca Mostra/nasconde i risultati precedenti quando Flow Launcher viene riattivato. @@ -55,37 +55,37 @@ Seleziona ultima ricerca Cancella ultima ricerca Numero massimo di risultati mostrati - You can also quickly adjust this by using CTRL+Plus and CTRL+Minus. + È anche possibile regolarlo rapidamente utilizzando CTRL+Più e CTRL+Meno. Ignora i tasti di scelta rapida in applicazione a schermo pieno Disattivare l'attivazione di Flow Launcher quando è attiva un'applicazione a schermo intero (consigliato per i giochi). Gestore File predefinito Selezionare il Gestore file da usare all'apertura della cartella. Browser predefinito Impostazione per Nuova scheda, Nuova finestra, Modalità privata. - Python Path - Node.js Path - Please select the Node.js executable - Please select pythonw.exe - Always Start Typing in English Mode - Temporarily change your input method to English mode when activating Flow. + Percorso di Python + Percorso di Node.js + Seleziona l'eseguibile di Node.js + Selezionare pythonw.exe + Inizia sempre a digitare in modalità inglese + Cambiare temporaneamente il metodo di input in modalità inglese quando si attiva Flow. Aggiornamento automatico Seleziona Nascondi Flow Launcher all'avvio Nascondi Icona nell'Area di Notifica - When the icon is hidden from the tray, the Settings menu can be opened by right-clicking on the search window. + Quando l'icona è nascosta dal menu delle icone nascoste, il menu Impostazioni può essere aperto facendo clic con il tasto destro del mouse sulla finestra di ricerca. Precisione di ricerca delle query Modifica il punteggio minimo richiesto per i risultati. Dovrebbe usare il Pinyin Consente di utilizzare il Pinyin per la ricerca. Il Pinyin è il sistema standard di ortografia romanizzata per la traduzione del cinese. - Always Preview - Always open preview panel when Flow activates. Press {0} to toggle preview. + Mostra Sempre Anteprima + Apri sempre il pannello di anteprima quando Flow si attiva. Premi {0} per attivare l'anteprima. L'effetto ombra non è consentito mentre il tema corrente ha un effetto di sfocatura abilitato - Search Plugin - Ctrl+F to search plugins - No results found - Please try a different search. + Plugin di ricerca + Ctrl+F per cercare plugin + Nessun risultato trovato + Prova una ricerca diversa. Plugin Plugin Cerca altri plugins @@ -99,7 +99,7 @@ Priorità Attuale Nuova Priorità Priorità - Change Plugin Results Priority + Priorità Dei Risultati Dei Plugin Cartella Plugin da Tempo di avvio: @@ -111,35 +111,35 @@ Negozio dei Plugin - New Release - Recently Updated + Nuova Versione + Aggiornati di recente Plugin - Installed + Installati Aggiorna Installa Disinstalla Aggiorna - Plugin already installed - New Version - This plugin has been updated within the last 7 days - New Update is Available + Plugin già installato + Nuova versione + Questo plugin è stato aggiornato negli ultimi 7 giorni + Nuovo aggiornamento disponibile Tema - Appearance + Aspetto Sfoglia per altri temi Come creare un tema Ciao Esplora Risorse - Search for files, folders and file contents + Cerca i file, le cartelle e il contenuto dei file WebSearch - Search the web with different search engine support - Program - Launch programs as admin or a different user + Cerca sul web con diversi motori di ricerca supportati + Programma + Avvia programmi come amministratore o un altro utente ProcessKiller - Terminate unwanted processes + Termina i processi indesiderati Font campo di ricerca Font campo risultati Modalità finestra @@ -156,22 +156,22 @@ Riproduce un piccolo suono all'apertura della finestra di ricerca Animazione Usa l'animazione nell'interfaccia utente - Animation Speed - The speed of the UI animation - Slow - Medium - Fast - Custom - Clock - Date + Velocità di animazione + La velocità dell'animazione dell'interfaccia utente + Lento + Medio + Veloce + Personalizzato + Orologio + Data Tasti scelta rapida Tasti scelta rapida Tasto scelta rapida Flow Launcher Immettere la scorciatoia per mostrare/nascondere Flow Launcher. - Preview Hotkey - Enter shortcut to show/hide preview in search window. + Anteprima Scorciatoia + Inserisci la scorciatoia per mostrare/nascondere l'anteprima nella finestra di ricerca. Apri modificatori di risultato Seleziona un tasto modificatore per aprire il risultato selezionato via tastiera. Mostra tasto di scelta rapida @@ -180,24 +180,24 @@ Custom Query Shortcut Built-in Shortcut Ricerca - Shortcut - Expansion + Scorciatoia + Espansione Descrizione Cancella Modifica Aggiungi Selezionare un oggetto Volete cancellare il tasto di scelta rapida per il plugin {0}? - Are you sure you want to delete shortcut: {0} with expansion {1}? - Get text from clipboard. - Get path from active explorer. + Sei sicuro di voler eliminare la scorciatoia: {0} con espansione {1}? + Ottieni testo dagli appunti. + Ottieni il percorso dall'esplora risorse attivo. Effetto ombra della finestra di ricerca L'effetto ombra utilizzerà in maniera sostanziale la GPU. Non consigliato se le performance del tuo computer sono limitate. Dimensione larghezza della finestra - You can also quickly adjust this by using Ctrl+[ and Ctrl+]. + È anche possibile regolarlo rapidamente utilizzando CTRL+[ e CTRL+]. Usa Icone Segoe Fluent Usa Icone Segoe Fluent per risultati di ricerca dove supportate - Press Key + Premi tasto Proxy HTTP @@ -221,10 +221,10 @@ GitHub Documentazione Versione - Icons + Icone Hai usato Flow Launcher {0} volte Cerca aggiornamenti - Become A Sponsor + Diventa un sostenitore Una nuova versione {0} è disponibile, riavvia Flow Launcher per favore. Ricerca aggiornamenti fallita, per favore controlla la tua connessione e le eventuali impostazioni proxy per api.github.com. @@ -236,8 +236,8 @@ Strumenti per sviluppatori Cartella delle impostazioni Cartella dei Log - Clear Logs - Are you sure you want to delete all logs? + Cancella i log + Sei sicuro di voler cancellare tutti i log? Wizard @@ -279,21 +279,21 @@ Tasti scelta rapida per ricerche personalizzate - Press a custom hotkey to open Flow Launcher and input the specified query automatically. + Premere un tasto di scelta rapida personalizzato per aprire Flow Launcher e inserire automaticamente la query specificata. Anteprima Tasto di scelta rapida non disponibile, per favore scegli un nuovo tasto di scelta rapida Tasto di scelta rapida plugin non valido Aggiorna - Custom Query Shortcut - Enter a shortcut that automatically expands to the specified query. - A shortcut is expanded when it exactly matches the query. + Scorciatoia per ricerca personalizzata + Inserisci una scorciatoia che si espande automaticamente alla query specificata. + Una scorciatoia viene espansa quando corrisponde esattamente alla 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. +Se si aggiunge un prefisso '@' mentre si inserisce una scorciatoia, corrisponde a qualsiasi posizione nella query. Le scorciatoie integrate corrispondono a qualsiasi posizione in una query. - Shortcut already exists, please enter a new Shortcut or edit the existing one. - Shortcut and/or its expansion is empty. + La scorciatoia esiste già, inserisci una nuova scorciatoia o modifica quella esistente. + La scorciatoia e/o la sua espansione sono vuote. Tasto di scelta rapida non disponibile @@ -358,7 +358,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in Navigazione tra le voci Apri il menu di scelta rapida Apri cartella superiore - Run as Admin / Open Folder in Default File Manager + Esegui come Admin / Apri cartella in File Manager predefinito Cronologia Query Torna al risultato nel menu contestuale Autocompleta @@ -371,7 +371,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in > ping 8.8.8.8 Comando Della shell s Bluetooth - Bluetooth in Windows Settings + Bluetooth in Impostazioni Windows sn Sticky Notes diff --git a/Flow.Launcher/Languages/nl.xaml b/Flow.Launcher/Languages/nl.xaml index 16b1b01ad..5b28c5712 100644 --- a/Flow.Launcher/Languages/nl.xaml +++ b/Flow.Launcher/Languages/nl.xaml @@ -92,7 +92,7 @@ Aan Disable Actie sneltoets instelling - Action terfwoorden + Actie sneltoets Huidige actie sneltoets Nieuw actie sneltoets Wijzig actie-sneltoets @@ -182,7 +182,7 @@ Query Shortcut Expansion - Description + Beschrijving Verwijder Bewerken Toevoegen diff --git a/Flow.Launcher/Languages/pl.xaml b/Flow.Launcher/Languages/pl.xaml index 340e6c3e9..401e202c3 100644 --- a/Flow.Launcher/Languages/pl.xaml +++ b/Flow.Launcher/Languages/pl.xaml @@ -1,7 +1,7 @@  - Failed to register hotkey "{0}". The hotkey may be in use by another program. Change to a different hotkey, or exit another program. + Nie udało się zarejestrować skrótu klawiszowego "{0}". Klucz skrótu może być używany przez inny program. Zmień skrót klawiszowy lub wyjdź z innego programu. Flow Launcher Nie udało się uruchomić: {0} Niepoprawny format pliku wtyczki @@ -21,11 +21,11 @@ Zaznacz wszystko Plik Folder - Text + Tekst Tryb grania Wstrzymaj używanie skrótów. - Position Reset - Reset search window position + Resetowanie pozycji + Zresetuj pozycję okna wyszukiwania Ustawienia @@ -33,29 +33,29 @@ Tryb przenośny Przechowuj wszystkie ustawienia i dane użytkownika w jednym folderze (Przydatne, gdy używane na dyskach wymiennych lub usługach chmurowych). Uruchamiaj Flow Launcher przy starcie systemu - Error setting launch on startup + Błąd uruchamiania ustawień przy starcie Ukryj okno Flow Launcher kiedy przestanie ono być aktywne Nie pokazuj powiadomienia o nowej wersji - Search Window Position - Remember Last Position - Monitor with Mouse Cursor - Monitor with Focused Window - Primary Monitor - Custom Monitor - Search Window Position on Monitor - Center - Center Top - Left Top - Right Top - Custom Position + Pozycja Okna Wyszukiwania + Zapamiętaj Ostatnią Pozycję + Monitoruj kursorem myszy + Monitor z Dostosowanym Oknem + Monitor główny + Monitor Niestandardowy + Pozycja Okna Wyszukiwania na Monitorze + Wyśrodkowane + Środek Góra + Lewa Góra + Prawa Góra + Pozycja niestandardowa Język - Last Query Style - Show/Hide previous results when Flow Launcher is reactivated. - Preserve Last Query - Select last Query - Empty last Query + Styl ostatniego zapytania + Pokaż/Ukryj poprzednie wyniki, gdy Flow Launcher jest ponownie aktywowany. + Zachowaj ostatnie zapytanie + Wybierz ostatnie zapytanie + Puste ostatnie zapytanie Maksymalna liczba wyników - You can also quickly adjust this by using CTRL+Plus and CTRL+Minus. + Możesz to również szybko dostosować używając CTRL+Plus i CTRL+Minus. Ignoruj skróty klawiszowe w trybie pełnego ekranu Wyłącz aktywowanie Flow Launcher, gdy uruchomiona jest aplikacja pełnoekranowa (Zalecane dla gier). Domyślny menedżer plików @@ -63,45 +63,45 @@ Domyślna przeglądarka Ustawienie dla nowej karty, nowego okna i trybu prywatnego. Python Path - Node.js Path - Please select the Node.js executable - Please select pythonw.exe - Always Start Typing in English Mode - Temporarily change your input method to English mode when activating Flow. + Ścieżka Node.js + Wybierz plik wykonywalny Node.js + Wybierz pythonw.exe + Zawsze rozpoczynaj wpisywanie w trybie angielskim + Tymczasowo zmień metodę wprowadzania na tryb angielski podczas aktywacji Flow. Automatyczne aktualizacje Wybierz Uruchamiaj Flow Launcher zminimalizowany Ukryj ikonę zasobnika - When the icon is hidden from the tray, the Settings menu can be opened by right-clicking on the search window. - Query Search Precision - Changes minimum match score required for results. - Search with Pinyin - Allows using Pinyin to search. Pinyin is the standard system of romanized spelling for translating Chinese. - Always Preview - Always open preview panel when Flow activates. Press {0} to toggle preview. - Shadow effect is not allowed while current theme has blur effect enabled + Gdy ikona jest ukryta w zasobniku, menu Ustawienia można otworzyć, klikając prawym przyciskiem myszy okno wyszukiwania. + Precyzja wyszukiwania zapytań + Zmienia minimalny wynik dopasowania wymagany do uzyskania wyników. + Szukaj z Pinyin + Umożliwia wyszukiwanie przy użyciu Pinyin. Pinyin to standardowy system pisowni zromanizowanej służący do tłumaczenia języka chińskiego. + Zawsze Podgląd + Zawsze otwieraj panel podglądu, gdy aktywowany jest Flow. Naciśnij {0}, aby przełączyć podgląd. + Efekt cienia jest niedozwolony, gdy bieżący motyw ma włączony efekt rozmycia Szukaj wtyczek Ctrl+F aby wyszukać wtyczki - No results found - Please try a different search. - Plugin + Nie znaleziono wyników + Spróbuj użyć innego wyszukiwania. + Wtyczka Wtyczki Znajdź więcej wtyczek - On + Włącz Wyłącz - Action keyword Setting + Ustawienie akcji słowa kluczowego Wyzwalacze - Current action keyword - New action keyword - Change Action Keywords - Current Priority - New Priority - Priority - Change Plugin Results Priority + Bieżące słowo kluczowe akcji + Nowe słowo kluczowe akcji + Zmień słowa kluczowe akcji + Obecny Priorytet + Nowy Priorytet + Priorytet + Zmień priorytet wyników wtyczki Folder wtyczki - by + wg Czas ładowania: Czas zapytania: Wersja @@ -111,67 +111,67 @@ Sklep z wtyczkami - New Release - Recently Updated + Nowe wydanie + Ostatnio zaktualizowano Wtyczki - Installed - Refresh - Install + Zainstalowany + Odśwież + Instalacja Odinstalowywanie Aktualizuj - Plugin already installed - New Version - This plugin has been updated within the last 7 days - New Update is Available + Plugin już jest zainstalowany + Nowa wersja + Ta wtyczka została zaktualizowana w ciągu ostatnich 7 dni + Dostępna jest nowa aktualizacja Skórka - Appearance + Wygląd Znajdź więcej skórek - How to create a theme - Hi There + Jak utworzyć motyw + Cześć, Explorer - Search for files, folders and file contents - WebSearch - Search the web with different search engine support + Wyszukiwanie plików, folderów i zawartości plików + Wyszukiwarka internetowa + Wyszukiwanie w Internecie z obsługą różnych wyszukiwarek Programy - Launch programs as admin or a different user - ProcessKiller - Terminate unwanted processes + Uruchamiaj programy jako administrator lub inny użytkownik + ZabijProces + Zakończ niechciane procesy Czcionka okna zapytania Czcionka okna wyników Tryb w oknie Przeźroczystość - Theme {0} not exists, fallback to default theme - Fail to load theme {0}, fallback to default theme - Theme Folder - Open Theme Folder - Color Scheme - System Default - Light - Dark - Sound Effect - Play a small sound when the search window opens - Animation - Use Animation in UI - Animation Speed - The speed of the UI animation - Slow - Medium - Fast - Custom - Clock - Date + Motyw {0} nie istnieje, powróć do domyślnego motywu + Nie można załadować motywu {0}, wróć do motywu domyślnego + Folder Motywu + Otwórz folder motywu + Schemat kolorów + Domyślne ustawienie systemowe + Jasny + Ciemny + Efekty dźwiękowe + Odtwarzaj krótki dźwięk po otwarciu okna wyszukiwania + Animacja + Użyj animacji w interfejsie użytkownika + Szybkość animacji + Szybkość animacji interfejsu użytkownika + Wolna + Średnia + Szybka + Niestandardowa + Zegar + Data Skrót klawiszowy Skrót klawiszowy Skrót klawiszowy Flow Launcher - Enter shortcut to show/hide Flow Launcher. - Preview Hotkey - Enter shortcut to show/hide preview in search window. + Wprowadź skrót, aby pokazać/ukryć Flow Launcher. + Podgląd skrótu + Wprowadź skrót, aby pokazać/ukryć podgląd w oknie wyszukiwania. Modyfikatory klawiszów otwierających wyniki Select a modifier key to open selected result via keyboard. Pokaż skrót klawiszowy @@ -243,27 +243,27 @@ Select File Manager Please specify the file location of the file manager you using and add arguments if necessary. The default arguments are "%d", and a path is entered at that location. For example, If a command is required such as "totalcmd.exe /A c:\windows", argument is /A "%d". - "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". - File Manager - Profile Name - File Manager Path - Arg For Folder - Arg For File + "%f" jest argumentem reprezentującym ścieżkę do pliku. Służy do podkreślenia nazwy pliku/folderu podczas otwierania określonej lokalizacji pliku w menedżerze plików innych firm. Ten argument jest dostępny tylko w pozycji "Arg dla pliku". Jeśli menedżer plików nie ma tej funkcji, możesz użyć "%d". + Menadżer plików + Nazwa profilu + Ścieżka menedżera plików + Arg dla folderu + Arg dla pliku Domyślna przeglądarka - The default setting follows the OS default browser setting. If specified separately, flow uses that browser. - Browser - Browser Name - Browser Path - New Window - New Tab - Private Mode + Ustawienie domyślne jest zgodne z domyślnym ustawieniem przeglądarki systemu operacyjnego. Jeśli określono to oddzielnie, flow korzysta z tej przeglądarki. + Przeglądarka + Nazwa przeglądarki + Ścieżka przeglądarki + Nowe okno + Nowa zakładka + Tryb prywatny - Change Priority - Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number - Please provide an valid integer for Priority! + Zmień priorytet + Im większa liczba, tym wyższa pozycja w rankingu. Spróbuj ustawić go jako 5. Jeśli chcesz, aby wyniki były niższe niż w przypadku jakiejkolwiek innej wtyczki, podaj liczbę ujemną + Podaj prawidłową liczbę całkowitą dla priorytetu! Stary wyzwalacz @@ -274,26 +274,26 @@ Nowy wyzwalacz nie może być pusty Ten wyzwalacz został już przypisany do innej wtyczki, musisz podać inny wyzwalacz. Sukces - Completed successfully + Zakończono pomyślnie Użyj * jeżeli nie chcesz podawać wyzwalacza Skrót klawiszowy niestandardowych zapyta - Press a custom hotkey to open Flow Launcher and input the specified query automatically. + Naciśnij niestandardowy klawisz skrótu, aby otworzyć Flow Launcher i automatycznie wprowadzić określone zapytanie. Podgląd Skrót klawiszowy jest niedostępny, musisz podać inny skrót klawiszowy Niepoprawny skrót klawiszowy Aktualizuj - Custom Query Shortcut - Enter a shortcut that automatically expands to the specified query. - A shortcut is expanded when it exactly matches the query. + Niestandardowy skrót zapytania + Wprowadź skrót, który automatycznie rozszerzy się do określonego zapytania. + Skrót jest rozwijany, gdy dokładnie pasuje do zapytania. -If you add an '@' prefix while inputting a shortcut, it matches any position in the query. Builtin shortcuts match any position in a query. +Jeśli dodasz prefiks '@' podczas wprowadzania skrótu, będzie on pasował do dowolnej pozycji w zapytaniu. Wbudowane skróty pasują do każdej pozycji w zapytaniu. - Shortcut already exists, please enter a new Shortcut or edit the existing one. - Shortcut and/or its expansion is empty. + Skrót już istnieje, wprowadź nowy skrót lub edytuj istniejący. + Skrót i/lub jego rozwinięcie jest puste. Niepoprawny skrót klawiszowy @@ -315,51 +315,51 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in W programie Flow Launcher wystąpił błąd - Please wait... + Proszę czekać... - Checking for new update - You already have the latest Flow Launcher version - Update found - Updating... + Sprawdzanie nowej aktualizacji + Masz już najnowszą wersję Flow Launcher + Znaleziono aktualizację + Aktualizacja... - Flow Launcher was not able to move your user profile data to the new update version. - Please manually move your profile data folder from {0} to {1} + Flow Launcher nie był w stanie przenieść danych profilu użytkownika do nowej wersji aktualizacji. + Ręcznie przenieś folder danych profilu z {0} do {1} - New Update + Nowa aktualizacja Nowa wersja Flow Launcher {0} jest dostępna Wystąpił błąd podczas instalowania aktualizacji programu Aktualizuj Anuluj - Update Failed - Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. + Aktualizacja nie powiodła się + Sprawdź połączenie i spróbuj zaktualizować ustawienia proxy do github-cloud.s3.amazonaws.com. Aby dokończyć proces aktualizacji Flow Launcher musi zostać zresetowany Następujące pliki zostaną zaktualizowane Aktualizuj pliki Opis aktualizacji - Skip - Welcome to Flow Launcher - Hello, this is the first time you are running Flow Launcher! - Before starting, this wizard will assist in setting up Flow Launcher. You can skip this if you wish. Please choose a language - Search and run all files and applications on your PC - Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse. - Flow Launcher starts with the hotkey below, go ahead and try it out now. To change it, click on the input and press the desired hotkey on the keyboard. - Hotkeys - Action Keyword and Commands - Search the web, launch applications or run various functions through Flow Launcher plugins. Certain functions start with an action keyword, and if necessary, they can be used without action keywords. Try the queries below in Flow Launcher. - Let's Start Flow Launcher - Finished. Enjoy Flow Launcher. Don't forget the hotkey to start :) + Pomiń + Witamy w Flow Launcher + Witaj, po raz pierwszy uruchamiasz Flow Launcher! + Przed rozpoczęciem ten kreator pomoże skonfigurować Flow Launcher. Jeśli chcesz, możesz to pominąć. Proszę wybierz język + Wyszukiwanie i uruchamianie wszystkich plików i aplikacji na PC + Przeszukuj wszystko, od aplikacji, plików, zakładek, YouTube, X i nie tylko. Wszystko to z komfortowej klawiatury, bez konieczności dotykania myszy. + Flow Launcher uruchamia się za pomocą poniższego skrótu klawiszowego, śmiało i wypróbuj go teraz. Aby to zmienić, kliknij dane wejściowe i naciśnij żądany klawisz skrótu na klawiaturze. + Skróty klawiszowe + Słowo kluczowe akcji i polecenia + Przeszukuj sieć, uruchamiaj aplikacje lub uruchamiaj różne funkcje za pomocą wtyczek Flow Launcher. Niektóre funkcje zaczynają się od słowa kluczowego akcji, a w razie potrzeby można ich używać bez słów kluczowych akcji. Wypróbuj poniższe zapytania w Flow Launcher. + Uruchom Flow Launcher + Zakończono. Ciesz się Flow Launcher. Nie zapomnij o klawiszu skrótu, aby rozpocząć :) - Back / Context Menu - Item Navigation - Open Context Menu - Open Containing Folder - Run as Admin / Open Folder in Default File Manager - Query History + Powrót / Menu kontekstowe + Nawigacja pozycji + Otwórz menu kontekstowe + Otwórz folder zawierający + Uruchom jako administrator / Otwórz folder w domyślnym menedżerze plików + Historia zapytań Back to Result in Context Menu Autocomplete Open / Run Selected Item diff --git a/Flow.Launcher/Languages/pt-br.xaml b/Flow.Launcher/Languages/pt-br.xaml index fda79522b..23a669536 100644 --- a/Flow.Launcher/Languages/pt-br.xaml +++ b/Flow.Launcher/Languages/pt-br.xaml @@ -1,7 +1,7 @@  - Failed to register hotkey "{0}". The hotkey may be in use by another program. Change to a different hotkey, or exit another program. + Falha em registrar a tecla de atalho "{0}". A combinação pode estar em uso por outro programa. Mude para uma tecla de atalho diferente, ou encerre o outro programa. Flow Launcher Não foi possível iniciar {0} Formato de plugin Flow Launcher inválido @@ -158,20 +158,20 @@ Utilizar Animação na Interface Velocidade de Animação Altere a velocidade da animação da interface - Slow - Medium - Fast - Custom - Clock - Date + Lento + Médio + Rápido + Personalizado + Relógio + Data Atalho Atalho Atalho do Flow Launcher Digite o atalho para exibir/ocultar o Flow Launcher. - Preview Hotkey - Enter shortcut to show/hide preview in search window. + Atalho de pré-visualização + Digite o atalho para exibir/ocultar a pré-visualização na janela de pesquisa. Modificadores de resultado aberto Selecione uma tecla modificadora para abrir o resultar selecionado pelo teclado. Mostrar tecla de atalho @@ -181,23 +181,23 @@ Built-in Shortcut Consulta Atalho - Expansion + Expansão Descrição Apagar Editar Adicionar Por favor selecione um item Tem cereza de que deseja deletar o atalho {0} do plugin? - Are you sure you want to delete shortcut: {0} with expansion {1}? - Get text from clipboard. - Get path from active explorer. + Tem certeza que deseja excluir o atalho: {0} com expansão {1}? + Exibe o texto da área de transferência. + Exibe o caminho do explorador ativo. Efeito de sombra da janela de consulta - Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. + O efeito de sombra tem um uso substancial da GPU. Não recomendado se o desempenho do seu computador é limitado. Largura da janela - You can also quickly adjust this by using Ctrl+[ and Ctrl+]. + Você também pode ajustar isso rapidamente usando Ctrl+[ e Ctrl+]. Usar Segoe Fluent Icons Usar Segoe Fluent Icons para resultados da consulta quando suportado - Press Key + Apertar Tecla Proxy HTTP @@ -224,7 +224,7 @@ Ícones Você ativou o Flow Launcher {0} vezes Procurar atualizações - Become A Sponsor + Torne-se um Sponsor A nova versão {0} está disponível, por favor reinicie o Flow Launcher. Falha ao procurar atualizações, confira sua conexão e configuração de proxy para api.github.com. @@ -234,36 +234,36 @@ Notas de Versão: Dicas de Uso Ferramentas de Desenvolvedor - Setting Folder - Log Folder - Clear Logs - Are you sure you want to delete all logs? + Pasta de configuração + Pasta de Registro + Limpar Registros + Tem certeza que quer excluir todos os registros? Assistente - Select File Manager - Please specify the file location of the file manager you using and add arguments if necessary. The default arguments are "%d", and a path is entered at that location. For example, If a command is required such as "totalcmd.exe /A c:\windows", argument is /A "%d". - "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". + Selecione o Gerenciador de Arquivos + Por favor, especifique a localização do arquivo do gerenciador de arquivos que você está usando e adicione argumentos se necessário. Os argumentos padrões são "%d", e um caminho é digitado naquela localização. Por exemplo, se um comando é necessário tal qual "totalcmd.exe /A c:\windows", o argumento é /A "%d". + "%f" é um argumento que representa o caminho do arquivo. É utilizado para enfatizar o nome da pasta/arquivo ao abrir uma localização de arquivo específica em um gerenciador de arquivo de terceiros. Esse argumento só está disponível no item "Arg para Arquivo". Se o gerenciador de arquivos não tem essa função, você pode usar "%d". Gerenciador de Arquivos - Profile Name - File Manager Path - Arg For Folder - Arg For File + Nome do Perfil + Caminho do Gerenciador de Arquivos + Arg para Pasta + Arg para Arquivo Navegador da Web Padrão - The default setting follows the OS default browser setting. If specified separately, flow uses that browser. + A configuração padrão segue a configuração do navegador padrão do sistema. Caso seja especificado separadamente, Flow usa o navegador definido pelo usuário. Navegador Nome do Navegador - Browser Path + Caminho do Navegador Nova Janela Nova Aba - Private Mode + Modo Privado Alterar Prioridade - Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number - Please provide an valid integer for Priority! + Quanto maior o número, maior o resultado será classificado. Tente configurá-lo para 5. Se você quer que os resultados sejam menores do que qualquer outro plugin, coloque um número negativo + Por favor, forneça um inteiro válido em Prioridade! Antiga palavra-chave da ação @@ -279,21 +279,21 @@ Atalho de Consulta Personalizada - Press a custom hotkey to open Flow Launcher and input the specified query automatically. + Aperte uma tecla de atalho personalizada para abrir o Flow Launcher e insira a pesquisa especificada automaticamente. Prévia Atalho indisponível, escolha outro Atalho de plugin inválido Atualizar - Custom Query Shortcut - Enter a shortcut that automatically expands to the specified query. + Atalho Personalidado de Pesquisa + Introduza um atalho que expanda automaticamente para a pesquisa especificada. 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. + O atalho já existe, por favor, digite um novo atalho ou edite o existente. + Atalho e/ou sua expansão está vazia. Atalho indisponível @@ -326,13 +326,13 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in Flow Launcher was not able to move your user profile data to the new update version. Please manually move your profile data folder from {0} to {1} - New Update + Nova Atualização A nova versão {0} do Flow Launcher agora está disponível Ocorreu um erro ao tentar instalar atualizações do progama Atualizar Cancelar Falha ao Atualizar - Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. + Verifique sua conexão e tente atualizar as configurações de proxy para github-cloud.s3.amazonaws.com. Essa atualização reiniciará o Flow Launcher Os seguintes arquivos serão atualizados Atualizar arquivos @@ -341,15 +341,15 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in Pular Bem-vindo ao Flow Launcher - Hello, this is the first time you are running Flow Launcher! - Before starting, this wizard will assist in setting up Flow Launcher. You can skip this if you wish. Please choose a language - Search and run all files and applications on your PC - Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse. - Flow Launcher starts with the hotkey below, go ahead and try it out now. To change it, click on the input and press the desired hotkey on the keyboard. + Olá, está é a primeira vez que você executa o Flow Launcher! + Antes de começar, este assistente ajudará a configurar o Flow Launcher. Você pode pular essa etapa se quiser. Por favor, escolha um idioma + Pesquise e execute todos os arquivos e programas no seu PC + Pesquise tudo de programas, arquivos, favoritos, YouTube, Twitter e mais. Tudo isso do conforto do seu teclado sem precisar tocar o mouse. + Flow Launcher se inicia com a tecla de atalho abaixo, vá em frente e experimente agora. Para mudar, clique na barra e digite o atalho desejado no teclado. Teclas de Atalho - Action Keyword and Commands + Palavras-Chave de Ação e Comandos Search the web, launch applications or run various functions through Flow Launcher plugins. Certain functions start with an action keyword, and if necessary, they can be used without action keywords. Try the queries below in Flow Launcher. - Let's Start Flow Launcher + Vamos iniciar o Flow Launcher Finalizado. Aproveite o Flow Launcher. Não esqueça o atalho para iniciar :) @@ -357,10 +357,10 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in Voltar / Menu de Contexto Item de Navegação Abrir Menu de Contexto - Open Containing Folder - Run as Admin / Open Folder in Default File Manager + Abrir a pasta correspondente + Executar como administrador / Abrir pasta no gerenciador de arquivos padrão Histórico de Pesquisas - Back to Result in Context Menu + Voltar ao resultado no menu de contexto Autocompletar Abrir / Executar Item Selecionado Abrir Janela de Configurações @@ -371,7 +371,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in > ping 8.8.8.8 Comando de Console s Bluetooth - Bluetooth in Windows Settings + Bluetooth nas Configurações do Windows sn Notas Autoadesivas diff --git a/Flow.Launcher/Languages/sk.xaml b/Flow.Launcher/Languages/sk.xaml index 91ae87631..252bfb81d 100644 --- a/Flow.Launcher/Languages/sk.xaml +++ b/Flow.Launcher/Languages/sk.xaml @@ -171,7 +171,7 @@ Klávesová skratka pre Flow Launcher Zadajte skratku na zobrazenie/skrytie Flow Launchera. Klávesová skratka pre náhľad - Zadajte klávesovú skratku pre zobrazenie/skytie náhľadu vo vyhľadávacom okne. + Zadajte klávesovú skratku pre zobrazenie/skrytie náhľadu vo vyhľadávacom okne. Modifikačný kláves na otvorenie výsledkov Vyberte modifikačný kláves na otvorenie vybraného výsledku pomocou klávesnice. Zobraziť klávesovú skratku diff --git a/Flow.Launcher/Languages/uk-UA.xaml b/Flow.Launcher/Languages/uk-UA.xaml index 4cb323c67..2adbf5d2f 100644 --- a/Flow.Launcher/Languages/uk-UA.xaml +++ b/Flow.Launcher/Languages/uk-UA.xaml @@ -1,7 +1,7 @@  - Failed to register hotkey "{0}". The hotkey may be in use by another program. Change to a different hotkey, or exit another program. + Не вдалося зареєструвати гарячу клавішу "{0}". Можливо, гаряча клавіша використовується іншою програмою. Змініть її на іншу гарячу клавішу або вийдіть з програми, де вона використовується. Flow Launcher Не вдалося запустити {0} Невірний формат файлу плагіна Flow Launcher @@ -17,15 +17,15 @@ Копіювати Вирізати Вставити - Undo - Select All + Скасувати + Обрати все Файл Тека Текст Режим гри Призупинити використання гарячих клавіш. - Position Reset - Reset search window position + Скидання позиції + Скинути положення вікна пошуку Налаштування @@ -33,21 +33,21 @@ Портативний режим Зберігати всі налаштування і дані користувача в одній теці (буде корисно при видаленні дисків або хмарних сервісах). Запускати Flow Launcher при запуску системи - Error setting launch on startup + Помилка запуску налаштування під час запуску Сховати Flow Launcher, якщо втрачено фокус Не повідомляти про доступні нові версії - Search Window Position - Remember Last Position - Monitor with Mouse Cursor - Monitor with Focused Window - Primary Monitor - Custom Monitor - Search Window Position on Monitor - Center - Center Top - Left Top - Right Top - Custom Position + Положення вікна пошуку + Пам'ятати останню позицію + Монітор з курсором миші + Монітор зі сфокусованим вікном + Основний монітор + Власний монітор + Положення вікна пошуку на моніторі + Центр + Вгорі по центру + Зліва вгорі + Праворуч вгорі + Власна позиція Мова Останній стиль запиту Показати/приховати попередні результати коли реактивований Flow Launcher знову. @@ -55,42 +55,42 @@ Вибрати останній запит Очистити останній запит Максимальна кількість результатів - You can also quickly adjust this by using CTRL+Plus and CTRL+Minus. + Ви також можете швидко налаштувати цей параметр за допомогою клавіш CTRL+Плюс чи CTRL+Мінус. Ігнорувати гарячі клавіші в повноекранному режимі Вимкнути активацію Flow Launcher коли активовано повноекранний додаток (Рекомендується для ігор). Стандартний Файловий Менеджер Виберіть файловий менеджер для використання під час відкриття теки. Браузер за замовчуванням Налаштування нової вкладки, нового вікна, приватного режиму. - Python Path - Node.js Path - Please select the Node.js executable - Please select pythonw.exe - Always Start Typing in English Mode - Temporarily change your input method to English mode when activating Flow. + Шлях до Python + Шлях до Node.js + Виберіть виконуваний файл Node.js + Виберіть pythonw.exe + Завжди починати введення тексту в англійському режимі + Тимчасово змінити спосіб введення на англійський при активації Flow. Автоматичне оновлення Вибрати Сховати Flow Launcher при запуску системи Приховати значок в системному лотку - When the icon is hidden from the tray, the Settings menu can be opened by right-clicking on the search window. + Коли піктограму приховано з трею, меню налаштувань можна відкрити, клацнувши правою кнопкою миші у вікні пошуку. Точність пошуку запитів Змінює мінімальний бал збігів, необхідних для результатів. Використовувати піньїнь Дозволяє використовувати пінїнь для пошуку. Піньїнь - це стандартна система написання для перекладу китайської. - Always Preview - Always open preview panel when Flow activates. Press {0} to toggle preview. + Завжди переглядати + Завжди відкривати панель попереднього перегляду при активації Flow. Натисніть {0}, щоб переключити попередній перегляд. Ефект тіні не дозволено, коли поточна тема має ефект розмиття - Search Plugin - Ctrl+F to search plugins - No results found - Please try a different search. - Plugin + Плагін для пошуку + Ctrl+F для пошуку плагінів + Результатів не знайдено + Будь ласка, спробуйте інший запит. + Плагін Плагіни Знайти більше плагінів Увімкнено - Відключити + Вимкнено Встановлення гарячих клавіш Ключове слово Поточна гаряча клавіша @@ -99,47 +99,47 @@ Поточний пріоритет Новий пріоритет Пріоритет - Change Plugin Results Priority + Змінити пріоритет результатів плагіна Директорія плагінів за Ініціалізація: Запит: Версія Сайт - Uninstall + Видалити Магазин плагінів - New Release - Recently Updated + Новий реліз + Нещодавно оновлено Плагіни - Installed + Встановлено Оновити - Install - Uninstall + Встановити + Видалити Оновити - Plugin already installed - New Version - This plugin has been updated within the last 7 days - New Update is Available + Плагін вже встановлено + Нова версія + Цей плагін було оновлено протягом останніх 7 днів + Доступне нове оновлення Тема - Appearance + Зовнішній вигляд Знайти більше тем Як створити тему Привіт усім - Explorer - Search for files, folders and file contents - WebSearch - Search the web with different search engine support - Program - Launch programs as admin or a different user - ProcessKiller - Terminate unwanted processes + Провідник + Пошук файлів, папок і вмісту файлів + Веб-пошук + Пошук в Інтернеті за допомогою різних пошукових систем + Програма + Запуск програм від імені адміністратора або іншого користувача + Процес-кілер + Припинення небажаних процесів Шрифт запитів Шрифт результатів Віконний режим @@ -156,51 +156,51 @@ Відтворювати невеликий звук при відкритті вікна пошуку Анімація Використовувати анімацію в інтерфейсі - Animation Speed - The speed of the UI animation - Slow - Medium - Fast - Custom - Clock - Date + Швидкість анімації + Швидкість анімації інтерфейсу + Повільна + Середня + Швидка + Користувацька + Годинник + Дата Гаряча клавіша Гаряча клавіша Гаряча клавіша Flow Launcher - Введіть ярлик для відображення/приховання потокового запуску. - Preview Hotkey - Enter shortcut to show/hide preview in search window. + Введіть скорочення, щоб показати/приховати Flow Launcher. + Гаряча клавіша попереднього перегляду + Введіть скорочення, щоб показати/приховати попередній перегляд у вікні пошуку. Відкрити ключ зміни результатів Виберіть ключ модифікатора для відкриття вибраних результатів за допомогою клавіатури. Показати гарячу клавішу - Show result selection hotkey with results. + Показати гарячу клавішу вибору результату з результатами. Задані гарячі клавіші для запитів - Custom Query Shortcut - Built-in Shortcut - Query - Shortcut - Expansion - Description + Користувацькі скорочення запитів + Вбудовані скорочення + Запит + Скорочення + Розширення + Опис Видалити Редагувати Додати Спочатку виберіть елемент Ви впевнені, що хочете видалити гарячу клавішу ({0}) плагіну? - Are you sure you want to delete shortcut: {0} with expansion {1}? - Get text from clipboard. - Get path from active explorer. + Ви впевнені, що хочете видалити скорочення: {0} з розширенням {1}? + Отримати текст з буфера обміну. + Отримати шлях з активного провідника. Ефект тіні вікна запиту - Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited. - Window Width Size - You can also quickly adjust this by using Ctrl+[ and Ctrl+]. - Use Segoe Fluent Icons - Use Segoe Fluent Icons for query results where supported - Press Key + Тіньовий ефект суттєво навантажує графічний процесор. Не рекомендується, якщо потужність вашого комп'ютера є обмеженою. + Розмір ширини вікна + Ви також можете швидко налаштувати цей параметр за допомогою комбінації клавіш Ctrl+[ та Ctrl+]. + Використання іконок Segoe Fluent + Використання іконок Segoe Fluent Icons для результатів запитів, де це підтримується + Натисніть клавішу - HTTP Proxy + HTTP-проксі Включити HTTP Proxy Сервер HTTP Порт @@ -217,53 +217,53 @@ Про Flow Launcher - Website + Веб-сайт GitHub - Docs + Документація Версія - Icons + Іконки Ви скористалися Flow Launcher вже {0} разів Перевірити наявність оновлень - Become A Sponsor + Стати спонсором Доступна нова версія {0}, будь ласка, перезавантажте Flow Launcher - Check updates failed, please check your connection and proxy settings to api.github.com. + Перевірити оновлення не вдалося, будь ласка, перевірте ваше з'єднання та налаштування проксі-сервера до api.github.com. - Download updates failed, please check your connection and proxy settings to github-cloud.s3.amazonaws.com, - or go to https://github.com/Flow-Launcher/Flow.Launcher/releases to download updates manually. + Не вдалося завантажити оновлення, будь ласка, перевірте ваше з'єднання та налаштування проксі-сервера до github-cloud.s3.amazonaws.com, + або перейдіть на https://github.com/Flow-Launcher/Flow.Launcher/releases, аби завантажити оновлення власноруч. Примітки до поточного релізу: - Usage Tips + Поради щодо використання DevTools - Setting Folder - Log Folder - Clear Logs - Are you sure you want to delete all logs? - Wizard + Тека налаштувань + Тека журналу + Очистити журнали + Ви впевнені, що хочете видалити всі журнали? + Чаклун - Select File Manager - Please specify the file location of the file manager you using and add arguments if necessary. The default arguments are "%d", and a path is entered at that location. For example, If a command is required such as "totalcmd.exe /A c:\windows", argument is /A "%d". - "%f" is an argument that represent the file path. It is used to emphasize the file/folder name when opening a specific file location in 3rd party file manager. This argument is only available in the "Arg for File" item. If the file manager does not have that function, you can use "%d". - File Manager - Profile Name - File Manager Path - Arg For Folder - Arg For File + Виберіть файловий менеджер + Будь ласка, вкажіть розташування файлу у файловому менеджері, який ви використовуєте, і додайте аргументи, якщо це необхідно. За замовчуванням аргументами є "%d", і шлях вводиться у вказаному місці. Наприклад, якщо потрібно виконати команду типу "totalcmd.exe /A c:\windows", аргументом буде /A "%d". + "%f" - це аргумент, який представляє шлях до файлу. Він використовується для виділення імені файлу/теки при відкритті певного місця розташування файлу у сторонньому файловому менеджері. Цей аргумент доступний лише у пункті "Аргумент для файлу". Якщо файловий менеджер не має такої функції, ви можете використовувати "%d". + Файловий менеджер + Ім'я профілю + Шлях до файлового менеджера + Аргумент для папки + Аргумент для файлу Веб-браузер за замовчуванням - The default setting follows the OS default browser setting. If specified separately, flow uses that browser. - Browser - Browser Name - Browser Path - New Window - New Tab - Private Mode + Налаштування за замовчуванням відповідають налаштуванню браузера за замовчуванням в операційній системі. Якщо вказано окремо, Flow використовує цей браузер. + Браузер + Назва браузера + Шлях до браузера + Нове вікно + Нова вкладка + Приватний режим - Change Priority - Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number - Please provide an valid integer for Priority! + Змінити пріоритет + Чим більше число, тим вище буде розташований результат. Спробуйте встановити значення 5. Якщо ви хочете, щоб результати показувалися нижче, ніж у будь-якого іншого плагіна, введіть від'ємне число + Будь ласка, вкажіть дійсне ціле число для Пріоритету! Поточна гаряча клавіша @@ -274,26 +274,26 @@ Нова гаряча клавіша не може бути порожньою Нова гаряча клавіша вже використовується іншим плагіном. Будь ласка, вкажіть нову Успішно - Completed successfully + Успішно завершено Введіть гарячу клавішу, яку ви хочете використовувати для запуску плагіна. Використовуйте * у разі, якщо ви не хочете ставити конкретну гарячу клавішу. Задані гарячі клавіші для запитів - Press a custom hotkey to open Flow Launcher and input the specified query automatically. + Натисніть спеціальну гарячу клавішу, щоб відкрити Flow Launcher і автоматично ввести вказаний запит. Переглянути Гаряча клавіша недоступна. Будь ласка, вкажіть нову Недійсна гаряча клавіша плагіна Оновити - 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. + Скорочення вже існує, будь ласка, введіть нове або відредагуйте існуюче. + Скорочення та/або його розширення є порожнім. Гаряча клавіша недоступна @@ -315,64 +315,64 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in Стався збій в додатку Flow Launcher - Please wait... + Будь ласка, зачекайте... - Checking for new update - You already have the latest Flow Launcher version - Update found - Updating... + Перевірка наявності оновлень + Ви вже маєте останню версію Flow Launcher + Оновлення знайдено + Оновлюємо... - Flow Launcher was not able to move your user profile data to the new update version. - Please manually move your profile data folder from {0} to {1} + Flow Launcher не зміг перенести дані вашого профілю користувача до нової актуальної версії. + Будь ласка, перемістіть теку з даними вашого профілю власноруч з {0} до {1} - New Update + Нова версія Доступна нова версія Flow Launcher {0} Сталася помилка під час спроби встановити оновлення Оновити Скасувати - Update Failed - Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com. + Не вдалося оновити + Перевірте з'єднання та спробуйте оновити налаштування проксі до github-cloud.s3.amazonaws.com. Це оновлення перезавантажить Flow Launcher Ці файли будуть оновлені Оновити файли Опис оновлення - Skip - Welcome to Flow Launcher - Hello, this is the first time you are running Flow Launcher! - Before starting, this wizard will assist in setting up Flow Launcher. You can skip this if you wish. Please choose a language - Search and run all files and applications on your PC - Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse. - Flow Launcher starts with the hotkey below, go ahead and try it out now. To change it, click on the input and press the desired hotkey on the keyboard. - Hotkeys - Action Keyword and Commands - Search the web, launch applications or run various functions through Flow Launcher plugins. Certain functions start with an action keyword, and if necessary, they can be used without action keywords. Try the queries below in Flow Launcher. - Let's Start Flow Launcher - Finished. Enjoy Flow Launcher. Don't forget the hotkey to start :) + Пропустити + Ласкаво просимо до Flow Launcher + Вітаємо, ви вперше запускаєте Flow Launcher! + Перед початком роботи цей помічник допоможе налаштувати Flow Launcher. Ви можете пропустити цей крок, якщо бажаєте. Виберіть мову + Пошук та запуск усіх файлів і програм на вашому комп'ютері + Шукайте все: програми, файли, закладки, YouTube, Twitter тощо. І все це за допомогою клавіатури, навіть не торкаючись миші. + Flow Launcher запускається за допомогою наведеної нижче гарячої клавіші, спробуйте натиснути її зараз. Щоб її змінити, клацніть на ввід і натисніть потрібну гарячу клавішу на клавіатурі. + Гаряча клавіша + Ключове слово дії та команди + Шукайте в Інтернеті, запускайте програми або виконуйте різноманітні функції за допомогою плагінів Flow Launcher. Деякі функції починаються з ключового слова дії, але за потреби їх можна використовувати і без нього. Спробуйте наведені нижче запити у Flow Launcher. + Давайте запустимо Flow Launcher + Готово. Насолоджуйтесь Flow Launcher. Не забудьте гарячу клавішу для запуску :) - Back / Context Menu - Item Navigation - Open Context Menu - Open Containing Folder - Run as Admin / Open Folder in Default File Manager - Query History - Back to Result in Context Menu - Autocomplete - Open / Run Selected Item - Open Setting Window - Reload Plugin Data + Назад / Контекстне меню + Навігація елементами + Відкрити контекстне меню + Відкрийте папку, що містить файл + Запустити від імені адміністратора / Відкрити папку у файловому менеджері за замовчуванням + Історія запитів + Повернутися до результату в контекстному меню + Автодоповнення + Відкрити / запустити вибраний елемент + Відкрити вікно налаштувань + Перезавантажити дані плагінів - Weather - Weather in Google Result + Погода + Погода в результатах Google > ping 8.8.8.8 - Shell Command + Команда Shell s Bluetooth - Bluetooth in Windows Settings + Bluetooth у налаштуваннях Windows sn - Sticky Notes + Липкі нотатки diff --git a/Flow.Launcher/Languages/zh-cn.xaml b/Flow.Launcher/Languages/zh-cn.xaml index 92ed8bfea..f3d2609b1 100644 --- a/Flow.Launcher/Languages/zh-cn.xaml +++ b/Flow.Launcher/Languages/zh-cn.xaml @@ -288,9 +288,9 @@ 自定义查询捷径 输入一个捷径,它将自动展开为一个查询。 - 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. +如果您在输入捷径时添加一个“@”前缀,它将匹配查询中的任意位置。 内置捷径同样匹配查询中的任意位置。 捷径已存在,请输入一个新的或者编辑已有的。 捷径及其展开均不能为空。 diff --git a/Flow.Launcher/MainWindow.axaml.cs b/Flow.Launcher/MainWindow.axaml.cs index 30500b117..153df46ff 100644 --- a/Flow.Launcher/MainWindow.axaml.cs +++ b/Flow.Launcher/MainWindow.axaml.cs @@ -30,6 +30,7 @@ using MouseButton = System.Windows.Input.MouseButton; using RoutedEventArgs = Avalonia.Interactivity.RoutedEventArgs; using Thickness = System.Windows.Thickness; using Window = Avalonia.Controls.Window; +using DataObject = System.Windows.DataObject; namespace Flow.Launcher { @@ -56,7 +57,7 @@ namespace Flow.Launcher _settings = settings; InitializeComponent(); - // InitializePosition(); + // InitializePosition();DataObject.AddPastingHandler(QueryTextBox, OnPaste); } public MainWindow() @@ -88,6 +89,19 @@ namespace Flow.Launcher // } // } + private void OnPaste(object sender, DataObjectPastingEventArgs e) + { + var isText = e.SourceDataObject.GetDataPresent(System.Windows.DataFormats.UnicodeText, true); + if (isText) + { + var text = e.SourceDataObject.GetData(System.Windows.DataFormats.UnicodeText) as string; + text = text.Replace(Environment.NewLine, " "); + DataObject data = new DataObject(); + data.SetData(System.Windows.DataFormats.UnicodeText, text); + e.DataObject = data; + } + } + public async void OnClosing(object sender, CancelEventArgs e) { _notifyIcon.Visible = false; diff --git a/Flow.Launcher/Properties/AssemblyInfo.cs b/Flow.Launcher/Properties/AssemblyInfo.cs index 93ce37f2b..c2ee533d1 100644 --- a/Flow.Launcher/Properties/AssemblyInfo.cs +++ b/Flow.Launcher/Properties/AssemblyInfo.cs @@ -1,4 +1,5 @@ -using System.Windows; +using System.Reflection; +using System.Windows; [assembly: ThemeInfo( ResourceDictionaryLocation.None, diff --git a/Flow.Launcher/PublicAPIInstance.cs b/Flow.Launcher/PublicAPIInstance.cs index c09c49bd5..047c550ea 100644 --- a/Flow.Launcher/PublicAPIInstance.cs +++ b/Flow.Launcher/PublicAPIInstance.cs @@ -4,7 +4,6 @@ using System.Linq; using System.Net; using System.Threading.Tasks; using System.Windows; -using Squirrel; using Flow.Launcher.Core.Plugin; using Flow.Launcher.Core.Resource; using Flow.Launcher.Helper; @@ -43,7 +42,7 @@ namespace Flow.Launcher _settingsVM = settingsVM; _mainVM = mainVM; _alphabet = alphabet; - GlobalHotkey.hookedKeyboardCallback = KListener_hookedKeyboardCallback; + GlobalHotkey.hookedKeyboardCallback = KListenerHookedKeyboardCallback; WebRequest.RegisterPrefix("data", new DataWebRequestFactory()); } @@ -64,11 +63,8 @@ namespace Flow.Launcher // UpdateManager.RestartApp() will call Environment.Exit(0) // which will cause ungraceful exit SaveAppAllSettings(); - - // Restart requires Squirrel's Update.exe to be present in the parent folder, - // it is only published from the project's release pipeline. When debugging without it, - // the project may not restart or just terminates. This is expected. - UpdateManager.RestartApp(Constant.ApplicationFileName); + + SingleInstance.Restart(); } public void ShowMainWindow() => _mainVM.Show(); @@ -325,12 +321,12 @@ namespace Flow.Launcher #region Private Methods - private bool KListener_hookedKeyboardCallback(KeyEvent keyevent, int vkcode, SpecialKeyState state) + private bool KListenerHookedKeyboardCallback(KeyEvent keyEvent, int vkCode, SpecialKeyState state) { var continueHook = true; foreach (var x in _globalKeyboardHandlers) { - continueHook &= x((int)keyevent, vkcode, state); + continueHook &= x((int)keyEvent, vkCode, state); } return continueHook; diff --git a/Flow.Launcher/ViewModels/MainViewModel.cs b/Flow.Launcher/ViewModels/MainViewModel.cs index ed04af731..56c74e4c5 100644 --- a/Flow.Launcher/ViewModels/MainViewModel.cs +++ b/Flow.Launcher/ViewModels/MainViewModel.cs @@ -37,6 +37,8 @@ namespace Flow.Launcher.ViewModel private bool _isQueryRunning; private Query _lastQuery; + private Result lastContextMenuResult = new Result(); + private List lastContextMenuResults = new List(); private string _queryTextBeforeLeaveResults; private readonly FlowLauncherJsonStorage _historyItemsStorage; @@ -253,6 +255,13 @@ namespace Flow.Launcher.ViewModel } else if (!string.IsNullOrEmpty(SelectedResults.SelectedItem?.QuerySuggestionText)) { + var defaultSuggestion = SelectedResults.SelectedItem.QuerySuggestionText; + // check if result.actionkeywordassigned is empty + if (!string.IsNullOrEmpty(result.ActionKeywordAssigned)) + { + autoCompleteText = $"{result.ActionKeywordAssigned} {defaultSuggestion}"; + } + autoCompleteText = SelectedResults.SelectedItem.QuerySuggestionText; } @@ -361,6 +370,17 @@ namespace Flow.Launcher.ViewModel { GameModeStatus = !GameModeStatus; } + + [RelayCommand] + public void CopyAlternative() + { + var result = Results.SelectedItem?.Result?.CopyText; + + if (result != null) + { + App.API.CopyToClipboard(result, directCopy: false); + } + } #endregion @@ -653,9 +673,33 @@ namespace Flow.Launcher.ViewModel if (selected != null) // SelectedItem returns null if selection is empty. { - var results = PluginManager.GetContextMenusForPlugin(selected); - results.Add(ContextMenuTopMost(selected)); - results.Add(ContextMenuPluginInfo(selected.PluginID)); + List results; + if (selected == lastContextMenuResult) + { + // Use copy to keep the original results unchanged + results = lastContextMenuResults.ConvertAll(result => new Result + { + Title = result.Title, + SubTitle = result.SubTitle, + IcoPath = result.IcoPath, + PluginDirectory = result.PluginDirectory, + Action = result.Action, + ContextData = result.ContextData, + Glyph = result.Glyph, + OriginQuery = result.OriginQuery, + Score = result.Score, + AsyncAction = result.AsyncAction, + }); + } + else + { + results = PluginManager.GetContextMenusForPlugin(selected); + lastContextMenuResults = results; + lastContextMenuResult = selected; + results.Add(ContextMenuTopMost(selected)); + results.Add(ContextMenuPluginInfo(selected.PluginID)); + } + if (!string.IsNullOrEmpty(query)) { @@ -861,7 +905,8 @@ namespace Flow.Launcher.ViewModel StringBuilder queryBuilder = new(queryText); StringBuilder queryBuilderTmp = new(queryText); - foreach (var shortcut in customShortcuts) + // Sorting order is important here, the reason is for matching longest shortcut by default + foreach (var shortcut in customShortcuts.OrderByDescending(x => x.Key.Length)) { if (queryBuilder.Equals(shortcut.Key)) { @@ -1028,6 +1073,8 @@ namespace Flow.Launcher.ViewModel { // Trick for no delay MainWindowOpacity = 0; + lastContextMenuResult = new Result(); + lastContextMenuResults = new List(); if (!SelectedIsFromQueryResults()) { diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs index 14b791c48..8ce597b30 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs @@ -2,12 +2,14 @@ using System.Collections.Generic; using System.IO; using System.Text.Json; +using Flow.Launcher.Infrastructure.Logger; namespace Flow.Launcher.Plugin.BrowserBookmark { public abstract class ChromiumBookmarkLoader : IBookmarkLoader { public abstract List GetBookmarks(); + protected List LoadBookmarks(string browserDataPath, string name) { var bookmarks = new List(); @@ -19,53 +21,75 @@ namespace Flow.Launcher.Plugin.BrowserBookmark var bookmarkPath = Path.Combine(profile, "Bookmarks"); if (!File.Exists(bookmarkPath)) continue; - + Main.RegisterBookmarkFile(bookmarkPath); var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})"); bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source)); } + return bookmarks; } protected List LoadBookmarksFromFile(string path, string source) { - if (!File.Exists(path)) - return new(); - var bookmarks = new List(); + + if (!File.Exists(path)) + return bookmarks; + using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path)); if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement)) - return new(); - foreach (var folder in rootElement.EnumerateObject()) - { - if (folder.Value.ValueKind == JsonValueKind.Object) - EnumerateFolderBookmark(folder.Value, bookmarks, source); - } + return bookmarks; + EnumerateRoot(rootElement, bookmarks, source); return bookmarks; } - private void EnumerateFolderBookmark(JsonElement folderElement, List bookmarks, string source) + private void EnumerateRoot(JsonElement rootElement, ICollection bookmarks, string source) + { + foreach (var folder in rootElement.EnumerateObject()) + { + if (folder.Value.ValueKind != JsonValueKind.Object) + continue; + + // Fix for Opera. It stores bookmarks slightly different than chrome. See PR and bug report for this change for details. + // If various exceptions start to build up here consider splitting this Loader into multiple separate ones. + if (folder.Name == "custom_root") + EnumerateRoot(folder.Value, bookmarks, source); + else + EnumerateFolderBookmark(folder.Value, bookmarks, source); + } + } + + private void EnumerateFolderBookmark(JsonElement folderElement, ICollection bookmarks, + string source) { if (!folderElement.TryGetProperty("children", out var childrenElement)) return; foreach (var subElement in childrenElement.EnumerateArray()) { - switch (subElement.GetProperty("type").GetString()) + if (subElement.TryGetProperty("type", out var type)) { - case "folder": - case "workspace": // Edge Workspace - EnumerateFolderBookmark(subElement, bookmarks, source); - break; - default: - bookmarks.Add(new Bookmark( - subElement.GetProperty("name").GetString(), - subElement.GetProperty("url").GetString(), - source)); - break; + switch (type.GetString()) + { + case "folder": + case "workspace": // Edge Workspace + EnumerateFolderBookmark(subElement, bookmarks, source); + break; + default: + bookmarks.Add(new Bookmark( + subElement.GetProperty("name").GetString(), + subElement.GetProperty("url").GetString(), + source)); + break; + } + } + else + { + Log.Error( + $"ChromiumBookmarkLoader: EnumerateFolderBookmark: type property not found for {subElement.GetString()}"); } } - } } } diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj index fca53f0bd..2846e605a 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj @@ -56,7 +56,7 @@ - + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-br.xaml index 18fed7cd7..d8bb949fd 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pt-br.xaml @@ -6,7 +6,7 @@ Pesquisar favoritos do seu navegador - Dados de Favorito + Dados de Favoritos Abrir favoritos em: Nova janela Nova aba @@ -21,8 +21,8 @@ Editar Apagar Navegar - Others - Browser Engine - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + Outros + Motor do Navegador + Se você não estiver usando o Chrome, Firefox ou Edge, ou se estiver usando suas versões portáteis, você precisa adicionar o diretório de dados dos favoritos e selecionar a ferramenta de busca correta para fazer este plugin funcionar. + Por exemplo: O motor do Brave é o Chromium; e seu diretório padrão de favoritos é "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". Para o motor do Firefox, o diretório de favoritos é a pasta do usuário que contém o arquivo "places.sqlite". diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml index a55b9de1b..93b20366e 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/uk-UA.xaml @@ -2,27 +2,27 @@ - Browser Bookmarks - Search your browser bookmarks + Закладки браузера + Пошук у закладках браузера - Bookmark Data - Open bookmarks in: - New window - New tab - Set browser from path: - Choose - Copy url - Copy the bookmark's url to clipboard - Load Browser From: - Browser Name - Data Directory Path + Дані закладок + Відкрити закладки в: + Нове вікно + Нова вкладка + Встановити браузер за шляхом: + Обрати + Скопіювати URL-адресу + Скопіюйте URL-адресу закладки в буфер обміну + Завантажити браузер з: + Назва браузера + Шлях до каталогу з даними Додати Редагувати Видалити - Browse - Others - Browser Engine - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + Перегляд + Інші + Браузерний рушій + Якщо ви не використовуєте Chrome, Firefox або Edge, або використовуєте їхні портативні версії, вам потрібно додати каталог даних закладок і вибрати правильний рушій браузера, щоб цей плагін працював. + Наприклад: Рушій Brave - Chromium, і за замовчуванням розташування даних закладок: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". Для браузера Firefox директорія закладок - це папка userdata, що містить файл places.sqlite. diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json index d6dca1b88..0778b7ae5 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json @@ -4,7 +4,7 @@ "Name": "Browser Bookmarks", "Description": "Search your browser bookmarks", "Author": "qianlifeng, Ioannis G.", - "Version": "3.1.4", + "Version": "3.1.5", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml index 15598118c..014755929 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/uk-UA.xaml @@ -1,15 +1,15 @@  - Calculator - Allows to do mathematical calculations.(Try 5*3-2 in Flow Launcher) - Not a number (NaN) - Expression wrong or incomplete (Did you forget some parentheses?) - Copy this number to the clipboard - Decimal separator - The decimal separator to be used in the output. - Use system locale - Comma (,) - Dot (.) - Max. decimal places + Калькулятор + Дозволяє виконувати математичні обчислення (спробуйте 5*3-2 у Flow Launcher) + Не є числом (NaN) + Вираз неправильний або неповний (Ви забули якісь дужки?) + Скопіюйте це число в буфер обміну + Десятковий роздільник + Десятковий роздільник, який буде використовуватися у виведенні. + Використовувати системну локаль + Кома (,) + Крапка (.) + Макс. кількість знаків після коми diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json index 2bba6341c..a77475460 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json @@ -4,7 +4,7 @@ "Name": "Calculator", "Description": "Provide mathematical calculations.(Try 5*3-2 in Flow Launcher)", "Author": "cxfksword", - "Version": "3.0.3", + "Version": "3.1.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Caculator.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml index 52aed4b9a..ad83e6e05 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml index 1ab9da4b7..83334b9b1 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml @@ -100,7 +100,9 @@ Odstranit z Rychlého přístupu Odstranit aktuální položku z rychlého přístupu Zobrazit kontextové menu Windows - + Open With + Select a program to open with + Volných {0} z {1} Otevřít ve výchozím správci souborů diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml index ba2152e61..9dfbb94a1 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml index dc97980fd..1bae42c77 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml @@ -2,18 +2,18 @@ - Please make a selection first + Zuerst eine Auswahl treffen Bitte wähle eine Ordnerverknüpfung Bist du sicher {0} zu löschen? Sind Sie sicher, dass Sie diese Datei dauerhaft löschen möchten? Are you sure you want to permanently delete this file/folder? - Deletion successful + Löschen erfolgreich Successfully deleted {0} - Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword - Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword - The required service for Windows Index Search does not appear to be running - To fix this, start the Windows Search service. Select here to remove this warning - The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return + Die Zuweisung des globalen Aktions-Schlüsselwortes könnte zu viele Ergebnisse bei der Suche hervorrufen. Bitte wählen Sie ein spezielles Aktionswort + Schnellzugriff kann nicht auf das globale Aktionswort gesetzt werden, wenn aktiviert. Bitte wählen Sie ein spezielles Aktionswort + Der benötigte Dienst für Windows Indexsuche scheint nicht ausgeführt zu werden + Um dies zu beheben, starten Sie den Windows-Suchdienst. Klicken Sie hier, um diese Warnung zu entfernen + Die Warnmeldung wurde ausgeschaltet. Möchten Sie als Alternative für die Suche nach Dateien und Ordnern das Plugin Everything installieren?{0}{0}Wählen Sie 'Ja', um das Plugin Everything zu installieren, oder 'Nein', um zurückzukehren Explorer Alternative Error occurred during search: {0} Could not open folder @@ -24,28 +24,28 @@ Bearbeiten Hinzufügen General Setting - Customise Action Keywords - Quick Access Links + Aktions-Schlüsselwörter ändern + Schnellzugriff-Links Everything Setting Sort Option: Everything Path: Launch Hidden Editor pad Shell Path - Index Search Excluded Paths + Indexsuche ausgeschlossen Pfade Verwenden Suchergebnis Standort als ausführbare Arbeitsverzeichnis Hit Enter to open folder in Default File Manager Use Index Search For Path Search - Indexing Options + Indexierungsoptionen Suche: Pfad-Suche: Suche nach Dateiinhalten: Index-Suche: Schnellzugriff: - Current Action Keyword + Aktuelles Aktions-Schlüsselwort Fertig Aktiviert - When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword + Wenn diese Funktion deaktiviert ist, führt Flow diese Suchoption nicht aus und kehrt zusätzlich zu '*' zurück, um das Aktionsschlüsselwort freizugeben Everything Windows Index Direct Enumeration @@ -78,18 +78,18 @@ Ausgewählte löschen Als anderer Benutzer ausführen Ausgewählte mit einem anderen Benutzerkonto ausführen - Open containing folder + Enthaltenden Ordner öffnen Open the location that contains current item - Open With Editor: + Öffnen mit Editor: Failed to open file at {0} with Editor {1} at {2} Open With Shell: Failed to open folder {0} with Shell {1} at {2} - Exclude current and sub-directories from Index Search - Excluded from Index Search - Open Windows Indexing Options - Manage indexed files and folders - Failed to open Windows Indexing Options - Add to Quick Access + Aktuelles und Unterverzeichnisse von der Indexsuche ausschließen + Von der Indexsuche ausgeschlossen + Windows Indexoptionen öffnen + Indexierte Dateien und Ordner verwalten + Fehler beim Öffnen der Windows-Indexierungsoptionen + Zu Schnellzugriff hinzufügen Add current item to Quick Access Successfully Added Successfully added to Quick Access @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Öffnen mit + Programm zum Öffnen auswählen + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml index ff1773c71..2d23b315e 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml index 51b3e831b..ad5d7c31a 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml @@ -4,7 +4,7 @@ Por favor haga una selección primero Por favor, seleccione un enlace de carpeta - ¿Está seguro que desea eliminar {0}? + ¿Está seguro de que desea eliminar {0}? ¿Está seguro que desea eliminar permanentemente este archivo? ¿Está seguro de que desea eliminar permanentemente este/esta archivo/carpeta? Eliminación correcta @@ -100,7 +100,9 @@ Eliminar del acceso rápido Elimina elemento actual del acceso rápido Mostrar menú contextual de Windows - + Abrir con + Seleccione un programa para abrir con + {0} libre de {1} Abrir en administrador de archivos predeterminado diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml index e4e1f9cb2..adad69af4 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml @@ -100,7 +100,9 @@ Supprimer de l'accès rapide Supprimer l'élément de l'accès rapide Afficher le menu contextuel de Windows - + Ouvrir avec + Sélectionnez un programme à ouvrir avec + {0} libres sur {1} Ouvrir dans le gestionnaire de fichiers par défaut diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml index 79143d27d..f69f15868 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml @@ -5,37 +5,37 @@ Effettua prima una selezione Si prega di selezionare un collegamento alla cartella Sei sicuro di voler eliminare {0}? - Are you sure you want to permanently delete this file? - Are you sure you want to permanently delete this file/folder? + Sei sicuro di voler eliminare definitivamente questo file? + Sei sicuro di voler eliminare definitivamente questo/a file/cartella? Eliminato con successo - Successfully deleted {0} + {0} eliminato correttamente L'assegnazione della parola chiave globale potrebbe portare a troppi risultati durante la ricerca. Scegli una parola chiave specifica per l'azione L'accesso rapido non può essere impostato sulla parola chiave globale quando abilitata. Si prega di scegliere una parola chiave specifica Il servizio richiesto per Windows Index Search non sembra essere in esecuzione Per risolvere il problema, avvia il servizio Ricerca Windows. Seleziona qui per rimuovere questo avviso Il messaggio di avviso è stato spento. In alternativa per la ricerca di file e cartelle, vuoi installare il plugin Everything?{0}{0} Seleziona 'Sì' per installare il plugin Everything, o 'No' per tornare Alternativa all'Esplora Risorse - Error occurred during search: {0} - Could not open folder - Could not open file + Errore durante la ricerca: {0} + Impossibile aprire la cartella + Impossibile aprire il file Cancella Modifica Aggiungi - General Setting + Impostazione Generale Personalizza Parola Chiave Collegamenti ad Accesso Rapido - Everything Setting - Sort Option: - Everything Path: - Launch Hidden + Impostazioni di Everything + Opzioni di ordinamento: + Percorso di Everything: + Avvia nascosto Tasto di accesso rapido alla finestra - Shell Path + Percorso Shell Percorsi Esclusi dall'Indice di Ricerca Utilizza il percorso ottenuto dalla ricerca come cartella di lavoro - Hit Enter to open folder in Default File Manager - Use Index Search For Path Search + Premi Invio per aprire la cartella nel gestore file predefinito + Usa Indice di Ricerca per la Ricerca Percorso Opzioni di Indicizzazione Cerca: Ricerca Percorso: @@ -47,50 +47,50 @@ Abilitato Quando disabilitato Flow non eseguirà questa opzione di ricerca, e ripristinerà a "*" per liberare la parola chiave Tutto - Windows Index - Direct Enumeration + Indice Di Windows + Enumerazione Diretta Percorso dell'editor di file Percorso dell'editor delle cartelle - Content Search Engine - Directory Recursive Search Engine - Index Search Engine - Open Windows Index Option + Motore di Ricerca dei Contenuti + Motore di Ricerca Ricorsivo sulle Catelle + Indice del Motore di Ricerca + Apri Opzioni di Indicizzazione di Windows Esplora Risorse - Find and manage files and folders via Windows Search or Everything + Trova e gestisci file e cartelle tramite Ricerca di Windows o Everything - Ctrl + Enter to open the directory - Ctrl + Enter to open the containing folder + Ctrl + Invio per aprire la cartella + Ctrl + Invio per aprire la cartella che lo contiene Copia percorso - Copy path of current item to clipboard + Copia negli appunti il percorso dell'elemento corrente Copia - Copy current file to clipboard - Copy current folder to clipboard + Copia file corrente negli appunti + Copia cartella corrente negli appunti Cancella - Permanently delete current file - Permanently delete current folder + Elimina permanentemente il file corrente + Elimina definitivamente la cartella corrente Percorso: Elimina il selezionato Esegui come utente differente Esegui la selezione utilizzando un altro account utente Apri percorso file - Open the location that contains current item + Apri la posizione che contiene l'elemento corrente Apri nell'Editor: - Failed to open file at {0} with Editor {1} at {2} - Open With Shell: - Failed to open folder {0} with Shell {1} at {2} + Apertura del file in {0} con l'editor {1} in {2} non riuscita + Apri Con Shell: + Apertura della cartella {0} con Shell {1} in {2} non riuscita Escludi cartelle e sottocartelle dall'Indice di Ricerca Escludi dall'Indice di Ricerca Apri Opzioni di Indicizzazione di Windows Gestisci file e cartelle indicizzati Impossibile aprire le Opzioni di Indicizzazione di Windows Aggiungi ad Accesso Rapido - Add current item to Quick Access + Aggiungi elemento corrente all'Accesso Rapido Aggiunto con successo Aggiunto con successo ad Accesso Rapido Rimosso con Successo @@ -98,20 +98,22 @@ Aggiungi ad Accesso Rapido in modo che possa essere aperto con la parola chiave di ricerca dell'Esplora Risorse Rimuovi da Accesso Rapido Rimuovi da Accesso Rapido - Remove current item from Quick Access - Show Windows Context Menu - + Rimuovi elemento corrente dall'Accesso Rapido + Mostra Menu Contestuale di Windows + Open With + Select a program to open with + - {0} free of {1} - Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + {0} disponibili su {1} + Aprire con il Gestore File Predefinito + Usa '>' per cercare in questa directory, '*' per cercare estensioni file o '>*' per combinare entrambe le ricerche. - Failed to load Everything SDK + Impossibile caricare l'SDK di Everything Attenzione: Il servizio "Everything" non è in esecuzione Errore nell'interrogazione di Everything Ordina per - Name + Nome Percorso Dimensioni Estensione @@ -128,16 +130,16 @@ Attenzione: Questa non è un'opzione di ordinamento rapido, le ricerche potrebbero essere lente - Search Full Path + Cerca Percorso Completo - Click to launch or install Everything + Clicca per avviare o installare Everything Installazione di Everything Installazione di everything. Si prega di attendere... Everything è stato installato con successo Impossibile installare automaticamente il servizio Everything. Si prega di installarlo manualmente da https://www.voidtools.com Premi per avviare Impossibile trovare l'installazione di Everything, vuoi inserire manualmente un percorso? {0} {0} Premi no per installare automaticamente Everything - Do you want to enable content search for Everything? - It can be very slow without index (which is only supported in Everything v1.5+) + Vuoi abilitare la ricerca di contenuti per Everything? + Può essere molto lento senza indice (che è supportato solo in Everything v1.5+) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml index bb831b003..d582424ed 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml index 627338473..37a096f09 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml @@ -100,7 +100,9 @@ 빠른 접근에서 제거 이 항목을 빠른 접근에서 제거 우클릭 메뉴 보기 - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml index 0fe4db467..a5fd6c0c4 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml index 3649a2308..a7a993b37 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml index d42f1067e..13d9cf731 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml @@ -2,10 +2,10 @@ - Please make a selection first + Pierw dokonaj wyboru Musisz wybrać któryś folder z listy Czy jesteś pewien że chcesz usunąć {0}? - Are you sure you want to permanently delete this file? + Jesteś pewny, że chcesz usunąć ten plik trwale? Are you sure you want to permanently delete this file/folder? Deletion successful Successfully deleted {0} @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml index 4b8865b84..8e5761345 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml index b3d772498..193ae0dd9 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml @@ -100,7 +100,9 @@ Remover do acesso rápido Remover item do Acesso rápido Mostrar menu de contexto do Windows - + Abrir com + Selecione o programa a utilizar + {0} livre de {1} no total Abrir no gestor de ficheiros padrão diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml index 73bd620e9..cb7f2cda5 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml @@ -3,13 +3,13 @@ Сначала отметьте что-нибудь - Please select a folder link + Пожалуйста, выберите ссылку на папку Вы уверены, что хотите удалить {0}? Вы действительно хотите безвозвратно удалить этот файл? Вы действительно хотите безвозвратно удалить этот файл/папку? Удаление завершено Успешно удалено {0} - Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword + Назначение ключевого слова глобальных действий может привести к слишком большому количеству результатов поиска. Пожалуйста, выберите конкретное ключевое слово действий Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword The required service for Windows Index Search does not appear to be running To fix this, start the Windows Search service. Select here to remove this warning @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml index 47aa83ffd..e926735b8 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml @@ -100,7 +100,9 @@ Odstráni z Rýchleho prístupu Odstrániť aktuálnu položku z Rýchleho prístupu Zobraziť kontextovú ponuku Windowsu - + Otvoriť s + Vyberte program, ktorým chcete otvoriť súbor + Voľných {0} z {1} Otvoriť v predvolenom správcovi súborov diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml index 38aa39f94..2b6f087af 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml index b91297563..2c90a7720 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml @@ -100,7 +100,9 @@ Remove from Quick Access Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml index 6d5ca1bb4..9909bf9c5 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml @@ -2,142 +2,144 @@ - Please make a selection first - Please select a folder link - Are you sure you want to delete {0}? - Are you sure you want to permanently delete this file? - Are you sure you want to permanently delete this file/folder? - Deletion successful - Successfully deleted {0} - Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword - Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword - The required service for Windows Index Search does not appear to be running - To fix this, start the Windows Search service. Select here to remove this warning - The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return - Explorer Alternative - Error occurred during search: {0} - Could not open folder - Could not open file + Будь ласка, спочатку зробіть вибір + Будь ласка, оберіть посилання на теку + Ви впевнені, що хочете видалити {0}? + Ви впевнені, що хочете назавжди видалити цей файл? + Ви впевнені, що хочете назавжди видалити цей файл/теку? + Видалення виконано успішно + Успішно видалено {0} + Використання глобального ключового слова дії може призвести до надмірної кількості результатів під час пошуку. Будь ласка, виберіть конкретне ключове слово дії + Швидкий доступ не може бути встановлений на глобальне ключове слово дії, коли він увімкнений. Будь ласка, виберіть конкретне ключове слово дії + Здається, не запущено потрібну службу для індексного пошуку Windows + Щоб виправити це, запустіть службу пошуку Windows. Натисніть тут, щоб прибрати це попередження + Попередження вимкнено. Як альтернативу для пошуку файлів і папок, чи бажаєте ви встановити плагін Everything? {0}{0}Виберіть "Так", щоб встановити плагін Everything, або "Ні", щоб повернутися + Альтернативний провідник + Виникла помилка під час пошуку: {0} + Не вдалося відкрити папку + Не вдалося відкрити файл Видалити Редагувати Додати - General Setting - Customise Action Keywords - Quick Access Links - Everything Setting - Sort Option: - Everything Path: - Launch Hidden - Editor Path - Shell Path - Index Search Excluded Paths - Use search result's location as the working directory of the executable - Hit Enter to open folder in Default File Manager - Use Index Search For Path Search - Indexing Options - Search: - Path Search: - File Content Search: - Index Search: - Quick Access: - Current Action Keyword + Загальні налаштування + Налаштувати ключові слова дії + Посилання швидкого доступу + Налаштування Everything + Варіант сортування: + Шлях до Everything: + Запустити приховано + Шлях до редактора + Шлях до оболонки Shell + Виключені шляхи індексного пошуку + Використовувати розташування результату пошуку як робочу директорію виконуваного файлу + Натисніть Enter, щоб відкрити папку у файловому менеджері за замовчуванням + Використовуйте індексний пошук для пошуку шляху + Параметри індексації + Пошук: + Пошук шляху: + Пошук вмісту файлу: + Індексний пошук: + Швидкий доступ: + Поточне ключове слово дії Готово - Enabled - When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword + Увімкнено + Якщо вимкнено, Flow не виконуватиме цю опцію пошуку і додатково повернеться до '*', щоб звільнити ключове слово дії Everything - Windows Index - Direct Enumeration + Індекс Windows + Пряме перерахування Шлях редактора файлів Шлях редактора папок - Content Search Engine - Directory Recursive Search Engine - Index Search Engine - Open Windows Index Option + Пошукова система контенту + Рекурсивна пошукова система за каталогом + Пошукова система індексів + Відкрити параметри індексування Windows - Explorer - Find and manage files and folders via Windows Search or Everything + Провідник + Пошук і керування файлами та папками за допомогою програми "Пошук" або "Everything" - Ctrl + Enter to open the directory - Ctrl + Enter to open the containing folder + Ctrl + Enter, щоб відкрити каталог + Ctrl + Enter, щоб відкрити відповідну папку - Copy path - Copy path of current item to clipboard - Copy - Copy current file to clipboard - Copy current folder to clipboard + Копіювати шлях + Копіювати шлях до поточного елемента в буфер обміну + Копіювати + Копіювання поточного файлу в буфер обміну + Копіювати поточну папку в буфер обміну Видалити - Permanently delete current file - Permanently delete current folder - Path: - Delete the selected - Run as different user - Run the selected using a different user account - Open containing folder - Open the location that contains current item - Open With Editor: - Failed to open file at {0} with Editor {1} at {2} - Open With Shell: - Failed to open folder {0} with Shell {1} at {2} - Exclude current and sub-directories from Index Search - Excluded from Index Search - Open Windows Indexing Options - Manage indexed files and folders - Failed to open Windows Indexing Options - Add to Quick Access - Add current item to Quick Access - Successfully Added - Successfully added to Quick Access - Successfully Removed - Successfully removed from Quick Access - Add to Quick Access so it can be opened with Explorer's Search Activation action keyword - Remove from Quick Access - Remove from Quick Access - Remove current item from Quick Access - Show Windows Context Menu - + Безповоротно видалити поточний файл + Назавжди видалити поточну папку + Шлях: + Видалити вибране + Запустити від імені іншого користувача + Запустити вибране під обліковим записом іншого користувача + Відкрити папку + Відкрийте місце, яке містить поточний елемент + Відкрити за допомогою редактора: + Не вдалося відкрити файл за адресою {0} за допомогою редактора {1} на {2} + Відкрий за допомогою Shell: + Не вдалося відкрити папку {0} за допомогою Shell {1} за адресою {2} + Виключити поточні та вкладені каталоги з індексного пошуку + Виключено з індексного пошуку + Відкрити параметри індексування Windows + Керування проіндексованими файлами та папками + Не вдалося відкрити параметри індексування Windows + Додати до Швидкого доступу + Додати поточний елемент до швидкого доступу + Успішно додано + Успішно додано до швидкого доступу + Успішно вилучено + Успішно видалено з швидкого доступу + Додати до швидкого доступу, щоб його можна було відкрити за допомогою ключового слова дії "Активація пошуку" у Провіднику + Видалити зі швидкого доступу + Видалити зі швидкого доступу + Видалити поточний елемент зі швидкого доступу + Показати контекстне меню Windows + Відкрити за допомогою + Виберіть програму для відкриття + - {0} free of {1} - Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + {0} не містить {1} + Відкрити у файловому менеджері за замовчуванням + Використовуйте '>' для пошуку в цьому каталозі, '*' для пошуку за розширеннями файлів або '>*' для поєднання обох варіантів пошуку. - Failed to load Everything SDK - Warning: Everything service is not running - Error while querying Everything - Sort By - Name - Path - Size - Extension - Type Name - Date Created - Date Modified - Attributes - File List FileName - Run Count - Date Recently Changed - Date Accessed - Date Run + Не вдалося завантажити Everything SDK + Попередження: Служба Everything не запущена + Помилка при виконанні запиту Everything + Сортувати за + Назва + Шлях + Розмір + Розширення + Назва типу + Дата створення + Дата останньої зміни + Атрибути + Список файлів FileName + Кількість запусків + Дата нещодавно змінена + Дата доступу + Дата запуску - Warning: This is not a Fast Sort option, searches may be slow + Попередження: Це не швидке сортування, пошук може бути повільним - Search Full Path + Шукати повний шлях - Click to launch or install Everything - Everything Installation - Installing Everything service. Please wait... - Successfully installed Everything service - Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com - Click here to start it - Unable to find an Everything installation, would you like to manually select a location?{0}{0}Click no and Everything will be automatically installed for you - Do you want to enable content search for Everything? - It can be very slow without index (which is only supported in Everything v1.5+) + Натисніть, щоб запустити або встановити Everything + Встановлення програми Everything + Встановлення служби Everything. Будь ласка, зачекайте... + Успішно встановлено сервіс Everything + Не вдалося автоматично встановити службу Everything. Будь ласка, встановіть її вручну з https://www.voidtools.com + Натисніть тут, щоб розпочати + Не вдалося знайти інсталяцію Everything, бажаєте вручну вибрати розташування? {0}{0}Натисніть "ні", і Everything буде автоматично інстальовано для вас + Бажаєте увімкнути пошук контенту для Everything? + Без індексу (який підтримується лише у версії Everything v1.5+) воно може працювати дуже повільно diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml index 15dc9cea4..2899c77c6 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml @@ -100,7 +100,9 @@ 从快速访问中删除 从快速访问中移除当前结果 显示 Windows 上下文菜单 - + Open With + Select a program to open with + {0} 可用,共 {1} 在默认文件管理器中打开 diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml index 8f63eb659..d60f1f09d 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml @@ -100,7 +100,9 @@ 從快速訪問中移除 Remove current item from Quick Access Show Windows Context Menu - + Open With + Select a program to open with + {0} free of {1} Open in Default File Manager diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndex.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndex.cs index de565f9bd..66230937c 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndex.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/WindowsIndex.cs @@ -16,7 +16,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.WindowsIndex { // Reserved keywords in oleDB - private static Regex _reservedPatternMatcher = new(@"[`\@\@\#\#\*\^,\&\&\/\\\$\%_;\[\]]+", RegexOptions.Compiled); + private static Regex _reservedPatternMatcher = new(@"^[`\@\@\#\#\*\^,\&\&\/\\\$\%_;\[\]]+$", RegexOptions.Compiled); private static async IAsyncEnumerable ExecuteWindowsIndexSearchAsync(string indexQueryString, string connectionString, [EnumeratorCancellation] CancellationToken token) { diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json index 53d4049e6..fac4621b0 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Explorer/plugin.json @@ -10,7 +10,7 @@ "Name": "Explorer", "Description": "Find and manage files and folders via Windows Search or Everything", "Author": "Jeremy Wu", - "Version": "3.1.4", + "Version": "3.1.5", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll", diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/it.xaml index 9590cdf33..6cea2bb55 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/it.xaml @@ -1,7 +1,7 @@  - Activate {0} plugin action keyword + Attiva la parola chiave del plugin {0} Indicatore Plugin Fornisce suggerimenti sulle parole d'azione dei plugin diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/uk-UA.xaml index 893948d3d..e5398e6e0 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/Languages/uk-UA.xaml @@ -1,9 +1,9 @@  - Activate {0} plugin action keyword + Активувати {0} ключове слово дії плагіна - Plugin Indicator - Provides plugins action words suggestions + Індикатор плагіну + Надає плагінам пропозиції щодо слів дії diff --git a/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json index 98aac405a..d682ee7c8 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginIndicator/plugin.json @@ -4,7 +4,7 @@ "Name": "Plugin Indicator", "Description": "Provides plugin action keyword suggestions", "Author": "qianlifeng", - "Version": "3.0.2", + "Version": "3.0.3", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginIndicator.dll", diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml index 2f31b62cd..ca5d964ab 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ar.xaml @@ -6,7 +6,9 @@ Successfully downloaded {0} Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml index e2303c925..1351e69cb 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/cs.xaml @@ -6,7 +6,9 @@ Úspěšně staženo {0} Chyba: Nepodařilo se stáhnout plugin {0} z {1} {2}{3}Chcete odinstalovat tento plugin? Flow se po odinstalování automaticky restartuje. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} z {1} {2}{3}Chcete nainstalovat tento plugin? Po instalaci se Flow automaticky restartuje. + {0} by {1} {2}{2}Would you like to install this plugin? Instalovat plugin Instaluje se plugin Stáhnout a nainstalovat {0} @@ -16,19 +18,31 @@ Chyba: Zásuvný modul se stejnou nebo vyšší verzí než {0} již existuje. Chyba instalace pluginu Došlo k chybě při pokusu o instalaci {0} + Error uninstalling plugin Nejsou dostupné žádné aktualizace Všechny pluginy jsou aktuální {0} z {1} {2}{3}Chcete tento zásuvný modul aktualizovat? Flow se po aktualizaci automaticky restartuje. + {0} by {1} {2}{2}Would you like to update this plugin? Aktualizace Pluginu Aktualizace tohoto pluginu je k dispozici, chcete ji zobrazit? Tento plugin je již nainstalován Stahování manifestu pluginu se nezdařilo Zkontrolujte, zda se můžete připojit k webu github.com. Tato chyba pravděpodobně znamená, že nemůžete instalovat nebo aktualizovat zásuvné moduly. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Instalace z neznámého zdroje Tento plugin instalujete z neznámého zdroje a může obsahovat potenciální rizika!{0}{0}Ujistěte se, že víte, odkud tento plugin pochází a že je bezpečný.{0}{0}Chcete pokračovat?{0}{0}(Toto varování můžete vypnout v nastavení) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Správce pluginů Správa instalace, odinstalace nebo aktualizace pluginů Flow Launcheru @@ -46,4 +60,5 @@ Upozornění na instalaci z neznámého zdroje + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml index e1aa21eca..f224af73f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/da.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml index e1aa21eca..642c0d6a1 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/de.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -37,8 +51,8 @@ Open website Visit the plugin's website - See source code - See the plugin's source code + Quellcode anzeigen + Quellcode des Plugins ansehen Suggest an enhancement or submit an issue Suggest an enhancement or submit an issue to the plugin developer Go to Flow's plugins repository @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml index e1aa21eca..f224af73f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es-419.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml index 7f37d2765..e3fa09615 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/es.xaml @@ -6,7 +6,9 @@ {0} se ha descargado correctamente Error: No se puede descargar el complemento {0} por {1} {2}{3}¿Desea desinstalar este complemento? Después de la desinstalación Flow se reiniciará automáticamente. + {0} por {1} {2}{2}¿Desea desinstalar este complemento? {0} por {1} {2}{3}¿Desea instalar este complemento? Después de la instalación Flow se reiniciará automáticamente. + {0} por {1} {2}{2}¿Desea instalar este complemento? Instalar complemento Instalando complemento Descargar e instalar {0} @@ -16,19 +18,31 @@ Error: Ya existe un complemento que tiene la misma o mayor versión con {0}. Error al instalar el complemento Se ha producido un error al intentar instalar {0} + Error al desinstalar el complemento No hay actualizaciones disponibles Todos los complementos están actualizados {0} por {1} {2}{3}¿Desea actualizar este complemento? Después de la actualización Flow se reiniciará automáticamente. + {0} por {1} {2}{2}¿Desea actualizar este complemento? Actualizar complemento Este complemento tiene una actualización, ¿desea verla? Este complemento ya está instalado La descarga del manifiesto del complemento ha fallado Por favor, compruebe que puede establecer conexión con github.com. Este error significa que es posible que no pueda instalar o actualizar complementos. + Actualizar todos los complementos + ¿Desea actualizar todos los complementos? + ¿Desea actualizar {0} complementos?{1}Flow Launcher se reiniciará después de actualizar todos los complementos. + ¿Desea actualizar {0} complementos? + {0} complementos se han actualizado correctamente. Reiniciando Flow, por favor espere... + Complemento {0} actualizado correctamente. Reiniciando Flow, por favor espere... Instalando desde una fuente desconocida ¡Está instalando este complemento desde una fuente desconocida y puede contener riesgos potenciales!{0}{0}Por favor, asegúrese de saber de dónde procede este complemento y de que es seguro.{0}{0}¿Aún así desea continuar?{0}{0}(Puede desactivar esta advertencia en la configuración) - - - + + Complemento {0} instalado correctamente. Por favor, reinicie Flow. + Complemento {0} desinstalado correctamente. Por favor, reinicie Flow. + 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. + Administrador de complementos Administración de instalación, desinstalación o actualización de los complementos de Flow Launcher @@ -46,4 +60,5 @@ Aviso de instalación desde fuentes desconocidas + Reiniciar automáticamente Flow Launcher después de instalar/desinstalar/actualizar complementos diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml index e1aa21eca..c36e4c39c 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/fr.xaml @@ -2,48 +2,63 @@ - Downloading plugin + Téléchargement du plugin Successfully downloaded - Error: Unable to download the plugin - {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. - {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. - Plugin Install - Installing Plugin - Download and install {0} - Plugin Uninstall + Erreur : Impossible de télécharger le plugin + {0} par {1} {2}{3}Voulez-vous désinstaller ce plugin ? Après la désinstallation Flow redémarrera automatiquement. + {0} par {1} {2}{2}Voulez-vous désinstaller ce plugin ? + {0} par {1} {2}{3}Voulez-vous installer ce plugin ? Après l'installation Flow redémarrera automatiquement. + {0} par {1} {2}{2}Voulez-vous installer ce plugin ? + Installation du plugin + Installation du plugin + Télécharger et installer {0} + Désinstallation du plugin Plugin successfully installed. Restarting Flow, please wait... - Unable to find the plugin.json metadata file from the extracted zip file. - Error: A plugin which has the same or greater version with {0} already exists. - Error installing plugin - Error occurred while trying to install {0} - No update available - All plugins are up to date - {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. - Plugin Update - This plugin has an update, would you like to see it? - This plugin is already installed - Plugin Manifest Download Failed - Please check if you can connect to github.com. This error means you may not be able to install or update plugins. - Installing from an unknown source - You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + Impossible de trouver le fichier de métadonnées plugin.json à partir du fichier zip extrait. + Erreur : Un plugin ayant une version identique ou supérieure à {0} existe déjà. + Erreur lors de l'installation du plugin + Une erreur s'est produite lors de l'installation de {0} + Erreur lors de la désinstallation du plugin + Aucune mise à jour disponible + Tous les plugins sont à jour + {0} par {1} {2}{3}Voulez-vous mettre à jour ce plugin ? Après la mise à jour Flow redémarrera automatiquement. + {0} par {1} {2}{2}Voulez-vous mettre à jour ce plugin ? + Mise à jour du Plugin + Ce plugin a une mise à jour, voulez-vous le voir ? + Ce plugin est déjà installé + Échec du téléchargement du Plugin Manifest + Veuillez vérifier si vous pouvez vous connecter à github.com. Cette erreur signifie que vous ne serez pas en mesure d'installer ou de mettre à jour des plugins. + Mettre à jour tous les plugins + Voulez-vous mettre à jour tous les plugins ? + Voulez-vous mettre à jour {0} plugins ?{1}Flow Launcher redémarrera après la mise à jour de tous les plugins. + Voulez-vous mettre à jour {0} plugins ? + {0} plugins mis à jour avec succès. Redémarrage de Flow, veuillez patienter... + Plugin {0} mis à jour avec succès. Redémarrage de Flow, veuillez patienter... + Installation depuis une source inconnue + Vous installez ce plugin à partir d'une source inconnue et il peut contenir des risques !{0}{0}Veuillez vous assurer que vous comprenez d'où provient ce plugin et qu'il est sûr.{0}{0}Voulez-vous continuer ?{0}{0}(Vous pouvez désactiver cet avertissement via les paramètres) + + 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. + {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. + - Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins - Unknown Author + Gestionnaire de plugins + Gestion de l'installation, de la désinstallation ou de la mise à jour des plugins Flow Launcher + Auteur inconnu - Open website - Visit the plugin's website - See source code - See the plugin's source code - Suggest an enhancement or submit an issue - Suggest an enhancement or submit an issue to the plugin developer - Go to Flow's plugins repository - Visit the PluginsManifest repository to see community-made plugin submissions + Ouvrir le site web + Visitez le site web du plugin + Voir le code source + Voir le code source du plugin + Suggérer une amélioration ou soumettre un problème + Suggérer une amélioration ou soumettre un problème au développeur du plugin + Aller au dépôt de plugins Flow + Visitez le dépôt de PluginsManifest pour voir les soumissions de plugin créées par la communauté - Install from unknown source warning + Avertissement d'installation à partir d'une source inconnue + Redémarrer automatiquement Flow Launcher après l'installation/désinstallation/mise à jour des plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml index ec7285142..e2ae667c1 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/it.xaml @@ -6,7 +6,9 @@ Download completato Errore: non è possibile scaricare il plugin {0} da {1} {2}{3}Vuoi disinstallare questo plugin? Dopo la disinstallazione, Flow si riavvierà automaticamente. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} da {1} {2}{3}Vuoi installare questo plugin? Dopo l'installazione, Flow si riavvierà automaticamente. + {0} by {1} {2}{2}Would you like to install this plugin? Installazione del plugin Installazione del Plugin Scarica e installa {0} @@ -16,19 +18,31 @@ Errore: esiste già un plugin che ha la stessa o maggiore versione con {0}. Errore durante l'installazione del plugin Errore durante il tentativo di installare {0} + Error uninstalling plugin Nessun aggiornamento disponibile Tutti i plugin sono aggiornati {0} da {1} {2}{3}Vuoi aggiornare questo plugin? Dopo l'aggiornamento, Flow si riavvierà automaticamente. + {0} by {1} {2}{2}Would you like to update this plugin? Aggiornamento del plugin Questo plugin ha un aggiornamento, vuoi vederlo? Questo plugin è già stato installato Download del manifesto del plugin fallito Controlla se puoi connetterti a github.com. Questo errore significa che potresti non essere in grado di installare o aggiornare i plugin. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installazione da una fonte sconosciuta Stai installando questo plugin da una fonte sconosciuta e potrebbe contenere potenziali rischi!{0}{0}Si prega di assicurarsi di capire la provenienza di questo plugin e se sia sicuro.{0}{0}Vuoi comunque continuare?{0}{0}(Puoi disattivare questo avviso dalle impostazioni) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Gestore dei plugin Gestione dell'installazione, disinstallazione o aggiornamento dei plugin di Flow Launcher @@ -46,4 +60,5 @@ Avviso di installazione da sorgenti sconosciute + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml index e1aa21eca..f224af73f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ja.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml index 7fb07a6db..d95a5d6a5 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ko.xaml @@ -6,7 +6,9 @@ 다운로드 성공 오류: 플러그인을 받을 수 없습니다 {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? 플러그인 설치 Installing Plugin 다운로드 및 설치 {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin 사용 가능한 업데이트가 없습니다 All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? 플러그인 업데이트 This plugin has an update, would you like to see it? 이미 설치된 플러그인입니다 플러그인 목록 다운로드 실패 Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + 플러그인 관리자 플러그인의 설치/삭제/업데이트를 관리하는 플러그인 @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml index e1aa21eca..f224af73f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nb.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml index e1aa21eca..f224af73f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/nl.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml index e1aa21eca..f224af73f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pl.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml index 442079498..949607f42 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-br.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? Este plugin já está instalado Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml index c7f3f2e9e..7d94d6b33 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/pt-pt.xaml @@ -6,7 +6,9 @@ Descarregado com sucesso {0} Não foi possível descarregar o plugin {0} de {1} {2}{3}Tem a certeza de que pretende desinstalar este plugin? Após a desinstalação, Flow Launcher será reiniciado. + {0} de {1} {2}{2}Gostaria de desinstalar este plugin? {0} de {1} {2}{3}Tem a certeza de que pretende instalar este plugin? Após a instalação, Flow Launcher será reiniciado. + {0} de {1} {2}{2}Gostaria de instalar este plugin? Instalador de plugins Instalando plugin... Descarregar e instalar {0} @@ -16,19 +18,31 @@ Erro: já está instalado um plugin com uma versão igual ou superior a {0}. Erro ao instalar o plugin Ocorreu um erro ao tentar instalar {0} + Erro ao desinstalar o plugin Não existem atualizações Todos os plugins estão instalados {0} de {1} {2}{3}Tem a certeza de que pretende atualizar este plugin? Após a atualização, Flow Launcher será reiniciado. + {0} de {1} {2}{2}Gostaria de atualizar este plugin? Atualização de plugin Existe uma atualização para este plugin. Deseja ver? Este plugin já está instalado Erro ao descarregar o manifesto do plugin Verifique se consegue estabelecer ligação a github.com. Este erro significa que pode não ser possível instalar ou atualizar os plugins. + Atualizar todos os plugins + Gostaria de atualizar todos os plugins? + Gostaria de atualizar {0} plugins ?{1}Flow Launcher será reiniciado após a atualização. + Gostaria de atualizar {0} plugins? + {0} plugins atualizados com sucesso. Estamos a reiniciar Flow Launcher... + Plugin {0} atualizado com sucesso. Estamos a reiniciar Flow Launcher, aguarde... Instalar a partir de fontes desconhecidas Está a instalar este plugin a partir de uma fonte desconhecida o que pode ser perigoso!{0}{0}Certifique-se de que este plugin é seguro.{0}{0}Ainda assim, pretende continuar com a instalação?{0}{0}(Pode desativar este aviso nas definições da aplicação) - - - + + 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. + {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. + Gestor de plugins Módulo para instalar, desinstalar e atualizar os plugins do Flow Launcher @@ -46,4 +60,5 @@ Aviso ao instalar de fontes desconhecidas + Reiniciar automaticamente após instalar/desinstalar/atualizar plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml index e1aa21eca..f224af73f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/ru.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml index ea43b3c62..016842da9 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sk.xaml @@ -6,7 +6,9 @@ Úspešne stiahnuté {0} Chyba: Nepodarilo sa stiahnuť plugin {0} od {1} {2}{3}Chcete odinštalovať tento plugin? Po odinštalovaní sa Flow automaticky reštartuje. + {0} od {1} {2}{2}Chcete odinštalovať tento plugin? {0} od {1} {2}{3}Chcete nainštalovať tento plugin? Po nainštalovaní sa Flow automaticky reštartuje. + {0} od {1} {2}{2}Chcete nainštalovať tento plugin? Inštalovať plugin Inštaluje sa plugin Stiahnuť a nainštalovať {0} @@ -16,19 +18,31 @@ Chyba: Plugin s rovnakou alebo vyššou verziou ako {0} už existuje. Chyba inštalácie pluginu Nastala chyba počas inštalácie pluginu {0} + Chyba odinštalácie pluginu Nie je k dispozícii žiadna aktualizácia Všetky pluginy sú aktuálne {0} od {1} {2}{3}Chcete aktualizovať tento plugin? Po aktualizácii sa Flow automaticky reštartuje. + {0} od {1} {2}{2}Chcete aktualizovať tento plugin? Aktualizácia pluginu Aktualizácia pre tento plugin je k dispozícii, chcete ju zobraziť? Tento plugin je už nainštalovaný Stiahnutie manifestu pluginu zlyhalo Skontrolujte, či sa môžete pripojiť ku github.com. Táto chyba znamená, že pravdepodobne nemôžete pluginy inštalovať alebo aktualizovať. + Aktualizovať všetky pluginy + Chcete aktualizovať všetky pluginy? + Chcete aktualizovať pluginy ({0})?{1}Po aktualizácii všetkých pluginov sa Flow Launcher reštartuje. + Chcete aktualizovať pluginy ({0})? + Pluginy úspešne aktualizované ({0}). Flow sa reštartuje, čakajte… + Plugin {0} bol úspešne aktualizovaný. Reštartuje sa Flow, čakajte, prosím... Inštalácia z neznámeho zdroja Tento plugin inštalujete z neznámeho zdroja a môže obsahovať potenciálne riziká!{0}{0}Uistite sa, že rozumiete, odkiaľ tento plugin pochádza, a že je bezpečný.{0}{0}Chcete pokračovať?{0}{0}(Toto upozornenie môžete vypnúť v nastaveniach) - - - + + 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. + Pluginy úspešne aktualizované ({0}). Reštartuje Flow. + Plugin {0} už bol upravený. Prosím, reštartuje Flow pred ďalšími zmenami. + Správca pluginov Správa inštalácie, odinštalácie alebo aktualizácie pluginov programu Flow Launcher @@ -46,4 +60,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 diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml index e1aa21eca..f224af73f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/sr.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml index e1aa21eca..f224af73f 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/tr.xaml @@ -6,7 +6,9 @@ Successfully downloaded Error: Unable to download the plugin {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? Plugin Install Installing Plugin Download and install {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. Error installing plugin Error occurred while trying to install {0} + Error uninstalling plugin No update available All plugins are up to date {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? Plugin Update This plugin has an update, would you like to see it? This plugin is already installed Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + Plugins Manager Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml index e1aa21eca..b4d60f5b6 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/uk-UA.xaml @@ -2,48 +2,63 @@ - Downloading plugin + Завантаження плагіну Successfully downloaded - Error: Unable to download the plugin - {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. - {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. - Plugin Install - Installing Plugin - Download and install {0} - Plugin Uninstall + Помилка: Не вдалося завантажити плагін + {0} від {1} {2}{3}Бажаєте видалити цей плагін? Після видалення Flow автоматично перезапуститься. + {0} від {1} {2}{2}Бажаєте видалити цей плагін? + {0} від {1} {2}{3}Бажаєте встановити цей плагін? Після встановлення Flow автоматично перезапуститься. + {0} від {1} {2}{2}Бажаєте встановити цей плагін? + Встановлення плагіна + Встановлення плагіна + Завантажити та встановити {0} + Видалення плагіна Plugin successfully installed. Restarting Flow, please wait... - Unable to find the plugin.json metadata file from the extracted zip file. - Error: A plugin which has the same or greater version with {0} already exists. - Error installing plugin - Error occurred while trying to install {0} - No update available - All plugins are up to date - {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. - Plugin Update - This plugin has an update, would you like to see it? - This plugin is already installed - Plugin Manifest Download Failed - Please check if you can connect to github.com. This error means you may not be able to install or update plugins. - Installing from an unknown source - You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + Не вдалося знайти файл метаданих plugin.json у розпакованому zip-архіві. + Помилка: Плагін, який має ідентичну або новішу версію з {0}, вже існує. + Помилка під час встановлення плагіна + Виникла помилка при спробі встановити {0} + Помилка видалення плагіну + Оновлень не знайдено + Всі плагіни оновлено + {0} від {1} {2}{3}Бажаєте оновити цей плагін? Після оновлення Flow буде автоматично перезапущено. + {0} від {1} {2}{2}Бажаєте оновити цей плагін? + Оновлення плагіна + Цей плагін має оновлення, бажаєте його переглянути? + Цей плагін вже встановлено + Не вдалося завантажити маніфест плагіна + Будь ласка, перевірте, чи можете ви підключитися до github.com. Ця помилка означає, що ви не можете встановлювати або оновлювати плагіни. + Оновити всі плагіни + Ви хочете оновити всі плагіни? + Бажаєте оновити плагіни {0}?{1}Flow Launcher перезапуститься після оновлення всіх плагінів. + Бажаєте оновити плагіни {0}? + {0} плагіни успішно оновлено. Перезапуск Flow, будь ласка, зачекайте... + Плагін {0} успішно оновлено. Перезапускаємо Flow, будь ласка, зачекайте... + Встановлення з невідомого джерела + Ви встановлюєте цей плагін з невідомого джерела, тому він може бути потенційно небезпечним!{0}{0}Переконайтеся, що ви розумієте, звідки цей плагін, і що він є безпечним.{0}{0}Бажаєте продовжити?{0}{0}(Ви можете вимкнути це попередження через налаштування) + + Плагін {0} успішно встановлено. Будь ласка, перезапустіть Flow. + Плагін {0} успішно видалено. Будь ласка, перезапустіть Flow. + Плагін {0} успішно оновлено. Будь ласка, перезапустіть Flow. + {0} плагіни успішно оновлено. Будь ласка, перезапустіть Flow. + Плагін {0} вже було змінено. Будь ласка, перезапустіть Flow, перш ніж вносити будь-які подальші зміни. + - Plugins Manager - Management of installing, uninstalling or updating Flow Launcher plugins - Unknown Author + Менеджер плагінів + Керування встановленням, видаленням або оновленням плагінів Flow Launcher + Невідомий автор - Open website - Visit the plugin's website - See source code - See the plugin's source code - Suggest an enhancement or submit an issue - Suggest an enhancement or submit an issue to the plugin developer - Go to Flow's plugins repository - Visit the PluginsManifest repository to see community-made plugin submissions + Відкрити сайт + Відвідати веб-сайт плагіна + Переглянути вихідний код + Переглянути вихідний код плагіну + Запропонувати покращення або надіслати повідомлення про проблему + Запропонувати покращення або повідомити про проблему розробнику плагіна + Перейти до репозиторію плагінів Flow + Відвідати репозиторій PluginsManifest, щоб переглянути подані спільнотою плагіни - Install from unknown source warning + Попередження про встановлення з невідомого джерела + Автоматичний перезапуск Flow Launcher після встановлення/видалення/оновлення плагінів diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml index 58d3fdf1f..fd6b09159 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-cn.xaml @@ -3,10 +3,12 @@ 正在下载插件... - 下载完成 + 成功下载 {0} 错误:无法下载该插件 {0} by {1} {2}{3} 您要卸载此插件吗? 卸载后,Flow Launcher 将自动重启。 + {0} 作者: {1} {2}{2}您想要卸载这个插件吗? {0} by {1} {2}{3} 您要安装此插件吗? 安装后,Flow Launcher 将自动重启 + {0} 作者: {1} {2}{2}您想要安装这个插件吗? 插件安装 正在安装插件 下载与安装 {0} @@ -16,19 +18,31 @@ 错误:具有相同或更高版本的 {0} 的插件已经存在。 安装插件时出错 尝试安装 {0} 时发生错误 + 卸载插件时出错 无可用更新 所有插件都是最新的 {0} by {1} {2}{3}您要更新此插件吗? 更新后,Flow Launcher 将自动重启。 + {0} 作者: {1} {2}{2}您想要更新这个插件吗? 插件更新 该插件有更新,您想看看吗? 此插件已安装 插件列表下载失败 请检查您是否可以连接到 github.com。这个错误意味着您可能无法安装或更新插件。 + 更新所有插件 + 您想要更新所有插件吗? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + 插件{0}更新成功。正在重新启动 Flow Launcher,请稍候... 从未知源安装 您正在从未知源安装此插件,它可能包含潜在风险!{0}{0}请确保您了解来源以及安全性。{0}{0}您想要继续吗?{0}{0}(您可以通过设置关闭此警告) - - - + + 成功安装插件{0}。请重新启动 Flow Launcher。 + 成功卸载插件{0}。请重新启动 Flow Launcher。 + 成功更新插件{0}。请重新启动 Flow Launcher。 + {0} plugins successfully updated. Please restart Flow. + 插件 {0} 已被修改。请在进行任何进一步更改之前重新启动Flow。 + 插件管理 安装,卸载或更新 Flow Launcher 插件 @@ -46,4 +60,5 @@ 未知源安装警告 + 安装/卸载/更新插件后自动重启 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 8ed16fe90..3505c4a7d 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Languages/zh-tw.xaml @@ -6,7 +6,9 @@ 下載完成 錯誤:無法下載擴充功能 {0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to uninstall this plugin? {0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart. + {0} by {1} {2}{2}Would you like to install this plugin? 安裝擴充功能 Installing Plugin 下載並安裝 {0} @@ -16,19 +18,31 @@ Error: A plugin which has the same or greater version with {0} already exists. 安裝擴充功能時發生錯誤 嘗試安裝 {0} 時發生錯誤 + Error uninstalling plugin 無可用更新 所有插件均為最新版本 {0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart. + {0} by {1} {2}{2}Would you like to update this plugin? 擴充功能更新 This plugin has an update, would you like to see it? 已安裝此擴充功能 Plugin Manifest Download Failed Please check if you can connect to github.com. This error means you may not be able to install or update plugins. + Update all plugins + Would you like to update all plugins? + Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins. + Would you like to update {0} plugins? + {0} plugins successfully updated. Restarting Flow, please wait... + Plugin {0} successfully updated. Restarting Flow, please wait... Installing from an unknown source You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings) - - - + + Plugin {0} successfully installed. Please restart Flow. + Plugin {0} successfully uninstalled. Please restart Flow. + Plugin {0} successfully updated. Please restart Flow. + {0} plugins successfully updated. Please restart Flow. + Plugin {0} has already been modified. Please restart Flow before making any further changes. + 擴充功能管理 Management of installing, uninstalling or updating Flow Launcher plugins @@ -46,4 +60,5 @@ Install from unknown source warning + Automatically restart Flow Launcher after installing/uninstalling/updating plugins diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs index 792891ad1..7a7496ece 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/Utilities.cs @@ -1,5 +1,5 @@ -using ICSharpCode.SharpZipLib.Zip; -using System.IO; +using System.IO; +using System.IO.Compression; namespace Flow.Launcher.Plugin.PluginsManager { @@ -13,29 +13,7 @@ namespace Flow.Launcher.Plugin.PluginsManager /// overwrite internal static void UnZip(string zipFilePath, string strDirectory, bool overwrite) { - if (strDirectory == "") - strDirectory = Directory.GetCurrentDirectory(); - - using var zipStream = new ZipInputStream(File.OpenRead(zipFilePath)); - - ZipEntry theEntry; - - while ((theEntry = zipStream.GetNextEntry()) != null) - { - var pathToZip = theEntry.Name; - var directoryName = string.IsNullOrEmpty(pathToZip) ? "" : Path.GetDirectoryName(pathToZip); - var fileName = Path.GetFileName(pathToZip); - var destinationDir = Path.Combine(strDirectory, directoryName); - var destinationFile = Path.Combine(destinationDir, fileName); - - Directory.CreateDirectory(destinationDir); - - if (string.IsNullOrEmpty(fileName) || (File.Exists(destinationFile) && !overwrite)) - continue; - - using var streamWriter = File.Create(destinationFile); - zipStream.CopyTo(streamWriter); - } + ZipFile.ExtractToDirectory(zipFilePath, strDirectory, overwrite); } internal static string GetContainingFolderPathAfterUnzip(string unzippedParentFolderPath) diff --git a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json index e0d4fed81..4e475f171 100644 --- a/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.PluginsManager/plugin.json @@ -6,7 +6,7 @@ "Name": "Plugins Manager", "Description": "Management of installing, uninstalling or updating Flow Launcher plugins", "Author": "Jeremy Wu", - "Version": "3.0.5", + "Version": "3.1.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.PluginsManager.dll", diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/de.xaml index c4cc85463..c27892d51 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/de.xaml @@ -1,7 +1,7 @@  - Process Killer + Prozesskiller Kill running processes from Flow Launcher kill all instances of "{0}" diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/it.xaml index c4cc85463..1ea52e741 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/it.xaml @@ -2,10 +2,10 @@ Process Killer - Kill running processes from Flow Launcher + Termina i processi in esecuzione da Flow Launcher - kill all instances of "{0}" - kill {0} processes - kill all instances + termina tutte le istanze di "{0}" + termina {0} processi + termina tutte le istanze diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml index c4cc85463..e23f43875 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/Languages/uk-UA.xaml @@ -1,11 +1,11 @@  - Process Killer - Kill running processes from Flow Launcher + Вбивця процесів + Завершення запущених процесів через Flow Launcher - kill all instances of "{0}" - kill {0} processes - kill all instances + вбити всі екземпляри "{0}" + вбити {0} процесів + вбити всі екземпляри diff --git a/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json b/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json index 5a74d8ebb..c1760d1cd 100644 --- a/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.ProcessKiller/plugin.json @@ -4,7 +4,7 @@ "Name":"Process Killer", "Description":"Kill running processes from Flow", "Author":"Flow-Launcher", - "Version":"3.0.3", + "Version":"3.0.4", "Language":"csharp", "Website":"https://github.com/Flow-Launcher/Flow.Launcher.Plugin.ProcessKiller", "IcoPath":"Images\\app.png", diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml index bf844188e..5ab3eb9ec 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/de.xaml @@ -9,12 +9,12 @@ Name Aktivieren Aktiviert - Disable + Deaktivieren Status Aktiviert Disabled Speicherort - All Programs + Alle Programme File Type erneut Indexieren Indexieren @@ -28,7 +28,7 @@ When enabled, Flow will load programs from the registry PATH When enabled, Flow will load programs from the PATH environment variable - Hide app path + App-Pfad verstecken For executable files such as UWP or lnk, hide the file path from being visible Search in Program Description Flow will search program's description @@ -69,16 +69,16 @@ Run As Different User Als Administrator ausführen - Open containing folder + Enthaltenden Ordner öffnen Disable this program from displaying Programm Suche Programme mit Flow Launcher - Invalid Path + Ungültiger Pfad Customized Explorer - Args + Argumente You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available. Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details. diff --git a/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml index 83062ce6e..f4a9926e8 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Languages/uk-UA.xaml @@ -2,91 +2,91 @@ - Reset Default + Скинути до значення за замовчуванням Видалити Редагувати Додати - Name - Enable - Enabled - Disable - Status - Enabled - Disabled - Location - All Programs - File Type - Reindex - Indexing - Index Sources - Options - UWP Apps - When enabled, Flow will load UWP Applications - Start Menu - When enabled, Flow will load programs from the start menu - Registry - When enabled, Flow will load programs from the registry + Назва + Увімкнути + Увімкнено + Вимкнути + Статус + Увімкнено + Вимкнено + Місцезнаходження + Всі програми + Тип файлу + Переіндексувати + Індексація + Джерела індексу + Параметри + Додатки UWP + Якщо увімкнено, Flow буде завантажувати UWP-додатки + Меню Пуск + Якщо увімкнено, Flow завантажуватиме програми зі стартового меню + Реєстр + Якщо увімкнено, Flow буде завантажувати програми з реєстру PATH - When enabled, Flow will load programs from the PATH environment variable - Hide app path - For executable files such as UWP or lnk, hide the file path from being visible - Search in Program Description - Flow will search program's description - Suffixes - Max Depth + Якщо увімкнено, Flow буде завантажувати програми зі змінної середовища PATH + Приховати шлях до програми + Для виконуваних файлів, таких як UWP або lnk, приховати шлях до файлу, щоб його не було видно + Пошук в описі програми + Flow буде шукати опис програми + Суфікси + Максимальна глибина - Directory - Browse - File Suffixes: - Maximum Search Depth (-1 is unlimited): + Каталог + Перегляд + Суфікси файлів: + Максимальна глибина пошуку (-1 - необмежена): - Please select a program source - Are you sure you want to delete the selected program sources? - Another program source with the same location already exists. + Будь ласка, виберіть джерело програми + Ви впевнені, що хочете видалити вибрані джерела програм? + Інше програмне джерело з тим самим розташуванням вже існує. - Program Source - Edit directory and status of this program source. + Вихідний код програми + Редагування каталогу і статусу вихідного коду програми. Оновити - Program Plugin will only index files with selected suffixes and .url files with selected protocols. - Successfully updated file suffixes - File suffixes can't be empty - Protocols can't be empty + Плагін проіндексує лише файли з вибраними суфіксами та .url-файли з вибраними протоколами. + Успішно оновлено суфікси файлів + Суфікси файлів не можуть бути порожніми + Протоколи не можуть бути порожніми - File Suffixes - URL Protocols - Steam Games + Суфікси файлів + Протоколи URL-адрес + Ігри в Steam Epic Games Http/Https - Custom URL Protocols - Custom File Suffixes + Користувацькі протоколи URL-адрес + Користувацькі суфікси файлів - Insert file suffixes you want to index. Suffixes should be separated by ';'. (ex>bat;py) + Вставте суфікси файлів, які потрібно проіндексувати. Суфікси слід розділяти символом ';'. (ex>bat;py)a - Insert protocols of .url files you want to index. Protocols should be separated by ';', and should end with "://". (ex>ftp://;mailto://) + Вставте протоколи .url файлів, які потрібно проіндексувати. Протоколи слід розділяти символом ';' і закінчувати "://". (ex>ftp://; mailto://) - Run As Different User - Run As Administrator - Open containing folder - Disable this program from displaying + Запустити від імені іншого користувача + Запустити від імені адміністратора + Відкрити папку + Вимкнути відображення цієї програми - Program - Search programs in Flow Launcher + Програма + Пошук програм у Flow Launcher - Invalid Path + Неправильний шлях - Customized Explorer - Args - You can customized the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available. - Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details. + Кастомізований провідник + Аргументи + Ви можете налаштувати провідник, який використовується для відкриття теки контейнера, ввівши змінну середовища провідника, який ви хочете використовувати. Буде корисно скористатися командою CMD для перевірки доступності змінної середовища. + Введіть спеціальні аргументи, які ви хочете додати до вашого провідника. %s для батьківського каталогу, %f для повного шляху (працює лише для win32). Докладнішу інформацію можна знайти на веб-сайті провідника. Успішно - Error - Successfully disabled this program from displaying in your query - This app is not intended to be run as administrator - Unable to run {0} + Помилка + Успішно вимкнено відображення цієї програми у вашому запиті + Ця програма не призначена для запуску від імені адміністратора + Неможливо запустити {0} diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index 0da1a8b6d..58e5373d4 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -196,7 +196,7 @@ namespace Flow.Launcher.Plugin.Program.Programs FileName = FullPath, WorkingDirectory = ParentDirectory, UseShellExecute = true, - Verb = runAsAdmin ? "runas" : "" + Verb = runAsAdmin ? "runas" : "", }; _ = Task.Run(() => Main.StartProcess(Process.Start, info)); diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json index e1d76659b..7f6b5f938 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Program/plugin.json @@ -4,7 +4,7 @@ "Name": "Program", "Description": "Search programs in Flow.Launcher", "Author": "qianlifeng", - "Version": "3.1.3", + "Version": "3.2.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ar.xaml index 0ccfd8c9a..b7d02c558 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ar.xaml @@ -2,6 +2,8 @@ Replace Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Do not close Command Prompt after command execution Always run as administrator Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/cs.xaml index 2c764d845..de45c754c 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/cs.xaml @@ -2,6 +2,8 @@ Nahradit Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Po dokončení příkazu příkazový řádek nezavírejte Vždy spustit jako správce Spustit jako jiný uživatel diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/da.xaml index 0ccfd8c9a..b7d02c558 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/da.xaml @@ -2,6 +2,8 @@ Replace Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Do not close Command Prompt after command execution Always run as administrator Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/de.xaml index 3fa7c64fa..bd3043d82 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/de.xaml @@ -2,6 +2,8 @@ Ersetzt Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Schließe die Kommandozeilte nicht nachdem der Befehl ausgeführt wurde Immer als Administrator ausführen Als anderer Benutzer ausführen diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml index 284a2a0e6..5ee2c43b4 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es-419.xaml @@ -2,6 +2,8 @@ Reemplazar Win+R + Close Command Prompt after pressing any key + Press any key to close this window... No cerrar Símbolo del Sistema tras ejecutar el comando Siempre ejecutar como administrador Ejecutar como otro usuario diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml index 8bf1a2c11..b43d75690 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml @@ -2,6 +2,8 @@ Reemplazar Win+R + Cerrar Símbolo del sistema después de pulsar cualquier tecla + Pulsar cualquier tecla para cerrar esta ventana... No cerrar el símbolo del sistema después de la ejecución del comando Ejecutar siempre como administrador Ejecutar como usuario diferente diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/fr.xaml index d08efb9b8..379f3eda3 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/fr.xaml @@ -2,6 +2,8 @@ Remplacer Win+R + Fermer l'invite de commande après avoir appuyé sur n'importe quelle touche + Appuyez sur n'importe quelle touche pour fermer cette fenêtre... Ne pas fermer l'invite de commandes après l'exécution de la commande Toujours exécuter en tant qu'administrateur Exécuter en tant qu'utilisateur différent diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/it.xaml index de40b0c47..ee473d80e 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/it.xaml @@ -2,11 +2,13 @@ Sostituisci Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Non chiudere il prompt dei comandi dopo l'esecuzione dei comandi Esegui sempre come amministratore Esegui come utente differente Terminale - Allows to execute system commands from Flow Launcher + Consente di eseguire comandi di sistema da Flow Launcher questo comando è stato eseguito {0} volte esegui il comando attraverso riga di comando Esegui Come Amministratore diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ja.xaml index 0ccfd8c9a..b7d02c558 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ja.xaml @@ -2,6 +2,8 @@ Replace Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Do not close Command Prompt after command execution Always run as administrator Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ko.xaml index 014a46dfc..3faaca429 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ko.xaml @@ -2,6 +2,8 @@ Win+R 단축키 대체 + Close Command Prompt after pressing any key + Press any key to close this window... 명령 실행 후 명령 프롬프트를 닫지 않음 항상 관리자 권한으로 실행 다른 유저 권한으로 실행 diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/nb.xaml index 0ccfd8c9a..b7d02c558 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/nb.xaml @@ -2,6 +2,8 @@ Replace Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Do not close Command Prompt after command execution Always run as administrator Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/nl.xaml index 0ccfd8c9a..b7d02c558 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/nl.xaml @@ -2,6 +2,8 @@ Replace Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Do not close Command Prompt after command execution Always run as administrator Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pl.xaml index c851be93b..592ff17b7 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pl.xaml @@ -2,6 +2,8 @@ Zastąp Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Nie zamykaj wiersza poleceń po wykonaniu polecenia Always run as administrator Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-br.xaml index 6a0a3c8fd..729e33ddf 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-br.xaml @@ -2,6 +2,8 @@ Substituir Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Não feche o Prompt de Comando após a execução do comando Sempre executar como administrador Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-pt.xaml index 33d7f35a6..cf4665cce 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pt-pt.xaml @@ -2,6 +2,8 @@ Substituir Win+R + Fechar linha de comandos ao premir qualquer tecla + Prima uma tecla para fechar esta janela... Não fechar linha de comandos depois de executar o comando Executar sempre como administrador Executar com outro utilizador diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ru.xaml index 0ccfd8c9a..b7d02c558 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ru.xaml @@ -2,6 +2,8 @@ Replace Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Do not close Command Prompt after command execution Always run as administrator Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/sk.xaml index 0b76303df..49f5dd796 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/sk.xaml @@ -2,6 +2,8 @@ Nahradiť Win+R + Zatvoriť príkazový riadok po stlačení ľubovoľného klávesu + Toto okno zatvoríte stlačením ľubovoľného klávesu… Nezatvárať príkazový riadok po dokončení príkazu Spustiť vždy ako správca Spustiť ako iný používateľ diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/sr.xaml index 0ccfd8c9a..b7d02c558 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/sr.xaml @@ -2,6 +2,8 @@ Replace Win+R + Close Command Prompt after pressing any key + Press any key to close this window... Do not close Command Prompt after command execution Always run as administrator Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/tr.xaml index c6433cef1..7dd1c5b36 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/tr.xaml @@ -2,6 +2,8 @@ Win+R kısayolunu kullan + Close Command Prompt after pressing any key + Press any key to close this window... Çalıştırma sona erdikten sonra komut istemini kapatma Always run as administrator Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml index 0ccfd8c9a..9f51bbcd9 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/uk-UA.xaml @@ -1,15 +1,17 @@  - Replace Win+R - Do not close Command Prompt after command execution - Always run as administrator - Run as different user + Заміна Win+R + Закривати командний рядок після натискання будь-якої клавіші + Натисніть будь-яку клавішу, щоб закрити це вікно... + Не закривати командний рядок після виконання команди + Завжди запускати від імені адміністратора + Запустити від імені іншого користувача Shell - Allows to execute system commands from Flow Launcher - this command has been executed {0} times - execute command through command shell - Run As Administrator - Copy the command - Only show number of most used commands: + Дозволяє виконувати системні команди з Flow Launcher + цю команду було виконано {0} разів + виконати команду через командну оболонку + Запустити від імені адміністратора + Скопіювати команду + Показати лише кількість найчастіше використовуваних команд: diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml index 916542c3a..ace554327 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml @@ -2,6 +2,8 @@ 替换 Win+R + Close Command Prompt after pressing any key + 按下任意键以关闭此窗口... 执行后不关闭命令窗口 始终以管理员身份运行 以其他用户身份运行 diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-tw.xaml index 7ddc58918..21a330e3f 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-tw.xaml @@ -2,6 +2,8 @@ 取代 Win+R + Close Command Prompt after pressing any key + Press any key to close this window... 執行後不關閉命令提示字元視窗 一律以系統管理員身分執行 Run as different user diff --git a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json index 18c90351b..6c2b2a184 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json @@ -4,7 +4,7 @@ "Name": "Shell", "Description": "Provide executing commands from Flow Launcher", "Author": "qianlifeng", - "Version": "3.1.1", + "Version": "3.2.0", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Shell.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ar.xaml index 2357454d0..41e005894 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ar.xaml @@ -5,6 +5,28 @@ Command Description + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Exit + Save Settings + Restart Flow Launcher" + Settings + Reload Plugin Data + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Shutdown Computer Restart Computer Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + Success All Flow Launcher settings saved Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/cs.xaml index 1505f6e65..3e053b39f 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/cs.xaml @@ -5,6 +5,28 @@ Příkaz Popis + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Ukončit + Save Settings + Restart Flow Launcher" + Nastavení + Znovu načíst data pluginů + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Vypnout počítač Restartovat počítač Restartování počítače s pokročilými možnostmi spouštění v nouzovém režimu a režimu ladění a dalšími možnostmi @@ -26,7 +48,7 @@ Otevře místo, kde jsou uložena nastavení Flow Launcher Toggle Game Mode - + Úspěšné Uložení všech nastavení Flow Launcheru Aktualizace všech dat pluginů diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/da.xaml index d726432d6..8c5e4d0ff 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/da.xaml @@ -5,6 +5,28 @@ Command Description + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Afslut + Save Settings + Restart Flow Launcher" + Indstillinger + Reload Plugin Data + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Shutdown Computer Restart Computer Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + Fortsæt All Flow Launcher settings saved Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml index e33dc7bdb..042384242 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml @@ -5,35 +5,57 @@ Befehl Beschreibung + Herunterfahren + Neu starten + Neustart mit erweiterten Startoptionen + Abmelden + Sperren + Energie sparen + Ruhezustand + Indizierungsoptionen + Papierkorb leeren + Papierkorb öffnen + Schließen + Einstellungen speichern + Flow Launcher neu starten + Einstellungen + Plugin-Daten neu laden + Auf Updates prüfen + Log-Speicherort öffnen + Flow Launcher Tipps + Flow Launcher Benutzerdaten-Ordner + Gott Modus + + Computer herunterfahren Computer neu starten - Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options + Startet den Computer mit erweiterten Startoptionen für den abgesicherten Modus neu Abmelden Computer sperren Flow Launcher schließen Flow Launcher neu starten - Tweak Flow Launcher's settings + Einstellungen des Flow Launchers anpassen Computer in Schlafmodus versetzen Papierkorb leeren - Open recycle bin - Indexing Options - Hibernate computer - Save all Flow Launcher settings - Refreshes plugin data with new content - Open Flow Launcher's log location - Check for new Flow Launcher update - Visit Flow Launcher's documentation for more help and how to use tips - Open the location where Flow Launcher's settings are stored - Toggle Game Mode + Papierkorb öffnen + Indizierungsoptionen + Computer in den Ruhezustand versetzen + Alle Flow Launcher Einstellungen speichern + Aktualisiert Plugin-Daten mit neuen Inhalten + Öffnet den Speicherort der Flow Launcher Logs + Prüft auf neue Flow Launcher Updates + Öffnet die Dokumentation von Flow Launcher für Hilfe und Tipps + Öffnet den Ort an dem Flow Laucher Einstellungen speichert + Gott Modus - + Erfolgreich - All Flow Launcher settings saved - Reloaded all applicable plugin data - Are you sure you want to shut the computer down? - Are you sure you want to restart the computer? - Are you sure you want to restart the computer with Advanced Boot Options? - Are you sure you want to log off? + Alle Flow Launcher Einstellungen wurden gespeichert + Alle betroffenen Plugin-Daten wurden neu geladen + Soll der Computer wirklich heruntergefahren werden? + Soll der Computer wirklich neu gestartet werden? + Soll der Computer wirklich mit erweiterten Startoptionen neu gestartet werden? + Soll der aktuelle Benutzer wirklich abgemeldet werden? Systembefehle Stellt Systemrelevante Befehle bereit. z.B. herunterfahren, sperren, Einstellungen, usw. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml index a5a6035bc..282a0e809 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/en.xaml @@ -7,6 +7,28 @@ Command Description + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Exit + Save Settings + Restart Flow Launcher" + Settings + Reload Plugin Data + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Shutdown Computer Restart Computer Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml index 2357454d0..05a5458e1 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml @@ -5,6 +5,28 @@ Command Description + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Salir + Save Settings + Restart Flow Launcher" + Ajustes + Reload Plugin Data + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Shutdown Computer Restart Computer Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + Success All Flow Launcher settings saved Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml index 2d32da003..f95e44dcf 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml @@ -5,10 +5,32 @@ Comando Descripción + Apagar + Reiniciar + Reiniciar con opciones de arranque avanzadas + Cerrar sesión/Apagar + Bloquear + Suspender + Hibernar + Opciones de indexación + Vaciar papelera de reciclaje + Abrir papelera de reciclaje + Salir + Guardar configuración + Reiniciar Flow Launcher" + Configuración + Recargar datos del complemento + Buscar actualizaciones + Abrir ubicación de registro + Consejos Flow Launcher + Carpeta UserData de Flow Launcher + Cambiar a Modo Juego + + Apaga el equipo Reinicia el equipo Reinicia el equipo con opciones avanzadas de arranque para el modo seguro y de depuración, entre otras opciones - Cierra la sesión + Cerrar sesión Bloquea el equipo Cierra Flow Launcher Reinicia Flow Launcher @@ -24,16 +46,16 @@ Busca actualizaciones de Flow Launcher Accede a la documentación de Flow Launcher para más ayuda y consejos de uso Abre la ubicación donde se almacena la configuración de Flow Launcher - Toggle Game Mode + Cambiar a Modo Juego - + Correcto Toda la configuración de Flow Launcher ha sido guardada Se recargaron todos los datos del complemento - ¿Está seguro que desea apagar el equipo? - ¿Está seguro que desea reiniciar el equipo? - ¿Está seguro que desea reiniciar el equipo con opciones de arranque avanzadas? - ¿Está seguro que desea cerrar la sesión? + ¿Está seguro de que desea apagar el equipo? + ¿Está seguro de que desea reiniciar el equipo? + ¿Está seguro de que desea reiniciar el equipo con opciones de arranque avanzadas? + ¿Está seguro de que desea cerrar la sesión? Comandos del sistema Proporciona comandos relacionados con el sistema. Por ejemplo, apagar, bloquear, configurar, etc. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/fr.xaml index 62e66c64b..6aea47df8 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/fr.xaml @@ -5,6 +5,28 @@ Commande Description + Arrêter + Redémarrer + Redémarrer avec les options de démarrage avancées + Se déconnecter + Verrouiller + Mettre en veille + Veille prolongée + Options d'indexation + Vider la corbeille + Ouvrir la corbeille + Quitter + Sauvegarder les paramètres + Redémarrer Flow Launcher + Paramètres + Recharger les données des plugins + Vérifier les mises à jour + Ouvrir l'emplacement des logs + Astuces pour Flow Launcher + Dossier des données utilisateur de Flow Launcher + Basculer le mode de jeu + + Éteindre l'ordinateur Redémarrer l'ordinateur Redémarrer l'ordinateur avec les options de démarrage avancées @@ -24,9 +46,9 @@ Vérifier de nouvelles mises à jour Flow Launcher Consultez la documentation de Flow Launcher pour plus d'aide et comment utiliser les conseils. Ouvrez l'emplacement où les paramètres de Flow Launcher sont stockés - Toggle Game Mode + Basculer le mode de jeu - + Ajouté avec succès Tous les paramètres Flow Launcher ont été sauvés Toutes les données du plugin applicables ont été rechargés diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml index 5691201a8..a70994188 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml @@ -5,6 +5,28 @@ Comando Descrizione + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Esci + Save Settings + Restart Flow Launcher" + Impostazioni + Ricarica i dati del plugin + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Attiva/Disattiva Modalità Di Gioco + + Spegni il computer Riavvia il Computer Riavvia il computer con le Opzioni di Avvio Avanzato per le Modalità di debug e Provvisoria, così come altre opzioni @@ -24,9 +46,9 @@ Controlla il nuovo aggiornamento di Flow Launcher Visita la documentazione di Flow Launcher per maggiori informazioni e suggerimenti su come usarlo Apri la posizione in cui vengono memorizzate le impostazioni di Flow Launcher - Toggle Game Mode + Attiva/Disattiva Modalità Di Gioco - + Successo Tutte le impostazioni di Flow Launcher sono state salvate Ricaricato tutti i dati del plugin applicabili diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml index 66c6c3bed..9080cf314 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml @@ -5,6 +5,28 @@ コマンド 説明 + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + + Save Settings + Restart Flow Launcher" + + プラグインデータのリロード + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + コンピュータをシャットダウンする コンピュータを再起動する Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + 成功しまし All Flow Launcher settings saved Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml index 35951a583..5389cbb38 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml @@ -5,6 +5,28 @@ 명령어 설명 + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + 종료 + Save Settings + Restart Flow Launcher" + 설정 + 플러그인 데이터 새로고 + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + 시스템 종료 시스템 재시작 안전 및 디버깅 모드에 대한 고급 부팅 옵션과 기타 옵션을 사용하여 시스템을 다시 시작 @@ -26,7 +48,7 @@ Flow Launcher의 설정이 저장된 위치 열기 Toggle Game Mode - + 성공 모든 Flow Launcher 설정을 저장했습니다 적용 가능한 모든 플러그인 데이터를 다시 로드했습니다 diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml index 2357454d0..41e005894 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml @@ -5,6 +5,28 @@ Command Description + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Exit + Save Settings + Restart Flow Launcher" + Settings + Reload Plugin Data + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Shutdown Computer Restart Computer Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + Success All Flow Launcher settings saved Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml index 85c04371c..a71e28e98 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml @@ -2,40 +2,62 @@ - Command - Description + Opdracht + Beschrijving - Shutdown Computer - Restart Computer - Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options - Log off - Lock this computer - Close Flow Launcher - Restart Flow Launcher + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Afsluiten + Save Settings + Restart Flow Launcher" + Instellingen + Reload Plugin Data + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + + Computer afsluiten + Computer opnieuw opstarten + Start de computer opnieuw op met geavanceerde opstartopties voor veilige en foutopsporing modi en andere opties + Afmelden + Deze computer vergrendelen + Sluit Flow Launcher + Flow Launcher herstarten Tweak Flow Launcher's settings - Put computer to sleep - Empty recycle bin + De computer in slaapstand zetten + Prullenbak leegmaken Open recycle bin Indexing Options - Hibernate computer - Save all Flow Launcher settings - Refreshes plugin data with new content - Open Flow Launcher's log location - Check for new Flow Launcher update - Visit Flow Launcher's documentation for more help and how to use tips - Open the location where Flow Launcher's settings are stored + De computer in sluimerstand zetten + Sla alle Flow Launcher instellingen op + Vernieuwt plugin data met nieuwe inhoud + Open de locatie van Flow Launcher's log bestand + Controleer op nieuwe Flow Launcher update + Bezoek Flow Launcher's documentatie voor meer hulp en tips + Open de locatie waar Flow Launcher's instellingen worden opgeslagen Toggle Game Mode - + Succesvol - All Flow Launcher settings saved - Reloaded all applicable plugin data - Are you sure you want to shut the computer down? - Are you sure you want to restart the computer? - Are you sure you want to restart the computer with Advanced Boot Options? + Alle Flow Launcher instellingen opgeslagen + Alle toepasselijke plugin gegevens zijn herladen + Weet u zeker dat u de computer wilt uitschakelen? + Weet u zeker dat u de computer wilt herstarten? + Weet u zeker dat u de computer wilt herstarten met geavanceerde opstartopties? Are you sure you want to log off? - System Commands - Provides System related commands. e.g. shutdown, lock, settings etc. + Systeemopdrachten + Voorziet in systeem gerelateerde opdrachten. bijv.: afsluiten, vergrendelen, instellingen, enz. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml index d01d780ae..4549f193e 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml @@ -5,6 +5,28 @@ Komenda Opis + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Wyjdź + Save Settings + Restart Flow Launcher" + Ustawienia + Reload Plugin Data + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Wyłącz komputer Uruchom ponownie komputer Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + Sukces All Flow Launcher settings saved Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml index 0bc352d80..b80ddf621 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml @@ -5,6 +5,28 @@ Comando Descrição + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Sair + Save Settings + Restart Flow Launcher" + Configurações + Recarregar Dados de Plugin + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Desligar o Computador Reiniciar o Computador Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + Sucesso All Flow Launcher settings saved Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml index f76c1f178..4d7609bcb 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-pt.xaml @@ -5,6 +5,28 @@ Comando Descrição + Desligar + Reiniciar + Reiniciar com opções avançadas de arranque + Terminar sessão + Bloquear + Suspender + Hibernar + Opções de indexação + Esvaziar reciclagem + Abrir reciclagem + Sair + Guardar definições + Reiniciar Flow Launcher + Definições + Recarregar dados do plugin + Procurar atualizações + Abrir localização de registo + Dicas Flow Launcher + Pasta de dados do utilizador Flow Launcher + Comutar modo de jogo + + Desligar computador Reiniciar computador Reinicia o computador com as opções avançadas de arranque para os modos de segurança e de depuração @@ -24,9 +46,9 @@ Procurar por novas versões do Flow Launcher Aceda à documentação para mais informações e dicas de utilização Abrir localização onde as definições do Flow Launcher estão guardadas - Toggle Game Mode + Comutar modo de jogo - + Sucesso Definições guardadas com sucesso Recarregar todos os dados aplicáveis ao plugin diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml index 3092c6299..927ccb0b6 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml @@ -5,6 +5,28 @@ Command Description + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Выйти + Save Settings + Restart Flow Launcher" + Настройки + Перезагрузить данные плагинов + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Shutdown Computer Restart Computer Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + Успешно All Flow Launcher settings saved Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml index dcad0ccee..82d8c2fe4 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml @@ -5,6 +5,28 @@ Príkaz Popis + Vypnúť + Reštartovať + Reštartovať s rozšírenými možnosťami spustenia + Odhlásiť sa + Zamknúť + Uspať + Hibernovať + Možnosti indexovania + Vyprázdniť kôš + Otvoriť kôš + Ukončiť + Uložiť nastavenia + Reštartovať Flow Launcher" + Nastavenia + Znova načítať údaje pluginov + Skontrolovať aktualizácie + Otvoriť umiestnenie denníka + Tipy pre Flow Launcher + Používateľský priečinok Flow Launchera + Prepnúť herný režim + + Vypnúť počítač Reštartovať počítač Reštartovať počítač s rozšírenými možnosťami spúšťania pre núdzový režim a režim ladenia, ako aj s ďalšími možnosťami @@ -24,9 +46,9 @@ Skontrolovať aktualizácie Flow Launchera V dokumentácii k aplikácii Flow Launcher nájdete ďalšiu pomoc a tipy na používanie Otvoriť umiestnenie, kde sú uložené nastavenia Flow Launchera - Toggle Game Mode + Prepnúť herný režim - + Úspešné Všetky nastavenia Flow Launchera uložené Všetky dáta pluginov aktualizované diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml index e8ba99c9a..fa6b54b81 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml @@ -5,6 +5,28 @@ Command Description + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Izlaz + Save Settings + Restart Flow Launcher" + Podešavanja + Reload Plugin Data + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Shutdown Computer Restart Computer Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + Uspešno All Flow Launcher settings saved Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml index c66601dba..9670d8297 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml @@ -5,6 +5,28 @@ Komut Açıklama + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Çıkı + Save Settings + Restart Flow Launcher" + Ayarlar + Reload Plugin Data + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + Bilgisayarı Kapat Yeniden Başlat Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + Başarılı Tüm Flow Launcher ayarları kaydedildi. Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml index ac73513f4..526144b43 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml @@ -2,40 +2,62 @@ - Command - Description + Команда + Опис - Shutdown Computer - Restart Computer - Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options - Log off - Lock this computer - Close Flow Launcher - Restart Flow Launcher - Tweak Flow Launcher's settings - Put computer to sleep - Empty recycle bin - Open recycle bin - Indexing Options - Hibernate computer - Save all Flow Launcher settings - Refreshes plugin data with new content - Open Flow Launcher's log location - Check for new Flow Launcher update - Visit Flow Launcher's documentation for more help and how to use tips - Open the location where Flow Launcher's settings are stored - Toggle Game Mode + Вимкнути + Перезавантажити + Перезавантажити з розширеними параметрами завантаження + Вийти з системи/облікового запису + Заблокувати + Режим сну + Режим глибокого сну + Опція індексу + Очистити кошик + Відкрити кошик + Вийти + Зберегти налаштування + Перезапустити Flow Launcher" + Налаштування + Перезавантажити дані плагінів + Перевірити наявність оновлень + Відкрити розташування журналу + Поради щодо Flow Launcher + Тека UserData Flow Launcher + Перемкнути режим гри - + + Вимкнути комп'ютер + Перезавантажити комп'ютер + Перезавантажте комп'ютер за допомогою Розширених параметрів завантаження для безпечного чи налагоджувального режимів, а також інших опцій + Вийти з системи + Заблокувати комп'ютер + Закрити Flow Launcher + Перезапустити Flow Launcher + Налаштування Flow Launcher + Переведення комп'ютера в режим сну + Очистити кошик + Відкрити кошик + Параметри індексації + Переведення комп'ютера в режим гібернації + Зберегти всі налаштування Flow Launcher + Оновлює дані плагіна новим вмістом + Відкрити розташування журналу Flow Launcher + Перевірити наявність оновлень Flow Launcher + Перегляньте документацію Flow Launcher для отримання додаткової допомоги та підказок щодо використання порад + Відкрити каталог, де зберігаються налаштування Flow Launcher + Перемкнути режим гри + + Успішно - All Flow Launcher settings saved - Reloaded all applicable plugin data - Are you sure you want to shut the computer down? - Are you sure you want to restart the computer? - Are you sure you want to restart the computer with Advanced Boot Options? - Are you sure you want to log off? + Усі налаштування Flow Launcher збережено + Перезавантажено всі відповідні дані плагіна + Ви впевнені, що хочете вимкнути комп'ютер? + Ви впевнені, що хочете перезавантажити комп'ютер? + Ви впевнені, що хочете перезавантажити комп'ютер за допомогою додаткових параметрів завантаження? + Ви впевнені, що хочете вийти з системи? - System Commands - Provides System related commands. e.g. shutdown, lock, settings etc. + Системні команди + Надає команди, пов'язані з системою, наприклад, вимкнення, блокування, налаштування тощо. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml index cba1e5fbe..be84d0e7f 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml @@ -5,6 +5,28 @@ 命令 描述 + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + 退出 + Save Settings + Restart Flow Launcher" + 设置 + 重新加载插件数据 + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + 关闭电脑 重启这台电脑 以高级启动选项重启计算机,用于安全和调试模式以及其他选项 @@ -26,7 +48,7 @@ 打开Flow Launcher 设置文件夹 Toggle Game Mode - + 成功 所有 Flow Launcher 设置已保存 重新加载了所有插件数据 diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml index cc469f808..62bf8f012 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml @@ -5,6 +5,28 @@ 命令 描述 + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + 結束 + Save Settings + Restart Flow Launcher" + 設定 + 重新載入插件資料 + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + 電腦關機 電腦重新啟動 Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options @@ -26,7 +48,7 @@ Open the location where Flow Launcher's settings are stored Toggle Game Mode - + All Flow Launcher settings saved Reloaded all applicable plugin data diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs index 074ffcc1f..cac45cbf4 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs @@ -2,11 +2,13 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Forms; using System.Windows.Interop; using Flow.Launcher.Infrastructure; +using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin.SharedCommands; using Application = System.Windows.Application; @@ -19,6 +21,7 @@ namespace Flow.Launcher.Plugin.Sys public class Main : IPlugin, ISettingProvider, IPluginI18n { private PluginInitContext context; + private Dictionary KeywordTitleMappings = new Dictionary(); #region DllImport @@ -59,6 +62,8 @@ namespace Flow.Launcher.Plugin.Sys var results = new List(); foreach (var c in commands) { + c.Title = GetDynamicTitle(query, c); + var titleMatch = StringMatcher.FuzzySearch(query.Search, c.Title); var subTitleMatch = StringMatcher.FuzzySearch(query.Search, c.SubTitle); @@ -77,9 +82,52 @@ namespace Flow.Launcher.Plugin.Sys return results; } + private string GetDynamicTitle(Query query, Result result) + { + if (!KeywordTitleMappings.TryGetValue(result.Title, out var translationKey)) + { + Log.Error("Flow.Launcher.Plugin.Sys.Main", $"Dynamic Title not found for: {result.Title}"); + return "Title Not Found"; + } + + var translatedTitle = context.API.GetTranslation(translationKey); + + if (result.Title == translatedTitle) + { + return result.Title; + } + + var englishTitleMatch = StringMatcher.FuzzySearch(query.Search, result.Title); + var translatedTitleMatch = StringMatcher.FuzzySearch(query.Search, translatedTitle); + + return englishTitleMatch.Score >= translatedTitleMatch.Score ? result.Title : translatedTitle; + } + public void Init(PluginInitContext context) { this.context = context; + KeywordTitleMappings = new Dictionary{ + {"Shutdown", "flowlauncher_plugin_sys_shutdown_computer_cmd"}, + {"Restart", "flowlauncher_plugin_sys_restart_computer_cmd"}, + {"Restart With Advanced Boot Options", "flowlauncher_plugin_sys_restart_advanced_cmd"}, + {"Log Off/Sign Out", "flowlauncher_plugin_sys_log_off_cmd"}, + {"Lock", "flowlauncher_plugin_sys_lock_cmd"}, + {"Sleep", "flowlauncher_plugin_sys_sleep_cmd"}, + {"Hibernate", "flowlauncher_plugin_sys_hibernate_cmd"}, + {"Index Option", "flowlauncher_plugin_sys_indexoption_cmd"}, + {"Empty Recycle Bin", "flowlauncher_plugin_sys_emptyrecyclebin_cmd"}, + {"Open Recycle Bin", "flowlauncher_plugin_sys_openrecyclebin_cmd"}, + {"Exit", "flowlauncher_plugin_sys_exit_cmd"}, + {"Save Settings", "flowlauncher_plugin_sys_save_all_settings_cmd"}, + {"Restart Flow Launcher", "flowlauncher_plugin_sys_restart_cmd"}, + {"Settings", "flowlauncher_plugin_sys_setting_cmd"}, + {"Reload Plugin Data", "flowlauncher_plugin_sys_reload_plugin_data_cmd"}, + {"Check For Update", "flowlauncher_plugin_sys_check_for_update_cmd"}, + {"Open Log Location", "flowlauncher_plugin_sys_open_log_location_cmd"}, + {"Flow Launcher Tips", "flowlauncher_plugin_sys_open_docs_tips_cmd"}, + {"Flow Launcher UserData Folder", "flowlauncher_plugin_sys_open_userdata_location_cmd"}, + {"Toggle Game Mode", "flowlauncher_plugin_sys_toggle_game_mode_cmd"} + }; } private List Commands() @@ -139,7 +187,7 @@ namespace Flow.Launcher.Plugin.Sys context.API.GetTranslation("flowlauncher_plugin_sys_dlgtext_restart_computer_advanced"), context.API.GetTranslation("flowlauncher_plugin_sys_restart_computer"), MessageBoxButton.YesNo, MessageBoxImage.Warning); - + if (result == MessageBoxResult.Yes) Process.Start("shutdown", "/r /o /t 0"); @@ -158,7 +206,7 @@ namespace Flow.Launcher.Plugin.Sys context.API.GetTranslation("flowlauncher_plugin_sys_dlgtext_logoff_computer"), context.API.GetTranslation("flowlauncher_plugin_sys_log_off"), MessageBoxButton.YesNo, MessageBoxImage.Warning); - + if (result == MessageBoxResult.Yes) ExitWindowsEx(EWX_LOGOFF, 0); @@ -198,7 +246,7 @@ namespace Flow.Launcher.Plugin.Sys info.UseShellExecute = true; ShellCommand.Execute(info); - + return true; } }, @@ -315,7 +363,7 @@ namespace Flow.Launcher.Plugin.Sys context.API.GetTranslation( "flowlauncher_plugin_sys_dlgtext_all_applicableplugins_reloaded")), System.Threading.Tasks.TaskScheduler.Current); - + return true; } }, diff --git a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json index a893c0ea2..5276690e3 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json @@ -4,7 +4,7 @@ "Name": "System Commands", "Description": "Provide System related commands. e.g. shutdown,lock, setting etc.", "Author": "qianlifeng", - "Version": "3.0.3", + "Version": "3.1.1", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/uk-UA.xaml index 418731021..45f29423a 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/uk-UA.xaml @@ -1,17 +1,17 @@  - Open search in: - New Window - New Tab + Запустити пошук: + Нове вікно + Нова вкладка - Open url:{0} - Can't open url:{0} + Відкрити URL:{0} + Не вдається відкрити URL:{0} URL - Open the typed URL from Flow Launcher + Відкрити набрану URL-адресу з Flow Launcher - Please set your browser path: - Choose - Application(*.exe)|*.exe|All files|*.* + Будь ласка, встановіть шлях до вашого браузера: + Обрати + Application(*.exe)|*.exe|Усі файли|*.* diff --git a/Plugins/Flow.Launcher.Plugin.Url/plugin.json b/Plugins/Flow.Launcher.Plugin.Url/plugin.json index da1a0bfd5..79a96171c 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Url/plugin.json @@ -4,7 +4,7 @@ "Name": "URL", "Description": "Open the typed URL from Flow Launcher", "Author": "qianlifeng", - "Version": "3.0.3", + "Version": "3.0.4", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Url.dll", diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml index fefbfaaee..86e62f0e5 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml @@ -20,7 +20,7 @@ Usar autocompletado en consultas de búsqueda: Autocompletar datos desde: Por favor, seleccione una búsqueda web - ¿Está seguro que desea eliminar {0}? + ¿Está seguro de que desea eliminar {0}? Si desea añadir una búsqueda de un sitio web concreto a Flow, introduzca primero una cadena de texto ficticia en la barra de búsqueda de ese sitio web, y ejecute la búsqueda. Ahora copie el contenido de la barra de direcciones del navegador y péguelo en el campo de la URL abajo indicado. Sustituya su cadena de prueba por {q}. Por ejemplo, si busca Casino en Netflix, su barra de direcciones debe decir https://www.netflix.com/search?q=Casino diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml index 091102a0a..87419023b 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml @@ -1,51 +1,51 @@  - Search Source Setting - Open search in: - New Window - New Tab - Set browser from path: - Choose + Налаштування джерела пошуку + Запустити пошук: + Нове вікно + Нова вкладка + Встановити браузер за шляхом: + Обрати Видалити Редагувати Додати - Enabled - Enabled - Disabled - Confirm - Action Keyword + Увімкнено + Увімкнено + Вимкнено + Підтвердити + Ключове слово дії URL - Search - Use Search Query Autocomplete: - Autocomplete Data from: - Please select a web search - Are you sure you want to delete {0}? - If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads + Пошук + Використовувати автозаповнення пошукового запиту: + Автозаповнення даних з: + Будь ласка, виберіть пошуковий запит в Інтернеті + Ви впевнені, що хочете видалити {0}? + Якщо ви хочете додати до Flow пошук певного веб-сайту, спочатку введіть фіктивний текстовий рядок у пошуковий рядок цього веб-сайту і розпочніть пошук. Тепер скопіюйте вміст адресного рядка браузера і вставте його в поле URL нижче. Замініть тестовий рядок на {q}. Наприклад, якщо ви шукаєте казино на сайті Netflix, його адресний рядок матиме такий вигляд https://www.netflix.com/search?q=Casino - Now copy this entire string and paste it in the URL field below. - Then replace casino with {q}. - Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} + Тепер скопіюйте весь цей рядок і вставте його в поле URL нижче. + Потім замініть casino на {q}. + Таким чином, загальна формула для пошуку на Netflix має вигляд https://www.netflix.com/search?q={q} - Title - Status - Select Icon - Icon + Назва + Статус + Обрати значок + Іконка Скасувати - Invalid web search - Please enter a title - Please enter an action keyword - Please enter a URL - Action keyword already exists, please enter a different one + Неправильний веб-пошук + Будь ласка, введіть назву + Будь ласка, введіть ключове слово дії + Будь ласка, введіть URL-адресу + Ключове слово дії вже існує, будь ласка, введіть інше Успішно - Hint: You do not need to place custom images in this directory, if Flow's version is updated they will be lost. Flow will automatically copy any images outside of this directory across to WebSearch's custom image location. + Підказка: Вам не потрібно розміщувати власні зображення в цьому каталозі, якщо версія Flow оновиться, вони будуть втрачені. Flow автоматично копіює всі зображення з цього каталогу до спеціального каталогу WebSearch. - Web Searches - Allows to perform web searches + Веб-пошук + Дозволяє здійснювати веб-пошук diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Settings.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/Settings.cs index 6cf1446af..f0e5ac327 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Settings.cs @@ -197,7 +197,8 @@ namespace Flow.Launcher.Plugin.WebSearch public SuggestionSource[] Suggestions { get; set; } = { new Google(), new Baidu(), - new Bing() + new Bing(), + new DuckDuckGo() }; [JsonIgnore] diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SuggestionSources/DuckDuckGo.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/SuggestionSources/DuckDuckGo.cs new file mode 100644 index 000000000..8fafb44cc --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SuggestionSources/DuckDuckGo.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Flow.Launcher.Infrastructure.Http; +using Flow.Launcher.Infrastructure.Logger; +using System.Net.Http; +using System.Threading; +using System.Text.Json; + +namespace Flow.Launcher.Plugin.WebSearch.SuggestionSources +{ + public class DuckDuckGo : SuggestionSource + { + public override async Task> SuggestionsAsync(string query, CancellationToken token) + { + // When the search query is empty, DuckDuckGo returns `[]`. When it's not empty, it returns data + // in the following format: `["query", ["suggestion1", "suggestion2", ...]]`. + if (string.IsNullOrEmpty(query)) + { + return new List(); + } + + try + { + const string api = "https://duckduckgo.com/ac/?type=list&q="; + + await using var resultStream = await Http.GetStreamAsync(api + Uri.EscapeDataString(query), token: token).ConfigureAwait(false); + + using var json = await JsonDocument.ParseAsync(resultStream, cancellationToken: token); + + var results = json.RootElement.EnumerateArray().ElementAt(1); + + return results.EnumerateArray().Select(o => o.GetString()).ToList(); + + } + catch (Exception e) when (e is HttpRequestException or {InnerException: TimeoutException}) + { + Log.Exception("|DuckDuckGo.Suggestions|Can't get suggestion from DuckDuckGo", e); + return null; + } + catch (JsonException e) + { + Log.Exception("|DuckDuckGo.Suggestions|can't parse suggestions", e); + return new List(); + } + } + + public override string ToString() + { + return "DuckDuckGo"; + } + } +} diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json index 1d24556da..12e0566f9 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json @@ -26,7 +26,7 @@ "Name": "Web Searches", "Description": "Provide the web search ability", "Author": "qianlifeng", - "Version": "3.0.5", + "Version": "3.0.7", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.WebSearch.dll", diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.fr-FR.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.fr-FR.resx index 89cb40ace..9864cdfc1 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.fr-FR.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.fr-FR.resx @@ -1737,136 +1737,136 @@ Mean zooming of things via a magnifier - Change device installation settings + Modifier les paramètres d'installation de l'appareil - Turn off background images + Désactiver les images d'arrière-plan - Navigation properties + Propriétés de navigation - Media streaming options + Options de diffusion des médias - Make a file type always open in a specific program + Faire en sorte qu'un type de fichier s'ouvre toujours dans un programme spécifique - Change the Narrator’s voice + Changer la voix du Narrateur - Find and fix keyboard problems + Trouver et résoudre les problèmes liés au clavier - Use screen reader + Utiliser le lecteur d'écran - Show which workgroup this computer is on + Afficher le groupe de travail sur lequel cet ordinateur est allumé - Change mouse wheel settings + Modifier les paramètres de la molette de la souris - Manage computer certificates + Gérer les certificats de l'ordinateur - Find and fix problems + Trouver et résoudre les problèmes - Change settings for content received using Tap and send + Modifier les paramètres pour le contenu reçu en utilisant Tap and send - Change default settings for media or devices + Modifier les paramètres par défaut pour les médias ou appareils - Print the speech reference card + Imprimer la carte de référence vocale - Calibrate display colour + Calibrer la couleur de l'affichage - Manage file encryption certificates + Gérer les certificats de chiffrement de fichiers - View recent messages about your computer + Voir les messages récents à propos de votre ordinateur - Give other users access to this computer + Donner accès à cet ordinateur aux autres utilisateurs - Show hidden files and folders + Afficher les fichiers et dossiers cachés - Change Windows To Go start-up options + Modifier les options de démarrage de Windows To Go - See which processes start up automatically when you start Windows + Voir quels processus démarrent automatiquement lorsque vous démarrez Windows - Tell if an RSS feed is available on a website + Indiquer si un flux RSS est disponible sur un site web - Add clocks for different time zones + Ajouter des horloges pour différents fuseaux horaires - Add a Bluetooth device + Ajouter un appareil Bluetooth - Customise the mouse buttons + Personnaliser les boutons de la souris - Set tablet buttons to perform certain tasks + Définir les boutons de tablette pour effectuer certaines tâches - View installed fonts + Afficher les polices installées - Change the way currency is displayed + Changer la façon dont la devise est affichée - Edit group policy + Modifier la politique de groupe - Manage browser add-ons + Gérer les modules complémentaires du navigateur - Check processor speed + Vérifier la vitesse du processeur - Check firewall status + Vérifier le statut du pare-feu - Send or receive a file + Envoyer ou recevoir un fichier - Add or remove user accounts + Ajouter ou supprimer des comptes utilisateur - Edit the system environment variables + Modifier les variables d'environnement système - Manage BitLocker + Gérer BitLocker - Auto-hide the taskbar + Masquer automatiquement la barre des tâches - Change sound card settings + Modifier les paramètres de la carte son - Make changes to accounts + Apporter des modifications aux comptes - Edit local users and groups + Modifier les utilisateurs et les groupes locaux - View network computers and devices + Afficher les ordinateurs et périphériques réseau - Install a program from the network + Installer un programme depuis le réseau - View scanners and cameras + Voir les scanners et caméras Microsoft IME Register Word (Japanese) @@ -1890,7 +1890,7 @@ Microsoft New Phonetic Settings - Generate a system health report + Générer un rapport de santé du système Fix problems with your computer @@ -1899,10 +1899,10 @@ Back up and Restore (Windows 7) - Preview, delete, show or hide fonts + Aperçu, supprimer, afficher ou masquer les polices - Microsoft Quick Settings + Paramètres rapides Microsoft View reliability history @@ -1929,16 +1929,16 @@ Change what closing the lid does - Turn off unnecessary animations + Désactiver les animations non nécessaires - Create a restore point + Créer un point de restauration - Turn off automatic window arrangement + Désactiver l'agencement automatique des fenêtres - Troubleshooting History + Historique de dépannage Diagnose your computer's memory problems @@ -1950,16 +1950,16 @@ Change cursor blink rate - Add or remove programs + Ajouter ou supprimer des programmes - Create a password reset disk + Créer un disque de réinitialisation de mot de passe Configure advanced user profile properties - Start or stop using AutoPlay for all media and devices + Démarrer ou arrêter l'utilisation de la fonction AutoPlay pour tous les médias et appareils Change Automatic Maintenance settings @@ -1971,25 +1971,25 @@ Select users who can use remote desktop - Show which programs are installed on your computer + Afficher les programmes installés sur votre ordinateur Allow remote access to your computer - View advanced system settings + Afficher les paramètres avancés du système - How to install a program + Comment installer un programme - Change how your keyboard works + Modifier le fonctionnement de votre clavier - Automatically adjust for daylight saving time + Ajustement automatique à l'heure d'été - Change the order of Windows SideShow gadgets + Modifier l'ordre des gadgets Windows SideShow Check keyboard status @@ -2013,7 +2013,7 @@ Change your homepage - Group similar windows on the taskbar + Grouper les fenêtres similaires sur la barre des tâches Change Windows SideShow settings @@ -2031,7 +2031,7 @@ Change when the computer sleeps - Set up a virtual private network (VPN) connection + Configurer une connexion à un réseau privé virtuel (VPN) Accommodate learning abilities @@ -2040,10 +2040,10 @@ Set up a dial-up connection - Set up a connection or network + Configurer une connexion ou un réseau - How to change your Windows password + Comment modifier votre mot de passe Windows Make it easier to see the mouse pointer @@ -2097,13 +2097,13 @@ Show how much RAM is on this computer - Edit power plan + Modifier le mode de gestion d'alimentation - Adjust system volume + Ajuster le volume système - Defragment and optimise your drives + Défragmenter et optimiser les lecteurs Set up ODBC data sources (32-bit) @@ -2115,7 +2115,7 @@ Magnify portions of the screen using Magnifier - Change the file type associated with a file extension + Modifier le type de fichier associé à une extension de fichier View event logs @@ -2140,10 +2140,10 @@ - Turn Windows features on or off + Activer ou désactiver des fonctionnalités Windows - Show which operating system your computer is running + Afficher le système d'exploitation utilisé par l'ordinateur View local services @@ -2161,10 +2161,10 @@ Advanced printer setup - Change default printer + Changer l'imprimante par défaut - Edit environment variables for your account + Modifier les variables d'environnement pour votre compte Optimise visual display @@ -2182,7 +2182,7 @@ Clear disk space by deleting unnecessary files - View devices and printers + Afficher les appareils et les imprimantes Private Character Editor @@ -2206,16 +2206,16 @@ Choose the order of how your screen rotates - Change how Windows searches + Modifier le mode de recherche de Windows Set flicks to perform certain tasks - Change account type + Changer le type de compte - Change screen saver + Modifier l'économiseur d'écran Change User Account Control settings @@ -2224,10 +2224,10 @@ Turn on easy access keys - Identify and repair network problems + Identifier et réparer les problèmes de réseau - Find and fix networking and connection problems + Rechercher et résoudre les problèmes de réseau et de connexion Play CDs or other media automatically @@ -2236,34 +2236,34 @@ View basic information about your computer - Choose how you open links + Choisissez comment ouvrir les liens Allow Remote Assistance invitations to be sent from this computer - Task Manager + Gestionnaire des tâches Turn flicks on or off - Add a language + Ajouter une langue - View network status and tasks + Afficher l'état du réseau et les tâches - Turn Magnifier on or off + Activer ou désactiver la loupe - See the name of this computer + Afficher le nom de cet ordinateur - View network connections + Afficher les connexions réseau - Perform recommended maintenance tasks automatically + Effectuer automatiquement les tâches de maintenance recommandées Manage disk space used by your offline files @@ -2281,7 +2281,7 @@ Change the way dates and lists are displayed - Manage audio devices + Gérer les appareils audio Change security settings @@ -2290,7 +2290,7 @@ Check security status - Delete cookies or temporary files + Supprimer les cookies ou les fichiers temporaires Specify which hand you write with @@ -2323,7 +2323,7 @@ Enable or disable session cookies - Give administrative rights to a domain user + Donner des droits d'administration à un utilisateur du domaine Choose when to turn off display @@ -2332,7 +2332,7 @@ Move the pointer with the keypad using MouseKeys - Change Windows SideShow-compatible device settings + Modifier les paramètres des appareils compatibles avec Windows SideShow Adjust commonly used mobility settings @@ -2341,7 +2341,7 @@ Change text-to-speech settings - Set the time and date + Définir l'heure et la date Change location settings @@ -2350,16 +2350,16 @@ Change mouse settings - Manage Storage Spaces + Gérer les espaces de stockage Show or hide file extensions - Allow an app through Windows Firewall + Autoriser une application via le pare-feu Windows - Change system sounds + Modifier les sons du système Adjust ClearType text @@ -2368,25 +2368,25 @@ Turn screen saver on or off - Find and fix windows update problems + Rechercher et résoudre les problèmes de mise à jour de Windows Change Bluetooth settings - Connect to a network + Se connecter à un réseau - Change the search provider in Internet Explorer + Changer le moteur de recherche dans Internet Explorer Join a domain - Add a device + Ajouter un appareil - Find and fix problems with Windows Search + Rechercher et résoudre les problèmes avec Windows Search Choose a power plan @@ -2395,7 +2395,7 @@ Change how the mouse pointer looks when it’s moving - Uninstall a program + Désinstaller un programme Create and format hard disk partitions @@ -2407,7 +2407,7 @@ Change PC wake-up settings - Manage network passwords + Gérer les mots de passe réseau Change input methods @@ -2419,10 +2419,10 @@ Change battery settings - Rename this computer + Renommer cet ordinateur - Lock or unlock the taskbar + Verrouiller ou déverrouiller la barre des tâches Manage Web Credentials @@ -2431,16 +2431,16 @@ Change the time zone - Start speech recognition + Démarrer la reconnaissance vocale - View installed updates + Afficher les mises à jour installées - What's happened to the Quick Launch toolbar? + Qu'est-il arrivé à la barre d'outils de lancement rapide ? - Change search options for files and folders + Modifier les options de recherche pour les fichiers et les dossiers Adjust settings before giving a presentation @@ -2464,13 +2464,13 @@ Set up a broadband connection - Calibrate the screen for pen or touch input + Calibrer l'écran pour le stylet ou la touche d'entrée - Manage user certificates + Gérer les certificats utilisateur - Schedule tasks + Planifier des tâches Ignore repeated keystrokes using FilterKeys @@ -2485,7 +2485,7 @@ Delete browsing history - Change what the power buttons do + Changer ce que font les boutons d'alimentation Create standard user account @@ -2494,13 +2494,13 @@ Take speech tutorials - View system resource usage in Task Manager + Afficher l'utilisation des ressources du système dans le gestionnaire des tâches - Create an account + Créer un compte - Get more features with a new edition of Windows + Obtenez plus de fonctionnalités avec une nouvelle édition de Windows Panneau de configuration @@ -2509,6 +2509,6 @@ TaskLink - Unknown + Inconnu \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.nl-NL.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.nl-NL.resx index e5ff84248..c28489cc8 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.nl-NL.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.nl-NL.resx @@ -456,7 +456,7 @@ Area Personalization - Command + Opdracht The command to direct start a setting diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.uk-UA.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.uk-UA.resx index 3b598e40c..9d801e0d4 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.uk-UA.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.uk-UA.resx @@ -126,66 +126,66 @@ File name, Should not translated - Accessibility Options + Параметри доступності Area Control Panel (legacy settings) - Accessory apps + Додаткові програми Area Privacy - Access work or school + Доступ до роботи або навчання Area UserAccounts - Account info + Інформація про обліковий запис Area Privacy - Accounts + Облікові записи Area SurfaceHub - Action Center + Центр дій Area Control Panel (legacy settings) - Activation + Активація Area UpdateAndSecurity - Activity history + Історія активності Area Privacy - Add Hardware + Додати обладнання Area Control Panel (legacy settings) - Add/Remove Programs + Додавання/видалення програм Area Control Panel (legacy settings) - Add your phone + Додайте свій телефон Area Phone - Administrative Tools + Адміністративні інструменти Area System - Advanced display settings + Розширені налаштування дисплея Area System, only available on devices that support advanced display options - Advanced graphics + Розширена графіка - Advertising ID + Рекламний ідентифікатор Area Privacy, Deprecated in Windows 10, version 1809 and later - Airplane mode + Режим польоту Area NetworkAndInternet @@ -193,40 +193,40 @@ Means the key combination "Tabulator+Alt" on the keyboard - Alternative names + Альтернативні назви - Animations + Анімації - App color + Колір програми - App diagnostics + Діагностика програми Area Privacy - App features + Можливості програми Area Apps - App + Застосунок Short/modern name for application - Apps and Features + Додатки та функції Area Apps - System settings + Налаштування системи Type of the setting is a "Modern Windows settings". We use the same term as used in start menu search at the moment. - Apps for websites + Додатки для веб-сайтів Area Apps - App volume and device preferences + Гучність програми та налаштування пристрою Area System, Added in Windows 10, version 1903 @@ -234,159 +234,159 @@ File name, Should not translated - Area + Область Mean the settings area or settings category - Accounts + Облікові записи - Administrative Tools + Адміністративні інструменти Area Control Panel (legacy settings) - Appearance and Personalization + Зовнішній вигляд та персоналізація - Apps + Додатки - Clock and Region + Час і регіон - Control Panel + Панель управління - Cortana + Кортана - Devices + Пристрої - Ease of access + Легкість доступу - Extras + Доповнення - Gaming + Ігри - Hardware and Sound + Апаратне забезпечення та звук - Home page + Головна сторінка - Mixed reality + Змішана реальність - Network and Internet + Мережа та Інтернет - Personalization + Персоналізація - Phone + Телефон - Privacy + Конфіденційність - Programs + Програми SurfaceHub - System + Система - System and Security + Система та безпека - Time and language + Час і мова - Update and security + Оновлення та безпека - User accounts + Облікові записи користувачів - Assigned access + Призначений доступ - Audio + Аудіо Area EaseOfAccess - Audio alerts + Звукові сповіщення - Audio and speech + Аудіо та мовлення Area MixedReality, only available if the Mixed Reality Portal app is installed. - Automatic file downloads + Автоматичне завантаження файлів Area Privacy - AutoPlay + Автовідтворення Area Device - Background + Тло Area Personalization - Background Apps + Фонові програми Area Privacy - Backup + Резервне копіювання Area UpdateAndSecurity - Backup and Restore + Резервне копіювання та відновлення Area Control Panel (legacy settings) - Battery Saver + Економія заряду батареї Area System, only available on devices that have a battery, such as a tablet - Battery Saver settings + Налаштування енергозбереження Area System, only available on devices that have a battery, such as a tablet - Battery saver usage details + Детальна інформація про використання економії заряду акумулятора - Battery use + Використання батареї Area System, only available on devices that have a battery, such as a tablet - Biometric Devices + Біометричні пристрої Area Control Panel (legacy settings) - BitLocker Drive Encryption + Шифрування диска BitLocker Area Control Panel (legacy settings) - Blue light + Синє світло Bluetooth Area Device - Bluetooth devices + Пристрої Bluetooth Area Control Panel (legacy settings) - Blue-yellow + Синьо-жовтий Bopomofo IME @@ -397,22 +397,22 @@ Should not translated - Broadcasting + Трансляція Area Gaming - Calendar + Календар Area Privacy - Call history + Історія дзвінків Area Privacy - calling + виклик - Camera + Камера Area Privacy @@ -424,118 +424,118 @@ Mean the "Caps Lock" key - Cellular and SIM + Стільниковий зв'язок та SIM-карта Area NetworkAndInternet - Choose which folders appear on Start + Виберіть, які папки відображатимуться на панелі Пуск Area Personalization - Client service for NetWare + Обслуговування клієнтів для NetWare Area Control Panel (legacy settings) - Clipboard + Буфер обміну Area System - Closed captions + Субтитри Area EaseOfAccess - Color filters + Кольорові фільтри Area EaseOfAccess - Color management + Керування кольором Area Control Panel (legacy settings) - Colors + Кольори Area Personalization - Command + Команда The command to direct start a setting - Connected Devices + Підключені пристрої Area Device - Contacts + Контакти Area Privacy - Control Panel + Панель управління Type of the setting is a "(legacy) Control Panel setting" - Copy command + Скопіювати команду - Core Isolation + Ізоляція ядра Means the protection of the system core - Cortana + Кортана Area Cortana - Cortana across my devices + Кортана на всіх моїх пристроях Area Cortana - Cortana - Language + Кортана - Мова Area Cortana - Credential manager + Менеджер облікових даних Area Control Panel (legacy settings) - Crossdevice + Кроспристрійний - Custom devices + Спеціальні пристрої - Dark color + Темний колір - Dark mode + Темний режим - Data usage + Використання даних Area NetworkAndInternet - Date and time + Дата і час Area TimeAndLanguage - Default apps + Програми за замовчуванням Area Apps - Default camera + Камера за замовчуванням Area Device - Default location + Розташування за замовчуванням Area Control Panel (legacy settings) - Default programs + Програми за замовчуванням Area Control Panel (legacy settings) - Default Save Locations + Місця збереження за замовчуванням Area System - Delivery Optimization + Оптимізація доставки Area UpdateAndSecurity @@ -543,19 +543,19 @@ File name, Should not translated - Desktop themes + Теми для робочого столу Area Control Panel (legacy settings) - deuteranopia + дейтеранопія Medical: Mean you don't can see red colors - Device manager + Диспетчер пристроїв Area Control Panel (legacy settings) - Devices and printers + Пристрої та принтери Area Control Panel (legacy settings) @@ -563,63 +563,63 @@ Should not translated - Dial-up + Комутований зв'язок Area NetworkAndInternet - Direct access + Прямий доступ Area NetworkAndInternet, only available if DirectAccess is enabled - Direct open your phone + Пряме відкриття телефону Area EaseOfAccess - Display + Відображення Area EaseOfAccess - Display properties + Властивості відображення Area Control Panel (legacy settings) - DNS + ДНС Should not translated - Documents + Документи Area Privacy - Duplicating my display + Дублювання мого дисплею Area System - During these hours + Протягом цих годин Area System - Ease of access center + Центр легкого доступу Area Control Panel (legacy settings) - Edition + Видання Means the "Windows Edition" - Email + Електронна пошта Area Privacy - Email and app accounts + Облікові записи електронної пошти та додатків Area UserAccounts - Encryption + Шифрування Area System - Environment + Середовище Area MixedReality, only available if the Mixed Reality Portal app is installed. @@ -627,30 +627,30 @@ Area NetworkAndInternet - Exploit Protection + Захист від експлойтів - Extras + Доповнення Area Extra, , only used for setting of 3rd-Party tools - Eye control + Зоровий контроль Area EaseOfAccess - Eye tracker + Відстежувач очей Area Privacy, requires eyetracker hardware - Family and other people + Сім'я та інші люди Area UserAccounts - Feedback and diagnostics + Зворотній зв'язок та діагностика Area Privacy - File system + Файлова система Area Privacy @@ -662,42 +662,42 @@ File name, Should not translated - Find My Device + Знайти мій пристрій Area UpdateAndSecurity - Firewall + Брандмауер - Focus assist - Quiet hours + Допомога з фокусуванням - Тихі години Area System - Focus assist - Quiet moments + Допомога з фокусуванням - Тихі моменти Area System - Folder options + Параметри папки Area Control Panel (legacy settings) - Fonts + Шрифти Area EaseOfAccess - For developers + Для розробників Area UpdateAndSecurity - Game bar + Ігрова панель Area Gaming - Game controllers + Ігрові контролери Area Control Panel (legacy settings) - Game DVR + Ігровий DVR Area Gaming @@ -705,7 +705,7 @@ Area Gaming - Gateway + Шлюз Should not translated @@ -713,61 +713,61 @@ Area Privacy - Get programs + Отримати програми Area Control Panel (legacy settings) - Getting started + Початок роботи Area Control Panel (legacy settings) - Glance + Погляд Area Personalization, Deprecated in Windows 10, version 1809 and later - Graphics settings + Графічні налаштування Area System - Grayscale + Відтінки сірого - Green week + Зелений тиждень Mean you don't can see green colors - Headset display + Відображення гарнітури Area MixedReality, only available if the Mixed Reality Portal app is installed. - High contrast + Високий контраст Area EaseOfAccess - Holographic audio + Голографічний звук - Holographic Environment + Голографічне середовище - Holographic Headset + Голографічна гарнітура - Holographic Management + Голографічне управління - Home group + Домашня група Area Control Panel (legacy settings) - ID + Ідентифікатор MEans The "Windows Identifier" - Image + Зображення - Indexing options + Параметри індексації Area Control Panel (legacy settings) @@ -775,15 +775,15 @@ File name, Should not translated - Infrared + Інфрачервоне випромінювання Area Control Panel (legacy settings) - Inking and typing + Малювання та друк Area Privacy - Internet options + Параметри Інтернету Area Control Panel (legacy settings) @@ -791,17 +791,17 @@ File name, Should not translated - Inverted colors + Інвертовані кольори - IP + IP-адреса Should not translated - Isolated Browsing + Ізольований перегляд - Japan IME settings + Налаштування IME в Японії Area TimeAndLanguage, available if the Microsoft Japan input method editor is installed @@ -809,7 +809,7 @@ File name, Should not translated - Joystick properties + Властивості джойстика Area Control Panel (legacy settings) @@ -817,39 +817,39 @@ Should not translated - Keyboard + Клавіатура Area EaseOfAccess - Keypad + Клавіатура - Keys + Клавіші Мова Area TimeAndLanguage - Light color + Світлий колір - Light mode + Легкий режим - Location + Місцезнаходження Area Privacy - Lock screen + Екран блокування Area Personalization - Magnifier + Лупа Area EaseOfAccess - Mail - Microsoft Exchange or Windows Messaging + Пошта - Microsoft Exchange або Windows Messaging Area Control Panel (legacy settings) @@ -857,26 +857,26 @@ File name, Should not translated - Manage known networks + Керування відомими мережами Area NetworkAndInternet - Manage optional features + Керування додатковими функціями Area Apps - Messaging + Обмін повідомленнями Area Privacy - Metered connection + Дозоване підключення - Microphone + Мікрофон Area Privacy - Microsoft Mail Post Office + Поштова служба Microsoft Mail Area Control Panel (legacy settings) @@ -888,10 +888,10 @@ File name, Should not translated - Mobile devices + Мобільні пристрої - Mobile hotspot + Мобільна точка доступу Area NetworkAndInternet @@ -899,46 +899,46 @@ File name, Should not translated - Mono + Моно - More details + Детальніше Area Cortana - Motion + Рух Area Privacy - Mouse + Миша Area EaseOfAccess - Mouse and touchpad + Миша та тачпад Area Device - Mouse, Fonts, Keyboard, and Printers properties + Властивості миші, шрифтів, клавіатури та принтерів Area Control Panel (legacy settings) - Mouse pointer + Вказівник миші Area EaseOfAccess - Multimedia properties + Властивості мультимедіа Area Control Panel (legacy settings) - Multitasking + Багатозадачність Area System - Narrator + Диктор Area EaseOfAccess - Navigation bar + Панель навігації Area Personalization @@ -950,27 +950,27 @@ File name, Should not translated - Network + Мережа Area NetworkAndInternet - Network and sharing center + Мережа та центр обміну даними Area Control Panel (legacy settings) - Network connection + Підключення до мережі Area Control Panel (legacy settings) - Network properties + Властивості мережі Area Control Panel (legacy settings) - Network Setup Wizard + Майстер налаштування мережі Area Control Panel (legacy settings) - Network status + Стан мережі Area NetworkAndInternet @@ -978,88 +978,88 @@ Area NetworkAndInternet - NFC Transactions + NFC-транзакції "NFC should not translated" - Night light + Нічник - Night light settings + Налаштування нічника Area System - Note + Примітка - Only available when you have connected a mobile device to your device. + Доступно лише після підключення мобільного пристрою до вашого пристрою. - Only available on devices that support advanced graphics options. + Доступно лише на пристроях, що підтримують розширені графічні опції. - Only available on devices that have a battery, such as a tablet. + Доступно лише на пристроях з акумулятором, таких як планшет. - Deprecated in Windows 10, version 1809 (build 17763) and later. + Застаріла у Windows 10, версії 1809 (збірка 17763) та пізніших версіях. - Only available if Dial is paired. + Доступно, якщо циферблат під'єднано. - Only available if DirectAccess is enabled. + Доступно, якщо увімкнено DirectAccess. - Only available on devices that support advanced display options. + Доступно лише на пристроях, які підтримують розширені параметри відображення. - Only present if user is enrolled in WIP. + Присутній лише якщо користувач зареєстрований у WIP. - Requires eyetracker hardware. + Вимагає обладнання для відстеження очей. - Available if the Microsoft Japan input method editor is installed. + Доступно, якщо встановлено редактор методів введення Microsoft Japan. - Available if the Microsoft Pinyin input method editor is installed. + Доступно, якщо встановлено редактор способів введення Microsoft Pinyin. - Available if the Microsoft Wubi input method editor is installed. + Доступно, якщо встановлено редактор методів введення Microsoft Wubi. - Only available if the Mixed Reality Portal app is installed. + Доступно лише якщо встановлено додаток Портал змішаної реальності. - Only available on mobile and if the enterprise has deployed a provisioning package. + Доступно лише на мобільних пристроях або якщо на підприємстві розгорнуто пакет забезпечення. - Added in Windows 10, version 1903 (build 18362). + Додано у Windows 10, версія 1903 (збірка 18362). - Added in Windows 10, version 2004 (build 19041). + Додано у Windows 10, версія 2004 (збірка 19041). - Only available if "settings apps" are installed, for example, by a 3rd party. + Доступно, якщо "програми налаштувань" встановлені, наприклад, третьою стороною. - Only available if touchpad hardware is present. + Доступно лише за наявності апаратного забезпечення тачпада. - Only available if the device has a Wi-Fi adapter. + Доступно лише за наявності на пристрої адаптера Wi-Fi. - Device must be Windows Anywhere-capable. + Пристрій повинен підтримувати Windows Anywhere. - Only available if enterprise has deployed a provisioning package. + Доступно, якщо на підприємстві розгорнуто пакет забезпечення. - Notifications + Сповіщення Area Privacy - Notifications and actions + Сповіщення та дії Area System @@ -1075,45 +1075,45 @@ File name, Should not translated - ODBC Data Source Administrator (32-bit) + Адміністратор джерел даних ODBC (32-розрядний) Area Control Panel (legacy settings) - ODBC Data Source Administrator (64-bit) + Адміністратор джерел даних ODBC (64-розрядний) Area Control Panel (legacy settings) - Offline files + Офлайн файли Area Control Panel (legacy settings) - Offline Maps + Офлайн карти Area Apps - Offline Maps - Download maps + Офлайн карти - Завантажити карти Area Apps - On-Screen + Екранний - OS + ОС Means the "Operating System" - Other devices + Інші пристрої Area Privacy - Other options + Інші параметри Area EaseOfAccess - Other users + Інші користувачі - Parental controls + Батьківський контроль Area Control Panel (legacy settings) @@ -1124,92 +1124,92 @@ File name, Should not translated - Password properties + Параметри паролів Area Control Panel (legacy settings) - Pen and input devices + Ручка та пристрої введення Area Control Panel (legacy settings) - Pen and touch + Ручка та сенсорний дотик Area Control Panel (legacy settings) - Pen and Windows Ink + Ручка та чорнило для Windows Area Device - People Near Me + Люди поруч зі мною Area Control Panel (legacy settings) - Performance information and tools + Інформація про ефективність та інструменти Area Control Panel (legacy settings) - Permissions and history + Дозволи та історія Area Cortana - Personalization (category) + Персоналізація (категорія) Area Personalization - Phone + Телефон Area Phone - Phone and modem + Телефон і модем Area Control Panel (legacy settings) - Phone and modem - Options + Телефон і модем - Опції Area Control Panel (legacy settings) - Phone calls + Телефонні дзвінки Area Privacy - Phone - Default apps + Телефон - Програми за замовчуванням Area System - Picture + Зображення - Pictures + Картинки Area Privacy - Pinyin IME settings + Налаштування піньїнь IME Area TimeAndLanguage, available if the Microsoft Pinyin input method editor is installed - Pinyin IME settings - domain lexicon + Налаштування IME піньїнь - лексика домену Area TimeAndLanguage - Pinyin IME settings - Key configuration + Налаштування піньїнь IME - Конфігурація ключів Area TimeAndLanguage - Pinyin IME settings - UDP + Налаштування піньїнь IME - UDP Area TimeAndLanguage - Playing a game full screen + Відтворення гри на весь екран Area Gaming - Plugin to search for Windows settings + Плагін для пошуку налаштувань Windows - Windows Settings + Налаштування Windows - Power and sleep + Живлення та сон Area System @@ -1217,118 +1217,118 @@ File name, Should not translated - Power options + Параметри живлення Area Control Panel (legacy settings) - Presentation + Подання - Printers + Принтери Area Control Panel (legacy settings) - Printers and scanners + Принтери та сканери Area Device - Print screen + Print Screen Mean the "Print screen" key - Problem reports and solutions + Звіти про проблеми та їх вирішення Area Control Panel (legacy settings) - Processor + Процесор - Programs and features + Програми та функції Area Control Panel (legacy settings) - Projecting to this PC + Проектування на цей ПК Area System - protanopia + протанопія Medical: Mean you don't can see green colors - Provisioning + Забезпечення Area UserAccounts, only available if enterprise has deployed a provisioning package - Proximity + Близькість Area NetworkAndInternet - Proxy + Проксі Area NetworkAndInternet - Quickime + Швидкий час Area TimeAndLanguage - Quiet moments game + Тихі моменти - Radios + Радіо Area Privacy - RAM + ОЗП Means the Read-Access-Memory (typical the used to inform about the size) - Recognition + Розпізнавання - Recovery + Відновлення Area UpdateAndSecurity - Red eye + Червоне око Mean red eye effect by over-the-night flights - Red-green + Червоно-зелений Mean the weakness you can't differ between red and green colors - Red week + Червоний тиждень Mean you don't can see red colors - Region + Регіон Area TimeAndLanguage - Regional language + Регіональна мова Area TimeAndLanguage - Regional settings properties + Властивості регіональних налаштувань Area Control Panel (legacy settings) - Region and language + Регіон та мова Area Control Panel (legacy settings) - Region formatting + Форматування регіону - RemoteApp and desktop connections + Підключення RemoteApp і робочого столу Area Control Panel (legacy settings) - Remote Desktop + Віддалений робочий стіл Area System - Scanners and cameras + Сканери та камери Area Control Panel (legacy settings) @@ -1336,18 +1336,18 @@ File name, Should not translated - Scheduled + Заплановано - Scheduled tasks + Заплановані завдання Area Control Panel (legacy settings) - Screen rotation + Обертання екрану Area System - Scroll bars + Смуги прокрутки Scroll Lock @@ -1358,7 +1358,7 @@ Should not translated - Searching Windows + Пошук у Windows Area Cortana @@ -1366,71 +1366,71 @@ Should not translated - Security Center + Центр безпеки Area Control Panel (legacy settings) - Security Processor + Процесор безпеки - Session cleanup + Очищення сесії Area SurfaceHub - Settings home page + Головна сторінка налаштувань Area Home, Overview-page for all areas of settings - Set up a kiosk + Встановіть кіоск Area UserAccounts - Shared experiences + Спільний досвід Area System - Shortcuts + Скорочення wifi dont translate this, is a short term to find entries - Sign-in options + Параметри входу Area UserAccounts - Sign-in options - Dynamic lock + Параметри входу - Динамічне блокування Area UserAccounts - Size + Розмір Size for text and symbols - Sound + Звук Area System - Speech + Мовлення Area EaseOfAccess - Speech recognition + Розпізнавання мови Area Control Panel (legacy settings) - Speech typing + Набір тексту з голосу - Start + Пуск Area Personalization - Start places + Місця старту - Startup apps + Початкові програми Area Apps @@ -1438,11 +1438,11 @@ File name, Should not translated - Storage + Сховище Area System - Storage policies + Політики зберігання Area System @@ -1450,15 +1450,15 @@ Area System - in + в Example: Area "System" in System settings - Sync center + Центр синхронізації Area Control Panel (legacy settings) - Sync your settings + Синхронізація налаштувань Area UserAccounts @@ -1466,57 +1466,57 @@ File name, Should not translated - System + Система Area Control Panel (legacy settings) - System properties and Add New Hardware wizard + Властивості системи та майстер додавання нового обладнання Area Control Panel (legacy settings) - Tab + Вкладка Means the key "Tabulator" on the keyboard - Tablet mode + Режим планшета Area System - Tablet PC settings + Налаштування планшетного ПК Area Control Panel (legacy settings) - Talk + Розмова - Talk to Cortana + Розмовляйте з Кортаною Area Cortana - Taskbar + Панель завдань Area Personalization - Taskbar color + Колір панелі завдань - Tasks + Задачі Area Privacy - Team Conferencing + Командні конференції Area SurfaceHub - Team device management + Керування командними пристроями Area SurfaceHub - Text to speech + Перетворення тексту у мовлення Area Control Panel (legacy settings) - Themes + Теми Area Personalization @@ -1528,27 +1528,27 @@ File name, Should not translated - Timeline + Хронологія - Touch + Дотик - Touch feedback + Зворотний зв'язок на дотик - Touchpad + Тачпад Area Device - Transparency + Прозорість - tritanopia + тританопія Medical: Mean you don't can see yellow and blue colors - Troubleshoot + Усунення несправностей Area UpdateAndSecurity @@ -1556,11 +1556,11 @@ Area Gaming - Typing + Набір тексту Area Device - Uninstall + Видалити Area MixedReality, only available if the Mixed Reality Portal app is installed. @@ -1568,7 +1568,7 @@ Area Device - User accounts + Облікові записи користувачів Area Control Panel (legacy settings) @@ -1576,43 +1576,43 @@ Means The "Windows Version" - Video playback + Відтворення відео Area Apps - Videos + Відео Area Privacy - Virtual Desktops + Віртуальні робочі столи - Virus + Вірус Means the virus in computers and software - Voice activation + Голосова активація Area Privacy - Volume + Гучність VPN Area NetworkAndInternet - Wallpaper + Шпалери - Warmer color + Тепліший колір - Welcome center + Інформаційний центр Area Control Panel (legacy settings) - Welcome screen + Екран привітання Area SurfaceHub @@ -1620,7 +1620,7 @@ File name, Should not translated - Wheel + Колесо Area Device @@ -1628,18 +1628,18 @@ Area NetworkAndInternet, only available if Wi-Fi calling is enabled - Wi-Fi Calling + Дзвінки через Wi-Fi Area NetworkAndInternet, only available if Wi-Fi calling is enabled - Wi-Fi settings + Налаштування Wi-Fi "Wi-Fi" should not translated - Window border + Рамка вікна - Windows Anytime Upgrade + Оновлення Windows у будь-який час Area Control Panel (legacy settings) @@ -1651,864 +1651,864 @@ Area Control Panel (legacy settings) - Windows Defender + Захисник Windows Area Control Panel (legacy settings) - Windows Firewall + Брандмауер Windows Area Control Panel (legacy settings) - Windows Hello setup - Face + Налаштування Windows Hello - Обличчя Area UserAccounts - Windows Hello setup - Fingerprint + Налаштування Windows Hello - Відбиток пальця Area UserAccounts - Windows Insider Program + Програма для інсайдерів Windows Area UpdateAndSecurity - Windows Mobility Center + Центр мобільності Windows Area Control Panel (legacy settings) - Windows search + Пошук у Windows Area Cortana - Windows Security + Безпека Windows Area UpdateAndSecurity - Windows Update + Оновлення Windows Area UpdateAndSecurity - Windows Update - Advanced options + Оновлення Windows - Додаткові параметри Area UpdateAndSecurity - Windows Update - Check for updates + Оновлення Windows - перевірка наявності оновлень Area UpdateAndSecurity - Windows Update - Restart options + Оновлення Windows - Параметри перезапуску Area UpdateAndSecurity - Windows Update - View optional updates + Оновлення Windows - Перегляд додаткових оновлень Area UpdateAndSecurity - Windows Update - View update history + Оновлення Windows - Перегляд журналу оновлень Area UpdateAndSecurity - Wireless + Бездротовий - Workplace + Робоче місце - Workplace provisioning + Забезпечення робочого місця Area UserAccounts - Wubi IME settings + Налаштування Wubi IME Area TimeAndLanguage, available if the Microsoft Wubi input method editor is installed - Wubi IME settings - UDP + Налаштування Wubi IME - UDP Area TimeAndLanguage - Xbox Networking + Мережа Xbox Networking Area Gaming - Your info + Ваша інформація Area UserAccounts - Zoom + Збільшити Mean zooming of things via a magnifier - Change device installation settings + Зміна налаштувань встановлення пристрою - Turn off background images + Вимкнути фонові зображення - Navigation properties + Властивості навігації - Media streaming options + Параметри потокової передачі медіа - Make a file type always open in a specific program + Завжди відкривати файл певного типу у визначеній програмі - Change the Narrator’s voice + Змінити голос диктора - Find and fix keyboard problems + Пошук та усунення проблем з клавіатурою - Use screen reader + Використовуйте програму для читання з екрана - Show which workgroup this computer is on + Показати, в якій робочій групі знаходиться цей комп'ютер - Change mouse wheel settings + Зміна налаштувань коліщатка миші - Manage computer certificates + Керування комп'ютерними сертифікатами - Find and fix problems + Пошук та усунення проблем - Change settings for content received using Tap and send + Зміна налаштувань для вмісту, отриманого за допомогою функції "Доторкнутись і відправити" - Change default settings for media or devices + Зміна налаштувань за замовчуванням для носіїв або пристроїв - Print the speech reference card + Роздрукувати мовленнєву довідкову картку - Calibrate display colour + Відкалібрувати колір дисплея - Manage file encryption certificates + Керування сертифікатами шифрування файлів - View recent messages about your computer + Перегляд останніх повідомлень про комп'ютер - Give other users access to this computer + Надати іншим користувачам доступ до цього комп'ютера - Show hidden files and folders + Показувати приховані файли та папки - Change Windows To Go start-up options + Зміна параметрів запуску Windows To Go - See which processes start up automatically when you start Windows + Переглянути, які процеси запускаються автоматично під час запуску Windows - Tell if an RSS feed is available on a website + Визначити, чи є на веб-сайті RSS-канал - Add clocks for different time zones + Додати годинник для різних часових поясів - Add a Bluetooth device + Додати пристрій Bluetooth - Customise the mouse buttons + Налаштування кнопок миші - Set tablet buttons to perform certain tasks + Налаштування кнопок планшета на виконання певних завдань - View installed fonts + Переглянути встановлені шрифти - Change the way currency is displayed + Змінити спосіб відображення валюти - Edit group policy + Редагування групової політики - Manage browser add-ons + Керування доповненнями браузера - Check processor speed + Перевірити швидкість процесора - Check firewall status + Перевірити стан брандмауера - Send or receive a file + Надіслати або отримати файл - Add or remove user accounts + Додавання або видалення облікових записів користувачів - Edit the system environment variables + Редагування змінних системного середовища - Manage BitLocker + Керування BitLocker - Auto-hide the taskbar + Автоматичне приховування панелі завдань - Change sound card settings + Зміна налаштувань звукової карти - Make changes to accounts + Внесення змін до облікових записів - Edit local users and groups + Редагування локальних користувачів і груп - View network computers and devices + Перегляд мережевих комп'ютерів і пристроїв - Install a program from the network + Встановлення програми з мережі - View scanners and cameras + Перегляд сканерів та камер - Microsoft IME Register Word (Japanese) + Microsoft IME Register Word (японська) - Restore your files with File History + Відновлення файлів за допомогою Історії файлів - Turn On-Screen keyboard on or off + Увімкнення або вимкнення екранної клавіатури - Block or allow third-party cookies + Блокувати або дозволяти сторонні файли cookie - Find and fix audio recording problems + Пошук та усунення проблем із записом звуку - Create a recovery drive + Створення диска відновлення - Microsoft New Phonetic Settings + Нові фонетичні параметри Microsoft - Generate a system health report + Створення звіту про стан системи - Fix problems with your computer + Вирішення проблем з комп'ютером - Back up and Restore (Windows 7) + Резервне копіювання та відновлення (Windows 7) - Preview, delete, show or hide fonts + Попередній перегляд, видалення, показ або приховування шрифтів - Microsoft Quick Settings + Швидкі налаштування Microsoft - View reliability history + Переглянути історію надійності - Access RemoteApp and desktops + Доступ до RemoteApp і робочих столів - Set up ODBC data sources + Налаштування джерел даних ODBC - Reset Security Policies + Скидання політик безпеки - Block or allow pop-ups + Блокувати або дозволяти спливаючі вікна - Turn autocomplete in Internet Explorer on or off + Увімкнення або вимкнення автозаповнення в Internet Explorer - Microsoft Pinyin SimpleFast Options + Параметри Microsoft Pinyin SimpleFast - Change what closing the lid does + Зміна ефекту від закриття корпусу - Turn off unnecessary animations + Вимкнути непотрібні анімації - Create a restore point + Створення точки відновлення - Turn off automatic window arrangement + Вимкнення автоматичного розташування вікон - Troubleshooting History + Історія усунення несправностей - Diagnose your computer's memory problems + Діагностика проблем з пам'яттю комп'ютера - View recommended actions to keep Windows running smoothly + Переглянути рекомендовані дії для забезпечення безперебійної роботи Windows - Change cursor blink rate + Змінити частоту блимання курсору - Add or remove programs + Додавання або видалення програм - Create a password reset disk + Створення диска для скидання пароля - Configure advanced user profile properties + Налаштування розширених властивостей профілю користувача - Start or stop using AutoPlay for all media and devices + Увімкнути або вимкнути автоматичне відтворення для всіх медіа та пристроїв - Change Automatic Maintenance settings + Змінити налаштування автоматичного обслуговування - Specify single- or double-click to open + Вкажіть одинарний або подвійний клік для відкриття - Select users who can use remote desktop + Вибір користувачів, які можуть використовувати віддалений робочий стіл - Show which programs are installed on your computer + Показати, які програми встановлені на вашому комп'ютері - Allow remote access to your computer + Дозволити віддалений доступ до комп'ютера - View advanced system settings + Перегляд розширених налаштувань системи - How to install a program + Як встановити програму - Change how your keyboard works + Змінити роботу клавіатури - Automatically adjust for daylight saving time + Автоматичне переведення на літній час - Change the order of Windows SideShow gadgets + Зміна порядку розташування гаджетів Windows SideShow - Check keyboard status + Перевірити стан клавіатури - Control the computer without the mouse or keyboard + Керування комп'ютером без миші або клавіатури - Change or remove a program + Змінити або видалити програму - Change multi-touch gesture settings + Зміна налаштувань жестів мультидотику - Set up ODBC data sources (64-bit) + Налаштування джерел даних ODBC (64-біт) - Configure proxy server + Налаштування проксі-сервера - Change your homepage + Змінити домашню сторінку - Group similar windows on the taskbar + Групувати схожі вікна на панелі завдань - Change Windows SideShow settings + Зміна налаштувань Windows SideShow - Use audio description for video + Використання аудіодискрипції для відео - Change workgroup name + Змінити назву робочої групи - Find and fix printing problems + Пошук і усунення проблем із друком - Change when the computer sleeps + Змінити коли комп'ютер перебуває в режимі сну - Set up a virtual private network (VPN) connection + Налаштування підключення до віртуальної приватної мережі (VPN) - Accommodate learning abilities + Враховувати здібності до навчання - Set up a dial-up connection + Налаштування комутованого з'єднання - Set up a connection or network + Налаштування з'єднання або мережі - How to change your Windows password + Як змінити пароль до Windows - Make it easier to see the mouse pointer + Полегшити видимість вказівника миші - Set up iSCSI initiator + Налаштування ініціатора iSCSI - Accommodate low vision + Пристосовано для людей зі слабким зором - Manage offline files + Керування офлайн-файлами - Review your computer's status and resolve issues + Перегляд стану комп'ютера та вирішення проблем - Microsoft ChangJie Settings + Налаштування Microsoft ChangJie - Replace sounds with visual cues + Замінити звуки візуальними підказками - Change temporary Internet file settings + Зміна налаштувань тимчасового інтернет-файлу - Connect to the Internet + Підключення до Інтернету - Find and fix audio playback problems + Пошук та усунення проблем із відтворенням аудіо - Change the mouse pointer display or speed + Змінити відображення або швидкість вказівника миші - Back up your recovery key + Створення резервної копії ключа відновлення - Save backup copies of your files with File History + Збереження резервних копій файлів за допомогою Історії файлів - View current accessibility settings + Перегляд поточних налаштувань доступності - Change tablet pen settings + Зміна налаштувань пера планшета - Change how your mouse works + Змінити роботу миші - Show how much RAM is on this computer + Показати обсяг оперативної пам'яті на цьому комп'ютері - Edit power plan + Редагування плану енергоспоживання - Adjust system volume + Регулювання гучності системи - Defragment and optimise your drives + Дефрагментація та оптимізація дисків - Set up ODBC data sources (32-bit) + Налаштування джерел даних ODBC (32-біт) - Change Font Settings + Зміна параметрів шрифту - Magnify portions of the screen using Magnifier + Збільшити частину екрана за допомогою лупи - Change the file type associated with a file extension + Зміна типу файлу, пов'язаного з розширенням файлу - View event logs + Перегляд журналів подій - Manage Windows Credentials + Керування обліковими даними Windows - Set up a microphone + Налаштування мікрофона - Change how the mouse pointer looks + Змінити вигляд вказівника миші - Change power-saving settings + Зміна налаштувань енергозбереження - Optimise for blindness + Оптимізація для незрячих - Turn Windows features on or off + Увімкнення чи вимкнення функцій Windows - Show which operating system your computer is running + Показати, яка операційна система працює на вашому комп'ютері - View local services + Перегляд локальних послуг - Manage Work Folders + Керування робочими папками - Encrypt your offline files + Шифрування офлайн-файлів - Train the computer to recognise your voice + Навчити комп'ютер розпізнавати ваш голос - Advanced printer setup + Розширене налаштування принтера - Change default printer + Змінити принтер за замовчуванням - Edit environment variables for your account + Редагування змінних середовища для вашого облікового запису - Optimise visual display + Оптимізація візуального відображення - Change mouse click settings + Змінити налаштування клацання мишею - Change advanced colour management settings for displays, scanners and printers + Зміна розширених параметрів керування кольором для дисплеїв, сканерів і принтерів - Let Windows suggest Ease of Access settings + Дозволити Windows пропонувати налаштування Ease of Access - Clear disk space by deleting unnecessary files + Звільнити місце на диску, видаливши непотрібні файли - View devices and printers + Перегляд пристроїв і принтерів - Private Character Editor + Приватний редактор символів - Record steps to reproduce a problem + Записати кроки для відтворення проблеми - Adjust the appearance and performance of Windows + Налаштування зовнішнього вигляду та продуктивності Windows - Settings for Microsoft IME (Japanese) + Налаштування для Microsoft IME (японська) - Invite someone to connect to your PC and help you, or offer to help someone else + Запросіть когось підключитися до вашого комп'ютера і допомогти вам, або запропонуйте допомогти комусь іншому - Run programs made for previous versions of Windows + Запуск програм, створених для попередніх версій Windows - Choose the order of how your screen rotates + Виберіть порядок обертання екрана - Change how Windows searches + Зміна способу пошуку в Windows - Set flicks to perform certain tasks + Налаштувати кліки на виконання певних завдань - Change account type + Змінити тип облікового запису - Change screen saver + Змінити режим заощадження екрана - Change User Account Control settings + Зміна налаштувань контролю облікових записів користувачів - Turn on easy access keys + Увімкнути клавіші швидкого доступу - Identify and repair network problems + Виявлення та усунення мережевих проблем - Find and fix networking and connection problems + Пошук та усунення проблем з мережею та з'єднанням - Play CDs or other media automatically + Автоматичне відтворення компакт-дисків та інших носіїв - View basic information about your computer + Перегляд основних відомостей про ваш комп'ютер - Choose how you open links + Виберіть спосіб відкриття посилань - Allow Remote Assistance invitations to be sent from this computer + Дозволити надсилання запрошень до віддаленої допомоги з цього комп'ютера - Task Manager + Диспетчер завдань - Turn flicks on or off + Увімкнення або вимкнення фліків - Add a language + Додати мову - View network status and tasks + Перегляд стану мережі та завдань - Turn Magnifier on or off + Увімкнути або вимкнути лупу - See the name of this computer + Подивитися ім'я цього комп'ютера - View network connections + Перегляд мережевих підключень - Perform recommended maintenance tasks automatically + Автоматичне виконання рекомендованих завдань з технічного обслуговування - Manage disk space used by your offline files + Керування дисковим простором, що використовується офлайн-файлами - Turn High Contrast on or off + Увімкнути або вимкнути високу контрастність - Change the way time is displayed + Змінити спосіб відображення часу - Change how web pages are displayed in tabs + Зміна способу відображення веб-сторінок у вкладках - Change the way dates and lists are displayed + Зміна способу відображення дат і списків - Manage audio devices + Керування аудіопристроями - Change security settings + Зміна налаштувань безпеки - Check security status + Перевірити стан безпеки - Delete cookies or temporary files + Видалення файлів cookie або тимчасових файлів - Specify which hand you write with + Вкажіть, якою рукою ви пишете - Change touch input settings + Зміна налаштувань сенсорного введення - How to change the size of virtual memory + Як змінити розмір віртуальної пам'яті - Hear text read aloud with Narrator + Послухайте текст, прочитаний вголос диктором - Set up USB game controllers + Налаштування ігрових контролерів USB - Show which domain your computer is on + Показати, в якому домені знаходиться ваш комп'ютер - View all problem reports + Переглянути всі звіти про проблеми - 16-Bit Application Support + Підтримка 16-бітних додатків - Set up dialling rules + Налаштуйте правила набору - Enable or disable session cookies + Увімкнути або вимкнути сесійні файли cookie - Give administrative rights to a domain user + Надання адміністративних прав користувачеві домену - Choose when to turn off display + Виберіть, коли вимкнути дисплей - Move the pointer with the keypad using MouseKeys + Переміщення вказівника за допомогою клавіатури через MouseKeys - Change Windows SideShow-compatible device settings + Зміна налаштувань пристрою, сумісного з Windows SideShow - Adjust commonly used mobility settings + Налаштування часто використовуваних параметрів мобільності - Change text-to-speech settings + Зміна налаштувань перетворення тексту в мовлення - Set the time and date + Встановлення часу та дати - Change location settings + Змінити налаштування місцезнаходження - Change mouse settings + Зміна налаштувань миші - Manage Storage Spaces + Керування простором для зберігання - Show or hide file extensions + Показати або приховати розширення файлів - Allow an app through Windows Firewall + Дозволити програму через брандмауер Windows - Change system sounds + Змінити системні звуки - Adjust ClearType text + Налаштування тексту ClearType - Turn screen saver on or off + Увімкнення або вимкнення режиму енергозбереження - Find and fix windows update problems + Знайти та виправити проблеми з оновленням Windows - Change Bluetooth settings + Змінити налаштування Bluetooth - Connect to a network + Підключення до мережі - Change the search provider in Internet Explorer + Зміна пошукового провайдера в Internet Explorer - Join a domain + Приєднатися до домену - Add a device + Додати пристрій - Find and fix problems with Windows Search + Виявлення та усунення проблем із пошуком Windows - Choose a power plan + Оберіть план живлення - Change how the mouse pointer looks when it’s moving + Змінити вигляд вказівника миші під час руху - Uninstall a program + Видалення програми - Create and format hard disk partitions + Створення та форматування розділів жорсткого диска - Change date, time or number formats + Зміна форматів дати, часу або чисел - Change PC wake-up settings + Зміна налаштувань пробудження комп'ютера - Manage network passwords + Керування мережевими паролями - Change input methods + Змінити методи введення - Manage advanced sharing settings + Керування розширеними налаштуваннями спільного доступу - Change battery settings + Зміна налаштувань акумулятора - Rename this computer + Перейменувати цей комп'ютер - Lock or unlock the taskbar + Блокування або розблокування панелі завдань - Manage Web Credentials + Керування веб-обліковими даними - Change the time zone + Зміна часового поясу - Start speech recognition + Запустити розпізнавання мови - View installed updates + Перегляд встановлених оновлень - What's happened to the Quick Launch toolbar? + Що сталося з панеллю швидкого запуску? - Change search options for files and folders + Зміна параметрів пошуку файлів і папок - Adjust settings before giving a presentation + Налаштування параметрів перед проведенням презентації - Scan a document or picture + Сканувати документ або зображення - Change the way measurements are displayed + Змінити спосіб відображення вимірювань - Press key combinations one at a time + Натискайте комбінації клавіш по черзі - Restore data, files or computer from backup (Windows 7) + Відновлення даних, файлів або комп'ютера з резервної копії (Windows 7) - Set your default programs + Налаштування програм за замовчуванням - Set up a broadband connection + Налаштування широкосмугового з'єднання - Calibrate the screen for pen or touch input + Калібрування екрана для введення пером або сенсорного керування - Manage user certificates + Керування сертифікатами користувачів - Schedule tasks + Планування завдань - Ignore repeated keystrokes using FilterKeys + Ігнорувати повторні натискання клавіш за допомогою FilterKeys - Find and fix bluescreen problems + Пошук та усунення проблем із синім екраном - Hear a tone when keys are pressed + Чути тон під час натискання клавіш - Delete browsing history + Видалити історію переглядів - Change what the power buttons do + Змінити призначення кнопок увімкнення - Create standard user account + Створення стандартного облікового запису користувача - Take speech tutorials + Візьміть уроки мовлення - View system resource usage in Task Manager + Перегляд використання системних ресурсів у диспетчері завдань - Create an account + Створити обліковий запис - Get more features with a new edition of Windows + Отримайте більше можливостей у новій версії Windows - Control Panel + Панель керування TaskLink - Unknown + Невідомо \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.zh-cn.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.zh-cn.resx index 16cd7a3f0..2b39d48e4 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.zh-cn.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.zh-cn.resx @@ -1926,13 +1926,13 @@ 微软拼音 SimpleFast 选项 - Change what closing the lid does + 更改盖上盖子时的操作 - Turn off unnecessary animations + 关闭不必要的动画效果 - Create a restore point + 创建还原点 Turn off automatic window arrangement @@ -2007,7 +2007,7 @@ Set up ODBC data sources (64-bit) - Configure proxy server + 设置代理服务器 Change your homepage @@ -2242,7 +2242,7 @@ Allow Remote Assistance invitations to be sent from this computer - Task Manager + 任务管理器 Turn flicks on or off @@ -2356,7 +2356,7 @@ 是否显示文件扩展名 - Allow an app through Windows Firewall + 允许应用程序通过 Windows 防火墙 更改系统声音 diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json index 630116ae0..5e82a43c0 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json @@ -4,7 +4,7 @@ "Description": "Search settings inside Control Panel and Settings App", "Name": "Windows Settings", "Author": "TobiasSekan", - "Version": "4.0.5", + "Version": "4.0.6", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.WindowsSettings.dll", diff --git a/README.md b/README.md index 1805d61ee..325dc9e4b 100644 --- a/README.md +++ b/README.md @@ -16,15 +16,16 @@

-Dedicated to making your workflow flow more seamless. Search everything from applications, files, bookmarks, YouTube, Twitter and more. Flow will continue to evolve, designed to be open and built with the community at heart. +Dedicated to making your work flow more seamless. Search everything from applications, files, bookmarks, YouTube, Twitter and more. Flow will continue to evolve, designed to be open and built with the community at heart.

Remember to star it, flow will love you more :)

- ## 🎅 New Features🤶 + ### Preview Panel + - Use the F1 key to open/hide the preview panel. @@ -34,6 +35,7 @@ Dedicated to making your workflow flow more seamless. Search everything from app - This feature is currently in its early stages. ### Everything Plugin Merged Into Explorer + - Switch easily between Everything and Windows Search to take advantage of both search engines (remember to remove existing Everything plugin). @@ -46,6 +48,7 @@ Dedicated to making your workflow flow more seamless. Search everything from app - Display the date and time when the search window is triggered. ### Drag & Drop + - Drag an item to Discord or computer location. @@ -59,24 +62,28 @@ Dedicated to making your workflow flow more seamless. Search everything from app - New shortcut functionality to set additional action keywords or search terms. ### Improved Program Plugin + - PATH is now indexed - Support for .url files, flow can now search installed steam/epic games. - Improved UWP indexing. ### Improved Memory Usage + - Fixed a memory leak and reduced overall memory usage. ### Improved Plugin / Plugin Store + - Search plugins in the Plugin Store and existing plugin tab. - Categorised sections in Plugin Store to easily see new and updated plugins. ### Improved Non-C# Plugin's Panel Design + - The design has been adjusted to align to the overall look and feel of flow. - Simplified the information displayed on buttons -🚂Full Changelogs +🚂[Full Changelogs](https://github.com/Flow-Launcher/Flow.Launcher/releases) @@ -105,7 +112,7 @@ Dedicated to making your workflow flow more seamless. Search everything from app > When installing for the first time Windows may raise an issue about security due to code not being signed, if you downloaded from this repo then you are good to continue the set up. -And you can download early access version. +And you can download [early access version](https://github.com/Flow-Launcher/Prereleases/releases). @@ -115,12 +122,10 @@ And you can download - - Search for apps, files or file contents. - - Support search using environment variable paths. ### Web Searches & URLs @@ -129,8 +134,6 @@ And you can download - - ### Browser Bookmarks @@ -140,7 +143,7 @@ And you can download - Provides system related commands. shutdown, lock, settings, etc. -- System command list +- [System command list](#system-command-list) ### Calculator @@ -152,7 +155,6 @@ And you can download - - Run batch and PowerShell commands as Administrator or a different user. - Ctrl+Enter to Run as Administrator. @@ -168,7 +170,6 @@ And you can download @@ -197,7 +198,7 @@ And you can download ### [SpotifyPremium](https://github.com/fow5040/Flow.Launcher.Plugin.SpotifyPremium) + ### [Steam Search](https://github.com/Garulf/Steam-Search) + - ### [Clipboard History](https://github.com/liberize/Flow.Launcher.Plugin.ClipboardHistory) + ### [Home Assistant Commander](https://github.com/Garulf/HA-Commander) + ### [Colors](https://github.com/Flow-Launcher/Flow.Launcher.Plugin.Color) @@ -241,49 +245,48 @@ And you can download ### [GitHub](https://github.com/JohnTheGr8/Flow.Plugin.Github) + ### [Window Walker](https://github.com/taooceros/Flow.Plugin.WindowWalker) + -......and more! +......and [more!](https://flowlauncher.com/docs/#/plugins) ### 🛒 Plugin Store - - You can view the full plugin list or quickly install a plugin via the Plugin Store menu inside Settings - or type `pm` `install`/`uninstall`/`update` + the plugin name in the search window, - ## ⌨️ Hotkeys -| Hotkey | Description | -| ------------------------------------------------------------ | -------------------------------------------- | -| Alt+ Space | Open search window (default and configurable)| -| Enter | Execute | -| Ctrl+Shift+Enter | Run as admin | -| | Scroll up & down | -| | Back to result / Open Context Menu | -| Ctrl +O , Shift +Enter | Open Context Menu | -| Tab | Autocomplete | -| F1 | Toggle Preview Panel (default and configurable)| -| Esc | Back to results / hide search window | -| Ctrl +C | Copy the actual folder / file | -| Ctrl +I | Open flow's settings | -| Ctrl +R | Run the current query again (refresh results)| -| F5 | Reload all plugin data | -| Ctrl + F12 | Toggle Game Mode when in search window | -| Ctrl + +,- | Quickly change maximum results shown | -| Ctrl + [,] | Quickly change search window width | -| Ctrl + H | Open search history | -| Ctrl + Backspace | Back to previous directory | - +| Hotkey | Description | +| ------------------------------------------------------------------ | ---------------------------------------------- | +| Alt+ Space | Open search window (default and configurable) | +| Enter | Execute | +| Ctrl+Shift+Enter | Run as admin | +| | Scroll up & down | +| | Back to result / Open Context Menu | +| Ctrl +O , Shift +Enter | Open Context Menu | +| Tab | Autocomplete | +| F1 | Toggle Preview Panel (default and configurable)| +| Esc | Back to results / hide search window | +| Ctrl +C | Copy the actual folder / file | +| Ctrl +I | Open flow's settings | +| Ctrl +R | Run the current query again (refresh results) | +| F5 | Reload all plugin data | +| Ctrl + F12 | Toggle Game Mode when in search window | +| Ctrl + +,- | Quickly change maximum results shown | +| Ctrl + [,] | Quickly change search window width | +| Ctrl + H | Open search history | +| Ctrl + Backspace | Back to previous directory | ## System Command List @@ -322,7 +325,7 @@ And you can download - +
@@ -338,16 +341,16 @@ And you can download -       -       +

### Mentions -- Why I Chose to Support Flow-Launcher - Appwrite -- Softpedia Editor's Pick + +- [Why I Chose to Support Flow-Launcher](https://dev.to/appwrite/appwrite-loves-open-source-why-i-chose-to-support-flow-launcher-54pj) - Appwrite +- [Softpedia Editor's Pick](https://www.softpedia.com/get/System/Launchers-Shutdown-Tools/Flow-Launcher.shtml) @@ -379,7 +382,7 @@ Get in touch if you like to join the Flow-Launcher Team and help build this grea - Install Visual Studio 2022 -- Install .Net 7 SDK +- Install .Net 7 SDK - via Visual Studio installer - via winget `winget install Microsoft.DotNet.SDK.7` - Manually from [here](https://dotnet.microsoft.com/en-us/download/dotnet/7.0) diff --git a/Scripts/post_build.ps1 b/Scripts/post_build.ps1 index 67230e52f..2633c24c5 100644 --- a/Scripts/post_build.ps1 +++ b/Scripts/post_build.ps1 @@ -1,27 +1,42 @@ param( - [string]$config = "Release", - [string]$solution = (Join-Path $PSScriptRoot ".." -Resolve) + [string]$config = "Release", + [string]$solution = (Join-Path $PSScriptRoot ".." -Resolve), + [string]$channel = "win-x64-prerelease", + [string]$flowVersion = "" ) Write-Host "Config: $config" +Write-Host "Solution: $solution" +Write-Host "Flow Version: $flowVersion" +Write-Host "Channel: $channel" -function Build-Version { - if ([string]::IsNullOrEmpty($env:flowVersion)) { +function Build-Version +{ + if ( [string]::IsNullOrEmpty($flowVersion)) + { $targetPath = Join-Path $solution "Output/Release/Flow.Launcher.dll" -Resolve $v = (Get-Command ${targetPath}).FileVersionInfo.FileVersion - } else { - $v = $env:flowVersion + } + else + { + $v = $flowVersion } Write-Host "Build Version: $v" return $v } -function Build-Path { - if (![string]::IsNullOrEmpty($env:APPVEYOR_BUILD_FOLDER)) { +function Build-Path +{ + if (![string]::IsNullOrEmpty($env:APPVEYOR_BUILD_FOLDER)) + { $p = $env:APPVEYOR_BUILD_FOLDER - } elseif (![string]::IsNullOrEmpty($solution)) { + } + elseif (![string]::IsNullOrEmpty($solution)) + { $p = $solution - } else { + } + else + { $p = Get-Location } @@ -31,37 +46,57 @@ function Build-Path { return $p } -function Copy-Resources ($path) { - # making version static as multiple versions can exist in the nuget folder and in the case a breaking change is introduced. - Copy-Item -Force $env:USERPROFILE\.nuget\packages\squirrel.windows\1.5.2\tools\Squirrel.exe $path\Output\Update.exe -} -function Delete-Unused ($path, $config) { +function Delete-Unused($path, $config) +{ $target = "$path\Output\$config" $included = Get-ChildItem $target -Filter "*.dll" - foreach ($i in $included){ - $deleteList = Get-ChildItem $target\Plugins -Include $i -Recurse | Where { $_.VersionInfo.FileVersion -eq $i.VersionInfo.FileVersion -And $_.Name -eq "$i" } - $deleteList | ForEach-Object{ Write-Host Deleting duplicated $_.Name with version $_.VersionInfo.FileVersion at location $_.Directory.FullName } - $deleteList | Remove-Item + + $hashset = @{ } + + foreach ($i in $included) + { + $item = if ($i.VersionInfo.FileVersion -eq $null) + { + [ValueTuple]::Create($i.Name, "") + } + else + { + [ValueTuple]::Create($i.Name, $i.VersionInfo.FileVersion) + } + + $key = $hashset.Add($item, $true) } - Remove-Item -Path $target -Include "*.xml" -Recurse -} -function Remove-CreateDumpExe ($path, $config) { - $target = "$path\Output\$config" + $deleteList = Get-ChildItem $target\Plugins -Filter *.dll -Recurse | Where { + $item = if ($_.VersionInfo.FileVersion -eq $null) + { + [ValueTuple]::Create($_.Name, "") + } + else + { + [ValueTuple]::Create($_.Name, $_.VersionInfo.FileVersion) + } + $hashset.ContainsKey($item) + } - $depjson = Get-Content $target\Flow.Launcher.deps.json -raw - $depjson -replace '(?s)(.createdump.exe": {.*?}.*?\n)\s*', "" | Out-File $target\Flow.Launcher.deps.json -Encoding UTF8 - Remove-Item -Path $target -Include "*createdump.exe" -Recurse + foreach ($i in $deleteList) + { + write "Deleting duplicated $($i.Name) with version $($i.VersionInfo.FileVersion) at location $($i.Directory.FullName)" + Remove-Item $i + } + Remove-Item -Path $target -Include "*.xml" -Recurse } -function Validate-Directory ($output) { +function Validate-Directory($output) +{ New-Item $output -ItemType Directory -Force } -function Pack-Squirrel-Installer ($path, $version, $output) { +function Pack-Velopack-Installer($path, $version, $output) +{ # msbuild based installer generation is not working in appveyor, not sure why Write-Host "Begin pack squirrel installer" @@ -71,66 +106,47 @@ function Pack-Squirrel-Installer ($path, $version, $output) { Write-Host "Packing: $spec" Write-Host "Input path: $input" - # dotnet pack is not used because ran into issues, need to test installation and starting up if to use it. - nuget pack $spec -Version $version -BasePath $input -OutputDirectory $output -Properties Configuration=Release + $repoUrl = "https://github.com/Flow-Launcher/Prereleases" - $nupkg = "$output\FlowLauncher.$version.nupkg" - Write-Host "nupkg path: $nupkg" - $icon = "$path\Flow.Launcher\Resources\app.ico" - Write-Host "icon: $icon" - # Squirrel.com: https://github.com/Squirrel/Squirrel.Windows/issues/369 - New-Alias Squirrel $env:USERPROFILE\.nuget\packages\squirrel.windows\1.5.2\tools\Squirrel.exe -Force - # why we need Write-Output: https://github.com/Squirrel/Squirrel.Windows/issues/489#issuecomment-156039327 - # directory of releaseDir in squirrel can't be same as directory ($nupkg) in releasify - $temp = "$output\Temp" + if ($channel -eq "stable") + { + $repoUrl = "https://github.com/Flow-Launcher/Flow.Launcher" + } - Squirrel --releasify $nupkg --releaseDir $temp --setupIcon $icon --no-msi | Write-Output - Move-Item $temp\* $output -Force - Remove-Item $temp + Set-Alias vpk "~/.dotnet/tools/vpk.exe" - $file = "$output\Flow-Launcher-Setup.exe" - Write-Host "Filename: $file" - - Move-Item "$output\Setup.exe" $file -Force - - Write-Host "End pack squirrel installer" + if (!(Get-Command vpk -ErrorAction SilentlyContinue)) + { + dotnet tool install --global vpk + } + + vpk pack --packVersion $version --packDir $input --packId FlowLauncher --mainExe Flow.Launcher.exe --channel $channel } -function Publish-Self-Contained ($p) { - - $csproj = Join-Path "$p" "Flow.Launcher/Flow.Launcher.csproj" -Resolve - $profile = Join-Path "$p" "Flow.Launcher/Properties/PublishProfiles/Net8.0-SelfContained.pubxml" -Resolve +function Publish-Self-Contained($p) +{ + $csproj = Join-Path "$p" "Flow.Launcher/Flow.Launcher.csproj" -Resolve + $profile = Join-Path "$p" "Flow.Launcher/Properties/PublishProfiles/Net7.0-SelfContained.pubxml" -Resolve # we call dotnet publish on the main project. # The other projects should have been built in Release at this point. - dotnet publish -c Release $csproj /p:PublishProfile=$profile + dotnet publish $csproj /p:PublishProfile=$profile } -function Publish-Portable ($outputLocation, $version) { - - & $outputLocation\Flow-Launcher-Setup.exe --silent | Out-Null - mkdir "$env:LocalAppData\FlowLauncher\app-$version\UserData" - Compress-Archive -Path $env:LocalAppData\FlowLauncher -DestinationPath $outputLocation\Flow-Launcher-Portable.zip -} - -function Main { +function Main +{ $p = Build-Path $v = Build-Version - Copy-Resources $p - if ($config -eq "Release"){ - + if ($config -eq "Release") + { Delete-Unused $p $config Publish-Self-Contained $p - Remove-CreateDumpExe $p $config - $o = "$p\Output\Packages" Validate-Directory $o - Pack-Squirrel-Installer $p $v $o - - Publish-Portable $o $v + Pack-Velopack-Installer $p $v $o } } diff --git a/SolutionAssemblyInfo.cs b/SolutionAssemblyInfo.cs index 2938bcbbe..8d8007afe 100644 --- a/SolutionAssemblyInfo.cs +++ b/SolutionAssemblyInfo.cs @@ -18,4 +18,3 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] [assembly: AssemblyVersion("1.0.0")] [assembly: AssemblyFileVersion("1.0.0")] -[assembly: AssemblyInformationalVersion("1.0.0")] diff --git a/appveyor.yml b/appveyor.yml index d8c5d7964..f7912095c 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '1.16.2.{build}' +version: '1.17.2.{build}' init: - ps: | @@ -7,12 +7,20 @@ init: if ($env:APPVEYOR_REPO_BRANCH -eq "dev") { $env:prereleaseTag = "{0}.{1}.{2}.{3}" -f $version.Major, $version.Minor, $version.Build, $version.Revision + $env:channel = "win-x64-prerelease" + } else { + $env:channel = "win-x64-stable" } + dotnet tool update -g vpk + $env:APPVEYOR_CACHE_ENTRY_ZIP_ARGS = "-t7z -m0=lzma -mx=9" + - sc config WSearch start= auto # Starts Windows Search service- Needed for running ExplorerTest - net start WSearch -cache: - - '%USERPROFILE%\.nuget\packages -> **.sln, **.csproj' # preserve nuget folder (packages) unless the solution or projects change +#cache: +# - '%USERPROFILE%\.nuget\packages -> **.sln, **.csproj' # preserve nuget folder (packages) unless the solution or projects change + +skip_branch_with_pr: true assembly_info: @@ -33,19 +41,19 @@ build: test_script: - dotnet test --no-build -c Release after_test: - - ps: .\Scripts\post_build.ps1 + - ps: .\Scripts\post_build.ps1 -channel $env:channel artifacts: - path: 'Output\Release\Flow.Launcher.Plugin.*.nupkg' name: Plugin nupkg -- path: 'Output\Packages\Flow-Launcher-*.exe' +- path: 'Releases\FlowLauncher-*.exe' name: Squirrel Installer -- path: Output\Packages\Flow-Launcher-Portable.zip +- path: 'Release\FlowLauncher-*-Portable.zip' name: Portable Version -- path: 'Output\Packages\FlowLauncher-*-full.nupkg' +- path: 'Releases\FlowLauncher-*-full.nupkg' name: Squirrel nupkg -- path: 'Output\Packages\RELEASES' - name: Squirrel RELEASES +- path: 'Releases\RELEASES*' + name: Velopack RELEASES deploy: - provider: NuGet