diff --git a/.cm/gitstream.cm b/.cm/gitstream.cm new file mode 100644 index 000000000..767982e3b --- /dev/null +++ b/.cm/gitstream.cm @@ -0,0 +1,80 @@ +# -*- mode: yaml -*- +# This example configuration for provides basic automations to get started with gitStream. +# View the gitStream quickstart for more examples: https://docs.gitstream.cm/examples/ +manifest: + version: 1.0 + + +triggers: + exclude: + branch: + - l10n_dev + - dev + - r/([Dd]ependabot|[Rr]enovate)/ + + +automations: + # Add a label that indicates how many minutes it will take to review the PR. + estimated_time_to_review: + on: + - commit + if: + - true + run: + - action: add-label@v1 + args: + label: "{{ calc.etr }} min review" + color: {{ colors.red if (calc.etr >= 20) else ( colors.yellow if (calc.etr >= 5) else colors.green ) }} + # Post a comment that lists the best experts for the files that were modified. + explain_code_experts: + if: + - true + run: + - action: explain-code-experts@v1 + args: + gt: 10 + # Post a comment notifying that the PR contains a TODO statement. + review_todo_comments: + if: + - {{ source.diff.files | matchDiffLines(regex=r/^[+].*\b(TODO|todo)\b/) | some }} + run: + - action: add-comment@v1 + args: + comment: | + This PR contains a TODO statement. Please check to see if they should be removed. + # Post a comment that request a before and after screenshot + request_screenshot: + # Triggered for PRs that lack an image file or link to an image in the PR description + if: + - {{ not (has.screenshot_link or has.image_uploaded) }} + run: + - action: add-comment@v1 + args: + comment: | + Be a legend :trophy: by adding a before and after screenshot of the changes you made, especially if they are around UI/UX. + + +# +----------------------------------------------------------------------------+ +# | Custom Expressions | +# | https://docs.gitstream.cm/how-it-works/#custom-expressions | +# +----------------------------------------------------------------------------+ + +calc: + etr: {{ branch | estimatedReviewTime }} + +colors: + red: 'b60205' + yellow: 'fbca04' + green: '0e8a16' + +changes: + # Sum all the lines added/edited in the PR + additions: {{ branch.diff.files_metadata | map(attr='additions') | sum }} + # Sum all the line removed in the PR + deletions: {{ branch.diff.files_metadata | map(attr='deletions') | sum }} + # Calculate the ratio of new code + ratio: {{ (changes.additions / (changes.additions + changes.deletions)) * 100 | round(2) }} + +has: + screenshot_link: {{ pr.description | includes(regex=r/!\[.*\]\(.*(jpg|svg|png|gif|psd).*\)/) }} + image_uploaded: {{ pr.description | includes(regex=r/()|!\[image\]\(.*github\.com.*\)/) }} diff --git a/.editorconfig b/.editorconfig index 11a0bcdf6..e1b8ed79e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -58,7 +58,7 @@ dotnet_style_prefer_conditional_expression_over_return = true:silent ############################### # Style Definitions dotnet_naming_style.pascal_case_style.capitalization = pascal_case -# Use PascalCase for constant fields +# Use PascalCase for constant fields dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style @@ -134,7 +134,7 @@ csharp_preserve_single_line_statements = true csharp_preserve_single_line_blocks = true csharp_using_directive_placement = outside_namespace:silent csharp_prefer_simple_using_statement = true:suggestion -csharp_style_namespace_declarations = block_scoped:silent +csharp_style_namespace_declarations = file_scoped:silent csharp_style_prefer_method_group_conversion = true:silent csharp_style_expression_bodied_lambdas = true:silent csharp_style_expression_bodied_local_functions = false:silent diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt index 00cc67ea0..a36a6af3e 100644 --- a/.github/actions/spelling/allow.txt +++ b/.github/actions/spelling/allow.txt @@ -3,3 +3,6 @@ https ssh ubuntu runcount +Firefox +Português +Português (Brasil) diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt index c4b1ee849..6ba41e410 100644 --- a/.github/actions/spelling/expect.txt +++ b/.github/actions/spelling/expect.txt @@ -74,6 +74,7 @@ WCA_ACCENT_POLICY HGlobal dopusrt firefox +Firefox msedge svgc ime @@ -97,6 +98,8 @@ Português Português (Brasil) Italiano Slovenský +quicklook +Tiếng Việt Droplex Preinstalled errormetadatafile diff --git a/.github/pr-labeler.yml b/.github/pr-labeler.yml new file mode 100644 index 000000000..5556c5ea8 --- /dev/null +++ b/.github/pr-labeler.yml @@ -0,0 +1,31 @@ +# The bot always updates the labels, add/remove as necessary [default: false] +alwaysReplace: false +# Treats the text and labels as case sensitive [default: true] +caseSensitive: false +# Array of labels to be applied to the PR [default: []] +customLabels: + # Finds the `text` within the PR title and body and applies the `label` + - text: 'bug' + label: 'bug' + - text: 'fix' + label: 'bug' + - text: 'dependabot' + label: 'bug' + - text: 'New Crowdin updates' + label: 'bug' + - text: 'New Crowdin updates' + label: 'kind/i18n' + - text: 'feature' + label: 'enhancement' + - text: 'add new' + label: 'enhancement' + - text: 'refactor' + label: 'enhancement' + - text: 'refactor' + label: 'Code Refactor' +# Search the body of the PR for the `text` [default: true] +searchBody: true +# Search the title of the PR for the `text` [default: true] +searchTitle: true +# Search for whole words only [default: false] +wholeWords: false diff --git a/.github/workflows/default_plugins.yml b/.github/workflows/default_plugins.yml index a0a816877..85acafae1 100644 --- a/.github/workflows/default_plugins.yml +++ b/.github/workflows/default_plugins.yml @@ -2,7 +2,7 @@ name: Publish Default Plugins on: push: - branches: ['dev'] + branches: ['master'] paths: ['Plugins/**'] workflow_dispatch: @@ -369,4 +369,4 @@ jobs: tag_name: "v${{steps.updated-version-windowssettings.outputs.prop}}" body: Visit Flow's [release notes](https://github.com/Flow-Launcher/Flow.Launcher/releases) for changes. env: - GITHUB_TOKEN: ${{ secrets.PUBLISH_PLUGINS }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.PUBLISH_PLUGINS }} diff --git a/.github/workflows/gitstream.yml b/.github/workflows/gitstream.yml new file mode 100644 index 000000000..0916572df --- /dev/null +++ b/.github/workflows/gitstream.yml @@ -0,0 +1,49 @@ +# Code generated by gitStream GitHub app - DO NOT EDIT + +name: gitStream workflow automation +run-name: | + /:\ gitStream: PR #${{ fromJSON(fromJSON(github.event.inputs.client_payload)).pullRequestNumber }} from ${{ github.event.inputs.full_repository }} + +on: + workflow_dispatch: + inputs: + client_payload: + description: The Client payload + required: true + full_repository: + description: the repository name include the owner in `owner/repo_name` format + required: true + head_ref: + description: the head sha + required: true + base_ref: + description: the base ref + required: true + installation_id: + description: the installation id + required: false + resolver_url: + description: the resolver url to pass results to + required: true + resolver_token: + description: Optional resolver token for resolver service + required: false + default: '' + +jobs: + gitStream: + timeout-minutes: 5 + runs-on: ubuntu-latest + name: gitStream workflow automation + steps: + - name: Evaluate Rules + uses: linear-b/gitstream-github-action@v2 + id: rules-engine + with: + full_repository: ${{ github.event.inputs.full_repository }} + head_ref: ${{ github.event.inputs.head_ref }} + base_ref: ${{ github.event.inputs.base_ref }} + client_payload: ${{ github.event.inputs.client_payload }} + installation_id: ${{ github.event.inputs.installation_id }} + resolver_url: ${{ github.event.inputs.resolver_url }} + resolver_token: ${{ github.event.inputs.resolver_token }} diff --git a/.github/workflows/pr_assignee.yml b/.github/workflows/pr_assignee.yml new file mode 100644 index 000000000..5be603df6 --- /dev/null +++ b/.github/workflows/pr_assignee.yml @@ -0,0 +1,17 @@ +name: Assign PR to creator + +on: + pull_request_target: + types: [opened] + branches-ignore: + - l10n_dev + +permissions: + pull-requests: write + +jobs: + automation: + runs-on: ubuntu-latest + steps: + - name: Assign PR to creator + uses: toshimaru/auto-author-assign@v2.1.1 diff --git a/.github/workflows/pr_milestone.yml b/.github/workflows/pr_milestone.yml new file mode 100644 index 000000000..e2365f554 --- /dev/null +++ b/.github/workflows/pr_milestone.yml @@ -0,0 +1,22 @@ +name: Set Milestone + +# Assigns the earliest created milestone that matches the below glob pattern. + +on: + pull_request_target: + types: [opened] + +permissions: + pull-requests: write + +jobs: + automation: + runs-on: ubuntu-latest + + steps: + - name: set-milestone + uses: andrefcdias/add-to-milestone@v1.3.0 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + milestone: "+([0-9]).+([0-9]).+([0-9])" + use-expression: true diff --git a/.github/workflows/top-ranking-issues.yml b/.github/workflows/top-ranking-issues.yml new file mode 100644 index 000000000..bddca4741 --- /dev/null +++ b/.github/workflows/top-ranking-issues.yml @@ -0,0 +1,25 @@ +name: Top-Ranking Issues +on: + schedule: + - cron: '0 0 */1 * *' + workflow_dispatch: + +jobs: + ShowAndLabelTopIssues: + name: Display and label top issues. + runs-on: ubuntu-latest + steps: + - name: Top Issues action + uses: rickstaa/top-issues-action@v1.3.101 + env: + github_token: ${{ secrets.GITHUB_TOKEN }} + with: + dashboard: true + dashboard_show_total_reactions: true + top_list_size: 10 + top_features: true + top_bugs: true + dashboard_title: Top-Ranking Issues 📈 + dashboard_label: ⭐ Dashboard + hide_dashboard_footer: true + top_issues: false diff --git a/Flow.Launcher.Core/Configuration/Portable.cs b/Flow.Launcher.Core/Configuration/Portable.cs index b58154dcb..d7c73fb46 100644 --- a/Flow.Launcher.Core/Configuration/Portable.cs +++ b/Flow.Launcher.Core/Configuration/Portable.cs @@ -40,7 +40,7 @@ namespace Flow.Launcher.Core.Configuration #endif IndicateDeletion(DataLocation.PortableDataPath); - MessageBox.Show("Flow Launcher needs to restart to finish disabling portable mode, " + + MessageBoxEx.Show("Flow Launcher needs to restart to finish disabling portable mode, " + "after the restart your portable data profile will be deleted and roaming data profile kept"); UpdateManager.RestartApp(Constant.ApplicationFileName); @@ -64,7 +64,7 @@ namespace Flow.Launcher.Core.Configuration #endif IndicateDeletion(DataLocation.RoamingDataPath); - MessageBox.Show("Flow Launcher needs to restart to finish enabling portable mode, " + + MessageBoxEx.Show("Flow Launcher needs to restart to finish enabling portable mode, " + "after the restart your roaming data profile will be deleted and portable data profile kept"); UpdateManager.RestartApp(Constant.ApplicationFileName); @@ -95,13 +95,13 @@ namespace Flow.Launcher.Core.Configuration public void MoveUserDataFolder(string fromLocation, string toLocation) { - FilesFolders.CopyAll(fromLocation, toLocation); + FilesFolders.CopyAll(fromLocation, toLocation, MessageBoxEx.Show); VerifyUserDataAfterMove(fromLocation, toLocation); } public void VerifyUserDataAfterMove(string fromLocation, string toLocation) { - FilesFolders.VerifyBothFolderFilesEqual(fromLocation, toLocation); + FilesFolders.VerifyBothFolderFilesEqual(fromLocation, toLocation, MessageBoxEx.Show); } public void CreateShortcuts() @@ -157,13 +157,13 @@ namespace Flow.Launcher.Core.Configuration // delete it and prompt the user to pick the portable data location if (File.Exists(roamingDataDeleteFilePath)) { - FilesFolders.RemoveFolderIfExists(roamingDataDir); + FilesFolders.RemoveFolderIfExists(roamingDataDir, MessageBoxEx.Show); - if (MessageBox.Show("Flow Launcher has detected you enabled portable mode, " + + if (MessageBoxEx.Show("Flow Launcher has detected you enabled portable mode, " + "would you like to move it to a different location?", string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.Yes) { - FilesFolders.OpenPath(Constant.RootDirectory); + FilesFolders.OpenPath(Constant.RootDirectory, MessageBoxEx.Show); Environment.Exit(0); } @@ -172,9 +172,9 @@ namespace Flow.Launcher.Core.Configuration // delete it and notify the user about it. else if (File.Exists(portableDataDeleteFilePath)) { - FilesFolders.RemoveFolderIfExists(portableDataDir); + FilesFolders.RemoveFolderIfExists(portableDataDir, MessageBoxEx.Show); - MessageBox.Show("Flow Launcher has detected you disabled portable mode, " + + MessageBoxEx.Show("Flow Launcher has detected you disabled portable mode, " + "the relevant shortcuts and uninstaller entry have been created"); } } @@ -186,7 +186,7 @@ namespace Flow.Launcher.Core.Configuration if (roamingLocationExists && portableLocationExists) { - MessageBox.Show(string.Format("Flow Launcher detected your user data exists both in {0} and " + + MessageBoxEx.Show(string.Format("Flow Launcher detected your user data exists both in {0} and " + "{1}. {2}{2}Please delete {1} in order to proceed. No changes have occurred.", DataLocation.PortableDataPath, DataLocation.RoamingDataPath, Environment.NewLine)); diff --git a/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs b/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs index 40eb1be3e..6d41e2383 100644 --- a/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs +++ b/Flow.Launcher.Core/ExternalPlugins/Environments/AbstractPluginEnvironment.cs @@ -4,9 +4,10 @@ using Flow.Launcher.Plugin; using Flow.Launcher.Plugin.SharedCommands; using System; using System.Collections.Generic; -using System.IO; using System.Linq; +using System.Windows; using System.Windows.Forms; +using Flow.Launcher.Core.Resource; namespace Flow.Launcher.Core.ExternalPlugins.Environments { @@ -50,14 +51,15 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments return SetPathForPluginPairs(PluginsSettingsFilePath, Language); } - if (MessageBox.Show($"Flow detected you have installed {Language} plugins, which " + - $"will require {EnvName} to run. Would you like to download {EnvName}? " + - Environment.NewLine + Environment.NewLine + - "Click no if it's already installed, " + - $"and you will be prompted to select the folder that contains the {EnvName} executable", - string.Empty, MessageBoxButtons.YesNo) == DialogResult.No) + var noRuntimeMessage = string.Format( + InternationalizationManager.Instance.GetTranslation("runtimePluginInstalledChooseRuntimePrompt"), + Language, + EnvName, + Environment.NewLine + ); + if (MessageBoxEx.Show(noRuntimeMessage, string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.No) { - var msg = $"Please select the {EnvName} executable"; + var msg = string.Format(InternationalizationManager.Instance.GetTranslation("runtimePluginChooseRuntimeExecutable"), EnvName); string selectedFile; selectedFile = GetFileFromDialog(msg, FileDialogFilter); @@ -80,8 +82,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments } else { - MessageBox.Show( - $"Unable to set {Language} executable path, please try from Flow's settings (scroll down to the bottom)."); + MessageBoxEx.Show(string.Format(InternationalizationManager.Instance.GetTranslation("runtimePluginUnableToSetExecutablePath"), Language)); Log.Error("PluginsLoader", $"Not able to successfully set {EnvName} path, setting's plugin executable path variable is still an empty string.", $"{Language}Environment"); @@ -97,7 +98,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments if (expectedPath == currentPath) return; - FilesFolders.RemoveFolderIfExists(installedDirPath); + FilesFolders.RemoveFolderIfExists(installedDirPath, MessageBoxEx.Show); InstallEnvironment(); diff --git a/Flow.Launcher.Core/ExternalPlugins/Environments/PythonEnvironment.cs b/Flow.Launcher.Core/ExternalPlugins/Environments/PythonEnvironment.cs index 5676e12f5..96c29646e 100644 --- a/Flow.Launcher.Core/ExternalPlugins/Environments/PythonEnvironment.cs +++ b/Flow.Launcher.Core/ExternalPlugins/Environments/PythonEnvironment.cs @@ -28,7 +28,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments internal override void InstallEnvironment() { - FilesFolders.RemoveFolderIfExists(InstallPath); + FilesFolders.RemoveFolderIfExists(InstallPath, MessageBoxEx.Show); // Python 3.11.4 is no longer Windows 7 compatible. If user is on Win 7 and // uses Python plugin they need to custom install and use v3.8.9 diff --git a/Flow.Launcher.Core/ExternalPlugins/Environments/TypeScriptEnvironment.cs b/Flow.Launcher.Core/ExternalPlugins/Environments/TypeScriptEnvironment.cs index 70341f711..0d6f109e0 100644 --- a/Flow.Launcher.Core/ExternalPlugins/Environments/TypeScriptEnvironment.cs +++ b/Flow.Launcher.Core/ExternalPlugins/Environments/TypeScriptEnvironment.cs @@ -25,7 +25,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments internal override void InstallEnvironment() { - FilesFolders.RemoveFolderIfExists(InstallPath); + FilesFolders.RemoveFolderIfExists(InstallPath, MessageBoxEx.Show); DroplexPackage.Drop(App.nodejs_16_18_0, InstallPath).Wait(); diff --git a/Flow.Launcher.Core/ExternalPlugins/Environments/TypeScriptV2Environment.cs b/Flow.Launcher.Core/ExternalPlugins/Environments/TypeScriptV2Environment.cs index 11ed94d3f..582a4407c 100644 --- a/Flow.Launcher.Core/ExternalPlugins/Environments/TypeScriptV2Environment.cs +++ b/Flow.Launcher.Core/ExternalPlugins/Environments/TypeScriptV2Environment.cs @@ -25,7 +25,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments internal override void InstallEnvironment() { - FilesFolders.RemoveFolderIfExists(InstallPath); + FilesFolders.RemoveFolderIfExists(InstallPath, MessageBoxEx.Show); DroplexPackage.Drop(App.nodejs_16_18_0, InstallPath).Wait(); diff --git a/Flow.Launcher.Core/ExternalPlugins/UserPlugin.cs b/Flow.Launcher.Core/ExternalPlugins/UserPlugin.cs index 64c4cd627..79d6d7605 100644 --- a/Flow.Launcher.Core/ExternalPlugins/UserPlugin.cs +++ b/Flow.Launcher.Core/ExternalPlugins/UserPlugin.cs @@ -1,4 +1,4 @@ -using System; +using System; namespace Flow.Launcher.Core.ExternalPlugins { @@ -13,9 +13,11 @@ namespace Flow.Launcher.Core.ExternalPlugins public string Website { get; set; } public string UrlDownload { get; set; } public string UrlSourceCode { get; set; } + public string LocalInstallPath { get; set; } public string IcoPath { get; set; } public DateTime? LatestReleaseDate { get; set; } public DateTime? DateAdded { get; set; } + public bool IsFromLocalInstallPath => !string.IsNullOrEmpty(LocalInstallPath); } } diff --git a/Flow.Launcher.Core/Flow.Launcher.Core.csproj b/Flow.Launcher.Core/Flow.Launcher.Core.csproj index 18101ccf0..8aeca4699 100644 --- a/Flow.Launcher.Core/Flow.Launcher.Core.csproj +++ b/Flow.Launcher.Core/Flow.Launcher.Core.csproj @@ -54,11 +54,11 @@ - - - + + + - + diff --git a/Flow.Launcher.Core/MessageBoxEx.xaml b/Flow.Launcher.Core/MessageBoxEx.xaml new file mode 100644 index 000000000..fff107a68 --- /dev/null +++ b/Flow.Launcher.Core/MessageBoxEx.xaml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/HotkeyControl.xaml.cs b/Flow.Launcher/HotkeyControl.xaml.cs index 3da66caeb..a42bde7c9 100644 --- a/Flow.Launcher/HotkeyControl.xaml.cs +++ b/Flow.Launcher/HotkeyControl.xaml.cs @@ -1,141 +1,204 @@ -using System; +#nullable enable + +using System.Collections.ObjectModel; using System.Threading.Tasks; using System.Windows; -using System.Windows.Controls; using System.Windows.Input; -using System.Windows.Media; using Flow.Launcher.Core.Resource; using Flow.Launcher.Helper; using Flow.Launcher.Infrastructure.Hotkey; -using Flow.Launcher.Plugin; -using System.Threading; namespace Flow.Launcher { - public partial class HotkeyControl : UserControl + public partial class HotkeyControl { - public HotkeyModel CurrentHotkey { get; private set; } - public bool CurrentHotkeyAvailable { get; private set; } + public IHotkeySettings HotkeySettings { + get { return (IHotkeySettings)GetValue(HotkeySettingsProperty); } + set { SetValue(HotkeySettingsProperty, value); } + } - public event EventHandler HotkeyChanged; + public static readonly DependencyProperty HotkeySettingsProperty = DependencyProperty.Register( + nameof(HotkeySettings), + typeof(IHotkeySettings), + typeof(HotkeyControl), + new PropertyMetadata() + ); + public string WindowTitle { + get { return (string)GetValue(WindowTitleProperty); } + set { SetValue(WindowTitleProperty, value); } + } + + public static readonly DependencyProperty WindowTitleProperty = DependencyProperty.Register( + nameof(WindowTitle), + typeof(string), + typeof(HotkeyControl), + new PropertyMetadata(string.Empty) + ); /// /// Designed for Preview Hotkey and KeyGesture. /// - public bool ValidateKeyGesture { get; set; } = false; + public static readonly DependencyProperty ValidateKeyGestureProperty = DependencyProperty.Register( + nameof(ValidateKeyGesture), + typeof(bool), + typeof(HotkeyControl), + new PropertyMetadata(default(bool)) + ); - protected virtual void OnHotkeyChanged() => HotkeyChanged?.Invoke(this, EventArgs.Empty); - - public HotkeyControl() + public bool ValidateKeyGesture { - InitializeComponent(); + get { return (bool)GetValue(ValidateKeyGestureProperty); } + set { SetValue(ValidateKeyGestureProperty, value); } } - private CancellationTokenSource hotkeyUpdateSource; + public static readonly DependencyProperty DefaultHotkeyProperty = DependencyProperty.Register( + nameof(DefaultHotkey), + typeof(string), + typeof(HotkeyControl), + new PropertyMetadata(default(string)) + ); - private void TbHotkey_OnPreviewKeyDown(object sender, KeyEventArgs e) + public string DefaultHotkey { - hotkeyUpdateSource?.Cancel(); - hotkeyUpdateSource?.Dispose(); - hotkeyUpdateSource = new(); - var token = hotkeyUpdateSource.Token; - e.Handled = true; + get { return (string)GetValue(DefaultHotkeyProperty); } + set { SetValue(DefaultHotkeyProperty, value); } + } - //when alt is pressed, the real key should be e.SystemKey - Key key = e.Key == Key.System ? e.SystemKey : e.Key; - - SpecialKeyState specialKeyState = GlobalHotkey.CheckModifiers(); - - var hotkeyModel = new HotkeyModel( - specialKeyState.AltPressed, - specialKeyState.ShiftPressed, - specialKeyState.WinPressed, - specialKeyState.CtrlPressed, - key); - - if (hotkeyModel.Equals(CurrentHotkey)) + private static void OnHotkeyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + if (d is not HotkeyControl hotkeyControl) { return; } - _ = Dispatcher.InvokeAsync(async () => - { - await Task.Delay(500, token); - if (!token.IsCancellationRequested) - await SetHotkeyAsync(hotkeyModel); - }); + hotkeyControl.SetKeysToDisplay(new HotkeyModel(hotkeyControl.Hotkey)); + hotkeyControl.CurrentHotkey = new HotkeyModel(hotkeyControl.Hotkey); } - public async Task SetHotkeyAsync(HotkeyModel keyModel, bool triggerValidate = true) - { - tbHotkey.Text = keyModel.ToString(); - tbHotkey.Select(tbHotkey.Text.Length, 0); + public static readonly DependencyProperty ChangeHotkeyProperty = DependencyProperty.Register( + nameof(ChangeHotkey), + typeof(ICommand), + typeof(HotkeyControl), + new PropertyMetadata(default(ICommand)) + ); + + public ICommand? ChangeHotkey + { + get { return (ICommand)GetValue(ChangeHotkeyProperty); } + set { SetValue(ChangeHotkeyProperty, value); } + } + + + public static readonly DependencyProperty HotkeyProperty = DependencyProperty.Register( + nameof(Hotkey), + typeof(string), + typeof(HotkeyControl), + new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, OnHotkeyChanged) + ); + + public string Hotkey + { + get { return (string)GetValue(HotkeyProperty); } + set { SetValue(HotkeyProperty, value); } + } + + public HotkeyControl() + { + InitializeComponent(); + + HotkeyList.ItemsSource = KeysToDisplay; + SetKeysToDisplay(CurrentHotkey); + } + + private static bool CheckHotkeyAvailability(HotkeyModel hotkey, bool validateKeyGesture) => + hotkey.Validate(validateKeyGesture) && HotKeyMapper.CheckAvailability(hotkey); + + public string EmptyHotkey => InternationalizationManager.Instance.GetTranslation("none"); + + public ObservableCollection KeysToDisplay { get; set; } = new(); + + public HotkeyModel CurrentHotkey { get; private set; } = new(false, false, false, false, Key.None); + + + public void GetNewHotkey(object sender, RoutedEventArgs e) + { + OpenHotkeyDialog(); + } + + private async Task OpenHotkeyDialog() + { + if (!string.IsNullOrEmpty(Hotkey)) + { + HotKeyMapper.RemoveHotkey(Hotkey); + } + + var dialog = new HotkeyControlDialog(Hotkey, DefaultHotkey, HotkeySettings, WindowTitle); + await dialog.ShowAsync(); + switch (dialog.ResultType) + { + case HotkeyControlDialog.EResultType.Cancel: + SetHotkey(Hotkey); + return; + case HotkeyControlDialog.EResultType.Save: + SetHotkey(dialog.ResultValue); + break; + case HotkeyControlDialog.EResultType.Delete: + Delete(); + break; + } + } + + + private void SetHotkey(HotkeyModel keyModel, bool triggerValidate = true) + { if (triggerValidate) { bool hotkeyAvailable = CheckHotkeyAvailability(keyModel, ValidateKeyGesture); - CurrentHotkeyAvailable = hotkeyAvailable; - SetMessage(hotkeyAvailable); - OnHotkeyChanged(); - var token = hotkeyUpdateSource.Token; - await Task.Delay(500, token); - if (token.IsCancellationRequested) - return; - - if (CurrentHotkeyAvailable) + if (!hotkeyAvailable) { - CurrentHotkey = keyModel; - // To trigger LostFocus - FocusManager.SetFocusedElement(FocusManager.GetFocusScope(this), null); - Keyboard.ClearFocus(); + return; } + + Hotkey = keyModel.ToString(); + SetKeysToDisplay(CurrentHotkey); + ChangeHotkey?.Execute(keyModel); } else { - CurrentHotkey = keyModel; + Hotkey = keyModel.ToString(); + ChangeHotkey?.Execute(keyModel); } } - - public Task SetHotkeyAsync(string keyStr, bool triggerValidate = true) + + public void Delete() { - return SetHotkeyAsync(new HotkeyModel(keyStr), triggerValidate); + if (!string.IsNullOrEmpty(Hotkey)) + HotKeyMapper.RemoveHotkey(Hotkey); + Hotkey = ""; + SetKeysToDisplay(new HotkeyModel(false, false, false, false, Key.None)); } - private static bool CheckHotkeyAvailability(HotkeyModel hotkey, bool validateKeyGesture) => hotkey.Validate(validateKeyGesture) && HotKeyMapper.CheckAvailability(hotkey); - - public new bool IsFocused => tbHotkey.IsFocused; - - private void tbHotkey_LostFocus(object sender, RoutedEventArgs e) + private void SetKeysToDisplay(HotkeyModel? hotkey) { - tbHotkey.Text = CurrentHotkey?.ToString() ?? ""; - tbHotkey.Select(tbHotkey.Text.Length, 0); - } + KeysToDisplay.Clear(); - private void tbHotkey_GotFocus(object sender, RoutedEventArgs e) - { - ResetMessage(); - } - - private void ResetMessage() - { - tbMsg.Text = InternationalizationManager.Instance.GetTranslation("flowlauncherPressHotkey"); - tbMsg.SetResourceReference(TextBox.ForegroundProperty, "Color05B"); - } - - private void SetMessage(bool hotkeyAvailable) - { - if (!hotkeyAvailable) + if (hotkey == null || hotkey == default(HotkeyModel)) { - tbMsg.Foreground = new SolidColorBrush(Colors.Red); - tbMsg.Text = InternationalizationManager.Instance.GetTranslation("hotkeyUnavailable"); + KeysToDisplay.Add(EmptyHotkey); + return; } - else + + foreach (var key in hotkey.Value.EnumerateDisplayKeys()!) { - tbMsg.Foreground = new SolidColorBrush(Colors.Green); - tbMsg.Text = InternationalizationManager.Instance.GetTranslation("success"); + KeysToDisplay.Add(key); } - tbMsg.Visibility = Visibility.Visible; + } + + public void SetHotkey(string? keyStr, bool triggerValidate = true) + { + SetHotkey(new HotkeyModel(keyStr), triggerValidate); } } } diff --git a/Flow.Launcher/HotkeyControlDialog.xaml b/Flow.Launcher/HotkeyControlDialog.xaml new file mode 100644 index 000000000..9a5872f4d --- /dev/null +++ b/Flow.Launcher/HotkeyControlDialog.xaml @@ -0,0 +1,169 @@ + + + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/Resources/Controls/HotkeyDisplay.xaml.cs b/Flow.Launcher/Resources/Controls/HotkeyDisplay.xaml.cs new file mode 100644 index 000000000..9b19ffd86 --- /dev/null +++ b/Flow.Launcher/Resources/Controls/HotkeyDisplay.xaml.cs @@ -0,0 +1,63 @@ +using System.Collections.ObjectModel; +using System.Windows; +using System.Windows.Controls; + +namespace Flow.Launcher.Resources.Controls +{ + public partial class HotkeyDisplay : UserControl + { + public enum DisplayType + { + Default, + Small + } + + public HotkeyDisplay() + { + InitializeComponent(); + //List stringList =e.NewValue.Split('+').ToList(); + Values = new ObservableCollection(); + KeysControl.ItemsSource = Values; + } + + public string Keys + { + get { return (string)GetValue(KeysProperty); } + set { SetValue(KeysProperty, value); } + } + + public static readonly DependencyProperty KeysProperty = + DependencyProperty.Register(nameof(Keys), typeof(string), typeof(HotkeyDisplay), + new PropertyMetadata(string.Empty, keyChanged)); + + public DisplayType Type + { + get { return (DisplayType)GetValue(TypeProperty); } + set { SetValue(TypeProperty, value); } + } + + public static readonly DependencyProperty TypeProperty = + DependencyProperty.Register(nameof(Type), typeof(DisplayType), typeof(HotkeyDisplay), + new PropertyMetadata(DisplayType.Default)); + + private static void keyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) + { + var control = d as UserControl; + if (null == control) return; // This should not be possible + + var newValue = e.NewValue as string; + if (null == newValue) return; + + if (d is not HotkeyDisplay hotkeyDisplay) + return; + + hotkeyDisplay.Values.Clear(); + foreach (var key in newValue.Split('+')) + { + hotkeyDisplay.Values.Add(key); + } + } + + public ObservableCollection Values { get; set; } + } +} diff --git a/Flow.Launcher/Resources/Controls/HyperLink.xaml b/Flow.Launcher/Resources/Controls/HyperLink.xaml new file mode 100644 index 000000000..9ea550afd --- /dev/null +++ b/Flow.Launcher/Resources/Controls/HyperLink.xaml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/Flow.Launcher/Resources/Controls/HyperLink.xaml.cs b/Flow.Launcher/Resources/Controls/HyperLink.xaml.cs new file mode 100644 index 000000000..855cccdbd --- /dev/null +++ b/Flow.Launcher/Resources/Controls/HyperLink.xaml.cs @@ -0,0 +1,39 @@ +using System.Windows; +using System.Windows.Controls; +using System.Windows.Navigation; + +namespace Flow.Launcher.Resources.Controls; + +public partial class HyperLink : UserControl +{ + public static readonly DependencyProperty UriProperty = DependencyProperty.Register( + nameof(Uri), typeof(string), typeof(HyperLink), new PropertyMetadata(default(string)) + ); + + public string Uri + { + get => (string)GetValue(UriProperty); + set => SetValue(UriProperty, value); + } + + public static readonly DependencyProperty TextProperty = DependencyProperty.Register( + nameof(Text), typeof(string), typeof(HyperLink), new PropertyMetadata(default(string)) + ); + + public string Text + { + get => (string)GetValue(TextProperty); + set => SetValue(TextProperty, value); + } + + public HyperLink() + { + InitializeComponent(); + } + + private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e) + { + App.API.OpenUrl(e.Uri); + e.Handled = true; + } +} diff --git a/Flow.Launcher/Resources/Controls/InstalledPluginDisplay.xaml b/Flow.Launcher/Resources/Controls/InstalledPluginDisplay.xaml new file mode 100644 index 000000000..ed3c29690 --- /dev/null +++ b/Flow.Launcher/Resources/Controls/InstalledPluginDisplay.xaml @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/Resources/Controls/InstalledPluginDisplay.xaml.cs b/Flow.Launcher/Resources/Controls/InstalledPluginDisplay.xaml.cs new file mode 100644 index 000000000..dfa03a204 --- /dev/null +++ b/Flow.Launcher/Resources/Controls/InstalledPluginDisplay.xaml.cs @@ -0,0 +1,9 @@ +namespace Flow.Launcher.Resources.Controls; + +public partial class InstalledPluginDisplay +{ + public InstalledPluginDisplay() + { + InitializeComponent(); + } +} diff --git a/Flow.Launcher/Resources/Controls/InstalledPluginDisplayBottomData.xaml b/Flow.Launcher/Resources/Controls/InstalledPluginDisplayBottomData.xaml new file mode 100644 index 000000000..83a771728 --- /dev/null +++ b/Flow.Launcher/Resources/Controls/InstalledPluginDisplayBottomData.xaml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/Resources/Controls/InstalledPluginDisplayBottomData.xaml.cs b/Flow.Launcher/Resources/Controls/InstalledPluginDisplayBottomData.xaml.cs new file mode 100644 index 000000000..f8d0afe61 --- /dev/null +++ b/Flow.Launcher/Resources/Controls/InstalledPluginDisplayBottomData.xaml.cs @@ -0,0 +1,11 @@ +using System.Windows.Controls; + +namespace Flow.Launcher.Resources.Controls; + +public partial class InstalledPluginDisplayBottomData : UserControl +{ + public InstalledPluginDisplayBottomData() + { + InitializeComponent(); + } +} diff --git a/Flow.Launcher/Resources/Controls/InstalledPluginDisplayKeyword.xaml b/Flow.Launcher/Resources/Controls/InstalledPluginDisplayKeyword.xaml new file mode 100644 index 000000000..ff2f14c4b --- /dev/null +++ b/Flow.Launcher/Resources/Controls/InstalledPluginDisplayKeyword.xaml @@ -0,0 +1,47 @@ + + + + +  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - + - + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/SettingPages/Views/SettingsPaneAbout.xaml.cs b/Flow.Launcher/SettingPages/Views/SettingsPaneAbout.xaml.cs new file mode 100644 index 000000000..de6a4df5e --- /dev/null +++ b/Flow.Launcher/SettingPages/Views/SettingsPaneAbout.xaml.cs @@ -0,0 +1,29 @@ +using System; +using System.Windows.Navigation; +using Flow.Launcher.SettingPages.ViewModels; + +namespace Flow.Launcher.SettingPages.Views; + +public partial class SettingsPaneAbout +{ + private SettingsPaneAboutViewModel _viewModel = null!; + + protected override void OnNavigatedTo(NavigationEventArgs e) + { + if (!IsInitialized) + { + if (e.ExtraData is not SettingWindow.PaneData { Settings: { } settings, Updater: { } updater }) + throw new ArgumentException("Settings are required for SettingsPaneAbout."); + _viewModel = new SettingsPaneAboutViewModel(settings, updater); + DataContext = _viewModel; + InitializeComponent(); + } + base.OnNavigatedTo(e); + } + + private void OnRequestNavigate(object sender, RequestNavigateEventArgs e) + { + App.API.OpenUrl(e.Uri.AbsoluteUri); + e.Handled = true; + } +} diff --git a/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml b/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml new file mode 100644 index 000000000..30e065b16 --- /dev/null +++ b/Flow.Launcher/SettingPages/Views/SettingsPaneGeneral.xaml @@ -0,0 +1,276 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/SettingPages/Views/SettingsPanePluginStore.xaml.cs b/Flow.Launcher/SettingPages/Views/SettingsPanePluginStore.xaml.cs new file mode 100644 index 000000000..dfb4a7eaf --- /dev/null +++ b/Flow.Launcher/SettingPages/Views/SettingsPanePluginStore.xaml.cs @@ -0,0 +1,66 @@ +using System; +using System.ComponentModel; +using System.Windows.Data; +using System.Windows.Input; +using System.Windows.Navigation; +using Flow.Launcher.Core.Plugin; +using Flow.Launcher.SettingPages.ViewModels; +using Flow.Launcher.ViewModel; + +namespace Flow.Launcher.SettingPages.Views; + +public partial class SettingsPanePluginStore +{ + private SettingsPanePluginStoreViewModel _viewModel = null!; + + protected override void OnNavigatedTo(NavigationEventArgs e) + { + if (!IsInitialized) + { + if (e.ExtraData is not SettingWindow.PaneData { Settings: { } settings }) + throw new ArgumentException($"Settings are required for {nameof(SettingsPanePluginStore)}."); + _viewModel = new SettingsPanePluginStoreViewModel(); + DataContext = _viewModel; + InitializeComponent(); + } + _viewModel.PropertyChanged += ViewModel_PropertyChanged; + base.OnNavigatedTo(e); + } + + private void ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) + { + if (e.PropertyName == nameof(SettingsPanePluginStoreViewModel.FilterText)) + { + ((CollectionViewSource)FindResource("PluginStoreCollectionView")).View.Refresh(); + } + } + + protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) + { + _viewModel.PropertyChanged -= ViewModel_PropertyChanged; + base.OnNavigatingFrom(e); + } + + private void SettingsPanePlugins_OnKeyDown(object sender, KeyEventArgs e) + { + if (e.Key is not Key.F || Keyboard.Modifiers is not ModifierKeys.Control) return; + PluginStoreFilterTextbox.Focus(); + } + + private void Hyperlink_OnRequestNavigate(object sender, RequestNavigateEventArgs e) + { + PluginManager.API.OpenUrl(e.Uri.AbsoluteUri); + e.Handled = true; + } + + private void PluginStoreCollectionView_OnFilter(object sender, FilterEventArgs e) + { + if (e.Item is not PluginStoreItemViewModel plugin) + { + e.Accepted = false; + return; + } + + e.Accepted = _viewModel.SatisfiesFilter(plugin); + } +} diff --git a/Flow.Launcher/SettingPages/Views/SettingsPanePlugins.xaml b/Flow.Launcher/SettingPages/Views/SettingsPanePlugins.xaml new file mode 100644 index 000000000..37079a46f --- /dev/null +++ b/Flow.Launcher/SettingPages/Views/SettingsPanePlugins.xaml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Flow.Launcher/SettingPages/Views/SettingsPanePlugins.xaml.cs b/Flow.Launcher/SettingPages/Views/SettingsPanePlugins.xaml.cs new file mode 100644 index 000000000..d48505c3d --- /dev/null +++ b/Flow.Launcher/SettingPages/Views/SettingsPanePlugins.xaml.cs @@ -0,0 +1,30 @@ +using System; +using System.Windows.Input; +using System.Windows.Navigation; +using Flow.Launcher.SettingPages.ViewModels; + +namespace Flow.Launcher.SettingPages.Views; + +public partial class SettingsPanePlugins +{ + private SettingsPanePluginsViewModel _viewModel = null!; + + protected override void OnNavigatedTo(NavigationEventArgs e) + { + if (!IsInitialized) + { + if (e.ExtraData is not SettingWindow.PaneData { Settings: { } settings }) + throw new ArgumentException("Settings are required for SettingsPaneHotkey."); + _viewModel = new SettingsPanePluginsViewModel(settings); + DataContext = _viewModel; + InitializeComponent(); + } + base.OnNavigatedTo(e); + } + + private void SettingsPanePlugins_OnKeyDown(object sender, KeyEventArgs e) + { + if (e.Key is not Key.F || Keyboard.Modifiers is not ModifierKeys.Control) return; + PluginFilterTextbox.Focus(); + } +} diff --git a/Flow.Launcher/SettingPages/Views/SettingsPaneProxy.xaml b/Flow.Launcher/SettingPages/Views/SettingsPaneProxy.xaml new file mode 100644 index 000000000..768abbf97 --- /dev/null +++ b/Flow.Launcher/SettingPages/Views/SettingsPaneProxy.xaml @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + @@ -590,2739 +197,72 @@ Grid.Row="0" Width="50" Height="50" + RenderOptions.BitmapScalingMode="HighQuality" Source="images/app.png" /> + TextAlignment="Center" /> - - - - - - - - - - - -  - - - - + + - - - + + + + + - - - - - - - -  - - - + + + + + - - - - - - - -  - - - + + + + + - - - - - - - - + + + + + + + + + + - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - -  - - - - - - - - - - - - -  - - - - - - - - - - - -  - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - -  - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - -  - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - - - - -  - - - - - - - - - - - - - -  - - - - - - - - - - - - + diff --git a/Flow.Launcher/SettingWindow.xaml.cs b/Flow.Launcher/SettingWindow.xaml.cs index 7301be130..cb3f1e4a1 100644 --- a/Flow.Launcher/SettingWindow.xaml.cs +++ b/Flow.Launcher/SettingWindow.xaml.cs @@ -1,538 +1,210 @@ -using Flow.Launcher.Core.Plugin; -using Flow.Launcher.Core.Resource; -using Flow.Launcher.Helper; -using Flow.Launcher.Infrastructure; -using Flow.Launcher.Infrastructure.Hotkey; -using Flow.Launcher.Infrastructure.UserSettings; -using Flow.Launcher.Plugin; -using Flow.Launcher.ViewModel; -using ModernWpf; -using ModernWpf.Controls; -using System; -using System.ComponentModel; -using System.IO; +using System; using System.Windows; -using System.Windows.Data; using System.Windows.Forms; using System.Windows.Input; using System.Windows.Interop; -using System.Windows.Navigation; -using Button = System.Windows.Controls.Button; -using Control = System.Windows.Controls.Control; -using KeyEventArgs = System.Windows.Input.KeyEventArgs; -using MessageBox = System.Windows.MessageBox; +using Flow.Launcher.Core; +using Flow.Launcher.Core.Configuration; +using Flow.Launcher.Helper; +using Flow.Launcher.Infrastructure.UserSettings; +using Flow.Launcher.Plugin; +using Flow.Launcher.SettingPages.Views; +using Flow.Launcher.ViewModel; +using ModernWpf.Controls; using TextBox = System.Windows.Controls.TextBox; -using ThemeManager = ModernWpf.ThemeManager; -namespace Flow.Launcher +namespace Flow.Launcher; + +public partial class SettingWindow { - public partial class SettingWindow + private readonly IPublicAPI _api; + private readonly Settings _settings; + private readonly SettingWindowViewModel _viewModel; + + public SettingWindow(IPublicAPI api, SettingWindowViewModel viewModel) { - public readonly IPublicAPI API; - private Settings settings; - private SettingWindowViewModel viewModel; + _settings = viewModel.Settings; + DataContext = viewModel; + _viewModel = viewModel; + _api = api; + InitializePosition(); + InitializeComponent(); + } - public SettingWindow(IPublicAPI api, SettingWindowViewModel viewModel) + private void OnLoaded(object sender, RoutedEventArgs e) + { + RefreshMaximizeRestoreButton(); + // Fix (workaround) for the window freezes after lock screen (Win+L) + // https://stackoverflow.com/questions/4951058/software-rendering-mode-wpf + HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource; + HwndTarget hwndTarget = hwndSource.CompositionTarget; + hwndTarget.RenderMode = RenderMode.Default; + + InitializePosition(); + } + + private void OnClosed(object sender, EventArgs e) + { + _settings.SettingWindowState = WindowState; + _settings.SettingWindowTop = Top; + _settings.SettingWindowLeft = Left; + _viewModel.Save(); + _api.SavePluginSettings(); + } + + private void OnCloseExecuted(object sender, ExecutedRoutedEventArgs e) + { + Close(); + } + + private void window_MouseDown(object sender, MouseButtonEventArgs e) /* for close hotkey popup */ + { + if (Keyboard.FocusedElement is not TextBox textBox) { - settings = viewModel.Settings; - DataContext = viewModel; - this.viewModel = viewModel; - API = api; - InitializePosition(); - InitializeComponent(); - + return; } + var tRequest = new TraversalRequest(FocusNavigationDirection.Next); + textBox.MoveFocus(tRequest); + } - #region General + /* Custom TitleBar */ - private void OnLoaded(object sender, RoutedEventArgs e) + private void OnMinimizeButtonClick(object sender, RoutedEventArgs e) + { + WindowState = WindowState.Minimized; + } + + private void OnMaximizeRestoreButtonClick(object sender, RoutedEventArgs e) + { + WindowState = WindowState switch { - RefreshMaximizeRestoreButton(); - // Fix (workaround) for the window freezes after lock screen (Win+L) - // https://stackoverflow.com/questions/4951058/software-rendering-mode-wpf - HwndSource hwndSource = PresentationSource.FromVisual(this) as HwndSource; - HwndTarget hwndTarget = hwndSource.CompositionTarget; - hwndTarget.RenderMode = RenderMode.SoftwareOnly; + WindowState.Maximized => WindowState.Normal, + _ => WindowState.Maximized + }; + } - pluginListView = (CollectionView)CollectionViewSource.GetDefaultView(Plugins.ItemsSource); - pluginListView.Filter = PluginListFilter; + private void OnCloseButtonClick(object sender, RoutedEventArgs e) + { + Close(); + } - pluginStoreView = (CollectionView)CollectionViewSource.GetDefaultView(StoreListBox.ItemsSource); - pluginStoreView.Filter = PluginStoreFilter; - - viewModel.PropertyChanged += new PropertyChangedEventHandler(SettingsWindowViewModelChanged); - - InitializePosition(); - } - - private void SettingsWindowViewModelChanged(object sender, PropertyChangedEventArgs e) + private void RefreshMaximizeRestoreButton() + { + if (WindowState == WindowState.Maximized) { - if (e.PropertyName == nameof(viewModel.ExternalPlugins)) - { - pluginStoreView = (CollectionView)CollectionViewSource.GetDefaultView(StoreListBox.ItemsSource); - pluginStoreView.Filter = PluginStoreFilter; - pluginStoreView.Refresh(); - } + MaximizeButton.Visibility = Visibility.Collapsed; + RestoreButton.Visibility = Visibility.Visible; } - - private void OnSelectPythonPathClick(object sender, RoutedEventArgs e) + else { - var selectedFile = viewModel.GetFileFromDialog( - InternationalizationManager.Instance.GetTranslation("selectPythonExecutable"), - "Python|pythonw.exe"); - - if (!string.IsNullOrEmpty(selectedFile)) - settings.PluginSettings.PythonExecutablePath = selectedFile; - } - - private void OnSelectNodePathClick(object sender, RoutedEventArgs e) - { - var selectedFile = viewModel.GetFileFromDialog( - InternationalizationManager.Instance.GetTranslation("selectNodeExecutable")); - - if (!string.IsNullOrEmpty(selectedFile)) - settings.PluginSettings.NodeExecutablePath = selectedFile; - } - - private void OnSelectFileManagerClick(object sender, RoutedEventArgs e) - { - SelectFileManagerWindow fileManagerChangeWindow = new SelectFileManagerWindow(settings); - fileManagerChangeWindow.ShowDialog(); - } - - private void OnSelectDefaultBrowserClick(object sender, RoutedEventArgs e) - { - var browserWindow = new SelectBrowserWindow(settings); - browserWindow.ShowDialog(); - } - - #endregion - - #region Hotkey - - private void OnHotkeyControlLoaded(object sender, RoutedEventArgs e) - { - _ = HotkeyControl.SetHotkeyAsync(viewModel.Settings.Hotkey, false); - } - - private void OnHotkeyControlFocused(object sender, RoutedEventArgs e) - { - HotKeyMapper.RemoveHotkey(settings.Hotkey); - } - - private void OnHotkeyControlFocusLost(object sender, RoutedEventArgs e) - { - if (HotkeyControl.CurrentHotkeyAvailable) - { - HotKeyMapper.SetHotkey(HotkeyControl.CurrentHotkey, HotKeyMapper.OnToggleHotkey); - HotKeyMapper.RemoveHotkey(settings.Hotkey); - settings.Hotkey = HotkeyControl.CurrentHotkey.ToString(); - } - else - { - HotKeyMapper.SetHotkey(new HotkeyModel(settings.Hotkey), HotKeyMapper.OnToggleHotkey); - } - } - - private void OnPreviewHotkeyControlLoaded(object sender, RoutedEventArgs e) - { - _ = PreviewHotkeyControl.SetHotkeyAsync(settings.PreviewHotkey, false); - } - - private void OnPreviewHotkeyControlFocusLost(object sender, RoutedEventArgs e) - { - if (PreviewHotkeyControl.CurrentHotkeyAvailable) - { - settings.PreviewHotkey = PreviewHotkeyControl.CurrentHotkey.ToString(); - } - } - - private void OnDeleteCustomHotkeyClick(object sender, RoutedEventArgs e) - { - var item = viewModel.SelectedCustomPluginHotkey; - if (item == null) - { - MessageBox.Show(InternationalizationManager.Instance.GetTranslation("pleaseSelectAnItem")); - return; - } - - string deleteWarning = - string.Format(InternationalizationManager.Instance.GetTranslation("deleteCustomHotkeyWarning"), - item.Hotkey); - if ( - MessageBox.Show(deleteWarning, InternationalizationManager.Instance.GetTranslation("delete"), - MessageBoxButton.YesNo) == MessageBoxResult.Yes) - { - settings.CustomPluginHotkeys.Remove(item); - HotKeyMapper.RemoveHotkey(item.Hotkey); - } - } - - private void OnEditCustomHotkeyClick(object sender, RoutedEventArgs e) - { - var item = viewModel.SelectedCustomPluginHotkey; - if (item != null) - { - CustomQueryHotkeySetting window = new CustomQueryHotkeySetting(this, settings); - window.UpdateItem(item); - window.ShowDialog(); - } - else - { - MessageBox.Show(InternationalizationManager.Instance.GetTranslation("pleaseSelectAnItem")); - } - } - - private void OnAddCustomHotkeyClick(object sender, RoutedEventArgs e) - { - new CustomQueryHotkeySetting(this, settings).ShowDialog(); - } - - #endregion - - #region Plugin - - private void OnPluginToggled(object sender, RoutedEventArgs e) - { - var id = viewModel.SelectedPlugin.PluginPair.Metadata.ID; - // used to sync the current status from the plugin manager into the setting to keep consistency after save - settings.PluginSettings.Plugins[id].Disabled = viewModel.SelectedPlugin.PluginPair.Metadata.Disabled; - } - - private void OnPluginPriorityClick(object sender, RoutedEventArgs e) - { - if (sender is Control { DataContext: PluginViewModel pluginViewModel }) - { - PriorityChangeWindow priorityChangeWindow = new PriorityChangeWindow(pluginViewModel.PluginPair.Metadata.ID, pluginViewModel); - priorityChangeWindow.ShowDialog(); - } - } - - #endregion - - #region Proxy - - private void OnTestProxyClick(object sender, RoutedEventArgs e) - { // TODO: change to command - var msg = viewModel.TestProxy(); - MessageBox.Show(msg); // TODO: add message box service - } - - #endregion - - private void OnCheckUpdates(object sender, RoutedEventArgs e) - { - viewModel.UpdateApp(); // TODO: change to command - } - - private void OnRequestNavigate(object sender, RequestNavigateEventArgs e) - { - API.OpenUrl(e.Uri.AbsoluteUri); - e.Handled = true; - } - - private void OnClosed(object sender, EventArgs e) - { - settings.SettingWindowState = WindowState; - settings.SettingWindowTop = Top; - settings.SettingWindowLeft = Left; - viewModel.Save(); - API.SavePluginSettings(); - } - - private void OnCloseExecuted(object sender, ExecutedRoutedEventArgs e) - { - Close(); - } - - private void OpenThemeFolder(object sender, RoutedEventArgs e) - { - PluginManager.API.OpenDirectory(Path.Combine(DataLocation.DataDirectory(), Constant.Themes)); - } - - private void OpenSettingFolder(object sender, RoutedEventArgs e) - { - PluginManager.API.OpenDirectory(Path.Combine(DataLocation.DataDirectory(), Constant.Settings)); - } - - private void OpenWelcomeWindow(object sender, RoutedEventArgs e) - { - var WelcomeWindow = new WelcomeWindow(settings); - WelcomeWindow.ShowDialog(); - } - private void OpenLogFolder(object sender, RoutedEventArgs e) - { - viewModel.OpenLogFolder(); - } - private void ClearLogFolder(object sender, RoutedEventArgs e) - { - var confirmResult = MessageBox.Show( - InternationalizationManager.Instance.GetTranslation("clearlogfolderMessage"), - InternationalizationManager.Instance.GetTranslation("clearlogfolder"), - MessageBoxButton.YesNo); - - if (confirmResult == MessageBoxResult.Yes) - { - viewModel.ClearLogFolder(); - } - } - - private void OnExternalPluginInstallClick(object sender, RoutedEventArgs e) - { - if (sender is not Button { DataContext: PluginStoreItemViewModel plugin } button) - { - return; - } - - if (storeClickedButton != null) - { - FlyoutService.GetFlyout(storeClickedButton).Hide(); - } - - viewModel.DisplayPluginQuery($"install {plugin.Name}", PluginManager.GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7")); - } - - private void OnExternalPluginUninstallClick(object sender, MouseButtonEventArgs e) - { - if (e.ChangedButton == MouseButton.Left) - { - var name = viewModel.SelectedPlugin.PluginPair.Metadata.Name; - viewModel.DisplayPluginQuery($"uninstall {name}", PluginManager.GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7")); - } - } - - private void OnExternalPluginUninstallClick(object sender, RoutedEventArgs e) - { - if (storeClickedButton != null) - { - FlyoutService.GetFlyout(storeClickedButton).Hide(); - } - - if (sender is Button { DataContext: PluginStoreItemViewModel plugin }) - viewModel.DisplayPluginQuery($"uninstall {plugin.Name}", PluginManager.GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7")); - - } - - private void OnExternalPluginUpdateClick(object sender, RoutedEventArgs e) - { - if (storeClickedButton != null) - { - FlyoutService.GetFlyout(storeClickedButton).Hide(); - } - if (sender is Button { DataContext: PluginStoreItemViewModel plugin }) - viewModel.DisplayPluginQuery($"update {plugin.Name}", PluginManager.GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7")); - - } - - private void window_MouseDown(object sender, MouseButtonEventArgs e) /* for close hotkey popup */ - { - if (Keyboard.FocusedElement is not TextBox textBox) - { - return; - } - var tRequest = new TraversalRequest(FocusNavigationDirection.Next); - textBox.MoveFocus(tRequest); - } - - private void ColorSchemeSelectedIndexChanged(object sender, EventArgs e) - => ThemeManager.Current.ApplicationTheme = settings.ColorScheme switch - { - Constant.Light => ApplicationTheme.Light, - Constant.Dark => ApplicationTheme.Dark, - Constant.System => null, - _ => ThemeManager.Current.ApplicationTheme - }; - - /* Custom TitleBar */ - - private void OnMinimizeButtonClick(object sender, RoutedEventArgs e) - { - WindowState = WindowState.Minimized; - } - - private void OnMaximizeRestoreButtonClick(object sender, RoutedEventArgs e) - { - WindowState = WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized; - } - - private void OnCloseButtonClick(object sender, RoutedEventArgs e) - { - - Close(); - } - - private void RefreshMaximizeRestoreButton() - { - if (WindowState == WindowState.Maximized) - { - maximizeButton.Visibility = Visibility.Collapsed; - restoreButton.Visibility = Visibility.Visible; - } - else - { - maximizeButton.Visibility = Visibility.Visible; - restoreButton.Visibility = Visibility.Collapsed; - } - } - - private void Window_StateChanged(object sender, EventArgs e) - { - RefreshMaximizeRestoreButton(); - } - - #region Shortcut - - private void OnDeleteCustomShortCutClick(object sender, RoutedEventArgs e) - { - viewModel.DeleteSelectedCustomShortcut(); - } - - private void OnEditCustomShortCutClick(object sender, RoutedEventArgs e) - { - if (viewModel.EditSelectedCustomShortcut()) - { - customShortcutView.Items.Refresh(); - } - } - - private void OnAddCustomShortCutClick(object sender, RoutedEventArgs e) - { - viewModel.AddCustomShortcut(); - } - - #endregion - - private CollectionView pluginListView; - private CollectionView pluginStoreView; - - private bool PluginListFilter(object item) - { - if (string.IsNullOrEmpty(pluginFilterTxb.Text)) - return true; - if (item is PluginViewModel model) - { - return StringMatcher.FuzzySearch(pluginFilterTxb.Text, model.PluginPair.Metadata.Name).IsSearchPrecisionScoreMet(); - } - return false; - } - - private bool PluginStoreFilter(object item) - { - if (string.IsNullOrEmpty(pluginStoreFilterTxb.Text)) - return true; - if (item is PluginStoreItemViewModel model) - { - return StringMatcher.FuzzySearch(pluginStoreFilterTxb.Text, model.Name).IsSearchPrecisionScoreMet() - || StringMatcher.FuzzySearch(pluginStoreFilterTxb.Text, model.Description).IsSearchPrecisionScoreMet(); - } - return false; - } - - private string lastPluginListSearch = ""; - private string lastPluginStoreSearch = ""; - - private void RefreshPluginListEventHandler(object sender, RoutedEventArgs e) - { - if (pluginFilterTxb.Text != lastPluginListSearch) - { - lastPluginListSearch = pluginFilterTxb.Text; - pluginListView.Refresh(); - } - } - - private void RefreshPluginStoreEventHandler(object sender, RoutedEventArgs e) - { - if (pluginStoreFilterTxb.Text != lastPluginStoreSearch) - { - lastPluginStoreSearch = pluginStoreFilterTxb.Text; - pluginStoreView.Refresh(); - } - } - - private void PluginFilterTxb_OnKeyDown(object sender, KeyEventArgs e) - { - if (e.Key == Key.Enter) - RefreshPluginListEventHandler(sender, e); - } - - private void PluginStoreFilterTxb_OnKeyDown(object sender, KeyEventArgs e) - { - if (e.Key == Key.Enter) - RefreshPluginStoreEventHandler(sender, e); - } - - private void OnPluginSettingKeydown(object sender, KeyEventArgs e) - { - if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control && e.Key == Key.F) - pluginFilterTxb.Focus(); - } - - private void PluginStore_OnKeyDown(object sender, KeyEventArgs e) - { - if (e.Key == Key.F && (Keyboard.Modifiers & ModifierKeys.Control) != 0) - { - pluginStoreFilterTxb.Focus(); - } - } - - public void InitializePosition() - { - if (settings.SettingWindowTop >= 0 && settings.SettingWindowLeft >= 0) - { - Top = settings.SettingWindowTop; - Left = settings.SettingWindowLeft; - } - else - { - Top = WindowTop(); - Left = WindowLeft(); - } - WindowState = settings.SettingWindowState; - } - - public double WindowLeft() - { - var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); - var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X, 0); - var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.Width, 0); - var left = (dip2.X - this.ActualWidth) / 2 + dip1.X; - return left; - } - - public double WindowTop() - { - var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); - var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y); - var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height); - var top = (dip2.Y - this.ActualHeight) / 2 + dip1.Y - 20; - return top; - } - - private Button storeClickedButton; - - private void StoreListItem_Click(object sender, RoutedEventArgs e) - { - if (sender is not Button button) - return; - - storeClickedButton = button; - - var flyout = FlyoutService.GetFlyout(button); - flyout.Closed += (_, _) => - { - storeClickedButton = null; - }; - - } - - private void PluginStore_GotFocus(object sender, RoutedEventArgs e) - { - Keyboard.Focus(pluginStoreFilterTxb); - } - - private void Plugin_GotFocus(object sender, RoutedEventArgs e) - { - Keyboard.Focus(pluginFilterTxb); + MaximizeButton.Visibility = Visibility.Visible; + RestoreButton.Visibility = Visibility.Collapsed; } } + + private void Window_StateChanged(object sender, EventArgs e) + { + RefreshMaximizeRestoreButton(); + } + + public void InitializePosition() + { + var previousTop = _settings.SettingWindowTop; + var previousLeft = _settings.SettingWindowLeft; + + if (previousTop == null || previousLeft == null || !IsPositionValid(previousTop.Value, previousLeft.Value)) + { + Top = WindowTop(); + Left = WindowLeft(); + } + else + { + Top = previousTop.Value; + Left = previousLeft.Value; + } + WindowState = _settings.SettingWindowState; + } + + private bool IsPositionValid(double top, double left) + { + foreach (var screen in Screen.AllScreens) + { + var workingArea = screen.WorkingArea; + + if (left >= workingArea.Left && left < workingArea.Right && + top >= workingArea.Top && top < workingArea.Bottom) + { + return true; + } + } + return false; + } + + private double WindowLeft() + { + var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); + var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.X, 0); + var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, screen.WorkingArea.Width, 0); + var left = (dip2.X - this.ActualWidth) / 2 + dip1.X; + return left; + } + + private double WindowTop() + { + var screen = Screen.FromPoint(System.Windows.Forms.Cursor.Position); + var dip1 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Y); + var dip2 = WindowsInteropHelper.TransformPixelsToDIP(this, 0, screen.WorkingArea.Height); + var top = (dip2.Y - this.ActualHeight) / 2 + dip1.Y - 20; + return top; + } + + private void NavigationView_SelectionChanged(NavigationView sender, NavigationViewSelectionChangedEventArgs args) + { + var paneData = new PaneData(_settings, _viewModel.Updater, _viewModel.Portable); + if (args.IsSettingsSelected) + { + ContentFrame.Navigate(typeof(SettingsPaneGeneral), paneData); + } + else + { + var selectedItem = (NavigationViewItem)args.SelectedItem; + if (selectedItem == null) + { + NavView_Loaded(sender, null); /* Reset First Page */ + return; + } + + var pageType = selectedItem.Name switch + { + nameof(General) => typeof(SettingsPaneGeneral), + nameof(Plugins) => typeof(SettingsPanePlugins), + nameof(PluginStore) => typeof(SettingsPanePluginStore), + nameof(Theme) => typeof(SettingsPaneTheme), + nameof(Hotkey) => typeof(SettingsPaneHotkey), + nameof(Proxy) => typeof(SettingsPaneProxy), + nameof(About) => typeof(SettingsPaneAbout), + _ => typeof(SettingsPaneGeneral) + }; + ContentFrame.Navigate(pageType, paneData); + } + } + + private void NavView_Loaded(object sender, RoutedEventArgs e) + { + if (ContentFrame.IsLoaded) + { + ContentFrame_Loaded(sender, e); + } + else + { + ContentFrame.Loaded += ContentFrame_Loaded; + } + } + + private void ContentFrame_Loaded(object sender, RoutedEventArgs e) + { + NavView.SelectedItem ??= NavView.MenuItems[0]; /* Set First Page */ + } + + public record PaneData(Settings Settings, Updater Updater, IPortable Portable); } diff --git a/Flow.Launcher/Storage/TopMostRecord.cs b/Flow.Launcher/Storage/TopMostRecord.cs index 052c296cd..cbd0b88fc 100644 --- a/Flow.Launcher/Storage/TopMostRecord.cs +++ b/Flow.Launcher/Storage/TopMostRecord.cs @@ -1,29 +1,30 @@ -using System.Collections.Generic; +using System.Collections.Concurrent; +using System.Collections.Generic; using System.Text.Json.Serialization; using Flow.Launcher.Plugin; namespace Flow.Launcher.Storage { - // todo this class is not thread safe.... but used from multiple threads. public class TopMostRecord { [JsonInclude] - public Dictionary records { get; private set; } = new Dictionary(); + public ConcurrentDictionary records { get; private set; } = new ConcurrentDictionary(); internal bool IsTopMost(Result result) { - if (records.Count == 0 || !records.ContainsKey(result.OriginQuery.RawQuery)) + if (records.IsEmpty || result.OriginQuery == null || + !records.TryGetValue(result.OriginQuery.RawQuery, out var value)) { return false; } // since this dictionary should be very small (or empty) going over it should be pretty fast. - return records[result.OriginQuery.RawQuery].Equals(result); + return value.Equals(result); } internal void Remove(Result result) { - records.Remove(result.OriginQuery.RawQuery); + records.Remove(result.OriginQuery.RawQuery, out _); } internal void AddOrUpdate(Result result) @@ -34,17 +35,15 @@ namespace Flow.Launcher.Storage Title = result.Title, SubTitle = result.SubTitle }; - records[result.OriginQuery.RawQuery] = record; - + records.AddOrUpdate(result.OriginQuery.RawQuery, record, (key, oldValue) => record); } public void Load(Dictionary dictionary) { - records = dictionary; + records = new ConcurrentDictionary(dictionary); } } - public class Record { public string Title { get; set; } diff --git a/Flow.Launcher/Storage/UserSelectedRecord.cs b/Flow.Launcher/Storage/UserSelectedRecord.cs index 6afe1e91f..d6405005d 100644 --- a/Flow.Launcher/Storage/UserSelectedRecord.cs +++ b/Flow.Launcher/Storage/UserSelectedRecord.cs @@ -51,6 +51,11 @@ namespace Flow.Launcher.Storage private static int GenerateQueryAndResultHashCode(Query query, Result result) { + if (query == null) + { + return GenerateResultHashCode(result); + } + int hashcode = GenerateStaticHashCode(query.ActionKeyword); hashcode = GenerateStaticHashCode(query.Search, hashcode); hashcode = GenerateStaticHashCode(result.Title, hashcode); @@ -101,4 +106,4 @@ namespace Flow.Launcher.Storage return selectedCount; } } -} \ No newline at end of file +} diff --git a/Flow.Launcher/Themes/Base.xaml b/Flow.Launcher/Themes/Base.xaml index 2ba3a5929..b96cb661e 100644 --- a/Flow.Launcher/Themes/Base.xaml +++ b/Flow.Launcher/Themes/Base.xaml @@ -28,8 +28,8 @@ - - + + @@ -69,7 +69,7 @@ @@ -115,18 +117,20 @@ - + @@ -135,10 +139,11 @@ - + + @@ -188,7 +193,7 @@ @@ -312,7 +317,7 @@ x:Name="PART_VerticalScrollBar" Grid.Row="0" Grid.Column="0" - Margin="0,0,0,0" + Margin="0 0 0 0" HorizontalAlignment="Right" AutomationProperties.AutomationId="VerticalScrollBar" Cursor="Arrow" @@ -368,22 +373,7 @@ - + @@ -413,16 +403,30 @@ + @@ -495,7 +500,7 @@ @@ -503,7 +508,7 @@ x:Key="ClockPanelPosition" BasedOn="{StaticResource BaseClockPanelPosition}" TargetType="{x:Type Canvas}"> - + - \ No newline at end of file + diff --git a/Flow.Launcher/Themes/BlurWhite.xaml b/Flow.Launcher/Themes/BlurWhite.xaml index 4406724b8..a13f3bfcc 100644 --- a/Flow.Launcher/Themes/BlurWhite.xaml +++ b/Flow.Launcher/Themes/BlurWhite.xaml @@ -1,4 +1,9 @@ - + @@ -96,7 +101,7 @@ TargetType="{x:Type Rectangle}"> - + - - - - - - - - - - - - - #f1f1f1 - - - - - - - - - - 5 - 10 0 10 0 - 0 0 0 10 - - - - - - - - \ No newline at end of file diff --git a/Flow.Launcher/Themes/Circle Light.xaml b/Flow.Launcher/Themes/Circle Light.xaml deleted file mode 100644 index e52e3a957..000000000 --- a/Flow.Launcher/Themes/Circle Light.xaml +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - - - - - - - - - - #5046e5 - - - - - - - - - - 8 - 10 0 10 0 - 0 0 0 10 - - - - - - - - diff --git a/Flow.Launcher/Themes/Circle System.xaml b/Flow.Launcher/Themes/Circle System.xaml index 2b2ce7ca3..343e7c5bc 100644 --- a/Flow.Launcher/Themes/Circle System.xaml +++ b/Flow.Launcher/Themes/Circle System.xaml @@ -1,3 +1,8 @@ + - + @@ -27,7 +32,7 @@ x:Key="QuerySuggestionBoxStyle" BasedOn="{StaticResource BaseQuerySuggestionBoxStyle}" TargetType="{x:Type TextBox}"> - + @@ -72,7 +77,7 @@ TargetType="{x:Type Rectangle}"> - + @@ -150,7 +155,7 @@ x:Key="ClockPanel" BasedOn="{StaticResource ClockPanel}" TargetType="{x:Type StackPanel}"> - + - \ No newline at end of file + diff --git a/Flow.Launcher/Themes/Cyan Dark.xaml b/Flow.Launcher/Themes/Cyan Dark.xaml index 60bc09002..106b1b6d9 100644 --- a/Flow.Launcher/Themes/Cyan Dark.xaml +++ b/Flow.Launcher/Themes/Cyan Dark.xaml @@ -27,7 +27,7 @@ x:Key="ItemGlyph" BasedOn="{StaticResource BaseGlyphStyle}" TargetType="{x:Type TextBlock}"> - + - + \ No newline at end of file diff --git a/Flow.Launcher/Themes/Discord Dark.xaml b/Flow.Launcher/Themes/Discord Dark.xaml index 5315c7644..9e39ee5bd 100644 --- a/Flow.Launcher/Themes/Discord Dark.xaml +++ b/Flow.Launcher/Themes/Discord Dark.xaml @@ -1,4 +1,4 @@ - @@ -189,4 +189,4 @@ TargetType="{x:Type TextBlock}"> - + \ No newline at end of file diff --git a/Flow.Launcher/Themes/Dracula.xaml b/Flow.Launcher/Themes/Dracula.xaml index d150e7355..eb8cc9557 100644 --- a/Flow.Launcher/Themes/Dracula.xaml +++ b/Flow.Launcher/Themes/Dracula.xaml @@ -28,7 +28,6 @@ x:Key="QuerySuggestionBoxStyle" BasedOn="{StaticResource BaseQuerySuggestionBoxStyle}" TargetType="{x:Type TextBox}"> - @@ -98,7 +97,7 @@ diff --git a/Flow.Launcher/Themes/Pink.xaml b/Flow.Launcher/Themes/Pink.xaml index dc97e4320..d6f9813d0 100644 --- a/Flow.Launcher/Themes/Pink.xaml +++ b/Flow.Launcher/Themes/Pink.xaml @@ -2,45 +2,46 @@ - 0 0 0 4 + 0 0 0 0 - #cc1081 + #0e172c \ No newline at end of file diff --git a/Flow.Launcher/Themes/SlimLight.xaml b/Flow.Launcher/Themes/SlimLight.xaml index dc08eec30..078b07048 100644 --- a/Flow.Launcher/Themes/SlimLight.xaml +++ b/Flow.Launcher/Themes/SlimLight.xaml @@ -179,15 +179,28 @@ BasedOn="{StaticResource BaseClockBox}" TargetType="{x:Type TextBlock}"> - + + + + + + + + - - - - - - - - - - - - - - - #ccd0d4 - - - - - - - - - - - - - - - diff --git a/Flow.Launcher/Themes/Win11System.xaml b/Flow.Launcher/Themes/Win10System.xaml similarity index 89% rename from Flow.Launcher/Themes/Win11System.xaml rename to Flow.Launcher/Themes/Win10System.xaml index 3025f9a07..4f8ea5532 100644 --- a/Flow.Launcher/Themes/Win11System.xaml +++ b/Flow.Launcher/Themes/Win10System.xaml @@ -1,3 +1,8 @@ + - + - - + + diff --git a/Flow.Launcher/Themes/Win11Dark.xaml b/Flow.Launcher/Themes/Win11Dark.xaml deleted file mode 100644 index 5abb96cce..000000000 --- a/Flow.Launcher/Themes/Win11Dark.xaml +++ /dev/null @@ -1,195 +0,0 @@ - - - - - 0 0 0 8 - - - - - - - - - - - - - - - #198F8F8F - - - - - - - - - - - - - - - diff --git a/Flow.Launcher/Themes/Win11Light.xaml b/Flow.Launcher/Themes/Win11Light.xaml index e6f376f8b..4fe3c0495 100644 --- a/Flow.Launcher/Themes/Win11Light.xaml +++ b/Flow.Launcher/Themes/Win11Light.xaml @@ -1,72 +1,77 @@ + + - 0 0 0 8 + + - + + - + TargetType="{x:Type Window}" /> + - #198F8F8F - - - - + + + + + + + + 5 + 10 0 10 0 + 0 10 0 10 + diff --git a/Flow.Launcher/ViewModel/MainViewModel.cs b/Flow.Launcher/ViewModel/MainViewModel.cs index 9b799e582..55bc8d1b3 100644 --- a/Flow.Launcher/ViewModel/MainViewModel.cs +++ b/Flow.Launcher/ViewModel/MainViewModel.cs @@ -19,12 +19,12 @@ using Microsoft.VisualStudio.Threading; using System.Text; using System.Threading.Channels; using ISavable = Flow.Launcher.Plugin.ISavable; -using System.IO; -using System.Collections.Specialized; using CommunityToolkit.Mvvm.Input; using System.Globalization; using System.Windows.Input; using System.ComponentModel; +using Flow.Launcher.Infrastructure.Image; +using System.Windows.Media; namespace Flow.Launcher.ViewModel { @@ -42,6 +42,7 @@ namespace Flow.Launcher.ViewModel private readonly FlowLauncherJsonStorage _userSelectedRecordStorage; private readonly FlowLauncherJsonStorage _topMostRecordStorage; private readonly History _history; + private int lastHistoryIndex = 1; private readonly UserSelectedRecord _userSelectedRecord; private readonly TopMostRecord _topMostRecord; @@ -71,6 +72,21 @@ namespace Flow.Launcher.ViewModel case nameof(Settings.WindowSize): OnPropertyChanged(nameof(MainWindowWidth)); break; + case nameof(Settings.WindowHeightSize): + OnPropertyChanged(nameof(MainWindowHeight)); + break; + case nameof(Settings.QueryBoxFontSize): + OnPropertyChanged(nameof(QueryBoxFontSize)); + break; + case nameof(Settings.ItemHeightSize): + OnPropertyChanged(nameof(ItemHeightSize)); + break; + case nameof(Settings.ResultItemFontSize): + OnPropertyChanged(nameof(ResultItemFontSize)); + break; + case nameof(Settings.ResultSubItemFontSize): + OnPropertyChanged(nameof(ResultSubItemFontSize)); + break; case nameof(Settings.AlwaysStartEn): OnPropertyChanged(nameof(StartWithEnglishMode)); break; @@ -80,6 +96,42 @@ namespace Flow.Launcher.ViewModel case nameof(Settings.PreviewHotkey): OnPropertyChanged(nameof(PreviewHotkey)); break; + case nameof(Settings.AutoCompleteHotkey): + OnPropertyChanged(nameof(AutoCompleteHotkey)); + break; + case nameof(Settings.CycleHistoryUpHotkey): + OnPropertyChanged(nameof(CycleHistoryUpHotkey)); + break; + case nameof(Settings.CycleHistoryDownHotkey): + OnPropertyChanged(nameof(CycleHistoryDownHotkey)); + break; + case nameof(Settings.AutoCompleteHotkey2): + OnPropertyChanged(nameof(AutoCompleteHotkey2)); + break; + case nameof(Settings.SelectNextItemHotkey): + OnPropertyChanged(nameof(SelectNextItemHotkey)); + break; + case nameof(Settings.SelectNextItemHotkey2): + OnPropertyChanged(nameof(SelectNextItemHotkey2)); + break; + case nameof(Settings.SelectPrevItemHotkey): + OnPropertyChanged(nameof(SelectPrevItemHotkey)); + break; + case nameof(Settings.SelectPrevItemHotkey2): + OnPropertyChanged(nameof(SelectPrevItemHotkey2)); + break; + case nameof(Settings.SelectNextPageHotkey): + OnPropertyChanged(nameof(SelectNextPageHotkey)); + break; + case nameof(Settings.SelectPrevPageHotkey): + OnPropertyChanged(nameof(SelectPrevPageHotkey)); + break; + case nameof(Settings.OpenContextMenuHotkey): + OnPropertyChanged(nameof(OpenContextMenuHotkey)); + break; + case nameof(Settings.SettingWindowHotkey): + OnPropertyChanged(nameof(SettingWindowHotkey)); + break; } }; @@ -93,15 +145,21 @@ namespace Flow.Launcher.ViewModel ContextMenu = new ResultsViewModel(Settings) { - LeftClickResultCommand = OpenResultCommand, RightClickResultCommand = LoadContextMenuCommand + LeftClickResultCommand = OpenResultCommand, + RightClickResultCommand = LoadContextMenuCommand, + IsPreviewOn = Settings.AlwaysPreview }; Results = new ResultsViewModel(Settings) { - LeftClickResultCommand = OpenResultCommand, RightClickResultCommand = LoadContextMenuCommand + LeftClickResultCommand = OpenResultCommand, + RightClickResultCommand = LoadContextMenuCommand, + IsPreviewOn = Settings.AlwaysPreview }; History = new ResultsViewModel(Settings) { - LeftClickResultCommand = OpenResultCommand, RightClickResultCommand = LoadContextMenuCommand + LeftClickResultCommand = OpenResultCommand, + RightClickResultCommand = LoadContextMenuCommand, + IsPreviewOn = Settings.AlwaysPreview }; _selectedResults = Results; @@ -175,8 +233,11 @@ namespace Flow.Launcher.ViewModel var token = e.Token == default ? _updateToken : e.Token; - PluginManager.UpdatePluginMetadata(e.Results, pair.Metadata, e.Query); - if (!_resultsUpdateChannelWriter.TryWrite(new ResultsForUpdate(e.Results, pair.Metadata, e.Query, + // make a copy of results to avoid plugin change the result when updating view model + var resultsCopy = e.Results.ToList(); + + PluginManager.UpdatePluginMetadata(resultsCopy, pair.Metadata, e.Query); + if (!_resultsUpdateChannelWriter.TryWrite(new ResultsForUpdate(resultsCopy, pair.Metadata, e.Query, token))) { Log.Error("MainViewModel", "Unable to add item to Result Update Queue"); @@ -226,6 +287,32 @@ namespace Flow.Launcher.ViewModel } } + [RelayCommand] + public void ReverseHistory() + { + if (_history.Items.Count > 0) + { + ChangeQueryText(_history.Items[_history.Items.Count - lastHistoryIndex].Query.ToString()); + if (lastHistoryIndex < _history.Items.Count) + { + lastHistoryIndex++; + } + } + } + + [RelayCommand] + public void ForwardHistory() + { + if (_history.Items.Count > 0) + { + ChangeQueryText(_history.Items[_history.Items.Count - lastHistoryIndex].Query.ToString()); + if (lastHistoryIndex > 1) + { + lastHistoryIndex--; + } + } + } + [RelayCommand] private void LoadContextMenu() { @@ -316,6 +403,7 @@ namespace Flow.Launcher.ViewModel { _userSelectedRecord.Add(result); _history.Add(result.OriginQuery.RawQuery); + lastHistoryIndex = 1; } if (hideWindow) @@ -324,6 +412,10 @@ namespace Flow.Launcher.ViewModel } } + #endregion + + #region BasicCommands + [RelayCommand] private void OpenSetting() { @@ -342,6 +434,13 @@ namespace Flow.Launcher.ViewModel SelectedResults.SelectFirstResult(); } + [RelayCommand] + private void SelectLastResult() + { + SelectedResults.SelectLastResult(); + } + + [RelayCommand] private void SelectPrevPage() { @@ -357,7 +456,18 @@ namespace Flow.Launcher.ViewModel [RelayCommand] private void SelectPrevItem() { - SelectedResults.SelectPrevResult(); + if (_history.Items.Count > 0 + && QueryText == string.Empty + && SelectedIsFromQueryResults()) + { + lastHistoryIndex = 1; + ReverseHistory(); + } + else + { + SelectedResults.SelectPrevResult(); + } + } [RelayCommand] @@ -379,12 +489,20 @@ namespace Flow.Launcher.ViewModel } } + public void BackToQueryResults() + { + if (!SelectedIsFromQueryResults()) + { + SelectedResults = Results; + } + } + [RelayCommand] public void ToggleGameMode() { GameModeStatus = !GameModeStatus; } - + [RelayCommand] public void CopyAlternative() { @@ -403,7 +521,6 @@ namespace Flow.Launcher.ViewModel public Settings Settings { get; } public string ClockText { get; private set; } public string DateText { get; private set; } - public CultureInfo Culture => CultureInfo.DefaultThreadCurrentCulture; private async Task RegisterClockAndDateUpdateAsync() { @@ -412,9 +529,9 @@ namespace Flow.Launcher.ViewModel while (await timer.WaitForNextTickAsync().ConfigureAwait(false)) { if (Settings.UseClock) - ClockText = DateTime.Now.ToString(Settings.TimeFormat, Culture); + ClockText = DateTime.Now.ToString(Settings.TimeFormat, CultureInfo.CurrentCulture); if (Settings.UseDate) - DateText = DateTime.Now.ToString(Settings.DateFormat, Culture); + DateText = DateTime.Now.ToString(Settings.DateFormat, CultureInfo.CurrentCulture); } } @@ -442,17 +559,9 @@ namespace Flow.Launcher.ViewModel [RelayCommand] private void IncreaseWidth() { - if (MainWindowWidth + 100 > 1920 || Settings.WindowSize == 1920) - { - Settings.WindowSize = 1920; - } - else - { - Settings.WindowSize += 100; - Settings.WindowLeft -= 50; - } - - OnPropertyChanged(); + Settings.WindowSize += 100; + Settings.WindowLeft -= 50; + OnPropertyChanged(nameof(MainWindowWidth)); } [RelayCommand] @@ -468,7 +577,7 @@ namespace Flow.Launcher.ViewModel Settings.WindowSize -= 100; } - OnPropertyChanged(); + OnPropertyChanged(nameof(MainWindowWidth)); } [RelayCommand] @@ -489,52 +598,6 @@ namespace Flow.Launcher.ViewModel Settings.MaxResultsToShow -= 1; } - [RelayCommand] - public void TogglePreview() - { - if (!PreviewVisible) - { - ShowPreview(); - } - else - { - HidePreview(); - } - } - - private void ShowPreview() - { - ResultAreaColumn = 1; - PreviewVisible = true; - Results.SelectedItem?.LoadPreviewImage(); - } - - private void HidePreview() - { - ResultAreaColumn = 3; - PreviewVisible = false; - } - - public void ResetPreview() - { - if (Settings.AlwaysPreview == true) - { - ShowPreview(); - } - else - { - HidePreview(); - } - } - - private void UpdatePreview() - { - if (PreviewVisible) - { - Results.SelectedItem?.LoadPreviewImage(); - } - } - /// /// we need move cursor to end when we manually changed query /// but we don't want to move cursor to end when query is updated from TextBox @@ -574,12 +637,27 @@ namespace Flow.Launcher.ViewModel get { return _selectedResults; } set { + var isReturningFromContextMenu = ContextMenuSelected(); _selectedResults = value; if (SelectedIsFromQueryResults()) { ContextMenu.Visibility = Visibility.Collapsed; History.Visibility = Visibility.Collapsed; - ChangeQueryText(_queryTextBeforeLeaveResults); + + // QueryText setter (used in ChangeQueryText) runs the query again, resetting the selected + // result from the one that was selected before going into the context menu to the first result. + // The code below correctly restores QueryText and puts the text caret at the end without + // running the query again when returning from the context menu. + if (isReturningFromContextMenu) + { + _queryText = _queryTextBeforeLeaveResults; + OnPropertyChanged(nameof(QueryText)); + QueryTextCursorMovedToEnd = true; + } + else + { + ChangeQueryText(_queryTextBeforeLeaveResults); + } } else { @@ -620,40 +698,262 @@ namespace Flow.Launcher.ViewModel public double MainWindowWidth { get => Settings.WindowSize; - set => Settings.WindowSize = value; + set + { + if (!MainWindowVisibilityStatus) return; + Settings.WindowSize = value; + } } + public double MainWindowHeight + { + get => Settings.WindowHeightSize; + set => Settings.WindowHeightSize = value; + } + + public double QueryBoxFontSize + { + get => Settings.QueryBoxFontSize; + set => Settings.QueryBoxFontSize = value; + } + + public double ItemHeightSize + { + get => Settings.ItemHeightSize; + set => Settings.ItemHeightSize = value; + } + + public double ResultItemFontSize + { + get => Settings.ResultItemFontSize; + set => Settings.ResultItemFontSize = value; + } + + public double ResultSubItemFontSize + { + get => Settings.ResultSubItemFontSize; + set => Settings.ResultSubItemFontSize = value; + } + + public ImageSource PluginIconSource { get; private set; } = null; + public string PluginIconPath { get; set; } = null; public string OpenResultCommandModifiers => Settings.OpenResultModifiers; - public string PreviewHotkey + public string VerifyOrSetDefaultHotkey(string hotkey, string defaultHotkey) { - get + try { - // TODO try to patch issue #1755 - // Added in v1.14.0, remove after v1.16.0. - try - { - var converter = new KeyGestureConverter(); - var key = (KeyGesture)converter.ConvertFromString(Settings.PreviewHotkey); - } - catch (Exception e) when (e is NotSupportedException || e is InvalidEnumArgumentException) - { - Settings.PreviewHotkey = "F1"; - } - - return Settings.PreviewHotkey; + var converter = new KeyGestureConverter(); + var key = (KeyGesture)converter.ConvertFromString(hotkey); } + catch (Exception e) when (e is NotSupportedException || e is InvalidEnumArgumentException) + { + return defaultHotkey; + } + + return hotkey; } + public string PreviewHotkey => VerifyOrSetDefaultHotkey(Settings.PreviewHotkey, "F1"); + public string AutoCompleteHotkey => VerifyOrSetDefaultHotkey(Settings.AutoCompleteHotkey, "Ctrl+Tab"); + public string AutoCompleteHotkey2 => VerifyOrSetDefaultHotkey(Settings.AutoCompleteHotkey2, ""); + public string SelectNextItemHotkey => VerifyOrSetDefaultHotkey(Settings.SelectNextItemHotkey, "Tab"); + public string SelectNextItemHotkey2 => VerifyOrSetDefaultHotkey(Settings.SelectNextItemHotkey2, ""); + public string SelectPrevItemHotkey => VerifyOrSetDefaultHotkey(Settings.SelectPrevItemHotkey, "Shift+Tab"); + public string SelectPrevItemHotkey2 => VerifyOrSetDefaultHotkey(Settings.SelectPrevItemHotkey2, ""); + public string SelectNextPageHotkey => VerifyOrSetDefaultHotkey(Settings.SelectNextPageHotkey, ""); + public string SelectPrevPageHotkey => VerifyOrSetDefaultHotkey(Settings.SelectPrevPageHotkey, ""); + public string OpenContextMenuHotkey => VerifyOrSetDefaultHotkey(Settings.OpenContextMenuHotkey, "Ctrl+O"); + public string SettingWindowHotkey => VerifyOrSetDefaultHotkey(Settings.SettingWindowHotkey, "Ctrl+I"); + public string CycleHistoryUpHotkey => VerifyOrSetDefaultHotkey(Settings.CycleHistoryUpHotkey, "Alt+Up"); + public string CycleHistoryDownHotkey => VerifyOrSetDefaultHotkey(Settings.CycleHistoryDownHotkey, "Alt+Down"); + + public string Image => Constant.QueryTextBoxIconImagePath; public bool StartWithEnglishMode => Settings.AlwaysStartEn; - public bool PreviewVisible { get; set; } = false; + #endregion - public int ResultAreaColumn { get; set; } = 1; + #region Preview + + public bool InternalPreviewVisible + { + get + { + if (ResultAreaColumn == ResultAreaColumnPreviewShown) + return true; + + if (ResultAreaColumn == ResultAreaColumnPreviewHidden) + return false; +#if DEBUG + throw new NotImplementedException("ResultAreaColumn should match ResultAreaColumnPreviewShown/ResultAreaColumnPreviewHidden value"); +#else + Log.Error("MainViewModel", "ResultAreaColumnPreviewHidden/ResultAreaColumnPreviewShown int value not implemented", "InternalPreviewVisible"); +#endif + return false; + } + } + + private static readonly int ResultAreaColumnPreviewShown = 1; + + private static readonly int ResultAreaColumnPreviewHidden = 3; + + public int ResultAreaColumn { get; set; } = ResultAreaColumnPreviewShown; + + // This is not a reliable indicator of whether external preview is visible due to the + // ability of manually closing/exiting the external preview program which, does not inform flow that + // preview is no longer available. + public bool ExternalPreviewVisible { get; set; } = false; + + private void ShowPreview() + { + var useExternalPreview = PluginManager.UseExternalPreview(); + + switch (useExternalPreview) + { + case true + when CanExternalPreviewSelectedResult(out var path): + // Internal preview may still be on when user switches to external + if (InternalPreviewVisible) + HideInternalPreview(); + OpenExternalPreview(path); + break; + + case true + when !CanExternalPreviewSelectedResult(out var _): + if (ExternalPreviewVisible) + CloseExternalPreview(); + ShowInternalPreview(); + break; + + case false: + ShowInternalPreview(); + break; + } + } + + private void HidePreview() + { + if (PluginManager.UseExternalPreview()) + CloseExternalPreview(); + + if (InternalPreviewVisible) + HideInternalPreview(); + } + + [RelayCommand] + private void TogglePreview() + { + if (InternalPreviewVisible || ExternalPreviewVisible) + { + HidePreview(); + } + else + { + ShowPreview(); + } + } + + private void ToggleInternalPreview() + { + if (!InternalPreviewVisible) + { + ShowInternalPreview(); + } + else + { + HideInternalPreview(); + } + } + + private void OpenExternalPreview(string path, bool sendFailToast = true) + { + _ = PluginManager.OpenExternalPreviewAsync(path, sendFailToast).ConfigureAwait(false); + ExternalPreviewVisible = true; + } + + private void CloseExternalPreview() + { + _ = PluginManager.CloseExternalPreviewAsync().ConfigureAwait(false); + ExternalPreviewVisible = false; + } + + private void SwitchExternalPreview(string path, bool sendFailToast = true) + { + _ = PluginManager.SwitchExternalPreviewAsync(path,sendFailToast).ConfigureAwait(false); + } + + private void ShowInternalPreview() + { + ResultAreaColumn = ResultAreaColumnPreviewShown; + Results.SelectedItem?.LoadPreviewImage(); + } + + private void HideInternalPreview() + { + ResultAreaColumn = ResultAreaColumnPreviewHidden; + } + + public void ResetPreview() + { + switch (Settings.AlwaysPreview) + { + case true + when PluginManager.AllowAlwaysPreview() && CanExternalPreviewSelectedResult(out var path): + OpenExternalPreview(path); + break; + + case true: + ShowInternalPreview(); + break; + + case false: + HidePreview(); + break; + } + } + + private void UpdatePreview() + { + switch (PluginManager.UseExternalPreview()) + { + case true + when CanExternalPreviewSelectedResult(out var path): + if (ExternalPreviewVisible) + { + SwitchExternalPreview(path, false); + } + else if (InternalPreviewVisible) + { + HideInternalPreview(); + OpenExternalPreview(path); + } + break; + + case true + when !CanExternalPreviewSelectedResult(out var _): + if (ExternalPreviewVisible) + { + CloseExternalPreview(); + ShowInternalPreview(); + } + break; + + case false + when InternalPreviewVisible: + Results.SelectedItem?.LoadPreviewImage(); + break; + } + } + + private bool CanExternalPreviewSelectedResult(out string path) + { + path = Results.SelectedItem?.Result?.Preview.FilePath; + return !string.IsNullOrEmpty(path); + } #endregion @@ -781,6 +1081,7 @@ namespace Flow.Launcher.ViewModel Results.Clear(); Results.Visibility = Visibility.Collapsed; PluginIconPath = null; + PluginIconSource = null; SearchIconVisibility = Visibility.Visible; return; } @@ -814,11 +1115,13 @@ namespace Flow.Launcher.ViewModel if (plugins.Count == 1) { PluginIconPath = plugins.Single().Metadata.IcoPath; + PluginIconSource = await ImageLoader.LoadAsync(PluginIconPath); SearchIconVisibility = Visibility.Hidden; } else { PluginIconPath = null; + PluginIconSource = null; SearchIconVisibility = Visibility.Visible; } @@ -1071,11 +1374,15 @@ namespace Flow.Launcher.ViewModel public async void Hide() { + lastHistoryIndex = 1; // Trick for no delay MainWindowOpacity = 0; lastContextMenuResult = new Result(); lastContextMenuResults = new List(); + if (ExternalPreviewVisible) + CloseExternalPreview(); + if (!SelectedIsFromQueryResults()) { SelectedResults = Results; @@ -1097,6 +1404,16 @@ namespace Flow.Launcher.ViewModel await Task.Delay(100); LastQuerySelected = false; break; + case LastQueryMode.ActionKeywordPreserved or LastQueryMode.ActionKeywordSelected: + var newQuery = _lastQuery.ActionKeyword; + if (!string.IsNullOrEmpty(newQuery)) + newQuery += " "; + ChangeQueryText(newQuery); + if (Settings.UseAnimation) + await Task.Delay(100); + if (Settings.LastQueryMode == LastQueryMode.ActionKeywordSelected) + LastQuerySelected = false; + break; default: throw new ArgumentException($"wrong LastQueryMode: <{Settings.LastQueryMode}>"); } @@ -1157,12 +1474,14 @@ namespace Flow.Launcher.ViewModel { if (_topMostRecord.IsTopMost(result)) { - result.Score = int.MaxValue; + result.Score = Result.MaxScore; } - else + else if (result.Score != Result.MaxScore) { var priorityScore = metaResults.Metadata.Priority * 150; - result.Score += _userSelectedRecord.GetSelectedCount(result) + priorityScore; + result.Score += result.AddSelectedCount ? + _userSelectedRecord.GetSelectedCount(result) + priorityScore : + priorityScore; } } } diff --git a/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs b/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs index bc98efabc..38b5bec65 100644 --- a/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs +++ b/Flow.Launcher/ViewModel/PluginStoreItemViewModel.cs @@ -1,12 +1,17 @@ using System; +using System.Linq; +using CommunityToolkit.Mvvm.Input; using Flow.Launcher.Core.ExternalPlugins; using Flow.Launcher.Core.Plugin; using Flow.Launcher.Plugin; +using SemanticVersioning; +using Version = SemanticVersioning.Version; namespace Flow.Launcher.ViewModel { - public class PluginStoreItemViewModel : BaseModel + public partial class PluginStoreItemViewModel : BaseModel { + private PluginPair PluginManagerData => PluginManager.GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7"); public PluginStoreItemViewModel(UserPlugin plugin) { _plugin = plugin; @@ -26,19 +31,13 @@ namespace Flow.Launcher.ViewModel public string IcoPath => _plugin.IcoPath; public bool LabelInstalled => PluginManager.GetPluginForId(_plugin.ID) != null; - public bool LabelUpdate => LabelInstalled && VersionConvertor(_plugin.Version) > VersionConvertor(PluginManager.GetPluginForId(_plugin.ID).Metadata.Version); + public bool LabelUpdate => LabelInstalled && new Version(_plugin.Version) > new Version(PluginManager.GetPluginForId(_plugin.ID).Metadata.Version); internal const string None = "None"; internal const string RecentlyUpdated = "RecentlyUpdated"; internal const string NewRelease = "NewRelease"; internal const string Installed = "Installed"; - public Version VersionConvertor(string version) - { - Version ResultVersion = new Version(version); - return ResultVersion; - } - public string Category { get @@ -60,5 +59,13 @@ namespace Flow.Launcher.ViewModel return category; } } + + [RelayCommand] + private void ShowCommandQuery(string action) + { + var actionKeyword = PluginManagerData.Metadata.ActionKeywords.Any() ? PluginManagerData.Metadata.ActionKeywords[0] + " " : String.Empty; + App.API.ChangeQuery($"{actionKeyword}{action} {_plugin.Name}"); + App.API.ShowMainWindow(); + } } } diff --git a/Flow.Launcher/ViewModel/PluginViewModel.cs b/Flow.Launcher/ViewModel/PluginViewModel.cs index d2919507d..4ce8bd470 100644 --- a/Flow.Launcher/ViewModel/PluginViewModel.cs +++ b/Flow.Launcher/ViewModel/PluginViewModel.cs @@ -1,4 +1,5 @@ -using System.Windows; +using System.Linq; +using System.Windows; using System.Windows.Media; using Flow.Launcher.Plugin; using Flow.Launcher.Infrastructure.Image; @@ -6,6 +7,7 @@ using Flow.Launcher.Core.Plugin; using System.Windows.Controls; using CommunityToolkit.Mvvm.Input; using Flow.Launcher.Core.Resource; +using Flow.Launcher.Resources.Controls; namespace Flow.Launcher.ViewModel { @@ -26,6 +28,21 @@ namespace Flow.Launcher.ViewModel } } + private string PluginManagerActionKeyword + { + get + { + var keyword = PluginManager + .GetPluginForId("9f8f9b14-2518-4907-b211-35ab6290dee7") + .Metadata.ActionKeywords.FirstOrDefault(); + return keyword switch + { + null or "*" => string.Empty, + _ => keyword + }; + } + } + private async void LoadIconAsync() { @@ -46,7 +63,11 @@ namespace Flow.Launcher.ViewModel public bool PluginState { get => !PluginPair.Metadata.Disabled; - set => PluginPair.Metadata.Disabled = !value; + set + { + PluginPair.Metadata.Disabled = !value; + PluginSettingsObject.Disabled = !value; + } } public bool IsExpanded { @@ -62,11 +83,19 @@ namespace Flow.Launcher.ViewModel private Control _settingControl; private bool _isExpanded; + + private Control _bottomPart1; + public Control BottomPart1 => IsExpanded ? _bottomPart1 ??= new InstalledPluginDisplayKeyword() : null; + + private Control _bottomPart2; + public Control BottomPart2 => IsExpanded ? _bottomPart2 ??= new InstalledPluginDisplayBottomData() : null; + + public bool HasSettingControl => PluginPair.Plugin is ISettingProvider; public Control SettingControl => IsExpanded ? _settingControl ??= PluginPair.Plugin is not ISettingProvider settingProvider - ? new Control() + ? null : settingProvider.CreateSettingPanel() : null; private ImageSource _image = ImageLoader.MissingImage; @@ -78,6 +107,7 @@ namespace Flow.Launcher.ViewModel public string InitAndQueryTime => InternationalizationManager.Instance.GetTranslation("plugin_init_time") + " " + PluginPair.Metadata.InitTime + "ms, " + InternationalizationManager.Instance.GetTranslation("plugin_query_time") + " " + PluginPair.Metadata.AvgQueryTime + "ms"; public string ActionKeywordsText => string.Join(Query.ActionKeywordSeparator, PluginPair.Metadata.ActionKeywords); public int Priority => PluginPair.Metadata.Priority; + public Infrastructure.UserSettings.Plugin PluginSettingsObject { get; set; } public void ChangeActionKeyword(string newActionKeyword, string oldActionKeyword) { @@ -88,13 +118,14 @@ namespace Flow.Launcher.ViewModel public void ChangePriority(int newPriority) { PluginPair.Metadata.Priority = newPriority; + PluginSettingsObject.Priority = newPriority; OnPropertyChanged(nameof(Priority)); } [RelayCommand] private void EditPluginPriority() { - PriorityChangeWindow priorityChangeWindow = new PriorityChangeWindow(PluginPair.Metadata.ID, this); + PriorityChangeWindow priorityChangeWindow = new PriorityChangeWindow(PluginPair. Metadata.ID, this); priorityChangeWindow.ShowDialog(); } @@ -106,6 +137,19 @@ namespace Flow.Launcher.ViewModel PluginManager.API.OpenDirectory(directory); } + [RelayCommand] + private void OpenSourceCodeLink() + { + PluginManager.API.OpenUrl(PluginPair.Metadata.Website); + } + + [RelayCommand] + private void OpenDeletePluginWindow() + { + PluginManager.API.ChangeQuery($"{PluginManagerActionKeyword} uninstall {PluginPair.Metadata.Name}".Trim(), true); + PluginManager.API.ShowMainWindow(); + } + public static bool IsActionKeywordRegistered(string newActionKeyword) => PluginManager.ActionKeywordRegistered(newActionKeyword); [RelayCommand] diff --git a/Flow.Launcher/ViewModel/ResultViewModel.cs b/Flow.Launcher/ViewModel/ResultViewModel.cs index 3f204c16c..5130e7eba 100644 --- a/Flow.Launcher/ViewModel/ResultViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultViewModel.cs @@ -29,7 +29,7 @@ namespace Flow.Launcher.ViewModel if (Result.Glyph is { FontFamily: not null } glyph) { - // Checks if it's a system installed font, which does not require path to be provided. + // Checks if it's a system installed font, which does not require path to be provided. if (glyph.FontFamily.EndsWith(".ttf") || glyph.FontFamily.EndsWith(".otf")) { string fontFamilyPath = glyph.FontFamily; @@ -64,7 +64,7 @@ namespace Flow.Launcher.ViewModel } - private Settings Settings { get; } + public Settings Settings { get; } public Visibility ShowOpenResultHotkey => Settings.ShowOpenResultHotkey ? Visibility.Visible : Visibility.Collapsed; diff --git a/Flow.Launcher/ViewModel/ResultsViewModel.cs b/Flow.Launcher/ViewModel/ResultsViewModel.cs index d02dc9bd5..7d2b5bc93 100644 --- a/Flow.Launcher/ViewModel/ResultsViewModel.cs +++ b/Flow.Launcher/ViewModel/ResultsViewModel.cs @@ -1,4 +1,5 @@ -using Flow.Launcher.Infrastructure.UserSettings; +using System; +using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; using System.Collections.Generic; using System.Collections.Specialized; @@ -32,9 +33,15 @@ namespace Flow.Launcher.ViewModel _settings = settings; _settings.PropertyChanged += (s, e) => { - if (e.PropertyName == nameof(_settings.MaxResultsToShow)) + switch (e.PropertyName) { - OnPropertyChanged(nameof(MaxHeight)); + case nameof(_settings.MaxResultsToShow): + OnPropertyChanged(nameof(MaxHeight)); + break; + case nameof(_settings.ItemHeightSize): + OnPropertyChanged(nameof(ItemHeightSize)); + OnPropertyChanged(nameof(MaxHeight)); + break; } }; } @@ -43,14 +50,37 @@ namespace Flow.Launcher.ViewModel #region Properties - public double MaxHeight => MaxResults * (double)Application.Current.FindResource("ResultItemHeight")!; + public bool IsPreviewOn { get; set; } + + public double MaxHeight + { + get + { + var newResultsCount = MaxResults; + if (IsPreviewOn) + { + newResultsCount = (int)Math.Ceiling(380 / _settings.ItemHeightSize); + if (newResultsCount < MaxResults) + { + newResultsCount = MaxResults; + } + } + return newResultsCount * _settings.ItemHeightSize; + } + } + + public double ItemHeightSize + { + get => _settings.ItemHeightSize; + set => _settings.ItemHeightSize = value; + } public int SelectedIndex { get; set; } public ResultViewModel SelectedItem { get; set; } public Thickness Margin { get; set; } public Visibility Visibility { get; set; } = Visibility.Collapsed; - + public ICommand RightClickResultCommand { get; init; } public ICommand LeftClickResultCommand { get; init; } @@ -117,6 +147,11 @@ namespace Flow.Launcher.ViewModel SelectedIndex = NewIndex(0); } + public void SelectLastResult() + { + SelectedIndex = NewIndex(Results.Count - 1); + } + public void Clear() { lock (_collectionLock) @@ -147,7 +182,7 @@ namespace Flow.Launcher.ViewModel /// /// To avoid deadlock, this method should not called from main thread /// - public void AddResults(IEnumerable resultsForUpdates, CancellationToken token, bool reselect = true) + public void AddResults(ICollection resultsForUpdates, CancellationToken token, bool reselect = true) { var newResults = NewResults(resultsForUpdates); @@ -193,12 +228,12 @@ namespace Flow.Launcher.ViewModel .ToList(); } - private List NewResults(IEnumerable resultsForUpdates) + private List NewResults(ICollection resultsForUpdates) { if (!resultsForUpdates.Any()) return Results; - return Results.Where(r => r != null && !resultsForUpdates.Any(u => u.ID == r.Result.PluginID)) + return Results.Where(r => r?.Result != null && resultsForUpdates.All(u => u.ID != r.Result.PluginID)) .Concat(resultsForUpdates.SelectMany(u => u.Results, (u, r) => new ResultViewModel(r, _settings))) .OrderByDescending(rv => rv.Result.Score) .ToList(); diff --git a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs index 86a25ffb1..04dd6312b 100644 --- a/Flow.Launcher/ViewModel/SettingWindowViewModel.cs +++ b/Flow.Launcher/ViewModel/SettingWindowViewModel.cs @@ -1,997 +1,66 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Threading.Tasks; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Media; -using System.Windows.Media.Imaging; -using Flow.Launcher.Core; +using Flow.Launcher.Core; using Flow.Launcher.Core.Configuration; -using Flow.Launcher.Core.ExternalPlugins; -using Flow.Launcher.Core.Plugin; -using Flow.Launcher.Core.Resource; -using Flow.Launcher.Helper; -using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure.Storage; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin; -using Flow.Launcher.Plugin.SharedModels; -using System.Collections.ObjectModel; -using CommunityToolkit.Mvvm.Input; -using System.Globalization; -namespace Flow.Launcher.ViewModel +namespace Flow.Launcher.ViewModel; + +public class SettingWindowViewModel : BaseModel { - public partial class SettingWindowViewModel : BaseModel + private readonly FlowLauncherJsonStorage _storage; + + public Updater Updater { get; } + + public IPortable Portable { get; } + + public Settings Settings { get; } + + public SettingWindowViewModel(Updater updater, IPortable portable) { - private readonly Updater _updater; - private readonly IPortable _portable; - private readonly FlowLauncherJsonStorage _storage; - - public SettingWindowViewModel(Updater updater, IPortable portable) - { - _updater = updater; - _portable = portable; - _storage = new FlowLauncherJsonStorage(); - Settings = _storage.Load(); - Settings.PropertyChanged += (s, e) => - { - switch (e.PropertyName) - { - case nameof(Settings.ActivateTimes): - OnPropertyChanged(nameof(ActivatedTimes)); - break; - case nameof(Settings.WindowSize): - OnPropertyChanged(nameof(WindowWidthSize)); - break; - case nameof(Settings.UseDate): - case nameof(Settings.DateFormat): - OnPropertyChanged(nameof(DateText)); - break; - case nameof(Settings.UseClock): - case nameof(Settings.TimeFormat): - OnPropertyChanged(nameof(ClockText)); - break; - case nameof(Settings.Language): - OnPropertyChanged(nameof(ClockText)); - OnPropertyChanged(nameof(DateText)); - OnPropertyChanged(nameof(AlwaysPreviewToolTip)); - break; - case nameof(Settings.PreviewHotkey): - OnPropertyChanged(nameof(AlwaysPreviewToolTip)); - break; - case nameof(Settings.SoundVolume): - OnPropertyChanged(nameof(SoundEffectVolume)); - break; - } - }; - - } - - public Settings Settings { get; set; } - - public async void UpdateApp() - { - await _updater.UpdateAppAsync(App.API, false); - } - - public bool AutoUpdates - { - get => Settings.AutoUpdates; - set - { - Settings.AutoUpdates = value; - - if (value) - { - UpdateApp(); - } - } - } - - public CultureInfo Culture => CultureInfo.DefaultThreadCurrentCulture; - - public bool StartFlowLauncherOnSystemStartup - { - get => Settings.StartFlowLauncherOnSystemStartup; - set - { - Settings.StartFlowLauncherOnSystemStartup = value; - - try - { - if (value) - AutoStartup.Enable(); - else - AutoStartup.Disable(); - } - catch (Exception e) - { - Notification.Show(InternationalizationManager.Instance.GetTranslation("setAutoStartFailed"), e.Message); - } - } - } - - // This is only required to set at startup. When portable mode enabled/disabled a restart is always required - private bool _portableMode = DataLocation.PortableDataLocationInUse(); - public bool PortableMode - { - get => _portableMode; - set - { - if (!_portable.CanUpdatePortability()) - return; - - if (DataLocation.PortableDataLocationInUse()) - { - _portable.DisablePortableMode(); - } - else - { - _portable.EnablePortableMode(); - } - } - } - - /// - /// Save Flow settings. Plugins settings are not included. - /// - public void Save() - { - foreach (var vm in PluginViewModels) - { - var id = vm.PluginPair.Metadata.ID; - - Settings.PluginSettings.Plugins[id].Disabled = vm.PluginPair.Metadata.Disabled; - Settings.PluginSettings.Plugins[id].Priority = vm.Priority; - } - - _storage.Save(); - } - - public string GetFileFromDialog(string title, string filter = "") - { - var dlg = new System.Windows.Forms.OpenFileDialog - { - InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), - Multiselect = false, - CheckFileExists = true, - CheckPathExists = true, - Title = title, - Filter = filter - }; - - var result = dlg.ShowDialog(); - if (result == System.Windows.Forms.DialogResult.OK) - { - return dlg.FileName; - } - else - { - return string.Empty; - } - } - - #region general - - // todo a better name? - public class LastQueryMode : BaseModel - { - public string Display { get; set; } - public Infrastructure.UserSettings.LastQueryMode Value { get; set; } - } - - private List _lastQueryModes = new List(); - public List LastQueryModes - { - get - { - if (_lastQueryModes.Count == 0) - { - _lastQueryModes = InitLastQueryModes(); - } - return _lastQueryModes; - } - } - - private List InitLastQueryModes() - { - var modes = new List(); - var enums = (Infrastructure.UserSettings.LastQueryMode[])Enum.GetValues(typeof(Infrastructure.UserSettings.LastQueryMode)); - foreach (var e in enums) - { - var key = $"LastQuery{e}"; - var display = _translater.GetTranslation(key); - var m = new LastQueryMode - { - Display = display, Value = e, - }; - modes.Add(m); - } - return modes; - } - - private void UpdateLastQueryModeDisplay() - { - foreach (var item in LastQueryModes) - { - item.Display = _translater.GetTranslation($"LastQuery{item.Value}"); - } - } - - public string Language - { - get - { - return Settings.Language; - } - set - { - InternationalizationManager.Instance.ChangeLanguage(value); - - if (InternationalizationManager.Instance.PromptShouldUsePinyin(value)) - ShouldUsePinyin = true; - - UpdateLastQueryModeDisplay(); - } - } - - public bool ShouldUsePinyin - { - get - { - return Settings.ShouldUsePinyin; - } - set - { - Settings.ShouldUsePinyin = value; - } - } - - public List QuerySearchPrecisionStrings - { - get - { - var precisionStrings = new List(); - - var enumList = Enum.GetValues(typeof(SearchPrecisionScore)).Cast().ToList(); - - enumList.ForEach(x => precisionStrings.Add(x.ToString())); - - return precisionStrings; - } - } - - public List OpenResultModifiersList => new List - { - KeyConstant.Alt, - KeyConstant.Ctrl, - $"{KeyConstant.Ctrl}+{KeyConstant.Alt}" - }; - private Internationalization _translater => InternationalizationManager.Instance; - public List Languages => _translater.LoadAvailableLanguages(); - public IEnumerable MaxResultsRange => Enumerable.Range(2, 16); - - public string AlwaysPreviewToolTip => string.Format(_translater.GetTranslation("AlwaysPreviewToolTip"), Settings.PreviewHotkey); - - public string TestProxy() - { - var proxyServer = Settings.Proxy.Server; - var proxyUserName = Settings.Proxy.UserName; - if (string.IsNullOrEmpty(proxyServer)) - { - return InternationalizationManager.Instance.GetTranslation("serverCantBeEmpty"); - } - if (Settings.Proxy.Port <= 0) - { - return InternationalizationManager.Instance.GetTranslation("portCantBeEmpty"); - } - - HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_updater.GitHubRepository); - - if (string.IsNullOrEmpty(proxyUserName) || string.IsNullOrEmpty(Settings.Proxy.Password)) - { - request.Proxy = new WebProxy(proxyServer, Settings.Proxy.Port); - } - else - { - request.Proxy = new WebProxy(proxyServer, Settings.Proxy.Port) - { - Credentials = new NetworkCredential(proxyUserName, Settings.Proxy.Password) - }; - } - try - { - var response = (HttpWebResponse)request.GetResponse(); - if (response.StatusCode == HttpStatusCode.OK) - { - return InternationalizationManager.Instance.GetTranslation("proxyIsCorrect"); - } - else - { - return InternationalizationManager.Instance.GetTranslation("proxyConnectFailed"); - } - } - catch - { - return InternationalizationManager.Instance.GetTranslation("proxyConnectFailed"); - } - } - - #endregion - - #region plugin - - public static string Plugin => @"https://github.com/Flow-Launcher/Flow.Launcher.PluginsManifest"; - public PluginViewModel SelectedPlugin { get; set; } - - public IList PluginViewModels - { - get => PluginManager.AllPlugins - .OrderBy(x => x.Metadata.Disabled) - .ThenBy(y => y.Metadata.Name) - .Select(p => new PluginViewModel - { - PluginPair = p - }) - .ToList(); - } - - public IList ExternalPlugins - { - get - { - return LabelMaker(PluginsManifest.UserPlugins); - } - } - - private IList LabelMaker(IList list) - { - return list.Select(p => new PluginStoreItemViewModel(p)) - .OrderByDescending(p => p.Category == PluginStoreItemViewModel.NewRelease) - .ThenByDescending(p => p.Category == PluginStoreItemViewModel.RecentlyUpdated) - .ThenByDescending(p => p.Category == PluginStoreItemViewModel.None) - .ThenByDescending(p => p.Category == PluginStoreItemViewModel.Installed) - .ToList(); - } - - public Control SettingProvider - { - get - { - var settingProvider = SelectedPlugin.PluginPair.Plugin as ISettingProvider; - if (settingProvider != null) - { - var control = settingProvider.CreateSettingPanel(); - control.HorizontalAlignment = HorizontalAlignment.Stretch; - control.VerticalAlignment = VerticalAlignment.Stretch; - return control; - } - else - { - return new Control(); - } - } - } - - [RelayCommand] - private async Task RefreshExternalPluginsAsync() - { - await PluginsManifest.UpdateManifestAsync(); - OnPropertyChanged(nameof(ExternalPlugins)); - } - - - - internal void DisplayPluginQuery(string queryToDisplay, PluginPair plugin, int actionKeywordPosition = 0) - { - var actionKeyword = plugin.Metadata.ActionKeywords.Count == 0 - ? string.Empty - : plugin.Metadata.ActionKeywords[actionKeywordPosition]; - - App.API.ChangeQuery($"{actionKeyword} {queryToDisplay}"); - App.API.ShowMainWindow(); - } - - #endregion - - #region theme - - public static string Theme => @"https://flowlauncher.com/docs/#/how-to-create-a-theme"; - public static string ThemeGallery => @"https://github.com/Flow-Launcher/Flow.Launcher/discussions/1438"; - - public string SelectedTheme - { - get { return Settings.Theme; } - set - { - ThemeManager.Instance.ChangeTheme(value); - - if (ThemeManager.Instance.BlurEnabled && Settings.UseDropShadowEffect) - DropShadowEffect = false; - } - } - - public List Themes - => ThemeManager.Instance.LoadAvailableThemes().Select(Path.GetFileNameWithoutExtension).ToList(); - - public bool DropShadowEffect - { - get { return Settings.UseDropShadowEffect; } - set - { - if (ThemeManager.Instance.BlurEnabled && value) - { - MessageBox.Show(InternationalizationManager.Instance.GetTranslation("shadowEffectNotAllowed")); - return; - } - - if (value) - { - ThemeManager.Instance.AddDropShadowEffectToCurrentTheme(); - } - else - { - ThemeManager.Instance.RemoveDropShadowEffectFromCurrentTheme(); - } - - Settings.UseDropShadowEffect = value; - } - } - - public class ColorScheme - { - public string Display { get; set; } - public ColorSchemes Value { get; set; } - } - - public List ColorSchemes - { - get - { - List modes = new List(); - var enums = (ColorSchemes[])Enum.GetValues(typeof(ColorSchemes)); - foreach (var e in enums) - { - var key = $"ColorScheme{e}"; - var display = _translater.GetTranslation(key); - var m = new ColorScheme - { - Display = display, Value = e, - }; - modes.Add(m); - } - return modes; - } - } - - public class SearchWindowScreen - { - public string Display { get; set; } - public SearchWindowScreens Value { get; set; } - } - - public List SearchWindowScreens - { - get - { - List modes = new List(); - var enums = (SearchWindowScreens[])Enum.GetValues(typeof(SearchWindowScreens)); - foreach (var e in enums) - { - var key = $"SearchWindowScreen{e}"; - var display = _translater.GetTranslation(key); - var m = new SearchWindowScreen - { - Display = display, - Value = e, - }; - modes.Add(m); - } - return modes; - } - } - - public class SearchWindowAlign - { - public string Display { get; set; } - public SearchWindowAligns Value { get; set; } - } - - public List SearchWindowAligns - { - get - { - List modes = new List(); - var enums = (SearchWindowAligns[])Enum.GetValues(typeof(SearchWindowAligns)); - foreach (var e in enums) - { - var key = $"SearchWindowAlign{e}"; - var display = _translater.GetTranslation(key); - var m = new SearchWindowAlign - { - Display = display, Value = e, - }; - modes.Add(m); - } - return modes; - } - } - - public List ScreenNumbers - { - get - { - var screens = System.Windows.Forms.Screen.AllScreens; - var screenNumbers = new List(); - for (int i = 1; i <= screens.Length; i++) - { - screenNumbers.Add(i); - } - return screenNumbers; - } - } - - public List TimeFormatList { get; } = new() - { - "h:mm", - "hh:mm", - "H:mm", - "HH:mm", - "tt h:mm", - "tt hh:mm", - "h:mm tt", - "hh:mm tt", - "hh:mm:ss tt", - "HH:mm:ss" - }; - - public List DateFormatList { get; } = new() - { - "MM'/'dd dddd", - "MM'/'dd ddd", - "MM'/'dd", - "MM'-'dd", - "MMMM', 'dd", - "dd'/'MM", - "dd'-'MM", - "ddd MM'/'dd", - "dddd MM'/'dd", - "dddd", - "ddd dd'/'MM", - "dddd dd'/'MM", - "dddd dd', 'MMMM", - "dd', 'MMMM" - }; - - public string TimeFormat - { - get => Settings.TimeFormat; - set => Settings.TimeFormat = value; - } - - public string DateFormat - { - get => Settings.DateFormat; - set => Settings.DateFormat = value; - } - - public string ClockText => DateTime.Now.ToString(TimeFormat, Culture); - - public string DateText => DateTime.Now.ToString(DateFormat, Culture); - - public double WindowWidthSize - { - get => Settings.WindowSize; - set => Settings.WindowSize = value; - } - - public bool UseGlyphIcons - { - get => Settings.UseGlyphIcons; - set => Settings.UseGlyphIcons = value; - } - - public bool UseAnimation - { - get => Settings.UseAnimation; - set => Settings.UseAnimation = value; - } - - public class AnimationSpeed - { - public string Display { get; set; } - public AnimationSpeeds Value { get; set; } - } - - public List AnimationSpeeds - { - get - { - List speeds = new List(); - var enums = (AnimationSpeeds[])Enum.GetValues(typeof(AnimationSpeeds)); - foreach (var e in enums) - { - var key = $"AnimationSpeed{e}"; - var display = _translater.GetTranslation(key); - var m = new AnimationSpeed - { - Display = display, - Value = e, - }; - speeds.Add(m); - } - return speeds; - } - } - - public bool UseSound - { - get => Settings.UseSound; - set => Settings.UseSound = value; - } - - public double SoundEffectVolume - { - get => Settings.SoundVolume; - set => Settings.SoundVolume = value; - } - - public bool UseClock - { - get => Settings.UseClock; - set => Settings.UseClock = value; - } - - public bool UseDate - { - get => Settings.UseDate; - set => Settings.UseDate = value; - } - - public double SettingWindowWidth - { - get => Settings.SettingWindowWidth; - set => Settings.SettingWindowWidth = value; - } - - public double SettingWindowHeight - { - get => Settings.SettingWindowHeight; - set => Settings.SettingWindowHeight = value; - } - - public double SettingWindowTop - { - get => Settings.SettingWindowTop; - set => Settings.SettingWindowTop = value; - } - - public double SettingWindowLeft - { - get => Settings.SettingWindowLeft; - set => Settings.SettingWindowLeft = value; - } - - public Brush PreviewBackground - { - get - { - var wallpaper = WallpaperPathRetrieval.GetWallpaperPath(); - if (wallpaper != null && File.Exists(wallpaper)) - { - var memStream = new MemoryStream(File.ReadAllBytes(wallpaper)); - var bitmap = new BitmapImage(); - bitmap.BeginInit(); - bitmap.StreamSource = memStream; - bitmap.DecodePixelWidth = 800; - bitmap.DecodePixelHeight = 600; - bitmap.EndInit(); - var brush = new ImageBrush(bitmap) - { - Stretch = Stretch.UniformToFill - }; - return brush; - } - else - { - var wallpaperColor = WallpaperPathRetrieval.GetWallpaperColor(); - var brush = new SolidColorBrush(wallpaperColor); - return brush; - } - } - } - - public ResultsViewModel PreviewResults - { - get - { - var results = new List - { - new Result - { - Title = InternationalizationManager.Instance.GetTranslation("SampleTitleExplorer"), - SubTitle = InternationalizationManager.Instance.GetTranslation("SampleSubTitleExplorer"), - IcoPath = Path.Combine(Constant.ProgramDirectory, @"Plugins\Flow.Launcher.Plugin.Explorer\Images\explorer.png") - }, - new Result - { - Title = InternationalizationManager.Instance.GetTranslation("SampleTitleWebSearch"), - SubTitle = InternationalizationManager.Instance.GetTranslation("SampleSubTitleWebSearch"), - IcoPath = Path.Combine(Constant.ProgramDirectory, @"Plugins\Flow.Launcher.Plugin.WebSearch\Images\web_search.png") - }, - new Result - { - Title = InternationalizationManager.Instance.GetTranslation("SampleTitleProgram"), - SubTitle = InternationalizationManager.Instance.GetTranslation("SampleSubTitleProgram"), - IcoPath = Path.Combine(Constant.ProgramDirectory, @"Plugins\Flow.Launcher.Plugin.Program\Images\program.png") - }, - new Result - { - Title = InternationalizationManager.Instance.GetTranslation("SampleTitleProcessKiller"), - SubTitle = InternationalizationManager.Instance.GetTranslation("SampleSubTitleProcessKiller"), - IcoPath = Path.Combine(Constant.ProgramDirectory, @"Plugins\Flow.Launcher.Plugin.ProcessKiller\Images\app.png") - } - }; - var vm = new ResultsViewModel(Settings); - vm.AddResults(results, "PREVIEW"); - return vm; - } - } - - public FontFamily SelectedQueryBoxFont - { - get - { - if (Fonts.SystemFontFamilies.Count(o => - o.FamilyNames.Values != null && - o.FamilyNames.Values.Contains(Settings.QueryBoxFont)) > 0) - { - var font = new FontFamily(Settings.QueryBoxFont); - return font; - } - else - { - var font = new FontFamily("Segoe UI"); - return font; - } - } - set - { - Settings.QueryBoxFont = value.ToString(); - ThemeManager.Instance.ChangeTheme(Settings.Theme); - } - } - - public FamilyTypeface SelectedQueryBoxFontFaces - { - get - { - var typeface = SyntaxSugars.CallOrRescueDefault( - () => SelectedQueryBoxFont.ConvertFromInvariantStringsOrNormal( - Settings.QueryBoxFontStyle, - Settings.QueryBoxFontWeight, - Settings.QueryBoxFontStretch - )); - return typeface; - } - set - { - Settings.QueryBoxFontStretch = value.Stretch.ToString(); - Settings.QueryBoxFontWeight = value.Weight.ToString(); - Settings.QueryBoxFontStyle = value.Style.ToString(); - ThemeManager.Instance.ChangeTheme(Settings.Theme); - } - } - - public FontFamily SelectedResultFont - { - get - { - if (Fonts.SystemFontFamilies.Count(o => - o.FamilyNames.Values != null && - o.FamilyNames.Values.Contains(Settings.ResultFont)) > 0) - { - var font = new FontFamily(Settings.ResultFont); - return font; - } - else - { - var font = new FontFamily("Segoe UI"); - return font; - } - } - set - { - Settings.ResultFont = value.ToString(); - ThemeManager.Instance.ChangeTheme(Settings.Theme); - } - } - - public FamilyTypeface SelectedResultFontFaces - { - get - { - var typeface = SyntaxSugars.CallOrRescueDefault( - () => SelectedResultFont.ConvertFromInvariantStringsOrNormal( - Settings.ResultFontStyle, - Settings.ResultFontWeight, - Settings.ResultFontStretch - )); - return typeface; - } - set - { - Settings.ResultFontStretch = value.Stretch.ToString(); - Settings.ResultFontWeight = value.Weight.ToString(); - Settings.ResultFontStyle = value.Style.ToString(); - ThemeManager.Instance.ChangeTheme(Settings.Theme); - } - } - - public string ThemeImage => Constant.QueryTextBoxIconImagePath; - - #endregion - - #region hotkey - - public CustomPluginHotkey SelectedCustomPluginHotkey { get; set; } - - #endregion - - #region shortcut - - public ObservableCollection CustomShortcuts => Settings.CustomShortcuts; - - public ObservableCollection BuiltinShortcuts => Settings.BuiltinShortcuts; - - public CustomShortcutModel? SelectedCustomShortcut { get; set; } - - public void DeleteSelectedCustomShortcut() - { - var item = SelectedCustomShortcut; - if (item == null) - { - MessageBox.Show(InternationalizationManager.Instance.GetTranslation("pleaseSelectAnItem")); - return; - } - - string deleteWarning = string.Format( - InternationalizationManager.Instance.GetTranslation("deleteCustomShortcutWarning"), - item.Key, item.Value); - if (MessageBox.Show(deleteWarning, InternationalizationManager.Instance.GetTranslation("delete"), - MessageBoxButton.YesNo) == MessageBoxResult.Yes) - { - Settings.CustomShortcuts.Remove(item); - } - } - - public bool EditSelectedCustomShortcut() - { - var item = SelectedCustomShortcut; - if (item == null) - { - MessageBox.Show(InternationalizationManager.Instance.GetTranslation("pleaseSelectAnItem")); - return false; - } - - var shortcutSettingWindow = new CustomShortcutSetting(item.Key, item.Value, this); - if (shortcutSettingWindow.ShowDialog() == true) - { - // Fix un-selectable shortcut item after the first selection - // https://stackoverflow.com/questions/16789360/wpf-listbox-items-with-changing-hashcode - SelectedCustomShortcut = null; - item.Key = shortcutSettingWindow.Key; - item.Value = shortcutSettingWindow.Value; - SelectedCustomShortcut = item; - return true; - } - return false; - } - - public void AddCustomShortcut() - { - var shortcutSettingWindow = new CustomShortcutSetting(this); - if (shortcutSettingWindow.ShowDialog() == true) - { - var shortcut = new CustomShortcutModel(shortcutSettingWindow.Key, shortcutSettingWindow.Value); - Settings.CustomShortcuts.Add(shortcut); - } - } - - public bool ShortcutExists(string key) - { - return Settings.CustomShortcuts.Any(x => x.Key == key) || Settings.BuiltinShortcuts.Any(x => x.Key == key); - } - - #endregion - - #region about - - public string Website => Constant.Website; - public string SponsorPage => Constant.SponsorPage; - public string ReleaseNotes => _updater.GitHubRepository + @"/releases/latest"; - public string Documentation => Constant.Documentation; - public string Docs => Constant.Docs; - public string Github => Constant.GitHub; - public string Version - { - get - { - if (Constant.Version == "1.0.0") - { - return Constant.Dev; - } - else - { - return Constant.Version; - } - } - } - public string ActivatedTimes => string.Format(_translater.GetTranslation("about_activate_times"), Settings.ActivateTimes); - - public string CheckLogFolder - { - get - { - var logFiles = GetLogFiles(); - long size = logFiles.Sum(file => file.Length); - return string.Format("{0} ({1})", _translater.GetTranslation("clearlogfolder"), BytesToReadableString(size)); - } - } - - private static DirectoryInfo GetLogDir(string version = "") - { - return new DirectoryInfo(Path.Combine(DataLocation.DataDirectory(), Constant.Logs, version)); - } - - private static List GetLogFiles(string version = "") - { - return GetLogDir(version).EnumerateFiles("*", SearchOption.AllDirectories).ToList(); - } - - internal void ClearLogFolder() - { - var logDirectory = GetLogDir(); - var logFiles = GetLogFiles(); - - logFiles.ForEach(f => f.Delete()); - - logDirectory.EnumerateDirectories("*", SearchOption.TopDirectoryOnly) - .Where(dir => !Constant.Version.Equals(dir.Name)) - .ToList() - .ForEach(dir => dir.Delete()); - - OnPropertyChanged(nameof(CheckLogFolder)); - } - - internal void OpenLogFolder() - { - App.API.OpenDirectory(GetLogDir(Constant.Version).FullName); - } - - internal static string BytesToReadableString(long bytes) - { - const int scale = 1024; - string[] orders = new string[] - { - "GB", "MB", "KB", "B" - }; - long max = (long)Math.Pow(scale, orders.Length - 1); - - foreach (string order in orders) - { - if (bytes > max) - return string.Format("{0:##.##} {1}", decimal.Divide(bytes, max), order); - - max /= scale; - } - return "0 B"; - } - - #endregion + _storage = new FlowLauncherJsonStorage(); + + Updater = updater; + Portable = portable; + Settings = _storage.Load(); + } + + public async void UpdateApp() + { + await Updater.UpdateAppAsync(App.API, false); + } + + + + /// + /// Save Flow settings. Plugins settings are not included. + /// + public void Save() + { + _storage.Save(); + } + + public double SettingWindowWidth + { + get => Settings.SettingWindowWidth; + set => Settings.SettingWindowWidth = value; + } + + public double SettingWindowHeight + { + get => Settings.SettingWindowHeight; + set => Settings.SettingWindowHeight = value; + } + + public double? SettingWindowTop + { + get => Settings.SettingWindowTop; + set => Settings.SettingWindowTop = value; + } + + public double? SettingWindowLeft + { + get => Settings.SettingWindowLeft; + set => Settings.SettingWindowLeft = value; } } diff --git a/Flow.Launcher/WelcomeWindow.xaml b/Flow.Launcher/WelcomeWindow.xaml index c7820d436..208fc807f 100644 --- a/Flow.Launcher/WelcomeWindow.xaml +++ b/Flow.Launcher/WelcomeWindow.xaml @@ -10,6 +10,10 @@ Title="{DynamicResource Welcome_Page1_Title}" Width="550" Height="650" + MinWidth="550" + MinHeight="650" + MaxWidth="550" + MaxHeight="650" Activated="OnActivated" Background="{DynamicResource Color00B}" Foreground="{DynamicResource PopupTextColor}" @@ -78,6 +82,7 @@ diff --git a/Flow.Launcher/WelcomeWindow.xaml.cs b/Flow.Launcher/WelcomeWindow.xaml.cs index eaa993872..c3723a8c5 100644 --- a/Flow.Launcher/WelcomeWindow.xaml.cs +++ b/Flow.Launcher/WelcomeWindow.xaml.cs @@ -17,7 +17,6 @@ namespace Flow.Launcher InitializeComponent(); BackButton.IsEnabled = false; this.settings = settings; - ContentFrame.Navigate(PageTypeSelector(1), settings); } private NavigationTransitionInfo _transitionInfo = new SlideNavigationTransitionInfo() @@ -102,9 +101,15 @@ namespace Flow.Launcher var tRequest = new TraversalRequest(FocusNavigationDirection.Next); textBox.MoveFocus(tRequest); } + private void OnActivated(object sender, EventArgs e) { Keyboard.ClearFocus(); } + + private void ContentFrame_Loaded(object sender, RoutedEventArgs e) + { + ContentFrame.Navigate(PageTypeSelector(1), settings); /* Set First Page */ + } } -} \ No newline at end of file +} diff --git a/Flow.Launcher/app.manifest b/Flow.Launcher/app.manifest index 52d1c3932..c45508fcf 100644 --- a/Flow.Launcher/app.manifest +++ b/Flow.Launcher/app.manifest @@ -49,13 +49,12 @@ DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. --> - diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs index 09755fe0c..65757b802 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromeBookmarkLoader.cs @@ -3,23 +3,22 @@ using System; using System.Collections.Generic; using System.IO; -namespace Flow.Launcher.Plugin.BrowserBookmark -{ - public class ChromeBookmarkLoader : ChromiumBookmarkLoader - { - public override List GetBookmarks() - { - return LoadChromeBookmarks(); - } +namespace Flow.Launcher.Plugin.BrowserBookmark; - private List LoadChromeBookmarks() - { - var bookmarks = new List(); - var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); - bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome\User Data"), "Google Chrome")); - bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome SxS\User Data"), "Google Chrome Canary")); - bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Chromium\User Data"), "Chromium")); - return bookmarks; - } +public class ChromeBookmarkLoader : ChromiumBookmarkLoader +{ + public override List GetBookmarks() + { + return LoadChromeBookmarks(); } -} \ No newline at end of file + + private List LoadChromeBookmarks() + { + var bookmarks = new List(); + var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome\User Data"), "Google Chrome")); + bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Google\Chrome SxS\User Data"), "Google Chrome Canary")); + bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Chromium\User Data"), "Chromium")); + return bookmarks; + } +} diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs index 8ce597b30..48acf6109 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/ChromiumBookmarkLoader.cs @@ -4,91 +4,90 @@ using System.IO; 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 GetBookmarks(); + + protected List LoadBookmarks(string browserDataPath, string name) { - public abstract List GetBookmarks(); + var bookmarks = new List(); + if (!Directory.Exists(browserDataPath)) return bookmarks; + var paths = Directory.GetDirectories(browserDataPath); - protected List LoadBookmarks(string browserDataPath, string name) + foreach (var profile in paths) { - var bookmarks = new List(); - if (!Directory.Exists(browserDataPath)) return bookmarks; - var paths = Directory.GetDirectories(browserDataPath); + var bookmarkPath = Path.Combine(profile, "Bookmarks"); + if (!File.Exists(bookmarkPath)) + continue; - foreach (var profile in paths) - { - var bookmarkPath = Path.Combine(profile, "Bookmarks"); - if (!File.Exists(bookmarkPath)) - continue; + Main.RegisterBookmarkFile(bookmarkPath); - Main.RegisterBookmarkFile(bookmarkPath); + var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})"); + bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source)); + } - var source = name + (Path.GetFileName(profile) == "Default" ? "" : $" ({Path.GetFileName(profile)})"); - bookmarks.AddRange(LoadBookmarksFromFile(bookmarkPath, source)); - } + return bookmarks; + } + protected List LoadBookmarksFromFile(string path, string source) + { + var bookmarks = new List(); + + if (!File.Exists(path)) return bookmarks; - } - protected List LoadBookmarksFromFile(string path, string source) - { - var bookmarks = new List(); - - if (!File.Exists(path)) - return bookmarks; - - using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path)); - if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement)) - return bookmarks; - EnumerateRoot(rootElement, bookmarks, source); + using var jsonDocument = JsonDocument.Parse(File.ReadAllText(path)); + if (!jsonDocument.RootElement.TryGetProperty("roots", out var rootElement)) return bookmarks; - } + EnumerateRoot(rootElement, bookmarks, source); + return bookmarks; + } - private void EnumerateRoot(JsonElement rootElement, ICollection bookmarks, string source) + private void EnumerateRoot(JsonElement rootElement, ICollection bookmarks, string source) + { + foreach (var folder in rootElement.EnumerateObject()) { - foreach (var folder in rootElement.EnumerateObject()) - { - if (folder.Value.ValueKind != JsonValueKind.Object) - continue; + if (folder.Value.ValueKind != JsonValueKind.Object) + continue; - // Fix for Opera. It stores bookmarks slightly different than chrome. See PR and bug report for this change for details. - // If various exceptions start to build up here consider splitting this Loader into multiple separate ones. - if (folder.Name == "custom_root") - EnumerateRoot(folder.Value, bookmarks, source); - else - EnumerateFolderBookmark(folder.Value, bookmarks, source); + // Fix for Opera. It stores bookmarks slightly different than chrome. See PR and bug report for this change for details. + // If various exceptions start to build up here consider splitting this Loader into multiple separate ones. + if (folder.Name == "custom_root") + EnumerateRoot(folder.Value, bookmarks, source); + else + EnumerateFolderBookmark(folder.Value, bookmarks, source); + } + } + + private void EnumerateFolderBookmark(JsonElement folderElement, ICollection bookmarks, + string source) + { + if (!folderElement.TryGetProperty("children", out var childrenElement)) + return; + foreach (var subElement in childrenElement.EnumerateArray()) + { + if (subElement.TryGetProperty("type", out var type)) + { + switch (type.GetString()) + { + case "folder": + case "workspace": // Edge Workspace + EnumerateFolderBookmark(subElement, bookmarks, source); + break; + default: + bookmarks.Add(new Bookmark( + subElement.GetProperty("name").GetString(), + subElement.GetProperty("url").GetString(), + source)); + break; + } } - } - - private void EnumerateFolderBookmark(JsonElement folderElement, ICollection bookmarks, - string source) - { - if (!folderElement.TryGetProperty("children", out var childrenElement)) - return; - foreach (var subElement in childrenElement.EnumerateArray()) + else { - if (subElement.TryGetProperty("type", out var type)) - { - switch (type.GetString()) - { - case "folder": - case "workspace": // Edge Workspace - EnumerateFolderBookmark(subElement, bookmarks, source); - break; - default: - bookmarks.Add(new Bookmark( - subElement.GetProperty("name").GetString(), - subElement.GetProperty("url").GetString(), - source)); - break; - } - } - else - { - Log.Error( - $"ChromiumBookmarkLoader: EnumerateFolderBookmark: type property not found for {subElement.GetString()}"); - } + Log.Error( + $"ChromiumBookmarkLoader: EnumerateFolderBookmark: type property not found for {subElement.GetString()}"); } } } diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/BookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/BookmarkLoader.cs index d08c05b6b..3468015eb 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/BookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Commands/BookmarkLoader.cs @@ -4,56 +4,55 @@ using Flow.Launcher.Infrastructure; using Flow.Launcher.Plugin.BrowserBookmark.Models; using Flow.Launcher.Plugin.SharedModels; -namespace Flow.Launcher.Plugin.BrowserBookmark.Commands +namespace Flow.Launcher.Plugin.BrowserBookmark.Commands; + +internal static class BookmarkLoader { - internal static class BookmarkLoader + internal static MatchResult MatchProgram(Bookmark bookmark, string queryString) { - internal static MatchResult MatchProgram(Bookmark bookmark, string queryString) - { - var match = StringMatcher.FuzzySearch(queryString, bookmark.Name); - if (match.IsSearchPrecisionScoreMet()) - return match; + var match = StringMatcher.FuzzySearch(queryString, bookmark.Name); + if (match.IsSearchPrecisionScoreMet()) + return match; - return StringMatcher.FuzzySearch(queryString, bookmark.Url); + return StringMatcher.FuzzySearch(queryString, bookmark.Url); + } + + internal static List LoadAllBookmarks(Settings setting) + { + var allBookmarks = new List(); + + if (setting.LoadChromeBookmark) + { + // Add Chrome bookmarks + var chromeBookmarks = new ChromeBookmarkLoader(); + allBookmarks.AddRange(chromeBookmarks.GetBookmarks()); } - internal static List LoadAllBookmarks(Settings setting) + if (setting.LoadFirefoxBookmark) { - var allBookmarks = new List(); - - if (setting.LoadChromeBookmark) - { - // Add Chrome bookmarks - var chromeBookmarks = new ChromeBookmarkLoader(); - allBookmarks.AddRange(chromeBookmarks.GetBookmarks()); - } - - if (setting.LoadFirefoxBookmark) - { - // Add Firefox bookmarks - var mozBookmarks = new FirefoxBookmarkLoader(); - allBookmarks.AddRange(mozBookmarks.GetBookmarks()); - } - - if (setting.LoadEdgeBookmark) - { - // Add Edge (Chromium) bookmarks - var edgeBookmarks = new EdgeBookmarkLoader(); - allBookmarks.AddRange(edgeBookmarks.GetBookmarks()); - } - - foreach (var browser in setting.CustomChromiumBrowsers) - { - IBookmarkLoader loader = browser.BrowserType switch - { - BrowserType.Chromium => new CustomChromiumBookmarkLoader(browser), - BrowserType.Firefox => new CustomFirefoxBookmarkLoader(browser), - _ => new CustomChromiumBookmarkLoader(browser), - }; - allBookmarks.AddRange(loader.GetBookmarks()); - } - - return allBookmarks.Distinct().ToList(); + // Add Firefox bookmarks + var mozBookmarks = new FirefoxBookmarkLoader(); + allBookmarks.AddRange(mozBookmarks.GetBookmarks()); } + + if (setting.LoadEdgeBookmark) + { + // Add Edge (Chromium) bookmarks + var edgeBookmarks = new EdgeBookmarkLoader(); + allBookmarks.AddRange(edgeBookmarks.GetBookmarks()); + } + + foreach (var browser in setting.CustomChromiumBrowsers) + { + IBookmarkLoader loader = browser.BrowserType switch + { + BrowserType.Chromium => new CustomChromiumBookmarkLoader(browser), + BrowserType.Firefox => new CustomFirefoxBookmarkLoader(browser), + _ => new CustomChromiumBookmarkLoader(browser), + }; + allBookmarks.AddRange(loader.GetBookmarks()); + } + + return allBookmarks.Distinct().ToList(); } } diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomChromiumBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomChromiumBookmarkLoader.cs index fa98f4d7c..005c83992 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomChromiumBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomChromiumBookmarkLoader.cs @@ -1,19 +1,18 @@ using Flow.Launcher.Plugin.BrowserBookmark.Models; using System.Collections.Generic; -namespace Flow.Launcher.Plugin.BrowserBookmark -{ - public class CustomChromiumBookmarkLoader : ChromiumBookmarkLoader - { - public CustomChromiumBookmarkLoader(CustomBrowser browser) - { - BrowserName = browser.Name; - BrowserDataPath = browser.DataDirectoryPath; - } - public string BrowserDataPath { get; init; } - public string BookmarkFilePath { get; init; } - public string BrowserName { get; init; } +namespace Flow.Launcher.Plugin.BrowserBookmark; - public override List GetBookmarks() => BrowserDataPath != null ? LoadBookmarks(BrowserDataPath, BrowserName) : LoadBookmarksFromFile(BookmarkFilePath, BrowserName); +public class CustomChromiumBookmarkLoader : ChromiumBookmarkLoader +{ + public CustomChromiumBookmarkLoader(CustomBrowser browser) + { + BrowserName = browser.Name; + BrowserDataPath = browser.DataDirectoryPath; } -} \ No newline at end of file + public string BrowserDataPath { get; init; } + public string BookmarkFilePath { get; init; } + public string BrowserName { get; init; } + + public override List GetBookmarks() => BrowserDataPath != null ? LoadBookmarks(BrowserDataPath, BrowserName) : LoadBookmarksFromFile(BookmarkFilePath, BrowserName); +} diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomFirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomFirefoxBookmarkLoader.cs index 82bdc29f5..d0bb7b0cc 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomFirefoxBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/CustomFirefoxBookmarkLoader.cs @@ -2,26 +2,25 @@ using System.IO; using Flow.Launcher.Plugin.BrowserBookmark.Models; -namespace Flow.Launcher.Plugin.BrowserBookmark -{ - public class CustomFirefoxBookmarkLoader : FirefoxBookmarkLoaderBase - { - public CustomFirefoxBookmarkLoader(CustomBrowser browser) - { - BrowserName = browser.Name; - BrowserDataPath = browser.DataDirectoryPath; - } - - /// - /// Path to places.sqlite - /// - public string BrowserDataPath { get; init; } - - public string BrowserName { get; init; } +namespace Flow.Launcher.Plugin.BrowserBookmark; - public override List GetBookmarks() - { - return GetBookmarksFromPath(Path.Combine(BrowserDataPath, "places.sqlite")); - } +public class CustomFirefoxBookmarkLoader : FirefoxBookmarkLoaderBase +{ + public CustomFirefoxBookmarkLoader(CustomBrowser browser) + { + BrowserName = browser.Name; + BrowserDataPath = browser.DataDirectoryPath; + } + + /// + /// Path to places.sqlite + /// + public string BrowserDataPath { get; init; } + + public string BrowserName { get; init; } + + public override List GetBookmarks() + { + return GetBookmarksFromPath(Path.Combine(BrowserDataPath, "places.sqlite")); } } diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs index 79190f0ef..40123b022 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/EdgeBookmarkLoader.cs @@ -3,21 +3,20 @@ using System; using System.Collections.Generic; using System.IO; -namespace Flow.Launcher.Plugin.BrowserBookmark -{ - public class EdgeBookmarkLoader : ChromiumBookmarkLoader - { - private List LoadEdgeBookmarks() - { - var bookmarks = new List(); - var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); - bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge\User Data"), "Microsoft Edge")); - bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge Dev\User Data"), "Microsoft Edge Dev")); - bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge SxS\User Data"), "Microsoft Edge Canary")); +namespace Flow.Launcher.Plugin.BrowserBookmark; - return bookmarks; - } - - public override List GetBookmarks() => LoadEdgeBookmarks(); +public class EdgeBookmarkLoader : ChromiumBookmarkLoader +{ + private List LoadEdgeBookmarks() + { + var bookmarks = new List(); + var platformPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge\User Data"), "Microsoft Edge")); + bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge Dev\User Data"), "Microsoft Edge Dev")); + bookmarks.AddRange(LoadBookmarks(Path.Combine(platformPath, @"Microsoft\Edge SxS\User Data"), "Microsoft Edge Canary")); + + return bookmarks; } -} \ No newline at end of file + + public override List GetBookmarks() => LoadEdgeBookmarks(); +} diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs index 3d061e758..35ad32fb3 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/FirefoxBookmarkLoader.cs @@ -5,140 +5,133 @@ using System.Collections.Generic; using System.IO; using System.Linq; -namespace Flow.Launcher.Plugin.BrowserBookmark +namespace Flow.Launcher.Plugin.BrowserBookmark; + +public abstract class FirefoxBookmarkLoaderBase : IBookmarkLoader { - public abstract class FirefoxBookmarkLoaderBase : IBookmarkLoader - { - public abstract List GetBookmarks(); + public abstract List GetBookmarks(); - private const string queryAllBookmarks = @"SELECT moz_places.url, moz_bookmarks.title - FROM moz_places - INNER JOIN moz_bookmarks ON ( + private const string QueryAllBookmarks = """ + SELECT moz_places.url, moz_bookmarks.title + FROM moz_places + INNER JOIN moz_bookmarks ON ( moz_bookmarks.fk NOT NULL AND moz_bookmarks.title NOT NULL AND moz_bookmarks.fk = moz_places.id - ) - ORDER BY moz_places.visit_count DESC - "; + ) + ORDER BY moz_places.visit_count DESC + """; - private const string dbPathFormat = "Data Source ={0}"; + private const string DbPathFormat = "Data Source ={0}"; - protected static List GetBookmarksFromPath(string placesPath) - { - // Return empty list if the places.sqlite file cannot be found - if (string.IsNullOrEmpty(placesPath) || !File.Exists(placesPath)) - return new List(); + protected static List GetBookmarksFromPath(string placesPath) + { + // Return empty list if the places.sqlite file cannot be found + if (string.IsNullOrEmpty(placesPath) || !File.Exists(placesPath)) + return new List(); - var bookmarkList = new List(); + Main.RegisterBookmarkFile(placesPath); - Main.RegisterBookmarkFile(placesPath); + // create the connection string and init the connection + string dbPath = string.Format(DbPathFormat, placesPath); + using var dbConnection = new SqliteConnection(dbPath); + // Open connection to the database file and execute the query + dbConnection.Open(); + var reader = new SqliteCommand(QueryAllBookmarks, dbConnection).ExecuteReader(); - // create the connection string and init the connection - string dbPath = string.Format(dbPathFormat, placesPath); - using var dbConnection = new SqliteConnection(dbPath); - // Open connection to the database file and execute the query - dbConnection.Open(); - var reader = new SqliteCommand(queryAllBookmarks, dbConnection).ExecuteReader(); - - // return results in List format - bookmarkList = reader.Select( - x => new Bookmark(x["title"] is DBNull ? string.Empty : x["title"].ToString(), - x["url"].ToString()) - ).ToList(); + // return results in List format + return reader + .Select( + x => new Bookmark( + x["title"] is DBNull ? string.Empty : x["title"].ToString(), + x["url"].ToString() + ) + ) + .ToList(); + } +} - return bookmarkList; - } + +public class FirefoxBookmarkLoader : FirefoxBookmarkLoaderBase +{ + /// + /// Searches the places.sqlite db and returns all bookmarks + /// + public override List GetBookmarks() + { + return GetBookmarksFromPath(PlacesPath); } - - public class FirefoxBookmarkLoader : FirefoxBookmarkLoaderBase + /// + /// Path to places.sqlite + /// + private string PlacesPath { - /// - /// Searches the places.sqlite db and returns all bookmarks - /// - public override List GetBookmarks() + get { - return GetBookmarksFromPath(PlacesPath); - } - - /// - /// Path to places.sqlite - /// - private string PlacesPath - { - get - { - var profileFolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Mozilla\Firefox"); - var profileIni = Path.Combine(profileFolderPath, @"profiles.ini"); + var profileFolderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Mozilla\Firefox"); + var profileIni = Path.Combine(profileFolderPath, @"profiles.ini"); - if (!File.Exists(profileIni)) - return string.Empty; + if (!File.Exists(profileIni)) + return string.Empty; - // get firefox default profile directory from profiles.ini - string ini; - using (var sReader = new StreamReader(profileIni)) - { - ini = sReader.ReadToEnd(); - } + // get firefox default profile directory from profiles.ini + using var sReader = new StreamReader(profileIni); + var ini = sReader.ReadToEnd(); - /* - Current profiles.ini structure example as of Firefox version 69.0.1 - - [Install736426B0AF4A39CB] - Default=Profiles/7789f565.default-release <== this is the default profile this plugin will get the bookmarks from. When opened Firefox will load the default profile - Locked=1 + /* + Current profiles.ini structure example as of Firefox version 69.0.1 - [Profile2] - Name=newblahprofile - IsRelative=0 - Path=C:\t6h2yuq8.newblahprofile <== Note this is a custom location path for the profile user can set, we need to cater for this in code. + [Install736426B0AF4A39CB] + Default=Profiles/7789f565.default-release <== this is the default profile this plugin will get the bookmarks from. When opened Firefox will load the default profile + Locked=1 - [Profile1] - Name=default - IsRelative=1 - Path=Profiles/cydum7q4.default - Default=1 + [Profile2] + Name=newblahprofile + IsRelative=0 + Path=C:\t6h2yuq8.newblahprofile <== Note this is a custom location path for the profile user can set, we need to cater for this in code. - [Profile0] - Name=default-release - IsRelative=1 - Path=Profiles/7789f565.default-release + [Profile1] + Name=default + IsRelative=1 + Path=Profiles/cydum7q4.default + Default=1 - [General] - StartWithLastProfile=1 - Version=2 - */ + [Profile0] + Name=default-release + IsRelative=1 + Path=Profiles/7789f565.default-release - var lines = ini.Split(new string[] - { - "\r\n" - }, StringSplitOptions.None).ToList(); + [General] + StartWithLastProfile=1 + Version=2 + */ + var lines = ini.Split("\r\n").ToList(); - var defaultProfileFolderNameRaw = lines.Where(x => x.Contains("Default=") && x != "Default=1").FirstOrDefault() ?? string.Empty; + var defaultProfileFolderNameRaw = lines.FirstOrDefault(x => x.Contains("Default=") && x != "Default=1") ?? string.Empty; - if (string.IsNullOrEmpty(defaultProfileFolderNameRaw)) - return string.Empty; + if (string.IsNullOrEmpty(defaultProfileFolderNameRaw)) + return string.Empty; - var defaultProfileFolderName = defaultProfileFolderNameRaw.Split('=').Last(); + var defaultProfileFolderName = defaultProfileFolderNameRaw.Split('=').Last(); - var indexOfDefaultProfileAtttributePath = lines.IndexOf("Path=" + defaultProfileFolderName); + var indexOfDefaultProfileAttributePath = lines.IndexOf("Path=" + defaultProfileFolderName); - // Seen in the example above, the IsRelative attribute is always above the Path attribute - var relativeAttribute = lines[indexOfDefaultProfileAtttributePath - 1]; + // Seen in the example above, the IsRelative attribute is always above the Path attribute + var relativeAttribute = lines[indexOfDefaultProfileAttributePath - 1]; - return relativeAttribute == "0" // See above, the profile is located in a custom location, path is not relative, so IsRelative=0 - ? defaultProfileFolderName + @"\places.sqlite" - : Path.Combine(profileFolderPath, defaultProfileFolderName) + @"\places.sqlite"; - } - } - } - - public static class Extensions - { - public static IEnumerable Select(this SqliteDataReader reader, Func projection) - { - while (reader.Read()) - { - yield return projection(reader); - } + return relativeAttribute == "0" // See above, the profile is located in a custom location, path is not relative, so IsRelative=0 + ? defaultProfileFolderName + @"\places.sqlite" + : Path.Combine(profileFolderPath, defaultProfileFolderName) + @"\places.sqlite"; + } + } +} + +public static class Extensions +{ + public static IEnumerable Select(this SqliteDataReader reader, Func projection) + { + while (reader.Read()) + { + yield return projection(reader); } } } diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj index 81374abe8..03ac0491f 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Flow.Launcher.Plugin.BrowserBookmark.csproj @@ -12,6 +12,7 @@ false false true + en @@ -35,6 +36,44 @@ false + + + + + + + + PreserveNewest @@ -56,7 +95,7 @@ - + - \ No newline at end of file + diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/IBookmarkLoader.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/IBookmarkLoader.cs index 2c48cfd55..8a9727352 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/IBookmarkLoader.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/IBookmarkLoader.cs @@ -1,10 +1,9 @@ using Flow.Launcher.Plugin.BrowserBookmark.Models; using System.Collections.Generic; -namespace Flow.Launcher.Plugin.BrowserBookmark +namespace Flow.Launcher.Plugin.BrowserBookmark; + +public interface IBookmarkLoader { - public interface IBookmarkLoader - { - public List GetBookmarks(); - } -} \ No newline at end of file + public List GetBookmarks(); +} diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ar.xaml index 90f4ea49b..bde48c7d4 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ar.xaml @@ -2,27 +2,27 @@ - Browser Bookmarks - Search your browser bookmarks + إشارات المتصفح + ابحث في إشارات المتصفح - Bookmark Data - Open bookmarks in: - New window - New tab - Set browser from path: - Choose - Copy url - Copy the bookmark's url to clipboard - Load Browser From: - Browser Name - Data Directory Path - Add - Edit - Delete - Browse - Others - Browser Engine - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + بيانات الإشارات المرجعية + فتح الإشارات المرجعية في: + نافذة جديدة + علامة تبويب جديدة + تحديد المتصفح من المسار: + اختر + نسخ الرابط + نسخ رابط الإشارة المرجعية إلى الحافظة + تحميل المتصفح من: + اسم المتصفح + مسار دليل البيانات + إضافة إشارة مرجعية + تعديل إشارة مرجعية + حذف إشارة مرجعية + تصفح + أخرى + محرك المتصفح + إذا كنت لا تستخدم Chrome أو Firefox أو Edge، أو كنت تستخدم نسختهم المحمولة، ستحتاج إلى إضافة دليل بيانات الإشارات المرجعية وتحديد محرك المتصفح الصحيح لجعل هذه الإضافة تعمل. + على سبيل المثال: محرك Brave هو Chromium؛ وموقع بيانات الإشارات المرجعية الافتراضي هو: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". بالنسبة لمحرك Firefox، دليل الإشارات المرجعية هو مجلد userdata الذي يحتوي على ملف places.sqlite. diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml index 54581910f..4d1ad4bf1 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/de.xaml @@ -3,7 +3,7 @@ Browser-Lesezeichen - Lesezeichen durchsuchen + Ihre Browser-Lesezeichen durchsuchen Lesezeichen-Daten @@ -11,18 +11,19 @@ Neues Fenster Neuer Tab Browser aus Pfad festlegen: - Auswählen - Kopiere Url - Die Url des Lesezeichens in die Zwischenablage kopieren - Lade Browser-Lesezeichen aus: + Wählen + URL kopieren + URL des Lesezeichens in Zwischenablage kopieren + Browser laden aus: Browser-Name - Pfad zum Datenverzeichnis + Pfad zu Datenverzeichnis Hinzufügen Bearbeiten Löschen Durchsuchen - Others - Browser Engine - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + Andere + Browser-Engine + Wenn Sie nicht Chrome, Firefox oder Edge verwenden oder deren portable Version nutzen, müssen Sie das Lesezeichen-Datenverzeichnis hinzufügen und die richtige Browser-Engine auswählen, damit dieses Plug-in funktioniert. + Zum Beispiel: Die Engine von Brave ist Chromium, und deren Standardspeicherort der Lesezeichen-Daten ist: +%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". Bei der Firefox-Engine ist das Lesezeichenverzeichnis der Ordner userdata, der die Datei places.sqlite enthält. diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/es.xaml index 3bbf50017..db87ee281 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/es.xaml @@ -6,7 +6,7 @@ Busca en los marcadores del navegador - Datos de marcador + Datos del marcador Abrir marcadores en: Nueva ventana Nueva pestaña @@ -23,6 +23,6 @@ Navegar Otros Motor del navegador - Si no está utilizando Chrome, Firefox o Edge, o si está utilizando su versión portátil, debe añadir el directorio de datos de los marcadores y seleccionar el motor del navegador correcto para que este complemento funcione. + Si no está utilizando Chrome, Firefox o Edge, o si está utilizando su versión portable, debe añadir el directorio de datos de los marcadores y seleccionar el motor del navegador correcto para que este complemento funcione. Por ejemplo: El motor de Brave es Chromium; y la ubicación por defecto de los datos de los marcadores es: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". Para el motor de Firefox, el directorio de los marcadores es la carpeta de datos del usuario que contiene el archivo places.sqlite. diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/he.xaml new file mode 100644 index 000000000..7c6f73ed7 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/he.xaml @@ -0,0 +1,28 @@ + + + + + Browser Bookmarks + Search your browser bookmarks + + + Bookmark Data + Open bookmarks in: + New window + New tab + Set browser from path: + Choose + Copy url + Copy the bookmark's url to clipboard + Load Browser From: + Browser Name + Data Directory Path + הוסף + ערוך + מחק + Browse + Others + Browser Engine + If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. + For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ko.xaml index 8010e56f4..93916ffaa 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/ko.xaml @@ -14,7 +14,7 @@ 선택 Copy url Copy the bookmark's url to clipboard - Load Browser From: + 데이터를 가져올 브라우저: 브라우저 이름 데이터 디렉토리 위치 추가 @@ -22,7 +22,7 @@ 삭제 찾아보기 Others - Browser Engine - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + 브라우저 엔진 + 크롬, 파이어폭스 또는 엣지를 사용하지 않거나 이들의 포터블 버전을 사용하고 있다면, 이 플러그인을 작동시키기 위해 북마크 데이터 디렉토리를 추가하고 올바른 브라우저 엔진을 선택해야 합니다. + 예를 들어: Brave의 엔진은 Chromium이며, 기본 북마크 데이터 위치는 "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData"입니다. Firefox 엔진의 경우, 북마크 위치는 places.sqlite 파일이 포함된 userdata 폴더입니다. diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/nb.xaml index 90f4ea49b..273dad465 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/nb.xaml @@ -2,27 +2,27 @@ - Browser Bookmarks - Search your browser bookmarks + Nettleserbokmerker + Søk i nettleserbokmerker - Bookmark Data - Open bookmarks in: - New window - New tab - Set browser from path: - Choose - Copy url - Copy the bookmark's url to clipboard - Load Browser From: - Browser Name - Data Directory Path - Add - Edit - Delete - Browse - Others - Browser Engine - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + Bokmerkedata + Åpne bokmerker i: + Nytt vindu + Ny fane + Angi nettleser fra banen: + Velg + Kopier nettadresse + Kopier bokmerkets nettadresse til utklippstavlen + Last nettleser fra: + Nettlesernavn + Sti til datakatalog + Legg til + Rediger + Slett + Bla + Andre + Nettlesermotor + Hvis du ikke bruker Chrome, Firefox eller Edge, eller hvis du bruker den bærbare versjonen, må du legge til bokmerkedatakatalog og velge riktig nettlesermotor for å få dette programtillegget til å fungere. + For eksempel: Brave's motor er Chromium; og standardplasseringen av bokmerker er: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox-motoren er bokmerkekatalogen brukerdatamappen som inneholder places.sqlite-filen. diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml index 0a78aeb7b..f487874ac 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/pl.xaml @@ -2,27 +2,27 @@ - Browser Bookmarks - Search your browser bookmarks + Zakładki przeglądarki + Przeszukaj zakładki przeglądarki - Bookmark Data - Open bookmarks in: - New window - New tab - Set browser from path: - Choose - Copy url - Copy the bookmark's url to clipboard - Load Browser From: - Browser Name - Data Directory Path + Dane zakładek + Otwórz zakładki w: + Nowe okno + Nowa karta + Ustaw przeglądarkę ze ścieżki: + Wybierz + Kopiuj adres url + Skopiuj adres url zakładki do schowka + Załaduj przeglądarkę z: + Nazwa przeglądarki + Ścieżka katalogu danych Dodaj Edytuj Usu Przeglądaj - Others - Browser Engine - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + Inne + Silnik przeglądarki + Jeśli nie używasz Chrome, Firefox lub Edge, lub używasz ich wersji przenośnej, musisz dodać katalog danych zakładek i wybrać poprawny silnik przeglądarki, aby wtyczka działała. + Na przykład: silnikiem przeglądarki Brave jest Chromium, a domyślna lokalizacja danych zakładek to: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". W przypadku silnika Firefoksa, katalog zakładek to folder danych użytkownika zawierający plik places.sqlite. diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/tr.xaml index 05e97f2c0..76ab14111 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/tr.xaml @@ -2,27 +2,27 @@ - Yer İşaretleri - Tarayıcılarınızdaki yer işaretlerini arayın. + Yer İmleri + Tarayıcınızdaki yer işaretlerini arayın Yer İmleri Verisi - Open bookmarks in: + Yer imlerini şurada aç: Yeni Pencere Yeni Sekme Dizin üzerinden tarayıcı seç: Seç Url Kopyala - Copy the bookmark's url to clipboard - Load Browser From: - Browser Name - Data Directory Path + Yer imi bağlantısını kopyala + Taraycılardan İçe Aktar: + Tarayıcı Adı + Veri Dizini Ekle Düzenle Sil Gözat - Others - Browser Engine - If you are not using Chrome, Firefox or Edge, or you are using their portable version, you need to add bookmarks data directory and select correct browser engine to make this plugin work. - For example: Brave's engine is Chromium; and its default bookmarks data location is: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". For Firefox engine, the bookmarks directory is the userdata folder contains the places.sqlite file. + Diğerleri + Tarayıcı Motoru + Eğer Chrome, Firefox veya Edge kullanmıyor veya bu tarayıcıların taşınabilir sürümlerini kullanıyorsanız tarayıcı motorunu ve yer imlerinin saklandığı dizini elle girmeniz gerekir. + Örneğin: Brave tarayıcısı Chromium tabanlıdır ve yer imleri varsayılan olarak "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData" klasöründe saklanır. Firefox tabanlı tarayıcılar için bu places.sqlite dosyasının bulunduğu kullanıcı verisi klasörüdür. diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/vi.xaml new file mode 100644 index 000000000..ddc10950e --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Languages/vi.xaml @@ -0,0 +1,28 @@ + + + + + Dấu trang trình duyệt + Tìm kiếm dấu trang trình duyệt của bạn + + + Dữ liệu đánh dấu + Mở dấu trang trong: + Cửa sổ mới + Thêm Tab mới + Đặt trình duyệt từ đường dẫn: + Chọn + Sao chép url + Sao chép url của dấu trang vào clipboard + Tải trình duyệt từ: + Tên trình duyệt + Đường dẫn thư mục dữ liệu + Thêm + Sửa + Xóa + Duyệt + Khác + Công cụ trình duyệt + Nếu bạn không sử dụng Chrome, Firefox hoặc Edge hoặc bạn đang sử dụng phiên bản di động của chúng, bạn cần thêm thư mục dữ liệu dấu trang và chọn đúng công cụ trình duyệt để plugin này hoạt động. + Ví dụ: Engine của Brave là Chrome; và vị trí dữ liệu dấu trang mặc định của nó là: "%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData". Đối với công cụ Firefox, thư mục dấu trang là thư mục dữ liệu người dùng chứa tệp địa điểm.sqlite. + diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs index a13d6c929..a48d70f2d 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Main.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Windows; using System.Windows.Controls; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Plugin.BrowserBookmark.Commands; @@ -12,233 +11,234 @@ using System.Threading.Channels; using System.Threading.Tasks; using System.Threading; -namespace Flow.Launcher.Plugin.BrowserBookmark +namespace Flow.Launcher.Plugin.BrowserBookmark; + +public class Main : ISettingProvider, IPlugin, IReloadable, IPluginI18n, IContextMenu, IDisposable { - public class Main : ISettingProvider, IPlugin, IReloadable, IPluginI18n, IContextMenu, IDisposable + private static PluginInitContext _context; + + private static List _cachedBookmarks = new List(); + + private static Settings _settings; + + private static bool _initialized = false; + + public void Init(PluginInitContext context) { - private static PluginInitContext context; + _context = context; - private static List cachedBookmarks = new List(); + _settings = context.API.LoadSettingJsonStorage(); - private static Settings _settings; + LoadBookmarksIfEnabled(); + } - private static bool initialized = false; - - public void Init(PluginInitContext context) + private static void LoadBookmarksIfEnabled() + { + if (_context.CurrentPluginMetadata.Disabled) { - Main.context = context; + // Don't load or monitor files if disabled + return; + } - _settings = context.API.LoadSettingJsonStorage(); + _cachedBookmarks = BookmarkLoader.LoadAllBookmarks(_settings); + _ = MonitorRefreshQueueAsync(); + _initialized = true; + } + public List Query(Query query) + { + // For when the plugin being previously disabled and is now re-enabled + if (!_initialized) + { LoadBookmarksIfEnabled(); } - private static void LoadBookmarksIfEnabled() + string param = query.Search.TrimStart(); + + // Should top results be returned? (true if no search parameters have been passed) + var topResults = string.IsNullOrEmpty(param); + + + if (!topResults) { - if (context.CurrentPluginMetadata.Disabled) - { - // Don't load or monitor files if disabled - return; - } - - cachedBookmarks = BookmarkLoader.LoadAllBookmarks(_settings); - _ = MonitorRefreshQueueAsync(); - initialized = true; - } - - public List Query(Query query) - { - // For when the plugin being previously disabled and is now renabled - if (!initialized) - { - LoadBookmarksIfEnabled(); - } - - string param = query.Search.TrimStart(); - - // Should top results be returned? (true if no search parameters have been passed) - var topResults = string.IsNullOrEmpty(param); - - - if (!topResults) - { - // Since we mixed chrome and firefox bookmarks, we should order them again - var returnList = cachedBookmarks.Select(c => new Result() - { - Title = c.Name, - SubTitle = c.Url, - IcoPath = @"Images\bookmark.png", - Score = BookmarkLoader.MatchProgram(c, param).Score, - Action = _ => + // Since we mixed chrome and firefox bookmarks, we should order them again + return _cachedBookmarks + .Select( + c => new Result { - context.API.OpenUrl(c.Url); - - return true; - }, - ContextData = new BookmarkAttributes - { - Url = c.Url - } - }).Where(r => r.Score > 0); - return returnList.ToList(); - } - else - { - return cachedBookmarks.Select(c => new Result() - { - Title = c.Name, - SubTitle = c.Url, - IcoPath = @"Images\bookmark.png", - Score = 5, - Action = _ => - { - context.API.OpenUrl(c.Url); - return true; - }, - ContextData = new BookmarkAttributes - { - Url = c.Url - } - }).ToList(); - } - } - - - private static Channel refreshQueue = Channel.CreateBounded(1); - - private static SemaphoreSlim fileMonitorSemaphore = new(1, 1); - - private static async Task MonitorRefreshQueueAsync() - { - if (fileMonitorSemaphore.CurrentCount < 1) - { - return; - } - await fileMonitorSemaphore.WaitAsync(); - var reader = refreshQueue.Reader; - while (await reader.WaitToReadAsync()) - { - if (reader.TryRead(out _)) - { - ReloadAllBookmarks(false); - } - } - fileMonitorSemaphore.Release(); - } - - private static readonly List Watchers = new(); - - internal static void RegisterBookmarkFile(string path) - { - var directory = Path.GetDirectoryName(path); - if (!Directory.Exists(directory) || !File.Exists(path)) - { - return; - } - if (Watchers.Any(x => x.Path.Equals(directory, StringComparison.OrdinalIgnoreCase))) - { - return; - } - - var watcher = new FileSystemWatcher(directory!); - watcher.Filter = Path.GetFileName(path); - - watcher.NotifyFilter = NotifyFilters.FileName | - NotifyFilters.LastWrite | - NotifyFilters.Size; - - watcher.Changed += static (_, _) => - { - refreshQueue.Writer.TryWrite(default); - }; - - watcher.Renamed += static (_, _) => - { - refreshQueue.Writer.TryWrite(default); - }; - - watcher.EnableRaisingEvents = true; - - Watchers.Add(watcher); - } - - public void ReloadData() - { - ReloadAllBookmarks(); - } - - public static void ReloadAllBookmarks(bool disposeFileWatchers = true) - { - cachedBookmarks.Clear(); - if (disposeFileWatchers) - DisposeFileWatchers(); - LoadBookmarksIfEnabled(); - } - - public string GetTranslatedPluginTitle() - { - return context.API.GetTranslation("flowlauncher_plugin_browserbookmark_plugin_name"); - } - - public string GetTranslatedPluginDescription() - { - return context.API.GetTranslation("flowlauncher_plugin_browserbookmark_plugin_description"); - } - - public Control CreateSettingPanel() - { - return new SettingsControl(_settings); - } - - public List LoadContextMenus(Result selectedResult) - { - return new List() - { - new Result - { - Title = context.API.GetTranslation("flowlauncher_plugin_browserbookmark_copyurl_title"), - SubTitle = context.API.GetTranslation("flowlauncher_plugin_browserbookmark_copyurl_subtitle"), - Action = _ => - { - try + Title = c.Name, + SubTitle = c.Url, + IcoPath = @"Images\bookmark.png", + Score = BookmarkLoader.MatchProgram(c, param).Score, + Action = _ => { - context.API.CopyToClipboard(((BookmarkAttributes)selectedResult.ContextData).Url); + _context.API.OpenUrl(c.Url); return true; - } - catch (Exception e) + }, + ContextData = new BookmarkAttributes { Url = c.Url } + } + ) + .Where(r => r.Score > 0) + .ToList(); + } + else + { + return _cachedBookmarks + .Select( + c => new Result + { + Title = c.Name, + SubTitle = c.Url, + IcoPath = @"Images\bookmark.png", + Score = 5, + Action = _ => { - var message = "Failed to set url in clipboard"; - Log.Exception("Main", message, e, "LoadContextMenus"); - - context.API.ShowMsg(message); - - return false; - } - }, - IcoPath = "Images\\copylink.png", - Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue8c8") - } - }; - } - - internal class BookmarkAttributes - { - internal string Url { get; set; } - } - - public void Dispose() - { - DisposeFileWatchers(); - } - - private static void DisposeFileWatchers() - { - foreach (var watcher in Watchers) - { - watcher.Dispose(); - } - Watchers.Clear(); + _context.API.OpenUrl(c.Url); + return true; + }, + ContextData = new BookmarkAttributes { Url = c.Url } + } + ) + .ToList(); } } + + + private static Channel _refreshQueue = Channel.CreateBounded(1); + + private static SemaphoreSlim _fileMonitorSemaphore = new(1, 1); + + private static async Task MonitorRefreshQueueAsync() + { + if (_fileMonitorSemaphore.CurrentCount < 1) + { + return; + } + await _fileMonitorSemaphore.WaitAsync(); + var reader = _refreshQueue.Reader; + while (await reader.WaitToReadAsync()) + { + if (reader.TryRead(out _)) + { + ReloadAllBookmarks(false); + } + } + _fileMonitorSemaphore.Release(); + } + + private static readonly List Watchers = new(); + + internal static void RegisterBookmarkFile(string path) + { + var directory = Path.GetDirectoryName(path); + if (!Directory.Exists(directory) || !File.Exists(path)) + { + return; + } + if (Watchers.Any(x => x.Path.Equals(directory, StringComparison.OrdinalIgnoreCase))) + { + return; + } + + var watcher = new FileSystemWatcher(directory!); + watcher.Filter = Path.GetFileName(path); + + watcher.NotifyFilter = NotifyFilters.FileName | + NotifyFilters.LastWrite | + NotifyFilters.Size; + + watcher.Changed += static (_, _) => + { + _refreshQueue.Writer.TryWrite(default); + }; + + watcher.Renamed += static (_, _) => + { + _refreshQueue.Writer.TryWrite(default); + }; + + watcher.EnableRaisingEvents = true; + + Watchers.Add(watcher); + } + + public void ReloadData() + { + ReloadAllBookmarks(); + } + + public static void ReloadAllBookmarks(bool disposeFileWatchers = true) + { + _cachedBookmarks.Clear(); + if (disposeFileWatchers) + DisposeFileWatchers(); + LoadBookmarksIfEnabled(); + } + + public string GetTranslatedPluginTitle() + { + return _context.API.GetTranslation("flowlauncher_plugin_browserbookmark_plugin_name"); + } + + public string GetTranslatedPluginDescription() + { + return _context.API.GetTranslation("flowlauncher_plugin_browserbookmark_plugin_description"); + } + + public Control CreateSettingPanel() + { + return new SettingsControl(_settings); + } + + public List LoadContextMenus(Result selectedResult) + { + return new List() + { + new Result + { + Title = _context.API.GetTranslation("flowlauncher_plugin_browserbookmark_copyurl_title"), + SubTitle = _context.API.GetTranslation("flowlauncher_plugin_browserbookmark_copyurl_subtitle"), + Action = _ => + { + try + { + _context.API.CopyToClipboard(((BookmarkAttributes)selectedResult.ContextData).Url); + + return true; + } + catch (Exception e) + { + var message = "Failed to set url in clipboard"; + Log.Exception("Main", message, e, "LoadContextMenus"); + + _context.API.ShowMsg(message); + + return false; + } + }, + IcoPath = @"Images\copylink.png", + Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue8c8") + } + }; + } + + internal class BookmarkAttributes + { + internal string Url { get; set; } + } + + public void Dispose() + { + DisposeFileWatchers(); + } + + private static void DisposeFileWatchers() + { + foreach (var watcher in Watchers) + { + watcher.Dispose(); + } + Watchers.Clear(); + } } diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Bookmark.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Bookmark.cs index c2fa9d977..c738da389 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Bookmark.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Bookmark.cs @@ -1,22 +1,21 @@ using System.Collections.Generic; -namespace Flow.Launcher.Plugin.BrowserBookmark.Models +namespace Flow.Launcher.Plugin.BrowserBookmark.Models; + +// Source may be important in the future +public record Bookmark(string Name, string Url, string Source = "") { - // Source may be important in the future - public record Bookmark(string Name, string Url, string Source = "") + public override int GetHashCode() { - public override int GetHashCode() - { - var hashName = Name?.GetHashCode() ?? 0; - var hashUrl = Url?.GetHashCode() ?? 0; - return hashName ^ hashUrl; - } - - public virtual bool Equals(Bookmark other) - { - return other != null && Name == other.Name && Url == other.Url; - } - - public List CustomBrowsers { get; set; }= new(); + var hashName = Name?.GetHashCode() ?? 0; + var hashUrl = Url?.GetHashCode() ?? 0; + return hashName ^ hashUrl; } -} \ No newline at end of file + + public virtual bool Equals(Bookmark other) + { + return other != null && Name == other.Name && Url == other.Url; + } + + public List CustomBrowsers { get; set; } = new(); +} diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/CustomBrowser.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/CustomBrowser.cs index 69bb56e48..74e0f299a 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/CustomBrowser.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/CustomBrowser.cs @@ -1,45 +1,44 @@ -namespace Flow.Launcher.Plugin.BrowserBookmark.Models -{ - public class CustomBrowser : BaseModel - { - private string _name; - private string _dataDirectoryPath; - private BrowserType browserType = BrowserType.Chromium; +namespace Flow.Launcher.Plugin.BrowserBookmark.Models; - public string Name +public class CustomBrowser : BaseModel +{ + private string _name; + private string _dataDirectoryPath; + private BrowserType _browserType = BrowserType.Chromium; + + public string Name + { + get => _name; + set { - get => _name; - set - { - _name = value; - OnPropertyChanged(nameof(Name)); - } - } - - public string DataDirectoryPath - { - get => _dataDirectoryPath; - set - { - _dataDirectoryPath = value; - OnPropertyChanged(nameof(DataDirectoryPath)); - } - } - - public BrowserType BrowserType - { - get => browserType; - set - { - browserType = value; - OnPropertyChanged(nameof(BrowserType)); - } + _name = value; + OnPropertyChanged(); } } - public enum BrowserType + public string DataDirectoryPath { - Chromium, - Firefox, + get => _dataDirectoryPath; + set + { + _dataDirectoryPath = value; + OnPropertyChanged(); + } + } + + public BrowserType BrowserType + { + get => _browserType; + set + { + _browserType = value; + OnPropertyChanged(); + } } } + +public enum BrowserType +{ + Chromium, + Firefox, +} diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Settings.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Settings.cs index dc1016b4e..86532d275 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Models/Settings.cs @@ -1,17 +1,16 @@ using System.Collections.ObjectModel; -namespace Flow.Launcher.Plugin.BrowserBookmark.Models +namespace Flow.Launcher.Plugin.BrowserBookmark.Models; + +public class Settings : BaseModel { - public class Settings : BaseModel - { - public bool OpenInNewBrowserWindow { get; set; } = true; + public bool OpenInNewBrowserWindow { get; set; } = true; - public string BrowserPath { get; set; } + public string BrowserPath { get; set; } - public bool LoadChromeBookmark { get; set; } = true; - public bool LoadFirefoxBookmark { get; set; } = true; - public bool LoadEdgeBookmark { get; set; } = true; + public bool LoadChromeBookmark { get; set; } = true; + public bool LoadFirefoxBookmark { get; set; } = true; + public bool LoadEdgeBookmark { get; set; } = true; - public ObservableCollection CustomChromiumBrowsers { get; set; } = new(); - } -} \ No newline at end of file + public ObservableCollection CustomChromiumBrowsers { get; set; } = new(); +} diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml index 392c9e0a7..f5017ced5 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/CustomBrowserSetting.xaml @@ -63,7 +63,6 @@ +/// Interaction logic for CustomBrowserSetting.xaml +/// +public partial class CustomBrowserSettingWindow : Window { - /// - /// Interaction logic for CustomBrowserSetting.xaml - /// - public partial class CustomBrowserSettingWindow : Window + private CustomBrowser _currentCustomBrowser; + public CustomBrowserSettingWindow(CustomBrowser browser) { - private CustomBrowser currentCustomBrowser; - public CustomBrowserSettingWindow(CustomBrowser browser) + InitializeComponent(); + _currentCustomBrowser = browser; + DataContext = new CustomBrowser { - InitializeComponent(); - currentCustomBrowser = browser; - DataContext = new CustomBrowser - { - Name = browser.Name, - DataDirectoryPath = browser.DataDirectoryPath, - BrowserType = browser.BrowserType, - }; - } - - private void ConfirmEditCustomBrowser(object sender, RoutedEventArgs e) - { - CustomBrowser editBrowser = (CustomBrowser)DataContext; - currentCustomBrowser.Name = editBrowser.Name; - currentCustomBrowser.DataDirectoryPath = editBrowser.DataDirectoryPath; - currentCustomBrowser.BrowserType = editBrowser.BrowserType; - DialogResult = true; - Close(); - } + Name = browser.Name, + DataDirectoryPath = browser.DataDirectoryPath, + BrowserType = browser.BrowserType, + }; + } - private void CancelEditCustomBrowser(object sender, RoutedEventArgs e) - { - Close(); - } + private void ConfirmEditCustomBrowser(object sender, RoutedEventArgs e) + { + CustomBrowser editBrowser = (CustomBrowser)DataContext; + _currentCustomBrowser.Name = editBrowser.Name; + _currentCustomBrowser.DataDirectoryPath = editBrowser.DataDirectoryPath; + _currentCustomBrowser.BrowserType = editBrowser.BrowserType; + DialogResult = true; + Close(); + } - private void WindowKeyDown(object sender, System.Windows.Input.KeyEventArgs e) - { - if (e.Key == Key.Enter) - { - ConfirmEditCustomBrowser(sender, e); - } - } + private void CancelEditCustomBrowser(object sender, RoutedEventArgs e) + { + Close(); + } - private void OnSelectPathClick(object sender, RoutedEventArgs e) + private void WindowKeyDown(object sender, System.Windows.Input.KeyEventArgs e) + { + if (e.Key == Key.Enter) { - var dialog = new FolderBrowserDialog(); - dialog.ShowDialog(); - CustomBrowser editBrowser = (CustomBrowser)DataContext; - editBrowser.DataDirectoryPath = dialog.SelectedPath; + ConfirmEditCustomBrowser(sender, e); } } + + private void OnSelectPathClick(object sender, RoutedEventArgs e) + { + var dialog = new FolderBrowserDialog(); + dialog.ShowDialog(); + CustomBrowser editBrowser = (CustomBrowser)DataContext; + editBrowser.DataDirectoryPath = dialog.SelectedPath; + } } diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml.cs b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml.cs index 2947c2cb5..4bdab89a9 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/Views/SettingsControl.xaml.cs @@ -4,119 +4,116 @@ using System.Windows.Input; using System.ComponentModel; using System.Threading.Tasks; -namespace Flow.Launcher.Plugin.BrowserBookmark.Views +namespace Flow.Launcher.Plugin.BrowserBookmark.Views; + +public partial class SettingsControl : INotifyPropertyChanged { - public partial class SettingsControl : INotifyPropertyChanged + public Settings Settings { get; } + + public CustomBrowser SelectedCustomBrowser { get; set; } + + public bool LoadChromeBookmark { - public Settings Settings { get; } - - public CustomBrowser SelectedCustomBrowser { get; set; } - - public bool LoadChromeBookmark + get => Settings.LoadChromeBookmark; + set { - get => Settings.LoadChromeBookmark; - set + Settings.LoadChromeBookmark = value; + _ = Task.Run(() => Main.ReloadAllBookmarks()); + } + } + + public bool LoadFirefoxBookmark + { + get => Settings.LoadFirefoxBookmark; + set + { + Settings.LoadFirefoxBookmark = value; + _ = Task.Run(() => Main.ReloadAllBookmarks()); + } + } + + public bool LoadEdgeBookmark + { + get => Settings.LoadEdgeBookmark; + set + { + Settings.LoadEdgeBookmark = value; + _ = Task.Run(() => Main.ReloadAllBookmarks()); + } + } + + public bool OpenInNewBrowserWindow + { + get => Settings.OpenInNewBrowserWindow; + set + { + Settings.OpenInNewBrowserWindow = value; + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(OpenInNewBrowserWindow))); + } + } + + public SettingsControl(Settings settings) + { + Settings = settings; + InitializeComponent(); + } + + public event PropertyChangedEventHandler PropertyChanged; + + private void NewCustomBrowser(object sender, RoutedEventArgs e) + { + var newBrowser = new CustomBrowser(); + var window = new CustomBrowserSettingWindow(newBrowser); + window.ShowDialog(); + if (newBrowser is not { - Settings.LoadChromeBookmark = value; - _ = Task.Run(() => Main.ReloadAllBookmarks()); - } - } - - public bool LoadFirefoxBookmark + Name: null, + DataDirectoryPath: null + }) { - get => Settings.LoadFirefoxBookmark; - set - { - Settings.LoadFirefoxBookmark = value; - _ = Task.Run(() => Main.ReloadAllBookmarks()); - } + Settings.CustomChromiumBrowsers.Add(newBrowser); + _ = Task.Run(() => Main.ReloadAllBookmarks()); } + } - public bool LoadEdgeBookmark + private void DeleteCustomBrowser(object sender, RoutedEventArgs e) + { + if (CustomBrowsers.SelectedItem is CustomBrowser selectedCustomBrowser) { - get => Settings.LoadEdgeBookmark; - set - { - Settings.LoadEdgeBookmark = value; - _ = Task.Run(() => Main.ReloadAllBookmarks()); - } + Settings.CustomChromiumBrowsers.Remove(selectedCustomBrowser); + _ = Task.Run(() => Main.ReloadAllBookmarks()); } + } - public bool OpenInNewBrowserWindow + private void MouseDoubleClickOnSelectedCustomBrowser(object sender, MouseButtonEventArgs e) + { + EditSelectedCustomBrowser(); + } + + private void Others_Click(object sender, RoutedEventArgs e) + { + CustomBrowsersList.Visibility = CustomBrowsersList.Visibility switch { - get => Settings.OpenInNewBrowserWindow; - set - { - Settings.OpenInNewBrowserWindow = value; - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(OpenInNewBrowserWindow))); - } - } + Visibility.Collapsed => Visibility.Visible, + _ => Visibility.Collapsed + }; + } - public SettingsControl(Settings settings) + private void EditCustomBrowser(object sender, RoutedEventArgs e) + { + EditSelectedCustomBrowser(); + } + + private void EditSelectedCustomBrowser() + { + if (SelectedCustomBrowser is null) + return; + + var window = new CustomBrowserSettingWindow(SelectedCustomBrowser); + var result = window.ShowDialog() ?? false; + if (result) { - Settings = settings; - InitializeComponent(); - } - - public event PropertyChangedEventHandler PropertyChanged; - - private void NewCustomBrowser(object sender, RoutedEventArgs e) - { - var newBrowser = new CustomBrowser(); - var window = new CustomBrowserSettingWindow(newBrowser); - window.ShowDialog(); - if (newBrowser is not - { - Name: null, - DataDirectoryPath: null - }) - { - Settings.CustomChromiumBrowsers.Add(newBrowser); - _ = Task.Run(() => Main.ReloadAllBookmarks()); - } - } - - private void DeleteCustomBrowser(object sender, RoutedEventArgs e) - { - if (CustomBrowsers.SelectedItem is CustomBrowser selectedCustomBrowser) - { - Settings.CustomChromiumBrowsers.Remove(selectedCustomBrowser); - _ = Task.Run(() => Main.ReloadAllBookmarks()); - } - } - - private void MouseDoubleClickOnSelectedCustomBrowser(object sender, MouseButtonEventArgs e) - { - EditSelectedCustomBrowser(); - } - - private void Others_Click(object sender, RoutedEventArgs e) - { - - if (CustomBrowsersList.Visibility == Visibility.Collapsed) - { - CustomBrowsersList.Visibility = Visibility.Visible; - } - else - CustomBrowsersList.Visibility = Visibility.Collapsed; - } - - private void EditCustomBrowser(object sender, RoutedEventArgs e) - { - EditSelectedCustomBrowser(); - } - - private void EditSelectedCustomBrowser() - { - if (SelectedCustomBrowser is null) - return; - - var window = new CustomBrowserSettingWindow(SelectedCustomBrowser); - var result = window.ShowDialog() ?? false; - if (result) - { - _ = Task.Run(() => Main.ReloadAllBookmarks()); - } + _ = Task.Run(() => Main.ReloadAllBookmarks()); } } } diff --git a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json index 0778b7ae5..a7c230956 100644 --- a/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.BrowserBookmark/plugin.json @@ -4,7 +4,7 @@ "Name": "Browser Bookmarks", "Description": "Search your browser bookmarks", "Author": "qianlifeng, Ioannis G.", - "Version": "3.1.5", + "Version": "3.3.3", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.BrowserBookmark.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/DecimalSeparator.cs b/Plugins/Flow.Launcher.Plugin.Calculator/DecimalSeparator.cs index 27bdf94ee..81a68739b 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/DecimalSeparator.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/DecimalSeparator.cs @@ -1,7 +1,7 @@ using System.ComponentModel; using Flow.Launcher.Core.Resource; -namespace Flow.Launcher.Plugin.Caculator +namespace Flow.Launcher.Plugin.Calculator { [TypeConverter(typeof(LocalizationConverter))] public enum DecimalSeparator diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj b/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj index 415f852f4..1b985acf9 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Flow.Launcher.Plugin.Calculator.csproj @@ -5,8 +5,8 @@ net7.0-windows {59BD9891-3837-438A-958D-ADC7F91F6F7E} Properties - Flow.Launcher.Plugin.Caculator - Flow.Launcher.Plugin.Caculator + Flow.Launcher.Plugin.Calculator + Flow.Launcher.Plugin.Calculator true true false @@ -18,7 +18,7 @@ true portable false - ..\..\Output\Debug\Plugins\Flow.Launcher.Plugin.Caculator\ + ..\..\Output\Debug\Plugins\Flow.Launcher.Plugin.Calculator\ DEBUG;TRACE prompt 4 @@ -28,7 +28,7 @@ pdbonly true - ..\..\Output\Release\Plugins\Flow.Launcher.Plugin.Caculator\ + ..\..\Output\Release\Plugins\Flow.Launcher.Plugin.Calculator\ TRACE prompt 4 @@ -62,7 +62,7 @@ - + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ar.xaml index 15598118c..3219d647e 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/ar.xaml @@ -1,15 +1,15 @@  - Calculator - Allows to do mathematical calculations.(Try 5*3-2 in Flow Launcher) - Not a number (NaN) - Expression wrong or incomplete (Did you forget some parentheses?) - Copy this number to the clipboard - Decimal separator - The decimal separator to be used in the output. - Use system locale - Comma (,) - Dot (.) - Max. decimal places + آلة حاسبة + تمكنك من إجراء العمليات الحسابية. (جرب 5*3-2 في Flow Launcher) + ليست رقمًا (NaN) + التعبير خاطئ أو غير مكتمل (هل نسيت بعض الأقواس؟) + نسخ هذا الرقم إلى الحافظة + فاصل عشري + الفاصل العشري الذي سيتم استخدامه في الناتج. + استخدام إعدادات النظام المحلية + فاصلة (,) + نقطة (.) + أقصى عدد من المنازل العشرية diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/de.xaml index 79936069c..d8da714dc 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/de.xaml @@ -2,14 +2,14 @@ Rechner - Stellt mathematische Berechnungen bereit.(Versuche 5*3-2 in Flow Launcher) - Keine Zahl (NaN) - Ausdruck falsch oder nicht vollständig (Klammern vergessen?) + Ermöglicht mathematische Berechnungen. (Versuchen Sie 5*3-2 in Flow Launcher) + Nicht eine Zahl (NaN) + Ausdruck falsch oder unvollständig (Haben Sie einige Klammern vergessen?) Diese Zahl in die Zwischenablage kopieren Dezimaltrennzeichen - Das Dezimaltrennzeichen, welches bei der Ausgabe verwendet werden soll. - Systemeinstellung nutzen + Das Dezimaltrennzeichen, das in der Ausgabe verwendet werden soll. + Systemgebietsschema verwenden Komma (,) Punkt (.) - Max. Nachkommastellen + Max. Dezimalstellen diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/he.xaml new file mode 100644 index 000000000..15598118c --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/he.xaml @@ -0,0 +1,15 @@ + + + + Calculator + Allows to do mathematical calculations.(Try 5*3-2 in Flow Launcher) + Not a number (NaN) + Expression wrong or incomplete (Did you forget some parentheses?) + Copy this number to the clipboard + Decimal separator + The decimal separator to be used in the output. + Use system locale + Comma (,) + Dot (.) + Max. decimal places + diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nb.xaml index 15598118c..527df1d21 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/nb.xaml @@ -1,15 +1,15 @@  - Calculator - Allows to do mathematical calculations.(Try 5*3-2 in Flow Launcher) - Not a number (NaN) - Expression wrong or incomplete (Did you forget some parentheses?) - Copy this number to the clipboard - Decimal separator - The decimal separator to be used in the output. - Use system locale - Comma (,) - Dot (.) - Max. decimal places + Kalkulator + Lar deg gjøre matematiske beregninger. (Prøv 5*3-2 i Flow Launcher) + Ikke et tall (NaN) + Uttrykk feil eller ufullstendig (glem noen parenteser?) + Kopier dette nummeret til utklippstavlen + Desimalskille + Desimalskilletegnet som skal brukes i utdataene. + Bruk systemets nasjonale innstilling + Komma (,) + Prikk (.) + Maks. desimaler diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pl.xaml index aa00d1039..f697d2e6d 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/pl.xaml @@ -3,13 +3,13 @@ Kalkulator Szybkie wykonywanie obliczeń matematycznych. (Spróbuj wpisać 5*3-2 w oknie Flow Launchera) - Not a number (NaN) - Expression wrong or incomplete (Did you forget some parentheses?) - Copy this number to the clipboard - Decimal separator - The decimal separator to be used in the output. - Use system locale - Comma (,) - Dot (.) - Max. decimal places + Nie liczba (NaN) + Wyrażenie niepoprawne lub niekompletne (Czy zapomniałeś o nawiasach?) + Skopiuj ten numer do schowka + Separator dziesiętny + Separator dziesiętny używany w wyniku. + Użyj ustawień regionalnych systemu + Przecinek (,) + Kropka (.) + Maks. liczba miejsc po przecinku diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/tr.xaml index 07a287d52..345c81433 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/tr.xaml @@ -6,10 +6,10 @@ Sayı değil (NaN) İfade hatalı ya da eksik. (Parantez koymayı mı unuttunuz?) Bu sayıyı panoya kopyala - Decimal separator - The decimal separator to be used in the output. - Use system locale - Comma (,) - Dot (.) - Max. decimal places + Ondalık ayracı + Ondalık kısımları ayırmak için kullanılacak işaret. + Sistem yerelleştirme ayarını kullan + Virgül (,) + Nokta (.) + Maks. ondalık basamak diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml new file mode 100644 index 000000000..82ebbbe93 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Languages/vi.xaml @@ -0,0 +1,15 @@ + + + + Máy tính + Cho phép thực hiện các phép tính toán học. (Thử 5*3-2 trong Flow Launcher) + Không phải là số (NaN) + Biểu thức sai hoặc không đầy đủ (Bạn có quên một số dấu ngoặc đơn không?) + Sao chép số này vào clipboard + Dấu tách thập phân + Dấu phân cách thập phân được sử dụng ở đầu ra. + Sử dụng ngôn ngữ hệ thống + Dấu phẩy (,) + dấu chấm (.) + Tối đa. chữ số thập phân + diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs b/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs index 338b5bcbe..7f42eacf6 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Main.cs @@ -3,13 +3,12 @@ using System.Collections.Generic; using System.Globalization; using System.Runtime.InteropServices; using System.Text.RegularExpressions; -using System.Windows; using System.Windows.Controls; using Mages.Core; -using Flow.Launcher.Plugin.Caculator.ViewModels; -using Flow.Launcher.Plugin.Caculator.Views; +using Flow.Launcher.Plugin.Calculator.ViewModels; +using Flow.Launcher.Plugin.Calculator.Views; -namespace Flow.Launcher.Plugin.Caculator +namespace Flow.Launcher.Plugin.Calculator { public class Main : IPlugin, IPluginI18n, ISettingProvider { @@ -62,7 +61,7 @@ namespace Flow.Launcher.Plugin.Caculator switch (_settings.DecimalSeparator) { case DecimalSeparator.Comma: - case DecimalSeparator.UseSystemLocale when CultureInfo.DefaultThreadCurrentCulture.NumberFormat.NumberDecimalSeparator == ",": + case DecimalSeparator.UseSystemLocale when CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator == ",": expression = query.Search.Replace(",", "."); break; default: @@ -101,7 +100,7 @@ namespace Flow.Launcher.Plugin.Caculator } catch (ExternalException) { - MessageBox.Show("Copy failed, please try later"); + Context.API.ShowMsgBox("Copy failed, please try later"); return false; } } @@ -158,7 +157,7 @@ namespace Flow.Launcher.Plugin.Caculator private string GetDecimalSeparator() { - string systemDecimalSeperator = CultureInfo.DefaultThreadCurrentCulture.NumberFormat.NumberDecimalSeparator; + string systemDecimalSeperator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator; switch (_settings.DecimalSeparator) { case DecimalSeparator.UseSystemLocale: return systemDecimalSeperator; diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/NumberTranslator.cs b/Plugins/Flow.Launcher.Plugin.Calculator/NumberTranslator.cs index ed4aed75b..4eacb9d34 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/NumberTranslator.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/NumberTranslator.cs @@ -2,7 +2,7 @@ using System.Text; using System.Text.RegularExpressions; -namespace Flow.Launcher.Plugin.Caculator +namespace Flow.Launcher.Plugin.Calculator { /// /// Tries to convert all numbers in a text from one culture format to another. diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Settings.cs b/Plugins/Flow.Launcher.Plugin.Calculator/Settings.cs index 615514873..8354863b8 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Settings.cs @@ -1,5 +1,5 @@  -namespace Flow.Launcher.Plugin.Caculator +namespace Flow.Launcher.Plugin.Calculator { public class Settings { diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs b/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs index afe4d1c0c..09f745669 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs +++ b/Plugins/Flow.Launcher.Plugin.Calculator/ViewModels/SettingsViewModel.cs @@ -1,7 +1,7 @@ using System.Collections.Generic; using System.Linq; -namespace Flow.Launcher.Plugin.Caculator.ViewModels +namespace Flow.Launcher.Plugin.Calculator.ViewModels { public class SettingsViewModel : BaseModel { diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml b/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml index 9fd4bb17c..d6237c6da 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml +++ b/Plugins/Flow.Launcher.Plugin.Calculator/Views/CalculatorSettings.xaml @@ -1,13 +1,13 @@ /// Interaction logic for CalculatorSettings.xaml diff --git a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json index a77475460..bb15cedf2 100644 --- a/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Calculator/plugin.json @@ -4,9 +4,9 @@ "Name": "Calculator", "Description": "Provide mathematical calculations.(Try 5*3-2 in Flow Launcher)", "Author": "cxfksword", - "Version": "3.1.0", + "Version": "3.1.4", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", - "ExecuteFileName": "Flow.Launcher.Plugin.Caculator.dll", + "ExecuteFileName": "Flow.Launcher.Plugin.Calculator.dll", "IcoPath": "Images\\calculator.png" } \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/ContextMenu.cs b/Plugins/Flow.Launcher.Plugin.Explorer/ContextMenu.cs index 2297e5f96..feccc74c8 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/ContextMenu.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/ContextMenu.cs @@ -9,10 +9,7 @@ using Flow.Launcher.Plugin.SharedCommands; using Flow.Launcher.Plugin.Explorer.Search; using Flow.Launcher.Plugin.Explorer.Search.QuickAccessLinks; using System.Linq; -using MessageBox = System.Windows.Forms.MessageBox; -using MessageBoxIcon = System.Windows.Forms.MessageBoxIcon; -using MessageBoxButton = System.Windows.Forms.MessageBoxButtons; -using DialogResult = System.Windows.Forms.DialogResult; +using Flow.Launcher.Plugin.Explorer.Helper; using Flow.Launcher.Plugin.Explorer.ViewModels; namespace Flow.Launcher.Plugin.Explorer @@ -176,12 +173,12 @@ namespace Flow.Launcher.Plugin.Explorer { try { - if (MessageBox.Show( + if (Context.API.ShowMsgBox( string.Format(Context.API.GetTranslation("plugin_explorer_delete_folder_link"), record.FullPath), string.Empty, MessageBoxButton.YesNo, - MessageBoxIcon.Warning) - == DialogResult.No) + MessageBoxImage.Warning) + == MessageBoxResult.No) return false; if (isFile) @@ -222,34 +219,7 @@ namespace Flow.Launcher.Plugin.Explorer if (record.Type is ResultType.Volume) return false; - var screenWithMouseCursor = System.Windows.Forms.Screen.FromPoint(System.Windows.Forms.Cursor.Position); - var xOfScreenCenter = screenWithMouseCursor.WorkingArea.Left + screenWithMouseCursor.WorkingArea.Width / 2; - var yOfScreenCenter = screenWithMouseCursor.WorkingArea.Top + screenWithMouseCursor.WorkingArea.Height / 2; - var showPosition = new System.Drawing.Point(xOfScreenCenter, yOfScreenCenter); - - switch (record.Type) - { - case ResultType.File: - { - var fileInfos = new FileInfo[] - { - new(record.FullPath) - }; - - new Peter.ShellContextMenu().ShowContextMenu(fileInfos, showPosition); - break; - } - case ResultType.Folder: - { - var directoryInfos = new DirectoryInfo[] - { - new(record.FullPath) - }; - - new Peter.ShellContextMenu().ShowContextMenu(directoryInfos, showPosition); - break; - } - } + ResultManager.ShowNativeContextMenu(record.FullPath, record.Type); return false; }, @@ -276,8 +246,48 @@ namespace Flow.Launcher.Plugin.Explorer return true; }, - IcoPath = Constants.DifferentUserIconImagePath + IcoPath = Constants.DifferentUserIconImagePath, + Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue748"), }); + + if (record.Type is ResultType.File or ResultType.Folder && Settings.ShowInlinedWindowsContextMenu) + { + var includedItems = Settings + .WindowsContextMenuIncludedItems + .Replace("\r", "") + .Split("\n") + .Where(v => !string.IsNullOrWhiteSpace(v)) + .ToArray(); + var excludedItems = Settings + .WindowsContextMenuExcludedItems + .Replace("\r", "") + .Split("\n") + .Where(v => !string.IsNullOrWhiteSpace(v)) + .ToArray(); + var menuItems = ShellContextMenuDisplayHelper + .GetContextMenuWithIcons(record.FullPath) + .Where(contextMenuItem => + (includedItems.Length == 0 || includedItems.Any(filter => + contextMenuItem.Label.Contains(filter, StringComparison.OrdinalIgnoreCase) + )) && + (excludedItems.Length == 0 || !excludedItems.Any(filter => + contextMenuItem.Label.Contains(filter, StringComparison.OrdinalIgnoreCase) + )) + ); + foreach (var menuItem in menuItems) + { + contextMenus.Add(new Result + { + Title = menuItem.Label, + Icon = () => menuItem.Icon, + Action = _ => + { + ShellContextMenuDisplayHelper.ExecuteContextMenuItem(record.FullPath, menuItem.CommandId); + return true; + } + }); + } + } } return contextMenus; @@ -403,7 +413,8 @@ namespace Flow.Launcher.Plugin.Explorer return false; }, - IcoPath = Constants.ExcludeFromIndexImagePath + IcoPath = Constants.ExcludeFromIndexImagePath, + Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\uf140"), }; } @@ -435,7 +446,8 @@ namespace Flow.Launcher.Plugin.Explorer return false; } }, - IcoPath = Constants.IndexingOptionsIconImagePath + IcoPath = Constants.IndexingOptionsIconImagePath, + Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue773"), }; } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj b/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj index 6d1497327..29925aeef 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Flow.Launcher.Plugin.Explorer.csproj @@ -45,7 +45,7 @@ - + diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Helper/ShellContextMenuDisplayHelper.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Helper/ShellContextMenuDisplayHelper.cs new file mode 100644 index 000000000..304c47cb6 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Helper/ShellContextMenuDisplayHelper.cs @@ -0,0 +1,524 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading; +using System.Windows; +using System.Windows.Interop; +using System.Windows.Media; +using System.Windows.Media.Imaging; + +namespace Flow.Launcher.Plugin.Explorer.Helper; + +public static class ShellContextMenuDisplayHelper +{ + #region DllImport + + [DllImport("shell32.dll")] + private static extern Int32 SHGetMalloc(out IntPtr hObject); + + [DllImport("shell32.dll")] + private static extern Int32 SHParseDisplayName( + [MarshalAs(UnmanagedType.LPWStr)] string pszName, + IntPtr pbc, + out IntPtr ppidl, + UInt32 sfgaoIn, + out UInt32 psfgaoOut + ); + + [DllImport("shell32.dll")] + private static extern Int32 SHBindToParent( + IntPtr pidl, + [MarshalAs(UnmanagedType.LPStruct)] Guid riid, + out IntPtr ppv, + ref IntPtr ppidlLast + ); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr CreatePopupMenu(); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern bool DestroyMenu(IntPtr hMenu); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern uint GetMenuItemCount(IntPtr hMenu); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern uint GetMenuString( + IntPtr hMenu, uint uIDItem, StringBuilder lpString, int nMaxCount, uint uFlag + ); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern IntPtr GetSubMenu(IntPtr hMenu, int nPos); + + [DllImport("user32.dll", CharSet = CharSet.Auto)] + private static extern bool GetMenuItemInfo(IntPtr hMenu, uint uItem, bool fByPosition, ref MENUITEMINFO lpmii); + + [DllImport("gdi32.dll")] + private static extern bool DeleteObject(IntPtr hObject); + + #endregion + + #region Constants + + private const uint ContextMenuStartId = 0x0001; + private const uint ContextMenuEndId = 0x7FFF; + + private static readonly string[] IgnoredContextMenuCommands = + { + // We haven't managed to make these work, so we don't display them in the context menu. + "Share", + "Windows.ModernShare", + "PinToStartScreen", + "CopyAsPath", + + // Hide functionality provided by the Explorer plugin itself + "Copy", + "Delete" + }; + + #endregion + + #region Enums + + [Flags] + enum ContextMenuFlags : uint + { + Normal = 0x00000000, + DefaultOnly = 0x00000001, + VerbsOnly = 0x00000002, + Explore = 0x00000004, + NoVerbs = 0x00000008, + CanRename = 0x00000010, + NoDefault = 0x00000020, + IncludeStatic = 0x00000040, + ItemMenu = 0x00000080, + ExtendedVerbs = 0x00000100, + DisabledVerbs = 0x00000200, + AsyncVerbState = 0x00000400, + OptimizeForInvoke = 0x00000800, + SyncCascadeMenu = 0x00001000, + DoNotPickDefault = 0x00002000, + Reserved = 0xffff0000 + } + + [Flags] + enum ContextMenuInvokeCommandFlags : uint + { + Icon = 0x00000010, + Hotkey = 0x00000020, + FlagNoUi = 0x00000400, + Unicode = 0x00004000, + NoConsole = 0x00008000, + AsyncOk = 0x00100000, + NoZoneChecks = 0x00800000, + ShiftDown = 0x10000000, + ControlDown = 0x40000000, + FlagLogUsage = 0x04000000, + PointInvoke = 0x20000000 + } + + [Flags] + enum MenuItemInformationMask : uint + { + Bitmap = 0x00000080, + Checkmarks = 0x00000008, + Data = 0x00000020, + Ftype = 0x00000100, + Id = 0x00000002, + State = 0x00000001, + String = 0x00000040, + Submenu = 0x00000004, + Type = 0x00000010 + } + + enum MenuItemFtype : uint + { + Bitmap = 0x00000004, + MenuBarBreak = 0x00000020, + MenuBreak = 0x00000040, + OwnerDraw = 0x00000100, + RadioCheck = 0x00000200, + RightJustify = 0x00004000, + RightOrder = 0x00002000, + Separator = 0x00000800, + String = 0x00000000, + } + + enum GetCommandStringFlags : uint + { + VerbA = 0x00000000, + HelpTextA = 0x00000001, + ValidateA = 0x00000002, + Unicode = VerbW, + Verb = VerbW, + VerbW = 0x00000004, + HelpText = HelpTextW, + HelpTextW = 0x00000005, + Validate = ValidateW, + ValidateW = 0x00000006, + VerbIconW = 0x00000014 + } + #endregion + + private static IMalloc GetMalloc() + { + SHGetMalloc(out var pMalloc); + return (IMalloc)Marshal.GetTypedObjectForIUnknown(pMalloc, typeof(IMalloc)); + } + + public static void ExecuteContextMenuItem(string fileName, uint menuItemId) + { + IMalloc malloc = null; + IntPtr originalPidl = IntPtr.Zero; + IntPtr pShellFolder = IntPtr.Zero; + IntPtr pContextMenu = IntPtr.Zero; + IntPtr hMenu = IntPtr.Zero; + IContextMenu contextMenu = null; + IShellFolder shellFolder = null; + + try + { + malloc = GetMalloc(); + var hr = SHParseDisplayName(fileName, IntPtr.Zero, out var pidl, 0, out _); + if (hr != 0) throw new Exception("SHParseDisplayName failed"); + + originalPidl = pidl; + + var guid = typeof(IShellFolder).GUID; + hr = SHBindToParent(pidl, guid, out pShellFolder, ref pidl); + if (hr != 0) throw new Exception("SHBindToParent failed"); + + shellFolder = (IShellFolder)Marshal.GetTypedObjectForIUnknown(pShellFolder, typeof(IShellFolder)); + hr = shellFolder.GetUIObjectOf( + IntPtr.Zero, 1, new[] { pidl }, typeof(IContextMenu).GUID, IntPtr.Zero, out pContextMenu + ); + if (hr != 0) throw new Exception("GetUIObjectOf failed"); + + contextMenu = (IContextMenu)Marshal.GetTypedObjectForIUnknown(pContextMenu, typeof(IContextMenu)); + + hMenu = CreatePopupMenu(); + contextMenu.QueryContextMenu(hMenu, 0, ContextMenuStartId, ContextMenuEndId, (uint)ContextMenuFlags.Explore); + + var directory = Path.GetDirectoryName(fileName); + var invokeCommandInfo = new CMINVOKECOMMANDINFO + { + cbSize = (uint)Marshal.SizeOf(typeof(CMINVOKECOMMANDINFO)), + fMask = (uint)ContextMenuInvokeCommandFlags.Unicode, + hwnd = IntPtr.Zero, + lpVerb = (IntPtr)(menuItemId - ContextMenuStartId), + lpParameters = null, + lpDirectory = null, + nShow = 1, + hIcon = IntPtr.Zero, + }; + + hr = contextMenu.InvokeCommand(ref invokeCommandInfo); + if (hr != 0) + { + throw new Exception($"InvokeCommand failed with code {hr:X}"); + } + } + finally + { + if (hMenu != IntPtr.Zero) + DestroyMenu(hMenu); + + if (contextMenu != null) + Marshal.ReleaseComObject(contextMenu); + + if (pContextMenu != IntPtr.Zero) + Marshal.Release(pContextMenu); + + if (shellFolder != null) + Marshal.ReleaseComObject(shellFolder); + + if (pShellFolder != IntPtr.Zero) + Marshal.Release(pShellFolder); + + if (originalPidl != IntPtr.Zero) + malloc?.Free(originalPidl); + + if (malloc != null) + Marshal.ReleaseComObject(malloc); + } + } + + public static List GetContextMenuWithIcons(string filePath) + { + IMalloc malloc = null; + IntPtr originalPidl = IntPtr.Zero; + IntPtr pShellFolder = IntPtr.Zero; + IntPtr pContextMenu = IntPtr.Zero; + IntPtr hMenu = IntPtr.Zero; + IShellFolder shellFolder = null; + IContextMenu contextMenu = null; + + try + { + malloc = GetMalloc(); + var hr = SHParseDisplayName(filePath, IntPtr.Zero, out var pidl, 0, out _); + if (hr != 0) throw new Exception("SHParseDisplayName failed"); + + originalPidl = pidl; + + var guid = typeof(IShellFolder).GUID; + hr = SHBindToParent(pidl, guid, out pShellFolder, ref pidl); + if (hr != 0) throw new Exception("SHBindToParent failed"); + + shellFolder = (IShellFolder)Marshal.GetTypedObjectForIUnknown(pShellFolder, typeof(IShellFolder)); + hr = shellFolder.GetUIObjectOf( + IntPtr.Zero, 1, new[] { pidl }, typeof(IContextMenu).GUID, IntPtr.Zero, out pContextMenu + ); + if (hr != 0) throw new Exception("GetUIObjectOf failed"); + + contextMenu = (IContextMenu)Marshal.GetTypedObjectForIUnknown(pContextMenu, typeof(IContextMenu)); + + // Without waiting, some items, such as "Send to > Documents", don't always appear, which shifts item ids + // even though it shouldn't. Please replace this if you find a better way to fix this bug. + Thread.Sleep(200); + + hMenu = CreatePopupMenu(); + contextMenu.QueryContextMenu(hMenu, 0, ContextMenuStartId, ContextMenuEndId, (uint)ContextMenuFlags.Explore); + + var menuItems = new List(); + ProcessMenuWithIcons(hMenu, contextMenu, menuItems); + + return menuItems; + } + finally + { + if (hMenu != IntPtr.Zero) + DestroyMenu(hMenu); + + if (contextMenu != null) + Marshal.ReleaseComObject(contextMenu); + + if (pContextMenu != IntPtr.Zero) + Marshal.Release(pContextMenu); + + if (shellFolder != null) + Marshal.ReleaseComObject(shellFolder); + + if (pShellFolder != IntPtr.Zero) + Marshal.Release(pShellFolder); + + if (originalPidl != IntPtr.Zero) + malloc?.Free(originalPidl); + + if (malloc != null) + Marshal.ReleaseComObject(malloc); + } + } + + + private static void ProcessMenuWithIcons(IntPtr hMenu, IContextMenu contextMenu, List menuItems, string prefix = "") + { + uint menuCount = GetMenuItemCount(hMenu); + + for (uint i = 0; i < menuCount; i++) + { + var mii = new MENUITEMINFO + { + cbSize = (uint)Marshal.SizeOf(typeof(MENUITEMINFO)), + fMask = (uint)(MenuItemInformationMask.Bitmap | MenuItemInformationMask.Ftype | + MenuItemInformationMask.Submenu | MenuItemInformationMask.Id) + }; + + GetMenuItemInfo(hMenu, i, true, ref mii); + var menuText = new StringBuilder(256); + uint result = GetMenuString(hMenu, mii.wID, menuText, menuText.Capacity, 0); + + if (result == 0 || string.IsNullOrWhiteSpace(menuText.ToString())) + { + continue; + } + + menuText.Replace("&", ""); + + IntPtr hSubMenu = GetSubMenu(hMenu, (int)i); + if (hSubMenu != IntPtr.Zero) + { + ProcessMenuWithIcons(hSubMenu, contextMenu, menuItems, prefix + menuText + " > "); + } + else if (!string.IsNullOrWhiteSpace(menuText.ToString())) + { + var commandBuilder = new StringBuilder(256); + contextMenu.GetCommandString( + mii.wID - ContextMenuStartId, + (uint)GetCommandStringFlags.Verb, + IntPtr.Zero, + commandBuilder, + commandBuilder.Capacity + ); + if (IgnoredContextMenuCommands.Contains(commandBuilder.ToString(), StringComparer.OrdinalIgnoreCase)) + { + continue; + } + + ImageSource icon = null; + if (mii.hbmpItem != IntPtr.Zero) + { + icon = GetBitmapSourceFromHBitmap(mii.hbmpItem); + } + else if (mii.hbmpChecked != IntPtr.Zero) + { + icon = GetBitmapSourceFromHBitmap(mii.hbmpChecked); + } + + menuItems.Add(new ContextMenuItem(prefix + menuText, icon, mii.wID)); + } + } + } + + private static BitmapSource GetBitmapSourceFromHBitmap(IntPtr hBitmap) + { + try + { + var bitmapSource = Imaging.CreateBitmapSourceFromHBitmap( + hBitmap, + IntPtr.Zero, + Int32Rect.Empty, + BitmapSizeOptions.FromWidthAndHeight(16, 16) + ); + + if (!DeleteObject(hBitmap)) + { + throw new Exception("Failed to delete HBitmap."); + } + + return bitmapSource; + } + catch (COMException) + { + // ignore + } + + return null; + } +} + +#region Data Structures + +[ComImport] +[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] +[Guid("000214E6-0000-0000-C000-000000000046")] +public interface IShellFolder +{ + [PreserveSig] + int ParseDisplayName( + IntPtr hwnd, IntPtr pbc, [In, MarshalAs(UnmanagedType.LPWStr)] string pszDisplayName, out uint pchEaten, + out IntPtr ppidl, ref uint pdwAttributes + ); + + [PreserveSig] + int EnumObjects(IntPtr hwnd, uint grfFlags, out IntPtr ppenumIDList); + + [PreserveSig] + int BindToObject(IntPtr pidl, IntPtr pbc, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid, out IntPtr ppv); + + [PreserveSig] + int BindToStorage(IntPtr pidl, IntPtr pbc, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid, out IntPtr ppv); + + [PreserveSig] + int CompareIDs(IntPtr lParam, IntPtr pidl1, IntPtr pidl2); + + [PreserveSig] + int CreateViewObject(IntPtr hwndOwner, [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid, out IntPtr ppv); + + [PreserveSig] + int GetAttributesOf( + uint cidl, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] IntPtr[] apidl, ref uint rgfInOut + ); + + [PreserveSig] + int GetUIObjectOf( + IntPtr hwndOwner, uint cidl, [In, MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] IntPtr[] apidl, + [In, MarshalAs(UnmanagedType.LPStruct)] + Guid riid, IntPtr rgfReserved, out IntPtr ppv + ); + + [PreserveSig] + int GetDisplayNameOf(IntPtr pidl, uint uFlags, IntPtr pName); + + [PreserveSig] + int SetNameOf( + IntPtr hwnd, IntPtr pidl, [In, MarshalAs(UnmanagedType.LPWStr)] string pszName, uint uFlags, out IntPtr ppidlOut + ); +} + +[ComImport] +[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] +[Guid("00000002-0000-0000-C000-000000000046")] +public interface IMalloc +{ + [PreserveSig] + IntPtr Alloc(UInt32 cb); + + [PreserveSig] + IntPtr Realloc(IntPtr pv, UInt32 cb); + + [PreserveSig] + void Free(IntPtr pv); + + [PreserveSig] + UInt32 GetSize(IntPtr pv); + + [PreserveSig] + Int16 DidAlloc(IntPtr pv); + + [PreserveSig] + void HeapMinimize(); +} + +[StructLayout(LayoutKind.Sequential)] +public struct CMINVOKECOMMANDINFO +{ + public uint cbSize; + public uint fMask; + public IntPtr hwnd; + public IntPtr lpVerb; + [MarshalAs(UnmanagedType.LPStr)] public string lpParameters; + [MarshalAs(UnmanagedType.LPStr)] public string lpDirectory; + public int nShow; + public uint dwHotKey; + public IntPtr hIcon; +} + +[StructLayout(LayoutKind.Sequential)] +public struct MENUITEMINFO +{ + public uint cbSize; + public uint fMask; + public uint fType; + public uint fState; + public uint wID; + public IntPtr hSubMenu; + public IntPtr hbmpChecked; + public IntPtr hbmpUnchecked; + public IntPtr dwItemData; + public IntPtr dwTypeData; + public uint cch; + public IntPtr hbmpItem; +} + +[ComImport] +[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] +[Guid("000214E4-0000-0000-C000-000000000046")] +public interface IContextMenu +{ + [PreserveSig] + int QueryContextMenu(IntPtr hmenu, uint indexMenu, uint idCmdFirst, uint idCmdLast, uint uFlags); + + [PreserveSig] + int InvokeCommand(ref CMINVOKECOMMANDINFO pici); + + [PreserveSig] + int GetCommandString(uint idcmd, uint uflags, IntPtr reserved, StringBuilder commandstring, int cch); +} + +public record ContextMenuItem(string Label, ImageSource Icon, uint CommandId); + +#endregion diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Images/explorer.png b/Plugins/Flow.Launcher.Plugin.Explorer/Images/explorer.png index 552b2c5bd..25da8e49c 100644 Binary files a/Plugins/Flow.Launcher.Plugin.Explorer/Images/explorer.png and b/Plugins/Flow.Launcher.Plugin.Explorer/Images/explorer.png differ diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml index ad83e6e05..db85ef7b1 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ar.xaml @@ -2,144 +2,164 @@ - Please make a selection first - Please select a folder link - Are you sure you want to delete {0}? - Are you sure you want to permanently delete this file? - Are you sure you want to permanently delete this file/folder? - Deletion successful - Successfully deleted {0} - Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword - Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword - The required service for Windows Index Search does not appear to be running - To fix this, start the Windows Search service. Select here to remove this warning - The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return - Explorer Alternative - Error occurred during search: {0} - Could not open folder - Could not open file + يرجى إجراء تحديد أولاً + يرجى تحديد رابط المجلد + هل أنت متأكد أنك تريد حذف {0}؟ + هل أنت متأكد أنك تريد حذف هذا الملف نهائيًا؟ + هل أنت متأكد أنك تريد حذف هذا الملف/المجلد نهائيًا؟ + تم الحذف بنجاح + تم الحذف بنجاح {0} + قد يؤدي تعيين الكلمة المفتاحية العامة للإجراء إلى ظهور الكثير من النتائج أثناء البحث. يرجى اختيار كلمة مفتاحية محددة للإجراء + لا يمكن تعيين الوصول السريع للكلمة المفتاحية العامة عند التمكين. يرجى اختيار كلمة مفتاحية محددة للإجراء + يبدو أن الخدمة المطلوبة للبحث في فهرس Windows غير قيد التشغيل + لإصلاح ذلك، ابدأ خدمة بحث Windows. اختر هنا لإزالة هذا التحذير + تم إيقاف رسالة التحذير. كبديل للبحث عن الملفات والمجلدات، هل ترغب في تثبيت إضافة Everything؟{0}{0}اختر 'نعم' لتثبيت إضافة Everything، أو 'لا' للعودة + بديل المستكشف + حدث خطأ أثناء البحث: {0} + تعذر فتح المجلد + تعذر فتح الملف - Delete - Edit - Add - General Setting - Customise Action Keywords - Quick Access Links - Everything Setting - Sort Option: - Everything Path: - Launch Hidden - Editor Path - Shell Path - Index Search Excluded Paths - Use search result's location as the working directory of the executable - Hit Enter to open folder in Default File Manager - Use Index Search For Path Search - Indexing Options - Search: - Path Search: - File Content Search: - Index Search: - Quick Access: - Current Action Keyword - Done - Enabled - When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword - Everything - Windows Index - Direct Enumeration - File Editor Path - Folder Editor Path + حذف + تعديل + إضافة + إعدادات عامة + تخصيص الكلمات المفتاحية للإجراءات + روابط الوصول السريع + إعدادات Everything + لوحة المعاينة + الحجم + تاريخ الإنشاء + تاريخ التعديل + عرض معلومات الملف + تنسيق التاريخ والوقت + خيارات الترتيب: + مسار Everything: + إطلاق مخفي + مسار المحرر + مسار الشل + مسارات مستبعدة من البحث المفهرس + استخدام موقع نتيجة البحث كدليل العمل للتنفيذ + اضغط Enter لفتح المجلد في مدير الملفات الافتراضي + استخدام البحث المفهرس للبحث في المسار + خيارات الفهرسة + بحث: + بحث المسار: + بحث في محتوى الملفات: + بحث مفهرس: + وصول سريع: + الكلمة المفتاحية الحالية للإجراء + تم + مفعّل + عند التعطيل، لن يقوم Flow بتنفيذ هذا الخيار في البحث، وسيرجع إلى '*' لتحرير الكلمة المفتاحية للإجراء + كل شيء + فهرس Windows + تعداد مباشر + مسار محرر الملفات + مسار محرر المجلدات + مفع + مُعطّل - Content Search Engine - Directory Recursive Search Engine - Index Search Engine - Open Windows Index Option + محرك البحث في المحتوى + محرك البحث التكراري في المجلدات + محرك البحث المفهرس + فتح خيار فهرس Windows + أنواع الملفات المستبعدة (مفصولة بفاصلة) + على سبيل المثال: exe,jpg,png + الحد الأقصى للنتائج + الحد الأقصى لعدد النتائج المطلوبة من محرك البحث النشط - Explorer - Find and manage files and folders via Windows Search or Everything + المستكشف + ابحث وأدر الملفات والمجلدات عبر بحث Windows أو Everything - Ctrl + Enter to open the directory - Ctrl + Enter to open the containing folder + Ctrl + Enter لفتح الدليل + Ctrl + Enter لفتح المجلد الحاوي - Copy path - Copy path of current item to clipboard - Copy - Copy current file to clipboard - Copy current folder to clipboard - Delete - Permanently delete current file - Permanently delete current folder - Path: - Delete the selected - Run as different user - Run the selected using a different user account - Open containing folder - Open the location that contains current item - Open With Editor: - Failed to open file at {0} with Editor {1} at {2} - Open With Shell: - Failed to open folder {0} with Shell {1} at {2} - Exclude current and sub-directories from Index Search - Excluded from Index Search - Open Windows Indexing Options - Manage indexed files and folders - Failed to open Windows Indexing Options - Add to Quick Access - Add current item to Quick Access - Successfully Added - Successfully added to Quick Access - Successfully Removed - Successfully removed from Quick Access - Add to Quick Access so it can be opened with Explorer's Search Activation action keyword - Remove from Quick Access - Remove from Quick Access - Remove current item from Quick Access - Show Windows Context Menu - Open With - Select a program to open with + نسخ المسار + نسخ مسار العنصر الحالي إلى الحافظة + نسخ + نسخ الملف الحالي إلى الحافظة + نسخ المجلد الحالي إلى الحافظة + حذف + حذف الملف الحالي نهائيًا + حذف المجلد الحالي نهائيًا + المسار: + حذف المحدد + تشغيل كمستخدم مختلف + تشغيل العنصر المحدد باستخدام حساب مستخدم مختلف + فتح المجلد الحاوي + فتح الموقع الذي يحتوي على العنصر الحالي + فتح بالمحرر: + فشل في فتح الملف في {0} بالمحرر {1} في {2} + فتح بالشيل: + فشل في فتح المجلد {0} بالشيل {1} في {2} + استبعاد الحالي والمجلدات الفرعية من البحث المفهرس + تم الاستبعاد من البحث المفهرس + فتح خيارات فهرسة Windows + إدارة الملفات والمجلدات المفهرسة + فشل في فتح خيارات فهرسة Windows + إضافة إلى الوصول السريع + إضافة العنصر الحالي إلى الوصول السريع + تمت الإضافة بنجاح + تمت الإضافة إلى الوصول السريع بنجاح + تمت الإزالة بنجاح + تمت الإزالة من الوصول السريع بنجاح + أضف إلى الوصول السريع بحيث يمكن فتحه باستخدام كلمة مفتاحية لتفعيل البحث في المستكشف + إزالة من الوصول السريع + إزالة من الوصول السريع + إزالة العنصر الحالي من الوصول السريع + عرض قائمة السياق في Windows + فتح بواسطة + اختر برنامج لفتح العنصر - - {0} free of {1} - Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + {0} متبقي من {1} + فتح في مدير الملفات الافتراضي + + استخدم '>' للبحث في هذا الدليل، '*' للبحث عن امتدادات الملفات أو '> *' للجمع بين البحثين. + - Failed to load Everything SDK - Warning: Everything service is not running - Error while querying Everything - Sort By - Name - Path - Size - Extension - Type Name - Date Created - Date Modified - Attributes - File List FileName - Run Count - Date Recently Changed - Date Accessed - Date Run + فشل في تحميل Everything SDK + تحذير: خدمة Everything غير قيد التشغيل + خطأ أثناء استعلام Everything + الترتيب حسب + الاسم + المسار + الحجم + الامتداد + نوع الاسم + تاريخ الإنشاء + تاريخ التعديل + السمات + اسم ملف قائمة الملفات + عدد مرات التشغيل + تاريخ التغيير الأخير + تاريخ الوصول + تاريخ التشغيل - Warning: This is not a Fast Sort option, searches may be slow + تحذير: هذا ليس خيار ترتيب سريع، قد تكون عمليات البحث بطيئة - Search Full Path - - Click to launch or install Everything - Everything Installation - Installing Everything service. Please wait... - Successfully installed Everything service - Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com - Click here to start it - Unable to find an Everything installation, would you like to manually select a location?{0}{0}Click no and Everything will be automatically installed for you - Do you want to enable content search for Everything? - It can be very slow without index (which is only supported in Everything v1.5+) + بحث في المسار الكامل + تمكين عدد مرات التشغيل للملف/المجلد + انقر لتشغيل أو تثبيت Everything + تثبيت Everything + تثبيت خدمة Everything. يرجى الانتظار... + تم تثبيت خدمة Everything بنجاح + فشل التثبيت التلقائي لخدمة Everything. يرجى تثبيتها يدويًا من https://www.voidtools.com + انقر هنا لتشغيلها + تعذر العثور على تثبيت Everything، هل ترغب في تحديد موقع يدويًا؟{0}{0}انقر لا وسيتم تثبيت Everything تلقائيًا لك + هل ترغب في تمكين البحث في المحتوى لـ Everything؟ + قد يكون بطيئًا جدًا بدون فهرسة (المدعومة فقط في Everything v1.5+) + + + قائمة السياق الأصلية + عرض قائمة السياق الأصلية (تجريبي) + أدناه يمكنك تحديد العناصر التي تريد تضمينها في قائمة السياق، يمكن أن تكون جزئية (على سبيل المثال 'pen wit') أو كاملة ('فتح بواسطة'). + يمكنك أدناه تحديد العناصر التي تريد استبعادها من قائمة الضغط الأيمن، يمكن أن تكون جزئية (على سبيل المثال، 'pen wit') أو كاملة ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml index 83334b9b1..9d23e3afe 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/cs.xaml @@ -27,6 +27,12 @@ Upravit aktivační příkaz Odkazy rychlého přístupu Nastavení Everything + Preview Panel + Velikost + Datum vytvoření + Datum změny + Display File Info + Date and time format Možnosti řazení: Umístění Everything: Spustit skryté @@ -51,11 +57,17 @@ Seznam složek Cesta k editoru souborů Cesta k editoru složek + Povoleno + Vypnuto Vyhledávač obsahu Rekurzivní vyhledávač ve složce Indexový vyhledávač Otevření možností vyhledávání v systému Windows + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine Průzkumník @@ -103,10 +115,12 @@ Open With Select a program to open with - + Volných {0} z {1} Otevřít ve výchozím správci souborů - Použijte ">" pro vyhledávání v této složce, "*" pro vyhledávání přípon souborů nebo ">*" pro kombinaci obou vyhledávání. + + Použijte ">" pro vyhledávání v této složce, "*" pro vyhledávání přípon souborů nebo ">*" pro kombinaci obou vyhledávání. + Nepodařilo se načíst SDK Everything @@ -131,7 +145,8 @@ Poznámka: Toto není možnost Fast Sort, vyhledávání může být pomalé Hledat celou cestu - + Enable File/Folder Run Count + Kliknutím spustíte nebo nainstalujete aplikaci Everything Instalace Everything Služba Everything se nainstaluje. Počkejte prosím... @@ -142,4 +157,9 @@ Chcete povolit vyhledávání obsahu prostřednictvím služby Everything? Bez indexu (který je podporován pouze ve verzi Everything v1.5+) může být velmi pomalý + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml index 9dfbb94a1..0f7619954 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/da.xaml @@ -27,6 +27,12 @@ Customise Action Keywords Quick Access Links Everything Setting + Preview Panel + Size + Date Created + Date Modified + Display File Info + Date and time format Sort Option: Everything Path: Launch Hidden @@ -51,11 +57,17 @@ Direct Enumeration Filredigeringssti Mapperedigeringssti + Enabled + Disabled Content Search Engine Directory Recursive Search Engine Index Search Engine Open Windows Index Option + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine Explorer @@ -103,10 +115,12 @@ Open With Select a program to open with - + {0} free of {1} Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Failed to load Everything SDK @@ -131,7 +145,8 @@ Warning: This is not a Fast Sort option, searches may be slow Search Full Path - + Enable File/Folder Run Count + Click to launch or install Everything Everything Installation Installing Everything service. Please wait... @@ -142,4 +157,9 @@ Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml index 1bae42c77..f2df655c7 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/de.xaml @@ -2,40 +2,46 @@ - Zuerst eine Auswahl treffen - Bitte wähle eine Ordnerverknüpfung - Bist du sicher {0} zu löschen? + Bitte treffen Sie zuerst eine Auswahl + Bitte wählen Sie einen Ordner-Link aus + Sind Sie sicher, dass Sie {0} löschen wollen? Sind Sie sicher, dass Sie diese Datei dauerhaft löschen möchten? - Are you sure you want to permanently delete this file/folder? - Löschen erfolgreich - Successfully deleted {0} - Die Zuweisung des globalen Aktions-Schlüsselwortes könnte zu viele Ergebnisse bei der Suche hervorrufen. Bitte wählen Sie ein spezielles Aktionswort - Schnellzugriff kann nicht auf das globale Aktionswort gesetzt werden, wenn aktiviert. Bitte wählen Sie ein spezielles Aktionswort - Der benötigte Dienst für Windows Indexsuche scheint nicht ausgeführt zu werden - Um dies zu beheben, starten Sie den Windows-Suchdienst. Klicken Sie hier, um diese Warnung zu entfernen - Die Warnmeldung wurde ausgeschaltet. Möchten Sie als Alternative für die Suche nach Dateien und Ordnern das Plugin Everything installieren?{0}{0}Wählen Sie 'Ja', um das Plugin Everything zu installieren, oder 'Nein', um zurückzukehren - Explorer Alternative - Error occurred during search: {0} - Could not open folder - Could not open file + Sind Sie sicher, dass Sie diese(n) Datei/Ordner dauerhaft löschen wollen? + Löschung erfolgreich + Erfolgreich gelöscht {0} + Die Zuweisung des globalen Aktions-Schlüsselwortes könnte zu viele Ergebnisse bei der Suche hervorrufen. Bitte wählen Sie ein spezifisches Aktions-Schlüsselwort + Schnellzugriff kann nicht auf das globale Aktions-Schlüsselwort gesetzt werden, wenn aktiviert. Bitte wählen Sie ein spezifisches Aktions-Schlüsselwort + Der erforderliche Dienst für Windows-Indexsuche scheint nicht ausgeführt zu werden + Um dies zu beheben, starten Sie den Windows-Suchdienst. Wählen Sie hier aus, um diese Warnung zu entfernen + Die Warnmeldung ist ausgeschaltet worden. Möchten Sie als Alternative für die Suche nach Dateien und Ordnern das Plugin Everything installieren?{0}{0}Wählen Sie 'Ja' aus, um das Plug-in Everything zu installieren, oder 'Nein', um zurückzukehren + Explorer-Alternative + Fehler aufgetreten während Suche: {0} + Ordner konnte nicht geöffnet werden + Datei konnte nicht geöffnet werden Löschen Bearbeiten Hinzufügen - General Setting - Aktions-Schlüsselwörter ändern + Allgemeine Einstellung + Aktions-Schlüsselwörter individuell anpassen Schnellzugriff-Links - Everything Setting - Sort Option: - Everything Path: - Launch Hidden - Editor pad - Shell Path - Indexsuche ausgeschlossen Pfade - Verwenden Suchergebnis Standort als ausführbare Arbeitsverzeichnis - Hit Enter to open folder in Default File Manager - Use Index Search For Path Search + Everyhting-Einstellung + Vorschau-Panel + Größe + Erstellungsdatum + Änderungsdatum + Datei-Info anzeigen + Datums- und Zeitformat + Sortieroption: + Everything-Pfad: + Ausgeblendet starten + Editor-Pfad + Shell-Pfad + Indexsuche ausgeschlossene Pfade + Ort des Suchergebnisses als Arbeitsverzeichnis der ausführbaren Datei verwenden + Drücken Sie Enter, um Ordner im Default-Dateimanager zu öffnen + Indexsuche für Pfadsuche verwenden Indexierungsoptionen Suche: Pfad-Suche: @@ -45,29 +51,35 @@ Aktuelles Aktions-Schlüsselwort Fertig Aktiviert - Wenn diese Funktion deaktiviert ist, führt Flow diese Suchoption nicht aus und kehrt zusätzlich zu '*' zurück, um das Aktionsschlüsselwort freizugeben + Wenn deaktiviert, führt Flow diese Suchoption nicht aus und kehrt zusätzlich zu '*' zurück, um das Aktions-Schlüsselwort freizugeben Everything - Windows Index - Direct Enumeration + Windows-Index + Direkte Aufzählung Datei-Editor-Pfad Ordner-Editor-Pfad + Aktiviert + Deaktiviert - Content Search Engine - Directory Recursive Search Engine - Index Search Engine - Open Windows Index Option + Content-Suchmaschine + Verzeichnis Rekursive Suchmaschine + Suchmaschine indizieren + Windows-Indexierungsoptionen öffnen + Ausgeschlossene Dateitypen (durch Komma getrennt) + Zum Beispiel: exe,jpg,png + Maximale Ergebnisse + Die maximale Anzahl der angeforderten Ergebnisse aus aktiver Suchmaschine Explorer - Find and manage files and folders via Windows Search or Everything + Dateien und Ordner via Windows-Suche oder Everything finden und verwalten - Ctrl + Enter to open the directory - Ctrl + Enter to open the containing folder + Strg+Enter, um das Verzeichnis zu öffnen + Strg+Enter, um den enthaltenden Ordner zu öffnen Pfad kopieren - Copy path of current item to clipboard + Pfad des aktuellen Elements in Zwischenablage kopieren Kopieren Aktuelle Datei in Zwischenablage kopieren Aktuellen Ordner in Zwischenablage kopieren @@ -75,71 +87,79 @@ Aktuelle Datei dauerhaft löschen Aktuellen Ordner dauerhaft löschen Pfad: - Ausgewählte löschen + Ausgewähltes löschen Als anderer Benutzer ausführen - Ausgewählte mit einem anderen Benutzerkonto ausführen + Ausgewähltes unter Verwendung eines anderen Benutzerkontos ausführen Enthaltenden Ordner öffnen - Open the location that contains current item + Den Ort öffnen, der aktuelles Element enthält Öffnen mit Editor: - Failed to open file at {0} with Editor {1} at {2} - Open With Shell: - Failed to open folder {0} with Shell {1} at {2} - Aktuelles und Unterverzeichnisse von der Indexsuche ausschließen - Von der Indexsuche ausgeschlossen - Windows Indexoptionen öffnen + Datei bei {0} konnte nicht mit Editor {1} bei {2} geöffnet werden + Öffnen mit Shell: + Ordner {0} konnte nicht mit Shell {1} bei {2} geöffnet werden + Aktuelles und Unterverzeichnisse aus Indexsuche ausschließen + Aus Indexsuche ausgeschlossen + Windows-Indexierungsoptionen öffnen Indexierte Dateien und Ordner verwalten - Fehler beim Öffnen der Windows-Indexierungsoptionen + Windows-Indexierungsoptionen konnten nicht geöffnet werden Zu Schnellzugriff hinzufügen - Add current item to Quick Access - Successfully Added - Successfully added to Quick Access - Successfully Removed - Successfully removed from Quick Access - Add to Quick Access so it can be opened with Explorer's Search Activation action keyword - Remove from Quick Access - Remove from Quick Access - Remove current item from Quick Access - Show Windows Context Menu + Aktuelles Element zu Schnellzugriff hinzufügen + Erfolgreich hinzugefügt + Erfolgreich zum Schnellzugriff hinzugefügt + Erfolgreich entfernt + Erfolgreich aus Schnellzugriff entfernt + Zum Schnellzugriff hinzufügen, so kann dieser mit dem Aktions-Schlüsselwort "Suchaktivierung" des Explorers geöffnet werden + Aus Schnellzugriff entfernen + Aus Schnellzugriff entfernen + Aktuelles Element aus Schnellzugriff entfernen + Windows-Kontextmenü zeigen Öffnen mit - Programm zum Öffnen auswählen + Ein Programm zum Öffnen auswählen - - {0} free of {1} - Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + {0} frei von {1} + In Default-Dateimanager öffnen + + Verwenden Sie '>', um in diesem Verzeichnis zu suchen, '*', um nach Dateierweiterungen zu suchen, oder '>*', um beide Suchen zu kombinieren. + - Failed to load Everything SDK - Everything Service läuft nicht - Everything Plugin hat einen Fehler (drücke Enter zum kopieren der Fehlernachricht) - Sort By + Everything SDK konnte nicht geladen werden + Warnung: Everything-Dienst wird nicht ausgeführt + Fehler bei Abfrage von Everything + Sortieren nach Name - Path + Pfad Größe Extension - Type Name - Date Created - Date Modified - Attributes - File List FileName - Run Count - Date Recently Changed - Date Accessed - Date Run + Typname + Erstellungsdatum + Änderungsdatum + Attribute + Dateilistenname + Ausführungszahl + Datum kürzlich geändert + Zugriffsdatum + Ausführungsdatum - Warning: This is not a Fast Sort option, searches may be slow + Warnung: Dies ist keine Schnellsortieroption, Suchen können langsam sein + + Vollständigen Pfad suchen + Datei-/Ordnerlaufzähler aktivieren - Search Full Path - Klicken, um Everything zu starten oder zu installieren - Everything Installation - Installing Everything service. Please wait... - Successfully installed Everything service - Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com - Click here to start it - Unable to find an Everything installation, would you like to manually select a location?{0}{0}Click no and Everything will be automatically installed for you - Möchten Sie die Inhaltssuche für alles aktivieren? - It can be very slow without index (which is only supported in Everything v1.5+) + Everything-Installation + Everything-Dienst wird installiert. Bitte warten Sie ... + Everything-Dienst erfolgreich installiert + Der Everything-Dienst konnte nicht automatisch installiert werden. Bitte installieren Sie ihn manuell über https://www.voidtools.com + Klicken Sie hier, um es zu starten + Es kann keine Everything-Installation gefuinden werden, möchten Sie einen Ort manuell auswählen?{0}{0}Klicken Sie auf Nein und Everything wird automatisch für Sie installiert + Möchten Sie die Inhaltssuche für Everything aktivieren? + Es kann sehr langsam sein ohne Index (was nur in Everything v1.5+ unterstützt wird) + + Natives Kontextmenü + Natives Kontextmenü anzeigen (experimentell) + Unten können Sie die Elemente angeben, die Sie in das Kontextmenü aufnehmen möchten. Diese können partiell (z. B. „Stift mit“) oder vollständig („Öffnen mit“) sein. + Unten können Sie die Elemente angeben, die Sie aus dem Kontextmenü ausschließen möchten. Diese können partiell (z. B. „Stift mit“) oder vollständig („Öffnen mit“) sein. diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml index f2491d928..f7d5bdb18 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/en.xaml @@ -29,6 +29,12 @@ Customise Action Keywords Quick Access Links Everything Setting + Preview Panel + Size + Date Created + Date Modified + Display File Info + Date and time format Sort Option: Everything Path: Launch Hidden @@ -53,11 +59,17 @@ Direct Enumeration File Editor Path Folder Editor Path + Enabled + Disabled Content Search Engine Directory Recursive Search Engine Index Search Engine Open Windows Index Option + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine Explorer @@ -105,10 +117,12 @@ Open With Select a program to open with - + {0} free of {1} Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Failed to load Everything SDK @@ -133,7 +147,8 @@ Warning: This is not a Fast Sort option, searches may be slow Search Full Path - + Enable File/Folder Run Count + Click to launch or install Everything Everything Installation Installing Everything service. Please wait... @@ -144,4 +159,9 @@ Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml index 2d23b315e..304a41c23 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es-419.xaml @@ -27,6 +27,12 @@ Customise Action Keywords Quick Access Links Everything Setting + Preview Panel + Size + Fecha de creación + Fecha de modificación + Display File Info + Date and time format Sort Option: Everything Path: Launch Hidden @@ -51,11 +57,17 @@ Direct Enumeration Ruta del editor Folder Editor Path + Enabled + Disabled Content Search Engine Directory Recursive Search Engine Index Search Engine Open Windows Index Option + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine Explorer @@ -103,10 +115,12 @@ Open With Select a program to open with - + {0} free of {1} Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Failed to load Everything SDK @@ -131,7 +145,8 @@ Advertencia: No es una opción de orden rápido, las búsquedas pueden ser lentas Search Full Path - + Enable File/Folder Run Count + Click to launch or install Everything Instalación de Everything Instalando el servicio de Everything. Por favor, espere... @@ -142,4 +157,9 @@ Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml index ad5d7c31a..e144b724c 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/es.xaml @@ -5,7 +5,7 @@ Por favor haga una selección primero Por favor, seleccione un enlace de carpeta ¿Está seguro de que desea eliminar {0}? - ¿Está seguro que desea eliminar permanentemente este archivo? + ¿Está seguro de que desea eliminar permanentemente este archivo? ¿Está seguro de que desea eliminar permanentemente este/esta archivo/carpeta? Eliminación correcta {0} se ha eliminado correctamente @@ -27,6 +27,12 @@ Personalizar palabras clave de acción Enlaces de acceso rápido Configuración Everything + Panel de vista previa + Tamaño + Fecha de creación + Fecha de modificación + Mostrar información del archivo + Formato de fecha y hora Ordenar por: Ruta de Everything: Iniciar oculto @@ -51,11 +57,17 @@ Enumeración directa Ruta del editor de archivos Ruta del editor de carpetas + Activado + Desactivado Motor de búsqueda de contenido Motor de búsqueda recursiva de directorio Motor de búsqueda del Índice Abrir opciones de indexación de Windows + Tipos de archivo excluidos (separados por comas) + Por ejemplo: exe,jpg,png + Número máximo de resultados + Número máximo de resultados solicitados al motor de búsqueda activo Explorador @@ -103,10 +115,12 @@ Abrir con Seleccione un programa para abrir con - + {0} libre de {1} Abrir en administrador de archivos predeterminado - Use '>' para buscar en este directorio, '*' para buscar extensiones de archivo o '>*' para combinar ambas búsquedas. + + Use '>' para buscar en este directorio, '*' para buscar extensiones de archivo o '>*' para combinar ambas búsquedas. + No se ha podido cargar Everything SDK @@ -131,7 +145,8 @@ Advertencia: Esta no es una opción de clasificación rápida, las búsquedas pueden ser lentas Buscar ruta completa - + Activar número de ejecuciones de archivos/carpetas + Hacer clic para lanzar o instalar Everything Instalación de Everything Instalando el servicio de Everything. Por favor, espere... @@ -142,4 +157,9 @@ ¿Desea activar la búsqueda de contenidos de Everything? Puede ser muy lento sin índice (solo se admite en Everything v1.5+) + + Menú contextual nativo + Mostrar menú contextual nativo (experimental) + En el siguiente cuadro puede especificar los elementos que desea incluir en el menú contextual, puede describirlos de forma parcial (p. ej., 'brir co') o completa ('Abrir con'). + En el siguiente cuadro puede especificar los elementos que desea excluir en el menú contextual, puede describirlos de forma parcial (p. ej., 'brir co') o completa ('Abrir con'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml index adad69af4..1aeffd6ed 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/fr.xaml @@ -27,6 +27,12 @@ Personnaliser les mots-clés d'action Liens d'accès rapide Paramètres Everything + Panneau d'aperçu + Taille + Date de création + Date de modification + Afficher les informations du fichier + Format de la date et de l'heure Option de tri : Chemin vers Everything : Démarrer minimisé @@ -51,11 +57,17 @@ Énumération directe Chemin de l'éditeur de fichiers Chemin de l'éditeur de dossier + Activé + Désactivé Moteur de recherche de contenu Moteur de recherche récursif du répertoire Moteur de recherche de l'index Ouvrir l'option d'index de Windows + Types de fichiers exclus (séparés par des virgules) + Par exemple : exe,jpg,png + Résultats maximums + Le nombre maximum de résultats demandés au moteur de recherche actif Explorateur @@ -103,10 +115,12 @@ Ouvrir avec Sélectionnez un programme à ouvrir avec - + {0} libres sur {1} Ouvrir dans le gestionnaire de fichiers par défaut - Utilisez '>' pour effectuer une recherche dans ce répertoire, '*' pour rechercher les extensions de fichiers ou '>*' pour combiner les deux recherches. + + Utilisez '>' pour effectuer une recherche dans ce répertoire, '*' pour rechercher les extensions de fichiers ou '>*' pour combiner les deux recherches. + Échec du chargement du SDK Everything @@ -131,7 +145,8 @@ Avertissement : Il ne s'agit pas d'une option de tri rapide, les recherches peuvent être lentes. Recherche du chemin complet - + Activer le nombre d'exécutions de fichiers/dossiers + Cliquez pour lancer ou installer Everything Installation d'Everything Installation du service Everything. Veuillez patienter... @@ -142,4 +157,9 @@ Voulez-vous activer la recherche de contenu pour Everything ? Il peut être très lent sans index (qui n'est supporté que dans Everything v1.5+). + + Menu contextuel natif + Afficher le menu contextuel natif (expérimental) + Ci-dessous, vous pouvez spécifier les éléments que vous souhaitez inclure dans le menu contextuel. Ils peuvent être partiels ('pen wit') ou complets ('Ouvrir avec'). + Vous pouvez spécifier ci-dessous les éléments que vous souhaitez exclure du menu contextuel. Ces éléments peuvent être partiels (par exemple, "pen wit") ou complets ("Ouvrir avec"). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml new file mode 100644 index 000000000..f87dd7d63 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/he.xaml @@ -0,0 +1,165 @@ + + + + + Please make a selection first + Please select a folder link + Are you sure you want to delete {0}? + Are you sure you want to permanently delete this file? + Are you sure you want to permanently delete this file/folder? + Deletion successful + Successfully deleted {0} + Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword + Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword + The required service for Windows Index Search does not appear to be running + To fix this, start the Windows Search service. Select here to remove this warning + The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return + Explorer Alternative + Error occurred during search: {0} + Could not open folder + Could not open file + + + מחק + ערוך + הוסף + General Setting + Customise Action Keywords + Quick Access Links + Everything Setting + Preview Panel + Size + תאריך יצירה + תאריך שינוי + Display File Info + Date and time format + Sort Option: + Everything Path: + Launch Hidden + Editor Path + Shell Path + Index Search Excluded Paths + Use search result's location as the working directory of the executable + Hit Enter to open folder in Default File Manager + Use Index Search For Path Search + Indexing Options + Search: + Path Search: + File Content Search: + Index Search: + Quick Access: + Current Action Keyword + בוצע + Enabled + When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword + Everything + Windows Index + Direct Enumeration + File Editor Path + Folder Editor Path + Enabled + Disabled + + Content Search Engine + Directory Recursive Search Engine + Index Search Engine + Open Windows Index Option + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine + + + Explorer + Find and manage files and folders via Windows Search or Everything + + + Ctrl + Enter to open the directory + Ctrl + Enter to open the containing folder + + + Copy path + Copy path of current item to clipboard + Copy + Copy current file to clipboard + Copy current folder to clipboard + מחק + Permanently delete current file + Permanently delete current folder + Path: + Delete the selected + Run as different user + Run the selected using a different user account + Open containing folder + Open the location that contains current item + Open With Editor: + Failed to open file at {0} with Editor {1} at {2} + Open With Shell: + Failed to open folder {0} with Shell {1} at {2} + Exclude current and sub-directories from Index Search + Excluded from Index Search + Open Windows Indexing Options + Manage indexed files and folders + Failed to open Windows Indexing Options + Add to Quick Access + Add current item to Quick Access + Successfully Added + Successfully added to Quick Access + Successfully Removed + Successfully removed from Quick Access + Add to Quick Access so it can be opened with Explorer's Search Activation action keyword + Remove from Quick Access + Remove from Quick Access + Remove current item from Quick Access + Show Windows Context Menu + Open With + Select a program to open with + + + {0} free of {1} + Open in Default File Manager + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + + + Failed to load Everything SDK + אזהרה: שירות Everything אינו פועל + שגיאה במהלך שאילתה לEverything + מיין לפי + Name + נתיב + Size + Extension + Type Name + תאריך יצירה + תאריך שינוי + מאפיינים + File List FileName + Run Count + תאריך שינוי אחרון + תאריך גישה + תאריך הרצה + + + Warning: This is not a Fast Sort option, searches may be slow + + Search Full Path + Enable File/Folder Run Count + + Click to launch or install Everything + Everything Installation + מתקין את שירות Everything. אנא המתן... + שירות Everything הותקן בהצלחה + התקנה אוטומטית של שירות Everything נכשלה. אנא הורד אותו ידנית מ- https://www.voidtools.com + Click here to start it + לא מצליח למצוא התקנה של Everything, האם תרצה לבחור מיקום באופן ידני?{0}{0}לחץ על לא וEverything יותקן עבורך אוטומטית + Do you want to enable content search for Everything? + It can be very slow without index (which is only supported in Everything v1.5+) + + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml index f69f15868..eb0ef2771 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/it.xaml @@ -27,6 +27,12 @@ Personalizza Parola Chiave Collegamenti ad Accesso Rapido Impostazioni di Everything + Pannello Anteprima + Dimensioni + Data di creazione + Data della modifica + Visualizza Informazioni File + Formato data e ora Opzioni di ordinamento: Percorso di Everything: Avvia nascosto @@ -51,11 +57,17 @@ Enumerazione Diretta Percorso dell'editor di file Percorso dell'editor delle cartelle + Abilitato + Disabilitato Motore di Ricerca dei Contenuti Motore di Ricerca Ricorsivo sulle Catelle Indice del Motore di Ricerca Apri Opzioni di Indicizzazione di Windows + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine Esplora Risorse @@ -100,13 +112,15 @@ Rimuovi da Accesso Rapido Rimuovi elemento corrente dall'Accesso Rapido Mostra Menu Contestuale di Windows - Open With - Select a program to open with + Apri Con + Seleziona un programma con cui aprire - + {0} disponibili su {1} Aprire con il Gestore File Predefinito - Usa '>' per cercare in questa directory, '*' per cercare estensioni file o '>*' per combinare entrambe le ricerche. + + Usa '>' per cercare in questa directory, '*' per cercare estensioni file o '>*' per combinare entrambe le ricerche. + Impossibile caricare l'SDK di Everything @@ -131,7 +145,8 @@ Attenzione: Questa non è un'opzione di ordinamento rapido, le ricerche potrebbero essere lente Cerca Percorso Completo - + Enable File/Folder Run Count + Clicca per avviare o installare Everything Installazione di Everything Installazione di everything. Si prega di attendere... @@ -142,4 +157,9 @@ Vuoi abilitare la ricerca di contenuti per Everything? Può essere molto lento senza indice (che è supportato solo in Everything v1.5+) + + Menu Contestuale Nativo + Visualizza il menu contestuale nativo (sperimentale) + Sotto si può specificare elementi che si vuole includere nel menu contestuale, che possono essere parziali (es 'pri co') o completi ('Apri con'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml index d582424ed..df6199976 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ja.xaml @@ -27,6 +27,12 @@ Customise Action Keywords Quick Access Links Everything Setting + Preview Panel + サイズ + Date Created + Date Modified + Display File Info + Date and time format Sort Option: Everything Path: Launch Hidden @@ -51,11 +57,17 @@ Direct Enumeration ファイル エディターのパス フォルダー エディターのパス + Enabled + Disabled Content Search Engine Directory Recursive Search Engine Index Search Engine Open Windows Index Option + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine Explorer @@ -103,10 +115,12 @@ Open With Select a program to open with - + {0} free of {1} Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Failed to load Everything SDK @@ -131,7 +145,8 @@ Warning: This is not a Fast Sort option, searches may be slow Search Full Path - + Enable File/Folder Run Count + Click to launch or install Everything Everything Installation Installing Everything service. Please wait... @@ -142,4 +157,9 @@ Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml index 37a096f09..0d96210e1 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ko.xaml @@ -27,6 +27,12 @@ 사용자 지정 액션 키워드 빠른 접근 항목 Everything 설정 + 미리보기 패널 + 크기 + 만든 날짜 + 수정한 날짜 + 파일 정보 표시 + 시간과 날짜 형식 정렬 옵션: Everything 경로: Launch Hidden @@ -34,7 +40,7 @@ 쉘 경로 색인 제외 경로 검색 결과위치를 실행 가능한 작업 디렉토리(Working Directory)로 사용 - Hit Enter to open folder in Default File Manager + Enter 키를 눌렀을 때 기본 파일 관리자에서 폴더 열기 Use Index Search For Path Search 색인 옵션 검색: @@ -51,11 +57,17 @@ Direct Enumeration 파일 편집기 경로 폴더 편집기 경로 + + Disabled 내용 검색 엔진 경로 재귀 검색 엔진 색인 검색 엔진 윈도우 색인 설정 열기 + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine 탐색기 @@ -100,13 +112,15 @@ 빠른 접근에서 제거 이 항목을 빠른 접근에서 제거 우클릭 메뉴 보기 - Open With - Select a program to open with + 함께 열기 + 이 항목을 열 프로그램을 선택 - + {0} free of {1} Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Failed to load Everything SDK @@ -131,7 +145,8 @@ Warning: This is not a Fast Sort option, searches may be slow Search Full Path - + Enable File/Folder Run Count + Everything을 실행 또는 설치하려면 클릭 Everything 설치 Everything 서비스 설치 중. 잠시 기다려주세요... @@ -142,4 +157,9 @@ Eveyrhing으로 내용 검색을 활성화하시겠습니까? 인덱스가 없으면 매우 느릴 수 있습니다.(Everything v1.5+에서만 지원) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml index a5fd6c0c4..9c908c569 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nb.xaml @@ -2,144 +2,164 @@ - Please make a selection first - Please select a folder link - Are you sure you want to delete {0}? - Are you sure you want to permanently delete this file? - Are you sure you want to permanently delete this file/folder? - Deletion successful - Successfully deleted {0} - Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword - Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword - The required service for Windows Index Search does not appear to be running - To fix this, start the Windows Search service. Select here to remove this warning - The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return - Explorer Alternative - Error occurred during search: {0} - Could not open folder - Could not open file + Vennligst gjør et valg først + Velg en mappekobling + Er du sikker på at du ønsker å slette {0}? + Er du sikker på at du vil slette denne filen permanent? + Er du sikker på at du vil slette denne filen/mappen permanent? + Vellykket sletting + {0} ble slettet + Hvis du tilordner det globale handlingsnøkkelordet, kan det få for mange resultater under søk. Velg et bestemt handlingsnøkkelord + Hurtigtilgang kan ikke stilles til det globale handlingsnøkkelordet når det er aktivert. Vennligst velg et spesifikt handlingsnøkkelord + Den nødvendige tjenesten for Windows Index Search ser ikke ut til å kjøre + For å fikse dette, start Windows-søketjenesten. Velg her for å fjerne denne advarselen + Advarselen er slått av. Som et alternativ for å søke filer og mapper, vil du installere Everything-programtillegget?{0}{0}Velg 'Ja' for å installere Everything-programtillegget, eller 'Nei' for å returnere + Alternativ til utforsker + Feil oppstod under søk: {0} + Kunne ikke åpne mappe + Kunne ikke åpne fil - Delete - Edit - Add - General Setting - Customise Action Keywords - Quick Access Links - Everything Setting - Sort Option: - Everything Path: - Launch Hidden - Editor Path - Shell Path - Index Search Excluded Paths - Use search result's location as the working directory of the executable - Hit Enter to open folder in Default File Manager - Use Index Search For Path Search - Indexing Options - Search: - Path Search: - File Content Search: - Index Search: - Quick Access: - Current Action Keyword - Done - Enabled - When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword + Slett + Rediger + Legg til + Generell innstilling + Tilpass handlingsnøkkelord + Koblinger for hurtigtilgang + Everything-innstilling + Forhåndsvisningspanel + Størrelse + Dato opprettet + Dato endret + Vis filinfo + Dato- og klokkeslettformat + Alternativ for sortering: + Everything-sti: + Start skjult + Sti til redigeringsprogram + Skall-sti + Søk i indekser ekskluderte baner + Bruk søkeresultatets plassering som arbeidskatalogen til den kjørbare filen + Trykk Enter for å åpne mappen i standard filbehandler + Bruk indekssøk for banesøk + Alternativer for indeksering + Søk: + Søk etter filbane: + Søk etter filinnhold: + Indekssøk: + Hurtigtilgang: + Nåværende nøkkelord for handling + Utført + Aktivert + Når deaktivert vil Flow ikke utføre dette søkealternativet, og vil i tillegg gå tilbake til '*' for å frigjøre handlingsnøkkelordet Everything - Windows Index - Direct Enumeration + Windows-indeks + Direkte oppregning Filredigeringsbane Mapperedigeringsbane + Aktivert + Deaktivert - Content Search Engine - Directory Recursive Search Engine - Index Search Engine - Open Windows Index Option + Søkemotor for innhold + Rekursiv søkemotor for katalog + Indeks-søkemotor + Åpne Windows-indeksalternativet + Ekskluderte filtyper (kommaseparert) + For eksempel: exe,jpg,png + Maksimalt antall resultater + Maksimalt antall forespurte resultater fra aktiv søkemotor - Explorer - Find and manage files and folders via Windows Search or Everything + Utforsker + Finn og administrer filer og mapper via Windows Søk eller Everything - Ctrl + Enter to open the directory - Ctrl + Enter to open the containing folder + Ctrl + Enter for å åpne katalogen + Ctrl + Enter for å åpne mappen som inneholder - Copy path - Copy path of current item to clipboard - Copy - Copy current file to clipboard - Copy current folder to clipboard - Delete - Permanently delete current file - Permanently delete current folder - Path: - Delete the selected - Run as different user - Run the selected using a different user account - Open containing folder - Open the location that contains current item - Open With Editor: - Failed to open file at {0} with Editor {1} at {2} - Open With Shell: - Failed to open folder {0} with Shell {1} at {2} - Exclude current and sub-directories from Index Search - Excluded from Index Search - Open Windows Indexing Options - Manage indexed files and folders - Failed to open Windows Indexing Options - Add to Quick Access - Add current item to Quick Access - Successfully Added - Successfully added to Quick Access - Successfully Removed - Successfully removed from Quick Access - Add to Quick Access so it can be opened with Explorer's Search Activation action keyword - Remove from Quick Access - Remove from Quick Access - Remove current item from Quick Access - Show Windows Context Menu - Open With - Select a program to open with + Kopier sti + Kopier sti til gjeldende element til utklippstavlen + Kopier + Kopier gjeldende fil til utklippstavlen + Kopier gjeldende mappe til utklippstavlen + Slett + Slett gjeldende fil permanent + Slett gjeldende mappe permanent + Sti: + Slett valgte + Kjør som annen bruker + Kjør valgte med en annen brukerkonto + Åpne inneholdende mappe + Åpne plasseringen som inneholder gjeldende element + Åpne med redigeringsprogram: + Kunne ikke åpne filen på {0} med redigeringsprogram {1} ved {2} + Åpne med Skall: + Kunne ikke å åpne mappe {0} med Skall {1} ved {2} + Utelukk gjeldende og underkataloger fra Indekssøk + Ekskludert fra indekssøk + Åpne Windows indekseringsalternativer + Behandle indekserte filer og mapper + Kunne ikke åpne Windows indekseringsalternativer + Legg til hurtigtilgang + Legg gjeldende element til hurtigtilgang + Lagt til + Vellykket lagt til hurtigtilgang + Fjernet + Fjernet fra hurtigtilgang + Legg til i hurtigtilgang, slik at den kan åpnes med handlingsnøkkelordet Søkeaktivering i Utforsker + Fjern fra hurtigtilgang + Fjern fra hurtigtilgang + Fjern gjeldende element fra hurtigtilgang + Vis Windows-hurtigmeny + Åpne med + Velg et program for å åpne med - - {0} free of {1} - Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + {0} ledig av {1} + Åpne i standard filbehandler + + Bruk '>' for å søke i denne katalogen, '*' for å søke etter filendelser eller '>*' for å kombinere begge søkene. + - Failed to load Everything SDK - Warning: Everything service is not running - Error while querying Everything - Sort By - Name - Path - Size - Extension - Type Name - Date Created - Date Modified - Attributes - File List FileName - Run Count - Date Recently Changed - Date Accessed - Date Run + Kan ikke laste inn Everything-SDK + Advarsel: Everything-tjenesten kjører ikke + Feil under spørring av Everything + Sorter etter + Navn + Sti + Størrelse + Utvidelse + Typenavn + Dato opprettet + Dato endret + Attributter + Filliste Filnavn + Antall kjøringer + Dato nylig endret + Dato for tilgang + Dato for kjøring - Warning: This is not a Fast Sort option, searches may be slow + Advarsel: dette er ikke et hurtigsorteringsalternativ, søk kan være trege - Search Full Path - - Click to launch or install Everything - Everything Installation - Installing Everything service. Please wait... - Successfully installed Everything service - Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com - Click here to start it - Unable to find an Everything installation, would you like to manually select a location?{0}{0}Click no and Everything will be automatically installed for you - Do you want to enable content search for Everything? - It can be very slow without index (which is only supported in Everything v1.5+) + Søk i hele banen + Aktiver antall fil-/mappekjøringer + Klikk for å starte eller installere Everything + Installasjon av Everything + Installerer Everything-tjenesten. Vennligst vent... + Everything-tjenesten vellykket installert + Kunne ikke installere Everything-tjenesten automatisk. Installer den manuelt fra https://www.voidtools.com + Klikk her for å starte den + Kunne ikke finne en Everything-installasjon, vil du manuelt velge en plassering?{0}{0}Klikk nei, og Everything vil bli automatisk installert for deg + Vil du aktivere innholdssøk for Everything? + Det kan være veldig tregt uten indeks (som bare støttes i Everything v1.5+) + + + Opprinnelig hurtigmeny + Vis opprinnelig hurtigmeny (eksperimentell) + Nedenfor kan du spesifisere elementer du vil inkludere i hurtigtmenyen, de kan være delvise (f.eks. 'pne me') eller komplette ('Åpne med'). + Nedenfor kan du spesifisere elementer du vil ekskludere fra hurtigtmenyen, de kan være delvise (f.eks. 'pne me') eller komplette ('Åpne med'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml index a7a993b37..38e45aaa8 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/nl.xaml @@ -27,10 +27,16 @@ Customise Action Keywords Quick Access Links Everything Setting + Voorbeeld Paneel + Grootte + Datum aangemaakt + Datum gewijzigd + Bestandsinformatie weergeven + Formaat voor datum en tijd Sort Option: Everything Path: Launch Hidden - Editor Path + Editor pad Shell Path Index Search Excluded Paths Use search result's location as the working directory of the executable @@ -51,11 +57,17 @@ Direct Enumeration Bestandseditor pad Pad naar mapeditor + Enabled + Disabled Content Search Engine Directory Recursive Search Engine Index Search Engine Open Windows Index Option + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine Explorer @@ -103,43 +115,51 @@ Open With Select a program to open with - + {0} free of {1} Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Failed to load Everything SDK - Warning: Everything service is not running - Error while querying Everything - Sort By + Waarschuwing: Everything service is niet actief + Fout bij het opvragen Everything + Sorteer op Name - Path + Pad Size - Extension - Type Name - Date Created - Date Modified - Attributes - File List FileName - Run Count - Date Recently Changed - Date Accessed - Date Run + Uitbreiding + Type naam + Datum aangemaakt + Datum gewijzigd + Kenmerken + Bestandslijst Bestandsnaam + Aantal keer uitgevoerd + Datum onlangs gewijzigd + Datum laatst geopend + Datum uitvoering - Warning: This is not a Fast Sort option, searches may be slow + Waarschuwing: Dit is geen snelle sorteeroptie, zoekopdrachten kunnen traag zijn Search Full Path - + Enable File/Folder Run Count + Click to launch or install Everything - Everything Installation - Installing Everything service. Please wait... - Successfully installed Everything service - Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com - Click here to start it - Unable to find an Everything installation, would you like to manually select a location?{0}{0}Click no and Everything will be automatically installed for you + Everything geïnstalleerd + Installeren Everything alles service. Een ogenblik geduld... + Everything service is succesvol geïnstalleerd + Automatisch installeren mislukt. Installeer de Everything-service handmatig, vanaf https://www.voidtools.com + Klik hier om te starten + Kan geen 'Everything' vinden, wilt u handmatig een locatie selecteren?{0}{0}Klik op nee en alles zal automatisch voor u worden geïnstalleerd Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml index 13d9cf731..324b8ad36 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pl.xaml @@ -6,140 +6,160 @@ Musisz wybrać któryś folder z listy Czy jesteś pewien że chcesz usunąć {0}? Jesteś pewny, że chcesz usunąć ten plik trwale? - Are you sure you want to permanently delete this file/folder? - Deletion successful - Successfully deleted {0} - Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword - Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword - The required service for Windows Index Search does not appear to be running - To fix this, start the Windows Search service. Select here to remove this warning - The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return - Explorer Alternative - Error occurred during search: {0} - Could not open folder - Could not open file + Czy na pewno chcesz trwale usunąć ten plik/folder? + Usunięcie powiodło się + Pomyślnie usunięto {0} + Przypisanie globalnego słowa kluczowego akcji może spowodować wyświetlenie zbyt wielu wyników podczas wyszukiwania. Proszę wybrać konkretne słowo kluczowe akcji + Szybki dostęp nie może być ustawiony jako globalny klawisz akcji, gdy jest włączony. Proszę wybrać konkretny klawisz akcji + Wymagana usługa dla Windows Index Search nie wydaje się być uruchomiona + Aby to naprawić, uruchom usługę wyszukiwania Windows. Wybierz tutaj, aby usunąć to ostrzeżenie + Komunikat ostrzegawczy został wyłączony. Jako alternatywę do wyszukiwania plików i folderów, czy chcesz zainstalować wtyczkę Everything?{0}{0}Wybierz 'Tak', aby zainstalować wtyczkę Everything, lub 'Nie', aby powrócić + Alternatywa dla Eksploratora + Wystąpił błąd podczas wyszukiwania: {0} + Nie można otworzyć folderu + Nie można otworzyć pliku Usuń Edytuj Dodaj - General Setting - Customise Action Keywords - Quick Access Links - Everything Setting - Sort Option: - Everything Path: - Launch Hidden + Ustawienia ogólne + Zmień słowa kluczowe akcji + Linki szybkiego dostępu + Ustawienia Everything + Panel podglądu + Rozmiar + Data utworzenia + Data modyfikacji + Wyświetl informacje o pliku + Format daty i czasu + Opcje sortowania: + Ścieżka Everything: + Uruchom w tle Ścieżka edytora - Shell Path - Index Search Excluded Paths - Use search result's location as the working directory of the executable - Hit Enter to open folder in Default File Manager - Use Index Search For Path Search - Indexing Options - Search: - Path Search: - File Content Search: - Index Search: - Quick Access: - Current Action Keyword + Ścieżka powłoki + Wykluczone ścieżki indeksu + Użyj lokalizacji wyników wyszukiwania jako katalogu roboczego pliku wykonywalnego + Naciśnij Enter, aby otworzyć folder w domyślnym menedżerze plików + Użyj wyszukiwania indeksowego do przeszukiwania ścieżek + Opcje indeksowania + Szukaj: + Szukaj w ścieżce: + Przeszukiwanie zawartości plików: + Wyszukiwanie indeksowe: + Szybki dostęp: + Bieżące słowo kluczowe akcji Zapisz - Enabled - When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword + Aktywny + Po wyłączeniu Flow nie będzie wykonywać tej opcji wyszukiwania, a dodatkowo przywróci '*', aby zwolnić słowo kluczowe akcji Everything - Windows Index - Direct Enumeration + Indeks Windows + Bezpośrednie wyliczanie Ścieżka edytora plików Ścieżka edytora folderów + Aktywny + Wyłączony - Content Search Engine - Directory Recursive Search Engine - Index Search Engine - Open Windows Index Option + Wyszukiwarka zawartości + Rekurencyjna wyszukiwarka katalogów + Wyszukiwarka zawartości + Otwórz opcje indeksowania Windows + Wykluczone typy plików (oddzielone przecinkami) + Na przykład: exe,jpg,png + Maksymalna liczba wyników + Maksymalna liczba wyników żądanych przez aktywną wyszukiwarkę Explorer - Find and manage files and folders via Windows Search or Everything + Wyszukaj i zarządzaj plikami oraz folderami za pomocą Windows Search lub Everything - Ctrl + Enter to open the directory - Ctrl + Enter to open the containing folder + Ctrl + Enter, aby otworzyć folder + Ctrl + Enter, aby otworzyć folder zawierający - Copy path - Copy path of current item to clipboard - Copy - Copy current file to clipboard - Copy current folder to clipboard + Skopiuj Ścieżkę + Kopiuj ścieżkę bieżącego elementu do schowka + Kopiuj + Kopiuj bieżący plik do schowka + Kopiuj bieżący folder do schowka Usu - Permanently delete current file - Permanently delete current folder - Path: - Delete the selected - Run as different user - Run the selected using a different user account - Open containing folder - Open the location that contains current item - Open With Editor: - Failed to open file at {0} with Editor {1} at {2} - Open With Shell: - Failed to open folder {0} with Shell {1} at {2} - Exclude current and sub-directories from Index Search - Excluded from Index Search - Open Windows Indexing Options - Manage indexed files and folders - Failed to open Windows Indexing Options - Add to Quick Access - Add current item to Quick Access - Successfully Added - Successfully added to Quick Access - Successfully Removed - Successfully removed from Quick Access - Add to Quick Access so it can be opened with Explorer's Search Activation action keyword - Remove from Quick Access - Remove from Quick Access - Remove current item from Quick Access - Show Windows Context Menu - Open With - Select a program to open with + Trwale usuń bieżący plik + Trwale usuń bieżący folder + Ścieżka: + Usuń zaznaczone + Uruchom jako inny użytkownik + Uruchom wybrane używając innego konta użytkownika + Otwórz folder nadrzędny + Otwórz lokalizację zawierającą bieżący element + Otwórz w edytorze: + Nie udało się otworzyć pliku {0} w edytorze {1} pod ścieżką {2} + Otwórz za pomocą powłoki: + Nie udało się otworzyć folderu {0} za pomocą powłoki {1} w {2} + Wyklucz bieżący i podkatalogi z wyszukiwania indeksowego + Wykluczone z wyszukiwania indeksowego + Otwórz opcje indeksowania Windows + Zarządzaj zindeksowanymi plikami i folderami + Nie udało się otworzyć opcji indeksowania Windows + Dodaj do szybkiego dostępu + Dodaj bieżący element do szybkiego dostępu + Pomyślnie dodano + Pomyślnie dodano do szybkiego dostępu + Pomyślnie usunięto + Pomyślnie usunięto z szybkiego dostępu + Dodaj do szybkiego dostępu, aby można było otworzyć za pomocą słowa kluczowego akcji aktywacji wyszukiwania Eksploratora + Usunieto z szybkiego dostępu + Usunieto z szybkiego dostępu + Usuń bieżący element z szybkiego dostępu + Pokaż menu kontekstowe Windows + Otwórz za pomocą + Wybierz program do otwarcia - - {0} free of {1} - Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + {0} wolne z {1} + Otwórz w domyślnym menedżerze plików + + Użyj '>' aby przeszukać ten folder, '' aby wyszukać rozszerzenia plików lub '>' aby połączyć oba wyszukiwania. + - Failed to load Everything SDK + Nie udało się załadować wszystkich SDK Everything Service nie jest uruchomiony Wystąpił błąd podczas pobierania wyników z Everything - Sort By - Name - Path + Sortuj wg + Nazwa + Ścieżka Rozmiar - Extension - Type Name - Date Created - Date Modified - Attributes - File List FileName - Run Count - Date Recently Changed - Date Accessed - Date Run + Rozszerzenia + Nazwa typu + Data utworzenia + Data modyfikacji + Atrybuty + Nazwa pliku na liście plików + Liczba uruchomień + Data ostatniej zmiany + Data dostępu + Data uruchomienia - Warning: This is not a Fast Sort option, searches may be slow + Uwaga: To nie jest opcja Szybkiego sortowania, wyszukiwania mogą być wolne - Search Full Path - - Click to launch or install Everything - Everything Installation - Installing Everything service. Please wait... - Successfully installed Everything service - Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com - Click here to start it - Unable to find an Everything installation, would you like to manually select a location?{0}{0}Click no and Everything will be automatically installed for you - Do you want to enable content search for Everything? - It can be very slow without index (which is only supported in Everything v1.5+) + Wyszukaj pełną ścieżkę + Włącz licznik uruchomień plików/folderów + Kliknij, aby uruchomić lub zainstalować Everything + Instalacja Everything + Trwa instalacja usługi Everything. Proszę czekać... + Pomyślnie zainstalowano usługę Everything + Nie udało się automatycznie zainstalować usługi Everything. Proszę zainstalować ją ręcznie z https://www.voidtools.com + Kliknij tutaj, aby rozpocząć + Nie można znaleźć instalacji programu Everything. Czy chcesz ręcznie wybrać lokalizację?{0}{0}Kliknij "Nie", a program Everything zostanie automatycznie zainstalowany + Czy chcesz włączyć wyszukiwanie zawartości dla programu Everything? + Może działać bardzo wolno bez indeksu (który jest obsługiwany tylko w Everything w wersji 1.5 i nowszych) + + + Natywne menu kontekstowe + Wyświetl natywne menu kontekstowe (eksperymentalne) + Poniżej możesz określić elementy, które chcesz uwzględnić w menu kontekstowym. Mogą być one częściowe (np. "otw w") lub pełne ("Otwórz za pomocą"). + Poniżej możesz określić elementy, które chcesz wykluczyć z menu kontekstowego. Mogą być one częściowe (np. "otw w") lub pełne ("Otwórz za pomocą"). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml index 8e5761345..058bd353f 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-br.xaml @@ -27,6 +27,12 @@ Customise Action Keywords Links de Acesso Rápido Everything Setting + Preview Panel + Tamanho + Date Created + Date Modified + Display File Info + Date and time format Sort Option: Everything Path: Launch Hidden @@ -51,11 +57,17 @@ Direct Enumeration File Editor Path Folder Editor Path + Enabled + Disabled Content Search Engine Directory Recursive Search Engine Index Search Engine Open Windows Index Option + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine Explorador @@ -103,10 +115,12 @@ Open With Select a program to open with - + {0} free of {1} Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Failed to load Everything SDK @@ -131,7 +145,8 @@ Warning: This is not a Fast Sort option, searches may be slow Search Full Path - + Enable File/Folder Run Count + Click to launch or install Everything Everything Installation Installing Everything service. Please wait... @@ -142,4 +157,9 @@ Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml index 193ae0dd9..27f98449f 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/pt-pt.xaml @@ -27,6 +27,12 @@ Personalizar palavras-chave Ligações de acesso rápido Definições Everything + Painel de pré-visualização + Tamanho + Data de criação + Data de modificação + Mostrar informações do ficheiro + Formato de data e de hora Ordenação: Caminho para Everything: Iniciar oculto @@ -51,11 +57,17 @@ Enumeração direta Caminho do editor de ficheiros Caminho do editor de pastas + Ativo + Inativo Mecanismo de pesquisa para conteúdo Mecanismo de pesquisa recursiva de diretórios Mecanismo de pesquisa do índice Abrir opções de índice do Windows + Tipos de ficheiros excluídos (separados por vírgula) + Exemplo: exe,jpg,png + Número máximo de resultados + O número máximo de resultados solicitados ao motor de pesquisa ativo Explorador @@ -103,10 +115,12 @@ Abrir com Selecione o programa a utilizar - + {0} livre de {1} no total Abrir no gestor de ficheiros padrão - Utilize '>' para pesquisar nesta pasta, '*' para pesquisar por extensão de ficheiro e '>*' para combinar ambas as anteriores. + + Utilize '>' para pesquisar nesta pasta, '*' para pesquisar por extensão de ficheiro e '>*' para combinar ambas as anteriores. + Falha ao carregar Everything SDK @@ -131,7 +145,8 @@ Aviso: esta não é uma opção de ordenação rápida e as pesquisas podem ser demoradas Pesquisar caminho completo - + Ativar contagem de execução de ficheiros/pastas + Clique para iniciar ou instalar Everything Instalação Everything A instalar o serviço Everything. Por favor aguarde... @@ -142,4 +157,9 @@ Deseja ativar a pesquisa de conteúdo através de Everything? Pode ser muito lento sem índice (que apenas existe em Everything v1.5+) + + Menu de contexto nativo + Mostrar menu de contexto nativo (experimental) + Aqui pode especificar os itens a incluir no menu de contexto. Podem ser parciais (ex.: 'brir co') ou completos ('Abrir com'). + Aqui pode especificar os itens a excluir do menu de contexto. Podem ser parciais (ex.: 'brir co') ou completos ('Abrir com'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml index cb7f2cda5..911364fdf 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/ru.xaml @@ -15,9 +15,9 @@ To fix this, start the Windows Search service. Select here to remove this warning The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return Explorer Alternative - Error occurred during search: {0} - Could not open folder - Could not open file + При поиске произошла ошибка: {0} + Не удалось открыть папку + Не удалось открыть файл Удалить @@ -27,6 +27,12 @@ Customise Action Keywords Quick Access Links Everything Setting + Preview Panel + Размер + Date Created + Date Modified + Display File Info + Date and time format Sort Option: Everything Path: Launch Hidden @@ -37,7 +43,7 @@ Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options - Search: + Поиск: Path Search: File Content Search: Index Search: @@ -51,11 +57,17 @@ Direct Enumeration Путь к редактору файлов Путь к редактору папки + Enabled + Отключён Content Search Engine Directory Recursive Search Engine Index Search Engine Open Windows Index Option + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine Explorer @@ -66,17 +78,17 @@ Ctrl + Enter to open the containing folder - Copy path + Скопировать путь Copy path of current item to clipboard - Copy + Скопировать Copy current file to clipboard Copy current folder to clipboard Удалить Permanently delete current file Permanently delete current folder - Path: + Путь: Delete the selected - Run as different user + Запустить от имени другого пользователя Run the selected using a different user account Open containing folder Open the location that contains current item @@ -103,10 +115,12 @@ Open With Select a program to open with - + {0} free of {1} Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Failed to load Everything SDK @@ -131,7 +145,8 @@ Warning: This is not a Fast Sort option, searches may be slow Search Full Path - + Enable File/Folder Run Count + Click to launch or install Everything Everything Installation Installing Everything service. Please wait... @@ -142,4 +157,9 @@ Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml index e926735b8..35883a09c 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sk.xaml @@ -27,6 +27,12 @@ Upraviť aktivačný príkaz Odkazy Rýchleho prístupu Nastavenia Everything + Panel náhľadu + Veľkosť + Dátum vytvorenia + Dátum úpravy + Zobraziť informácie o súbore + Formát dátumu a času Zoradenie: Umiestnenie Everything: Spustiť skryté @@ -51,11 +57,17 @@ Zoznam priečinkov Cesta k editoru súborov Cesta k editoru priečinkov + Povolené + Vypnuté Vyhľadávač obsahu Priečinkový rekurzívny vyhľadávač Indexový vyhľadávač Otvoriť možnosti vyhľadávania vo Windowse + Vylúčené typy súborov (oddelené čiarkou) + Napr.: exe,jpg,png + Maximum výsledkov + Maximálny počet výsledkov pre aktívny vyhľadávač Prieskumník @@ -103,10 +115,12 @@ Otvoriť s Vyberte program, ktorým chcete otvoriť súbor - + Voľných {0} z {1} Otvoriť v predvolenom správcovi súborov - Použite ">" na vyhľadávanie v tomto priečinku, "*" na vyhľadávanie prípon súborov alebo ">*" na kombináciu oboch hľadaní. + + Použite ">" na vyhľadávanie v tomto priečinku, "*" na vyhľadávanie prípon súborov alebo ">*" na kombináciu oboch hľadaní. + Nepodarilo sa načítať SDK Everything @@ -131,7 +145,8 @@ Upozornenie: Toto nie je voľba Fast Sort, vyhľadávanie môže byť pomalé Vyhľadávanie celej cesty - + Povoliť počítadlo spustení súboru/priečinka + Kliknutím spustíte alebo nainštalujete Everything Inštalácia Everything Inštaluje sa služba Everything. Čakajte, prosím… @@ -142,4 +157,9 @@ Chcete povoliť vyhľadávanie obsahu cez Everything? Bez indexu (ktorý je podporovaný len v Everything v1.5+) to môže byť veľmi pomalé + + Natívna kontextová ponuka + Zobraziť natívnu kontextovú ponuku (experimentálne) + Nižšie môžete určiť položky, ktoré chcete zahrnúť do kontextovej ponuky, môžu byť čiastočné (napr. "tvoriť v program") alebo úplné ("Otvoriť v programe"). + Nižšie môžete určiť položky, ktoré chcete vylúčiť z kontextovej ponuky, môžu byť čiastočné (napr. "tvoriť v program") alebo úplné ("Otvoriť v programe"). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml index 2b6f087af..f1227df40 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/sr.xaml @@ -27,6 +27,12 @@ Customise Action Keywords Quick Access Links Everything Setting + Preview Panel + Size + Date Created + Date Modified + Display File Info + Date and time format Sort Option: Everything Path: Launch Hidden @@ -51,11 +57,17 @@ Direct Enumeration File Editor Path Folder Editor Path + Enabled + Disabled Content Search Engine Directory Recursive Search Engine Index Search Engine Open Windows Index Option + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine Explorer @@ -103,10 +115,12 @@ Open With Select a program to open with - + {0} free of {1} Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Failed to load Everything SDK @@ -131,7 +145,8 @@ Warning: This is not a Fast Sort option, searches may be slow Search Full Path - + Enable File/Folder Run Count + Click to launch or install Everything Everything Installation Installing Everything service. Please wait... @@ -142,4 +157,9 @@ Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml index 2c90a7720..1e09ba103 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/tr.xaml @@ -5,141 +5,161 @@ Please make a selection first Lütfen bir klasör bağlantısı seçin {0} bağlantısını silmek istediğinize emin misiniz? - Are you sure you want to permanently delete this file? - Are you sure you want to permanently delete this file/folder? + Bu dosyayı kalıcı olarak silmek istediğinizden emin misiniz? + Bu öğeyi kalıcı olarak silmek istediğinizden emin misiniz? Deletion successful - Successfully deleted {0} + Başarıyla silindi: {0} Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword The required service for Windows Index Search does not appear to be running To fix this, start the Windows Search service. Select here to remove this warning The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return Explorer Alternative - Error occurred during search: {0} - Could not open folder - Could not open file + Arama sırasında hata oluştu: {0} + Klasör açılamadı + Dosya açılamadı Sil Düzenle Ekle - General Setting - Customise Action Keywords + Genel Ayarlar + Anahtar Kelimeler Quick Access Links - Everything Setting - Sort Option: - Everything Path: + Everything Ayarları + Önizleme Paneli + Boyut + Oluşturma Tarihi + Değiştirme Tarihi + Dosya Özelliklerini Göster + Tarih ve saat biçimi + Sıralama Seçeneği: + Everything Kurulumu: Launch Hidden - Düzenleyici Konumu - Shell Path - Index Search Excluded Paths + Metin Düzenleyici + Komut İstemi + Hariç Tutulan Dizinler Programın çalışma klasörü olarak sonuç klasörünü kullan Hit Enter to open folder in Default File Manager Use Index Search For Path Search Indexing Options - Search: - Path Search: - File Content Search: + Ara: + Yolu Ara: + Dosya İçeriğini Ara: Index Search: - Quick Access: - Current Action Keyword + Hızlı Erişim: + Geçerli Anahtar Kelime Tamam - Enabled + Etkin When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword Everything - Windows Index - Direct Enumeration - Düzenleyici Konumu - Folder Editor Path + Windows Arama + Doğrudan Sayım + Metin Düzenleyici + Klasör Düzenleyici + Enabled + Disabled - Content Search Engine + Dosya İçeriği Arama Motoru Directory Recursive Search Engine - Index Search Engine - Open Windows Index Option + Arama Motoru + Windows Dizin Oluşturma Ayarları + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine - Explorer + Dosya Gezgini Find and manage files and folders via Windows Search or Everything - Ctrl + Enter to open the directory - Ctrl + Enter to open the containing folder + Dizini açmak içi Ctrl + Enter + Dosya konumunu açmak için Ctrl + Enter - Copy path - Copy path of current item to clipboard - Copy - Copy current file to clipboard - Copy current folder to clipboard + Yolu kopyala + Mevcut dosya konumunu panoya kopyala + Kopyala + Mevcut dosyayı panoya kopyala + Mevcut klasörü panoya kopyala Sil - Permanently delete current file - Permanently delete current folder - Path: - Delete the selected - Run as different user + Mevcut dosyayı kalıcı olarak sil + Mevcut klasörü kalıcı olarak sil + Yol: + Seçileni sil + Başka bir kullanıcı olarak çalıştır Run the selected using a different user account - Open containing folder + Dosya konumunu aç Open the location that contains current item - Open With Editor: + Metin Düzenleyici ile Aç: Failed to open file at {0} with Editor {1} at {2} - Open With Shell: + Komut İstemi ile Aç: Failed to open folder {0} with Shell {1} at {2} Exclude current and sub-directories from Index Search Excluded from Index Search - Open Windows Indexing Options + Windows Dizin Oluşturma Ayarları Manage indexed files and folders - Failed to open Windows Indexing Options - Add to Quick Access + Windows Dizin Oluşturma ayarlarını açma başarısız oldu + Hızlı Erişime Sabitle Add current item to Quick Access - Successfully Added + Başarıyla Eklendi Successfully added to Quick Access - Successfully Removed + Başarıyla Kaldırıldı Successfully removed from Quick Access Add to Quick Access so it can be opened with Explorer's Search Activation action keyword - Remove from Quick Access - Remove from Quick Access + Hızlı Erişimden Kaldır + Hızlı Erişimden Kaldır Remove current item from Quick Access - Show Windows Context Menu - Open With + Windows Bağlam Menüsünü Aç + Birlikte Aç Select a program to open with - + {0} free of {1} - Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Dosya Yöneticisinde Aç + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + - Failed to load Everything SDK + Everything SDK'sini yükleme başarısız oldu Everything Servisi çalışmıyor Sorgu Everything üzerinde çalıştırılırken hata oluştu - Sort By + Şuna Göre Sırala Name - Path + Yol Boyut - Extension - Type Name - Date Created - Date Modified - Attributes + Uzantı + Tür + Oluşturma Tarihi + Değiştirme Tarihi + Özellikler File List FileName - Run Count + Erişim Sayısı Date Recently Changed - Date Accessed + Erişim Tarihi Date Run Warning: This is not a Fast Sort option, searches may be slow - Search Full Path - - Click to launch or install Everything - Everything Installation - Installing Everything service. Please wait... - Successfully installed Everything service - Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com - Click here to start it + Tam Yolu Ara + Enable File/Folder Run Count + + Everything'i yükle veya başlat + Everything Kurulumu + Everything hizmeti yükleniyor. Lütfen bekleyin... + Everything hizmeti başarıyla yüklendi + Everything hizmetini otomatik olarak yükleme başarısız oldu. Lütfen https://www.voidtools.com adresinden elle yükleyin. + Başlat Unable to find an Everything installation, would you like to manually select a location?{0}{0}Click no and Everything will be automatically installed for you Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml index 9909bf9c5..d96b5b503 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/uk-UA.xaml @@ -27,6 +27,12 @@ Налаштувати ключові слова дії Посилання швидкого доступу Налаштування Everything + Панель поперегляду + Розмір + Дата створення + Дата останньої зміни + Показати інформацію про файл + Формат дати й часу Варіант сортування: Шлях до Everything: Запустити приховано @@ -51,11 +57,17 @@ Пряме перерахування Шлях редактора файлів Шлях редактора папок + Увімкнено + Вимкнено Пошукова система контенту Рекурсивна пошукова система за каталогом Пошукова система індексів Відкрити параметри індексування Windows + Виключені типи файлів (через кому) + Наприклад: exe,jpg,png + Максимум результатів + Максимальна кількість результатів, отриманих від активної пошукової системи Провідник @@ -103,10 +115,12 @@ Відкрити за допомогою Виберіть програму для відкриття - + {0} не містить {1} Відкрити у файловому менеджері за замовчуванням - Використовуйте '>' для пошуку в цьому каталозі, '*' для пошуку за розширеннями файлів або '>*' для поєднання обох варіантів пошуку. + + Використовуйте '>' для пошуку в цьому каталозі, '*' для пошуку за розширеннями файлів або '>*' для поєднання обох варіантів пошуку. + Не вдалося завантажити Everything SDK @@ -131,7 +145,8 @@ Попередження: Це не швидке сортування, пошук може бути повільним Шукати повний шлях - + Enable File/Folder Run Count + Натисніть, щоб запустити або встановити Everything Встановлення програми Everything Встановлення служби Everything. Будь ласка, зачекайте... @@ -142,4 +157,10 @@ Бажаєте увімкнути пошук контенту для Everything? Без індексу (який підтримується лише у версії Everything v1.5+) воно може працювати дуже повільно + + Рідне контекстне меню + Відображати рідне контекстне меню (експериментально) + Нижче ви можете вказати елементи, які хочете включити до контекстного меню, вони можуть бути частковими (наприклад, «шир пера») або повними («Відкрити за допомогою»). + Нижче ви можете вказати елементи, які хочете виключити з контекстного меню, вони можуть бути частковими (наприклад, «шир пера») або повними («Відкрити за допомогою»). + diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml new file mode 100644 index 000000000..81b5a2f92 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/vi.xaml @@ -0,0 +1,165 @@ + + + + + Vui lòng lựa chọn trước + Hãy chọn một thư mục. + Bạn có chắc chắn muốn xóa {0} không? + Bạn có chắc là muốn xóa vĩnh viễn các ảnh này? + Bạn có chắc là muốn xóa vĩnh viễn các ảnh này? + Xóa thành công + Thành công trong việc xóa + Việc chỉ định từ khóa hành động chung có thể mang lại quá nhiều kết quả trong quá trình tìm kiếm. Vui lòng chọn từ khóa hành động cụ thể + Không thể đặt Truy cập nhanh thành từ khóa hành động chung khi được bật. Vui lòng chọn từ khóa hành động cụ thể + Dịch vụ cần thiết cho Windows Index Search dường như không chạy + Để khắc phục điều này, hãy khởi động dịch vụ Windows Search. Chọn vào đây để xóa cảnh báo này + Thông báo cảnh báo đã bị tắt. Là một giải pháp thay thế cho việc tìm kiếm tệp và thư mục, bạn có muốn cài đặt plugin Mọi thứ không?{0}{0}Chọn 'Có' để cài đặt plugin Mọi thứ hoặc 'Không' để quay lại + Nhà thám hiểm thay thế + Đã xảy ra lỗi trong quá trình tìm kiếm: {0} + Không thể mở thư mục + Không thể mở file + + + Xóa + Sửa + Thêm + Cài đặt chung + Tùy chỉnh từ khóa hành động + Liên kết truy cập nhanh + Cài đặt mọi thứ + Bảng xem trước + Kích thước + Date Created + Date Modified + Hiển thị thông tin tệp + Định dạng ngày và giờ + Tùy Chọn Sắp Xếp + Đường dẫn mọi thứ: + Khởi chạy ẩn + Đường dẫn soạn thảo + Đường dẫn Shell + Đường dẫn bị loại trừ tìm kiếm chỉ mục + Sử dụng vị trí của kết quả tìm kiếm làm thư mục làm việc của tệp thực thi + Chạy với tư cách quản trị viên / mở thư mục trong trình quản lý tệp tiêu chuẩn + Sử dụng Tìm kiếm Chỉ mục để Tìm kiếm Đường dẫn + Tùy chọn lập chỉ mục + Tìm kiếm trên web với sự hỗ trợ của công cụ tìm kiếm khác + Tìm kiếm đường dẫn: + Tìm kiếm nội dung tệp: + Tìm kiếm chỉ mục: + Truy cập nhanh + Từ hành động hiện tại + Xong + Đã bật + Khi bị tắt, Flow sẽ không thực thi tùy chọn tìm kiếm này và sẽ hoàn nguyên về '*' để giải phóng từ khóa hành động + Tất cả mọi thứ + Chỉ mục Windows + Đếm trực tiếp + Đường dẫn trình soạn thảo tệp + Folder Editor Path + Đã bật + Vô hiệu hóa + + Công cụ tìm kiếm nội dung + Directory Recursive Search Engine + Công cụ tìm kiếm chỉ mục + Mở tùy chọn lập chỉ mục Windows + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine + + + Thư mục + Tìm và quản lý tệp và thư mục thông qua Windows Search hoặc Everything + + + Ctrl + Enter để mở thư mục + Ctrl + Enter để mở thư mục chứa + + + Copy đường dẫn + Sao chép đường dẫn của mục hiện tại vào clipboard + Sao chép + Sao chép tập tin hiện tại vào clipboard + Copy current folder to clipboard + Xóa + Permanently delete current file + Permanently delete current folder + Đường dẫn: + Xóa đã chọn + Xóa lựa chọn đã chọn + Chạy phần đã chọn bằng tài khoản người dùng khác + Mở thư mục chứa + Open the location that contains current item + Mở bằng trình chỉnh sửa: + Failed to open file at {0} with Editor {1} at {2} + Mở bằng Shell: + Failed to open folder {0} with Shell {1} at {2} + Loại trừ các thư mục hiện tại và thư mục con khỏi Tìm kiếm chỉ mục + Bị loại trừ khỏi Tìm kiếm chỉ mục + Mở tùy chọn lập chỉ mục Windows + Quản lý các tập tin và thư mục được lập chỉ mục + Quản lý các tập tin và thư mục được lập chỉ mục + Thêm vào Bảng truy cập nhanh + Thêm {0} hiện tại vào Truy cập nhanh + Đã thêm thành công + Đã thêm thành công vào Truy cập nhanh + Đã được gỡ bỏ thành công + Đã xóa thành công khỏi Truy cập nhanh + Thêm vào Truy cập nhanh để có thể mở nó bằng từ khóa hành động Kích hoạt tìm kiếm của Explorer + Loại bỏ khỏi bảng truy cập nhanh + Loại bỏ khỏi bảng truy cập nhanh + Xóa {0} hiện tại khỏi Truy cập nhanh + Show Windows Context Menu + Mở bằng + Select a program to open with + + + {0} phần {1} + Trình quản lý tệp mặc định + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + + + Failed to load Everything SDK + Warning: Everything service is not running + Error while querying Everything + Sắp xếp theo + Tên + Đường dẫn + Kích thước + Mở rộng + Loại tên + Ngày Tạo + ngày sửa đổi + Thuộc tính + File List FileName + Số lần chạy + Date Recently Changed + Ngày truy cập + Date Run + + + Warning: This is not a Fast Sort option, searches may be slow + + Search Full Path + Enable File/Folder Run Count + + Click to launch or install Everything + Everything Installation + Installing Everything service. Please wait... + Successfully installed Everything service + Failed to automatically install Everything service. Please manually install it from https://www.voidtools.com + Click here to start it + Không thể tìm thấy bản cài đặt Mọi thứ, bạn có muốn chọn vị trí theo cách thủ công không?{0}{0}Nhấp vào không và Mọi thứ sẽ được cài đặt tự động cho bạn + Do you want to enable content search for Everything? + It can be very slow without index (which is only supported in Everything v1.5+) + + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml index 2899c77c6..64831ea13 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-cn.xaml @@ -27,6 +27,12 @@ 自定义动作关键字 快速访问链接 Everything 设置 + 预览面板 + 大小 + 创建日期 + 修改日期 + 显示文件信息 + 日期和时间格式 排序选项 Everything 路径 隐藏启动 @@ -51,11 +57,17 @@ 直接枚举 编辑器路径(文件) 编辑器路径(文件夹) + 启用 + 已禁用 文件内容搜索引擎 目录递归搜索引擎 索引搜索引擎 打开 Windows 索引选项 + 排除的文件类型(以半角逗号分隔) + 例如:exe,jpg,png + 最大结果数 + 从活跃搜索引擎请求的最大结果数 文件管理器 @@ -100,13 +112,15 @@ 从快速访问中删除 从快速访问中移除当前结果 显示 Windows 上下文菜单 - Open With - Select a program to open with + 打开方式 + 选择要打开的程序 - + {0} 可用,共 {1} 在默认文件管理器中打开 - 使用 '>' 在这个目录中搜索,'*' 以搜索文件扩展名或 '>*' 以结合这两个搜索。 + + 使用 '>' 在这个目录中搜索,'*' 以搜索文件扩展名或 '>*' 以结合这两个搜索。 + 加载 Everything SDK 失败 @@ -131,7 +145,8 @@ 警告:这不是一个快速排序选项,搜索可能较慢。 搜索完整路径 - + 启用文件/文件夹运行计数 + 单击启动或安装 Everything Everything 安装 正在安装 Everything 服务。请稍后... @@ -142,4 +157,9 @@ 您想要启用 Everything 的内容搜索功能吗? 如果没有索引,它可能会非常慢(索引仅在 Everything v1.5+ 中支持) + + 本机上下文菜单 + 显示本机上下文菜单(实验性) + 您可以在下面指定想要包含在上下文菜单中的项目,它们可以是部分的(例如“pen wit”)或完整的(“打开方式”)。 + 您可以在下面指定要从上下文菜单中排除的项目,它们可以是部分的(例如“pen wit”)或完整的(“打开方式”)。 diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml index d60f1f09d..9e9697255 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Languages/zh-tw.xaml @@ -27,6 +27,12 @@ Customise Action Keywords 快速訪問連結 Everything Setting + Preview Panel + 大小 + 創建日期 + 修改日期 + Display File Info + Date and time format Sort Option: Everything Path: Launch Hidden @@ -51,11 +57,17 @@ Direct Enumeration 文件編輯器路徑 文件夾編輯器路徑 + 已啟用 + Disabled Content Search Engine Directory Recursive Search Engine Index Search Engine Open Windows Index Option + Excluded File Types (comma seperated) + For example: exe,jpg,png + Maximum results + The maximum number of results requested from active search engine 檔案總管 @@ -103,10 +115,12 @@ Open With Select a program to open with - + {0} free of {1} Open in Default File Manager - Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + + Use '>' to search in this directory, '*' to search for file extensions or '>*' to combine both searches. + Failed to load Everything SDK @@ -131,7 +145,8 @@ Warning: This is not a Fast Sort option, searches may be slow Search Full Path - + Enable File/Folder Run Count + Click to launch or install Everything Everything 安裝程序 正在安裝 Everything 服務,請稍後... @@ -142,4 +157,9 @@ Do you want to enable content search for Everything? It can be very slow without index (which is only supported in Everything v1.5+) + + Native Context Menu + Display native context menu (experimental) + Below you can specify items you want to include in the context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). + Below you can specify items you want to exclude from context menu, they can be partial (e.g. 'pen wit') or complete ('Open with'). diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingDownloadHelper.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingDownloadHelper.cs index ef923632d..c8bd68279 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingDownloadHelper.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingDownloadHelper.cs @@ -5,6 +5,7 @@ using System; using System.IO; using System.Linq; using System.Threading.Tasks; +using System.Windows; namespace Flow.Launcher.Plugin.Explorer.Search.Everything; @@ -19,10 +20,10 @@ public static class EverythingDownloadHelper if (string.IsNullOrEmpty(installedLocation)) { - if (System.Windows.Forms.MessageBox.Show( + if (api.ShowMsgBox( string.Format(api.GetTranslation("flowlauncher_plugin_everything_installing_select"), Environment.NewLine), api.GetTranslation("flowlauncher_plugin_everything_installing_title"), - System.Windows.Forms.MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes) + MessageBoxButton.YesNo) == MessageBoxResult.Yes) { var dlg = new System.Windows.Forms.OpenFileDialog { @@ -50,7 +51,7 @@ public static class EverythingDownloadHelper installedLocation = "C:\\Program Files\\Everything\\Everything.exe"; - FilesFolders.OpenPath(installedLocation); + FilesFolders.OpenPath(installedLocation, (string str) => api.ShowMsgBox(str)); return installedLocation; diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs index 2bb9a73c2..6c9155539 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchManager.cs @@ -64,7 +64,11 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything if (token.IsCancellationRequested) yield break; - var option = new EverythingSearchOption(search, Settings.SortOption, IsFullPathSearch: Settings.EverythingSearchFullPath); + var option = new EverythingSearchOption(search, + Settings.SortOption, + MaxCount: Settings.MaxResult, + IsFullPathSearch: Settings.EverythingSearchFullPath, + IsRunCounterEnabled: Settings.EverythingEnableRunCount); await foreach (var result in EverythingApi.SearchAsync(option, token)) yield return result; @@ -96,7 +100,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything Settings.SortOption, IsContentSearch: true, ContentSearchKeyword: contentSearch, - IsFullPathSearch: Settings.EverythingSearchFullPath); + MaxCount: Settings.MaxResult, + IsFullPathSearch: Settings.EverythingSearchFullPath, + IsRunCounterEnabled: Settings.EverythingEnableRunCount); await foreach (var result in EverythingApi.SearchAsync(option, token)) { @@ -115,7 +121,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything Settings.SortOption, ParentPath: path, IsRecursive: recursive, - IsFullPathSearch: Settings.EverythingSearchFullPath); + MaxCount: Settings.MaxResult, + IsFullPathSearch: Settings.EverythingSearchFullPath, + IsRunCounterEnabled: Settings.EverythingEnableRunCount); await foreach (var result in EverythingApi.SearchAsync(option, token)) yield return result; diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchOption.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchOption.cs index 3d930becf..92b8e9623 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchOption.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/Everything/EverythingSearchOption.cs @@ -11,6 +11,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything bool IsRecursive = true, int Offset = 0, int MaxCount = 100, - bool IsFullPathSearch = true + bool IsFullPathSearch = true, + bool IsRunCounterEnabled = true ); } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs index a87f766a1..1add84765 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/ResultManager.cs @@ -5,14 +5,18 @@ using System; using System.IO; using System.Linq; using System.Threading.Tasks; -using System.Windows; using Flow.Launcher.Plugin.Explorer.Search.Everything; using System.Windows.Input; +using Path = System.IO.Path; +using System.Windows.Controls; +using Flow.Launcher.Plugin.Explorer.Views; +using Peter; namespace Flow.Launcher.Plugin.Explorer.Search { public static class ResultManager { + private static readonly string[] SizeUnits = { "B", "KB", "MB", "GB", "TB" }; private static PluginInitContext Context; private static Settings Settings { get; set; } @@ -66,6 +70,27 @@ namespace Flow.Launcher.Plugin.Explorer.Search }; } + internal static void ShowNativeContextMenu(string path, ResultType type) + { + var screenWithMouseCursor = System.Windows.Forms.Screen.FromPoint(System.Windows.Forms.Cursor.Position); + var xOfScreenCenter = screenWithMouseCursor.WorkingArea.Left + screenWithMouseCursor.WorkingArea.Width / 2; + var yOfScreenCenter = screenWithMouseCursor.WorkingArea.Top + screenWithMouseCursor.WorkingArea.Height / 2; + var showPosition = new System.Drawing.Point(xOfScreenCenter, yOfScreenCenter); + + switch (type) + { + case ResultType.File: + var fileInfo = new FileInfo[] { new(path) }; + new ShellContextMenu().ShowContextMenu(fileInfo, showPosition); + break; + + case ResultType.Folder: + var folderInfo = new System.IO.DirectoryInfo[] { new(path) }; + new ShellContextMenu().ShowContextMenu(folderInfo, showPosition); + break; + } + } + internal static Result CreateFolderResult(string title, string subtitle, string path, Query query, int score = 0, bool windowsIndexed = false) { return new Result @@ -76,8 +101,17 @@ namespace Flow.Launcher.Plugin.Explorer.Search AutoCompleteText = GetAutoCompleteText(title, query, path, ResultType.Folder), TitleHighlightData = StringMatcher.FuzzySearch(query.Search, title).MatchData, CopyText = path, + Preview = new Result.PreviewInfo + { + FilePath = path, + }, Action = c => { + if (c.SpecialKeyState.ToModifierKeys() == ModifierKeys.Alt) + { + ShowNativeContextMenu(path, ResultType.Folder); + return false; + } // open folder if (c.SpecialKeyState.ToModifierKeys() == (ModifierKeys.Control | ModifierKeys.Shift)) { @@ -88,7 +122,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search } catch (Exception ex) { - MessageBox.Show(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); + Context.API.ShowMsgBox(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); return false; } } @@ -102,7 +136,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search } catch (Exception ex) { - MessageBox.Show(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); + Context.API.ShowMsgBox(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); return false; } } @@ -117,7 +151,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search } catch (Exception ex) { - MessageBox.Show(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); + Context.API.ShowMsgBox(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); return false; } } @@ -161,6 +195,10 @@ namespace Flow.Launcher.Plugin.Explorer.Search Score = 500, ProgressBar = progressValue, ProgressBarColor = progressBarColor, + Preview = new Result.PreviewInfo + { + FilePath = path, + }, Action = _ => { OpenFolder(path); @@ -172,36 +210,28 @@ namespace Flow.Launcher.Plugin.Explorer.Search }; } - private static string ToReadableSize(long pDrvSize, int pi) + internal static string ToReadableSize(long sizeOnDrive, int pi) { - int mok = 0; - double drvSize = pDrvSize; - string uom = "Byte"; // Unit Of Measurement + var unitIndex = 0; + double readableSize = sizeOnDrive; - while (drvSize > 1024.0) + while (readableSize > 1024.0 && unitIndex < SizeUnits.Length - 1) { - drvSize /= 1024.0; - mok++; + readableSize /= 1024.0; + unitIndex++; } - if (mok == 1) - uom = "KB"; - else if (mok == 2) - uom = " MB"; - else if (mok == 3) - uom = " GB"; - else if (mok == 4) - uom = " TB"; + var unit = SizeUnits[unitIndex] ?? ""; - var returnStr = $"{Convert.ToInt32(drvSize)}{uom}"; - if (mok != 0) + var returnStr = $"{Convert.ToInt32(readableSize)} {unit}"; + if (unitIndex != 0) { returnStr = pi switch { - 1 => $"{drvSize:F1}{uom}", - 2 => $"{drvSize:F2}{uom}", - 3 => $"{drvSize:F3}{uom}", - _ => $"{Convert.ToInt32(drvSize)}{uom}" + 1 => $"{readableSize:F1} {unit}", + 2 => $"{readableSize:F2} {unit}", + 3 => $"{readableSize:F3} {unit}", + _ => $"{Convert.ToInt32(readableSize)} {unit}" }; } @@ -222,8 +252,13 @@ namespace Flow.Launcher.Plugin.Explorer.Search IcoPath = folderPath, Score = 500, CopyText = folderPath, - Action = _ => + Action = c => { + if (c.SpecialKeyState.ToModifierKeys() == ModifierKeys.Alt) + { + ShowNativeContextMenu(folderPath, ResultType.Folder); + return false; + } OpenFolder(folderPath); return true; }, @@ -233,24 +268,35 @@ namespace Flow.Launcher.Plugin.Explorer.Search internal static Result CreateFileResult(string filePath, Query query, int score = 0, bool windowsIndexed = false) { - Result.PreviewInfo preview = IsMedia(Path.GetExtension(filePath)) - ? new Result.PreviewInfo { IsMedia = true, PreviewImagePath = filePath, } - : Result.PreviewInfo.Default; - + bool isMedia = IsMedia(Path.GetExtension(filePath)); var title = Path.GetFileName(filePath); + + /* Preview Detail */ + var result = new Result { Title = title, SubTitle = Path.GetDirectoryName(filePath), IcoPath = filePath, - Preview = preview, + Preview = new Result.PreviewInfo + { + IsMedia = isMedia, + PreviewImagePath = isMedia ? filePath : null, + FilePath = filePath, + }, AutoCompleteText = GetAutoCompleteText(title, query, filePath, ResultType.File), TitleHighlightData = StringMatcher.FuzzySearch(query.Search, title).MatchData, Score = score, CopyText = filePath, + PreviewPanel = new Lazy(() => new PreviewPanel(Settings, filePath)), Action = c => { + if (c.SpecialKeyState.ToModifierKeys() == ModifierKeys.Alt) + { + ShowNativeContextMenu(filePath, ResultType.File); + return false; + } try { if (c.SpecialKeyState.ToModifierKeys() == (ModifierKeys.Control | ModifierKeys.Shift)) @@ -268,7 +314,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search } catch (Exception ex) { - MessageBox.Show(ex.Message, Context.API.GetTranslation("plugin_explorer_openfile_error")); + Context.API.ShowMsgBox(ex.Message, Context.API.GetTranslation("plugin_explorer_openfile_error")); } return true; @@ -290,7 +336,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search private static void OpenFile(string filePath, string workingDir = "", bool asAdmin = false) { IncrementEverythingRunCounterIfNeeded(filePath); - FilesFolders.OpenFile(filePath, workingDir, asAdmin); + FilesFolders.OpenFile(filePath, workingDir, asAdmin, (string str) => Context.API.ShowMsgBox(str)); } private static void OpenFolder(string folderPath, string fileNameOrFilePath = null) @@ -301,7 +347,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search private static void IncrementEverythingRunCounterIfNeeded(string fileOrFolder) { - if (Settings.EverythingEnabled) + if (Settings.EverythingEnabled && Settings.EverythingEnableRunCount) _ = Task.Run(() => EverythingApi.IncrementRunCounterAsync(fileOrFolder)); } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs index 5fe01d3a5..8fd167476 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/SearchManager.cs @@ -8,6 +8,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Flow.Launcher.Plugin.Explorer.Exceptions; +using Path = System.IO.Path; namespace Flow.Launcher.Plugin.Explorer.Search { @@ -68,7 +69,9 @@ namespace Flow.Launcher.Plugin.Explorer.Search IAsyncEnumerable searchResults; - bool isPathSearch = query.Search.IsLocationPathString() || IsEnvironmentVariableSearch(query.Search); + bool isPathSearch = query.Search.IsLocationPathString() + || EnvironmentVariables.IsEnvironmentVariableSearch(query.Search) + || EnvironmentVariables.HasEnvironmentVar(query.Search); string engineName; @@ -107,7 +110,11 @@ namespace Flow.Launcher.Plugin.Explorer.Search try { await foreach (var search in searchResults.WithCancellation(token).ConfigureAwait(false)) - results.Add(ResultManager.CreateResult(query, search)); + if (search.Type == ResultType.File && IsExcludedFile(search)) { + continue; + } else { + results.Add(ResultManager.CreateResult(query, search)); + } } catch (OperationCanceledException) { @@ -178,16 +185,16 @@ namespace Flow.Launcher.Plugin.Explorer.Search // Query is a location path with a full environment variable, eg. %appdata%\somefolder\, c:\users\%USERNAME%\downloads var needToExpand = EnvironmentVariables.HasEnvironmentVar(querySearch); - var locationPath = needToExpand ? Environment.ExpandEnvironmentVariables(querySearch) : querySearch; + var path = needToExpand ? Environment.ExpandEnvironmentVariables(querySearch) : querySearch; // Check that actual location exists, otherwise directory search will throw directory not found exception - if (!FilesFolders.ReturnPreviousDirectoryIfIncompleteString(locationPath).LocationExists()) + if (!FilesFolders.ReturnPreviousDirectoryIfIncompleteString(path).LocationExists()) return results.ToList(); var useIndexSearch = Settings.IndexSearchEngine is Settings.IndexSearchEngineOption.WindowsIndex - && UseWindowsIndexForDirectorySearch(locationPath); + && UseWindowsIndexForDirectorySearch(path); - var retrievedDirectoryPath = FilesFolders.ReturnPreviousDirectoryIfIncompleteString(locationPath); + var retrievedDirectoryPath = FilesFolders.ReturnPreviousDirectoryIfIncompleteString(path); results.Add(retrievedDirectoryPath.EndsWith(":\\") ? ResultManager.CreateDriveSpaceDisplayResult(retrievedDirectoryPath, query.ActionKeyword, useIndexSearch) @@ -198,21 +205,21 @@ namespace Flow.Launcher.Plugin.Explorer.Search IAsyncEnumerable directoryResult; - var recursiveIndicatorIndex = query.Search.IndexOf('>'); + var recursiveIndicatorIndex = path.IndexOf('>'); if (recursiveIndicatorIndex > 0 && Settings.PathEnumerationEngine != Settings.PathEnumerationEngineOption.DirectEnumeration) { directoryResult = Settings.PathEnumerator.EnumerateAsync( - query.Search[..recursiveIndicatorIndex].Trim(), - query.Search[(recursiveIndicatorIndex + 1)..], + path[..recursiveIndicatorIndex].Trim(), + path[(recursiveIndicatorIndex + 1)..], true, token); } else { - directoryResult = DirectoryInfoSearch.TopLevelDirectorySearch(query, query.Search, token).ToAsyncEnumerable(); + directoryResult = DirectoryInfoSearch.TopLevelDirectorySearch(query, path, token).ToAsyncEnumerable(); } if (token.IsCancellationRequested) @@ -246,11 +253,12 @@ namespace Flow.Launcher.Plugin.Explorer.Search && WindowsIndex.WindowsIndex.PathIsIndexed(pathToDirectory); } - internal static bool IsEnvironmentVariableSearch(string search) + private bool IsExcludedFile(SearchResult result) { - return search.StartsWith("%") - && search != "%%" - && !search.Contains('\\'); + string[] excludedFileTypes = Settings.ExcludedFileTypes.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries); + string fileExtension = Path.GetExtension(result.FullPath).TrimStart('.'); + + return excludedFileTypes.Contains(fileExtension, StringComparer.OrdinalIgnoreCase); } } } diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/QueryConstructor.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/QueryConstructor.cs index a35bad274..9e3707fbe 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/QueryConstructor.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Search/WindowsIndex/QueryConstructor.cs @@ -1,10 +1,14 @@ using System; +using System.Text.RegularExpressions; using Microsoft.Search.Interop; namespace Flow.Launcher.Plugin.Explorer.Search.WindowsIndex { public class QueryConstructor { + private static Regex _specialCharacterMatcher = new(@"[\@\@\#\#\&\&*_;,\%\|\!\(\)\{\}\[\]\^\~\?\\""\/\:\=\-]+", RegexOptions.Compiled); + private static Regex _multiWhiteSpacesMatcher = new(@"\s+", RegexOptions.Compiled); + private Settings settings { get; } private const string SystemIndex = "SystemIndex"; @@ -76,8 +80,39 @@ namespace Flow.Launcher.Plugin.Explorer.Search.WindowsIndex if (userSearchString.IsWhiteSpace()) userSearchString = "*"; + // Remove any special characters that might cause issues with the query + var replacedSearchString = ReplaceSpecialCharacterWithTwoSideWhiteSpace(userSearchString); + // Generate SQL from constructed parameters, converting the userSearchString from AQS->WHERE clause - return $"{CreateBaseQuery().GenerateSQLFromUserQuery(userSearchString.ToString())} AND {RestrictionsForAllFilesAndFoldersSearch} ORDER BY {FileName}"; + return $"{CreateBaseQuery().GenerateSQLFromUserQuery(replacedSearchString)} AND {RestrictionsForAllFilesAndFoldersSearch} ORDER BY {FileName}"; + } + + /// + /// If one special character have white space on one side, replace it with one white space. + /// So command will not have "[special character]+*" which will cause OLEDB exception. + /// + private static string ReplaceSpecialCharacterWithTwoSideWhiteSpace(ReadOnlySpan input) + { + const string whiteSpace = " "; + + var inputString = input.ToString(); + + // Use regex to match special characters with whitespace on one side + // and replace them with a single space + var result = _specialCharacterMatcher.Replace(inputString, match => + { + // Check if the match has whitespace on one side + bool hasLeadingWhitespace = match.Index > 0 && char.IsWhiteSpace(inputString[match.Index - 1]); + bool hasTrailingWhitespace = match.Index + match.Length < inputString.Length && char.IsWhiteSpace(inputString[match.Index + match.Length]); + if (hasLeadingWhitespace || hasTrailingWhitespace) + { + return whiteSpace; + } + return match.Value; + }); + + // Remove any extra spaces that might have been introduced + return _multiWhiteSpacesMatcher.Replace(result, whiteSpace).Trim(); } /// diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs index 137ba2f19..3d30bcf29 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Settings.cs @@ -25,10 +25,16 @@ namespace Flow.Launcher.Plugin.Explorer public string ShellPath { get; set; } = "cmd"; + public string ExcludedFileTypes { get; set; } = ""; + public bool UseLocationAsWorkingDir { get; set; } = false; - public bool ShowWindowsContextMenu { get; set; } = true; + public bool ShowInlinedWindowsContextMenu { get; set; } = false; + + public string WindowsContextMenuIncludedItems { get; set; } = string.Empty; + + public string WindowsContextMenuExcludedItems { get; set; } = string.Empty; public bool DefaultOpenFolderInFileManager { get; set; } = false; @@ -55,6 +61,16 @@ namespace Flow.Launcher.Plugin.Explorer public bool WarnWindowsSearchServiceOff { get; set; } = true; + public bool ShowFileSizeInPreviewPanel { get; set; } = true; + + public bool ShowCreatedDateInPreviewPanel { get; set; } = true; + + public bool ShowModifiedDateInPreviewPanel { get; set; } = true; + + public string PreviewPanelDateFormat { get; set; } = "yyyy-MM-dd"; + + public string PreviewPanelTimeFormat { get; set; } = "HH:mm"; + private EverythingSearchManager _everythingManagerInstance; private WindowsIndexSearchManager _windowsIndexSearchManager; @@ -137,7 +153,8 @@ namespace Flow.Launcher.Plugin.Explorer ContentSearchEngine == ContentIndexSearchEngineOption.Everything; public bool EverythingSearchFullPath { get; set; } = false; - + public bool EverythingEnableRunCount { get; set; } = true; + #endregion internal enum ActionKeyword diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs b/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs index 02199fb5a..d2b85e687 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/ViewModels/SettingsViewModel.cs @@ -8,12 +8,12 @@ using System; using System.Collections.Generic; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; +using System.Globalization; using System.IO; using System.Linq; using System.Windows; using System.Windows.Forms; using System.Windows.Input; -using MessageBox = System.Windows.Forms.MessageBox; namespace Flow.Launcher.Plugin.Explorer.ViewModels { @@ -101,7 +101,141 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels #endregion + #region Native Context Menu + public bool ShowWindowsContextMenu + { + get => Settings.ShowInlinedWindowsContextMenu; + set + { + Settings.ShowInlinedWindowsContextMenu = value; + OnPropertyChanged(); + } + } + + public string WindowsContextMenuIncludedItems + { + get => Settings.WindowsContextMenuIncludedItems; + set + { + Settings.WindowsContextMenuIncludedItems = value; + OnPropertyChanged(); + } + } + + public string WindowsContextMenuExcludedItems + { + get => Settings.WindowsContextMenuExcludedItems; + set + { + Settings.WindowsContextMenuExcludedItems = value; + OnPropertyChanged(); + } + } + + #endregion + + #region Preview Panel + + public bool ShowFileSizeInPreviewPanel + { + get => Settings.ShowFileSizeInPreviewPanel; + set + { + Settings.ShowFileSizeInPreviewPanel = value; + OnPropertyChanged(); + } + } + + public bool ShowCreatedDateInPreviewPanel + { + get => Settings.ShowCreatedDateInPreviewPanel; + set + { + Settings.ShowCreatedDateInPreviewPanel = value; + OnPropertyChanged(); + OnPropertyChanged(nameof(ShowPreviewPanelDateTimeChoices)); + OnPropertyChanged(nameof(PreviewPanelDateTimeChoicesVisibility)); + } + } + + public bool ShowModifiedDateInPreviewPanel + { + get => Settings.ShowModifiedDateInPreviewPanel; + set + { + Settings.ShowModifiedDateInPreviewPanel = value; + OnPropertyChanged(); + OnPropertyChanged(nameof(ShowPreviewPanelDateTimeChoices)); + OnPropertyChanged(nameof(PreviewPanelDateTimeChoicesVisibility)); + } + } + + public string PreviewPanelDateFormat + { + get => Settings.PreviewPanelDateFormat; + set + { + Settings.PreviewPanelDateFormat = value; + OnPropertyChanged(); + OnPropertyChanged(nameof(PreviewPanelDateFormatDemo)); + } + } + + public string PreviewPanelTimeFormat + { + get => Settings.PreviewPanelTimeFormat; + set + { + Settings.PreviewPanelTimeFormat = value; + OnPropertyChanged(); + OnPropertyChanged(nameof(PreviewPanelTimeFormatDemo)); + } + } + + public string PreviewPanelDateFormatDemo => DateTime.Now.ToString(PreviewPanelDateFormat, CultureInfo.CurrentCulture); + public string PreviewPanelTimeFormatDemo => DateTime.Now.ToString(PreviewPanelTimeFormat, CultureInfo.CurrentCulture); + + public bool ShowPreviewPanelDateTimeChoices => ShowCreatedDateInPreviewPanel || ShowModifiedDateInPreviewPanel; + + public Visibility PreviewPanelDateTimeChoicesVisibility => ShowCreatedDateInPreviewPanel || ShowModifiedDateInPreviewPanel ? Visibility.Visible : Visibility.Collapsed; + + + public List TimeFormatList { get; } = new() + { + "h:mm", + "hh:mm", + "H:mm", + "HH:mm", + "tt h:mm", + "tt hh:mm", + "h:mm tt", + "hh:mm tt", + "hh:mm:ss tt", + "HH:mm:ss" + }; + + + public List DateFormatList { get; } = new() + { + "dd/MM/yyyy", + "dd/MM/yyyy ddd", + "dd/MM/yyyy, dddd", + "dd-MM-yyyy", + "dd-MM-yyyy ddd", + "dd-MM-yyyy, dddd", + "dd.MM.yyyy", + "dd.MM.yyyy ddd", + "dd.MM.yyyy, dddd", + "MM/dd/yyyy", + "MM/dd/yyyy ddd", + "MM/dd/yyyy, dddd", + "yyyy-MM-dd", + "yyyy-MM-dd ddd", + "yyyy-MM-dd, dddd", + }; + + #endregion #region ActionKeyword @@ -223,7 +357,7 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels private void ShowUnselectedMessage() { var warning = Context.API.GetTranslation("plugin_explorer_make_selection_warning"); - MessageBox.Show(warning); + Context.API.ShowMsgBox(warning); } @@ -378,6 +512,31 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels } } + public string ExcludedFileTypes + { + get => Settings.ExcludedFileTypes; + set + { + // remove spaces and dots from the string before saving + string sanitized = string.IsNullOrEmpty(value) ? "" : value.Replace(" ", "").Replace(".", ""); + Settings.ExcludedFileTypes = sanitized; + OnPropertyChanged(); + } + } + + public int MaxResultLowerLimit => 100; + public int MaxResultUpperLimit => 100000; + + public int MaxResult + { + get => Settings.MaxResult; + set + { + Settings.MaxResult = Math.Clamp(value, MaxResultLowerLimit, MaxResultUpperLimit); + OnPropertyChanged(); + } + } + #region Everything FastSortWarning diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs index 9e86ce4b4..34a5b2760 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ActionKeywordSetting.xaml.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; using System.Windows; @@ -62,10 +62,10 @@ namespace Flow.Launcher.Plugin.Explorer.Views switch (CurrentActionKeyword.KeywordProperty, KeywordEnabled) { case (Settings.ActionKeyword.FileContentSearchActionKeyword, true): - MessageBox.Show(api.GetTranslation("plugin_explorer_globalActionKeywordInvalid")); + api.ShowMsgBox(api.GetTranslation("plugin_explorer_globalActionKeywordInvalid")); return; case (Settings.ActionKeyword.QuickAccessActionKeyword, true): - MessageBox.Show(api.GetTranslation("plugin_explorer_quickaccess_globalActionKeywordInvalid")); + api.ShowMsgBox(api.GetTranslation("plugin_explorer_quickaccess_globalActionKeywordInvalid")); return; } @@ -77,7 +77,7 @@ namespace Flow.Launcher.Plugin.Explorer.Views } // The keyword is not valid, so show message - MessageBox.Show(api.GetTranslation("newActionKeywordsHasBeenAssigned")); + api.ShowMsgBox(api.GetTranslation("newActionKeywordsHasBeenAssigned")); } private void BtnCancel_OnClick(object sender, RoutedEventArgs e) diff --git a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml index b0708b793..ecd6d1fca 100644 --- a/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml +++ b/Plugins/Flow.Launcher.Plugin.Explorer/Views/ExplorerSettings.xaml @@ -22,7 +22,7 @@ @@ -105,13 +105,13 @@ - + @@ -127,8 +127,9 @@ + @@ -144,8 +145,26 @@ + + + + + + + @@ -160,20 +179,20 @@ Width="Auto" Header="{DynamicResource plugin_explorer_generalsetting_header}" Style="{DynamicResource ExplorerTabItem}"> - + - + @@ -188,7 +207,7 @@ public static class ShellLocalization { - internal const uint DONTRESOLVEDLLREFERENCES = 0x00000001; - internal const uint LOADLIBRARYASDATAFILE = 0x00000002; - - [DllImport("shell32.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode)] - internal static extern int SHGetLocalizedName(string pszPath, StringBuilder pszResModule, ref int cch, out int pidsRes); - - [DllImport("user32.dll", EntryPoint = "LoadStringW", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Unicode)] - internal static extern int LoadString(IntPtr hModule, int resourceID, StringBuilder resourceValue, int len); - - [DllImport("kernel32.dll", CharSet = CharSet.Unicode, ExactSpelling = true, EntryPoint = "LoadLibraryExW")] - internal static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hFile, uint dwFlags); - - [DllImport("kernel32.dll", ExactSpelling = true)] - internal static extern int FreeLibrary(IntPtr hModule); - - [DllImport("kernel32.dll", EntryPoint = "ExpandEnvironmentStringsW", CharSet = CharSet.Unicode, ExactSpelling = true)] - internal static extern uint ExpandEnvironmentStrings(string lpSrc, StringBuilder lpDst, int nSize); - /// /// Returns the localized name of a shell item. /// /// Path to the shell item (e. g. shortcut 'File Explorer.lnk'). /// The localized name as string or . - public static string GetLocalizedName(string path) + public static unsafe string GetLocalizedName(string path) { - StringBuilder resourcePath = new StringBuilder(1024); - StringBuilder localizedName = new StringBuilder(1024); - int len, id; - len = resourcePath.Capacity; + const int capacity = 1024; + Span buffer = new char[capacity]; // If there is no resource to localize a file name the method returns a non zero value. - if (SHGetLocalizedName(path, resourcePath, ref len, out id) == 0) + fixed (char* bufferPtr = buffer) { - _ = ExpandEnvironmentStrings(resourcePath.ToString(), resourcePath, resourcePath.Capacity); - IntPtr hMod = LoadLibraryEx(resourcePath.ToString(), IntPtr.Zero, DONTRESOLVEDLLREFERENCES | LOADLIBRARYASDATAFILE); - if (hMod != IntPtr.Zero) + var result = PInvoke.SHGetLocalizedName(path, bufferPtr, capacity, out var id); + if (result != HRESULT.S_OK) { - if (LoadString(hMod, id, localizedName, localizedName.Capacity) != 0) - { - string lString = localizedName.ToString(); - _ = FreeLibrary(hMod); - return lString; - } + return string.Empty; + } - _ = FreeLibrary(hMod); + var resourcePathStr = MemoryMarshal.CreateReadOnlySpanFromNullTerminated(bufferPtr).ToString(); + _ = PInvoke.ExpandEnvironmentStrings(resourcePathStr, bufferPtr, capacity); + using var handle = PInvoke.LoadLibraryEx(resourcePathStr, + LOAD_LIBRARY_FLAGS.DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_FLAGS.LOAD_LIBRARY_AS_DATAFILE); + if (handle.IsInvalid) + { + return string.Empty; + } + + // not sure about the behavior of Pinvoke.LoadString, so we clear the buffer before using it (so it must be a null-terminated string) + buffer.Clear(); + + if (PInvoke.LoadString(handle, (uint)id, bufferPtr, capacity) != 0) + { + var lString = MemoryMarshal.CreateReadOnlySpanFromNullTerminated(bufferPtr).ToString(); + return lString; } } diff --git a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs index f3d971991..a64a708ef 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Programs/Win32.cs @@ -183,6 +183,7 @@ namespace Flow.Launcher.Plugin.Program.Programs Score = matchResult.Score, TitleHighlightData = matchResult.MatchData, ContextData = this, + TitleToolTip = $"{title}\n{ExecutablePath}", Action = c => { // Ctrl + Enter to open containing folder diff --git a/Plugins/Flow.Launcher.Plugin.Program/Settings.cs b/Plugins/Flow.Launcher.Plugin.Program/Settings.cs index ca203f803..fb24f64d7 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Settings.cs +++ b/Plugins/Flow.Launcher.Plugin.Program/Settings.cs @@ -102,7 +102,7 @@ namespace Flow.Launcher.Plugin.Program // CustomSuffixes no longer contains custom suffixes // users has tweaked the settings // or this function has been executed once - if (UseCustomSuffixes == true || ProgramSuffixes == null) + if (UseCustomSuffixes == true || ProgramSuffixes == null) return; var suffixes = ProgramSuffixes.ToList(); foreach(var item in BuiltinSuffixesStatus) @@ -117,6 +117,7 @@ namespace Flow.Launcher.Plugin.Program public bool EnableStartMenuSource { get; set; } = true; public bool EnableDescription { get; set; } = false; public bool HideAppsPath { get; set; } = true; + public bool HideUninstallers { get; set; } = false; public bool EnableRegistrySource { get; set; } = true; public bool EnablePathSource { get; set; } = false; public bool EnableUWP { get; set; } = true; diff --git a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml index fa97de4f2..e5ca6967e 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml +++ b/Plugins/Flow.Launcher.Plugin.Program/Views/ProgramSetting.xaml @@ -85,6 +85,11 @@ Content="{DynamicResource flowlauncher_plugin_program_enable_hidelnkpath}" IsChecked="{Binding HideAppsPath}" ToolTip="{DynamicResource flowlauncher_plugin_program_enable_hidelnkpath_tooltip}" /> + ProgramSettingDisplayList { get; set; } public bool EnableDescription @@ -47,6 +47,16 @@ namespace Flow.Launcher.Plugin.Program.Views } } + public bool HideUninstallers + { + get => _settings.HideUninstallers; + set + { + Main.ResetCache(); + _settings.HideUninstallers = value; + } + } + public bool EnableRegistrySource { get => _settings.EnableRegistrySource; @@ -168,7 +178,7 @@ namespace Flow.Launcher.Plugin.Program.Views if (selectedProgramSource == null) { string msg = context.API.GetTranslation("flowlauncher_plugin_program_pls_select_program_source"); - MessageBox.Show(msg); + context.API.ShowMsgBox(msg); } else { @@ -273,7 +283,7 @@ namespace Flow.Launcher.Plugin.Program.Views if (selectedItems.Count == 0) { string msg = context.API.GetTranslation("flowlauncher_plugin_program_pls_select_program_source"); - MessageBox.Show(msg); + context.API.ShowMsgBox(msg); return; } @@ -282,7 +292,7 @@ namespace Flow.Launcher.Plugin.Program.Views var msg = string.Format( context.API.GetTranslation("flowlauncher_plugin_program_delete_program_source")); - if (MessageBox.Show(msg, string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.No) + if (context.API.ShowMsgBox(msg, string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.No) { return; } diff --git a/Plugins/Flow.Launcher.Plugin.Program/plugin.json b/Plugins/Flow.Launcher.Plugin.Program/plugin.json index 7f6b5f938..6c718ce45 100644 --- a/Plugins/Flow.Launcher.Plugin.Program/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Program/plugin.json @@ -4,7 +4,7 @@ "Name": "Program", "Description": "Search programs in Flow.Launcher", "Author": "qianlifeng", - "Version": "3.2.0", + "Version": "3.3.3", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Program.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj b/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj index dfbf54c3a..8f443214b 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj +++ b/Plugins/Flow.Launcher.Plugin.Shell/Flow.Launcher.Plugin.Shell.csproj @@ -12,8 +12,9 @@ true false false + en - + true portable @@ -24,7 +25,7 @@ 4 false - + pdbonly true @@ -39,13 +40,13 @@ - + PreserveNewest - + MSBuild:Compile @@ -56,9 +57,9 @@ PreserveNewest - + - - \ No newline at end of file + + diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ar.xaml index b7d02c558..0e4a783ff 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ar.xaml @@ -1,17 +1,17 @@  - Replace Win+R - Close Command Prompt after pressing any key - Press any key to close this window... - Do not close Command Prompt after command execution - Always run as administrator - Run as different user + استبدال Win+R + إغلاق موجه الأوامر بعد الضغط على أي مفتاح + اضغط أي مفتاح لإغلاق هذه النافذة... + عدم إغلاق موجه الأوامر بعد تنفيذ الأمر + التشغيل دائمًا كمسؤول + التشغيل كمستخدم مختلف Shell - Allows to execute system commands from Flow Launcher - this command has been executed {0} times - execute command through command shell - Run As Administrator - Copy the command - Only show number of most used commands: + يسمح بتنفيذ أوامر النظام من Flow Launcher + تم تنفيذ هذا الأمر {0} مرات + تنفيذ الأمر من خلال موجه الأوامر + التشغيل كمسؤول + نسخ الأمر + إظهار عدد أوامر الأكثر استخدامًا فقط: diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/de.xaml index bd3043d82..d45978a1f 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/de.xaml @@ -1,17 +1,17 @@  - Ersetzt Win+R - Close Command Prompt after pressing any key - Press any key to close this window... - Schließe die Kommandozeilte nicht nachdem der Befehl ausgeführt wurde + Win+R ersetzen + Eingabeaufforderung nach Drücken einer beliebigen Taste schließen + Drücken Sie eine beliebige Taste, um dieses Fenster zu schließen ... + Eingabeaufforderung nach Befehlsausführung nicht schließen Immer als Administrator ausführen Als anderer Benutzer ausführen - Kommandozeile - Allows to execute system commands from Flow Launcher - Dieser Befehl wurde {0} mal ausgeführt - Führe Befehle mittels Kommandozeile aus + Shell + Ermöglicht das Ausführen von Systembefehlen aus Flow Launcher + Dieser Befehl ist {0} mal ausgeführt worden + Befehl über Befehls-Shell ausführen Als Administrator ausführen - Copy the command - Only show number of most used commands: + Kopieren des Befehls + Nur Anzahl der am meisten verwendeten Befehle zeigen: diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml index b43d75690..a3ee35ef8 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/es.xaml @@ -2,7 +2,7 @@ Reemplazar Win+R - Cerrar Símbolo del sistema después de pulsar cualquier tecla + Cerrar símbolo del sistema después de pulsar cualquier tecla Pulsar cualquier tecla para cerrar esta ventana... No cerrar el símbolo del sistema después de la ejecución del comando Ejecutar siempre como administrador @@ -13,5 +13,5 @@ ejecutar comando en la terminal Ejecutar como administrador Copiar el comando - Mostrar sólo el número de comandos más usados: + Mostrar solo el siguiente número de comandos más usados: diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/he.xaml new file mode 100644 index 000000000..b7d02c558 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/he.xaml @@ -0,0 +1,17 @@ + + + + Replace Win+R + Close Command Prompt after pressing any key + Press any key to close this window... + Do not close Command Prompt after command execution + Always run as administrator + Run as different user + Shell + Allows to execute system commands from Flow Launcher + this command has been executed {0} times + execute command through command shell + Run As Administrator + Copy the command + Only show number of most used commands: + diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/it.xaml index ee473d80e..4e61940d1 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/it.xaml @@ -2,8 +2,8 @@ Sostituisci Win+R - Close Command Prompt after pressing any key - Press any key to close this window... + Chiudi il Prompt dei Comandi dopo aver premuto un tasto + Premi un tasto per chiudere questa finestra... Non chiudere il prompt dei comandi dopo l'esecuzione dei comandi Esegui sempre come amministratore Esegui come utente differente diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/nb.xaml index b7d02c558..7a118c315 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/nb.xaml @@ -1,17 +1,17 @@  - Replace Win+R - Close Command Prompt after pressing any key - Press any key to close this window... - Do not close Command Prompt after command execution - Always run as administrator - Run as different user - Shell - Allows to execute system commands from Flow Launcher - this command has been executed {0} times - execute command through command shell - Run As Administrator - Copy the command - Only show number of most used commands: + Erstatt Win+R + Lukk ledetekst etter å ha trykket på en hvilken som helst tast + Trykk på en tast for å lukke dette vinduet... + Ikke lukk ledeteksten etter utførelse av kommandoen + Kjør alltid som administrator + Kjør som annen bruker + Skall + Lar deg utføre systemkommandoer fra Flow Launcher + denne kommandoen har blitt utført {0} ganger + utfør kommando via kommandoskall + Kjør som administrator + Kopier kommandoen + Vis bare antall mest brukte kommandoer: diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pl.xaml index 592ff17b7..1b088c394 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/pl.xaml @@ -2,16 +2,16 @@ Zastąp Win+R - Close Command Prompt after pressing any key - Press any key to close this window... + Zamknij wiersz poleceń po naciśnięciu dowolnego przycisku + Naciśnij dowolny przycisk, aby zamknąć to okno... Nie zamykaj wiersza poleceń po wykonaniu polecenia - Always run as administrator - Run as different user + Zawsze uruchamiaj jako administrator + Uruchom jako inny użytkownik Wiersz poleceń - Allows to execute system commands from Flow Launcher + Umożliwia wykonywanie poleceń systemowych z poziomu Flow Launcher to polecenie zostało wykonane {0} razy wykonaj to polecenie w wierszu poleceń Uruchom jako administrator - Copy the command - Only show number of most used commands: + Skopiuj komendę + Pokaż tylko liczbę najczęściej używanych poleceń: diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ru.xaml index b7d02c558..20fc3fb5d 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/ru.xaml @@ -1,17 +1,17 @@  - Replace Win+R + Заменить Win+R Close Command Prompt after pressing any key Press any key to close this window... - Do not close Command Prompt after command execution - Always run as administrator - Run as different user - Shell + Не закрывать командную строку после выполнения команды + Всегда запускать с правами администратора + Запустить от имени другого пользователя + Оболочка Allows to execute system commands from Flow Launcher - this command has been executed {0} times + эта команда была выполнена {0} раз execute command through command shell Run As Administrator - Copy the command - Only show number of most used commands: + Скопировать команду + Показывать только самые используемые команды: diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml new file mode 100644 index 000000000..1a0d55e66 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/vi.xaml @@ -0,0 +1,17 @@ + + + + Thay thế Win + R + Đóng Command Prompt sau khi nhấn phím bất kỳ + Nhấn phím bất kỳ để đóng cửa sổ này... + Không đóng dấu nhắc lệnh sau khi thực hiện lệnh + Luôn chạy với tư cách quản trị viên + Xóa lựa chọn đã chọn + Vỏ + Allows to execute system commands from Flow Launcher + lệnh này đã được thực thi {0} lần + thực thi lệnh thông qua lệnh shell + Chạy với quyền quản trị + Sao chép lệnh + Chỉ hiển thị số lượng lệnh được sử dụng nhiều nhất: + diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml index ace554327..2db287e39 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Shell/Languages/zh-cn.xaml @@ -2,7 +2,7 @@ 替换 Win+R - Close Command Prompt after pressing any key + 按下任意键后关闭命令提示符 按下任意键以关闭此窗口... 执行后不关闭命令窗口 始终以管理员身份运行 diff --git a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs index f3c34d41d..921c6bc21 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Shell/Main.cs @@ -275,6 +275,8 @@ namespace Flow.Launcher.Plugin.Shell info.FileName = command; } + info.UseShellExecute = true; + break; } default: diff --git a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json index 6c2b2a184..6c81e8a26 100644 --- a/Plugins/Flow.Launcher.Plugin.Shell/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Shell/plugin.json @@ -4,7 +4,7 @@ "Name": "Shell", "Description": "Provide executing commands from Flow Launcher", "Author": "qianlifeng", - "Version": "3.2.0", + "Version": "3.2.4", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Shell.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj b/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj index bba466384..266c24170 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj +++ b/Plugins/Flow.Launcher.Plugin.Sys/Flow.Launcher.Plugin.Sys.csproj @@ -12,8 +12,9 @@ true false false + en - + true portable @@ -24,7 +25,7 @@ 4 false - + pdbonly true @@ -40,7 +41,7 @@ - + MSBuild:Compile @@ -51,10 +52,17 @@ PreserveNewest - + PreserveNewest - \ No newline at end of file + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ar.xaml index 41e005894..3e2aee69a 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ar.xaml @@ -2,62 +2,62 @@ - Command - Description + أمر + وصف - Shutdown - Restart - Restart With Advanced Boot Options - Log Off/Sign Out - Lock - Sleep - Hibernate - Index Option - Empty Recycle Bin - Open Recycle Bin - Exit - Save Settings - Restart Flow Launcher" - Settings - Reload Plugin Data - Check For Update - Open Log Location - Flow Launcher Tips - Flow Launcher UserData Folder - Toggle Game Mode + إيقاف التشغيل + إعادة التشغيل + إعادة التشغيل مع خيارات التمهيد المتقدمة + تسجيل الخروج + قفل + وضع السكون + السكون + خيارات الفهرسة + تفريغ سلة المهملات + فتح سلة المهملات + خروج + حفظ الإعدادات + إعادة تشغيل Flow Launcher + الإعدادات + إعادة تحميل بيانات الإضافة + التحقق من التحديثات + فتح موقع السجل + نصائح Flow Launcher + مجلد بيانات مستخدم Flow Launcher + تبديل وضع اللعبة - Shutdown Computer - Restart Computer - Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options - Log off - Lock this computer - Close Flow Launcher - Restart Flow Launcher - Tweak Flow Launcher's settings - Put computer to sleep - Empty recycle bin - Open recycle bin - Indexing Options - Hibernate computer - Save all Flow Launcher settings - Refreshes plugin data with new content - Open Flow Launcher's log location - Check for new Flow Launcher update - Visit Flow Launcher's documentation for more help and how to use tips - Open the location where Flow Launcher's settings are stored - Toggle Game Mode + إيقاف تشغيل الكمبيوتر + إعادة تشغيل الكمبيوتر + إعادة تشغيل الكمبيوتر مع خيارات التمهيد المتقدمة للوضع الآمن ووضع التصحيح، بالإضافة إلى خيارات أخرى + تسجيل الخروج + قفل هذا الكمبيوتر + إغلاق Flow Launcher + إعادة تشغيل Flow Launcher + تعديل إعدادات Flow Launcher + وضع الكمبيوتر في السكون + تفريغ سلة المهملات + فتح سلة المهملات + خيارات الفهرسة + السكون للكمبيوتر + حفظ جميع إعدادات Flow Launcher + تحديث بيانات الإضافة بمحتوى جديد + فتح موقع سجل Flow Launcher + التحقق من وجود تحديث جديد لـ Flow Launcher + زيارة وثائق Flow Launcher للحصول على المزيد من المساعدة ونصائح الاستخدام + فتح الموقع الذي يتم تخزين إعدادات Flow Launcher فيه + تبديل وضع اللعبة - Success - All Flow Launcher settings saved - Reloaded all applicable plugin data - Are you sure you want to shut the computer down? - Are you sure you want to restart the computer? - Are you sure you want to restart the computer with Advanced Boot Options? - Are you sure you want to log off? + نجاح + تم حفظ جميع إعدادات Flow Launcher + تم إعادة تحميل جميع بيانات الإضافات المعنية + هل أنت متأكد أنك تريد إيقاف تشغيل الكمبيوتر؟ + هل أنت متأكد أنك تريد إعادة تشغيل الكمبيوتر؟ + هل أنت متأكد أنك تريد إعادة تشغيل الكمبيوتر مع خيارات التمهيد المتقدمة؟ + هل أنت متأكد أنك تريد تسجيل الخروج؟ - System Commands - Provides System related commands. e.g. shutdown, lock, settings etc. + أوامر النظام + يوفر أوامر متعلقة بالنظام، مثل إيقاف التشغيل، القفل، الإعدادات، وما إلى ذلك. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/cs.xaml index 3e053b39f..b377ad3d2 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/cs.xaml @@ -17,7 +17,7 @@ Open Recycle Bin Ukončit Save Settings - Restart Flow Launcher" + Restartovat Flow Launcher Nastavení Znovu načíst data pluginů Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/da.xaml index 8c5e4d0ff..30beff7b5 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/da.xaml @@ -17,7 +17,7 @@ Open Recycle Bin Afslut Save Settings - Restart Flow Launcher" + Restart Flow Launcher Indstillinger Reload Plugin Data Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml index 042384242..46e51573b 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/de.xaml @@ -7,57 +7,57 @@ Herunterfahren Neu starten - Neustart mit erweiterten Startoptionen - Abmelden + Neustart mit erweiterten Boot-Optionen + Ausloggen/Abmelden Sperren - Energie sparen + Schlafmodus Ruhezustand - Indizierungsoptionen + Index-Option Papierkorb leeren Papierkorb öffnen - Schließen + Beenden Einstellungen speichern Flow Launcher neu starten Einstellungen - Plugin-Daten neu laden - Auf Updates prüfen - Log-Speicherort öffnen - Flow Launcher Tipps - Flow Launcher Benutzerdaten-Ordner - Gott Modus + Plug-in-Daten neu laden + Nach Updates suchen + Log-Ort öffnen + Flow Launcher-Tipps + Flow Launcher UserData-Ordner + Spielmodus umschalten Computer herunterfahren Computer neu starten - Startet den Computer mit erweiterten Startoptionen für den abgesicherten Modus neu - Abmelden - Computer sperren + Starten Sie den Computer mit erweiterten Boot-Optionen für den sicheren und den Debugging-Modus sowie anderen Optionen neu + Ausloggen + Diesen Computer sperren Flow Launcher schließen Flow Launcher neu starten - Einstellungen des Flow Launchers anpassen + Einstellungen von Flow Launcher optimieren Computer in Schlafmodus versetzen Papierkorb leeren Papierkorb öffnen - Indizierungsoptionen + Indexierungsoptionen Computer in den Ruhezustand versetzen - Alle Flow Launcher Einstellungen speichern - Aktualisiert Plugin-Daten mit neuen Inhalten - Öffnet den Speicherort der Flow Launcher Logs - Prüft auf neue Flow Launcher Updates - Öffnet die Dokumentation von Flow Launcher für Hilfe und Tipps - Öffnet den Ort an dem Flow Laucher Einstellungen speichert - Gott Modus + Alle Flow Launcher-Einstellungen speichern + Aktualisiert Plug-in-Daten mit neuen Inhalten + Log-Ort von Flow Launcher öffnen + Nach neuem Flow Launcher-Update suchen + Besuchen Sie die Dokumentation von Flow Launcher für mehr Hilfe und Tipps zur Verwendung + Den Ort öffnen, an dem die Einstellungen von Flow Launcher gespeichert sind + Spielmodus umschalten - Erfolgreich - Alle Flow Launcher Einstellungen wurden gespeichert - Alle betroffenen Plugin-Daten wurden neu geladen - Soll der Computer wirklich heruntergefahren werden? - Soll der Computer wirklich neu gestartet werden? + Erfolg + Alle Flow Launcher-Einstellungen gespeichert + Alle anwendbaren Plug-in-Daten neu geladen + Sind Sie sicher, dass Sie den Computer herunterfahren wollen? + Sind Sie sicher, dass Sie den Computer neu starten wollen? Soll der Computer wirklich mit erweiterten Startoptionen neu gestartet werden? - Soll der aktuelle Benutzer wirklich abgemeldet werden? + Sind Sie sicher, dass Sie sich ausloggen wollen? Systembefehle - Stellt Systemrelevante Befehle bereit. z.B. herunterfahren, sperren, Einstellungen, usw. + Bietet systembezogene Befehle, z. B. Herunterfahren, Sperren, Einstellungen etc. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml index 05a5458e1..1275f8b74 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es-419.xaml @@ -17,7 +17,7 @@ Open Recycle Bin Salir Save Settings - Restart Flow Launcher" + Restart Flow Launcher Ajustes Reload Plugin Data Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml index f95e44dcf..5a5170838 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/es.xaml @@ -8,7 +8,7 @@ Apagar Reiniciar Reiniciar con opciones de arranque avanzadas - Cerrar sesión/Apagar + Cerrar sesión/Desconectar Bloquear Suspender Hibernar @@ -17,7 +17,7 @@ Abrir papelera de reciclaje Salir Guardar configuración - Reiniciar Flow Launcher" + Reiniciar Flow Launcher Configuración Recargar datos del complemento Buscar actualizaciones @@ -30,7 +30,7 @@ Apaga el equipo Reinicia el equipo Reinicia el equipo con opciones avanzadas de arranque para el modo seguro y de depuración, entre otras opciones - Cerrar sesión + Cierra la sesión Bloquea el equipo Cierra Flow Launcher Reinicia Flow Launcher diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/he.xaml new file mode 100644 index 000000000..b98fc47ee --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/he.xaml @@ -0,0 +1,63 @@ + + + + + Command + Description + + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + יציאה + Save Settings + Restart Flow Launcher + הגדרות + Reload Plugin Data + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + + Shutdown Computer + Restart Computer + Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options + Log off + Lock this computer + Close Flow Launcher + Restart Flow Launcher + Tweak Flow Launcher's settings + Put computer to sleep + Empty recycle bin + Open recycle bin + Indexing Options + Hibernate computer + Save all Flow Launcher settings + Refreshes plugin data with new content + Open Flow Launcher's log location + Check for new Flow Launcher update + Visit Flow Launcher's documentation for more help and how to use tips + Open the location where Flow Launcher's settings are stored + Toggle Game Mode + + + הצליח + All Flow Launcher settings saved + Reloaded all applicable plugin data + Are you sure you want to shut the computer down? + Are you sure you want to restart the computer? + Are you sure you want to restart the computer with Advanced Boot Options? + Are you sure you want to log off? + + System Commands + Provides System related commands. e.g. shutdown, lock, settings etc. + + diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml index a70994188..129c6a6fa 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/it.xaml @@ -5,25 +5,25 @@ Comando Descrizione - Shutdown - Restart - Restart With Advanced Boot Options - Log Off/Sign Out - Lock - Sleep - Hibernate - Index Option - Empty Recycle Bin - Open Recycle Bin + Spegni + Riavvia + Riavvia con Opzioni di Avvio Avanzate + Disconnetti + Blocca + Sospendi + Ibernazione + Opzioni di Indice + Svuota Cestino + Apri Cestino Esci - Save Settings - Restart Flow Launcher" + Salva Impostazioni + Riavvia Flow Launcher Impostazioni Ricarica i dati del plugin - Check For Update - Open Log Location - Flow Launcher Tips - Flow Launcher UserData Folder + Controlla Aggiornamenti + Apri Posizione dei Log + Consigli di Flow Launcher + Cartella UserData di Flow Launcher Attiva/Disattiva Modalità Di Gioco diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml index 9080cf314..bb00a0df6 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ja.xaml @@ -17,7 +17,7 @@ Open Recycle Bin Save Settings - Restart Flow Launcher" + Flow Launcherを再起動する プラグインデータのリロード Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml index 5389cbb38..e2962ff34 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ko.xaml @@ -17,7 +17,7 @@ Open Recycle Bin 종료 Save Settings - Restart Flow Launcher" + Flow Launcher 재시작 설정 플러그인 데이터 새로고 Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml index 41e005894..ffbfe8d0e 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nb.xaml @@ -2,62 +2,62 @@ - Command - Description + Kommando + Beskrivelse - Shutdown - Restart - Restart With Advanced Boot Options - Log Off/Sign Out - Lock - Sleep - Hibernate - Index Option - Empty Recycle Bin - Open Recycle Bin - Exit - Save Settings - Restart Flow Launcher" - Settings - Reload Plugin Data - Check For Update - Open Log Location + Slå av + Start på nytt + Start på nytt med avanserte oppstartsalternativer + Logg av/logg ut + Lås + Hvilemodus + Dvalemodus + Indeksalternativ + Tøm papirkurven + Åpne papirkurven + Avslutt + Lagre innstillinger + Start Flow Launcher på nytt + Innstillinger + Last programtilleggdata på nytt + Se etter oppdatering + Åpne loggplassering Flow Launcher Tips - Flow Launcher UserData Folder - Toggle Game Mode + Brukerdatamappe for Flow Launcher + Vis/Skjul spillmodus - Shutdown Computer - Restart Computer - Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options - Log off - Lock this computer - Close Flow Launcher - Restart Flow Launcher - Tweak Flow Launcher's settings - Put computer to sleep - Empty recycle bin - Open recycle bin - Indexing Options - Hibernate computer - Save all Flow Launcher settings - Refreshes plugin data with new content - Open Flow Launcher's log location - Check for new Flow Launcher update - Visit Flow Launcher's documentation for more help and how to use tips - Open the location where Flow Launcher's settings are stored - Toggle Game Mode + Slår av datamaskin + Start datamaskinen på nytt + Start datamaskinen på nytt med avanserte oppstartsalternativer for sikker og feilsøking, i tillegg til andre alternativer + Logg av + Lås denne datamaskinen + Lukk Flow Launcher + Start Flow Launcher på nytt + Juster innstillingene for Flow Launcher + Sett datamaskinen i hvilemodus + Tøm papirkurven + Åpne papirkurven + Alternativer for indeksering + Sett datamaskinen i dvalemodus + Lagre alle innstillinger for Flow Launcher + Oppdaterer programtilleggdata med nytt innhold + Åpne Flow Launchers loggplassering + Se etter nye oppdateringer for Flow Launcher + Besøk Flow Launcher sin dokumentasjon for mer hjelp og hvordan du bruker tips + Åpne plasseringen hvor Flow Launcher sine innstillinger er lagret + Vis/Skjul spillmodus - Success - All Flow Launcher settings saved - Reloaded all applicable plugin data - Are you sure you want to shut the computer down? - Are you sure you want to restart the computer? - Are you sure you want to restart the computer with Advanced Boot Options? - Are you sure you want to log off? + Vellykket + Alle innstillinger for Flow Launcher er lagret + Lastet inn alle gjeldende programtilleggdata på nytt + Er du sikker på at du vil slå av datamaskinen? + Er du sikker på at du vil starte datamaskinen på nytt? + Er du sikker på at du vil starte datamaskinen på nytt med avanserte oppstartsalternativer? + Er du sikker på at du vil logge av? - System Commands - Provides System related commands. e.g. shutdown, lock, settings etc. + Systemkommandoer + Gir systemrelaterte kommandoer, f.eks. slå av, lås, innstillinger osv. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml index a71e28e98..00201fa0e 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/nl.xaml @@ -17,7 +17,7 @@ Open Recycle Bin Afsluiten Save Settings - Restart Flow Launcher" + Flow Launcher herstarten Instellingen Reload Plugin Data Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml index 4549f193e..2f82bce76 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pl.xaml @@ -5,31 +5,31 @@ Komenda Opis - Shutdown + Wyłącz komputer Restart - Restart With Advanced Boot Options - Log Off/Sign Out - Lock - Sleep - Hibernate - Index Option - Empty Recycle Bin - Open Recycle Bin + Uruchom ponownie z Zaawansowanymi opcjami rozruchu + Wyloguj + Zablokuj + Uśpij + Hibernuj + Opcje indeksowania + Opróżnij kosz + Otwórz kosz Wyjdź - Save Settings - Restart Flow Launcher" + Zapisz ustawienia + Uruchom ponownie Flow Launchera Ustawienia - Reload Plugin Data - Check For Update - Open Log Location - Flow Launcher Tips - Flow Launcher UserData Folder - Toggle Game Mode + Odśwież dane wtyczek + Sprawdź aktualizacje + Otwórz lokalizację dziennika + Wskazówki Flow Launcher + Folder danych użytkownika Flow Launcher + Przełącz tryb gry Wyłącz komputer Uruchom ponownie komputer - Restart the computer with Advanced Boot Options for Safe and Debugging modes, as well as other options + Uruchom ponownie komputer z Zaawansowanymi opcjami rozruchu dla trybów Bezpiecznego i Debugowania oraz innych opcji Wyloguj się Zablokuj ten komputer Wyłącz Flow Launchera @@ -37,25 +37,25 @@ Dostosuj ustawienia Przełącz komputer w tryb uśpienia Opróżnij kosz - Open recycle bin - Indexing Options - Hibernate computer - Save all Flow Launcher settings - Refreshes plugin data with new content - Open Flow Launcher's log location - Check for new Flow Launcher update - Visit Flow Launcher's documentation for more help and how to use tips - Open the location where Flow Launcher's settings are stored - Toggle Game Mode + Otwórz kosz + Opcje indeksowania + Hibernuj komputer + Zapisz wszystkie ustawienia Flow Launcher + Odświeża dane wtyczek z nową zawartością + Otwórz lokalizację dziennika Flow Launcher + Sprawdź nową aktualizację Flow Launcher + Odwiedź dokumentację Flow Launcher, aby uzyskać więcej pomocy i wskazówek dotyczących użytkowania + Otwórz lokalizację, w której przechowywane są ustawienia Flow Launcher + Przełącz tryb gry Sukces - All Flow Launcher settings saved - Reloaded all applicable plugin data - Are you sure you want to shut the computer down? - Are you sure you want to restart the computer? - Are you sure you want to restart the computer with Advanced Boot Options? - Are you sure you want to log off? + Wszystkie ustawienia Flow Launcher zostały zapisane + Przeładowano dane wszystkich odpowiednich wtyczek + Czy na pewno chcesz wyłączyć komputer? + Czy na pewno chcesz zrestartować komputer? + Czy na pewno chcesz ponownie uruchomić komputer z Zaawansowanymi opcjami rozruchu? + Czy na pewno chcesz się wylogować? Komendy systemowe Wykonywanie komend systemowych, np. wyłącz, zablokuj komputer, otwórz ustawienia itp. diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml index b80ddf621..a51c751df 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/pt-br.xaml @@ -17,7 +17,7 @@ Open Recycle Bin Sair Save Settings - Restart Flow Launcher" + Reiniciar Flow Launcher Configurações Recarregar Dados de Plugin Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml index 927ccb0b6..3d3bcfc87 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/ru.xaml @@ -17,7 +17,7 @@ Open Recycle Bin Выйти Save Settings - Restart Flow Launcher" + Restart Flow Launcher Настройки Перезагрузить данные плагинов Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml index 82d8c2fe4..c5cee316f 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sk.xaml @@ -17,7 +17,7 @@ Otvoriť kôš Ukončiť Uložiť nastavenia - Reštartovať Flow Launcher" + Reštartovať Flow Launcher Nastavenia Znova načítať údaje pluginov Skontrolovať aktualizácie diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml index fa6b54b81..a984954f9 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/sr.xaml @@ -17,7 +17,7 @@ Open Recycle Bin Izlaz Save Settings - Restart Flow Launcher" + Restart Flow Launcher Podešavanja Reload Plugin Data Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml index 9670d8297..35850cb26 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/tr.xaml @@ -17,7 +17,7 @@ Open Recycle Bin Çıkı Save Settings - Restart Flow Launcher" + Flow Launcher'u Yeniden Başlat Ayarlar Reload Plugin Data Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml index 526144b43..8f2883bce 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/uk-UA.xaml @@ -17,7 +17,7 @@ Відкрити кошик Вийти Зберегти налаштування - Перезапустити Flow Launcher" + Перезапустити Flow Launcher Налаштування Перезавантажити дані плагінів Перевірити наявність оновлень diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml new file mode 100644 index 000000000..bb76debc3 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/vi.xaml @@ -0,0 +1,63 @@ + + + + + Lệnh + Mô Tả + + Shutdown + Restart + Restart With Advanced Boot Options + Log Off/Sign Out + Lock + Sleep + Hibernate + Index Option + Empty Recycle Bin + Open Recycle Bin + Thoát + Save Settings + Bắt đầu Flow-Launcher + Cài đặt + Dữ liệu plugin không tải + Check For Update + Open Log Location + Flow Launcher Tips + Flow Launcher UserData Folder + Toggle Game Mode + + + shutdown máy tính + Khởi động lại máy tính + Khởi động lại máy tính với Tùy chọn khởi động nâng cao cho chế độ An toàn và Gỡ lỗi, cũng như các tùy chọn khác + Đăng xuất + Khóa máy tính này + Chào mừng bạn đến với Trình khởi chạy luồng + Bắt đầu Flow-Launcher + Tweak Flow Launcher's settings + Đặt máy tính vào chế độ ngủ + Dọn sạch thùng rác + Open recycle bin + Tùy chọn lập chỉ mục + Máy tính ngủ đông + Lưu tất cả cài đặt Flow Launcher + Làm mới dữ liệu plugin với nội dung mới + Mở vị trí nhật ký của Flow Launcher + Kiểm tra bản cập nhật Flow Launcher mới + Truy cập tài liệu của Flow Launcher để được trợ giúp thêm và cách sử dụng các mẹo + Mở vị trí lưu trữ cài đặt của Flow Launcher + Toggle Game Mode + + + Thành công + Đã lưu tất cả cài đặt của Flow Launcher + Đã tải lại tất cả dữ liệu plugin hiện hành + Bạn có chắc chắn muốn tắt máy tính không? + Bạn có chắc muốn khởi động lại cấp này? + Bạn có chắc chắn muốn khởi động lại máy tính bằng Advanced Boot Options không? + Are you sure you want to log off? + + Lệnh hệ thống + Cung cấp các lệnh liên quan đến Hệ thống. ví dụ. tắt máy, khóa, cài đặt, v.v. + + diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml index be84d0e7f..d728548b5 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-cn.xaml @@ -5,26 +5,26 @@ 命令 描述 - Shutdown - Restart - Restart With Advanced Boot Options - Log Off/Sign Out - Lock - Sleep - Hibernate - Index Option - Empty Recycle Bin - Open Recycle Bin + 关机 + 重启 + 使用高级启动选项重启 + 注销/登出 + 锁定 + 睡眠 + 休眠 + 索引选项 + 清空回收站 + 打开回收站 退出 - Save Settings - Restart Flow Launcher" + 保存设置 + 重启 Flow Launcher 设置 重新加载插件数据 - Check For Update - Open Log Location - Flow Launcher Tips - Flow Launcher UserData Folder - Toggle Game Mode + 检查更新 + 打开日志文件夹 + Flow Launcher 提示 + Flow Launcher 用户数据文件夹 + 切换游戏模式 关闭电脑 @@ -46,7 +46,7 @@ 检查新的 Flow Launcher 更新 访问 Flow Launcher 的文档以获取更多帮助以及使用技巧 打开Flow Launcher 设置文件夹 - Toggle Game Mode + 切换游戏模式 成功 diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml index 62bf8f012..9934acc9f 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.Sys/Languages/zh-tw.xaml @@ -17,7 +17,7 @@ Open Recycle Bin 結束 Save Settings - Restart Flow Launcher" + 重新啟動 Flow Launcher 設定 重新載入插件資料 Check For Update diff --git a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs index 0dbb46be9..c399204b6 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.Sys/Main.cs @@ -2,19 +2,16 @@ using System.Collections.Generic; using System.Diagnostics; using System.IO; -using System.Linq; -using System.Runtime.InteropServices; using System.Windows; -using System.Windows.Forms; -using System.Windows.Interop; using Flow.Launcher.Infrastructure; using Flow.Launcher.Infrastructure.Logger; using Flow.Launcher.Infrastructure.UserSettings; using Flow.Launcher.Plugin.SharedCommands; +using Windows.Win32; +using Windows.Win32.Foundation; +using Windows.Win32.System.Shutdown; using Application = System.Windows.Application; using Control = System.Windows.Controls.Control; -using FormsApplication = System.Windows.Forms.Application; -using MessageBox = System.Windows.MessageBox; namespace Flow.Launcher.Plugin.Sys { @@ -24,33 +21,6 @@ namespace Flow.Launcher.Plugin.Sys private ThemeSelector themeSelector; private Dictionary KeywordTitleMappings = new Dictionary(); - #region DllImport - - internal const int EWX_LOGOFF = 0x00000000; - internal const int EWX_SHUTDOWN = 0x00000001; - internal const int EWX_REBOOT = 0x00000002; - internal const int EWX_FORCE = 0x00000004; - internal const int EWX_POWEROFF = 0x00000008; - internal const int EWX_FORCEIFHUNG = 0x00000010; - - [DllImport("user32")] - private static extern bool ExitWindowsEx(uint uFlags, uint dwReason); - - [DllImport("user32")] - private static extern void LockWorkStation(); - - [DllImport("Shell32.dll", CharSet = CharSet.Unicode)] - private static extern uint SHEmptyRecycleBin(IntPtr hWnd, uint dwFlags); - - // http://www.pinvoke.net/default.aspx/Enums/HRESULT.html - private enum HRESULT : uint - { - S_FALSE = 0x0001, - S_OK = 0x0000 - } - - #endregion - public Control CreateSettingPanel() { var results = Commands(); @@ -141,6 +111,9 @@ namespace Flow.Launcher.Plugin.Sys private List Commands() { var results = new List(); + var logPath = Path.Combine(DataLocation.DataDirectory(), "Logs", Constant.Version); + var userDataPath = DataLocation.DataDirectory(); + var recycleBinFolder = "shell:RecycleBinFolder"; results.AddRange(new[] { new Result @@ -151,7 +124,7 @@ namespace Flow.Launcher.Plugin.Sys IcoPath = "Images\\shutdown.png", Action = c => { - var result = MessageBox.Show( + var result = context.API.ShowMsgBox( context.API.GetTranslation("flowlauncher_plugin_sys_dlgtext_shutdown_computer"), context.API.GetTranslation("flowlauncher_plugin_sys_shutdown_computer"), MessageBoxButton.YesNo, MessageBoxImage.Warning); @@ -171,7 +144,7 @@ namespace Flow.Launcher.Plugin.Sys IcoPath = "Images\\restart.png", Action = c => { - var result = MessageBox.Show( + var result = context.API.ShowMsgBox( context.API.GetTranslation("flowlauncher_plugin_sys_dlgtext_restart_computer"), context.API.GetTranslation("flowlauncher_plugin_sys_restart_computer"), MessageBoxButton.YesNo, MessageBoxImage.Warning); @@ -191,7 +164,7 @@ namespace Flow.Launcher.Plugin.Sys IcoPath = "Images\\restart_advanced.png", Action = c => { - var result = MessageBox.Show( + var result = context.API.ShowMsgBox( context.API.GetTranslation("flowlauncher_plugin_sys_dlgtext_restart_computer_advanced"), context.API.GetTranslation("flowlauncher_plugin_sys_restart_computer"), MessageBoxButton.YesNo, MessageBoxImage.Warning); @@ -210,13 +183,13 @@ namespace Flow.Launcher.Plugin.Sys IcoPath = "Images\\logoff.png", Action = c => { - var result = MessageBox.Show( + var result = context.API.ShowMsgBox( context.API.GetTranslation("flowlauncher_plugin_sys_dlgtext_logoff_computer"), context.API.GetTranslation("flowlauncher_plugin_sys_log_off"), MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result == MessageBoxResult.Yes) - ExitWindowsEx(EWX_LOGOFF, 0); + PInvoke.ExitWindowsEx(EXIT_WINDOWS_FLAGS.EWX_LOGOFF, 0); return true; } @@ -229,7 +202,7 @@ namespace Flow.Launcher.Plugin.Sys IcoPath = "Images\\lock.png", Action = c => { - LockWorkStation(); + PInvoke.LockWorkStation(); return true; } }, @@ -239,7 +212,7 @@ namespace Flow.Launcher.Plugin.Sys SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_sleep"), Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xec46"), IcoPath = "Images\\sleep.png", - Action = c => FormsApplication.SetSuspendState(PowerState.Suspend, false, false) + Action = c => PInvoke.SetSuspendState(false, false, false) }, new Result { @@ -284,11 +257,13 @@ namespace Flow.Launcher.Plugin.Sys // http://www.pinvoke.net/default.aspx/shell32/SHEmptyRecycleBin.html // FYI, couldn't find documentation for this but if the recycle bin is already empty, it will return -2147418113 (0x8000FFFF (E_UNEXPECTED)) // 0 for nothing - var result = SHEmptyRecycleBin(new WindowInteropHelper(Application.Current.MainWindow).Handle, 0); - if (result != (uint) HRESULT.S_OK && result != (uint) 0x8000FFFF) + var result = PInvoke.SHEmptyRecycleBin(new(), string.Empty, 0); + if (result != HRESULT.S_OK && result != HRESULT.E_UNEXPECTED) { - MessageBox.Show($"Error emptying recycle bin, error code: {result}\n" + - "please refer to https://msdn.microsoft.com/en-us/library/windows/desktop/aa378137", + context.API.ShowMsgBox("Failed to empty the recycle bin. This might happen if:\n" + + "- A file in the recycle bin is in use\n" + + "- You don't have permission to delete some items\n" + + "Please close any applications that might be using these files and try again.", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } @@ -302,10 +277,11 @@ namespace Flow.Launcher.Plugin.Sys SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_openrecyclebin"), IcoPath = "Images\\openrecyclebin.png", Glyph = new GlyphInfo (FontFamily:"/Resources/#Segoe Fluent Icons", Glyph:"\xe74d"), + CopyText = recycleBinFolder, Action = c => { { - System.Diagnostics.Process.Start("explorer", "shell:RecycleBinFolder"); + System.Diagnostics.Process.Start("explorer", recycleBinFolder); } return true; @@ -394,9 +370,10 @@ namespace Flow.Launcher.Plugin.Sys Title = "Open Log Location", SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_open_log_location"), IcoPath = "Images\\app.png", + CopyText = logPath, + AutoCompleteText = logPath, Action = c => { - var logPath = Path.Combine(DataLocation.DataDirectory(), "Logs", Constant.Version); context.API.OpenDirectory(logPath); return true; } @@ -406,6 +383,8 @@ namespace Flow.Launcher.Plugin.Sys Title = "Flow Launcher Tips", SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_open_docs_tips"), IcoPath = "Images\\app.png", + CopyText = Constant.Documentation, + AutoCompleteText = Constant.Documentation, Action = c => { context.API.OpenUrl(Constant.Documentation); @@ -417,9 +396,11 @@ namespace Flow.Launcher.Plugin.Sys Title = "Flow Launcher UserData Folder", SubTitle = context.API.GetTranslation("flowlauncher_plugin_sys_open_userdata_location"), IcoPath = "Images\\app.png", + CopyText = userDataPath, + AutoCompleteText = userDataPath, Action = c => { - context.API.OpenDirectory(DataLocation.DataDirectory()); + context.API.OpenDirectory(userDataPath); return true; } }, diff --git a/Plugins/Flow.Launcher.Plugin.Sys/NativeMethods.txt b/Plugins/Flow.Launcher.Plugin.Sys/NativeMethods.txt new file mode 100644 index 000000000..8fcb6cae9 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Sys/NativeMethods.txt @@ -0,0 +1,6 @@ +ExitWindowsEx +LockWorkStation +SHEmptyRecycleBin +S_OK +E_UNEXPECTED +SetSuspendState \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json index 5276690e3..75be43587 100644 --- a/Plugins/Flow.Launcher.Plugin.Sys/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Sys/plugin.json @@ -4,7 +4,7 @@ "Name": "System Commands", "Description": "Provide System related commands. e.g. shutdown,lock, setting etc.", "Author": "qianlifeng", - "Version": "3.1.1", + "Version": "3.1.6", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Sys.dll", diff --git a/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj b/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj index c03acefae..3db0cd0cb 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj +++ b/Plugins/Flow.Launcher.Plugin.Url/Flow.Launcher.Plugin.Url.csproj @@ -1,5 +1,5 @@  - + Library net7.0-windows @@ -11,8 +11,9 @@ true false false + en - + true portable @@ -23,7 +24,7 @@ 4 false - + pdbonly true @@ -33,7 +34,7 @@ 4 false - + PreserveNewest @@ -56,4 +57,4 @@ - \ No newline at end of file + diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/ar.xaml index 418731021..a6f6f1296 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/ar.xaml @@ -1,17 +1,17 @@  - Open search in: - New Window - New Tab + فتح البحث في: + نافذة جديدة + علامة تبويب جديد - Open url:{0} - Can't open url:{0} + فتح الرابط:{0} + لا يمكن فتح الرابط:{0} - URL - Open the typed URL from Flow Launcher + عنوان الرابط + فتح عنوان URL المكتوب من Flow Launcher - Please set your browser path: - Choose - Application(*.exe)|*.exe|All files|*.* + الرجاء تعيين مسار المتصفح الخاص بك: + اختر + تطبيق(*.exe)|*.exe|جميع الملفات|*.* diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/de.xaml index 328482307..ee13754d5 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/de.xaml @@ -1,17 +1,17 @@  - Open search in: - New Window - New Tab + Suche öffnen in: + Neues Fenster + Neuer Tab - Öffne URL:{0} - Kann URL nicht öffnen:{0} + URL öffnen: {0} + URL kann nicht geöffnet werden: {0} URL - Öffne eine eingegebene URL mit Flow Launcher + Öffnen Sie die eingetippte URL in Flow Launcher - Please set your browser path: - Auswählen - Application(*.exe)|*.exe|All files|*.* + Bitte legen Sie Ihren Browser-Pfad fest: + Wählen + Anwendung (*.exe)|*.exe|Alle Dateien|*.* diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/he.xaml new file mode 100644 index 000000000..418731021 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/he.xaml @@ -0,0 +1,17 @@ + + + + Open search in: + New Window + New Tab + + Open url:{0} + Can't open url:{0} + + URL + Open the typed URL from Flow Launcher + + Please set your browser path: + Choose + Application(*.exe)|*.exe|All files|*.* + diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/nb.xaml index 418731021..1177c318c 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/nb.xaml @@ -1,17 +1,17 @@  - Open search in: - New Window - New Tab + Åpne søk i: + Nytt vindu + Ny fane - Open url:{0} - Can't open url:{0} + Åpne nettadresse:{0} + Kan ikke åpne nettadresse:{0} - URL - Open the typed URL from Flow Launcher + Nettadresse + Åpne den innskrevne nettadressen fra Flow Launcher - Please set your browser path: - Choose - Application(*.exe)|*.exe|All files|*.* + Vennligst angi nettleserens sti: + Velg + Applikasjon(*.exe)|*.exe|Alle filer|*.* diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/pl.xaml index 8f1125d59..bf54c6fe6 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/pl.xaml @@ -1,9 +1,9 @@  - Open search in: - New Window - New Tab + Otwórz wyszukiwanie w: + Nowe okno + Nowa zakładka Otwórz adres URL: {0} Nie udało się otworzyć adresu: {0} @@ -11,7 +11,7 @@ URL Otwórz wpisany adres URL z poziomu Flow Launchera - Please set your browser path: - Choose - Application(*.exe)|*.exe|All files|*.* + Ustaw ścieżkę przeglądarki: + Wybierz + Aplikacja(*.exe)|*.exe|Wszystkie pliki|*.* diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/ru.xaml index 418731021..5110f65ef 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/ru.xaml @@ -12,6 +12,6 @@ Open the typed URL from Flow Launcher Please set your browser path: - Choose + Выберите Application(*.exe)|*.exe|All files|*.* diff --git a/Plugins/Flow.Launcher.Plugin.Url/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.Url/Languages/vi.xaml new file mode 100644 index 000000000..41f87fe19 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.Url/Languages/vi.xaml @@ -0,0 +1,17 @@ + + + + Mở tìm kiếm + Cửa sổ mới + Tab mới + + Mở url:{0} + Không thể mở url:{0} + + Địa chỉ URL + Mở URL đã nhập từ Flow Launcher + + Vui lòng đặt đường dẫn trình duyệt của bạn: + Chọn + Ứng dụng(*.exe)|*.exe|Tất cả các tệp|*.* + diff --git a/Plugins/Flow.Launcher.Plugin.Url/plugin.json b/Plugins/Flow.Launcher.Plugin.Url/plugin.json index 79a96171c..cab056870 100644 --- a/Plugins/Flow.Launcher.Plugin.Url/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.Url/plugin.json @@ -4,7 +4,7 @@ "Name": "URL", "Description": "Open the typed URL from Flow Launcher", "Author": "qianlifeng", - "Version": "3.0.4", + "Version": "3.0.7", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.Url.dll", diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/copylink.png b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/copylink.png new file mode 100644 index 000000000..3218c94c9 Binary files /dev/null and b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/copylink.png differ diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/gist.png b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/gist.png index dd9fb6f00..a272f3fb5 100644 Binary files a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/gist.png and b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/gist.png differ diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/github.png b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/github.png index dd9fb6f00..a272f3fb5 100644 Binary files a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/github.png and b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/github.png differ diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/gmail.png b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/gmail.png index aaeff3020..e74f0d573 100644 Binary files a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/gmail.png and b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/gmail.png differ diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google.png b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google.png index 897151684..7c1df1f29 100644 Binary files a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google.png and b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google.png differ diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_drive.png b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_drive.png index ce2346a31..bff02c392 100644 Binary files a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_drive.png and b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_drive.png differ diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_maps.png b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_maps.png index 2413eec58..b086b7b74 100644 Binary files a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_maps.png and b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_maps.png differ diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_translate.png b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_translate.png index 63ff5c883..7ba66ece2 100644 Binary files a/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_translate.png and b/Plugins/Flow.Launcher.Plugin.WebSearch/Images/google_translate.png differ diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ar.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ar.xaml index 62b2a7a4b..6e92178db 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ar.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ar.xaml @@ -1,51 +1,52 @@  - Search Source Setting - Open search in: - New Window - New Tab - Set browser from path: - Choose - Delete - Edit - Add - Enabled - Enabled - Disabled - Confirm - Action Keyword - URL - Search - Use Search Query Autocomplete: - Autocomplete Data from: - Please select a web search - Are you sure you want to delete {0}? - If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads + إعدادات مصدر البحث + فتح البحث في: + نافذة جديدة + تبويب جديد + تعيين المتصفح من المسار: + اختر + حذف + تعديل + إضافة + مفعل + مفعل + مُعطّل + تأكيد + كلمة مفتاحية للعمل + الرابط + بحث + استخدام الإكمال التلقائي لاستعلام البحث: + بيانات الإكمال التلقائي من: + يرجى اختيار بحث على الويب + هل أنت متأكد أنك تريد حذف {0}؟ + إذا كنت ترغب في إضافة بحث لموقع ويب معين إلى Flow، أدخل أولاً نصًا تجريبيًا في شريط البحث لذلك الموقع، ثم قم بإجراء البحث. الآن انسخ محتويات شريط عنوان المتصفح، والصقه في حقل الرابط أدناه. استبدل نص الاختبار بـ {q}. على سبيل المثال، إذا كنت تبحث عن كازينو على نتفليكس، سيقرأ شريط العنوان https://www.netflix.com/search?q=Casino - Now copy this entire string and paste it in the URL field below. - Then replace casino with {q}. - Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} + الآن انسخ هذه السلسلة بالكامل والصقها في حقل الرابط أدناه. + ثم استبدل كازينو بـ {q}. + وبالتالي، فإن الصيغة العامة للبحث على نتفليكس هي https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard - Title - Status - Select Icon - Icon - Cancel - Invalid web search - Please enter a title - Please enter an action keyword - Please enter a URL - Action keyword already exists, please enter a different one - Success - Hint: You do not need to place custom images in this directory, if Flow's version is updated they will be lost. Flow will automatically copy any images outside of this directory across to WebSearch's custom image location. + العنوان + الحالة + اختر أيقونة + أيقونة + إلغاء + بحث ويب غير صالح + يرجى إدخال عنوان + يرجى إدخال كلمة مفتاحية للعمل + يرجى إدخال رابط + كلمة المفتاح للعمل موجودة بالفعل، يرجى إدخال أخرى مختلفة + نجاح + تلميح: لا تحتاج لوضع صور مخصصة في هذا الدليل، إذا تم تحديث نسخة Flow سيتم فقدانها. سيقوم Flow تلقائيًا بنسخ أي صور خارج هذا الدليل إلى موقع الصور المخصص لـ WebSearch. - Web Searches - Allows to perform web searches + عمليات البحث على الويب + يسمح بإجراء عمليات بحث على الويب diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/cs.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/cs.xaml index e9f59929b..849f27f05 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/cs.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/cs.xaml @@ -29,7 +29,8 @@ Obecný vzorec pro vyhledávání Netflixu je tedy https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard Název diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml index 096abc5f1..2a7d4aa32 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/da.xaml @@ -29,7 +29,8 @@ Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard Title diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml index 859111782..0c72b11bf 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/de.xaml @@ -1,51 +1,53 @@  - Search Source Setting - Open search in: - New Window - New Tab + Einstellung der Suchquelle + Suche öffnen in: + Neues Fenster + Neuer Tab Browser aus Pfad festlegen: - Auswählen + Wählen Löschen Bearbeiten Hinzufügen Aktiviert Aktiviert - Disabled - Confirm - Aktionsschlüsselwort + Deaktiviert + Bestätigen + Aktions-Schlüsselwort URL Suche - Aktiviere Suchvorschläge - Autocomplete Data from: - Bitte wähle einen Suchdienst - Bist du sicher {0} zu löschen? - If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads + Autovervollständigung von Suchanfragen verwenden: + Daten automatisch vervollständigen aus: + Bitte wählen Sie eine Websuche aus + Sind Sie sicher, dass Sie {0} löschen wollen? + Wenn Sie Flow eine Suche nach einer bestimmten Website hinzufügen möchten, geben Sie zunächst eine Dummy-Textzeichenfolge in die Suchleiste dieser Website ein und starten Sie die Suche. Kopieren Sie jetzt den Inhalt der Adressleiste des Browsers und fügen Sie ihn in das URL-Feld unten ein. Ersetzen Sie Ihre Testzeichenfolge durch {q}. Zum Beispiel, wenn Sie auf Netflix nach casino suchen, steht in der Adressleiste https://www.netflix.com/search?q=Casino - Now copy this entire string and paste it in the URL field below. - Then replace casino with {q}. - Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} + Kopieren Sie jetzt die gesamte Zeichenfolge und fügen Sie diese in das URL-Feld unten ein. + Dann ersetzen Sie casino durch {q}. + Die generische Formel für eine Suche auf Netflix lautet somit +https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard Titel Status - Wähle Symbol - Symbol + Icon auswählen + Icon Abbrechen - Ungültige Internetsuche - Bitte Titel eingeben - Bitte Aktionsschlüsselwort eingeben - Bitte URL eingeben - Aktionsschlüsselwort existiert bereits. Bitte gebe ein anderes ein. - Erfolgreich - Hint: You do not need to place custom images in this directory, if Flow's version is updated they will be lost. Flow will automatically copy any images outside of this directory across to WebSearch's custom image location. + Ungültige Websuche + Bitte geben Sie einen Titel ein + Bitte geben Sie ein Aktions-Schlüsselwort ein + Bitte geben Sie eine URL ein + Aktions-Schlüsselwort ist bereits vorhanden. Bitte geben Sie ein anderes ein + Erfolg + Hinweis: Sie müssen keine benutzerdefinierten Bilder in diesem Verzeichnis ablegen, wenn die Version von Flow aktualisiert wird, gehen diese verloren. Flow kopiert automatisch jegliche Bilder außerhalb dieses Verzeichnisses herüber in den benutzerdefinierten Bildspeicherort von WebSearch. - Internetsuche - Stellt die Möglichkeit für Internetsuchen bereit + Web-Suchen + Ermöglicht die Durchführung von Web-Suchen diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml index db42aa7fc..72f618f55 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/en.xaml @@ -31,7 +31,8 @@ Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard Title diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml index 6e992b944..517ac0918 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es-419.xaml @@ -29,7 +29,8 @@ Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard Título diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml index 86e62f0e5..e6e4a94d2 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/es.xaml @@ -16,20 +16,21 @@ Confirmar Palabra clave de acción URL - Buscar + Busca en Usar autocompletado en consultas de búsqueda: Autocompletar datos desde: Por favor, seleccione una búsqueda web ¿Está seguro de que desea eliminar {0}? - Si desea añadir una búsqueda de un sitio web concreto a Flow, introduzca primero una cadena de texto ficticia en la barra de búsqueda de ese sitio web, y ejecute la búsqueda. Ahora copie el contenido de la barra de direcciones del navegador y péguelo en el campo de la URL abajo indicado. Sustituya su cadena de prueba por {q}. Por ejemplo, si busca Casino en Netflix, su barra de direcciones debe decir + Si desea añadir a Flow una búsqueda de un sitio web concreto, introduzca primero una cadena de texto ficticia en la barra de búsqueda de ese sitio web, y ejecute la búsqueda. Luego copie el contenido de la barra de direcciones del navegador y péguelo en el campo de la URL indicado a continuación. Por ejemplo, si busca Casino en Netflix, su barra de direcciones debe decir: https://www.netflix.com/search?q=Casino - Ahora copie la cadena de entrada y péguela en el campo de la URL de la parte inferior. - A continuación, sustituya casino por {q}. + Ahora copie la cadena de entrada anterior y péguela en el campo de la URL indicado más abajo. + A continuación, sustituya 'Casino' por {q}. De esta manera, la fórmula genérica para una búsqueda en Netflix será https://www.netflix.com/search?q={q} - + Copiar URL + Copiar URL de búsqueda al portapapeles Título diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml index f5988733e..c6b1b145c 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/fr.xaml @@ -29,7 +29,8 @@ Ainsi, la formule générique pour une recherche Netflix est https://www.netflix.com/search?q={q} - + Copier l'URL + Copier l'URL de la recherche dans le presse-papiers Titre @@ -45,7 +46,7 @@ Ajout Astuce : Vous n'avez pas besoin de placer des images personnalisées dans ce dossier, si la version de Flow est mise à jour, elles seront perdues. Flow copiera automatiquement toutes les images en dehors de ce dossier dans l'emplacement de l'image personnalisée de la Recherche Web. - Recherches Web + Recherches web Permet d'effectuer des recherches web diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/he.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/he.xaml new file mode 100644 index 000000000..820bb141b --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/he.xaml @@ -0,0 +1,52 @@ + + + + Search Source Setting + Open search in: + New Window + New Tab + Set browser from path: + Choose + מחק + ערוך + הוסף + Enabled + Enabled + Disabled + Confirm + Action Keyword + URL + Search + Use Search Query Autocomplete: + Autocomplete Data from: + Please select a web search + Are you sure you want to delete {0}? + If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads + https://www.netflix.com/search?q=Casino + + Now copy this entire string and paste it in the URL field below. + Then replace casino with {q}. + Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} + + + Copy URL + Copy search URL to clipboard + + + Title + Status + Select Icon + Icon + ביטול + Invalid web search + Please enter a title + Please enter an action keyword + Please enter a URL + Action keyword already exists, please enter a different one + הצליח + Hint: You do not need to place custom images in this directory, if Flow's version is updated they will be lost. Flow will automatically copy any images outside of this directory across to WebSearch's custom image location. + + Web Searches + Allows to perform web searches + + diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml index 6be89607d..26c1e8459 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/it.xaml @@ -1,7 +1,7 @@  - Search Source Setting + Impostazioni Sorgenti di Ricerca Apri ricerca in: Nuova Finestra Nuova Scheda @@ -12,40 +12,41 @@ Aggiungi Abilitato Abilitato - Disabled - Confirm - Action Keyword + Disabilitato + Conferma + Parola Chiave URL - Search - Use Search Query Autocomplete: - Autocomplete Data from: - Please select a web search + Cerca + Usa Autocompletamento Ricerca: + Autocompleta i dati da: + Seleziona una ricerca web Sei sicuro di voler eliminare {0}? - If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads + Se vuoi aggiungere una ricerca di un particolare sito web a Flow, prima immetti una stringa di testo fittizia nella barra di ricerca di quel sito web, e avvia la ricerca. Ora copia il contenuto della barra degli indirizzi del browser e incollalo nel campo URL sotto. Sostituisci la stringa di prova con {q}. Per esempio, se cerchi 'casino' su Netflix, sulla barra degli indirizzi ci sarà https://www.netflix.com/search?q=Casino - Now copy this entire string and paste it in the URL field below. - Then replace casino with {q}. - Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} + Ora copia l'intera stringa e incollala nel campo URL sotto. + Sostituisci 'casino' con {q}. + Così la formula generica per una ricerca su Netflix è https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard - Title - Status - Select Icon - Icon + Titolo + Stato + Seleziona Icona + Icona Annulla - Invalid web search - Please enter a title - Please enter an action keyword - Please enter a URL - Action keyword already exists, please enter a different one + Ricerca web non valida + Inserisci un titolo + Inserisci una parola chiave + Inserisci un URL + La parola chiave esiste già, inserirne una diversa Successo - Hint: You do not need to place custom images in this directory, if Flow's version is updated they will be lost. Flow will automatically copy any images outside of this directory across to WebSearch's custom image location. + Suggerimento: Non è necessario inserire immagini personalizzate in questa cartella, se Flow viene aggiornato queste verranno perse. Flow copierà automaticamente tutte le immagini al di fuori di questa cartella nella posizione delle immagini personalizzate di WebSearch. - Web Searches - Allows to perform web searches + Ricerche Web + Consente di eseguire ricerche web diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml index b5d4df430..85ce0e282 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ja.xaml @@ -29,7 +29,8 @@ Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard タイトル diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml index 1f43e20c2..5ab5fffa3 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ko.xaml @@ -29,7 +29,8 @@ Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard 이름 diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml index 62b2a7a4b..4bba382a9 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nb.xaml @@ -1,51 +1,52 @@  - Search Source Setting - Open search in: - New Window - New Tab - Set browser from path: - Choose - Delete - Edit - Add - Enabled - Enabled - Disabled - Confirm - Action Keyword - URL - Search - Use Search Query Autocomplete: - Autocomplete Data from: - Please select a web search - Are you sure you want to delete {0}? - If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads + Søk kildeinnstilling + Åpne søk i: + Nytt vindu + Ny fane + Angi nettleser fra banen: + Velg + Slett + Rediger + Legg til + Aktivert + Aktivert + Deaktivert + Bekreft + Nøkkelord for handling + Nettadresse + Søk + Bruk autofullføring av søkespørring: + Autofullfør data fra: + Vennligst velg et websøk + Er du sikker på at du ønsker å slette {0}? + Hvis du vil legge til et søk etter en bestemt nettside til Flow, først skriv inn en plassholder tekststreng i søkefeltet i denne nettsiden og start søket. Kopier nå innholdet i nettleserens adresselinje, og lim inn innholdet i URL-feltet nedenfor. Erstatt teststrengen din med {q}. For eksempel, hvis du søker etter casino på Netflix, leser dets adresselinje https://www.netflix.com/search?q=Casino - Now copy this entire string and paste it in the URL field below. - Then replace casino with {q}. - Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} + Kopier nå hele strengen og lim den inn i URL-feltet nedenfor. + Bytte deretter kasino med {q}. + dvs. den generiske formelen for et søk på Netflix er https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard - Title + Tittel Status - Select Icon - Icon - Cancel - Invalid web search - Please enter a title - Please enter an action keyword - Please enter a URL - Action keyword already exists, please enter a different one - Success - Hint: You do not need to place custom images in this directory, if Flow's version is updated they will be lost. Flow will automatically copy any images outside of this directory across to WebSearch's custom image location. + Velg ikon + Ikon + Avbryt + Ugyldig nettsøk + Vennligst angi en tittel + Angi et nøkkelord for handlingen + Angi en nettadresse + Nøkkelord for handlingen eksisterer allerede, velg et annet + Vellykket + Tips: du trenger ikke å plassere egendefinerte bilder i denne katalogen, dersom versjonen av Flow blir oppdatert vil de gå tapt. Flow vil automatisk kopiere bilder utenfor denne katalogen over til WebSearch sin egendefinerte bildeplassering. - Web Searches - Allows to perform web searches + Nettbaserte søk + Tillater å utføre nettsøk diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml index fb6fd4353..a48d99487 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/nl.xaml @@ -29,7 +29,8 @@ Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - + URL kopiëren + Zoek-URL kopiëren naar klembord Title diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml index ac906df46..4f702d4a7 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pl.xaml @@ -1,35 +1,36 @@  - Search Source Setting - Open search in: - New Window - New Tab - Set browser from path: - Choose + Ustawienia wyszukiwania źródła + Otwórz wyszukiwanie w: + Nowe okno + Nowa zakładka + Ustaw przeglądarkę ze ścieżki: + Wybierz Usuń Edytuj Dodaj - Enabled - Enabled - Disabled - Confirm + Aktywny + Aktywny + Wyłączony + Potwierdź Wyzwalacz Adres URL Szukaj Pokazuj podpowiedzi wyszukiwania - Autocomplete Data from: + Autouzupełnianie danych z: Musisz wybrać coś z listy Czy jesteś pewien że chcesz usunąć {0}? - If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads - https://www.netflix.com/search?q=Casino + Jeśli chcesz dodać wyszukiwanie dla określonej strony internetowej do Flow, najpierw wprowadź przykładowy ciąg tekstowy w pasku wyszukiwania tej strony i uruchom wyszukiwanie. Teraz skopiuj zawartość paska adresu przeglądarki i wklej ją w polu URL poniżej. Zastąp swój ciąg testowy symbolem {q}. Na przykład, jeśli wyszukujesz słowo "kasyno" na Netflix, pasek adresu przeglądarki wyświetla + https://www.netflix.com/search?q=kasyno - Now copy this entire string and paste it in the URL field below. - Then replace casino with {q}. - Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} + Teraz skopiuj cały ten ciąg i wklej go w pole URL poniżej. + Następnie zastąp "kasyno" symbolem {q}. + W ten sposób ogólna formuła wyszukiwania na Netflix to https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard Tytuł @@ -43,7 +44,7 @@ Musisz wpisać adres URL Ten wyzwalacz jest już używany, musisz wybrać inny Sukces - Hint: You do not need to place custom images in this directory, if Flow's version is updated they will be lost. Flow will automatically copy any images outside of this directory across to WebSearch's custom image location. + Wskazówka: Nie musisz umieszczać niestandardowych obrazów w tym katalogu, ponieważ zostaną one utracone w przypadku aktualizacji wersji Flow. Flow automatycznie skopiuje wszystkie obrazy spoza tego katalogu do lokalizacji niestandardowych obrazów WebSearch. Wyszukiwarka WWW Szybkie wyszukiwanie na stronach WWW diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml index b2dedeb60..d4135c795 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-br.xaml @@ -29,7 +29,8 @@ Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard Title diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml index 56d65e849..16969dac7 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/pt-pt.xaml @@ -29,7 +29,8 @@ Assim, a fórmula genérica de uma pesquisa na Netflix é https://www.netflix.com/search?q={q} - + Copiar URL + Copiar URL para a área de transferência Título diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml index fab878992..ea163da7c 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/ru.xaml @@ -5,8 +5,8 @@ Open search in: New Window New Tab - Set browser from path: - Choose + Установить браузер по пути: + Выберите Удалить Редактировать Добавить @@ -28,8 +28,8 @@ Then replace casino with {q}. Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - - + Скопировать URL-адрес + Скопировать URL поиска в буфер обмена Title diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml index e23d12a16..44b765c58 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sk.xaml @@ -29,7 +29,8 @@ Všeobecný vzorec pre vyhľadávanie na Netflix je teda https://www.netflix.com/search?q={q} - + Kopírovať URL + Kopírovať URL vyhľadávanie do schránky Názov diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml index 54ee24376..5f1803655 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/sr.xaml @@ -29,7 +29,8 @@ Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard Title diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml index 05f3de095..1506b753b 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/tr.xaml @@ -29,7 +29,8 @@ Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard Başlık diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml index 87419023b..beb085d28 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/uk-UA.xaml @@ -29,7 +29,8 @@ Таким чином, загальна формула для пошуку на Netflix має вигляд https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard Назва diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/vi.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/vi.xaml new file mode 100644 index 000000000..e3105283f --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/vi.xaml @@ -0,0 +1,52 @@ + + + + Cài đặt nguồn tìm kiếm + Mở tìm kiếm + Cửa sổ mới + Tab mới + Đặt trình duyệt từ đường dẫn: + Chọn + Xóa + Sửa + Thêm + Đã bật + Đã bật + Vô hiệu hóa + Xác nhận + Từ khóa hành động + Địa chỉ URL + Tìm kiếm + Sử dụng Tự động hoàn thành truy vấn tìm kiếm: + Tự động hoàn thành dữ liệu từ: + Vui lòng chọn tìm kiếm trên web + Bạn có chắc chắn muốn xóa {0} không? + If you want to add a search for a particular website to Flow, first enter a dummy text string in the search bar of that website, and launch the search. Now copy the contents of the browser's address bar, and paste it in the URL field below. Replace your test string with {q}. For example, if you search for casino on Netflix, its address bar reads + https://www.netflix.com/search?q=Casino + + Now copy this entire string and paste it in the URL field below. + Then replace casino with {q}. + Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} + + + Copy URL + Copy search URL to clipboard + + + Tiêu đề + Trạng thái + Chọn Biểu tượng + Biểu tượng + Hủy + Tìm kiếm trên web không hợp lệ + Vui lòng nhập tiêu đề + Vui lòng nhập từ khóa hành động + Hãy nhập URL + Từ khóa hành động đã tồn tại, vui lòng nhập một từ khóa khác + Thành công + Gợi ý: Bạn không cần đặt hình ảnh tùy chỉnh trong thư mục này, nếu phiên bản của Flow được cập nhật, chúng sẽ bị mất. Flow sẽ tự động sao chép mọi hình ảnh bên ngoài thư mục này sang vị trí hình ảnh tùy chỉnh của WebSearch. + + Tìm kiếm Web + Cho phép thực hiện tìm kiếm trên web + + diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-cn.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-cn.xaml index cd05cf7b8..d3df223cc 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-cn.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-cn.xaml @@ -29,7 +29,8 @@ 那么 Netflix 搜索的表达式就是 https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard 标题 diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml index d50d65867..eb58a4ec0 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Languages/zh-tw.xaml @@ -29,7 +29,8 @@ Thus, the generic formula for a search on Netflix is https://www.netflix.com/search?q={q} - + Copy URL + Copy search URL to clipboard 標題 diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs index 39aa1738f..ce53c7da5 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/Main.cs @@ -11,9 +11,9 @@ using Flow.Launcher.Plugin.SharedCommands; namespace Flow.Launcher.Plugin.WebSearch { - public class Main : IAsyncPlugin, ISettingProvider, IPluginI18n, IResultUpdated + public class Main : IAsyncPlugin, ISettingProvider, IPluginI18n, IResultUpdated, IContextMenu { - private PluginInitContext _context; + internal static PluginInitContext _context; private Settings _settings; private SettingsViewModel _viewModel; @@ -76,7 +76,8 @@ namespace Flow.Launcher.Plugin.WebSearch _context.API.OpenUrl(searchSource.Url.Replace("{q}", Uri.EscapeDataString(keyword))); return true; - } + }, + ContextData = searchSource.Url.Replace("{q}", Uri.EscapeDataString(keyword)), }; results.Add(result); @@ -139,11 +140,31 @@ namespace Flow.Launcher.Plugin.WebSearch _context.API.OpenUrl(searchSource.Url.Replace("{q}", Uri.EscapeDataString(o))); return true; - } + }, + ContextData = searchSource.Url.Replace("{q}", Uri.EscapeDataString(o)), }); return resultsFromSuggestion; } + public List LoadContextMenus(Result selected) + { + if (selected?.ContextData == null || selected.ContextData is not string) return new List(); + return new List() { + new Result + { + Title = _context.API.GetTranslation("flowlauncher_plugin_websearch_copyurl_title"), + SubTitle = _context.API.GetTranslation("flowlauncher_plugin_websearch_copyurl_subtitle"), + IcoPath = "Images/copylink.png", + Action = c => + { + _context.API.CopyToClipboard(selected.ContextData as string); + + return true; + } + }, + }; + } + public Task InitAsync(PluginInitContext context) { return Task.Run(Init); diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml.cs index 60863ee82..a3e5630c2 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceSetting.xaml.cs @@ -55,17 +55,17 @@ namespace Flow.Launcher.Plugin.WebSearch if (string.IsNullOrEmpty(_searchSource.Title)) { var warning = _api.GetTranslation("flowlauncher_plugin_websearch_input_title"); - MessageBox.Show(warning); + _context.API.ShowMsgBox(warning); } else if (string.IsNullOrEmpty(_searchSource.Url)) { var warning = _api.GetTranslation("flowlauncher_plugin_websearch_input_url"); - MessageBox.Show(warning); + _context.API.ShowMsgBox(warning); } else if (string.IsNullOrEmpty(_searchSource.ActionKeyword)) { var warning = _api.GetTranslation("flowlauncher_plugin_websearch_input_action_keyword"); - MessageBox.Show(warning); + _context.API.ShowMsgBox(warning); } else if (_action == Action.Add) { @@ -92,7 +92,7 @@ namespace Flow.Launcher.Plugin.WebSearch else { var warning = _api.GetTranslation("newActionKeywordsHasBeenAssigned"); - MessageBox.Show(warning); + _context.API.ShowMsgBox(warning); } } @@ -113,7 +113,7 @@ namespace Flow.Launcher.Plugin.WebSearch else { var warning = _api.GetTranslation("newActionKeywordsHasBeenAssigned"); - MessageBox.Show(warning); + _context.API.ShowMsgBox(warning); } if (!string.IsNullOrEmpty(selectedNewIconImageFullPath)) @@ -138,7 +138,7 @@ namespace Flow.Launcher.Plugin.WebSearch if (!string.IsNullOrEmpty(selectedNewIconImageFullPath)) { if (_viewModel.ShouldProvideHint(selectedNewIconImageFullPath)) - MessageBox.Show(_api.GetTranslation("flowlauncher_plugin_websearch_iconpath_hint")); + _context.API.ShowMsgBox(_api.GetTranslation("flowlauncher_plugin_websearch_iconpath_hint")); imgPreviewIcon.Source = await _viewModel.LoadPreviewIconAsync(selectedNewIconImageFullPath); } diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceViewModel.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceViewModel.cs index 105e7dd68..9c5e81cb5 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceViewModel.cs +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SearchSourceViewModel.cs @@ -41,7 +41,7 @@ namespace Flow.Launcher.Plugin.WebSearch #if DEBUG throw; #else - MessageBox.Show(string.Format("Copying the selected image file to {0} has failed, changes will now be reverted", destinationFileNameFullPath)); + Main._context.API.ShowMsgBox(string.Format("Copying the selected image file to {0} has failed, changes will now be reverted", destinationFileNameFullPath)); UpdateIconAttributes(selectedSearchSource, fullPathToOriginalImage); #endif } diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs index 7caa5beb3..739bc9d6b 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/SettingsControl.xaml.cs @@ -1,4 +1,4 @@ -using System.Windows; +using System.Windows; using System.Windows.Controls; using Flow.Launcher.Core.Plugin; using System.ComponentModel; @@ -36,7 +36,7 @@ namespace Flow.Launcher.Plugin.WebSearch var warning = _context.API.GetTranslation("flowlauncher_plugin_websearch_delete_warning"); var formated = string.Format(warning, selected.Title); - var result = MessageBox.Show(formated, string.Empty, MessageBoxButton.YesNo); + var result = _context.API.ShowMsgBox(formated, string.Empty, MessageBoxButton.YesNo); if (result == MessageBoxResult.Yes) { var id = _context.CurrentPluginMetadata.ID; diff --git a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json index 12e0566f9..0314ddfdb 100644 --- a/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.WebSearch/plugin.json @@ -26,7 +26,7 @@ "Name": "Web Searches", "Description": "Provide the web search ability", "Author": "qianlifeng", - "Version": "3.0.7", + "Version": "3.1.3", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.WebSearch.dll", diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj index 47ab3b2ba..73fcd9f83 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Flow.Launcher.Plugin.WindowsSettings.csproj @@ -9,6 +9,7 @@ prompt en-US enable + en @@ -68,4 +69,4 @@ - \ No newline at end of file + diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ar-SA.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ar-SA.resx index 53715bf23..f98ae075d 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ar-SA.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.ar-SA.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - About + حول Area System @@ -126,66 +126,66 @@ File name, Should not translated - Accessibility Options + خيارات الوصول Area Control Panel (legacy settings) - Accessory apps + تطبيقات الإضافات Area Privacy - Access work or school + الوصول إلى العمل أو المدرسة Area UserAccounts - Account info + معلومات الحساب Area Privacy - Accounts + الحسابات Area SurfaceHub - Action Center + مركز العمل Area Control Panel (legacy settings) - Activation + التفعيل Area UpdateAndSecurity - Activity history + سجل النشاطات Area Privacy - Add Hardware + إضافة أجهزة Area Control Panel (legacy settings) - Add/Remove Programs + إضافة/إزالة البرامج Area Control Panel (legacy settings) - Add your phone + إضافة هاتفك Area Phone - Administrative Tools + أدوات إدارية Area System - Advanced display settings + إعدادات العرض المتقدمة Area System, only available on devices that support advanced display options - Advanced graphics + الرسومات المتقدمة - Advertising ID + معرف الإعلانات Area Privacy, Deprecated in Windows 10, version 1809 and later - Airplane mode + وضع الطيران Area NetworkAndInternet @@ -193,40 +193,40 @@ Means the key combination "Tabulator+Alt" on the keyboard - Alternative names + أسماء بديلة - Animations + الرسوم المتحركة - App color + لون التطبيق - App diagnostics + تشخيص التطبيق Area Privacy - App features + ميزات التطبيق Area Apps - App + تطبيق Short/modern name for application - Apps and Features + التطبيقات والميزات Area Apps - System settings + إعدادات النظام Type of the setting is a "Modern Windows settings". We use the same term as used in start menu search at the moment. - Apps for websites + تطبيقات للمواقع Area Apps - App volume and device preferences + تفضيلات حجم التطبيق والجهاز Area System, Added in Windows 10, version 1903 @@ -234,162 +234,162 @@ File name, Should not translated - Area + المنطقة Mean the settings area or settings category - Accounts + الحسابات - Administrative Tools + الأدوات الإدارية Area Control Panel (legacy settings) - Appearance and Personalization + المظهر والتخصيص - Apps + التطبيقات - Clock and Region + الساعة والمنطقة - Control Panel + لوحة التحكم - Cortana + كورتانا - Devices + الأجهزة - Ease of access + سهولة الوصول - Extras + إضافات - Gaming + الألعاب - Hardware and Sound + الأجهزة والصوت - Home page + الصفحة الرئيسية - Mixed reality + الواقع المختلط - Network and Internet + الشبكة والإنترنت - Personalization + التخصيص - Phone + الهاتف - Privacy + الخصوصية - Programs + البرامج - SurfaceHub + مركز Surface - System + النظام - System and Security + النظام والأمان - Time and language + الوقت واللغة - Update and security + التحديث والأمان - User accounts + حسابات المستخدمين - Assigned access + الوصول المخصص - Audio + الصوت Area EaseOfAccess - Audio alerts + تنبيهات الصوت - Audio and speech + الصوت والنطق Area MixedReality, only available if the Mixed Reality Portal app is installed. - Automatic file downloads + تنزيل الملفات التلقائي Area Privacy - AutoPlay + التشغيل التلقائي Area Device - Background + الخلفية Area Personalization - Background Apps + التطبيقات الخلفية Area Privacy - Backup + النسخ الاحتياطي Area UpdateAndSecurity - Backup and Restore + النسخ الاحتياطي والاستعادة Area Control Panel (legacy settings) - Battery Saver + موفر البطارية Area System, only available on devices that have a battery, such as a tablet - Battery Saver settings + إعدادات موفر البطارية Area System, only available on devices that have a battery, such as a tablet - Battery saver usage details + تفاصيل استخدام موفر البطارية - Battery use + استخدام البطارية Area System, only available on devices that have a battery, such as a tablet - Biometric Devices + الأجهزة البيومترية Area Control Panel (legacy settings) - BitLocker Drive Encryption + تشفير محرك BitLocker Area Control Panel (legacy settings) - Blue light + الضوء الأزرق - Bluetooth + البلوتوث Area Device - Bluetooth devices + أجهزة البلوتوث Area Control Panel (legacy settings) - Blue-yellow + أزرق-أصفر - Bopomofo IME + بوپوموفو IME Area TimeAndLanguage @@ -397,145 +397,145 @@ Should not translated - Broadcasting + البث Area Gaming - Calendar + التقويم Area Privacy - Call history + سجل المكالمات Area Privacy - calling + الاتصال - Camera + الكاميرا Area Privacy - Cangjie IME + كانجيي IME Area TimeAndLanguage - Caps Lock + قفل الأحرف الكبيرة Mean the "Caps Lock" key - Cellular and SIM + الهاتف الجوال وSIM Area NetworkAndInternet - Choose which folders appear on Start + اختر المجلدات التي تظهر عند البدء Area Personalization - Client service for NetWare + خدمة العميل لـNetWare Area Control Panel (legacy settings) - Clipboard + الحافظة Area System - Closed captions + التسميات التوضيحية المغلقة Area EaseOfAccess - Color filters + مرشحات الألوان Area EaseOfAccess - Color management + إدارة الألوان Area Control Panel (legacy settings) - Colors + الألوان Area Personalization - Command + الأمر The command to direct start a setting - Connected Devices + الأجهزة المتصلة Area Device - Contacts + جهات الاتصال Area Privacy - Control Panel + لوحة التحكم Type of the setting is a "(legacy) Control Panel setting" - Copy command + أمر النسخ - Core Isolation + عزل النواة Means the protection of the system core - Cortana + كورتانا Area Cortana - Cortana across my devices + كورتانا عبر أجهزتي Area Cortana - Cortana - Language + كورتانا - اللغة Area Cortana - Credential manager + مدير الاعتمادات Area Control Panel (legacy settings) - Crossdevice + عبر الأجهزة - Custom devices + الأجهزة المخصصة - Dark color + لون داكن - Dark mode + الوضع الداكن - Data usage + استخدام البيانات Area NetworkAndInternet - Date and time + التاريخ والوقت Area TimeAndLanguage - Default apps + التطبيقات الافتراضية Area Apps - Default camera + الكاميرا الافتراضية Area Device - Default location + الموقع الافتراضي Area Control Panel (legacy settings) - Default programs + البرامج الافتراضية Area Control Panel (legacy settings) - Default Save Locations + مواقع الحفظ الافتراضية Area System - Delivery Optimization + تحسين التسليم Area UpdateAndSecurity @@ -543,15 +543,15 @@ File name, Should not translated - Desktop themes + سمات سطح المكتب Area Control Panel (legacy settings) - deuteranopia + عمى الألوان الأحمر-الأخضر Medical: Mean you don't can see red colors - Device manager + إدارة الأجهزة Area Control Panel (legacy settings) @@ -563,23 +563,23 @@ Should not translated - Dial-up + الاتصال الهاتفي Area NetworkAndInternet - Direct access + الوصول المباشر Area NetworkAndInternet, only available if DirectAccess is enabled - Direct open your phone + افتح هاتفك مباشرة Area EaseOfAccess - Display + عرض Area EaseOfAccess - Display properties + خصائص العرض Area Control Panel (legacy settings) @@ -587,74 +587,74 @@ Should not translated - Documents + مستندات Area Privacy - Duplicating my display + تكرار شاشتي Area System - During these hours + خلال هذه الساعات Area System - Ease of access center + مركز سهولة الوصول Area Control Panel (legacy settings) - Edition + الإصدار Means the "Windows Edition" - Email + البريد الإلكتروني Area Privacy - Email and app accounts + حسابات البريد الإلكتروني والتطبيقات Area UserAccounts - Encryption + التشفير Area System - Environment + البيئة Area MixedReality, only available if the Mixed Reality Portal app is installed. - Ethernet + إيثرنت Area NetworkAndInternet - Exploit Protection + حماية الاستغلال - Extras + الإضافات Area Extra, , only used for setting of 3rd-Party tools - Eye control + التحكم بالعين Area EaseOfAccess - Eye tracker + متعقب العين Area Privacy, requires eyetracker hardware - Family and other people + العائلة وأشخاص آخرون Area UserAccounts - Feedback and diagnostics + التعليقات والتشخيصات Area Privacy - File system + نظام الملفات Area Privacy - FindFast + البحث السريع Area Control Panel (legacy settings) @@ -662,46 +662,46 @@ File name, Should not translated - Find My Device + العثور على جهازي Area UpdateAndSecurity - Firewall + جدار الحماية - Focus assist - Quiet hours + مساعد التركيز - ساعات الهدوء Area System - Focus assist - Quiet moments + مساعد التركيز - لحظات الهدوء Area System - Folder options + خيارات المجلد Area Control Panel (legacy settings) - Fonts + الخطوط Area EaseOfAccess - For developers + للمطورين Area UpdateAndSecurity - Game bar + شريط اللعبة Area Gaming - Game controllers + وحدات تحكم اللعبة Area Control Panel (legacy settings) - Game DVR + مسجل اللعبة Area Gaming - Game Mode + وضع اللعب Area Gaming @@ -709,65 +709,65 @@ Should not translated - General + عام Area Privacy - Get programs + احصل على البرامج Area Control Panel (legacy settings) - Getting started + البدء Area Control Panel (legacy settings) - Glance + لمحة Area Personalization, Deprecated in Windows 10, version 1809 and later - Graphics settings + إعدادات الرسومات Area System - Grayscale + التدرج الرمادي - Green week + الأسبوع الأخضر Mean you don't can see green colors - Headset display + عرض سماعة الرأس Area MixedReality, only available if the Mixed Reality Portal app is installed. - High contrast + تباين عالي Area EaseOfAccess - Holographic audio + صوت مجسم - Holographic Environment + بيئة مجسمة - Holographic Headset + سماعة رأس مجسمة - Holographic Management + إدارة المجسمات - Home group + مجموعة المنزل Area Control Panel (legacy settings) - ID + معرف MEans The "Windows Identifier" - Image + صورة - Indexing options + خيارات الفهرسة Area Control Panel (legacy settings) @@ -775,15 +775,15 @@ File name, Should not translated - Infrared + الأشعة تحت الحمراء Area Control Panel (legacy settings) - Inking and typing + الكتابة والرسم Area Privacy - Internet options + خيارات الإنترنت Area Control Panel (legacy settings) @@ -791,17 +791,17 @@ File name, Should not translated - Inverted colors + الألوان المعكوسة IP Should not translated - Isolated Browsing + تصفح معزول - Japan IME settings + إعدادات IME اليابانية Area TimeAndLanguage, available if the Microsoft Japan input method editor is installed @@ -809,7 +809,7 @@ File name, Should not translated - Joystick properties + خصائص عصا التحكم Area Control Panel (legacy settings) @@ -817,39 +817,39 @@ Should not translated - Keyboard + لوحة المفاتيح Area EaseOfAccess - Keypad + لوحة الأرقام - Keys + المفاتيح - Language + اللغة Area TimeAndLanguage - Light color + لون الضوء - Light mode + وضع الضوء - Location + الموقع Area Privacy - Lock screen + شاشة القفل Area Personalization - Magnifier + مكبر الصوت Area EaseOfAccess - Mail - Microsoft Exchange or Windows Messaging + البريد - Microsoft Exchange أو Windows Messaging Area Control Panel (legacy settings) @@ -857,26 +857,26 @@ File name, Should not translated - Manage known networks + إدارة الشبكات المعروفة Area NetworkAndInternet - Manage optional features + إدارة الميزات الاختيارية Area Apps - Messaging + الرسائل Area Privacy - Metered connection + اتصال محدود - Microphone + الميكروفون Area Privacy - Microsoft Mail Post Office + مكتب بريد Microsoft Area Control Panel (legacy settings) @@ -888,10 +888,10 @@ File name, Should not translated - Mobile devices + الأجهزة المحمولة - Mobile hotspot + نقطة اتصال محمولة Area NetworkAndInternet @@ -899,46 +899,46 @@ File name, Should not translated - Mono + أحادي - More details + المزيد من التفاصيل Area Cortana - Motion + حركة Area Privacy - Mouse + الفأرة Area EaseOfAccess - Mouse and touchpad + الفأرة ولوحة اللمس Area Device - Mouse, Fonts, Keyboard, and Printers properties + خصائص الفأرة والخطوط ولوحة المفاتيح والطابعات Area Control Panel (legacy settings) - Mouse pointer + مؤشر الفأرة Area EaseOfAccess - Multimedia properties + خصائص الوسائط المتعددة Area Control Panel (legacy settings) - Multitasking + تعدد المهام Area System - Narrator + الراوي Area EaseOfAccess - Navigation bar + شريط التنقل Area Personalization @@ -950,27 +950,27 @@ File name, Should not translated - Network + الشبكة Area NetworkAndInternet - Network and sharing center + مركز الشبكة والمشاركة Area Control Panel (legacy settings) - Network connection + اتصال الشبكة Area Control Panel (legacy settings) - Network properties + خصائص الشبكة Area Control Panel (legacy settings) - Network Setup Wizard + معالج إعداد الشبكة Area Control Panel (legacy settings) - Network status + حالة الشبكة Area NetworkAndInternet @@ -978,24 +978,24 @@ Area NetworkAndInternet - NFC Transactions + معاملات NFC "NFC should not translated" - Night light + ضوء الليل - Night light settings + إعدادات ضوء الليل Area System - Note + ملاحظة - Only available when you have connected a mobile device to your device. + متاح فقط عند توصيل جهاز محمول بجهازك. - Only available on devices that support advanced graphics options. + متاح فقط على الأجهزة التي تدعم خيارات الرسوميات المتقدمة. Only available on devices that have a battery, such as a tablet. @@ -1117,7 +1117,7 @@ Area Control Panel (legacy settings) - Password + كلمة المرور password.cpl @@ -1572,7 +1572,7 @@ Area Control Panel (legacy settings) - Version + الإصدار Means The "Windows Version" diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx index 31443560c..dcc74d520 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.de-DE.resx @@ -126,7 +126,7 @@ File name, Should not translated - Barrierefreiheitsoptionen + Optionen für Barrierefreiheit Area Control Panel (legacy settings) @@ -134,15 +134,15 @@ Area Privacy - Zugriff auf Geschäft, Schule oder Uni + Zugriff auf Arbeit oder Schule Area UserAccounts - Kontoinfo + Account-Info Area Privacy - Konten + Accounts Area SurfaceHub @@ -154,7 +154,7 @@ Area UpdateAndSecurity - Aktivitätsverlauf + Aktivitätshistorie Area Privacy @@ -166,11 +166,11 @@ Area Control Panel (legacy settings) - Ihr Smartphone hinzufügen + Ihr Phone hinzufügen Area Phone - Verwaltungstools + Administrative Tools Area System @@ -178,10 +178,10 @@ Area System, only available on devices that support advanced display options - Erweiterte Grafik + Erweiterte Grafiken - Anzeigen-ID + Werbe-ID Area Privacy, Deprecated in Windows 10, version 1809 and later @@ -189,7 +189,7 @@ Area NetworkAndInternet - ALT+TAB + Alt+Tab Means the key combination "Tabulator+Alt" on the keyboard @@ -226,7 +226,7 @@ Area Apps - App-Volume und Geräteeinstellungen + App-Lautstärke und Gerätevoreinstellungen Area System, Added in Windows 10, version 1903 @@ -238,14 +238,14 @@ Mean the settings area or settings category - Konten + Accounts - Verwaltungstools + Administrative Tools Area Control Panel (legacy settings) - Darstellung und Personalisierung + Erscheinungsbild und Personalisierung Apps @@ -254,7 +254,7 @@ Uhr und Region - Control Panel + Systemsteuerung Cortana @@ -287,16 +287,16 @@ Personalisierung - Smartphone + Phone - Datenschutz + Privatsphäre Programme - SurfaceHub + Oberflächenhub System @@ -311,7 +311,7 @@ Update und Sicherheit - Benutzerkonten + Benutzer-Accounts Zugewiesener Zugriff @@ -321,7 +321,7 @@ Area EaseOfAccess - Audiowarnungen + Audio-Alarme Audio und Sprache @@ -332,7 +332,7 @@ Area Privacy - Automatische Wiedergabe + AutoPlay Area Device @@ -344,7 +344,7 @@ Area Privacy - Sicherung + Backup Area UpdateAndSecurity @@ -356,11 +356,11 @@ Area System, only available on devices that have a battery, such as a tablet - Einstellungen für den Akkusparmodus + Einstellungen für Akkusparmodus Area System, only available on devices that have a battery, such as a tablet - Nutzungsdetails für den Akkusparmodus + Nutzungsdetails für Akkusparmodus Akkunutzung @@ -375,7 +375,7 @@ Area Control Panel (legacy settings) - Blau (hell) + Blaues Licht Bluetooth @@ -397,7 +397,7 @@ Should not translated - Übertragungen + Broadcasting Area Gaming @@ -405,7 +405,7 @@ Area Privacy - Anrufliste + Anrufhistorie Area Privacy @@ -420,15 +420,15 @@ Area TimeAndLanguage - FESTSTELLTASTE + Feststelltaste Mean the "Caps Lock" key - Mobilfunknetz und SIM-Karte + Mobilfunk und SIM Area NetworkAndInternet - Wählen Sie aus, welche Ordner im Startmenü angezeigt werden + Wählen Sie, welche Ordner im Start erscheinen Area Personalization @@ -464,11 +464,11 @@ Area Device - Kontaktpersonen + Kontakte Area Privacy - Control Panel + Systemsteuerung Type of the setting is a "(legacy) Control Panel setting" @@ -483,7 +483,7 @@ Area Cortana - Cortana auf meinen Geräten + Cortana über meine Geräte Area Cortana @@ -511,7 +511,7 @@ Area NetworkAndInternet - Datum und Uhrzeit + Datum und Zeit Area TimeAndLanguage @@ -543,11 +543,11 @@ File name, Should not translated - Desktopdesigns + Desktop-Themes Area Control Panel (legacy settings) - deuteranopia + Farbenfehlsichtigkeit Medical: Mean you don't can see red colors @@ -571,7 +571,7 @@ Area NetworkAndInternet, only available if DirectAccess is enabled - Smartphone direkt öffnen + Ihr Phone direkt öffnen Area EaseOfAccess @@ -599,7 +599,7 @@ Area System - Erleichterte Bedienung Center + Center für erleichterte Bedienung Area Control Panel (legacy settings) @@ -607,11 +607,11 @@ Means the "Windows Edition" - E-Mail-Adresse + E-Mail Area Privacy - E-Mail- und App-Konten + E-Mail- und App-Accounts Area UserAccounts @@ -654,7 +654,7 @@ Area Privacy - FindFast + Schnell finden Area Control Panel (legacy settings) @@ -662,18 +662,18 @@ File name, Should not translated - Mein Gerät suchen. + Mein Gerät finden Area UpdateAndSecurity Firewall - Benachrichtigungsassistent – ruhige Stunden + Fokushilfe - Ruhige Stunden Area System - Benachrichtigungsassistent – ruhige Momente + Fokushilfe - Stille Momente Area System @@ -697,7 +697,7 @@ Area Control Panel (legacy settings) - Game DVR + DVR Area Gaming @@ -721,7 +721,7 @@ Area Control Panel (legacy settings) - Ansicht "Schneller Blick" + Kurzer Blick Area Personalization, Deprecated in Windows 10, version 1809 and later @@ -744,7 +744,7 @@ Area EaseOfAccess - Holographische Audiodaten + Holographisches Audio Holographische Umgebung @@ -767,7 +767,7 @@ Bild - Indizierungsoptionen + Indexierungsoptionen Area Control Panel (legacy settings) @@ -794,11 +794,11 @@ Invertierte Farben - IP-Adresse + IP Should not translated - Isoliertes Browsen + Isoliertes Browsing Japanische IME-Einstellungen @@ -824,7 +824,7 @@ Keypad - Schlüssel + Tasten Sprache @@ -834,22 +834,22 @@ Helle Farbe - Lichtmodus + Heller Modus - Speicherort + Ort Area Privacy - Sperrbildschirm + Bildschirm sperren Area Personalization - Bildschirmlupe + Lupe Area EaseOfAccess - E-Mail – Microsoft Exchange oder Windows-Nachrichten + Mail - Microsoft Exchange oder Windows Messaging Area Control Panel (legacy settings) @@ -865,7 +865,7 @@ Area Apps - Messaging + Nachrichten Area Privacy @@ -876,7 +876,7 @@ Area Privacy - Microsoft Mail Post Office + Microsoft Mail Post Area Control Panel (legacy settings) @@ -902,7 +902,7 @@ Mono - Weitere Details + Mehr Details Area Cortana @@ -934,7 +934,7 @@ Area System - Sprachausgabe + Erzähler Area EaseOfAccess @@ -954,7 +954,7 @@ Area NetworkAndInternet - Netzwerk- und Freigabecenter + Netzwerk- und Sharing-Center Area Control Panel (legacy settings) @@ -995,13 +995,13 @@ Nur verfügbar, wenn Sie ein mobiles Gerät mit Ihrem Gerät verbunden haben. - Nur auf Geräten verfügbar, die erweiterte Grafikoptionen unterstützen. + Nur verfügbar auf Geräten, die erweiterte Grafikoptionen unterstützen. - Nur auf Geräten mit Akku (z. B. Tablet) verfügbar. + Nur verfügbar auf Geräten, die einen Akku haben, wie z. B. ein Tablet. - Veraltet in Windows 10, Version 1809 (Build 17763) und höher. + Veraltet in Windows 10, Version 1809 (Build 17763) und später. Nur verfügbar, wenn "Wählen" gekoppelt ist. @@ -1010,28 +1010,28 @@ Nur verfügbar, wenn DirectAccess aktiviert ist. - Nur auf Geräten verfügbar, die erweiterte Anzeigeoptionen unterstützen. + Nur verfügbar auf Geräten, die erweiterte Anzeigeoptionen unterstützen. - Nur vorhanden, wenn der Benutzer für WIP registriert ist. + Nur vorhanden, wenn Benutzer in WIP eingeschrieben ist. Erfordert Eyetracker-Hardware. - Verfügbar, wenn der Eingabemethoden-Editor von Microsoft Japan installiert ist. + Verfügbar, wenn der Editor für Eingabemethode Microsoft Japan installiert ist. - Verfügbar, wenn der Eingabemethoden-Editor von Microsoft Pinyin installiert ist. + Verfügbar, wenn der Editor für Eingabemethode Microsoft Pinyin installiert ist. - Verfügbar, wenn der Eingabemethoden-Editor von Microsoft Wubi installiert ist. + Verfügbar, wenn der Editor für Eingabemethode Microsoft Wubi installiert ist. Nur verfügbar, wenn die Mixed Reality Portal-App installiert ist. - Nur auf mobilen Geräten verfügbar, und wenn das Unternehmen ein Bereitstellungspaket bereitgestellt hat. + Nur auf Mobiltelefonen verfügbar und wenn das Unternehmen ein Provisioning-Paket bereitgestellt hat. Hinzugefügt in Windows 10, Version 1903 (Build 18362). @@ -1046,13 +1046,13 @@ Nur verfügbar, wenn Touchpad-Hardware vorhanden ist. - Nur verfügbar, wenn das Gerät über einen WLAN-Adapter verfügt. + Nur verfügbar, wenn das Gerät über einen Wi-Fi-Adapter verfügt. - Das Gerät muss Windows Anywhere-fähig sein. + Gerät muss Windows Anywhere-fähig sein. - Nur verfügbar, wenn das Unternehmen ein Bereitstellungspaket bereitgestellt hat. + Nur verfügbar, wenn das Unternehmen ein Provisioning-Paket bereitgestellt hat. Benachrichtigungen @@ -1063,7 +1063,7 @@ Area System - NUM-Sperre + Num-Sperre Mean the "Num Lock" key @@ -1083,7 +1083,7 @@ Area Control Panel (legacy settings) - Offlinedateien + Offline-Dateien Area Control Panel (legacy settings) @@ -1091,11 +1091,11 @@ Area Apps - Offline Karten – Karten herunterladen + Offline-Karten – Karten herunterladen Area Apps - Auf dem Bildschirm + Auf Bildschirm Betriebssystem @@ -1106,14 +1106,14 @@ Area Privacy - Weitere Optionen + Andere Optionen Area EaseOfAccess Andere Benutzer - Jugendschutz + Elterliche Kontrolle Area Control Panel (legacy settings) @@ -1124,7 +1124,7 @@ File name, Should not translated - Kennworteigenschaften + Passworteigenschaften Area Control Panel (legacy settings) @@ -1140,15 +1140,15 @@ Area Device - Personen in meiner Umgebung + Leute in meiner Nähe Area Control Panel (legacy settings) - Leistungsdaten und Tools + Leistungsinformationen und Tools Area Control Panel (legacy settings) - Berechtigungen und Verlauf + Berechtigungen und Historie Area Cortana @@ -1156,15 +1156,15 @@ Area Personalization - Smartphone + Phone Area Phone - Telefon und Modem + Phone und Modem Area Control Panel (legacy settings) - Telefon und Modem – Optionen + Phone und Modem – Optionen Area Control Panel (legacy settings) @@ -1203,10 +1203,10 @@ Area Gaming - Plug-In zum Suchen nach Windows-Einstellungen + Plug-in zum Suchen nach Windows-Einstellungen - Windows Settings + Windows-Einstellungen Energieeinstellungen und Ruhemodus @@ -1240,7 +1240,7 @@ Area Control Panel (legacy settings) - Auftragsverarbeiter + Prozessor Programme und Features @@ -1251,7 +1251,7 @@ Area System - protanopia + Protanopie Medical: Mean you don't can see green colors @@ -1271,7 +1271,7 @@ Area TimeAndLanguage - Spiel mit ruhigen Momenten + Stille Momente-Spiel Radios @@ -1332,7 +1332,7 @@ Area Control Panel (legacy settings) - schedtasks + sedtasks File name, Should not translated @@ -1343,7 +1343,7 @@ Area Control Panel (legacy settings) - Automatische Ausrichtung + Bildschirmrotation Area System @@ -1366,11 +1366,11 @@ Should not translated - Security Center + Sicherheitscenter Area Control Panel (legacy settings) - Sicherheitsauftragsverarbeiter + Sicherheitsprozessor Sitzungsbereinigung @@ -1381,18 +1381,18 @@ Area Home, Overview-page for all areas of settings - Kiosk einrichten + Einen Kiosk einrichten Area UserAccounts - Freigegebene Erfahrungen + Geteilte Erfahrungen Area System - Tastenkombinationen + Shortcuts - WLAN + Wi-Fi dont translate this, is a short term to find entries @@ -1400,7 +1400,7 @@ Area UserAccounts - Anmeldeoptionen – dynamische Sperre + Anmeldeoptionen – Dynamische Sperre Area UserAccounts @@ -1412,7 +1412,7 @@ Area System - Speech + Sprache Area EaseOfAccess @@ -1446,7 +1446,7 @@ Area System - Speicheroptimierung + Speicherbedeutung Area System @@ -1454,11 +1454,11 @@ Example: Area "System" in System settings - Synchronisierungscenter + Sync-Center Area Control Panel (legacy settings) - Einstellungen synchronisieren + Ihre Einstellungen synchronisieren Area UserAccounts @@ -1497,18 +1497,18 @@ Area Personalization - Taskleistenfarbe + Farbe der Taskleiste - Aufgaben + Tasks Area Privacy - Teamkonferenzen + Team-Konferenzen Area SurfaceHub - Teamgeräteverwaltung + Team-Geräteverwaltung Area SurfaceHub @@ -1516,7 +1516,7 @@ Area Control Panel (legacy settings) - Designs + Themes Area Personalization @@ -1544,7 +1544,7 @@ Transparenz - tritanopia + Farbenblindheit (Blau) Medical: Mean you don't can see yellow and blue colors @@ -1552,7 +1552,7 @@ Area UpdateAndSecurity - TruePlay + TruePlaying Area Gaming @@ -1568,7 +1568,7 @@ Area Device - Benutzerkonten + Benutzer-Accounts Area Control Panel (legacy settings) @@ -1602,7 +1602,7 @@ Area NetworkAndInternet - Hintergrundbild + Wallpaper Wärmere Farbe @@ -1612,7 +1612,7 @@ Area Control Panel (legacy settings) - Willkommensseite + Begrüßungsbildschirm Area SurfaceHub @@ -1624,15 +1624,15 @@ Area Device - WLAN + Wi-Fi Area NetworkAndInternet, only available if Wi-Fi calling is enabled - WLAN-Anrufe + WiFi Calling Area NetworkAndInternet, only available if Wi-Fi calling is enabled - WLAN-Einstellungen + Wi-Fi-Einstellungen "Wi-Fi" should not translated @@ -1667,7 +1667,7 @@ Area UserAccounts - Windows-Insider-Programm + Windows Insider-Programm Area UpdateAndSecurity @@ -1675,7 +1675,7 @@ Area Control Panel (legacy settings) - Windows Search + Windows-Suche Area Cortana @@ -1683,7 +1683,7 @@ Area UpdateAndSecurity - Windows Update + Windows-Updates Area UpdateAndSecurity @@ -1691,7 +1691,7 @@ Area UpdateAndSecurity - Windows Update – nach Updates suchen + Windows Update – Nach Updates suchen Area UpdateAndSecurity @@ -1699,15 +1699,15 @@ Area UpdateAndSecurity - Windows Update – optionale Updates anzeigen + Windows Update – Optionale Updates ansehen Area UpdateAndSecurity - Windows Update – Updateverlauf anzeigen + Windows Update – Update-Historie ansehen Area UpdateAndSecurity - Drahtlos + Wireless Arbeitsbereich @@ -1729,7 +1729,7 @@ Area Gaming - Ihre Informationen + Ihre Info Area UserAccounts @@ -1737,40 +1737,40 @@ Mean zooming of things via a magnifier - Change device installation settings + Einstellungen der Geräteinstallation ändern - Turn off background images + Hintergrundbilder ausschalten - Navigation properties + Navigationseigenschaften - Media streaming options + Medien-Streaming-Optionen - Make a file type always open in a specific program + Einen Dateityp immer in einem spezifischen Programm öffnen lassen Change the Narrator’s voice - Find and fix keyboard problems + Tastaturprobleme finden und beheben - Use screen reader + Screenreader verwenden Show which workgroup this computer is on - Change mouse wheel settings + Mausrad-Einstellungen ändern - Manage computer certificates + Computerzertifikate verwalten - Find and fix problems + Probleme finden und beheben Change settings for content received using Tap and send @@ -1782,10 +1782,10 @@ Print the speech reference card - Calibrate display colour + Anzeigefarbe kalibrieren - Manage file encryption certificates + Dateiverschlüsselungszertifikate verwalten View recent messages about your computer @@ -1794,22 +1794,22 @@ Give other users access to this computer - Show hidden files and folders + Ausgeblendete Dateien und Ordner zeigen - Change Windows To Go start-up options + Windows To Go-Startoptionen ändern - See which processes start up automatically when you start Windows + Sehen Sie, welche Prozesse automatisch starten, wenn Sie Windows starten - Tell if an RSS feed is available on a website + Sagen, ob ein RSS-Feed auf einer Website verfügbar ist - Add clocks for different time zones + Uhren für verschiedene Zeitzonen hinzufügen - Add a Bluetooth device + Ein Bluetooth-Gerät hinzufügen Customise the mouse buttons @@ -1818,55 +1818,55 @@ Set tablet buttons to perform certain tasks - View installed fonts + Installierte Schriftarten ansehen Change the way currency is displayed - Edit group policy + Gruppenrichtlinien bearbeiten - Manage browser add-ons + Browser-Add-ons verwalten - Check processor speed + Prozessorgeschwindigkeit überprüfen - Check firewall status + Firewall-Status überprüfen - Send or receive a file + Eine Datei senden oder empfangen - Add or remove user accounts + Benutzerkonten hinzufügen oder entfernen Edit the system environment variables - Manage BitLocker + BitLocker verwalten - Auto-hide the taskbar + Taskleiste automatisch ausblenden - Change sound card settings + Soundkarten-Einstellungen ändern - Make changes to accounts + Änderungen an Accounts vornehmen - Edit local users and groups + Lokale Benutzer und Gruppen bearbeiten - View network computers and devices + Netzwerkcomputer und -geräte ansehen - Install a program from the network + Ein Programm aus dem Netzwerk installieren - View scanners and cameras + Scanner und Kameras ansehen Microsoft IME Register Word (Japanese) @@ -1881,22 +1881,22 @@ Block or allow third-party cookies - Find and fix audio recording problems + Audioaufzeichnungsprobleme finden und beheben - Create a recovery drive + Ein Wiederherstellungslaufwerk erstellen Microsoft New Phonetic Settings - Generate a system health report + Einen Bericht zur Systemgesundheit generieren - Fix problems with your computer + Probleme mit Ihrem Computer beheben - Back up and Restore (Windows 7) + Sichern und Wiederherstellen (Windows 7) Preview, delete, show or hide fonts @@ -1908,19 +1908,19 @@ View reliability history - Access RemoteApp and desktops + Zugriff auf RemoteApp und Desktops - Set up ODBC data sources + ODBC-Datenquellen einrichten - Reset Security Policies + Sicherheitsrichtlinien zurücksetzen - Block or allow pop-ups + Pop-ups blockieren oder erlauben - Turn autocomplete in Internet Explorer on or off + Autovervollständigung im Internet Explorer ein- oder ausschalten Microsoft Pinyin SimpleFast Options @@ -1929,19 +1929,19 @@ Change what closing the lid does - Turn off unnecessary animations + Unnötige Animationen ausschalten - Create a restore point + Einen Wiederherstellungspunkt erstellen - Turn off automatic window arrangement + Automatische Fensteranordnung ausschalten Troubleshooting History - Diagnose your computer's memory problems + Speicherprobleme Ihres Computers diagnostizieren View recommended actions to keep Windows running smoothly @@ -1950,7 +1950,7 @@ Change cursor blink rate - Add or remove programs + Programme hinzufügen oder entfernen Create a password reset disk @@ -1959,10 +1959,10 @@ Configure advanced user profile properties - Start or stop using AutoPlay for all media and devices + AutoPlay für alle Medien und Geräte starten oder stoppen - Change Automatic Maintenance settings + Automatische Wartungseinstellungen ändern Specify single- or double-click to open @@ -1977,40 +1977,40 @@ Allow remote access to your computer - View advanced system settings + Erweiterte Systemeinstellungen ansehen - How to install a program + Wie man ein Programm installiert - Change how your keyboard works + Funktionsweise Ihrer Tastatur ändern Automatically adjust for daylight saving time - Change the order of Windows SideShow gadgets + Reihenfolge der Windows SideShow-Gadgets ändern - Check keyboard status + Tastaturstatus überprüfen - Control the computer without the mouse or keyboard + Steuerung des Computers ohne die Maus oder Tastatur - Change or remove a program + Ein Programm ändern oder entfernen Change multi-touch gesture settings - Set up ODBC data sources (64-bit) + ODBC-Datenquellen (64-Bit) einrichten - Configure proxy server + Proxy-Server konfigurieren - Change your homepage + Ihre Homepage ändern Group similar windows on the taskbar @@ -2019,16 +2019,16 @@ Change Windows SideShow settings - Use audio description for video + Audiobeschreibung für Video verwenden - Change workgroup name + Arbeitsgruppenname ändern Find and fix printing problems - Change when the computer sleeps + Ändern, wann der Computer schläft Set up a virtual private network (VPN) connection @@ -2040,37 +2040,37 @@ Set up a dial-up connection - Set up a connection or network + Eine Verbindung oder Netzwerk einrichten - How to change your Windows password + Wie Sie Ihr Windows-Passwort ändern Make it easier to see the mouse pointer - Set up iSCSI initiator + iSCSI-Initiator einrichten Accommodate low vision - Manage offline files + Offline-Dateien verwalten Review your computer's status and resolve issues - Microsoft ChangJie Settings + Microsoft ChangJie-Einstellungen - Replace sounds with visual cues + Sounds durch visuelle Hinweise ersetzen - Change temporary Internet file settings + Temporäre Internet-Dateieinstellungen ändern - Connect to the Internet + Mit dem Internet verbinden Find and fix audio playback problems @@ -2079,7 +2079,7 @@ Change the mouse pointer display or speed - Back up your recovery key + Ihren Wiederherstellungsschlüssel sichern Save backup copies of your files with File History @@ -2091,25 +2091,25 @@ Change tablet pen settings - Change how your mouse works + Funktionsweise Ihrer Maus ändern - Show how much RAM is on this computer + Zeigen, wie viel RAM auf diesem Computer vorhanden ist - Edit power plan + Energieplan bearbeiten - Adjust system volume + Systemlautstärke anpassen - Defragment and optimise your drives + Ihre Laufwerke defragmentieren und optimieren - Set up ODBC data sources (32-bit) + ODBC-Datenquellen (32-Bit) einrichten - Change Font Settings + Schriftarteinstellungen ändern Magnify portions of the screen using Magnifier @@ -2118,47 +2118,47 @@ Change the file type associated with a file extension - View event logs + Event-Logs ansehen - Manage Windows Credentials + Windows-Anmeldedaten verwalten - Set up a microphone + Ein Mikrofon einrichten - Change how the mouse pointer looks + Ändern, wie der Mauszeiger ausschaut - Change power-saving settings + Energiespareinstellungen ändern - Optimise for blindness + Optimieren für Blindheit - Turn Windows features on or off + Windows-Features ein- oder ausschalten - Show which operating system your computer is running + Betriebssystem, welches auf deinem Computer läuft, anzeigen - View local services + Lokale Dienste ansehen - Manage Work Folders + Arbeitsordner verwalten - Encrypt your offline files + Ihre Offline-Dateien verschlüsseln - Train the computer to recognise your voice + Trainieren Sie den Computer, Ihre Stimme zu erkennen - Advanced printer setup + Erweiterte Druckereinrichtung Change default printer @@ -2167,10 +2167,10 @@ Edit environment variables for your account - Optimise visual display + Visuelle Anzeige optimieren - Change mouse click settings + Mausklick-Einstellungen ändern Change advanced colour management settings for displays, scanners and printers @@ -2182,10 +2182,10 @@ Clear disk space by deleting unnecessary files - View devices and printers + Geräte und Drucker ansehen - Private Character Editor + Privater Zeichen-Editor Record steps to reproduce a problem @@ -2212,10 +2212,10 @@ Set flicks to perform certain tasks - Change account type + Account-Typ ändern - Change screen saver + Bildschirmschoner ändern Change User Account Control settings @@ -2236,31 +2236,31 @@ View basic information about your computer - Choose how you open links + Wählen Sie, wie Sie Links öffnen Allow Remote Assistance invitations to be sent from this computer - Task Manager + Task-Manager Turn flicks on or off - Add a language + Eine Sprache hinzufügen - View network status and tasks + Netzwerkstatus und Tasks ansehen - Turn Magnifier on or off + Lupe ein- oder ausschalten See the name of this computer - View network connections + Netzwerkverbindungen ansehen Perform recommended maintenance tasks automatically @@ -2269,7 +2269,7 @@ Manage disk space used by your offline files - Turn High Contrast on or off + Hochkontrast ein- oder ausschalten Change the way time is displayed @@ -2281,16 +2281,16 @@ Change the way dates and lists are displayed - Manage audio devices + Audiogeräte verwalten - Change security settings + Sicherheitseinstellungen ändern - Check security status + Sicherheitsstatus überprüfen - Delete cookies or temporary files + Cookies oder temporäre Dateien löschen Specify which hand you write with @@ -2311,19 +2311,19 @@ Show which domain your computer is on - View all problem reports + Alle Problemberichte ansehen - 16-Bit Application Support + 16-Bit-Anwendungsunterstützung Set up dialling rules - Enable or disable session cookies + Session-Cookies aktivieren oder deaktivieren - Give administrative rights to a domain user + Einem Domänenbenutzer administrative Rechte geben Choose when to turn off display @@ -2341,61 +2341,61 @@ Change text-to-speech settings - Set the time and date + Zeit und Datum festlegen Change location settings - Change mouse settings + Maus-Einstellungen ändern Manage Storage Spaces - Show or hide file extensions + Dateierweiterungen zeigen oder ausblenden - Allow an app through Windows Firewall + Eine App über Windows-Firewall erlauben - Change system sounds + Systemsounds ändern - Adjust ClearType text + ClearType-Text anpassen - Turn screen saver on or off + Bildschirmschoner ein- oder ausschalten - Find and fix windows update problems + Windows Update-Probleme finden und beheben - Change Bluetooth settings + Bluetooth-Einstellungen ändern - Connect to a network + Mit einem Netzwerk verbinden Change the search provider in Internet Explorer - Join a domain + Einer Domain beitreten - Add a device + Ein Gerät hinzufügen - Find and fix problems with Windows Search + Probleme mit Windows-Suche finden und beheben - Choose a power plan + Einen Energieplan wählen Change how the mouse pointer looks when it’s moving - Uninstall a program + Ein Programm deinstallieren Create and format hard disk partitions @@ -2407,46 +2407,46 @@ Change PC wake-up settings - Manage network passwords + Netzwerkpasswörter verwalten - Change input methods + Eingabemethoden ändern - Manage advanced sharing settings + Erweiterte Sharing-Einstellungen verwalten Change battery settings - Rename this computer + Diesen Computer umbenennen - Lock or unlock the taskbar + Taskleiste sperren oder entsperren - Manage Web Credentials + Webanmeldedaten verwalten - Change the time zone + Zeitzone ändern - Start speech recognition + Spracherkennung starten - View installed updates + Installierte Updates ansehen - What's happened to the Quick Launch toolbar? + Was ist mit der Schnellstart-Toolleiste passiert? - Change search options for files and folders + Suchoptionen für Dateien und Ordner ändern Adjust settings before giving a presentation - Scan a document or picture + Ein Dokument oder Bild scannen Change the way measurements are displayed @@ -2461,16 +2461,16 @@ Set your default programs - Set up a broadband connection + Eine Breitbandverbindung einrichten - Calibrate the screen for pen or touch input + Kalibrieren des Screens für Stift- oder Toucheingabe - Manage user certificates + Benutzerzertifikate verwalten - Schedule tasks + Geplante Tasks Ignore repeated keystrokes using FilterKeys @@ -2482,7 +2482,7 @@ Hear a tone when keys are pressed - Delete browsing history + Browsing-Historie löschen Change what the power buttons do @@ -2497,18 +2497,18 @@ View system resource usage in Task Manager - Create an account + Einen Account erstellen - Get more features with a new edition of Windows + Erhalten Sie mehr Features mit einer neuen Edition von Windows - Control Panel + Systemsteuerung TaskLink - Unknown + Unbekannt \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.he-IL.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.he-IL.resx new file mode 100644 index 000000000..2b6d5aa63 --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.he-IL.resx @@ -0,0 +1,2514 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + אודות + Area System + + + access.cpl + File name, Should not translated + + + Accessibility Options + Area Control Panel (legacy settings) + + + Accessory apps + Area Privacy + + + Access work or school + Area UserAccounts + + + Account info + Area Privacy + + + Accounts + Area SurfaceHub + + + Action Center + Area Control Panel (legacy settings) + + + Activation + Area UpdateAndSecurity + + + Activity history + Area Privacy + + + Add Hardware + Area Control Panel (legacy settings) + + + Add/Remove Programs + Area Control Panel (legacy settings) + + + Add your phone + Area Phone + + + Administrative Tools + Area System + + + Advanced display settings + Area System, only available on devices that support advanced display options + + + Advanced graphics + + + Advertising ID + Area Privacy, Deprecated in Windows 10, version 1809 and later + + + Airplane mode + Area NetworkAndInternet + + + Alt+Tab + Means the key combination "Tabulator+Alt" on the keyboard + + + Alternative names + + + Animations + + + App color + + + App diagnostics + Area Privacy + + + App features + Area Apps + + + App + Short/modern name for application + + + Apps and Features + Area Apps + + + System settings + Type of the setting is a "Modern Windows settings". We use the same term as used in start menu search at the moment. + + + Apps for websites + Area Apps + + + App volume and device preferences + Area System, Added in Windows 10, version 1903 + + + appwiz.cpl + File name, Should not translated + + + Area + Mean the settings area or settings category + + + Accounts + + + Administrative Tools + Area Control Panel (legacy settings) + + + Appearance and Personalization + + + Apps + + + Clock and Region + + + Control Panel + + + Cortana + + + Devices + + + Ease of access + + + Extras + + + Gaming + + + Hardware and Sound + + + Home page + + + Mixed reality + + + Network and Internet + + + Personalization + + + Phone + + + Privacy + + + Programs + + + SurfaceHub + + + System + + + System and Security + + + Time and language + + + Update and security + + + User accounts + + + Assigned access + + + Audio + Area EaseOfAccess + + + Audio alerts + + + Audio and speech + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + Automatic file downloads + Area Privacy + + + AutoPlay + Area Device + + + Background + Area Personalization + + + Background Apps + Area Privacy + + + Backup + Area UpdateAndSecurity + + + Backup and Restore + Area Control Panel (legacy settings) + + + Battery Saver + Area System, only available on devices that have a battery, such as a tablet + + + Battery Saver settings + Area System, only available on devices that have a battery, such as a tablet + + + Battery saver usage details + + + Battery use + Area System, only available on devices that have a battery, such as a tablet + + + Biometric Devices + Area Control Panel (legacy settings) + + + BitLocker Drive Encryption + Area Control Panel (legacy settings) + + + Blue light + + + Bluetooth + Area Device + + + Bluetooth devices + Area Control Panel (legacy settings) + + + Blue-yellow + + + Bopomofo IME + Area TimeAndLanguage + + + bpmf + Should not translated + + + Broadcasting + Area Gaming + + + Calendar + Area Privacy + + + Call history + Area Privacy + + + calling + + + Camera + Area Privacy + + + Cangjie IME + Area TimeAndLanguage + + + Caps Lock + Mean the "Caps Lock" key + + + Cellular and SIM + Area NetworkAndInternet + + + Choose which folders appear on Start + Area Personalization + + + Client service for NetWare + Area Control Panel (legacy settings) + + + Clipboard + Area System + + + Closed captions + Area EaseOfAccess + + + Color filters + Area EaseOfAccess + + + Color management + Area Control Panel (legacy settings) + + + Colors + Area Personalization + + + Command + The command to direct start a setting + + + Connected Devices + Area Device + + + Contacts + Area Privacy + + + Control Panel + Type of the setting is a "(legacy) Control Panel setting" + + + Copy command + + + Core Isolation + Means the protection of the system core + + + Cortana + Area Cortana + + + Cortana across my devices + Area Cortana + + + Cortana - Language + Area Cortana + + + Credential manager + Area Control Panel (legacy settings) + + + Crossdevice + + + Custom devices + + + Dark color + + + Dark mode + + + Data usage + Area NetworkAndInternet + + + Date and time + Area TimeAndLanguage + + + Default apps + Area Apps + + + Default camera + Area Device + + + Default location + Area Control Panel (legacy settings) + + + Default programs + Area Control Panel (legacy settings) + + + Default Save Locations + Area System + + + Delivery Optimization + Area UpdateAndSecurity + + + desk.cpl + File name, Should not translated + + + Desktop themes + Area Control Panel (legacy settings) + + + deuteranopia + Medical: Mean you don't can see red colors + + + Device manager + Area Control Panel (legacy settings) + + + Devices and printers + Area Control Panel (legacy settings) + + + DHCP + Should not translated + + + Dial-up + Area NetworkAndInternet + + + Direct access + Area NetworkAndInternet, only available if DirectAccess is enabled + + + Direct open your phone + Area EaseOfAccess + + + Display + Area EaseOfAccess + + + Display properties + Area Control Panel (legacy settings) + + + DNS + Should not translated + + + Documents + Area Privacy + + + Duplicating my display + Area System + + + During these hours + Area System + + + Ease of access center + Area Control Panel (legacy settings) + + + Edition + Means the "Windows Edition" + + + Email + Area Privacy + + + Email and app accounts + Area UserAccounts + + + Encryption + Area System + + + Environment + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + Ethernet + Area NetworkAndInternet + + + Exploit Protection + + + Extras + Area Extra, , only used for setting of 3rd-Party tools + + + Eye control + Area EaseOfAccess + + + Eye tracker + Area Privacy, requires eyetracker hardware + + + Family and other people + Area UserAccounts + + + Feedback and diagnostics + Area Privacy + + + File system + Area Privacy + + + FindFast + Area Control Panel (legacy settings) + + + findfast.cpl + File name, Should not translated + + + Find My Device + Area UpdateAndSecurity + + + Firewall + + + Focus assist - Quiet hours + Area System + + + Focus assist - Quiet moments + Area System + + + Folder options + Area Control Panel (legacy settings) + + + Fonts + Area EaseOfAccess + + + For developers + Area UpdateAndSecurity + + + Game bar + Area Gaming + + + Game controllers + Area Control Panel (legacy settings) + + + Game DVR + Area Gaming + + + מצב משחק + Area Gaming + + + Gateway + Should not translated + + + כללי + Area Privacy + + + Get programs + Area Control Panel (legacy settings) + + + Getting started + Area Control Panel (legacy settings) + + + Glance + Area Personalization, Deprecated in Windows 10, version 1809 and later + + + Graphics settings + Area System + + + Grayscale + + + Green week + Mean you don't can see green colors + + + Headset display + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + High contrast + Area EaseOfAccess + + + Holographic audio + + + Holographic Environment + + + Holographic Headset + + + Holographic Management + + + Home group + Area Control Panel (legacy settings) + + + ID + MEans The "Windows Identifier" + + + Image + + + Indexing options + Area Control Panel (legacy settings) + + + inetcpl.cpl + File name, Should not translated + + + Infrared + Area Control Panel (legacy settings) + + + Inking and typing + Area Privacy + + + Internet options + Area Control Panel (legacy settings) + + + intl.cpl + File name, Should not translated + + + Inverted colors + + + IP + Should not translated + + + Isolated Browsing + + + Japan IME settings + Area TimeAndLanguage, available if the Microsoft Japan input method editor is installed + + + joy.cpl + File name, Should not translated + + + Joystick properties + Area Control Panel (legacy settings) + + + jpnime + Should not translated + + + Keyboard + Area EaseOfAccess + + + Keypad + + + Keys + + + שפה + Area TimeAndLanguage + + + Light color + + + Light mode + + + Location + Area Privacy + + + Lock screen + Area Personalization + + + Magnifier + Area EaseOfAccess + + + Mail - Microsoft Exchange or Windows Messaging + Area Control Panel (legacy settings) + + + main.cpl + File name, Should not translated + + + Manage known networks + Area NetworkAndInternet + + + Manage optional features + Area Apps + + + Messaging + Area Privacy + + + Metered connection + + + Microphone + Area Privacy + + + Microsoft Mail Post Office + Area Control Panel (legacy settings) + + + mlcfg32.cpl + File name, Should not translated + + + mmsys.cpl + File name, Should not translated + + + Mobile devices + + + Mobile hotspot + Area NetworkAndInternet + + + modem.cpl + File name, Should not translated + + + Mono + + + More details + Area Cortana + + + Motion + Area Privacy + + + Mouse + Area EaseOfAccess + + + Mouse and touchpad + Area Device + + + Mouse, Fonts, Keyboard, and Printers properties + Area Control Panel (legacy settings) + + + Mouse pointer + Area EaseOfAccess + + + Multimedia properties + Area Control Panel (legacy settings) + + + Multitasking + Area System + + + Narrator + Area EaseOfAccess + + + Navigation bar + Area Personalization + + + netcpl.cpl + File name, Should not translated + + + netsetup.cpl + File name, Should not translated + + + Network + Area NetworkAndInternet + + + Network and sharing center + Area Control Panel (legacy settings) + + + Network connection + Area Control Panel (legacy settings) + + + Network properties + Area Control Panel (legacy settings) + + + Network Setup Wizard + Area Control Panel (legacy settings) + + + Network status + Area NetworkAndInternet + + + NFC + Area NetworkAndInternet + + + NFC Transactions + "NFC should not translated" + + + Night light + + + Night light settings + Area System + + + Note + + + Only available when you have connected a mobile device to your device. + + + Only available on devices that support advanced graphics options. + + + Only available on devices that have a battery, such as a tablet. + + + Deprecated in Windows 10, version 1809 (build 17763) and later. + + + Only available if Dial is paired. + + + Only available if DirectAccess is enabled. + + + Only available on devices that support advanced display options. + + + Only present if user is enrolled in WIP. + + + Requires eyetracker hardware. + + + Available if the Microsoft Japan input method editor is installed. + + + Available if the Microsoft Pinyin input method editor is installed. + + + Available if the Microsoft Wubi input method editor is installed. + + + Only available if the Mixed Reality Portal app is installed. + + + Only available on mobile and if the enterprise has deployed a provisioning package. + + + Added in Windows 10, version 1903 (build 18362). + + + Added in Windows 10, version 2004 (build 19041). + + + Only available if "settings apps" are installed, for example, by a 3rd party. + + + Only available if touchpad hardware is present. + + + Only available if the device has a Wi-Fi adapter. + + + Device must be Windows Anywhere-capable. + + + Only available if enterprise has deployed a provisioning package. + + + Notifications + Area Privacy + + + Notifications and actions + Area System + + + Num Lock + Mean the "Num Lock" key + + + nwc.cpl + File name, Should not translated + + + odbccp32.cpl + File name, Should not translated + + + ODBC Data Source Administrator (32-bit) + Area Control Panel (legacy settings) + + + ODBC Data Source Administrator (64-bit) + Area Control Panel (legacy settings) + + + Offline files + Area Control Panel (legacy settings) + + + Offline Maps + Area Apps + + + Offline Maps - Download maps + Area Apps + + + On-Screen + + + OS + Means the "Operating System" + + + Other devices + Area Privacy + + + Other options + Area EaseOfAccess + + + Other users + + + Parental controls + Area Control Panel (legacy settings) + + + Password + + + password.cpl + File name, Should not translated + + + Password properties + Area Control Panel (legacy settings) + + + Pen and input devices + Area Control Panel (legacy settings) + + + Pen and touch + Area Control Panel (legacy settings) + + + Pen and Windows Ink + Area Device + + + People Near Me + Area Control Panel (legacy settings) + + + Performance information and tools + Area Control Panel (legacy settings) + + + Permissions and history + Area Cortana + + + Personalization (category) + Area Personalization + + + Phone + Area Phone + + + Phone and modem + Area Control Panel (legacy settings) + + + Phone and modem - Options + Area Control Panel (legacy settings) + + + Phone calls + Area Privacy + + + Phone - Default apps + Area System + + + Picture + + + Pictures + Area Privacy + + + Pinyin IME settings + Area TimeAndLanguage, available if the Microsoft Pinyin input method editor is installed + + + Pinyin IME settings - domain lexicon + Area TimeAndLanguage + + + Pinyin IME settings - Key configuration + Area TimeAndLanguage + + + Pinyin IME settings - UDP + Area TimeAndLanguage + + + Playing a game full screen + Area Gaming + + + Plugin to search for Windows settings + + + Windows Settings + + + Power and sleep + Area System + + + powercfg.cpl + File name, Should not translated + + + Power options + Area Control Panel (legacy settings) + + + Presentation + + + Printers + Area Control Panel (legacy settings) + + + Printers and scanners + Area Device + + + Print screen + Mean the "Print screen" key + + + Problem reports and solutions + Area Control Panel (legacy settings) + + + Processor + + + Programs and features + Area Control Panel (legacy settings) + + + Projecting to this PC + Area System + + + protanopia + Medical: Mean you don't can see green colors + + + Provisioning + Area UserAccounts, only available if enterprise has deployed a provisioning package + + + Proximity + Area NetworkAndInternet + + + Proxy + Area NetworkAndInternet + + + Quickime + Area TimeAndLanguage + + + Quiet moments game + + + Radios + Area Privacy + + + RAM + Means the Read-Access-Memory (typical the used to inform about the size) + + + Recognition + + + Recovery + Area UpdateAndSecurity + + + Red eye + Mean red eye effect by over-the-night flights + + + Red-green + Mean the weakness you can't differ between red and green colors + + + Red week + Mean you don't can see red colors + + + Region + Area TimeAndLanguage + + + Regional language + Area TimeAndLanguage + + + Regional settings properties + Area Control Panel (legacy settings) + + + Region and language + Area Control Panel (legacy settings) + + + Region formatting + + + RemoteApp and desktop connections + Area Control Panel (legacy settings) + + + Remote Desktop + Area System + + + Scanners and cameras + Area Control Panel (legacy settings) + + + schedtasks + File name, Should not translated + + + Scheduled + + + Scheduled tasks + Area Control Panel (legacy settings) + + + Screen rotation + Area System + + + Scroll bars + + + Scroll Lock + Mean the "Scroll Lock" key + + + SDNS + Should not translated + + + Searching Windows + Area Cortana + + + SecureDNS + Should not translated + + + Security Center + Area Control Panel (legacy settings) + + + Security Processor + + + Session cleanup + Area SurfaceHub + + + Settings home page + Area Home, Overview-page for all areas of settings + + + Set up a kiosk + Area UserAccounts + + + Shared experiences + Area System + + + Shortcuts + + + wifi + dont translate this, is a short term to find entries + + + Sign-in options + Area UserAccounts + + + Sign-in options - Dynamic lock + Area UserAccounts + + + Size + Size for text and symbols + + + Sound + Area System + + + Speech + Area EaseOfAccess + + + Speech recognition + Area Control Panel (legacy settings) + + + Speech typing + + + Start + Area Personalization + + + Start places + + + Startup apps + Area Apps + + + sticpl.cpl + File name, Should not translated + + + Storage + Area System + + + Storage policies + Area System + + + Storage Sense + Area System + + + in + Example: Area "System" in System settings + + + Sync center + Area Control Panel (legacy settings) + + + Sync your settings + Area UserAccounts + + + sysdm.cpl + File name, Should not translated + + + System + Area Control Panel (legacy settings) + + + System properties and Add New Hardware wizard + Area Control Panel (legacy settings) + + + Tab + Means the key "Tabulator" on the keyboard + + + Tablet mode + Area System + + + Tablet PC settings + Area Control Panel (legacy settings) + + + Talk + + + Talk to Cortana + Area Cortana + + + Taskbar + Area Personalization + + + Taskbar color + + + Tasks + Area Privacy + + + Team Conferencing + Area SurfaceHub + + + Team device management + Area SurfaceHub + + + Text to speech + Area Control Panel (legacy settings) + + + Themes + Area Personalization + + + themes.cpl + File name, Should not translated + + + timedate.cpl + File name, Should not translated + + + Timeline + + + Touch + + + Touch feedback + + + Touchpad + Area Device + + + Transparency + + + tritanopia + Medical: Mean you don't can see yellow and blue colors + + + Troubleshoot + Area UpdateAndSecurity + + + TruePlay + Area Gaming + + + Typing + Area Device + + + Uninstall + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + USB + Area Device + + + User accounts + Area Control Panel (legacy settings) + + + Version + Means The "Windows Version" + + + Video playback + Area Apps + + + Videos + Area Privacy + + + Virtual Desktops + + + Virus + Means the virus in computers and software + + + Voice activation + Area Privacy + + + Volume + + + VPN + Area NetworkAndInternet + + + Wallpaper + + + Warmer color + + + Welcome center + Area Control Panel (legacy settings) + + + Welcome screen + Area SurfaceHub + + + wgpocpl.cpl + File name, Should not translated + + + Wheel + Area Device + + + Wi-Fi + Area NetworkAndInternet, only available if Wi-Fi calling is enabled + + + Wi-Fi Calling + Area NetworkAndInternet, only available if Wi-Fi calling is enabled + + + Wi-Fi settings + "Wi-Fi" should not translated + + + Window border + + + Windows Anytime Upgrade + Area Control Panel (legacy settings) + + + Windows Anywhere + Area UserAccounts, device must be Windows Anywhere-capable + + + Windows CardSpace + Area Control Panel (legacy settings) + + + Windows Defender + Area Control Panel (legacy settings) + + + Windows Firewall + Area Control Panel (legacy settings) + + + Windows Hello setup - Face + Area UserAccounts + + + Windows Hello setup - Fingerprint + Area UserAccounts + + + Windows Insider Program + Area UpdateAndSecurity + + + Windows Mobility Center + Area Control Panel (legacy settings) + + + Windows search + Area Cortana + + + Windows Security + Area UpdateAndSecurity + + + Windows Update + Area UpdateAndSecurity + + + Windows Update - Advanced options + Area UpdateAndSecurity + + + Windows Update - Check for updates + Area UpdateAndSecurity + + + Windows Update - Restart options + Area UpdateAndSecurity + + + Windows Update - View optional updates + Area UpdateAndSecurity + + + Windows Update - View update history + Area UpdateAndSecurity + + + Wireless + + + Workplace + + + Workplace provisioning + Area UserAccounts + + + Wubi IME settings + Area TimeAndLanguage, available if the Microsoft Wubi input method editor is installed + + + Wubi IME settings - UDP + Area TimeAndLanguage + + + Xbox Networking + Area Gaming + + + Your info + Area UserAccounts + + + Zoom + Mean zooming of things via a magnifier + + + Change device installation settings + + + Turn off background images + + + Navigation properties + + + Media streaming options + + + Make a file type always open in a specific program + + + Change the Narrator’s voice + + + Find and fix keyboard problems + + + Use screen reader + + + Show which workgroup this computer is on + + + Change mouse wheel settings + + + Manage computer certificates + + + Find and fix problems + + + Change settings for content received using Tap and send + + + Change default settings for media or devices + + + Print the speech reference card + + + Calibrate display colour + + + Manage file encryption certificates + + + View recent messages about your computer + + + Give other users access to this computer + + + Show hidden files and folders + + + Change Windows To Go start-up options + + + See which processes start up automatically when you start Windows + + + Tell if an RSS feed is available on a website + + + Add clocks for different time zones + + + Add a Bluetooth device + + + Customise the mouse buttons + + + Set tablet buttons to perform certain tasks + + + View installed fonts + + + Change the way currency is displayed + + + Edit group policy + + + Manage browser add-ons + + + Check processor speed + + + Check firewall status + + + Send or receive a file + + + Add or remove user accounts + + + Edit the system environment variables + + + Manage BitLocker + + + Auto-hide the taskbar + + + Change sound card settings + + + Make changes to accounts + + + Edit local users and groups + + + View network computers and devices + + + Install a program from the network + + + View scanners and cameras + + + Microsoft IME Register Word (Japanese) + + + Restore your files with File History + + + Turn On-Screen keyboard on or off + + + Block or allow third-party cookies + + + Find and fix audio recording problems + + + Create a recovery drive + + + Microsoft New Phonetic Settings + + + Generate a system health report + + + Fix problems with your computer + + + Back up and Restore (Windows 7) + + + Preview, delete, show or hide fonts + + + Microsoft Quick Settings + + + View reliability history + + + Access RemoteApp and desktops + + + Set up ODBC data sources + + + Reset Security Policies + + + Block or allow pop-ups + + + Turn autocomplete in Internet Explorer on or off + + + Microsoft Pinyin SimpleFast Options + + + Change what closing the lid does + + + Turn off unnecessary animations + + + Create a restore point + + + Turn off automatic window arrangement + + + Troubleshooting History + + + Diagnose your computer's memory problems + + + View recommended actions to keep Windows running smoothly + + + Change cursor blink rate + + + Add or remove programs + + + Create a password reset disk + + + Configure advanced user profile properties + + + Start or stop using AutoPlay for all media and devices + + + Change Automatic Maintenance settings + + + Specify single- or double-click to open + + + Select users who can use remote desktop + + + Show which programs are installed on your computer + + + Allow remote access to your computer + + + View advanced system settings + + + How to install a program + + + Change how your keyboard works + + + Automatically adjust for daylight saving time + + + Change the order of Windows SideShow gadgets + + + Check keyboard status + + + Control the computer without the mouse or keyboard + + + Change or remove a program + + + Change multi-touch gesture settings + + + Set up ODBC data sources (64-bit) + + + Configure proxy server + + + Change your homepage + + + Group similar windows on the taskbar + + + Change Windows SideShow settings + + + Use audio description for video + + + Change workgroup name + + + Find and fix printing problems + + + Change when the computer sleeps + + + Set up a virtual private network (VPN) connection + + + Accommodate learning abilities + + + Set up a dial-up connection + + + Set up a connection or network + + + How to change your Windows password + + + Make it easier to see the mouse pointer + + + Set up iSCSI initiator + + + Accommodate low vision + + + Manage offline files + + + Review your computer's status and resolve issues + + + Microsoft ChangJie Settings + + + Replace sounds with visual cues + + + Change temporary Internet file settings + + + Connect to the Internet + + + Find and fix audio playback problems + + + Change the mouse pointer display or speed + + + Back up your recovery key + + + Save backup copies of your files with File History + + + View current accessibility settings + + + Change tablet pen settings + + + Change how your mouse works + + + Show how much RAM is on this computer + + + Edit power plan + + + Adjust system volume + + + Defragment and optimise your drives + + + Set up ODBC data sources (32-bit) + + + Change Font Settings + + + Magnify portions of the screen using Magnifier + + + Change the file type associated with a file extension + + + View event logs + + + Manage Windows Credentials + + + Set up a microphone + + + Change how the mouse pointer looks + + + Change power-saving settings + + + Optimise for blindness + + + + + + + Turn Windows features on or off + + + Show which operating system your computer is running + + + View local services + + + Manage Work Folders + + + Encrypt your offline files + + + Train the computer to recognise your voice + + + Advanced printer setup + + + Change default printer + + + Edit environment variables for your account + + + Optimise visual display + + + Change mouse click settings + + + Change advanced colour management settings for displays, scanners and printers + + + Let Windows suggest Ease of Access settings + + + Clear disk space by deleting unnecessary files + + + View devices and printers + + + Private Character Editor + + + Record steps to reproduce a problem + + + Adjust the appearance and performance of Windows + + + Settings for Microsoft IME (Japanese) + + + Invite someone to connect to your PC and help you, or offer to help someone else + + + Run programs made for previous versions of Windows + + + Choose the order of how your screen rotates + + + Change how Windows searches + + + Set flicks to perform certain tasks + + + Change account type + + + Change screen saver + + + Change User Account Control settings + + + Turn on easy access keys + + + Identify and repair network problems + + + Find and fix networking and connection problems + + + Play CDs or other media automatically + + + View basic information about your computer + + + Choose how you open links + + + Allow Remote Assistance invitations to be sent from this computer + + + Task Manager + + + Turn flicks on or off + + + Add a language + + + View network status and tasks + + + Turn Magnifier on or off + + + See the name of this computer + + + View network connections + + + Perform recommended maintenance tasks automatically + + + Manage disk space used by your offline files + + + Turn High Contrast on or off + + + Change the way time is displayed + + + Change how web pages are displayed in tabs + + + Change the way dates and lists are displayed + + + Manage audio devices + + + Change security settings + + + Check security status + + + Delete cookies or temporary files + + + Specify which hand you write with + + + Change touch input settings + + + How to change the size of virtual memory + + + Hear text read aloud with Narrator + + + Set up USB game controllers + + + Show which domain your computer is on + + + View all problem reports + + + 16-Bit Application Support + + + Set up dialling rules + + + Enable or disable session cookies + + + Give administrative rights to a domain user + + + Choose when to turn off display + + + Move the pointer with the keypad using MouseKeys + + + Change Windows SideShow-compatible device settings + + + Adjust commonly used mobility settings + + + Change text-to-speech settings + + + Set the time and date + + + Change location settings + + + Change mouse settings + + + Manage Storage Spaces + + + Show or hide file extensions + + + Allow an app through Windows Firewall + + + Change system sounds + + + Adjust ClearType text + + + Turn screen saver on or off + + + Find and fix windows update problems + + + Change Bluetooth settings + + + Connect to a network + + + Change the search provider in Internet Explorer + + + Join a domain + + + Add a device + + + Find and fix problems with Windows Search + + + Choose a power plan + + + Change how the mouse pointer looks when it’s moving + + + Uninstall a program + + + Create and format hard disk partitions + + + Change date, time or number formats + + + Change PC wake-up settings + + + Manage network passwords + + + Change input methods + + + Manage advanced sharing settings + + + Change battery settings + + + Rename this computer + + + Lock or unlock the taskbar + + + Manage Web Credentials + + + Change the time zone + + + Start speech recognition + + + View installed updates + + + What's happened to the Quick Launch toolbar? + + + Change search options for files and folders + + + Adjust settings before giving a presentation + + + Scan a document or picture + + + Change the way measurements are displayed + + + Press key combinations one at a time + + + Restore data, files or computer from backup (Windows 7) + + + Set your default programs + + + Set up a broadband connection + + + Calibrate the screen for pen or touch input + + + Manage user certificates + + + Schedule tasks + + + Ignore repeated keystrokes using FilterKeys + + + Find and fix bluescreen problems + + + Hear a tone when keys are pressed + + + Delete browsing history + + + Change what the power buttons do + + + Create standard user account + + + Take speech tutorials + + + View system resource usage in Task Manager + + + Create an account + + + Get more features with a new edition of Windows + + + Control Panel + + + TaskLink + + + Unknown + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.it-IT.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.it-IT.resx index c0319e5fd..bcd3617ba 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.it-IT.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.it-IT.resx @@ -837,7 +837,7 @@ Modalità chiara - Location + Posizione Area Privacy diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.nb-NO.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.nb-NO.resx index 53715bf23..12c2178dd 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.nb-NO.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.nb-NO.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - About + Om Area System @@ -126,66 +126,66 @@ File name, Should not translated - Accessibility Options + Alternativer for tilgjengelighet Area Control Panel (legacy settings) - Accessory apps + Apper for tilbehør Area Privacy - Access work or school + Tilgang til arbeid eller skole Area UserAccounts - Account info + Kontoinformasjon Area Privacy - Accounts + Kontoer Area SurfaceHub - Action Center + Handlingssenter Area Control Panel (legacy settings) - Activation + Aktivering Area UpdateAndSecurity - Activity history + Aktivitetslogg Area Privacy - Add Hardware + Legg til maskinvare Area Control Panel (legacy settings) - Add/Remove Programs + Legg til/fjern programmer Area Control Panel (legacy settings) - Add your phone + Legg til din telefon Area Phone - Administrative Tools + Administrative verktøy Area System - Advanced display settings + Avanserte visningsinnstillinger Area System, only available on devices that support advanced display options - Advanced graphics + Avansert grafikk - Advertising ID + Annonsering ID Area Privacy, Deprecated in Windows 10, version 1809 and later - Airplane mode + Flymodus Area NetworkAndInternet @@ -193,20 +193,20 @@ Means the key combination "Tabulator+Alt" on the keyboard - Alternative names + Alternative navn - Animations + Animasjoner - App color + Appfarge - App diagnostics + Appdiagnostikk Area Privacy - App features + Appfunksjoner Area Apps @@ -214,19 +214,19 @@ Short/modern name for application - Apps and Features + Apper og funksjoner Area Apps - System settings + Systeminnstillinger Type of the setting is a "Modern Windows settings". We use the same term as used in start menu search at the moment. - Apps for websites + Apper for nettsteder Area Apps - App volume and device preferences + Appvolum og enhetsinnstillinger Area System, Added in Windows 10, version 1903 @@ -234,66 +234,66 @@ File name, Should not translated - Area + Område Mean the settings area or settings category - Accounts + Kontoer - Administrative Tools + Administrative verktøy Area Control Panel (legacy settings) - Appearance and Personalization + Utseende og personalisering - Apps + Apper - Clock and Region + Klokke og region - Control Panel + Kontrollpanel Cortana - Devices + Enheter - Ease of access + Enkel tilgang - Extras + Ekstra - Gaming + Spilling - Hardware and Sound + Maskinvare og lyd - Home page + Hjemmeside - Mixed reality + Blandet virkelighet - Network and Internet + Nettverk og Internett - Personalization + Personalisering - Phone + Telefon - Privacy + Personvern - Programs + Programmer SurfaceHub @@ -302,91 +302,91 @@ System - System and Security + System og sikkerhet - Time and language + Tid og språk - Update and security + Oppdatering og sikkerhet - User accounts + Brukerkontoer - Assigned access + Tildelt tilgang - Audio + Lyd Area EaseOfAccess - Audio alerts + Lydvarsler - Audio and speech + Lyd og tale Area MixedReality, only available if the Mixed Reality Portal app is installed. - Automatic file downloads + Automatiske filnedlastinger Area Privacy - AutoPlay + Autostart Area Device - Background + Bakgrunn Area Personalization - Background Apps + Bakgrunnsapper Area Privacy - Backup + Sikkerhetskopi Area UpdateAndSecurity - Backup and Restore + Sikkerhetskopiering og gjenoppretting Area Control Panel (legacy settings) - Battery Saver + Batterisparer Area System, only available on devices that have a battery, such as a tablet - Battery Saver settings + Innstillinger for batterisparing Area System, only available on devices that have a battery, such as a tablet - Battery saver usage details + Detaljer om bruk av batterisparing - Battery use + Batteribruk Area System, only available on devices that have a battery, such as a tablet - Biometric Devices + Biometriske enheter Area Control Panel (legacy settings) - BitLocker Drive Encryption + BitLocker-stasjonskryptering Area Control Panel (legacy settings) - Blue light + Blått lys - Bluetooth + Blåtann Area Device - Bluetooth devices + Bluetooth-enheter Area Control Panel (legacy settings) - Blue-yellow + Blå-gul Bopomofo IME @@ -397,22 +397,22 @@ Should not translated - Broadcasting + Kringkasting Area Gaming - Calendar + Kalender Area Privacy - Call history + Anropslogg Area Privacy - calling + ringer - Camera + Kamera Area Privacy @@ -424,58 +424,58 @@ Mean the "Caps Lock" key - Cellular and SIM + Mobil og SIM Area NetworkAndInternet - Choose which folders appear on Start + Velge hvilke mapper som skal vises ved start Area Personalization - Client service for NetWare + Klienttjeneste for NetWare Area Control Panel (legacy settings) - Clipboard + Utklippstavle Area System - Closed captions + Lukkede undertekster Area EaseOfAccess - Color filters + Fargefiltre Area EaseOfAccess - Color management + Fargebehandling Area Control Panel (legacy settings) - Colors + Farger Area Personalization - Command + Kommando The command to direct start a setting - Connected Devices + Tilkoblede enheter Area Device - Contacts + Kontakter Area Privacy - Control Panel + Kontrollpanel Type of the setting is a "(legacy) Control Panel setting" - Copy command + Kopier kommando - Core Isolation + Kjerneisolering Means the protection of the system core @@ -483,59 +483,59 @@ Area Cortana - Cortana across my devices + Cortana på tvers av enheter Area Cortana - Cortana - Language + Cortana – Språk Area Cortana - Credential manager + Behandling av legitimasjon Area Control Panel (legacy settings) - Crossdevice + På tvers av enheter - Custom devices + Egendefinerte enheter - Dark color + Mørk farge - Dark mode + Mørk modus - Data usage + Databruk Area NetworkAndInternet - Date and time + Dato og klokkeslett Area TimeAndLanguage - Default apps + Standard apper Area Apps - Default camera + Standard kamera Area Device - Default location + Standard plassering Area Control Panel (legacy settings) - Default programs + Standard programmer Area Control Panel (legacy settings) - Default Save Locations + Standard lagringssteder Area System - Delivery Optimization + Optimalisering av levering Area UpdateAndSecurity @@ -543,19 +543,19 @@ File name, Should not translated - Desktop themes + Skrivebordstemaer Area Control Panel (legacy settings) - deuteranopia + deuteranopi Medical: Mean you don't can see red colors - Device manager + Enhetsbehandler Area Control Panel (legacy settings) - Devices and printers + Enheter og skrivere Area Control Panel (legacy settings) @@ -563,23 +563,23 @@ Should not translated - Dial-up + Modem Area NetworkAndInternet - Direct access + Direkte tilgang Area NetworkAndInternet, only available if DirectAccess is enabled - Direct open your phone + Direkte åpne telefonen Area EaseOfAccess - Display + Skjerm Area EaseOfAccess - Display properties + Skjermegenskaper Area Control Panel (legacy settings) @@ -587,39 +587,39 @@ Should not translated - Documents + Dokumenter Area Privacy - Duplicating my display + Duplisere skjermen min Area System - During these hours + I løpet av disse timene Area System - Ease of access center + Enkel tilgangssenter Area Control Panel (legacy settings) - Edition + Utgave Means the "Windows Edition" - Email + E-post Area Privacy - Email and app accounts + E-post- og appkontoer Area UserAccounts - Encryption + Kryptering Area System - Environment + Miljø Area MixedReality, only available if the Mixed Reality Portal app is installed. @@ -627,34 +627,34 @@ Area NetworkAndInternet - Exploit Protection + Beskyttelse mot utnyttelse - Extras + Ekstra Area Extra, , only used for setting of 3rd-Party tools - Eye control + Øyekontroll Area EaseOfAccess - Eye tracker + Øyesporer Area Privacy, requires eyetracker hardware - Family and other people + Familie og andre Area UserAccounts - Feedback and diagnostics + Tilbakemelding og diagnostikk Area Privacy - File system + Filsystem Area Privacy - FindFast + Finn raskt Area Control Panel (legacy settings) @@ -662,101 +662,101 @@ File name, Should not translated - Find My Device + Finn min enhet Area UpdateAndSecurity - Firewall + Brannmur - Focus assist - Quiet hours + Fokus assistanse - Stilletid Area System - Focus assist - Quiet moments + Fokus assistanse - Stille øyeblikk Area System - Folder options + Mappealternativer Area Control Panel (legacy settings) - Fonts + Skrifttyper Area EaseOfAccess - For developers + For utviklere Area UpdateAndSecurity - Game bar + Spillinje Area Gaming - Game controllers + Spillkontrollere Area Control Panel (legacy settings) - Game DVR + Spill DVR Area Gaming - Game Mode + Spillmodus Area Gaming - Gateway + Mellomtjener Should not translated - General + Generelt Area Privacy - Get programs + Hent programmer Area Control Panel (legacy settings) - Getting started + Kom igang Area Control Panel (legacy settings) - Glance + Blikk Area Personalization, Deprecated in Windows 10, version 1809 and later - Graphics settings + Grafikkinnstillinger Area System - Grayscale + Gråtoner - Green week + Grønn uke Mean you don't can see green colors - Headset display + Hodesettvisning Area MixedReality, only available if the Mixed Reality Portal app is installed. - High contrast + Høy kontrast Area EaseOfAccess - Holographic audio + Holografisk lyd - Holographic Environment + Holografisk miljø - Holographic Headset + Holografisk hodetelefoner - Holographic Management + Holografisk administrasjon - Home group + Hjemmegruppe Area Control Panel (legacy settings) @@ -764,10 +764,10 @@ MEans The "Windows Identifier" - Image + Bilde - Indexing options + Alternativer for indeksering Area Control Panel (legacy settings) @@ -775,15 +775,15 @@ File name, Should not translated - Infrared + Infrarød Area Control Panel (legacy settings) - Inking and typing + Håndskrift og skriving Area Privacy - Internet options + Alternativer for Internett Area Control Panel (legacy settings) @@ -791,17 +791,17 @@ File name, Should not translated - Inverted colors + Inverterte farger IP Should not translated - Isolated Browsing + Isolert surfing - Japan IME settings + Japanske IME-innstillinger Area TimeAndLanguage, available if the Microsoft Japan input method editor is installed @@ -809,7 +809,7 @@ File name, Should not translated - Joystick properties + Egenskaper for styrespak Area Control Panel (legacy settings) @@ -817,39 +817,39 @@ Should not translated - Keyboard + Tastatur Area EaseOfAccess Keypad - Keys + Taster - Language + Språk Area TimeAndLanguage - Light color + Lys farge - Light mode + Lys modus - Location + Plassering Area Privacy - Lock screen + Låseskjerm Area Personalization - Magnifier + Forstørrer Area EaseOfAccess - Mail - Microsoft Exchange or Windows Messaging + E-post - Microsoft Exchange eller Windows Messaging Area Control Panel (legacy settings) @@ -857,22 +857,22 @@ File name, Should not translated - Manage known networks + Administrer kjente nettverk Area NetworkAndInternet - Manage optional features + Behandle valgfrie funksjoner Area Apps - Messaging + Meldinger Area Privacy - Metered connection + Målt tilkobling - Microphone + Mikrofon Area Privacy @@ -888,10 +888,10 @@ File name, Should not translated - Mobile devices + Mobile enheter - Mobile hotspot + Mobil trådløs sone Area NetworkAndInternet @@ -902,43 +902,43 @@ Mono - More details + Ytterligere detaljer Area Cortana - Motion + Bevegelse Area Privacy - Mouse + Mus Area EaseOfAccess - Mouse and touchpad + Mus og pekeplate Area Device - Mouse, Fonts, Keyboard, and Printers properties + Mus, skrifter, tastatur og skriveregenskaper Area Control Panel (legacy settings) - Mouse pointer + Musepeker Area EaseOfAccess - Multimedia properties + Multimedia egenskaper Area Control Panel (legacy settings) - Multitasking + Fleroppgavekjøring Area System - Narrator + Oppleser Area EaseOfAccess - Navigation bar + Navigasjonslinje Area Personalization @@ -950,27 +950,27 @@ File name, Should not translated - Network + Nettverk Area NetworkAndInternet - Network and sharing center + Nettverk og delingssenter Area Control Panel (legacy settings) - Network connection + Nettverkstilkobling Area Control Panel (legacy settings) - Network properties + Egenskaper for nettverk Area Control Panel (legacy settings) - Network Setup Wizard + Veiviser for nettverksoppsett Area Control Panel (legacy settings) - Network status + Nettverksstatus Area NetworkAndInternet @@ -978,88 +978,88 @@ Area NetworkAndInternet - NFC Transactions + NFC-transaksjoner "NFC should not translated" - Night light + Nattlys - Night light settings + Innstillinger for nattlys Area System - Note + Notat - Only available when you have connected a mobile device to your device. + Bare tilgjengelig når du har koblet en mobilenhet til enheten din. - Only available on devices that support advanced graphics options. + Bare tilgjengelig på enheter som støtter avanserte grafikkalternativer. - Only available on devices that have a battery, such as a tablet. + Bare tilgjengelig på enheter som har batteri, for eksempel nettbrett. - Deprecated in Windows 10, version 1809 (build 17763) and later. + Avviklet i Windows 10, versjon 1809 (bygg 17763) og senere. - Only available if Dial is paired. + Bare tilgjengelig dersom Dial er paret. - Only available if DirectAccess is enabled. + Bare tilgjengelig dersom DirectAccess er aktivert. - Only available on devices that support advanced display options. + Bare tilgjengelig på enheter som støtter avanserte skjerminnstillinger. - Only present if user is enrolled in WIP. + Finnes bare hvis brukeren er registrert i WIP. - Requires eyetracker hardware. + Krever maskinvare for øyesporing. - Available if the Microsoft Japan input method editor is installed. + Tilgjengelig hvis Microsoft Japan-redigeringsmetoden for inndata er installert. - Available if the Microsoft Pinyin input method editor is installed. + Tilgjengelig hvis Microsoft Pinyin-redigeringsmetoden for inndata er installert. - Available if the Microsoft Wubi input method editor is installed. + Tilgjengelig hvis Microsoft Wubi-redigeringsmetoden for inndata er installert. - Only available if the Mixed Reality Portal app is installed. + Bare tilgjengelig hvis Mixed Reality-portal-appen er installert. - Only available on mobile and if the enterprise has deployed a provisioning package. + Kun tilgjengelig på mobil og hvis bedriften har distribuert en klargjøringspakke. - Added in Windows 10, version 1903 (build 18362). + Lagt til i Windows 10, versjon 1903 (bygg 18362). - Added in Windows 10, version 2004 (build 19041). + Lagt til i Windows 10, versjon 2004 (bygg 19041). - Only available if "settings apps" are installed, for example, by a 3rd party. + Kun tilgjengelig hvis "innstillingsapper" er installert, for eksempel av tredjepart. - Only available if touchpad hardware is present. + Bare tilgjengelig hvis touchpad-maskinvare er tilstede. - Only available if the device has a Wi-Fi adapter. + Bare tilgjengelig dersom enheten har et Wi-Fi-adapter. - Device must be Windows Anywhere-capable. + Enheten må være Windows Anywhere-kompatibel. - Only available if enterprise has deployed a provisioning package. + Kun tilgjengelig hvis bedriften har distribuert en klargjøringspakke. - Notifications + Varsler Area Privacy - Notifications and actions + Varsler og handlinger Area System @@ -1075,141 +1075,141 @@ File name, Should not translated - ODBC Data Source Administrator (32-bit) + ODBC Datakilde Administrator (32-bit) Area Control Panel (legacy settings) - ODBC Data Source Administrator (64-bit) + ODBC Datakilde Administrator (64-bit) Area Control Panel (legacy settings) - Offline files + Frakoblede filer Area Control Panel (legacy settings) - Offline Maps + Frakoblede kart Area Apps - Offline Maps - Download maps + Frakoblede kart – Last ned kart Area Apps - On-Screen + På-skjermen OS Means the "Operating System" - Other devices + Andre enheter Area Privacy - Other options + Andre alternativer Area EaseOfAccess - Other users + Andre brukere - Parental controls + Foreldrekontroll Area Control Panel (legacy settings) - Password + Passord password.cpl File name, Should not translated - Password properties + Egenskaper for passord Area Control Panel (legacy settings) - Pen and input devices + Penn og inndataenheter Area Control Panel (legacy settings) - Pen and touch + Penn og berøring Area Control Panel (legacy settings) - Pen and Windows Ink + Penn og Windows Ink Area Device - People Near Me + Folk nær meg Area Control Panel (legacy settings) - Performance information and tools + Informasjon og verktøy om ytelse Area Control Panel (legacy settings) - Permissions and history + Rettigheter og historikk Area Cortana - Personalization (category) + Personalisering (kategori) Area Personalization - Phone + Telefon Area Phone - Phone and modem + Telefon og modem Area Control Panel (legacy settings) - Phone and modem - Options + Telefon og modem - Alternativer Area Control Panel (legacy settings) - Phone calls + Telefonsamtaler Area Privacy - Phone - Default apps + Telefon - Standard apper Area System - Picture + Bilde - Pictures + Bilder Area Privacy - Pinyin IME settings + Innstillinger for Pinyin IME Area TimeAndLanguage, available if the Microsoft Pinyin input method editor is installed - Pinyin IME settings - domain lexicon + Pinyin IME-innstillinger - domene leksikonet Area TimeAndLanguage - Pinyin IME settings - Key configuration + Pinyin IME-innstillinger - nøkkelkonfigurasjon Area TimeAndLanguage - Pinyin IME settings - UDP + Pinyin IME-innstillinger - UDP Area TimeAndLanguage - Playing a game full screen + Spille et spill i fullskjerm Area Gaming - Plugin to search for Windows settings + Programtillegg for å søke etter Windows-innstillinger - Windows Settings + Innstillinger for Windows - Power and sleep + Strøm og hvilemodus Area System @@ -1217,49 +1217,49 @@ File name, Should not translated - Power options + Alternativer for strøm Area Control Panel (legacy settings) - Presentation + Presentasjon - Printers + Skrivere Area Control Panel (legacy settings) - Printers and scanners + Skrivere og skannere Area Device - Print screen + PRT SCN-knapp Mean the "Print screen" key - Problem reports and solutions + Problemrapporter og løsninger Area Control Panel (legacy settings) - Processor + Prosessor - Programs and features + Programmer og funksjoner Area Control Panel (legacy settings) - Projecting to this PC + Projiserer til denne PC-en Area System - protanopia + protanopi Medical: Mean you don't can see green colors - Provisioning + Klargjøring Area UserAccounts, only available if enterprise has deployed a provisioning package - Proximity + Nærhet Area NetworkAndInternet @@ -1271,10 +1271,10 @@ Area TimeAndLanguage - Quiet moments game + Rolig øyeblikk spill - Radios + Radioer Area Privacy @@ -1282,22 +1282,22 @@ Means the Read-Access-Memory (typical the used to inform about the size) - Recognition + Gjenkjennelse - Recovery + Gjenoppretting Area UpdateAndSecurity - Red eye + Røde øyne Mean red eye effect by over-the-night flights - Red-green + Rød-grønn Mean the weakness you can't differ between red and green colors - Red week + Rød uke Mean you don't can see red colors @@ -1305,30 +1305,30 @@ Area TimeAndLanguage - Regional language + Regionalt språk Area TimeAndLanguage - Regional settings properties + Egenskaper for regionale innstillinger Area Control Panel (legacy settings) - Region and language + Region og språk Area Control Panel (legacy settings) - Region formatting + Regionsformatering - RemoteApp and desktop connections + RemoteApp og skrivebordstilkoblinger Area Control Panel (legacy settings) - Remote Desktop + Eksternt skrivebord Area System - Scanners and cameras + Skannere og kameraer Area Control Panel (legacy settings) @@ -1336,18 +1336,18 @@ File name, Should not translated - Scheduled + Planlagt - Scheduled tasks + Planlagte oppgaver Area Control Panel (legacy settings) - Screen rotation + Skjermrotasjon Area System - Scroll bars + Rullefelt Scroll Lock @@ -1358,7 +1358,7 @@ Should not translated - Searching Windows + Søker i Windows Area Cortana @@ -1366,71 +1366,71 @@ Should not translated - Security Center + Sikkerhetssenter Area Control Panel (legacy settings) - Security Processor + Sikkerhetsbehandler - Session cleanup + Opprydding i økter Area SurfaceHub - Settings home page + Hjemmesiden for innstillinger Area Home, Overview-page for all areas of settings - Set up a kiosk + Sett opp en kiosk Area UserAccounts - Shared experiences + Delte erfaringer Area System - Shortcuts + Snarveier wifi dont translate this, is a short term to find entries - Sign-in options + Alternativer for pålogging Area UserAccounts - Sign-in options - Dynamic lock + Alternativer for pålogging - Dynamisk lås Area UserAccounts - Size + Størrelse Size for text and symbols - Sound + Lyd Area System - Speech + Tale Area EaseOfAccess - Speech recognition + Talegjenkjenning Area Control Panel (legacy settings) - Speech typing + Taleskriving Start Area Personalization - Start places + Startsteder - Startup apps + Oppstartsprogrammer Area Apps @@ -1438,27 +1438,27 @@ File name, Should not translated - Storage + Lagring Area System - Storage policies + Retningslinjer for lagring Area System - Storage Sense + Lagringssensor Area System - in + i Example: Area "System" in System settings - Sync center + Synkroniseringssenter Area Control Panel (legacy settings) - Sync your settings + Synkroniser innstillingene dine Area UserAccounts @@ -1470,53 +1470,53 @@ Area Control Panel (legacy settings) - System properties and Add New Hardware wizard + Systemegenskaper og veiviser for å legge til ny maskinvare Area Control Panel (legacy settings) - Tab + TAB Means the key "Tabulator" on the keyboard - Tablet mode + Nettbrettmodus Area System - Tablet PC settings + Innstillinger for nettbrett Area Control Panel (legacy settings) - Talk + Snakk - Talk to Cortana + Snakk med Cortana Area Cortana - Taskbar + Oppgavelinje Area Personalization - Taskbar color + Farge på oppgavelinje - Tasks + Oppgaver Area Privacy - Team Conferencing + Gruppekonferanser Area SurfaceHub - Team device management + Administrasjon av teamenheter Area SurfaceHub - Text to speech + Tekst til tale Area Control Panel (legacy settings) - Themes + Temaer Area Personalization @@ -1528,27 +1528,27 @@ File name, Should not translated - Timeline + Tidslinje - Touch + Berøring - Touch feedback + Tilbakemelding på berøring - Touchpad + Pekeplate Area Device - Transparency + Gjennomsiktighet - tritanopia + tritanopi Medical: Mean you don't can see yellow and blue colors - Troubleshoot + Feilsøking Area UpdateAndSecurity @@ -1556,11 +1556,11 @@ Area Gaming - Typing + Skriving Area Device - Uninstall + Avinstaller Area MixedReality, only available if the Mixed Reality Portal app is installed. @@ -1568,51 +1568,51 @@ Area Device - User accounts + Brukerkontoer Area Control Panel (legacy settings) - Version + Versjon Means The "Windows Version" - Video playback + Videoavspilling Area Apps - Videos + Videoer Area Privacy - Virtual Desktops + Virtuelle skrivebord Virus Means the virus in computers and software - Voice activation + Stemmeaktivering Area Privacy - Volume + Volum VPN Area NetworkAndInternet - Wallpaper + Bakgrunnsbilde - Warmer color + Varmere farge - Welcome center + Velkomstsenter Area Control Panel (legacy settings) - Welcome screen + Velkomstskjerm Area SurfaceHub @@ -1620,7 +1620,7 @@ File name, Should not translated - Wheel + Hjul Area Device @@ -1628,18 +1628,18 @@ Area NetworkAndInternet, only available if Wi-Fi calling is enabled - Wi-Fi Calling + Wi-Fi-anrop Area NetworkAndInternet, only available if Wi-Fi calling is enabled - Wi-Fi settings + Innstillinger for Wi-Fi "Wi-Fi" should not translated - Window border + Kantlinje for vindu - Windows Anytime Upgrade + Windows Anytime-oppgradering Area Control Panel (legacy settings) @@ -1655,15 +1655,15 @@ Area Control Panel (legacy settings) - Windows Firewall + Windows Defender Brannmur Area Control Panel (legacy settings) - Windows Hello setup - Face + Oppsett av Windows Hello – ansikt Area UserAccounts - Windows Hello setup - Fingerprint + Oppsett av Windows Hello – fingeravtrykk Area UserAccounts @@ -1671,15 +1671,15 @@ Area UpdateAndSecurity - Windows Mobility Center + Windows-mobilitetssenter Area Control Panel (legacy settings) - Windows search + Windows søk Area Cortana - Windows Security + Windows sikkerhet Area UpdateAndSecurity @@ -1687,828 +1687,828 @@ Area UpdateAndSecurity - Windows Update - Advanced options + Windows Update - avanserte alternativer Area UpdateAndSecurity - Windows Update - Check for updates + Windows Update - se etter oppdateringer Area UpdateAndSecurity - Windows Update - Restart options + Windows Update - alternativer for omstart Area UpdateAndSecurity - Windows Update - View optional updates + Windows Update - se valgfrie oppdateringer Area UpdateAndSecurity - Windows Update - View update history + Windows Update - se oppdateringshistorikk Area UpdateAndSecurity - Wireless + Trådløs - Workplace + Arbeidsområde - Workplace provisioning + Klargjøring på arbeidsplassen Area UserAccounts - Wubi IME settings + Wubi IME innstillinger Area TimeAndLanguage, available if the Microsoft Wubi input method editor is installed - Wubi IME settings - UDP + Wubi IME innstillinger - UDP Area TimeAndLanguage - Xbox Networking + Xbox-nettverk Area Gaming - Your info + Din informasjon Area UserAccounts - Zoom + Forstørre Mean zooming of things via a magnifier - Change device installation settings + Endre innstillingene for installasjon av enheten - Turn off background images + Slå av bakgrunnsbilder - Navigation properties + Egenskaper for navigering - Media streaming options + Alternativer for mediestrømming - Make a file type always open in a specific program + Gjør at en filtype alltid åpnes i et bestemt program - Change the Narrator’s voice + Endre oppleserens stemme - Find and fix keyboard problems + Finn og fiks tastaturproblemer - Use screen reader + Bruk skjermleser - Show which workgroup this computer is on + Vis hvilken arbeidsgruppe denne datamaskinen er på - Change mouse wheel settings + Endre musens hjulinnstillinger - Manage computer certificates + Administrer datamaskinsertifikater - Find and fix problems + Finn og fiks problemer - Change settings for content received using Tap and send + Endre innstillinger for innhold som mottas ved hjelp av Trykk og send - Change default settings for media or devices + Endre standardinnstillinger for media eller enheter - Print the speech reference card + Skriv ut referansekortet for tale - Calibrate display colour + Kalibrer visningsfarge - Manage file encryption certificates + Behandle filkrypteringssertifikater - View recent messages about your computer + Vis nylige meldinger om datamaskinen - Give other users access to this computer + Gi andre brukere tilgang til denne datamaskinen - Show hidden files and folders + Vis skjulte filer og mapper - Change Windows To Go start-up options + Endre oppstartsalternativer for portabel Windows - See which processes start up automatically when you start Windows + Se hvilke prosesser som starter automatisk når du starter Windows - Tell if an RSS feed is available on a website + Se om en RSS-nyhetsstrøm er tilgjengelig på et nettsted - Add clocks for different time zones + Legg til klokker for ulike tidssoner - Add a Bluetooth device + Legg til en Bluetooth-enhet - Customise the mouse buttons + Tilpass museknappene - Set tablet buttons to perform certain tasks + Still nettbrettknapper til å utføre bestemte oppgaver - View installed fonts + Vis installerte skrifttyper - Change the way currency is displayed + Endre hvordan valuta vises - Edit group policy + Rediger gruppens retningslinjer - Manage browser add-ons + Behandle nettlesertillegg - Check processor speed + Sjekk prosessorhastighet - Check firewall status + Kontroller brannmurstatus - Send or receive a file + Send eller motta en fil - Add or remove user accounts + Legg til eller fjern brukerkontoer - Edit the system environment variables + Rediger systemmiljøvariablene - Manage BitLocker + Administrer BitLocker - Auto-hide the taskbar + Skjul oppgavelinjen automatisk - Change sound card settings + Endre innstillinger for lydkort - Make changes to accounts + Gjør endringer i kontoer - Edit local users and groups + Rediger lokale brukere og grupper - View network computers and devices + Vis nettverksdatamaskiner og enheter - Install a program from the network + Installer et program fra nettverket - View scanners and cameras + Vis skannere og kameraer - Microsoft IME Register Word (Japanese) + Microsoft IME-register Word (japansk) - Restore your files with File History + Gjenopprett filer med filhistorikk - Turn On-Screen keyboard on or off + Slå skjermtastaturet på eller av - Block or allow third-party cookies + Blokker eller tillat informasjonskapsler fra tredjepart - Find and fix audio recording problems + Finn og fiks lydopptaksproblemer - Create a recovery drive + Opprett en gjenopprettingsstasjon - Microsoft New Phonetic Settings + Microsofts nye fonetiske innstillinger - Generate a system health report + Generer en systemhelserapport - Fix problems with your computer + Fiks problemer med datamaskinen - Back up and Restore (Windows 7) + Sikkerhetskopier og gjenopprett (Windows 7) - Preview, delete, show or hide fonts + Forhåndsvise, slette, vise eller skjule skrifter - Microsoft Quick Settings + Hurtiginnstillinger for Microsoft - View reliability history + Vis pålitelighetshistorikk - Access RemoteApp and desktops + Få tilgang til RemoteApp og skrivebord - Set up ODBC data sources + Sett opp ODBC-datakilder - Reset Security Policies + Tilbakestill sikkerhetspolicyer - Block or allow pop-ups + Blokker eller tillat sprettoppvinduer - Turn autocomplete in Internet Explorer on or off + Slå autofullfør i Internet Explorer på eller av - Microsoft Pinyin SimpleFast Options + Microsoft Pinyin SimpleFast-alternativer - Change what closing the lid does + Endre hva lukking av lokket gjør - Turn off unnecessary animations + Skru av unødvendige animasjoner - Create a restore point + Opprett et gjenopprettingspunkt - Turn off automatic window arrangement + Slå av automatisk vindusplassering - Troubleshooting History + Feilsøkingshistorikk - Diagnose your computer's memory problems + Diagnostiser datamaskinens minneproblemer - View recommended actions to keep Windows running smoothly + Vis anbefalte handlinger for å holde Windows i gang problemfritt - Change cursor blink rate + Endre markørens blinkehastighet - Add or remove programs + Legg til eller fjern programmer - Create a password reset disk + Opprett en disk for tilbakestilling av passord - Configure advanced user profile properties + Konfigurer avanserte brukerprofilegenskaper - Start or stop using AutoPlay for all media and devices + Start eller stopp å bruke AutoPlay for alle medier og enheter - Change Automatic Maintenance settings + Endre automatiske vedlikeholdsinnstillinger - Specify single- or double-click to open + Velg enkelt- eller dobbeltklikk for å åpne - Select users who can use remote desktop + Velg brukere som kan bruke eksternt skrivebord - Show which programs are installed on your computer + Vis hvilke programmer som er installert på datamaskinen - Allow remote access to your computer + Tillat ekstern tilgang til datamaskinen din - View advanced system settings + Vis avanserte systeminnstillinger - How to install a program + Hvordan installere et program - Change how your keyboard works + Endre hvordan tastaturet fungerer - Automatically adjust for daylight saving time + Juster automatisk for sommertid - Change the order of Windows SideShow gadgets + Endre rekkefølgen på Windows-SideShow gadgets - Check keyboard status + Sjekk tastaturstatus - Control the computer without the mouse or keyboard + Styr datamaskinen uten mus eller tastatur - Change or remove a program + Endre eller fjern et program - Change multi-touch gesture settings + Endre innstillinger for flerberøringsbevegelser - Set up ODBC data sources (64-bit) + Sett opp ODBC-datakilder (64-bit) - Configure proxy server + Konfigurer proxy-tjener - Change your homepage + Endre hjemmeside din - Group similar windows on the taskbar + Grupper lignende vinduer på oppgavelinjen - Change Windows SideShow settings + Endre Windows-sideShow innstillinger - Use audio description for video + Bruk lydbeskrivelse for video - Change workgroup name + Endre arbeidsgruppenavn - Find and fix printing problems + Finn og fiks utskriftsproblemer - Change when the computer sleeps + Endre når datamaskinen går i hvilemodus - Set up a virtual private network (VPN) connection + Sett opp en VPN-tilkobling (virtuelt privat nettverk) - Accommodate learning abilities + Tilrettelegge for læringsevner - Set up a dial-up connection + Sett opp en oppringt tilkobling - Set up a connection or network + Sett opp en tilkobling eller nettverk - How to change your Windows password + Hvordan endre Windows-passordet ditt - Make it easier to see the mouse pointer + Gjør det enklere å se musepekeren - Set up iSCSI initiator + Sett opp iSCSI-initiator - Accommodate low vision + Tilrettelegge for nedsatt syn - Manage offline files + Administrer frakoblede filer - Review your computer's status and resolve issues + Gjennomgå datamaskinens status og løs problemer - Microsoft ChangJie Settings + Microsoft ChangJie innstillinger - Replace sounds with visual cues + Erstatt lyder med visuelle signaler - Change temporary Internet file settings + Endre midlertidige Internett-filinnstillinger - Connect to the Internet + Koble til Internett - Find and fix audio playback problems + Finn og løs problemer med lydavspilling - Change the mouse pointer display or speed + Endre musepekerens visning eller hastighet - Back up your recovery key + Sikkerhetskopier gjenopprettingsnøkkelen din - Save backup copies of your files with File History + Lagre sikkerhetskopier av filer med filhistorikk - View current accessibility settings + Vis gjeldende tilgjengelighetsinnstillinger - Change tablet pen settings + Endre innstillingene for nettbrettpennen - Change how your mouse works + Endre hvordan musen fungerer - Show how much RAM is on this computer + Vis hvor mye RAM som er på denne datamaskinen - Edit power plan + Rediger strømstyringsplan - Adjust system volume + Juster systemvolum - Defragment and optimise your drives + Defragmenter og optimaliser harddiskene dine - Set up ODBC data sources (32-bit) + Sett opp ODBC-datakilder (32-bit) - Change Font Settings + Endre skriftinnstillinger - Magnify portions of the screen using Magnifier + Forstørr deler av skjermen ved å bruke Magnifier - Change the file type associated with a file extension + Endre filtypen som er knyttet til en filendelse - View event logs + Vis hendelseslogger - Manage Windows Credentials + Administrer Windows-legitimasjon - Set up a microphone + Sett opp en mikrofon - Change how the mouse pointer looks + Endre hvordan musepekeren ser ut - Change power-saving settings + Endre strømsparingsinnstillinger - Optimise for blindness + Optimaliser for blindhet - Turn Windows features on or off + Slå Windows-funksjoner på eller av - Show which operating system your computer is running + Vis hvilket operativsystem datamaskinen din kjører - View local services + Vis lokale tjenester - Manage Work Folders + Administrer arbeidsmapper - Encrypt your offline files + Krypter frakoblede filer - Train the computer to recognise your voice + Lær opp datamaskinen til å gjenkjenne stemmen din - Advanced printer setup + Avansert skriveroppsett - Change default printer + Endre standard skriver - Edit environment variables for your account + Rediger miljøvariabler for kontoen din - Optimise visual display + Optimaliser visuell visning - Change mouse click settings + Endre innstillinger for museklikk - Change advanced colour management settings for displays, scanners and printers + Endre avanserte innstillinger for fargebehandling for skjermer, skannere og skrivere - Let Windows suggest Ease of Access settings + La Windows foreslå Hjelpemiddelinnstillinger - Clear disk space by deleting unnecessary files + Frigjør diskplass ved å slette unødvendige filer - View devices and printers + Vis enheter og skrivere - Private Character Editor + Redigeringsprogram for private tegn - Record steps to reproduce a problem + Registrer trinn for å reprodusere et problem - Adjust the appearance and performance of Windows + Juster utseendet og ytelsen til Windows - Settings for Microsoft IME (Japanese) + Innstillinger for Microsoft IME (japansk) - Invite someone to connect to your PC and help you, or offer to help someone else + Inviter noen til å koble til PC-en din og hjelpe deg, eller tilby å hjelpe noen andre - Run programs made for previous versions of Windows + Kjør programmer for tidligere versjoner av Windows - Choose the order of how your screen rotates + Velg rekkefølgen på hvordan skjermen roterer - Change how Windows searches + Endre hvordan Windows søker - Set flicks to perform certain tasks + Sett flicks til å utføre enkelte oppgaver - Change account type + Endre kontotype - Change screen saver + Endre skjermsparer - Change User Account Control settings + Endre innstillinger for brukerkontokontroll - Turn on easy access keys + Slå på tastene for enkel tilgang - Identify and repair network problems + Identifiser og reparer nettverksproblemer - Find and fix networking and connection problems + Finn og fiks nettverks- og tilkoblingsproblemer - Play CDs or other media automatically + Spill av CDer eller andre medier automatisk - View basic information about your computer + Vis grunnleggende informasjon om datamaskinen - Choose how you open links + Velg hvordan du åpner koblinger - Allow Remote Assistance invitations to be sent from this computer + Tillat at invitasjoner til fjernhjelp sendes fra denne datamaskinen - Task Manager + Oppgavebehandling - Turn flicks on or off + Slå flicks av eller på - Add a language + Legg til et språk - View network status and tasks + Vis nettverksstatus og oppgaver - Turn Magnifier on or off + Slå forstørrelsesglass på eller av - See the name of this computer + Se navnet på denne datamaskinen - View network connections + Se nettverkstilkoblinger - Perform recommended maintenance tasks automatically + Utfør anbefalte vedlikeholdsoppgaver automatisk - Manage disk space used by your offline files + Behandle diskplass som brukes av frakoblede filer - Turn High Contrast on or off + Slå høy kontrast på eller av - Change the way time is displayed + Endre hvordan klokkeslett vises - Change how web pages are displayed in tabs + Endre hvordan nettsider vises i faner - Change the way dates and lists are displayed + Endre hvordan datoer og lister vises - Manage audio devices + Administrer lydenheter - Change security settings + Endre sikkerhetsinnstillinger - Check security status + Kontroller sikkerhetsstatus - Delete cookies or temporary files + Slett informasjonskapsler eller midlertidige filer - Specify which hand you write with + Oppgi hvilken hånd du skriver med - Change touch input settings + Endre innstillinger for berøringsinndata - How to change the size of virtual memory + Hvordan endre størrelsen på virtuelt minne - Hear text read aloud with Narrator + Hør tekst høyt med oppleseren - Set up USB game controllers + Sett opp USB-spillkontrollere - Show which domain your computer is on + Vis hvilket domene datamaskinen er på - View all problem reports + Vis alle problemrapporter - 16-Bit Application Support + Støtte for 16-biters applikasjoner - Set up dialling rules + Sett opp oppringingsregler - Enable or disable session cookies + Aktiver eller deaktiver øktinformasjonskapsler - Give administrative rights to a domain user + Gi administrative rettigheter til en domenebruker - Choose when to turn off display + Velg når skjermen skal slås av - Move the pointer with the keypad using MouseKeys + Flytt pekeren med tastaturet ved hjelp av musetaster - Change Windows SideShow-compatible device settings + Endre Windows SideShow-kompatible enhetsinnstillinger - Adjust commonly used mobility settings + Juster ofte brukte mobilitetsinnstillinger - Change text-to-speech settings + Endre tekst-til-tale innstillinger - Set the time and date + Angi tid og dato - Change location settings + Endre plasseringsinnstillinger - Change mouse settings + Endre musinnstillinger - Manage Storage Spaces + Administrer lagringsplasser - Show or hide file extensions + Vis eller skjul filendelser - Allow an app through Windows Firewall + Tillat en app gjennom Windows-brannmuren - Change system sounds + Endre systemlyder - Adjust ClearType text + Juster ClearType-tekst - Turn screen saver on or off + Slå skjermsparer på eller av - Find and fix windows update problems + Finn og fiks problemer med Windows-oppdatering - Change Bluetooth settings + Endre innstillinger for Bluetooth - Connect to a network + Koble til et nettverk - Change the search provider in Internet Explorer + Endre søkeleverandør i Internet Explorer - Join a domain + Bli med i et domene - Add a device + Legg til enhet - Find and fix problems with Windows Search + Finn og fiks problemer med Windows Søk - Choose a power plan + Velg en strømstyringsplan - Change how the mouse pointer looks when it’s moving + Endre hvordan musepekeren ser ut når den beveger seg - Uninstall a program + Avinstaller et program - Create and format hard disk partitions + Opprett og formater harddiskpartisjoner - Change date, time or number formats + Endre dato, klokkeslett eller tallformat - Change PC wake-up settings + Endre innstillinger for PC-oppvåkning - Manage network passwords + Administrer nettverkspassord - Change input methods + Endre inndatametoder - Manage advanced sharing settings + Administrer avanserte delingsinnstillinger - Change battery settings + Endre batteriinnstillinger - Rename this computer + Endre navn på denne datamaskinen - Lock or unlock the taskbar + Lås eller lås opp oppgavelinjen - Manage Web Credentials + Behandle nettlegitimasjon - Change the time zone + Endre tidssonen - Start speech recognition + Start talegjenkjenning - View installed updates + Vis installerte oppdateringer - What's happened to the Quick Launch toolbar? + Hva har skjedd med verktøylinjen for hurtigstart? - Change search options for files and folders + Endre søkealternativer for filer og mapper - Adjust settings before giving a presentation + Juster innstillinger før en presentasjon blir gitt - Scan a document or picture + Skann et dokument eller bilde - Change the way measurements are displayed + Endre hvordan målinger vises - Press key combinations one at a time + Press nøkkelkombinasjoner én om gangen - Restore data, files or computer from backup (Windows 7) + Gjenopprett data, filer eller datamaskin fra sikkerhetskopi (Windows 7) - Set your default programs + Angi standardprogrammene dine - Set up a broadband connection + Konfigurer en bredbåndstilkobling - Calibrate the screen for pen or touch input + Kalibrer skjermen for penn- eller berøringsinndata - Manage user certificates + Administrer brukersertifikater - Schedule tasks + Planlagte oppgaver - Ignore repeated keystrokes using FilterKeys + Ignorer gjentatte tastetrykk ved å bruke FilterKeys - Find and fix bluescreen problems + Finn og fiks problemer med blåskjerm - Hear a tone when keys are pressed + Hør en tone når taster trykkes - Delete browsing history + Slett nettleserhistorikk - Change what the power buttons do + Endre hva strømknappene gjør - Create standard user account + Opprett standard brukerkonto - Take speech tutorials + Ta taleopplæringer - View system resource usage in Task Manager + Vis systemressursbruk i oppgavebehandling - Create an account + Opprett en konto - Get more features with a new edition of Windows + Få flere funksjoner med en ny versjon av Windows - Control Panel + Kontrollpanel TaskLink - Unknown + Ukjent \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pl-PL.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pl-PL.resx index 843a48993..8c2b2db65 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pl-PL.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pl-PL.resx @@ -254,7 +254,7 @@ Zegar i region - Control Panel + Panel sterowania Cortana @@ -375,7 +375,7 @@ Area Control Panel (legacy settings) - Jasny niebieski + Niebieskie światło Bluetooth @@ -440,7 +440,7 @@ Area System - Napisy + Napisy dla niesłyszących Area EaseOfAccess @@ -468,7 +468,7 @@ Area Privacy - Control Panel + Panel sterowania Type of the setting is a "(legacy) Control Panel setting" @@ -627,7 +627,7 @@ Area NetworkAndInternet - Exploit Protection + Ochrona przed exploitami Dodatki @@ -876,7 +876,7 @@ Area Privacy - Microsoft Mail Post Office + Poczta Microsoft Mail Area Control Panel (legacy settings) @@ -1206,7 +1206,7 @@ Wtyczka do wyszukiwania ustawień systemu Windows - Windows Settings + Ustawienia systemu Windows Zasilanie i uśpienie @@ -1450,7 +1450,7 @@ Area System - in + w Example: Area "System" in System settings @@ -1486,7 +1486,7 @@ Area Control Panel (legacy settings) - Talk + Rozmawiaj Porozmawiaj z Cortaną @@ -1639,7 +1639,7 @@ Obramowanie okna - Windows Anytime Upgrade + Aktualizacja systemu Windows w dowolnym momencie Area Control Panel (legacy settings) @@ -1737,778 +1737,778 @@ Mean zooming of things via a magnifier - Change device installation settings + Zmień ustawienia instalacji urządzenia - Turn off background images + Wyłącz obrazy w tle - Navigation properties + Właściwości nawigacji - Media streaming options + Opcje przesyłania strumieniowego - Make a file type always open in a specific program + Ustaw, aby typ pliku zawsze otwierał się w określonym programie - Change the Narrator’s voice + Zmień głos Narratora - Find and fix keyboard problems + Znajdź i rozwiąż problemy z klawiaturą - Use screen reader + Użyj czytnika ekranu - Show which workgroup this computer is on + Pokaż, do której grupy roboczej należy ten komputer - Change mouse wheel settings + Zmień ustawienia kółka myszy - Manage computer certificates + Zarządzaj certyfikatami komputera - Find and fix problems + Znajdź i rozwiąż problemy - Change settings for content received using Tap and send + Zmień ustawienia dla treści odbieranych za pomocą funkcji Dotknij i wyślij - Change default settings for media or devices + Zmień domyślne ustawienia dla multimediów lub urządzeń - Print the speech reference card + Wydrukuj kartę referencyjną mowy - Calibrate display colour + Skalibruj kolor wyświetlacza - Manage file encryption certificates + Zarządzaj certyfikatami szyfrowania plików - View recent messages about your computer + Wyświetl ostatnie komunikaty dotyczące twojego komputera - Give other users access to this computer + Przyznaj innym użytkownikom dostęp do tego komputera - Show hidden files and folders + Pokaż ukryte pliki i foldery - Change Windows To Go start-up options + Zmień opcje uruchamiania funkcji Windows To Go - See which processes start up automatically when you start Windows + Zobacz, które procesy uruchamiają się automatycznie po uruchomieniu systemu Windows - Tell if an RSS feed is available on a website + Sprawdź, czy kanał RSS jest dostępny na stronie internetowej - Add clocks for different time zones + Dodaj zegary dla różnych stref czasowych - Add a Bluetooth device + Dodaj urządzenie Bluetooth - Customise the mouse buttons + Dostosuj przyciski myszy - Set tablet buttons to perform certain tasks + Ustaw przyciski tabletu do wykonywania określonych zadań - View installed fonts + Wyświetl zainstalowane czcionki - Change the way currency is displayed + Zmień sposób wyświetlania waluty - Edit group policy + Edytuj zasady grupy - Manage browser add-ons + Zarządzaj dodatkami przeglądarki - Check processor speed + Sprawdź szybkość procesora - Check firewall status + Sprawdź stan zapory sieciowej - Send or receive a file + Wyślij lub odbierz plik - Add or remove user accounts + Dodaj lub usuń konta użytkowników - Edit the system environment variables + Edytuj systemowe zmienne środowiskowe - Manage BitLocker + Zarządzaj funkcją BitLocker - Auto-hide the taskbar + Automatycznie ukrywaj pasek zadań - Change sound card settings + Zmień ustawienia karty dźwiękowej - Make changes to accounts + Dokonaj zmian w kontach - Edit local users and groups + Edytuj lokalnych użytkowników i grupy - View network computers and devices + Wyświetl komputery i urządzenia sieciowe - Install a program from the network + Zainstaluj program z sieci - View scanners and cameras + Wyświetl skanery i aparaty - Microsoft IME Register Word (Japanese) + Rejestracja słów Microsoft IME (japoński) - Restore your files with File History + Przywróć pliki za pomocą Historii plików - Turn On-Screen keyboard on or off + Włącz lub wyłącz klawiaturę ekranową - Block or allow third-party cookies + Blokuj lub zezwalaj na pliki cookie innych firm - Find and fix audio recording problems + Znajdź i rozwiąż problemy z nagrywaniem dźwięku - Create a recovery drive + Utwórz dysk odzyskiwania - Microsoft New Phonetic Settings + Nowe ustawienia fonetyczne Microsoft - Generate a system health report + Generuj raport o stanie systemu - Fix problems with your computer + Rozwiąż problemy z komputerem - Back up and Restore (Windows 7) + Kopia zapasowa i przywracanie (Windows 7) - Preview, delete, show or hide fonts + Podgląd, usuń, pokaż lub ukryj czcionki - Microsoft Quick Settings + Szybkie ustawienia Microsoft - View reliability history + Wyświetl historię niezawodności - Access RemoteApp and desktops + Dostęp do aplikacji i pulpitów RemoteApp - Set up ODBC data sources + Skonfiguruj źródła danych ODBC - Reset Security Policies + Resetuj zasady bezpieczeństwa - Block or allow pop-ups + Blokuj lub zezwalaj na wyskakujące okienka - Turn autocomplete in Internet Explorer on or off + Włącz lub wyłącz autouzupełnianie w przeglądarce Internet Explorer - Microsoft Pinyin SimpleFast Options + Opcje Microsoft Pinyin SimpleFast - Change what closing the lid does + Zmień działanie po zamknięciu pokrywy - Turn off unnecessary animations + Wyłącz niepotrzebne animacje - Create a restore point + Utwórz punkt przywracania - Turn off automatic window arrangement + Wyłącz automatyczne rozmieszczanie okien - Troubleshooting History + Historia rozwiązywania problemów - Diagnose your computer's memory problems + Zdiagnozuj problemy z pamięcią komputera - View recommended actions to keep Windows running smoothly + Wyświetl zalecane działania, aby zapewnić płynne działanie systemu Windows - Change cursor blink rate + Zmień częstotliwość migania kursora - Add or remove programs + Dodaj lub usuń programy - Create a password reset disk + Utwórz dysk resetowania hasła - Configure advanced user profile properties + Dodaj lub usuń programy - Start or stop using AutoPlay for all media and devices + Włącz lub wyłącz funkcję Autoodtwarzanie dla wszystkich multimediów i urządzeń - Change Automatic Maintenance settings + Zmień ustawienia Automatycznej konserwacji - Specify single- or double-click to open + Określ pojedyncze lub podwójne kliknięcie, aby otworzyć - Select users who can use remote desktop + Wybierz użytkowników, którzy mogą używać Pulpitu zdalnego - Show which programs are installed on your computer + Pokaż, które programy są zainstalowane na twoim komputerze - Allow remote access to your computer + Zezwól na zdalny dostęp do twojego komputera - View advanced system settings + Wyświetl zaawansowane ustawienia systemu - How to install a program + Jak zainstalować program - Change how your keyboard works + Zmień sposób działania klawiatury - Automatically adjust for daylight saving time + Automatycznie dostosuj do czasu letniego - Change the order of Windows SideShow gadgets + Zmień kolejność gadżetów Windows SideShow - Check keyboard status + Sprawdź stan klawiatury - Control the computer without the mouse or keyboard + Kontroluj komputer bez myszy lub klawiatury - Change or remove a program + Zmień lub usuń program - Change multi-touch gesture settings + Zmień ustawienia gestów wielodotykowych - Set up ODBC data sources (64-bit) + Skonfiguruj źródła danych ODBC (64-bitowe) - Configure proxy server + Skonfiguruj serwer proxy - Change your homepage + Zmień stronę główną - Group similar windows on the taskbar + Grupuj podobne okna na pasku zadań - Change Windows SideShow settings + Zmień ustawienia Windows SideShow - Use audio description for video + Użyj audiodeskrypcji dla wideo - Change workgroup name + Zmień nazwę grupy roboczej - Find and fix printing problems + Znajdź i rozwiąż problemy z drukowaniem - Change when the computer sleeps + Zmień czas przejścia komputera w stan uśpienia - Set up a virtual private network (VPN) connection + Skonfiguruj połączenie wirtualnej sieci prywatnej (VPN) - Accommodate learning abilities + Dostosuj do zdolności uczenia się - Set up a dial-up connection + Skonfiguruj połączenie telefoniczne - Set up a connection or network + Skonfiguruj połączenie lub sieć - How to change your Windows password + Jak zmienić hasło systemu Windows - Make it easier to see the mouse pointer + Ułatw widoczność wskaźnika myszy - Set up iSCSI initiator + Skonfiguruj inicjator iSCSI - Accommodate low vision + Dostosuj do słabego wzroku - Manage offline files + Zarządzaj plikami offline - Review your computer's status and resolve issues + Przejrzyj stan komputera i rozwiąż problemy - Microsoft ChangJie Settings + Ustawienia Microsoft ChangJie - Replace sounds with visual cues + Zastąp dźwięki wskazówkami wizualnymi - Change temporary Internet file settings + Zmień ustawienia tymczasowych plików internetowych - Connect to the Internet + Połącz się z Internetem - Find and fix audio playback problems + Znajdź i rozwiąż problemy z odtwarzaniem dźwięku - Change the mouse pointer display or speed + Zmień wyświetlanie lub szybkość wskaźnika myszy - Back up your recovery key + Utwórz kopię zapasową klucza odzyskiwania - Save backup copies of your files with File History + Zapisuj kopie zapasowe plików za pomocą Historii plików - View current accessibility settings + Wyświetl bieżące ustawienia ułatwień dostępu - Change tablet pen settings + Zmień ustawienia pióra tabletu - Change how your mouse works + Zmień sposób działania myszy - Show how much RAM is on this computer + Pokaż ilość pamięci RAM w tym komputerze - Edit power plan + Edytuj plan zasilania - Adjust system volume + Dostosuj głośność systemu - Defragment and optimise your drives + Defragmentuj i optymalizuj dyski - Set up ODBC data sources (32-bit) + Skonfiguruj źródła danych ODBC (32-bitowe) - Change Font Settings + Zmień ustawienia czcionek - Magnify portions of the screen using Magnifier + Powiększaj fragmenty ekranu za pomocą Lupy - Change the file type associated with a file extension + Zmień typ pliku powiązany z rozszerzeniem pliku - View event logs + Wyświetl dzienniki zdarzeń - Manage Windows Credentials + Zarządzaj poświadczeniami systemu Windows - Set up a microphone + Skonfiguruj mikrofon - Change how the mouse pointer looks + Zmień wygląd wskaźnika myszy - Change power-saving settings + Zmień ustawienia oszczędzania energii - Optimise for blindness + Optymalizacja pod kątem ślepoty - Turn Windows features on or off + Włącz lub wyłącz funkcje systemu Windows - Show which operating system your computer is running + Pokaż, jaki system operacyjny jest uruchomiony na tym komputerze - View local services + Wyświetl usługi lokalne - Manage Work Folders + Zarządzaj folderami roboczymi - Encrypt your offline files + Szyfruj pliki offline - Train the computer to recognise your voice + Naucz komputer rozpoznawać Twój głos - Advanced printer setup + Zaawansowana konfiguracja drukarki - Change default printer + Zmień domyślną drukarkę - Edit environment variables for your account + Edytuj zmienne środowiskowe dla swojego konta - Optimise visual display + Optymalizuj wyświetlanie - Change mouse click settings + Zmień ustawienia kliknięć myszy - Change advanced colour management settings for displays, scanners and printers + Zmień zaawansowane ustawienia zarządzania kolorami dla wyświetlaczy, skanerów i drukarek - Let Windows suggest Ease of Access settings + Pozwól systemowi Windows zasugerować ustawienia ułatwień dostępu - Clear disk space by deleting unnecessary files + Zwolnij miejsce na dysku, usuwając niepotrzebne pliki - View devices and printers + Wyświetl urządzenia i drukarki - Private Character Editor + Edytor znaków prywatnych - Record steps to reproduce a problem + Zarejestruj kroki, aby odtworzyć problem - Adjust the appearance and performance of Windows + Dostosuj wygląd i wydajność systemu Windows - Settings for Microsoft IME (Japanese) + Ustawienia dla Microsoft IME (japoński) - Invite someone to connect to your PC and help you, or offer to help someone else + Zaproś kogoś do połączenia się z Twoim komputerem i pomocy lub zaoferuj pomoc komuś innemu - Run programs made for previous versions of Windows + Uruchom programy stworzone dla poprzednich wersji systemu Windows - Choose the order of how your screen rotates + Wybierz kolejność obracania ekranu - Change how Windows searches + Zmień sposób wyszukiwania w systemie Windows - Set flicks to perform certain tasks + Ustaw gesty do wykonywania określonych zadań - Change account type + Zmień typ konta - Change screen saver + Zmień wygaszacz ekranu - Change User Account Control settings + Zmień ustawienia Kontroli konta użytkownika - Turn on easy access keys + Włącz klawisze ułatwień dostępu - Identify and repair network problems + Zidentyfikuj i napraw problemy z siecią - Find and fix networking and connection problems + Znajdź i rozwiąż problemy z siecią i połączeniem - Play CDs or other media automatically + Automatycznie odtwarzaj płyty CD lub inne multimedia - View basic information about your computer + Wyświetl podstawowe informacje o komputerze - Choose how you open links + Wybierz sposób otwierania linków - Allow Remote Assistance invitations to be sent from this computer + Zezwól na wysyłanie zaproszeń Pomocy zdalnej z tego komputera - Task Manager + Menadżer zadań - Turn flicks on or off + Włącz lub wyłącz gesty - Add a language + Dodaj język - View network status and tasks + Wyświetl stan sieci i zadania - Turn Magnifier on or off + Włącz lub wyłącz Lupę - See the name of this computer + Zobacz nazwę tego komputera - View network connections + Wyświetl połączenia sieciowe - Perform recommended maintenance tasks automatically + Automatycznie wykonuj zalecane zadania konserwacyjne - Manage disk space used by your offline files + Zarządzaj przestrzenią dyskową używaną przez pliki offline - Turn High Contrast on or off + Włącz lub wyłącz Wysoki kontrast - Change the way time is displayed + Zmień sposób wyświetlania czasu - Change how web pages are displayed in tabs + Zmień sposób wyświetlania stron internetowych w kartach - Change the way dates and lists are displayed + Zmień sposób wyświetlania dat i list - Manage audio devices + Zarządzaj urządzeniami audio - Change security settings + Zmień ustawienia bezpieczeństwa - Check security status + Sprawdź stan zabezpieczeń - Delete cookies or temporary files + Usuń pliki cookie lub pliki tymczasowe - Specify which hand you write with + Określ, którą ręką piszesz - Change touch input settings + Zmień ustawienia wprowadzania dotykowego - How to change the size of virtual memory + Jak zmienić rozmiar pamięci wirtualnej - Hear text read aloud with Narrator + Słuchaj tekstu czytanego na głos przez Narratora - Set up USB game controllers + Skonfiguruj kontrolery gier USB - Show which domain your computer is on + Pokaż, do jakiej domeny należy twój komputer - View all problem reports + Wyświetl wszystkie raporty o problemach - 16-Bit Application Support + Obsługa aplikacji 16-bitowych - Set up dialling rules + Skonfiguruj reguły wybierania numeru - Enable or disable session cookies + Włącz lub wyłącz ciasteczka sesji - Give administrative rights to a domain user + Nadaj uprawnienia administracyjne użytkownikowi domeny - Choose when to turn off display + Wybierz, kiedy wyłączyć ekran - Move the pointer with the keypad using MouseKeys + Przesuń wskaźnik za pomocą klawiatury numerycznej używając funkcji Klawisze myszy - Change Windows SideShow-compatible device settings + Zmień ustawienia urządzeń zgodnych z Windows SideShow - Adjust commonly used mobility settings + Dostosuj często używane ustawienia mobilności - Change text-to-speech settings + Zmień ustawienia zamiany tekstu na mowę - Set the time and date + Ustaw czas i datę - Change location settings + Zmień ustawienia lokalizacji - Change mouse settings + Zmień ustawienia myszy - Manage Storage Spaces + Zarządzaj przestrzeniami magazynowymi - Show or hide file extensions + Pokaż/Ukryj rozszerzenia plików - Allow an app through Windows Firewall + Zezwól aplikacji na dostęp przez Zaporę systemu Windows - Change system sounds + Zmień dźwięki systemowe - Adjust ClearType text + Dostosuj tekst ClearType - Turn screen saver on or off + Włącz lub wyłącz wygaszacz ekranu - Find and fix windows update problems + Znajdź i rozwiąż problemy z aktualizacjami systemu Windows - Change Bluetooth settings + Zmień ustawienia Bluetooth - Connect to a network + Połącz się z siecią - Change the search provider in Internet Explorer + Zmień dostawcę wyszukiwania w przeglądarce Internet Explorer - Join a domain + Dołącz do domeny - Add a device + Dodaj urządzenie - Find and fix problems with Windows Search + Znajdź i rozwiąż problemy z wyszukiwaniem w systemie Windows - Choose a power plan + Wybierz plan zasilania - Change how the mouse pointer looks when it’s moving + Zmień wygląd wskaźnika myszy podczas ruchu - Uninstall a program + Odinstaluj program - Create and format hard disk partitions + Utwórz i sformatuj partycje dysku twardego - Change date, time or number formats + Zmień format daty, godziny lub liczb - Change PC wake-up settings + Zmień ustawienia wybudzania komputera - Manage network passwords + Zarządzaj hasłami sieciowymi - Change input methods + Zmień metody wprowadzania - Manage advanced sharing settings + Zarządzaj zaawansowanymi ustawieniami udostępniania - Change battery settings + Zmień ustawienia baterii - Rename this computer + Zmień nazwę tego komputera - Lock or unlock the taskbar + Zablokuj lub odblokuj pasek zadań - Manage Web Credentials + Zarządzaj poświadczeniami internetowymi - Change the time zone + Zmień strefę czasową - Start speech recognition + Rozpocznij rozpoznawanie mowy - View installed updates + Wyświetl zainstalowane aktualizacje - What's happened to the Quick Launch toolbar? + Co się stało z paskiem Szybkie uruchamianie? - Change search options for files and folders + Zmień opcje wyszukiwania plików i folderów - Adjust settings before giving a presentation + Dostosuj ustawienia przed rozpoczęciem prezentacji - Scan a document or picture + Skanuj dokument lub obraz - Change the way measurements are displayed + Zmień sposób wyświetlania jednostek miar - Press key combinations one at a time + Naciskaj kombinacje klawiszy pojedynczo - Restore data, files or computer from backup (Windows 7) + Przywróć dane, pliki lub komputer z kopii zapasowej (Windows 7) - Set your default programs + Ustaw programy domyślne - Set up a broadband connection + Skonfiguruj połączenie szerokopasmowe - Calibrate the screen for pen or touch input + Skalibruj ekran do obsługi piórem lub dotykiem - Manage user certificates + Zarządzaj certyfikatami użytkownika - Schedule tasks + Zaplanuj zadania - Ignore repeated keystrokes using FilterKeys + Ignoruj powtarzające się naciśnięcia klawiszy za pomocą funkcji Klawisze filtru - Find and fix bluescreen problems + Znajdź i rozwiąż problemy z niebieskim ekranem - Hear a tone when keys are pressed + Odtwarzaj dźwięk przy naciskaniu klawiszy - Delete browsing history + Usuń historię przeglądania - Change what the power buttons do + Zmień działanie przycisków zasilania - Create standard user account + Utwórz standardowe konto użytkownika - Take speech tutorials + Skorzystaj z samouczków rozpoznawania mowy - View system resource usage in Task Manager + Wyświetl wykorzystanie zasobów systemowych w Menedżerze zadań - Create an account + Utwórz konto - Get more features with a new edition of Windows + Uzyskaj więcej funkcji z nową edycją systemu Windows - Control Panel + Panel sterowania TaskLink - Unknown + Nieznane \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pt-PT.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pt-PT.resx index b243dafd8..e7f8e1683 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pt-PT.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.pt-PT.resx @@ -1779,7 +1779,7 @@ Alterar definições padrão para multimédia e dispositivos - Print the speech reference card + Imprimir o cartão de referência de fala Calibrar ecrã @@ -1905,7 +1905,7 @@ Microsoft Quick Settings - View reliability history + Ver histórico de fiabilidade Access RemoteApp and desktops @@ -1923,7 +1923,7 @@ Ativar ou desativar conclusão automática no Internet Explorer - Microsoft Pinyin SimpleFast Options + Opções SimpleFast do Microsoft Pinyin Change what closing the lid does @@ -1947,16 +1947,16 @@ Ver ações recomendadas para manter o sistema a funcionar nas melhores condições - Change cursor blink rate + Alterar a frequência de piscar do cursor Adicionar ou remover programas - Create a password reset disk + Criar disco de redefinição da palavra-passe - Configure advanced user profile properties + Configurar propriedades avançadas do perfil de utilizador Start or stop using AutoPlay for all media and devices @@ -1971,10 +1971,10 @@ Utilizadores que podem utilizar o ambiente de trabalho remoto - Show which programs are installed on your computer + Mostre que programas estão instalados no seu computador - Allow remote access to your computer + Permitir o acesso remoto ao seu computador Ver definições avançadas do sistema @@ -1986,10 +1986,10 @@ Alterar modo de funcionamento do teclado - Automatically adjust for daylight saving time + Ajustar automaticamente para horário de verão - Change the order of Windows SideShow gadgets + Alterar a ordem dos Windows SideShow gadgets Analisar estado do teclado @@ -2037,34 +2037,34 @@ Accommodate learning abilities - Set up a dial-up connection + Configurar uma ligação telefónica - Set up a connection or network + Configurar uma ligação ou rede Como alterar a palavra-passe do Windows - Make it easier to see the mouse pointer + Tornar mais fácil ver o ponteiro do rato - Set up iSCSI initiator + Configurar o iniciador iSCSI - Accommodate low vision + Ajustar para baixa visão Gerir ficheiros offline - Review your computer's status and resolve issues + Verificar o estado do computador e resolver problemas - Microsoft ChangJie Settings + Configurações Microsoft ChangJie - Replace sounds with visual cues + Substituir sons por pistas visuais Change temporary Internet file settings @@ -2079,10 +2079,10 @@ Alterar exibição e/ou velocidade do ponteiro do rato - Back up your recovery key + Cópia de segurança da chave de recuperação - Save backup copies of your files with File History + Guardar cópias de segurança dos ficheiros no Histórico de Ficheiros View current accessibility settings @@ -2155,7 +2155,7 @@ Encrypt your offline files - Train the computer to recognise your voice + Treinar o computador para reconhecer a sua voz Configuração avançada de impressora @@ -2218,7 +2218,7 @@ Alterar proteção de ecrã - Change User Account Control settings + Alterar Configurações de Controlo da Conta do Utilizador Turn on easy access keys @@ -2443,7 +2443,7 @@ Change search options for files and folders - Adjust settings before giving a presentation + Ajustar definições antes de uma apresentação Digitalizar um documento ou imagem @@ -2455,7 +2455,7 @@ Press key combinations one at a time - Restore data, files or computer from backup (Windows 7) + Restaurar dados, ficheiros ou computador a partir de cópia de segurança (Windows 7) Set your default programs @@ -2467,10 +2467,10 @@ Calibrate the screen for pen or touch input - Manage user certificates + Gerir certificados do utilizador - Schedule tasks + Agendar tarefas Ignore repeated keystrokes using FilterKeys @@ -2482,7 +2482,7 @@ Hear a tone when keys are pressed - Delete browsing history + Eliminar histórico de navegação Change what the power buttons do @@ -2494,7 +2494,7 @@ Take speech tutorials - View system resource usage in Task Manager + Ver utilização de recursos no gestor de tarefas Criar uma conta diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.vi-VN.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.vi-VN.resx new file mode 100644 index 000000000..1ec616d9d --- /dev/null +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.vi-VN.resx @@ -0,0 +1,2515 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Giới thiệu + Area System + + + truy cập.cpl + File name, Should not translated + + + Tùy chọn khả năng tiếp cận + Area Control Panel (legacy settings) + + + Ứng dụng phụ kiện + Area Privacy + + + Truy cập cơ quan hoặc trường học + Area UserAccounts + + + Thông tin tài khoản + Area Privacy + + + Tài khoản + Area SurfaceHub + + + Trung tâm thông báo + Area Control Panel (legacy settings) + + + Kích hoạt + Area UpdateAndSecurity + + + Lịch sử hoạt động + Area Privacy + + + Thêm phần cứng + Area Control Panel (legacy settings) + + + Thêm chương trình xóa + Area Control Panel (legacy settings) + + + Thêm điện thoại của bạn + Area Phone + + + Các công cụ quản trị + Area System + + + Cài đặt hiển thị nâng cao + Area System, only available on devices that support advanced display options + + + Đồ họa nâng cao + + + ID quảng cáo + Area Privacy, Deprecated in Windows 10, version 1809 and later + + + Chế độ trên máy bay + Area NetworkAndInternet + + + Alt-Tab thay thế cho phép tìm kiếm thông qua các cửa sổ của bạn. + Means the key combination "Tabulator+Alt" on the keyboard + + + Tên khác + + + Hình ảnh động + + + Màu ứng dụng + + + Chẩn đoán DM + Area Privacy + + + Tính năng ứng dụng + Area Apps + + + Ứng dụng + Short/modern name for application + + + Ứng dụng và tính năng + Area Apps + + + Thiết lập hệ thống + Type of the setting is a "Modern Windows settings". We use the same term as used in start menu search at the moment. + + + Ứng dụng cho trang web + Area Apps + + + Âm lượng của từng ứng dụng và tùy chọn thiết bị + Area System, Added in Windows 10, version 1903 + + + appwiz.cpl + File name, Should not translated + + + Khu vực + Mean the settings area or settings category + + + Tài khoản + + + Các công cụ quản trị + Area Control Panel (legacy settings) + + + Ngoại hình và cá nhân hóa + + + Ứng dụng + + + Đồng hồ và khu vực + + + Bảng điều khiển + + + Cortana + + + Thiết bị + + + Truy cập nhanh + + + Phụ trợ + + + Trò chơi + + + Phần cứng và âm thanh + + + Trang chủ + + + Thực tế hỗn hợp + + + Mạng và Internet + + + Cá nhân hóa + + + Điện thoại + + + Quyền riêng tư + + + Chương trình + + + SurfaceHub + + + Hệ thống + + + Hệ thống và bảo mật + + + Thời gian và ngôn ngữ + + + Cập nhật và bảo mật + + + Tài khoản người sử dụng + + + Quyền truy cập được chỉ định + + + Âm thanh + Area EaseOfAccess + + + Cảnh báo âm thanh + + + Âm thanh và lời nói + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + Tải tập tin tự động + Area Privacy + + + Tự động phát + Area Device + + + Nền + Area Personalization + + + Ứng dụng nền + Area Privacy + + + Sao lưu + Area UpdateAndSecurity + + + Sao lưu và Khôi phục + Area Control Panel (legacy settings) + + + Trình tiết kiệm pin + Area System, only available on devices that have a battery, such as a tablet + + + Cài đặt tiết kiệm pin + Area System, only available on devices that have a battery, such as a tablet + + + Chi tiết sử dụng trình tiết kiệm pin + + + Sử dụng Pin + Area System, only available on devices that have a battery, such as a tablet + + + Thiết bị sinh trắc học + Area Control Panel (legacy settings) + + + Mã hóa ổ đĩa BitLocker + Area Control Panel (legacy settings) + + + Xanh dương (sáng) + + + Bluetooth + Area Device + + + Thiết bị Bluetooth + Area Control Panel (legacy settings) + + + Xanh lam – vàng + + + Bopomofo IME + Area TimeAndLanguage + + + bpmf + Should not translated + + + Đang phát sóng + Area Gaming + + + Lịch + Area Privacy + + + Lịch sử cuộc gọi + Area Privacy + + + đang gọi + + + Máy ảnh + Area Privacy + + + Cangjie IME + Area TimeAndLanguage + + + Caps Lock + Mean the "Caps Lock" key + + + Di động và SIM + Area NetworkAndInternet + + + Chọn thư mục nào xuất hiện trên Bắt đầu + Area Personalization + + + Dịch vụ khách hàng cho NetWare + Area Control Panel (legacy settings) + + + Nhận văn bản từ bảng nhớ tạm. + Area System + + + Phụ đề chi tiết + Area EaseOfAccess + + + Bộ lọc màu + Area EaseOfAccess + + + Quản lý màu sắc + Area Control Panel (legacy settings) + + + Màu + Area Personalization + + + Lệnh + The command to direct start a setting + + + Các thiết bị đã kết nối + Area Device + + + Danh bạ + Area Privacy + + + Bảng điều khiển + Type of the setting is a "(legacy) Control Panel setting" + + + Sao chép lệnh + + + Cách ly lõi + Means the protection of the system core + + + Cortana + Area Cortana + + + Cortana trên các thiết bị của tôi + Area Cortana + + + Cortana - Ngôn ngữ + Area Cortana + + + Người quản lý thông tin xác thực + Area Control Panel (legacy settings) + + + Thiết bị chéo + + + Thiết bị tùy chỉnh + + + Màu tối + + + Chế độ tối + + + Sử dụng dữ liệu + Area NetworkAndInternet + + + Ngày và giờ + Area TimeAndLanguage + + + Ứng dụng mặc định + Area Apps + + + Camera mặc định + Area Device + + + Vị trí mặc định + Area Control Panel (legacy settings) + + + Chương trình mặc định + Area Control Panel (legacy settings) + + + Vị trí mặc định + Area System + + + Delivery Optimization + Area UpdateAndSecurity + + + desk.cpl + File name, Should not translated + + + Desktop themes + Area Control Panel (legacy settings) + + + Mù màu Deuteranopia + Medical: Mean you don't can see red colors + + + Quản lý thiết bị + Area Control Panel (legacy settings) + + + Devices and printers + Area Control Panel (legacy settings) + + + DHCP + Should not translated + + + Dial-up + Area NetworkAndInternet + + + Truy cập thẳng + Area NetworkAndInternet, only available if DirectAccess is enabled + + + Direct open your phone + Area EaseOfAccess + + + Hiển thị + Area EaseOfAccess + + + Hiển thị thuộc tính + Area Control Panel (legacy settings) + + + DNS + Should not translated + + + Tài liệu + Area Privacy + + + Duplicating my display + Area System + + + During these hours + Area System + + + Ease of access center + Area Control Panel (legacy settings) + + + Bản in + Means the "Windows Edition" + + + Email + Area Privacy + + + Email and app accounts + Area UserAccounts + + + Mã hóa + Area System + + + Môi trường + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + Ethernet + Area NetworkAndInternet + + + Exploit Protection + + + Phụ trợ + Area Extra, , only used for setting of 3rd-Party tools + + + Eye control + Area EaseOfAccess + + + Eye tracker + Area Privacy, requires eyetracker hardware + + + Family and other people + Area UserAccounts + + + Feedback and diagnostics + Area Privacy + + + Tệp tin hệ thống + Area Privacy + + + FindFast + Area Control Panel (legacy settings) + + + findfast.cpl + File name, Should not translated + + + Tìm thiết bị + Area UpdateAndSecurity + + + Tường lửa + + + Focus assist - Quiet hours + Area System + + + Focus assist - Quiet moments + Area System + + + Tùy chọn thư mục + Area Control Panel (legacy settings) + + + Phông chữ + Area EaseOfAccess + + + Dành cho nhà phát triển + Area UpdateAndSecurity + + + Game bar + Area Gaming + + + Trình điều khiển trò chơi + Area Control Panel (legacy settings) + + + Game DVR + Area Gaming + + + Chế độ trò chơi + Area Gaming + + + Cổng + Should not translated + + + Tổng quan + Area Privacy + + + Get programs + Area Control Panel (legacy settings) + + + Bắt đầu + Area Control Panel (legacy settings) + + + Ánh Nhìn + Area Personalization, Deprecated in Windows 10, version 1809 and later + + + Cài đặt đồ họa + Area System + + + Thang độ xám + + + Green week + Mean you don't can see green colors + + + Headset display + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + Độ tương phản cao + Area EaseOfAccess + + + Holographic audio + + + Holographic Environment + + + Holographic Headset + + + Holographic Management + + + Home group + Area Control Panel (legacy settings) + + + Mã ID + MEans The "Windows Identifier" + + + Hình ảnh + + + Tùy chọn lập chỉ mục + Area Control Panel (legacy settings) + + + inetcpl.cpl + File name, Should not translated + + + Hồng ngoại + Area Control Panel (legacy settings) + + + Inking and typing + Area Privacy + + + Tùy chọn Internet + Area Control Panel (legacy settings) + + + intl.cpl + File name, Should not translated + + + Đảo ngược màu + + + IP + Should not translated + + + Isolated Browsing + + + Japan IME settings + Area TimeAndLanguage, available if the Microsoft Japan input method editor is installed + + + joy.cpl + File name, Should not translated + + + Joystick properties + Area Control Panel (legacy settings) + + + jpnime + Should not translated + + + Bàn phím + Area EaseOfAccess + + + Bàn phím số + + + Keys + + + Ngôn ngữ + Area TimeAndLanguage + + + Màu sắc đèn + + + Chế độ sáng + + + Vị trí + Area Privacy + + + Khoá màn hình + Area Personalization + + + Phóng + Area EaseOfAccess + + + Mail - Microsoft Exchange or Windows Messaging + Area Control Panel (legacy settings) + + + main.cpl + File name, Should not translated + + + Manage known networks + Area NetworkAndInternet + + + Manage optional features + Area Apps + + + Tin nhắn + Area Privacy + + + Metered connection + + + Micro điện thoại + Area Privacy + + + Microsoft Mail Post Office + Area Control Panel (legacy settings) + + + mlcfg32.cpl + File name, Should not translated + + + mmsys.cpl + File name, Should not translated + + + Thiết bị di động + + + Điểm phát sóng di động + Area NetworkAndInternet + + + modem.cpl + File name, Should not translated + + + Đơn âm + + + Xem chi tiết + Area Cortana + + + Chuyển động + Area Privacy + + + Chuột + Area EaseOfAccess + + + Mouse and touchpad + Area Device + + + Mouse, Fonts, Keyboard, and Printers properties + Area Control Panel (legacy settings) + + + Con trỏ chuột + Area EaseOfAccess + + + Multimedia properties + Area Control Panel (legacy settings) + + + Đa nhiệm + Area System + + + Người dẫn chuyện + Area EaseOfAccess + + + Thanh điều hướng + Area Personalization + + + netcpl.cpl + File name, Should not translated + + + netsetup.cpl + File name, Should not translated + + + Mạng + Area NetworkAndInternet + + + Network and sharing center + Area Control Panel (legacy settings) + + + Kết nối mạng + Area Control Panel (legacy settings) + + + Network properties + Area Control Panel (legacy settings) + + + Network Setup Wizard + Area Control Panel (legacy settings) + + + Trạng thái mạng + Area NetworkAndInternet + + + NFC + Area NetworkAndInternet + + + NFC Transactions + "NFC should not translated" + + + Chế độ đêm + + + Night light settings + Area System + + + Ghi chú + + + Chỉ khả dụng khi bạn đã kết nối thiết bị di động với thiết bị của mình. + + + Chỉ khả dụng trên các thiết bị hỗ trợ tùy chọn đồ họa nâng cao. + + + Chỉ khả dụng trên các thiết bị có pin, chẳng hạn như máy tính bảng. + + + Không được dùng nữa trong Windows 10, phiên bản 1809 (bản dựng 17763) trở lên. + + + Only available if Dial is paired. + + + Only available if DirectAccess is enabled. + + + Chỉ khả dụng trên các thiết bị hỗ trợ tùy chọn đồ họa nâng cao. + + + Only present if user is enrolled in WIP. + + + Requires eyetracker hardware. + + + Available if the Microsoft Japan input method editor is installed. + + + Available if the Microsoft Pinyin input method editor is installed. + + + Available if the Microsoft Wubi input method editor is installed. + + + Only available if the Mixed Reality Portal app is installed. + + + Only available on mobile and if the enterprise has deployed a provisioning package. + + + Added in Windows 10, version 1903 (build 18362). + + + Added in Windows 10, version 2004 (build 19041). + + + Only available if "settings apps" are installed, for example, by a 3rd party. + + + Only available if touchpad hardware is present. + + + Only available if the device has a Wi-Fi adapter. + + + Device must be Windows Anywhere-capable. + + + Only available if enterprise has deployed a provisioning package. + + + Thông báo + Area Privacy + + + Hành động thông báo + Area System + + + Num Lock + Mean the "Num Lock" key + + + nwc.cpl + File name, Should not translated + + + odbccp32.cpl + File name, Should not translated + + + ODBC Data Source Administrator (32-bit) + Area Control Panel (legacy settings) + + + ODBC Data Source Administrator (64-bit) + Area Control Panel (legacy settings) + + + Offline files + Area Control Panel (legacy settings) + + + Bàn đồ ngoại tuyến + Area Apps + + + Offline Maps - Download maps + Area Apps + + + On-Screen + + + Hệ điều hành + Means the "Operating System" + + + thiết bị khác + Area Privacy + + + Tùy chọn khác + Area EaseOfAccess + + + Người dùng khác + + + Kiểm soát phụ huynh + Area Control Panel (legacy settings) + + + Mật khẩu + + + password.cpl + File name, Should not translated + + + Password properties + Area Control Panel (legacy settings) + + + Pen and input devices + Area Control Panel (legacy settings) + + + Bút và cảm ứng + Area Control Panel (legacy settings) + + + Pen and Windows Ink + Area Device + + + Ghép đôi người xung quanh + Area Control Panel (legacy settings) + + + Thông tin hiệu suất và công cụ + Area Control Panel (legacy settings) + + + Quyền và lịch sử + Area Cortana + + + Cá nhân hóa (danh mục) + Area Personalization + + + Điện thoại + Area Phone + + + Điện thoại và modem + Area Control Panel (legacy settings) + + + Điện thoại và modem - Tùy chọn + Area Control Panel (legacy settings) + + + Cuộc gọi điện thoại + Area Privacy + + + Điện thoại - Ứng dụng mặc định + Area System + + + Hình ảnh + + + Hình ảnh + Area Privacy + + + Pinyin IME settings + Area TimeAndLanguage, available if the Microsoft Pinyin input method editor is installed + + + Pinyin IME settings - domain lexicon + Area TimeAndLanguage + + + Pinyin IME settings - Key configuration + Area TimeAndLanguage + + + Pinyin IME settings - UDP + Area TimeAndLanguage + + + Playing a game full screen + Area Gaming + + + Plugin to search for Windows settings + + + Windows Settings + + + Power and sleep + Area System + + + powercfg.cpl + File name, Should not translated + + + Tùy chọn chế độ Nguồn + Area Control Panel (legacy settings) + + + Trình bày + + + Máy in + Area Control Panel (legacy settings) + + + Printers and scanners + Area Device + + + chụp màn hình + Mean the "Print screen" key + + + Problem reports and solutions + Area Control Panel (legacy settings) + + + Vi xử lý + + + Programs and features + Area Control Panel (legacy settings) + + + Projecting to this PC + Area System + + + Mù màu Protanopia + Medical: Mean you don't can see green colors + + + Đang cấp phép + Area UserAccounts, only available if enterprise has deployed a provisioning package + + + Cảm ứng tiệm cận + Area NetworkAndInternet + + + Proxy + Area NetworkAndInternet + + + Quickime + Area TimeAndLanguage + + + Quiet moments game + + + Radio + Area Privacy + + + RAM + Means the Read-Access-Memory (typical the used to inform about the size) + + + Sự công nhận + + + Phục Hồi + Area UpdateAndSecurity + + + Red eye + Mean red eye effect by over-the-night flights + + + Đỏ – xanh lục + Mean the weakness you can't differ between red and green colors + + + Red week + Mean you don't can see red colors + + + Khu vực + Area TimeAndLanguage + + + Khu vực, ngôn ngữ + Area TimeAndLanguage + + + Regional settings properties + Area Control Panel (legacy settings) + + + Khu vực, ngôn ngữ + Area Control Panel (legacy settings) + + + Region formatting + + + RemoteApp and desktop connections + Area Control Panel (legacy settings) + + + VNC + Area System + + + Scanners and cameras + Area Control Panel (legacy settings) + + + schedtasks + File name, Should not translated + + + Lịch trình + + + Hoạt động theo lịch trình + Area Control Panel (legacy settings) + + + Xoay màn hình + Area System + + + Thanh cuộn + + + Khóa cuộn + Mean the "Scroll Lock" key + + + SDNS + Should not translated + + + Searching Windows + Area Cortana + + + SecureDNS + Should not translated + + + Security Center + Area Control Panel (legacy settings) + + + Security Processor + + + Session cleanup + Area SurfaceHub + + + Settings home page + Area Home, Overview-page for all areas of settings + + + Set up a kiosk + Area UserAccounts + + + Shared experiences + Area System + + + Shortcuts + + + wifi + dont translate this, is a short term to find entries + + + Sign-in options + Area UserAccounts + + + Sign-in options - Dynamic lock + Area UserAccounts + + + Kích thước + Size for text and symbols + + + Âm thanh + Area System + + + Nói + + Area EaseOfAccess + + + Nhận dạng tiếng nói + Area Control Panel (legacy settings) + + + Speech typing + + + Start + Area Personalization + + + Start places + + + Startup apps + Area Apps + + + sticpl.cpl + File name, Should not translated + + + Storage + Area System + + + Storage policies + Area System + + + Storage Sense + Area System + + + in + Example: Area "System" in System settings + + + Sync center + Area Control Panel (legacy settings) + + + Sync your settings + Area UserAccounts + + + sysdm.cpl + File name, Should not translated + + + Hệ thống + Area Control Panel (legacy settings) + + + System properties and Add New Hardware wizard + Area Control Panel (legacy settings) + + + Tab + Means the key "Tabulator" on the keyboard + + + Tablet mode + Area System + + + Tablet PC settings + Area Control Panel (legacy settings) + + + Talk + + + Talk to Cortana + Area Cortana + + + Thanh tác vụ + Area Personalization + + + Taskbar color + + + Công việc + Area Privacy + + + Web Conferencing + Area SurfaceHub + + + Team device management + Area SurfaceHub + + + Văn bản thành giọng nói + Area Control Panel (legacy settings) + + + Giao diện + Area Personalization + + + themes.cpl + File name, Should not translated + + + timedate.cpl + File name, Should not translated + + + Dòng thời gian + + + Chạm + + + Phản hồi khi chạm + + + Touchpad + Area Device + + + Minh bạch + + + Mù màu lam + Medical: Mean you don't can see yellow and blue colors + + + Khắc phục sự cố + Area UpdateAndSecurity + + + TruePlay + Area Gaming + + + Đang nhập + Area Device + + + Gỡ cài đặt + Area MixedReality, only available if the Mixed Reality Portal app is installed. + + + USB + Area Device + + + Tài khoản người sử dụng + Area Control Panel (legacy settings) + + + Phiên bản + Means The "Windows Version" + + + Phát lại video + Area Apps + + + Video + Area Privacy + + + Máy ảo + + + Virus + Means the virus in computers and software + + + giọng nói "gây nghiện" + Area Privacy + + + Âm lượng + + + VPN + Area NetworkAndInternet + + + Hình nền + + + Warmer color + + + Welcome center + Area Control Panel (legacy settings) + + + Màn hình chào mừng + Area SurfaceHub + + + wgpocpl.cpl + File name, Should not translated + + + Bánh xe + Area Device + + + Wifi + Area NetworkAndInternet, only available if Wi-Fi calling is enabled + + + Gọi qua Wi-Fi + Area NetworkAndInternet, only available if Wi-Fi calling is enabled + + + Cài đặt WiFi + "Wi-Fi" should not translated + + + chế độ cửa sổ + + + Windows Anytime Upgrade + Area Control Panel (legacy settings) + + + Windows Anywhere + Area UserAccounts, device must be Windows Anywhere-capable + + + Windows CardSpace + Area Control Panel (legacy settings) + + + Windows Defender + Area Control Panel (legacy settings) + + + Windows Firewall + Area Control Panel (legacy settings) + + + Windows Hello setup - Face + Area UserAccounts + + + Windows Hello setup - Fingerprint + Area UserAccounts + + + Windows Insider Program + Area UpdateAndSecurity + + + Windows Mobility Center + Area Control Panel (legacy settings) + + + Windows search + Area Cortana + + + Windows Security + Area UpdateAndSecurity + + + Windows Update + Area UpdateAndSecurity + + + Windows Update - Advanced options + Area UpdateAndSecurity + + + Windows Update - Check for updates + Area UpdateAndSecurity + + + Windows Update - Restart options + Area UpdateAndSecurity + + + Windows Update - View optional updates + Area UpdateAndSecurity + + + Windows Update - View update history + Area UpdateAndSecurity + + + Wireless + + + Workplace + + + Workplace provisioning + Area UserAccounts + + + Wubi IME settings + Area TimeAndLanguage, available if the Microsoft Wubi input method editor is installed + + + Wubi IME settings - UDP + Area TimeAndLanguage + + + Xbox Networking + Area Gaming + + + Your info + Area UserAccounts + + + Zoom + Mean zooming of things via a magnifier + + + Change device installation settings + + + Turn off background images + + + Navigation properties + + + Media streaming options + + + Make a file type always open in a specific program + + + Change the Narrator’s voice + + + Find and fix keyboard problems + + + Use screen reader + + + Show which workgroup this computer is on + + + Change mouse wheel settings + + + Manage computer certificates + + + Find and fix problems + + + Change settings for content received using Tap and send + + + Change default settings for media or devices + + + Print the speech reference card + + + Calibrate display colour + + + Manage file encryption certificates + + + View recent messages about your computer + + + Give other users access to this computer + + + Show hidden files and folders + + + Change Windows To Go start-up options + + + See which processes start up automatically when you start Windows + + + Tell if an RSS feed is available on a website + + + Add clocks for different time zones + + + Add a Bluetooth device + + + Customise the mouse buttons + + + Set tablet buttons to perform certain tasks + + + View installed fonts + + + Change the way currency is displayed + + + Edit group policy + + + Manage browser add-ons + + + Check processor speed + + + Check firewall status + + + Send or receive a file + + + Add or remove user accounts + + + Edit the system environment variables + + + Manage BitLocker + + + Auto-hide the taskbar + + + Change sound card settings + + + Make changes to accounts + + + Edit local users and groups + + + View network computers and devices + + + Install a program from the network + + + View scanners and cameras + + + Microsoft IME Register Word (Japanese) + + + Restore your files with File History + + + Turn On-Screen keyboard on or off + + + Block or allow third-party cookies + + + Find and fix audio recording problems + + + Create a recovery drive + + + Microsoft New Phonetic Settings + + + Generate a system health report + + + Fix problems with your computer + + + Back up and Restore (Windows 7) + + + Preview, delete, show or hide fonts + + + Microsoft Quick Settings + + + View reliability history + + + Access RemoteApp and desktops + + + Set up ODBC data sources + + + Reset Security Policies + + + Block or allow pop-ups + + + Turn autocomplete in Internet Explorer on or off + + + Microsoft Pinyin SimpleFast Options + + + Change what closing the lid does + + + Turn off unnecessary animations + + + Create a restore point + + + Turn off automatic window arrangement + + + Troubleshooting History + + + Diagnose your computer's memory problems + + + View recommended actions to keep Windows running smoothly + + + Change cursor blink rate + + + Add or remove programs + + + Create a password reset disk + + + Configure advanced user profile properties + + + Start or stop using AutoPlay for all media and devices + + + Change Automatic Maintenance settings + + + Specify single- or double-click to open + + + Select users who can use remote desktop + + + Show which programs are installed on your computer + + + Allow remote access to your computer + + + View advanced system settings + + + How to install a program + + + Change how your keyboard works + + + Automatically adjust for daylight saving time + + + Change the order of Windows SideShow gadgets + + + Check keyboard status + + + Control the computer without the mouse or keyboard + + + Change or remove a program + + + Change multi-touch gesture settings + + + Set up ODBC data sources (64-bit) + + + Configure proxy server + + + Change your homepage + + + Group similar windows on the taskbar + + + Change Windows SideShow settings + + + Use audio description for video + + + Change workgroup name + + + Find and fix printing problems + + + Change when the computer sleeps + + + Set up a virtual private network (VPN) connection + + + Accommodate learning abilities + + + Set up a dial-up connection + + + Set up a connection or network + + + How to change your Windows password + + + Make it easier to see the mouse pointer + + + Set up iSCSI initiator + + + Accommodate low vision + + + Manage offline files + + + Review your computer's status and resolve issues + + + Microsoft ChangJie Settings + + + Replace sounds with visual cues + + + Change temporary Internet file settings + + + Connect to the Internet + + + Find and fix audio playback problems + + + Change the mouse pointer display or speed + + + Back up your recovery key + + + Save backup copies of your files with File History + + + View current accessibility settings + + + Change tablet pen settings + + + Change how your mouse works + + + Show how much RAM is on this computer + + + Edit power plan + + + Adjust system volume + + + Defragment and optimise your drives + + + Set up ODBC data sources (32-bit) + + + Change Font Settings + + + Magnify portions of the screen using Magnifier + + + Change the file type associated with a file extension + + + View event logs + + + Manage Windows Credentials + + + Set up a microphone + + + Change how the mouse pointer looks + + + Change power-saving settings + + + Optimise for blindness + + + + + + + Turn Windows features on or off + + + Show which operating system your computer is running + + + View local services + + + Manage Work Folders + + + Encrypt your offline files + + + Train the computer to recognise your voice + + + Advanced printer setup + + + Change default printer + + + Edit environment variables for your account + + + Optimise visual display + + + Change mouse click settings + + + Change advanced colour management settings for displays, scanners and printers + + + Let Windows suggest Ease of Access settings + + + Clear disk space by deleting unnecessary files + + + View devices and printers + + + Private Character Editor + + + Record steps to reproduce a problem + + + Adjust the appearance and performance of Windows + + + Settings for Microsoft IME (Japanese) + + + Invite someone to connect to your PC and help you, or offer to help someone else + + + Run programs made for previous versions of Windows + + + Choose the order of how your screen rotates + + + Change how Windows searches + + + Set flicks to perform certain tasks + + + Change account type + + + Change screen saver + + + Change User Account Control settings + + + Turn on easy access keys + + + Identify and repair network problems + + + Find and fix networking and connection problems + + + Play CDs or other media automatically + + + View basic information about your computer + + + Choose how you open links + + + Allow Remote Assistance invitations to be sent from this computer + + + Task Manager + + + Turn flicks on or off + + + Add a language + + + View network status and tasks + + + Turn Magnifier on or off + + + See the name of this computer + + + View network connections + + + Perform recommended maintenance tasks automatically + + + Manage disk space used by your offline files + + + Turn High Contrast on or off + + + Change the way time is displayed + + + Change how web pages are displayed in tabs + + + Change the way dates and lists are displayed + + + Manage audio devices + + + Change security settings + + + Check security status + + + Delete cookies or temporary files + + + Specify which hand you write with + + + Change touch input settings + + + How to change the size of virtual memory + + + Hear text read aloud with Narrator + + + Set up USB game controllers + + + Show which domain your computer is on + + + View all problem reports + + + 16-Bit Application Support + + + Set up dialling rules + + + Enable or disable session cookies + + + Give administrative rights to a domain user + + + Choose when to turn off display + + + Move the pointer with the keypad using MouseKeys + + + Change Windows SideShow-compatible device settings + + + Adjust commonly used mobility settings + + + Change text-to-speech settings + + + Set the time and date + + + Change location settings + + + Change mouse settings + + + Manage Storage Spaces + + + Show or hide file extensions + + + Allow an app through Windows Firewall + + + Change system sounds + + + Adjust ClearType text + + + Turn screen saver on or off + + + Find and fix windows update problems + + + Change Bluetooth settings + + + Connect to a network + + + Change the search provider in Internet Explorer + + + Join a domain + + + Add a device + + + Find and fix problems with Windows Search + + + Choose a power plan + + + Change how the mouse pointer looks when it’s moving + + + Uninstall a program + + + Create and format hard disk partitions + + + Change date, time or number formats + + + Change PC wake-up settings + + + Manage network passwords + + + Change input methods + + + Manage advanced sharing settings + + + Change battery settings + + + Rename this computer + + + Lock or unlock the taskbar + + + Manage Web Credentials + + + Change the time zone + + + Start speech recognition + + + View installed updates + + + What's happened to the Quick Launch toolbar? + + + Change search options for files and folders + + + Adjust settings before giving a presentation + + + Scan a document or picture + + + Change the way measurements are displayed + + + Press key combinations one at a time + + + Khôi phục dữ liệu, tập tin hoặc máy tính từ bản sao lưu (Windows 7) + + + Set your default programs + + + Set up a broadband connection + + + Calibrate the screen for pen or touch input + + + Manage user certificates + + + Schedule tasks + + + Ignore repeated keystrokes using FilterKeys + + + Find and fix bluescreen problems + + + Hear a tone when keys are pressed + + + Delete browsing history + + + Change what the power buttons do + + + Create standard user account + + + Take speech tutorials + + + View system resource usage in Task Manager + + + Create an account + + + Get more features with a new edition of Windows + + + Bảng điều khiển + + + TaskLink + + + Unknown + + \ No newline at end of file diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.zh-cn.resx b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.zh-cn.resx index 2b39d48e4..379d0fd3a 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.zh-cn.resx +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/Properties/Resources.zh-cn.resx @@ -226,7 +226,7 @@ Area Apps - 应用卷和设备首选项 + 应用音量和设备首选项 Area System, Added in Windows 10, version 1903 @@ -1935,166 +1935,166 @@ 创建还原点 - Turn off automatic window arrangement + 关闭自动窗口排列 - Troubleshooting History + 疑难解答历史记录 - Diagnose your computer's memory problems + 诊断计算机的内存问题 - View recommended actions to keep Windows running smoothly + 查看推荐操作以保持 Windows 流畅运行 - Change cursor blink rate + 更改光标闪烁频率 - Add or remove programs + 添加或删除程序 - Create a password reset disk + 创建密码重置磁盘 - Configure advanced user profile properties + 配置高级用户配置文件属性 开启或关闭为所有媒体和设备使用自动播放 - Change Automatic Maintenance settings + 更改自动维护设置 - Specify single- or double-click to open + 指定单击或双击打开 - Select users who can use remote desktop + 选择可以使用远程桌面的用户 - Show which programs are installed on your computer + 显示计算机上安装的程序 - Allow remote access to your computer + 允许远程访问你的计算机 - View advanced system settings + 查看高级系统设置 如何安装程序 - Change how your keyboard works + 更改键盘的工作方式 - Automatically adjust for daylight saving time + 自动调整夏令时 - Change the order of Windows SideShow gadgets + 更改 Windows 侧边栏小工具的顺序 检查键盘状态 - Control the computer without the mouse or keyboard + 不使用鼠标或键盘控制计算机 - Change or remove a program + 更改或删除程序 - Change multi-touch gesture settings + 更改多点触控手势设置 - Set up ODBC data sources (64-bit) + 设置 ODBC 数据源(64 位) 设置代理服务器 - Change your homepage + 更改主页 - Group similar windows on the taskbar + 在任务栏上对相似的窗口进行分组 - Change Windows SideShow settings + 更改 Windows 侧边栏设置 - Use audio description for video + 使用视频的音频描述 - Change workgroup name + 更改工作组名称 - Find and fix printing problems + 查找并修复打印问题 - Change when the computer sleeps + 更改计算机何时睡眠 - Set up a virtual private network (VPN) connection + 设置虚拟专用网络 (VPN) 连接 - Accommodate learning abilities + 适应学习能力 - Set up a dial-up connection + 设置拨号连接 - Set up a connection or network + 设置连接或网络 - How to change your Windows password + 如何更改 Windows 密码 - Make it easier to see the mouse pointer + 让鼠标指针更容易看到 - Set up iSCSI initiator + 设置 iSCSI 发起程序 - Accommodate low vision + 适应低视力 - Manage offline files + 管理脱机文件 - Review your computer's status and resolve issues + 检查计算机状态并解决问题 - Microsoft ChangJie Settings + 微软仓颉设置 - Replace sounds with visual cues + 用视觉提示代替声音 - Change temporary Internet file settings + 更改 Internet 临时文件设置 连接互联网 - Find and fix audio playback problems + 查找并修复音频播放问题 - Change the mouse pointer display or speed + 更改鼠标指针显示或速度 - Back up your recovery key + 备份恢复密钥 - Save backup copies of your files with File History + 使用文件历史记录保存文件的备份副本 - View current accessibility settings + 查看当前辅助功能设置 - Change tablet pen settings + 更改平板笔设置 - Change how your mouse works + 更改鼠标的工作方式 - Show how much RAM is on this computer + 显示这台计算机有多少内存 编辑电源计划 @@ -2103,155 +2103,155 @@ 调整音量 - Defragment and optimise your drives + 对驱动器进行碎片整理和优化 - Set up ODBC data sources (32-bit) + 设置 ODBC 数据源(32 位) 更改字体设置 - Magnify portions of the screen using Magnifier + 使用“放大镜”放大屏幕的某些部分 - Change the file type associated with a file extension + 更改与文件扩展名关联的文件类型 - View event logs + 查看事件日志 - Manage Windows Credentials + 管理 Windows 凭据 设置麦克风 - Change how the mouse pointer looks + 更改鼠标指针的外观 - Change power-saving settings + 更改省电设置 - Optimise for blindness + 失明优化 - Turn Windows features on or off + 打开或关闭 Windows 功能 - Show which operating system your computer is running + 显示计算机正在运行的操作系统 - View local services + 查看本地服务 - Manage Work Folders + 管理工作文件夹 - Encrypt your offline files + 加密脱机文件 - Train the computer to recognise your voice + 训练计算机识别你的声音 - Advanced printer setup + 高级打印机设置 - Change default printer + 更改默认打印机 编辑帐户的环境变量 - Optimise visual display + 优化视觉显示 - Change mouse click settings + 更改鼠标点击设置 更改显示器、扫描仪和打印机的高级颜色管理设置 - Let Windows suggest Ease of Access settings + 让 Windows 建议轻松使用设置 - Clear disk space by deleting unnecessary files + 通过删除不必要文件清理磁盘空间 - View devices and printers + 查看设备和打印机 - Private Character Editor + 私有字符编辑器 - Record steps to reproduce a problem + 记录重现问题的步骤 - Adjust the appearance and performance of Windows + 调整 Windows 的外观和性能 - Settings for Microsoft IME (Japanese) + Microsoft 日语输入法设置 - Invite someone to connect to your PC and help you, or offer to help someone else + 邀请某人连接到你的电脑进行协助,或主动协助他人 - Run programs made for previous versions of Windows + 运行为以前版本的 Windows 制作的程序 - Choose the order of how your screen rotates + 选择屏幕旋转的顺序 - Change how Windows searches + 更改 Windows 搜索方式 - Set flicks to perform certain tasks + 设置滑动来执行特定任务 更改账户类型 - Change screen saver + 更改屏幕保护程序 更改用户帐户控制设置 - Turn on easy access keys + 开启轻松使用键 - Identify and repair network problems + 识别并修复网络问题 - Find and fix networking and connection problems + 查找并修复网络和连接问题 自动播放 CD 或其他媒体 - View basic information about your computer + 查看计算机的基本信息 - Choose how you open links + 选择链接打开方式 - Allow Remote Assistance invitations to be sent from this computer + 允许从这台计算机发送远程协助邀请 任务管理器 - Turn flicks on or off + 打开或关闭轻拂 添加语言 - View network status and tasks + 查看网络状态和任务 启用或关闭放大镜 @@ -2296,7 +2296,7 @@ 左右手使用习惯 - Change touch input settings + 更改触摸输入设置 如何更改虚拟内存的大小 @@ -2308,49 +2308,49 @@ 设置 USB 游戏控制器 - Show which domain your computer is on + 显示计算机所在的域 查看所有问题报告 - 16-Bit Application Support + 16 位应用程序支持 设置拨号规则 - Enable or disable session cookies + 启用或禁用会话 Cookie - Give administrative rights to a domain user + 授予域用户管理员权限 - Choose when to turn off display + 选择关闭显示器的时机 - Move the pointer with the keypad using MouseKeys + 使用鼠标键通过键盘移动指针 - Change Windows SideShow-compatible device settings + 更改 Windows 侧边栏兼容设备设置 - Adjust commonly used mobility settings + 调整常用的移动设置 - Change text-to-speech settings + 更改文本转语音设置 设置时间和日期 - 更改位置设定 + 更改位置设置 更改鼠标设置 - Manage Storage Spaces + 管理存储空间 是否显示文件扩展名 @@ -2362,55 +2362,55 @@ 更改系统声音 - Adjust ClearType text + 调整 ClearType 文本 - Turn screen saver on or off + 打开或关闭屏幕保护程序 - Find and fix windows update problems + 查找并修复 Windows 更新问题 更改蓝牙设备 - Connect to a network + 连接到网络 - Change the search provider in Internet Explorer + 在 Internet Explorer 中更改搜索提供商 - Join a domain + 加入域 添加设备 - Find and fix problems with Windows Search + 查找并修复 Windows 搜索问题 选择电源计划 - Change how the mouse pointer looks when it’s moving + 更改鼠标指针移动时的外观 卸载程序 - Create and format hard disk partitions + 创建和格式化硬盘分区 更改日期、时间或数字格式 - Change PC wake-up settings + 更改 PC 唤醒设置 - Manage network passwords + 管理网络密码 - Change input methods + 更改输入法 管理高级共享设置 @@ -2452,7 +2452,7 @@ 更改日期、时间或数字格式 - Press key combinations one at a time + 一次按下一组按键 从备份中还原数据、文件或计算机(Windows 7) @@ -2464,7 +2464,7 @@ 设置宽带连接 - Calibrate the screen for pen or touch input + 校准屏幕以进行笔或触摸输入 管理用户证书 @@ -2479,7 +2479,7 @@ 查找并修复蓝屏问题 - Hear a tone when keys are pressed + 按下按键时听到提示音 删除浏览的历史记录 @@ -2500,13 +2500,13 @@ 创建账户 - Get more features with a new edition of Windows + 通过新版本的 Windows 获取更多功能 控制面板 - TaskLink + 任务链接 未知 diff --git a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json index 5e82a43c0..5c717827e 100644 --- a/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json +++ b/Plugins/Flow.Launcher.Plugin.WindowsSettings/plugin.json @@ -4,7 +4,7 @@ "Description": "Search settings inside Control Panel and Settings App", "Name": "Windows Settings", "Author": "TobiasSekan", - "Version": "4.0.6", + "Version": "4.0.11", "Language": "csharp", "Website": "https://github.com/Flow-Launcher/Flow.Launcher", "ExecuteFileName": "Flow.Launcher.Plugin.WindowsSettings.dll", diff --git a/README.md b/README.md index 9ebbe246c..02ffc7932 100644 --- a/README.md +++ b/README.md @@ -16,77 +16,15 @@

-Dedicated to making your work flow more seamless. Search everything from applications, files, bookmarks, YouTube, Twitter and more. Flow will continue to evolve, designed to be open and built with the community at heart. +A quick file search and app launcher for Windows with community-made plugins.

+ +

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

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

-## 🎅 New Features🤶 - -### Preview Panel - - - -- Use the F1 key to open/hide the preview panel. -- Media files will be displayed as large images, otherwise a large icon and entire path will be displayed. -- Turn on preview permanently via Settings (Always Preview). -- Use hotkeys (Ctrl+Plus,Minus / Ctrl+],[) to adjust flow's search window width and height quickly if the preview area is too narrow. -- This feature is currently in its early stages. - -### Everything Plugin Merged Into Explorer - - - -- Switch easily between Everything and Windows Search to take advantage of both search engines (remember to remove existing Everything plugin). -- Use features available to both Everything and Explorer plugins - -### Date & Time Display In Search Window - - - -- Display the date and time when the search window is triggered. - -### Drag & Drop - - - -- Drag an item to Discord or computer location. -- The target program determines whether the drop is to copy or move the item (can change via CTRL or Alt), and the operation is displayed on the mouse cursor. - -### Custom Shortcut - - - - -- New shortcut functionality to set additional action keywords or search terms. - -### Improved Program Plugin - -- PATH is now indexed -- Support for .url files, flow can now search installed steam/epic games. -- Improved UWP indexing. - -### Improved Memory Usage - -- Fixed a memory leak and reduced overall memory usage. - -### Improved Plugin / Plugin Store - -- Search plugins in the Plugin Store and existing plugin tab. -- Categorised sections in Plugin Store to easily see new and updated plugins. - -### Improved Non-C# Plugin's Panel Design - - - -- The design has been adjusted to align to the overall look and feel of flow. -- Simplified the information displayed on buttons - -🚂[Full Changelogs](https://github.com/Flow-Launcher/Flow.Launcher/releases) - - -

Getting StartedFeatures • @@ -104,15 +42,29 @@ Dedicated to making your work flow more seamless. Search everything from applica ### Installation -| [Windows 7+ installer](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest/download/Flow-Launcher-Setup.exe) | [Portable](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest/download/Flow-Launcher-Portable.zip) | -| :----------------------------------------------------------: | :----------------------------------------------------------: | +[Windows 7+ Installer](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest/download/Flow-Launcher-Setup.exe) or [Portable Version](https://github.com/Flow-Launcher/Flow.Launcher/releases/latest/download/Flow-Launcher-Portable.zip) -| `winget install "Flow Launcher"` | `scoop install Flow-Launcher` | `choco install Flow-Launcher` | -| :------------------------------: | :------------------------------: | :------------------------------: | +#### Winget + +``` +winget install "Flow Launcher" +``` + +#### Scoop + +``` +scoop install Flow-Launcher +``` + +#### Chocolatey + +``` +choco install Flow-Launcher +``` > When installing for the first time Windows may raise an issue about security due to code not being signed, if you downloaded from this repo then you are good to continue the set up. -And you can download [early access version](https://github.com/Flow-Launcher/Prereleases/releases). +Or download the [early access version](https://github.com/Flow-Launcher/Prereleases/releases). @@ -123,6 +75,7 @@ And you can download [early access version](https://github.com/Flow-Launcher/Pre - Search for apps, files or file contents. +- Supports Everything and Windows Index. @@ -156,7 +109,7 @@ And you can download [early access version](https://github.com/Flow-Launcher/Pre - Run batch and PowerShell commands as Administrator or a different user. -- Ctrl+Enter to Run as Administrator. +- Ctrl+Shift+Enter to Run as Administrator. ### Explorer @@ -164,6 +117,13 @@ And you can download [early access version](https://github.com/Flow-Launcher/Pre - Save file or folder locations for quick access. +#### Drag & Drop + + + +- Drag a file/folder to File Explorer, or even Discord. +- Copy/move behavior can be change via Ctrl or Shift, and the operation is displayed on the mouse cursor. + ### Windows & Control Panel Settings @@ -176,6 +136,16 @@ And you can download [early access version](https://github.com/Flow-Launcher/Pre - Prioritise the order of each plugin's results. +### Preview Panel + + + +- Use F1 to toggle the preview panel. +- Media files will be displayed as large images, otherwise a large icon and full path will be displayed. +- Turn on preview permanently via Settings (Always Preview). +- Use Ctrl++/- and Ctrl+[/] to adjust search window width and height quickly if the preview area is too narrow. + + ### Customizations @@ -187,12 +157,48 @@ And you can download [early access version](https://github.com/Flow-Launcher/Pre - There are various themes and you also can make your own. -### 💬 Language +#### Date & Time Display In Search Window + + + +- Display date and time in search window. + +### 💬 Languages - Supports languages from Chinese to Italian and more. -- Supports Pinyin search. +- Supports Pinyin (拼音) search. - [Crowdin](https://crowdin.com/project/flow-launcher) support for language translations. +
+Supported languages +
    +
  • English
  • +
  • 中文
  • +
  • 中文(繁体)
  • +
  • Українська
  • +
  • Русский
  • +
  • Français
  • +
  • 日本語
  • +
  • Dutch
  • +
  • Polski
  • +
  • Dansk
  • +
  • de, Deutsch
  • +
  • ko, 한국어
  • +
  • Srpski
  • +
  • Português
  • +
  • Português (Brasil)
  • +
  • Spanish
  • +
  • es-419, Spanish (Latin America)
  • +
  • Italiano
  • +
  • Norsk Bokmål
  • +
  • Slovenčina
  • +
  • Türkçe
  • +
  • čeština
  • +
  • اللغة العربية
  • +
  • Tiếng Việt
  • +
+
+ ### Portable - Fully portable. @@ -206,7 +212,7 @@ And you can download [early access version](https://github.com/Flow-Launcher/Pre - Pause hotkey activation when you are playing games. -- When in search window use Ctrl+F12 to toggle on/off. +- When in search window use Ctrl+F12 to toggle on/off. - Type `Toggle Game Mode` @@ -257,6 +263,7 @@ And you can download [early access version](https://github.com/Flow-Launcher/Pre ### 🛒 Plugin Store + - You can view the full plugin list or quickly install a plugin via the Plugin Store menu inside Settings @@ -267,26 +274,29 @@ And you can download [early access version](https://github.com/Flow-Launcher/Pre ## ⌨️ Hotkeys -| Hotkey | Description | -| ------------------------------------------------------------------ | ---------------------------------------------- | -| Alt+ Space | Open search window (default and configurable) | -| Enter | Execute | -| Ctrl+Shift+Enter | Run as admin | -| | Scroll up & down | -| | Back to result / Open Context Menu | -| Ctrl +O , Shift +Enter | Open Context Menu | -| Tab | Autocomplete | -| F1 | Toggle Preview Panel (default and configurable)| -| Esc | Back to results / hide search window | -| Ctrl +C | Copy the actual folder / file | -| Ctrl +I | Open flow's settings | -| Ctrl +R | Run the current query again (refresh results) | -| F5 | Reload all plugin data | -| Ctrl + F12 | Toggle Game Mode when in search window | -| Ctrl + +,- | Quickly change maximum results shown | -| Ctrl + [,] | Quickly change search window width | -| Ctrl + H | Open search history | -| Ctrl + Backspace | Back to previous directory | +| Hotkey | Description | +| ------------------------------------------------------------------------- | ----------------------------------------------- | +| Alt+Space | Open search window (default and configurable) | +| Enter | Execute | +| Ctrl+Enter | Open containing folder | +| Ctrl+Shift+Enter | Run as admin | +| /, Shift+Tab/Tab | Previous / Next result | +| / | Back to result / Open Context Menu | +| Ctrl+O , Shift+Enter | Open Context Menu | +| Ctrl+Tab | Autocomplete | +| F1 | Toggle Preview Panel (default and configurable) | +| Esc | Back to results / hide search window | +| Ctrl+C | Copy folder / file | +| Ctrl+Shift+C | Copy folder / file path | +| Ctrl+I | Open Flow's settings | +| Ctrl+R | Run the current query again (refresh results) | +| F5 | Reload all plugin data | +| Ctrl+F12 | Toggle Game Mode when in search window | +| Ctrl++,- | Adjust maximum results shown | +| Ctrl+[,] | Adjust search window width | +| Ctrl+H | Open search history | +| Ctrl+Backspace | Back to previous directory | +| PageUp/PageDown | Previous / Next Page | ## System Command List @@ -313,8 +323,6 @@ And you can download [early access version](https://github.com/Flow-Launcher/Pre | Flow Launcher UserData Folder | Open the location where Flow Launcher's settings are stored | | Toggle Game Mode | Toggle Game Mode | - - ### 💁‍♂️ Tips - [More tips](https://flowlauncher.com/docs/#/usage-tips) @@ -322,27 +330,28 @@ And you can download [early access version](https://github.com/Flow-Launcher/Pre ## Sponsors -

- - + + Coderabbit Logo -
- -

- -

+
+
-
-

- +

+ + Appwrite Logo + +
+

+ +

diff --git a/Settings.XamlStyler b/Settings.XamlStyler new file mode 100644 index 000000000..7ea0744f1 --- /dev/null +++ b/Settings.XamlStyler @@ -0,0 +1,42 @@ +{ + "AttributesTolerance": 2, + "KeepFirstAttributeOnSameLine": false, + "MaxAttributeCharactersPerLine": 0, + "MaxAttributesPerLine": 1, + "NewlineExemptionElements": "RadialGradientBrush, GradientStop, LinearGradientBrush, ScaleTransform, SkewTransform, RotateTransform, TranslateTransform, Trigger, Condition, Setter", + "SeparateByGroups": false, + "AttributeIndentation": 0, + "AttributeIndentationStyle": 1, + "RemoveDesignTimeReferences": false, + "IgnoreDesignTimeReferencePrefix": false, + "EnableAttributeReordering": true, + "AttributeOrderingRuleGroups": [ + "x:Class", + "xmlns, xmlns:x", + "xmlns:*", + "x:Key, Key, x:Name, Name, x:Uid, Uid, Title", + "Grid.Row, Grid.RowSpan, Grid.Column, Grid.ColumnSpan, Canvas.Left, Canvas.Top, Canvas.Right, Canvas.Bottom", + "Width, Height, MinWidth, MinHeight, MaxWidth, MaxHeight", + "Margin, Padding, HorizontalAlignment, VerticalAlignment, HorizontalContentAlignment, VerticalContentAlignment, Panel.ZIndex", + "*:*, *", + "PageSource, PageIndex, Offset, Color, TargetName, Property, Value, StartPoint, EndPoint", + "mc:Ignorable, d:IsDataSource, d:LayoutOverrides, d:IsStaticText", + "Storyboard.*, From, To, Duration" + ], + "FirstLineAttributes": "", + "OrderAttributesByName": true, + "PutEndingBracketOnNewLine": false, + "RemoveEndingTagOfEmptyElement": true, + "SpaceBeforeClosingSlash": true, + "RootElementLineBreakRule": 0, + "ReorderVSM": 2, + "ReorderGridChildren": false, + "ReorderCanvasChildren": false, + "ReorderSetters": 0, + "FormatMarkupExtension": true, + "NoNewLineMarkupExtensions": "x:Bind, Binding", + "ThicknessSeparator": 1, + "ThicknessAttributes": "Margin, Padding, BorderThickness, ThumbnailClipMargin, CornerRadius", + "FormatOnSave": true, + "CommentPadding": 2, +} diff --git a/appveyor.yml b/appveyor.yml index b84230c43..421088133 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,4 +1,4 @@ -version: '1.17.2.{build}' +version: '1.19.4.{build}' init: - ps: | @@ -51,7 +51,7 @@ deploy: - provider: NuGet artifact: Plugin nupkg api_key: - secure: Uho7u3gk4RHzyWGgqgXZuOeI55NbqHLQ9tXahL7xmE4av2oiSldrNiyGgy/0AQYw + secure: sCSd5JWgdzJWDa9kpqECut5ACPKZqcoxKU8ERKC00k7VIjig3/+nFV5zzTcGb0w3 on: APPVEYOR_REPO_TAG: true