Merge pull request #2452 from Flow-Launcher/dev

Release 1.17.0 | Plugin 4.2.0
This commit is contained in:
Jeremy Wu 2024-02-04 15:43:19 +11:00 committed by GitHub
commit cec8a737dd
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
201 changed files with 5722 additions and 3375 deletions

View file

@ -1,7 +1,6 @@
crowdin crowdin
DWM DWM
workflows workflows
Wpf
wpf wpf
actionkeyword actionkeyword
stackoverflow stackoverflow
@ -20,9 +19,7 @@ Prioritise
Segoe Segoe
Google Google
Customise Customise
UWP
uwp uwp
Uwp
Bokmal Bokmal
Bokm Bokm
uninstallation uninstallation
@ -61,7 +58,6 @@ popup
ptr ptr
pluginindicator pluginindicator
TobiasSekan TobiasSekan
Img
img img
resx resx
bak bak
@ -78,7 +74,6 @@ WCA_ACCENT_POLICY
HGlobal HGlobal
dopusrt dopusrt
firefox firefox
Firefox
msedge msedge
svgc svgc
ime ime
@ -87,7 +82,6 @@ txb
btn btn
otf otf
searchplugin searchplugin
Noresult
wpftk wpftk
mkv mkv
flac flac
@ -109,3 +103,6 @@ errormetadatafile
noresult noresult
pluginsmanager pluginsmanager
alreadyexists alreadyexists
JsonRPC
JsonRPCV2
Softpedia

View file

@ -118,3 +118,6 @@
# UWP # UWP
[Uu][Ww][Pp] [Uu][Ww][Pp]
# version suffix <word>v#
(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_]))

View file

@ -2,7 +2,7 @@ name: Publish Default Plugins
on: on:
push: push:
branches: ['master'] branches: ['dev']
paths: ['Plugins/**'] paths: ['Plugins/**']
workflow_dispatch: workflow_dispatch:
@ -13,7 +13,7 @@ jobs:
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v3 uses: actions/setup-dotnet@v4
with: with:
dotnet-version: 7.0.x dotnet-version: 7.0.x
@ -46,6 +46,7 @@ jobs:
- 'Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json' - 'Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json'
windowssettings: windowssettings:
- 'Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json' - 'Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json'
base: 'master'
- name: Get BrowserBookmark Version - name: Get BrowserBookmark Version
if: steps.changes.outputs.browserbookmark == 'true' if: steps.changes.outputs.browserbookmark == 'true'

View file

@ -73,7 +73,7 @@ jobs:
steps: steps:
- name: check-spelling - name: check-spelling
id: spelling id: spelling
uses: check-spelling/check-spelling@main uses: check-spelling/check-spelling@prerelease
with: with:
suppress_push_for_open_pull_request: 1 suppress_push_for_open_pull_request: 1
checkout: true checkout: true
@ -89,12 +89,12 @@ jobs:
check_extra_dictionaries: '' check_extra_dictionaries: ''
quit_without_error: true quit_without_error: true
extra_dictionaries: extra_dictionaries:
cspell:software-terms/src/software-terms.txt cspell:software-terms/dict/softwareTerms.txt
cspell:win32/src/win32.txt cspell:win32/src/win32.txt
cspell:php/php.txt
cspell:filetypes/filetypes.txt cspell:filetypes/filetypes.txt
cspell:csharp/csharp.txt cspell:csharp/csharp.txt
cspell:dotnet/dotnet.txt cspell:dotnet/dict/dotnet.txt
cspell:python/src/common/extra.txt
cspell:python/src/python/python-lib.txt cspell:python/src/python/python-lib.txt
cspell:aws/aws.txt cspell:aws/aws.txt
cspell:companies/src/companies.txt cspell:companies/src/companies.txt
@ -113,7 +113,7 @@ jobs:
# if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push' # if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push'
# steps: # steps:
# - name: comment # - name: comment
# uses: check-spelling/check-spelling@main # uses: check-spelling/check-spelling@@v0.0.22
# with: # with:
# checkout: true # checkout: true
# spell_check_this: check-spelling/spell-check-this@main # spell_check_this: check-spelling/spell-check-this@main
@ -129,7 +129,7 @@ jobs:
if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request') if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request')
steps: steps:
- name: comment - name: comment
uses: check-spelling/check-spelling@main uses: check-spelling/check-spelling@prerelease
with: with:
checkout: true checkout: true
spell_check_this: check-spelling/spell-check-this@main spell_check_this: check-spelling/spell-check-this@main
@ -153,7 +153,7 @@ jobs:
# cancel-in-progress: false # cancel-in-progress: false
# steps: # steps:
# - name: apply spelling updates # - name: apply spelling updates
# uses: check-spelling/check-spelling@main # uses: check-spelling/check-spelling@v0.0.22
# with: # with:
# experimental_apply_changes_via_bot: 1 # experimental_apply_changes_via_bot: 1
# checkout: true # checkout: true

View file

@ -6,6 +6,11 @@ on:
schedule: schedule:
- cron: '30 1 * * *' - cron: '30 1 * * *'
env:
days-before-stale: 60
days-before-close: 7
exempt-issue-labels: 'keep-fresh'
jobs: jobs:
stale: stale:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -13,14 +18,14 @@ jobs:
issues: write issues: write
pull-requests: write pull-requests: write
steps: steps:
- uses: actions/stale@v8 - uses: actions/stale@v9
with: 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.' 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: 45 days-before-stale: ${{ env.days-before-stale }}
days-before-close: 7 days-before-close: ${{ env.days-before-close }}
days-before-pr-close: -1 days-before-pr-close: -1
exempt-all-milestones: true 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.' 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' 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' exempt-pr-labels: 'keep-fresh,awaiting-approval,work-in-progress'

View file

@ -58,7 +58,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments
string.Empty, MessageBoxButtons.YesNo) == DialogResult.No) string.Empty, MessageBoxButtons.YesNo) == DialogResult.No)
{ {
var msg = $"Please select the {EnvName} executable"; var msg = $"Please select the {EnvName} executable";
var selectedFile = string.Empty; string selectedFile;
selectedFile = GetFileFromDialog(msg, FileDialogFilter); selectedFile = GetFileFromDialog(msg, FileDialogFilter);
@ -131,14 +131,8 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments
}; };
var result = dlg.ShowDialog(); var result = dlg.ShowDialog();
if (result == DialogResult.OK) return result == DialogResult.OK ? dlg.FileName : string.Empty;
{
return dlg.FileName;
}
else
{
return string.Empty;
}
} }
/// <summary> /// <summary>

View file

@ -0,0 +1,14 @@
using System.Collections.Generic;
using Flow.Launcher.Infrastructure.UserSettings;
using Flow.Launcher.Plugin;
namespace Flow.Launcher.Core.ExternalPlugins.Environments
{
internal class JavaScriptV2Environment : TypeScriptV2Environment
{
internal override string Language => AllowedLanguage.JavaScriptV2;
internal JavaScriptV2Environment(List<PluginMetadata> pluginMetadataList, PluginsSettings pluginSettings) : base(pluginMetadataList, pluginSettings) { }
}
}

View file

@ -0,0 +1,23 @@
using System.Collections.Generic;
using Flow.Launcher.Core.Plugin;
using Flow.Launcher.Infrastructure.UserSettings;
using Flow.Launcher.Plugin;
namespace Flow.Launcher.Core.ExternalPlugins.Environments
{
internal class PythonV2Environment : PythonEnvironment
{
internal override string Language => AllowedLanguage.PythonV2;
internal override PluginPair CreatePluginPair(string filePath, PluginMetadata metadata)
{
return new PluginPair
{
Plugin = new PythonPluginV2(filePath),
Metadata = metadata
};
}
internal PythonV2Environment(List<PluginMetadata> pluginMetadataList, PluginsSettings pluginSettings) : base(pluginMetadataList, pluginSettings) { }
}
}

View file

@ -0,0 +1,44 @@
using System.Collections.Generic;
using Droplex;
using Flow.Launcher.Infrastructure.UserSettings;
using Flow.Launcher.Plugin.SharedCommands;
using Flow.Launcher.Plugin;
using System.IO;
using Flow.Launcher.Core.Plugin;
namespace Flow.Launcher.Core.ExternalPlugins.Environments
{
internal class TypeScriptV2Environment : AbstractPluginEnvironment
{
internal override string Language => AllowedLanguage.TypeScriptV2;
internal override string EnvName => DataLocation.NodeEnvironmentName;
internal override string EnvPath => Path.Combine(DataLocation.PluginEnvironmentsPath, EnvName);
internal override string InstallPath => Path.Combine(EnvPath, "Node-v16.18.0");
internal override string ExecutablePath => Path.Combine(InstallPath, "node-v16.18.0-win-x64\\node.exe");
internal override string PluginsSettingsFilePath { get => PluginSettings.NodeExecutablePath; set => PluginSettings.NodeExecutablePath = value; }
internal TypeScriptV2Environment(List<PluginMetadata> pluginMetadataList, PluginsSettings pluginSettings) : base(pluginMetadataList, pluginSettings) { }
internal override void InstallEnvironment()
{
FilesFolders.RemoveFolderIfExists(InstallPath);
DroplexPackage.Drop(App.nodejs_16_18_0, InstallPath).Wait();
PluginsSettingsFilePath = ExecutablePath;
}
internal override PluginPair CreatePluginPair(string filePath, PluginMetadata metadata)
{
return new PluginPair
{
Plugin = new NodePluginV2(filePath),
Metadata = metadata
};
}
}
}

View file

@ -1,4 +1,4 @@
using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.Logger;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading; using System.Threading;

View file

@ -54,9 +54,10 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Droplex" Version="1.7.0" /> <PackageReference Include="Droplex" Version="1.7.0" />
<PackageReference Include="FSharp.Core" Version="7.0.400" /> <PackageReference Include="FSharp.Core" Version="7.0.401" />
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="2.3.2" /> <PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="2.3.2" />
<PackageReference Include="squirrel.windows" Version="1.5.2" NoWarn="NU1701" /> <PackageReference Include="squirrel.windows" Version="1.5.2" NoWarn="NU1701" />
<PackageReference Include="StreamJsonRpc" Version="2.17.8" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View file

@ -1,5 +1,6 @@
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Text.Json;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -27,14 +28,14 @@ namespace Flow.Launcher.Core.Plugin
protected override Task<Stream> RequestAsync(JsonRPCRequestModel request, CancellationToken token = default) protected override Task<Stream> RequestAsync(JsonRPCRequestModel request, CancellationToken token = default)
{ {
// since this is not static, request strings will build up in ArgumentList if index is not specified // since this is not static, request strings will build up in ArgumentList if index is not specified
_startInfo.ArgumentList[0] = request.ToString(); _startInfo.ArgumentList[0] = JsonSerializer.Serialize(request, RequestSerializeOption);
return ExecuteAsync(_startInfo, token); return ExecuteAsync(_startInfo, token);
} }
protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default) 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 // since this is not static, request strings will build up in ArgumentList if index is not specified
_startInfo.ArgumentList[0] = rpcRequest.ToString(); _startInfo.ArgumentList[0] = JsonSerializer.Serialize(rpcRequest, RequestSerializeOption);
return Execute(_startInfo); return Execute(_startInfo);
} }
} }

View file

@ -0,0 +1,26 @@
using System.Diagnostics;
using System.IO;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
namespace Flow.Launcher.Core.Plugin
{
internal sealed class ExecutablePluginV2 : ProcessStreamPluginV2
{
protected override ProcessStartInfo StartInfo { get; set; }
public ExecutablePluginV2(string filename)
{
StartInfo = new ProcessStartInfo
{
FileName = filename,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true
};
}
}
}

View file

@ -19,66 +19,34 @@ using System.Text.Json;
namespace Flow.Launcher.Core.Plugin namespace Flow.Launcher.Core.Plugin
{ {
public class JsonRPCErrorModel public record JsonRPCBase(int Id, JsonRPCErrorModel Error = default);
{ public record JsonRPCErrorModel(int Code, string Message, string Data);
public int Code { get; set; }
public string Message { get; set; } public record JsonRPCResponseModel(int Id, JsonRPCErrorModel Error = default) : JsonRPCBase(Id, Error);
public record JsonRPCQueryResponseModel(int Id,
[property: JsonPropertyName("result")] List<JsonRPCResult> Result,
IReadOnlyDictionary<string, object> SettingsChange = null,
string DebugMessage = "",
JsonRPCErrorModel Error = default) : JsonRPCResponseModel(Id, Error);
public string Data { get; set; } public record JsonRPCRequestModel(int Id,
} string Method,
object[] Parameters,
IReadOnlyDictionary<string, object> Settings = default,
JsonRPCErrorModel Error = default) : JsonRPCBase(Id, Error);
public class JsonRPCResponseModel
{
public string Result { get; set; }
public JsonRPCErrorModel Error { get; set; }
}
public class JsonRPCQueryResponseModel : JsonRPCResponseModel
{
[JsonPropertyName("result")]
public new List<JsonRPCResult> Result { get; set; }
public Dictionary<string, object> SettingsChange { get; set; }
public string DebugMessage { get; set; }
}
public class JsonRPCRequestModel
{
public string Method { get; set; }
public object[] Parameters { get; set; }
public Dictionary<string, object> Settings { get; set; }
private static readonly JsonSerializerOptions options = new()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
};
public override string ToString()
{
return JsonSerializer.Serialize(this, options);
}
}
/// <summary>
/// Json RPC Request that Flow Launcher sent to client
/// </summary>
public class JsonRPCServerRequestModel : JsonRPCRequestModel
{
}
/// <summary> /// <summary>
/// Json RPC Request(in query response) that client sent to Flow Launcher /// Json RPC Request(in query response) that client sent to Flow Launcher
/// </summary> /// </summary>
public class JsonRPCClientRequestModel : JsonRPCRequestModel public record JsonRPCClientRequestModel(
{ int Id,
public bool DontHideAfterAction { get; set; } string Method,
} object[] Parameters,
IReadOnlyDictionary<string, object> Settings,
bool DontHideAfterAction = false,
JsonRPCErrorModel Error = default) : JsonRPCRequestModel(Id, Method, Parameters, Settings, Error);
/// <summary> /// <summary>
/// Represent the json-rpc result item that client send to Flow Launcher /// Represent the json-rpc result item that client send to Flow Launcher

View file

@ -30,9 +30,8 @@ namespace Flow.Launcher.Core.Plugin
/// Represent the plugin that using JsonPRC /// Represent the plugin that using JsonPRC
/// every JsonRPC plugin should has its own plugin instance /// every JsonRPC plugin should has its own plugin instance
/// </summary> /// </summary>
internal abstract class JsonRPCPlugin : IAsyncPlugin, IContextMenu, ISettingProvider, ISavable internal abstract class JsonRPCPlugin : JsonRPCPluginBase
{ {
protected PluginInitContext context;
public const string JsonRPC = "JsonRPC"; public const string JsonRPC = "JsonRPC";
protected abstract Task<Stream> RequestAsync(JsonRPCRequestModel rpcRequest, CancellationToken token = default); protected abstract Task<Stream> RequestAsync(JsonRPCRequestModel rpcRequest, CancellationToken token = default);
@ -40,19 +39,16 @@ namespace Flow.Launcher.Core.Plugin
private static readonly RecyclableMemoryStreamManager BufferManager = new(); private static readonly RecyclableMemoryStreamManager BufferManager = new();
private string SettingConfigurationPath => Path.Combine(context.CurrentPluginMetadata.PluginDirectory, "SettingsTemplate.yaml"); private int RequestId { get; set; }
private string SettingPath => Path.Combine(DataLocation.PluginSettingsDirectory, context.CurrentPluginMetadata.Name, "Settings.json");
public List<Result> LoadContextMenus(Result selectedResult) private string SettingConfigurationPath => Path.Combine(Context.CurrentPluginMetadata.PluginDirectory, "SettingsTemplate.yaml");
private string SettingPath => Path.Combine(DataLocation.PluginSettingsDirectory, Context.CurrentPluginMetadata.Name, "Settings.json");
public override List<Result> LoadContextMenus(Result selectedResult)
{ {
var request = new JsonRPCRequestModel var request = new JsonRPCRequestModel(RequestId++,
{ "context_menu",
Method = "context_menu", new[] { selectedResult.ContextData });
Parameters = new[]
{
selectedResult.ContextData
}
};
var output = Request(request); var output = Request(request);
return DeserializedResult(output); return DeserializedResult(output);
} }
@ -77,7 +73,6 @@ namespace Flow.Launcher.Core.Plugin
{ {
WriteIndented = true WriteIndented = true
}; };
private Dictionary<string, object> Settings { get; set; }
private readonly Dictionary<string, FrameworkElement> _settingControls = new(); private readonly Dictionary<string, FrameworkElement> _settingControls = new();
@ -103,85 +98,42 @@ namespace Flow.Launcher.Core.Plugin
return ParseResults(queryResponseModel); return ParseResults(queryResponseModel);
} }
protected override async Task<bool> ExecuteResultAsync(JsonRPCResult result)
private List<Result> ParseResults(JsonRPCQueryResponseModel queryResponseModel)
{ {
if (queryResponseModel.Result == null) return null; if (result.JsonRPCAction == null) return false;
if (!string.IsNullOrEmpty(queryResponseModel.DebugMessage)) if (string.IsNullOrEmpty(result.JsonRPCAction.Method))
{ {
context.API.ShowMsg(queryResponseModel.DebugMessage); return !result.JsonRPCAction.DontHideAfterAction;
} }
foreach (var result in queryResponseModel.Result) if (result.JsonRPCAction.Method.StartsWith("Flow.Launcher."))
{ {
result.AsyncAction = async c => ExecuteFlowLauncherAPI(result.JsonRPCAction.Method["Flow.Launcher.".Length..],
result.JsonRPCAction.Parameters);
}
else
{
await using var actionResponse = await RequestAsync(result.JsonRPCAction);
if (actionResponse.Length == 0)
{ {
UpdateSettings(result.SettingsChange);
if (result.JsonRPCAction == null) return false;
if (string.IsNullOrEmpty(result.JsonRPCAction.Method))
{
return !result.JsonRPCAction.DontHideAfterAction;
}
if (result.JsonRPCAction.Method.StartsWith("Flow.Launcher."))
{
ExecuteFlowLauncherAPI(result.JsonRPCAction.Method["Flow.Launcher.".Length..],
result.JsonRPCAction.Parameters);
}
else
{
await using var actionResponse = await RequestAsync(result.JsonRPCAction);
if (actionResponse.Length == 0)
{
return !result.JsonRPCAction.DontHideAfterAction;
}
var jsonRpcRequestModel = await
JsonSerializer.DeserializeAsync<JsonRPCRequestModel>(actionResponse, options);
if (jsonRpcRequestModel?.Method?.StartsWith("Flow.Launcher.") ?? false)
{
ExecuteFlowLauncherAPI(jsonRpcRequestModel.Method["Flow.Launcher.".Length..],
jsonRpcRequestModel.Parameters);
}
}
return !result.JsonRPCAction.DontHideAfterAction; return !result.JsonRPCAction.DontHideAfterAction;
}; }
var jsonRpcRequestModel = await
JsonSerializer.DeserializeAsync<JsonRPCRequestModel>(actionResponse, options);
if (jsonRpcRequestModel?.Method?.StartsWith("Flow.Launcher.") ?? false)
{
ExecuteFlowLauncherAPI(jsonRpcRequestModel.Method["Flow.Launcher.".Length..],
jsonRpcRequestModel.Parameters);
}
} }
var results = new List<Result>(); return !result.JsonRPCAction.DontHideAfterAction;
results.AddRange(queryResponseModel.Result);
UpdateSettings(queryResponseModel.SettingsChange);
return results;
} }
private void ExecuteFlowLauncherAPI(string method, object[] parameters)
{
var parametersTypeArray = parameters.Select(param => param.GetType()).ToArray();
var methodInfo = typeof(IPublicAPI).GetMethod(method, parametersTypeArray);
if (methodInfo == null)
{
return;
}
try
{
methodInfo.Invoke(PluginManager.API, parameters);
}
catch (Exception)
{
#if (DEBUG)
throw;
#endif
}
}
/// <summary> /// <summary>
/// Execute external program and return the output /// Execute external program and return the output
@ -296,379 +248,19 @@ namespace Flow.Launcher.Core.Plugin
return sourceBuffer; return sourceBuffer;
} }
public override async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
public async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
{ {
var request = new JsonRPCRequestModel var request = new JsonRPCRequestModel(RequestId++,
{ "query",
Method = "query", new object[]
Parameters = new object[]
{ {
query.Search query.Search
}, },
Settings = Settings Settings?.Inner);
};
var output = await RequestAsync(request, token); var output = await RequestAsync(request, token);
return await DeserializedResultAsync(output); return await DeserializedResultAsync(output);
} }
public async Task InitSettingAsync()
{
if (!File.Exists(SettingConfigurationPath))
return;
if (File.Exists(SettingPath))
{
await using var fileStream = File.OpenRead(SettingPath);
Settings = await JsonSerializer.DeserializeAsync<Dictionary<string, object>>(fileStream, options);
}
var deserializer = new DeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();
_settingsTemplate = deserializer.Deserialize<JsonRpcConfigurationModel>(await File.ReadAllTextAsync(SettingConfigurationPath));
Settings ??= new Dictionary<string, object>();
foreach (var (type, attribute) in _settingsTemplate.Body)
{
if (type == "textBlock")
continue;
if (!Settings.ContainsKey(attribute.Name))
{
Settings[attribute.Name] = attribute.DefaultValue;
}
}
}
public virtual async Task InitAsync(PluginInitContext context)
{
this.context = context;
await InitSettingAsync();
}
private static readonly Thickness settingControlMargin = new(0, 9, 18, 9);
private static readonly Thickness settingCheckboxMargin = new(0, 9, 9, 9);
private static readonly Thickness settingPanelMargin = new(0, 0, 0, 0);
private static readonly Thickness settingTextBlockMargin = new(70, 9, 18, 9);
private static readonly Thickness settingLabelPanelMargin = new(70, 9, 18, 9);
private static readonly Thickness settingLabelMargin = new(0, 0, 0, 0);
private static readonly Thickness settingDescMargin = new(0, 2, 0, 0);
private static readonly Thickness settingSepMargin = new(0, 0, 0, 2);
private JsonRpcConfigurationModel _settingsTemplate;
public Control CreateSettingPanel()
{
if (Settings == null)
return new();
var settingWindow = new UserControl();
var mainPanel = new Grid
{
Margin = settingPanelMargin, VerticalAlignment = VerticalAlignment.Center
};
ColumnDefinition gridCol1 = new ColumnDefinition();
ColumnDefinition gridCol2 = new ColumnDefinition();
gridCol1.Width = new GridLength(70, GridUnitType.Star);
gridCol2.Width = new GridLength(30, GridUnitType.Star);
mainPanel.ColumnDefinitions.Add(gridCol1);
mainPanel.ColumnDefinitions.Add(gridCol2);
settingWindow.Content = mainPanel;
int rowCount = 0;
foreach (var (type, attribute) in _settingsTemplate.Body)
{
Separator sep = new Separator();
sep.VerticalAlignment = VerticalAlignment.Top;
sep.Margin = settingSepMargin;
sep.SetResourceReference(Separator.BackgroundProperty, "Color03B"); /* for theme change */
var panel = new StackPanel
{
Orientation = Orientation.Vertical,
VerticalAlignment = VerticalAlignment.Center,
Margin = settingLabelPanelMargin
};
RowDefinition gridRow = new RowDefinition();
mainPanel.RowDefinitions.Add(gridRow);
var name = new TextBlock()
{
Text = attribute.Label,
VerticalAlignment = VerticalAlignment.Center,
Margin = settingLabelMargin,
TextWrapping = TextWrapping.WrapWithOverflow
};
var desc = new TextBlock()
{
Text = attribute.Description,
FontSize = 12,
VerticalAlignment = VerticalAlignment.Center,
Margin = settingDescMargin,
TextWrapping = TextWrapping.WrapWithOverflow
};
desc.SetResourceReference(TextBlock.ForegroundProperty, "Color04B");
if (attribute.Description == null) /* if no description, hide */
desc.Visibility = Visibility.Collapsed;
if (type != "textBlock") /* if textBlock, hide desc */
{
panel.Children.Add(name);
panel.Children.Add(desc);
}
Grid.SetColumn(panel, 0);
Grid.SetRow(panel, rowCount);
FrameworkElement contentControl;
switch (type)
{
case "textBlock":
{
contentControl = new TextBlock
{
Text = attribute.Description.Replace("\\r\\n", "\r\n"),
Margin = settingTextBlockMargin,
Padding = new Thickness(0, 0, 0, 0),
HorizontalAlignment = System.Windows.HorizontalAlignment.Left,
TextAlignment = TextAlignment.Left,
TextWrapping = TextWrapping.Wrap
};
Grid.SetColumn(contentControl, 0);
Grid.SetColumnSpan(contentControl, 2);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "input":
{
var textBox = new TextBox()
{
Text = Settings[attribute.Name] as string ?? string.Empty,
Margin = settingControlMargin,
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch,
ToolTip = attribute.Description
};
textBox.TextChanged += (_, _) =>
{
Settings[attribute.Name] = textBox.Text;
};
contentControl = textBox;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "inputWithFileBtn":
{
var textBox = new TextBox()
{
Margin = new Thickness(10, 0, 0, 0),
Text = Settings[attribute.Name] as string ?? string.Empty,
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch,
ToolTip = attribute.Description
};
textBox.TextChanged += (_, _) =>
{
Settings[attribute.Name] = textBox.Text;
};
var Btn = new System.Windows.Controls.Button()
{
Margin = new Thickness(10, 0, 0, 0), Content = "Browse"
};
var dockPanel = new DockPanel()
{
Margin = settingControlMargin
};
DockPanel.SetDock(Btn, Dock.Right);
dockPanel.Children.Add(Btn);
dockPanel.Children.Add(textBox);
contentControl = dockPanel;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "textarea":
{
var textBox = new TextBox()
{
Height = 120,
Margin = settingControlMargin,
VerticalAlignment = VerticalAlignment.Center,
TextWrapping = TextWrapping.WrapWithOverflow,
AcceptsReturn = true,
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch,
Text = Settings[attribute.Name] as string ?? string.Empty,
ToolTip = attribute.Description
};
textBox.TextChanged += (sender, _) =>
{
Settings[attribute.Name] = ((TextBox)sender).Text;
};
contentControl = textBox;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "passwordBox":
{
var passwordBox = new PasswordBox()
{
Margin = settingControlMargin,
Password = Settings[attribute.Name] as string ?? string.Empty,
PasswordChar = attribute.passwordChar == default ? '*' : attribute.passwordChar,
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch,
ToolTip = attribute.Description
};
passwordBox.PasswordChanged += (sender, _) =>
{
Settings[attribute.Name] = ((PasswordBox)sender).Password;
};
contentControl = passwordBox;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "dropdown":
{
var comboBox = new System.Windows.Controls.ComboBox()
{
ItemsSource = attribute.Options,
SelectedItem = Settings[attribute.Name],
Margin = settingControlMargin,
HorizontalAlignment = System.Windows.HorizontalAlignment.Right,
ToolTip = attribute.Description
};
comboBox.SelectionChanged += (sender, _) =>
{
Settings[attribute.Name] = (string)((System.Windows.Controls.ComboBox)sender).SelectedItem;
};
contentControl = comboBox;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "checkbox":
var checkBox = new CheckBox
{
IsChecked = Settings[attribute.Name] is bool isChecked ? isChecked : bool.Parse(attribute.DefaultValue),
Margin = settingCheckboxMargin,
HorizontalAlignment = System.Windows.HorizontalAlignment.Right,
ToolTip = attribute.Description
};
checkBox.Click += (sender, _) =>
{
Settings[attribute.Name] = ((CheckBox)sender).IsChecked;
};
contentControl = checkBox;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
case "hyperlink":
var hyperlink = new Hyperlink
{
ToolTip = attribute.Description, NavigateUri = attribute.url
};
var linkbtn = new System.Windows.Controls.Button
{
HorizontalAlignment = System.Windows.HorizontalAlignment.Right, Margin = settingControlMargin
};
linkbtn.Content = attribute.urlLabel;
contentControl = linkbtn;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
default:
continue;
}
if (type != "textBlock")
_settingControls[attribute.Name] = contentControl;
mainPanel.Children.Add(panel);
mainPanel.Children.Add(contentControl);
rowCount++;
}
return settingWindow;
}
public void Save()
{
if (Settings != null)
{
Helper.ValidateDirectory(Path.Combine(DataLocation.PluginSettingsDirectory, context.CurrentPluginMetadata.Name));
File.WriteAllText(SettingPath, JsonSerializer.Serialize(Settings, settingSerializeOption));
}
}
public void UpdateSettings(Dictionary<string, object> settings)
{
if (settings == null || settings.Count == 0)
return;
foreach (var (key, value) in settings)
{
if (Settings.ContainsKey(key))
{
Settings[key] = value;
}
if (_settingControls.ContainsKey(key))
{
switch (_settingControls[key])
{
case TextBox textBox:
textBox.Dispatcher.Invoke(() => textBox.Text = value as string);
break;
case PasswordBox passwordBox:
passwordBox.Dispatcher.Invoke(() => passwordBox.Password = value as string);
break;
case System.Windows.Controls.ComboBox comboBox:
comboBox.Dispatcher.Invoke(() => comboBox.SelectedItem = value);
break;
case CheckBox checkBox:
checkBox.Dispatcher.Invoke(() => checkBox.IsChecked = value is bool isChecked ? isChecked : bool.Parse(value as string));
break;
}
}
}
}
} }
} }

View file

@ -0,0 +1,163 @@
using Flow.Launcher.Core.Resource;
using Flow.Launcher.Infrastructure;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading;
using System.Threading.Tasks;
using Flow.Launcher.Infrastructure.Logger;
using Flow.Launcher.Infrastructure.UserSettings;
using Flow.Launcher.Plugin;
using Microsoft.IO;
using System.Windows;
using System.Windows.Controls;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
using CheckBox = System.Windows.Controls.CheckBox;
using Control = System.Windows.Controls.Control;
using Orientation = System.Windows.Controls.Orientation;
using TextBox = System.Windows.Controls.TextBox;
using UserControl = System.Windows.Controls.UserControl;
using System.Windows.Documents;
using static System.Windows.Forms.LinkLabel;
using Droplex;
using System.Windows.Forms;
using Microsoft.VisualStudio.Threading;
namespace Flow.Launcher.Core.Plugin
{
/// <summary>
/// Represent the plugin that using JsonPRC
/// every JsonRPC plugin should has its own plugin instance
/// </summary>
internal abstract class JsonRPCPluginBase : IAsyncPlugin, IContextMenu, ISettingProvider, ISavable
{
protected PluginInitContext Context;
public const string JsonRPC = "JsonRPC";
private int RequestId { get; set; }
private string SettingConfigurationPath =>
Path.Combine(Context.CurrentPluginMetadata.PluginDirectory, "SettingsTemplate.yaml");
private string SettingPath => Path.Combine(DataLocation.PluginSettingsDirectory,
Context.CurrentPluginMetadata.Name, "Settings.json");
public abstract List<Result> LoadContextMenus(Result selectedResult);
protected static readonly JsonSerializerOptions DeserializeOption = new()
{
PropertyNameCaseInsensitive = true,
#pragma warning disable SYSLIB0020
// IgnoreNullValues is obsolete, but the replacement JsonIgnoreCondition.WhenWritingNull still
// deserializes null, instead of ignoring it and leaving the default (empty list). We can change the behaviour
// to accept null and fallback to a default etc, or just keep IgnoreNullValues for now
// see: https://github.com/dotnet/runtime/issues/39152
IgnoreNullValues = true,
#pragma warning restore SYSLIB0020 // Type or member is obsolete
Converters = { new JsonObjectConverter() }
};
protected static readonly JsonSerializerOptions RequestSerializeOption = new()
{
PropertyNameCaseInsensitive = true, PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
};
protected abstract Task<bool> ExecuteResultAsync(JsonRPCResult result);
protected JsonRPCPluginSettings Settings { get; set; }
protected List<Result> ParseResults(JsonRPCQueryResponseModel queryResponseModel)
{
if (queryResponseModel.Result == null) return null;
if (!string.IsNullOrEmpty(queryResponseModel.DebugMessage))
{
Context.API.ShowMsg(queryResponseModel.DebugMessage);
}
foreach (var result in queryResponseModel.Result)
{
result.AsyncAction = async _ =>
{
Settings?.UpdateSettings(result.SettingsChange);
return await ExecuteResultAsync(result);
};
}
var results = new List<Result>();
results.AddRange(queryResponseModel.Result);
Settings?.UpdateSettings(queryResponseModel.SettingsChange);
return results;
}
protected void ExecuteFlowLauncherAPI(string method, object[] parameters)
{
var parametersTypeArray = parameters.Select(param => param.GetType()).ToArray();
var methodInfo = typeof(IPublicAPI).GetMethod(method, parametersTypeArray);
if (methodInfo == null)
{
return;
}
try
{
methodInfo.Invoke(Context.API, parameters);
}
catch (Exception)
{
#if (DEBUG)
throw;
#endif
}
}
public abstract Task<List<Result>> QueryAsync(Query query, CancellationToken token);
private async Task InitSettingAsync()
{
JsonRpcConfigurationModel configuration = null;
if (File.Exists(SettingConfigurationPath))
{
var deserializer = new DeserializerBuilder().WithNamingConvention(CamelCaseNamingConvention.Instance).Build();
configuration =
deserializer.Deserialize<JsonRpcConfigurationModel>(
await File.ReadAllTextAsync(SettingConfigurationPath));
}
Settings ??= new JsonRPCPluginSettings
{
Configuration = configuration, SettingPath = SettingPath, API = Context.API
};
await Settings.InitializeAsync();
}
public virtual async Task InitAsync(PluginInitContext context)
{
this.Context = context;
await InitSettingAsync();
}
public void Save()
{
Settings?.Save();
}
public Control CreateSettingPanel()
{
return Settings.CreateSettingPanel();
}
}
}

View file

@ -0,0 +1,415 @@
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using Flow.Launcher.Infrastructure.Storage;
using Flow.Launcher.Plugin;
namespace Flow.Launcher.Core.Plugin
{
public class JsonRPCPluginSettings
{
public required JsonRpcConfigurationModel? Configuration { get; init; }
public required string SettingPath { get; init; }
public Dictionary<string, FrameworkElement> SettingControls { get; } = new();
public IReadOnlyDictionary<string, object> Inner => Settings;
protected ConcurrentDictionary<string, object> Settings { get; set; }
public required IPublicAPI API { get; init; }
private JsonStorage<ConcurrentDictionary<string, object>> _storage;
// maybe move to resource?
private static readonly Thickness settingControlMargin = new(0, 9, 18, 9);
private static readonly Thickness settingCheckboxMargin = new(0, 9, 9, 9);
private static readonly Thickness settingPanelMargin = new(0, 0, 0, 0);
private static readonly Thickness settingTextBlockMargin = new(70, 9, 18, 9);
private static readonly Thickness settingLabelPanelMargin = new(70, 9, 18, 9);
private static readonly Thickness settingLabelMargin = new(0, 0, 0, 0);
private static readonly Thickness settingDescMargin = new(0, 2, 0, 0);
private static readonly Thickness settingSepMargin = new(0, 0, 0, 2);
public async Task InitializeAsync()
{
_storage = new JsonStorage<ConcurrentDictionary<string, object>>(SettingPath);
Settings = await _storage.LoadAsync();
if (Settings != null || Configuration == null)
{
return;
}
foreach (var (type, attributes) in Configuration.Body)
{
if (attributes.Name == null)
{
continue;
}
if (!Settings.ContainsKey(attributes.Name))
{
Settings[attributes.Name] = attributes.DefaultValue;
}
}
}
public void UpdateSettings(IReadOnlyDictionary<string, object> settings)
{
if (settings == null || settings.Count == 0)
return;
foreach (var (key, value) in settings)
{
Settings[key] = value;
if (SettingControls.TryGetValue(key, out var control))
{
switch (control)
{
case TextBox textBox:
textBox.Dispatcher.Invoke(() => textBox.Text = value as string ?? string.Empty);
break;
case PasswordBox passwordBox:
passwordBox.Dispatcher.Invoke(() => passwordBox.Password = value as string ?? string.Empty);
break;
case ComboBox comboBox:
comboBox.Dispatcher.Invoke(() => comboBox.SelectedItem = value);
break;
case CheckBox checkBox:
checkBox.Dispatcher.Invoke(() =>
checkBox.IsChecked = value is bool isChecked
? isChecked
: bool.Parse(value as string ?? string.Empty));
break;
}
}
}
Save();
}
public async Task SaveAsync()
{
await _storage.SaveAsync();
}
public void Save()
{
_storage.Save();
}
public Control CreateSettingPanel()
{
if (Settings == null || Settings.Count == 0)
return new();
var settingWindow = new UserControl();
var mainPanel = new Grid { Margin = settingPanelMargin, VerticalAlignment = VerticalAlignment.Center };
ColumnDefinition gridCol1 = new ColumnDefinition();
ColumnDefinition gridCol2 = new ColumnDefinition();
gridCol1.Width = new GridLength(70, GridUnitType.Star);
gridCol2.Width = new GridLength(30, GridUnitType.Star);
mainPanel.ColumnDefinitions.Add(gridCol1);
mainPanel.ColumnDefinitions.Add(gridCol2);
settingWindow.Content = mainPanel;
int rowCount = 0;
foreach (var (type, attribute) in Configuration.Body)
{
Separator sep = new Separator();
sep.VerticalAlignment = VerticalAlignment.Top;
sep.Margin = settingSepMargin;
sep.SetResourceReference(Separator.BackgroundProperty, "Color03B"); /* for theme change */
var panel = new StackPanel
{
Orientation = Orientation.Vertical,
VerticalAlignment = VerticalAlignment.Center,
Margin = settingLabelPanelMargin
};
RowDefinition gridRow = new RowDefinition();
mainPanel.RowDefinitions.Add(gridRow);
var name = new TextBlock()
{
Text = attribute.Label,
VerticalAlignment = VerticalAlignment.Center,
Margin = settingLabelMargin,
TextWrapping = TextWrapping.WrapWithOverflow
};
var desc = new TextBlock()
{
Text = attribute.Description,
FontSize = 12,
VerticalAlignment = VerticalAlignment.Center,
Margin = settingDescMargin,
TextWrapping = TextWrapping.WrapWithOverflow
};
desc.SetResourceReference(TextBlock.ForegroundProperty, "Color04B");
if (attribute.Description == null) /* if no description, hide */
desc.Visibility = Visibility.Collapsed;
if (type != "textBlock") /* if textBlock, hide desc */
{
panel.Children.Add(name);
panel.Children.Add(desc);
}
Grid.SetColumn(panel, 0);
Grid.SetRow(panel, rowCount);
FrameworkElement contentControl;
switch (type)
{
case "textBlock":
{
contentControl = new TextBlock
{
Text = attribute.Description.Replace("\\r\\n", "\r\n"),
Margin = settingTextBlockMargin,
Padding = new Thickness(0, 0, 0, 0),
HorizontalAlignment = System.Windows.HorizontalAlignment.Left,
TextAlignment = TextAlignment.Left,
TextWrapping = TextWrapping.Wrap
};
Grid.SetColumn(contentControl, 0);
Grid.SetColumnSpan(contentControl, 2);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "input":
{
var textBox = new TextBox()
{
Text = Settings[attribute.Name] as string ?? string.Empty,
Margin = settingControlMargin,
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch,
ToolTip = attribute.Description
};
textBox.TextChanged += (_, _) =>
{
Settings[attribute.Name] = textBox.Text;
};
contentControl = textBox;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "inputWithFileBtn":
{
var textBox = new TextBox()
{
Margin = new Thickness(10, 0, 0, 0),
Text = Settings[attribute.Name] as string ?? string.Empty,
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch,
ToolTip = attribute.Description
};
textBox.TextChanged += (_, _) =>
{
Settings[attribute.Name] = textBox.Text;
};
var Btn = new System.Windows.Controls.Button()
{
Margin = new Thickness(10, 0, 0, 0), Content = "Browse"
};
var dockPanel = new DockPanel() { Margin = settingControlMargin };
DockPanel.SetDock(Btn, Dock.Right);
dockPanel.Children.Add(Btn);
dockPanel.Children.Add(textBox);
contentControl = dockPanel;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "textarea":
{
var textBox = new TextBox()
{
Height = 120,
Margin = settingControlMargin,
VerticalAlignment = VerticalAlignment.Center,
TextWrapping = TextWrapping.WrapWithOverflow,
AcceptsReturn = true,
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch,
Text = Settings[attribute.Name] as string ?? string.Empty,
ToolTip = attribute.Description
};
textBox.TextChanged += (sender, _) =>
{
Settings[attribute.Name] = ((TextBox)sender).Text;
};
contentControl = textBox;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "passwordBox":
{
var passwordBox = new PasswordBox()
{
Margin = settingControlMargin,
Password = Settings[attribute.Name] as string ?? string.Empty,
PasswordChar = attribute.passwordChar == default ? '*' : attribute.passwordChar,
HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch,
ToolTip = attribute.Description
};
passwordBox.PasswordChanged += (sender, _) =>
{
Settings[attribute.Name] = ((PasswordBox)sender).Password;
};
contentControl = passwordBox;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "dropdown":
{
var comboBox = new System.Windows.Controls.ComboBox()
{
ItemsSource = attribute.Options,
SelectedItem = Settings[attribute.Name],
Margin = settingControlMargin,
HorizontalAlignment = System.Windows.HorizontalAlignment.Right,
ToolTip = attribute.Description
};
comboBox.SelectionChanged += (sender, _) =>
{
Settings[attribute.Name] = (string)((System.Windows.Controls.ComboBox)sender).SelectedItem;
};
contentControl = comboBox;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
}
case "checkbox":
var checkBox = new CheckBox
{
IsChecked =
Settings[attribute.Name] is bool isChecked
? isChecked
: bool.Parse(attribute.DefaultValue),
Margin = settingCheckboxMargin,
HorizontalAlignment = System.Windows.HorizontalAlignment.Right,
ToolTip = attribute.Description
};
checkBox.Click += (sender, _) =>
{
Settings[attribute.Name] = ((CheckBox)sender).IsChecked;
};
contentControl = checkBox;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
case "hyperlink":
var hyperlink = new Hyperlink { ToolTip = attribute.Description, NavigateUri = attribute.url };
var linkbtn = new System.Windows.Controls.Button
{
HorizontalAlignment = System.Windows.HorizontalAlignment.Right,
Margin = settingControlMargin
};
linkbtn.Content = attribute.urlLabel;
contentControl = linkbtn;
Grid.SetColumn(contentControl, 1);
Grid.SetRow(contentControl, rowCount);
if (rowCount != 0)
mainPanel.Children.Add(sep);
Grid.SetRow(sep, rowCount);
Grid.SetColumn(sep, 0);
Grid.SetColumnSpan(sep, 2);
break;
default:
continue;
}
if (type != "textBlock")
SettingControls[attribute.Name] = contentControl;
mainPanel.Children.Add(panel);
mainPanel.Children.Add(contentControl);
rowCount++;
}
return settingWindow;
}
}
}

View file

@ -0,0 +1,123 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Pipelines;
using System.Threading;
using System.Threading.Tasks;
using Flow.Launcher.Core.Plugin.JsonRPCV2Models;
using Flow.Launcher.Plugin;
using Microsoft.VisualStudio.Threading;
using StreamJsonRpc;
using IAsyncDisposable = System.IAsyncDisposable;
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; }
protected StreamReader ErrorStream { get; set; }
private JsonRpc RPC { get; set; }
protected override async Task<bool> ExecuteResultAsync(JsonRPCResult result)
{
try
{
var res = await RPC.InvokeAsync<JsonRPCExecuteResponse>(result.JsonRPCAction.Method,
argument: result.JsonRPCAction.Parameters);
return res.Hide;
}
catch
{
return false;
}
}
public override List<Result> LoadContextMenus(Result selectedResult)
{
throw new NotImplementedException();
}
public override async Task<List<Result>> QueryAsync(Query query, CancellationToken token)
{
try
{
var res = await RPC.InvokeWithCancellationAsync<JsonRPCQueryResponseModel>("query",
new[] { query },
token);
var results = ParseResults(res);
return results;
}
catch
{
return new List<Result>();
}
}
public override async Task InitAsync(PluginInitContext context)
{
await base.InitAsync(context);
SetupJsonRPC();
_ = ReadErrorAsync();
await RPC.InvokeAsync("initialize", context);
async Task ReadErrorAsync()
{
var error = await ErrorStream.ReadToEndAsync();
if (!string.IsNullOrEmpty(error))
{
throw new Exception(error);
}
}
}
public event ResultUpdatedEventHandler ResultsUpdated;
private void SetupJsonRPC()
{
var formatter = new SystemTextJsonFormatter { JsonSerializerOptions = RequestSerializeOption };
var handler = new NewLineDelimitedMessageHandler(ClientPipe,
formatter);
RPC = new JsonRpc(handler, new JsonRPCPublicAPI(Context.API));
RPC.AddLocalRpcMethod("UpdateResults", new Action<string, JsonRPCQueryResponseModel>((rawQuery, response) =>
{
var results = ParseResults(response);
ResultsUpdated?.Invoke(this,
new ResultUpdatedEventArgs { Query = new Query() { RawQuery = rawQuery }, Results = results });
}));
RPC.SynchronizationContext = null;
RPC.StartListening();
}
public virtual Task ReloadDataAsync()
{
SetupJsonRPC();
return Task.CompletedTask;
}
public virtual ValueTask DisposeAsync()
{
RPC?.Dispose();
ErrorStream?.Dispose();
return ValueTask.CompletedTask;
}
}
}

View file

@ -0,0 +1,4 @@
namespace Flow.Launcher.Core.Plugin.JsonRPCV2Models
{
public record JsonRPCExecuteResponse(bool Hide = true);
}

View file

@ -0,0 +1,177 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
using Flow.Launcher.Plugin;
using Flow.Launcher.Plugin.SharedModels;
namespace Flow.Launcher.Core.Plugin.JsonRPCV2Models
{
public class JsonRPCPublicAPI
{
private IPublicAPI _api;
public JsonRPCPublicAPI(IPublicAPI api)
{
_api = api;
}
public void ChangeQuery(string query, bool requery = false)
{
_api.ChangeQuery(query, requery);
}
public void RestartApp()
{
_api.RestartApp();
}
public void ShellRun(string cmd, string filename = "cmd.exe")
{
_api.ShellRun(cmd, filename);
}
public void CopyToClipboard(string text, bool directCopy = false, bool showDefaultNotification = true)
{
_api.CopyToClipboard(text, directCopy, showDefaultNotification);
}
public void SaveAppAllSettings()
{
_api.SaveAppAllSettings();
}
public void SavePluginSettings()
{
_api.SavePluginSettings();
}
public Task ReloadAllPluginDataAsync()
{
return _api.ReloadAllPluginData();
}
public void CheckForNewUpdate()
{
_api.CheckForNewUpdate();
}
public void ShowMsgError(string title, string subTitle = "")
{
_api.ShowMsgError(title, subTitle);
}
public void ShowMainWindow()
{
_api.ShowMainWindow();
}
public void HideMainWindow()
{
_api.HideMainWindow();
}
public bool IsMainWindowVisible()
{
return _api.IsMainWindowVisible();
}
public void ShowMsg(string title, string subTitle = "", string iconPath = "")
{
_api.ShowMsg(title, subTitle, iconPath);
}
public void ShowMsg(string title, string subTitle, string iconPath, bool useMainWindowAsOwner = true)
{
_api.ShowMsg(title, subTitle, iconPath, useMainWindowAsOwner);
}
public void OpenSettingDialog()
{
_api.OpenSettingDialog();
}
public string GetTranslation(string key)
{
return _api.GetTranslation(key);
}
public List<PluginPair> GetAllPlugins()
{
return _api.GetAllPlugins();
}
public MatchResult FuzzySearch(string query, string stringToCompare)
{
return _api.FuzzySearch(query, stringToCompare);
}
public Task<string> HttpGetStringAsync(string url, CancellationToken token = default)
{
return _api.HttpGetStringAsync(url, token);
}
public Task<Stream> HttpGetStreamAsync(string url, CancellationToken token = default)
{
return _api.HttpGetStreamAsync(url, token);
}
public Task HttpDownloadAsync([NotNull] string url, [NotNull] string filePath,
CancellationToken token = default)
{
return _api.HttpDownloadAsync(url, filePath, token);
}
public void AddActionKeyword(string pluginId, string newActionKeyword)
{
_api.AddActionKeyword(pluginId, newActionKeyword);
}
public void RemoveActionKeyword(string pluginId, string oldActionKeyword)
{
_api.RemoveActionKeyword(pluginId, oldActionKeyword);
}
public bool ActionKeywordAssigned(string actionKeyword)
{
return _api.ActionKeywordAssigned(actionKeyword);
}
public void LogDebug(string className, string message, [CallerMemberName] string methodName = "")
{
_api.LogDebug(className, message, methodName);
}
public void LogInfo(string className, string message, [CallerMemberName] string methodName = "")
{
_api.LogInfo(className, message, methodName);
}
public void LogWarn(string className, string message, [CallerMemberName] string methodName = "")
{
_api.LogWarn(className, message, methodName);
}
public void OpenDirectory(string DirectoryPath, string FileNameOrFilePath = null)
{
_api.OpenDirectory(DirectoryPath, FileNameOrFilePath);
}
public void OpenUrl(string url, bool? inPrivate = null)
{
_api.OpenUrl(url, inPrivate);
}
public void OpenAppUri(string appUri)
{
_api.OpenAppUri(appUri);
}
}
}

View file

@ -0,0 +1,9 @@
using System.Collections.Generic;
using Flow.Launcher.Plugin;
namespace Flow.Launcher.Core.Plugin.JsonRPCV2Models
{
public record JsonRPCQueryRequest(
List<JsonRPCResult> Results
);
}

View file

@ -1,5 +1,6 @@
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Text.Json;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Flow.Launcher.Plugin; using Flow.Launcher.Plugin;
@ -27,23 +28,22 @@ namespace Flow.Launcher.Core.Plugin
protected override Task<Stream> RequestAsync(JsonRPCRequestModel request, CancellationToken token = default) protected override Task<Stream> RequestAsync(JsonRPCRequestModel request, CancellationToken token = default)
{ {
_startInfo.ArgumentList[1] = request.ToString(); _startInfo.ArgumentList[1] = JsonSerializer.Serialize(request);
return ExecuteAsync(_startInfo, token); return ExecuteAsync(_startInfo, token);
} }
protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default) 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 // since this is not static, request strings will build up in ArgumentList if index is not specified
_startInfo.ArgumentList[1] = rpcRequest.ToString(); _startInfo.ArgumentList[1] = JsonSerializer.Serialize(rpcRequest);
return Execute(_startInfo); return Execute(_startInfo);
} }
public override async Task InitAsync(PluginInitContext context) public override async Task InitAsync(PluginInitContext context)
{ {
_startInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath); _startInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath);
_startInfo.ArgumentList.Add(string.Empty);
await base.InitAsync(context);
_startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory; _startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory;
await base.InitAsync(context);
} }
} }
} }

View file

@ -0,0 +1,38 @@
using System.Diagnostics;
using System.IO;
using System.IO.Pipelines;
using System.Threading;
using System.Threading.Tasks;
using Flow.Launcher.Plugin;
namespace Flow.Launcher.Core.Plugin
{
/// <summary>
/// Execution of JavaScript & TypeScript plugins
/// </summary>
internal class NodePluginV2 : ProcessStreamPluginV2
{
public NodePluginV2(string filename)
{
StartInfo = new ProcessStartInfo
{
FileName = filename,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true
};
}
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);
}
}
}

View file

@ -35,6 +35,17 @@ namespace Flow.Launcher.Core.Plugin
return existAssembly ?? (assemblyPath == null ? null : LoadFromAssemblyPath(assemblyPath)); return existAssembly ?? (assemblyPath == null ? null : LoadFromAssemblyPath(assemblyPath));
} }
protected override IntPtr LoadUnmanagedDll(string unmanagedDllName)
{
var path = dependencyResolver.ResolveUnmanagedDllToPath(unmanagedDllName);
if (!string.IsNullOrEmpty(path))
{
return LoadUnmanagedDllFromPath(path);
}
return IntPtr.Zero;
}
internal Type FromAssemblyGetTypeOfInterface(Assembly assembly, Type type) internal Type FromAssemblyGetTypeOfInterface(Assembly assembly, Type type)
{ {
var allTypes = assembly.ExportedTypes; var allTypes = assembly.ExportedTypes;

View file

@ -11,6 +11,8 @@ using Flow.Launcher.Infrastructure.Logger;
using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Infrastructure.UserSettings;
using Flow.Launcher.Plugin; using Flow.Launcher.Plugin;
using ISavable = Flow.Launcher.Plugin.ISavable; using ISavable = Flow.Launcher.Plugin.ISavable;
using Flow.Launcher.Plugin.SharedCommands;
using System.Text.Json;
namespace Flow.Launcher.Core.Plugin namespace Flow.Launcher.Core.Plugin
{ {
@ -27,9 +29,9 @@ namespace Flow.Launcher.Core.Plugin
public static IPublicAPI API { private set; get; } public static IPublicAPI API { private set; get; }
// todo happlebao, this should not be public, the indicator function should be embeded private static PluginsSettings Settings;
public static PluginsSettings Settings;
private static List<PluginMetadata> _metadatas; private static List<PluginMetadata> _metadatas;
private static List<string> _modifiedPlugins = new List<string>();
/// <summary> /// <summary>
/// Directories that will hold Flow Launcher plugin directory /// Directories that will hold Flow Launcher plugin directory
@ -210,7 +212,19 @@ namespace Flow.Launcher.Core.Plugin
} }
catch (Exception e) catch (Exception e)
{ {
throw new FlowPluginException(metadata, e); Result r = new()
{
Title = $"{metadata.Name}: Failed to respond!",
SubTitle = "Select this result for more info",
IcoPath = Flow.Launcher.Infrastructure.Constant.ErrorIcon,
PluginDirectory = metadata.PluginDirectory,
ActionKeywordAssigned = query.ActionKeyword,
PluginID = metadata.ID,
OriginQuery = query,
Action = _ => { throw new FlowPluginException(metadata, e);},
Score = -100
};
results.Add(r);
} }
return results; return results;
} }
@ -331,5 +345,156 @@ namespace Flow.Launcher.Core.Plugin
RemoveActionKeyword(id, oldActionKeyword); RemoveActionKeyword(id, oldActionKeyword);
} }
} }
private static string GetContainingFolderPathAfterUnzip(string unzippedParentFolderPath)
{
var unzippedFolderCount = Directory.GetDirectories(unzippedParentFolderPath).Length;
var unzippedFilesCount = Directory.GetFiles(unzippedParentFolderPath).Length;
// adjust path depending on how the plugin is zipped up
// the recommended should be to zip up the folder not the contents
if (unzippedFolderCount == 1 && unzippedFilesCount == 0)
// folder is zipped up, unzipped plugin directory structure: tempPath/unzippedParentPluginFolder/pluginFolderName/
return Directory.GetDirectories(unzippedParentFolderPath)[0];
if (unzippedFilesCount > 1)
// content is zipped up, unzipped plugin directory structure: tempPath/unzippedParentPluginFolder/
return unzippedParentFolderPath;
return string.Empty;
}
private static bool SameOrLesserPluginVersionExists(string metadataPath)
{
var newMetadata = JsonSerializer.Deserialize<PluginMetadata>(File.ReadAllText(metadataPath));
return AllPlugins.Any(x => x.Metadata.ID == newMetadata.ID
&& newMetadata.Version.CompareTo(x.Metadata.Version) <= 0);
}
#region Public functions
public static bool PluginModified(string uuid)
{
return _modifiedPlugins.Contains(uuid);
}
/// <summary>
/// Update a plugin to new version, from a zip file. Will Delete zip after updating.
/// </summary>
public static void UpdatePlugin(PluginMetadata existingVersion, UserPlugin newVersion, string zipFilePath)
{
InstallPlugin(newVersion, zipFilePath, checkModified:false);
UninstallPlugin(existingVersion, removeSettings:false, checkModified:false);
_modifiedPlugins.Add(existingVersion.ID);
}
/// <summary>
/// Install a plugin. Will Delete zip after updating.
/// </summary>
public static void InstallPlugin(UserPlugin plugin, string zipFilePath)
{
InstallPlugin(plugin, zipFilePath, true);
}
/// <summary>
/// Uninstall a plugin.
/// </summary>
public static void UninstallPlugin(PluginMetadata plugin, bool removeSettings = true)
{
UninstallPlugin(plugin, removeSettings, true);
}
#endregion
#region Internal functions
internal static void InstallPlugin(UserPlugin plugin, string zipFilePath, bool checkModified)
{
if (checkModified && PluginModified(plugin.ID))
{
// Distinguish exception from installing same or less version
throw new ArgumentException($"Plugin {plugin.Name} {plugin.ID} has been modified.", nameof(plugin));
}
// Unzip plugin files to temp folder
var tempFolderPluginPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
System.IO.Compression.ZipFile.ExtractToDirectory(zipFilePath, tempFolderPluginPath);
File.Delete(zipFilePath);
var pluginFolderPath = GetContainingFolderPathAfterUnzip(tempFolderPluginPath);
var metadataJsonFilePath = string.Empty;
if (File.Exists(Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName)))
metadataJsonFilePath = Path.Combine(pluginFolderPath, Constant.PluginMetadataFileName);
if (string.IsNullOrEmpty(metadataJsonFilePath) || string.IsNullOrEmpty(pluginFolderPath))
{
throw new FileNotFoundException($"Unable to find plugin.json from the extracted zip file, or this path {pluginFolderPath} does not exist");
}
if (SameOrLesserPluginVersionExists(metadataJsonFilePath))
{
throw new InvalidOperationException($"A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin {plugin.Name}");
}
var folderName = string.IsNullOrEmpty(plugin.Version) ? $"{plugin.Name}-{Guid.NewGuid()}" : $"{plugin.Name}-{plugin.Version}";
var defaultPluginIDs = new List<string>
{
"0ECADE17459B49F587BF81DC3A125110", // BrowserBookmark
"CEA0FDFC6D3B4085823D60DC76F28855", // Calculator
"572be03c74c642baae319fc283e561a8", // Explorer
"6A122269676E40EB86EB543B945932B9", // PluginIndicator
"9f8f9b14-2518-4907-b211-35ab6290dee7", // PluginsManager
"b64d0a79-329a-48b0-b53f-d658318a1bf6", // ProcessKiller
"791FC278BA414111B8D1886DFE447410", // Program
"D409510CD0D2481F853690A07E6DC426", // Shell
"CEA08895D2544B019B2E9C5009600DF4", // Sys
"0308FD86DE0A4DEE8D62B9B535370992", // URL
"565B73353DBF4806919830B9202EE3BF", // WebSearch
"5043CETYU6A748679OPA02D27D99677A" // WindowsSettings
};
// Treat default plugin differently, it needs to be removable along with each flow release
var installDirectory = !defaultPluginIDs.Any(x => x == plugin.ID)
? DataLocation.PluginsDirectory
: Constant.PreinstalledDirectory;
var newPluginPath = Path.Combine(installDirectory, folderName);
FilesFolders.CopyAll(pluginFolderPath, newPluginPath);
Directory.Delete(tempFolderPluginPath, true);
if (checkModified)
{
_modifiedPlugins.Add(plugin.ID);
}
}
internal static void UninstallPlugin(PluginMetadata plugin, bool removeSettings, bool checkModified)
{
if (checkModified && PluginModified(plugin.ID))
{
throw new ArgumentException($"Plugin {plugin.Name} has been modified");
}
if (removeSettings)
{
Settings.Plugins.Remove(plugin.ID);
AllPlugins.RemoveAll(p => p.Metadata.ID == plugin.ID);
}
// Marked for deletion. Will be deleted on next start up
using var _ = File.CreateText(Path.Combine(plugin.PluginDirectory, "NeedDelete.txt"));
if (checkModified)
{
_modifiedPlugins.Add(plugin.ID);
}
}
#endregion
} }
} }

View file

@ -21,20 +21,31 @@ namespace Flow.Launcher.Core.Plugin
var dotnetPlugins = DotNetPlugins(metadatas); var dotnetPlugins = DotNetPlugins(metadatas);
var pythonEnv = new PythonEnvironment(metadatas, settings); var pythonEnv = new PythonEnvironment(metadatas, settings);
var pythonV2Env = new PythonV2Environment(metadatas, settings);
var tsEnv = new TypeScriptEnvironment(metadatas, settings); var tsEnv = new TypeScriptEnvironment(metadatas, settings);
var jsEnv = new JavaScriptEnvironment(metadatas, settings); var jsEnv = new JavaScriptEnvironment(metadatas, settings);
var tsV2Env = new TypeScriptV2Environment(metadatas, settings);
var jsV2Env = new JavaScriptV2Environment(metadatas, settings);
var pythonPlugins = pythonEnv.Setup(); var pythonPlugins = pythonEnv.Setup();
var pythonV2Plugins = pythonV2Env.Setup();
var tsPlugins = tsEnv.Setup(); var tsPlugins = tsEnv.Setup();
var jsPlugins = jsEnv.Setup(); var jsPlugins = jsEnv.Setup();
var tsV2Plugins = tsV2Env.Setup();
var jsV2Plugins = jsV2Env.Setup();
var executablePlugins = ExecutablePlugins(metadatas); var executablePlugins = ExecutablePlugins(metadatas);
var executableV2Plugins = ExecutableV2Plugins(metadatas);
var plugins = dotnetPlugins var plugins = dotnetPlugins
.Concat(pythonPlugins) .Concat(pythonPlugins)
.Concat(tsPlugins) .Concat(pythonV2Plugins)
.Concat(jsPlugins) .Concat(tsPlugins)
.Concat(executablePlugins) .Concat(jsPlugins)
.ToList(); .Concat(tsV2Plugins)
.Concat(jsV2Plugins)
.Concat(executablePlugins)
.Concat(executableV2Plugins)
.ToList();
return plugins; return plugins;
} }
@ -93,7 +104,7 @@ namespace Flow.Launcher.Core.Plugin
return; return;
} }
plugins.Add(new PluginPair {Plugin = plugin, Metadata = metadata}); plugins.Add(new PluginPair { Plugin = plugin, Metadata = metadata });
}); });
metadata.InitTime += milliseconds; metadata.InitTime += milliseconds;
} }
@ -118,7 +129,7 @@ namespace Flow.Launcher.Core.Plugin
return plugins; return plugins;
} }
public static IEnumerable<PluginPair> ExecutablePlugins(IEnumerable<PluginMetadata> source) public static IEnumerable<PluginPair> ExecutablePlugins(IEnumerable<PluginMetadata> source)
{ {
return source return source
.Where(o => o.Language.Equals(AllowedLanguage.Executable, StringComparison.OrdinalIgnoreCase)) .Where(o => o.Language.Equals(AllowedLanguage.Executable, StringComparison.OrdinalIgnoreCase))
@ -127,5 +138,15 @@ namespace Flow.Launcher.Core.Plugin
Plugin = new ExecutablePlugin(metadata.ExecuteFilePath), Metadata = metadata Plugin = new ExecutablePlugin(metadata.ExecuteFilePath), Metadata = metadata
}); });
} }
public static IEnumerable<PluginPair> ExecutableV2Plugins(IEnumerable<PluginMetadata> source)
{
return source
.Where(o => o.Language.Equals(AllowedLanguage.ExecutableV2, StringComparison.OrdinalIgnoreCase))
.Select(metadata => new PluginPair
{
Plugin = new ExecutablePluginV2(metadata.ExecuteFilePath), Metadata = metadata
});
}
} }
} }

View file

@ -0,0 +1,70 @@
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 Nerdbank.Streams;
namespace Flow.Launcher.Core.Plugin
{
internal abstract class ProcessStreamPluginV2 : JsonRPCPluginV2
{
public override string SupportedLanguage { get; set; }
protected sealed override IDuplexPipe ClientPipe { get; set; }
protected abstract ProcessStartInfo StartInfo { get; set; }
protected Process ClientProcess { get; set; }
public override async Task InitAsync(PluginInitContext context)
{
StartInfo.EnvironmentVariables["FLOW_VERSION"] = Constant.Version;
StartInfo.EnvironmentVariables["FLOW_PROGRAM_DIRECTORY"] = Constant.ProgramDirectory;
StartInfo.EnvironmentVariables["FLOW_APPLICATION_DIRECTORY"] = Constant.ApplicationDirectory;
StartInfo.ArgumentList.Add(context.CurrentPluginMetadata.ExecuteFilePath);
StartInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory;
ClientProcess = Process.Start(StartInfo);
ArgumentNullException.ThrowIfNull(ClientProcess);
SetupPipe(ClientProcess);
ErrorStream = ClientProcess.StandardError;
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;
ClientProcess = Process.Start(StartInfo);
ArgumentNullException.ThrowIfNull(ClientProcess);
SetupPipe(ClientProcess);
await base.ReloadDataAsync();
oldProcess.Kill(true);
await oldProcess.WaitForExitAsync();
oldProcess.Dispose();
}
public override async ValueTask DisposeAsync()
{
ClientProcess.Kill(true);
await ClientProcess.WaitForExitAsync();
ClientProcess.Dispose();
await base.DisposeAsync();
}
}
}

View file

@ -1,5 +1,6 @@
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Text.Json;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure;
@ -22,7 +23,6 @@ namespace Flow.Launcher.Core.Plugin
RedirectStandardError = true, RedirectStandardError = true,
}; };
// temp fix for issue #667
var path = Path.Combine(Constant.ProgramDirectory, JsonRPC); var path = Path.Combine(Constant.ProgramDirectory, JsonRPC);
_startInfo.EnvironmentVariables["PYTHONPATH"] = path; _startInfo.EnvironmentVariables["PYTHONPATH"] = path;
@ -37,7 +37,7 @@ namespace Flow.Launcher.Core.Plugin
protected override Task<Stream> RequestAsync(JsonRPCRequestModel request, CancellationToken token = default) protected override Task<Stream> RequestAsync(JsonRPCRequestModel request, CancellationToken token = default)
{ {
_startInfo.ArgumentList[2] = request.ToString(); _startInfo.ArgumentList[2] = JsonSerializer.Serialize(request, RequestSerializeOption);
return ExecuteAsync(_startInfo, token); return ExecuteAsync(_startInfo, token);
} }
@ -45,8 +45,8 @@ namespace Flow.Launcher.Core.Plugin
protected override string Request(JsonRPCRequestModel rpcRequest, CancellationToken token = default) 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 // since this is not static, request strings will build up in ArgumentList if index is not specified
_startInfo.ArgumentList[2] = rpcRequest.ToString(); _startInfo.ArgumentList[2] = JsonSerializer.Serialize(rpcRequest, RequestSerializeOption);
_startInfo.WorkingDirectory = context.CurrentPluginMetadata.PluginDirectory; _startInfo.WorkingDirectory = Context.CurrentPluginMetadata.PluginDirectory;
// TODO: Async Action // TODO: Async Action
return Execute(_startInfo); return Execute(_startInfo);
} }

View file

@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.IO.Pipelines;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Input;
using Flow.Launcher.Core.Plugin.JsonRPCV2Models;
using Flow.Launcher.Infrastructure;
using Flow.Launcher.Plugin;
using Microsoft.VisualStudio.Threading;
using Nerdbank.Streams;
using StreamJsonRpc;
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
};
var path = Path.Combine(Constant.ProgramDirectory, JsonRpc);
StartInfo.EnvironmentVariables["PYTHONPATH"] = path;
//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");
}
}
}

View file

@ -53,6 +53,7 @@
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="MemoryPack" Version="1.10.0" />
<PackageReference Include="Microsoft.VisualStudio.Threading" Version="17.7.30" /> <PackageReference Include="Microsoft.VisualStudio.Threading" Version="17.7.30" />
<PackageReference Include="NLog" Version="4.7.10" /> <PackageReference Include="NLog" Version="4.7.10" />
<PackageReference Include="NLog.Schema" Version="4.7.10" /> <PackageReference Include="NLog.Schema" Version="4.7.10" />

View file

@ -3,6 +3,7 @@ using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Media; using System.Windows.Media;
using System.Windows.Media.Imaging; using System.Windows.Media.Imaging;
@ -15,6 +16,7 @@ namespace Flow.Launcher.Infrastructure.Image
public static class ImageLoader public static class ImageLoader
{ {
private static readonly ImageCache ImageCache = new(); private static readonly ImageCache ImageCache = new();
private static SemaphoreSlim storageLock { get; } = new SemaphoreSlim(1, 1);
private static BinaryStorage<Dictionary<(string, bool), int>> _storage; private static BinaryStorage<Dictionary<(string, bool), int>> _storage;
private static readonly ConcurrentDictionary<string, string> GuidToKey = new(); private static readonly ConcurrentDictionary<string, string> GuidToKey = new();
private static IImageHashGenerator _hashGenerator; private static IImageHashGenerator _hashGenerator;
@ -25,24 +27,18 @@ namespace Flow.Launcher.Infrastructure.Image
public const int FullIconSize = 256; public const int FullIconSize = 256;
private static readonly string[] ImageExtensions = private static readonly string[] ImageExtensions = { ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".ico" };
{
".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".ico"
};
public static void Initialize() public static async Task InitializeAsync()
{ {
_storage = new BinaryStorage<Dictionary<(string, bool), int>>("Image"); _storage = new BinaryStorage<Dictionary<(string, bool), int>>("Image");
_hashGenerator = new ImageHashGenerator(); _hashGenerator = new ImageHashGenerator();
var usage = LoadStorageToConcurrentDictionary(); var usage = await LoadStorageToConcurrentDictionaryAsync();
ImageCache.Initialize(usage.ToDictionary(x => x.Key, x => x.Value)); ImageCache.Initialize(usage.ToDictionary(x => x.Key, x => x.Value));
foreach (var icon in new[] foreach (var icon in new[] { Constant.DefaultIcon, Constant.MissingImgIcon })
{
Constant.DefaultIcon, Constant.MissingImgIcon
})
{ {
ImageSource img = new BitmapImage(new Uri(icon)); ImageSource img = new BitmapImage(new Uri(icon));
img.Freeze(); img.Freeze();
@ -58,29 +54,41 @@ namespace Flow.Launcher.Infrastructure.Image
await LoadAsync(path, isFullImage); await LoadAsync(path, isFullImage);
} }
}); });
Log.Info($"|ImageLoader.Initialize|Number of preload images is <{ImageCache.CacheSize()}>, Images Number: {ImageCache.CacheSize()}, Unique Items {ImageCache.UniqueImagesInCache()}"); Log.Info(
$"|ImageLoader.Initialize|Number of preload images is <{ImageCache.CacheSize()}>, Images Number: {ImageCache.CacheSize()}, Unique Items {ImageCache.UniqueImagesInCache()}");
}); });
} }
public static void Save() public static async Task Save()
{ {
lock (_storage) await storageLock.WaitAsync();
try
{ {
_storage.Save(ImageCache.Data _storage.SaveAsync(ImageCache.Data
.ToDictionary( .ToDictionary(
x => x.Key, x => x.Key,
x => x.Value.usage)); x => x.Value.usage));
} }
finally
{
storageLock.Release();
}
} }
private static ConcurrentDictionary<(string, bool), int> LoadStorageToConcurrentDictionary() private static async Task<ConcurrentDictionary<(string, bool), int>> LoadStorageToConcurrentDictionaryAsync()
{ {
lock (_storage) await storageLock.WaitAsync();
try
{ {
var loaded = _storage.TryLoad(new Dictionary<(string, bool), int>()); var loaded = await _storage.TryLoadAsync(new Dictionary<(string, bool), int>());
return new ConcurrentDictionary<(string, bool), int>(loaded); return new ConcurrentDictionary<(string, bool), int>(loaded);
} }
finally
{
storageLock.Release();
}
} }
private class ImageResult private class ImageResult
@ -129,6 +137,7 @@ namespace Flow.Launcher.Infrastructure.Image
ImageCache[path, loadFullImage] = image; ImageCache[path, loadFullImage] = image;
return new ImageResult(image, ImageType.ImageFile); return new ImageResult(image, ImageType.ImageFile);
} }
if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase)) if (path.StartsWith("data:", StringComparison.OrdinalIgnoreCase))
{ {
var imageSource = new BitmapImage(new Uri(path)); var imageSource = new BitmapImage(new Uri(path));
@ -158,6 +167,7 @@ namespace Flow.Launcher.Infrastructure.Image
return imageResult; return imageResult;
} }
private static async Task<BitmapImage> LoadRemoteImageAsync(bool loadFullImage, Uri uriResult) private static async Task<BitmapImage> LoadRemoteImageAsync(bool loadFullImage, Uri uriResult)
{ {
// Download image from url // Download image from url
@ -173,6 +183,7 @@ namespace Flow.Launcher.Infrastructure.Image
image.DecodePixelHeight = SmallIconSize; image.DecodePixelHeight = SmallIconSize;
image.DecodePixelWidth = SmallIconSize; image.DecodePixelWidth = SmallIconSize;
} }
image.StreamSource = buffer; image.StreamSource = buffer;
image.EndInit(); image.EndInit();
image.StreamSource = null; image.StreamSource = null;
@ -236,7 +247,8 @@ namespace Flow.Launcher.Infrastructure.Image
return new ImageResult(image, type); return new ImageResult(image, type);
} }
private static BitmapSource GetThumbnail(string path, ThumbnailOptions option = ThumbnailOptions.ThumbnailOnly, int size = SmallIconSize) private static BitmapSource GetThumbnail(string path, ThumbnailOptions option = ThumbnailOptions.ThumbnailOnly,
int size = SmallIconSize)
{ {
return WindowsThumbnailProvider.GetThumbnail( return WindowsThumbnailProvider.GetThumbnail(
path, path,
@ -261,17 +273,19 @@ namespace Flow.Launcher.Infrastructure.Image
var img = imageResult.ImageSource; var img = imageResult.ImageSource;
if (imageResult.ImageType != ImageType.Error && imageResult.ImageType != ImageType.Cache) if (imageResult.ImageType != ImageType.Error && imageResult.ImageType != ImageType.Cache)
{ // we need to get image hash {
// we need to get image hash
string hash = EnableImageHash ? _hashGenerator.GetHashFromImage(img) : null; string hash = EnableImageHash ? _hashGenerator.GetHashFromImage(img) : null;
if (hash != null) if (hash != null)
{ {
if (GuidToKey.TryGetValue(hash, out string key)) if (GuidToKey.TryGetValue(hash, out string key))
{ // image already exists {
// image already exists
img = ImageCache[key, loadFullImage] ?? img; img = ImageCache[key, loadFullImage] ?? img;
} }
else else
{ // new guid {
// new guid
GuidToKey[hash] = path; GuidToKey[hash] = path;
} }
@ -314,8 +328,10 @@ namespace Flow.Launcher.Infrastructure.Image
resizedHeight.EndInit(); resizedHeight.EndInit();
return resizedHeight; return resizedHeight;
} }
return resizedWidth; return resizedWidth;
} }
return image; return image;
} }
} }

View file

@ -4,67 +4,65 @@ using System.Reflection;
using System.Runtime.Serialization; using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters; using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.Serialization.Formatters.Binary;
using System.Threading.Tasks;
using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.Logger;
using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Infrastructure.UserSettings;
using MemoryPack;
namespace Flow.Launcher.Infrastructure.Storage namespace Flow.Launcher.Infrastructure.Storage
{ {
#pragma warning disable SYSLIB0011 // BinaryFormatter is obsolete.
/// <summary> /// <summary>
/// Stroage object using binary data /// Stroage object using binary data
/// Normally, it has better performance, but not readable /// Normally, it has better performance, but not readable
/// </summary> /// </summary>
/// <remarks>
/// It utilize MemoryPack, which means the object must be MemoryPackSerializable
/// https://github.com/Cysharp/MemoryPack
/// </remarks>
public class BinaryStorage<T> public class BinaryStorage<T>
{ {
const string DirectoryName = "Cache";
const string FileSuffix = ".cache";
public BinaryStorage(string filename) public BinaryStorage(string filename)
{ {
const string directoryName = "Cache"; var directoryPath = Path.Combine(DataLocation.DataDirectory(), DirectoryName);
var directoryPath = Path.Combine(DataLocation.DataDirectory(), directoryName);
Helper.ValidateDirectory(directoryPath); Helper.ValidateDirectory(directoryPath);
const string fileSuffix = ".cache"; FilePath = Path.Combine(directoryPath, $"{filename}{FileSuffix}");
FilePath = Path.Combine(directoryPath, $"{filename}{fileSuffix}");
} }
public string FilePath { get; } public string FilePath { get; }
public T TryLoad(T defaultData) public async ValueTask<T> TryLoadAsync(T defaultData)
{ {
if (File.Exists(FilePath)) if (File.Exists(FilePath))
{ {
if (new FileInfo(FilePath).Length == 0) if (new FileInfo(FilePath).Length == 0)
{ {
Log.Error($"|BinaryStorage.TryLoad|Zero length cache file <{FilePath}>"); Log.Error($"|BinaryStorage.TryLoad|Zero length cache file <{FilePath}>");
Save(defaultData); await SaveAsync(defaultData);
return defaultData; return defaultData;
} }
using (var stream = new FileStream(FilePath, FileMode.Open)) await using var stream = new FileStream(FilePath, FileMode.Open);
{ var d = await DeserializeAsync(stream, defaultData);
var d = Deserialize(stream, defaultData); return d;
return d;
}
} }
else else
{ {
Log.Info("|BinaryStorage.TryLoad|Cache file not exist, load default data"); Log.Info("|BinaryStorage.TryLoad|Cache file not exist, load default data");
Save(defaultData); await SaveAsync(defaultData);
return defaultData; return defaultData;
} }
} }
private T Deserialize(FileStream stream, T defaultData) private async ValueTask<T> DeserializeAsync(Stream stream, T defaultData)
{ {
//http://stackoverflow.com/questions/2120055/binaryformatter-deserialize-gives-serializationexception
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
BinaryFormatter binaryFormatter = new BinaryFormatter
{
AssemblyFormat = FormatterAssemblyStyle.Simple
};
try try
{ {
var t = ((T)binaryFormatter.Deserialize(stream)).NonNull(); var t = await MemoryPackSerializer.DeserializeAsync<T>(stream);
return t; return t;
} }
catch (System.Exception e) catch (System.Exception e)
@ -72,47 +70,12 @@ namespace Flow.Launcher.Infrastructure.Storage
Log.Exception($"|BinaryStorage.Deserialize|Deserialize error for file <{FilePath}>", e); Log.Exception($"|BinaryStorage.Deserialize|Deserialize error for file <{FilePath}>", e);
return defaultData; return defaultData;
} }
finally
{
AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve;
}
} }
private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) public async ValueTask SaveAsync(T data)
{ {
Assembly ayResult = null; await using var stream = new FileStream(FilePath, FileMode.Create);
string sShortAssemblyName = args.Name.Split(',')[0]; await MemoryPackSerializer.SerializeAsync(stream, data);
Assembly[] ayAssemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly ayAssembly in ayAssemblies)
{
if (sShortAssemblyName == ayAssembly.FullName.Split(',')[0])
{
ayResult = ayAssembly;
break;
}
}
return ayResult;
}
public void Save(T data)
{
using (var stream = new FileStream(FilePath, FileMode.Create))
{
BinaryFormatter binaryFormatter = new BinaryFormatter
{
AssemblyFormat = FormatterAssemblyStyle.Simple
};
try
{
binaryFormatter.Serialize(stream, data);
}
catch (SerializationException e)
{
Log.Exception($"|BinaryStorage.Save|serialize error for file <{FilePath}>", e);
}
}
} }
} }
#pragma warning restore SYSLIB0011
} }

View file

@ -3,6 +3,7 @@ using System;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Text.Json; using System.Text.Json;
using System.Threading.Tasks;
using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.Logger;
namespace Flow.Launcher.Infrastructure.Storage namespace Flow.Launcher.Infrastructure.Storage
@ -26,6 +27,85 @@ namespace Flow.Launcher.Infrastructure.Storage
protected string DirectoryPath { get; init; } = null!; protected string DirectoryPath { get; init; } = null!;
// Let the derived class to set the file path
protected JsonStorage()
{
}
public JsonStorage(string filePath)
{
FilePath = filePath;
DirectoryPath = Path.GetDirectoryName(filePath) ?? throw new ArgumentException("Invalid file path");
Helper.ValidateDirectory(DirectoryPath);
}
public async Task<T> LoadAsync()
{
if (Data != null)
return Data;
string? serialized = null;
if (File.Exists(FilePath))
{
serialized = await File.ReadAllTextAsync(FilePath);
}
if (!string.IsNullOrEmpty(serialized))
{
try
{
Data = JsonSerializer.Deserialize<T>(serialized) ?? await LoadBackupOrDefaultAsync();
}
catch (JsonException)
{
Data = await LoadBackupOrDefaultAsync();
}
}
else
{
Data = await LoadBackupOrDefaultAsync();
}
return Data.NonNull();
}
private async ValueTask<T> LoadBackupOrDefaultAsync()
{
var backup = await TryLoadBackupAsync();
return backup ?? LoadDefault();
}
private async ValueTask<T?> TryLoadBackupAsync()
{
if (!File.Exists(BackupFilePath))
return default;
try
{
await using var source = File.OpenRead(BackupFilePath);
var data = await JsonSerializer.DeserializeAsync<T>(source) ?? default;
if (data != null)
RestoreBackup();
return data;
}
catch (JsonException)
{
return default;
}
}
private void RestoreBackup()
{
Log.Info($"|JsonStorage.Load|Failed to load settings.json, {BackupFilePath} restored successfully");
if (File.Exists(FilePath))
File.Replace(BackupFilePath, FilePath, null);
else
File.Move(BackupFilePath, FilePath);
}
public T Load() public T Load()
{ {
@ -75,18 +155,9 @@ namespace Flow.Launcher.Infrastructure.Storage
var data = JsonSerializer.Deserialize<T>(File.ReadAllText(BackupFilePath)); var data = JsonSerializer.Deserialize<T>(File.ReadAllText(BackupFilePath));
if (data != null) if (data != null)
{ RestoreBackup();
Log.Info($"|JsonStorage.Load|Failed to load settings.json, {BackupFilePath} restored successfully");
if(File.Exists(FilePath)) return data;
File.Replace(BackupFilePath, FilePath, null);
else
File.Move(BackupFilePath, FilePath);
return data;
}
return default;
} }
catch (JsonException) catch (JsonException)
{ {
@ -115,6 +186,20 @@ namespace Flow.Launcher.Infrastructure.Storage
File.WriteAllText(TempFilePath, serialized); File.WriteAllText(TempFilePath, serialized);
AtomicWriteSetting();
}
public async Task SaveAsync()
{
var tempOutput = File.OpenWrite(TempFilePath);
await JsonSerializer.SerializeAsync(tempOutput, Data,
new JsonSerializerOptions
{
WriteIndented = true
});
AtomicWriteSetting();
}
private void AtomicWriteSetting()
{
if (!File.Exists(FilePath)) if (!File.Exists(FilePath))
{ {
File.Move(TempFilePath, FilePath); File.Move(TempFilePath, FilePath);
@ -124,5 +209,6 @@ namespace Flow.Launcher.Infrastructure.Storage
File.Replace(TempFilePath, FilePath, BackupFilePath); File.Replace(TempFilePath, FilePath, BackupFilePath);
} }
} }
} }
} }

View file

@ -50,5 +50,12 @@ namespace Flow.Launcher.Plugin
(AltPressed ? ModifierKeys.Alt : ModifierKeys.None) | (AltPressed ? ModifierKeys.Alt : ModifierKeys.None) |
(WinPressed ? ModifierKeys.Windows : ModifierKeys.None); (WinPressed ? ModifierKeys.Windows : ModifierKeys.None);
} }
public static readonly SpecialKeyState Default = new () {
CtrlPressed = false,
ShiftPressed = false,
AltPressed = false,
WinPressed = false
};
} }
} }

View file

@ -12,6 +12,11 @@ namespace Flow.Launcher.Plugin
/// </summary> /// </summary>
public const string Python = "Python"; public const string Python = "Python";
/// <summary>
/// Python V2
/// </summary>
public const string PythonV2 = "Python_v2";
/// <summary> /// <summary>
/// C# /// C#
/// </summary> /// </summary>
@ -27,16 +32,31 @@ namespace Flow.Launcher.Plugin
/// </summary> /// </summary>
public const string Executable = "Executable"; public const string Executable = "Executable";
/// <summary>
/// Standard .exe
/// </summary>
public const string ExecutableV2 = "Executable_V2";
/// <summary> /// <summary>
/// TypeScript /// TypeScript
/// </summary> /// </summary>
public const string TypeScript = "TypeScript"; public const string TypeScript = "TypeScript";
/// <summary>
/// TypeScript
/// </summary>
public const string TypeScriptV2 = "TypeScript_V2";
/// <summary> /// <summary>
/// JavaScript /// JavaScript
/// </summary> /// </summary>
public const string JavaScript = "JavaScript"; public const string JavaScript = "JavaScript";
/// <summary>
/// JavaScript
/// </summary>
public const string JavaScriptV2 = "JavaScript_V2";
/// <summary> /// <summary>
/// Determines if this language is a .NET language /// Determines if this language is a .NET language
/// </summary> /// </summary>
@ -45,7 +65,7 @@ namespace Flow.Launcher.Plugin
public static bool IsDotNet(string language) public static bool IsDotNet(string language)
{ {
return language.Equals(CSharp, StringComparison.OrdinalIgnoreCase) return language.Equals(CSharp, StringComparison.OrdinalIgnoreCase)
|| language.Equals(FSharp, StringComparison.OrdinalIgnoreCase); || language.Equals(FSharp, StringComparison.OrdinalIgnoreCase);
} }
/// <summary> /// <summary>
@ -56,10 +76,15 @@ namespace Flow.Launcher.Plugin
public static bool IsAllowed(string language) public static bool IsAllowed(string language)
{ {
return IsDotNet(language) return IsDotNet(language)
|| language.Equals(Python, StringComparison.OrdinalIgnoreCase) || language.Equals(Python, StringComparison.OrdinalIgnoreCase)
|| language.Equals(Executable, StringComparison.OrdinalIgnoreCase) || language.Equals(PythonV2, StringComparison.OrdinalIgnoreCase)
|| language.Equals(TypeScript, StringComparison.OrdinalIgnoreCase) || language.Equals(Executable, StringComparison.OrdinalIgnoreCase)
|| language.Equals(JavaScript, StringComparison.OrdinalIgnoreCase); || language.Equals(TypeScript, StringComparison.OrdinalIgnoreCase)
|| language.Equals(JavaScript, StringComparison.OrdinalIgnoreCase)
|| language.Equals(ExecutableV2, StringComparison.OrdinalIgnoreCase)
|| language.Equals(TypeScriptV2, StringComparison.OrdinalIgnoreCase)
|| language.Equals(JavaScriptV2, StringComparison.OrdinalIgnoreCase);
;
} }
} }
} }

View file

@ -14,10 +14,10 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<Version>4.1.1</Version> <Version>4.2.0</Version>
<PackageVersion>4.1.1</PackageVersion> <PackageVersion>4.2.0</PackageVersion>
<AssemblyVersion>4.1.1</AssemblyVersion> <AssemblyVersion>4.2.0</AssemblyVersion>
<FileVersion>4.1.1</FileVersion> <FileVersion>4.2.0</FileVersion>
<PackageId>Flow.Launcher.Plugin</PackageId> <PackageId>Flow.Launcher.Plugin</PackageId>
<Authors>Flow-Launcher</Authors> <Authors>Flow-Launcher</Authors>
<PackageLicenseExpression>MIT</PackageLicenseExpression> <PackageLicenseExpression>MIT</PackageLicenseExpression>
@ -67,7 +67,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" /> <PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
<PackageReference Include="JetBrains.Annotations" Version="2023.2.0" /> <PackageReference Include="JetBrains.Annotations" Version="2023.3.0" />
<PackageReference Include="PropertyChanged.Fody" Version="3.4.0" /> <PackageReference Include="PropertyChanged.Fody" Version="3.4.0" />
</ItemGroup> </ItemGroup>

View file

@ -274,5 +274,22 @@ namespace Flow.Launcher.Plugin
/// Non-C# plugins should use this method /// Non-C# plugins should use this method
/// </summary> /// </summary>
public void OpenAppUri(string appUri); public void OpenAppUri(string appUri);
/// <summary>
/// Toggles Game Mode. off -> on and backwards
/// </summary>
public void ToggleGameMode();
/// <summary>
/// Switches Game Mode to given value
/// </summary>
/// <param name="value">New Game Mode status</param>
public void SetGameMode(bool value);
/// <summary>
/// Representing Game Mode status
/// </summary>
/// <returns></returns>
public bool IsGameModeOn();
} }
} }

View file

@ -1,4 +1,7 @@
using System; using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.Json.Serialization;
namespace Flow.Launcher.Plugin namespace Flow.Launcher.Plugin
{ {
@ -64,6 +67,7 @@ namespace Flow.Launcher.Plugin
/// </summary> /// </summary>
public string ActionKeyword { get; init; } public string ActionKeyword { get; init; }
[JsonIgnore]
/// <summary> /// <summary>
/// Splits <see cref="SearchTerms"/> by spaces and returns the first item. /// Splits <see cref="SearchTerms"/> by spaces and returns the first item.
/// </summary> /// </summary>
@ -72,11 +76,13 @@ namespace Flow.Launcher.Plugin
/// </remarks> /// </remarks>
public string FirstSearch => SplitSearch(0); public string FirstSearch => SplitSearch(0);
[JsonIgnore]
private string _secondToEndSearch; private string _secondToEndSearch;
/// <summary> /// <summary>
/// strings from second search (including) to last search /// strings from second search (including) to last search
/// </summary> /// </summary>
[JsonIgnore]
public string SecondToEndSearch => SearchTerms.Length > 1 ? (_secondToEndSearch ??= string.Join(' ', SearchTerms[1..])) : ""; public string SecondToEndSearch => SearchTerms.Length > 1 ? (_secondToEndSearch ??= string.Join(' ', SearchTerms[1..])) : "";
/// <summary> /// <summary>
@ -85,6 +91,7 @@ namespace Flow.Launcher.Plugin
/// <remarks> /// <remarks>
/// returns an empty string when <see cref="SearchTerms"/> does not have enough items. /// returns an empty string when <see cref="SearchTerms"/> does not have enough items.
/// </remarks> /// </remarks>
[JsonIgnore]
public string SecondSearch => SplitSearch(1); public string SecondSearch => SplitSearch(1);
/// <summary> /// <summary>
@ -93,6 +100,7 @@ namespace Flow.Launcher.Plugin
/// <remarks> /// <remarks>
/// returns an empty string when <see cref="SearchTerms"/> does not have enough items. /// returns an empty string when <see cref="SearchTerms"/> does not have enough items.
/// </remarks> /// </remarks>
[JsonIgnore]
public string ThirdSearch => SplitSearch(2); public string ThirdSearch => SplitSearch(2);
private string SplitSearch(int index) private string SplitSearch(int index)

View file

@ -49,12 +49,12 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Moq" Version="4.18.4" /> <PackageReference Include="Moq" Version="4.18.4" />
<PackageReference Include="nunit" Version="3.13.3" /> <PackageReference Include="nunit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.5.0"> <PackageReference Include="NUnit3TestAdapter" Version="4.5.0">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference> </PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.7.2" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View file

@ -53,21 +53,14 @@ namespace Flow.Launcher.Test.Plugins
public static List<JsonRPCQueryResponseModel> ResponseModelsSource = new() public static List<JsonRPCQueryResponseModel> ResponseModelsSource = new()
{ {
new() new JsonRPCQueryResponseModel(0, new List<JsonRPCResult>()),
new JsonRPCQueryResponseModel(0, new List<JsonRPCResult>
{ {
Result = new() new JsonRPCResult
},
new()
{
Result = new()
{ {
new JsonRPCResult Title = "Test1", SubTitle = "Test2"
{
Title = "Test1",
SubTitle = "Test2"
}
} }
} })
}; };
[TestCaseSource(typeof(JsonRPCPluginTest), nameof(ResponseModelsSource))] [TestCaseSource(typeof(JsonRPCPluginTest), nameof(ResponseModelsSource))]

View file

@ -52,12 +52,13 @@ namespace Flow.Launcher
{ {
_portable.PreStartCleanUpAfterPortabilityUpdate(); _portable.PreStartCleanUpAfterPortabilityUpdate();
Log.Info("|App.OnStartup|Begin Flow Launcher startup ----------------------------------------------------"); Log.Info(
"|App.OnStartup|Begin Flow Launcher startup ----------------------------------------------------");
Log.Info($"|App.OnStartup|Runtime info:{ErrorReporting.RuntimeInfo()}"); Log.Info($"|App.OnStartup|Runtime info:{ErrorReporting.RuntimeInfo()}");
RegisterAppDomainExceptions(); RegisterAppDomainExceptions();
RegisterDispatcherUnhandledException(); RegisterDispatcherUnhandledException();
ImageLoader.Initialize(); var imageLoadertask = ImageLoader.InitializeAsync();
_settingsVM = new SettingWindowViewModel(_updater, _portable); _settingsVM = new SettingWindowViewModel(_updater, _portable);
_settings = _settingsVM.Settings; _settings = _settingsVM.Settings;
@ -78,6 +79,8 @@ namespace Flow.Launcher
Http.Proxy = _settings.Proxy; Http.Proxy = _settings.Proxy;
await PluginManager.InitializePluginsAsync(API); await PluginManager.InitializePluginsAsync(API);
await imageLoadertask;
var window = new MainWindow(_settings, _mainVM); var window = new MainWindow(_settings, _mainVM);
Log.Info($"|App.OnStartup|Dependencies Info:{ErrorReporting.DependenciesInfo()}"); Log.Info($"|App.OnStartup|Dependencies Info:{ErrorReporting.DependenciesInfo()}");
@ -103,7 +106,8 @@ namespace Flow.Launcher
AutoUpdates(); AutoUpdates();
API.SaveAppAllSettings(); API.SaveAppAllSettings();
Log.Info("|App.OnStartup|End Flow Launcher startup ---------------------------------------------------- "); Log.Info(
"|App.OnStartup|End Flow Launcher startup ---------------------------------------------------- ");
}); });
} }
@ -122,7 +126,8 @@ namespace Flow.Launcher
// but if it fails (permissions, etc) then don't keep retrying // but if it fails (permissions, etc) then don't keep retrying
// this also gives the user a visual indication in the Settings widget // this also gives the user a visual indication in the Settings widget
_settings.StartFlowLauncherOnSystemStartup = false; _settings.StartFlowLauncherOnSystemStartup = false;
Notification.Show(InternationalizationManager.Instance.GetTranslation("setAutoStartFailed"), e.Message); Notification.Show(InternationalizationManager.Instance.GetTranslation("setAutoStartFailed"),
e.Message);
} }
} }
} }

View file

@ -83,7 +83,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.1" /> <PackageReference Include="CommunityToolkit.Mvvm" Version="8.2.2" />
<PackageReference Include="Fody" Version="6.5.4"> <PackageReference Include="Fody" Version="6.5.4">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
@ -95,8 +95,8 @@
<PackageReference Include="ModernWpfUI" Version="0.9.4" /> <PackageReference Include="ModernWpfUI" Version="0.9.4" />
<PackageReference Include="NHotkey.Wpf" Version="2.1.1" /> <PackageReference Include="NHotkey.Wpf" Version="2.1.1" />
<PackageReference Include="PropertyChanged.Fody" Version="3.4.0" /> <PackageReference Include="PropertyChanged.Fody" Version="3.4.0" />
<PackageReference Include="SharpVectors" Version="1.8.1" /> <PackageReference Include="SharpVectors" Version="1.8.2" />
<PackageReference Include="VirtualizingWrapPanel" Version="1.5.7" /> <PackageReference Include="VirtualizingWrapPanel" Version="1.5.8" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View file

@ -113,7 +113,7 @@
<system:String x:Key="pluginStore">Erweiterungen laden</system:String> <system:String x:Key="pluginStore">Erweiterungen laden</system:String>
<system:String x:Key="pluginStore_NewRelease">New Release</system:String> <system:String x:Key="pluginStore_NewRelease">New Release</system:String>
<system:String x:Key="pluginStore_RecentlyUpdated">Recently Updated</system:String> <system:String x:Key="pluginStore_RecentlyUpdated">Recently Updated</system:String>
<system:String x:Key="pluginStore_None">Plugins</system:String> <system:String x:Key="pluginStore_None">Erweiterungen</system:String>
<system:String x:Key="pluginStore_Installed">Installed</system:String> <system:String x:Key="pluginStore_Installed">Installed</system:String>
<system:String x:Key="refresh">Aktualisieren</system:String> <system:String x:Key="refresh">Aktualisieren</system:String>
<system:String x:Key="installbtn">Installieren</system:String> <system:String x:Key="installbtn">Installieren</system:String>
@ -173,13 +173,13 @@
<system:String x:Key="previewHotkey">Preview Hotkey</system:String> <system:String x:Key="previewHotkey">Preview Hotkey</system:String>
<system:String x:Key="previewHotkeyToolTip">Enter shortcut to show/hide preview in search window.</system:String> <system:String x:Key="previewHotkeyToolTip">Enter shortcut to show/hide preview in search window.</system:String>
<system:String x:Key="openResultModifiers">Öffnen Sie die Ergebnismodifikatoren</system:String> <system:String x:Key="openResultModifiers">Öffnen Sie die Ergebnismodifikatoren</system:String>
<system:String x:Key="openResultModifiersToolTip">Select a modifier key to open selected result via keyboard.</system:String> <system:String x:Key="openResultModifiersToolTip">Wählen Sie eine Modifikatortaste, um das ausgewählte Ergebnis über die Tastatur zu öffnen.</system:String>
<system:String x:Key="showOpenResultHotkey">Hotkey anzeigen</system:String> <system:String x:Key="showOpenResultHotkey">Hotkey anzeigen</system:String>
<system:String x:Key="showOpenResultHotkeyToolTip">Show result selection hotkey with results.</system:String> <system:String x:Key="showOpenResultHotkeyToolTip">Hotkey für die Ergebnisauswahl mit Ergebnissen anzeigen.</system:String>
<system:String x:Key="customQueryHotkey">Benutzerdefinierte Abfrage Tastenkombination</system:String> <system:String x:Key="customQueryHotkey">Benutzerdefinierte Abfrage Tastenkombination</system:String>
<system:String x:Key="customQueryShortcut">Custom Query Shortcut</system:String> <system:String x:Key="customQueryShortcut">Custom Query Shortcut</system:String>
<system:String x:Key="builtinShortcuts">Built-in Shortcut</system:String> <system:String x:Key="builtinShortcuts">Built-in Shortcut</system:String>
<system:String x:Key="customQuery">Query</system:String> <system:String x:Key="customQuery">Abfrage</system:String>
<system:String x:Key="customShortcut">Shortcut</system:String> <system:String x:Key="customShortcut">Shortcut</system:String>
<system:String x:Key="customShortcutExpansion">Expansion</system:String> <system:String x:Key="customShortcutExpansion">Expansion</system:String>
<system:String x:Key="builtinShortcutDescription">Beschreibung</system:String> <system:String x:Key="builtinShortcutDescription">Beschreibung</system:String>
@ -191,12 +191,12 @@
<system:String x:Key="deleteCustomShortcutWarning">Are you sure you want to delete shortcut: {0} with expansion {1}?</system:String> <system:String x:Key="deleteCustomShortcutWarning">Are you sure you want to delete shortcut: {0} with expansion {1}?</system:String>
<system:String x:Key="shortcut_clipboard_description">Get text from clipboard.</system:String> <system:String x:Key="shortcut_clipboard_description">Get text from clipboard.</system:String>
<system:String x:Key="shortcut_active_explorer_path">Get path from active explorer.</system:String> <system:String x:Key="shortcut_active_explorer_path">Get path from active explorer.</system:String>
<system:String x:Key="queryWindowShadowEffect">Query window shadow effect</system:String> <system:String x:Key="queryWindowShadowEffect">Schatteneffekt im Abfragefenster</system:String>
<system:String x:Key="shadowEffectCPUUsage">Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited.</system:String> <system:String x:Key="shadowEffectCPUUsage">Der Schatteneffekt beansprucht die GPU stark. Nicht empfohlen, wenn die Leistung deines Computers begrenzt ist.</system:String>
<system:String x:Key="windowWidthSize">Window Width Size</system:String> <system:String x:Key="windowWidthSize">Fenstergröße Breite</system:String>
<system:String x:Key="windowWidthSizeToolTip">You can also quickly adjust this by using Ctrl+[ and Ctrl+].</system:String> <system:String x:Key="windowWidthSizeToolTip">You can also quickly adjust this by using Ctrl+[ and Ctrl+].</system:String>
<system:String x:Key="useGlyphUI">Use Segoe Fluent Icons</system:String> <system:String x:Key="useGlyphUI">Segoe Fluent Icons verwenden</system:String>
<system:String x:Key="useGlyphUIEffect">Use Segoe Fluent Icons for query results where supported</system:String> <system:String x:Key="useGlyphUIEffect">Segoe Fluent Icons für Abfrageergebnisse verwenden, sofern unterstützt</system:String>
<system:String x:Key="flowlauncherPressHotkey">Press Key</system:String> <system:String x:Key="flowlauncherPressHotkey">Press Key</system:String>
<!-- Setting Proxy --> <!-- Setting Proxy -->
@ -226,15 +226,15 @@
<system:String x:Key="checkUpdates">Nach Aktuallisierungen Suchen</system:String> <system:String x:Key="checkUpdates">Nach Aktuallisierungen Suchen</system:String>
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String> <system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
<system:String x:Key="newVersionTips">Eine neue Version ({0}) ist vorhanden. Bitte starten Sie Flow Launcher neu.</system:String> <system:String x:Key="newVersionTips">Eine neue Version ({0}) ist vorhanden. Bitte starten Sie Flow Launcher neu.</system:String>
<system:String x:Key="checkUpdatesFailed">Check updates failed, please check your connection and proxy settings to api.github.com.</system:String> <system:String x:Key="checkUpdatesFailed">Überprüfung der Updates fehlgeschlagen. Bitte überprüfen Sie Ihre Verbindungs- und Proxy-Einstellungen zu api.github.com.</system:String>
<system:String x:Key="downloadUpdatesFailed"> <system:String x:Key="downloadUpdatesFailed">
Download updates failed, please check your connection and proxy settings to github-cloud.s3.amazonaws.com, Das Herunterladen von Updates ist fehlgeschlagen. Bitte überprüfen Sie Ihre Verbindungs- und Proxy-Einstellungen zu github-cloud.s3.amazonaws.com,
or go to https://github.com/Flow-Launcher/Flow.Launcher/releases to download updates manually. oder gehen Sie zu https://github.com/Flow-Launcher/Flow.Launcher/releases, um Updates manuell herunterzuladen.
</system:String> </system:String>
<system:String x:Key="releaseNotes">Versionshinweise</system:String> <system:String x:Key="releaseNotes">Versionshinweise</system:String>
<system:String x:Key="documentation">Usage Tips</system:String> <system:String x:Key="documentation">Verwendungshinweise</system:String>
<system:String x:Key="devtool">DevTools</system:String> <system:String x:Key="devtool">Entwicklerwerkzeuge</system:String>
<system:String x:Key="settingfolder">Setting Folder</system:String> <system:String x:Key="settingfolder">Einstellungsordner</system:String>
<system:String x:Key="logfolder">Protokoll-Verzeichnis</system:String> <system:String x:Key="logfolder">Protokoll-Verzeichnis</system:String>
<system:String x:Key="clearlogfolder">Protokolldateien leeren</system:String> <system:String x:Key="clearlogfolder">Protokolldateien leeren</system:String>
<system:String x:Key="clearlogfolderMessage">Sind Sie sicher, dass Sie alle Protokolle löschen möchten?</system:String> <system:String x:Key="clearlogfolderMessage">Sind Sie sicher, dass Sie alle Protokolle löschen möchten?</system:String>
@ -246,13 +246,13 @@
<system:String x:Key="fileManager_tips2">&quot;%f&quot; 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 &quot;Arg for File&quot; item. If the file manager does not have that function, you can use &quot;%d&quot;.</system:String> <system:String x:Key="fileManager_tips2">&quot;%f&quot; 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 &quot;Arg for File&quot; item. If the file manager does not have that function, you can use &quot;%d&quot;.</system:String>
<system:String x:Key="fileManager_name">Datei-Manager</system:String> <system:String x:Key="fileManager_name">Datei-Manager</system:String>
<system:String x:Key="fileManager_profile_name">Profilname</system:String> <system:String x:Key="fileManager_profile_name">Profilname</system:String>
<system:String x:Key="fileManager_path">File Manager Path</system:String> <system:String x:Key="fileManager_path">Dateimanager-Pfad</system:String>
<system:String x:Key="fileManager_directory_arg">Argumente für Ordner</system:String> <system:String x:Key="fileManager_directory_arg">Argumente für Ordner</system:String>
<system:String x:Key="fileManager_file_arg">Argumente für Datei</system:String> <system:String x:Key="fileManager_file_arg">Argumente für Datei</system:String>
<!-- DefaultBrowser Setting Dialog --> <!-- DefaultBrowser Setting Dialog -->
<system:String x:Key="defaultBrowserTitle">Standard-Webbrowser</system:String> <system:String x:Key="defaultBrowserTitle">Standard-Webbrowser</system:String>
<system:String x:Key="defaultBrowser_tips">The default setting follows the OS default browser setting. If specified separately, flow uses that browser.</system:String> <system:String x:Key="defaultBrowser_tips">Die Standardeinstellung verwendet die Browser-Standardeinstellung des Betriebssystems. Falls angegeben, verwendet Flow diesen Browser.</system:String>
<system:String x:Key="defaultBrowser_name">Browser</system:String> <system:String x:Key="defaultBrowser_name">Browser</system:String>
<system:String x:Key="defaultBrowser_profile_name">Browser-Name</system:String> <system:String x:Key="defaultBrowser_profile_name">Browser-Name</system:String>
<system:String x:Key="defaultBrowser_path">Browserpfad</system:String> <system:String x:Key="defaultBrowser_path">Browserpfad</system:String>
@ -262,8 +262,8 @@
<!-- Priority Setting Dialog --> <!-- Priority Setting Dialog -->
<system:String x:Key="changePriorityWindow">Priorität ändern</system:String> <system:String x:Key="changePriorityWindow">Priorität ändern</system:String>
<system:String x:Key="priority_tips">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</system:String> <system:String x:Key="priority_tips">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</system:String>
<system:String x:Key="invalidPriority">Please provide an valid integer for Priority!</system:String> <system:String x:Key="invalidPriority">Bitte eine gültige Ganzzahl angeben für die Priorität!</system:String>
<!-- Action Keyword Setting Dialog --> <!-- Action Keyword Setting Dialog -->
<system:String x:Key="oldActionKeywords">Altes Aktionsschlüsselwort</system:String> <system:String x:Key="oldActionKeywords">Altes Aktionsschlüsselwort</system:String>
@ -274,7 +274,7 @@
<system:String x:Key="newActionKeywordsCannotBeEmpty">Neues Aktionsschlüsselwort darf nicht leer sein</system:String> <system:String x:Key="newActionKeywordsCannotBeEmpty">Neues Aktionsschlüsselwort darf nicht leer sein</system:String>
<system:String x:Key="newActionKeywordsHasBeenAssigned">Aktionsschlüsselwort ist schon bei einem anderen Plugin in verwendung. Bitte stellen Sie ein anderes Aktionsschlüsselwort ein.</system:String> <system:String x:Key="newActionKeywordsHasBeenAssigned">Aktionsschlüsselwort ist schon bei einem anderen Plugin in verwendung. Bitte stellen Sie ein anderes Aktionsschlüsselwort ein.</system:String>
<system:String x:Key="success">Erfolgreich</system:String> <system:String x:Key="success">Erfolgreich</system:String>
<system:String x:Key="completedSuccessfully">Completed successfully</system:String> <system:String x:Key="completedSuccessfully">Erfolgreich abgeschlossen</system:String>
<system:String x:Key="actionkeyword_tips">Benutzen Sie * wenn Sie ein Aktionsschlüsselwort definieren wollen.</system:String> <system:String x:Key="actionkeyword_tips">Benutzen Sie * wenn Sie ein Aktionsschlüsselwort definieren wollen.</system:String>
<!-- Custom Query Hotkey Dialog --> <!-- Custom Query Hotkey Dialog -->
@ -347,10 +347,10 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
<system:String x:Key="Welcome_Page2_Text01">Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse.</system:String> <system:String x:Key="Welcome_Page2_Text01">Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse.</system:String>
<system:String x:Key="Welcome_Page2_Text02">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.</system:String> <system:String x:Key="Welcome_Page2_Text02">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.</system:String>
<system:String x:Key="Welcome_Page3_Title">Tastenkombination</system:String> <system:String x:Key="Welcome_Page3_Title">Tastenkombination</system:String>
<system:String x:Key="Welcome_Page4_Title">Action Keyword and Commands</system:String> <system:String x:Key="Welcome_Page4_Title">Aktions-Schlüsselwort und Befehle</system:String>
<system:String x:Key="Welcome_Page4_Text01">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.</system:String> <system:String x:Key="Welcome_Page4_Text01">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.</system:String>
<system:String x:Key="Welcome_Page5_Title">Let's Start Flow Launcher</system:String> <system:String x:Key="Welcome_Page5_Title">Starte Flow-Launcher</system:String>
<system:String x:Key="Welcome_Page5_Text01">Finished. Enjoy Flow Launcher. Don't forget the hotkey to start :)</system:String> <system:String x:Key="Welcome_Page5_Text01">Fertig. Genießen Sie Flow Launcher. Die Tastenkombination nicht vergessen, um Flow Launcher zu starten :)</system:String>
<!-- General Guide & Hotkey --> <!-- General Guide & Hotkey -->
@ -372,7 +372,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
<system:String x:Key="RecommendShellDesc">Shell-Befehl</system:String> <system:String x:Key="RecommendShellDesc">Shell-Befehl</system:String>
<system:String x:Key="RecommendBluetooth">s Bluetooth</system:String> <system:String x:Key="RecommendBluetooth">s Bluetooth</system:String>
<system:String x:Key="RecommendBluetoothDesc">Bluetooth in Windows-Einstellungen</system:String> <system:String x:Key="RecommendBluetoothDesc">Bluetooth in Windows-Einstellungen</system:String>
<system:String x:Key="RecommendAcronyms">sn</system:String> <system:String x:Key="RecommendAcronyms">nt</system:String>
<system:String x:Key="RecommendAcronymsDesc">Sticky Notes</system:String> <system:String x:Key="RecommendAcronymsDesc">Notizen</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -188,7 +188,7 @@
<system:String x:Key="add">Añadir</system:String> <system:String x:Key="add">Añadir</system:String>
<system:String x:Key="pleaseSelectAnItem">Por favor, seleccione un elemento</system:String> <system:String x:Key="pleaseSelectAnItem">Por favor, seleccione un elemento</system:String>
<system:String x:Key="deleteCustomHotkeyWarning">¿Está seguro que desea eliminar el atajo de teclado de consulta personalizada {0}?</system:String> <system:String x:Key="deleteCustomHotkeyWarning">¿Está seguro que desea eliminar el atajo de teclado de consulta personalizada {0}?</system:String>
<system:String x:Key="deleteCustomShortcutWarning">¿Está seguro que desea eliminar el acceso directo: {0} con la expansión {1}?</system:String> <system:String x:Key="deleteCustomShortcutWarning">¿Está seguro de que desea eliminar el acceso directo: {0} con la expansión {1}?</system:String>
<system:String x:Key="shortcut_clipboard_description">Obtiene el texto del portapapeles.</system:String> <system:String x:Key="shortcut_clipboard_description">Obtiene el texto del portapapeles.</system:String>
<system:String x:Key="shortcut_active_explorer_path">Obtiene la ruta del explorador activo.</system:String> <system:String x:Key="shortcut_active_explorer_path">Obtiene la ruta del explorador activo.</system:String>
<system:String x:Key="queryWindowShadowEffect">Efecto de sombra de la ventana de consultas</system:String> <system:String x:Key="queryWindowShadowEffect">Efecto de sombra de la ventana de consultas</system:String>
@ -237,7 +237,7 @@
<system:String x:Key="settingfolder">Carpeta de configuración</system:String> <system:String x:Key="settingfolder">Carpeta de configuración</system:String>
<system:String x:Key="logfolder">Carpeta de registros</system:String> <system:String x:Key="logfolder">Carpeta de registros</system:String>
<system:String x:Key="clearlogfolder">Eliminar registros</system:String> <system:String x:Key="clearlogfolder">Eliminar registros</system:String>
<system:String x:Key="clearlogfolderMessage">¿Está seguro que desea eliminar todos los registros?</system:String> <system:String x:Key="clearlogfolderMessage">¿Está seguro de que desea eliminar todos los registros?</system:String>
<system:String x:Key="welcomewindow">Asistente</system:String> <system:String x:Key="welcomewindow">Asistente</system:String>
<!-- FileManager Setting Dialog --> <!-- FileManager Setting Dialog -->

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<!-- MainWindow --> <!-- MainWindow -->
<system:String x:Key="registerHotkeyFailed">Failed to register hotkey &quot;{0}&quot;. The hotkey may be in use by another program. Change to a different hotkey, or exit another program.</system:String> <system:String x:Key="registerHotkeyFailed">Échec lors de l'enregistrement du raccourci : {0}</system:String>
<system:String x:Key="MessageBoxTitle">Flow Launcher</system:String> <system:String x:Key="MessageBoxTitle">Flow Launcher</system:String>
<system:String x:Key="couldnotStartCmd">Impossible de lancer {0}</system:String> <system:String x:Key="couldnotStartCmd">Impossible de lancer {0}</system:String>
<system:String x:Key="invalidFlowLauncherPluginFileFormat">Le format de fichier n'est pas un plugin Flow Launcher valide</system:String> <system:String x:Key="invalidFlowLauncherPluginFileFormat">Le format de fichier n'est pas un plugin Flow Launcher valide</system:String>
@ -28,7 +28,7 @@
<system:String x:Key="PositionResetToolTip">Rétablir la position de la fenêtre de recherche</system:String> <system:String x:Key="PositionResetToolTip">Rétablir la position de la fenêtre de recherche</system:String>
<!-- Setting General --> <!-- Setting General -->
<system:String x:Key="flowlauncher_settings">Paramètres - Flow Launcher</system:String> <system:String x:Key="flowlauncher_settings">Paramètres</system:String>
<system:String x:Key="general">Général</system:String> <system:String x:Key="general">Général</system:String>
<system:String x:Key="portableMode">Mode Portable</system:String> <system:String x:Key="portableMode">Mode Portable</system:String>
<system:String x:Key="portableModeToolTIp">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).</system:String> <system:String x:Key="portableModeToolTIp">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).</system:String>
@ -287,9 +287,9 @@
<!-- Custom Query Shortcut Dialog --> <!-- Custom Query Shortcut Dialog -->
<system:String x:Key="customeQueryShortcutTitle">Raccourci de requête personnalisée</system:String> <system:String x:Key="customeQueryShortcutTitle">Raccourci de requête personnalisée</system:String>
<system:String x:Key="customeQueryShortcutTips">Entrez un raccourci qui s'étend automatiquement à la requête spécifiée.</system:String> <system:String x:Key="customeQueryShortcutTips">Entrez un raccourci qui s'étend automatiquement à la requête spécifiée.</system:String>
<system:String x:Key="customeQueryShortcutGuide" xml:space="preserve">A shortcut is expanded when it exactly matches the query. <system:String x:Key="customeQueryShortcutGuide" xml:space="preserve">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 &quot;@&quot; 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.
</system:String> </system:String>
<system:String x:Key="duplicateShortcut">Le raccourci existe déjà, veuillez entrer un nouveau raccourci ou modifier le raccourci existant.</system:String> <system:String x:Key="duplicateShortcut">Le raccourci existe déjà, veuillez entrer un nouveau raccourci ou modifier le raccourci existant.</system:String>
<system:String x:Key="emptyShortcut">Raccourci et/ou son expansion est vide.</system:String> <system:String x:Key="emptyShortcut">Raccourci et/ou son expansion est vide.</system:String>

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<!-- MainWindow --> <!-- MainWindow -->
<system:String x:Key="registerHotkeyFailed">Failed to register hotkey &quot;{0}&quot;. The hotkey may be in use by another program. Change to a different hotkey, or exit another program.</system:String> <system:String x:Key="registerHotkeyFailed">Registrazione del tasto di scelta rapida &quot;{0}&quot; 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.</system:String>
<system:String x:Key="MessageBoxTitle">Flow Launcher</system:String> <system:String x:Key="MessageBoxTitle">Flow Launcher</system:String>
<system:String x:Key="couldnotStartCmd">Avvio fallito {0}</system:String> <system:String x:Key="couldnotStartCmd">Avvio fallito {0}</system:String>
<system:String x:Key="invalidFlowLauncherPluginFileFormat">Formato file plugin non valido</system:String> <system:String x:Key="invalidFlowLauncherPluginFileFormat">Formato file plugin non valido</system:String>
@ -17,15 +17,15 @@
<system:String x:Key="copy">Copia</system:String> <system:String x:Key="copy">Copia</system:String>
<system:String x:Key="cut">Taglia</system:String> <system:String x:Key="cut">Taglia</system:String>
<system:String x:Key="paste">Incolla</system:String> <system:String x:Key="paste">Incolla</system:String>
<system:String x:Key="undo">Undo</system:String> <system:String x:Key="undo">Annulla</system:String>
<system:String x:Key="selectAll">Select All</system:String> <system:String x:Key="selectAll">Seleziona Tutto</system:String>
<system:String x:Key="fileTitle">File</system:String> <system:String x:Key="fileTitle">File</system:String>
<system:String x:Key="folderTitle">Cartella</system:String> <system:String x:Key="folderTitle">Cartella</system:String>
<system:String x:Key="textTitle">Testo</system:String> <system:String x:Key="textTitle">Testo</system:String>
<system:String x:Key="GameMode">Modalità gioco</system:String> <system:String x:Key="GameMode">Modalità gioco</system:String>
<system:String x:Key="GameModeToolTip">Sospendere l'uso dei tasti di scelta rapida.</system:String> <system:String x:Key="GameModeToolTip">Sospendere l'uso dei tasti di scelta rapida.</system:String>
<system:String x:Key="PositionReset">Position Reset</system:String> <system:String x:Key="PositionReset">Ripristina Posizione</system:String>
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String> <system:String x:Key="PositionResetToolTip">Ripristina posizione finestra di ricerca</system:String>
<!-- Setting General --> <!-- Setting General -->
<system:String x:Key="flowlauncher_settings">Impostazioni</system:String> <system:String x:Key="flowlauncher_settings">Impostazioni</system:String>
@ -33,21 +33,21 @@
<system:String x:Key="portableMode">Modalità portatile</system:String> <system:String x:Key="portableMode">Modalità portatile</system:String>
<system:String x:Key="portableModeToolTIp">Memorizzare tutte le impostazioni e i dati dell'utente in un'unica cartella (utile se utilizzato con unità rimovibili o servizi cloud).</system:String> <system:String x:Key="portableModeToolTIp">Memorizzare tutte le impostazioni e i dati dell'utente in un'unica cartella (utile se utilizzato con unità rimovibili o servizi cloud).</system:String>
<system:String x:Key="startFlowLauncherOnSystemStartup">Avvia Wow all'avvio di Windows</system:String> <system:String x:Key="startFlowLauncherOnSystemStartup">Avvia Wow all'avvio di Windows</system:String>
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String> <system:String x:Key="setAutoStartFailed">Errore nell'impostazione del lancio all'avvio</system:String>
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Nascondi Flow Launcher quando perde il focus</system:String> <system:String x:Key="hideFlowLauncherWhenLoseFocus">Nascondi Flow Launcher quando perde il focus</system:String>
<system:String x:Key="dontPromptUpdateMsg">Non mostrare le notifiche per una nuova versione</system:String> <system:String x:Key="dontPromptUpdateMsg">Non mostrare le notifiche per una nuova versione</system:String>
<system:String x:Key="SearchWindowPosition">Search Window Position</system:String> <system:String x:Key="SearchWindowPosition">Posizione Finestra Di Ricerca</system:String>
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String> <system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Ricorda L'Ultima Posizione</system:String>
<system:String x:Key="SearchWindowScreenCursor">Monitor with Mouse Cursor</system:String> <system:String x:Key="SearchWindowScreenCursor">Monitora con il cursore del mouse</system:String>
<system:String x:Key="SearchWindowScreenFocus">Monitor with Focused Window</system:String> <system:String x:Key="SearchWindowScreenFocus">Monitora con la finestra in primo piano</system:String>
<system:String x:Key="SearchWindowScreenPrimary">Primary Monitor</system:String> <system:String x:Key="SearchWindowScreenPrimary">Monitor Principale</system:String>
<system:String x:Key="SearchWindowScreenCustom">Custom Monitor</system:String> <system:String x:Key="SearchWindowScreenCustom">Monitor Personalizzato</system:String>
<system:String x:Key="SearchWindowAlign">Search Window Position on Monitor</system:String> <system:String x:Key="SearchWindowAlign">Posizione della finestra di ricerca sul monitor</system:String>
<system:String x:Key="SearchWindowAlignCenter">Center</system:String> <system:String x:Key="SearchWindowAlignCenter">Centro</system:String>
<system:String x:Key="SearchWindowAlignCenterTop">Center Top</system:String> <system:String x:Key="SearchWindowAlignCenterTop">Centrato in alto</system:String>
<system:String x:Key="SearchWindowAlignLeftTop">Left Top</system:String> <system:String x:Key="SearchWindowAlignLeftTop">Sinistra in alto</system:String>
<system:String x:Key="SearchWindowAlignRightTop">Right Top</system:String> <system:String x:Key="SearchWindowAlignRightTop">Destra in alto</system:String>
<system:String x:Key="SearchWindowAlignCustom">Custom Position</system:String> <system:String x:Key="SearchWindowAlignCustom">Posizione personalizzata</system:String>
<system:String x:Key="language">Lingua</system:String> <system:String x:Key="language">Lingua</system:String>
<system:String x:Key="lastQueryMode">Comportamento ultima ricerca</system:String> <system:String x:Key="lastQueryMode">Comportamento ultima ricerca</system:String>
<system:String x:Key="lastQueryModeToolTip">Mostra/nasconde i risultati precedenti quando Flow Launcher viene riattivato.</system:String> <system:String x:Key="lastQueryModeToolTip">Mostra/nasconde i risultati precedenti quando Flow Launcher viene riattivato.</system:String>
@ -55,37 +55,37 @@
<system:String x:Key="LastQuerySelected">Seleziona ultima ricerca</system:String> <system:String x:Key="LastQuerySelected">Seleziona ultima ricerca</system:String>
<system:String x:Key="LastQueryEmpty">Cancella ultima ricerca</system:String> <system:String x:Key="LastQueryEmpty">Cancella ultima ricerca</system:String>
<system:String x:Key="maxShowResults">Numero massimo di risultati mostrati</system:String> <system:String x:Key="maxShowResults">Numero massimo di risultati mostrati</system:String>
<system:String x:Key="maxShowResultsToolTip">You can also quickly adjust this by using CTRL+Plus and CTRL+Minus.</system:String> <system:String x:Key="maxShowResultsToolTip">È anche possibile regolarlo rapidamente utilizzando CTRL+Più e CTRL+Meno.</system:String>
<system:String x:Key="ignoreHotkeysOnFullscreen">Ignora i tasti di scelta rapida in applicazione a schermo pieno</system:String> <system:String x:Key="ignoreHotkeysOnFullscreen">Ignora i tasti di scelta rapida in applicazione a schermo pieno</system:String>
<system:String x:Key="ignoreHotkeysOnFullscreenToolTip">Disattivare l'attivazione di Flow Launcher quando è attiva un'applicazione a schermo intero (consigliato per i giochi).</system:String> <system:String x:Key="ignoreHotkeysOnFullscreenToolTip">Disattivare l'attivazione di Flow Launcher quando è attiva un'applicazione a schermo intero (consigliato per i giochi).</system:String>
<system:String x:Key="defaultFileManager">Gestore File predefinito</system:String> <system:String x:Key="defaultFileManager">Gestore File predefinito</system:String>
<system:String x:Key="defaultFileManagerToolTip">Selezionare il Gestore file da usare all'apertura della cartella.</system:String> <system:String x:Key="defaultFileManagerToolTip">Selezionare il Gestore file da usare all'apertura della cartella.</system:String>
<system:String x:Key="defaultBrowser">Browser predefinito</system:String> <system:String x:Key="defaultBrowser">Browser predefinito</system:String>
<system:String x:Key="defaultBrowserToolTip">Impostazione per Nuova scheda, Nuova finestra, Modalità privata.</system:String> <system:String x:Key="defaultBrowserToolTip">Impostazione per Nuova scheda, Nuova finestra, Modalità privata.</system:String>
<system:String x:Key="pythonFilePath">Python Path</system:String> <system:String x:Key="pythonFilePath">Percorso di Python</system:String>
<system:String x:Key="nodeFilePath">Node.js Path</system:String> <system:String x:Key="nodeFilePath">Percorso di Node.js</system:String>
<system:String x:Key="selectNodeExecutable">Please select the Node.js executable</system:String> <system:String x:Key="selectNodeExecutable">Seleziona l'eseguibile di Node.js</system:String>
<system:String x:Key="selectPythonExecutable">Please select pythonw.exe</system:String> <system:String x:Key="selectPythonExecutable">Selezionare pythonw.exe</system:String>
<system:String x:Key="typingStartEn">Always Start Typing in English Mode</system:String> <system:String x:Key="typingStartEn">Inizia sempre a digitare in modalità inglese</system:String>
<system:String x:Key="typingStartEnTooltip">Temporarily change your input method to English mode when activating Flow.</system:String> <system:String x:Key="typingStartEnTooltip">Cambiare temporaneamente il metodo di input in modalità inglese quando si attiva Flow.</system:String>
<system:String x:Key="autoUpdates">Aggiornamento automatico</system:String> <system:String x:Key="autoUpdates">Aggiornamento automatico</system:String>
<system:String x:Key="select">Seleziona</system:String> <system:String x:Key="select">Seleziona</system:String>
<system:String x:Key="hideOnStartup">Nascondi Flow Launcher all'avvio</system:String> <system:String x:Key="hideOnStartup">Nascondi Flow Launcher all'avvio</system:String>
<system:String x:Key="hideNotifyIcon">Nascondi Icona nell'Area di Notifica</system:String> <system:String x:Key="hideNotifyIcon">Nascondi Icona nell'Area di Notifica</system:String>
<system:String x:Key="hideNotifyIconToolTip">When the icon is hidden from the tray, the Settings menu can be opened by right-clicking on the search window.</system:String> <system:String x:Key="hideNotifyIconToolTip">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.</system:String>
<system:String x:Key="querySearchPrecision">Precisione di ricerca delle query</system:String> <system:String x:Key="querySearchPrecision">Precisione di ricerca delle query</system:String>
<system:String x:Key="querySearchPrecisionToolTip">Modifica il punteggio minimo richiesto per i risultati.</system:String> <system:String x:Key="querySearchPrecisionToolTip">Modifica il punteggio minimo richiesto per i risultati.</system:String>
<system:String x:Key="ShouldUsePinyin">Dovrebbe usare il Pinyin</system:String> <system:String x:Key="ShouldUsePinyin">Dovrebbe usare il Pinyin</system:String>
<system:String x:Key="ShouldUsePinyinToolTip">Consente di utilizzare il Pinyin per la ricerca. Il Pinyin è il sistema standard di ortografia romanizzata per la traduzione del cinese.</system:String> <system:String x:Key="ShouldUsePinyinToolTip">Consente di utilizzare il Pinyin per la ricerca. Il Pinyin è il sistema standard di ortografia romanizzata per la traduzione del cinese.</system:String>
<system:String x:Key="AlwaysPreview">Always Preview</system:String> <system:String x:Key="AlwaysPreview">Mostra Sempre Anteprima</system:String>
<system:String x:Key="AlwaysPreviewToolTip">Always open preview panel when Flow activates. Press {0} to toggle preview.</system:String> <system:String x:Key="AlwaysPreviewToolTip">Apri sempre il pannello di anteprima quando Flow si attiva. Premi {0} per attivare l'anteprima.</system:String>
<system:String x:Key="shadowEffectNotAllowed">L'effetto ombra non è consentito mentre il tema corrente ha un effetto di sfocatura abilitato</system:String> <system:String x:Key="shadowEffectNotAllowed">L'effetto ombra non è consentito mentre il tema corrente ha un effetto di sfocatura abilitato</system:String>
<!-- Setting Plugin --> <!-- Setting Plugin -->
<system:String x:Key="searchplugin">Search Plugin</system:String> <system:String x:Key="searchplugin">Plugin di ricerca</system:String>
<system:String x:Key="searchpluginToolTip">Ctrl+F to search plugins</system:String> <system:String x:Key="searchpluginToolTip">Ctrl+F per cercare plugin</system:String>
<system:String x:Key="searchplugin_Noresult_Title">No results found</system:String> <system:String x:Key="searchplugin_Noresult_Title">Nessun risultato trovato</system:String>
<system:String x:Key="searchplugin_Noresult_Subtitle">Please try a different search.</system:String> <system:String x:Key="searchplugin_Noresult_Subtitle">Prova una ricerca diversa.</system:String>
<system:String x:Key="plugin">Plugin</system:String> <system:String x:Key="plugin">Plugin</system:String>
<system:String x:Key="plugins">Plugin</system:String> <system:String x:Key="plugins">Plugin</system:String>
<system:String x:Key="browserMorePlugins">Cerca altri plugins</system:String> <system:String x:Key="browserMorePlugins">Cerca altri plugins</system:String>
@ -99,7 +99,7 @@
<system:String x:Key="currentPriority">Priorità Attuale</system:String> <system:String x:Key="currentPriority">Priorità Attuale</system:String>
<system:String x:Key="newPriority">Nuova Priorità</system:String> <system:String x:Key="newPriority">Nuova Priorità</system:String>
<system:String x:Key="priority">Priorità</system:String> <system:String x:Key="priority">Priorità</system:String>
<system:String x:Key="priorityToolTip">Change Plugin Results Priority</system:String> <system:String x:Key="priorityToolTip">Priorità Dei Risultati Dei Plugin</system:String>
<system:String x:Key="pluginDirectory">Cartella Plugin</system:String> <system:String x:Key="pluginDirectory">Cartella Plugin</system:String>
<system:String x:Key="author">da</system:String> <system:String x:Key="author">da</system:String>
<system:String x:Key="plugin_init_time">Tempo di avvio:</system:String> <system:String x:Key="plugin_init_time">Tempo di avvio:</system:String>
@ -111,35 +111,35 @@
<!-- Setting Plugin Store --> <!-- Setting Plugin Store -->
<system:String x:Key="pluginStore">Negozio dei Plugin</system:String> <system:String x:Key="pluginStore">Negozio dei Plugin</system:String>
<system:String x:Key="pluginStore_NewRelease">New Release</system:String> <system:String x:Key="pluginStore_NewRelease">Nuova Versione</system:String>
<system:String x:Key="pluginStore_RecentlyUpdated">Recently Updated</system:String> <system:String x:Key="pluginStore_RecentlyUpdated">Aggiornati di recente</system:String>
<system:String x:Key="pluginStore_None">Plugin</system:String> <system:String x:Key="pluginStore_None">Plugin</system:String>
<system:String x:Key="pluginStore_Installed">Installed</system:String> <system:String x:Key="pluginStore_Installed">Installati</system:String>
<system:String x:Key="refresh">Aggiorna</system:String> <system:String x:Key="refresh">Aggiorna</system:String>
<system:String x:Key="installbtn">Installa</system:String> <system:String x:Key="installbtn">Installa</system:String>
<system:String x:Key="uninstallbtn">Disinstalla</system:String> <system:String x:Key="uninstallbtn">Disinstalla</system:String>
<system:String x:Key="updatebtn">Aggiorna</system:String> <system:String x:Key="updatebtn">Aggiorna</system:String>
<system:String x:Key="LabelInstalledToolTip">Plugin already installed</system:String> <system:String x:Key="LabelInstalledToolTip">Plugin già installato</system:String>
<system:String x:Key="LabelNew">New Version</system:String> <system:String x:Key="LabelNew">Nuova versione</system:String>
<system:String x:Key="LabelNewToolTip">This plugin has been updated within the last 7 days</system:String> <system:String x:Key="LabelNewToolTip">Questo plugin è stato aggiornato negli ultimi 7 giorni</system:String>
<system:String x:Key="LabelUpdateToolTip">New Update is Available</system:String> <system:String x:Key="LabelUpdateToolTip">Nuovo aggiornamento disponibile</system:String>
<!-- Setting Theme --> <!-- Setting Theme -->
<system:String x:Key="theme">Tema</system:String> <system:String x:Key="theme">Tema</system:String>
<system:String x:Key="appearance">Appearance</system:String> <system:String x:Key="appearance">Aspetto</system:String>
<system:String x:Key="browserMoreThemes">Sfoglia per altri temi</system:String> <system:String x:Key="browserMoreThemes">Sfoglia per altri temi</system:String>
<system:String x:Key="howToCreateTheme">Come creare un tema</system:String> <system:String x:Key="howToCreateTheme">Come creare un tema</system:String>
<system:String x:Key="hiThere">Ciao</system:String> <system:String x:Key="hiThere">Ciao</system:String>
<system:String x:Key="SampleTitleExplorer">Esplora Risorse</system:String> <system:String x:Key="SampleTitleExplorer">Esplora Risorse</system:String>
<system:String x:Key="SampleSubTitleExplorer">Search for files, folders and file contents</system:String> <system:String x:Key="SampleSubTitleExplorer">Cerca i file, le cartelle e il contenuto dei file</system:String>
<system:String x:Key="SampleTitleWebSearch">WebSearch</system:String> <system:String x:Key="SampleTitleWebSearch">WebSearch</system:String>
<system:String x:Key="SampleSubTitleWebSearch">Search the web with different search engine support</system:String> <system:String x:Key="SampleSubTitleWebSearch">Cerca sul web con diversi motori di ricerca supportati</system:String>
<system:String x:Key="SampleTitleProgram">Program</system:String> <system:String x:Key="SampleTitleProgram">Programma</system:String>
<system:String x:Key="SampleSubTitleProgram">Launch programs as admin or a different user</system:String> <system:String x:Key="SampleSubTitleProgram">Avvia programmi come amministratore o un altro utente</system:String>
<system:String x:Key="SampleTitleProcessKiller">ProcessKiller</system:String> <system:String x:Key="SampleTitleProcessKiller">ProcessKiller</system:String>
<system:String x:Key="SampleSubTitleProcessKiller">Terminate unwanted processes</system:String> <system:String x:Key="SampleSubTitleProcessKiller">Termina i processi indesiderati</system:String>
<system:String x:Key="queryBoxFont">Font campo di ricerca</system:String> <system:String x:Key="queryBoxFont">Font campo di ricerca</system:String>
<system:String x:Key="resultItemFont">Font campo risultati</system:String> <system:String x:Key="resultItemFont">Font campo risultati</system:String>
<system:String x:Key="windowMode">Modalità finestra</system:String> <system:String x:Key="windowMode">Modalità finestra</system:String>
@ -156,22 +156,22 @@
<system:String x:Key="SoundEffectTip">Riproduce un piccolo suono all'apertura della finestra di ricerca</system:String> <system:String x:Key="SoundEffectTip">Riproduce un piccolo suono all'apertura della finestra di ricerca</system:String>
<system:String x:Key="Animation">Animazione</system:String> <system:String x:Key="Animation">Animazione</system:String>
<system:String x:Key="AnimationTip">Usa l'animazione nell'interfaccia utente</system:String> <system:String x:Key="AnimationTip">Usa l'animazione nell'interfaccia utente</system:String>
<system:String x:Key="AnimationSpeed">Animation Speed</system:String> <system:String x:Key="AnimationSpeed">Velocità di animazione</system:String>
<system:String x:Key="AnimationSpeedTip">The speed of the UI animation</system:String> <system:String x:Key="AnimationSpeedTip">La velocità dell'animazione dell'interfaccia utente</system:String>
<system:String x:Key="AnimationSpeedSlow">Slow</system:String> <system:String x:Key="AnimationSpeedSlow">Lento</system:String>
<system:String x:Key="AnimationSpeedMedium">Medium</system:String> <system:String x:Key="AnimationSpeedMedium">Medio</system:String>
<system:String x:Key="AnimationSpeedFast">Fast</system:String> <system:String x:Key="AnimationSpeedFast">Veloce</system:String>
<system:String x:Key="AnimationSpeedCustom">Custom</system:String> <system:String x:Key="AnimationSpeedCustom">Personalizzato</system:String>
<system:String x:Key="Clock">Clock</system:String> <system:String x:Key="Clock">Orologio</system:String>
<system:String x:Key="Date">Date</system:String> <system:String x:Key="Date">Data</system:String>
<!-- Setting Hotkey --> <!-- Setting Hotkey -->
<system:String x:Key="hotkey">Tasti scelta rapida</system:String> <system:String x:Key="hotkey">Tasti scelta rapida</system:String>
<system:String x:Key="hotkeys">Tasti scelta rapida</system:String> <system:String x:Key="hotkeys">Tasti scelta rapida</system:String>
<system:String x:Key="flowlauncherHotkey">Tasto scelta rapida Flow Launcher</system:String> <system:String x:Key="flowlauncherHotkey">Tasto scelta rapida Flow Launcher</system:String>
<system:String x:Key="flowlauncherHotkeyToolTip">Immettere la scorciatoia per mostrare/nascondere Flow Launcher.</system:String> <system:String x:Key="flowlauncherHotkeyToolTip">Immettere la scorciatoia per mostrare/nascondere Flow Launcher.</system:String>
<system:String x:Key="previewHotkey">Preview Hotkey</system:String> <system:String x:Key="previewHotkey">Anteprima Scorciatoia</system:String>
<system:String x:Key="previewHotkeyToolTip">Enter shortcut to show/hide preview in search window.</system:String> <system:String x:Key="previewHotkeyToolTip">Inserisci la scorciatoia per mostrare/nascondere l'anteprima nella finestra di ricerca.</system:String>
<system:String x:Key="openResultModifiers">Apri modificatori di risultato</system:String> <system:String x:Key="openResultModifiers">Apri modificatori di risultato</system:String>
<system:String x:Key="openResultModifiersToolTip">Seleziona un tasto modificatore per aprire il risultato selezionato via tastiera.</system:String> <system:String x:Key="openResultModifiersToolTip">Seleziona un tasto modificatore per aprire il risultato selezionato via tastiera.</system:String>
<system:String x:Key="showOpenResultHotkey">Mostra tasto di scelta rapida</system:String> <system:String x:Key="showOpenResultHotkey">Mostra tasto di scelta rapida</system:String>
@ -180,24 +180,24 @@
<system:String x:Key="customQueryShortcut">Custom Query Shortcut</system:String> <system:String x:Key="customQueryShortcut">Custom Query Shortcut</system:String>
<system:String x:Key="builtinShortcuts">Built-in Shortcut</system:String> <system:String x:Key="builtinShortcuts">Built-in Shortcut</system:String>
<system:String x:Key="customQuery">Ricerca</system:String> <system:String x:Key="customQuery">Ricerca</system:String>
<system:String x:Key="customShortcut">Shortcut</system:String> <system:String x:Key="customShortcut">Scorciatoia</system:String>
<system:String x:Key="customShortcutExpansion">Expansion</system:String> <system:String x:Key="customShortcutExpansion">Espansione</system:String>
<system:String x:Key="builtinShortcutDescription">Descrizione</system:String> <system:String x:Key="builtinShortcutDescription">Descrizione</system:String>
<system:String x:Key="delete">Cancella</system:String> <system:String x:Key="delete">Cancella</system:String>
<system:String x:Key="edit">Modifica</system:String> <system:String x:Key="edit">Modifica</system:String>
<system:String x:Key="add">Aggiungi</system:String> <system:String x:Key="add">Aggiungi</system:String>
<system:String x:Key="pleaseSelectAnItem">Selezionare un oggetto</system:String> <system:String x:Key="pleaseSelectAnItem">Selezionare un oggetto</system:String>
<system:String x:Key="deleteCustomHotkeyWarning">Volete cancellare il tasto di scelta rapida per il plugin {0}?</system:String> <system:String x:Key="deleteCustomHotkeyWarning">Volete cancellare il tasto di scelta rapida per il plugin {0}?</system:String>
<system:String x:Key="deleteCustomShortcutWarning">Are you sure you want to delete shortcut: {0} with expansion {1}?</system:String> <system:String x:Key="deleteCustomShortcutWarning">Sei sicuro di voler eliminare la scorciatoia: {0} con espansione {1}?</system:String>
<system:String x:Key="shortcut_clipboard_description">Get text from clipboard.</system:String> <system:String x:Key="shortcut_clipboard_description">Ottieni testo dagli appunti.</system:String>
<system:String x:Key="shortcut_active_explorer_path">Get path from active explorer.</system:String> <system:String x:Key="shortcut_active_explorer_path">Ottieni il percorso dall'esplora risorse attivo.</system:String>
<system:String x:Key="queryWindowShadowEffect">Effetto ombra della finestra di ricerca</system:String> <system:String x:Key="queryWindowShadowEffect">Effetto ombra della finestra di ricerca</system:String>
<system:String x:Key="shadowEffectCPUUsage">L'effetto ombra utilizzerà in maniera sostanziale la GPU. Non consigliato se le performance del tuo computer sono limitate.</system:String> <system:String x:Key="shadowEffectCPUUsage">L'effetto ombra utilizzerà in maniera sostanziale la GPU. Non consigliato se le performance del tuo computer sono limitate.</system:String>
<system:String x:Key="windowWidthSize">Dimensione larghezza della finestra</system:String> <system:String x:Key="windowWidthSize">Dimensione larghezza della finestra</system:String>
<system:String x:Key="windowWidthSizeToolTip">You can also quickly adjust this by using Ctrl+[ and Ctrl+].</system:String> <system:String x:Key="windowWidthSizeToolTip">È anche possibile regolarlo rapidamente utilizzando CTRL+[ e CTRL+].</system:String>
<system:String x:Key="useGlyphUI">Usa Icone Segoe Fluent</system:String> <system:String x:Key="useGlyphUI">Usa Icone Segoe Fluent</system:String>
<system:String x:Key="useGlyphUIEffect">Usa Icone Segoe Fluent per risultati di ricerca dove supportate</system:String> <system:String x:Key="useGlyphUIEffect">Usa Icone Segoe Fluent per risultati di ricerca dove supportate</system:String>
<system:String x:Key="flowlauncherPressHotkey">Press Key</system:String> <system:String x:Key="flowlauncherPressHotkey">Premi tasto</system:String>
<!-- Setting Proxy --> <!-- Setting Proxy -->
<system:String x:Key="proxy">Proxy HTTP</system:String> <system:String x:Key="proxy">Proxy HTTP</system:String>
@ -221,10 +221,10 @@
<system:String x:Key="github">GitHub</system:String> <system:String x:Key="github">GitHub</system:String>
<system:String x:Key="docs">Documentazione</system:String> <system:String x:Key="docs">Documentazione</system:String>
<system:String x:Key="version">Versione</system:String> <system:String x:Key="version">Versione</system:String>
<system:String x:Key="icons">Icons</system:String> <system:String x:Key="icons">Icone</system:String>
<system:String x:Key="about_activate_times">Hai usato Flow Launcher {0} volte</system:String> <system:String x:Key="about_activate_times">Hai usato Flow Launcher {0} volte</system:String>
<system:String x:Key="checkUpdates">Cerca aggiornamenti</system:String> <system:String x:Key="checkUpdates">Cerca aggiornamenti</system:String>
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String> <system:String x:Key="BecomeASponsor">Diventa un sostenitore</system:String>
<system:String x:Key="newVersionTips">Una nuova versione {0} è disponibile, riavvia Flow Launcher per favore.</system:String> <system:String x:Key="newVersionTips">Una nuova versione {0} è disponibile, riavvia Flow Launcher per favore.</system:String>
<system:String x:Key="checkUpdatesFailed">Ricerca aggiornamenti fallita, per favore controlla la tua connessione e le eventuali impostazioni proxy per api.github.com.</system:String> <system:String x:Key="checkUpdatesFailed">Ricerca aggiornamenti fallita, per favore controlla la tua connessione e le eventuali impostazioni proxy per api.github.com.</system:String>
<system:String x:Key="downloadUpdatesFailed"> <system:String x:Key="downloadUpdatesFailed">
@ -236,8 +236,8 @@
<system:String x:Key="devtool">Strumenti per sviluppatori</system:String> <system:String x:Key="devtool">Strumenti per sviluppatori</system:String>
<system:String x:Key="settingfolder">Cartella delle impostazioni</system:String> <system:String x:Key="settingfolder">Cartella delle impostazioni</system:String>
<system:String x:Key="logfolder">Cartella dei Log</system:String> <system:String x:Key="logfolder">Cartella dei Log</system:String>
<system:String x:Key="clearlogfolder">Clear Logs</system:String> <system:String x:Key="clearlogfolder">Cancella i log</system:String>
<system:String x:Key="clearlogfolderMessage">Are you sure you want to delete all logs?</system:String> <system:String x:Key="clearlogfolderMessage">Sei sicuro di voler cancellare tutti i log?</system:String>
<system:String x:Key="welcomewindow">Wizard</system:String> <system:String x:Key="welcomewindow">Wizard</system:String>
<!-- FileManager Setting Dialog --> <!-- FileManager Setting Dialog -->
@ -279,21 +279,21 @@
<!-- Custom Query Hotkey Dialog --> <!-- Custom Query Hotkey Dialog -->
<system:String x:Key="customeQueryHotkeyTitle">Tasti scelta rapida per ricerche personalizzate</system:String> <system:String x:Key="customeQueryHotkeyTitle">Tasti scelta rapida per ricerche personalizzate</system:String>
<system:String x:Key="customeQueryHotkeyTips">Press a custom hotkey to open Flow Launcher and input the specified query automatically.</system:String> <system:String x:Key="customeQueryHotkeyTips">Premere un tasto di scelta rapida personalizzato per aprire Flow Launcher e inserire automaticamente la query specificata.</system:String>
<system:String x:Key="preview">Anteprima</system:String> <system:String x:Key="preview">Anteprima</system:String>
<system:String x:Key="hotkeyIsNotUnavailable">Tasto di scelta rapida non disponibile, per favore scegli un nuovo tasto di scelta rapida</system:String> <system:String x:Key="hotkeyIsNotUnavailable">Tasto di scelta rapida non disponibile, per favore scegli un nuovo tasto di scelta rapida</system:String>
<system:String x:Key="invalidPluginHotkey">Tasto di scelta rapida plugin non valido</system:String> <system:String x:Key="invalidPluginHotkey">Tasto di scelta rapida plugin non valido</system:String>
<system:String x:Key="update">Aggiorna</system:String> <system:String x:Key="update">Aggiorna</system:String>
<!-- Custom Query Shortcut Dialog --> <!-- Custom Query Shortcut Dialog -->
<system:String x:Key="customeQueryShortcutTitle">Custom Query Shortcut</system:String> <system:String x:Key="customeQueryShortcutTitle">Scorciatoia per ricerca personalizzata</system:String>
<system:String x:Key="customeQueryShortcutTips">Enter a shortcut that automatically expands to the specified query.</system:String> <system:String x:Key="customeQueryShortcutTips">Inserisci una scorciatoia che si espande automaticamente alla query specificata.</system:String>
<system:String x:Key="customeQueryShortcutGuide" xml:space="preserve">A shortcut is expanded when it exactly matches the query. <system:String x:Key="customeQueryShortcutGuide" xml:space="preserve">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.
</system:String> </system:String>
<system:String x:Key="duplicateShortcut">Shortcut already exists, please enter a new Shortcut or edit the existing one.</system:String> <system:String x:Key="duplicateShortcut">La scorciatoia esiste già, inserisci una nuova scorciatoia o modifica quella esistente.</system:String>
<system:String x:Key="emptyShortcut">Shortcut and/or its expansion is empty.</system:String> <system:String x:Key="emptyShortcut">La scorciatoia e/o la sua espansione sono vuote.</system:String>
<!-- Hotkey Control --> <!-- Hotkey Control -->
<system:String x:Key="hotkeyUnavailable">Tasto di scelta rapida non disponibile</system:String> <system:String x:Key="hotkeyUnavailable">Tasto di scelta rapida non disponibile</system:String>
@ -358,7 +358,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
<system:String x:Key="HotkeyLeftRightDesc">Navigazione tra le voci</system:String> <system:String x:Key="HotkeyLeftRightDesc">Navigazione tra le voci</system:String>
<system:String x:Key="HotkeyShiftEnterDesc">Apri il menu di scelta rapida</system:String> <system:String x:Key="HotkeyShiftEnterDesc">Apri il menu di scelta rapida</system:String>
<system:String x:Key="HotkeyCtrlEnterDesc">Apri cartella superiore</system:String> <system:String x:Key="HotkeyCtrlEnterDesc">Apri cartella superiore</system:String>
<system:String x:Key="HotkeyCtrlShiftEnterDesc">Run as Admin / Open Folder in Default File Manager</system:String> <system:String x:Key="HotkeyCtrlShiftEnterDesc">Esegui come Admin / Apri cartella in File Manager predefinito</system:String>
<system:String x:Key="HotkeyCtrlHDesc">Cronologia Query</system:String> <system:String x:Key="HotkeyCtrlHDesc">Cronologia Query</system:String>
<system:String x:Key="HotkeyESCDesc">Torna al risultato nel menu contestuale</system:String> <system:String x:Key="HotkeyESCDesc">Torna al risultato nel menu contestuale</system:String>
<system:String x:Key="HotkeyTabDesc">Autocompleta</system:String> <system:String x:Key="HotkeyTabDesc">Autocompleta</system:String>
@ -371,7 +371,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
<system:String x:Key="RecommendShell">&gt; ping 8.8.8.8</system:String> <system:String x:Key="RecommendShell">&gt; ping 8.8.8.8</system:String>
<system:String x:Key="RecommendShellDesc">Comando Della shell</system:String> <system:String x:Key="RecommendShellDesc">Comando Della shell</system:String>
<system:String x:Key="RecommendBluetooth">s Bluetooth</system:String> <system:String x:Key="RecommendBluetooth">s Bluetooth</system:String>
<system:String x:Key="RecommendBluetoothDesc">Bluetooth in Windows Settings</system:String> <system:String x:Key="RecommendBluetoothDesc">Bluetooth in Impostazioni Windows</system:String>
<system:String x:Key="RecommendAcronyms">sn</system:String> <system:String x:Key="RecommendAcronyms">sn</system:String>
<system:String x:Key="RecommendAcronymsDesc">Sticky Notes</system:String> <system:String x:Key="RecommendAcronymsDesc">Sticky Notes</system:String>

View file

@ -92,7 +92,7 @@
<system:String x:Key="enable">Aan</system:String> <system:String x:Key="enable">Aan</system:String>
<system:String x:Key="disable">Disable</system:String> <system:String x:Key="disable">Disable</system:String>
<system:String x:Key="actionKeywordsTitle">Actie sneltoets instelling</system:String> <system:String x:Key="actionKeywordsTitle">Actie sneltoets instelling</system:String>
<system:String x:Key="actionKeywords">Action terfwoorden</system:String> <system:String x:Key="actionKeywords">Actie sneltoets</system:String>
<system:String x:Key="currentActionKeywords">Huidige actie sneltoets</system:String> <system:String x:Key="currentActionKeywords">Huidige actie sneltoets</system:String>
<system:String x:Key="newActionKeyword">Nieuw actie sneltoets</system:String> <system:String x:Key="newActionKeyword">Nieuw actie sneltoets</system:String>
<system:String x:Key="actionKeywordsTooltip">Wijzig actie-sneltoets</system:String> <system:String x:Key="actionKeywordsTooltip">Wijzig actie-sneltoets</system:String>

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<!-- MainWindow --> <!-- MainWindow -->
<system:String x:Key="registerHotkeyFailed">Failed to register hotkey &quot;{0}&quot;. The hotkey may be in use by another program. Change to a different hotkey, or exit another program.</system:String> <system:String x:Key="registerHotkeyFailed">Falha em registrar a tecla de atalho &quot;{0}&quot;. A combinação pode estar em uso por outro programa. Mude para uma tecla de atalho diferente, ou encerre o outro programa.</system:String>
<system:String x:Key="MessageBoxTitle">Flow Launcher</system:String> <system:String x:Key="MessageBoxTitle">Flow Launcher</system:String>
<system:String x:Key="couldnotStartCmd">Não foi possível iniciar {0}</system:String> <system:String x:Key="couldnotStartCmd">Não foi possível iniciar {0}</system:String>
<system:String x:Key="invalidFlowLauncherPluginFileFormat">Formato de plugin Flow Launcher inválido</system:String> <system:String x:Key="invalidFlowLauncherPluginFileFormat">Formato de plugin Flow Launcher inválido</system:String>
@ -158,20 +158,20 @@
<system:String x:Key="AnimationTip">Utilizar Animação na Interface</system:String> <system:String x:Key="AnimationTip">Utilizar Animação na Interface</system:String>
<system:String x:Key="AnimationSpeed">Velocidade de Animação</system:String> <system:String x:Key="AnimationSpeed">Velocidade de Animação</system:String>
<system:String x:Key="AnimationSpeedTip">Altere a velocidade da animação da interface</system:String> <system:String x:Key="AnimationSpeedTip">Altere a velocidade da animação da interface</system:String>
<system:String x:Key="AnimationSpeedSlow">Slow</system:String> <system:String x:Key="AnimationSpeedSlow">Lento</system:String>
<system:String x:Key="AnimationSpeedMedium">Medium</system:String> <system:String x:Key="AnimationSpeedMedium">Médio</system:String>
<system:String x:Key="AnimationSpeedFast">Fast</system:String> <system:String x:Key="AnimationSpeedFast">Rápido</system:String>
<system:String x:Key="AnimationSpeedCustom">Custom</system:String> <system:String x:Key="AnimationSpeedCustom">Personalizado</system:String>
<system:String x:Key="Clock">Clock</system:String> <system:String x:Key="Clock">Relógio</system:String>
<system:String x:Key="Date">Date</system:String> <system:String x:Key="Date">Data</system:String>
<!-- Setting Hotkey --> <!-- Setting Hotkey -->
<system:String x:Key="hotkey">Atalho</system:String> <system:String x:Key="hotkey">Atalho</system:String>
<system:String x:Key="hotkeys">Atalho</system:String> <system:String x:Key="hotkeys">Atalho</system:String>
<system:String x:Key="flowlauncherHotkey">Atalho do Flow Launcher</system:String> <system:String x:Key="flowlauncherHotkey">Atalho do Flow Launcher</system:String>
<system:String x:Key="flowlauncherHotkeyToolTip">Digite o atalho para exibir/ocultar o Flow Launcher.</system:String> <system:String x:Key="flowlauncherHotkeyToolTip">Digite o atalho para exibir/ocultar o Flow Launcher.</system:String>
<system:String x:Key="previewHotkey">Preview Hotkey</system:String> <system:String x:Key="previewHotkey">Atalho de pré-visualização</system:String>
<system:String x:Key="previewHotkeyToolTip">Enter shortcut to show/hide preview in search window.</system:String> <system:String x:Key="previewHotkeyToolTip">Digite o atalho para exibir/ocultar a pré-visualização na janela de pesquisa.</system:String>
<system:String x:Key="openResultModifiers">Modificadores de resultado aberto</system:String> <system:String x:Key="openResultModifiers">Modificadores de resultado aberto</system:String>
<system:String x:Key="openResultModifiersToolTip">Selecione uma tecla modificadora para abrir o resultar selecionado pelo teclado.</system:String> <system:String x:Key="openResultModifiersToolTip">Selecione uma tecla modificadora para abrir o resultar selecionado pelo teclado.</system:String>
<system:String x:Key="showOpenResultHotkey">Mostrar tecla de atalho</system:String> <system:String x:Key="showOpenResultHotkey">Mostrar tecla de atalho</system:String>
@ -181,23 +181,23 @@
<system:String x:Key="builtinShortcuts">Built-in Shortcut</system:String> <system:String x:Key="builtinShortcuts">Built-in Shortcut</system:String>
<system:String x:Key="customQuery">Consulta</system:String> <system:String x:Key="customQuery">Consulta</system:String>
<system:String x:Key="customShortcut">Atalho</system:String> <system:String x:Key="customShortcut">Atalho</system:String>
<system:String x:Key="customShortcutExpansion">Expansion</system:String> <system:String x:Key="customShortcutExpansion">Expansão</system:String>
<system:String x:Key="builtinShortcutDescription">Descrição</system:String> <system:String x:Key="builtinShortcutDescription">Descrição</system:String>
<system:String x:Key="delete">Apagar</system:String> <system:String x:Key="delete">Apagar</system:String>
<system:String x:Key="edit">Editar</system:String> <system:String x:Key="edit">Editar</system:String>
<system:String x:Key="add">Adicionar</system:String> <system:String x:Key="add">Adicionar</system:String>
<system:String x:Key="pleaseSelectAnItem">Por favor selecione um item</system:String> <system:String x:Key="pleaseSelectAnItem">Por favor selecione um item</system:String>
<system:String x:Key="deleteCustomHotkeyWarning">Tem cereza de que deseja deletar o atalho {0} do plugin?</system:String> <system:String x:Key="deleteCustomHotkeyWarning">Tem cereza de que deseja deletar o atalho {0} do plugin?</system:String>
<system:String x:Key="deleteCustomShortcutWarning">Are you sure you want to delete shortcut: {0} with expansion {1}?</system:String> <system:String x:Key="deleteCustomShortcutWarning">Tem certeza que deseja excluir o atalho: {0} com expansão {1}?</system:String>
<system:String x:Key="shortcut_clipboard_description">Get text from clipboard.</system:String> <system:String x:Key="shortcut_clipboard_description">Exibe o texto da área de transferência.</system:String>
<system:String x:Key="shortcut_active_explorer_path">Get path from active explorer.</system:String> <system:String x:Key="shortcut_active_explorer_path">Exibe o caminho do explorador ativo.</system:String>
<system:String x:Key="queryWindowShadowEffect">Efeito de sombra da janela de consulta</system:String> <system:String x:Key="queryWindowShadowEffect">Efeito de sombra da janela de consulta</system:String>
<system:String x:Key="shadowEffectCPUUsage">Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited.</system:String> <system:String x:Key="shadowEffectCPUUsage">O efeito de sombra tem um uso substancial da GPU. Não recomendado se o desempenho do seu computador é limitado.</system:String>
<system:String x:Key="windowWidthSize">Largura da janela</system:String> <system:String x:Key="windowWidthSize">Largura da janela</system:String>
<system:String x:Key="windowWidthSizeToolTip">You can also quickly adjust this by using Ctrl+[ and Ctrl+].</system:String> <system:String x:Key="windowWidthSizeToolTip">Você também pode ajustar isso rapidamente usando Ctrl+[ e Ctrl+].</system:String>
<system:String x:Key="useGlyphUI">Usar Segoe Fluent Icons</system:String> <system:String x:Key="useGlyphUI">Usar Segoe Fluent Icons</system:String>
<system:String x:Key="useGlyphUIEffect">Usar Segoe Fluent Icons para resultados da consulta quando suportado</system:String> <system:String x:Key="useGlyphUIEffect">Usar Segoe Fluent Icons para resultados da consulta quando suportado</system:String>
<system:String x:Key="flowlauncherPressHotkey">Press Key</system:String> <system:String x:Key="flowlauncherPressHotkey">Apertar Tecla</system:String>
<!-- Setting Proxy --> <!-- Setting Proxy -->
<system:String x:Key="proxy">Proxy HTTP</system:String> <system:String x:Key="proxy">Proxy HTTP</system:String>
@ -224,7 +224,7 @@
<system:String x:Key="icons">Ícones</system:String> <system:String x:Key="icons">Ícones</system:String>
<system:String x:Key="about_activate_times">Você ativou o Flow Launcher {0} vezes</system:String> <system:String x:Key="about_activate_times">Você ativou o Flow Launcher {0} vezes</system:String>
<system:String x:Key="checkUpdates">Procurar atualizações</system:String> <system:String x:Key="checkUpdates">Procurar atualizações</system:String>
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String> <system:String x:Key="BecomeASponsor">Torne-se um Sponsor</system:String>
<system:String x:Key="newVersionTips">A nova versão {0} está disponível, por favor reinicie o Flow Launcher.</system:String> <system:String x:Key="newVersionTips">A nova versão {0} está disponível, por favor reinicie o Flow Launcher.</system:String>
<system:String x:Key="checkUpdatesFailed">Falha ao procurar atualizações, confira sua conexão e configuração de proxy para api.github.com.</system:String> <system:String x:Key="checkUpdatesFailed">Falha ao procurar atualizações, confira sua conexão e configuração de proxy para api.github.com.</system:String>
<system:String x:Key="downloadUpdatesFailed"> <system:String x:Key="downloadUpdatesFailed">
@ -234,36 +234,36 @@
<system:String x:Key="releaseNotes">Notas de Versão:</system:String> <system:String x:Key="releaseNotes">Notas de Versão:</system:String>
<system:String x:Key="documentation">Dicas de Uso</system:String> <system:String x:Key="documentation">Dicas de Uso</system:String>
<system:String x:Key="devtool">Ferramentas de Desenvolvedor</system:String> <system:String x:Key="devtool">Ferramentas de Desenvolvedor</system:String>
<system:String x:Key="settingfolder">Setting Folder</system:String> <system:String x:Key="settingfolder">Pasta de configuração</system:String>
<system:String x:Key="logfolder">Log Folder</system:String> <system:String x:Key="logfolder">Pasta de Registro</system:String>
<system:String x:Key="clearlogfolder">Clear Logs</system:String> <system:String x:Key="clearlogfolder">Limpar Registros</system:String>
<system:String x:Key="clearlogfolderMessage">Are you sure you want to delete all logs?</system:String> <system:String x:Key="clearlogfolderMessage">Tem certeza que quer excluir todos os registros?</system:String>
<system:String x:Key="welcomewindow">Assistente</system:String> <system:String x:Key="welcomewindow">Assistente</system:String>
<!-- FileManager Setting Dialog --> <!-- FileManager Setting Dialog -->
<system:String x:Key="fileManagerWindow">Select File Manager</system:String> <system:String x:Key="fileManagerWindow">Selecione o Gerenciador de Arquivos</system:String>
<system:String x:Key="fileManager_tips">Please specify the file location of the file manager you using and add arguments if necessary. The default arguments are &quot;%d&quot;, and a path is entered at that location. For example, If a command is required such as &quot;totalcmd.exe /A c:\windows&quot;, argument is /A &quot;%d&quot;.</system:String> <system:String x:Key="fileManager_tips">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 &quot;%d&quot;, e um caminho é digitado naquela localização. Por exemplo, se um comando é necessário tal qual &quot;totalcmd.exe /A c:\windows&quot;, o argumento é /A &quot;%d&quot;.</system:String>
<system:String x:Key="fileManager_tips2">&quot;%f&quot; 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 &quot;Arg for File&quot; item. If the file manager does not have that function, you can use &quot;%d&quot;.</system:String> <system:String x:Key="fileManager_tips2">&quot;%f&quot; é 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 &quot;Arg para Arquivo&quot;. Se o gerenciador de arquivos não tem essa função, você pode usar &quot;%d&quot;.</system:String>
<system:String x:Key="fileManager_name">Gerenciador de Arquivos</system:String> <system:String x:Key="fileManager_name">Gerenciador de Arquivos</system:String>
<system:String x:Key="fileManager_profile_name">Profile Name</system:String> <system:String x:Key="fileManager_profile_name">Nome do Perfil</system:String>
<system:String x:Key="fileManager_path">File Manager Path</system:String> <system:String x:Key="fileManager_path">Caminho do Gerenciador de Arquivos</system:String>
<system:String x:Key="fileManager_directory_arg">Arg For Folder</system:String> <system:String x:Key="fileManager_directory_arg">Arg para Pasta</system:String>
<system:String x:Key="fileManager_file_arg">Arg For File</system:String> <system:String x:Key="fileManager_file_arg">Arg para Arquivo</system:String>
<!-- DefaultBrowser Setting Dialog --> <!-- DefaultBrowser Setting Dialog -->
<system:String x:Key="defaultBrowserTitle">Navegador da Web Padrão</system:String> <system:String x:Key="defaultBrowserTitle">Navegador da Web Padrão</system:String>
<system:String x:Key="defaultBrowser_tips">The default setting follows the OS default browser setting. If specified separately, flow uses that browser.</system:String> <system:String x:Key="defaultBrowser_tips">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.</system:String>
<system:String x:Key="defaultBrowser_name">Navegador</system:String> <system:String x:Key="defaultBrowser_name">Navegador</system:String>
<system:String x:Key="defaultBrowser_profile_name">Nome do Navegador</system:String> <system:String x:Key="defaultBrowser_profile_name">Nome do Navegador</system:String>
<system:String x:Key="defaultBrowser_path">Browser Path</system:String> <system:String x:Key="defaultBrowser_path">Caminho do Navegador</system:String>
<system:String x:Key="defaultBrowser_newWindow">Nova Janela</system:String> <system:String x:Key="defaultBrowser_newWindow">Nova Janela</system:String>
<system:String x:Key="defaultBrowser_newTab">Nova Aba</system:String> <system:String x:Key="defaultBrowser_newTab">Nova Aba</system:String>
<system:String x:Key="defaultBrowser_parameter">Private Mode</system:String> <system:String x:Key="defaultBrowser_parameter">Modo Privado</system:String>
<!-- Priority Setting Dialog --> <!-- Priority Setting Dialog -->
<system:String x:Key="changePriorityWindow">Alterar Prioridade</system:String> <system:String x:Key="changePriorityWindow">Alterar Prioridade</system:String>
<system:String x:Key="priority_tips">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</system:String> <system:String x:Key="priority_tips">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</system:String>
<system:String x:Key="invalidPriority">Please provide an valid integer for Priority!</system:String> <system:String x:Key="invalidPriority">Por favor, forneça um inteiro válido em Prioridade!</system:String>
<!-- Action Keyword Setting Dialog --> <!-- Action Keyword Setting Dialog -->
<system:String x:Key="oldActionKeywords">Antiga palavra-chave da ação</system:String> <system:String x:Key="oldActionKeywords">Antiga palavra-chave da ação</system:String>
@ -279,21 +279,21 @@
<!-- Custom Query Hotkey Dialog --> <!-- Custom Query Hotkey Dialog -->
<system:String x:Key="customeQueryHotkeyTitle">Atalho de Consulta Personalizada</system:String> <system:String x:Key="customeQueryHotkeyTitle">Atalho de Consulta Personalizada</system:String>
<system:String x:Key="customeQueryHotkeyTips">Press a custom hotkey to open Flow Launcher and input the specified query automatically.</system:String> <system:String x:Key="customeQueryHotkeyTips">Aperte uma tecla de atalho personalizada para abrir o Flow Launcher e insira a pesquisa especificada automaticamente.</system:String>
<system:String x:Key="preview">Prévia</system:String> <system:String x:Key="preview">Prévia</system:String>
<system:String x:Key="hotkeyIsNotUnavailable">Atalho indisponível, escolha outro</system:String> <system:String x:Key="hotkeyIsNotUnavailable">Atalho indisponível, escolha outro</system:String>
<system:String x:Key="invalidPluginHotkey">Atalho de plugin inválido</system:String> <system:String x:Key="invalidPluginHotkey">Atalho de plugin inválido</system:String>
<system:String x:Key="update">Atualizar</system:String> <system:String x:Key="update">Atualizar</system:String>
<!-- Custom Query Shortcut Dialog --> <!-- Custom Query Shortcut Dialog -->
<system:String x:Key="customeQueryShortcutTitle">Custom Query Shortcut</system:String> <system:String x:Key="customeQueryShortcutTitle">Atalho Personalidado de Pesquisa</system:String>
<system:String x:Key="customeQueryShortcutTips">Enter a shortcut that automatically expands to the specified query.</system:String> <system:String x:Key="customeQueryShortcutTips">Introduza um atalho que expanda automaticamente para a pesquisa especificada.</system:String>
<system:String x:Key="customeQueryShortcutGuide" xml:space="preserve">A shortcut is expanded when it exactly matches the query. <system:String x:Key="customeQueryShortcutGuide" xml:space="preserve">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. If you add an '@' prefix while inputting a shortcut, it matches any position in the query. Builtin shortcuts match any position in a query.
</system:String> </system:String>
<system:String x:Key="duplicateShortcut">Shortcut already exists, please enter a new Shortcut or edit the existing one.</system:String> <system:String x:Key="duplicateShortcut">O atalho já existe, por favor, digite um novo atalho ou edite o existente.</system:String>
<system:String x:Key="emptyShortcut">Shortcut and/or its expansion is empty.</system:String> <system:String x:Key="emptyShortcut">Atalho e/ou sua expansão está vazia.</system:String>
<!-- Hotkey Control --> <!-- Hotkey Control -->
<system:String x:Key="hotkeyUnavailable">Atalho indisponível</system:String> <system:String x:Key="hotkeyUnavailable">Atalho indisponível</system:String>
@ -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. 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} Please manually move your profile data folder from {0} to {1}
</system:String> </system:String>
<system:String x:Key="update_flowlauncher_new_update">New Update</system:String> <system:String x:Key="update_flowlauncher_new_update">Nova Atualização</system:String>
<system:String x:Key="update_flowlauncher_update_new_version_available">A nova versão {0} do Flow Launcher agora está disponível</system:String> <system:String x:Key="update_flowlauncher_update_new_version_available">A nova versão {0} do Flow Launcher agora está disponível</system:String>
<system:String x:Key="update_flowlauncher_update_error">Ocorreu um erro ao tentar instalar atualizações do progama</system:String> <system:String x:Key="update_flowlauncher_update_error">Ocorreu um erro ao tentar instalar atualizações do progama</system:String>
<system:String x:Key="update_flowlauncher_update">Atualizar</system:String> <system:String x:Key="update_flowlauncher_update">Atualizar</system:String>
<system:String x:Key="update_flowlauncher_update_cancel">Cancelar</system:String> <system:String x:Key="update_flowlauncher_update_cancel">Cancelar</system:String>
<system:String x:Key="update_flowlauncher_fail">Falha ao Atualizar</system:String> <system:String x:Key="update_flowlauncher_fail">Falha ao Atualizar</system:String>
<system:String x:Key="update_flowlauncher_check_connection">Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com.</system:String> <system:String x:Key="update_flowlauncher_check_connection">Verifique sua conexão e tente atualizar as configurações de proxy para github-cloud.s3.amazonaws.com.</system:String>
<system:String x:Key="update_flowlauncher_update_restart_flowlauncher_tip">Essa atualização reiniciará o Flow Launcher</system:String> <system:String x:Key="update_flowlauncher_update_restart_flowlauncher_tip">Essa atualização reiniciará o Flow Launcher</system:String>
<system:String x:Key="update_flowlauncher_update_update_files">Os seguintes arquivos serão atualizados</system:String> <system:String x:Key="update_flowlauncher_update_update_files">Os seguintes arquivos serão atualizados</system:String>
<system:String x:Key="update_flowlauncher_update_files">Atualizar arquivos</system:String> <system:String x:Key="update_flowlauncher_update_files">Atualizar arquivos</system:String>
@ -341,15 +341,15 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
<!-- Welcome Window --> <!-- Welcome Window -->
<system:String x:Key="Skip">Pular</system:String> <system:String x:Key="Skip">Pular</system:String>
<system:String x:Key="Welcome_Page1_Title">Bem-vindo ao Flow Launcher</system:String> <system:String x:Key="Welcome_Page1_Title">Bem-vindo ao Flow Launcher</system:String>
<system:String x:Key="Welcome_Page1_Text01">Hello, this is the first time you are running Flow Launcher!</system:String> <system:String x:Key="Welcome_Page1_Text01">Olá, está é a primeira vez que você executa o Flow Launcher!</system:String>
<system:String x:Key="Welcome_Page1_Text02">Before starting, this wizard will assist in setting up Flow Launcher. You can skip this if you wish. Please choose a language</system:String> <system:String x:Key="Welcome_Page1_Text02">Antes de começar, este assistente ajudará a configurar o Flow Launcher. Você pode pular essa etapa se quiser. Por favor, escolha um idioma</system:String>
<system:String x:Key="Welcome_Page2_Title">Search and run all files and applications on your PC</system:String> <system:String x:Key="Welcome_Page2_Title">Pesquise e execute todos os arquivos e programas no seu PC</system:String>
<system:String x:Key="Welcome_Page2_Text01">Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse.</system:String> <system:String x:Key="Welcome_Page2_Text01">Pesquise tudo de programas, arquivos, favoritos, YouTube, Twitter e mais. Tudo isso do conforto do seu teclado sem precisar tocar o mouse.</system:String>
<system:String x:Key="Welcome_Page2_Text02">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.</system:String> <system:String x:Key="Welcome_Page2_Text02">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.</system:String>
<system:String x:Key="Welcome_Page3_Title">Teclas de Atalho</system:String> <system:String x:Key="Welcome_Page3_Title">Teclas de Atalho</system:String>
<system:String x:Key="Welcome_Page4_Title">Action Keyword and Commands</system:String> <system:String x:Key="Welcome_Page4_Title">Palavras-Chave de Ação e Comandos</system:String>
<system:String x:Key="Welcome_Page4_Text01">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.</system:String> <system:String x:Key="Welcome_Page4_Text01">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.</system:String>
<system:String x:Key="Welcome_Page5_Title">Let's Start Flow Launcher</system:String> <system:String x:Key="Welcome_Page5_Title">Vamos iniciar o Flow Launcher</system:String>
<system:String x:Key="Welcome_Page5_Text01">Finalizado. Aproveite o Flow Launcher. Não esqueça o atalho para iniciar :)</system:String> <system:String x:Key="Welcome_Page5_Text01">Finalizado. Aproveite o Flow Launcher. Não esqueça o atalho para iniciar :)</system:String>
<!-- General Guide & Hotkey --> <!-- General Guide & Hotkey -->
@ -357,10 +357,10 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
<system:String x:Key="HotkeyUpDownDesc">Voltar / Menu de Contexto</system:String> <system:String x:Key="HotkeyUpDownDesc">Voltar / Menu de Contexto</system:String>
<system:String x:Key="HotkeyLeftRightDesc">Item de Navegação</system:String> <system:String x:Key="HotkeyLeftRightDesc">Item de Navegação</system:String>
<system:String x:Key="HotkeyShiftEnterDesc">Abrir Menu de Contexto</system:String> <system:String x:Key="HotkeyShiftEnterDesc">Abrir Menu de Contexto</system:String>
<system:String x:Key="HotkeyCtrlEnterDesc">Open Containing Folder</system:String> <system:String x:Key="HotkeyCtrlEnterDesc">Abrir a pasta correspondente</system:String>
<system:String x:Key="HotkeyCtrlShiftEnterDesc">Run as Admin / Open Folder in Default File Manager</system:String> <system:String x:Key="HotkeyCtrlShiftEnterDesc">Executar como administrador / Abrir pasta no gerenciador de arquivos padrão</system:String>
<system:String x:Key="HotkeyCtrlHDesc">Histórico de Pesquisas</system:String> <system:String x:Key="HotkeyCtrlHDesc">Histórico de Pesquisas</system:String>
<system:String x:Key="HotkeyESCDesc">Back to Result in Context Menu</system:String> <system:String x:Key="HotkeyESCDesc">Voltar ao resultado no menu de contexto</system:String>
<system:String x:Key="HotkeyTabDesc">Autocompletar</system:String> <system:String x:Key="HotkeyTabDesc">Autocompletar</system:String>
<system:String x:Key="HotkeyRunDesc">Abrir / Executar Item Selecionado</system:String> <system:String x:Key="HotkeyRunDesc">Abrir / Executar Item Selecionado</system:String>
<system:String x:Key="HotkeyCtrlIDesc">Abrir Janela de Configurações</system:String> <system:String x:Key="HotkeyCtrlIDesc">Abrir Janela de Configurações</system:String>
@ -371,7 +371,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
<system:String x:Key="RecommendShell">&gt; ping 8.8.8.8</system:String> <system:String x:Key="RecommendShell">&gt; ping 8.8.8.8</system:String>
<system:String x:Key="RecommendShellDesc">Comando de Console</system:String> <system:String x:Key="RecommendShellDesc">Comando de Console</system:String>
<system:String x:Key="RecommendBluetooth">s Bluetooth</system:String> <system:String x:Key="RecommendBluetooth">s Bluetooth</system:String>
<system:String x:Key="RecommendBluetoothDesc">Bluetooth in Windows Settings</system:String> <system:String x:Key="RecommendBluetoothDesc">Bluetooth nas Configurações do Windows</system:String>
<system:String x:Key="RecommendAcronyms">sn</system:String> <system:String x:Key="RecommendAcronyms">sn</system:String>
<system:String x:Key="RecommendAcronymsDesc">Notas Autoadesivas</system:String> <system:String x:Key="RecommendAcronymsDesc">Notas Autoadesivas</system:String>

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<!-- MainWindow --> <!-- MainWindow -->
<system:String x:Key="registerHotkeyFailed">Failed to register hotkey &quot;{0}&quot;. The hotkey may be in use by another program. Change to a different hotkey, or exit another program.</system:String> <system:String x:Key="registerHotkeyFailed">Не вдалося зареєструвати гарячу клавішу &quot;{0}&quot;. Можливо, гаряча клавіша використовується іншою програмою. Змініть її на іншу гарячу клавішу або вийдіть з програми, де вона використовується.</system:String>
<system:String x:Key="MessageBoxTitle">Flow Launcher</system:String> <system:String x:Key="MessageBoxTitle">Flow Launcher</system:String>
<system:String x:Key="couldnotStartCmd">Не вдалося запустити {0}</system:String> <system:String x:Key="couldnotStartCmd">Не вдалося запустити {0}</system:String>
<system:String x:Key="invalidFlowLauncherPluginFileFormat">Невірний формат файлу плагіна Flow Launcher</system:String> <system:String x:Key="invalidFlowLauncherPluginFileFormat">Невірний формат файлу плагіна Flow Launcher</system:String>
@ -17,15 +17,15 @@
<system:String x:Key="copy">Копіювати</system:String> <system:String x:Key="copy">Копіювати</system:String>
<system:String x:Key="cut">Вирізати</system:String> <system:String x:Key="cut">Вирізати</system:String>
<system:String x:Key="paste">Вставити</system:String> <system:String x:Key="paste">Вставити</system:String>
<system:String x:Key="undo">Undo</system:String> <system:String x:Key="undo">Скасувати</system:String>
<system:String x:Key="selectAll">Select All</system:String> <system:String x:Key="selectAll">Обрати все</system:String>
<system:String x:Key="fileTitle">Файл</system:String> <system:String x:Key="fileTitle">Файл</system:String>
<system:String x:Key="folderTitle">Тека</system:String> <system:String x:Key="folderTitle">Тека</system:String>
<system:String x:Key="textTitle">Текст</system:String> <system:String x:Key="textTitle">Текст</system:String>
<system:String x:Key="GameMode">Режим гри</system:String> <system:String x:Key="GameMode">Режим гри</system:String>
<system:String x:Key="GameModeToolTip">Призупинити використання гарячих клавіш.</system:String> <system:String x:Key="GameModeToolTip">Призупинити використання гарячих клавіш.</system:String>
<system:String x:Key="PositionReset">Position Reset</system:String> <system:String x:Key="PositionReset">Скидання позиції</system:String>
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String> <system:String x:Key="PositionResetToolTip">Скинути положення вікна пошуку</system:String>
<!-- Setting General --> <!-- Setting General -->
<system:String x:Key="flowlauncher_settings">Налаштування</system:String> <system:String x:Key="flowlauncher_settings">Налаштування</system:String>
@ -33,21 +33,21 @@
<system:String x:Key="portableMode">Портативний режим</system:String> <system:String x:Key="portableMode">Портативний режим</system:String>
<system:String x:Key="portableModeToolTIp">Зберігати всі налаштування і дані користувача в одній теці (буде корисно при видаленні дисків або хмарних сервісах).</system:String> <system:String x:Key="portableModeToolTIp">Зберігати всі налаштування і дані користувача в одній теці (буде корисно при видаленні дисків або хмарних сервісах).</system:String>
<system:String x:Key="startFlowLauncherOnSystemStartup">Запускати Flow Launcher при запуску системи</system:String> <system:String x:Key="startFlowLauncherOnSystemStartup">Запускати Flow Launcher при запуску системи</system:String>
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String> <system:String x:Key="setAutoStartFailed">Помилка запуску налаштування під час запуску</system:String>
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Сховати Flow Launcher, якщо втрачено фокус</system:String> <system:String x:Key="hideFlowLauncherWhenLoseFocus">Сховати Flow Launcher, якщо втрачено фокус</system:String>
<system:String x:Key="dontPromptUpdateMsg">Не повідомляти про доступні нові версії</system:String> <system:String x:Key="dontPromptUpdateMsg">Не повідомляти про доступні нові версії</system:String>
<system:String x:Key="SearchWindowPosition">Search Window Position</system:String> <system:String x:Key="SearchWindowPosition">Положення вікна пошуку</system:String>
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String> <system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Пам'ятати останню позицію</system:String>
<system:String x:Key="SearchWindowScreenCursor">Monitor with Mouse Cursor</system:String> <system:String x:Key="SearchWindowScreenCursor">Монітор з курсором миші</system:String>
<system:String x:Key="SearchWindowScreenFocus">Monitor with Focused Window</system:String> <system:String x:Key="SearchWindowScreenFocus">Монітор зі сфокусованим вікном</system:String>
<system:String x:Key="SearchWindowScreenPrimary">Primary Monitor</system:String> <system:String x:Key="SearchWindowScreenPrimary">Основний монітор</system:String>
<system:String x:Key="SearchWindowScreenCustom">Custom Monitor</system:String> <system:String x:Key="SearchWindowScreenCustom">Власний монітор</system:String>
<system:String x:Key="SearchWindowAlign">Search Window Position on Monitor</system:String> <system:String x:Key="SearchWindowAlign">Положення вікна пошуку на моніторі</system:String>
<system:String x:Key="SearchWindowAlignCenter">Center</system:String> <system:String x:Key="SearchWindowAlignCenter">Центр</system:String>
<system:String x:Key="SearchWindowAlignCenterTop">Center Top</system:String> <system:String x:Key="SearchWindowAlignCenterTop">Вгорі по центру</system:String>
<system:String x:Key="SearchWindowAlignLeftTop">Left Top</system:String> <system:String x:Key="SearchWindowAlignLeftTop">Зліва вгорі</system:String>
<system:String x:Key="SearchWindowAlignRightTop">Right Top</system:String> <system:String x:Key="SearchWindowAlignRightTop">Праворуч вгорі</system:String>
<system:String x:Key="SearchWindowAlignCustom">Custom Position</system:String> <system:String x:Key="SearchWindowAlignCustom">Власна позиція</system:String>
<system:String x:Key="language">Мова</system:String> <system:String x:Key="language">Мова</system:String>
<system:String x:Key="lastQueryMode">Останній стиль запиту</system:String> <system:String x:Key="lastQueryMode">Останній стиль запиту</system:String>
<system:String x:Key="lastQueryModeToolTip">Показати/приховати попередні результати коли реактивований Flow Launcher знову.</system:String> <system:String x:Key="lastQueryModeToolTip">Показати/приховати попередні результати коли реактивований Flow Launcher знову.</system:String>
@ -55,42 +55,42 @@
<system:String x:Key="LastQuerySelected">Вибрати останній запит</system:String> <system:String x:Key="LastQuerySelected">Вибрати останній запит</system:String>
<system:String x:Key="LastQueryEmpty">Очистити останній запит</system:String> <system:String x:Key="LastQueryEmpty">Очистити останній запит</system:String>
<system:String x:Key="maxShowResults">Максимальна кількість результатів</system:String> <system:String x:Key="maxShowResults">Максимальна кількість результатів</system:String>
<system:String x:Key="maxShowResultsToolTip">You can also quickly adjust this by using CTRL+Plus and CTRL+Minus.</system:String> <system:String x:Key="maxShowResultsToolTip">Ви також можете швидко налаштувати цей параметр за допомогою клавіш CTRL+Плюс чи CTRL+Мінус.</system:String>
<system:String x:Key="ignoreHotkeysOnFullscreen">Ігнорувати гарячі клавіші в повноекранному режимі</system:String> <system:String x:Key="ignoreHotkeysOnFullscreen">Ігнорувати гарячі клавіші в повноекранному режимі</system:String>
<system:String x:Key="ignoreHotkeysOnFullscreenToolTip">Вимкнути активацію Flow Launcher коли активовано повноекранний додаток (Рекомендується для ігор).</system:String> <system:String x:Key="ignoreHotkeysOnFullscreenToolTip">Вимкнути активацію Flow Launcher коли активовано повноекранний додаток (Рекомендується для ігор).</system:String>
<system:String x:Key="defaultFileManager">Стандартний Файловий Менеджер</system:String> <system:String x:Key="defaultFileManager">Стандартний Файловий Менеджер</system:String>
<system:String x:Key="defaultFileManagerToolTip">Виберіть файловий менеджер для використання під час відкриття теки.</system:String> <system:String x:Key="defaultFileManagerToolTip">Виберіть файловий менеджер для використання під час відкриття теки.</system:String>
<system:String x:Key="defaultBrowser">Браузер за замовчуванням</system:String> <system:String x:Key="defaultBrowser">Браузер за замовчуванням</system:String>
<system:String x:Key="defaultBrowserToolTip">Налаштування нової вкладки, нового вікна, приватного режиму.</system:String> <system:String x:Key="defaultBrowserToolTip">Налаштування нової вкладки, нового вікна, приватного режиму.</system:String>
<system:String x:Key="pythonFilePath">Python Path</system:String> <system:String x:Key="pythonFilePath">Шлях до Python</system:String>
<system:String x:Key="nodeFilePath">Node.js Path</system:String> <system:String x:Key="nodeFilePath">Шлях до Node.js</system:String>
<system:String x:Key="selectNodeExecutable">Please select the Node.js executable</system:String> <system:String x:Key="selectNodeExecutable">Виберіть виконуваний файл Node.js</system:String>
<system:String x:Key="selectPythonExecutable">Please select pythonw.exe</system:String> <system:String x:Key="selectPythonExecutable">Виберіть pythonw.exe</system:String>
<system:String x:Key="typingStartEn">Always Start Typing in English Mode</system:String> <system:String x:Key="typingStartEn">Завжди починати введення тексту в англійському режимі</system:String>
<system:String x:Key="typingStartEnTooltip">Temporarily change your input method to English mode when activating Flow.</system:String> <system:String x:Key="typingStartEnTooltip">Тимчасово змінити спосіб введення на англійський при активації Flow.</system:String>
<system:String x:Key="autoUpdates">Автоматичне оновлення</system:String> <system:String x:Key="autoUpdates">Автоматичне оновлення</system:String>
<system:String x:Key="select">Вибрати</system:String> <system:String x:Key="select">Вибрати</system:String>
<system:String x:Key="hideOnStartup">Сховати Flow Launcher при запуску системи</system:String> <system:String x:Key="hideOnStartup">Сховати Flow Launcher при запуску системи</system:String>
<system:String x:Key="hideNotifyIcon">Приховати значок в системному лотку</system:String> <system:String x:Key="hideNotifyIcon">Приховати значок в системному лотку</system:String>
<system:String x:Key="hideNotifyIconToolTip">When the icon is hidden from the tray, the Settings menu can be opened by right-clicking on the search window.</system:String> <system:String x:Key="hideNotifyIconToolTip">Коли піктограму приховано з трею, меню налаштувань можна відкрити, клацнувши правою кнопкою миші у вікні пошуку.</system:String>
<system:String x:Key="querySearchPrecision">Точність пошуку запитів</system:String> <system:String x:Key="querySearchPrecision">Точність пошуку запитів</system:String>
<system:String x:Key="querySearchPrecisionToolTip">Змінює мінімальний бал збігів, необхідних для результатів.</system:String> <system:String x:Key="querySearchPrecisionToolTip">Змінює мінімальний бал збігів, необхідних для результатів.</system:String>
<system:String x:Key="ShouldUsePinyin">Використовувати піньїнь</system:String> <system:String x:Key="ShouldUsePinyin">Використовувати піньїнь</system:String>
<system:String x:Key="ShouldUsePinyinToolTip">Дозволяє використовувати пінїнь для пошуку. Піньїнь - це стандартна система написання для перекладу китайської.</system:String> <system:String x:Key="ShouldUsePinyinToolTip">Дозволяє використовувати пінїнь для пошуку. Піньїнь - це стандартна система написання для перекладу китайської.</system:String>
<system:String x:Key="AlwaysPreview">Always Preview</system:String> <system:String x:Key="AlwaysPreview">Завжди переглядати</system:String>
<system:String x:Key="AlwaysPreviewToolTip">Always open preview panel when Flow activates. Press {0} to toggle preview.</system:String> <system:String x:Key="AlwaysPreviewToolTip">Завжди відкривати панель попереднього перегляду при активації Flow. Натисніть {0}, щоб переключити попередній перегляд.</system:String>
<system:String x:Key="shadowEffectNotAllowed">Ефект тіні не дозволено, коли поточна тема має ефект розмиття</system:String> <system:String x:Key="shadowEffectNotAllowed">Ефект тіні не дозволено, коли поточна тема має ефект розмиття</system:String>
<!-- Setting Plugin --> <!-- Setting Plugin -->
<system:String x:Key="searchplugin">Search Plugin</system:String> <system:String x:Key="searchplugin">Плагін для пошуку</system:String>
<system:String x:Key="searchpluginToolTip">Ctrl+F to search plugins</system:String> <system:String x:Key="searchpluginToolTip">Ctrl+F для пошуку плагінів</system:String>
<system:String x:Key="searchplugin_Noresult_Title">No results found</system:String> <system:String x:Key="searchplugin_Noresult_Title">Результатів не знайдено</system:String>
<system:String x:Key="searchplugin_Noresult_Subtitle">Please try a different search.</system:String> <system:String x:Key="searchplugin_Noresult_Subtitle">Будь ласка, спробуйте інший запит.</system:String>
<system:String x:Key="plugin">Plugin</system:String> <system:String x:Key="plugin">Плагін</system:String>
<system:String x:Key="plugins">Плагіни</system:String> <system:String x:Key="plugins">Плагіни</system:String>
<system:String x:Key="browserMorePlugins">Знайти більше плагінів</system:String> <system:String x:Key="browserMorePlugins">Знайти більше плагінів</system:String>
<system:String x:Key="enable">Увімкнено</system:String> <system:String x:Key="enable">Увімкнено</system:String>
<system:String x:Key="disable">Відключити</system:String> <system:String x:Key="disable">Вимкнено</system:String>
<system:String x:Key="actionKeywordsTitle">Встановлення гарячих клавіш</system:String> <system:String x:Key="actionKeywordsTitle">Встановлення гарячих клавіш</system:String>
<system:String x:Key="actionKeywords">Ключове слово</system:String> <system:String x:Key="actionKeywords">Ключове слово</system:String>
<system:String x:Key="currentActionKeywords">Поточна гаряча клавіша</system:String> <system:String x:Key="currentActionKeywords">Поточна гаряча клавіша</system:String>
@ -99,47 +99,47 @@
<system:String x:Key="currentPriority">Поточний пріоритет</system:String> <system:String x:Key="currentPriority">Поточний пріоритет</system:String>
<system:String x:Key="newPriority">Новий пріоритет</system:String> <system:String x:Key="newPriority">Новий пріоритет</system:String>
<system:String x:Key="priority">Пріоритет</system:String> <system:String x:Key="priority">Пріоритет</system:String>
<system:String x:Key="priorityToolTip">Change Plugin Results Priority</system:String> <system:String x:Key="priorityToolTip">Змінити пріоритет результатів плагіна</system:String>
<system:String x:Key="pluginDirectory">Директорія плагінів</system:String> <system:String x:Key="pluginDirectory">Директорія плагінів</system:String>
<system:String x:Key="author">за</system:String> <system:String x:Key="author">за</system:String>
<system:String x:Key="plugin_init_time">Ініціалізація:</system:String> <system:String x:Key="plugin_init_time">Ініціалізація:</system:String>
<system:String x:Key="plugin_query_time">Запит:</system:String> <system:String x:Key="plugin_query_time">Запит:</system:String>
<system:String x:Key="plugin_query_version">Версія</system:String> <system:String x:Key="plugin_query_version">Версія</system:String>
<system:String x:Key="plugin_query_web">Сайт</system:String> <system:String x:Key="plugin_query_web">Сайт</system:String>
<system:String x:Key="plugin_uninstall">Uninstall</system:String> <system:String x:Key="plugin_uninstall">Видалити</system:String>
<!-- Setting Plugin Store --> <!-- Setting Plugin Store -->
<system:String x:Key="pluginStore">Магазин плагінів</system:String> <system:String x:Key="pluginStore">Магазин плагінів</system:String>
<system:String x:Key="pluginStore_NewRelease">New Release</system:String> <system:String x:Key="pluginStore_NewRelease">Новий реліз</system:String>
<system:String x:Key="pluginStore_RecentlyUpdated">Recently Updated</system:String> <system:String x:Key="pluginStore_RecentlyUpdated">Нещодавно оновлено</system:String>
<system:String x:Key="pluginStore_None">Плагіни</system:String> <system:String x:Key="pluginStore_None">Плагіни</system:String>
<system:String x:Key="pluginStore_Installed">Installed</system:String> <system:String x:Key="pluginStore_Installed">Встановлено</system:String>
<system:String x:Key="refresh">Оновити</system:String> <system:String x:Key="refresh">Оновити</system:String>
<system:String x:Key="installbtn">Install</system:String> <system:String x:Key="installbtn">Встановити</system:String>
<system:String x:Key="uninstallbtn">Uninstall</system:String> <system:String x:Key="uninstallbtn">Видалити</system:String>
<system:String x:Key="updatebtn">Оновити</system:String> <system:String x:Key="updatebtn">Оновити</system:String>
<system:String x:Key="LabelInstalledToolTip">Plugin already installed</system:String> <system:String x:Key="LabelInstalledToolTip">Плагін вже встановлено</system:String>
<system:String x:Key="LabelNew">New Version</system:String> <system:String x:Key="LabelNew">Нова версія</system:String>
<system:String x:Key="LabelNewToolTip">This plugin has been updated within the last 7 days</system:String> <system:String x:Key="LabelNewToolTip">Цей плагін було оновлено протягом останніх 7 днів</system:String>
<system:String x:Key="LabelUpdateToolTip">New Update is Available</system:String> <system:String x:Key="LabelUpdateToolTip">Доступне нове оновлення</system:String>
<!-- Setting Theme --> <!-- Setting Theme -->
<system:String x:Key="theme">Тема</system:String> <system:String x:Key="theme">Тема</system:String>
<system:String x:Key="appearance">Appearance</system:String> <system:String x:Key="appearance">Зовнішній вигляд</system:String>
<system:String x:Key="browserMoreThemes">Знайти більше тем</system:String> <system:String x:Key="browserMoreThemes">Знайти більше тем</system:String>
<system:String x:Key="howToCreateTheme">Як створити тему</system:String> <system:String x:Key="howToCreateTheme">Як створити тему</system:String>
<system:String x:Key="hiThere">Привіт усім</system:String> <system:String x:Key="hiThere">Привіт усім</system:String>
<system:String x:Key="SampleTitleExplorer">Explorer</system:String> <system:String x:Key="SampleTitleExplorer">Провідник</system:String>
<system:String x:Key="SampleSubTitleExplorer">Search for files, folders and file contents</system:String> <system:String x:Key="SampleSubTitleExplorer">Пошук файлів, папок і вмісту файлів</system:String>
<system:String x:Key="SampleTitleWebSearch">WebSearch</system:String> <system:String x:Key="SampleTitleWebSearch">Веб-пошук</system:String>
<system:String x:Key="SampleSubTitleWebSearch">Search the web with different search engine support</system:String> <system:String x:Key="SampleSubTitleWebSearch">Пошук в Інтернеті за допомогою різних пошукових систем</system:String>
<system:String x:Key="SampleTitleProgram">Program</system:String> <system:String x:Key="SampleTitleProgram">Програма</system:String>
<system:String x:Key="SampleSubTitleProgram">Launch programs as admin or a different user</system:String> <system:String x:Key="SampleSubTitleProgram">Запуск програм від імені адміністратора або іншого користувача</system:String>
<system:String x:Key="SampleTitleProcessKiller">ProcessKiller</system:String> <system:String x:Key="SampleTitleProcessKiller">Процес-кілер</system:String>
<system:String x:Key="SampleSubTitleProcessKiller">Terminate unwanted processes</system:String> <system:String x:Key="SampleSubTitleProcessKiller">Припинення небажаних процесів</system:String>
<system:String x:Key="queryBoxFont">Шрифт запитів</system:String> <system:String x:Key="queryBoxFont">Шрифт запитів</system:String>
<system:String x:Key="resultItemFont">Шрифт результатів</system:String> <system:String x:Key="resultItemFont">Шрифт результатів</system:String>
<system:String x:Key="windowMode">Віконний режим</system:String> <system:String x:Key="windowMode">Віконний режим</system:String>
@ -156,51 +156,51 @@
<system:String x:Key="SoundEffectTip">Відтворювати невеликий звук при відкритті вікна пошуку</system:String> <system:String x:Key="SoundEffectTip">Відтворювати невеликий звук при відкритті вікна пошуку</system:String>
<system:String x:Key="Animation">Анімація</system:String> <system:String x:Key="Animation">Анімація</system:String>
<system:String x:Key="AnimationTip">Використовувати анімацію в інтерфейсі</system:String> <system:String x:Key="AnimationTip">Використовувати анімацію в інтерфейсі</system:String>
<system:String x:Key="AnimationSpeed">Animation Speed</system:String> <system:String x:Key="AnimationSpeed">Швидкість анімації</system:String>
<system:String x:Key="AnimationSpeedTip">The speed of the UI animation</system:String> <system:String x:Key="AnimationSpeedTip">Швидкість анімації інтерфейсу</system:String>
<system:String x:Key="AnimationSpeedSlow">Slow</system:String> <system:String x:Key="AnimationSpeedSlow">Повільна</system:String>
<system:String x:Key="AnimationSpeedMedium">Medium</system:String> <system:String x:Key="AnimationSpeedMedium">Середня</system:String>
<system:String x:Key="AnimationSpeedFast">Fast</system:String> <system:String x:Key="AnimationSpeedFast">Швидка</system:String>
<system:String x:Key="AnimationSpeedCustom">Custom</system:String> <system:String x:Key="AnimationSpeedCustom">Користувацька</system:String>
<system:String x:Key="Clock">Clock</system:String> <system:String x:Key="Clock">Годинник</system:String>
<system:String x:Key="Date">Date</system:String> <system:String x:Key="Date">Дата</system:String>
<!-- Setting Hotkey --> <!-- Setting Hotkey -->
<system:String x:Key="hotkey">Гаряча клавіша</system:String> <system:String x:Key="hotkey">Гаряча клавіша</system:String>
<system:String x:Key="hotkeys">Гаряча клавіша</system:String> <system:String x:Key="hotkeys">Гаряча клавіша</system:String>
<system:String x:Key="flowlauncherHotkey">Гаряча клавіша Flow Launcher</system:String> <system:String x:Key="flowlauncherHotkey">Гаряча клавіша Flow Launcher</system:String>
<system:String x:Key="flowlauncherHotkeyToolTip">Введіть ярлик для відображення/приховання потокового запуску.</system:String> <system:String x:Key="flowlauncherHotkeyToolTip">Введіть скорочення, щоб показати/приховати Flow Launcher.</system:String>
<system:String x:Key="previewHotkey">Preview Hotkey</system:String> <system:String x:Key="previewHotkey">Гаряча клавіша попереднього перегляду</system:String>
<system:String x:Key="previewHotkeyToolTip">Enter shortcut to show/hide preview in search window.</system:String> <system:String x:Key="previewHotkeyToolTip">Введіть скорочення, щоб показати/приховати попередній перегляд у вікні пошуку.</system:String>
<system:String x:Key="openResultModifiers">Відкрити ключ зміни результатів</system:String> <system:String x:Key="openResultModifiers">Відкрити ключ зміни результатів</system:String>
<system:String x:Key="openResultModifiersToolTip">Виберіть ключ модифікатора для відкриття вибраних результатів за допомогою клавіатури.</system:String> <system:String x:Key="openResultModifiersToolTip">Виберіть ключ модифікатора для відкриття вибраних результатів за допомогою клавіатури.</system:String>
<system:String x:Key="showOpenResultHotkey">Показати гарячу клавішу</system:String> <system:String x:Key="showOpenResultHotkey">Показати гарячу клавішу</system:String>
<system:String x:Key="showOpenResultHotkeyToolTip">Show result selection hotkey with results.</system:String> <system:String x:Key="showOpenResultHotkeyToolTip">Показати гарячу клавішу вибору результату з результатами.</system:String>
<system:String x:Key="customQueryHotkey">Задані гарячі клавіші для запитів</system:String> <system:String x:Key="customQueryHotkey">Задані гарячі клавіші для запитів</system:String>
<system:String x:Key="customQueryShortcut">Custom Query Shortcut</system:String> <system:String x:Key="customQueryShortcut">Користувацькі скорочення запитів</system:String>
<system:String x:Key="builtinShortcuts">Built-in Shortcut</system:String> <system:String x:Key="builtinShortcuts">Вбудовані скорочення</system:String>
<system:String x:Key="customQuery">Query</system:String> <system:String x:Key="customQuery">Запит</system:String>
<system:String x:Key="customShortcut">Shortcut</system:String> <system:String x:Key="customShortcut">Скорочення</system:String>
<system:String x:Key="customShortcutExpansion">Expansion</system:String> <system:String x:Key="customShortcutExpansion">Розширення</system:String>
<system:String x:Key="builtinShortcutDescription">Description</system:String> <system:String x:Key="builtinShortcutDescription">Опис</system:String>
<system:String x:Key="delete">Видалити</system:String> <system:String x:Key="delete">Видалити</system:String>
<system:String x:Key="edit">Редагувати</system:String> <system:String x:Key="edit">Редагувати</system:String>
<system:String x:Key="add">Додати</system:String> <system:String x:Key="add">Додати</system:String>
<system:String x:Key="pleaseSelectAnItem">Спочатку виберіть елемент</system:String> <system:String x:Key="pleaseSelectAnItem">Спочатку виберіть елемент</system:String>
<system:String x:Key="deleteCustomHotkeyWarning">Ви впевнені, що хочете видалити гарячу клавішу ({0}) плагіну?</system:String> <system:String x:Key="deleteCustomHotkeyWarning">Ви впевнені, що хочете видалити гарячу клавішу ({0}) плагіну?</system:String>
<system:String x:Key="deleteCustomShortcutWarning">Are you sure you want to delete shortcut: {0} with expansion {1}?</system:String> <system:String x:Key="deleteCustomShortcutWarning">Ви впевнені, що хочете видалити скорочення: {0} з розширенням {1}?</system:String>
<system:String x:Key="shortcut_clipboard_description">Get text from clipboard.</system:String> <system:String x:Key="shortcut_clipboard_description">Отримати текст з буфера обміну.</system:String>
<system:String x:Key="shortcut_active_explorer_path">Get path from active explorer.</system:String> <system:String x:Key="shortcut_active_explorer_path">Отримати шлях з активного провідника.</system:String>
<system:String x:Key="queryWindowShadowEffect">Ефект тіні вікна запиту</system:String> <system:String x:Key="queryWindowShadowEffect">Ефект тіні вікна запиту</system:String>
<system:String x:Key="shadowEffectCPUUsage">Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited.</system:String> <system:String x:Key="shadowEffectCPUUsage">Тіньовий ефект суттєво навантажує графічний процесор. Не рекомендується, якщо потужність вашого комп'ютера є обмеженою.</system:String>
<system:String x:Key="windowWidthSize">Window Width Size</system:String> <system:String x:Key="windowWidthSize">Розмір ширини вікна</system:String>
<system:String x:Key="windowWidthSizeToolTip">You can also quickly adjust this by using Ctrl+[ and Ctrl+].</system:String> <system:String x:Key="windowWidthSizeToolTip">Ви також можете швидко налаштувати цей параметр за допомогою комбінації клавіш Ctrl+[ та Ctrl+].</system:String>
<system:String x:Key="useGlyphUI">Use Segoe Fluent Icons</system:String> <system:String x:Key="useGlyphUI">Використання іконок Segoe Fluent</system:String>
<system:String x:Key="useGlyphUIEffect">Use Segoe Fluent Icons for query results where supported</system:String> <system:String x:Key="useGlyphUIEffect">Використання іконок Segoe Fluent Icons для результатів запитів, де це підтримується</system:String>
<system:String x:Key="flowlauncherPressHotkey">Press Key</system:String> <system:String x:Key="flowlauncherPressHotkey">Натисніть клавішу</system:String>
<!-- Setting Proxy --> <!-- Setting Proxy -->
<system:String x:Key="proxy">HTTP Proxy</system:String> <system:String x:Key="proxy">HTTP-проксі</system:String>
<system:String x:Key="enableProxy">Включити HTTP Proxy</system:String> <system:String x:Key="enableProxy">Включити HTTP Proxy</system:String>
<system:String x:Key="server">Сервер HTTP</system:String> <system:String x:Key="server">Сервер HTTP</system:String>
<system:String x:Key="port">Порт</system:String> <system:String x:Key="port">Порт</system:String>
@ -217,53 +217,53 @@
<!-- Setting About --> <!-- Setting About -->
<system:String x:Key="about">Про Flow Launcher</system:String> <system:String x:Key="about">Про Flow Launcher</system:String>
<system:String x:Key="website">Website</system:String> <system:String x:Key="website">Веб-сайт</system:String>
<system:String x:Key="github">GitHub</system:String> <system:String x:Key="github">GitHub</system:String>
<system:String x:Key="docs">Docs</system:String> <system:String x:Key="docs">Документація</system:String>
<system:String x:Key="version">Версія</system:String> <system:String x:Key="version">Версія</system:String>
<system:String x:Key="icons">Icons</system:String> <system:String x:Key="icons">Іконки</system:String>
<system:String x:Key="about_activate_times">Ви скористалися Flow Launcher вже {0} разів</system:String> <system:String x:Key="about_activate_times">Ви скористалися Flow Launcher вже {0} разів</system:String>
<system:String x:Key="checkUpdates">Перевірити наявність оновлень</system:String> <system:String x:Key="checkUpdates">Перевірити наявність оновлень</system:String>
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String> <system:String x:Key="BecomeASponsor">Стати спонсором</system:String>
<system:String x:Key="newVersionTips">Доступна нова версія {0}, будь ласка, перезавантажте Flow Launcher</system:String> <system:String x:Key="newVersionTips">Доступна нова версія {0}, будь ласка, перезавантажте Flow Launcher</system:String>
<system:String x:Key="checkUpdatesFailed">Check updates failed, please check your connection and proxy settings to api.github.com.</system:String> <system:String x:Key="checkUpdatesFailed">Перевірити оновлення не вдалося, будь ласка, перевірте ваше з'єднання та налаштування проксі-сервера до api.github.com.</system:String>
<system:String x:Key="downloadUpdatesFailed"> <system:String x:Key="downloadUpdatesFailed">
Download updates failed, please check your connection and proxy settings to github-cloud.s3.amazonaws.com, Не вдалося завантажити оновлення, будь ласка, перевірте ваше з'єднання та налаштування проксі-сервера до github-cloud.s3.amazonaws.com,
or go to https://github.com/Flow-Launcher/Flow.Launcher/releases to download updates manually. або перейдіть на https://github.com/Flow-Launcher/Flow.Launcher/releases, аби завантажити оновлення власноруч.
</system:String> </system:String>
<system:String x:Key="releaseNotes">Примітки до поточного релізу:</system:String> <system:String x:Key="releaseNotes">Примітки до поточного релізу:</system:String>
<system:String x:Key="documentation">Usage Tips</system:String> <system:String x:Key="documentation">Поради щодо використання</system:String>
<system:String x:Key="devtool">DevTools</system:String> <system:String x:Key="devtool">DevTools</system:String>
<system:String x:Key="settingfolder">Setting Folder</system:String> <system:String x:Key="settingfolder">Тека налаштувань</system:String>
<system:String x:Key="logfolder">Log Folder</system:String> <system:String x:Key="logfolder">Тека журналу</system:String>
<system:String x:Key="clearlogfolder">Clear Logs</system:String> <system:String x:Key="clearlogfolder">Очистити журнали</system:String>
<system:String x:Key="clearlogfolderMessage">Are you sure you want to delete all logs?</system:String> <system:String x:Key="clearlogfolderMessage">Ви впевнені, що хочете видалити всі журнали?</system:String>
<system:String x:Key="welcomewindow">Wizard</system:String> <system:String x:Key="welcomewindow">Чаклун</system:String>
<!-- FileManager Setting Dialog --> <!-- FileManager Setting Dialog -->
<system:String x:Key="fileManagerWindow">Select File Manager</system:String> <system:String x:Key="fileManagerWindow">Виберіть файловий менеджер</system:String>
<system:String x:Key="fileManager_tips">Please specify the file location of the file manager you using and add arguments if necessary. The default arguments are &quot;%d&quot;, and a path is entered at that location. For example, If a command is required such as &quot;totalcmd.exe /A c:\windows&quot;, argument is /A &quot;%d&quot;.</system:String> <system:String x:Key="fileManager_tips">Будь ласка, вкажіть розташування файлу у файловому менеджері, який ви використовуєте, і додайте аргументи, якщо це необхідно. За замовчуванням аргументами є &quot;%d&quot;, і шлях вводиться у вказаному місці. Наприклад, якщо потрібно виконати команду типу &quot;totalcmd.exe /A c:\windows&quot;, аргументом буде /A &quot;%d&quot;.</system:String>
<system:String x:Key="fileManager_tips2">&quot;%f&quot; 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 &quot;Arg for File&quot; item. If the file manager does not have that function, you can use &quot;%d&quot;.</system:String> <system:String x:Key="fileManager_tips2">&quot;%f&quot; - це аргумент, який представляє шлях до файлу. Він використовується для виділення імені файлу/теки при відкритті певного місця розташування файлу у сторонньому файловому менеджері. Цей аргумент доступний лише у пункті &quot;Аргумент для файлу&quot;. Якщо файловий менеджер не має такої функції, ви можете використовувати &quot;%d&quot;.</system:String>
<system:String x:Key="fileManager_name">File Manager</system:String> <system:String x:Key="fileManager_name">Файловий менеджер</system:String>
<system:String x:Key="fileManager_profile_name">Profile Name</system:String> <system:String x:Key="fileManager_profile_name">Ім'я профілю</system:String>
<system:String x:Key="fileManager_path">File Manager Path</system:String> <system:String x:Key="fileManager_path">Шлях до файлового менеджера</system:String>
<system:String x:Key="fileManager_directory_arg">Arg For Folder</system:String> <system:String x:Key="fileManager_directory_arg">Аргумент для папки</system:String>
<system:String x:Key="fileManager_file_arg">Arg For File</system:String> <system:String x:Key="fileManager_file_arg">Аргумент для файлу</system:String>
<!-- DefaultBrowser Setting Dialog --> <!-- DefaultBrowser Setting Dialog -->
<system:String x:Key="defaultBrowserTitle">Веб-браузер за замовчуванням</system:String> <system:String x:Key="defaultBrowserTitle">Веб-браузер за замовчуванням</system:String>
<system:String x:Key="defaultBrowser_tips">The default setting follows the OS default browser setting. If specified separately, flow uses that browser.</system:String> <system:String x:Key="defaultBrowser_tips">Налаштування за замовчуванням відповідають налаштуванню браузера за замовчуванням в операційній системі. Якщо вказано окремо, Flow використовує цей браузер.</system:String>
<system:String x:Key="defaultBrowser_name">Browser</system:String> <system:String x:Key="defaultBrowser_name">Браузер</system:String>
<system:String x:Key="defaultBrowser_profile_name">Browser Name</system:String> <system:String x:Key="defaultBrowser_profile_name">Назва браузера</system:String>
<system:String x:Key="defaultBrowser_path">Browser Path</system:String> <system:String x:Key="defaultBrowser_path">Шлях до браузера</system:String>
<system:String x:Key="defaultBrowser_newWindow">New Window</system:String> <system:String x:Key="defaultBrowser_newWindow">Нове вікно</system:String>
<system:String x:Key="defaultBrowser_newTab">New Tab</system:String> <system:String x:Key="defaultBrowser_newTab">Нова вкладка</system:String>
<system:String x:Key="defaultBrowser_parameter">Private Mode</system:String> <system:String x:Key="defaultBrowser_parameter">Приватний режим</system:String>
<!-- Priority Setting Dialog --> <!-- Priority Setting Dialog -->
<system:String x:Key="changePriorityWindow">Change Priority</system:String> <system:String x:Key="changePriorityWindow">Змінити пріоритет</system:String>
<system:String x:Key="priority_tips">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</system:String> <system:String x:Key="priority_tips">Чим більше число, тим вище буде розташований результат. Спробуйте встановити значення 5. Якщо ви хочете, щоб результати показувалися нижче, ніж у будь-якого іншого плагіна, введіть від'ємне число</system:String>
<system:String x:Key="invalidPriority">Please provide an valid integer for Priority!</system:String> <system:String x:Key="invalidPriority">Будь ласка, вкажіть дійсне ціле число для Пріоритету!</system:String>
<!-- Action Keyword Setting Dialog --> <!-- Action Keyword Setting Dialog -->
<system:String x:Key="oldActionKeywords">Поточна гаряча клавіша</system:String> <system:String x:Key="oldActionKeywords">Поточна гаряча клавіша</system:String>
@ -274,26 +274,26 @@
<system:String x:Key="newActionKeywordsCannotBeEmpty">Нова гаряча клавіша не може бути порожньою</system:String> <system:String x:Key="newActionKeywordsCannotBeEmpty">Нова гаряча клавіша не може бути порожньою</system:String>
<system:String x:Key="newActionKeywordsHasBeenAssigned">Нова гаряча клавіша вже використовується іншим плагіном. Будь ласка, вкажіть нову</system:String> <system:String x:Key="newActionKeywordsHasBeenAssigned">Нова гаряча клавіша вже використовується іншим плагіном. Будь ласка, вкажіть нову</system:String>
<system:String x:Key="success">Успішно</system:String> <system:String x:Key="success">Успішно</system:String>
<system:String x:Key="completedSuccessfully">Completed successfully</system:String> <system:String x:Key="completedSuccessfully">Успішно завершено</system:String>
<system:String x:Key="actionkeyword_tips">Введіть гарячу клавішу, яку ви хочете використовувати для запуску плагіна. Використовуйте * у разі, якщо ви не хочете ставити конкретну гарячу клавішу.</system:String> <system:String x:Key="actionkeyword_tips">Введіть гарячу клавішу, яку ви хочете використовувати для запуску плагіна. Використовуйте * у разі, якщо ви не хочете ставити конкретну гарячу клавішу.</system:String>
<!-- Custom Query Hotkey Dialog --> <!-- Custom Query Hotkey Dialog -->
<system:String x:Key="customeQueryHotkeyTitle">Задані гарячі клавіші для запитів</system:String> <system:String x:Key="customeQueryHotkeyTitle">Задані гарячі клавіші для запитів</system:String>
<system:String x:Key="customeQueryHotkeyTips">Press a custom hotkey to open Flow Launcher and input the specified query automatically.</system:String> <system:String x:Key="customeQueryHotkeyTips">Натисніть спеціальну гарячу клавішу, щоб відкрити Flow Launcher і автоматично ввести вказаний запит.</system:String>
<system:String x:Key="preview">Переглянути</system:String> <system:String x:Key="preview">Переглянути</system:String>
<system:String x:Key="hotkeyIsNotUnavailable">Гаряча клавіша недоступна. Будь ласка, вкажіть нову</system:String> <system:String x:Key="hotkeyIsNotUnavailable">Гаряча клавіша недоступна. Будь ласка, вкажіть нову</system:String>
<system:String x:Key="invalidPluginHotkey">Недійсна гаряча клавіша плагіна</system:String> <system:String x:Key="invalidPluginHotkey">Недійсна гаряча клавіша плагіна</system:String>
<system:String x:Key="update">Оновити</system:String> <system:String x:Key="update">Оновити</system:String>
<!-- Custom Query Shortcut Dialog --> <!-- Custom Query Shortcut Dialog -->
<system:String x:Key="customeQueryShortcutTitle">Custom Query Shortcut</system:String> <system:String x:Key="customeQueryShortcutTitle">Власне скорочення запиту</system:String>
<system:String x:Key="customeQueryShortcutTips">Enter a shortcut that automatically expands to the specified query.</system:String> <system:String x:Key="customeQueryShortcutTips">Введіть скорочення, яке автоматично розгорнеться до вказаного запиту.</system:String>
<system:String x:Key="customeQueryShortcutGuide" xml:space="preserve">A shortcut is expanded when it exactly matches the query. <system:String x:Key="customeQueryShortcutGuide" xml:space="preserve">Скорочення розгортається, коли воно точно відповідає запиту.
If you add an '@' prefix while inputting a shortcut, it matches any position in the query. Builtin shortcuts match any position in a query. Якщо ви додасте префікс '@' під час введення скорочення, воно буде відповідати будь-якій позиції в запиті. Вбудовані скорочення відповідають будь-якій позиції в запиті.
</system:String> </system:String>
<system:String x:Key="duplicateShortcut">Shortcut already exists, please enter a new Shortcut or edit the existing one.</system:String> <system:String x:Key="duplicateShortcut">Скорочення вже існує, будь ласка, введіть нове або відредагуйте існуюче.</system:String>
<system:String x:Key="emptyShortcut">Shortcut and/or its expansion is empty.</system:String> <system:String x:Key="emptyShortcut">Скорочення та/або його розширення є порожнім.</system:String>
<!-- Hotkey Control --> <!-- Hotkey Control -->
<system:String x:Key="hotkeyUnavailable">Гаряча клавіша недоступна</system:String> <system:String x:Key="hotkeyUnavailable">Гаряча клавіша недоступна</system:String>
@ -315,64 +315,64 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
<system:String x:Key="reportWindow_flowlauncher_got_an_error">Стався збій в додатку Flow Launcher</system:String> <system:String x:Key="reportWindow_flowlauncher_got_an_error">Стався збій в додатку Flow Launcher</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Please wait...</system:String> <system:String x:Key="pleaseWait">Будь ласка, зачекайте...</system:String>
<!-- Update --> <!-- Update -->
<system:String x:Key="update_flowlauncher_update_check">Checking for new update</system:String> <system:String x:Key="update_flowlauncher_update_check">Перевірка наявності оновлень</system:String>
<system:String x:Key="update_flowlauncher_already_on_latest">You already have the latest Flow Launcher version</system:String> <system:String x:Key="update_flowlauncher_already_on_latest">Ви вже маєте останню версію Flow Launcher</system:String>
<system:String x:Key="update_flowlauncher_update_found">Update found</system:String> <system:String x:Key="update_flowlauncher_update_found">Оновлення знайдено</system:String>
<system:String x:Key="update_flowlauncher_updating">Updating...</system:String> <system:String x:Key="update_flowlauncher_updating">Оновлюємо...</system:String>
<system:String x:Key="update_flowlauncher_fail_moving_portable_user_profile_data"> <system:String x:Key="update_flowlauncher_fail_moving_portable_user_profile_data">
Flow Launcher was not able to move your user profile data to the new update version. Flow Launcher не зміг перенести дані вашого профілю користувача до нової актуальної версії.
Please manually move your profile data folder from {0} to {1} Будь ласка, перемістіть теку з даними вашого профілю власноруч з {0} до {1}
</system:String> </system:String>
<system:String x:Key="update_flowlauncher_new_update">New Update</system:String> <system:String x:Key="update_flowlauncher_new_update">Нова версія</system:String>
<system:String x:Key="update_flowlauncher_update_new_version_available">Доступна нова версія Flow Launcher {0}</system:String> <system:String x:Key="update_flowlauncher_update_new_version_available">Доступна нова версія Flow Launcher {0}</system:String>
<system:String x:Key="update_flowlauncher_update_error">Сталася помилка під час спроби встановити оновлення</system:String> <system:String x:Key="update_flowlauncher_update_error">Сталася помилка під час спроби встановити оновлення</system:String>
<system:String x:Key="update_flowlauncher_update">Оновити</system:String> <system:String x:Key="update_flowlauncher_update">Оновити</system:String>
<system:String x:Key="update_flowlauncher_update_cancel">Скасувати</system:String> <system:String x:Key="update_flowlauncher_update_cancel">Скасувати</system:String>
<system:String x:Key="update_flowlauncher_fail">Update Failed</system:String> <system:String x:Key="update_flowlauncher_fail">Не вдалося оновити</system:String>
<system:String x:Key="update_flowlauncher_check_connection">Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com.</system:String> <system:String x:Key="update_flowlauncher_check_connection">Перевірте з'єднання та спробуйте оновити налаштування проксі до github-cloud.s3.amazonaws.com.</system:String>
<system:String x:Key="update_flowlauncher_update_restart_flowlauncher_tip">Це оновлення перезавантажить Flow Launcher</system:String> <system:String x:Key="update_flowlauncher_update_restart_flowlauncher_tip">Це оновлення перезавантажить Flow Launcher</system:String>
<system:String x:Key="update_flowlauncher_update_update_files">Ці файли будуть оновлені</system:String> <system:String x:Key="update_flowlauncher_update_update_files">Ці файли будуть оновлені</system:String>
<system:String x:Key="update_flowlauncher_update_files">Оновити файли</system:String> <system:String x:Key="update_flowlauncher_update_files">Оновити файли</system:String>
<system:String x:Key="update_flowlauncher_update_update_description">Опис оновлення</system:String> <system:String x:Key="update_flowlauncher_update_update_description">Опис оновлення</system:String>
<!-- Welcome Window --> <!-- Welcome Window -->
<system:String x:Key="Skip">Skip</system:String> <system:String x:Key="Skip">Пропустити</system:String>
<system:String x:Key="Welcome_Page1_Title">Welcome to Flow Launcher</system:String> <system:String x:Key="Welcome_Page1_Title">Ласкаво просимо до Flow Launcher</system:String>
<system:String x:Key="Welcome_Page1_Text01">Hello, this is the first time you are running Flow Launcher!</system:String> <system:String x:Key="Welcome_Page1_Text01">Вітаємо, ви вперше запускаєте Flow Launcher!</system:String>
<system:String x:Key="Welcome_Page1_Text02">Before starting, this wizard will assist in setting up Flow Launcher. You can skip this if you wish. Please choose a language</system:String> <system:String x:Key="Welcome_Page1_Text02">Перед початком роботи цей помічник допоможе налаштувати Flow Launcher. Ви можете пропустити цей крок, якщо бажаєте. Виберіть мову</system:String>
<system:String x:Key="Welcome_Page2_Title">Search and run all files and applications on your PC</system:String> <system:String x:Key="Welcome_Page2_Title">Пошук та запуск усіх файлів і програм на вашому комп'ютері</system:String>
<system:String x:Key="Welcome_Page2_Text01">Search everything from applications, files, bookmarks, YouTube, Twitter and more. All from the comfort of your keyboard without ever touching the mouse.</system:String> <system:String x:Key="Welcome_Page2_Text01">Шукайте все: програми, файли, закладки, YouTube, Twitter тощо. І все це за допомогою клавіатури, навіть не торкаючись миші.</system:String>
<system:String x:Key="Welcome_Page2_Text02">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.</system:String> <system:String x:Key="Welcome_Page2_Text02">Flow Launcher запускається за допомогою наведеної нижче гарячої клавіші, спробуйте натиснути її зараз. Щоб її змінити, клацніть на ввід і натисніть потрібну гарячу клавішу на клавіатурі.</system:String>
<system:String x:Key="Welcome_Page3_Title">Hotkeys</system:String> <system:String x:Key="Welcome_Page3_Title">Гаряча клавіша</system:String>
<system:String x:Key="Welcome_Page4_Title">Action Keyword and Commands</system:String> <system:String x:Key="Welcome_Page4_Title">Ключове слово дії та команди</system:String>
<system:String x:Key="Welcome_Page4_Text01">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.</system:String> <system:String x:Key="Welcome_Page4_Text01">Шукайте в Інтернеті, запускайте програми або виконуйте різноманітні функції за допомогою плагінів Flow Launcher. Деякі функції починаються з ключового слова дії, але за потреби їх можна використовувати і без нього. Спробуйте наведені нижче запити у Flow Launcher.</system:String>
<system:String x:Key="Welcome_Page5_Title">Let's Start Flow Launcher</system:String> <system:String x:Key="Welcome_Page5_Title">Давайте запустимо Flow Launcher</system:String>
<system:String x:Key="Welcome_Page5_Text01">Finished. Enjoy Flow Launcher. Don't forget the hotkey to start :)</system:String> <system:String x:Key="Welcome_Page5_Text01">Готово. Насолоджуйтесь Flow Launcher. Не забудьте гарячу клавішу для запуску :)</system:String>
<!-- General Guide & Hotkey --> <!-- General Guide & Hotkey -->
<system:String x:Key="HotkeyUpDownDesc">Back / Context Menu</system:String> <system:String x:Key="HotkeyUpDownDesc">Назад / Контекстне меню</system:String>
<system:String x:Key="HotkeyLeftRightDesc">Item Navigation</system:String> <system:String x:Key="HotkeyLeftRightDesc">Навігація елементами</system:String>
<system:String x:Key="HotkeyShiftEnterDesc">Open Context Menu</system:String> <system:String x:Key="HotkeyShiftEnterDesc">Відкрити контекстне меню</system:String>
<system:String x:Key="HotkeyCtrlEnterDesc">Open Containing Folder</system:String> <system:String x:Key="HotkeyCtrlEnterDesc">Відкрийте папку, що містить файл</system:String>
<system:String x:Key="HotkeyCtrlShiftEnterDesc">Run as Admin / Open Folder in Default File Manager</system:String> <system:String x:Key="HotkeyCtrlShiftEnterDesc">Запустити від імені адміністратора / Відкрити папку у файловому менеджері за замовчуванням</system:String>
<system:String x:Key="HotkeyCtrlHDesc">Query History</system:String> <system:String x:Key="HotkeyCtrlHDesc">Історія запитів</system:String>
<system:String x:Key="HotkeyESCDesc">Back to Result in Context Menu</system:String> <system:String x:Key="HotkeyESCDesc">Повернутися до результату в контекстному меню</system:String>
<system:String x:Key="HotkeyTabDesc">Autocomplete</system:String> <system:String x:Key="HotkeyTabDesc">Автодоповнення</system:String>
<system:String x:Key="HotkeyRunDesc">Open / Run Selected Item</system:String> <system:String x:Key="HotkeyRunDesc">Відкрити / запустити вибраний елемент</system:String>
<system:String x:Key="HotkeyCtrlIDesc">Open Setting Window</system:String> <system:String x:Key="HotkeyCtrlIDesc">Відкрити вікно налаштувань</system:String>
<system:String x:Key="HotkeyF5Desc">Reload Plugin Data</system:String> <system:String x:Key="HotkeyF5Desc">Перезавантажити дані плагінів</system:String>
<system:String x:Key="RecommendWeather">Weather</system:String> <system:String x:Key="RecommendWeather">Погода</system:String>
<system:String x:Key="RecommendWeatherDesc">Weather in Google Result</system:String> <system:String x:Key="RecommendWeatherDesc">Погода в результатах Google</system:String>
<system:String x:Key="RecommendShell">&gt; ping 8.8.8.8</system:String> <system:String x:Key="RecommendShell">&gt; ping 8.8.8.8</system:String>
<system:String x:Key="RecommendShellDesc">Shell Command</system:String> <system:String x:Key="RecommendShellDesc">Команда Shell</system:String>
<system:String x:Key="RecommendBluetooth">s Bluetooth</system:String> <system:String x:Key="RecommendBluetooth">s Bluetooth</system:String>
<system:String x:Key="RecommendBluetoothDesc">Bluetooth in Windows Settings</system:String> <system:String x:Key="RecommendBluetoothDesc">Bluetooth у налаштуваннях Windows</system:String>
<system:String x:Key="RecommendAcronyms">sn</system:String> <system:String x:Key="RecommendAcronyms">sn</system:String>
<system:String x:Key="RecommendAcronymsDesc">Sticky Notes</system:String> <system:String x:Key="RecommendAcronymsDesc">Липкі нотатки</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -288,9 +288,9 @@
<!-- Custom Query Shortcut Dialog --> <!-- Custom Query Shortcut Dialog -->
<system:String x:Key="customeQueryShortcutTitle">自定义查询捷径</system:String> <system:String x:Key="customeQueryShortcutTitle">自定义查询捷径</system:String>
<system:String x:Key="customeQueryShortcutTips">输入一个捷径,它将自动展开为一个查询。</system:String> <system:String x:Key="customeQueryShortcutTips">输入一个捷径,它将自动展开为一个查询。</system:String>
<system:String x:Key="customeQueryShortcutGuide" xml:space="preserve">A shortcut is expanded when it exactly matches the query. <system:String x:Key="customeQueryShortcutGuide" xml:space="preserve">捷径仅在完全匹配查询时展开。
If you add an '@' prefix while inputting a shortcut, it matches any position in the query. Builtin shortcuts match any position in a query. 如果您在输入捷径时添加一个“@”前缀,它将匹配查询中的任意位置。 内置捷径同样匹配查询中的任意位置。
</system:String> </system:String>
<system:String x:Key="duplicateShortcut">捷径已存在,请输入一个新的或者编辑已有的。</system:String> <system:String x:Key="duplicateShortcut">捷径已存在,请输入一个新的或者编辑已有的。</system:String>
<system:String x:Key="emptyShortcut">捷径及其展开均不能为空。</system:String> <system:String x:Key="emptyShortcut">捷径及其展开均不能为空。</system:String>

View file

@ -221,6 +221,7 @@
Visibility="Visible"> Visibility="Visible">
<TextBox.CommandBindings> <TextBox.CommandBindings>
<CommandBinding Command="ApplicationCommands.Copy" Executed="OnCopy" /> <CommandBinding Command="ApplicationCommands.Copy" Executed="OnCopy" />
<CommandBinding Command="ApplicationCommands.Paste" Executed="OnPaste" />
</TextBox.CommandBindings> </TextBox.CommandBindings>
<TextBox.ContextMenu> <TextBox.ContextMenu>
<ContextMenu MinWidth="160"> <ContextMenu MinWidth="160">

View file

@ -72,6 +72,15 @@ namespace Flow.Launcher
} }
} }
private void OnPaste(object sender, ExecutedRoutedEventArgs e)
{
if (System.Windows.Clipboard.ContainsText())
{
_viewModel.ChangeQueryText(System.Windows.Clipboard.GetText().Replace("\n", String.Empty).Replace("\r", String.Empty));
e.Handled = true;
}
}
private async void OnClosing(object sender, CancelEventArgs e) private async void OnClosing(object sender, CancelEventArgs e)
{ {
_notifyIcon.Visible = false; _notifyIcon.Visible = false;

View file

@ -294,6 +294,22 @@ namespace Flow.Launcher
OpenUri(appUri); OpenUri(appUri);
} }
public void ToggleGameMode()
{
_mainVM.ToggleGameMode();
}
public void SetGameMode(bool value)
{
_mainVM.GameModeStatus = value;
}
public bool IsGameModeOn()
{
return _mainVM.GameModeStatus;
}
private readonly List<Func<int, int, SpecialKeyState, bool>> _globalKeyboardHandlers = new(); private readonly List<Func<int, int, SpecialKeyState, bool>> _globalKeyboardHandlers = new();
public void RegisterGlobalKeyboardCallback(Func<int, int, SpecialKeyState, bool> callback) => _globalKeyboardHandlers.Add(callback); public void RegisterGlobalKeyboardCallback(Func<int, int, SpecialKeyState, bool> callback) => _globalKeyboardHandlers.Add(callback);

View file

@ -34,6 +34,8 @@ namespace Flow.Launcher.ViewModel
private bool _isQueryRunning; private bool _isQueryRunning;
private Query _lastQuery; private Query _lastQuery;
private Result lastContextMenuResult = new Result();
private List<Result> lastContextMenuResults = new List<Result>();
private string _queryTextBeforeLeaveResults; private string _queryTextBeforeLeaveResults;
private readonly FlowLauncherJsonStorage<History> _historyItemsStorage; private readonly FlowLauncherJsonStorage<History> _historyItemsStorage;
@ -285,7 +287,8 @@ namespace Flow.Launcher.ViewModel
} }
var hideWindow = await result.ExecuteAsync(new ActionContext var hideWindow = await result.ExecuteAsync(new ActionContext
{ {
SpecialKeyState = GlobalHotkey.CheckModifiers() // not null means pressing modifier key + number, should ignore the modifier key
SpecialKeyState = index is not null ? SpecialKeyState.Default : GlobalHotkey.CheckModifiers()
}) })
.ConfigureAwait(false); .ConfigureAwait(false);
@ -649,9 +652,34 @@ namespace Flow.Launcher.ViewModel
if (selected != null) // SelectedItem returns null if selection is empty. if (selected != null) // SelectedItem returns null if selection is empty.
{ {
var results = PluginManager.GetContextMenusForPlugin(selected); List<Result> results;
results.Add(ContextMenuTopMost(selected)); if (selected == lastContextMenuResult)
results.Add(ContextMenuPluginInfo(selected.PluginID)); {
// 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)) if (!string.IsNullOrEmpty(query))
{ {
@ -1024,6 +1052,8 @@ namespace Flow.Launcher.ViewModel
{ {
// Trick for no delay // Trick for no delay
MainWindowOpacity = 0; MainWindowOpacity = 0;
lastContextMenuResult = new Result();
lastContextMenuResults = new List<Result>();
if (!SelectedIsFromQueryResults()) if (!SelectedIsFromQueryResults())
{ {

View file

@ -2,12 +2,14 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Text.Json; using System.Text.Json;
using Flow.Launcher.Infrastructure.Logger;
namespace Flow.Launcher.Plugin.BrowserBookmark namespace Flow.Launcher.Plugin.BrowserBookmark
{ {
public abstract class ChromiumBookmarkLoader : IBookmarkLoader public abstract class ChromiumBookmarkLoader : IBookmarkLoader
{ {
public abstract List<Bookmark> GetBookmarks(); public abstract List<Bookmark> GetBookmarks();
protected List<Bookmark> LoadBookmarks(string browserDataPath, string name) protected List<Bookmark> LoadBookmarks(string browserDataPath, string name)
{ {
var bookmarks = new List<Bookmark>(); var bookmarks = new List<Bookmark>();
@ -25,46 +27,57 @@ namespace Flow.Launcher.Plugin.BrowserBookmark
var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})"); var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})");
bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source)); bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source));
} }
return bookmarks; return bookmarks;
} }
protected List<Bookmark> LoadBookmarksFromFile(string path, string source) protected List<Bookmark> LoadBookmarksFromFile(string path, string source)
{ {
if (!File.Exists(path)) if (!File.Exists(path))
return new(); return new List<Bookmark>();
var bookmarks = new List<Bookmark>(); var bookmarks = new List<Bookmark>();
using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path)); using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path));
if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement)) if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement))
return new(); return new List<Bookmark>();
foreach (var folder in rootElement.EnumerateObject()) foreach (var folder in rootElement.EnumerateObject())
{ {
if (folder.Value.ValueKind == JsonValueKind.Object) if (folder.Value.ValueKind == JsonValueKind.Object)
EnumerateFolderBookmark(folder.Value, bookmarks, source); EnumerateFolderBookmark(folder.Value, bookmarks, source);
} }
return bookmarks; return bookmarks;
} }
private void EnumerateFolderBookmark(JsonElement folderElement, List<Bookmark> bookmarks, string source) private void EnumerateFolderBookmark(JsonElement folderElement, ICollection<Bookmark> bookmarks,
string source)
{ {
if (!folderElement.TryGetProperty("children", out var childrenElement)) if (!folderElement.TryGetProperty("children", out var childrenElement))
return; return;
foreach (var subElement in childrenElement.EnumerateArray()) foreach (var subElement in childrenElement.EnumerateArray())
{ {
switch (subElement.GetProperty("type").GetString()) if (subElement.TryGetProperty("type", out var type))
{ {
case "folder": switch (type.GetString())
EnumerateFolderBookmark(subElement, bookmarks, source); {
break; case "folder":
default: case "workspace": // Edge Workspace
bookmarks.Add(new Bookmark( EnumerateFolderBookmark(subElement, bookmarks, source);
subElement.GetProperty("name").GetString(), break;
subElement.GetProperty("url").GetString(), default:
source)); bookmarks.Add(new Bookmark(
break; subElement.GetProperty("name").GetString(),
subElement.GetProperty("url").GetString(),
source));
break;
}
}
else
{
Log.Error(
$"ChromiumBookmarkLoader: EnumerateFolderBookmark: type property not found for {subElement.GetString()}");
} }
} }
} }
} }
} }

View file

@ -1,7 +1,7 @@
using Flow.Launcher.Plugin.BrowserBookmark.Models; using Flow.Launcher.Plugin.BrowserBookmark.Models;
using Microsoft.Data.Sqlite;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data.SQLite;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
@ -19,7 +19,7 @@ namespace Flow.Launcher.Plugin.BrowserBookmark
ORDER BY moz_places.visit_count DESC ORDER BY moz_places.visit_count DESC
"; ";
private const string dbPathFormat = "Data Source ={0};Version=3;New=False;Compress=True;"; private const string dbPathFormat = "Data Source ={0}";
protected static List<Bookmark> GetBookmarksFromPath(string placesPath) protected static List<Bookmark> GetBookmarksFromPath(string placesPath)
{ {
@ -33,10 +33,10 @@ namespace Flow.Launcher.Plugin.BrowserBookmark
// create the connection string and init the connection // create the connection string and init the connection
string dbPath = string.Format(dbPathFormat, placesPath); string dbPath = string.Format(dbPathFormat, placesPath);
using var dbConnection = new SQLiteConnection(dbPath); using var dbConnection = new SqliteConnection(dbPath);
// Open connection to the database file and execute the query // Open connection to the database file and execute the query
dbConnection.Open(); dbConnection.Open();
var reader = new SQLiteCommand(queryAllBookmarks, dbConnection).ExecuteReader(); var reader = new SqliteCommand(queryAllBookmarks, dbConnection).ExecuteReader();
// return results in List<Bookmark> format // return results in List<Bookmark> format
bookmarkList = reader.Select( bookmarkList = reader.Select(
@ -133,7 +133,7 @@ namespace Flow.Launcher.Plugin.BrowserBookmark
public static class Extensions public static class Extensions
{ {
public static IEnumerable<T> Select<T>(this SQLiteDataReader reader, Func<SQLiteDataReader, T> projection) public static IEnumerable<T> Select<T>(this SqliteDataReader reader, Func<SqliteDataReader, T> projection)
{ {
while (reader.Read()) while (reader.Read())
{ {

View file

@ -56,22 +56,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="System.Data.SQLite" Version="1.0.118" /> <PackageReference Include="Microsoft.Data.Sqlite" Version="8.0.1" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Compile Remove="Bookmark.cs" />
</ItemGroup>
<Target Name="CopyDLLs" AfterTargets="Build">
<Message Text="Executing CopyDLLs task" Importance="High" />
<Copy SourceFiles="$(TargetDir)\runtimes\win-x64\native\SQLite.Interop.dll" DestinationFolder="$(TargetDir)\x64" />
<Copy SourceFiles="$(TargetDir)\runtimes\win-x86\native\SQLite.Interop.dll" DestinationFolder="$(TargetDir)\x86" />
</Target>
<Target Name="DeleteRuntimesFolder" AfterTargets="CopyDLLs">
<Message Text="Deleting runtimes folder" Importance="High" />
<RemoveDir Directories="$(TargetDir)\runtimes" />
</Target>
</Project> </Project>

View file

@ -6,7 +6,7 @@
<system:String x:Key="flowlauncher_plugin_browserbookmark_plugin_description">Pesquisar favoritos do seu navegador</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_plugin_description">Pesquisar favoritos do seu navegador</system:String>
<!-- Settings --> <!-- Settings -->
<system:String x:Key="flowlauncher_plugin_browserbookmark_bookmarkDataSetting">Dados de Favorito</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_bookmarkDataSetting">Dados de Favoritos</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_settings_openBookmarks">Abrir favoritos em:</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_settings_openBookmarks">Abrir favoritos em:</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_settings_newWindow">Nova janela</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_settings_newWindow">Nova janela</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_settings_newTab">Nova aba</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_settings_newTab">Nova aba</system:String>
@ -21,8 +21,8 @@
<system:String x:Key="flowlauncher_plugin_browserbookmark_editBrowserBookmark">Editar</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_editBrowserBookmark">Editar</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_removeBrowserBookmark">Apagar</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_removeBrowserBookmark">Apagar</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_browseBrowserBookmark">Navegar</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_browseBrowserBookmark">Navegar</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_others">Others</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_others">Outros</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_browserEngine">Browser Engine</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_browserEngine">Motor do Navegador</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage01">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.</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage01">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.</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage02">For example: Brave's engine is Chromium; and its default bookmarks data location is: &quot;%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData&quot;. For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file.</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage02">Por exemplo: O motor do Brave é o Chromium; e seu diretório padrão de favoritos é &quot;%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData&quot;. Para o motor do Firefox, o diretório de favoritos é a pasta do usuário que contém o arquivo &quot;places.sqlite&quot;.</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -2,27 +2,27 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<!-- Plugin Info --> <!-- Plugin Info -->
<system:String x:Key="flowlauncher_plugin_browserbookmark_plugin_name">Browser Bookmarks</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_plugin_name">Закладки браузера</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_plugin_description">Search your browser bookmarks</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_plugin_description">Пошук у закладках браузера</system:String>
<!-- Settings --> <!-- Settings -->
<system:String x:Key="flowlauncher_plugin_browserbookmark_bookmarkDataSetting">Bookmark Data</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_bookmarkDataSetting">Дані закладок</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_settings_openBookmarks">Open bookmarks in:</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_settings_openBookmarks">Відкрити закладки в:</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_settings_newWindow">New window</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_settings_newWindow">Нове вікно</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_settings_newTab">New tab</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_settings_newTab">Нова вкладка</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_settings_setBrowserFromPath">Set browser from path:</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_settings_setBrowserFromPath">Встановити браузер за шляхом:</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_settings_choose">Choose</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_settings_choose">Обрати</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_copyurl_title">Copy url</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_copyurl_title">Скопіювати URL-адресу</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_copyurl_subtitle">Copy the bookmark's url to clipboard</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_copyurl_subtitle">Скопіюйте URL-адресу закладки в буфер обміну</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_loadBrowserFrom">Load Browser From:</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_loadBrowserFrom">Завантажити браузер з:</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_browserName">Browser Name</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_browserName">Назва браузера</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_browserBookmarkDataDirectory">Data Directory Path</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_browserBookmarkDataDirectory">Шлях до каталогу з даними</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_addBrowserBookmark">Додати</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_addBrowserBookmark">Додати</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_editBrowserBookmark">Редагувати</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_editBrowserBookmark">Редагувати</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_removeBrowserBookmark">Видалити</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_removeBrowserBookmark">Видалити</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_browseBrowserBookmark">Browse</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_browseBrowserBookmark">Перегляд</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_others">Others</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_others">Інші</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_browserEngine">Browser Engine</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_browserEngine">Браузерний рушій</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage01">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.</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage01">Якщо ви не використовуєте Chrome, Firefox або Edge, або використовуєте їхні портативні версії, вам потрібно додати каталог даних закладок і вибрати правильний рушій браузера, щоб цей плагін працював.</system:String>
<system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage02">For example: Brave's engine is Chromium; and its default bookmarks data location is: &quot;%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData&quot;. For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file.</system:String> <system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage02">Наприклад: Рушій Brave - Chromium, і за замовчуванням розташування даних закладок: &quot;%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData&quot;. Для браузера Firefox директорія закладок - це папка userdata, що містить файл places.sqlite.</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -4,7 +4,7 @@
"Name": "Browser Bookmarks", "Name": "Browser Bookmarks",
"Description": "Search your browser bookmarks", "Description": "Search your browser bookmarks",
"Author": "qianlifeng, Ioannis G.", "Author": "qianlifeng, Ioannis G.",
"Version": "3.1.4", "Version": "3.1.5",
"Language": "csharp", "Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher", "Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll", "ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll",

View file

@ -62,7 +62,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Mages" Version="2.0.1" /> <PackageReference Include="Mages" Version="2.0.2" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View file

@ -1,15 +1,15 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<system:String x:Key="flowlauncher_plugin_caculator_plugin_name">Calculator</system:String> <system:String x:Key="flowlauncher_plugin_caculator_plugin_name">Калькулятор</system:String>
<system:String x:Key="flowlauncher_plugin_caculator_plugin_description">Allows to do mathematical calculations.(Try 5*3-2 in Flow Launcher)</system:String> <system:String x:Key="flowlauncher_plugin_caculator_plugin_description">Дозволяє виконувати математичні обчислення (спробуйте 5*3-2 у Flow Launcher)</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_not_a_number">Not a number (NaN)</system:String> <system:String x:Key="flowlauncher_plugin_calculator_not_a_number">Не є числом (NaN)</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_expression_not_complete">Expression wrong or incomplete (Did you forget some parentheses?)</system:String> <system:String x:Key="flowlauncher_plugin_calculator_expression_not_complete">Вираз неправильний або неповний (Ви забули якісь дужки?)</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_copy_number_to_clipboard">Copy this number to the clipboard</system:String> <system:String x:Key="flowlauncher_plugin_calculator_copy_number_to_clipboard">Скопіюйте це число в буфер обміну</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_output_decimal_seperator">Decimal separator</system:String> <system:String x:Key="flowlauncher_plugin_calculator_output_decimal_seperator">Десятковий роздільник</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_output_decimal_seperator_help">The decimal separator to be used in the output.</system:String> <system:String x:Key="flowlauncher_plugin_calculator_output_decimal_seperator_help">Десятковий роздільник, який буде використовуватися у виведенні.</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_decimal_seperator_use_system_locale">Use system locale</system:String> <system:String x:Key="flowlauncher_plugin_calculator_decimal_seperator_use_system_locale">Використовувати системну локаль</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_decimal_seperator_comma">Comma (,)</system:String> <system:String x:Key="flowlauncher_plugin_calculator_decimal_seperator_comma">Кома (,)</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_decimal_seperator_dot">Dot (.)</system:String> <system:String x:Key="flowlauncher_plugin_calculator_decimal_seperator_dot">Крапка (.)</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String> <system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Макс. кількість знаків після коми</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -19,8 +19,9 @@ namespace Flow.Launcher.Plugin.Caculator
@"sin|cos|tan|arcsin|arccos|arctan|" + @"sin|cos|tan|arcsin|arccos|arctan|" +
@"eigval|eigvec|eig|sum|polar|plot|round|sort|real|zeta|" + @"eigval|eigvec|eig|sum|polar|plot|round|sort|real|zeta|" +
@"bin2dec|hex2dec|oct2dec|" + @"bin2dec|hex2dec|oct2dec|" +
@"==|~=|&&|\|\||" + @"factorial|sign|isprime|isinfty|" +
@"[ei]|[0-9]|[\+\-\*\/\^\., ""]|[\(\)\|\!\[\]]" + @"==|~=|&&|\|\||(?:\<|\>)=?|" +
@"[ei]|[0-9]|[\+\%\-\*\/\^\., ""]|[\(\)\|\!\[\]]" +
@")+$", RegexOptions.Compiled); @")+$", RegexOptions.Compiled);
private static readonly Regex RegBrackets = new Regex(@"[\(\)\[\]]", RegexOptions.Compiled); private static readonly Regex RegBrackets = new Regex(@"[\(\)\[\]]", RegexOptions.Compiled);
private static Engine MagesEngine; private static Engine MagesEngine;

View file

@ -4,7 +4,7 @@
"Name": "Calculator", "Name": "Calculator",
"Description": "Provide mathematical calculations.(Try 5*3-2 in Flow Launcher)", "Description": "Provide mathematical calculations.(Try 5*3-2 in Flow Launcher)",
"Author": "cxfksword", "Author": "cxfksword",
"Version": "3.0.3", "Version": "3.1.0",
"Language": "csharp", "Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher", "Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.Caculator.dll", "ExecuteFileName": "Flow.Launcher.Plugin.Caculator.dll",

View file

@ -54,6 +54,11 @@ namespace Flow.Launcher.Plugin.Explorer
contextMenus.Add(CreateOpenContainingFolderResult(record)); contextMenus.Add(CreateOpenContainingFolderResult(record));
if (record.Type == ResultType.File)
{
contextMenus.Add(CreateOpenWithMenu(record));
}
if (record.WindowsIndexed) if (record.WindowsIndexed)
{ {
contextMenus.Add(CreateOpenWindowsIndexingOptions()); contextMenus.Add(CreateOpenWindowsIndexingOptions());
@ -434,6 +439,22 @@ namespace Flow.Launcher.Plugin.Explorer
}; };
} }
private Result CreateOpenWithMenu(SearchResult record)
{
return new Result
{
Title = Context.API.GetTranslation("plugin_explorer_openwith"),
SubTitle = Context.API.GetTranslation("plugin_explorer_openwith_subtitle"),
Action = _ =>
{
Process.Start("rundll32.exe", $"{Path.Combine(Environment.SystemDirectory, "shell32.dll")},OpenAs_RunDLL {record.FullPath}");
return true;
},
IcoPath = Constants.ShowContextMenuImagePath,
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue7ac"),
};
}
private void LogException(string message, Exception e) private void LogException(string message, Exception e)
{ {
Log.Exception($"|Flow.Launcher.Plugin.Folder.ContextMenu|{message}", e); Log.Exception($"|Flow.Launcher.Plugin.Folder.ContextMenu|{message}", e);

View file

@ -45,7 +45,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="System.Data.OleDb" Version="7.0.0" /> <PackageReference Include="System.Data.OleDb" Version="8.0.0" />
<PackageReference Include="System.Linq.Async" Version="6.0.1" /> <PackageReference Include="System.Linq.Async" Version="6.0.1" />
<PackageReference Include="tlbimp-Microsoft.Search.Interop" Version="1.0.0" /> <PackageReference Include="tlbimp-Microsoft.Search.Interop" Version="1.0.0" />
</ItemGroup> </ItemGroup>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Odstranit z Rychlého přístupu</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Odstranit z Rychlého přístupu</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Odstranit aktuální položku z rychlého přístupu</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Odstranit aktuální položku z rychlého přístupu</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Zobrazit kontextové menu Windows</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Zobrazit kontextové menu Windows</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">Volných {0} z {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">Volných {0} z {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -2,18 +2,18 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<!-- Dialogues --> <!-- Dialogues -->
<system:String x:Key="plugin_explorer_make_selection_warning">Please make a selection first</system:String> <system:String x:Key="plugin_explorer_make_selection_warning">Zuerst eine Auswahl treffen</system:String>
<system:String x:Key="plugin_explorer_select_folder_link_warning">Bitte wähle eine Ordnerverknüpfung</system:String> <system:String x:Key="plugin_explorer_select_folder_link_warning">Bitte wähle eine Ordnerverknüpfung</system:String>
<system:String x:Key="plugin_explorer_delete_folder_link">Bist du sicher {0} zu löschen?</system:String> <system:String x:Key="plugin_explorer_delete_folder_link">Bist du sicher {0} zu löschen?</system:String>
<system:String x:Key="plugin_explorer_deletefileconfirm">Sind Sie sicher, dass Sie diese Datei dauerhaft löschen möchten?</system:String> <system:String x:Key="plugin_explorer_deletefileconfirm">Sind Sie sicher, dass Sie diese Datei dauerhaft löschen möchten?</system:String>
<system:String x:Key="plugin_explorer_deletefilefolderconfirm">Are you sure you want to permanently delete this file/folder?</system:String> <system:String x:Key="plugin_explorer_deletefilefolderconfirm">Are you sure you want to permanently delete this file/folder?</system:String>
<system:String x:Key="plugin_explorer_deletefilefoldersuccess">Deletion successful</system:String> <system:String x:Key="plugin_explorer_deletefilefoldersuccess">Löschen erfolgreich</system:String>
<system:String x:Key="plugin_explorer_deletefilefoldersuccess_detail">Successfully deleted {0}</system:String> <system:String x:Key="plugin_explorer_deletefilefoldersuccess_detail">Successfully deleted {0}</system:String>
<system:String x:Key="plugin_explorer_globalActionKeywordInvalid">Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword</system:String> <system:String x:Key="plugin_explorer_globalActionKeywordInvalid">Die Zuweisung des globalen Aktions-Schlüsselwortes könnte zu viele Ergebnisse bei der Suche hervorrufen. Bitte wählen Sie ein spezielles Aktionswort</system:String>
<system:String x:Key="plugin_explorer_quickaccess_globalActionKeywordInvalid">Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword</system:String> <system:String x:Key="plugin_explorer_quickaccess_globalActionKeywordInvalid">Schnellzugriff kann nicht auf das globale Aktionswort gesetzt werden, wenn aktiviert. Bitte wählen Sie ein spezielles Aktionswort</system:String>
<system:String x:Key="plugin_explorer_windowsSearchServiceNotRunning">The required service for Windows Index Search does not appear to be running</system:String> <system:String x:Key="plugin_explorer_windowsSearchServiceNotRunning">Der benötigte Dienst für Windows Indexsuche scheint nicht ausgeführt zu werden</system:String>
<system:String x:Key="plugin_explorer_windowsSearchServiceFix">To fix this, start the Windows Search service. Select here to remove this warning</system:String> <system:String x:Key="plugin_explorer_windowsSearchServiceFix">Um dies zu beheben, starten Sie den Windows-Suchdienst. Klicken Sie hier, um diese Warnung zu entfernen</system:String>
<system:String x:Key="plugin_explorer_alternative">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</system:String> <system:String x:Key="plugin_explorer_alternative">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</system:String>
<system:String x:Key="plugin_explorer_alternative_title">Explorer Alternative</system:String> <system:String x:Key="plugin_explorer_alternative_title">Explorer Alternative</system:String>
<system:String x:Key="plugin_explorer_directoryinfosearch_error">Error occurred during search: {0}</system:String> <system:String x:Key="plugin_explorer_directoryinfosearch_error">Error occurred during search: {0}</system:String>
<system:String x:Key="plugin_explorer_opendir_error">Could not open folder</system:String> <system:String x:Key="plugin_explorer_opendir_error">Could not open folder</system:String>
@ -24,28 +24,28 @@
<system:String x:Key="plugin_explorer_edit">Bearbeiten</system:String> <system:String x:Key="plugin_explorer_edit">Bearbeiten</system:String>
<system:String x:Key="plugin_explorer_add">Hinzufügen</system:String> <system:String x:Key="plugin_explorer_add">Hinzufügen</system:String>
<system:String x:Key="plugin_explorer_generalsetting_header">General Setting</system:String> <system:String x:Key="plugin_explorer_generalsetting_header">General Setting</system:String>
<system:String x:Key="plugin_explorer_manageactionkeywords_header">Customise Action Keywords</system:String> <system:String x:Key="plugin_explorer_manageactionkeywords_header">Aktions-Schlüsselwörter ändern</system:String>
<system:String x:Key="plugin_explorer_quickaccesslinks_header">Quick Access Links</system:String> <system:String x:Key="plugin_explorer_quickaccesslinks_header">Schnellzugriff-Links</system:String>
<system:String x:Key="plugin_explorer_everything_setting_header">Everything Setting</system:String> <system:String x:Key="plugin_explorer_everything_setting_header">Everything Setting</system:String>
<system:String x:Key="plugin_explorer_everything_sort_option">Sort Option:</system:String> <system:String x:Key="plugin_explorer_everything_sort_option">Sort Option:</system:String>
<system:String x:Key="plugin_explorer_everything_installed_path">Everything Path:</system:String> <system:String x:Key="plugin_explorer_everything_installed_path">Everything Path:</system:String>
<system:String x:Key="plugin_explorer_launch_hidden">Launch Hidden</system:String> <system:String x:Key="plugin_explorer_launch_hidden">Launch Hidden</system:String>
<system:String x:Key="plugin_explorer_editor_path">Editor pad</system:String> <system:String x:Key="plugin_explorer_editor_path">Editor pad</system:String>
<system:String x:Key="plugin_explorer_shell_path">Shell Path</system:String> <system:String x:Key="plugin_explorer_shell_path">Shell Path</system:String>
<system:String x:Key="plugin_explorer_indexsearchexcludedpaths_header">Index Search Excluded Paths</system:String> <system:String x:Key="plugin_explorer_indexsearchexcludedpaths_header">Indexsuche ausgeschlossen Pfade</system:String>
<system:String x:Key="plugin_explorer_use_location_as_working_dir">Verwenden Suchergebnis Standort als ausführbare Arbeitsverzeichnis</system:String> <system:String x:Key="plugin_explorer_use_location_as_working_dir">Verwenden Suchergebnis Standort als ausführbare Arbeitsverzeichnis</system:String>
<system:String x:Key="plugin_explorer_default_open_in_file_manager">Hit Enter to open folder in Default File Manager</system:String> <system:String x:Key="plugin_explorer_default_open_in_file_manager">Hit Enter to open folder in Default File Manager</system:String>
<system:String x:Key="plugin_explorer_usewindowsindexfordirectorysearch">Use Index Search For Path Search</system:String> <system:String x:Key="plugin_explorer_usewindowsindexfordirectorysearch">Use Index Search For Path Search</system:String>
<system:String x:Key="plugin_explorer_manageindexoptions">Indexing Options</system:String> <system:String x:Key="plugin_explorer_manageindexoptions">Indexierungsoptionen</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_search">Suche:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_search">Suche:</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_pathsearch">Pfad-Suche:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_pathsearch">Pfad-Suche:</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Suche nach Dateiinhalten:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Suche nach Dateiinhalten:</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index-Suche:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index-Suche:</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Schnellzugriff:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Schnellzugriff:</system:String>
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String> <system:String x:Key="plugin_explorer_actionkeyword_current">Aktuelles Aktions-Schlüsselwort</system:String>
<system:String x:Key="plugin_explorer_actionkeyword_done">Fertig</system:String> <system:String x:Key="plugin_explorer_actionkeyword_done">Fertig</system:String>
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Aktiviert</system:String> <system:String x:Key="plugin_explorer_actionkeyword_enabled">Aktiviert</system:String>
<system:String x:Key="plugin_explorer_actionkeyword_enabled_tooltip">When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword</system:String> <system:String x:Key="plugin_explorer_actionkeyword_enabled_tooltip">Wenn diese Funktion deaktiviert ist, führt Flow diese Suchoption nicht aus und kehrt zusätzlich zu '*' zurück, um das Aktionsschlüsselwort freizugeben</system:String>
<system:String x:Key="plugin_explorer_engine_everything">Everything</system:String> <system:String x:Key="plugin_explorer_engine_everything">Everything</system:String>
<system:String x:Key="plugin_explorer_engine_windows_index">Windows Index</system:String> <system:String x:Key="plugin_explorer_engine_windows_index">Windows Index</system:String>
<system:String x:Key="plugin_explorer_path_enumeration_engine_none">Direct Enumeration</system:String> <system:String x:Key="plugin_explorer_path_enumeration_engine_none">Direct Enumeration</system:String>
@ -78,18 +78,18 @@
<system:String x:Key="plugin_explorer_deletefilefolder_subtitle">Ausgewählte löschen</system:String> <system:String x:Key="plugin_explorer_deletefilefolder_subtitle">Ausgewählte löschen</system:String>
<system:String x:Key="plugin_explorer_runasdifferentuser">Als anderer Benutzer ausführen</system:String> <system:String x:Key="plugin_explorer_runasdifferentuser">Als anderer Benutzer ausführen</system:String>
<system:String x:Key="plugin_explorer_runasdifferentuser_subtitle">Ausgewählte mit einem anderen Benutzerkonto ausführen</system:String> <system:String x:Key="plugin_explorer_runasdifferentuser_subtitle">Ausgewählte mit einem anderen Benutzerkonto ausführen</system:String>
<system:String x:Key="plugin_explorer_opencontainingfolder">Open containing folder</system:String> <system:String x:Key="plugin_explorer_opencontainingfolder">Enthaltenden Ordner öffnen</system:String>
<system:String x:Key="plugin_explorer_opencontainingfolder_subtitle">Open the location that contains current item</system:String> <system:String x:Key="plugin_explorer_opencontainingfolder_subtitle">Open the location that contains current item</system:String>
<system:String x:Key="plugin_explorer_openwitheditor">Open With Editor:</system:String> <system:String x:Key="plugin_explorer_openwitheditor">Öffnen mit Editor:</system:String>
<system:String x:Key="plugin_explorer_openwitheditor_error">Failed to open file at {0} with Editor {1} at {2}</system:String> <system:String x:Key="plugin_explorer_openwitheditor_error">Failed to open file at {0} with Editor {1} at {2}</system:String>
<system:String x:Key="plugin_explorer_openwithshell">Open With Shell:</system:String> <system:String x:Key="plugin_explorer_openwithshell">Open With Shell:</system:String>
<system:String x:Key="plugin_explorer_openwithshell_error">Failed to open folder {0} with Shell {1} at {2}</system:String> <system:String x:Key="plugin_explorer_openwithshell_error">Failed to open folder {0} with Shell {1} at {2}</system:String>
<system:String x:Key="plugin_explorer_excludefromindexsearch">Exclude current and sub-directories from Index Search</system:String> <system:String x:Key="plugin_explorer_excludefromindexsearch">Aktuelles und Unterverzeichnisse von der Indexsuche ausschließen</system:String>
<system:String x:Key="plugin_explorer_excludedfromindexsearch_msg">Excluded from Index Search</system:String> <system:String x:Key="plugin_explorer_excludedfromindexsearch_msg">Von der Indexsuche ausgeschlossen</system:String>
<system:String x:Key="plugin_explorer_openindexingoptions">Open Windows Indexing Options</system:String> <system:String x:Key="plugin_explorer_openindexingoptions">Windows Indexoptionen öffnen</system:String>
<system:String x:Key="plugin_explorer_openindexingoptions_subtitle">Manage indexed files and folders</system:String> <system:String x:Key="plugin_explorer_openindexingoptions_subtitle">Indexierte Dateien und Ordner verwalten</system:String>
<system:String x:Key="plugin_explorer_openindexingoptions_errormsg">Failed to open Windows Indexing Options</system:String> <system:String x:Key="plugin_explorer_openindexingoptions_errormsg">Fehler beim Öffnen der Windows-Indexierungsoptionen</system:String>
<system:String x:Key="plugin_explorer_add_to_quickaccess_title">Add to Quick Access</system:String> <system:String x:Key="plugin_explorer_add_to_quickaccess_title">Zu Schnellzugriff hinzufügen</system:String>
<system:String x:Key="plugin_explorer_add_to_quickaccess_subtitle">Add current item to Quick Access</system:String> <system:String x:Key="plugin_explorer_add_to_quickaccess_subtitle">Add current item to Quick Access</system:String>
<system:String x:Key="plugin_explorer_addfilefoldersuccess">Successfully Added</system:String> <system:String x:Key="plugin_explorer_addfilefoldersuccess">Successfully Added</system:String>
<system:String x:Key="plugin_explorer_addfilefoldersuccess_detail">Successfully added to Quick Access</system:String> <system:String x:Key="plugin_explorer_addfilefoldersuccess_detail">Successfully added to Quick Access</system:String>
@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Öffnen mit</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Programm zum Öffnen auswählen</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -102,6 +102,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -4,7 +4,7 @@
<!-- Dialogues --> <!-- Dialogues -->
<system:String x:Key="plugin_explorer_make_selection_warning">Por favor haga una selección primero</system:String> <system:String x:Key="plugin_explorer_make_selection_warning">Por favor haga una selección primero</system:String>
<system:String x:Key="plugin_explorer_select_folder_link_warning">Por favor, seleccione un enlace de carpeta</system:String> <system:String x:Key="plugin_explorer_select_folder_link_warning">Por favor, seleccione un enlace de carpeta</system:String>
<system:String x:Key="plugin_explorer_delete_folder_link">¿Está seguro que desea eliminar {0}?</system:String> <system:String x:Key="plugin_explorer_delete_folder_link">¿Está seguro de que desea eliminar {0}?</system:String>
<system:String x:Key="plugin_explorer_deletefileconfirm">¿Está seguro que desea eliminar permanentemente este archivo?</system:String> <system:String x:Key="plugin_explorer_deletefileconfirm">¿Está seguro que desea eliminar permanentemente este archivo?</system:String>
<system:String x:Key="plugin_explorer_deletefilefolderconfirm">¿Está seguro de que desea eliminar permanentemente este/esta archivo/carpeta?</system:String> <system:String x:Key="plugin_explorer_deletefilefolderconfirm">¿Está seguro de que desea eliminar permanentemente este/esta archivo/carpeta?</system:String>
<system:String x:Key="plugin_explorer_deletefilefoldersuccess">Eliminación correcta</system:String> <system:String x:Key="plugin_explorer_deletefilefoldersuccess">Eliminación correcta</system:String>
@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Eliminar del acceso rápido</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Eliminar del acceso rápido</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Elimina elemento actual del acceso rápido</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Elimina elemento actual del acceso rápido</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Mostrar menú contextual de Windows</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Mostrar menú contextual de Windows</system:String>
<system:String x:Key="plugin_explorer_openwith">Abrir con</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Seleccione un programa para abrir con</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} libre de {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} libre de {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Supprimer de l'accès rapide</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Supprimer de l'accès rapide</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Supprimer l'élément de l'accès rapide</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Supprimer l'élément de l'accès rapide</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Afficher le menu contextuel de Windows</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Afficher le menu contextuel de Windows</system:String>
<system:String x:Key="plugin_explorer_openwith">Ouvrir avec</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Sélectionnez un programme à ouvrir avec</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} libres sur {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} libres sur {1}</system:String>

View file

@ -5,37 +5,37 @@
<system:String x:Key="plugin_explorer_make_selection_warning">Effettua prima una selezione</system:String> <system:String x:Key="plugin_explorer_make_selection_warning">Effettua prima una selezione</system:String>
<system:String x:Key="plugin_explorer_select_folder_link_warning">Si prega di selezionare un collegamento alla cartella</system:String> <system:String x:Key="plugin_explorer_select_folder_link_warning">Si prega di selezionare un collegamento alla cartella</system:String>
<system:String x:Key="plugin_explorer_delete_folder_link">Sei sicuro di voler eliminare {0}?</system:String> <system:String x:Key="plugin_explorer_delete_folder_link">Sei sicuro di voler eliminare {0}?</system:String>
<system:String x:Key="plugin_explorer_deletefileconfirm">Are you sure you want to permanently delete this file?</system:String> <system:String x:Key="plugin_explorer_deletefileconfirm">Sei sicuro di voler eliminare definitivamente questo file?</system:String>
<system:String x:Key="plugin_explorer_deletefilefolderconfirm">Are you sure you want to permanently delete this file/folder?</system:String> <system:String x:Key="plugin_explorer_deletefilefolderconfirm">Sei sicuro di voler eliminare definitivamente questo/a file/cartella?</system:String>
<system:String x:Key="plugin_explorer_deletefilefoldersuccess">Eliminato con successo</system:String> <system:String x:Key="plugin_explorer_deletefilefoldersuccess">Eliminato con successo</system:String>
<system:String x:Key="plugin_explorer_deletefilefoldersuccess_detail">Successfully deleted {0}</system:String> <system:String x:Key="plugin_explorer_deletefilefoldersuccess_detail">{0} eliminato correttamente</system:String>
<system:String x:Key="plugin_explorer_globalActionKeywordInvalid">L'assegnazione della parola chiave globale potrebbe portare a troppi risultati durante la ricerca. Scegli una parola chiave specifica per l'azione</system:String> <system:String x:Key="plugin_explorer_globalActionKeywordInvalid">L'assegnazione della parola chiave globale potrebbe portare a troppi risultati durante la ricerca. Scegli una parola chiave specifica per l'azione</system:String>
<system:String x:Key="plugin_explorer_quickaccess_globalActionKeywordInvalid">L'accesso rapido non può essere impostato sulla parola chiave globale quando abilitata. Si prega di scegliere una parola chiave specifica</system:String> <system:String x:Key="plugin_explorer_quickaccess_globalActionKeywordInvalid">L'accesso rapido non può essere impostato sulla parola chiave globale quando abilitata. Si prega di scegliere una parola chiave specifica</system:String>
<system:String x:Key="plugin_explorer_windowsSearchServiceNotRunning">Il servizio richiesto per Windows Index Search non sembra essere in esecuzione</system:String> <system:String x:Key="plugin_explorer_windowsSearchServiceNotRunning">Il servizio richiesto per Windows Index Search non sembra essere in esecuzione</system:String>
<system:String x:Key="plugin_explorer_windowsSearchServiceFix">Per risolvere il problema, avvia il servizio Ricerca Windows. Seleziona qui per rimuovere questo avviso</system:String> <system:String x:Key="plugin_explorer_windowsSearchServiceFix">Per risolvere il problema, avvia il servizio Ricerca Windows. Seleziona qui per rimuovere questo avviso</system:String>
<system:String x:Key="plugin_explorer_alternative">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</system:String> <system:String x:Key="plugin_explorer_alternative">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</system:String>
<system:String x:Key="plugin_explorer_alternative_title">Alternativa all'Esplora Risorse</system:String> <system:String x:Key="plugin_explorer_alternative_title">Alternativa all'Esplora Risorse</system:String>
<system:String x:Key="plugin_explorer_directoryinfosearch_error">Error occurred during search: {0}</system:String> <system:String x:Key="plugin_explorer_directoryinfosearch_error">Errore durante la ricerca: {0}</system:String>
<system:String x:Key="plugin_explorer_opendir_error">Could not open folder</system:String> <system:String x:Key="plugin_explorer_opendir_error">Impossibile aprire la cartella</system:String>
<system:String x:Key="plugin_explorer_openfile_error">Could not open file</system:String> <system:String x:Key="plugin_explorer_openfile_error">Impossibile aprire il file</system:String>
<!-- Controls --> <!-- Controls -->
<system:String x:Key="plugin_explorer_delete">Cancella</system:String> <system:String x:Key="plugin_explorer_delete">Cancella</system:String>
<system:String x:Key="plugin_explorer_edit">Modifica</system:String> <system:String x:Key="plugin_explorer_edit">Modifica</system:String>
<system:String x:Key="plugin_explorer_add">Aggiungi</system:String> <system:String x:Key="plugin_explorer_add">Aggiungi</system:String>
<system:String x:Key="plugin_explorer_generalsetting_header">General Setting</system:String> <system:String x:Key="plugin_explorer_generalsetting_header">Impostazione Generale</system:String>
<system:String x:Key="plugin_explorer_manageactionkeywords_header">Personalizza Parola Chiave</system:String> <system:String x:Key="plugin_explorer_manageactionkeywords_header">Personalizza Parola Chiave</system:String>
<system:String x:Key="plugin_explorer_quickaccesslinks_header">Collegamenti ad Accesso Rapido</system:String> <system:String x:Key="plugin_explorer_quickaccesslinks_header">Collegamenti ad Accesso Rapido</system:String>
<system:String x:Key="plugin_explorer_everything_setting_header">Everything Setting</system:String> <system:String x:Key="plugin_explorer_everything_setting_header">Impostazioni di Everything</system:String>
<system:String x:Key="plugin_explorer_everything_sort_option">Sort Option:</system:String> <system:String x:Key="plugin_explorer_everything_sort_option">Opzioni di ordinamento:</system:String>
<system:String x:Key="plugin_explorer_everything_installed_path">Everything Path:</system:String> <system:String x:Key="plugin_explorer_everything_installed_path">Percorso di Everything:</system:String>
<system:String x:Key="plugin_explorer_launch_hidden">Launch Hidden</system:String> <system:String x:Key="plugin_explorer_launch_hidden">Avvia nascosto</system:String>
<system:String x:Key="plugin_explorer_editor_path">Tasto di accesso rapido alla finestra</system:String> <system:String x:Key="plugin_explorer_editor_path">Tasto di accesso rapido alla finestra</system:String>
<system:String x:Key="plugin_explorer_shell_path">Shell Path</system:String> <system:String x:Key="plugin_explorer_shell_path">Percorso Shell</system:String>
<system:String x:Key="plugin_explorer_indexsearchexcludedpaths_header">Percorsi Esclusi dall'Indice di Ricerca</system:String> <system:String x:Key="plugin_explorer_indexsearchexcludedpaths_header">Percorsi Esclusi dall'Indice di Ricerca</system:String>
<system:String x:Key="plugin_explorer_use_location_as_working_dir">Utilizza il percorso ottenuto dalla ricerca come cartella di lavoro</system:String> <system:String x:Key="plugin_explorer_use_location_as_working_dir">Utilizza il percorso ottenuto dalla ricerca come cartella di lavoro</system:String>
<system:String x:Key="plugin_explorer_default_open_in_file_manager">Hit Enter to open folder in Default File Manager</system:String> <system:String x:Key="plugin_explorer_default_open_in_file_manager">Premi Invio per aprire la cartella nel gestore file predefinito</system:String>
<system:String x:Key="plugin_explorer_usewindowsindexfordirectorysearch">Use Index Search For Path Search</system:String> <system:String x:Key="plugin_explorer_usewindowsindexfordirectorysearch">Usa Indice di Ricerca per la Ricerca Percorso</system:String>
<system:String x:Key="plugin_explorer_manageindexoptions">Opzioni di Indicizzazione</system:String> <system:String x:Key="plugin_explorer_manageindexoptions">Opzioni di Indicizzazione</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_search">Cerca:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_search">Cerca:</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_pathsearch">Ricerca Percorso:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_pathsearch">Ricerca Percorso:</system:String>
@ -47,50 +47,50 @@
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Abilitato</system:String> <system:String x:Key="plugin_explorer_actionkeyword_enabled">Abilitato</system:String>
<system:String x:Key="plugin_explorer_actionkeyword_enabled_tooltip">Quando disabilitato Flow non eseguirà questa opzione di ricerca, e ripristinerà a &quot;*&quot; per liberare la parola chiave</system:String> <system:String x:Key="plugin_explorer_actionkeyword_enabled_tooltip">Quando disabilitato Flow non eseguirà questa opzione di ricerca, e ripristinerà a &quot;*&quot; per liberare la parola chiave</system:String>
<system:String x:Key="plugin_explorer_engine_everything">Tutto</system:String> <system:String x:Key="plugin_explorer_engine_everything">Tutto</system:String>
<system:String x:Key="plugin_explorer_engine_windows_index">Windows Index</system:String> <system:String x:Key="plugin_explorer_engine_windows_index">Indice Di Windows</system:String>
<system:String x:Key="plugin_explorer_path_enumeration_engine_none">Direct Enumeration</system:String> <system:String x:Key="plugin_explorer_path_enumeration_engine_none">Enumerazione Diretta</system:String>
<system:String x:Key="plugin_explorer_file_editor_path">Percorso dell'editor di file</system:String> <system:String x:Key="plugin_explorer_file_editor_path">Percorso dell'editor di file</system:String>
<system:String x:Key="plugin_explorer_folder_editor_path">Percorso dell'editor delle cartelle</system:String> <system:String x:Key="plugin_explorer_folder_editor_path">Percorso dell'editor delle cartelle</system:String>
<system:String x:Key="plugin_explorer_Content_Search_Engine">Content Search Engine</system:String> <system:String x:Key="plugin_explorer_Content_Search_Engine">Motore di Ricerca dei Contenuti</system:String>
<system:String x:Key="plugin_explorer_Directory_Recursive_Search_Engine">Directory Recursive Search Engine</system:String> <system:String x:Key="plugin_explorer_Directory_Recursive_Search_Engine">Motore di Ricerca Ricorsivo sulle Catelle</system:String>
<system:String x:Key="plugin_explorer_Index_Search_Engine">Index Search Engine</system:String> <system:String x:Key="plugin_explorer_Index_Search_Engine">Indice del Motore di Ricerca</system:String>
<system:String x:Key="plugin_explorer_Open_Window_Index_Option">Open Windows Index Option</system:String> <system:String x:Key="plugin_explorer_Open_Window_Index_Option">Apri Opzioni di Indicizzazione di Windows</system:String>
<!-- Plugin Infos --> <!-- Plugin Infos -->
<system:String x:Key="plugin_explorer_plugin_name">Esplora Risorse</system:String> <system:String x:Key="plugin_explorer_plugin_name">Esplora Risorse</system:String>
<system:String x:Key="plugin_explorer_plugin_description">Find and manage files and folders via Windows Search or Everything</system:String> <system:String x:Key="plugin_explorer_plugin_description">Trova e gestisci file e cartelle tramite Ricerca di Windows o Everything</system:String>
<!-- Plugin Tooltip --> <!-- Plugin Tooltip -->
<system:String x:Key="plugin_explorer_plugin_ToolTipOpenDirectory">Ctrl + Enter to open the directory</system:String> <system:String x:Key="plugin_explorer_plugin_ToolTipOpenDirectory">Ctrl + Invio per aprire la cartella</system:String>
<system:String x:Key="plugin_explorer_plugin_ToolTipOpenContainingFolder">Ctrl + Enter to open the containing folder</system:String> <system:String x:Key="plugin_explorer_plugin_ToolTipOpenContainingFolder">Ctrl + Invio per aprire la cartella che lo contiene</system:String>
<!-- Context menu items --> <!-- Context menu items -->
<system:String x:Key="plugin_explorer_copypath">Copia percorso</system:String> <system:String x:Key="plugin_explorer_copypath">Copia percorso</system:String>
<system:String x:Key="plugin_explorer_copypath_subtitle">Copy path of current item to clipboard</system:String> <system:String x:Key="plugin_explorer_copypath_subtitle">Copia negli appunti il percorso dell'elemento corrente</system:String>
<system:String x:Key="plugin_explorer_copyfilefolder">Copia</system:String> <system:String x:Key="plugin_explorer_copyfilefolder">Copia</system:String>
<system:String x:Key="plugin_explorer_copyfile_subtitle">Copy current file to clipboard</system:String> <system:String x:Key="plugin_explorer_copyfile_subtitle">Copia file corrente negli appunti</system:String>
<system:String x:Key="plugin_explorer_copyfolder_subtitle">Copy current folder to clipboard</system:String> <system:String x:Key="plugin_explorer_copyfolder_subtitle">Copia cartella corrente negli appunti</system:String>
<system:String x:Key="plugin_explorer_deletefilefolder">Cancella</system:String> <system:String x:Key="plugin_explorer_deletefilefolder">Cancella</system:String>
<system:String x:Key="plugin_explorer_deletefile_subtitle">Permanently delete current file</system:String> <system:String x:Key="plugin_explorer_deletefile_subtitle">Elimina permanentemente il file corrente</system:String>
<system:String x:Key="plugin_explorer_deletefolder_subtitle">Permanently delete current folder</system:String> <system:String x:Key="plugin_explorer_deletefolder_subtitle">Elimina definitivamente la cartella corrente</system:String>
<system:String x:Key="plugin_explorer_path">Percorso:</system:String> <system:String x:Key="plugin_explorer_path">Percorso:</system:String>
<system:String x:Key="plugin_explorer_deletefilefolder_subtitle">Elimina il selezionato</system:String> <system:String x:Key="plugin_explorer_deletefilefolder_subtitle">Elimina il selezionato</system:String>
<system:String x:Key="plugin_explorer_runasdifferentuser">Esegui come utente differente</system:String> <system:String x:Key="plugin_explorer_runasdifferentuser">Esegui come utente differente</system:String>
<system:String x:Key="plugin_explorer_runasdifferentuser_subtitle">Esegui la selezione utilizzando un altro account utente</system:String> <system:String x:Key="plugin_explorer_runasdifferentuser_subtitle">Esegui la selezione utilizzando un altro account utente</system:String>
<system:String x:Key="plugin_explorer_opencontainingfolder">Apri percorso file</system:String> <system:String x:Key="plugin_explorer_opencontainingfolder">Apri percorso file</system:String>
<system:String x:Key="plugin_explorer_opencontainingfolder_subtitle">Open the location that contains current item</system:String> <system:String x:Key="plugin_explorer_opencontainingfolder_subtitle">Apri la posizione che contiene l'elemento corrente</system:String>
<system:String x:Key="plugin_explorer_openwitheditor">Apri nell'Editor:</system:String> <system:String x:Key="plugin_explorer_openwitheditor">Apri nell'Editor:</system:String>
<system:String x:Key="plugin_explorer_openwitheditor_error">Failed to open file at {0} with Editor {1} at {2}</system:String> <system:String x:Key="plugin_explorer_openwitheditor_error">Apertura del file in {0} con l'editor {1} in {2} non riuscita</system:String>
<system:String x:Key="plugin_explorer_openwithshell">Open With Shell:</system:String> <system:String x:Key="plugin_explorer_openwithshell">Apri Con Shell:</system:String>
<system:String x:Key="plugin_explorer_openwithshell_error">Failed to open folder {0} with Shell {1} at {2}</system:String> <system:String x:Key="plugin_explorer_openwithshell_error">Apertura della cartella {0} con Shell {1} in {2} non riuscita</system:String>
<system:String x:Key="plugin_explorer_excludefromindexsearch">Escludi cartelle e sottocartelle dall'Indice di Ricerca</system:String> <system:String x:Key="plugin_explorer_excludefromindexsearch">Escludi cartelle e sottocartelle dall'Indice di Ricerca</system:String>
<system:String x:Key="plugin_explorer_excludedfromindexsearch_msg">Escludi dall'Indice di Ricerca</system:String> <system:String x:Key="plugin_explorer_excludedfromindexsearch_msg">Escludi dall'Indice di Ricerca</system:String>
<system:String x:Key="plugin_explorer_openindexingoptions">Apri Opzioni di Indicizzazione di Windows</system:String> <system:String x:Key="plugin_explorer_openindexingoptions">Apri Opzioni di Indicizzazione di Windows</system:String>
<system:String x:Key="plugin_explorer_openindexingoptions_subtitle">Gestisci file e cartelle indicizzati</system:String> <system:String x:Key="plugin_explorer_openindexingoptions_subtitle">Gestisci file e cartelle indicizzati</system:String>
<system:String x:Key="plugin_explorer_openindexingoptions_errormsg">Impossibile aprire le Opzioni di Indicizzazione di Windows</system:String> <system:String x:Key="plugin_explorer_openindexingoptions_errormsg">Impossibile aprire le Opzioni di Indicizzazione di Windows</system:String>
<system:String x:Key="plugin_explorer_add_to_quickaccess_title">Aggiungi ad Accesso Rapido</system:String> <system:String x:Key="plugin_explorer_add_to_quickaccess_title">Aggiungi ad Accesso Rapido</system:String>
<system:String x:Key="plugin_explorer_add_to_quickaccess_subtitle">Add current item to Quick Access</system:String> <system:String x:Key="plugin_explorer_add_to_quickaccess_subtitle">Aggiungi elemento corrente all'Accesso Rapido</system:String>
<system:String x:Key="plugin_explorer_addfilefoldersuccess">Aggiunto con successo</system:String> <system:String x:Key="plugin_explorer_addfilefoldersuccess">Aggiunto con successo</system:String>
<system:String x:Key="plugin_explorer_addfilefoldersuccess_detail">Aggiunto con successo ad Accesso Rapido</system:String> <system:String x:Key="plugin_explorer_addfilefoldersuccess_detail">Aggiunto con successo ad Accesso Rapido</system:String>
<system:String x:Key="plugin_explorer_removefilefoldersuccess">Rimosso con Successo</system:String> <system:String x:Key="plugin_explorer_removefilefoldersuccess">Rimosso con Successo</system:String>
@ -98,20 +98,22 @@
<system:String x:Key="plugin_explorer_contextmenu_titletooltip">Aggiungi ad Accesso Rapido in modo che possa essere aperto con la parola chiave di ricerca dell'Esplora Risorse</system:String> <system:String x:Key="plugin_explorer_contextmenu_titletooltip">Aggiungi ad Accesso Rapido in modo che possa essere aperto con la parola chiave di ricerca dell'Esplora Risorse</system:String>
<system:String x:Key="plugin_explorer_contextmenu_remove_titletooltip">Rimuovi da Accesso Rapido</system:String> <system:String x:Key="plugin_explorer_contextmenu_remove_titletooltip">Rimuovi da Accesso Rapido</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Rimuovi da Accesso Rapido</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Rimuovi da Accesso Rapido</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Rimuovi elemento corrente dall'Accesso Rapido</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Mostra Menu Contestuale di Windows</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} disponibili su {1}</system:String>
<system:String x:Key="plugin_explorer_openresultfolder">Open in Default File Manager</system:String> <system:String x:Key="plugin_explorer_openresultfolder">Aprire con il Gestore File Predefinito</system:String>
<system:String x:Key="plugin_explorer_openresultfolder_subtitle">Use '&gt;' to search in this directory, '*' to search for file extensions or '&gt;*' to combine both searches.</system:String> <system:String x:Key="plugin_explorer_openresultfolder_subtitle">Usa '&gt;' per cercare in questa directory, '*' per cercare estensioni file o '&gt;*' per combinare entrambe le ricerche.</system:String>
<!-- Everything --> <!-- Everything -->
<system:String x:Key="flowlauncher_plugin_everything_sdk_issue">Failed to load Everything SDK</system:String> <system:String x:Key="flowlauncher_plugin_everything_sdk_issue">Impossibile caricare l'SDK di Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_is_not_running">Attenzione: Il servizio &quot;Everything&quot; non è in esecuzione</system:String> <system:String x:Key="flowlauncher_plugin_everything_is_not_running">Attenzione: Il servizio &quot;Everything&quot; non è in esecuzione</system:String>
<system:String x:Key="flowlauncher_plugin_everything_query_error">Errore nell'interrogazione di Everything</system:String> <system:String x:Key="flowlauncher_plugin_everything_query_error">Errore nell'interrogazione di Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by">Ordina per</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by">Ordina per</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_name">Name</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_name">Nome</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_path">Percorso</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_path">Percorso</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_size">Dimensioni</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_size">Dimensioni</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_extension">Estensione</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_extension">Estensione</system:String>
@ -128,16 +130,16 @@
<system:String x:Key="flowlauncher_plugin_everything_sort_by_descending">↓</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_descending">↓</system:String>
<system:String x:Key="flowlauncher_plugin_everything_nonfastsort_warning">Attenzione: Questa non è un'opzione di ordinamento rapido, le ricerche potrebbero essere lente</system:String> <system:String x:Key="flowlauncher_plugin_everything_nonfastsort_warning">Attenzione: Questa non è un'opzione di ordinamento rapido, le ricerche potrebbero essere lente</system:String>
<system:String x:Key="flowlauncher_plugin_everything_search_fullpath">Search Full Path</system:String> <system:String x:Key="flowlauncher_plugin_everything_search_fullpath">Cerca Percorso Completo</system:String>
<system:String x:Key="flowlauncher_plugin_everything_click_to_launch_or_install">Click to launch or install Everything</system:String> <system:String x:Key="flowlauncher_plugin_everything_click_to_launch_or_install">Clicca per avviare o installare Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installing_title">Installazione di Everything</system:String> <system:String x:Key="flowlauncher_plugin_everything_installing_title">Installazione di Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installing_subtitle">Installazione di everything. Si prega di attendere...</system:String> <system:String x:Key="flowlauncher_plugin_everything_installing_subtitle">Installazione di everything. Si prega di attendere...</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installationsuccess_subtitle">Everything è stato installato con successo</system:String> <system:String x:Key="flowlauncher_plugin_everything_installationsuccess_subtitle">Everything è stato installato con successo</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installationfailed_subtitle">Impossibile installare automaticamente il servizio Everything. Si prega di installarlo manualmente da https://www.voidtools.com</system:String> <system:String x:Key="flowlauncher_plugin_everything_installationfailed_subtitle">Impossibile installare automaticamente il servizio Everything. Si prega di installarlo manualmente da https://www.voidtools.com</system:String>
<system:String x:Key="flowlauncher_plugin_everything_run_service">Premi per avviare</system:String> <system:String x:Key="flowlauncher_plugin_everything_run_service">Premi per avviare</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installing_select">Impossibile trovare l'installazione di Everything, vuoi inserire manualmente un percorso? {0} {0} Premi no per installare automaticamente Everything</system:String> <system:String x:Key="flowlauncher_plugin_everything_installing_select">Impossibile trovare l'installazione di Everything, vuoi inserire manualmente un percorso? {0} {0} Premi no per installare automaticamente Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_enable_content_search">Do you want to enable content search for Everything?</system:String> <system:String x:Key="flowlauncher_plugin_everything_enable_content_search">Vuoi abilitare la ricerca di contenuti per Everything?</system:String>
<system:String x:Key="flowlauncher_plugin_everything_enable_content_search_tips">It can be very slow without index (which is only supported in Everything v1.5+)</system:String> <system:String x:Key="flowlauncher_plugin_everything_enable_content_search_tips">Può essere molto lento senza indice (che è supportato solo in Everything v1.5+)</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">빠른 접근에서 제거</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">빠른 접근에서 제거</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">이 항목을 빠른 접근에서 제거</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">이 항목을 빠른 접근에서 제거</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">우클릭 메뉴 보기</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">우클릭 메뉴 보기</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -2,10 +2,10 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<!-- Dialogues --> <!-- Dialogues -->
<system:String x:Key="plugin_explorer_make_selection_warning">Please make a selection first</system:String> <system:String x:Key="plugin_explorer_make_selection_warning">Pierw dokonaj wyboru</system:String>
<system:String x:Key="plugin_explorer_select_folder_link_warning">Musisz wybrać któryś folder z listy</system:String> <system:String x:Key="plugin_explorer_select_folder_link_warning">Musisz wybrać któryś folder z listy</system:String>
<system:String x:Key="plugin_explorer_delete_folder_link">Czy jesteś pewien że chcesz usunąć {0}?</system:String> <system:String x:Key="plugin_explorer_delete_folder_link">Czy jesteś pewien że chcesz usunąć {0}?</system:String>
<system:String x:Key="plugin_explorer_deletefileconfirm">Are you sure you want to permanently delete this file?</system:String> <system:String x:Key="plugin_explorer_deletefileconfirm">Jesteś pewny, że chcesz usunąć ten plik trwale?</system:String>
<system:String x:Key="plugin_explorer_deletefilefolderconfirm">Are you sure you want to permanently delete this file/folder?</system:String> <system:String x:Key="plugin_explorer_deletefilefolderconfirm">Are you sure you want to permanently delete this file/folder?</system:String>
<system:String x:Key="plugin_explorer_deletefilefoldersuccess">Deletion successful</system:String> <system:String x:Key="plugin_explorer_deletefilefoldersuccess">Deletion successful</system:String>
<system:String x:Key="plugin_explorer_deletefilefoldersuccess_detail">Successfully deleted {0}</system:String> <system:String x:Key="plugin_explorer_deletefilefoldersuccess_detail">Successfully deleted {0}</system:String>
@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remover do acesso rápido</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remover do acesso rápido</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remover item do Acesso rápido</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remover item do Acesso rápido</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Mostrar menu de contexto do Windows</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Mostrar menu de contexto do Windows</system:String>
<system:String x:Key="plugin_explorer_openwith">Abrir com</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Selecione o programa a utilizar</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} livre de {1} no total</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} livre de {1} no total</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Odstráni z Rýchleho prístupu</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Odstráni z Rýchleho prístupu</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Odstrániť aktuálnu položku z Rýchleho prístupu</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Odstrániť aktuálnu položku z Rýchleho prístupu</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Zobraziť kontextovú ponuku Windowsu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Zobraziť kontextovú ponuku Windowsu</system:String>
<system:String x:Key="plugin_explorer_openwith">Otvoriť s</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Vyberte program, ktorým chcete otvoriť súbor</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">Voľných {0} z {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">Voľných {0} z {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -2,142 +2,144 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<!-- Dialogues --> <!-- Dialogues -->
<system:String x:Key="plugin_explorer_make_selection_warning">Please make a selection first</system:String> <system:String x:Key="plugin_explorer_make_selection_warning">Будь ласка, спочатку зробіть вибір</system:String>
<system:String x:Key="plugin_explorer_select_folder_link_warning">Please select a folder link</system:String> <system:String x:Key="plugin_explorer_select_folder_link_warning">Будь ласка, оберіть посилання на теку</system:String>
<system:String x:Key="plugin_explorer_delete_folder_link">Are you sure you want to delete {0}?</system:String> <system:String x:Key="plugin_explorer_delete_folder_link">Ви впевнені, що хочете видалити {0}?</system:String>
<system:String x:Key="plugin_explorer_deletefileconfirm">Are you sure you want to permanently delete this file?</system:String> <system:String x:Key="plugin_explorer_deletefileconfirm">Ви впевнені, що хочете назавжди видалити цей файл?</system:String>
<system:String x:Key="plugin_explorer_deletefilefolderconfirm">Are you sure you want to permanently delete this file/folder?</system:String> <system:String x:Key="plugin_explorer_deletefilefolderconfirm">Ви впевнені, що хочете назавжди видалити цей файл/теку?</system:String>
<system:String x:Key="plugin_explorer_deletefilefoldersuccess">Deletion successful</system:String> <system:String x:Key="plugin_explorer_deletefilefoldersuccess">Видалення виконано успішно</system:String>
<system:String x:Key="plugin_explorer_deletefilefoldersuccess_detail">Successfully deleted {0}</system:String> <system:String x:Key="plugin_explorer_deletefilefoldersuccess_detail">Успішно видалено {0}</system:String>
<system:String x:Key="plugin_explorer_globalActionKeywordInvalid">Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword</system:String> <system:String x:Key="plugin_explorer_globalActionKeywordInvalid">Використання глобального ключового слова дії може призвести до надмірної кількості результатів під час пошуку. Будь ласка, виберіть конкретне ключове слово дії</system:String>
<system:String x:Key="plugin_explorer_quickaccess_globalActionKeywordInvalid">Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword</system:String> <system:String x:Key="plugin_explorer_quickaccess_globalActionKeywordInvalid">Швидкий доступ не може бути встановлений на глобальне ключове слово дії, коли він увімкнений. Будь ласка, виберіть конкретне ключове слово дії</system:String>
<system:String x:Key="plugin_explorer_windowsSearchServiceNotRunning">The required service for Windows Index Search does not appear to be running</system:String> <system:String x:Key="plugin_explorer_windowsSearchServiceNotRunning">Здається, не запущено потрібну службу для індексного пошуку Windows</system:String>
<system:String x:Key="plugin_explorer_windowsSearchServiceFix">To fix this, start the Windows Search service. Select here to remove this warning</system:String> <system:String x:Key="plugin_explorer_windowsSearchServiceFix">Щоб виправити це, запустіть службу пошуку Windows. Натисніть тут, щоб прибрати це попередження</system:String>
<system:String x:Key="plugin_explorer_alternative">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</system:String> <system:String x:Key="plugin_explorer_alternative">Попередження вимкнено. Як альтернативу для пошуку файлів і папок, чи бажаєте ви встановити плагін Everything? {0}{0}Виберіть &quot;Так&quot;, щоб встановити плагін Everything, або &quot;Ні&quot;, щоб повернутися</system:String>
<system:String x:Key="plugin_explorer_alternative_title">Explorer Alternative</system:String> <system:String x:Key="plugin_explorer_alternative_title">Альтернативний провідник</system:String>
<system:String x:Key="plugin_explorer_directoryinfosearch_error">Error occurred during search: {0}</system:String> <system:String x:Key="plugin_explorer_directoryinfosearch_error">Виникла помилка під час пошуку: {0}</system:String>
<system:String x:Key="plugin_explorer_opendir_error">Could not open folder</system:String> <system:String x:Key="plugin_explorer_opendir_error">Не вдалося відкрити папку</system:String>
<system:String x:Key="plugin_explorer_openfile_error">Could not open file</system:String> <system:String x:Key="plugin_explorer_openfile_error">Не вдалося відкрити файл</system:String>
<!-- Controls --> <!-- Controls -->
<system:String x:Key="plugin_explorer_delete">Видалити</system:String> <system:String x:Key="plugin_explorer_delete">Видалити</system:String>
<system:String x:Key="plugin_explorer_edit">Редагувати</system:String> <system:String x:Key="plugin_explorer_edit">Редагувати</system:String>
<system:String x:Key="plugin_explorer_add">Додати</system:String> <system:String x:Key="plugin_explorer_add">Додати</system:String>
<system:String x:Key="plugin_explorer_generalsetting_header">General Setting</system:String> <system:String x:Key="plugin_explorer_generalsetting_header">Загальні налаштування</system:String>
<system:String x:Key="plugin_explorer_manageactionkeywords_header">Customise Action Keywords</system:String> <system:String x:Key="plugin_explorer_manageactionkeywords_header">Налаштувати ключові слова дії</system:String>
<system:String x:Key="plugin_explorer_quickaccesslinks_header">Quick Access Links</system:String> <system:String x:Key="plugin_explorer_quickaccesslinks_header">Посилання швидкого доступу</system:String>
<system:String x:Key="plugin_explorer_everything_setting_header">Everything Setting</system:String> <system:String x:Key="plugin_explorer_everything_setting_header">Налаштування Everything</system:String>
<system:String x:Key="plugin_explorer_everything_sort_option">Sort Option:</system:String> <system:String x:Key="plugin_explorer_everything_sort_option">Варіант сортування:</system:String>
<system:String x:Key="plugin_explorer_everything_installed_path">Everything Path:</system:String> <system:String x:Key="plugin_explorer_everything_installed_path">Шлях до Everything:</system:String>
<system:String x:Key="plugin_explorer_launch_hidden">Launch Hidden</system:String> <system:String x:Key="plugin_explorer_launch_hidden">Запустити приховано</system:String>
<system:String x:Key="plugin_explorer_editor_path">Editor Path</system:String> <system:String x:Key="plugin_explorer_editor_path">Шлях до редактора</system:String>
<system:String x:Key="plugin_explorer_shell_path">Shell Path</system:String> <system:String x:Key="plugin_explorer_shell_path">Шлях до оболонки Shell</system:String>
<system:String x:Key="plugin_explorer_indexsearchexcludedpaths_header">Index Search Excluded Paths</system:String> <system:String x:Key="plugin_explorer_indexsearchexcludedpaths_header">Виключені шляхи індексного пошуку</system:String>
<system:String x:Key="plugin_explorer_use_location_as_working_dir">Use search result's location as the working directory of the executable</system:String> <system:String x:Key="plugin_explorer_use_location_as_working_dir">Використовувати розташування результату пошуку як робочу директорію виконуваного файлу</system:String>
<system:String x:Key="plugin_explorer_default_open_in_file_manager">Hit Enter to open folder in Default File Manager</system:String> <system:String x:Key="plugin_explorer_default_open_in_file_manager">Натисніть Enter, щоб відкрити папку у файловому менеджері за замовчуванням</system:String>
<system:String x:Key="plugin_explorer_usewindowsindexfordirectorysearch">Use Index Search For Path Search</system:String> <system:String x:Key="plugin_explorer_usewindowsindexfordirectorysearch">Використовуйте індексний пошук для пошуку шляху</system:String>
<system:String x:Key="plugin_explorer_manageindexoptions">Indexing Options</system:String> <system:String x:Key="plugin_explorer_manageindexoptions">Параметри індексації</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_search">Search:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_search">Пошук:</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_pathsearch">Path Search:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_pathsearch">Пошук шляху:</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Пошук вмісту файлу:</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Індексний пошук:</system:String>
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Quick Access:</system:String> <system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Швидкий доступ:</system:String>
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String> <system:String x:Key="plugin_explorer_actionkeyword_current">Поточне ключове слово дії</system:String>
<system:String x:Key="plugin_explorer_actionkeyword_done">Готово</system:String> <system:String x:Key="plugin_explorer_actionkeyword_done">Готово</system:String>
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Enabled</system:String> <system:String x:Key="plugin_explorer_actionkeyword_enabled">Увімкнено</system:String>
<system:String x:Key="plugin_explorer_actionkeyword_enabled_tooltip">When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword</system:String> <system:String x:Key="plugin_explorer_actionkeyword_enabled_tooltip">Якщо вимкнено, Flow не виконуватиме цю опцію пошуку і додатково повернеться до '*', щоб звільнити ключове слово дії</system:String>
<system:String x:Key="plugin_explorer_engine_everything">Everything</system:String> <system:String x:Key="plugin_explorer_engine_everything">Everything</system:String>
<system:String x:Key="plugin_explorer_engine_windows_index">Windows Index</system:String> <system:String x:Key="plugin_explorer_engine_windows_index">Індекс Windows</system:String>
<system:String x:Key="plugin_explorer_path_enumeration_engine_none">Direct Enumeration</system:String> <system:String x:Key="plugin_explorer_path_enumeration_engine_none">Пряме перерахування</system:String>
<system:String x:Key="plugin_explorer_file_editor_path">Шлях редактора файлів</system:String> <system:String x:Key="plugin_explorer_file_editor_path">Шлях редактора файлів</system:String>
<system:String x:Key="plugin_explorer_folder_editor_path">Шлях редактора папок</system:String> <system:String x:Key="plugin_explorer_folder_editor_path">Шлях редактора папок</system:String>
<system:String x:Key="plugin_explorer_Content_Search_Engine">Content Search Engine</system:String> <system:String x:Key="plugin_explorer_Content_Search_Engine">Пошукова система контенту</system:String>
<system:String x:Key="plugin_explorer_Directory_Recursive_Search_Engine">Directory Recursive Search Engine</system:String> <system:String x:Key="plugin_explorer_Directory_Recursive_Search_Engine">Рекурсивна пошукова система за каталогом</system:String>
<system:String x:Key="plugin_explorer_Index_Search_Engine">Index Search Engine</system:String> <system:String x:Key="plugin_explorer_Index_Search_Engine">Пошукова система індексів</system:String>
<system:String x:Key="plugin_explorer_Open_Window_Index_Option">Open Windows Index Option</system:String> <system:String x:Key="plugin_explorer_Open_Window_Index_Option">Відкрити параметри індексування Windows</system:String>
<!-- Plugin Infos --> <!-- Plugin Infos -->
<system:String x:Key="plugin_explorer_plugin_name">Explorer</system:String> <system:String x:Key="plugin_explorer_plugin_name">Провідник</system:String>
<system:String x:Key="plugin_explorer_plugin_description">Find and manage files and folders via Windows Search or Everything</system:String> <system:String x:Key="plugin_explorer_plugin_description">Пошук і керування файлами та папками за допомогою програми &quot;Пошук&quot; або &quot;Everything&quot;</system:String>
<!-- Plugin Tooltip --> <!-- Plugin Tooltip -->
<system:String x:Key="plugin_explorer_plugin_ToolTipOpenDirectory">Ctrl + Enter to open the directory</system:String> <system:String x:Key="plugin_explorer_plugin_ToolTipOpenDirectory">Ctrl + Enter, щоб відкрити каталог</system:String>
<system:String x:Key="plugin_explorer_plugin_ToolTipOpenContainingFolder">Ctrl + Enter to open the containing folder</system:String> <system:String x:Key="plugin_explorer_plugin_ToolTipOpenContainingFolder">Ctrl + Enter, щоб відкрити відповідну папку</system:String>
<!-- Context menu items --> <!-- Context menu items -->
<system:String x:Key="plugin_explorer_copypath">Copy path</system:String> <system:String x:Key="plugin_explorer_copypath">Копіювати шлях</system:String>
<system:String x:Key="plugin_explorer_copypath_subtitle">Copy path of current item to clipboard</system:String> <system:String x:Key="plugin_explorer_copypath_subtitle">Копіювати шлях до поточного елемента в буфер обміну</system:String>
<system:String x:Key="plugin_explorer_copyfilefolder">Copy</system:String> <system:String x:Key="plugin_explorer_copyfilefolder">Копіювати</system:String>
<system:String x:Key="plugin_explorer_copyfile_subtitle">Copy current file to clipboard</system:String> <system:String x:Key="plugin_explorer_copyfile_subtitle">Копіювання поточного файлу в буфер обміну</system:String>
<system:String x:Key="plugin_explorer_copyfolder_subtitle">Copy current folder to clipboard</system:String> <system:String x:Key="plugin_explorer_copyfolder_subtitle">Копіювати поточну папку в буфер обміну</system:String>
<system:String x:Key="plugin_explorer_deletefilefolder">Видалити</system:String> <system:String x:Key="plugin_explorer_deletefilefolder">Видалити</system:String>
<system:String x:Key="plugin_explorer_deletefile_subtitle">Permanently delete current file</system:String> <system:String x:Key="plugin_explorer_deletefile_subtitle">Безповоротно видалити поточний файл</system:String>
<system:String x:Key="plugin_explorer_deletefolder_subtitle">Permanently delete current folder</system:String> <system:String x:Key="plugin_explorer_deletefolder_subtitle">Назавжди видалити поточну папку</system:String>
<system:String x:Key="plugin_explorer_path">Path:</system:String> <system:String x:Key="plugin_explorer_path">Шлях:</system:String>
<system:String x:Key="plugin_explorer_deletefilefolder_subtitle">Delete the selected</system:String> <system:String x:Key="plugin_explorer_deletefilefolder_subtitle">Видалити вибране</system:String>
<system:String x:Key="plugin_explorer_runasdifferentuser">Run as different user</system:String> <system:String x:Key="plugin_explorer_runasdifferentuser">Запустити від імені іншого користувача</system:String>
<system:String x:Key="plugin_explorer_runasdifferentuser_subtitle">Run the selected using a different user account</system:String> <system:String x:Key="plugin_explorer_runasdifferentuser_subtitle">Запустити вибране під обліковим записом іншого користувача</system:String>
<system:String x:Key="plugin_explorer_opencontainingfolder">Open containing folder</system:String> <system:String x:Key="plugin_explorer_opencontainingfolder">Відкрити папку</system:String>
<system:String x:Key="plugin_explorer_opencontainingfolder_subtitle">Open the location that contains current item</system:String> <system:String x:Key="plugin_explorer_opencontainingfolder_subtitle">Відкрийте місце, яке містить поточний елемент</system:String>
<system:String x:Key="plugin_explorer_openwitheditor">Open With Editor:</system:String> <system:String x:Key="plugin_explorer_openwitheditor">Відкрити за допомогою редактора:</system:String>
<system:String x:Key="plugin_explorer_openwitheditor_error">Failed to open file at {0} with Editor {1} at {2}</system:String> <system:String x:Key="plugin_explorer_openwitheditor_error">Не вдалося відкрити файл за адресою {0} за допомогою редактора {1} на {2}</system:String>
<system:String x:Key="plugin_explorer_openwithshell">Open With Shell:</system:String> <system:String x:Key="plugin_explorer_openwithshell">Відкрий за допомогою Shell:</system:String>
<system:String x:Key="plugin_explorer_openwithshell_error">Failed to open folder {0} with Shell {1} at {2}</system:String> <system:String x:Key="plugin_explorer_openwithshell_error">Не вдалося відкрити папку {0} за допомогою Shell {1} за адресою {2}</system:String>
<system:String x:Key="plugin_explorer_excludefromindexsearch">Exclude current and sub-directories from Index Search</system:String> <system:String x:Key="plugin_explorer_excludefromindexsearch">Виключити поточні та вкладені каталоги з індексного пошуку</system:String>
<system:String x:Key="plugin_explorer_excludedfromindexsearch_msg">Excluded from Index Search</system:String> <system:String x:Key="plugin_explorer_excludedfromindexsearch_msg">Виключено з індексного пошуку</system:String>
<system:String x:Key="plugin_explorer_openindexingoptions">Open Windows Indexing Options</system:String> <system:String x:Key="plugin_explorer_openindexingoptions">Відкрити параметри індексування Windows</system:String>
<system:String x:Key="plugin_explorer_openindexingoptions_subtitle">Manage indexed files and folders</system:String> <system:String x:Key="plugin_explorer_openindexingoptions_subtitle">Керування проіндексованими файлами та папками</system:String>
<system:String x:Key="plugin_explorer_openindexingoptions_errormsg">Failed to open Windows Indexing Options</system:String> <system:String x:Key="plugin_explorer_openindexingoptions_errormsg">Не вдалося відкрити параметри індексування Windows</system:String>
<system:String x:Key="plugin_explorer_add_to_quickaccess_title">Add to Quick Access</system:String> <system:String x:Key="plugin_explorer_add_to_quickaccess_title">Додати до Швидкого доступу</system:String>
<system:String x:Key="plugin_explorer_add_to_quickaccess_subtitle">Add current item to Quick Access</system:String> <system:String x:Key="plugin_explorer_add_to_quickaccess_subtitle">Додати поточний елемент до швидкого доступу</system:String>
<system:String x:Key="plugin_explorer_addfilefoldersuccess">Successfully Added</system:String> <system:String x:Key="plugin_explorer_addfilefoldersuccess">Успішно додано</system:String>
<system:String x:Key="plugin_explorer_addfilefoldersuccess_detail">Successfully added to Quick Access</system:String> <system:String x:Key="plugin_explorer_addfilefoldersuccess_detail">Успішно додано до швидкого доступу</system:String>
<system:String x:Key="plugin_explorer_removefilefoldersuccess">Successfully Removed</system:String> <system:String x:Key="plugin_explorer_removefilefoldersuccess">Успішно вилучено</system:String>
<system:String x:Key="plugin_explorer_removefilefoldersuccess_detail">Successfully removed from Quick Access</system:String> <system:String x:Key="plugin_explorer_removefilefoldersuccess_detail">Успішно видалено з швидкого доступу</system:String>
<system:String x:Key="plugin_explorer_contextmenu_titletooltip">Add to Quick Access so it can be opened with Explorer's Search Activation action keyword</system:String> <system:String x:Key="plugin_explorer_contextmenu_titletooltip">Додати до швидкого доступу, щоб його можна було відкрити за допомогою ключового слова дії &quot;Активація пошуку&quot; у Провіднику</system:String>
<system:String x:Key="plugin_explorer_contextmenu_remove_titletooltip">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_contextmenu_remove_titletooltip">Видалити зі швидкого доступу</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Remove from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">Видалити зі швидкого доступу</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Видалити поточний елемент зі швидкого доступу</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Показати контекстне меню Windows</system:String>
<system:String x:Key="plugin_explorer_openwith">Відкрити за допомогою</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Виберіть програму для відкриття</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} не містить {1}</system:String>
<system:String x:Key="plugin_explorer_openresultfolder">Open in Default File Manager</system:String> <system:String x:Key="plugin_explorer_openresultfolder">Відкрити у файловому менеджері за замовчуванням</system:String>
<system:String x:Key="plugin_explorer_openresultfolder_subtitle">Use '&gt;' to search in this directory, '*' to search for file extensions or '&gt;*' to combine both searches.</system:String> <system:String x:Key="plugin_explorer_openresultfolder_subtitle">Використовуйте '&gt;' для пошуку в цьому каталозі, '*' для пошуку за розширеннями файлів або '&gt;*' для поєднання обох варіантів пошуку.</system:String>
<!-- Everything --> <!-- Everything -->
<system:String x:Key="flowlauncher_plugin_everything_sdk_issue">Failed to load Everything SDK</system:String> <system:String x:Key="flowlauncher_plugin_everything_sdk_issue">Не вдалося завантажити Everything SDK</system:String>
<system:String x:Key="flowlauncher_plugin_everything_is_not_running">Warning: Everything service is not running</system:String> <system:String x:Key="flowlauncher_plugin_everything_is_not_running">Попередження: Служба Everything не запущена</system:String>
<system:String x:Key="flowlauncher_plugin_everything_query_error">Error while querying Everything</system:String> <system:String x:Key="flowlauncher_plugin_everything_query_error">Помилка при виконанні запиту Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by">Sort By</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by">Сортувати за</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_name">Name</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_name">Назва</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_path">Path</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_path">Шлях</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_size">Size</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_size">Розмір</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_extension">Extension</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_extension">Розширення</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_type_name">Type Name</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_type_name">Назва типу</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_date_created">Date Created</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_date_created">Дата створення</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_date_modified">Date Modified</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_date_modified">Дата останньої зміни</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_attributes">Attributes</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_attributes">Атрибути</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_file_list_filename">File List FileName</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_file_list_filename">Список файлів FileName</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_run_count">Run Count</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_run_count">Кількість запусків</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_date_recently_changed">Date Recently Changed</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_date_recently_changed">Дата нещодавно змінена</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_date_accessed">Date Accessed</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_date_accessed">Дата доступу</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_date_run">Date Run</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_date_run">Дата запуску</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_ascending">↑</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_ascending">↑</system:String>
<system:String x:Key="flowlauncher_plugin_everything_sort_by_descending">↓</system:String> <system:String x:Key="flowlauncher_plugin_everything_sort_by_descending">↓</system:String>
<system:String x:Key="flowlauncher_plugin_everything_nonfastsort_warning">Warning: This is not a Fast Sort option, searches may be slow</system:String> <system:String x:Key="flowlauncher_plugin_everything_nonfastsort_warning">Попередження: Це не швидке сортування, пошук може бути повільним</system:String>
<system:String x:Key="flowlauncher_plugin_everything_search_fullpath">Search Full Path</system:String> <system:String x:Key="flowlauncher_plugin_everything_search_fullpath">Шукати повний шлях</system:String>
<system:String x:Key="flowlauncher_plugin_everything_click_to_launch_or_install">Click to launch or install Everything</system:String> <system:String x:Key="flowlauncher_plugin_everything_click_to_launch_or_install">Натисніть, щоб запустити або встановити Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installing_title">Everything Installation</system:String> <system:String x:Key="flowlauncher_plugin_everything_installing_title">Встановлення програми Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installing_subtitle">Installing Everything service. Please wait...</system:String> <system:String x:Key="flowlauncher_plugin_everything_installing_subtitle">Встановлення служби Everything. Будь ласка, зачекайте...</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installationsuccess_subtitle">Successfully installed Everything service</system:String> <system:String x:Key="flowlauncher_plugin_everything_installationsuccess_subtitle">Успішно встановлено сервіс Everything</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installationfailed_subtitle">Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com</system:String> <system:String x:Key="flowlauncher_plugin_everything_installationfailed_subtitle">Не вдалося автоматично встановити службу Everything. Будь ласка, встановіть її вручну з https://www.voidtools.com</system:String>
<system:String x:Key="flowlauncher_plugin_everything_run_service">Click here to start it</system:String> <system:String x:Key="flowlauncher_plugin_everything_run_service">Натисніть тут, щоб розпочати</system:String>
<system:String x:Key="flowlauncher_plugin_everything_installing_select">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</system:String> <system:String x:Key="flowlauncher_plugin_everything_installing_select">Не вдалося знайти інсталяцію Everything, бажаєте вручну вибрати розташування? {0}{0}Натисніть &quot;ні&quot;, і Everything буде автоматично інстальовано для вас</system:String>
<system:String x:Key="flowlauncher_plugin_everything_enable_content_search">Do you want to enable content search for Everything?</system:String> <system:String x:Key="flowlauncher_plugin_everything_enable_content_search">Бажаєте увімкнути пошук контенту для Everything?</system:String>
<system:String x:Key="flowlauncher_plugin_everything_enable_content_search_tips">It can be very slow without index (which is only supported in Everything v1.5+)</system:String> <system:String x:Key="flowlauncher_plugin_everything_enable_content_search_tips">Без індексу (який підтримується лише у версії Everything v1.5+) воно може працювати дуже повільно</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">从快速访问中删除</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">从快速访问中删除</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">从快速访问中移除当前结果</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">从快速访问中移除当前结果</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">显示 Windows 上下文菜单</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">显示 Windows 上下文菜单</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} 可用,共 {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} 可用,共 {1}</system:String>

View file

@ -100,6 +100,8 @@
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">從快速訪問中移除</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_title">從快速訪問中移除</system:String>
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String> <system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
<system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String> <system:String x:Key="plugin_explorer_show_contextmenu_title">Show Windows Context Menu</system:String>
<system:String x:Key="plugin_explorer_openwith">Open With</system:String>
<system:String x:Key="plugin_explorer_openwith_subtitle">Select a program to open with</system:String>
<!-- Special Results--> <!-- Special Results-->
<system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String> <system:String x:Key="plugin_explorer_diskfreespace">{0} free of {1}</system:String>

View file

@ -13,20 +13,17 @@ namespace Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks
if (string.IsNullOrEmpty(query.Search)) if (string.IsNullOrEmpty(query.Search))
return new List<Result>(); return new List<Result>();
string search = query.Search.ToLower(); return accessLinks
.Where(x => Main.Context.API.FuzzySearch(query.Search, x.Name).IsSearchPrecisionScoreMet() || Main.Context.API.FuzzySearch(query.Search, x.Path).IsSearchPrecisionScoreMet())
var queriedAccessLinks =
accessLinks
.Where(x => x.Name.Contains(search, StringComparison.OrdinalIgnoreCase) || x.Path.Contains(search, StringComparison.OrdinalIgnoreCase))
.OrderBy(x => x.Type) .OrderBy(x => x.Type)
.ThenBy(x => x.Name); .ThenBy(x => x.Name)
.Select(l => l.Type switch
return queriedAccessLinks.Select(l => l.Type switch {
{ ResultType.Folder => ResultManager.CreateFolderResult(l.Name, l.Path, l.Path, query, quickAccessResultScore),
ResultType.Folder => ResultManager.CreateFolderResult(l.Name, l.Path, l.Path, query, quickAccessResultScore), ResultType.File => ResultManager.CreateFileResult(l.Path, query, quickAccessResultScore),
ResultType.File => ResultManager.CreateFileResult(l.Path, query, quickAccessResultScore), _ => throw new ArgumentOutOfRangeException()
_ => throw new ArgumentOutOfRangeException() })
}).ToList(); .ToList();
} }
internal static List<Result> AccessLinkListAll(Query query, IEnumerable<AccessLink> accessLinks) internal static List<Result> AccessLinkListAll(Query query, IEnumerable<AccessLink> accessLinks)

View file

@ -16,7 +16,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.WindowsIndex
{ {
// Reserved keywords in oleDB // Reserved keywords in oleDB
private static Regex _reservedPatternMatcher = new(@"^[`\@\\#\\\^,\&\\/\\\$\%_;\[\]]+$", RegexOptions.Compiled); private static Regex _reservedPatternMatcher = new(@"[`\@\\#\\\^,\&\\/\\\$\%_;\[\]]+", RegexOptions.Compiled);
private static async IAsyncEnumerable<SearchResult> ExecuteWindowsIndexSearchAsync(string indexQueryString, string connectionString, [EnumeratorCancellation] CancellationToken token) private static async IAsyncEnumerable<SearchResult> ExecuteWindowsIndexSearchAsync(string indexQueryString, string connectionString, [EnumeratorCancellation] CancellationToken token)
{ {

View file

@ -10,7 +10,7 @@
"Name": "Explorer", "Name": "Explorer",
"Description": "Find and manage files and folders via Windows Search or Everything", "Description": "Find and manage files and folders via Windows Search or Everything",
"Author": "Jeremy Wu", "Author": "Jeremy Wu",
"Version": "3.1.3", "Version": "3.1.4",
"Language": "csharp", "Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher", "Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll", "ExecuteFileName": "Flow.Launcher.Plugin.Explorer.dll",

View file

@ -1,7 +1,7 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<system:String x:Key="flowlauncher_plugin_pluginindicator_result_subtitle">Activate {0} plugin action keyword</system:String> <system:String x:Key="flowlauncher_plugin_pluginindicator_result_subtitle">Attiva la parola chiave del plugin {0}</system:String>
<system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_name">Indicatore Plugin</system:String> <system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_name">Indicatore Plugin</system:String>
<system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_description">Fornisce suggerimenti sulle parole d'azione dei plugin</system:String> <system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_description">Fornisce suggerimenti sulle parole d'azione dei plugin</system:String>

View file

@ -1,9 +1,9 @@
<?xml version="1.0"?> <?xml version="1.0"?>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib"> <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
<system:String x:Key="flowlauncher_plugin_pluginindicator_result_subtitle">Activate {0} plugin action keyword</system:String> <system:String x:Key="flowlauncher_plugin_pluginindicator_result_subtitle">Активувати {0} ключове слово дії плагіна</system:String>
<system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_name">Plugin Indicator</system:String> <system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_name">Індикатор плагіну</system:String>
<system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_description">Provides plugins action words suggestions</system:String> <system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_description">Надає плагінам пропозиції щодо слів дії</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -4,7 +4,7 @@
"Name": "Plugin Indicator", "Name": "Plugin Indicator",
"Description": "Provides plugin action keyword suggestions", "Description": "Provides plugin action keyword suggestions",
"Author": "qianlifeng", "Author": "qianlifeng",
"Version": "3.0.2", "Version": "3.0.3",
"Language": "csharp", "Language": "csharp",
"Website": "https://github.com/Flow-Launcher/Flow.Launcher", "Website": "https://github.com/Flow-Launcher/Flow.Launcher",
"ExecuteFileName": "Flow.Launcher.Plugin.PluginIndicator.dll", "ExecuteFileName": "Flow.Launcher.Plugin.PluginIndicator.dll",

View file

@ -13,6 +13,10 @@ namespace Flow.Launcher.Plugin.PluginsManager
Context = context; Context = context;
} }
private readonly GlyphInfo sourcecodeGlyph = new("/Resources/#Segoe Fluent Icons","\uE943");
private readonly GlyphInfo issueGlyph = new("/Resources/#Segoe Fluent Icons", "\ued15");
private readonly GlyphInfo manifestGlyph = new("/Resources/#Segoe Fluent Icons", "\uea37");
public List<Result> LoadContextMenus(Result selectedResult) public List<Result> LoadContextMenus(Result selectedResult)
{ {
if(selectedResult.ContextData is not UserPlugin pluginManifestInfo) if(selectedResult.ContextData is not UserPlugin pluginManifestInfo)
@ -36,6 +40,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
Title = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_gotosourcecode_title"), Title = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_gotosourcecode_title"),
SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_gotosourcecode_subtitle"), SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_gotosourcecode_subtitle"),
IcoPath = "Images\\sourcecode.png", IcoPath = "Images\\sourcecode.png",
Glyph = sourcecodeGlyph,
Action = _ => Action = _ =>
{ {
Context.API.OpenUrl(pluginManifestInfo.UrlSourceCode); Context.API.OpenUrl(pluginManifestInfo.UrlSourceCode);
@ -47,6 +52,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
Title = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_newissue_title"), Title = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_newissue_title"),
SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_newissue_subtitle"), SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_newissue_subtitle"),
IcoPath = "Images\\request.png", IcoPath = "Images\\request.png",
Glyph = issueGlyph,
Action = _ => Action = _ =>
{ {
// standard UrlSourceCode format in PluginsManifest's plugins.json file: https://github.com/jjw24/Flow.Launcher.Plugin.Putty/tree/master // standard UrlSourceCode format in PluginsManifest's plugins.json file: https://github.com/jjw24/Flow.Launcher.Plugin.Putty/tree/master
@ -63,6 +69,7 @@ namespace Flow.Launcher.Plugin.PluginsManager
Title = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_title"), Title = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_title"),
SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_subtitle"), SubTitle = Context.API.GetTranslation("plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_subtitle"),
IcoPath = "Images\\manifestsite.png", IcoPath = "Images\\manifestsite.png",
Glyph = manifestGlyph,
Action = _ => Action = _ =>
{ {
Context.API.OpenUrl("https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest"); Context.API.OpenUrl("https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest");

View file

@ -36,8 +36,4 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="SharpZipLib" Version="1.4.2" />
</ItemGroup>
</Project> </Project>

View file

@ -6,7 +6,9 @@
<system:String x:Key="plugin_pluginsmanager_download_success">Successfully downloaded {0}</system:String> <system:String x:Key="plugin_pluginsmanager_download_success">Successfully downloaded {0}</system:String>
<system:String x:Key="plugin_pluginsmanager_download_error">Error: Unable to download the plugin</system:String> <system:String x:Key="plugin_pluginsmanager_download_error">Error: Unable to download the plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt">{0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart.</system:String> <system:String x:Key="plugin_pluginsmanager_uninstall_prompt">{0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart.</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt_no_restart">{0} by {1} {2}{2}Would you like to uninstall this plugin?</system:String>
<system:String x:Key="plugin_pluginsmanager_install_prompt">{0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart.</system:String> <system:String x:Key="plugin_pluginsmanager_install_prompt">{0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart.</system:String>
<system:String x:Key="plugin_pluginsmanager_install_prompt_no_restart">{0} by {1} {2}{2}Would you like to install this plugin?</system:String>
<system:String x:Key="plugin_pluginsmanager_install_title">Plugin Install</system:String> <system:String x:Key="plugin_pluginsmanager_install_title">Plugin Install</system:String>
<system:String x:Key="plugin_pluginsmanager_installing_plugin">Installing Plugin</system:String> <system:String x:Key="plugin_pluginsmanager_installing_plugin">Installing Plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_install_from_web">Download and install {0}</system:String> <system:String x:Key="plugin_pluginsmanager_install_from_web">Download and install {0}</system:String>
@ -16,18 +18,30 @@
<system:String x:Key="plugin_pluginsmanager_install_error_duplicate">Error: A plugin which has the same or greater version with {0} already exists.</system:String> <system:String x:Key="plugin_pluginsmanager_install_error_duplicate">Error: A plugin which has the same or greater version with {0} already exists.</system:String>
<system:String x:Key="plugin_pluginsmanager_install_error_title">Error installing plugin</system:String> <system:String x:Key="plugin_pluginsmanager_install_error_title">Error installing plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_install_error_subtitle">Error occurred while trying to install {0}</system:String> <system:String x:Key="plugin_pluginsmanager_install_error_subtitle">Error occurred while trying to install {0}</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_error_title">Error uninstalling plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_update_noresult_title">No update available</system:String> <system:String x:Key="plugin_pluginsmanager_update_noresult_title">No update available</system:String>
<system:String x:Key="plugin_pluginsmanager_update_noresult_subtitle">All plugins are up to date</system:String> <system:String x:Key="plugin_pluginsmanager_update_noresult_subtitle">All plugins are up to date</system:String>
<system:String x:Key="plugin_pluginsmanager_update_prompt">{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.</system:String> <system:String x:Key="plugin_pluginsmanager_update_prompt">{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_prompt_no_restart">{0} by {1} {2}{2}Would you like to update this plugin?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_title">Plugin Update</system:String> <system:String x:Key="plugin_pluginsmanager_update_title">Plugin Update</system:String>
<system:String x:Key="plugin_pluginsmanager_update_exists">This plugin has an update, would you like to see it?</system:String> <system:String x:Key="plugin_pluginsmanager_update_exists">This plugin has an update, would you like to see it?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_alreadyexists">This plugin is already installed</system:String> <system:String x:Key="plugin_pluginsmanager_update_alreadyexists">This plugin is already installed</system:String>
<system:String x:Key="plugin_pluginsmanager_update_failed_title">Plugin Manifest Download Failed</system:String> <system:String x:Key="plugin_pluginsmanager_update_failed_title">Plugin Manifest Download Failed</system:String>
<system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">Please check if you can connect to github.com. This error means you may not be able to install or update plugins.</system:String> <system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">Please check if you can connect to github.com. This error means you may not be able to install or update plugins.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_title">Update all plugins</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_subtitle">Would you like to update all plugins?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_prompt">Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_prompt_no_restart">Would you like to update {0} plugins?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_success_restart">{0} plugins successfully updated. Restarting Flow, please wait...</system:String>
<system:String x:Key="plugin_pluginsmanager_update_success_restart">Plugin {0} successfully updated. Restarting Flow, please wait...</system:String>
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning_title">Installing from an unknown source</system:String> <system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning_title">Installing from an unknown source</system:String>
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning">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)</system:String> <system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning">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)</system:String>
<!-- Controls --> <system:String x:Key="plugin_pluginsmanager_install_success_no_restart">Plugin {0} successfully installed. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_success_no_restart">Plugin {0} successfully uninstalled. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_success_no_restart">Plugin {0} successfully updated. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_success_no_restart">{0} plugins successfully updated. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_plugin_modified_error">Plugin {0} has already been modified. Please restart Flow before making any further changes.</system:String>
<!-- Plugin Infos --> <!-- Plugin Infos -->
<system:String x:Key="plugin_pluginsmanager_plugin_name">Plugins Manager</system:String> <system:String x:Key="plugin_pluginsmanager_plugin_name">Plugins Manager</system:String>
@ -46,4 +60,5 @@
<!-- Settings menu items --> <!-- Settings menu items -->
<system:String x:Key="plugin_pluginsmanager_plugin_settings_unknown_source">Install from unknown source warning</system:String> <system:String x:Key="plugin_pluginsmanager_plugin_settings_unknown_source">Install from unknown source warning</system:String>
<system:String x:Key="plugin_pluginsmanager_plugin_settings_auto_restart">Automatically restart Flow Launcher after installing/uninstalling/updating plugins</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -6,7 +6,9 @@
<system:String x:Key="plugin_pluginsmanager_download_success">Úspěšně staženo {0}</system:String> <system:String x:Key="plugin_pluginsmanager_download_success">Úspěšně staženo {0}</system:String>
<system:String x:Key="plugin_pluginsmanager_download_error">Chyba: Nepodařilo se stáhnout plugin</system:String> <system:String x:Key="plugin_pluginsmanager_download_error">Chyba: Nepodařilo se stáhnout plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt">{0} z {1} {2}{3}Chcete odinstalovat tento plugin? Flow se po odinstalování automaticky restartuje.</system:String> <system:String x:Key="plugin_pluginsmanager_uninstall_prompt">{0} z {1} {2}{3}Chcete odinstalovat tento plugin? Flow se po odinstalování automaticky restartuje.</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt_no_restart">{0} by {1} {2}{2}Would you like to uninstall this plugin?</system:String>
<system:String x:Key="plugin_pluginsmanager_install_prompt">{0} z {1} {2}{3}Chcete nainstalovat tento plugin? Po instalaci se Flow automaticky restartuje.</system:String> <system:String x:Key="plugin_pluginsmanager_install_prompt">{0} z {1} {2}{3}Chcete nainstalovat tento plugin? Po instalaci se Flow automaticky restartuje.</system:String>
<system:String x:Key="plugin_pluginsmanager_install_prompt_no_restart">{0} by {1} {2}{2}Would you like to install this plugin?</system:String>
<system:String x:Key="plugin_pluginsmanager_install_title">Instalovat plugin</system:String> <system:String x:Key="plugin_pluginsmanager_install_title">Instalovat plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_installing_plugin">Instaluje se plugin</system:String> <system:String x:Key="plugin_pluginsmanager_installing_plugin">Instaluje se plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_install_from_web">Stáhnout a nainstalovat {0}</system:String> <system:String x:Key="plugin_pluginsmanager_install_from_web">Stáhnout a nainstalovat {0}</system:String>
@ -16,18 +18,30 @@
<system:String x:Key="plugin_pluginsmanager_install_error_duplicate">Chyba: Zásuvný modul se stejnou nebo vyšší verzí než {0} již existuje.</system:String> <system:String x:Key="plugin_pluginsmanager_install_error_duplicate">Chyba: Zásuvný modul se stejnou nebo vyšší verzí než {0} již existuje.</system:String>
<system:String x:Key="plugin_pluginsmanager_install_error_title">Chyba instalace pluginu</system:String> <system:String x:Key="plugin_pluginsmanager_install_error_title">Chyba instalace pluginu</system:String>
<system:String x:Key="plugin_pluginsmanager_install_error_subtitle">Došlo k chybě při pokusu o instalaci {0}</system:String> <system:String x:Key="plugin_pluginsmanager_install_error_subtitle">Došlo k chybě při pokusu o instalaci {0}</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_error_title">Error uninstalling plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_update_noresult_title">Nejsou dostupné žádné aktualizace</system:String> <system:String x:Key="plugin_pluginsmanager_update_noresult_title">Nejsou dostupné žádné aktualizace</system:String>
<system:String x:Key="plugin_pluginsmanager_update_noresult_subtitle">Všechny pluginy jsou aktuální</system:String> <system:String x:Key="plugin_pluginsmanager_update_noresult_subtitle">Všechny pluginy jsou aktuální</system:String>
<system:String x:Key="plugin_pluginsmanager_update_prompt">{0} z {1} {2}{3}Chcete tento zásuvný modul aktualizovat? Flow se po aktualizaci automaticky restartuje.</system:String> <system:String x:Key="plugin_pluginsmanager_update_prompt">{0} z {1} {2}{3}Chcete tento zásuvný modul aktualizovat? Flow se po aktualizaci automaticky restartuje.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_prompt_no_restart">{0} by {1} {2}{2}Would you like to update this plugin?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_title">Aktualizace Pluginu</system:String> <system:String x:Key="plugin_pluginsmanager_update_title">Aktualizace Pluginu</system:String>
<system:String x:Key="plugin_pluginsmanager_update_exists">Aktualizace tohoto pluginu je k dispozici, chcete ji zobrazit?</system:String> <system:String x:Key="plugin_pluginsmanager_update_exists">Aktualizace tohoto pluginu je k dispozici, chcete ji zobrazit?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_alreadyexists">Tento plugin je již nainstalován</system:String> <system:String x:Key="plugin_pluginsmanager_update_alreadyexists">Tento plugin je již nainstalován</system:String>
<system:String x:Key="plugin_pluginsmanager_update_failed_title">Stahování manifestu pluginu se nezdařilo</system:String> <system:String x:Key="plugin_pluginsmanager_update_failed_title">Stahování manifestu pluginu se nezdařilo</system:String>
<system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">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.</system:String> <system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">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.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_title">Update all plugins</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_subtitle">Would you like to update all plugins?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_prompt">Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_prompt_no_restart">Would you like to update {0} plugins?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_success_restart">{0} plugins successfully updated. Restarting Flow, please wait...</system:String>
<system:String x:Key="plugin_pluginsmanager_update_success_restart">Plugin {0} successfully updated. Restarting Flow, please wait...</system:String>
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning_title">Instalace z neznámého zdroje</system:String> <system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning_title">Instalace z neznámého zdroje</system:String>
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning">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í)</system:String> <system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning">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í)</system:String>
<!-- Controls --> <system:String x:Key="plugin_pluginsmanager_install_success_no_restart">Plugin {0} successfully installed. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_success_no_restart">Plugin {0} successfully uninstalled. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_success_no_restart">Plugin {0} successfully updated. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_success_no_restart">{0} plugins successfully updated. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_plugin_modified_error">Plugin {0} has already been modified. Please restart Flow before making any further changes.</system:String>
<!-- Plugin Infos --> <!-- Plugin Infos -->
<system:String x:Key="plugin_pluginsmanager_plugin_name">Správce pluginů</system:String> <system:String x:Key="plugin_pluginsmanager_plugin_name">Správce pluginů</system:String>
@ -46,4 +60,5 @@
<!-- Settings menu items --> <!-- Settings menu items -->
<system:String x:Key="plugin_pluginsmanager_plugin_settings_unknown_source">Upozornění na instalaci z neznámého zdroje</system:String> <system:String x:Key="plugin_pluginsmanager_plugin_settings_unknown_source">Upozornění na instalaci z neznámého zdroje</system:String>
<system:String x:Key="plugin_pluginsmanager_plugin_settings_auto_restart">Automatically restart Flow Launcher after installing/uninstalling/updating plugins</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -6,7 +6,9 @@
<system:String x:Key="plugin_pluginsmanager_download_success">Successfully downloaded</system:String> <system:String x:Key="plugin_pluginsmanager_download_success">Successfully downloaded</system:String>
<system:String x:Key="plugin_pluginsmanager_download_error">Error: Unable to download the plugin</system:String> <system:String x:Key="plugin_pluginsmanager_download_error">Error: Unable to download the plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt">{0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart.</system:String> <system:String x:Key="plugin_pluginsmanager_uninstall_prompt">{0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart.</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt_no_restart">{0} by {1} {2}{2}Would you like to uninstall this plugin?</system:String>
<system:String x:Key="plugin_pluginsmanager_install_prompt">{0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart.</system:String> <system:String x:Key="plugin_pluginsmanager_install_prompt">{0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart.</system:String>
<system:String x:Key="plugin_pluginsmanager_install_prompt_no_restart">{0} by {1} {2}{2}Would you like to install this plugin?</system:String>
<system:String x:Key="plugin_pluginsmanager_install_title">Plugin Install</system:String> <system:String x:Key="plugin_pluginsmanager_install_title">Plugin Install</system:String>
<system:String x:Key="plugin_pluginsmanager_installing_plugin">Installing Plugin</system:String> <system:String x:Key="plugin_pluginsmanager_installing_plugin">Installing Plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_install_from_web">Download and install {0}</system:String> <system:String x:Key="plugin_pluginsmanager_install_from_web">Download and install {0}</system:String>
@ -16,18 +18,30 @@
<system:String x:Key="plugin_pluginsmanager_install_error_duplicate">Error: A plugin which has the same or greater version with {0} already exists.</system:String> <system:String x:Key="plugin_pluginsmanager_install_error_duplicate">Error: A plugin which has the same or greater version with {0} already exists.</system:String>
<system:String x:Key="plugin_pluginsmanager_install_error_title">Error installing plugin</system:String> <system:String x:Key="plugin_pluginsmanager_install_error_title">Error installing plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_install_error_subtitle">Error occurred while trying to install {0}</system:String> <system:String x:Key="plugin_pluginsmanager_install_error_subtitle">Error occurred while trying to install {0}</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_error_title">Error uninstalling plugin</system:String>
<system:String x:Key="plugin_pluginsmanager_update_noresult_title">No update available</system:String> <system:String x:Key="plugin_pluginsmanager_update_noresult_title">No update available</system:String>
<system:String x:Key="plugin_pluginsmanager_update_noresult_subtitle">All plugins are up to date</system:String> <system:String x:Key="plugin_pluginsmanager_update_noresult_subtitle">All plugins are up to date</system:String>
<system:String x:Key="plugin_pluginsmanager_update_prompt">{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.</system:String> <system:String x:Key="plugin_pluginsmanager_update_prompt">{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_prompt_no_restart">{0} by {1} {2}{2}Would you like to update this plugin?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_title">Plugin Update</system:String> <system:String x:Key="plugin_pluginsmanager_update_title">Plugin Update</system:String>
<system:String x:Key="plugin_pluginsmanager_update_exists">This plugin has an update, would you like to see it?</system:String> <system:String x:Key="plugin_pluginsmanager_update_exists">This plugin has an update, would you like to see it?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_alreadyexists">This plugin is already installed</system:String> <system:String x:Key="plugin_pluginsmanager_update_alreadyexists">This plugin is already installed</system:String>
<system:String x:Key="plugin_pluginsmanager_update_failed_title">Plugin Manifest Download Failed</system:String> <system:String x:Key="plugin_pluginsmanager_update_failed_title">Plugin Manifest Download Failed</system:String>
<system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">Please check if you can connect to github.com. This error means you may not be able to install or update plugins.</system:String> <system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">Please check if you can connect to github.com. This error means you may not be able to install or update plugins.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_title">Update all plugins</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_subtitle">Would you like to update all plugins?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_prompt">Would you like to update {0} plugins?{1}Flow Launcher will restart after updating all plugins.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_prompt_no_restart">Would you like to update {0} plugins?</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_success_restart">{0} plugins successfully updated. Restarting Flow, please wait...</system:String>
<system:String x:Key="plugin_pluginsmanager_update_success_restart">Plugin {0} successfully updated. Restarting Flow, please wait...</system:String>
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning_title">Installing from an unknown source</system:String> <system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning_title">Installing from an unknown source</system:String>
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning">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)</system:String> <system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning">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)</system:String>
<!-- Controls --> <system:String x:Key="plugin_pluginsmanager_install_success_no_restart">Plugin {0} successfully installed. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_uninstall_success_no_restart">Plugin {0} successfully uninstalled. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_success_no_restart">Plugin {0} successfully updated. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_update_all_success_no_restart">{0} plugins successfully updated. Please restart Flow.</system:String>
<system:String x:Key="plugin_pluginsmanager_plugin_modified_error">Plugin {0} has already been modified. Please restart Flow before making any further changes.</system:String>
<!-- Plugin Infos --> <!-- Plugin Infos -->
<system:String x:Key="plugin_pluginsmanager_plugin_name">Plugins Manager</system:String> <system:String x:Key="plugin_pluginsmanager_plugin_name">Plugins Manager</system:String>
@ -46,4 +60,5 @@
<!-- Settings menu items --> <!-- Settings menu items -->
<system:String x:Key="plugin_pluginsmanager_plugin_settings_unknown_source">Install from unknown source warning</system:String> <system:String x:Key="plugin_pluginsmanager_plugin_settings_unknown_source">Install from unknown source warning</system:String>
<system:String x:Key="plugin_pluginsmanager_plugin_settings_auto_restart">Automatically restart Flow Launcher after installing/uninstalling/updating plugins</system:String>
</ResourceDictionary> </ResourceDictionary>

Some files were not shown because too many files have changed in this diff Show more