mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Merge branch 'dev' into everything-api-filter
This commit is contained in:
commit
7efaaa6d09
160 changed files with 1588 additions and 525 deletions
|
|
@ -6,6 +6,7 @@ using Flow.Launcher.Infrastructure;
|
||||||
using Flow.Launcher.Plugin;
|
using Flow.Launcher.Plugin;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using Flow.Launcher.Infrastructure.UserSettings;
|
using Flow.Launcher.Infrastructure.UserSettings;
|
||||||
|
using Flow.Launcher.Plugin.SharedCommands;
|
||||||
|
|
||||||
namespace Flow.Launcher.Core.Plugin
|
namespace Flow.Launcher.Core.Plugin
|
||||||
{
|
{
|
||||||
|
|
@ -30,7 +31,18 @@ namespace Flow.Launcher.Core.Plugin
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Directory.Delete(directory, true);
|
var fullyDeleted = FilesFolders.TryDeleteDirectoryRobust(directory, maxRetries: 3, retryDelayMs: 200);
|
||||||
|
if (!fullyDeleted)
|
||||||
|
{
|
||||||
|
PublicApi.Instance.LogWarn(ClassName, $"Directory <{directory}> was not fully deleted.");
|
||||||
|
|
||||||
|
// Directory was not fully deleted, recreate the marker file so deletion will be retried on next startup
|
||||||
|
var markerFilePath = Path.Combine(directory, DataLocation.PluginDeleteFile);
|
||||||
|
if (!File.Exists(markerFilePath))
|
||||||
|
{
|
||||||
|
File.WriteAllText(markerFilePath, string.Empty);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -931,6 +931,18 @@ namespace Flow.Launcher.Core.Plugin
|
||||||
|
|
||||||
FilesFolders.CopyAll(pluginFolderPath, newPluginPath, (s) => PublicApi.Instance.ShowMsgBox(s));
|
FilesFolders.CopyAll(pluginFolderPath, newPluginPath, (s) => PublicApi.Instance.ShowMsgBox(s));
|
||||||
|
|
||||||
|
// Check if marker file exists and delete it
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var markerFilePath = Path.Combine(newPluginPath, DataLocation.PluginDeleteFile);
|
||||||
|
if (File.Exists(markerFilePath))
|
||||||
|
File.Delete(markerFilePath);
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
PublicApi.Instance.LogException(ClassName, $"Failed to delete plugin marker file in {newPluginPath}", e);
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (Directory.Exists(tempFolderPluginPath))
|
if (Directory.Exists(tempFolderPluginPath))
|
||||||
|
|
|
||||||
|
|
@ -91,4 +91,6 @@ PBT_APMRESUMEAUTOMATIC
|
||||||
PBT_APMRESUMESUSPEND
|
PBT_APMRESUMESUSPEND
|
||||||
PowerRegisterSuspendResumeNotification
|
PowerRegisterSuspendResumeNotification
|
||||||
PowerUnregisterSuspendResumeNotification
|
PowerUnregisterSuspendResumeNotification
|
||||||
DeviceNotifyCallbackRoutine
|
DeviceNotifyCallbackRoutine
|
||||||
|
|
||||||
|
MonitorFromWindow
|
||||||
|
|
@ -481,6 +481,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
||||||
}
|
}
|
||||||
public bool LeaveCmdOpen { get; set; }
|
public bool LeaveCmdOpen { get; set; }
|
||||||
public bool HideWhenDeactivated { get; set; } = true;
|
public bool HideWhenDeactivated { get; set; } = true;
|
||||||
|
public bool ShowTaskbarWhenInvoked { get; set; } = false;
|
||||||
|
|
||||||
private bool _showAtTopmost = false;
|
private bool _showAtTopmost = false;
|
||||||
public bool ShowAtTopmost
|
public bool ShowAtTopmost
|
||||||
|
|
|
||||||
|
|
@ -1016,5 +1016,32 @@ namespace Flow.Launcher.Infrastructure
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region Taskbar
|
||||||
|
|
||||||
|
public static unsafe void ShowTaskbar()
|
||||||
|
{
|
||||||
|
// Find the taskbar window
|
||||||
|
var taskbarHwnd = PInvoke.FindWindowEx(HWND.Null, HWND.Null, "Shell_TrayWnd", null);
|
||||||
|
if (taskbarHwnd == HWND.Null) return;
|
||||||
|
|
||||||
|
// Magic from https://github.com/Oliviaophia/SmartTaskbar
|
||||||
|
const uint TrayBarFlag = 0x05D1;
|
||||||
|
var mon = PInvoke.MonitorFromWindow(taskbarHwnd, Windows.Win32.Graphics.Gdi.MONITOR_FROM_FLAGS.MONITOR_DEFAULTTONEAREST);
|
||||||
|
PInvoke.PostMessage(taskbarHwnd, TrayBarFlag, new WPARAM(1), new LPARAM((nint)mon.Value));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void HideTaskbar()
|
||||||
|
{
|
||||||
|
// Find the taskbar window
|
||||||
|
var taskbarHwnd = PInvoke.FindWindowEx(HWND.Null, HWND.Null, "Shell_TrayWnd", null);
|
||||||
|
if (taskbarHwnd == HWND.Null) return;
|
||||||
|
|
||||||
|
// Magic from https://github.com/Oliviaophia/SmartTaskbar
|
||||||
|
const uint TrayBarFlag = 0x05D1;
|
||||||
|
PInvoke.PostMessage(taskbarHwnd, TrayBarFlag, new WPARAM(0), IntPtr.Zero);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,10 +15,10 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Version>5.1.0</Version>
|
<Version>5.2.0</Version>
|
||||||
<PackageVersion>5.1.0</PackageVersion>
|
<PackageVersion>5.2.0</PackageVersion>
|
||||||
<AssemblyVersion>5.1.0</AssemblyVersion>
|
<AssemblyVersion>5.2.0</AssemblyVersion>
|
||||||
<FileVersion>5.1.0</FileVersion>
|
<FileVersion>5.2.0</FileVersion>
|
||||||
<PackageId>Flow.Launcher.Plugin</PackageId>
|
<PackageId>Flow.Launcher.Plugin</PackageId>
|
||||||
<Authors>Flow-Launcher</Authors>
|
<Authors>Flow-Launcher</Authors>
|
||||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||||
|
|
@ -72,9 +72,9 @@
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
|
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.103" PrivateAssets="All" />
|
||||||
<PackageReference Include="JetBrains.Annotations" Version="2025.2.2" />
|
<PackageReference Include="JetBrains.Annotations" Version="2025.2.2" />
|
||||||
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.205">
|
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.269">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,13 @@ using System.IO;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
namespace Flow.Launcher.Plugin
|
namespace Flow.Launcher.Plugin
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Describes a result of a <see cref="Query"/> executed by a plugin
|
/// Describes a result of a <see cref="Query"/> executed by a plugin.
|
||||||
|
/// This or its child classes is serializable.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Result
|
public class Result
|
||||||
{
|
{
|
||||||
|
|
@ -21,6 +23,8 @@ namespace Flow.Launcher.Plugin
|
||||||
|
|
||||||
private string _icoPath;
|
private string _icoPath;
|
||||||
|
|
||||||
|
private string _icoPathAbsolute;
|
||||||
|
|
||||||
private string _copyText = string.Empty;
|
private string _copyText = string.Empty;
|
||||||
|
|
||||||
private string _badgeIcoPath;
|
private string _badgeIcoPath;
|
||||||
|
|
@ -64,15 +68,27 @@ namespace Flow.Launcher.Plugin
|
||||||
public string AutoCompleteText { get; set; }
|
public string AutoCompleteText { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The image to be displayed for the result.
|
/// Path or URI to the icon image for this result.
|
||||||
|
/// Updates <see cref="IcoPathAbsolute"/> appropriately when set.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <value>Can be a local file path or a URL.</value>
|
/// <remarks>
|
||||||
/// <remarks>GlyphInfo is prioritized if not null</remarks>
|
/// Preferred usage: provide a path relative to the plugin directory (for example: "Images\icon.png").
|
||||||
|
/// Because <see cref="IcoPath"/> is serialized, using relative paths keeps the icon reference portable
|
||||||
|
/// when Flow is moved.
|
||||||
|
///
|
||||||
|
/// Accepted formats:
|
||||||
|
/// - Relative file paths (resolved against <see cref="PluginDirectory"/> into <see cref="IcoPathAbsolute"/>)
|
||||||
|
/// - Absolute file paths (left as-is)
|
||||||
|
/// - HTTP/HTTPS URLs (left as-is)
|
||||||
|
/// - Data URIs (left as-is)
|
||||||
|
/// </remarks>
|
||||||
public string IcoPath
|
public string IcoPath
|
||||||
{
|
{
|
||||||
get => _icoPath;
|
get => _icoPath;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
|
_icoPath = value;
|
||||||
|
|
||||||
// As a standard this property will handle prepping and converting to absolute local path for icon image processing
|
// As a standard this property will handle prepping and converting to absolute local path for icon image processing
|
||||||
if (!string.IsNullOrEmpty(value)
|
if (!string.IsNullOrEmpty(value)
|
||||||
&& !string.IsNullOrEmpty(PluginDirectory)
|
&& !string.IsNullOrEmpty(PluginDirectory)
|
||||||
|
|
@ -81,15 +97,23 @@ namespace Flow.Launcher.Plugin
|
||||||
&& !value.StartsWith("https://", StringComparison.OrdinalIgnoreCase)
|
&& !value.StartsWith("https://", StringComparison.OrdinalIgnoreCase)
|
||||||
&& !value.StartsWith("data:image", StringComparison.OrdinalIgnoreCase))
|
&& !value.StartsWith("data:image", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
_icoPath = Path.Combine(PluginDirectory, value);
|
_icoPathAbsolute = Path.Combine(PluginDirectory, value);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_icoPath = value;
|
_icoPathAbsolute = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Absolute path or URI which is used to load and display the result icon for Flow.
|
||||||
|
/// This is populated by the <see cref="IcoPath"/> setter.
|
||||||
|
/// If a relative path was provided to <see cref="IcoPath"/>, this property will contain the resolved
|
||||||
|
/// absolute local path after combining with <see cref="PluginDirectory"/>.
|
||||||
|
/// </summary>
|
||||||
|
public string IcoPathAbsolute => _icoPathAbsolute;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The image to be displayed for the badge of the result.
|
/// The image to be displayed for the badge of the result.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
@ -131,17 +155,34 @@ namespace Flow.Launcher.Plugin
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delegate to load an icon for this result.
|
/// Delegate to load an icon for this result.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[JsonIgnore]
|
||||||
public IconDelegate Icon = null;
|
public IconDelegate Icon = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delegate to load an icon for the badge of this result.
|
/// Delegate to load an icon for the badge of this result.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[JsonIgnore]
|
||||||
public IconDelegate BadgeIcon = null;
|
public IconDelegate BadgeIcon = null;
|
||||||
|
|
||||||
|
private GlyphInfo _glyph;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Information for Glyph Icon (Prioritized than IcoPath/Icon if user enable Glyph Icons)
|
/// Information for Glyph Icon (Prioritized than IcoPath/Icon if user enable Glyph Icons)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public GlyphInfo Glyph { get; init; }
|
public GlyphInfo Glyph
|
||||||
|
{
|
||||||
|
get => _glyph;
|
||||||
|
init => _glyph = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Set the Glyph Icon after initialization
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="glyph"></param>
|
||||||
|
public void SetGlyph(GlyphInfo glyph)
|
||||||
|
{
|
||||||
|
_glyph = glyph;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// An action to take in the form of a function call when the result has been selected.
|
/// An action to take in the form of a function call when the result has been selected.
|
||||||
|
|
@ -151,6 +192,7 @@ namespace Flow.Launcher.Plugin
|
||||||
/// Its result determines what happens to Flow Launcher's query form:
|
/// Its result determines what happens to Flow Launcher's query form:
|
||||||
/// when true, the form will be hidden; when false, it will stay in focus.
|
/// when true, the form will be hidden; when false, it will stay in focus.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
|
[JsonIgnore]
|
||||||
public Func<ActionContext, bool> Action { get; set; }
|
public Func<ActionContext, bool> Action { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -161,6 +203,7 @@ namespace Flow.Launcher.Plugin
|
||||||
/// Its result determines what happens to Flow Launcher's query form:
|
/// Its result determines what happens to Flow Launcher's query form:
|
||||||
/// when true, the form will be hidden; when false, it will stay in focus.
|
/// when true, the form will be hidden; when false, it will stay in focus.
|
||||||
/// </remarks>
|
/// </remarks>
|
||||||
|
[JsonIgnore]
|
||||||
public Func<ActionContext, ValueTask<bool>> AsyncAction { get; set; }
|
public Func<ActionContext, ValueTask<bool>> AsyncAction { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -203,11 +246,13 @@ namespace Flow.Launcher.Plugin
|
||||||
/// <example>
|
/// <example>
|
||||||
/// As external information for ContextMenu
|
/// As external information for ContextMenu
|
||||||
/// </example>
|
/// </example>
|
||||||
|
[JsonIgnore]
|
||||||
public object ContextData { get; set; }
|
public object ContextData { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Plugin ID that generated this result
|
/// Plugin ID that generated this result
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[JsonInclude]
|
||||||
public string PluginID { get; internal set; }
|
public string PluginID { get; internal set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -223,6 +268,7 @@ namespace Flow.Launcher.Plugin
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Customized Preview Panel
|
/// Customized Preview Panel
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[JsonIgnore]
|
||||||
public Lazy<UserControl> PreviewPanel { get; set; }
|
public Lazy<UserControl> PreviewPanel { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -352,6 +398,7 @@ namespace Flow.Launcher.Plugin
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delegate to get the preview panel's image
|
/// Delegate to get the preview panel's image
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
[JsonIgnore]
|
||||||
public IconDelegate PreviewDelegate { get; set; } = null;
|
public IconDelegate PreviewDelegate { get; set; } = null;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -130,6 +130,119 @@ namespace Flow.Launcher.Plugin.SharedCommands
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Attempts to delete a directory robustly with retry logic for locked files.
|
||||||
|
/// This method tries to delete files individually with retries, then removes empty directories.
|
||||||
|
/// Returns true if the directory was completely deleted, false if some files/folders remain.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="path">The directory path to delete</param>
|
||||||
|
/// <param name="maxRetries">Maximum number of retry attempts for locked files (default: 3)</param>
|
||||||
|
/// <param name="retryDelayMs">Delay in milliseconds between retries (default: 100ms)</param>
|
||||||
|
/// <returns>True if directory was fully deleted, false if some items remain</returns>
|
||||||
|
public static bool TryDeleteDirectoryRobust(string path, int maxRetries = 3, int retryDelayMs = 100)
|
||||||
|
{
|
||||||
|
if (!Directory.Exists(path))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
bool fullyDeleted = true;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// First, try to delete all files in the directory tree
|
||||||
|
var files = Directory.GetFiles(path, "*", SearchOption.AllDirectories);
|
||||||
|
foreach (var file in files)
|
||||||
|
{
|
||||||
|
bool fileDeleted = false;
|
||||||
|
for (int attempt = 0; attempt <= maxRetries; attempt++)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Remove read-only attribute if present
|
||||||
|
var fileInfo = new FileInfo(file);
|
||||||
|
if (fileInfo.Exists && fileInfo.IsReadOnly)
|
||||||
|
{
|
||||||
|
fileInfo.IsReadOnly = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
File.Delete(file);
|
||||||
|
fileDeleted = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
catch (UnauthorizedAccessException)
|
||||||
|
{
|
||||||
|
// File is in use or access denied, wait and retry
|
||||||
|
if (attempt < maxRetries)
|
||||||
|
{
|
||||||
|
System.Threading.Thread.Sleep(retryDelayMs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IOException)
|
||||||
|
{
|
||||||
|
// File is in use, wait and retry
|
||||||
|
if (attempt < maxRetries)
|
||||||
|
{
|
||||||
|
System.Threading.Thread.Sleep(retryDelayMs);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// Other exceptions, don't retry
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fileDeleted)
|
||||||
|
{
|
||||||
|
fullyDeleted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Then, try to delete all empty directories (from deepest to shallowest)
|
||||||
|
var directories = Directory.GetDirectories(path, "*", SearchOption.AllDirectories)
|
||||||
|
.OrderByDescending(d => d.Length) // Delete deeper directories first
|
||||||
|
.ToArray();
|
||||||
|
|
||||||
|
foreach (var directory in directories)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (Directory.Exists(directory) && !Directory.EnumerateFileSystemEntries(directory).Any())
|
||||||
|
{
|
||||||
|
Directory.Delete(directory, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
// If we can't delete an empty directory, mark as not fully deleted
|
||||||
|
fullyDeleted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Finally, try to delete the root directory itself
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (Directory.Exists(path) && !Directory.EnumerateFileSystemEntries(path).Any())
|
||||||
|
{
|
||||||
|
Directory.Delete(path, false);
|
||||||
|
}
|
||||||
|
else if (Directory.Exists(path))
|
||||||
|
{
|
||||||
|
fullyDeleted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
fullyDeleted = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
fullyDeleted = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fullyDeleted;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Checks if a directory exists
|
/// Checks if a directory exists
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -16,23 +16,23 @@
|
||||||
},
|
},
|
||||||
"Microsoft.SourceLink.GitHub": {
|
"Microsoft.SourceLink.GitHub": {
|
||||||
"type": "Direct",
|
"type": "Direct",
|
||||||
"requested": "[8.0.0, )",
|
"requested": "[10.0.103, )",
|
||||||
"resolved": "8.0.0",
|
"resolved": "10.0.103",
|
||||||
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
|
"contentHash": "qZk7r40ftpZY+/sO019sgWAWfNqC2CLSspDdAxNYCJU/bCi/8jVwvOMjzb/d5gjCRNzQ4OCYgBfhdpQyVwLTyw==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Microsoft.Build.Tasks.Git": "8.0.0",
|
"Microsoft.Build.Tasks.Git": "10.0.103",
|
||||||
"Microsoft.SourceLink.Common": "8.0.0"
|
"Microsoft.SourceLink.Common": "10.0.103"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"Microsoft.Windows.CsWin32": {
|
"Microsoft.Windows.CsWin32": {
|
||||||
"type": "Direct",
|
"type": "Direct",
|
||||||
"requested": "[0.3.205, )",
|
"requested": "[0.3.269, )",
|
||||||
"resolved": "0.3.205",
|
"resolved": "0.3.269",
|
||||||
"contentHash": "U5wGAnyKd7/I2YMd43nogm81VMtjiKzZ9dsLMVI4eAB7jtv5IEj0gprj0q/F3iRmAIaGv5omOf8iSYx2+nE6BQ==",
|
"contentHash": "O4GVJ0ymxcoFRGS07VcoEClj7A9PIciHIjWDrPymzonhYlOfM7V0ZqGBUK19cUH3BPca9MfSOH0KLK/9JzQ8+Q==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Microsoft.Windows.SDK.Win32Docs": "0.1.42-alpha",
|
"Microsoft.Windows.SDK.Win32Docs": "0.1.42-alpha",
|
||||||
"Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview",
|
"Microsoft.Windows.SDK.Win32Metadata": "69.0.7-preview",
|
||||||
"Microsoft.Windows.WDK.Win32Metadata": "0.12.8-experimental"
|
"Microsoft.Windows.WDK.Win32Metadata": "0.13.25-experimental"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"PropertyChanged.Fody": {
|
"PropertyChanged.Fody": {
|
||||||
|
|
@ -46,13 +46,13 @@
|
||||||
},
|
},
|
||||||
"Microsoft.Build.Tasks.Git": {
|
"Microsoft.Build.Tasks.Git": {
|
||||||
"type": "Transitive",
|
"type": "Transitive",
|
||||||
"resolved": "8.0.0",
|
"resolved": "10.0.103",
|
||||||
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
|
"contentHash": "QoiCMcPuxC6eqRQmrmF9zBY96ejIznXtve/lJJbonGD9I5Aygf2AUCOWslGiCEtBbfWRSuUnepBjuuVOdAl5ag=="
|
||||||
},
|
},
|
||||||
"Microsoft.SourceLink.Common": {
|
"Microsoft.SourceLink.Common": {
|
||||||
"type": "Transitive",
|
"type": "Transitive",
|
||||||
"resolved": "8.0.0",
|
"resolved": "10.0.103",
|
||||||
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
|
"contentHash": "cMtGW5/r0ck72Jg2QwZcNTX59z+iB/B1kW84VMa/eX8L19DhHIuIcQjfK0pgLLBxd60Jl0Bj9GUolcM0MnJnZA=="
|
||||||
},
|
},
|
||||||
"Microsoft.Windows.SDK.Win32Docs": {
|
"Microsoft.Windows.SDK.Win32Docs": {
|
||||||
"type": "Transitive",
|
"type": "Transitive",
|
||||||
|
|
@ -61,15 +61,15 @@
|
||||||
},
|
},
|
||||||
"Microsoft.Windows.SDK.Win32Metadata": {
|
"Microsoft.Windows.SDK.Win32Metadata": {
|
||||||
"type": "Transitive",
|
"type": "Transitive",
|
||||||
"resolved": "61.0.15-preview",
|
"resolved": "69.0.7-preview",
|
||||||
"contentHash": "cysex3dazKtCPALCluC2XX3f5Aedy9H2pw5jb+TW5uas2rkem1Z7FRnbUrg2vKx0pk0Qz+4EJNr37HdYTEcvEQ=="
|
"contentHash": "RJoNjQJVCIDNLPbvYuaygCFknTyAxOUE45of1voj0jjOgJa9MB2m1/G8L8F3IYc+2EFG5aqa/9y8PEx7Tk2tLQ=="
|
||||||
},
|
},
|
||||||
"Microsoft.Windows.WDK.Win32Metadata": {
|
"Microsoft.Windows.WDK.Win32Metadata": {
|
||||||
"type": "Transitive",
|
"type": "Transitive",
|
||||||
"resolved": "0.12.8-experimental",
|
"resolved": "0.13.25-experimental",
|
||||||
"contentHash": "3n8R44/Z96Ly+ty4eYVJfESqbzvpw96lRLs3zOzyDmr1x1Kw7FNn5CyE416q+bZQV3e1HRuMUvyegMeRE/WedA==",
|
"contentHash": "IM50tb/+UIwBr9FMr6ZKcZjCMW+Axo6NjGqKxgjUfyCY8dRnYUfrJEXxAaXoWtYP4X8EmASmC1Jtwh4XucseZg==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview"
|
"Microsoft.Windows.SDK.Win32Metadata": "63.0.31-preview"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
using Flow.Launcher.Plugin.SharedCommands;
|
using Flow.Launcher.Plugin.SharedCommands;
|
||||||
using NUnit.Framework;
|
using NUnit.Framework;
|
||||||
using NUnit.Framework.Legacy;
|
using NUnit.Framework.Legacy;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace Flow.Launcher.Test
|
namespace Flow.Launcher.Test
|
||||||
{
|
{
|
||||||
|
|
@ -50,5 +51,89 @@ namespace Flow.Launcher.Test
|
||||||
{
|
{
|
||||||
ClassicAssert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path, allowEqual: expectedResult));
|
ClassicAssert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path, allowEqual: expectedResult));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TryDeleteDirectoryRobust_WhenDirectoryDoesNotExist_ReturnsTrue()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
string nonExistentPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||||
|
|
||||||
|
// Act
|
||||||
|
bool result = FilesFolders.TryDeleteDirectoryRobust(nonExistentPath);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
ClassicAssert.IsTrue(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TryDeleteDirectoryRobust_WhenDirectoryIsEmpty_DeletesSuccessfully()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
string tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||||
|
Directory.CreateDirectory(tempDir);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
bool result = FilesFolders.TryDeleteDirectoryRobust(tempDir);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
ClassicAssert.IsTrue(result);
|
||||||
|
ClassicAssert.IsFalse(Directory.Exists(tempDir));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TryDeleteDirectoryRobust_WhenDirectoryHasFiles_DeletesSuccessfully()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
string tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||||
|
Directory.CreateDirectory(tempDir);
|
||||||
|
File.WriteAllText(Path.Combine(tempDir, "test.txt"), "test content");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
bool result = FilesFolders.TryDeleteDirectoryRobust(tempDir);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
ClassicAssert.IsTrue(result);
|
||||||
|
ClassicAssert.IsFalse(Directory.Exists(tempDir));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TryDeleteDirectoryRobust_WhenDirectoryHasNestedStructure_DeletesSuccessfully()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
string tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||||
|
Directory.CreateDirectory(tempDir);
|
||||||
|
string subDir1 = Path.Combine(tempDir, "SubDir1");
|
||||||
|
string subDir2 = Path.Combine(tempDir, "SubDir2");
|
||||||
|
Directory.CreateDirectory(subDir1);
|
||||||
|
Directory.CreateDirectory(subDir2);
|
||||||
|
File.WriteAllText(Path.Combine(subDir1, "file1.txt"), "content1");
|
||||||
|
File.WriteAllText(Path.Combine(subDir2, "file2.txt"), "content2");
|
||||||
|
File.WriteAllText(Path.Combine(tempDir, "root.txt"), "root content");
|
||||||
|
|
||||||
|
// Act
|
||||||
|
bool result = FilesFolders.TryDeleteDirectoryRobust(tempDir);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
ClassicAssert.IsTrue(result);
|
||||||
|
ClassicAssert.IsFalse(Directory.Exists(tempDir));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TryDeleteDirectoryRobust_WhenFileIsReadOnly_RemovesAttributeAndDeletes()
|
||||||
|
{
|
||||||
|
// Arrange
|
||||||
|
string tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||||
|
Directory.CreateDirectory(tempDir);
|
||||||
|
string filePath = Path.Combine(tempDir, "readonly.txt");
|
||||||
|
File.WriteAllText(filePath, "readonly content");
|
||||||
|
File.SetAttributes(filePath, FileAttributes.ReadOnly);
|
||||||
|
|
||||||
|
// Act
|
||||||
|
bool result = FilesFolders.TryDeleteDirectoryRobust(tempDir);
|
||||||
|
|
||||||
|
// Assert
|
||||||
|
ClassicAssert.IsTrue(result);
|
||||||
|
ClassicAssert.IsFalse(Directory.Exists(tempDir));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,14 +16,15 @@ namespace Flow.Launcher.Test.Plugins
|
||||||
{
|
{
|
||||||
DecimalSeparator = DecimalSeparator.UseSystemLocale,
|
DecimalSeparator = DecimalSeparator.UseSystemLocale,
|
||||||
MaxDecimalPlaces = 10,
|
MaxDecimalPlaces = 10,
|
||||||
ShowErrorMessage = false // Make sure we return the empty results when error occurs
|
ShowErrorMessage = false, // Make sure we return the empty results when error occurs
|
||||||
|
UseThousandsSeparator = true // Default value
|
||||||
};
|
};
|
||||||
private readonly Engine _engine = new(new Configuration
|
private readonly Engine _engine = new(new Configuration
|
||||||
{
|
{
|
||||||
Scope = new Dictionary<string, object>
|
Scope = new Dictionary<string, object>
|
||||||
{
|
{
|
||||||
{ "e", Math.E }, // e is not contained in the default mages engine
|
{ "e", Math.E }, // e is not contained in the default mages engine
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
public CalculatorPluginTest()
|
public CalculatorPluginTest()
|
||||||
|
|
@ -41,6 +42,44 @@ namespace Flow.Launcher.Test.Plugins
|
||||||
engineField.SetValue(null, _engine);
|
engineField.SetValue(null, _engine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ThousandsSeparatorTest_Enabled()
|
||||||
|
{
|
||||||
|
_settings.UseThousandsSeparator = true;
|
||||||
|
|
||||||
|
_settings.DecimalSeparator = DecimalSeparator.Dot;
|
||||||
|
var result = GetCalculationResult("1000+234");
|
||||||
|
// When thousands separator is enabled, the result should contain a separator
|
||||||
|
// Since decimal separator is dot, thousands separator should be comma
|
||||||
|
ClassicAssert.AreEqual("1,234", result);
|
||||||
|
|
||||||
|
_settings.DecimalSeparator = DecimalSeparator.Comma;
|
||||||
|
var result2 = GetCalculationResult("1000+234");
|
||||||
|
// When thousands separator is enabled, the result should contain a separator
|
||||||
|
// Since decimal separator is comma, thousands separator should be dot
|
||||||
|
ClassicAssert.AreEqual("1.234", result2);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ThousandsSeparatorTest_Disabled()
|
||||||
|
{
|
||||||
|
_settings.UseThousandsSeparator = false;
|
||||||
|
_settings.DecimalSeparator = DecimalSeparator.UseSystemLocale;
|
||||||
|
|
||||||
|
var result = GetCalculationResult("1000+234");
|
||||||
|
ClassicAssert.AreEqual("1234", result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void ThousandsSeparatorTest_LargeNumber()
|
||||||
|
{
|
||||||
|
_settings.UseThousandsSeparator = false;
|
||||||
|
_settings.DecimalSeparator = DecimalSeparator.UseSystemLocale;
|
||||||
|
|
||||||
|
var result = GetCalculationResult("1000000+234567");
|
||||||
|
ClassicAssert.AreEqual("1234567", result);
|
||||||
|
}
|
||||||
|
|
||||||
// Basic operations
|
// Basic operations
|
||||||
[TestCase(@"1+1", "2")]
|
[TestCase(@"1+1", "2")]
|
||||||
[TestCase(@"2-1", "1")]
|
[TestCase(@"2-1", "1")]
|
||||||
|
|
@ -77,6 +116,9 @@ namespace Flow.Launcher.Test.Plugins
|
||||||
[TestCase(@"invalid_expression", "")]
|
[TestCase(@"invalid_expression", "")]
|
||||||
public void CalculatorTest(string expression, string result)
|
public void CalculatorTest(string expression, string result)
|
||||||
{
|
{
|
||||||
|
_settings.UseThousandsSeparator = false;
|
||||||
|
_settings.DecimalSeparator = DecimalSeparator.Dot;
|
||||||
|
|
||||||
ClassicAssert.AreEqual(GetCalculationResult(expression), result);
|
ClassicAssert.AreEqual(GetCalculationResult(expression), result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -259,6 +259,9 @@ namespace Flow.Launcher
|
||||||
|
|
||||||
await PluginManager.InitializePluginsAsync(_mainVM);
|
await PluginManager.InitializePluginsAsync(_mainVM);
|
||||||
|
|
||||||
|
// Refresh the history results after plugins are initialized so that we can parse the absolute icon paths
|
||||||
|
_mainVM.RefreshLastOpenedHistoryResults();
|
||||||
|
|
||||||
// Refresh home page after plugins are initialized because users may open main window during plugin initialization
|
// Refresh home page after plugins are initialized because users may open main window during plugin initialization
|
||||||
// And home page is created without full plugin list
|
// And home page is created without full plugin list
|
||||||
if (_settings.ShowHomePage && _mainVM.QueryResultsSelected() && string.IsNullOrEmpty(_mainVM.QueryText))
|
if (_settings.ShowHomePage && _mainVM.QueryResultsSelected() && string.IsNullOrEmpty(_mainVM.QueryText))
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
<PackageReference Include="iNKORE.UI.WPF.Modern" Version="0.10.2.1" />
|
<PackageReference Include="iNKORE.UI.WPF.Modern" Version="0.10.1" />
|
||||||
<PackageReference Include="MdXaml" Version="1.27.0" />
|
<PackageReference Include="MdXaml" Version="1.27.0" />
|
||||||
<PackageReference Include="MdXaml.AnimatedGif" Version="1.27.0" />
|
<PackageReference Include="MdXaml.AnimatedGif" Version="1.27.0" />
|
||||||
<PackageReference Include="MdXaml.Html" Version="1.27.0" />
|
<PackageReference Include="MdXaml.Html" Version="1.27.0" />
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Security.Principal;
|
using System.Security.Principal;
|
||||||
using Flow.Launcher.Infrastructure;
|
using Flow.Launcher.Infrastructure;
|
||||||
|
|
@ -64,7 +65,9 @@ public class AutoStartup
|
||||||
if (task.Definition.Actions.FirstOrDefault() is Microsoft.Win32.TaskScheduler.Action taskAction)
|
if (task.Definition.Actions.FirstOrDefault() is Microsoft.Win32.TaskScheduler.Action taskAction)
|
||||||
{
|
{
|
||||||
var action = taskAction.ToString().Trim();
|
var action = taskAction.ToString().Trim();
|
||||||
if (!action.Equals(Constant.ExecutablePath, StringComparison.OrdinalIgnoreCase))
|
var needsRecreation = !action.Equals(Constant.ExecutablePath, StringComparison.OrdinalIgnoreCase)
|
||||||
|
|| task.Definition.Settings.Priority != ProcessPriorityClass.Normal;
|
||||||
|
if (needsRecreation)
|
||||||
{
|
{
|
||||||
UnscheduleLogonTask();
|
UnscheduleLogonTask();
|
||||||
ScheduleLogonTask();
|
ScheduleLogonTask();
|
||||||
|
|
@ -184,6 +187,7 @@ public class AutoStartup
|
||||||
td.Settings.StopIfGoingOnBatteries = false;
|
td.Settings.StopIfGoingOnBatteries = false;
|
||||||
td.Settings.DisallowStartIfOnBatteries = false;
|
td.Settings.DisallowStartIfOnBatteries = false;
|
||||||
td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
|
td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
|
||||||
|
td.Settings.Priority = ProcessPriorityClass.Normal;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ namespace Flow.Launcher.Helper;
|
||||||
|
|
||||||
public static class ResultHelper
|
public static class ResultHelper
|
||||||
{
|
{
|
||||||
public static async Task<Result?> PopulateResultsAsync(LastOpenedHistoryItem item)
|
public static async Task<Result?> PopulateResultsAsync(LastOpenedHistoryResult item)
|
||||||
{
|
{
|
||||||
return await PopulateResultsAsync(item.PluginID, item.Query, item.Title, item.SubTitle, item.RecordKey);
|
return await PopulateResultsAsync(item.PluginID, item.Query, item.Title, item.SubTitle, item.RecordKey);
|
||||||
}
|
}
|
||||||
|
|
@ -24,7 +24,7 @@ public static class ResultHelper
|
||||||
if (query == null) return null;
|
if (query == null) return null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var freshResults = await plugin.Plugin.QueryAsync(query, CancellationToken.None);
|
var freshResults = await PluginManager.QueryForPluginAsync(plugin, query, CancellationToken.None);
|
||||||
// Try to match by record key first if it is valid, otherwise fall back to title + subtitle match
|
// Try to match by record key first if it is valid, otherwise fall back to title + subtitle match
|
||||||
if (string.IsNullOrEmpty(recordKey))
|
if (string.IsNullOrEmpty(recordKey))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">خطأ في إعداد التشغيل عند بدء التشغيل</system:String>
|
<system:String x:Key="setAutoStartFailed">خطأ في إعداد التشغيل عند بدء التشغيل</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">إخفاء Flow Launcher عند فقدان التركيز</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">إخفاء Flow Launcher عند فقدان التركيز</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">عدم عرض إشعارات الإصدار الجديد</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">عدم عرض إشعارات الإصدار الجديد</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">تذكر آخر موقع</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">تذكر آخر موقع</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Při nastavování spouštění došlo k chybě</system:String>
|
<system:String x:Key="setAutoStartFailed">Při nastavování spouštění došlo k chybě</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Skrýt Flow Launcher při vykliknutí</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Skrýt Flow Launcher při vykliknutí</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Nezobrazovat oznámení o nové verzi</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Nezobrazovat oznámení o nové verzi</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Zapamatovat poslední pozici</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Zapamatovat poslední pozici</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Skjul Flow Launcher ved mistet fokus</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Skjul Flow Launcher ved mistet fokus</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Vis ikke notifikationer om nye versioner</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Vis ikke notifikationer om nye versioner</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">Nach der Deinstallation müssen Sie diese Aufgabe (Flow.Launcher Startup) via Task-Scheduler manuell entfernen</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">Nach der Deinstallation müssen Sie diese Aufgabe (Flow.Launcher Startup) via Task-Scheduler manuell entfernen</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Fehler bei Einstellungsstart beim Start</system:String>
|
<system:String x:Key="setAutoStartFailed">Fehler bei Einstellungsstart beim Start</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Flow Launcher ausblenden, wenn Fokus verloren geht</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Flow Launcher ausblenden, wenn Fokus verloren geht</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Versionsbenachrichtigungen nicht zeigen</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Versionsbenachrichtigungen nicht zeigen</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Ort des Suchfensters</system:String>
|
<system:String x:Key="SearchWindowPosition">Ort des Suchfensters</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Letzte Position merken</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Letzte Position merken</system:String>
|
||||||
|
|
|
||||||
|
|
@ -81,6 +81,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Hide Flow Launcher when focus is lost</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Hide Flow Launcher when focus is lost</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Do not show new version notifications</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Do not show new version notifications</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ocultar Flow Launcher cuando se pierde el enfoque</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ocultar Flow Launcher cuando se pierde el enfoque</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">No mostrar notificaciones de nuevas versiones</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">No mostrar notificaciones de nuevas versiones</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">Después de la desinstalación, es necesario eliminar manualmente la tarea (Flow.Launcher Startup) mediante el Programador de Tareas</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">Después de la desinstalación, es necesario eliminar manualmente la tarea (Flow.Launcher Startup) mediante el Programador de Tareas</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Error de configuración de arranque al iniciar</system:String>
|
<system:String x:Key="setAutoStartFailed">Error de configuración de arranque al iniciar</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ocultar Flow Launcher cuando se pierde el foco</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ocultar Flow Launcher cuando se pierde el foco</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">No mostrar notificaciones de nuevas versiones</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">No mostrar notificaciones de nuevas versiones</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Ubicación de la ventana de búsqueda</system:String>
|
<system:String x:Key="SearchWindowPosition">Ubicación de la ventana de búsqueda</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Recordar última ubicación</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Recordar última ubicación</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">Après une désinstallation, vous devez supprimer manuellement cette tâche (Flow.Launcher Startup) via le planificateur de tâches</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">Après une désinstallation, vous devez supprimer manuellement cette tâche (Flow.Launcher Startup) via le planificateur de tâches</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Erreur lors de la configuration du lancement au démarrage</system:String>
|
<system:String x:Key="setAutoStartFailed">Erreur lors de la configuration du lancement au démarrage</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Cacher Flow Launcher lors de la perte de focus</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Cacher Flow Launcher lors de la perte de focus</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Afficher la barre des tâches lorsque Flow Launcher est ouvert</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Afficher temporairement la barre des tâches lorsque Flow Launcher est ouvert, utile pour les barres de tâches auto-masquées.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Ne pas afficher le message de mise à jour pour les nouvelles versions</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Ne pas afficher le message de mise à jour pour les nouvelles versions</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Emplacement de la fenêtre de recherche</system:String>
|
<system:String x:Key="SearchWindowPosition">Emplacement de la fenêtre de recherche</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Se souvenir de la dernière position</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Se souvenir de la dernière position</system:String>
|
||||||
|
|
|
||||||
|
|
@ -8,9 +8,9 @@
|
||||||
</system:String>
|
</system:String>
|
||||||
<system:String x:Key="runtimePluginChooseRuntimeExecutable">אנא בחר את קובץ ההפעלה {0}</system:String>
|
<system:String x:Key="runtimePluginChooseRuntimeExecutable">אנא בחר את קובץ ההפעלה {0}</system:String>
|
||||||
<system:String x:Key="runtimeExecutableInvalidChooseDownload">
|
<system:String x:Key="runtimeExecutableInvalidChooseDownload">
|
||||||
Your selected {0} executable is invalid.
|
קובץ ההפעלה {0} שבחרת אינו חוקי.
|
||||||
{2}{2}
|
{2}{2}
|
||||||
Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
|
לחץ על כן אם ברצונך, בחר את {0} ההפעלה הקודמת. לחץ על לא אם ברצונך להוריד את {1}
|
||||||
</system:String>
|
</system:String>
|
||||||
<system:String x:Key="runtimePluginUnableToSetExecutablePath">לא ניתן להגדיר נתיב הפעלה {0}, אנא נסה שוב בהגדרות Flow (גלול עד למטה).</system:String>
|
<system:String x:Key="runtimePluginUnableToSetExecutablePath">לא ניתן להגדיר נתיב הפעלה {0}, אנא נסה שוב בהגדרות Flow (גלול עד למטה).</system:String>
|
||||||
<system:String x:Key="failedToInitializePluginsTitle">נכשל בהפעלת תוספים</system:String>
|
<system:String x:Key="failedToInitializePluginsTitle">נכשל בהפעלת תוספים</system:String>
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">לאחר הסרת ההתקנה, עליך להסיר ידנית משימה זו (Flow.Launcher Startup) דרך מתזמן המשימות</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">לאחר הסרת ההתקנה, עליך להסיר ידנית משימה זו (Flow.Launcher Startup) דרך מתזמן המשימות</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">שגיאה בהגדרת ההפעלה בעת הפעלת windows</system:String>
|
<system:String x:Key="setAutoStartFailed">שגיאה בהגדרת ההפעלה בעת הפעלת windows</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">הסתר את Flow Launcher כאשר הוא אינו החלון הפעיל</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">הסתר את Flow Launcher כאשר הוא אינו החלון הפעיל</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">אל תציג התראות על גרסה חדשה</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">אל תציג התראות על גרסה חדשה</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">מיקום חלון חיפוש</system:String>
|
<system:String x:Key="SearchWindowPosition">מיקום חלון חיפוש</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">זכור את המיקום האחרון</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">זכור את המיקום האחרון</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Errore nell'impostazione del lancio all'avvio</system:String>
|
<system:String x:Key="setAutoStartFailed">Errore nell'impostazione del lancio all'avvio</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Nascondi Flow Launcher quando perde il focus</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Nascondi Flow Launcher quando perde il focus</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Non mostrare le notifiche per una nuova versione</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Non mostrare le notifiche per una nuova versione</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Ricorda L'Ultima Posizione</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Ricorda L'Ultima Posizione</system:String>
|
||||||
|
|
@ -147,8 +149,8 @@
|
||||||
<system:String x:Key="searchDelay">Search Delay</system:String>
|
<system:String x:Key="searchDelay">Search Delay</system:String>
|
||||||
<system:String x:Key="searchDelayToolTip">Adds a short delay while typing to reduce UI flicker and result load. Recommended if your typing speed is average.</system:String>
|
<system:String x:Key="searchDelayToolTip">Adds a short delay while typing to reduce UI flicker and result load. Recommended if your typing speed is average.</system:String>
|
||||||
<system:String x:Key="searchDelayNumberBoxToolTip">Enter the wait time (in ms) until input is considered complete. This can only be edited if Search Delay is enabled.</system:String>
|
<system:String x:Key="searchDelayNumberBoxToolTip">Enter the wait time (in ms) until input is considered complete. This can only be edited if Search Delay is enabled.</system:String>
|
||||||
<system:String x:Key="searchDelayTime">Default Search Delay Time</system:String>
|
<system:String x:Key="searchDelayTime">Tempo predefinito ritardo ricerca</system:String>
|
||||||
<system:String x:Key="searchDelayTimeToolTip">Wait time before showing results after typing stops. Higher values wait longer. (ms)</system:String>
|
<system:String x:Key="searchDelayTimeToolTip">Tempo di attesa prima di mostrare i risultati dopo l'interruzione della digitazione. Valori più alti attendono più a lungo. (ms)</system:String>
|
||||||
<system:String x:Key="KoreanImeTitle">Information for Korean IME user</system:String>
|
<system:String x:Key="KoreanImeTitle">Information for Korean IME user</system:String>
|
||||||
<system:String x:Key="KoreanImeGuide">
|
<system:String x:Key="KoreanImeGuide">
|
||||||
The Korean input method used in Windows 11 may cause some issues in Flow Launcher.
|
The Korean input method used in Windows 11 may cause some issues in Flow Launcher.
|
||||||
|
|
@ -265,11 +267,11 @@
|
||||||
<system:String x:Key="UpdatePromptTitle">Plugin update</system:String>
|
<system:String x:Key="UpdatePromptTitle">Plugin update</system:String>
|
||||||
<system:String x:Key="UpdatePromptSubtitle">{0} di {1} {2}{2}Vuoi aggiornare questo plugin?</system:String>
|
<system:String x:Key="UpdatePromptSubtitle">{0} di {1} {2}{2}Vuoi aggiornare questo plugin?</system:String>
|
||||||
<system:String x:Key="DownloadingPlugin">Download del plugin</system:String>
|
<system:String x:Key="DownloadingPlugin">Download del plugin</system:String>
|
||||||
<system:String x:Key="AutoRestartAfterChange">Automatically restart after installing/uninstalling/updating plugins in plugin store</system:String>
|
<system:String x:Key="AutoRestartAfterChange">Riavvia automaticamente dopo l'installazione/disinstallazione/aggiornamento dei plugin nel Plugin Store</system:String>
|
||||||
<system:String x:Key="ZipFileNotHavePluginJson">Zip file does not have a valid plugin.json configuration</system:String>
|
<system:String x:Key="ZipFileNotHavePluginJson">Il file zip non contiene una configurazione plugin.json valida</system:String>
|
||||||
<system:String x:Key="InstallFromUnknownSourceTitle">Installazione da una fonte sconosciuta</system:String>
|
<system:String x:Key="InstallFromUnknownSourceTitle">Installazione da una fonte sconosciuta</system:String>
|
||||||
<system:String x:Key="InstallFromUnknownSourceSubtitle">This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)</system:String>
|
<system:String x:Key="InstallFromUnknownSourceSubtitle">This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)</system:String>
|
||||||
<system:String x:Key="ZipFiles">Zip files</system:String>
|
<system:String x:Key="ZipFiles">File zip</system:String>
|
||||||
<system:String x:Key="SelectZipFile">Please select zip file</system:String>
|
<system:String x:Key="SelectZipFile">Please select zip file</system:String>
|
||||||
<system:String x:Key="installLocalPluginTooltip">Install plugin from local path</system:String>
|
<system:String x:Key="installLocalPluginTooltip">Install plugin from local path</system:String>
|
||||||
<system:String x:Key="updateNoResultTitle">Nessun aggiornamento disponibile</system:String>
|
<system:String x:Key="updateNoResultTitle">Nessun aggiornamento disponibile</system:String>
|
||||||
|
|
@ -469,7 +471,7 @@
|
||||||
<system:String x:Key="clearlogfolder">Cancella i log</system:String>
|
<system:String x:Key="clearlogfolder">Cancella i log</system:String>
|
||||||
<system:String x:Key="clearlogfolderMessage">Sei sicuro di voler cancellare tutti i log?</system:String>
|
<system:String x:Key="clearlogfolderMessage">Sei sicuro di voler cancellare tutti i log?</system:String>
|
||||||
<system:String x:Key="cachefolder">Cache Folder</system:String>
|
<system:String x:Key="cachefolder">Cache Folder</system:String>
|
||||||
<system:String x:Key="clearcachefolder">Clear Caches</system:String>
|
<system:String x:Key="clearcachefolder">Cancella cache</system:String>
|
||||||
<system:String x:Key="clearcachefolderMessage">Are you sure you want to delete all caches?</system:String>
|
<system:String x:Key="clearcachefolderMessage">Are you sure you want to delete all caches?</system:String>
|
||||||
<system:String x:Key="clearfolderfailMessage">Failed to clear part of folders and files. Please see log file for more information</system:String>
|
<system:String x:Key="clearfolderfailMessage">Failed to clear part of folders and files. Please see log file for more information</system:String>
|
||||||
<system:String x:Key="welcomewindow">Wizard</system:String>
|
<system:String x:Key="welcomewindow">Wizard</system:String>
|
||||||
|
|
@ -636,7 +638,7 @@ Se si aggiunge un prefisso '@' mentre si inserisce una scorciatoia, corrisponde
|
||||||
<!-- Plugin Update Window -->
|
<!-- Plugin Update Window -->
|
||||||
<system:String x:Key="restartAfterUpdating">Restart Flow Launcher after updating plugins</system:String>
|
<system:String x:Key="restartAfterUpdating">Restart Flow Launcher after updating plugins</system:String>
|
||||||
<system:String x:Key="updatePluginCheckboxContent">{0}: Update from v{1} to v{2}</system:String>
|
<system:String x:Key="updatePluginCheckboxContent">{0}: Update from v{1} to v{2}</system:String>
|
||||||
<system:String x:Key="updatePluginNoSelected">No plugin selected</system:String>
|
<system:String x:Key="updatePluginNoSelected">Nessun plugin selezionato</system:String>
|
||||||
|
|
||||||
<!-- Welcome Window -->
|
<!-- Welcome Window -->
|
||||||
<system:String x:Key="Skip">Salta</system:String>
|
<system:String x:Key="Skip">Salta</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">アンインストール後は、「タスク スケジューラ」からこのタスク(Flow.Launcher Startup)を手動で削除する必要があります。</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">アンインストール後は、「タスク スケジューラ」からこのタスク(Flow.Launcher Startup)を手動で削除する必要があります。</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">スタートアップ時に起動の設定失敗</system:String>
|
<system:String x:Key="setAutoStartFailed">スタートアップ時に起動の設定失敗</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">フォーカスを失った時にFlow Launcherを隠す</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">フォーカスを失った時にFlow Launcherを隠す</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Flow Launcher を開いたときにタスクバーを表示する</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Flow Launcher を開いたときに一時的にタスクバーを表示します。タスクバーの自動非表示を設定している場合に便利です。</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">最新版が入手可能であっても、アップグレードメッセージを表示しない</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">最新版が入手可能であっても、アップグレードメッセージを表示しない</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">検索ウィンドウの位置</system:String>
|
<system:String x:Key="SearchWindowPosition">検索ウィンドウの位置</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">最後の表示位置を記憶する</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">最後の表示位置を記憶する</system:String>
|
||||||
|
|
@ -169,7 +171,7 @@
|
||||||
<system:String x:Key="KoreanImeOpenLinkButton">開く</system:String>
|
<system:String x:Key="KoreanImeOpenLinkButton">開く</system:String>
|
||||||
<system:String x:Key="KoreanImeRegistry">前の韓国語IMEを使用</system:String>
|
<system:String x:Key="KoreanImeRegistry">前の韓国語IMEを使用</system:String>
|
||||||
<system:String x:Key="KoreanImeRegistryTooltip">You can change the Previous Korean IME settings directly from here</system:String>
|
<system:String x:Key="KoreanImeRegistryTooltip">You can change the Previous Korean IME settings directly from here</system:String>
|
||||||
<system:String x:Key="KoreanImeSettingChangeFailTitle">Failed to change Korean IME setting</system:String>
|
<system:String x:Key="KoreanImeSettingChangeFailTitle">韓国語IME設定の変更に失敗しました</system:String>
|
||||||
<system:String x:Key="KoreanImeSettingChangeFailSubTitle">システムのレジストリへのアクセスが可能か確認するか、サポートにお問い合わせください。</system:String>
|
<system:String x:Key="KoreanImeSettingChangeFailSubTitle">システムのレジストリへのアクセスが可能か確認するか、サポートにお問い合わせください。</system:String>
|
||||||
<system:String x:Key="homePage">ホームページ</system:String>
|
<system:String x:Key="homePage">ホームページ</system:String>
|
||||||
<system:String x:Key="homePageToolTip">検索文字列が空の場合、ホームページの結果を表示します。</system:String>
|
<system:String x:Key="homePageToolTip">検索文字列が空の場合、ホームページの結果を表示します。</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">Flow Launcher를 제거한 후에는 작업 스케줄러에서 이 작업(Flow.Launcher Startup)을 수동으로 삭제해야 합니다</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">Flow Launcher를 제거한 후에는 작업 스케줄러에서 이 작업(Flow.Launcher Startup)을 수동으로 삭제해야 합니다</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">포커스 잃으면 Flow Launcher 숨김</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">포커스 잃으면 Flow Launcher 숨김</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">새 버전 알림 끄기</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">새 버전 알림 끄기</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">검색 창 위치</system:String>
|
<system:String x:Key="SearchWindowPosition">검색 창 위치</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">마지막 위치 기억</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">마지막 위치 기억</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Feil ved å sette kjør ved oppstart</system:String>
|
<system:String x:Key="setAutoStartFailed">Feil ved å sette kjør ved oppstart</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Skjul Flow Launcher når fokus forsvinner</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Skjul Flow Launcher når fokus forsvinner</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Ikke vis varsler om nye versjoner</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Ikke vis varsler om nye versjoner</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Husk siste posisjon</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Husk siste posisjon</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Fout bij het instellen van uitvoeren bij opstarten</system:String>
|
<system:String x:Key="setAutoStartFailed">Fout bij het instellen van uitvoeren bij opstarten</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Verberg Flow Launcher als focus verloren is</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Verberg Flow Launcher als focus verloren is</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Laat geen nieuwe versie notificaties zien</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Laat geen nieuwe versie notificaties zien</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Laatste Positie Onthouden</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Laatste Positie Onthouden</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">Po odinstalowaniu musisz ręcznie usunąć to zadanie (Flow.Launcher Startup) za pomocą Harmonogramu zadań</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">Po odinstalowaniu musisz ręcznie usunąć to zadanie (Flow.Launcher Startup) za pomocą Harmonogramu zadań</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Błąd uruchamiania ustawień przy starcie</system:String>
|
<system:String x:Key="setAutoStartFailed">Błąd uruchamiania ustawień przy starcie</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ukryj okno Flow Launcher kiedy przestanie ono być aktywne</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ukryj okno Flow Launcher kiedy przestanie ono być aktywne</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Nie pokazuj powiadomienia o nowej wersji</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Nie pokazuj powiadomienia o nowej wersji</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Pozycja okna wyszukiwania</system:String>
|
<system:String x:Key="SearchWindowPosition">Pozycja okna wyszukiwania</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Zapamiętaj Ostatnią Pozycję</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Zapamiętaj Ostatnią Pozycję</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Erro ao ativar início com o sistema</system:String>
|
<system:String x:Key="setAutoStartFailed">Erro ao ativar início com o sistema</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Esconder Flow Launcher quando foco for perdido</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Esconder Flow Launcher quando foco for perdido</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Não mostrar notificações de novas versões</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Não mostrar notificações de novas versões</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Lembrar Última Posição</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Lembrar Última Posição</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">Se desinstalar a aplicação, tem que remover manualmente a tarefa (Flow.Launcher Startup) no agendamento de tarefas</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">Se desinstalar a aplicação, tem que remover manualmente a tarefa (Flow.Launcher Startup) no agendamento de tarefas</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Erro ao definir para iniciar ao arrancar</system:String>
|
<system:String x:Key="setAutoStartFailed">Erro ao definir para iniciar ao arrancar</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ocultar Flow Launcher ao perder o foco</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ocultar Flow Launcher ao perder o foco</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Mostrar barra de tarefas ao abrir Flow Launcher</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Mostrar, temporariamente, a barra de tarefas ao abrir Flow launcher. Útil para barra de tarefas oculta automaticamente.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Não notificar acerca de novas versões</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Não notificar acerca de novas versões</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Posição da janela de pesquisa</system:String>
|
<system:String x:Key="SearchWindowPosition">Posição da janela de pesquisa</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Memorizar última posição</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Memorizar última posição</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Ошибка настройки запуска при запуске</system:String>
|
<system:String x:Key="setAutoStartFailed">Ошибка настройки запуска при запуске</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Скрывать Flow Launcher, если потерян фокуc</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Скрывать Flow Launcher, если потерян фокуc</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Не отображать сообщение об обновлении, когда доступна новая версия</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Не отображать сообщение об обновлении, когда доступна новая версия</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Запомнить последнее положение</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Запомнить последнее положение</system:String>
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,8 @@ Nevykonali sa žiadne zmeny.</system:String>
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">Po odinštalovaní musíte úlohu manuálne odstrániť (Flow.Launcher Startup) cez Plánovač úloh</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">Po odinštalovaní musíte úlohu manuálne odstrániť (Flow.Launcher Startup) cez Plánovač úloh</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Chybné nastavenie spustenia pri spustení</system:String>
|
<system:String x:Key="setAutoStartFailed">Chybné nastavenie spustenia pri spustení</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Schovať Flow Launcher po strate fokusu</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Schovať Flow Launcher po strate fokusu</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Zobraziť panel úloh, keď je Flow Launcher otvorený</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Dočasne zobraziť panel úloh pri otvorení Flow Launchera, užitočné pri automatickom skrývaní panela úloh.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Nezobrazovať upozornenia na novú verziu</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Nezobrazovať upozornenia na novú verziu</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Poloha vyhľadávacieho okna</system:String>
|
<system:String x:Key="SearchWindowPosition">Poloha vyhľadávacieho okna</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Zapamätať si poslednú pozíciu</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Zapamätať si poslednú pozíciu</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Hide Flow Launcher when focus is lost</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Hide Flow Launcher when focus is lost</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Do not show new version notifications</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Do not show new version notifications</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Sakri Flow Launcher kada se izgubi fokus</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Sakri Flow Launcher kada se izgubi fokus</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Ne prikazuj obaveštenje o novoj verziji</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Ne prikazuj obaveštenje o novoj verziji</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">Kaldırma işleminden sonra, bu görevi (Flow.Launcher Startup) Görev Zamanlayıcı üzerinden elle kaldırmanız gerekmektedir</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">Kaldırma işleminden sonra, bu görevi (Flow.Launcher Startup) Görev Zamanlayıcı üzerinden elle kaldırmanız gerekmektedir</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Sistemle başlatma ayarı başarısız oldu</system:String>
|
<system:String x:Key="setAutoStartFailed">Sistemle başlatma ayarı başarısız oldu</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Odak Pencereden Ayrıldığında Gizle</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Odak Pencereden Ayrıldığında Gizle</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Flow Launcher açıldığında görev çubuğunu göster</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Flow Launcher açıldığında geçici olarak görev çubuğunu gösterir, otomatik gizlenen görev çubukları için kullanışlıdır.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Güncelleme bildirimlerini gösterme</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Güncelleme bildirimlerini gösterme</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Pencere Konumu</system:String>
|
<system:String x:Key="SearchWindowPosition">Pencere Konumu</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Son Konumu Hatırla</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Son Konumu Hatırla</system:String>
|
||||||
|
|
@ -454,7 +456,7 @@
|
||||||
<system:String x:Key="icons">Kullanılan Simgeler</system:String>
|
<system:String x:Key="icons">Kullanılan Simgeler</system:String>
|
||||||
<system:String x:Key="about_activate_times">Şu ana kadar Flow Launcher'ı {0} kez aktifleştirdiniz.</system:String>
|
<system:String x:Key="about_activate_times">Şu ana kadar Flow Launcher'ı {0} kez aktifleştirdiniz.</system:String>
|
||||||
<system:String x:Key="checkUpdates">Güncellemeleri Kontrol Et</system:String>
|
<system:String x:Key="checkUpdates">Güncellemeleri Kontrol Et</system:String>
|
||||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
<system:String x:Key="BecomeASponsor">Sponsor Olun</system:String>
|
||||||
<system:String x:Key="newVersionTips">Uygulamanın yeni sürümü ({0}) mevcut, Lütfen Flow Launcher'ı yeniden başlatın.</system:String>
|
<system:String x:Key="newVersionTips">Uygulamanın yeni sürümü ({0}) mevcut, Lütfen Flow Launcher'ı yeniden başlatın.</system:String>
|
||||||
<system:String x:Key="checkUpdatesFailed">Güncelleme kontrolü başarısız oldu. Lütfen bağlantınız ve vekil sunucu ayarlarınızın api.github.com adresine ulaşabilir olduğunu kontrol edin.</system:String>
|
<system:String x:Key="checkUpdatesFailed">Güncelleme kontrolü başarısız oldu. Lütfen bağlantınız ve vekil sunucu ayarlarınızın api.github.com adresine ulaşabilir olduğunu kontrol edin.</system:String>
|
||||||
<system:String x:Key="downloadUpdatesFailed">
|
<system:String x:Key="downloadUpdatesFailed">
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">Після видалення, вам необхідно вручну видалити це завдання (Flow.Launcher Startup) через планувальник завдань</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">Після видалення, вам необхідно вручну видалити це завдання (Flow.Launcher Startup) через планувальник завдань</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Помилка запуску налаштування під час запуску</system:String>
|
<system:String x:Key="setAutoStartFailed">Помилка запуску налаштування під час запуску</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Сховати Flow Launcher, якщо втрачено фокус</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Сховати Flow Launcher, якщо втрачено фокус</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Показувати панель завдань, коли Flow Launcher відкрито</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Тимчасово показувати панель завдань при відкритті Flow Launcher, корисно для автоматично прихованих панелей завдань.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Не повідомляти про доступні нові версії</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Не повідомляти про доступні нові версії</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Розташування вікна пошуку</system:String>
|
<system:String x:Key="SearchWindowPosition">Розташування вікна пошуку</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Пам'ятати останню позицію</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Пам'ятати останню позицію</system:String>
|
||||||
|
|
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Không lưu được tính năng tự khởi động khi khởi động hệ thống</system:String>
|
<system:String x:Key="setAutoStartFailed">Không lưu được tính năng tự khởi động khi khởi động hệ thống</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ẩn Flow Launcher khi mất tiêu điểm</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ẩn Flow Launcher khi mất tiêu điểm</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">Không hiển thị thông báo khi có phiên bản mới</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">Không hiển thị thông báo khi có phiên bản mới</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Ghi nhớ vị trí cuối cùng</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Ghi nhớ vị trí cuối cùng</system:String>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
<!-- Startup -->
|
<!-- Startup -->
|
||||||
<system:String x:Key="runtimePluginInstalledChooseRuntimePrompt">
|
<system:String x:Key="runtimePluginInstalledChooseRuntimePrompt">
|
||||||
Flow 检测到您已安装 {0} 个插件,需要 {1} 才能运行。是否要下载 {1}?
|
Flow 检测到您已安装 {0} 插件,需要 {1} 才能运行。是否要下载 {1}?
|
||||||
{2}{2}
|
{2}{2}
|
||||||
如果已安装,请单击“否”,系统将提示您选择包含 {1} 可执行文件的文件夹
|
如果已安装,请单击“否”,系统将提示您选择包含 {1} 可执行文件的文件夹
|
||||||
</system:String>
|
</system:String>
|
||||||
|
|
@ -79,6 +79,8 @@
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">卸载后,您需要通过任务计划程序手动移除此任务 (Flow.Launcher Startup)</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">卸载后,您需要通过任务计划程序手动移除此任务 (Flow.Launcher Startup)</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">设置开机自启时出错</system:String>
|
<system:String x:Key="setAutoStartFailed">设置开机自启时出错</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">失去焦点时自动隐藏 Flow Launcher</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">失去焦点时自动隐藏 Flow Launcher</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">打开 Flow 时显示任务栏</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">打开 Flow 时临时显示任务栏,用于自动隐藏任务栏</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">不显示新版本提示</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">不显示新版本提示</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">搜索窗口位置</system:String>
|
<system:String x:Key="SearchWindowPosition">搜索窗口位置</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">记住上次的位置</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">记住上次的位置</system:String>
|
||||||
|
|
|
||||||
|
|
@ -2,43 +2,43 @@
|
||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
<!-- Startup -->
|
<!-- Startup -->
|
||||||
<system:String x:Key="runtimePluginInstalledChooseRuntimePrompt">
|
<system:String x:Key="runtimePluginInstalledChooseRuntimePrompt">
|
||||||
Flow detected you have installed {0} plugins, which will require {1} to run. Would you like to download {1}?
|
Flow 檢測到你已安裝 {0} 個插件,需要 {1} 才能運行。是否要下載 {1}?
|
||||||
{2}{2}
|
{2}{2}
|
||||||
Click no if it's already installed, and you will be prompted to select the folder that contains the {1} executable
|
如果已安裝,請點擊“否”,系統將提示你選擇包含 {1} 個程式的資料夾
|
||||||
</system:String>
|
</system:String>
|
||||||
<system:String x:Key="runtimePluginChooseRuntimeExecutable">Please select the {0} executable</system:String>
|
<system:String x:Key="runtimePluginChooseRuntimeExecutable">請選擇 {0} 可執行檔</system:String>
|
||||||
<system:String x:Key="runtimeExecutableInvalidChooseDownload">
|
<system:String x:Key="runtimeExecutableInvalidChooseDownload">
|
||||||
Your selected {0} executable is invalid.
|
您所選擇的 {0} 可執行檔無效。
|
||||||
{2}{2}
|
{2}{2}
|
||||||
Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
|
若要重新選取 {0} 可執行檔,請按「是」。若要下載 {1},請按「否」。
|
||||||
</system:String>
|
</system:String>
|
||||||
<system:String x:Key="runtimePluginUnableToSetExecutablePath">Unable to set {0} executable path, please try from Flow's settings (scroll down to the bottom).</system:String>
|
<system:String x:Key="runtimePluginUnableToSetExecutablePath">無法設定 {0} 可執行檔路徑,請從 Flow 的設定中嘗試(向下捲動至最底部)。</system:String>
|
||||||
<system:String x:Key="failedToInitializePluginsTitle">Fail to Init Plugins</system:String>
|
<system:String x:Key="failedToInitializePluginsTitle">初始化外掛失敗</system:String>
|
||||||
<system:String x:Key="failedToInitializePluginsMessage">Plugins: {0} - fail to load and would be disabled, please contact plugin creator for help</system:String>
|
<system:String x:Key="failedToInitializePluginsMessage">外掛:{0} — 載入失敗,將被停用,請聯絡外掛開發者以取得協助</system:String>
|
||||||
|
|
||||||
<!-- Portable -->
|
<!-- Portable -->
|
||||||
<system:String x:Key="restartToDisablePortableMode">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</system:String>
|
<system:String x:Key="restartToDisablePortableMode">Flow Launcher 需要重新啟動以完成停用可攜式模式,重新啟動後您的可攜式資料設定檔將被刪除,漫遊資料設定檔會保留</system:String>
|
||||||
<system:String x:Key="restartToEnablePortableMode">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</system:String>
|
<system:String x:Key="restartToEnablePortableMode">Flow Launcher 需要重新啟動以完成啟用可攜式模式,重新啟動後您的漫遊資料設定檔將被刪除,而可攜式資料設定檔則會保留</system:String>
|
||||||
<system:String x:Key="moveToDifferentLocation">Flow Launcher has detected you enabled portable mode, would you like to move it to a different location?</system:String>
|
<system:String x:Key="moveToDifferentLocation">Flow Launcher 偵測到您已啟用可攜式模式,是否要將它移到其他位置?</system:String>
|
||||||
<system:String x:Key="shortcutsUninstallerCreated">Flow Launcher has detected you disabled portable mode, the relevant shortcuts and uninstaller entry have been created</system:String>
|
<system:String x:Key="shortcutsUninstallerCreated">Flow Launcher 偵測到您已停用可攜模式,相關的捷徑與解除安裝程式項目已建立</system:String>
|
||||||
<system:String x:Key="userDataDuplicated">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.</system:String>
|
<system:String x:Key="userDataDuplicated">Flow Launcher 偵測到您的使用者資料同時存在於 {0} 與 {1}。{2}{2}請刪除 {1} 以繼續。尚未發生任何變更。</system:String>
|
||||||
|
|
||||||
<!-- Plugin Loader -->
|
<!-- Plugin Loader -->
|
||||||
<system:String x:Key="pluginHasErrored">The following plugin has errored and cannot be loaded:</system:String>
|
<system:String x:Key="pluginHasErrored">下列外掛發生錯誤,無法載入:</system:String>
|
||||||
<system:String x:Key="pluginsHaveErrored">The following plugins have errored and cannot be loaded:</system:String>
|
<system:String x:Key="pluginsHaveErrored">下列外掛發生錯誤,無法載入:</system:String>
|
||||||
<system:String x:Key="referToLogs">Please refer to the logs for more information</system:String>
|
<system:String x:Key="referToLogs">請參閱日誌以獲得更多資訊</system:String>
|
||||||
|
|
||||||
<!-- Http -->
|
<!-- Http -->
|
||||||
<system:String x:Key="pleaseTryAgain">Please try again</system:String>
|
<system:String x:Key="pleaseTryAgain">請再試一次</system:String>
|
||||||
<system:String x:Key="parseProxyFailed">Unable to parse Http Proxy</system:String>
|
<system:String x:Key="parseProxyFailed">無法解析 Http 代理</system:String>
|
||||||
|
|
||||||
<!-- AbstractPluginEnvironment -->
|
<!-- AbstractPluginEnvironment -->
|
||||||
<system:String x:Key="failToInstallTypeScriptEnv">Failed to install TypeScript environment. Please try again later</system:String>
|
<system:String x:Key="failToInstallTypeScriptEnv">無法安裝 TypeScript 環境。請稍後再試一次</system:String>
|
||||||
<system:String x:Key="failToInstallPythonEnv">Failed to install Python environment. Please try again later.</system:String>
|
<system:String x:Key="failToInstallPythonEnv">安裝 Python 環境失敗。請稍後再試。</system:String>
|
||||||
|
|
||||||
<!-- MainWindow -->
|
<!-- MainWindow -->
|
||||||
<system:String x:Key="registerHotkeyFailed">Failed to register hotkey "{0}". The hotkey may be in use by another program. Change to a different hotkey, or exit another program.</system:String>
|
<system:String x:Key="registerHotkeyFailed">註冊熱鍵「{0}」失敗。此熱鍵可能已被其他程式使用。請更改為不同的熱鍵,或關閉其他程式。</system:String>
|
||||||
<system:String x:Key="unregisterHotkeyFailed">Failed to unregister hotkey "{0}". Please try again or see log for details</system:String>
|
<system:String x:Key="unregisterHotkeyFailed">無法取消註冊熱鍵「{0}」。請再試一次或查看日誌以取得詳細資訊</system:String>
|
||||||
<system:String x:Key="MessageBoxTitle">Flow Launcher</system:String>
|
<system:String x:Key="MessageBoxTitle">Flow Launcher</system:String>
|
||||||
<system:String x:Key="couldnotStartCmd">啟動命令 {0} 失敗</system:String>
|
<system:String x:Key="couldnotStartCmd">啟動命令 {0} 失敗</system:String>
|
||||||
<system:String x:Key="invalidFlowLauncherPluginFileFormat">無效的 Flow Launcher 外掛格式</system:String>
|
<system:String x:Key="invalidFlowLauncherPluginFileFormat">無效的 Flow Launcher 外掛格式</system:String>
|
||||||
|
|
@ -54,7 +54,7 @@
|
||||||
<system:String x:Key="copy">複製</system:String>
|
<system:String x:Key="copy">複製</system:String>
|
||||||
<system:String x:Key="cut">剪下</system:String>
|
<system:String x:Key="cut">剪下</system:String>
|
||||||
<system:String x:Key="paste">貼上</system:String>
|
<system:String x:Key="paste">貼上</system:String>
|
||||||
<system:String x:Key="undo">Undo</system:String>
|
<system:String x:Key="undo">還原</system:String>
|
||||||
<system:String x:Key="selectAll">全選</system:String>
|
<system:String x:Key="selectAll">全選</system:String>
|
||||||
<system:String x:Key="fileTitle">檔案</system:String>
|
<system:String x:Key="fileTitle">檔案</system:String>
|
||||||
<system:String x:Key="folderTitle">資料夾</system:String>
|
<system:String x:Key="folderTitle">資料夾</system:String>
|
||||||
|
|
@ -62,12 +62,12 @@
|
||||||
<system:String x:Key="GameMode">遊戲模式</system:String>
|
<system:String x:Key="GameMode">遊戲模式</system:String>
|
||||||
<system:String x:Key="GameModeToolTip">暫停使用快捷鍵。</system:String>
|
<system:String x:Key="GameModeToolTip">暫停使用快捷鍵。</system:String>
|
||||||
<system:String x:Key="PositionReset">重設位置</system:String>
|
<system:String x:Key="PositionReset">重設位置</system:String>
|
||||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
<system:String x:Key="PositionResetToolTip">重設搜尋視窗位置</system:String>
|
||||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
<system:String x:Key="queryTextBoxPlaceholder">在此輸入以搜尋</system:String>
|
||||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
<system:String x:Key="pluginStillInitializing">「{0}:此外掛程式仍在初始化……」……</system:String>
|
||||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
<system:String x:Key="pluginStillInitializingSubtitle">選擇此結果以重新查詢</system:String>
|
||||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
<system:String x:Key="pluginFailedToRespond">「{0}:未能回應!」!</system:String>
|
||||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
<system:String x:Key="pluginFailedToRespondSubtitle">選取此結果以取得更多資訊</system:String>
|
||||||
|
|
||||||
<!-- Setting General -->
|
<!-- Setting General -->
|
||||||
<system:String x:Key="flowlauncher_settings">設定</system:String>
|
<system:String x:Key="flowlauncher_settings">設定</system:String>
|
||||||
|
|
@ -75,22 +75,24 @@
|
||||||
<system:String x:Key="portableMode">便攜模式</system:String>
|
<system:String x:Key="portableMode">便攜模式</system:String>
|
||||||
<system:String x:Key="portableModeToolTIp">將所有設定和使用者資料存儲在一個資料夾中(當與可移動磁碟或雲服務一起使用時很有用)。</system:String>
|
<system:String x:Key="portableModeToolTIp">將所有設定和使用者資料存儲在一個資料夾中(當與可移動磁碟或雲服務一起使用時很有用)。</system:String>
|
||||||
<system:String x:Key="startFlowLauncherOnSystemStartup">開機時啟動</system:String>
|
<system:String x:Key="startFlowLauncherOnSystemStartup">開機時啟動</system:String>
|
||||||
<system:String x:Key="useLogonTaskForStartup">Use logon task instead of startup entry for faster startup experience</system:String>
|
<system:String x:Key="useLogonTaskForStartup">使用登入工作取代啟動項目,以加快啟動體驗</system:String>
|
||||||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
<system:String x:Key="useLogonTaskForStartupTooltip">解除安裝後,您需要透過工作排程程式手動移除此工作(Flow.Launcher Startup)</system:String>
|
||||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
<system:String x:Key="setAutoStartFailed">設定開機啟動時發生錯誤</system:String>
|
||||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">失去焦點時自動隱藏 Flow Launcher</system:String>
|
<system:String x:Key="hideFlowLauncherWhenLoseFocus">失去焦點時自動隱藏 Flow Launcher</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpened">當 Flow Launcher 開啟時顯示工作列</system:String>
|
||||||
|
<system:String x:Key="showTaskbarWhenOpenedToolTip">當開啟 Flow Launcher 時暫時顯示工作列,對自動隱藏的工作列很有用。</system:String>
|
||||||
<system:String x:Key="dontPromptUpdateMsg">不顯示新版本提示</system:String>
|
<system:String x:Key="dontPromptUpdateMsg">不顯示新版本提示</system:String>
|
||||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
<system:String x:Key="SearchWindowPosition">搜尋視窗位置</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">記住最後位置</system:String>
|
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">記住最後位置</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenCursor">Monitor with Mouse Cursor</system:String>
|
<system:String x:Key="SearchWindowScreenCursor">帶有滑鼠游標的顯示器</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenFocus">Monitor with Focused Window</system:String>
|
<system:String x:Key="SearchWindowScreenFocus">以焦點視窗進行監視</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenPrimary">Primary Monitor</system:String>
|
<system:String x:Key="SearchWindowScreenPrimary">主顯示器</system:String>
|
||||||
<system:String x:Key="SearchWindowScreenCustom">Custom Monitor</system:String>
|
<system:String x:Key="SearchWindowScreenCustom">自訂搜尋視窗位置</system:String>
|
||||||
<system:String x:Key="SearchWindowAlign">搜尋視窗在螢幕上的位置</system:String>
|
<system:String x:Key="SearchWindowAlign">搜尋視窗在螢幕上的位置</system:String>
|
||||||
<system:String x:Key="SearchWindowAlignCenter">Center</system:String>
|
<system:String x:Key="SearchWindowAlignCenter">置中</system:String>
|
||||||
<system:String x:Key="SearchWindowAlignCenterTop">Center Top</system:String>
|
<system:String x:Key="SearchWindowAlignCenterTop">頂部置中</system:String>
|
||||||
<system:String x:Key="SearchWindowAlignLeftTop">Left Top</system:String>
|
<system:String x:Key="SearchWindowAlignLeftTop">左側置中</system:String>
|
||||||
<system:String x:Key="SearchWindowAlignRightTop">Right Top</system:String>
|
<system:String x:Key="SearchWindowAlignRightTop">右側置中</system:String>
|
||||||
<system:String x:Key="SearchWindowAlignCustom">自訂搜尋視窗位置</system:String>
|
<system:String x:Key="SearchWindowAlignCustom">自訂搜尋視窗位置</system:String>
|
||||||
<system:String x:Key="language">語言</system:String>
|
<system:String x:Key="language">語言</system:String>
|
||||||
<system:String x:Key="lastQueryMode">最後查詢樣式</system:String>
|
<system:String x:Key="lastQueryMode">最後查詢樣式</system:String>
|
||||||
|
|
@ -98,10 +100,10 @@
|
||||||
<system:String x:Key="LastQueryPreserved">保留上一個查詢</system:String>
|
<system:String x:Key="LastQueryPreserved">保留上一個查詢</system:String>
|
||||||
<system:String x:Key="LastQuerySelected">選擇上一個查詢</system:String>
|
<system:String x:Key="LastQuerySelected">選擇上一個查詢</system:String>
|
||||||
<system:String x:Key="LastQueryEmpty">清空上次搜尋關鍵字</system:String>
|
<system:String x:Key="LastQueryEmpty">清空上次搜尋關鍵字</system:String>
|
||||||
<system:String x:Key="LastQueryActionKeywordPreserved">Preserve Last Action Keyword</system:String>
|
<system:String x:Key="LastQueryActionKeywordPreserved">保留上次操作的關鍵字</system:String>
|
||||||
<system:String x:Key="LastQueryActionKeywordSelected">Select Last Action Keyword</system:String>
|
<system:String x:Key="LastQueryActionKeywordSelected">選擇最後操作的關鍵字</system:String>
|
||||||
<system:String x:Key="maxShowResults">最大結果顯示個數</system:String>
|
<system:String x:Key="maxShowResults">最大結果顯示個數</system:String>
|
||||||
<system:String x:Key="maxShowResultsToolTip">You can also quickly adjust this by using CTRL+Plus and CTRL+Minus.</system:String>
|
<system:String x:Key="maxShowResultsToolTip">您也可以使用「CTRL+加號」和「CTRL+減號」快速調整此設定。</system:String>
|
||||||
<system:String x:Key="ignoreHotkeysOnFullscreen">全螢幕模式下忽略快捷鍵</system:String>
|
<system:String x:Key="ignoreHotkeysOnFullscreen">全螢幕模式下忽略快捷鍵</system:String>
|
||||||
<system:String x:Key="ignoreHotkeysOnFullscreenToolTip">全螢幕模式下停用快捷鍵(推薦用於遊戲時)。</system:String>
|
<system:String x:Key="ignoreHotkeysOnFullscreenToolTip">全螢幕模式下停用快捷鍵(推薦用於遊戲時)。</system:String>
|
||||||
<system:String x:Key="defaultFileManager">預設檔案管理器</system:String>
|
<system:String x:Key="defaultFileManager">預設檔案管理器</system:String>
|
||||||
|
|
@ -109,28 +111,28 @@
|
||||||
<system:String x:Key="defaultBrowser">預設瀏覽器</system:String>
|
<system:String x:Key="defaultBrowser">預設瀏覽器</system:String>
|
||||||
<system:String x:Key="defaultBrowserToolTip">設定新增分頁、視窗和無痕模式。</system:String>
|
<system:String x:Key="defaultBrowserToolTip">設定新增分頁、視窗和無痕模式。</system:String>
|
||||||
<system:String x:Key="pythonFilePath">Python 位置</system:String>
|
<system:String x:Key="pythonFilePath">Python 位置</system:String>
|
||||||
<system:String x:Key="nodeFilePath">Node.js Path</system:String>
|
<system:String x:Key="nodeFilePath">Node.js的路徑</system:String>
|
||||||
<system:String x:Key="selectNodeExecutable">Please select the Node.js executable</system:String>
|
<system:String x:Key="selectNodeExecutable">請選擇Node.js的可執行檔</system:String>
|
||||||
<system:String x:Key="selectPythonExecutable">請選擇 pythonw.exe</system:String>
|
<system:String x:Key="selectPythonExecutable">請選擇 pythonw.exe</system:String>
|
||||||
<system:String x:Key="typingStartEn">一律以英文模式開始輸入</system:String>
|
<system:String x:Key="typingStartEn">一律以英文模式開始輸入</system:String>
|
||||||
<system:String x:Key="typingStartEnTooltip">啟動 Flow 時暫時將輸入法切換為英文模式。</system:String>
|
<system:String x:Key="typingStartEnTooltip">啟動 Flow 時暫時將輸入法切換為英文模式。</system:String>
|
||||||
<system:String x:Key="autoUpdates">自動更新</system:String>
|
<system:String x:Key="autoUpdates">自動更新</system:String>
|
||||||
<system:String x:Key="autoUpdatesTooltip">Automatically check and update the app when available</system:String>
|
<system:String x:Key="autoUpdatesTooltip">在可用時自動檢查並更新應用程式</system:String>
|
||||||
<system:String x:Key="select">選擇</system:String>
|
<system:String x:Key="select">選擇</system:String>
|
||||||
<system:String x:Key="hideOnStartup">啟動時不顯示主視窗</system:String>
|
<system:String x:Key="hideOnStartup">啟動時不顯示主視窗</system:String>
|
||||||
<system:String x:Key="hideOnStartupToolTip">Flow Launcher search window is hidden in the tray after starting up.</system:String>
|
<system:String x:Key="hideOnStartupToolTip">啟動後,Flow Launcher搜尋視窗會隱藏在系統匣中。</system:String>
|
||||||
<system:String x:Key="hideNotifyIcon">隱藏任務欄圖示</system:String>
|
<system:String x:Key="hideNotifyIcon">隱藏任務欄圖示</system:String>
|
||||||
<system:String x:Key="hideNotifyIconToolTip">當圖示從系統列隱藏時,可以透過在搜尋視窗上按右鍵來開啟設定選單。</system:String>
|
<system:String x:Key="hideNotifyIconToolTip">當圖示從系統列隱藏時,可以透過在搜尋視窗上按右鍵來開啟設定選單。</system:String>
|
||||||
<system:String x:Key="querySearchPrecision">查詢搜尋精確度</system:String>
|
<system:String x:Key="querySearchPrecision">查詢搜尋精確度</system:String>
|
||||||
<system:String x:Key="querySearchPrecisionToolTip">更改結果所需的最低匹配分數。</system:String>
|
<system:String x:Key="querySearchPrecisionToolTip">更改結果所需的最低匹配分數。</system:String>
|
||||||
<system:String x:Key="SearchPrecisionNone">None</system:String>
|
<system:String x:Key="SearchPrecisionNone">無</system:String>
|
||||||
<system:String x:Key="SearchPrecisionLow">Low</system:String>
|
<system:String x:Key="SearchPrecisionLow">低</system:String>
|
||||||
<system:String x:Key="SearchPrecisionRegular">Regular</system:String>
|
<system:String x:Key="SearchPrecisionRegular">一般</system:String>
|
||||||
<system:String x:Key="ShouldUsePinyin">拼音搜尋</system:String>
|
<system:String x:Key="ShouldUsePinyin">拼音搜尋</system:String>
|
||||||
<system:String x:Key="ShouldUsePinyinToolTip">Pinyin is the standard system of romanized spelling for translating Chinese. Please note, enabling this can significantly increase memory usage during search.</system:String>
|
<system:String x:Key="ShouldUsePinyinToolTip">拼音是中文翻譯的標準羅馬化拼字系統。請注意,啟用此功能可能會顯著增加搜尋時的記憶體使用量。</system:String>
|
||||||
<system:String x:Key="ShouldUseDoublePinyin">Use Double Pinyin</system:String>
|
<system:String x:Key="ShouldUseDoublePinyin">啟用雙拼模式</system:String>
|
||||||
<system:String x:Key="ShouldUseDoublePinyinToolTip">Use Double Pinyin instead of Full Pinyin to search.</system:String>
|
<system:String x:Key="ShouldUseDoublePinyinToolTip">請使用雙拼以搜尋,而不是全拼搜尋。</system:String>
|
||||||
<system:String x:Key="DoublePinyinSchema">Double Pinyin Schema</system:String>
|
<system:String x:Key="DoublePinyinSchema">雙拼結構</system:String>
|
||||||
<system:String x:Key="DoublePinyinSchemasXiaoHe">Xiao He</system:String>
|
<system:String x:Key="DoublePinyinSchemasXiaoHe">Xiao He</system:String>
|
||||||
<system:String x:Key="DoublePinyinSchemasZiRanMa">Zi Ran Ma</system:String>
|
<system:String x:Key="DoublePinyinSchemasZiRanMa">Zi Ran Ma</system:String>
|
||||||
<system:String x:Key="DoublePinyinSchemasWeiRuan">Wei Ruan</system:String>
|
<system:String x:Key="DoublePinyinSchemasWeiRuan">Wei Ruan</system:String>
|
||||||
|
|
@ -143,12 +145,12 @@
|
||||||
|
|
||||||
<system:String x:Key="AlwaysPreview">一律預覽</system:String>
|
<system:String x:Key="AlwaysPreview">一律預覽</system:String>
|
||||||
<system:String x:Key="AlwaysPreviewToolTip">當 Flow 啟動時,一律開啟預覽面板。按下 {0} 可切換預覽。</system:String>
|
<system:String x:Key="AlwaysPreviewToolTip">當 Flow 啟動時,一律開啟預覽面板。按下 {0} 可切換預覽。</system:String>
|
||||||
<system:String x:Key="shadowEffectNotAllowed">Shadow effect is not allowed while current theme has blur effect enabled</system:String>
|
<system:String x:Key="shadowEffectNotAllowed">當目前主題啟用模糊效果時,將不允許使用陰影效果</system:String>
|
||||||
<system:String x:Key="searchDelay">Search Delay</system:String>
|
<system:String x:Key="searchDelay">延遲搜尋</system:String>
|
||||||
<system:String x:Key="searchDelayToolTip">Adds a short delay while typing to reduce UI flicker and result load. Recommended if your typing speed is average.</system:String>
|
<system:String x:Key="searchDelayToolTip">在輸入時增加短暫延遲,以減少介面閃爍和結果載入時間。建議打字速度中等的使用者使用。</system:String>
|
||||||
<system:String x:Key="searchDelayNumberBoxToolTip">Enter the wait time (in ms) until input is considered complete. This can only be edited if Search Delay is enabled.</system:String>
|
<system:String x:Key="searchDelayNumberBoxToolTip">輸入等待時間(以毫秒為單位),直到認為輸入完成為止。僅當啟用“搜尋延遲”時才能編輯此設定。</system:String>
|
||||||
<system:String x:Key="searchDelayTime">Default Search Delay Time</system:String>
|
<system:String x:Key="searchDelayTime">預設搜尋延遲時間</system:String>
|
||||||
<system:String x:Key="searchDelayTimeToolTip">Wait time before showing results after typing stops. Higher values wait longer. (ms)</system:String>
|
<system:String x:Key="searchDelayTimeToolTip">輸入停止後顯示結果前的等待時間。數值越高,等待時間越長。 (以毫秒為單位)</system:String>
|
||||||
<system:String x:Key="KoreanImeTitle">Information for Korean IME user</system:String>
|
<system:String x:Key="KoreanImeTitle">Information for Korean IME user</system:String>
|
||||||
<system:String x:Key="KoreanImeGuide">
|
<system:String x:Key="KoreanImeGuide">
|
||||||
The Korean input method used in Windows 11 may cause some issues in Flow Launcher.
|
The Korean input method used in Windows 11 may cause some issues in Flow Launcher.
|
||||||
|
|
@ -164,17 +166,17 @@
|
||||||
|
|
||||||
|
|
||||||
</system:String>
|
</system:String>
|
||||||
<system:String x:Key="KoreanImeOpenLink">Open Language and Region System Settings</system:String>
|
<system:String x:Key="KoreanImeOpenLink">開啟語言和區域設定</system:String>
|
||||||
<system:String x:Key="KoreanImeOpenLinkToolTip">Opens the Korean IME setting location. Go to Korean > Language Options > Keyboard - Microsoft IME > Compatibility</system:String>
|
<system:String x:Key="KoreanImeOpenLinkToolTip">開啟韓語輸入法設定。前往“韓語”>“語言選項”>“鍵盤 - Microsoft 輸入法”>“相容性”。</system:String>
|
||||||
<system:String x:Key="KoreanImeOpenLinkButton">開啟</system:String>
|
<system:String x:Key="KoreanImeOpenLinkButton">開啟</system:String>
|
||||||
<system:String x:Key="KoreanImeRegistry">Use Previous Korean IME</system:String>
|
<system:String x:Key="KoreanImeRegistry">使用舊版韓語輸入法</system:String>
|
||||||
<system:String x:Key="KoreanImeRegistryTooltip">You can change the Previous Korean IME settings directly from here</system:String>
|
<system:String x:Key="KoreanImeRegistryTooltip">您可以直接從這裡更改先前的韓語輸入法設定</system:String>
|
||||||
<system:String x:Key="KoreanImeSettingChangeFailTitle">Failed to change Korean IME setting</system:String>
|
<system:String x:Key="KoreanImeSettingChangeFailTitle">更改韓語輸入法設定失敗</system:String>
|
||||||
<system:String x:Key="KoreanImeSettingChangeFailSubTitle">Please check your system registry access or contact support.</system:String>
|
<system:String x:Key="KoreanImeSettingChangeFailSubTitle">請檢查您的系統註冊表存取權限或尋求協助。</system:String>
|
||||||
<system:String x:Key="homePage">Home Page</system:String>
|
<system:String x:Key="homePage">首頁</system:String>
|
||||||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
<system:String x:Key="homePageToolTip">當查詢文字為空時,顯示首頁結果。</system:String>
|
||||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
<system:String x:Key="historyResultsForHomePage">在首頁顯示歷史記錄</system:String>
|
||||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
<system:String x:Key="historyResultsCountForHomePage">首頁顯示最多歷史搜尋結果</system:String>
|
||||||
<system:String x:Key="historyStyle">History Style</system:String>
|
<system:String x:Key="historyStyle">History Style</system:String>
|
||||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||||
<system:String x:Key="queryHistory">Query history</system:String>
|
<system:String x:Key="queryHistory">Query history</system:String>
|
||||||
|
|
@ -209,8 +211,8 @@
|
||||||
<system:String x:Key="FilterComboboxLabel">Advanced Settings:</system:String>
|
<system:String x:Key="FilterComboboxLabel">Advanced Settings:</system:String>
|
||||||
<system:String x:Key="DisplayModeOnOff">已啟用</system:String>
|
<system:String x:Key="DisplayModeOnOff">已啟用</system:String>
|
||||||
<system:String x:Key="DisplayModePriority">優先</system:String>
|
<system:String x:Key="DisplayModePriority">優先</system:String>
|
||||||
<system:String x:Key="DisplayModeSearchDelay">Search Delay</system:String>
|
<system:String x:Key="DisplayModeSearchDelay">延遲搜尋</system:String>
|
||||||
<system:String x:Key="DisplayModeHomeOnOff">Home Page</system:String>
|
<system:String x:Key="DisplayModeHomeOnOff">首頁</system:String>
|
||||||
<system:String x:Key="currentPriority">目前優先</system:String>
|
<system:String x:Key="currentPriority">目前優先</system:String>
|
||||||
<system:String x:Key="newPriority">新增優先</system:String>
|
<system:String x:Key="newPriority">新增優先</system:String>
|
||||||
<system:String x:Key="priority">優先</system:String>
|
<system:String x:Key="priority">優先</system:String>
|
||||||
|
|
@ -263,21 +265,21 @@
|
||||||
<system:String x:Key="UninstallPromptTitle">Plugin uninstall</system:String>
|
<system:String x:Key="UninstallPromptTitle">Plugin uninstall</system:String>
|
||||||
<system:String x:Key="UninstallPromptSubtitle">{0} by {1} {2}{2}Would you like to uninstall this plugin?</system:String>
|
<system:String x:Key="UninstallPromptSubtitle">{0} by {1} {2}{2}Would you like to uninstall this plugin?</system:String>
|
||||||
<system:String x:Key="UpdatePromptTitle">Plugin update</system:String>
|
<system:String x:Key="UpdatePromptTitle">Plugin update</system:String>
|
||||||
<system:String x:Key="UpdatePromptSubtitle">{0} by {1} {2}{2}Would you like to update this plugin?</system:String>
|
<system:String x:Key="UpdatePromptSubtitle">您想更新{0} (由 {1} {2}{2} 製作)嗎?</system:String>
|
||||||
<system:String x:Key="DownloadingPlugin">正在下載擴充功能</system:String>
|
<system:String x:Key="DownloadingPlugin">正在下載擴充功能</system:String>
|
||||||
<system:String x:Key="AutoRestartAfterChange">Automatically restart after installing/uninstalling/updating plugins in plugin store</system:String>
|
<system:String x:Key="AutoRestartAfterChange">在外掛商店安裝/卸載/更新插件後自動重啟</system:String>
|
||||||
<system:String x:Key="ZipFileNotHavePluginJson">Zip file does not have a valid plugin.json configuration</system:String>
|
<system:String x:Key="ZipFileNotHavePluginJson">壓縮檔中沒有有效的plugin.json配置</system:String>
|
||||||
<system:String x:Key="InstallFromUnknownSourceTitle">Installing from an unknown source</system:String>
|
<system:String x:Key="InstallFromUnknownSourceTitle">從未知來源安裝</system:String>
|
||||||
<system:String x:Key="InstallFromUnknownSourceSubtitle">This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)</system:String>
|
<system:String x:Key="InstallFromUnknownSourceSubtitle">您正在安裝來自未知來源的插件,它可能有潛在風險!{0}{0} 請確保您了解此插件的來源並確認其安全性。{0}{0} 是否繼續? {0}{0}(您可以在設定中關閉此警告)</system:String>
|
||||||
<system:String x:Key="ZipFiles">Zip files</system:String>
|
<system:String x:Key="ZipFiles">壓縮檔</system:String>
|
||||||
<system:String x:Key="SelectZipFile">Please select zip file</system:String>
|
<system:String x:Key="SelectZipFile">請選擇一個壓縮檔</system:String>
|
||||||
<system:String x:Key="installLocalPluginTooltip">Install plugin from local path</system:String>
|
<system:String x:Key="installLocalPluginTooltip">從本地路徑安裝外掛</system:String>
|
||||||
<system:String x:Key="updateNoResultTitle">無可用更新</system:String>
|
<system:String x:Key="updateNoResultTitle">無可用更新</system:String>
|
||||||
<system:String x:Key="updateNoResultSubtitle">所有插件均為最新版本</system:String>
|
<system:String x:Key="updateNoResultSubtitle">所有插件均為最新版本</system:String>
|
||||||
<system:String x:Key="updateAllPluginsTitle">Plugin updates available</system:String>
|
<system:String x:Key="updateAllPluginsTitle">有外掛更新可用</system:String>
|
||||||
<system:String x:Key="updateAllPluginsButtonContent">Update plugins</system:String>
|
<system:String x:Key="updateAllPluginsButtonContent">更新外掛程式</system:String>
|
||||||
<system:String x:Key="checkPluginUpdatesTooltip">Check plugin updates</system:String>
|
<system:String x:Key="checkPluginUpdatesTooltip">檢查外掛更新</system:String>
|
||||||
<system:String x:Key="PluginsUpdateSuccessNoRestart">Plugins are successfully updated. Please restart Flow.</system:String>
|
<system:String x:Key="PluginsUpdateSuccessNoRestart">插件已成功更新。請重新啟動Flow。</system:String>
|
||||||
|
|
||||||
<!-- Setting Theme -->
|
<!-- Setting Theme -->
|
||||||
<system:String x:Key="theme">主題</system:String>
|
<system:String x:Key="theme">主題</system:String>
|
||||||
|
|
@ -288,21 +290,21 @@
|
||||||
<system:String x:Key="SampleTitleExplorer">檔案總管</system:String>
|
<system:String x:Key="SampleTitleExplorer">檔案總管</system:String>
|
||||||
<system:String x:Key="SampleSubTitleExplorer">搜尋檔案、資料夾和檔案內容</system:String>
|
<system:String x:Key="SampleSubTitleExplorer">搜尋檔案、資料夾和檔案內容</system:String>
|
||||||
<system:String x:Key="SampleTitleWebSearch">網路搜尋</system:String>
|
<system:String x:Key="SampleTitleWebSearch">網路搜尋</system:String>
|
||||||
<system:String x:Key="SampleSubTitleWebSearch">Search the web with different search engine support</system:String>
|
<system:String x:Key="SampleSubTitleWebSearch">使用不同的搜尋引擎搜尋網絡</system:String>
|
||||||
<system:String x:Key="SampleTitleProgram">程式</system:String>
|
<system:String x:Key="SampleTitleProgram">程式</system:String>
|
||||||
<system:String x:Key="SampleSubTitleProgram">以系統管理員或其他使用者啟用應用程式</system:String>
|
<system:String x:Key="SampleSubTitleProgram">以系統管理員或其他使用者啟用應用程式</system:String>
|
||||||
<system:String x:Key="SampleTitleProcessKiller">ProcessKiller</system:String>
|
<system:String x:Key="SampleTitleProcessKiller">ProcessKiller</system:String>
|
||||||
<system:String x:Key="SampleSubTitleProcessKiller">Terminate unwanted processes</system:String>
|
<system:String x:Key="SampleSubTitleProcessKiller">終止不需要的進程</system:String>
|
||||||
<system:String x:Key="SearchBarHeight">Search Bar Height</system:String>
|
<system:String x:Key="SearchBarHeight">搜尋列高度</system:String>
|
||||||
<system:String x:Key="ItemHeight">Item Height</system:String>
|
<system:String x:Key="ItemHeight">項目高度</system:String>
|
||||||
<system:String x:Key="queryBoxFont">查詢框字體</system:String>
|
<system:String x:Key="queryBoxFont">查詢框字體</system:String>
|
||||||
<system:String x:Key="resultItemFont">Result Title Font</system:String>
|
<system:String x:Key="resultItemFont">結果標題字體</system:String>
|
||||||
<system:String x:Key="resultSubItemFont">Result Subtitle Font</system:String>
|
<system:String x:Key="resultSubItemFont">結果副標題字體</system:String>
|
||||||
<system:String x:Key="resetCustomize">Reset</system:String>
|
<system:String x:Key="resetCustomize">重設</system:String>
|
||||||
<system:String x:Key="resetCustomizeToolTip">Reset to the recommended font and size settings.</system:String>
|
<system:String x:Key="resetCustomizeToolTip">恢復預設字體與文字大小設定。</system:String>
|
||||||
<system:String x:Key="ImportThemeSize">Import Theme Size</system:String>
|
<system:String x:Key="ImportThemeSize">匯入主題大小</system:String>
|
||||||
<system:String x:Key="ImportThemeSizeToolTip">If a size value intended by the theme designer is available, it will be retrieved and applied.</system:String>
|
<system:String x:Key="ImportThemeSizeToolTip">如果主題設計者預設的尺寸值存在,則會擷取並套用該尺寸值。</system:String>
|
||||||
<system:String x:Key="CustomizeToolTip">Customize</system:String>
|
<system:String x:Key="CustomizeToolTip">個人化</system:String>
|
||||||
<system:String x:Key="windowMode">視窗模式</system:String>
|
<system:String x:Key="windowMode">視窗模式</system:String>
|
||||||
<system:String x:Key="opacity">透明度</system:String>
|
<system:String x:Key="opacity">透明度</system:String>
|
||||||
<system:String x:Key="theme_load_failure_path_not_exists">找不到主題 {0} ,將回到預設主題</system:String>
|
<system:String x:Key="theme_load_failure_path_not_exists">找不到主題 {0} ,將回到預設主題</system:String>
|
||||||
|
|
@ -315,49 +317,49 @@
|
||||||
<system:String x:Key="ColorSchemeDark">暗色系</system:String>
|
<system:String x:Key="ColorSchemeDark">暗色系</system:String>
|
||||||
<system:String x:Key="SoundEffect">音效</system:String>
|
<system:String x:Key="SoundEffect">音效</system:String>
|
||||||
<system:String x:Key="SoundEffectTip">搜尋窗口打開時播放音效</system:String>
|
<system:String x:Key="SoundEffectTip">搜尋窗口打開時播放音效</system:String>
|
||||||
<system:String x:Key="SoundEffectVolume">Sound Effect Volume</system:String>
|
<system:String x:Key="SoundEffectVolume">音效音量</system:String>
|
||||||
<system:String x:Key="SoundEffectVolumeTip">Adjust the volume of the sound effect</system:String>
|
<system:String x:Key="SoundEffectVolumeTip">調整音效音量</system:String>
|
||||||
<system:String x:Key="SoundEffectWarning">Windows Media Player is unavailable and is required for Flow's volume adjustment. Please check your installation if you need to adjust volume.</system:String>
|
<system:String x:Key="SoundEffectWarning">Windows Media Player不可用,而Flow的音量調整功能需要它。如果您需要調整音量,請檢查您的安裝情況。</system:String>
|
||||||
<system:String x:Key="Animation">動畫</system:String>
|
<system:String x:Key="Animation">動畫</system:String>
|
||||||
<system:String x:Key="AnimationTip">使用介面動畫</system:String>
|
<system:String x:Key="AnimationTip">使用介面動畫</system:String>
|
||||||
<system:String x:Key="AnimationSpeed">Animation Speed</system:String>
|
<system:String x:Key="AnimationSpeed">動畫速度</system:String>
|
||||||
<system:String x:Key="AnimationSpeedTip">The speed of the UI animation</system:String>
|
<system:String x:Key="AnimationSpeedTip">UI動畫速度</system:String>
|
||||||
<system:String x:Key="AnimationSpeedSlow">Slow</system:String>
|
<system:String x:Key="AnimationSpeedSlow">慢速</system:String>
|
||||||
<system:String x:Key="AnimationSpeedMedium">Medium</system:String>
|
<system:String x:Key="AnimationSpeedMedium">中等</system:String>
|
||||||
<system:String x:Key="AnimationSpeedFast">Fast</system:String>
|
<system:String x:Key="AnimationSpeedFast">快速</system:String>
|
||||||
<system:String x:Key="AnimationSpeedCustom">Custom</system:String>
|
<system:String x:Key="AnimationSpeedCustom">自訂</system:String>
|
||||||
<system:String x:Key="Clock">時鐘</system:String>
|
<system:String x:Key="Clock">時鐘</system:String>
|
||||||
<system:String x:Key="Date">日期</system:String>
|
<system:String x:Key="Date">日期</system:String>
|
||||||
<system:String x:Key="BackdropType">Backdrop Type</system:String>
|
<system:String x:Key="BackdropType">背景類型</system:String>
|
||||||
<system:String x:Key="BackdropInfo">The backdrop effect is not applied in the preview.</system:String>
|
<system:String x:Key="BackdropInfo">預覽中未套用背景效果。</system:String>
|
||||||
<system:String x:Key="BackdropTypeDisabledToolTip">Backdrop supported starting from Windows 11 build 22000 and above</system:String>
|
<system:String x:Key="BackdropTypeDisabledToolTip">從 Windows 11 版本 22000 及更高版本開始支援背景功能</system:String>
|
||||||
<system:String x:Key="BackdropTypesNone">None</system:String>
|
<system:String x:Key="BackdropTypesNone">無</system:String>
|
||||||
<system:String x:Key="BackdropTypesAcrylic">Acrylic</system:String>
|
<system:String x:Key="BackdropTypesAcrylic">壓克力</system:String>
|
||||||
<system:String x:Key="BackdropTypesMica">Mica</system:String>
|
<system:String x:Key="BackdropTypesMica">雲母</system:String>
|
||||||
<system:String x:Key="BackdropTypesMicaAlt">Mica Alt</system:String>
|
<system:String x:Key="BackdropTypesMicaAlt">雲母(替代樣式)</system:String>
|
||||||
<system:String x:Key="TypeIsDarkToolTip">This theme supports two (light/dark) modes.</system:String>
|
<system:String x:Key="TypeIsDarkToolTip">此主題支援兩種(淺色/深色)模式。</system:String>
|
||||||
<system:String x:Key="TypeHasBlurToolTip">This theme supports Blur Transparent Background.</system:String>
|
<system:String x:Key="TypeHasBlurToolTip">此主題支援模糊透明背景。</system:String>
|
||||||
<system:String x:Key="ShowPlaceholder">Show placeholder</system:String>
|
<system:String x:Key="ShowPlaceholder">顯示佔位符</system:String>
|
||||||
<system:String x:Key="ShowPlaceholderTip">Display placeholder when query is empty</system:String>
|
<system:String x:Key="ShowPlaceholderTip">當查詢為空時顯示佔位符</system:String>
|
||||||
<system:String x:Key="PlaceholderText">Placeholder text</system:String>
|
<system:String x:Key="PlaceholderText">佔位符文字</system:String>
|
||||||
<system:String x:Key="PlaceholderTextTip">Change placeholder text. Input empty will use: {0}</system:String>
|
<system:String x:Key="PlaceholderTextTip">更改佔位符文字。輸入為空將使用{0}</system:String>
|
||||||
<system:String x:Key="KeepMaxResults">Fixed Window Size</system:String>
|
<system:String x:Key="KeepMaxResults">固定視窗大小</system:String>
|
||||||
<system:String x:Key="KeepMaxResultsToolTip">The window size is not adjustable by dragging.</system:String>
|
<system:String x:Key="KeepMaxResultsToolTip">視窗大小無法透過拖曳進行調整。</system:String>
|
||||||
<system:String x:Key="MaxShowResultsCannotWorkWithAlwaysPreview">Since Always Preview is on, maximum results shown may not take effect because preview panel requires a certain minimum height</system:String>
|
<system:String x:Key="MaxShowResultsCannotWorkWithAlwaysPreview">由於「始終預覽」已啟用,因此可能無法顯示最大效果,因為預覽面板需要一定的最小高度</system:String>
|
||||||
|
|
||||||
<!-- Setting Hotkey -->
|
<!-- Setting Hotkey -->
|
||||||
<system:String x:Key="hotkey">快捷鍵</system:String>
|
<system:String x:Key="hotkey">快捷鍵</system:String>
|
||||||
<system:String x:Key="hotkeys">快捷鍵</system:String>
|
<system:String x:Key="hotkeys">快捷鍵</system:String>
|
||||||
<system:String x:Key="flowlauncherHotkey">Open Flow Launcher</system:String>
|
<system:String x:Key="flowlauncherHotkey">開啟Flow Launcher</system:String>
|
||||||
<system:String x:Key="flowlauncherHotkeyToolTip">執行縮寫以顯示 / 隱藏 Flow Launcher。</system:String>
|
<system:String x:Key="flowlauncherHotkeyToolTip">執行縮寫以顯示 / 隱藏 Flow Launcher。</system:String>
|
||||||
<system:String x:Key="previewHotkey">Toggle Preview</system:String>
|
<system:String x:Key="previewHotkey">切換預覽</system:String>
|
||||||
<system:String x:Key="previewHotkeyToolTip">Enter shortcut to show/hide preview in search window.</system:String>
|
<system:String x:Key="previewHotkeyToolTip">Enter shortcut to show/hide preview in search window.</system:String>
|
||||||
<system:String x:Key="hotkeyPresets">Hotkey Presets</system:String>
|
<system:String x:Key="hotkeyPresets">Hotkey Presets</system:String>
|
||||||
<system:String x:Key="hotkeyPresetsToolTip">List of currently registered hotkeys</system:String>
|
<system:String x:Key="hotkeyPresetsToolTip">List of currently registered hotkeys</system:String>
|
||||||
<system:String x:Key="openResultModifiers">開放結果修飾符</system:String>
|
<system:String x:Key="openResultModifiers">開放結果修飾符</system:String>
|
||||||
<system:String x:Key="openResultModifiersToolTip">Select a modifier key to open selected result via keyboard.</system:String>
|
<system:String x:Key="openResultModifiersToolTip">選擇一個修飾鍵以透過鍵盤開啟已選擇的結果。</system:String>
|
||||||
<system:String x:Key="showOpenResultHotkey">顯示快捷鍵</system:String>
|
<system:String x:Key="showOpenResultHotkey">顯示快捷鍵</system:String>
|
||||||
<system:String x:Key="showOpenResultHotkeyToolTip">Show result selection hotkey with results.</system:String>
|
<system:String x:Key="showOpenResultHotkeyToolTip">利用結果來顯示選擇的快捷鍵結果。</system:String>
|
||||||
<system:String x:Key="autoCompleteHotkey">Auto Complete</system:String>
|
<system:String x:Key="autoCompleteHotkey">Auto Complete</system:String>
|
||||||
<system:String x:Key="autoCompleteHotkeyToolTip">Runs autocomplete for the selected items.</system:String>
|
<system:String x:Key="autoCompleteHotkeyToolTip">Runs autocomplete for the selected items.</system:String>
|
||||||
<system:String x:Key="SelectNextItemHotkey">Select Next Item</system:String>
|
<system:String x:Key="SelectNextItemHotkey">Select Next Item</system:String>
|
||||||
|
|
@ -541,7 +543,7 @@
|
||||||
<system:String x:Key="searchDelayTimeTips">Input the search delay time in ms you like to use for the plugin. Input empty if you don't want to specify any, and the plugin will use default search delay time.</system:String>
|
<system:String x:Key="searchDelayTimeTips">Input the search delay time in ms you like to use for the plugin. Input empty if you don't want to specify any, and the plugin will use default search delay time.</system:String>
|
||||||
|
|
||||||
<!-- Search Delay Settings Dialog -->
|
<!-- Search Delay Settings Dialog -->
|
||||||
<system:String x:Key="homeTitle">Home Page</system:String>
|
<system:String x:Key="homeTitle">首頁</system:String>
|
||||||
<system:String x:Key="homeTips">Enable the plugin home page state if you like to show the plugin results when query is empty.</system:String>
|
<system:String x:Key="homeTips">Enable the plugin home page state if you like to show the plugin results when query is empty.</system:String>
|
||||||
|
|
||||||
<!-- Custom Query Hotkey Dialog -->
|
<!-- Custom Query Hotkey Dialog -->
|
||||||
|
|
@ -655,12 +657,12 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
|
||||||
<!-- General Guide & Hotkey -->
|
<!-- General Guide & Hotkey -->
|
||||||
|
|
||||||
<system:String x:Key="HotkeyUpDownDesc">返回 / 快捷選單</system:String>
|
<system:String x:Key="HotkeyUpDownDesc">返回 / 快捷選單</system:String>
|
||||||
<system:String x:Key="HotkeyLeftRightDesc">Item Navigation</system:String>
|
<system:String x:Key="HotkeyLeftRightDesc">物件導覽</system:String>
|
||||||
<system:String x:Key="HotkeyShiftEnterDesc">打開選單</system:String>
|
<system:String x:Key="HotkeyShiftEnterDesc">打開選單</system:String>
|
||||||
<system:String x:Key="HotkeyCtrlEnterDesc">開啟檔案位置</system:String>
|
<system:String x:Key="HotkeyCtrlEnterDesc">開啟檔案位置</system:String>
|
||||||
<system:String x:Key="HotkeyCtrlShiftEnterDesc">Run as Admin / Open Folder in Default File Manager</system:String>
|
<system:String x:Key="HotkeyCtrlShiftEnterDesc">Run as Admin / Open Folder in Default File Manager</system:String>
|
||||||
<system:String x:Key="HotkeyCtrlHDesc">查詢歷史</system:String>
|
<system:String x:Key="HotkeyCtrlHDesc">查詢歷史</system:String>
|
||||||
<system:String x:Key="HotkeyESCDesc">Back to Result in Context Menu</system:String>
|
<system:String x:Key="HotkeyESCDesc">返回右鍵選單中的結果</system:String>
|
||||||
<system:String x:Key="HotkeyTabDesc">自動完成</system:String>
|
<system:String x:Key="HotkeyTabDesc">自動完成</system:String>
|
||||||
<system:String x:Key="HotkeyRunDesc">開啟/運行選擇項目</system:String>
|
<system:String x:Key="HotkeyRunDesc">開啟/運行選擇項目</system:String>
|
||||||
<system:String x:Key="HotkeyCtrlIDesc">開啟視窗設定</system:String>
|
<system:String x:Key="HotkeyCtrlIDesc">開啟視窗設定</system:String>
|
||||||
|
|
|
||||||
253
Flow.Launcher/Resources/Controls/CustomScrollViewerEx.cs
Normal file
253
Flow.Launcher/Resources/Controls/CustomScrollViewerEx.cs
Normal file
|
|
@ -0,0 +1,253 @@
|
||||||
|
using iNKORE.UI.WPF.Modern.Controls;
|
||||||
|
using iNKORE.UI.WPF.Modern.Controls.Helpers;
|
||||||
|
using iNKORE.UI.WPF.Modern.Controls.Primitives;
|
||||||
|
using System;
|
||||||
|
using System.Windows;
|
||||||
|
using System.Windows.Controls;
|
||||||
|
using System.Windows.Input;
|
||||||
|
|
||||||
|
namespace Flow.Launcher.Resources.Controls
|
||||||
|
{
|
||||||
|
// TODO: Use IsScrollAnimationEnabled property in future: https://github.com/iNKORE-NET/UI.WPF.Modern/pull/347
|
||||||
|
public class CustomScrollViewerEx : ScrollViewer
|
||||||
|
{
|
||||||
|
private double LastVerticalLocation = 0;
|
||||||
|
private double LastHorizontalLocation = 0;
|
||||||
|
|
||||||
|
public CustomScrollViewerEx()
|
||||||
|
{
|
||||||
|
Loaded += OnLoaded;
|
||||||
|
var valueSource = DependencyPropertyHelper.GetValueSource(this, AutoPanningMode.IsEnabledProperty).BaseValueSource;
|
||||||
|
if (valueSource == BaseValueSource.Default)
|
||||||
|
{
|
||||||
|
AutoPanningMode.SetIsEnabled(this, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Orientation
|
||||||
|
|
||||||
|
public static readonly DependencyProperty OrientationProperty =
|
||||||
|
DependencyProperty.Register(
|
||||||
|
nameof(Orientation),
|
||||||
|
typeof(Orientation),
|
||||||
|
typeof(CustomScrollViewerEx),
|
||||||
|
new PropertyMetadata(Orientation.Vertical));
|
||||||
|
|
||||||
|
public Orientation Orientation
|
||||||
|
{
|
||||||
|
get => (Orientation)GetValue(OrientationProperty);
|
||||||
|
set => SetValue(OrientationProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region AutoHideScrollBars
|
||||||
|
|
||||||
|
public static readonly DependencyProperty AutoHideScrollBarsProperty =
|
||||||
|
ScrollViewerHelper.AutoHideScrollBarsProperty
|
||||||
|
.AddOwner(
|
||||||
|
typeof(CustomScrollViewerEx),
|
||||||
|
new PropertyMetadata(true, OnAutoHideScrollBarsChanged));
|
||||||
|
|
||||||
|
public bool AutoHideScrollBars
|
||||||
|
{
|
||||||
|
get => (bool)GetValue(AutoHideScrollBarsProperty);
|
||||||
|
set => SetValue(AutoHideScrollBarsProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void OnAutoHideScrollBarsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||||
|
{
|
||||||
|
if (d is CustomScrollViewerEx sv)
|
||||||
|
{
|
||||||
|
sv.UpdateVisualState();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private void OnLoaded(object sender, RoutedEventArgs e)
|
||||||
|
{
|
||||||
|
LastVerticalLocation = VerticalOffset;
|
||||||
|
LastHorizontalLocation = HorizontalOffset;
|
||||||
|
UpdateVisualState(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override void OnInitialized(EventArgs e)
|
||||||
|
{
|
||||||
|
base.OnInitialized(e);
|
||||||
|
|
||||||
|
if (Style == null && ReadLocalValue(StyleProperty) == DependencyProperty.UnsetValue)
|
||||||
|
{
|
||||||
|
SetResourceReference(StyleProperty, typeof(ScrollViewer));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override void OnMouseWheel(MouseWheelEventArgs e)
|
||||||
|
{
|
||||||
|
var Direction = GetDirection();
|
||||||
|
ScrollViewerBehavior.SetIsAnimating(this, true);
|
||||||
|
|
||||||
|
if (Direction == Orientation.Vertical)
|
||||||
|
{
|
||||||
|
if (ScrollableHeight > 0)
|
||||||
|
{
|
||||||
|
e.Handled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var WheelChange = e.Delta * (ViewportHeight / 1.5) / ActualHeight;
|
||||||
|
var newOffset = LastVerticalLocation - WheelChange;
|
||||||
|
|
||||||
|
if (newOffset < 0)
|
||||||
|
{
|
||||||
|
newOffset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newOffset > ScrollableHeight)
|
||||||
|
{
|
||||||
|
newOffset = ScrollableHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newOffset == LastVerticalLocation)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollToVerticalOffset(LastVerticalLocation);
|
||||||
|
|
||||||
|
ScrollToValue(newOffset, Direction);
|
||||||
|
LastVerticalLocation = newOffset;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (ScrollableWidth > 0)
|
||||||
|
{
|
||||||
|
e.Handled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
var WheelChange = e.Delta * (ViewportWidth / 1.5) / ActualWidth;
|
||||||
|
var newOffset = LastHorizontalLocation - WheelChange;
|
||||||
|
|
||||||
|
if (newOffset < 0)
|
||||||
|
{
|
||||||
|
newOffset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newOffset > ScrollableWidth)
|
||||||
|
{
|
||||||
|
newOffset = ScrollableWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newOffset == LastHorizontalLocation)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollToHorizontalOffset(LastHorizontalLocation);
|
||||||
|
|
||||||
|
ScrollToValue(newOffset, Direction);
|
||||||
|
LastHorizontalLocation = newOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
protected override void OnScrollChanged(ScrollChangedEventArgs e)
|
||||||
|
{
|
||||||
|
base.OnScrollChanged(e);
|
||||||
|
if (!ScrollViewerBehavior.GetIsAnimating(this))
|
||||||
|
{
|
||||||
|
LastVerticalLocation = VerticalOffset;
|
||||||
|
LastHorizontalLocation = HorizontalOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Orientation GetDirection()
|
||||||
|
{
|
||||||
|
var isShiftDown = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift);
|
||||||
|
|
||||||
|
if (Orientation == Orientation.Horizontal)
|
||||||
|
{
|
||||||
|
return isShiftDown ? Orientation.Vertical : Orientation.Horizontal;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return isShiftDown ? Orientation.Horizontal : Orientation.Vertical;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Causes the <see cref="ScrollViewerEx"/> to load a new view into the viewport using the specified offsets and zoom factor.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="horizontalOffset">A value between 0 and <see cref="ScrollViewer.ScrollableWidth"/> that specifies the distance the content should be scrolled horizontally.</param>
|
||||||
|
/// <param name="verticalOffset">A value between 0 and <see cref="ScrollViewer.ScrollableHeight"/> that specifies the distance the content should be scrolled vertically.</param>
|
||||||
|
/// <param name="zoomFactor">A value between MinZoomFactor and MaxZoomFactor that specifies the required target ZoomFactor.</param>
|
||||||
|
/// <returns><see langword="true"/> if the view is changed; otherwise, <see langword="false"/>.</returns>
|
||||||
|
public bool ChangeView(double? horizontalOffset, double? verticalOffset, float? zoomFactor)
|
||||||
|
{
|
||||||
|
return ChangeView(horizontalOffset, verticalOffset, zoomFactor, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Causes the <see cref="ScrollViewerEx"/> to load a new view into the viewport using the specified offsets and zoom factor, and optionally disables scrolling animation.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="horizontalOffset">A value between 0 and <see cref="ScrollViewer.ScrollableWidth"/> that specifies the distance the content should be scrolled horizontally.</param>
|
||||||
|
/// <param name="verticalOffset">A value between 0 and <see cref="ScrollViewer.ScrollableHeight"/> that specifies the distance the content should be scrolled vertically.</param>
|
||||||
|
/// <param name="zoomFactor">A value between MinZoomFactor and MaxZoomFactor that specifies the required target ZoomFactor.</param>
|
||||||
|
/// <param name="disableAnimation"><see langword="true"/> to disable zoom/pan animations while changing the view; otherwise, <see langword="false"/>. The default is false.</param>
|
||||||
|
/// <returns><see langword="true"/> if the view is changed; otherwise, <see langword="false"/>.</returns>
|
||||||
|
public bool ChangeView(double? horizontalOffset, double? verticalOffset, float? zoomFactor, bool disableAnimation)
|
||||||
|
{
|
||||||
|
if (disableAnimation)
|
||||||
|
{
|
||||||
|
if (horizontalOffset.HasValue)
|
||||||
|
{
|
||||||
|
ScrollToHorizontalOffset(horizontalOffset.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verticalOffset.HasValue)
|
||||||
|
{
|
||||||
|
ScrollToVerticalOffset(verticalOffset.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (horizontalOffset.HasValue)
|
||||||
|
{
|
||||||
|
ScrollToHorizontalOffset(LastHorizontalLocation);
|
||||||
|
ScrollToValue(Math.Min(ScrollableWidth, horizontalOffset.Value), Orientation.Horizontal);
|
||||||
|
LastHorizontalLocation = horizontalOffset.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (verticalOffset.HasValue)
|
||||||
|
{
|
||||||
|
ScrollToVerticalOffset(LastVerticalLocation);
|
||||||
|
ScrollToValue(Math.Min(ScrollableHeight, verticalOffset.Value), Orientation.Vertical);
|
||||||
|
LastVerticalLocation = verticalOffset.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ScrollToValue(double value, Orientation Direction)
|
||||||
|
{
|
||||||
|
if (Direction == Orientation.Vertical)
|
||||||
|
{
|
||||||
|
ScrollToVerticalOffset(value);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ScrollToHorizontalOffset(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
ScrollViewerBehavior.SetIsAnimating(this, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateVisualState(bool useTransitions = true)
|
||||||
|
{
|
||||||
|
var stateName = AutoHideScrollBars ? "NoIndicator" : "MouseIndicator";
|
||||||
|
VisualStateManager.GoToState(this, stateName, useTransitions);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -72,6 +72,16 @@
|
||||||
OnContent="{DynamicResource enable}" />
|
OnContent="{DynamicResource enable}" />
|
||||||
</ui:SettingsCard>
|
</ui:SettingsCard>
|
||||||
|
|
||||||
|
<ui:SettingsCard
|
||||||
|
Margin="0 4 0 0"
|
||||||
|
Description="{DynamicResource showTaskbarWhenOpenedToolTip}"
|
||||||
|
Header="{DynamicResource showTaskbarWhenOpened}">
|
||||||
|
<ui:ToggleSwitch
|
||||||
|
IsOn="{Binding Settings.ShowTaskbarWhenInvoked}"
|
||||||
|
OffContent="{DynamicResource disable}"
|
||||||
|
OnContent="{DynamicResource enable}" />
|
||||||
|
</ui:SettingsCard>
|
||||||
|
|
||||||
<ui:SettingsCard
|
<ui:SettingsCard
|
||||||
Margin="0 4 0 0"
|
Margin="0 4 0 0"
|
||||||
Description="{DynamicResource hideNotifyIconToolTip}"
|
Description="{DynamicResource hideNotifyIconToolTip}"
|
||||||
|
|
|
||||||
|
|
@ -333,7 +333,7 @@
|
||||||
Margin="18 24 0 0"
|
Margin="18 24 0 0"
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
RenderOptions.BitmapScalingMode="Fant"
|
RenderOptions.BitmapScalingMode="Fant"
|
||||||
Source="{Binding IcoPath, IsAsync=True}" />
|
Source="{Binding IcoPathAbsolute, IsAsync=True}" />
|
||||||
<Border
|
<Border
|
||||||
x:Name="LabelUpdate"
|
x:Name="LabelUpdate"
|
||||||
Height="12"
|
Height="12"
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
namespace Flow.Launcher.Storage
|
namespace Flow.Launcher.Storage
|
||||||
{
|
{
|
||||||
[Obsolete("Use LastOpenedHistoryItem instead. This class will be removed in future versions.")]
|
[Obsolete("Use LastOpenedHistoryResult instead. This class will be removed in future versions.")]
|
||||||
public class HistoryItem
|
public class HistoryItem
|
||||||
{
|
{
|
||||||
public string Query { get; set; }
|
public string Query { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
||||||
using System;
|
|
||||||
using Flow.Launcher.Plugin;
|
|
||||||
|
|
||||||
namespace Flow.Launcher.Storage;
|
|
||||||
|
|
||||||
public class LastOpenedHistoryItem
|
|
||||||
{
|
|
||||||
public string Title { get; set; } = string.Empty;
|
|
||||||
public string SubTitle { get; set; } = string.Empty;
|
|
||||||
public string PluginID { get; set; } = string.Empty;
|
|
||||||
public string Query { get; set; } = string.Empty;
|
|
||||||
public string RecordKey { get; set; } = string.Empty;
|
|
||||||
public DateTime ExecutedDateTime { get; set; }
|
|
||||||
|
|
||||||
public bool Equals(Result r)
|
|
||||||
{
|
|
||||||
if (string.IsNullOrEmpty(RecordKey) || string.IsNullOrEmpty(r.RecordKey))
|
|
||||||
{
|
|
||||||
return Title == r.Title
|
|
||||||
&& SubTitle == r.SubTitle
|
|
||||||
&& PluginID == r.PluginID
|
|
||||||
&& Query == r.OriginQuery.TrimmedQuery;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return RecordKey == r.RecordKey
|
|
||||||
&& PluginID == r.PluginID
|
|
||||||
&& Query == r.OriginQuery.TrimmedQuery;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
146
Flow.Launcher/Storage/LastOpenedHistoryResult.cs
Normal file
146
Flow.Launcher/Storage/LastOpenedHistoryResult.cs
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
using System;
|
||||||
|
using Flow.Launcher.Infrastructure;
|
||||||
|
using Flow.Launcher.Plugin;
|
||||||
|
|
||||||
|
namespace Flow.Launcher.Storage;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A serializable result used to record the last opened history for reopening results.
|
||||||
|
/// Inherits common result fields from <see cref="Result"/> and adds the original query and execution time.
|
||||||
|
/// </summary>
|
||||||
|
public class LastOpenedHistoryResult : Result
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// The query string from Query.TrimmedQuery property, it is stored as a string instead of the entire Query class <see cref="Result"/>.
|
||||||
|
/// This is used so results can be reopened or re-run using the serialized query string.
|
||||||
|
/// </summary>
|
||||||
|
public string Query { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The local date and time when this result was executed/opened.
|
||||||
|
/// </summary>
|
||||||
|
public DateTime ExecutedDateTime { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of <see cref="LastOpenedHistoryResult"/>.
|
||||||
|
/// </summary>
|
||||||
|
public LastOpenedHistoryResult()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Creates a <see cref="LastOpenedHistoryResult"/> from an existing <see cref="Result"/>.
|
||||||
|
/// Copies required fields and sets up default reopening actions.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="result">The original result to create history from.</param>
|
||||||
|
public LastOpenedHistoryResult(Result result)
|
||||||
|
{
|
||||||
|
Title = result.Title;
|
||||||
|
SubTitle = result.SubTitle;
|
||||||
|
PluginID = result.PluginID;
|
||||||
|
Query = result.OriginQuery.TrimmedQuery;
|
||||||
|
OriginQuery = result.OriginQuery;
|
||||||
|
RecordKey = result.RecordKey;
|
||||||
|
IcoPath = result.IcoPath;
|
||||||
|
PluginDirectory = result.PluginDirectory;
|
||||||
|
Glyph = result.Glyph;
|
||||||
|
ExecutedDateTime = DateTime.Now;
|
||||||
|
// Used for Query History style reopening
|
||||||
|
Action = _ =>
|
||||||
|
{
|
||||||
|
App.API.BackToQueryResults();
|
||||||
|
App.API.ChangeQuery(result.OriginQuery.TrimmedQuery);
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
// Used for Last Opened History style reopening, currently need to be assigned at MainViewModel.cs
|
||||||
|
AsyncAction = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Selectively creates a deep copy of the required properties for <see cref="LastOpenedHistoryResult"/>
|
||||||
|
/// based on the style of history- Last Opened or Query.
|
||||||
|
/// This copy should be independent of original and full isolated.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>A new <see cref="LastOpenedHistoryResult"/> containing the same required data.</returns>
|
||||||
|
public LastOpenedHistoryResult DeepCopyForHistoryStyle(bool isHistoryStyleLastOpened)
|
||||||
|
{
|
||||||
|
// queryValue and glyphValue are captured to ensure they are correctly referenced in the Action delegate.
|
||||||
|
var queryValue = Query;
|
||||||
|
var glyphValue = Glyph;
|
||||||
|
|
||||||
|
var title = string.Empty;
|
||||||
|
var showBadge = false;
|
||||||
|
var badgeIcoPath = string.Empty;
|
||||||
|
var icoPath = string.Empty;
|
||||||
|
var glyph = null as GlyphInfo;
|
||||||
|
|
||||||
|
if (isHistoryStyleLastOpened)
|
||||||
|
{
|
||||||
|
title = Title;
|
||||||
|
icoPath = IcoPath;
|
||||||
|
glyph = glyphValue != null
|
||||||
|
? new GlyphInfo(glyphValue.FontFamily, glyphValue.Glyph)
|
||||||
|
: null;
|
||||||
|
showBadge = true;
|
||||||
|
badgeIcoPath = Constant.HistoryIcon;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
title = Localize.executeQuery(Query);
|
||||||
|
icoPath = Constant.HistoryIcon;
|
||||||
|
glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\uE81C");
|
||||||
|
showBadge = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new LastOpenedHistoryResult
|
||||||
|
{
|
||||||
|
Title = title,
|
||||||
|
// Subtitle has datetime which can cause duplicates when saving.
|
||||||
|
SubTitle = Localize.lastExecuteTime(ExecutedDateTime),
|
||||||
|
// Empty PluginID so the source of last opened history results won't be updated, this copy is meant to be temporary.
|
||||||
|
PluginID = string.Empty,
|
||||||
|
Query = Query,
|
||||||
|
OriginQuery = new Query { TrimmedQuery = Query },
|
||||||
|
RecordKey = RecordKey,
|
||||||
|
IcoPath = icoPath,
|
||||||
|
ShowBadge = showBadge,
|
||||||
|
BadgeIcoPath = badgeIcoPath,
|
||||||
|
PluginDirectory = PluginDirectory,
|
||||||
|
// Used for Query History style reopening
|
||||||
|
Action = _ =>
|
||||||
|
{
|
||||||
|
App.API.BackToQueryResults();
|
||||||
|
App.API.ChangeQuery(queryValue);
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
// Used for Last Opened History style reopening, currently need to be assigned at MainViewModel.cs
|
||||||
|
AsyncAction = null,
|
||||||
|
Glyph = glyph,
|
||||||
|
ExecutedDateTime = ExecutedDateTime
|
||||||
|
// Note: Other properties are left as default — copy if needed.
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Determines whether the specified <see cref="Result"/> is equivalent to this history result.
|
||||||
|
/// Comparison uses <see cref="Result.RecordKey"/> when available; otherwise falls back to title/subtitle/plugin id and query.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="r">The result to compare to.</param>
|
||||||
|
/// <returns><c>true</c> if the results are considered equal; otherwise <c>false</c>.</returns>
|
||||||
|
public bool Equals(Result r)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(RecordKey) || string.IsNullOrEmpty(r.RecordKey))
|
||||||
|
{
|
||||||
|
return Title == r.Title
|
||||||
|
&& SubTitle == r.SubTitle
|
||||||
|
&& PluginID == r.PluginID
|
||||||
|
&& Query == r.OriginQuery.TrimmedQuery;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return RecordKey == r.RecordKey
|
||||||
|
&& PluginID == r.PluginID
|
||||||
|
&& Query == r.OriginQuery.TrimmedQuery;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.Json.Serialization;
|
using System.Text.Json.Serialization;
|
||||||
|
using Flow.Launcher.Core.Plugin;
|
||||||
using Flow.Launcher.Plugin;
|
using Flow.Launcher.Plugin;
|
||||||
|
|
||||||
namespace Flow.Launcher.Storage
|
namespace Flow.Launcher.Storage
|
||||||
|
|
@ -14,28 +15,50 @@ namespace Flow.Launcher.Storage
|
||||||
#pragma warning restore CS0618 // Type or member is obsolete
|
#pragma warning restore CS0618 // Type or member is obsolete
|
||||||
|
|
||||||
[JsonInclude]
|
[JsonInclude]
|
||||||
public List<LastOpenedHistoryItem> LastOpenedHistoryItems { get; private set; } = [];
|
public List<LastOpenedHistoryResult> LastOpenedHistoryItems { get; private set; } = [];
|
||||||
|
|
||||||
private readonly int _maxHistory = 300;
|
private readonly int _maxHistory = 300;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Migrate legacy history data (stored in <see cref="Items"/>) into the new
|
||||||
|
/// <see cref="LastOpenedHistoryResult"/> format and append them to
|
||||||
|
/// <see cref="LastOpenedHistoryItems"/>.
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete("For backwards compatibility. Remove after release v2.3.0")]
|
||||||
public void PopulateHistoryFromLegacyHistory()
|
public void PopulateHistoryFromLegacyHistory()
|
||||||
{
|
{
|
||||||
if (Items.Count == 0) return;
|
if (Items.Count == 0) return;
|
||||||
// Migrate old history items to new LastOpenedHistoryItems
|
// Migrate old history items to new LastOpenedHistoryItems
|
||||||
foreach (var item in Items)
|
foreach (var item in Items)
|
||||||
{
|
{
|
||||||
LastOpenedHistoryItems.Add(new LastOpenedHistoryItem
|
LastOpenedHistoryItems.Add(new LastOpenedHistoryResult
|
||||||
{
|
{
|
||||||
|
Title = Localize.executeQuery(item.Query),
|
||||||
|
OriginQuery = new Query { TrimmedQuery = item.Query },
|
||||||
Query = item.Query,
|
Query = item.Query,
|
||||||
|
Action = _ =>
|
||||||
|
{
|
||||||
|
App.API.BackToQueryResults();
|
||||||
|
App.API.ChangeQuery(item.Query);
|
||||||
|
return false;
|
||||||
|
},
|
||||||
ExecutedDateTime = item.ExecutedDateTime
|
ExecutedDateTime = item.ExecutedDateTime
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Items.Clear();
|
Items.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Records a result into the last-opened history list (<see cref="LastOpenedHistoryItems"/>).
|
||||||
|
/// This will also update the IcoPath if existing history item has one that is different.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="result">The result to add to history. Must have a non-empty <see cref="Result.OriginQuery"/>.<see cref="Query.TrimmedQuery"/>.</param>
|
||||||
public void Add(Result result)
|
public void Add(Result result)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(result.OriginQuery.TrimmedQuery)) return;
|
if (string.IsNullOrEmpty(result.OriginQuery.TrimmedQuery)) return;
|
||||||
|
// History results triggered from homepage do not contain PluginID,
|
||||||
|
// these are intentionally not saved otherwise cause duplicates due to subtitle
|
||||||
|
// containing datetime string.
|
||||||
if (string.IsNullOrEmpty(result.PluginID)) return;
|
if (string.IsNullOrEmpty(result.PluginID)) return;
|
||||||
|
|
||||||
// Maintain the max history limit
|
// Maintain the max history limit
|
||||||
|
|
@ -44,23 +67,53 @@ namespace Flow.Launcher.Storage
|
||||||
LastOpenedHistoryItems.RemoveAt(0);
|
LastOpenedHistoryItems.RemoveAt(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the last item is the same as the current result, just update the timestamp
|
// If the last item is the same as the current result, just update the timestamp and the icon path
|
||||||
if (LastOpenedHistoryItems.Count > 0 &&
|
if (LastOpenedHistoryItems.Count > 0 &&
|
||||||
LastOpenedHistoryItems.Last().Equals(result))
|
TryGetLastOpenedHistoryResult(result, out var existingHistoryItem))
|
||||||
{
|
{
|
||||||
LastOpenedHistoryItems.Last().ExecutedDateTime = DateTime.Now;
|
existingHistoryItem.ExecutedDateTime = DateTime.Now;
|
||||||
|
|
||||||
|
if (existingHistoryItem.IcoPath != result.IcoPath)
|
||||||
|
existingHistoryItem.IcoPath = result.IcoPath;
|
||||||
|
|
||||||
|
if (existingHistoryItem.Glyph?.Glyph != result.Glyph?.Glyph
|
||||||
|
|| existingHistoryItem.Glyph?.FontFamily != result.Glyph?.FontFamily)
|
||||||
|
existingHistoryItem.SetGlyph(result.Glyph);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
LastOpenedHistoryItems.Add(new LastOpenedHistoryItem
|
LastOpenedHistoryItems.Add(new LastOpenedHistoryResult(result));
|
||||||
{
|
}
|
||||||
Title = result.Title,
|
}
|
||||||
SubTitle = result.SubTitle,
|
|
||||||
PluginID = result.PluginID,
|
/// <summary>
|
||||||
Query = result.OriginQuery.TrimmedQuery,
|
/// Attempts to find an existing <see cref="LastOpenedHistoryResult"/> in <see cref="LastOpenedHistoryItems"/>
|
||||||
RecordKey = result.RecordKey,
|
/// that is considered equal to the supplied <paramref name="result"/>.
|
||||||
ExecutedDateTime = DateTime.Now
|
/// </summary>
|
||||||
});
|
private bool TryGetLastOpenedHistoryResult(Result result, out LastOpenedHistoryResult historyItem)
|
||||||
|
{
|
||||||
|
historyItem = LastOpenedHistoryItems.FirstOrDefault(x => x.Equals(result));
|
||||||
|
return historyItem is not null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Flow uses IcoPathAbsolute property to display result the icons. This refreshes the IcoPathAbsolute
|
||||||
|
/// property using current plugin metadata by updating the PluginDirectory property, which in turn also
|
||||||
|
/// updates IcoPath. This keeps the saved icon paths of results updated correctly if flow is moved around.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks> Call this after plugins are loaded/initialized.</remarks>
|
||||||
|
public void UpdateIcoPathAbsolute()
|
||||||
|
{
|
||||||
|
if (LastOpenedHistoryItems.Count == 0) return;
|
||||||
|
|
||||||
|
foreach (var item in LastOpenedHistoryItems)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(item.PluginID)) continue;
|
||||||
|
|
||||||
|
var pluginPair = PluginManager.GetPluginForId(item.PluginID);
|
||||||
|
if (pluginPair == null) continue;
|
||||||
|
|
||||||
|
item.PluginDirectory = pluginPair.Metadata.PluginDirectory;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -252,14 +252,12 @@
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<Setter.Value>
|
<Setter.Value>
|
||||||
<ControlTemplate TargetType="ListBox">
|
<ControlTemplate TargetType="ListBox">
|
||||||
<ui:ScrollViewerEx
|
<cc:CustomScrollViewerEx
|
||||||
x:Name="ListBoxScrollViewer"
|
x:Name="ListBoxScrollViewer"
|
||||||
Focusable="False"
|
Focusable="False"
|
||||||
IsScrollAnimationEnabled="False"
|
|
||||||
RewriteWheelChange="True"
|
|
||||||
Template="{DynamicResource ScrollViewerControlTemplate}">
|
Template="{DynamicResource ScrollViewerControlTemplate}">
|
||||||
<ui:ScrollViewerEx.Style>
|
<cc:CustomScrollViewerEx.Style>
|
||||||
<Style TargetType="ui:ScrollViewerEx">
|
<Style TargetType="cc:CustomScrollViewerEx">
|
||||||
<Style.Triggers>
|
<Style.Triggers>
|
||||||
<Trigger Property="ComputedVerticalScrollBarVisibility" Value="Visible">
|
<Trigger Property="ComputedVerticalScrollBarVisibility" Value="Visible">
|
||||||
<Setter Property="Margin" Value="0 0 0 0" />
|
<Setter Property="Margin" Value="0 0 0 0" />
|
||||||
|
|
@ -271,9 +269,9 @@
|
||||||
</Trigger>
|
</Trigger>
|
||||||
</Style.Triggers>
|
</Style.Triggers>
|
||||||
</Style>
|
</Style>
|
||||||
</ui:ScrollViewerEx.Style>
|
</cc:CustomScrollViewerEx.Style>
|
||||||
<VirtualizingStackPanel IsItemsHost="True" />
|
<VirtualizingStackPanel IsItemsHost="True" />
|
||||||
</ui:ScrollViewerEx>
|
</cc:CustomScrollViewerEx>
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter.Value>
|
</Setter.Value>
|
||||||
</Setter>
|
</Setter>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel;
|
using System.ComponentModel;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
|
|
@ -37,16 +38,16 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
private Query _lastQuery;
|
private Query _lastQuery;
|
||||||
private bool _previousIsHomeQuery;
|
private bool _previousIsHomeQuery;
|
||||||
private Query _progressQuery; // Used for QueryResultAsync
|
private readonly ConcurrentDictionary<Guid, Query> _progressQueryDict = new(); // Used for QueryResultAsync
|
||||||
private Query _updateQuery; // Used for ResultsUpdated
|
private Query _updateQuery; // Used for ResultsUpdated
|
||||||
private string _queryTextBeforeLeaveResults;
|
private string _queryTextBeforeLeaveResults;
|
||||||
private string _ignoredQueryText; // Used to ignore query text change when switching between context menu and query results
|
private string _ignoredQueryText; // Used to ignore query text change when switching between context menu and query results
|
||||||
|
|
||||||
private readonly FlowLauncherJsonStorage<History> _historyItemsStorage;
|
private readonly FlowLauncherJsonStorage<History> _historyItemsStorage;
|
||||||
private readonly FlowLauncherJsonStorage<UserSelectedRecord> _userSelectedRecordStorage;
|
|
||||||
private readonly FlowLauncherJsonStorageTopMostRecord _topMostRecord;
|
|
||||||
private readonly History _history;
|
private readonly History _history;
|
||||||
private int lastHistoryIndex = 1;
|
private int lastHistoryIndex = 1;
|
||||||
|
private readonly FlowLauncherJsonStorage<UserSelectedRecord> _userSelectedRecordStorage;
|
||||||
|
private readonly FlowLauncherJsonStorageTopMostRecord _topMostRecord;
|
||||||
private readonly UserSelectedRecord _userSelectedRecord;
|
private readonly UserSelectedRecord _userSelectedRecord;
|
||||||
|
|
||||||
private CancellationTokenSource _updateSource; // Used to cancel old query flows
|
private CancellationTokenSource _updateSource; // Used to cancel old query flows
|
||||||
|
|
@ -64,6 +65,8 @@ namespace Flow.Launcher.ViewModel
|
||||||
Priority = 0 // Priority is for calculating scores in UpdateResultView
|
Priority = 0 // Priority is for calculating scores in UpdateResultView
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private bool _taskbarShownByFlow = false;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructor
|
#region Constructor
|
||||||
|
|
@ -150,11 +153,10 @@ namespace Flow.Launcher.ViewModel
|
||||||
};
|
};
|
||||||
|
|
||||||
_historyItemsStorage = new FlowLauncherJsonStorage<History>();
|
_historyItemsStorage = new FlowLauncherJsonStorage<History>();
|
||||||
_userSelectedRecordStorage = new FlowLauncherJsonStorage<UserSelectedRecord>();
|
|
||||||
_topMostRecord = new FlowLauncherJsonStorageTopMostRecord();
|
|
||||||
_history = _historyItemsStorage.Load();
|
_history = _historyItemsStorage.Load();
|
||||||
_history.PopulateHistoryFromLegacyHistory();
|
_userSelectedRecordStorage = new FlowLauncherJsonStorage<UserSelectedRecord>();
|
||||||
_userSelectedRecord = _userSelectedRecordStorage.Load();
|
_userSelectedRecord = _userSelectedRecordStorage.Load();
|
||||||
|
_topMostRecord = new FlowLauncherJsonStorageTopMostRecord();
|
||||||
|
|
||||||
ContextMenu = new ResultsViewModel(Settings, this)
|
ContextMenu = new ResultsViewModel(Settings, this)
|
||||||
{
|
{
|
||||||
|
|
@ -353,11 +355,17 @@ namespace Flow.Launcher.ViewModel
|
||||||
if (QueryResultsSelected())
|
if (QueryResultsSelected())
|
||||||
{
|
{
|
||||||
SelectedResults = History;
|
SelectedResults = History;
|
||||||
History.SelectedIndex = _history.LastOpenedHistoryItems.Count - 1;
|
if (History.Results.Count > 0)
|
||||||
|
{
|
||||||
|
SelectedResults.SelectedIndex = 0;
|
||||||
|
SelectedResults.SelectedItem = History.Results[0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SelectedResults = Results;
|
SelectedResults = Results;
|
||||||
|
PreviewSelectedItem = Results.SelectedItem;
|
||||||
|
_ = UpdatePreviewAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -429,7 +437,8 @@ namespace Flow.Launcher.ViewModel
|
||||||
{
|
{
|
||||||
// When switch to ContextMenu from QueryResults, but no item being chosen, should do nothing
|
// When switch to ContextMenu from QueryResults, but no item being chosen, should do nothing
|
||||||
// i.e. Shift+Enter/Ctrl+O right after Alt + Space should do nothing
|
// i.e. Shift+Enter/Ctrl+O right after Alt + Space should do nothing
|
||||||
if (SelectedResults.SelectedItem != null)
|
if (SelectedResults.SelectedItem?.Result != null &&
|
||||||
|
!string.IsNullOrEmpty(SelectedResults.SelectedItem.Result.PluginID)) // Do not show context menu for history results
|
||||||
{
|
{
|
||||||
SelectedResults = ContextMenu;
|
SelectedResults = ContextMenu;
|
||||||
}
|
}
|
||||||
|
|
@ -437,6 +446,8 @@ namespace Flow.Launcher.ViewModel
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SelectedResults = Results;
|
SelectedResults = Results;
|
||||||
|
PreviewSelectedItem = Results.SelectedItem;
|
||||||
|
_ = UpdatePreviewAsync();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -640,6 +651,8 @@ namespace Flow.Launcher.ViewModel
|
||||||
if (!QueryResultsSelected())
|
if (!QueryResultsSelected())
|
||||||
{
|
{
|
||||||
SelectedResults = Results;
|
SelectedResults = Results;
|
||||||
|
PreviewSelectedItem = Results.SelectedItem;
|
||||||
|
_ = UpdatePreviewAsync();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -1250,22 +1263,12 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
var selected = Results.SelectedItem?.Result;
|
var selected = Results.SelectedItem?.Result;
|
||||||
|
|
||||||
if (selected != null) // SelectedItem returns null if selection is empty.
|
if (selected != null && // SelectedItem returns null if selection is empty.
|
||||||
|
!string.IsNullOrEmpty(selected.PluginID)) // SelectedItem must have a valid PluginID, history results do not.
|
||||||
{
|
{
|
||||||
List<Result> results;
|
List<Result> results = PluginManager.GetContextMenusForPlugin(selected);
|
||||||
if (selected.PluginID == null) // SelectedItem from history in home page.
|
results.Add(ContextMenuTopMost(selected));
|
||||||
{
|
results.Add(ContextMenuPluginInfo(selected));
|
||||||
results = new()
|
|
||||||
{
|
|
||||||
ContextMenuTopMost(selected)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
results = PluginManager.GetContextMenusForPlugin(selected);
|
|
||||||
results.Add(ContextMenuTopMost(selected));
|
|
||||||
results.Add(ContextMenuPluginInfo(selected));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(query))
|
if (!string.IsNullOrEmpty(query))
|
||||||
{
|
{
|
||||||
|
|
@ -1316,68 +1319,77 @@ namespace Flow.Launcher.ViewModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Result> GetHistoryItems(IEnumerable<LastOpenedHistoryItem> historyItems)
|
private List<Result> GetHistoryItems(IEnumerable<LastOpenedHistoryResult> historyItems, int? maxResult = null)
|
||||||
{
|
{
|
||||||
var results = new List<Result>();
|
var results = new List<Result>();
|
||||||
if (Settings.HistoryStyle == HistoryStyle.Query)
|
|
||||||
{
|
|
||||||
foreach (var h in historyItems)
|
|
||||||
{
|
|
||||||
var result = new Result
|
|
||||||
{
|
|
||||||
Title = Localize.executeQuery(h.Query),
|
|
||||||
SubTitle = Localize.lastExecuteTime(h.ExecutedDateTime),
|
|
||||||
IcoPath = Constant.HistoryIcon,
|
|
||||||
OriginQuery = new Query { TrimmedQuery = h.Query },
|
|
||||||
Action = _ =>
|
|
||||||
{
|
|
||||||
App.API.BackToQueryResults();
|
|
||||||
App.API.ChangeQuery(h.Query);
|
|
||||||
return false;
|
|
||||||
},
|
|
||||||
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\uE81C")
|
|
||||||
};
|
|
||||||
results.Add(result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
foreach (var h in historyItems)
|
|
||||||
{
|
|
||||||
var result = new Result
|
|
||||||
{
|
|
||||||
Title = string.IsNullOrEmpty(h.Title) ? // Old migrated history items have no title
|
|
||||||
Localize.executeQuery(h.Query) :
|
|
||||||
h.Title,
|
|
||||||
SubTitle = Localize.lastExecuteTime(h.ExecutedDateTime),
|
|
||||||
IcoPath = Constant.HistoryIcon,
|
|
||||||
OriginQuery = new Query { TrimmedQuery = h.Query },
|
|
||||||
AsyncAction = async c =>
|
|
||||||
{
|
|
||||||
var reflectResult = await ResultHelper.PopulateResultsAsync(h);
|
|
||||||
if (reflectResult != null)
|
|
||||||
{
|
|
||||||
// Record the user selected record for result ranking
|
|
||||||
_userSelectedRecord.Add(reflectResult);
|
|
||||||
|
|
||||||
// Since some actions may need to hide the Flow window to execute
|
// Order by executed time descending: Latest -> Oldest
|
||||||
// So let us populate the results of them
|
historyItems = historyItems.OrderByDescending(x => x.ExecutedDateTime);
|
||||||
return await reflectResult.ExecuteAsync(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we cannot get the result, fallback to re-query
|
if (Settings.HistoryStyle == HistoryStyle.LastOpened)
|
||||||
App.API.BackToQueryResults();
|
{
|
||||||
App.API.ChangeQuery(h.Query);
|
// Items saved to disk are differentiated by Query also, but LastOpened style only cares about unique results
|
||||||
return false;
|
historyItems = historyItems
|
||||||
},
|
.GroupBy(r => new { r.Title, r.SubTitle, r.PluginID, r.RecordKey })
|
||||||
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\uE81C")
|
.Select(g => g.First());
|
||||||
};
|
|
||||||
results.Add(result);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Max history results to return for display
|
||||||
|
if (maxResult.HasValue)
|
||||||
|
{
|
||||||
|
historyItems = historyItems.Take(maxResult.Value);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var item in historyItems)
|
||||||
|
{
|
||||||
|
var copiedItem = item.DeepCopyForHistoryStyle(Settings.HistoryStyle == HistoryStyle.LastOpened);
|
||||||
|
|
||||||
|
if (Settings.HistoryStyle == HistoryStyle.LastOpened)
|
||||||
|
{
|
||||||
|
copiedItem.AsyncAction = async c =>
|
||||||
|
{
|
||||||
|
// Use original history item to reflect correct result because properties like subtitle have been modified in copiedItem
|
||||||
|
var reflectResult = await ResultHelper.PopulateResultsAsync(item);
|
||||||
|
if (reflectResult != null)
|
||||||
|
{
|
||||||
|
// Since some actions may need to hide the Flow window to execute
|
||||||
|
// So let us populate the results of them
|
||||||
|
return await reflectResult.ExecuteAsync(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we cannot get the result, fallback to re-query
|
||||||
|
App.API.BackToQueryResults();
|
||||||
|
App.API.ChangeQuery(copiedItem.Query);
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
results.Add(copiedItem);
|
||||||
|
}
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Refreshes the last-opened history storage by migrating legacy entries and
|
||||||
|
/// updating stored icon paths to their resolved (absolute) locations.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Calls <see cref="History.UpdateIcoPathAbsolute"/> to refresh absolute icon
|
||||||
|
/// paths on the migrated/saved history entries by updating each item's
|
||||||
|
/// <c>PluginDirectory</c> (which in turn resolves <c>IcoPathAbsolute</c>).
|
||||||
|
///
|
||||||
|
/// Important:
|
||||||
|
/// - Plugins must be initialized (their metadata and <c>PluginDirectory</c> set)
|
||||||
|
/// before calling this method; otherwise icon resolution cannot be performed.
|
||||||
|
/// </remarks>
|
||||||
|
internal void RefreshLastOpenedHistoryResults()
|
||||||
|
{
|
||||||
|
_history.PopulateHistoryFromLegacyHistory();
|
||||||
|
|
||||||
|
_history.UpdateIcoPathAbsolute();
|
||||||
|
}
|
||||||
|
|
||||||
private async Task QueryResultsAsync(bool searchDelay, bool isReQuery = false, bool reSelect = true)
|
private async Task QueryResultsAsync(bool searchDelay, bool isReQuery = false, bool reSelect = true)
|
||||||
{
|
{
|
||||||
_updateSource?.Cancel();
|
_updateSource?.Cancel();
|
||||||
|
|
@ -1404,6 +1416,9 @@ namespace Flow.Launcher.ViewModel
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create a Guid for this update session so that we can filter out in progress checking
|
||||||
|
var updateGuid = Guid.NewGuid();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
_updateSource?.Dispose();
|
_updateSource?.Dispose();
|
||||||
|
|
@ -1415,7 +1430,7 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
ProgressBarVisibility = Visibility.Hidden;
|
ProgressBarVisibility = Visibility.Hidden;
|
||||||
|
|
||||||
_progressQuery = query;
|
_progressQueryDict.TryAdd(updateGuid, query);
|
||||||
_updateQuery = query;
|
_updateQuery = query;
|
||||||
|
|
||||||
// Switch to ThreadPool thread
|
// Switch to ThreadPool thread
|
||||||
|
|
@ -1470,7 +1485,8 @@ namespace Flow.Launcher.ViewModel
|
||||||
_ = Task.Delay(200, currentCancellationToken).ContinueWith(_ =>
|
_ = Task.Delay(200, currentCancellationToken).ContinueWith(_ =>
|
||||||
{
|
{
|
||||||
// start the progress bar if query takes more than 200 ms and this is the current running query and it didn't finish yet
|
// start the progress bar if query takes more than 200 ms and this is the current running query and it didn't finish yet
|
||||||
if (_progressQuery != null && _progressQuery.OriginalQuery == query.OriginalQuery)
|
if (_progressQueryDict.TryGetValue(updateGuid, out var progressQuery) &&
|
||||||
|
progressQuery.OriginalQuery == query.OriginalQuery)
|
||||||
{
|
{
|
||||||
ProgressBarVisibility = Visibility.Visible;
|
ProgressBarVisibility = Visibility.Visible;
|
||||||
}
|
}
|
||||||
|
|
@ -1526,7 +1542,7 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
// this should happen once after all queries are done so progress bar should continue
|
// this should happen once after all queries are done so progress bar should continue
|
||||||
// until the end of all querying
|
// until the end of all querying
|
||||||
_progressQuery = null;
|
_progressQueryDict.Remove(updateGuid, out _);
|
||||||
|
|
||||||
if (!currentCancellationToken.IsCancellationRequested)
|
if (!currentCancellationToken.IsCancellationRequested)
|
||||||
{
|
{
|
||||||
|
|
@ -1536,8 +1552,8 @@ namespace Flow.Launcher.ViewModel
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
// this make sures progress query is null when this query is canceled
|
// this ensures the query is removed from the progress tracking dictionary when this query is canceled or completes
|
||||||
_progressQuery = null;
|
_progressQueryDict.Remove(updateGuid, out _);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Local function
|
// Local function
|
||||||
|
|
@ -1615,10 +1631,8 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
void QueryHistoryTask(CancellationToken token)
|
void QueryHistoryTask(CancellationToken token)
|
||||||
{
|
{
|
||||||
// Select last history results and revert its order to make sure last history results are on top
|
// Select last history results
|
||||||
var historyItems = _history.LastOpenedHistoryItems.TakeLast(Settings.MaxHistoryResultsToShowForHomePage).Reverse();
|
var results = GetHistoryItems(_history.LastOpenedHistoryItems, Settings.MaxHistoryResultsToShowForHomePage);
|
||||||
|
|
||||||
var results = GetHistoryItems(historyItems);
|
|
||||||
|
|
||||||
if (token.IsCancellationRequested) return;
|
if (token.IsCancellationRequested) return;
|
||||||
|
|
||||||
|
|
@ -2134,6 +2148,13 @@ namespace Flow.Launcher.ViewModel
|
||||||
{
|
{
|
||||||
Win32Helper.SwitchToEnglishKeyboardLayout(true);
|
Win32Helper.SwitchToEnglishKeyboardLayout(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Show the taskbar if the setting is enabled
|
||||||
|
if (Settings.ShowTaskbarWhenInvoked && !_taskbarShownByFlow)
|
||||||
|
{
|
||||||
|
Win32Helper.ShowTaskbar();
|
||||||
|
_taskbarShownByFlow = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async void Hide(bool reset = true)
|
public async void Hide(bool reset = true)
|
||||||
|
|
@ -2202,6 +2223,13 @@ namespace Flow.Launcher.ViewModel
|
||||||
Win32Helper.RestorePreviousKeyboardLayout();
|
Win32Helper.RestorePreviousKeyboardLayout();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Hide the taskbar if the setting is enabled
|
||||||
|
if (_taskbarShownByFlow)
|
||||||
|
{
|
||||||
|
Win32Helper.HideTaskbar();
|
||||||
|
_taskbarShownByFlow = false;
|
||||||
|
}
|
||||||
|
|
||||||
// Delay for a while to make sure clock will not flicker
|
// Delay for a while to make sure clock will not flicker
|
||||||
await Task.Delay(50);
|
await Task.Delay(50);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
private bool GlyphAvailable => Glyph is not null;
|
private bool GlyphAvailable => Glyph is not null;
|
||||||
|
|
||||||
private bool ImgIconAvailable => !string.IsNullOrEmpty(Result.IcoPath) || Result.Icon is not null;
|
private bool ImgIconAvailable => !string.IsNullOrEmpty(Result.IcoPathAbsolute) || Result.Icon is not null;
|
||||||
|
|
||||||
private bool BadgeIconAvailable => !string.IsNullOrEmpty(Result.BadgeIcoPath) || Result.BadgeIcon is not null;
|
private bool BadgeIconAvailable => !string.IsNullOrEmpty(Result.BadgeIcoPath) || Result.BadgeIcon is not null;
|
||||||
|
|
||||||
|
|
@ -236,7 +236,7 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
private async Task LoadImageAsync()
|
private async Task LoadImageAsync()
|
||||||
{
|
{
|
||||||
var imagePath = Result.IcoPath;
|
var imagePath = Result.IcoPathAbsolute;
|
||||||
var iconDelegate = Result.Icon;
|
var iconDelegate = Result.Icon;
|
||||||
if (ImageLoader.TryGetValue(imagePath, false, out var img))
|
if (ImageLoader.TryGetValue(imagePath, false, out var img))
|
||||||
{
|
{
|
||||||
|
|
@ -266,7 +266,7 @@ namespace Flow.Launcher.ViewModel
|
||||||
|
|
||||||
private async Task LoadPreviewImageAsync()
|
private async Task LoadPreviewImageAsync()
|
||||||
{
|
{
|
||||||
var imagePath = Result.Preview.PreviewImagePath ?? Result.IcoPath;
|
var imagePath = Result.Preview.PreviewImagePath ?? Result.IcoPathAbsolute;
|
||||||
var iconDelegate = Result.Preview.PreviewDelegate ?? Result.Icon;
|
var iconDelegate = Result.Preview.PreviewDelegate ?? Result.Icon;
|
||||||
if (ImageLoader.TryGetValue(imagePath, true, out var img))
|
if (ImageLoader.TryGetValue(imagePath, true, out var img))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,9 @@
|
||||||
},
|
},
|
||||||
"iNKORE.UI.WPF.Modern": {
|
"iNKORE.UI.WPF.Modern": {
|
||||||
"type": "Direct",
|
"type": "Direct",
|
||||||
"requested": "[0.10.2.1, )",
|
"requested": "[0.10.1, )",
|
||||||
"resolved": "0.10.2.1",
|
"resolved": "0.10.1",
|
||||||
"contentHash": "nGwuuVul+TcLCTgPmaAZCc0fYFqUpCNZ8PiulVT3gZnsWt/AvxMZ0DSPpuyI/iRPc/NhFIg9lSIR7uaHWV0I/Q==",
|
"contentHash": "nRYmBosiL+42eUpLbHeqP7qJqtp5EpzuIMZTpvq4mFV33VB/JjkFg1y82gk50pjkXlAQWDvRyrfSAmPR5AM+3g==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"iNKORE.UI.WPF": "1.2.8"
|
"iNKORE.UI.WPF": "1.2.8"
|
||||||
}
|
}
|
||||||
|
|
@ -1619,7 +1619,7 @@
|
||||||
"FSharp.Core": "[9.0.303, )",
|
"FSharp.Core": "[9.0.303, )",
|
||||||
"Flow.Launcher.Infrastructure": "[1.0.0, )",
|
"Flow.Launcher.Infrastructure": "[1.0.0, )",
|
||||||
"Flow.Launcher.Localization": "[0.0.6, )",
|
"Flow.Launcher.Localization": "[0.0.6, )",
|
||||||
"Flow.Launcher.Plugin": "[5.1.0, )",
|
"Flow.Launcher.Plugin": "[5.0.0, )",
|
||||||
"Meziantou.Framework.Win32.Jobs": "[3.4.5, )",
|
"Meziantou.Framework.Win32.Jobs": "[3.4.5, )",
|
||||||
"Microsoft.IO.RecyclableMemoryStream": "[3.0.1, )",
|
"Microsoft.IO.RecyclableMemoryStream": "[3.0.1, )",
|
||||||
"SemanticVersioning": "[3.0.0, )",
|
"SemanticVersioning": "[3.0.0, )",
|
||||||
|
|
@ -1634,7 +1634,7 @@
|
||||||
"BitFaster.Caching": "[2.5.4, )",
|
"BitFaster.Caching": "[2.5.4, )",
|
||||||
"CommunityToolkit.Mvvm": "[8.4.0, )",
|
"CommunityToolkit.Mvvm": "[8.4.0, )",
|
||||||
"Flow.Launcher.Localization": "[0.0.6, )",
|
"Flow.Launcher.Localization": "[0.0.6, )",
|
||||||
"Flow.Launcher.Plugin": "[5.1.0, )",
|
"Flow.Launcher.Plugin": "[5.0.0, )",
|
||||||
"InputSimulator": "[1.0.4, )",
|
"InputSimulator": "[1.0.4, )",
|
||||||
"MemoryPack": "[1.21.4, )",
|
"MemoryPack": "[1.21.4, )",
|
||||||
"Microsoft.VisualStudio.Threading": "[17.14.15, )",
|
"Microsoft.VisualStudio.Threading": "[17.14.15, )",
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,8 @@
|
||||||
$(OutputPath)runtimes\linux-s390x;
|
$(OutputPath)runtimes\linux-s390x;
|
||||||
$(OutputPath)runtimes\linux-x64;
|
$(OutputPath)runtimes\linux-x64;
|
||||||
$(OutputPath)runtimes\linux-x86;
|
$(OutputPath)runtimes\linux-x86;
|
||||||
|
$(OutputPath)runtimes\linux-musl-riscv64;
|
||||||
|
$(OutputPath)runtimes\linux-riscv64;
|
||||||
$(OutputPath)runtimes\maccatalyst-arm64;
|
$(OutputPath)runtimes\maccatalyst-arm64;
|
||||||
$(OutputPath)runtimes\maccatalyst-x64;
|
$(OutputPath)runtimes\maccatalyst-x64;
|
||||||
$(OutputPath)runtimes\osx;
|
$(OutputPath)runtimes\osx;
|
||||||
|
|
@ -74,6 +76,8 @@
|
||||||
$(PublishDir)runtimes\linux-s390x;
|
$(PublishDir)runtimes\linux-s390x;
|
||||||
$(PublishDir)runtimes\linux-x64;
|
$(PublishDir)runtimes\linux-x64;
|
||||||
$(PublishDir)runtimes\linux-x86;
|
$(PublishDir)runtimes\linux-x86;
|
||||||
|
$(PublishDir)runtimes\linux-musl-riscv64;
|
||||||
|
$(PublishDir)runtimes\linux-riscv64;
|
||||||
$(PublishDir)runtimes\maccatalyst-arm64;
|
$(PublishDir)runtimes\maccatalyst-arm64;
|
||||||
$(PublishDir)runtimes\maccatalyst-x64;
|
$(PublishDir)runtimes\maccatalyst-x64;
|
||||||
$(PublishDir)runtimes\osx;
|
$(PublishDir)runtimes\osx;
|
||||||
|
|
@ -105,9 +109,9 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
||||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||||
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.1" />
|
<PackageReference Include="Microsoft.Data.Sqlite" Version="10.0.3" />
|
||||||
<PackageReference Include="Svg.Skia" Version="3.2.1" />
|
<PackageReference Include="Svg.Skia" Version="3.4.1" />
|
||||||
<PackageReference Include="SkiaSharp" Version="3.119.1" />
|
<PackageReference Include="SkiaSharp" Version="3.119.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_browserbookmark_plugin_description">搜尋你的瀏覽器書籤</system:String>
|
<system:String x:Key="flowlauncher_plugin_browserbookmark_plugin_description">搜尋你的瀏覽器書籤</system:String>
|
||||||
|
|
||||||
<!-- Main -->
|
<!-- Main -->
|
||||||
<system:String x:Key="flowlauncher_plugin_browserbookmark_copy_failed">Failed to set url in clipboard</system:String>
|
<system:String x:Key="flowlauncher_plugin_browserbookmark_copy_failed">設定剪貼簿網址失敗</system:String>
|
||||||
|
|
||||||
<!-- Settings -->
|
<!-- Settings -->
|
||||||
<system:String x:Key="flowlauncher_plugin_browserbookmark_bookmarkDataSetting">書籤資料</system:String>
|
<system:String x:Key="flowlauncher_plugin_browserbookmark_bookmarkDataSetting">書籤資料</system:String>
|
||||||
|
|
@ -28,6 +28,6 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_browserbookmark_browserEngine">瀏覽器引擎</system:String>
|
<system:String x:Key="flowlauncher_plugin_browserbookmark_browserEngine">瀏覽器引擎</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage01">如果你沒有使用 Chrome、Firefox 或 Edge,或者使用它們的便攜版,你需要新增書籤資料位置並選擇正確的瀏覽器引擎,才能讓這個擴充功能正常運作。</system:String>
|
<system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage01">如果你沒有使用 Chrome、Firefox 或 Edge,或者使用它們的便攜版,你需要新增書籤資料位置並選擇正確的瀏覽器引擎,才能讓這個擴充功能正常運作。</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage02">例如:Brave 瀏覽器的引擎是 Chromium;而它的預設書籤資料位置是「%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData」。對於 Firefox 瀏覽器引擎,書籤資料位置是包含 places.sqlite 檔案的 userdata 資料夾。</system:String>
|
<system:String x:Key="flowlauncher_plugin_browserbookmark_guideMessage02">例如:Brave 瀏覽器的引擎是 Chromium;而它的預設書籤資料位置是「%LOCALAPPDATA%\BraveSoftware\Brave-Browser\UserData」。對於 Firefox 瀏覽器引擎,書籤資料位置是包含 places.sqlite 檔案的 userdata 資料夾。</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_browserbookmark_enable_favicons">Load favicons (can be time consuming during startup)</system:String>
|
<system:String x:Key="flowlauncher_plugin_browserbookmark_enable_favicons">載入網站圖示(啟動時可能比較耗時)</system:String>
|
||||||
|
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">فاصلة (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">فاصلة (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">نقطة (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">نقطة (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">أقصى عدد من المنازل العشرية</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">أقصى عدد من المنازل العشرية</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Čárka (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Čárka (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Tečka (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Tečka (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Desetinná místa</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Desetinná místa</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Comma (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Comma (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Dot (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Dot (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Komma (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Komma (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Punkt (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Punkt (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. Dezimalstellen</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. Dezimalstellen</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Comma (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Comma (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Dot (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Dot (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Coma (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Coma (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Punto (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Punto (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Número máximo de decimales</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Número máximo de decimales</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Coma (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Coma (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Punto (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Punto (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Número máximo de decimales</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Número máximo de decimales</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Ha fallado la copia, inténtelo más tarde</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Ha fallado la copia, inténtelo más tarde</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Mostrar mensaje de error cuando falle el cálculo</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Mostrar mensaje de error cuando falle el cálculo</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Virgule (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Virgule (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Point (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Point (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Décimales max.</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Décimales max.</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Afficher le séparateur de milliers dans les résultats</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Échec de la copie, réessayer plus tard</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Échec de la copie, réessayer plus tard</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Afficher le message d'erreur lorsque le calcul échoue</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Afficher le message d'erreur lorsque le calcul échoue</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">פסיק (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">פסיק (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">נקודה (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">נקודה (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">מספר מקסימלי של מקומות עשרוניים</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">מספר מקסימלי של מקומות עשרוניים</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Virgola (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Virgola (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Punto (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Punto (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. cifre decimali</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. cifre decimali</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">コンマ(,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">コンマ(,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">ドット (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">ドット (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">小数点以下の最大桁数</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">小数点以下の最大桁数</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">コピーに失敗しました。後でやり直してください</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">コピーに失敗しました。後でやり直してください</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">計算に失敗したときにエラーメッセージを表示</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">計算に失敗したときにエラーメッセージを表示</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">쉼표 (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">쉼표 (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">마침표 (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">마침표 (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">최대 소수점 아래 자릿 수</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">최대 소수점 아래 자릿 수</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Komma (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Komma (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Prikk (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Prikk (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Maks. desimaler</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Maks. desimaler</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Comma (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Comma (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Dot (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Dot (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Przecinek (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Przecinek (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Kropka (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Kropka (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Maks. liczba miejsc po przecinku</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Maks. liczba miejsc po przecinku</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Vírgula (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Vírgula (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Ponto (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Ponto (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Vírgula (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Vírgula (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Ponto (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Ponto (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Número máximo de casas decimais</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Número máximo de casas decimais</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Mostrar separador dos milhares no resultado</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Falha ao copiar. Por favor tente mais tarde.</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Falha ao copiar. Por favor tente mais tarde.</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Mostrar mensagem de erro se o cálculo falhar</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Mostrar mensagem de erro se o cálculo falhar</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Запятая (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Запятая (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Точка (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Точка (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Макс. число знаков после запятой</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Макс. число знаков после запятой</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Čiarka (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Čiarka (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Bodka (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Bodka (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Desatinné miesta</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Desatinné miesta</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Zobraziť vo výsledkoch oddeľovač tisícov</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Kopírovanie zlyhalo, skúste to neskôr</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Kopírovanie zlyhalo, skúste to neskôr</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Zobraziť chybovú správu, keď výpočet zlyhá</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Zobraziť chybovú správu, keď výpočet zlyhá</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Comma (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Comma (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Dot (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Dot (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Comma (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Comma (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Dot (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Dot (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Max. decimal places</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Virgül (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Virgül (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Nokta (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Nokta (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Maks. ondalık basamak</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Maks. ondalık basamak</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Sonuçlarda binlik ayırıcıyı göster</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Kopyalama başarısız oldu, lütfen daha sonra deneyin</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Kopyalama başarısız oldu, lütfen daha sonra deneyin</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Hesaplama başarısız olduğunda hata mesajı göster</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Hesaplama başarısız olduğunda hata mesajı göster</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Кома (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Кома (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Крапка (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">Крапка (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Макс. кількість знаків після коми</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Макс. кількість знаків після коми</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Копіювання не вдалося, спробуйте пізніше</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Копіювання не вдалося, спробуйте пізніше</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Показувати повідомлення про помилку, якщо обчислення не вдалося</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Показувати повідомлення про помилку, якщо обчислення не вдалося</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Dấu phẩy (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">Dấu phẩy (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">dấu chấm (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">dấu chấm (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Tối đa. chữ số thập phân</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">Tối đa. chữ số thập phân</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">Show thousands separator in results</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">Copy failed, please try later</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">Show error message when calculation fails</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">逗号(,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">逗号(,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">点(.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">点(.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">小数点后最大位数</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">小数点后最大位数</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">在结果中显示千分隔符</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">复制失败,请稍后再试</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">复制失败,请稍后再试</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">计算错误时显示错误消息</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">计算错误时显示错误消息</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -12,6 +12,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">逗號 (,)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_comma">逗號 (,)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">點 (.)</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_decimal_separator_dot">點 (.)</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">小數點後最大位數</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_max_decimal_places">小數點後最大位數</system:String>
|
||||||
|
<system:String x:Key="flowlauncher_plugin_calculator_use_thousands_separator">在結果中顯示千位分隔符</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">複製失敗,請稍後再試</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_failed_to_copy">複製失敗,請稍後再試</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">計算失敗時顯示錯誤訊息</system:String>
|
<system:String x:Key="flowlauncher_plugin_calculator_show_error_message">計算失敗時顯示錯誤訊息</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -363,7 +363,7 @@ namespace Flow.Launcher.Plugin.Calculator
|
||||||
string integerPart = parts[0];
|
string integerPart = parts[0];
|
||||||
string fractionalPart = parts.Length > 1 ? parts[1] : string.Empty;
|
string fractionalPart = parts.Length > 1 ? parts[1] : string.Empty;
|
||||||
|
|
||||||
if (integerPart.Length > 3)
|
if (_settings.UseThousandsSeparator && integerPart.Length > 3)
|
||||||
{
|
{
|
||||||
integerPart = ThousandGroupRegex.Replace(integerPart, groupSeparator);
|
integerPart = ThousandGroupRegex.Replace(integerPart, groupSeparator);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,4 +7,6 @@ public class Settings
|
||||||
public int MaxDecimalPlaces { get; set; } = 10;
|
public int MaxDecimalPlaces { get; set; } = 10;
|
||||||
|
|
||||||
public bool ShowErrorMessage { get; set; } = false;
|
public bool ShowErrorMessage { get; set; } = false;
|
||||||
|
|
||||||
|
public bool UseThousandsSeparator { get; set; } = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@
|
||||||
<RowDefinition Height="auto" />
|
<RowDefinition Height="auto" />
|
||||||
<RowDefinition Height="auto" />
|
<RowDefinition Height="auto" />
|
||||||
<RowDefinition Height="auto" />
|
<RowDefinition Height="auto" />
|
||||||
|
<RowDefinition Height="auto" />
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition Width="Auto" />
|
<ColumnDefinition Width="Auto" />
|
||||||
|
|
@ -66,6 +67,16 @@
|
||||||
Margin="{StaticResource SettingPanelItemTopBottomMargin}"
|
Margin="{StaticResource SettingPanelItemTopBottomMargin}"
|
||||||
HorizontalAlignment="Left"
|
HorizontalAlignment="Left"
|
||||||
VerticalAlignment="Center"
|
VerticalAlignment="Center"
|
||||||
|
Content="{DynamicResource flowlauncher_plugin_calculator_use_thousands_separator}"
|
||||||
|
IsChecked="{Binding Settings.UseThousandsSeparator, Mode=TwoWay}" />
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
Grid.Row="3"
|
||||||
|
Grid.Column="0"
|
||||||
|
Grid.ColumnSpan="2"
|
||||||
|
Margin="{StaticResource SettingPanelItemTopBottomMargin}"
|
||||||
|
HorizontalAlignment="Left"
|
||||||
|
VerticalAlignment="Center"
|
||||||
Content="{DynamicResource flowlauncher_plugin_calculator_show_error_message}"
|
Content="{DynamicResource flowlauncher_plugin_calculator_show_error_message}"
|
||||||
IsChecked="{Binding Settings.ShowErrorMessage, Mode=TwoWay}" />
|
IsChecked="{Binding Settings.ShowErrorMessage, Mode=TwoWay}" />
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,8 @@
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Búsqueda de contenido de archivo:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Búsqueda de contenido de archivo:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Buscar índice:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Buscar índice:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Acceso rápido:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Acceso rápido:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Buscar carpeta:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">Buscar archivo:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Palabra clave de acción actual</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_current">Palabra clave de acción actual</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Aceptar</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_done">Aceptar</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Activado</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Activado</system:String>
|
||||||
|
|
|
||||||
|
|
@ -56,8 +56,8 @@
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Dosya İçeriğini Ara:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">Dosya İçeriğini Ara:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Dizin Araması:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Dizin Araması:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Hızlı Erişim:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">Hızlı Erişim:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Klasör Araması:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">Dosya Araması:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Geçerli Anahtar Kelime</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_current">Geçerli Anahtar Kelime</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_done">Tamam</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_done">Tamam</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Etkin</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_enabled">Etkin</system:String>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
<!-- Dialogues -->
|
<!-- Dialogues -->
|
||||||
<system:String x:Key="plugin_explorer_make_selection_warning">Please make a selection first</system:String>
|
<system:String x:Key="plugin_explorer_make_selection_warning">請先選擇一或多個選項</system:String>
|
||||||
<system:String x:Key="plugin_explorer_quick_access_link_no_folder_selected">Please select a folder path.</system:String>
|
<system:String x:Key="plugin_explorer_quick_access_link_no_folder_selected">Please select a folder path.</system:String>
|
||||||
<system:String x:Key="plugin_explorer_quick_access_link_path_already_exists">Please choose a different name or folder path.</system:String>
|
<system:String x:Key="plugin_explorer_quick_access_link_path_already_exists">Please choose a different name or folder path.</system:String>
|
||||||
<system:String x:Key="plugin_explorer_delete_quick_access_link">Are you sure you want to delete this quick access link?</system:String>
|
<system:String x:Key="plugin_explorer_delete_quick_access_link">Are you sure you want to delete this quick access link?</system:String>
|
||||||
|
|
@ -13,12 +13,12 @@
|
||||||
<system:String x:Key="plugin_explorer_deletefilefolderconfirm">Are you sure you want to permanently delete this file/folder?</system:String>
|
<system:String x:Key="plugin_explorer_deletefilefolderconfirm">Are you sure you want to permanently delete this file/folder?</system:String>
|
||||||
<system:String x:Key="plugin_explorer_deletefilefoldersuccess">成功刪除</system:String>
|
<system:String x:Key="plugin_explorer_deletefilefoldersuccess">成功刪除</system:String>
|
||||||
<system:String x:Key="plugin_explorer_deletefilefoldersuccess_detail">已成功刪除 {0}</system:String>
|
<system:String x:Key="plugin_explorer_deletefilefoldersuccess_detail">已成功刪除 {0}</system:String>
|
||||||
<system:String x:Key="plugin_explorer_globalActionKeywordInvalid">Assigning the global action keyword could bring up too many results during search. Please choose a specific action keyword</system:String>
|
<system:String x:Key="plugin_explorer_globalActionKeywordInvalid">設定全局操作關鍵字可能會導致搜尋結果過多。請選擇一個特定的操作關鍵字</system:String>
|
||||||
<system:String x:Key="plugin_explorer_quickaccess_globalActionKeywordInvalid">Quick Access can not be set to the global action keyword when enabled. Please choose a specific action keyword</system:String>
|
<system:String x:Key="plugin_explorer_quickaccess_globalActionKeywordInvalid">啟用「快速存取」後,無法將其設定為全域操作關鍵字。請選擇一個特定的操作關鍵字</system:String>
|
||||||
<system:String x:Key="plugin_explorer_windowsSearchServiceNotRunning">The required service for Windows Index Search does not appear to be running</system:String>
|
<system:String x:Key="plugin_explorer_windowsSearchServiceNotRunning">Windows 索引搜尋所需的服務似乎未運作</system:String>
|
||||||
<system:String x:Key="plugin_explorer_windowsSearchServiceFix">To fix this, start the Windows Search service. Select here to remove this warning</system:String>
|
<system:String x:Key="plugin_explorer_windowsSearchServiceFix">若要解決此問題,請啟動 Windows 搜尋服務。選擇此處可移除此警告</system:String>
|
||||||
<system:String x:Key="plugin_explorer_alternative">The warning message has been switched off. As an alternative for searching files and folders, would you like to install Everything plugin?{0}{0}Select 'Yes' to install Everything plugin, or 'No' to return</system:String>
|
<system:String x:Key="plugin_explorer_alternative">警告訊息已關閉。要使用 Everything 外掛程式搜尋檔案和資料夾,您是否願意安裝該外掛程式? {0}{0}選擇「是」安裝 Everything 插件,或選擇「否」返回</system:String>
|
||||||
<system:String x:Key="plugin_explorer_alternative_title">Explorer Alternative</system:String>
|
<system:String x:Key="plugin_explorer_alternative_title">瀏覽器替代方案</system:String>
|
||||||
<system:String x:Key="plugin_explorer_directoryinfosearch_error">Error occurred during search: {0}</system:String>
|
<system:String x:Key="plugin_explorer_directoryinfosearch_error">Error occurred during search: {0}</system:String>
|
||||||
<system:String x:Key="plugin_explorer_opendir_error">Could not open folder</system:String>
|
<system:String x:Key="plugin_explorer_opendir_error">Could not open folder</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openfile_error">Could not open file</system:String>
|
<system:String x:Key="plugin_explorer_openfile_error">Could not open file</system:String>
|
||||||
|
|
@ -29,7 +29,7 @@
|
||||||
<system:String x:Key="plugin_explorer_edit">編輯</system:String>
|
<system:String x:Key="plugin_explorer_edit">編輯</system:String>
|
||||||
<system:String x:Key="plugin_explorer_add">新增</system:String>
|
<system:String x:Key="plugin_explorer_add">新增</system:String>
|
||||||
<system:String x:Key="plugin_explorer_generalsetting_header">General Setting</system:String>
|
<system:String x:Key="plugin_explorer_generalsetting_header">General Setting</system:String>
|
||||||
<system:String x:Key="plugin_explorer_manageactionkeywords_header">Customise Action Keywords</system:String>
|
<system:String x:Key="plugin_explorer_manageactionkeywords_header">更改觸發關鍵字</system:String>
|
||||||
<system:String x:Key="plugin_explorer_manage_quick_access_links_header">Customise Quick Access</system:String>
|
<system:String x:Key="plugin_explorer_manage_quick_access_links_header">Customise Quick Access</system:String>
|
||||||
<system:String x:Key="plugin_explorer_quickaccesslinks_header">快速訪問連結</system:String>
|
<system:String x:Key="plugin_explorer_quickaccesslinks_header">快速訪問連結</system:String>
|
||||||
<system:String x:Key="plugin_explorer_everything_setting_header">Everything Setting</system:String>
|
<system:String x:Key="plugin_explorer_everything_setting_header">Everything Setting</system:String>
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
<system:String x:Key="plugin_explorer_launch_hidden">Launch Hidden</system:String>
|
<system:String x:Key="plugin_explorer_launch_hidden">Launch Hidden</system:String>
|
||||||
<system:String x:Key="plugin_explorer_editor_path">編輯器路</system:String>
|
<system:String x:Key="plugin_explorer_editor_path">編輯器路</system:String>
|
||||||
<system:String x:Key="plugin_explorer_shell_path">Shell Path</system:String>
|
<system:String x:Key="plugin_explorer_shell_path">Shell Path</system:String>
|
||||||
<system:String x:Key="plugin_explorer_indexsearchexcludedpaths_header">Index Search Excluded Paths</system:String>
|
<system:String x:Key="plugin_explorer_indexsearchexcludedpaths_header">搜尋索引排除路徑</system:String>
|
||||||
<system:String x:Key="plugin_explorer_use_location_as_working_dir">使用程式所在目錄作為工作目錄</system:String>
|
<system:String x:Key="plugin_explorer_use_location_as_working_dir">使用程式所在目錄作為工作目錄</system:String>
|
||||||
<system:String x:Key="plugin_explorer_display_more_info_in_tooltip">Display more information like size and age in tooltips</system:String>
|
<system:String x:Key="plugin_explorer_display_more_info_in_tooltip">Display more information like size and age in tooltips</system:String>
|
||||||
<system:String x:Key="plugin_explorer_default_open_in_file_manager">Hit Enter to open folder in Default File Manager</system:String>
|
<system:String x:Key="plugin_explorer_default_open_in_file_manager">Hit Enter to open folder in Default File Manager</system:String>
|
||||||
|
|
@ -53,15 +53,15 @@
|
||||||
<system:String x:Key="plugin_explorer_manageindexoptions">索引選項</system:String>
|
<system:String x:Key="plugin_explorer_manageindexoptions">索引選項</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_search">搜尋:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_search">搜尋:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_pathsearch">路徑搜尋:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_pathsearch">路徑搜尋:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">File Content Search:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_filecontentsearch">檔案內容搜尋:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">Index Search:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_indexsearch">索引搜尋:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">快速存取:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_quickaccess">快速存取:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_foldersearch">Folder Search:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
<system:String x:Key="plugin_explorer_actionkeywordview_filesearch">File Search:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_current">Current Action Keyword</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_current">目前觸發關鍵字</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_done">確</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_done">確</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled">已啟用</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_enabled">已啟用</system:String>
|
||||||
<system:String x:Key="plugin_explorer_actionkeyword_enabled_tooltip">When disabled Flow will not execute this search option, and will additionally revert back to '*' to free up the action keyword</system:String>
|
<system:String x:Key="plugin_explorer_actionkeyword_enabled_tooltip">停用此選項後,Flow 將不會執行此搜尋選項,並會還原為「*」以釋放操作關鍵字</system:String>
|
||||||
<system:String x:Key="plugin_explorer_engine_everything">Everything</system:String>
|
<system:String x:Key="plugin_explorer_engine_everything">Everything</system:String>
|
||||||
<system:String x:Key="plugin_explorer_engine_windows_index">Windows Index</system:String>
|
<system:String x:Key="plugin_explorer_engine_windows_index">Windows Index</system:String>
|
||||||
<system:String x:Key="plugin_explorer_path_enumeration_engine_none">Direct Enumeration</system:String>
|
<system:String x:Key="plugin_explorer_path_enumeration_engine_none">Direct Enumeration</system:String>
|
||||||
|
|
@ -107,26 +107,26 @@
|
||||||
<system:String x:Key="plugin_explorer_file">檔案</system:String>
|
<system:String x:Key="plugin_explorer_file">檔案</system:String>
|
||||||
<system:String x:Key="plugin_explorer_folder">資料夾</system:String>
|
<system:String x:Key="plugin_explorer_folder">資料夾</system:String>
|
||||||
<system:String x:Key="plugin_explorer_deletefilefolder_subtitle">刪除所選內容</system:String>
|
<system:String x:Key="plugin_explorer_deletefilefolder_subtitle">刪除所選內容</system:String>
|
||||||
<system:String x:Key="plugin_explorer_runasdifferentuser">Run as different user</system:String>
|
<system:String x:Key="plugin_explorer_runasdifferentuser">以另一個使用者的身分執行</system:String>
|
||||||
<system:String x:Key="plugin_explorer_runasdifferentuser_subtitle">Run the selected using a different user account</system:String>
|
<system:String x:Key="plugin_explorer_runasdifferentuser_subtitle">使用其他帳戶運行所選的程式</system:String>
|
||||||
<system:String x:Key="plugin_explorer_opencontainingfolder">開啟檔案位置</system:String>
|
<system:String x:Key="plugin_explorer_opencontainingfolder">開啟檔案位置</system:String>
|
||||||
<system:String x:Key="plugin_explorer_opencontainingfolder_subtitle">Open the location that contains current item</system:String>
|
<system:String x:Key="plugin_explorer_opencontainingfolder_subtitle">Open the location that contains current item</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openwitheditor">在編輯器中開啟:</system:String>
|
<system:String x:Key="plugin_explorer_openwitheditor">在編輯器中開啟:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openwitheditor_error">Failed to open file at {0} with Editor {1} at {2}</system:String>
|
<system:String x:Key="plugin_explorer_openwitheditor_error">Failed to open file at {0} with Editor {1} at {2}</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openwithshell">Open With Shell:</system:String>
|
<system:String x:Key="plugin_explorer_openwithshell">Open With Shell:</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openwithshell_error">Failed to open folder {0} with Shell {1} at {2}</system:String>
|
<system:String x:Key="plugin_explorer_openwithshell_error">Failed to open folder {0} with Shell {1} at {2}</system:String>
|
||||||
<system:String x:Key="plugin_explorer_excludefromindexsearch">Exclude current and sub-directories from Index Search</system:String>
|
<system:String x:Key="plugin_explorer_excludefromindexsearch">從索引搜尋中排除目前目錄及其子目錄</system:String>
|
||||||
<system:String x:Key="plugin_explorer_excludedfromindexsearch_msg">Excluded from Index Search</system:String>
|
<system:String x:Key="plugin_explorer_excludedfromindexsearch_msg">已從索引搜尋中排除</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openindexingoptions">Open Windows Indexing Options</system:String>
|
<system:String x:Key="plugin_explorer_openindexingoptions">開啟Windows搜尋索引功能的設定</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openindexingoptions_subtitle">Manage indexed files and folders</system:String>
|
<system:String x:Key="plugin_explorer_openindexingoptions_subtitle">管理索引的檔案和資料夾</system:String>
|
||||||
<system:String x:Key="plugin_explorer_openindexingoptions_errormsg">Failed to open Windows Indexing Options</system:String>
|
<system:String x:Key="plugin_explorer_openindexingoptions_errormsg">無法開啟Windows索引服務的設定</system:String>
|
||||||
<system:String x:Key="plugin_explorer_add_to_quickaccess_title">Add to Quick Access</system:String>
|
<system:String x:Key="plugin_explorer_add_to_quickaccess_title">加入快速存取</system:String>
|
||||||
<system:String x:Key="plugin_explorer_add_to_quickaccess_subtitle">Add current item to Quick Access</system:String>
|
<system:String x:Key="plugin_explorer_add_to_quickaccess_subtitle">Add current item to Quick Access</system:String>
|
||||||
<system:String x:Key="plugin_explorer_addfilefoldersuccess">添加成功</system:String>
|
<system:String x:Key="plugin_explorer_addfilefoldersuccess">添加成功</system:String>
|
||||||
<system:String x:Key="plugin_explorer_addfilefoldersuccess_detail">Successfully added to Quick Access</system:String>
|
<system:String x:Key="plugin_explorer_addfilefoldersuccess_detail">已成功添加到快速存取</system:String>
|
||||||
<system:String x:Key="plugin_explorer_removefilefoldersuccess">Successfully Removed</system:String>
|
<system:String x:Key="plugin_explorer_removefilefoldersuccess">成功移除</system:String>
|
||||||
<system:String x:Key="plugin_explorer_removefilefoldersuccess_detail">Successfully removed from Quick Access</system:String>
|
<system:String x:Key="plugin_explorer_removefilefoldersuccess_detail">成功從快速存取中移除</system:String>
|
||||||
<system:String x:Key="plugin_explorer_contextmenu_titletooltip">Add to Quick Access so it can be opened with Explorer's Search Activation action keyword</system:String>
|
<system:String x:Key="plugin_explorer_contextmenu_titletooltip">添加到快速存取,以便可以使用檔案總管的搜尋啟動操作關鍵字打開它</system:String>
|
||||||
<system:String x:Key="plugin_explorer_contextmenu_remove_titletooltip">從快速訪問中移除</system:String>
|
<system:String x:Key="plugin_explorer_contextmenu_remove_titletooltip">從快速訪問中移除</system:String>
|
||||||
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">從快速訪問中移除</system:String>
|
<system:String x:Key="plugin_explorer_remove_from_quickaccess_title">從快速訪問中移除</system:String>
|
||||||
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
|
<system:String x:Key="plugin_explorer_remove_from_quickaccess_subtitle">Remove current item from Quick Access</system:String>
|
||||||
|
|
|
||||||
|
|
@ -532,7 +532,7 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
|
||||||
[RelayCommand]
|
[RelayCommand]
|
||||||
private void OpenShellPath()
|
private void OpenShellPath()
|
||||||
{
|
{
|
||||||
var path = PromptUserSelectPath(ResultType.File, Settings.EditorPath != null ? Path.GetDirectoryName(Settings.EditorPath) : null);
|
var path = PromptUserSelectPath(ResultType.File, Settings.ShellPath != null ? Path.GetDirectoryName(Settings.ShellPath) : null);
|
||||||
if (path is null)
|
if (path is null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_pluginindicator_result_subtitle">Activate {0} plugin action keyword</system:String>
|
<system:String x:Key="flowlauncher_plugin_pluginindicator_result_subtitle">啟動 {0} 外掛程式操作關鍵字</system:String>
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_name">套件關鍵字提示</system:String>
|
<system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_name">套件關鍵字提示</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_description">提供套件關鍵字搜尋提示</system:String>
|
<system:String x:Key="flowlauncher_plugin_pluginindicator_plugin_description">提供套件關鍵字搜尋提示</system:String>
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,9 @@
|
||||||
<system:String x:Key="plugin_pluginsmanager_downloading_plugin">正在下載擴充功能</system:String>
|
<system:String x:Key="plugin_pluginsmanager_downloading_plugin">正在下載擴充功能</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_download_success">下載完成</system:String>
|
<system:String x:Key="plugin_pluginsmanager_download_success">下載完成</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_download_error">錯誤:無法下載擴充功能</system:String>
|
<system:String x:Key="plugin_pluginsmanager_download_error">錯誤:無法下載擴充功能</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt">{0} by {1} {2}{3}Would you like to uninstall this plugin? After the uninstallation Flow will automatically restart.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt">{0}(來自 {1} {2} {3})您想解除安裝此外掛程式嗎?卸載後,Flow 將自動重新啟動。</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt_no_restart">{0} by {1} {2}{2}Would you like to uninstall this plugin?</system:String>
|
<system:String x:Key="plugin_pluginsmanager_uninstall_prompt_no_restart">{0} by {1} {2}{2}Would you like to uninstall this plugin?</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_prompt">{0} by {1} {2}{3}Would you like to install this plugin? After the installation Flow will automatically restart.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_prompt">{0}(來自 {1} {2} {3})您想安裝此外掛程式嗎?安裝後,Flow 將自動重新啟動。</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_prompt_no_restart">{0} by {1} {2}{2}Would you like to install this plugin?</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_prompt_no_restart">{0} by {1} {2}{2}Would you like to install this plugin?</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_title">安裝擴充功能</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_title">安裝擴充功能</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_installing_plugin">Installing Plugin</system:String>
|
<system:String x:Key="plugin_pluginsmanager_installing_plugin">Installing Plugin</system:String>
|
||||||
|
|
@ -16,27 +16,27 @@
|
||||||
<system:String x:Key="plugin_pluginsmanager_keep_plugin_settings_title">Keep plugin settings</system:String>
|
<system:String x:Key="plugin_pluginsmanager_keep_plugin_settings_title">Keep plugin settings</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_keep_plugin_settings_subtitle">Do you want to keep the settings of the plugin for the next usage?</system:String>
|
<system:String x:Key="plugin_pluginsmanager_keep_plugin_settings_subtitle">Do you want to keep the settings of the plugin for the next usage?</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_success_restart">外掛安裝成功。正在重啟 Flow,請稍後...</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_success_restart">外掛安裝成功。正在重啟 Flow,請稍後...</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_errormetadatafile">Unable to find the plugin.json metadata file from the extracted zip file.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_errormetadatafile">無法從解壓縮後的zip檔案中找到plugin.json檔案。</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_error_duplicate">Error: A plugin which has the same or greater version with {0} already exists.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_error_duplicate">錯誤:已經安裝版本高於 {0} 的外掛程式。</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_error_title">安裝擴充功能時發生錯誤</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_error_title">安裝擴充功能時發生錯誤</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_error_subtitle">嘗試安裝 {0} 時發生錯誤</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_error_subtitle">嘗試安裝 {0} 時發生錯誤</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_uninstall_error_title">Error uninstalling plugin</system:String>
|
<system:String x:Key="plugin_pluginsmanager_uninstall_error_title">Error uninstalling plugin</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_noresult_title">無可用更新</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_noresult_title">無可用更新</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_noresult_subtitle">所有插件均為最新版本</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_noresult_subtitle">所有插件均為最新版本</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_prompt">{0} by {1} {2}{3}Would you like to update this plugin? After the update Flow will automatically restart.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_prompt">{0}(來自 {1} {2} {3})您想更新此外掛程式嗎?更新後,Flow 將自動重新啟動。</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_prompt_no_restart">{0} by {1} {2}{2}Would you like to update this plugin?</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_prompt_no_restart">{0} by {1} {2}{2}Would you like to update this plugin?</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_title">擴充功能更新</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_title">擴充功能更新</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_alreadyexists">已安裝此擴充功能</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_alreadyexists">已安裝此擴充功能</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_failed_title">Plugin Manifest Download Failed</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_failed_title">外掛程式清單下載失敗</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">Please check if you can connect to github.com. This error means you may not be able to install or update plugins.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_failed_subtitle">請檢查您是否可以連接到github.com。此錯誤表示您可能無法安裝或更新外掛程式。</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_all_title">Update all plugins</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_all_title">Update all plugins</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_all_subtitle">Would you like to update all plugins?</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_all_subtitle">Would you like to update all plugins?</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_all_prompt">你要更新{0}個插件?{1}Flow Launcher會在更新所有插件後重新啟動。</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_all_prompt">你要更新{0}個插件?{1}Flow Launcher會在更新所有插件後重新啟動。</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_all_prompt_no_restart">Would you like to update {0} plugins?</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_all_prompt_no_restart">Would you like to update {0} plugins?</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_all_success_restart">{0} plugins successfully updated. Restarting Flow, please wait...</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_all_success_restart">{0} plugins successfully updated. Restarting Flow, please wait...</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_update_success_restart">Plugin {0} successfully updated. Restarting Flow, please wait...</system:String>
|
<system:String x:Key="plugin_pluginsmanager_update_success_restart">Plugin {0} successfully updated. Restarting Flow, please wait...</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning_title">Installing from an unknown source</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning_title">從未知來源安裝</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning">You are installing this plugin from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning via settings)</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_unknown_source_warning">您正在安裝來自未知來源的插件,它可能有潛在風險!{0}{0}請確保您了解此插件的來源並確認其安全性。{0}{0}是否繼續? {0}{0}(您可以在設定中關閉此警告)</system:String>
|
||||||
|
|
||||||
<system:String x:Key="plugin_pluginsmanager_install_success_no_restart">Plugin {0} successfully installed. Please restart Flow.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_install_success_no_restart">Plugin {0} successfully installed. Please restart Flow.</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_uninstall_success_no_restart">Plugin {0} successfully uninstalled. Please restart Flow.</system:String>
|
<system:String x:Key="plugin_pluginsmanager_uninstall_success_no_restart">Plugin {0} successfully uninstalled. Please restart Flow.</system:String>
|
||||||
|
|
@ -59,12 +59,12 @@
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_openwebsite_subtitle">查看擴充功能的網站</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_openwebsite_subtitle">查看擴充功能的網站</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_gotosourcecode_title">查看原始碼</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_gotosourcecode_title">查看原始碼</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_gotosourcecode_subtitle">查看擴充功能的原始碼</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_gotosourcecode_subtitle">查看擴充功能的原始碼</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_newissue_title">Suggest an enhancement or submit an issue</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_newissue_title">提出改進建議或提交問題</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_newissue_subtitle">Suggest an enhancement or submit an issue to the plugin developer</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_newissue_subtitle">向作者提出改進建議或提交問題</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_title">Go to Flow's plugins repository</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_title">前往 Flow 的線上外掛清單</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_subtitle">Visit the PluginsManifest repository to see community-made plugin submissions</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_contextmenu_pluginsmanifest_subtitle">造訪PluginsManifest儲存庫,查看社群提交的插件</system:String>
|
||||||
|
|
||||||
<!-- Settings menu items -->
|
<!-- Settings menu items -->
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_settings_unknown_source">Install from unknown source warning</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_settings_unknown_source">安裝未知來源警告</system:String>
|
||||||
<system:String x:Key="plugin_pluginsmanager_plugin_settings_auto_restart">以插件管理員安裝/移除/更新插件後自動重新啟動Flow Launcher</system:String>
|
<system:String x:Key="plugin_pluginsmanager_plugin_settings_auto_restart">以插件管理員安裝/移除/更新插件後自動重新啟動Flow Launcher</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||||
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.205">
|
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.269">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,14 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_processkiller_plugin_name">Process Killer</system:String>
|
<system:String x:Key="flowlauncher_plugin_processkiller_plugin_name">進程結束器</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_processkiller_plugin_description">Kill running processes from Flow Launcher</system:String>
|
<system:String x:Key="flowlauncher_plugin_processkiller_plugin_description">使用Flow Launcher終止正在執行的進程</system:String>
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_processkiller_kill_all">kill all instances of "{0}"</system:String>
|
<system:String x:Key="flowlauncher_plugin_processkiller_kill_all">刪除{0}的所有實例</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_processkiller_kill_all_count">kill {0} processes</system:String>
|
<system:String x:Key="flowlauncher_plugin_processkiller_kill_all_count">終止 {0} 個進程</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_processkiller_kill_instances">kill all instances</system:String>
|
<system:String x:Key="flowlauncher_plugin_processkiller_kill_instances">終止所有實例</system:String>
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_processkiller_show_window_title">Show title for processes with visible windows</system:String>
|
<system:String x:Key="flowlauncher_plugin_processkiller_show_window_title">顯示具有可見視窗的進程的標題</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_processkiller_put_visible_window_process_top">Put processes with visible windows on the top</system:String>
|
<system:String x:Key="flowlauncher_plugin_processkiller_put_visible_window_process_top">將可見的進程置於最上方</system:String>
|
||||||
|
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_program_true">已啟用</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_true">已啟用</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_false">Disabled</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_false">Disabled</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_location">路徑</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_location">路徑</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_all_programs">All Programs</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_all_programs">所有程式</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_suffixes">File Type</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_suffixes">File Type</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_reindex">重新建立索引</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_reindex">重新建立索引</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_indexing">正在建立索引</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_indexing">正在建立索引</system:String>
|
||||||
|
|
@ -23,16 +23,16 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_program_index_uwp">UWP Apps</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_index_uwp">UWP Apps</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_index_uwp_tooltip">When enabled, Flow will load UWP Applications</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_index_uwp_tooltip">When enabled, Flow will load UWP Applications</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_index_start">Start Menu</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_index_start">Start Menu</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_index_start_tooltip">When enabled, Flow will load programs from the start menu</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_index_start_tooltip">啟用後,Flow將從開始功能表載入程式</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_index_registry">Registry</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_index_registry">Registry</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_index_registry_tooltip">When enabled, Flow will load programs from the registry</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_index_registry_tooltip">啟用後,Flow將從註冊表載入程式</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_index_PATH">PATH</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_index_PATH">PATH</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_index_PATH_tooltip">When enabled, Flow will load programs from the PATH environment variable</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_index_PATH_tooltip">When enabled, Flow will load programs from the PATH environment variable</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_enable_hidelnkpath">Hide app path</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_enable_hidelnkpath">隱藏程式路徑</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_enable_hidelnkpath_tooltip">For executable files such as UWP or lnk, hide the file path from being visible</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_enable_hidelnkpath_tooltip">對於UWP或lnk等可執行文件,隱藏檔案路徑</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_enable_hideuninstallers">Hide uninstallers</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_enable_hideuninstallers">Hide uninstallers</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_enable_hideuninstallers_tooltip">Hides programs with common uninstaller names, such as unins000.exe</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_enable_hideuninstallers_tooltip">Hides programs with common uninstaller names, such as unins000.exe</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_enable_description">Search in Program Description</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_enable_description">在程式說明中搜尋</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_enable_description_tooltip">Flow will search program's description</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_enable_description_tooltip">Flow will search program's description</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_enable_hideduplicatedwindowsapp">Hide duplicated apps</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_enable_hideduplicatedwindowsapp">Hide duplicated apps</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_enable_hideduplicatedwindowsapp_tooltip">Hide duplicated Win32 programs that are already in the UWP list</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_enable_hideduplicatedwindowsapp_tooltip">Hide duplicated Win32 programs that are already in the UWP list</system:String>
|
||||||
|
|
@ -45,7 +45,7 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_program_max_search_depth">最大搜尋深度(-1是無限的):</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_max_search_depth">最大搜尋深度(-1是無限的):</system:String>
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_program_pls_select_program_source">請先選擇一項</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_pls_select_program_source">請先選擇一項</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_delete_program_source">Are you sure you want to delete the selected program sources?</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_delete_program_source">您確定要刪除選定的程式來源嗎?</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_delete_program_source_select_not_user_added">Please select program sources that are not added by you</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_delete_program_source_select_not_user_added">Please select program sources that are not added by you</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_delete_program_source_select_user_added">Please select program sources that are added by you</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_delete_program_source_select_user_added">Please select program sources that are added by you</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_duplicate_program_source">Another program source with the same location already exists.</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_duplicate_program_source">Another program source with the same location already exists.</system:String>
|
||||||
|
|
@ -73,7 +73,7 @@
|
||||||
Insert protocols of .url files you want to index. Protocols should be separated by ';', and should end with "://". (ex>ftp://;mailto://)
|
Insert protocols of .url files you want to index. Protocols should be separated by ';', and should end with "://". (ex>ftp://;mailto://)
|
||||||
</system:String>
|
</system:String>
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_program_run_as_different_user">Run As Different User</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_run_as_different_user">以另一個使用者的身分執行</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_run_as_administrator">以系統管理員身分執行</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_run_as_administrator">以系統管理員身分執行</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_open_containing_folder">開啟檔案位置</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_open_containing_folder">開啟檔案位置</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_disable_program">Hide</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_disable_program">Hide</system:String>
|
||||||
|
|
@ -84,16 +84,16 @@
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_program_invalid_path">無效的路徑</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_invalid_path">無效的路徑</system:String>
|
||||||
|
|
||||||
<system:String x:Key="flowlauncher_plugin_program_customizedexplorer">Customized Explorer</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_customizedexplorer">自訂檔案管理器</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_args">Args</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_args">參數</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_tooltip_customizedexplorer">You can customize the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_tooltip_customizedexplorer">You can customize the explorer used for opening the container folder by inputing the Environmental Variable of the explorer you want to use. It will be useful to use CMD to test whether the Environmental Variable is available.</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_tooltip_args">Enter the customized args you want to add for your customized explorer. %s for parent directory, %f for full path (which only works for win32). Check the explorer's website for details.</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_tooltip_args">輸入您要為自訂資源管理器新增的自訂參數。 %s 表示父目錄,%f 表示完整路徑(僅適用於 Win32)。請造訪資源管理器的網站以了解詳情。</system:String>
|
||||||
|
|
||||||
<!-- Dialogs -->
|
<!-- Dialogs -->
|
||||||
<system:String x:Key="flowlauncher_plugin_program_disable_dlgtitle_success">成</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_disable_dlgtitle_success">成</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_disable_dlgtitle_error">Error</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_disable_dlgtitle_error">Error</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_disable_dlgtitle_success_message">Successfully disabled this program from displaying in your query</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_disable_dlgtitle_success_message">已經禁止此程式顯示在您的搜尋結果中</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_run_as_administrator_not_supported_message">This app is not intended to be run as administrator</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_run_as_administrator_not_supported_message">此應用程式不應以管理員身分執行</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_program_run_failed">Unable to run {0}</system:String>
|
<system:String x:Key="flowlauncher_plugin_program_run_failed">Unable to run {0}</system:String>
|
||||||
|
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -7,4 +7,7 @@ S_OK
|
||||||
SLGP_FLAGS
|
SLGP_FLAGS
|
||||||
WIN32_FIND_DATAW
|
WIN32_FIND_DATAW
|
||||||
SLR_FLAGS
|
SLR_FLAGS
|
||||||
IShellLinkW
|
IShellItem
|
||||||
|
SHCreateItemFromParsingName
|
||||||
|
IShellLinkW
|
||||||
|
CoTaskMemFree
|
||||||
|
|
@ -3,7 +3,6 @@ using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
using Windows.Win32;
|
using Windows.Win32;
|
||||||
using Windows.Win32.Foundation;
|
using Windows.Win32.Foundation;
|
||||||
using Windows.Win32.System.LibraryLoader;
|
|
||||||
|
|
||||||
namespace Flow.Launcher.Plugin.Program.Programs
|
namespace Flow.Launcher.Plugin.Program.Programs
|
||||||
{
|
{
|
||||||
|
|
@ -21,46 +20,28 @@ namespace Flow.Launcher.Plugin.Program.Programs
|
||||||
/// <returns>The localized name as string or <see cref="string.Empty"/>.</returns>
|
/// <returns>The localized name as string or <see cref="string.Empty"/>.</returns>
|
||||||
public static unsafe string GetLocalizedName(string path)
|
public static unsafe string GetLocalizedName(string path)
|
||||||
{
|
{
|
||||||
const int capacity = 1024;
|
int retCode = PInvoke.SHCreateItemFromParsingName(path, null, typeof(Windows.Win32.UI.Shell.IShellItem).GUID, out object shellItemObj);
|
||||||
Span<char> buffer = new char[capacity];
|
if (retCode != 0 || shellItemObj is not Windows.Win32.UI.Shell.IShellItem shellItem)
|
||||||
|
|
||||||
// If there is no resource to localize a file name the method returns a non zero value.
|
|
||||||
fixed (char* bufferPtr = buffer)
|
|
||||||
{
|
{
|
||||||
int id;
|
return string.Empty;
|
||||||
fixed (char* pathPtr = path)
|
|
||||||
{
|
|
||||||
var result = PInvoke.SHGetLocalizedName(new PCWSTR(pathPtr), bufferPtr, capacity, &id);
|
|
||||||
|
|
||||||
if (result != HRESULT.S_OK)
|
|
||||||
{
|
|
||||||
return string.Empty;
|
|
||||||
}
|
|
||||||
|
|
||||||
var resourcePathStr = MemoryMarshal.CreateReadOnlySpanFromNullTerminated(bufferPtr).ToString();
|
|
||||||
fixed (char* resourcePathPtr = resourcePathStr)
|
|
||||||
{
|
|
||||||
_ = PInvoke.ExpandEnvironmentStrings(new PCWSTR(resourcePathPtr), 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, buffer, capacity) != 0)
|
|
||||||
{
|
|
||||||
var lString = MemoryMarshal.CreateReadOnlySpanFromNullTerminated(bufferPtr).ToString();
|
|
||||||
return lString;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return string.Empty;
|
try
|
||||||
|
{
|
||||||
|
PWSTR displayName;
|
||||||
|
shellItem.GetDisplayName(Windows.Win32.UI.Shell.SIGDN.SIGDN_NORMALDISPLAY, &displayName);
|
||||||
|
string filename = displayName.ToString();
|
||||||
|
PInvoke.CoTaskMemFree(displayName);
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
return string.Empty;
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Marshal.ReleaseComObject(shellItem);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -7,14 +7,14 @@
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_leave_cmd_open">執行後不關閉命令提示字元視窗</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_leave_cmd_open">執行後不關閉命令提示字元視窗</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_always_run_as_administrator">一律以系統管理員身分執行</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_always_run_as_administrator">一律以系統管理員身分執行</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_use_windows_terminal">Use Windows Terminal</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_use_windows_terminal">Use Windows Terminal</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_run_as_different_user">Run as different user</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_run_as_different_user">以另一個使用者的身分執行</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_plugin_name">命令提示字元</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_plugin_name">命令提示字元</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_plugin_description">Allows to execute system commands from Flow Launcher</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_plugin_description">Allows to execute system commands from Flow Launcher</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_cmd_has_been_executed_times">此指令已執行了 {0} 次</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_cmd_has_been_executed_times">此指令已執行了 {0} 次</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_execute_through_shell">執行指令</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_execute_through_shell">執行指令</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_run_as_administrator">以系統管理員身分執行</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_run_as_administrator">以系統管理員身分執行</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_copy">複製命令</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_copy">複製命令</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_history">Only show number of most used commands:</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_history">僅顯示最常用指令的數量:</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_command_not_found">Command not found: {0}</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_command_not_found">Command not found: {0}</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_cmd_error_running_command">Error running the command: {0}</system:String>
|
<system:String x:Key="flowlauncher_plugin_cmd_error_running_command">Error running the command: {0}</system:String>
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||||
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.205">
|
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.269">
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
</PackageReference>
|
</PackageReference>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
|
<!-- Setting -->
|
||||||
|
<system:String x:Key="flowlauncher_plugin_sys_skip_confirm">Skip confirmation when Shutting down, Restarting, or Logging off</system:String>
|
||||||
|
|
||||||
<!-- Command List -->
|
<!-- Command List -->
|
||||||
<system:String x:Key="flowlauncher_plugin_sys_name">اسم البرنامج</system:String>
|
<system:String x:Key="flowlauncher_plugin_sys_name">اسم البرنامج</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_sys_desc">وصف</system:String>
|
<system:String x:Key="flowlauncher_plugin_sys_desc">وصف</system:String>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
|
<!-- Setting -->
|
||||||
|
<system:String x:Key="flowlauncher_plugin_sys_skip_confirm">Skip confirmation when Shutting down, Restarting, or Logging off</system:String>
|
||||||
|
|
||||||
<!-- Command List -->
|
<!-- Command List -->
|
||||||
<system:String x:Key="flowlauncher_plugin_sys_name">Jméno</system:String>
|
<system:String x:Key="flowlauncher_plugin_sys_name">Jméno</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_sys_desc">Popis</system:String>
|
<system:String x:Key="flowlauncher_plugin_sys_desc">Popis</system:String>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
|
<!-- Setting -->
|
||||||
|
<system:String x:Key="flowlauncher_plugin_sys_skip_confirm">Skip confirmation when Shutting down, Restarting, or Logging off</system:String>
|
||||||
|
|
||||||
<!-- Command List -->
|
<!-- Command List -->
|
||||||
<system:String x:Key="flowlauncher_plugin_sys_name">Name</system:String>
|
<system:String x:Key="flowlauncher_plugin_sys_name">Name</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_sys_desc">Description</system:String>
|
<system:String x:Key="flowlauncher_plugin_sys_desc">Description</system:String>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
<?xml version="1.0"?>
|
<?xml version="1.0"?>
|
||||||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||||
|
|
||||||
|
<!-- Setting -->
|
||||||
|
<system:String x:Key="flowlauncher_plugin_sys_skip_confirm">Skip confirmation when Shutting down, Restarting, or Logging off</system:String>
|
||||||
|
|
||||||
<!-- Command List -->
|
<!-- Command List -->
|
||||||
<system:String x:Key="flowlauncher_plugin_sys_name">Name</system:String>
|
<system:String x:Key="flowlauncher_plugin_sys_name">Name</system:String>
|
||||||
<system:String x:Key="flowlauncher_plugin_sys_desc">Beschreibung</system:String>
|
<system:String x:Key="flowlauncher_plugin_sys_desc">Beschreibung</system:String>
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue