Release 2.0.2 | Plugin 5.1.0 (#4046)

This commit is contained in:
Jeremy Wu 2025-10-14 21:49:29 +11:00 committed by GitHub
parent a05e09908c
commit f37d4c47cc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
167 changed files with 1487 additions and 873 deletions

View file

@ -85,5 +85,10 @@ QueryFullProcessImageName
EVENT_OBJECT_HIDE EVENT_OBJECT_HIDE
EVENT_SYSTEM_DIALOGEND EVENT_SYSTEM_DIALOGEND
DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS
WM_POWERBROADCAST WM_POWERBROADCAST
PBT_APMRESUMEAUTOMATIC PBT_APMRESUMEAUTOMATIC
PBT_APMRESUMESUSPEND
PowerRegisterSuspendResumeNotification
PowerUnregisterSuspendResumeNotification
DeviceNotifyCallbackRoutine

View file

@ -7,8 +7,8 @@ namespace Flow.Launcher.Infrastructure.UserSettings
{ {
public const string PortableFolderName = "UserData"; public const string PortableFolderName = "UserData";
public const string DeletionIndicatorFile = ".dead"; public const string DeletionIndicatorFile = ".dead";
public static string PortableDataPath = Path.Combine(Constant.ProgramDirectory, PortableFolderName); public static readonly string PortableDataPath = Path.Combine(Constant.ProgramDirectory, PortableFolderName);
public static string RoamingDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlowLauncher"); public static readonly string RoamingDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlowLauncher");
public static string DataDirectory() public static string DataDirectory()
{ {
if (PortableDataLocationInUse()) if (PortableDataLocationInUse())
@ -19,7 +19,8 @@ namespace Flow.Launcher.Infrastructure.UserSettings
public static bool PortableDataLocationInUse() public static bool PortableDataLocationInUse()
{ {
if (Directory.Exists(PortableDataPath) && !File.Exists(DeletionIndicatorFile)) if (Directory.Exists(PortableDataPath) &&
!File.Exists(Path.Combine(PortableDataPath, DeletionIndicatorFile)))
return true; return true;
return false; return false;

View file

@ -19,6 +19,7 @@ using Microsoft.Win32.SafeHandles;
using Windows.Win32; using Windows.Win32;
using Windows.Win32.Foundation; using Windows.Win32.Foundation;
using Windows.Win32.Graphics.Dwm; using Windows.Win32.Graphics.Dwm;
using Windows.Win32.System.Power;
using Windows.Win32.System.Threading; using Windows.Win32.System.Threading;
using Windows.Win32.UI.Input.KeyboardAndMouse; using Windows.Win32.UI.Input.KeyboardAndMouse;
using Windows.Win32.UI.Shell.Common; using Windows.Win32.UI.Shell.Common;
@ -338,9 +339,6 @@ namespace Flow.Launcher.Infrastructure
public const int SC_MAXIMIZE = (int)PInvoke.SC_MAXIMIZE; public const int SC_MAXIMIZE = (int)PInvoke.SC_MAXIMIZE;
public const int SC_MINIMIZE = (int)PInvoke.SC_MINIMIZE; public const int SC_MINIMIZE = (int)PInvoke.SC_MINIMIZE;
public const int WM_POWERBROADCAST = (int)PInvoke.WM_POWERBROADCAST;
public const int PBT_APMRESUMEAUTOMATIC = (int)PInvoke.PBT_APMRESUMEAUTOMATIC;
#endregion #endregion
#region Window Handle #region Window Handle
@ -918,5 +916,105 @@ namespace Flow.Launcher.Infrastructure
} }
#endregion #endregion
#region Sleep Mode Listener
private static Action _func;
private static PDEVICE_NOTIFY_CALLBACK_ROUTINE _callback = null;
private static DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS _recipient;
private static SafeHandle _recipientHandle;
private static HPOWERNOTIFY _handle = HPOWERNOTIFY.Null;
/// <summary>
/// Registers a listener for sleep mode events.
/// Inspired from: https://github.com/XKaguya/LenovoLegionToolkit
/// https://blog.csdn.net/mochounv/article/details/114668594
/// </summary>
/// <param name="func"></param>
/// <exception cref="Win32Exception"></exception>
public static unsafe void RegisterSleepModeListener(Action func)
{
if (_callback != null)
{
// Only register if not already registered
return;
}
_func = func;
_callback = new PDEVICE_NOTIFY_CALLBACK_ROUTINE(DeviceNotifyCallback);
_recipient = new DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS()
{
Callback = _callback,
Context = null
};
_recipientHandle = new StructSafeHandle<DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS>(_recipient);
_handle = PInvoke.PowerRegisterSuspendResumeNotification(
REGISTER_NOTIFICATION_FLAGS.DEVICE_NOTIFY_CALLBACK,
_recipientHandle,
out var handle) == WIN32_ERROR.ERROR_SUCCESS ?
new HPOWERNOTIFY(new IntPtr(handle)) :
HPOWERNOTIFY.Null;
if (_handle.IsNull)
{
throw new Win32Exception("Error registering for power notifications: " + Marshal.GetLastWin32Error());
}
}
/// <summary>
/// Unregisters the sleep mode listener.
/// </summary>
public static void UnregisterSleepModeListener()
{
if (!_handle.IsNull)
{
PInvoke.PowerUnregisterSuspendResumeNotification(_handle);
_handle = HPOWERNOTIFY.Null;
_func = null;
_callback = null;
_recipientHandle = null;
}
}
private static unsafe uint DeviceNotifyCallback(void* context, uint type, void* setting)
{
switch (type)
{
case PInvoke.PBT_APMRESUMEAUTOMATIC:
// Operation is resuming automatically from a low-power state.This message is sent every time the system resumes
_func?.Invoke();
break;
case PInvoke.PBT_APMRESUMESUSPEND:
// Operation is resuming from a low-power state.This message is sent after PBT_APMRESUMEAUTOMATIC if the resume is triggered by user input, such as pressing a key
_func?.Invoke();
break;
}
return 0;
}
private sealed class StructSafeHandle<T> : SafeHandle where T : struct
{
private readonly nint _ptr = nint.Zero;
public StructSafeHandle(T recipient) : base(nint.Zero, true)
{
var pRecipient = Marshal.AllocHGlobal(Marshal.SizeOf<T>());
Marshal.StructureToPtr(recipient, pRecipient, false);
SetHandle(pRecipient);
_ptr = pRecipient;
}
public override bool IsInvalid => handle == nint.Zero;
protected override bool ReleaseHandle()
{
Marshal.FreeHGlobal(_ptr);
return true;
}
}
#endregion
} }
} }

View file

@ -15,10 +15,10 @@
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<Version>5.0.0</Version> <Version>5.1.0</Version>
<PackageVersion>5.0.0</PackageVersion> <PackageVersion>5.1.0</PackageVersion>
<AssemblyVersion>5.0.0</AssemblyVersion> <AssemblyVersion>5.1.0</AssemblyVersion>
<FileVersion>5.0.0</FileVersion> <FileVersion>5.1.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>

View file

@ -150,6 +150,16 @@ namespace Flow.Launcher.Plugin.SharedCommands
return File.Exists(filePath); return File.Exists(filePath);
} }
/// <summary>
/// Checks if a file or directory exists
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static bool FileOrLocationExists(this string path)
{
return LocationExists(path) || FileExists(path);
}
/// <summary> /// <summary>
/// Open a directory window (using the OS's default handler, usually explorer) /// Open a directory window (using the OS's default handler, usually explorer)
/// </summary> /// </summary>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">الإصدار</system:String> <system:String x:Key="plugin_query_version">الإصدار</system:String>
<system:String x:Key="plugin_query_web">الموقع الإلكتروني</system:String> <system:String x:Key="plugin_query_web">الموقع الإلكتروني</system:String>
<system:String x:Key="plugin_uninstall">إلغاء التثبيت</system:String> <system:String x:Key="plugin_uninstall">إلغاء التثبيت</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">خطأ</system:String> <system:String x:Key="errorTitle">خطأ</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">يرجى الانتظار...</system:String> <system:String x:Key="pleaseWait">يرجى الانتظار...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Verze</system:String> <system:String x:Key="plugin_query_version">Verze</system:String>
<system:String x:Key="plugin_query_web">Webová stránka</system:String> <system:String x:Key="plugin_query_web">Webová stránka</system:String>
<system:String x:Key="plugin_uninstall">Odinstalovat</system:String> <system:String x:Key="plugin_uninstall">Odinstalovat</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@ Pokud před zkratku při zadávání přidáte znak &quot;@&quot;, bude odpovíd
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Chyba</system:String> <system:String x:Key="errorTitle">Chyba</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Počkejte prosím...</system:String> <system:String x:Key="pleaseWait">Počkejte prosím...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Version</system:String> <system:String x:Key="plugin_query_version">Version</system:String>
<system:String x:Key="plugin_query_web">Hjemmeside</system:String> <system:String x:Key="plugin_query_web">Hjemmeside</system:String>
<system:String x:Key="plugin_uninstall">Uninstall</system:String> <system:String x:Key="plugin_uninstall">Uninstall</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Please wait...</system:String> <system:String x:Key="pleaseWait">Please wait...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Version</system:String> <system:String x:Key="plugin_query_version">Version</system:String>
<system:String x:Key="plugin_query_web">Website</system:String> <system:String x:Key="plugin_query_web">Website</system:String>
<system:String x:Key="plugin_uninstall">Deinstallieren</system:String> <system:String x:Key="plugin_uninstall">Deinstallieren</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Plug-in-Einstellungen können nicht entfernt werden</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Plug-in-Einstellungen können nicht entfernt werden</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plug-ins: {0} - Plug-in-Einstellungsdateien können nicht entfernt werden, bitte entfernen Sie diese manuell</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plug-ins: {0} - Plug-in-Einstellungsdateien können nicht entfernt werden, bitte entfernen Sie diese manuell</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Plug-in-Cache kann nicht entfernt werden</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Plug-in-Cache kann nicht entfernt werden</system:String>
@ -595,8 +597,9 @@ Wenn Sie bei der Eingabe eines Shortcuts ein '@'-Präfix hinzufügen, stimmt die
Der spezifizierte Dateimanager konnte nicht gefunden werden. Bitte überprüfen Sie die Einstellung des benutzerdefinierten Dateimanagers unter Einstellungen &gt; Allgemein. Der spezifizierte Dateimanager konnte nicht gefunden werden. Bitte überprüfen Sie die Einstellung des benutzerdefinierten Dateimanagers unter Einstellungen &gt; Allgemein.
</system:String> </system:String>
<system:String x:Key="errorTitle">Fehler</system:String> <system:String x:Key="errorTitle">Fehler</system:String>
<system:String x:Key="folderOpenError">Beim Öffnen des Ordners ist ein Fehler aufgetreten. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">Beim Öffnen der URL im Browser ist ein Fehler aufgetreten. Bitte überprüfen Sie die Konfiguration Ihres Default-Webbrowsers im Abschnitt „Allgemein“ des Einstellungsfensters</system:String> <system:String x:Key="browserOpenError">Beim Öffnen der URL im Browser ist ein Fehler aufgetreten. Bitte überprüfen Sie die Konfiguration Ihres Default-Webbrowsers im Abschnitt „Allgemein“ des Einstellungsfensters</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Bitte warten Sie ...</system:String> <system:String x:Key="pleaseWait">Bitte warten Sie ...</system:String>

View file

@ -587,6 +587,7 @@
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Please wait...</system:String> <system:String x:Key="pleaseWait">Please wait...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Versión</system:String> <system:String x:Key="plugin_query_version">Versión</system:String>
<system:String x:Key="plugin_query_web">Sitio web</system:String> <system:String x:Key="plugin_query_web">Sitio web</system:String>
<system:String x:Key="plugin_uninstall">Uninstall</system:String> <system:String x:Key="plugin_uninstall">Uninstall</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Por favor espere...</system:String> <system:String x:Key="pleaseWait">Por favor espere...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Versión</system:String> <system:String x:Key="plugin_query_version">Versión</system:String>
<system:String x:Key="plugin_query_web">Sitio web</system:String> <system:String x:Key="plugin_query_web">Sitio web</system:String>
<system:String x:Key="plugin_uninstall">Desinstalar</system:String> <system:String x:Key="plugin_uninstall">Desinstalar</system:String>
<system:String x:Key="plugin_default_search_delay_time">Tiempo de retardo de búsqueda: predeterminado</system:String>
<system:String x:Key="plugin_search_delay_time">Tiempo de retardo de búsqueda: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fallo al eliminar la configuración del complemento</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fallo al eliminar la configuración del complemento</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Complementos: {0} - Fallo al eliminar los archivos de configuración del complemento, por favor elimínelos manualmente</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Complementos: {0} - Fallo al eliminar los archivos de configuración del complemento, por favor elimínelos manualmente</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fallo al eliminar la caché del complemento</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fallo al eliminar la caché del complemento</system:String>
@ -224,7 +226,7 @@
<system:String x:Key="failedToUninstallPluginTitle">Fallo al desinstalar {0}</system:String> <system:String x:Key="failedToUninstallPluginTitle">Fallo al desinstalar {0}</system:String>
<system:String x:Key="fileNotFoundMessage">No se puede encontrar plugin.json en el archivo zip extraído, o esta ruta {0} no existe</system:String> <system:String x:Key="fileNotFoundMessage">No se puede encontrar plugin.json en el archivo zip extraído, o esta ruta {0} no existe</system:String>
<system:String x:Key="pluginExistAlreadyMessage">Ya existe un complemento con el mismo ID y versión, o la versión es superior a la de este complemento descargado</system:String> <system:String x:Key="pluginExistAlreadyMessage">Ya existe un complemento con el mismo ID y versión, o la versión es superior a la de este complemento descargado</system:String>
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String> <system:String x:Key="errorCreatingSettingPanel">Error al crear el panel de configuración para el complemento {0}:{1}{2}</system:String>
<!-- Setting Plugin Store --> <!-- Setting Plugin Store -->
<system:String x:Key="pluginStore">Tienda complementos</system:String> <system:String x:Key="pluginStore">Tienda complementos</system:String>
@ -493,7 +495,7 @@
<system:String x:Key="fileManager_file_arg">Argumentos del archivo</system:String> <system:String x:Key="fileManager_file_arg">Argumentos del archivo</system:String>
<system:String x:Key="fileManagerPathNotFound">El administrador de archivos '{0}' no pudo ser localizado en '{1}'. ¿Desea continuar?</system:String> <system:String x:Key="fileManagerPathNotFound">El administrador de archivos '{0}' no pudo ser localizado en '{1}'. ¿Desea continuar?</system:String>
<system:String x:Key="fileManagerPathError">Error de ruta del administrador de archivos</system:String> <system:String x:Key="fileManagerPathError">Error de ruta del administrador de archivos</system:String>
<system:String x:Key="fileManagerExplorer">File Explorer</system:String> <system:String x:Key="fileManagerExplorer">Explorador de archivos</system:String>
<!-- DefaultBrowser Setting Dialog --> <!-- DefaultBrowser Setting Dialog -->
<system:String x:Key="defaultBrowserTitle">Navegador web predeterminado</system:String> <system:String x:Key="defaultBrowserTitle">Navegador web predeterminado</system:String>
@ -504,8 +506,8 @@
<system:String x:Key="defaultBrowser_newWindow">Nueva ventana</system:String> <system:String x:Key="defaultBrowser_newWindow">Nueva ventana</system:String>
<system:String x:Key="defaultBrowser_newTab">Nueva pestaña</system:String> <system:String x:Key="defaultBrowser_newTab">Nueva pestaña</system:String>
<system:String x:Key="defaultBrowser_parameter">Modo privado</system:String> <system:String x:Key="defaultBrowser_parameter">Modo privado</system:String>
<system:String x:Key="defaultBrowser_default">Default</system:String> <system:String x:Key="defaultBrowser_default">Predeterminado</system:String>
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String> <system:String x:Key="defaultBrowser_new_profile">Nuevo perfil</system:String>
<!-- Priority Setting Dialog --> <!-- Priority Setting Dialog -->
<system:String x:Key="changePriorityWindow">Cambiar la prioridad</system:String> <system:String x:Key="changePriorityWindow">Cambiar la prioridad</system:String>
@ -595,8 +597,9 @@ Si añade un prefijo &quot;@&quot; al introducir un acceso directo, éste coinci
No se ha encontrado el administrador de archivos especificado. Compruebe la configuración del Administrador de archivos personalizado en Configuración &gt; General. No se ha encontrado el administrador de archivos especificado. Compruebe la configuración del Administrador de archivos personalizado en Configuración &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">Se ha producido un error al abrir la carpeta. {0}</system:String> <system:String x:Key="folderOpenError">Se ha producido un error al abrir la carpeta.</system:String>
<system:String x:Key="browserOpenError">Se ha producido un error al abrir la URL en el navegador. Por favor, compruebe la configuración de su navegador web predeterminado en la sección General de la ventana de configuración</system:String> <system:String x:Key="browserOpenError">Se ha producido un error al abrir la URL en el navegador. Por favor, compruebe la configuración de su navegador web predeterminado en la sección General de la ventana de configuración</system:String>
<system:String x:Key="fileNotFoundError">No se encuentra el archivo o directorio: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Por favor espere...</system:String> <system:String x:Key="pleaseWait">Por favor espere...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Version</system:String> <system:String x:Key="plugin_query_version">Version</system:String>
<system:String x:Key="plugin_query_web">Site Web</system:String> <system:String x:Key="plugin_query_web">Site Web</system:String>
<system:String x:Key="plugin_uninstall">Désinstaller</system:String> <system:String x:Key="plugin_uninstall">Désinstaller</system:String>
<system:String x:Key="plugin_default_search_delay_time">Délai de recherche : par défaut</system:String>
<system:String x:Key="plugin_search_delay_time">Délai de recherche : {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Échec de la suppression des paramètres du plugin</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Échec de la suppression des paramètres du plugin</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins : {0} - Échec de la suppression des fichiers de configuration des plugins, veuillez les supprimer manuellement</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins : {0} - Échec de la suppression des fichiers de configuration des plugins, veuillez les supprimer manuellement</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Échec de la suppression du cache du plugin</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Échec de la suppression du cache du plugin</system:String>
@ -594,8 +596,9 @@ Si vous ajoutez un préfixe &quot;@&quot; lors de la saisie d'un raccourci, celu
Le gestionnaire de fichiers spécifié n'a pas été trouvé. Veuillez vérifier le paramètre Gestionnaire de fichiers personnalisé dans Paramètres &gt; Général. Le gestionnaire de fichiers spécifié n'a pas été trouvé. Veuillez vérifier le paramètre Gestionnaire de fichiers personnalisé dans Paramètres &gt; Général.
</system:String> </system:String>
<system:String x:Key="errorTitle">Erreur</system:String> <system:String x:Key="errorTitle">Erreur</system:String>
<system:String x:Key="folderOpenError">Une erreur s'est produite lors de l'ouverture du dossier. {0}</system:String> <system:String x:Key="folderOpenError">Une erreur s'est produite lors de l'ouverture du dossier.</system:String>
<system:String x:Key="browserOpenError">Une erreur s'est produite lors de l'ouverture de l'URL dans le navigateur. Veuillez vérifier la configuration de votre navigateur Web par défaut dans la section &quot;Général&quot; de la fenêtre des paramètres</system:String> <system:String x:Key="browserOpenError">Une erreur s'est produite lors de l'ouverture de l'URL dans le navigateur. Veuillez vérifier la configuration de votre navigateur Web par défaut dans la section &quot;Général&quot; de la fenêtre des paramètres</system:String>
<system:String x:Key="fileNotFoundError">Fichier ou répertoire introuvable : {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Veuillez patienter...</system:String> <system:String x:Key="pleaseWait">Veuillez patienter...</system:String>

View file

@ -213,6 +213,8 @@
<system:String x:Key="plugin_query_version">גרסה</system:String> <system:String x:Key="plugin_query_version">גרסה</system:String>
<system:String x:Key="plugin_query_web">אתר</system:String> <system:String x:Key="plugin_query_web">אתר</system:String>
<system:String x:Key="plugin_uninstall">הסר התקנה</system:String> <system:String x:Key="plugin_uninstall">הסר התקנה</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">נכשל בהסרת הגדרות התוסף</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">נכשל בהסרת הגדרות התוסף</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">תוספים: {0} - נכשל בהסרת קבצי הגדרות התוסף, יש להסירם ידנית</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">תוספים: {0} - נכשל בהסרת קבצי הגדרות התוסף, יש להסירם ידנית</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">נכשל בהסרת מטמון התוסף</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">נכשל בהסרת מטמון התוסף</system:String>
@ -594,8 +596,9 @@
לא ניתן היה למצוא את מנהל הקבצים שצוין. אנא בדוק את ההגדרה של מנהל קבצים מותאם אישית תחת הגדרות &gt; כללי. לא ניתן היה למצוא את מנהל הקבצים שצוין. אנא בדוק את ההגדרה של מנהל קבצים מותאם אישית תחת הגדרות &gt; כללי.
</system:String> </system:String>
<system:String x:Key="errorTitle">שגיאה</system:String> <system:String x:Key="errorTitle">שגיאה</system:String>
<system:String x:Key="folderOpenError">אירעה שגיאה בעת פתיחת התיקייה. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">אירעה שגיאה בעת פתיחת כתובת ה-URL בדפדפן. אנא בדוק את תצורת דפדפן האינטרנט המוגדר כברירת מחדל שלך במקטע הכללי של חלון ההגדרות</system:String> <system:String x:Key="browserOpenError">אירעה שגיאה בעת פתיחת כתובת ה-URL בדפדפן. אנא בדוק את תצורת דפדפן האינטרנט המוגדר כברירת מחדל שלך במקטע הכללי של חלון ההגדרות</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">אנא המתן...</system:String> <system:String x:Key="pleaseWait">אנא המתן...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Versione</system:String> <system:String x:Key="plugin_query_version">Versione</system:String>
<system:String x:Key="plugin_query_web">Sito Web</system:String> <system:String x:Key="plugin_query_web">Sito Web</system:String>
<system:String x:Key="plugin_uninstall">Disinstalla</system:String> <system:String x:Key="plugin_uninstall">Disinstalla</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@ Se si aggiunge un prefisso '@' mentre si inserisce una scorciatoia, corrisponde
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Attendere prego...</system:String> <system:String x:Key="pleaseWait">Attendere prego...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">バージョン</system:String> <system:String x:Key="plugin_query_version">バージョン</system:String>
<system:String x:Key="plugin_query_web">ウェブサイト</system:String> <system:String x:Key="plugin_query_web">ウェブサイト</system:String>
<system:String x:Key="plugin_uninstall">アンインストール</system:String> <system:String x:Key="plugin_uninstall">アンインストール</system:String>
<system:String x:Key="plugin_default_search_delay_time">検索の遅延時間: デフォルト</system:String>
<system:String x:Key="plugin_search_delay_time">検索の遅延時間: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">プラグイン設定の削除に失敗</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">プラグイン設定の削除に失敗</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">プラグイン: {0} - プラグイン設定ファイルの削除に失敗しました。手動で削除してください</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">プラグイン: {0} - プラグイン設定ファイルの削除に失敗しました。手動で削除してください</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">プラグインキャッシュの削除に失敗</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">プラグインキャッシュの削除に失敗</system:String>
@ -224,7 +226,7 @@
<system:String x:Key="failedToUninstallPluginTitle">{0} のアンインストールに失敗</system:String> <system:String x:Key="failedToUninstallPluginTitle">{0} のアンインストールに失敗</system:String>
<system:String x:Key="fileNotFoundMessage">展開されたzipファイルからplugin.jsonが見つからないか、このパス {0} が存在しません</system:String> <system:String x:Key="fileNotFoundMessage">展開されたzipファイルからplugin.jsonが見つからないか、このパス {0} が存在しません</system:String>
<system:String x:Key="pluginExistAlreadyMessage">同じIDとバージョンのプラグインがすでに存在するか、またはこのダウンロードしたプラグインよりもバージョンが大きいです</system:String> <system:String x:Key="pluginExistAlreadyMessage">同じIDとバージョンのプラグインがすでに存在するか、またはこのダウンロードしたプラグインよりもバージョンが大きいです</system:String>
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String> <system:String x:Key="errorCreatingSettingPanel">プラグイン {0}の設定パネル作成中にエラーが発生しました:{1}{2}</system:String>
<!-- Setting Plugin Store --> <!-- Setting Plugin Store -->
<system:String x:Key="pluginStore">プラグインストア</system:String> <system:String x:Key="pluginStore">プラグインストア</system:String>
@ -468,7 +470,7 @@
<system:String x:Key="userdatapathButton">フォルダーを開く</system:String> <system:String x:Key="userdatapathButton">フォルダーを開く</system:String>
<system:String x:Key="advanced">上級者向け機能</system:String> <system:String x:Key="advanced">上級者向け機能</system:String>
<system:String x:Key="logLevel">ログレベル</system:String> <system:String x:Key="logLevel">ログレベル</system:String>
<system:String x:Key="LogLevelNONE">Silent</system:String> <system:String x:Key="LogLevelNONE">サイレント</system:String>
<system:String x:Key="LogLevelERROR">エラー</system:String> <system:String x:Key="LogLevelERROR">エラー</system:String>
<system:String x:Key="LogLevelINFO">情報</system:String> <system:String x:Key="LogLevelINFO">情報</system:String>
<system:String x:Key="LogLevelDEBUG">デバッグ</system:String> <system:String x:Key="LogLevelDEBUG">デバッグ</system:String>
@ -493,7 +495,7 @@
<system:String x:Key="fileManager_file_arg">ファイル用の引数</system:String> <system:String x:Key="fileManager_file_arg">ファイル用の引数</system:String>
<system:String x:Key="fileManagerPathNotFound">ファイルマネージャー '{0}' は、'{1}' に見つかりませんでした。続行しますか?</system:String> <system:String x:Key="fileManagerPathNotFound">ファイルマネージャー '{0}' は、'{1}' に見つかりませんでした。続行しますか?</system:String>
<system:String x:Key="fileManagerPathError">ファイルマネージャのパスエラー</system:String> <system:String x:Key="fileManagerPathError">ファイルマネージャのパスエラー</system:String>
<system:String x:Key="fileManagerExplorer">File Explorer</system:String> <system:String x:Key="fileManagerExplorer">ファイルエクスプローラー</system:String>
<!-- DefaultBrowser Setting Dialog --> <!-- DefaultBrowser Setting Dialog -->
<system:String x:Key="defaultBrowserTitle">デフォルトのウェブブラウザー</system:String> <system:String x:Key="defaultBrowserTitle">デフォルトのウェブブラウザー</system:String>
@ -504,8 +506,8 @@
<system:String x:Key="defaultBrowser_newWindow">新しいウィンドウ</system:String> <system:String x:Key="defaultBrowser_newWindow">新しいウィンドウ</system:String>
<system:String x:Key="defaultBrowser_newTab">新しいタブ</system:String> <system:String x:Key="defaultBrowser_newTab">新しいタブ</system:String>
<system:String x:Key="defaultBrowser_parameter">プライベートモード</system:String> <system:String x:Key="defaultBrowser_parameter">プライベートモード</system:String>
<system:String x:Key="defaultBrowser_default">Default</system:String> <system:String x:Key="defaultBrowser_default">デフォルト</system:String>
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String> <system:String x:Key="defaultBrowser_new_profile">新しいプロファイル</system:String>
<!-- Priority Setting Dialog --> <!-- Priority Setting Dialog -->
<system:String x:Key="changePriorityWindow">優先度の変更</system:String> <system:String x:Key="changePriorityWindow">優先度の変更</system:String>
@ -595,8 +597,9 @@
指定されたファイルマネージャーが見つかりませんでした。設定 &gt; 一般でカスタムファイルマネージャの設定を確認してください。 指定されたファイルマネージャーが見つかりませんでした。設定 &gt; 一般でカスタムファイルマネージャの設定を確認してください。
</system:String> </system:String>
<system:String x:Key="errorTitle">エラー</system:String> <system:String x:Key="errorTitle">エラー</system:String>
<system:String x:Key="folderOpenError">フォルダを開く際にエラーが発生しました。 {0}</system:String> <system:String x:Key="folderOpenError">フォルダを開く際にエラーが発生しました。</system:String>
<system:String x:Key="browserOpenError">ブラウザでURLを開く際にエラーが発生しました。設定ウィンドウの一般セクションでデフォルトのウェブブラウザ設定を確認してください</system:String> <system:String x:Key="browserOpenError">ブラウザでURLを開く際にエラーが発生しました。設定ウィンドウの一般セクションでデフォルトのウェブブラウザ設定を確認してください</system:String>
<system:String x:Key="fileNotFoundError">ファイルまたはフォルダーが見つかりません: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">しばらくお待ちください…</system:String> <system:String x:Key="pleaseWait">しばらくお待ちください…</system:String>

View file

@ -205,6 +205,8 @@
<system:String x:Key="plugin_query_version">버전</system:String> <system:String x:Key="plugin_query_version">버전</system:String>
<system:String x:Key="plugin_query_web">웹사이트</system:String> <system:String x:Key="plugin_query_web">웹사이트</system:String>
<system:String x:Key="plugin_uninstall">제거</system:String> <system:String x:Key="plugin_uninstall">제거</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -586,8 +588,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">잠시 기다려주세요...</system:String> <system:String x:Key="pleaseWait">잠시 기다려주세요...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Versjon</system:String> <system:String x:Key="plugin_query_version">Versjon</system:String>
<system:String x:Key="plugin_query_web">Nettsted</system:String> <system:String x:Key="plugin_query_web">Nettsted</system:String>
<system:String x:Key="plugin_uninstall">Avinstaller</system:String> <system:String x:Key="plugin_uninstall">Avinstaller</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@ Hvis du legger til et @-prefiks mens du legger inn en snarvei, samsvarer det med
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Feil</system:String> <system:String x:Key="errorTitle">Feil</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Vennligst vent...</system:String> <system:String x:Key="pleaseWait">Vennligst vent...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Versie</system:String> <system:String x:Key="plugin_query_version">Versie</system:String>
<system:String x:Key="plugin_query_web">Website</system:String> <system:String x:Key="plugin_query_web">Website</system:String>
<system:String x:Key="plugin_uninstall">Verwijderen</system:String> <system:String x:Key="plugin_uninstall">Verwijderen</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@ Als u een '@' voorvoegsel toevoegt tijdens het invoeren van een snelkoppeling, m
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Please wait...</system:String> <system:String x:Key="pleaseWait">Please wait...</system:String>

View file

@ -8,33 +8,33 @@ Kliknij &quot;nie&quot;, jeśli jest już zainstalowany. Zostaniesz wtedy popros
</system:String> </system:String>
<system:String x:Key="runtimePluginChooseRuntimeExecutable">Wybierz plik wykonywalny {0}</system:String> <system:String x:Key="runtimePluginChooseRuntimeExecutable">Wybierz plik wykonywalny {0}</system:String>
<system:String x:Key="runtimeExecutableInvalidChooseDownload"> <system:String x:Key="runtimeExecutableInvalidChooseDownload">
Your selected {0} executable is invalid. Wybrany plik wykonywalny {0} jest nieprawidłowy.
{2}{2} {2}{2}
Click yes if you would like select the {0} executable again. Click no if you would like to download {1} Kliknij Tak, jeśli chcesz ponownie wybrać plik wykonywalny {0}. Kliknij Nie, jeśli chcesz pobrać {1}
</system:String> </system:String>
<system:String x:Key="runtimePluginUnableToSetExecutablePath">Nie można ustawić ścieżki do pliku wykonywalnego {0}. Spróbuj ponownie w ustawieniach Flow (przewiń na sam dół).</system:String> <system:String x:Key="runtimePluginUnableToSetExecutablePath">Nie można ustawić ścieżki do pliku wykonywalnego {0}. Spróbuj ponownie w ustawieniach Flow (przewiń na sam dół).</system:String>
<system:String x:Key="failedToInitializePluginsTitle">Nie udało się zainicjować wtyczek</system:String> <system:String x:Key="failedToInitializePluginsTitle">Nie udało się zainicjować wtyczek</system:String>
<system:String x:Key="failedToInitializePluginsMessage">Wtyczki: {0} nie udało się ich wczytać i zostaną wyłączone. Skontaktuj się z twórcą wtyczki, aby uzyskać pomoc</system:String> <system:String x:Key="failedToInitializePluginsMessage">Wtyczki: {0} nie udało się ich wczytać i zostaną wyłączone. Skontaktuj się z twórcą wtyczki, aby uzyskać pomoc</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 musi zostać ponownie uruchomiony, aby wyłączyć tryb przenośny. Spowoduje to usunięcie profilu przenośnego i zachowanie profilu mobilnego</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 musi zostać ponownie uruchomiony, aby włączyć tryb przenośny. Spowoduje to usunięcie profilu mobilnego i zachowanie profilu przenośnego</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 wykrył włączenie trybu przenośnego. Czy chcesz przenieść aplikację do innej lokalizacji?</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">Wykryto wyłączenie trybu przenośnego. Odpowiednie skróty oraz deinstalator zostały utworzone</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 wykrył zduplikowane dane użytkownika w dwóch lokalizacjach: {0} oraz {1}.{2}{2}Aby kontynuować, usuń dane znajdujące się w {1}. Nie wprowadzono żadnych zmian.</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">Nie można załadować następującej wtyczki z powodu błędu:</system:String>
<system:String x:Key="pluginsHaveErrored">The following plugins have errored and cannot be loaded:</system:String> <system:String x:Key="pluginsHaveErrored">Nie można załadować następujących wtyczek z powodu błędu:</system:String>
<system:String x:Key="referToLogs">Please refer to the logs for more information</system:String> <system:String x:Key="referToLogs">Aby uzyskać więcej informacji, zapoznaj się z logami</system:String>
<!-- Http --> <!-- Http -->
<system:String x:Key="pleaseTryAgain">Please try again</system:String> <system:String x:Key="pleaseTryAgain">Proszę spróbować ponownie</system:String>
<system:String x:Key="parseProxyFailed">Unable to parse Http Proxy</system:String> <system:String x:Key="parseProxyFailed">Nie można przetworzyć adresu serwera proxy 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">Instalacja środowiska TypeScript nie powiodła się. Spróbuj ponownie później.</system:String>
<system:String x:Key="failToInstallPythonEnv">Failed to install Python environment. Please try again later.</system:String> <system:String x:Key="failToInstallPythonEnv">Instalacja środowiska Python nie powiodła się. Spróbuj ponownie później.</system:String>
<!-- MainWindow --> <!-- MainWindow -->
<system:String x:Key="registerHotkeyFailed">Nie udało się zarejestrować skrótu klawiszowego „{0}”. Skrót może być używany przez inny program. Zmień skrót na inny lub zamknij program, który go używa.</system:String> <system:String x:Key="registerHotkeyFailed">Nie udało się zarejestrować skrótu klawiszowego „{0}”. Skrót może być używany przez inny program. Zmień skrót na inny lub zamknij program, który go używa.</system:String>
@ -111,7 +111,7 @@ Kliknij &quot;nie&quot;, jeśli jest już zainstalowany. Zostaniesz wtedy popros
<system:String x:Key="typingStartEn">Zawsze rozpoczynaj wpisywanie w trybie angielskim</system:String> <system:String x:Key="typingStartEn">Zawsze rozpoczynaj wpisywanie w trybie angielskim</system:String>
<system:String x:Key="typingStartEnTooltip">Tymczasowo zmień metodę wprowadzania na tryb angielski podczas aktywacji Flow.</system:String> <system:String x:Key="typingStartEnTooltip">Tymczasowo zmień metodę wprowadzania na tryb angielski podczas aktywacji Flow.</system:String>
<system:String x:Key="autoUpdates">Automatyczne aktualizacje</system:String> <system:String x:Key="autoUpdates">Automatyczne aktualizacje</system:String>
<system:String x:Key="autoUpdatesTooltip">Automatically check and update the app when available</system:String> <system:String x:Key="autoUpdatesTooltip">Automatycznie sprawdzaj i instaluj aktualizacje, gdy będą dostępne</system:String>
<system:String x:Key="select">Wybierz</system:String> <system:String x:Key="select">Wybierz</system:String>
<system:String x:Key="hideOnStartup">Uruchamiaj Flow Launcher zminimalizowany</system:String> <system:String x:Key="hideOnStartup">Uruchamiaj Flow Launcher zminimalizowany</system:String>
<system:String x:Key="hideOnStartupToolTip">Okno wyszukiwania Flow Launcher jest ukryte w zasobniku systemowym po uruchomieniu.</system:String> <system:String x:Key="hideOnStartupToolTip">Okno wyszukiwania Flow Launcher jest ukryte w zasobniku systemowym po uruchomieniu.</system:String>
@ -123,7 +123,7 @@ Kliknij &quot;nie&quot;, jeśli jest już zainstalowany. Zostaniesz wtedy popros
<system:String x:Key="SearchPrecisionLow">Niska</system:String> <system:String x:Key="SearchPrecisionLow">Niska</system:String>
<system:String x:Key="SearchPrecisionRegular">Standardowa</system:String> <system:String x:Key="SearchPrecisionRegular">Standardowa</system:String>
<system:String x:Key="ShouldUsePinyin">Szukaj z Pinyin</system:String> <system:String x:Key="ShouldUsePinyin">Szukaj z Pinyin</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">Pinyin to standardowy system zapisu języka chińskiego za pomocą alfabetu łacińskiego. Należy pamiętać, że włączenie tej opcji może znacznie zwiększyć zużycie pamięci podczas wyszukiwania.</system:String>
<system:String x:Key="ShouldUseDoublePinyin">Use Double Pinyin</system:String> <system:String x:Key="ShouldUseDoublePinyin">Use Double Pinyin</system:String>
<system:String x:Key="ShouldUseDoublePinyinToolTip">Use Double Pinyin instead of Full Pinyin to search.</system:String> <system:String x:Key="ShouldUseDoublePinyinToolTip">Use Double Pinyin instead of Full Pinyin to search.</system:String>
<system:String x:Key="DoublePinyinSchema">Double Pinyin Schema</system:String> <system:String x:Key="DoublePinyinSchema">Double Pinyin Schema</system:String>
@ -213,6 +213,8 @@ Kliknij &quot;nie&quot;, jeśli jest już zainstalowany. Zostaniesz wtedy popros
<system:String x:Key="plugin_query_version">Wersja</system:String> <system:String x:Key="plugin_query_version">Wersja</system:String>
<system:String x:Key="plugin_query_web">Strona</system:String> <system:String x:Key="plugin_query_web">Strona</system:String>
<system:String x:Key="plugin_uninstall">Odinstalowywanie</system:String> <system:String x:Key="plugin_uninstall">Odinstalowywanie</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Nie udało się usunąć ustawień wtyczki</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Nie udało się usunąć ustawień wtyczki</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Wtyczki: {0} nie udało się usunąć plików ustawień wtyczek, usuń je ręcznie</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Wtyczki: {0} nie udało się usunąć plików ustawień wtyczek, usuń je ręcznie</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Nie udało się usunąć cache wtyczki</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Nie udało się usunąć cache wtyczki</system:String>
@ -594,8 +596,9 @@ Jeśli dodasz prefiks '@' podczas wprowadzania skrótu, będzie on pasował do d
Nie można znaleźć określonego menedżera plików. Sprawdź ustawienie Niestandardowy menedżer plików w Ustawienia &gt; Ogólne. Nie można znaleźć określonego menedżera plików. Sprawdź ustawienie Niestandardowy menedżer plików w Ustawienia &gt; Ogólne.
</system:String> </system:String>
<system:String x:Key="errorTitle">Błąd</system:String> <system:String x:Key="errorTitle">Błąd</system:String>
<system:String x:Key="folderOpenError">Wystąpił błąd podczas otwierania folderu. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">Wystąpił błąd podczas otwierania adresu URL w przeglądarce. Sprawdź konfigurację domyślnej przeglądarki internetowej w sekcji Ogólne okna ustawień</system:String> <system:String x:Key="browserOpenError">Wystąpił błąd podczas otwierania adresu URL w przeglądarce. Sprawdź konfigurację domyślnej przeglądarki internetowej w sekcji Ogólne okna ustawień</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Proszę czekać...</system:String> <system:String x:Key="pleaseWait">Proszę czekać...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Versão</system:String> <system:String x:Key="plugin_query_version">Versão</system:String>
<system:String x:Key="plugin_query_web">Site</system:String> <system:String x:Key="plugin_query_web">Site</system:String>
<system:String x:Key="plugin_uninstall">Desinstalar</system:String> <system:String x:Key="plugin_uninstall">Desinstalar</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Por favor, aguarde...</system:String> <system:String x:Key="pleaseWait">Por favor, aguarde...</system:String>

View file

@ -213,6 +213,8 @@
<system:String x:Key="plugin_query_version">Versão</system:String> <system:String x:Key="plugin_query_version">Versão</system:String>
<system:String x:Key="plugin_query_web">Site</system:String> <system:String x:Key="plugin_query_web">Site</system:String>
<system:String x:Key="plugin_uninstall">Desinstalar</system:String> <system:String x:Key="plugin_uninstall">Desinstalar</system:String>
<system:String x:Key="plugin_default_search_delay_time">Tempo de atraso para pesquisa: padrão</system:String>
<system:String x:Key="plugin_search_delay_time">Tempo de atraso para pesquisa: {0} ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Falha ao remover as definições do plugin</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Falha ao remover as definições do plugin</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugin: {0} - Falha ao remover o ficheiro de definições do plugin. Experimente remover manualmente.</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugin: {0} - Falha ao remover o ficheiro de definições do plugin. Experimente remover manualmente.</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Falha ao limpar a cache do plugin</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Falha ao limpar a cache do plugin</system:String>
@ -593,8 +595,9 @@ Se adicionar o prefixo '@' durante a introdução do atalho, será utilizada qua
Não foi possível encontrar o gestor de ficheiros. Verifique a definição 'Gestor de ficheiros personalizado' em Definições -&gt; Geral. Não foi possível encontrar o gestor de ficheiros. Verifique a definição 'Gestor de ficheiros personalizado' em Definições -&gt; Geral.
</system:String> </system:String>
<system:String x:Key="errorTitle">Erro</system:String> <system:String x:Key="errorTitle">Erro</system:String>
<system:String x:Key="folderOpenError">Ocorreu um erro ao abrir a pasta: {0}</system:String> <system:String x:Key="folderOpenError">Ocorreu um erro ao abrir a pasta.</system:String>
<system:String x:Key="browserOpenError">Ocorreu um erro ao abrir o URL no navegador. Verifique a configuração Navegador web padrão na secção Geral das definições.</system:String> <system:String x:Key="browserOpenError">Ocorreu um erro ao abrir o URL no navegador. Verifique a configuração Navegador web padrão na secção Geral das definições.</system:String>
<system:String x:Key="fileNotFoundError">Ficheiro ou diretório não encontrado: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Por favor aguarde...</system:String> <system:String x:Key="pleaseWait">Por favor aguarde...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Версия</system:String> <system:String x:Key="plugin_query_version">Версия</system:String>
<system:String x:Key="plugin_query_web">Веб-сайт</system:String> <system:String x:Key="plugin_query_web">Веб-сайт</system:String>
<system:String x:Key="plugin_uninstall">Удалить</system:String> <system:String x:Key="plugin_uninstall">Удалить</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Ошибка</system:String> <system:String x:Key="errorTitle">Ошибка</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Пожалуйста, подождите...</system:String> <system:String x:Key="pleaseWait">Пожалуйста, подождите...</system:String>

View file

@ -215,6 +215,8 @@ Nevykonali sa žiadne zmeny.</system:String>
<system:String x:Key="plugin_query_version">Verzia</system:String> <system:String x:Key="plugin_query_version">Verzia</system:String>
<system:String x:Key="plugin_query_web">Webstránka</system:String> <system:String x:Key="plugin_query_web">Webstránka</system:String>
<system:String x:Key="plugin_uninstall">Odinštalovať</system:String> <system:String x:Key="plugin_uninstall">Odinštalovať</system:String>
<system:String x:Key="plugin_default_search_delay_time">Oneskorenie vyhľadávania: predvolené</system:String>
<system:String x:Key="plugin_search_delay_time">Oneskorenie vyhľadávania: {0} ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Nepodarilo sa odstrániť nastavenia pluginu</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Nepodarilo sa odstrániť nastavenia pluginu</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Pluginy: {0} Nepodarilo sa odstrániť súbory s nastaveniami pluginu, odstráňte ich manuálne</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Pluginy: {0} Nepodarilo sa odstrániť súbory s nastaveniami pluginu, odstráňte ich manuálne</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Nepodarilo sa odstrániť vyrovnávaciu pamäť pluginu</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Nepodarilo sa odstrániť vyrovnávaciu pamäť pluginu</system:String>
@ -596,8 +598,9 @@ Ak pri zadávaní skratky pred ňu pridáte &quot;@&quot;, bude sa zhodovať s
Zadaný správca súborov sa nenašiel. Skontrolujte nastavenie vlastného správcu súborov v Nastavenia &gt; Všeobecné. Zadaný správca súborov sa nenašiel. Skontrolujte nastavenie vlastného správcu súborov v Nastavenia &gt; Všeobecné.
</system:String> </system:String>
<system:String x:Key="errorTitle">Chyba</system:String> <system:String x:Key="errorTitle">Chyba</system:String>
<system:String x:Key="folderOpenError">Počas otvárania priečinka sa vyskytla chyba. {0}</system:String> <system:String x:Key="folderOpenError">Pri otváraní priečinka došlo k chybe.</system:String>
<system:String x:Key="browserOpenError">Pri otváraní adresy URL v prehliadači došlo k chybe. Skontrolujte konfiguráciu predvoleného webového prehliadača v nastaveniach Všeobecné</system:String> <system:String x:Key="browserOpenError">Pri otváraní adresy URL v prehliadači došlo k chybe. Skontrolujte konfiguráciu predvoleného webového prehliadača v nastaveniach Všeobecné</system:String>
<system:String x:Key="fileNotFoundError">Súbor alebo priečinok sa nenašiel: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Čakajte, prosím...</system:String> <system:String x:Key="pleaseWait">Čakajte, prosím...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Version</system:String> <system:String x:Key="plugin_query_version">Version</system:String>
<system:String x:Key="plugin_query_web">Website</system:String> <system:String x:Key="plugin_query_web">Website</system:String>
<system:String x:Key="plugin_uninstall">Uninstall</system:String> <system:String x:Key="plugin_uninstall">Uninstall</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Please wait...</system:String> <system:String x:Key="pleaseWait">Please wait...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Verzija</system:String> <system:String x:Key="plugin_query_version">Verzija</system:String>
<system:String x:Key="plugin_query_web">Website</system:String> <system:String x:Key="plugin_query_web">Website</system:String>
<system:String x:Key="plugin_uninstall">Uninstall</system:String> <system:String x:Key="plugin_uninstall">Uninstall</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Please wait...</system:String> <system:String x:Key="pleaseWait">Please wait...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Sürüm</system:String> <system:String x:Key="plugin_query_version">Sürüm</system:String>
<system:String x:Key="plugin_query_web">İnternet Sitesi</system:String> <system:String x:Key="plugin_query_web">İnternet Sitesi</system:String>
<system:String x:Key="plugin_uninstall">Kaldır</system:String> <system:String x:Key="plugin_uninstall">Kaldır</system:String>
<system:String x:Key="plugin_default_search_delay_time">Arama gecikme süresi: varsayılan</system:String>
<system:String x:Key="plugin_search_delay_time">Arama gecikme süresi: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Eklenti ayarları kaldırılamıyor</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Eklenti ayarları kaldırılamıyor</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Eklentiler: {0} - Ayar dosyaları kaldırılamadı, lütfen elle silin</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Eklentiler: {0} - Ayar dosyaları kaldırılamadı, lütfen elle silin</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Eklenti ön belleği kaldırılamıyor</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Eklenti ön belleği kaldırılamıyor</system:String>
@ -224,7 +226,7 @@
<system:String x:Key="failedToUninstallPluginTitle">{0} kaldırılamıyor</system:String> <system:String x:Key="failedToUninstallPluginTitle">{0} kaldırılamıyor</system:String>
<system:String x:Key="fileNotFoundMessage">plugin.json dosyası çıkarılan zip dosyasında bulunamadı veya {0} yolu mevcut değil</system:String> <system:String x:Key="fileNotFoundMessage">plugin.json dosyası çıkarılan zip dosyasında bulunamadı veya {0} yolu mevcut değil</system:String>
<system:String x:Key="pluginExistAlreadyMessage">Bu eklentiyle aynı ID ve sürüme sahip bir eklenti zaten var, ya da mevcut sürüm daha yüksek</system:String> <system:String x:Key="pluginExistAlreadyMessage">Bu eklentiyle aynı ID ve sürüme sahip bir eklenti zaten var, ya da mevcut sürüm daha yüksek</system:String>
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String> <system:String x:Key="errorCreatingSettingPanel">Eklenti {0} için ayar paneli oluşturulurken hata oluştu: {1}{2}</system:String>
<!-- Setting Plugin Store --> <!-- Setting Plugin Store -->
<system:String x:Key="pluginStore">Eklenti Mağazası</system:String> <system:String x:Key="pluginStore">Eklenti Mağazası</system:String>
@ -333,7 +335,7 @@
<system:String x:Key="PlaceholderTextTip">Yer tutucu metnini değiştirin. Boş bırakılırsa şu kullanılacak: {0}</system:String> <system:String x:Key="PlaceholderTextTip">Yer tutucu metnini değiştirin. Boş bırakılırsa şu kullanılacak: {0}</system:String>
<system:String x:Key="KeepMaxResults">Sabit Pencere Boyutu</system:String> <system:String x:Key="KeepMaxResults">Sabit Pencere Boyutu</system:String>
<system:String x:Key="KeepMaxResultsToolTip">Pencere boyutu sürüklenerek ayarlanamaz.</system:String> <system:String x:Key="KeepMaxResultsToolTip">Pencere boyutu sürüklenerek ayarlanamaz.</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">Always Preview (Her Zaman Önizleme) açık olduğundan, önizleme paneli belirli bir minimum yükseklik gerektirdiğinden, gösterilen maksimum sonuçlar etkili olmayabilir</system:String>
<!-- Setting Hotkey --> <!-- Setting Hotkey -->
<system:String x:Key="hotkey">Kısayol Tuşu</system:String> <system:String x:Key="hotkey">Kısayol Tuşu</system:String>
@ -493,7 +495,7 @@
<system:String x:Key="fileManager_file_arg">Dosya Açarken</system:String> <system:String x:Key="fileManager_file_arg">Dosya Açarken</system:String>
<system:String x:Key="fileManagerPathNotFound">'{0}' dosya yöneticisi '{1}' konumunda bulunamadı. Devam etmek ister misiniz?</system:String> <system:String x:Key="fileManagerPathNotFound">'{0}' dosya yöneticisi '{1}' konumunda bulunamadı. Devam etmek ister misiniz?</system:String>
<system:String x:Key="fileManagerPathError">Dosya Yöneticisi Yol Hatası</system:String> <system:String x:Key="fileManagerPathError">Dosya Yöneticisi Yol Hatası</system:String>
<system:String x:Key="fileManagerExplorer">File Explorer</system:String> <system:String x:Key="fileManagerExplorer">Dosya Gezgini</system:String>
<!-- DefaultBrowser Setting Dialog --> <!-- DefaultBrowser Setting Dialog -->
<system:String x:Key="defaultBrowserTitle">İnternet Tarayıcı Seçenekleri</system:String> <system:String x:Key="defaultBrowserTitle">İnternet Tarayıcı Seçenekleri</system:String>
@ -504,8 +506,8 @@
<system:String x:Key="defaultBrowser_newWindow">Yeni Pencere</system:String> <system:String x:Key="defaultBrowser_newWindow">Yeni Pencere</system:String>
<system:String x:Key="defaultBrowser_newTab">Yeni Sekme</system:String> <system:String x:Key="defaultBrowser_newTab">Yeni Sekme</system:String>
<system:String x:Key="defaultBrowser_parameter">Gizli Mod için Bağımsız Değişken</system:String> <system:String x:Key="defaultBrowser_parameter">Gizli Mod için Bağımsız Değişken</system:String>
<system:String x:Key="defaultBrowser_default">Default</system:String> <system:String x:Key="defaultBrowser_default">Varsayılan</system:String>
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String> <system:String x:Key="defaultBrowser_new_profile">Yeni Profil</system:String>
<!-- Priority Setting Dialog --> <!-- Priority Setting Dialog -->
<system:String x:Key="changePriorityWindow">Önceliği Ayarla</system:String> <system:String x:Key="changePriorityWindow">Önceliği Ayarla</system:String>
@ -593,8 +595,9 @@
Belirtilen dosya yöneticisi bulunamadı. Lütfen Ayarlar &gt; Genel bölümündeki Özel Dosya Yöneticisi ayarını kontrol edin. Belirtilen dosya yöneticisi bulunamadı. Lütfen Ayarlar &gt; Genel bölümündeki Özel Dosya Yöneticisi ayarını kontrol edin.
</system:String> </system:String>
<system:String x:Key="errorTitle">Hata</system:String> <system:String x:Key="errorTitle">Hata</system:String>
<system:String x:Key="folderOpenError">Klasör açılırken bir hata oluştu. {0}</system:String> <system:String x:Key="folderOpenError">Klasör açılırken bir hata oluştu.</system:String>
<system:String x:Key="browserOpenError">URL tarayıcıda açılırken bir hata oluştu. Lütfen ayarlar penceresindeki Genel bölümden Varsayılan Web Tarayıcısı ayarını kontrol edin</system:String> <system:String x:Key="browserOpenError">URL tarayıcıda açılırken bir hata oluştu. Lütfen ayarlar penceresindeki Genel bölümden Varsayılan Web Tarayıcısı ayarını kontrol edin</system:String>
<system:String x:Key="fileNotFoundError">Dosya veya dizin bulunamadı: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Lütfen bekleyin...</system:String> <system:String x:Key="pleaseWait">Lütfen bekleyin...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Версія</system:String> <system:String x:Key="plugin_query_version">Версія</system:String>
<system:String x:Key="plugin_query_web">Сайт</system:String> <system:String x:Key="plugin_query_web">Сайт</system:String>
<system:String x:Key="plugin_uninstall">Видалити</system:String> <system:String x:Key="plugin_uninstall">Видалити</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Не вдалося видалити налаштування плагіну</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Не вдалося видалити налаштування плагіну</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Плагіни: {0} — Не вдалося видалити файли налаштувань плагінів, видаліть їх вручну.</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Плагіни: {0} — Не вдалося видалити файли налаштувань плагінів, видаліть їх вручну.</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Не вдалося видалити кеш плагіну</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Не вдалося видалити кеш плагіну</system:String>
@ -595,8 +597,9 @@
Вказаний файловий менеджер не знайдено. Перевірте налаштування вашого файлового менеджера в розділі Налаштування &gt; Загальні. Вказаний файловий менеджер не знайдено. Перевірте налаштування вашого файлового менеджера в розділі Налаштування &gt; Загальні.
</system:String> </system:String>
<system:String x:Key="errorTitle">Помилка</system:String> <system:String x:Key="errorTitle">Помилка</system:String>
<system:String x:Key="folderOpenError">Під час відкриття теки сталася помилка. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">Під час відкриття URL-адреси в браузері сталася помилка. Перевірте налаштування типового веббраузера у розділі «Загальні» вікна налаштувань.</system:String> <system:String x:Key="browserOpenError">Під час відкриття URL-адреси в браузері сталася помилка. Перевірте налаштування типового веббраузера у розділі «Загальні» вікна налаштувань.</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Будь ласка, зачекайте...</system:String> <system:String x:Key="pleaseWait">Будь ласка, зачекайте...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">Phiên bản</system:String> <system:String x:Key="plugin_query_version">Phiên bản</system:String>
<system:String x:Key="plugin_query_web">Trang web</system:String> <system:String x:Key="plugin_query_web">Trang web</system:String>
<system:String x:Key="plugin_uninstall">Gỡ cài đặt</system:String> <system:String x:Key="plugin_uninstall">Gỡ cài đặt</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -599,8 +601,9 @@
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Lỗi</system:String> <system:String x:Key="errorTitle">Lỗi</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">Cảnh báo nhỏ...</system:String> <system:String x:Key="pleaseWait">Cảnh báo nhỏ...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">版本</system:String> <system:String x:Key="plugin_query_version">版本</system:String>
<system:String x:Key="plugin_query_web">官方网站</system:String> <system:String x:Key="plugin_query_web">官方网站</system:String>
<system:String x:Key="plugin_uninstall">卸载</system:String> <system:String x:Key="plugin_uninstall">卸载</system:String>
<system:String x:Key="plugin_default_search_delay_time">搜索延迟时间:默认</system:String>
<system:String x:Key="plugin_search_delay_time">搜索延迟时间:{0}毫秒</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">移除插件设置失败</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">移除插件设置失败</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">插件:{0} - 移除插件设置文件失败,请手动删除</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">插件:{0} - 移除插件设置文件失败,请手动删除</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">移除插件缓存失败</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">移除插件缓存失败</system:String>
@ -224,7 +226,7 @@
<system:String x:Key="failedToUninstallPluginTitle">卸载 {0} 失败</system:String> <system:String x:Key="failedToUninstallPluginTitle">卸载 {0} 失败</system:String>
<system:String x:Key="fileNotFoundMessage">无法从提取的zip文件中找到plugin.json或者此路径 {0} 不存在</system:String> <system:String x:Key="fileNotFoundMessage">无法从提取的zip文件中找到plugin.json或者此路径 {0} 不存在</system:String>
<system:String x:Key="pluginExistAlreadyMessage">已存在相同ID和版本的插件或者存在版本大于此下载的插件</system:String> <system:String x:Key="pluginExistAlreadyMessage">已存在相同ID和版本的插件或者存在版本大于此下载的插件</system:String>
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String> <system:String x:Key="errorCreatingSettingPanel">为插件 {0} 创建设置面板时出错:{1}{2}</system:String>
<!-- Setting Plugin Store --> <!-- Setting Plugin Store -->
<system:String x:Key="pluginStore">插件商店</system:String> <system:String x:Key="pluginStore">插件商店</system:String>
@ -595,8 +597,9 @@
找不到指定的文件管理器。请在“设置 &gt; 通用”下检查自定义文件管理器设置。 找不到指定的文件管理器。请在“设置 &gt; 通用”下检查自定义文件管理器设置。
</system:String> </system:String>
<system:String x:Key="errorTitle">错误</system:String> <system:String x:Key="errorTitle">错误</system:String>
<system:String x:Key="folderOpenError">打开文件夹时发生错误。{0}</system:String> <system:String x:Key="folderOpenError">打开文件夹时发生错误。</system:String>
<system:String x:Key="browserOpenError">打开浏览器中的 URL 时发生错误。请在设置窗口的常规部分检查您的默认网页浏览器配置</system:String> <system:String x:Key="browserOpenError">打开浏览器中的 URL 时发生错误。请在设置窗口的常规部分检查您的默认网页浏览器配置</system:String>
<system:String x:Key="fileNotFoundError">找不到文件或目录:{0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">请稍等...</system:String> <system:String x:Key="pleaseWait">请稍等...</system:String>

View file

@ -214,6 +214,8 @@
<system:String x:Key="plugin_query_version">版本</system:String> <system:String x:Key="plugin_query_version">版本</system:String>
<system:String x:Key="plugin_query_web">官方網站</system:String> <system:String x:Key="plugin_query_web">官方網站</system:String>
<system:String x:Key="plugin_uninstall">解除安裝</system:String> <system:String x:Key="plugin_uninstall">解除安裝</system:String>
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String> <system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String> <system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String> <system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
@ -595,8 +597,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General. The specified file manager could not be found. Please check the Custom File Manager setting under Settings &gt; General.
</system:String> </system:String>
<system:String x:Key="errorTitle">Error</system:String> <system:String x:Key="errorTitle">Error</system:String>
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String> <system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String> <system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
<!-- General Notice --> <!-- General Notice -->
<system:String x:Key="pleaseWait">請稍後...</system:String> <system:String x:Key="pleaseWait">請稍後...</system:String>

View file

@ -2,6 +2,7 @@ using System;
using System.ComponentModel; using System.ComponentModel;
using System.Linq; using System.Linq;
using System.Media; using System.Media;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Controls; using System.Windows.Controls;
@ -61,8 +62,9 @@ namespace Flow.Launcher
private bool _isArrowKeyPressed = false; private bool _isArrowKeyPressed = false;
// Window Sound Effects // Window Sound Effects
private MediaPlayer animationSoundWMP; private MediaPlayer _animationSoundWMP;
private SoundPlayer animationSoundWPF; private SoundPlayer _animationSoundWPF;
private readonly Lock _soundLock = new();
// Window WndProc // Window WndProc
private HwndSource _hwndSource; private HwndSource _hwndSource;
@ -93,6 +95,7 @@ namespace Flow.Launcher
UpdatePosition(); UpdatePosition();
InitSoundEffects(); InitSoundEffects();
RegisterSoundEffectsEvent();
DataObject.AddPastingHandler(QueryTextBox, QueryTextBox_OnPaste); DataObject.AddPastingHandler(QueryTextBox, QueryTextBox_OnPaste);
_viewModel.ActualApplicationThemeChanged += ViewModel_ActualApplicationThemeChanged; _viewModel.ActualApplicationThemeChanged += ViewModel_ActualApplicationThemeChanged;
} }
@ -666,16 +669,6 @@ namespace Flow.Launcher
handled = true; handled = true;
} }
break; break;
case Win32Helper.WM_POWERBROADCAST: // Handle power broadcast messages
// https://learn.microsoft.com/en-us/windows/win32/power/wm-powerbroadcast
if (wParam.ToInt32() == Win32Helper.PBT_APMRESUMEAUTOMATIC)
{
// Fix for sound not playing after sleep / hibernate
// https://stackoverflow.com/questions/64805186/mediaplayer-doesnt-play-after-computer-sleeps
InitSoundEffects();
}
handled = true;
break;
} }
return IntPtr.Zero; return IntPtr.Zero;
@ -687,31 +680,78 @@ namespace Flow.Launcher
private void InitSoundEffects() private void InitSoundEffects()
{ {
if (_settings.WMPInstalled) lock (_soundLock)
{ {
animationSoundWMP?.Close(); if (_settings.WMPInstalled)
animationSoundWMP = new MediaPlayer(); {
animationSoundWMP.Open(new Uri(AppContext.BaseDirectory + "Resources\\open.wav")); _animationSoundWMP?.Close();
} _animationSoundWMP = new MediaPlayer();
else _animationSoundWMP.Open(new Uri(AppContext.BaseDirectory + "Resources\\open.wav"));
{ }
animationSoundWPF?.Dispose(); else
animationSoundWPF = new SoundPlayer(AppContext.BaseDirectory + "Resources\\open.wav"); {
animationSoundWPF.Load(); _animationSoundWPF?.Dispose();
_animationSoundWPF = new SoundPlayer(AppContext.BaseDirectory + "Resources\\open.wav");
_animationSoundWPF.Load();
}
} }
} }
private void SoundPlay() private void SoundPlay()
{ {
if (_settings.WMPInstalled) lock (_soundLock)
{ {
animationSoundWMP.Position = TimeSpan.Zero; if (_settings.WMPInstalled)
animationSoundWMP.Volume = _settings.SoundVolume / 100.0; {
animationSoundWMP.Play(); _animationSoundWMP.Position = TimeSpan.Zero;
_animationSoundWMP.Volume = _settings.SoundVolume / 100.0;
_animationSoundWMP.Play();
}
else
{
_animationSoundWPF.Play();
}
} }
else }
private void RegisterSoundEffectsEvent()
{
// Fix for sound not playing after sleep / hibernate for both modern standby and legacy standby
// https://stackoverflow.com/questions/64805186/mediaplayer-doesnt-play-after-computer-sleeps
try
{ {
animationSoundWPF.Play(); Win32Helper.RegisterSleepModeListener(() =>
{
if (Application.Current == null)
{
return;
}
// We must run InitSoundEffects on UI thread because MediaPlayer is a DispatcherObject
if (!Application.Current.Dispatcher.CheckAccess())
{
Application.Current.Dispatcher.Invoke(InitSoundEffects);
return;
}
InitSoundEffects();
});
}
catch (Exception e)
{
App.API.LogException(ClassName, "Failed to register sound effect event", e);
}
}
private static void UnregisterSoundEffectsEvent()
{
try
{
Win32Helper.UnregisterSleepModeListener();
}
catch (Exception e)
{
App.API.LogException(ClassName, "Failed to unregister sound effect event", e);
} }
} }
@ -1436,9 +1476,10 @@ namespace Flow.Launcher
{ {
_hwndSource?.Dispose(); _hwndSource?.Dispose();
_notifyIcon?.Dispose(); _notifyIcon?.Dispose();
animationSoundWMP?.Close(); _animationSoundWMP?.Close();
animationSoundWPF?.Dispose(); _animationSoundWPF?.Dispose();
_viewModel.ActualApplicationThemeChanged -= ViewModel_ActualApplicationThemeChanged; _viewModel.ActualApplicationThemeChanged -= ViewModel_ActualApplicationThemeChanged;
UnregisterSoundEffectsEvent();
} }
_disposed = true; _disposed = true;

View file

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic; using System.Collections.Generic;
using System.Collections.Specialized; using System.Collections.Specialized;
@ -74,7 +74,6 @@ namespace Flow.Launcher
_mainVM.ChangeQueryText(query, requery); _mainVM.ChangeQueryText(query, requery);
} }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "VSTHRD100:Avoid async void methods", Justification = "<Pending>")]
public void RestartApp() public void RestartApp()
{ {
_mainVM.Hide(); _mainVM.Hide();
@ -179,7 +178,7 @@ namespace Flow.Launcher
Clipboard.SetFileDropList(paths); Clipboard.SetFileDropList(paths);
}); });
if (exception == null) if (exception == null)
{ {
if (showDefaultNotification) if (showDefaultNotification)
@ -218,7 +217,7 @@ namespace Flow.Launcher
{ {
LogException(nameof(PublicAPIInstance), "Failed to copy text to clipboard", exception); LogException(nameof(PublicAPIInstance), "Failed to copy text to clipboard", exception);
ShowMsgError(GetTranslation("failedToCopy")); ShowMsgError(GetTranslation("failedToCopy"));
} }
} }
} }
@ -327,7 +326,7 @@ namespace Flow.Launcher
((PluginJsonStorage<T>)_pluginJsonStorages[type]).Save(); ((PluginJsonStorage<T>)_pluginJsonStorages[type]).Save();
} }
public void OpenDirectory(string directoryPath, string fileNameOrFilePath = null) public void OpenDirectory(string directoryPath, string fileNameOrFilePath = null)
{ {
try try
@ -412,6 +411,12 @@ namespace Flow.Launcher
private void OpenUri(Uri uri, bool? inPrivate = null, bool forceBrowser = false) private void OpenUri(Uri uri, bool? inPrivate = null, bool forceBrowser = false)
{ {
if (uri.IsFile && !FilesFolders.FileOrLocationExists(uri.LocalPath))
{
ShowMsgError(GetTranslation("errorTitle"), string.Format(GetTranslation("fileNotFoundError"), uri.LocalPath));
return;
}
if (forceBrowser || uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps) if (forceBrowser || uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)
{ {
var browserInfo = _settings.CustomBrowser; var browserInfo = _settings.CustomBrowser;
@ -441,13 +446,19 @@ namespace Flow.Launcher
} }
else else
{ {
Process.Start(new ProcessStartInfo() try
{ {
FileName = uri.AbsoluteUri, Process.Start(new ProcessStartInfo()
UseShellExecute = true {
})?.Dispose(); FileName = uri.AbsoluteUri,
UseShellExecute = true
return; })?.Dispose();
}
catch (Exception e)
{
LogException(ClassName, $"Failed to open: {uri.AbsoluteUri}", e);
ShowMsgError(GetTranslation("errorTitle"), e.Message);
}
} }
} }
@ -481,7 +492,7 @@ namespace Flow.Launcher
OpenUri(appUri); OpenUri(appUri);
} }
public void ToggleGameMode() public void ToggleGameMode()
{ {
_mainVM.ToggleGameMode(); _mainVM.ToggleGameMode();
} }

View file

@ -123,7 +123,7 @@ public partial class SettingsPaneGeneralViewModel : BaseModel
} }
// This is only required to set at startup. When portable mode enabled/disabled a restart is always required // This is only required to set at startup. When portable mode enabled/disabled a restart is always required
private static bool _portableMode = DataLocation.PortableDataLocationInUse(); private static readonly bool _portableMode = DataLocation.PortableDataLocationInUse();
public bool PortableMode public bool PortableMode
{ {

View file

@ -91,9 +91,12 @@ public partial class SettingsPaneHotkeyViewModel : BaseModel
if (window.ShowDialog() is not true) return; if (window.ShowDialog() is not true) return;
var index = Settings.CustomPluginHotkeys.IndexOf(settingItem); var index = Settings.CustomPluginHotkeys.IndexOf(settingItem);
Settings.CustomPluginHotkeys[index] = new CustomPluginHotkey(window.Hotkey, window.ActionKeyword); if (index >= 0 && index < Settings.CustomPluginHotkeys.Count)
HotKeyMapper.RemoveHotkey(settingItem.Hotkey); // remove origin hotkey {
HotKeyMapper.SetCustomQueryHotkey(Settings.CustomPluginHotkeys[index]); // set new hotkey Settings.CustomPluginHotkeys[index] = new CustomPluginHotkey(window.Hotkey, window.ActionKeyword);
HotKeyMapper.RemoveHotkey(settingItem.Hotkey); // remove origin hotkey
HotKeyMapper.SetCustomQueryHotkey(Settings.CustomPluginHotkeys[index]); // set new hotkey
}
} }
[RelayCommand] [RelayCommand]
@ -154,7 +157,10 @@ public partial class SettingsPaneHotkeyViewModel : BaseModel
if (window.ShowDialog() is not true) return; if (window.ShowDialog() is not true) return;
var index = Settings.CustomShortcuts.IndexOf(settingItem); var index = Settings.CustomShortcuts.IndexOf(settingItem);
Settings.CustomShortcuts[index] = new CustomShortcutModel(window.Key, window.Value); if (index >= 0 && index < Settings.CustomShortcuts.Count)
{
Settings.CustomShortcuts[index] = new CustomShortcutModel(window.Key, window.Value);
}
} }
[RelayCommand] [RelayCommand]

View file

@ -104,10 +104,10 @@
<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.5" /> <PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.9" /> <PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.9" />
<PackageReference Include="Svg.Skia" Version="3.0.6" /> <PackageReference Include="Svg.Skia" Version="3.2.1" />
<PackageReference Include="SkiaSharp" Version="3.119.0" /> <PackageReference Include="SkiaSharp" Version="3.119.1" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View file

@ -7,10 +7,10 @@ namespace Flow.Launcher.Plugin.Calculator
{ {
[EnumLocalizeKey(nameof(Localize.flowlauncher_plugin_calculator_decimal_separator_use_system_locale))] [EnumLocalizeKey(nameof(Localize.flowlauncher_plugin_calculator_decimal_separator_use_system_locale))]
UseSystemLocale, UseSystemLocale,
[EnumLocalizeKey(nameof(Localize.flowlauncher_plugin_calculator_decimal_separator_dot))] [EnumLocalizeKey(nameof(Localize.flowlauncher_plugin_calculator_decimal_separator_dot))]
Dot, Dot,
[EnumLocalizeKey(nameof(Localize.flowlauncher_plugin_calculator_decimal_separator_comma))] [EnumLocalizeKey(nameof(Localize.flowlauncher_plugin_calculator_decimal_separator_comma))]
Comma Comma
} }

View file

@ -63,7 +63,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.5" /> <PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
<PackageReference Include="Mages" Version="3.0.0" /> <PackageReference Include="Mages" Version="3.0.0" />
</ItemGroup> </ItemGroup>

View file

@ -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">
<system:String x:Key="flowlauncher_plugin_calculator_plugin_name">Calculadora</system:String> <system:String x:Key="flowlauncher_plugin_calculator_plugin_name">Calculadora</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_plugin_description">Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'.</system:String> <system:String x:Key="flowlauncher_plugin_calculator_plugin_description">Realiza cálculos matemáticos, incluyendo valores hexadecimales y funciones avanzadas como 'min(1,2,3)', 'sqrt(123)' y 'cos(123)'.</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_not_a_number">No es un número (NaN)</system:String> <system:String x:Key="flowlauncher_plugin_calculator_not_a_number">No es un número (NaN)</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_expression_not_complete">Expresión incorrecta o incompleta (¿Ha olvidado algunos paréntesis?)</system:String> <system:String x:Key="flowlauncher_plugin_calculator_expression_not_complete">Expresión incorrecta o incompleta (¿Ha olvidado algunos paréntesis?)</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_copy_number_to_clipboard">Copiar este número al portapapeles</system:String> <system:String x:Key="flowlauncher_plugin_calculator_copy_number_to_clipboard">Copiar este número al portapapeles</system:String>
@ -13,5 +13,5 @@
<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_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">Show error message when calculation fails</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>

View file

@ -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">
<system:String x:Key="flowlauncher_plugin_calculator_plugin_name">電卓</system:String> <system:String x:Key="flowlauncher_plugin_calculator_plugin_name">電卓</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_plugin_description">Perform mathematical calculations, including hex values and advanced functions such as 'min(1,2,3)', 'sqrt(123)' and 'cos(123)'.</system:String> <system:String x:Key="flowlauncher_plugin_calculator_plugin_description">16進数の値や「min(1,2,3)」、「sqrt(123)」、「cos(123)」などの高度な関数を含む数学的な計算を実行します。</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_not_a_number">数値で表せません (NaN)</system:String> <system:String x:Key="flowlauncher_plugin_calculator_not_a_number">数値で表せません (NaN)</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_expression_not_complete">式が間違っているか不完全です(括弧を忘れていませんか?)</system:String> <system:String x:Key="flowlauncher_plugin_calculator_expression_not_complete">式が間違っているか不完全です(括弧を忘れていませんか?)</system:String>
<system:String x:Key="flowlauncher_plugin_calculator_copy_number_to_clipboard">この数字をクリップボードにコピーします</system:String> <system:String x:Key="flowlauncher_plugin_calculator_copy_number_to_clipboard">この数字をクリップボードにコピーします</system:String>
@ -13,5 +13,5 @@
<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_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">Show error message when calculation fails</system:String> <system:String x:Key="flowlauncher_plugin_calculator_show_error_message">計算に失敗したときにエラーメッセージを表示</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -5,9 +5,9 @@ using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Windows.Controls; using System.Windows.Controls;
using Mages.Core;
using Flow.Launcher.Plugin.Calculator.Views;
using Flow.Launcher.Plugin.Calculator.ViewModels; using Flow.Launcher.Plugin.Calculator.ViewModels;
using Flow.Launcher.Plugin.Calculator.Views;
using Mages.Core;
namespace Flow.Launcher.Plugin.Calculator namespace Flow.Launcher.Plugin.Calculator
{ {
@ -26,7 +26,7 @@ namespace Flow.Launcher.Plugin.Calculator
private const string IcoPath = "Images/calculator.png"; private const string IcoPath = "Images/calculator.png";
private static readonly List<Result> EmptyResults = []; private static readonly List<Result> EmptyResults = [];
internal static PluginInitContext Context { get; set; } = null!; internal static PluginInitContext Context { get; private set; } = null!;
private Settings _settings; private Settings _settings;
private SettingsViewModel _viewModel; private SettingsViewModel _viewModel;
@ -57,10 +57,10 @@ namespace Flow.Launcher.Plugin.Calculator
{ {
var search = query.Search; var search = query.Search;
bool isFunctionPresent = FunctionRegex.IsMatch(search); bool isFunctionPresent = FunctionRegex.IsMatch(search);
// Mages is case sensitive, so we need to convert all function names to lower case. // Mages is case sensitive, so we need to convert all function names to lower case.
search = FunctionRegex.Replace(search, m => m.Value.ToLowerInvariant()); search = FunctionRegex.Replace(search, m => m.Value.ToLowerInvariant());
var decimalSep = GetDecimalSeparator(); var decimalSep = GetDecimalSeparator();
var groupSep = GetGroupSeparator(decimalSep); var groupSep = GetGroupSeparator(decimalSep);
var expression = NumberRegex.Replace(search, m => NormalizeNumber(m.Value, isFunctionPresent, decimalSep, groupSep)); var expression = NumberRegex.Replace(search, m => NormalizeNumber(m.Value, isFunctionPresent, decimalSep, groupSep));
@ -292,7 +292,7 @@ namespace Flow.Launcher.Plugin.Calculator
{ {
processedStr = processedStr.Replace(decimalSep, "."); processedStr = processedStr.Replace(decimalSep, ".");
} }
return processedStr; return processedStr;
} }
else else
@ -310,7 +310,7 @@ namespace Flow.Launcher.Plugin.Calculator
return processedStr; return processedStr;
} }
} }
private static bool IsValidGrouping(string[] parts, int[] groupSizes) private static bool IsValidGrouping(string[] parts, int[] groupSizes)
{ {
if (parts.Length <= 1) return true; if (parts.Length <= 1) return true;
@ -326,7 +326,7 @@ namespace Flow.Launcher.Plugin.Calculator
var lastGroupSize = groupSizes.Last(); var lastGroupSize = groupSizes.Last();
var canRepeatLastGroup = lastGroupSize != 0; var canRepeatLastGroup = lastGroupSize != 0;
int groupIndex = 0; int groupIndex = 0;
for (int i = parts.Length - 1; i > 0; i--) for (int i = parts.Length - 1; i > 0; i--)
{ {
@ -335,7 +335,7 @@ namespace Flow.Launcher.Plugin.Calculator
{ {
expectedSize = groupSizes[groupIndex]; expectedSize = groupSizes[groupIndex];
} }
else if(canRepeatLastGroup) else if (canRepeatLastGroup)
{ {
expectedSize = lastGroupSize; expectedSize = lastGroupSize;
} }
@ -345,7 +345,7 @@ namespace Flow.Launcher.Plugin.Calculator
} }
if (parts[i].Length != expectedSize) return false; if (parts[i].Length != expectedSize) return false;
groupIndex++; groupIndex++;
} }

View file

@ -1,5 +1,4 @@
 namespace Flow.Launcher.Plugin.Calculator;
namespace Flow.Launcher.Plugin.Calculator;
public class Settings public class Settings
{ {

View file

@ -66,8 +66,8 @@ namespace Flow.Launcher.Plugin.Explorer
{ {
contextMenus.Add(new Result contextMenus.Add(new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_add_to_quickaccess_title"), Title = Localize.plugin_explorer_add_to_quickaccess_title(),
SubTitle = Context.API.GetTranslation("plugin_explorer_add_to_quickaccess_subtitle"), SubTitle = Localize.plugin_explorer_add_to_quickaccess_subtitle(),
Action = (context) => Action = (context) =>
{ {
Settings.QuickAccessLinks.Add(new AccessLink Settings.QuickAccessLinks.Add(new AccessLink
@ -77,16 +77,14 @@ namespace Flow.Launcher.Plugin.Explorer
Type = record.Type Type = record.Type
}); });
Context.API.ShowMsg(Context.API.GetTranslation("plugin_explorer_addfilefoldersuccess"), Context.API.ShowMsg(Localize.plugin_explorer_addfilefoldersuccess(),
Context.API.GetTranslation("plugin_explorer_addfilefoldersuccess_detail"), Localize.plugin_explorer_addfilefoldersuccess_detail(),
Constants.ExplorerIconImageFullPath); Constants.ExplorerIconImageFullPath);
return true; return true;
}, },
SubTitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_titletooltip"), SubTitleToolTip = Localize.plugin_explorer_contextmenu_titletooltip(),
TitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_titletooltip"), TitleToolTip = Localize.plugin_explorer_contextmenu_titletooltip(),
IcoPath = Constants.QuickAccessImagePath, IcoPath = Constants.QuickAccessImagePath,
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue718"), Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue718"),
}); });
@ -95,22 +93,20 @@ namespace Flow.Launcher.Plugin.Explorer
{ {
contextMenus.Add(new Result contextMenus.Add(new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_remove_from_quickaccess_title"), Title = Localize.plugin_explorer_remove_from_quickaccess_title(),
SubTitle = Context.API.GetTranslation("plugin_explorer_remove_from_quickaccess_subtitle"), SubTitle = Localize.plugin_explorer_remove_from_quickaccess_subtitle(),
Action = (context) => Action = (context) =>
{ {
Settings.QuickAccessLinks.Remove(Settings.QuickAccessLinks.FirstOrDefault(x => string.Equals(x.Path, record.FullPath, StringComparison.OrdinalIgnoreCase))); Settings.QuickAccessLinks.Remove(Settings.QuickAccessLinks.FirstOrDefault(x => string.Equals(x.Path, record.FullPath, StringComparison.OrdinalIgnoreCase)));
Context.API.ShowMsg(Context.API.GetTranslation("plugin_explorer_removefilefoldersuccess"), Context.API.ShowMsg(Localize.plugin_explorer_removefilefoldersuccess(),
Context.API.GetTranslation("plugin_explorer_removefilefoldersuccess_detail"), Localize.plugin_explorer_removefilefoldersuccess_detail(),
Constants.ExplorerIconImageFullPath); Constants.ExplorerIconImageFullPath);
return true; return true;
}, },
SubTitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_remove_titletooltip"), SubTitleToolTip = Localize.plugin_explorer_contextmenu_remove_titletooltip(),
TitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_remove_titletooltip"), TitleToolTip = Localize.plugin_explorer_contextmenu_remove_titletooltip(),
IcoPath = Constants.RemoveQuickAccessImagePath, IcoPath = Constants.RemoveQuickAccessImagePath,
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\uecc9") Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\uecc9")
}); });
@ -118,8 +114,8 @@ namespace Flow.Launcher.Plugin.Explorer
contextMenus.Add(new Result contextMenus.Add(new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_copypath"), Title = Localize.plugin_explorer_copypath(),
SubTitle = Context.API.GetTranslation("plugin_explorer_copypath_subtitle"), SubTitle = Localize.plugin_explorer_copypath_subtitle(),
Action = _ => Action = _ =>
{ {
try try
@ -130,7 +126,7 @@ namespace Flow.Launcher.Plugin.Explorer
catch (Exception e) catch (Exception e)
{ {
LogException("Fail to set text in clipboard", e); LogException("Fail to set text in clipboard", e);
Context.API.ShowMsgError(Context.API.GetTranslation("plugin_explorer_fail_to_set_text")); Context.API.ShowMsgError(Localize.plugin_explorer_fail_to_set_text());
return false; return false;
} }
}, },
@ -140,8 +136,8 @@ namespace Flow.Launcher.Plugin.Explorer
contextMenus.Add(new Result contextMenus.Add(new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_copyname"), Title = Localize.plugin_explorer_copyname(),
SubTitle = Context.API.GetTranslation("plugin_explorer_copyname_subtitle"), SubTitle = Localize.plugin_explorer_copyname_subtitle(),
Action = _ => Action = _ =>
{ {
try try
@ -152,7 +148,7 @@ namespace Flow.Launcher.Plugin.Explorer
catch (Exception e) catch (Exception e)
{ {
LogException("Fail to set text in clipboard", e); LogException("Fail to set text in clipboard", e);
Context.API.ShowMsgError(Context.API.GetTranslation("plugin_explorer_fail_to_set_text")); Context.API.ShowMsgError(Localize.plugin_explorer_fail_to_set_text());
return false; return false;
} }
}, },
@ -162,8 +158,8 @@ namespace Flow.Launcher.Plugin.Explorer
contextMenus.Add(new Result contextMenus.Add(new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_copyfilefolder"), Title = Localize.plugin_explorer_copyfilefolder(),
SubTitle = isFile ? Context.API.GetTranslation("plugin_explorer_copyfile_subtitle") : Context.API.GetTranslation("plugin_explorer_copyfolder_subtitle"), SubTitle = isFile ? Localize.plugin_explorer_copyfile_subtitle(): Localize.plugin_explorer_copyfolder_subtitle(),
Action = _ => Action = _ =>
{ {
try try
@ -174,28 +170,26 @@ namespace Flow.Launcher.Plugin.Explorer
catch (Exception e) catch (Exception e)
{ {
LogException($"Fail to set file/folder in clipboard", e); LogException($"Fail to set file/folder in clipboard", e);
Context.API.ShowMsgError(Context.API.GetTranslation("plugin_explorer_fail_to_set_files")); Context.API.ShowMsgError(Localize.plugin_explorer_fail_to_set_files());
return false; return false;
} }
}, },
IcoPath = icoPath, IcoPath = icoPath,
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\uf12b") Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\uf12b")
}); });
if (record.Type is ResultType.File or ResultType.Folder) if (record.Type is ResultType.File or ResultType.Folder)
contextMenus.Add(new Result contextMenus.Add(new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_deletefilefolder"), Title = Localize.plugin_explorer_deletefilefolder(),
SubTitle = isFile ? Context.API.GetTranslation("plugin_explorer_deletefile_subtitle") : Context.API.GetTranslation("plugin_explorer_deletefolder_subtitle"), SubTitle = isFile ? Localize.plugin_explorer_deletefile_subtitle(): Localize.plugin_explorer_deletefolder_subtitle(),
Action = (context) => Action = (context) =>
{ {
try try
{ {
if (Context.API.ShowMsgBox( if (Context.API.ShowMsgBox(
string.Format(Context.API.GetTranslation("plugin_explorer_delete_folder_link"), record.FullPath), Localize.plugin_explorer_delete_folder_link(record.FullPath),
Context.API.GetTranslation("plugin_explorer_deletefilefolder"), Localize.plugin_explorer_deletefilefolder(),
MessageBoxButton.OKCancel, MessageBoxButton.OKCancel,
MessageBoxImage.Warning) MessageBoxImage.Warning)
== MessageBoxResult.Cancel) == MessageBoxResult.Cancel)
@ -208,15 +202,15 @@ namespace Flow.Launcher.Plugin.Explorer
_ = Task.Run(() => _ = Task.Run(() =>
{ {
Context.API.ShowMsg(Context.API.GetTranslation("plugin_explorer_deletefilefoldersuccess"), Context.API.ShowMsg(Localize.plugin_explorer_deletefilefoldersuccess(),
string.Format(Context.API.GetTranslation("plugin_explorer_deletefilefoldersuccess_detail"), record.FullPath), Localize.plugin_explorer_deletefilefoldersuccess_detail(record.FullPath),
Constants.ExplorerIconImageFullPath); Constants.ExplorerIconImageFullPath);
}); });
} }
catch (Exception e) catch (Exception e)
{ {
LogException($"Fail to delete {record.FullPath}", e); LogException($"Fail to delete {record.FullPath}", e);
Context.API.ShowMsgError(string.Format(Context.API.GetTranslation("plugin_explorer_fail_to_delete"), record.FullPath)); Context.API.ShowMsgError(Localize.plugin_explorer_fail_to_delete(record.FullPath));
return false; return false;
} }
@ -230,7 +224,7 @@ namespace Flow.Launcher.Plugin.Explorer
{ {
contextMenus.Add(new Result() contextMenus.Add(new Result()
{ {
Title = Context.API.GetTranslation("plugin_explorer_show_contextmenu_title"), Title = Localize.plugin_explorer_show_contextmenu_title(),
IcoPath = Constants.ShowContextMenuImagePath, IcoPath = Constants.ShowContextMenuImagePath,
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue700"), Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue700"),
Action = _ => Action = _ =>
@ -248,8 +242,8 @@ namespace Flow.Launcher.Plugin.Explorer
if (record.Type == ResultType.File && CanRunAsDifferentUser(record.FullPath)) if (record.Type == ResultType.File && CanRunAsDifferentUser(record.FullPath))
contextMenus.Add(new Result contextMenus.Add(new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_runasdifferentuser"), Title = Localize.plugin_explorer_runasdifferentuser(),
SubTitle = Context.API.GetTranslation("plugin_explorer_runasdifferentuser_subtitle"), SubTitle = Localize.plugin_explorer_runasdifferentuser_subtitle(),
Action = (context) => Action = (context) =>
{ {
try try
@ -259,8 +253,8 @@ namespace Flow.Launcher.Plugin.Explorer
catch (FileNotFoundException e) catch (FileNotFoundException e)
{ {
Context.API.ShowMsgError( Context.API.ShowMsgError(
Context.API.GetTranslation("plugin_explorer_plugin_name"), Localize.plugin_explorer_plugin_name(),
string.Format(Context.API.GetTranslation("plugin_explorer_file_not_found"), e.Message)); Localize.plugin_explorer_file_not_found(e.Message));
return false; return false;
} }
@ -317,8 +311,8 @@ namespace Flow.Launcher.Plugin.Explorer
{ {
return new Result return new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_opencontainingfolder"), Title = Localize.plugin_explorer_opencontainingfolder(),
SubTitle = Context.API.GetTranslation("plugin_explorer_opencontainingfolder_subtitle"), SubTitle = Localize.plugin_explorer_opencontainingfolder_subtitle(),
Action = _ => Action = _ =>
{ {
try try
@ -328,7 +322,7 @@ namespace Flow.Launcher.Plugin.Explorer
catch (Exception e) catch (Exception e)
{ {
LogException($"Fail to open file at {record.FullPath}", e); LogException($"Fail to open file at {record.FullPath}", e);
Context.API.ShowMsgError(string.Format(Context.API.GetTranslation("plugin_explorer_fail_to_open"), record.FullPath)); Context.API.ShowMsgError(Localize.plugin_explorer_fail_to_open(record.FullPath));
return false; return false;
} }
@ -339,11 +333,9 @@ namespace Flow.Launcher.Plugin.Explorer
}; };
} }
private Result CreateOpenWithEditorResult(SearchResult record, string editorPath) private Result CreateOpenWithEditorResult(SearchResult record, string editorPath)
{ {
var name = $"{Context.API.GetTranslation("plugin_explorer_openwitheditor")} {Path.GetFileNameWithoutExtension(editorPath)}"; var name = $"{Localize.plugin_explorer_openwitheditor()} {Path.GetFileNameWithoutExtension(editorPath)}";
return new Result return new Result
{ {
@ -361,8 +353,7 @@ namespace Flow.Launcher.Plugin.Explorer
} }
catch (Exception e) catch (Exception e)
{ {
var raw_message = Context.API.GetTranslation("plugin_explorer_openwitheditor_error"); var message = Localize.plugin_explorer_openwitheditor_error(record.FullPath, Path.GetFileNameWithoutExtension(editorPath), editorPath);
var message = string.Format(raw_message, record.FullPath, Path.GetFileNameWithoutExtension(editorPath), editorPath);
LogException(message, e); LogException(message, e);
Context.API.ShowMsgError(message); Context.API.ShowMsgError(message);
return false; return false;
@ -377,7 +368,7 @@ namespace Flow.Launcher.Plugin.Explorer
{ {
string shellPath = Settings.ShellPath; string shellPath = Settings.ShellPath;
var name = $"{Context.API.GetTranslation("plugin_explorer_openwithshell")} {Path.GetFileNameWithoutExtension(shellPath)}"; var name = $"{Localize.plugin_explorer_openwithshell()} {Path.GetFileNameWithoutExtension(shellPath)}";
return new Result return new Result
{ {
@ -394,8 +385,7 @@ namespace Flow.Launcher.Plugin.Explorer
} }
catch (Exception e) catch (Exception e)
{ {
var raw_message = Context.API.GetTranslation("plugin_explorer_openwithshell_error"); var message = Localize.plugin_explorer_openwithshell_error(record.FullPath, Path.GetFileNameWithoutExtension(shellPath), shellPath);
var message = string.Format(raw_message, record.FullPath, Path.GetFileNameWithoutExtension(shellPath), shellPath);
LogException(message, e); LogException(message, e);
Context.API.ShowMsgError(message); Context.API.ShowMsgError(message);
return false; return false;
@ -410,8 +400,8 @@ namespace Flow.Launcher.Plugin.Explorer
{ {
return new Result return new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_excludefromindexsearch"), Title = Localize.plugin_explorer_excludefromindexsearch(),
SubTitle = Context.API.GetTranslation("plugin_explorer_path") + " " + record.FullPath, SubTitle = Localize.plugin_explorer_path()+ " " + record.FullPath,
Action = c_ => Action = c_ =>
{ {
if (!Settings.IndexSearchExcludedSubdirectoryPaths.Any(x => string.Equals(x.Path, record.FullPath, StringComparison.OrdinalIgnoreCase))) if (!Settings.IndexSearchExcludedSubdirectoryPaths.Any(x => string.Equals(x.Path, record.FullPath, StringComparison.OrdinalIgnoreCase)))
@ -422,8 +412,8 @@ namespace Flow.Launcher.Plugin.Explorer
_ = Task.Run(() => _ = Task.Run(() =>
{ {
Context.API.ShowMsg(Context.API.GetTranslation("plugin_explorer_excludedfromindexsearch_msg"), Context.API.ShowMsg(Localize.plugin_explorer_excludedfromindexsearch_msg(),
Context.API.GetTranslation("plugin_explorer_path") + Localize.plugin_explorer_path()+
" " + record.FullPath, Constants.ExplorerIconImageFullPath); " " + record.FullPath, Constants.ExplorerIconImageFullPath);
// so the new path can be persisted to storage and not wait till next ViewModel save. // so the new path can be persisted to storage and not wait till next ViewModel save.
@ -441,8 +431,8 @@ namespace Flow.Launcher.Plugin.Explorer
{ {
return new Result return new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_openindexingoptions"), Title = Localize.plugin_explorer_openindexingoptions(),
SubTitle = Context.API.GetTranslation("plugin_explorer_openindexingoptions_subtitle"), SubTitle = Localize.plugin_explorer_openindexingoptions_subtitle(),
Action = _ => Action = _ =>
{ {
try try
@ -459,7 +449,7 @@ namespace Flow.Launcher.Plugin.Explorer
} }
catch (Exception e) catch (Exception e)
{ {
var message = Context.API.GetTranslation("plugin_explorer_openindexingoptions_errormsg"); var message = Localize.plugin_explorer_openindexingoptions_errormsg();
LogException(message, e); LogException(message, e);
Context.API.ShowMsgError(message); Context.API.ShowMsgError(message);
return false; return false;
@ -470,12 +460,12 @@ namespace Flow.Launcher.Plugin.Explorer
}; };
} }
private Result CreateOpenWithMenu(SearchResult record) private static Result CreateOpenWithMenu(SearchResult record)
{ {
return new Result return new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_openwith"), Title = Localize.plugin_explorer_openwith(),
SubTitle = Context.API.GetTranslation("plugin_explorer_openwith_subtitle"), SubTitle = Localize.plugin_explorer_openwith_subtitle(),
Action = _ => Action = _ =>
{ {
Process.Start("rundll32.exe", $"{Path.Combine(Environment.SystemDirectory, "shell32.dll")},OpenAs_RunDLL {record.FullPath}"); Process.Start("rundll32.exe", $"{Path.Combine(Environment.SystemDirectory, "shell32.dll")},OpenAs_RunDLL {record.FullPath}");

View file

@ -48,7 +48,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" /> <PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageReference Include="Droplex" Version="1.7.0" /> <PackageReference Include="Droplex" Version="1.7.0" />
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.5" /> <PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
<PackageReference Include="System.Data.OleDb" Version="9.0.9" /> <PackageReference Include="System.Data.OleDb" Version="9.0.9" />
<PackageReference Include="System.Linq.Async" Version="6.0.3" /> <PackageReference Include="System.Linq.Async" Version="6.0.3" />
<PackageReference Include="tlbimp-Microsoft.Search.Interop" Version="1.0.0" /> <PackageReference Include="tlbimp-Microsoft.Search.Interop" Version="1.0.0" />

View file

@ -24,6 +24,7 @@
<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>
<system:String x:Key="plugin_explorer_new_action_keyword_assigned">This new action keyword is already assigned to another plugin, please choose a different one</system:String>
<!-- Controls --> <!-- Controls -->
<system:String x:Key="plugin_explorer_delete">Delete</system:String> <system:String x:Key="plugin_explorer_delete">Delete</system:String>

View file

@ -22,7 +22,7 @@
<system:String x:Key="plugin_explorer_directoryinfosearch_error">Se ha producido un error durante la búsqueda: {0}</system:String> <system:String x:Key="plugin_explorer_directoryinfosearch_error">Se ha producido un error durante la búsqueda: {0}</system:String>
<system:String x:Key="plugin_explorer_opendir_error">No se ha podido abrir la carpeta</system:String> <system:String x:Key="plugin_explorer_opendir_error">No se ha podido abrir la carpeta</system:String>
<system:String x:Key="plugin_explorer_openfile_error">No se ha podido abrir el archivo</system:String> <system:String x:Key="plugin_explorer_openfile_error">No se ha podido abrir el archivo</system:String>
<system:String x:Key="plugin_explorer_new_action_keyword_assigned">This new action keyword is already assigned to another plugin, please choose a different one</system:String> <system:String x:Key="plugin_explorer_new_action_keyword_assigned">Esta nueva palabra clave de acción ya está asignada a otro complemento, por favor elija otra diferente</system:String>
<!-- Controls --> <!-- Controls -->
<system:String x:Key="plugin_explorer_delete">Eliminar</system:String> <system:String x:Key="plugin_explorer_delete">Eliminar</system:String>

View file

@ -22,7 +22,7 @@
<system:String x:Key="plugin_explorer_directoryinfosearch_error">Une erreur s'est produite pendant la recherche : {0}</system:String> <system:String x:Key="plugin_explorer_directoryinfosearch_error">Une erreur s'est produite pendant la recherche : {0}</system:String>
<system:String x:Key="plugin_explorer_opendir_error">Impossible d'ouvrir le dossier</system:String> <system:String x:Key="plugin_explorer_opendir_error">Impossible d'ouvrir le dossier</system:String>
<system:String x:Key="plugin_explorer_openfile_error">Impossible d'ouvrir le fichier</system:String> <system:String x:Key="plugin_explorer_openfile_error">Impossible d'ouvrir le fichier</system:String>
<system:String x:Key="plugin_explorer_new_action_keyword_assigned">This new action keyword is already assigned to another plugin, please choose a different one</system:String> <system:String x:Key="plugin_explorer_new_action_keyword_assigned">Ce nouveau mot-clé d'action est déjà assigné à un autre plugin, veuillez en choisir un autre</system:String>
<!-- Controls --> <!-- Controls -->
<system:String x:Key="plugin_explorer_delete">Supprimer</system:String> <system:String x:Key="plugin_explorer_delete">Supprimer</system:String>

View file

@ -6,7 +6,7 @@
<system:String x:Key="plugin_explorer_quick_access_link_no_folder_selected">Lütfen bir klasör yolu seçin.</system:String> <system:String x:Key="plugin_explorer_quick_access_link_no_folder_selected">Lütfen bir klasör yolu seçin.</system:String>
<system:String x:Key="plugin_explorer_quick_access_link_path_already_exists">Lütfen farklı bir isim veya klasör yolu seçin.</system:String> <system:String x:Key="plugin_explorer_quick_access_link_path_already_exists">Lütfen farklı bir isim veya klasör yolu seçin.</system:String>
<system:String x:Key="plugin_explorer_delete_quick_access_link">Bu hızlı erişim bağlantısını silmek istediğinizden emin misiniz?</system:String> <system:String x:Key="plugin_explorer_delete_quick_access_link">Bu hızlı erişim bağlantısını silmek istediğinizden emin misiniz?</system:String>
<system:String x:Key="plugin_explorer_delete_index_search_excluded_path">Are you sure you want to delete this index search excluded path?</system:String> <system:String x:Key="plugin_explorer_delete_index_search_excluded_path">Bu dizin arama hariç tutulan yolu silmek istediğinizden emin misiniz?</system:String>
<system:String x:Key="plugin_explorer_select_folder_link_warning">Lütfen bir klasör bağlantısı seçin</system:String> <system:String x:Key="plugin_explorer_select_folder_link_warning">Lütfen bir klasör bağlantısı seçin</system:String>
<system:String x:Key="plugin_explorer_delete_folder_link">{0} bağlantısını silmek istediğinize emin misiniz?</system:String> <system:String x:Key="plugin_explorer_delete_folder_link">{0} bağlantısını silmek istediğinize emin misiniz?</system:String>
<system:String x:Key="plugin_explorer_deletefileconfirm">Bu dosyayı kalıcı olarak silmek istediğinizden emin misiniz?</system:String> <system:String x:Key="plugin_explorer_deletefileconfirm">Bu dosyayı kalıcı olarak silmek istediğinizden emin misiniz?</system:String>
@ -22,7 +22,7 @@
<system:String x:Key="plugin_explorer_directoryinfosearch_error">Arama sırasında hata oluştu: {0}</system:String> <system:String x:Key="plugin_explorer_directoryinfosearch_error">Arama sırasında hata oluştu: {0}</system:String>
<system:String x:Key="plugin_explorer_opendir_error">Klasör açılamadı</system:String> <system:String x:Key="plugin_explorer_opendir_error">Klasör açılamadı</system:String>
<system:String x:Key="plugin_explorer_openfile_error">Dosya açılamadı</system:String> <system:String x:Key="plugin_explorer_openfile_error">Dosya açılamadı</system:String>
<system:String x:Key="plugin_explorer_new_action_keyword_assigned">This new action keyword is already assigned to another plugin, please choose a different one</system:String> <system:String x:Key="plugin_explorer_new_action_keyword_assigned">Bu yeni anahtar kelime zaten başka bir eklentiye atanmıştır, lütfen farklı bir tane seçin</system:String>
<!-- Controls --> <!-- Controls -->
<system:String x:Key="plugin_explorer_delete">Sil</system:String> <system:String x:Key="plugin_explorer_delete">Sil</system:String>

View file

@ -22,7 +22,7 @@
<system:String x:Key="plugin_explorer_directoryinfosearch_error">搜索时发生错误:{0}</system:String> <system:String x:Key="plugin_explorer_directoryinfosearch_error">搜索时发生错误:{0}</system:String>
<system:String x:Key="plugin_explorer_opendir_error">无法打开文件夹</system:String> <system:String x:Key="plugin_explorer_opendir_error">无法打开文件夹</system:String>
<system:String x:Key="plugin_explorer_openfile_error">无法打开文件</system:String> <system:String x:Key="plugin_explorer_openfile_error">无法打开文件</system:String>
<system:String x:Key="plugin_explorer_new_action_keyword_assigned">This new action keyword is already assigned to another plugin, please choose a different one</system:String> <system:String x:Key="plugin_explorer_new_action_keyword_assigned">此触发关键字已经被指派给其他插件了,请换一个关键字</system:String>
<!-- Controls --> <!-- Controls -->
<system:String x:Key="plugin_explorer_delete">删除</system:String> <system:String x:Key="plugin_explorer_delete">删除</system:String>

View file

@ -90,12 +90,12 @@ namespace Flow.Launcher.Plugin.Explorer
public string GetTranslatedPluginTitle() public string GetTranslatedPluginTitle()
{ {
return Context.API.GetTranslation("plugin_explorer_plugin_name"); return Localize.plugin_explorer_plugin_name();
} }
public string GetTranslatedPluginDescription() public string GetTranslatedPluginDescription()
{ {
return Context.API.GetTranslation("plugin_explorer_plugin_description"); return Localize.plugin_explorer_plugin_description();
} }
public void OnCultureInfoChanged(CultureInfo newCulture) public void OnCultureInfoChanged(CultureInfo newCulture)

View file

@ -21,9 +21,9 @@ public static class EverythingDownloadHelper
if (string.IsNullOrEmpty(installedLocation)) if (string.IsNullOrEmpty(installedLocation))
{ {
if (api.ShowMsgBox( if (api.ShowMsgBox(
string.Format(api.GetTranslation("flowlauncher_plugin_everything_installing_select"), Environment.NewLine), Localize.flowlauncher_plugin_everything_installing_select(Environment.NewLine),
api.GetTranslation("flowlauncher_plugin_everything_installing_title"), Localize.flowlauncher_plugin_everything_installing_title(),
MessageBoxButton.YesNo) == MessageBoxResult.Yes) MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{ {
var dlg = new System.Windows.Forms.OpenFileDialog var dlg = new System.Windows.Forms.OpenFileDialog
{ {
@ -41,13 +41,13 @@ public static class EverythingDownloadHelper
return installedLocation; return installedLocation;
} }
api.ShowMsg(api.GetTranslation("flowlauncher_plugin_everything_installing_title"), api.ShowMsg(Localize.flowlauncher_plugin_everything_installing_title(),
api.GetTranslation("flowlauncher_plugin_everything_installing_subtitle"), "", useMainWindowAsOwner: false); Localize.flowlauncher_plugin_everything_installing_subtitle(), "", useMainWindowAsOwner: false);
await DroplexPackage.Drop(App.Everything1_4_1_1009).ConfigureAwait(false); await DroplexPackage.Drop(App.Everything1_4_1_1009).ConfigureAwait(false);
api.ShowMsg(api.GetTranslation("flowlauncher_plugin_everything_installing_title"), api.ShowMsg(Localize.flowlauncher_plugin_everything_installing_title(),
api.GetTranslation("flowlauncher_plugin_everything_installationsuccess_subtitle"), "", useMainWindowAsOwner: false); Localize.flowlauncher_plugin_everything_installationsuccess_subtitle(), "", useMainWindowAsOwner: false);
installedLocation = "C:\\Program Files\\Everything\\Everything.exe"; installedLocation = "C:\\Program Files\\Everything\\Everything.exe";
@ -83,6 +83,5 @@ public static class EverythingDownloadHelper
var scoopInstalledPath = Environment.ExpandEnvironmentVariables(@"%userprofile%\scoop\apps\everything\current\Everything.exe"); var scoopInstalledPath = Environment.ExpandEnvironmentVariables(@"%userprofile%\scoop\apps\everything\current\Everything.exe");
return File.Exists(scoopInstalledPath) ? scoopInstalledPath : string.Empty; return File.Exists(scoopInstalledPath) ? scoopInstalledPath : string.Empty;
} }
} }

View file

@ -27,8 +27,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
if (!await EverythingApi.IsEverythingRunningAsync(token)) if (!await EverythingApi.IsEverythingRunningAsync(token))
throw new EngineNotAvailableException( throw new EngineNotAvailableException(
Enum.GetName(Settings.IndexSearchEngineOption.Everything)!, Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_click_to_launch_or_install"), Localize.flowlauncher_plugin_everything_click_to_launch_or_install(),
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_is_not_running"), Localize.flowlauncher_plugin_everything_is_not_running(),
Constants.EverythingErrorImagePath, Constants.EverythingErrorImagePath,
ClickToInstallEverythingAsync); ClickToInstallEverythingAsync);
} }
@ -38,7 +38,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
Enum.GetName(Settings.IndexSearchEngineOption.Everything)!, Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
"Please check whether your system is x86 or x64", "Please check whether your system is x86 or x64",
Constants.GeneralSearchErrorImagePath, Constants.GeneralSearchErrorImagePath,
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_sdk_issue")); Localize.flowlauncher_plugin_everything_sdk_issue());
} }
} }
@ -50,7 +50,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
if (installedPath == null) if (installedPath == null)
{ {
Main.Context.API.ShowMsgError(Main.Context.API.GetTranslation("flowlauncher_plugin_everything_not_found")); Main.Context.API.ShowMsgError(Localize.flowlauncher_plugin_everything_not_found());
Main.Context.API.LogError(ClassName, "Unable to find Everything.exe"); Main.Context.API.LogError(ClassName, "Unable to find Everything.exe");
return false; return false;
@ -65,7 +65,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
// Just let the user know that Everything is not installed properly and ask them to install it manually // Just let the user know that Everything is not installed properly and ask them to install it manually
catch (Exception e) catch (Exception e)
{ {
Main.Context.API.ShowMsgError(Main.Context.API.GetTranslation("flowlauncher_plugin_everything_install_issue")); Main.Context.API.ShowMsgError(Localize.flowlauncher_plugin_everything_install_issue());
Main.Context.API.LogException(ClassName, "Failed to install Everything", e); Main.Context.API.LogException(ClassName, "Failed to install Everything", e);
return false; return false;
@ -97,8 +97,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
if (!Settings.EnableEverythingContentSearch) if (!Settings.EnableEverythingContentSearch)
{ {
throw new EngineNotAvailableException(Enum.GetName(Settings.IndexSearchEngineOption.Everything)!, throw new EngineNotAvailableException(Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_enable_content_search"), Localize.flowlauncher_plugin_everything_enable_content_search(),
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_enable_content_search_tips"), Localize.flowlauncher_plugin_everything_enable_content_search_tips(),
Constants.EverythingErrorImagePath, Constants.EverythingErrorImagePath,
_ => _ =>
{ {

View file

@ -1,4 +1,4 @@
using System; using System;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -124,7 +124,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
} }
catch (Exception ex) catch (Exception ex)
{ {
Context.API.ShowMsgBox(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); Context.API.ShowMsgBox(ex.Message, Localize.plugin_explorer_opendir_error());
return false; return false;
} }
} }
@ -138,7 +138,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
} }
catch (Exception ex) catch (Exception ex)
{ {
Context.API.ShowMsgBox(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); Context.API.ShowMsgBox(ex.Message, Localize.plugin_explorer_opendir_error());
return false; return false;
} }
} }
@ -153,7 +153,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
} }
catch (Exception ex) catch (Exception ex)
{ {
Context.API.ShowMsgBox(ex.Message, Context.API.GetTranslation("plugin_explorer_opendir_error")); Context.API.ShowMsgBox(ex.Message, Localize.plugin_explorer_opendir_error());
return false; return false;
} }
} }
@ -166,7 +166,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
return false; return false;
}, },
Score = score, Score = score,
TitleToolTip = Main.Context.API.GetTranslation("plugin_explorer_plugin_ToolTipOpenDirectory"), TitleToolTip = Localize.plugin_explorer_plugin_ToolTipOpenDirectory(),
SubTitleToolTip = Settings.DisplayMoreInformationInToolTip ? GetFolderMoreInfoTooltip(path) : path, SubTitleToolTip = Settings.DisplayMoreInformationInToolTip ? GetFolderMoreInfoTooltip(path) : path,
ContextData = new SearchResult { Type = ResultType.Folder, FullPath = path, WindowsIndexed = windowsIndexed } ContextData = new SearchResult { Type = ResultType.Folder, FullPath = path, WindowsIndexed = windowsIndexed }
}; };
@ -190,7 +190,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
DriveInfo drv = new DriveInfo(driveLetter); DriveInfo drv = new DriveInfo(driveLetter);
var freespace = ToReadableSize(drv.AvailableFreeSpace, 2); var freespace = ToReadableSize(drv.AvailableFreeSpace, 2);
var totalspace = ToReadableSize(drv.TotalSize, 2); var totalspace = ToReadableSize(drv.TotalSize, 2);
var subtitle = string.Format(Context.API.GetTranslation("plugin_explorer_diskfreespace"), freespace, totalspace); var subtitle = Localize.plugin_explorer_diskfreespace(freespace, totalspace);
double usingSize = (Convert.ToDouble(drv.TotalSize) - Convert.ToDouble(drv.AvailableFreeSpace)) / Convert.ToDouble(drv.TotalSize) * 100; double usingSize = (Convert.ToDouble(drv.TotalSize) - Convert.ToDouble(drv.AvailableFreeSpace)) / Convert.ToDouble(drv.TotalSize) * 100;
int? progressValue = Convert.ToInt32(usingSize); int? progressValue = Convert.ToInt32(usingSize);
@ -262,8 +262,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search
return new Result return new Result
{ {
Title = Context.API.GetTranslation("plugin_explorer_openresultfolder"), Title = Localize.plugin_explorer_openresultfolder(),
SubTitle = Context.API.GetTranslation("plugin_explorer_openresultfolder_subtitle"), SubTitle = Localize.plugin_explorer_openresultfolder_subtitle(),
AutoCompleteText = GetPathWithActionKeyword(folderPath, ResultType.Folder, actionKeyword), AutoCompleteText = GetPathWithActionKeyword(folderPath, ResultType.Folder, actionKeyword),
IcoPath = folderPath, IcoPath = folderPath,
Score = 500, Score = 500,
@ -330,12 +330,12 @@ namespace Flow.Launcher.Plugin.Explorer.Search
} }
catch (Exception ex) catch (Exception ex)
{ {
Context.API.ShowMsgBox(ex.Message, Context.API.GetTranslation("plugin_explorer_openfile_error")); Context.API.ShowMsgBox(ex.Message, Localize.plugin_explorer_openfile_error());
} }
return true; return true;
}, },
TitleToolTip = Main.Context.API.GetTranslation("plugin_explorer_plugin_ToolTipOpenContainingFolder"), TitleToolTip = Localize.plugin_explorer_plugin_ToolTipOpenContainingFolder(),
SubTitleToolTip = Settings.DisplayMoreInformationInToolTip ? GetFileMoreInfoTooltip(filePath) : filePath, SubTitleToolTip = Settings.DisplayMoreInformationInToolTip ? GetFileMoreInfoTooltip(filePath) : filePath,
ContextData = new SearchResult { Type = ResultType.File, FullPath = filePath, WindowsIndexed = windowsIndexed } ContextData = new SearchResult { Type = ResultType.File, FullPath = filePath, WindowsIndexed = windowsIndexed }
}; };
@ -374,8 +374,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
var fileSize = PreviewPanel.GetFileSize(filePath); var fileSize = PreviewPanel.GetFileSize(filePath);
var fileCreatedAt = PreviewPanel.GetFileCreatedAt(filePath, Settings.PreviewPanelDateFormat, Settings.PreviewPanelTimeFormat, Settings.ShowFileAgeInPreviewPanel); var fileCreatedAt = PreviewPanel.GetFileCreatedAt(filePath, Settings.PreviewPanelDateFormat, Settings.PreviewPanelTimeFormat, Settings.ShowFileAgeInPreviewPanel);
var fileModifiedAt = PreviewPanel.GetFileLastModifiedAt(filePath, Settings.PreviewPanelDateFormat, Settings.PreviewPanelTimeFormat, Settings.ShowFileAgeInPreviewPanel); var fileModifiedAt = PreviewPanel.GetFileLastModifiedAt(filePath, Settings.PreviewPanelDateFormat, Settings.PreviewPanelTimeFormat, Settings.ShowFileAgeInPreviewPanel);
return string.Format(Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info"), return Localize.plugin_explorer_plugin_tooltip_more_info(filePath, fileSize, fileCreatedAt, fileModifiedAt, Environment.NewLine);
filePath, fileSize, fileCreatedAt, fileModifiedAt, Environment.NewLine);
} }
catch (Exception e) catch (Exception e)
{ {
@ -391,8 +390,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
var folderSize = PreviewPanel.GetFolderSize(folderPath); var folderSize = PreviewPanel.GetFolderSize(folderPath);
var folderCreatedAt = PreviewPanel.GetFolderCreatedAt(folderPath, Settings.PreviewPanelDateFormat, Settings.PreviewPanelTimeFormat, Settings.ShowFileAgeInPreviewPanel); var folderCreatedAt = PreviewPanel.GetFolderCreatedAt(folderPath, Settings.PreviewPanelDateFormat, Settings.PreviewPanelTimeFormat, Settings.ShowFileAgeInPreviewPanel);
var folderModifiedAt = PreviewPanel.GetFolderLastModifiedAt(folderPath, Settings.PreviewPanelDateFormat, Settings.PreviewPanelTimeFormat, Settings.ShowFileAgeInPreviewPanel); var folderModifiedAt = PreviewPanel.GetFolderLastModifiedAt(folderPath, Settings.PreviewPanelDateFormat, Settings.PreviewPanelTimeFormat, Settings.ShowFileAgeInPreviewPanel);
return string.Format(Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info"), return Localize.plugin_explorer_plugin_tooltip_more_info(folderPath, folderSize, folderCreatedAt, folderModifiedAt, Environment.NewLine);
folderPath, folderSize, folderCreatedAt, folderModifiedAt, Environment.NewLine);
} }
catch (Exception e) catch (Exception e)
{ {
@ -403,8 +401,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
private static string GetVolumeMoreInfoTooltip(string volumePath, string freespace, string totalspace) private static string GetVolumeMoreInfoTooltip(string volumePath, string freespace, string totalspace)
{ {
return string.Format(Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_volume"), return Localize.plugin_explorer_plugin_tooltip_more_info_volume(volumePath, freespace, totalspace, Environment.NewLine);
volumePath, freespace, totalspace, Environment.NewLine);
} }
private static readonly string[] MediaExtensions = private static readonly string[] MediaExtensions =

View file

@ -161,8 +161,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search
{ {
new() new()
{ {
Title = Context.API.GetTranslation("flowlauncher_plugin_everything_enable_content_search"), Title = Localize.flowlauncher_plugin_everything_enable_content_search(),
SubTitle = Context.API.GetTranslation("flowlauncher_plugin_everything_enable_content_search_tips"), SubTitle = Localize.flowlauncher_plugin_everything_enable_content_search_tips(),
IcoPath = "Images/index_error.png", IcoPath = "Images/index_error.png",
Action = c => Action = c =>
{ {

View file

@ -105,8 +105,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search.WindowsIndex
throw new EngineNotAvailableException( throw new EngineNotAvailableException(
"Windows Index", "Windows Index",
Main.Context.API.GetTranslation("plugin_explorer_windowsSearchServiceFix"), Localize.plugin_explorer_windowsSearchServiceFix(),
Main.Context.API.GetTranslation("plugin_explorer_windowsSearchServiceNotRunning"), Localize.plugin_explorer_windowsSearchServiceNotRunning(),
Constants.WindowsIndexErrorImagePath, Constants.WindowsIndexErrorImagePath,
c => c =>
{ {

View file

@ -14,9 +14,9 @@ namespace Flow.Launcher.Plugin.Explorer
{ {
public int MaxResult { get; set; } = 100; public int MaxResult { get; set; } = 100;
public ObservableCollection<AccessLink> QuickAccessLinks { get; set; } = new(); public ObservableCollection<AccessLink> QuickAccessLinks { get; set; } = [];
public ObservableCollection<AccessLink> IndexSearchExcludedSubdirectoryPaths { get; set; } = new ObservableCollection<AccessLink>(); public ObservableCollection<AccessLink> IndexSearchExcludedSubdirectoryPaths { get; set; } = [];
public string EditorPath { get; set; } = ""; public string EditorPath { get; set; } = "";
@ -58,7 +58,6 @@ namespace Flow.Launcher.Plugin.Explorer
public bool QuickAccessKeywordEnabled { get; set; } public bool QuickAccessKeywordEnabled { get; set; }
public bool WarnWindowsSearchServiceOff { get; set; } = true; public bool WarnWindowsSearchServiceOff { get; set; } = true;
public bool ShowFileSizeInPreviewPanel { get; set; } = true; public bool ShowFileSizeInPreviewPanel { get; set; } = true;
@ -69,7 +68,6 @@ namespace Flow.Launcher.Plugin.Explorer
public bool ShowFileAgeInPreviewPanel { get; set; } = false; public bool ShowFileAgeInPreviewPanel { get; set; } = false;
public string PreviewPanelDateFormat { get; set; } = "yyyy-MM-dd"; public string PreviewPanelDateFormat { get; set; } = "yyyy-MM-dd";
public string PreviewPanelTimeFormat { get; set; } = "HH:mm"; public string PreviewPanelTimeFormat { get; set; } = "HH:mm";
@ -82,8 +80,8 @@ namespace Flow.Launcher.Plugin.Explorer
private EverythingSearchManager EverythingManagerInstance => _everythingManagerInstance ??= new EverythingSearchManager(this); private EverythingSearchManager EverythingManagerInstance => _everythingManagerInstance ??= new EverythingSearchManager(this);
private WindowsIndexSearchManager WindowsIndexSearchManager => _windowsIndexSearchManager ??= new WindowsIndexSearchManager(this); private WindowsIndexSearchManager WindowsIndexSearchManager => _windowsIndexSearchManager ??= new WindowsIndexSearchManager(this);
public IndexSearchEngineOption IndexSearchEngine { get; set; } = IndexSearchEngineOption.WindowsIndex; public IndexSearchEngineOption IndexSearchEngine { get; set; } = IndexSearchEngineOption.WindowsIndex;
[JsonIgnore] [JsonIgnore]
public IIndexProvider IndexProvider => IndexSearchEngine switch public IIndexProvider IndexProvider => IndexSearchEngine switch
{ {
@ -139,7 +137,6 @@ namespace Flow.Launcher.Plugin.Explorer
#endregion #endregion
#region Everything Settings #region Everything Settings
public string EverythingInstalledPath { get; set; } public string EverythingInstalledPath { get; set; }

View file

@ -296,7 +296,7 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
return; return;
} }
var actionKeywordWindow = new ActionKeywordSetting(actionKeyword, Context.API); var actionKeywordWindow = new ActionKeywordSetting(actionKeyword);
if (!(actionKeywordWindow.ShowDialog() ?? false)) if (!(actionKeywordWindow.ShowDialog() ?? false))
{ {
@ -432,8 +432,8 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
case "QuickAccessLink": case "QuickAccessLink":
if (SelectedQuickAccessLink == null) return; if (SelectedQuickAccessLink == null) return;
if (Context.API.ShowMsgBox( if (Context.API.ShowMsgBox(
Context.API.GetTranslation("plugin_explorer_delete_quick_access_link"), Localize.plugin_explorer_delete_quick_access_link(),
Context.API.GetTranslation("plugin_explorer_delete"), Localize.plugin_explorer_delete(),
MessageBoxButton.OKCancel, MessageBoxButton.OKCancel,
MessageBoxImage.Warning) MessageBoxImage.Warning)
== MessageBoxResult.Cancel) == MessageBoxResult.Cancel)
@ -443,8 +443,8 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
case "IndexSearchExcludedPaths": case "IndexSearchExcludedPaths":
if (SelectedIndexSearchExcludedPath == null) return; if (SelectedIndexSearchExcludedPath == null) return;
if (Context.API.ShowMsgBox( if (Context.API.ShowMsgBox(
Context.API.GetTranslation("plugin_explorer_delete_index_search_excluded_path"), Localize.plugin_explorer_delete_index_search_excluded_path(),
Context.API.GetTranslation("plugin_explorer_delete"), Localize.plugin_explorer_delete(),
MessageBoxButton.OKCancel, MessageBoxButton.OKCancel,
MessageBoxImage.Warning) MessageBoxImage.Warning)
== MessageBoxResult.Cancel) == MessageBoxResult.Cancel)
@ -457,7 +457,7 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
private void ShowUnselectedMessage() private void ShowUnselectedMessage()
{ {
var warning = Context.API.GetTranslation("plugin_explorer_make_selection_warning"); var warning = Localize.plugin_explorer_make_selection_warning();
Context.API.ShowMsgBox(warning); Context.API.ShowMsgBox(warning);
} }

View file

@ -29,13 +29,11 @@ namespace Flow.Launcher.Plugin.Explorer.Views
} }
private string actionKeyword; private string actionKeyword;
private readonly IPublicAPI _api;
private bool _keywordEnabled; private bool _keywordEnabled;
public ActionKeywordSetting(ActionKeywordModel selectedActionKeyword, IPublicAPI api) public ActionKeywordSetting(ActionKeywordModel selectedActionKeyword)
{ {
CurrentActionKeyword = selectedActionKeyword; CurrentActionKeyword = selectedActionKeyword;
_api = api;
ActionKeyword = selectedActionKeyword.Keyword; ActionKeyword = selectedActionKeyword.Keyword;
KeywordEnabled = selectedActionKeyword.Enabled; KeywordEnabled = selectedActionKeyword.Enabled;
@ -60,14 +58,14 @@ namespace Flow.Launcher.Plugin.Explorer.Views
switch (CurrentActionKeyword.KeywordProperty, KeywordEnabled) switch (CurrentActionKeyword.KeywordProperty, KeywordEnabled)
{ {
case (Settings.ActionKeyword.FileContentSearchActionKeyword, true): case (Settings.ActionKeyword.FileContentSearchActionKeyword, true):
_api.ShowMsgBox(_api.GetTranslation("plugin_explorer_globalActionKeywordInvalid")); Main.Context.API.ShowMsgBox(Localize.plugin_explorer_globalActionKeywordInvalid());
return; return;
case (Settings.ActionKeyword.QuickAccessActionKeyword, true): case (Settings.ActionKeyword.QuickAccessActionKeyword, true):
_api.ShowMsgBox(_api.GetTranslation("plugin_explorer_quickaccess_globalActionKeywordInvalid")); Main.Context.API.ShowMsgBox(Localize.plugin_explorer_quickaccess_globalActionKeywordInvalid());
return; return;
} }
if (!KeywordEnabled || !_api.ActionKeywordAssigned(ActionKeyword)) if (!KeywordEnabled || !Main.Context.API.ActionKeywordAssigned(ActionKeyword))
{ {
DialogResult = true; DialogResult = true;
Close(); Close();
@ -75,7 +73,7 @@ namespace Flow.Launcher.Plugin.Explorer.Views
} }
// The keyword is not valid, so show message // The keyword is not valid, so show message
_api.ShowMsgBox(_api.GetTranslation("newActionKeywordsHasBeenAssigned")); Main.Context.API.ShowMsgBox(Localize.plugin_explorer_new_action_keyword_assigned());
} }
private void BtnCancel_OnClick(object sender, RoutedEventArgs e) private void BtnCancel_OnClick(object sender, RoutedEventArgs e)

View file

@ -25,7 +25,7 @@ public partial class PreviewPanel : UserControl
public string FileName { get; } public string FileName { get; }
[ObservableProperty] [ObservableProperty]
private string _fileSize = Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); private string _fileSize = Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
[ObservableProperty] [ObservableProperty]
private string _createdAt = ""; private string _createdAt = "";
@ -111,17 +111,17 @@ public partial class PreviewPanel : UserControl
catch (FileNotFoundException) catch (FileNotFoundException)
{ {
Main.Context.API.LogError(ClassName, $"File not found: {filePath}"); Main.Context.API.LogError(ClassName, $"File not found: {filePath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
Main.Context.API.LogError(ClassName, $"Access denied to file: {filePath}"); Main.Context.API.LogError(ClassName, $"Access denied to file: {filePath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (Exception e) catch (Exception e)
{ {
Main.Context.API.LogException(ClassName, $"Failed to get file size for {filePath}", e); Main.Context.API.LogException(ClassName, $"Failed to get file size for {filePath}", e);
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
} }
@ -142,17 +142,17 @@ public partial class PreviewPanel : UserControl
catch (FileNotFoundException) catch (FileNotFoundException)
{ {
Main.Context.API.LogError(ClassName, $"File not found: {filePath}"); Main.Context.API.LogError(ClassName, $"File not found: {filePath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
Main.Context.API.LogError(ClassName, $"Access denied to file: {filePath}"); Main.Context.API.LogError(ClassName, $"Access denied to file: {filePath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (Exception e) catch (Exception e)
{ {
Main.Context.API.LogException(ClassName, $"Failed to get file created date for {filePath}", e); Main.Context.API.LogException(ClassName, $"Failed to get file created date for {filePath}", e);
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
} }
@ -173,17 +173,17 @@ public partial class PreviewPanel : UserControl
catch (FileNotFoundException) catch (FileNotFoundException)
{ {
Main.Context.API.LogError(ClassName, $"File not found: {filePath}"); Main.Context.API.LogError(ClassName, $"File not found: {filePath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
Main.Context.API.LogError(ClassName, $"Access denied to file: {filePath}"); Main.Context.API.LogError(ClassName, $"Access denied to file: {filePath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (Exception e) catch (Exception e)
{ {
Main.Context.API.LogException(ClassName, $"Failed to get file modified date for {filePath}", e); Main.Context.API.LogException(ClassName, $"Failed to get file modified date for {filePath}", e);
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
} }
@ -205,17 +205,17 @@ public partial class PreviewPanel : UserControl
catch (FileNotFoundException) catch (FileNotFoundException)
{ {
Main.Context.API.LogError(ClassName, $"Folder not found: {folderPath}"); Main.Context.API.LogError(ClassName, $"Folder not found: {folderPath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
Main.Context.API.LogError(ClassName, $"Access denied to folder: {folderPath}"); Main.Context.API.LogError(ClassName, $"Access denied to folder: {folderPath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (OperationCanceledException) catch (OperationCanceledException)
{ {
Main.Context.API.LogError(ClassName, $"Operation timed out while calculating folder size for {folderPath}"); Main.Context.API.LogError(ClassName, $"Operation timed out while calculating folder size for {folderPath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
// For parallel operations, AggregateException may be thrown if any of the tasks fail // For parallel operations, AggregateException may be thrown if any of the tasks fail
catch (AggregateException ae) catch (AggregateException ae)
@ -224,22 +224,22 @@ public partial class PreviewPanel : UserControl
{ {
case FileNotFoundException: case FileNotFoundException:
Main.Context.API.LogError(ClassName, $"Folder not found: {folderPath}"); Main.Context.API.LogError(ClassName, $"Folder not found: {folderPath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
case UnauthorizedAccessException: case UnauthorizedAccessException:
Main.Context.API.LogError(ClassName, $"Access denied to folder: {folderPath}"); Main.Context.API.LogError(ClassName, $"Access denied to folder: {folderPath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
case OperationCanceledException: case OperationCanceledException:
Main.Context.API.LogError(ClassName, $"Operation timed out while calculating folder size for {folderPath}"); Main.Context.API.LogError(ClassName, $"Operation timed out while calculating folder size for {folderPath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
default: default:
Main.Context.API.LogException(ClassName, $"Failed to get folder size for {folderPath}", ae); Main.Context.API.LogException(ClassName, $"Failed to get folder size for {folderPath}", ae);
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
} }
catch (Exception e) catch (Exception e)
{ {
Main.Context.API.LogException(ClassName, $"Failed to get folder size for {folderPath}", e); Main.Context.API.LogException(ClassName, $"Failed to get folder size for {folderPath}", e);
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
} }
@ -260,17 +260,17 @@ public partial class PreviewPanel : UserControl
catch (FileNotFoundException) catch (FileNotFoundException)
{ {
Main.Context.API.LogError(ClassName, $"Folder not found: {folderPath}"); Main.Context.API.LogError(ClassName, $"Folder not found: {folderPath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
Main.Context.API.LogError(ClassName, $"Access denied to folder: {folderPath}"); Main.Context.API.LogError(ClassName, $"Access denied to folder: {folderPath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (Exception e) catch (Exception e)
{ {
Main.Context.API.LogException(ClassName, $"Failed to get folder created date for {folderPath}", e); Main.Context.API.LogException(ClassName, $"Failed to get folder created date for {folderPath}", e);
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
} }
@ -291,17 +291,17 @@ public partial class PreviewPanel : UserControl
catch (FileNotFoundException) catch (FileNotFoundException)
{ {
Main.Context.API.LogError(ClassName, $"Folder not found: {folderPath}"); Main.Context.API.LogError(ClassName, $"Folder not found: {folderPath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
Main.Context.API.LogError(ClassName, $"Access denied to folder: {folderPath}"); Main.Context.API.LogError(ClassName, $"Access denied to folder: {folderPath}");
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
catch (Exception e) catch (Exception e)
{ {
Main.Context.API.LogException(ClassName, $"Failed to get folder modified date for {folderPath}", e); Main.Context.API.LogException(ClassName, $"Failed to get folder modified date for {folderPath}", e);
return Main.Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_unknown"); return Localize.plugin_explorer_plugin_tooltip_more_info_unknown();
} }
} }
@ -311,21 +311,20 @@ public partial class PreviewPanel : UserControl
var difference = now - fileDateTime; var difference = now - fileDateTime;
if (difference.TotalDays < 1) if (difference.TotalDays < 1)
return Main.Context.API.GetTranslation("Today"); return Localize.Today();
if (difference.TotalDays < 30) if (difference.TotalDays < 30)
return string.Format(Main.Context.API.GetTranslation("DaysAgo"), (int)difference.TotalDays); return Localize.DaysAgo((int)difference.TotalDays);
var monthsDiff = (now.Year - fileDateTime.Year) * 12 + now.Month - fileDateTime.Month; var monthsDiff = (now.Year - fileDateTime.Year) * 12 + now.Month - fileDateTime.Month;
if (monthsDiff == 1) if (monthsDiff == 1)
return Main.Context.API.GetTranslation("OneMonthAgo"); return Localize.OneMonthAgo();
if (monthsDiff < 12) if (monthsDiff < 12)
return string.Format(Main.Context.API.GetTranslation("MonthsAgo"), monthsDiff); return Localize.MonthsAgo(monthsDiff);
var yearsDiff = now.Year - fileDateTime.Year; var yearsDiff = now.Year - fileDateTime.Year;
if (now.Month < fileDateTime.Month || (now.Month == fileDateTime.Month && now.Day < fileDateTime.Day)) if (now.Month < fileDateTime.Month || (now.Month == fileDateTime.Month && now.Day < fileDateTime.Day))
yearsDiff--; yearsDiff--;
return yearsDiff == 1 ? Main.Context.API.GetTranslation("OneYearAgo") : return yearsDiff == 1 ? Localize.OneYearAgo(): Localize.YearsAgo(yearsDiff);
string.Format(Main.Context.API.GetTranslation("YearsAgo"), yearsDiff);
} }
} }

View file

@ -97,7 +97,7 @@ public partial class QuickAccessLinkSettings
// Validate the input before proceeding // Validate the input before proceeding
if (string.IsNullOrEmpty(SelectedName) || string.IsNullOrEmpty(SelectedPath)) if (string.IsNullOrEmpty(SelectedName) || string.IsNullOrEmpty(SelectedPath))
{ {
var warning = Main.Context.API.GetTranslation("plugin_explorer_quick_access_link_no_folder_selected"); var warning = Localize.plugin_explorer_quick_access_link_no_folder_selected();
Main.Context.API.ShowMsgBox(warning); Main.Context.API.ShowMsgBox(warning);
return; return;
} }
@ -107,7 +107,7 @@ public partial class QuickAccessLinkSettings
x.Path.Equals(SelectedPath, StringComparison.OrdinalIgnoreCase) && x.Path.Equals(SelectedPath, StringComparison.OrdinalIgnoreCase) &&
x.Name.Equals(SelectedName, StringComparison.OrdinalIgnoreCase))) x.Name.Equals(SelectedName, StringComparison.OrdinalIgnoreCase)))
{ {
var warning = Main.Context.API.GetTranslation("plugin_explorer_quick_access_link_path_already_exists"); var warning = Localize.plugin_explorer_quick_access_link_path_already_exists();
Main.Context.API.ShowMsgBox(warning); Main.Context.API.ShowMsgBox(warning);
return; return;
} }

View file

@ -32,6 +32,7 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -54,5 +55,9 @@
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
</ItemGroup>
</Project> </Project>

View file

@ -5,19 +5,19 @@ namespace Flow.Launcher.Plugin.PluginIndicator
{ {
public class Main : IPlugin, IPluginI18n, IHomeQuery public class Main : IPlugin, IPluginI18n, IHomeQuery
{ {
internal PluginInitContext Context { get; private set; } internal static PluginInitContext Context { get; private set; }
public void Init(PluginInitContext context)
{
Context = context;
}
public List<Result> Query(Query query) public List<Result> Query(Query query)
{ {
return QueryResults(query); return QueryResults(query);
} }
public List<Result> HomeQuery() private static List<Result> QueryResults(Query query = null)
{
return QueryResults();
}
private List<Result> QueryResults(Query query = null)
{ {
var nonGlobalPlugins = GetNonGlobalPlugins(); var nonGlobalPlugins = GetNonGlobalPlugins();
var querySearch = query?.Search ?? string.Empty; var querySearch = query?.Search ?? string.Empty;
@ -34,7 +34,7 @@ namespace Flow.Launcher.Plugin.PluginIndicator
select new Result select new Result
{ {
Title = keyword, Title = keyword,
SubTitle = string.Format(Context.API.GetTranslation("flowlauncher_plugin_pluginindicator_result_subtitle"), plugin.Name), SubTitle = Localize.flowlauncher_plugin_pluginindicator_result_subtitle(plugin.Name),
Score = score, Score = score,
IcoPath = plugin.IcoPath, IcoPath = plugin.IcoPath,
AutoCompleteText = $"{keyword}{Plugin.Query.TermSeparator}", AutoCompleteText = $"{keyword}{Plugin.Query.TermSeparator}",
@ -44,10 +44,10 @@ namespace Flow.Launcher.Plugin.PluginIndicator
return false; return false;
} }
}; };
return results.ToList(); return [.. results];
} }
private Dictionary<string, PluginPair> GetNonGlobalPlugins() private static Dictionary<string, PluginPair> GetNonGlobalPlugins()
{ {
var nonGlobalPlugins = new Dictionary<string, PluginPair>(); var nonGlobalPlugins = new Dictionary<string, PluginPair>();
foreach (var plugin in Context.API.GetAllPlugins()) foreach (var plugin in Context.API.GetAllPlugins())
@ -66,19 +66,19 @@ namespace Flow.Launcher.Plugin.PluginIndicator
return nonGlobalPlugins; return nonGlobalPlugins;
} }
public void Init(PluginInitContext context)
{
Context = context;
}
public string GetTranslatedPluginTitle() public string GetTranslatedPluginTitle()
{ {
return Context.API.GetTranslation("flowlauncher_plugin_pluginindicator_plugin_name"); return Localize.flowlauncher_plugin_pluginindicator_plugin_name();
} }
public string GetTranslatedPluginDescription() public string GetTranslatedPluginDescription()
{ {
return Context.API.GetTranslation("flowlauncher_plugin_pluginindicator_plugin_description"); return Localize.flowlauncher_plugin_pluginindicator_plugin_description();
}
public List<Result> HomeQuery()
{
return QueryResults();
} }
} }
} }

View file

@ -35,6 +35,7 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -52,6 +53,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<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.205">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

View file

@ -9,19 +9,19 @@ namespace Flow.Launcher.Plugin.ProcessKiller
{ {
public class Main : IPlugin, IPluginI18n, IContextMenu, ISettingProvider public class Main : IPlugin, IPluginI18n, IContextMenu, ISettingProvider
{ {
internal static PluginInitContext Context { get; private set; }
private Settings _settings;
private readonly ProcessHelper processHelper = new(); private readonly ProcessHelper processHelper = new();
private static PluginInitContext _context;
internal Settings Settings;
private SettingsViewModel _viewModel; private SettingsViewModel _viewModel;
public void Init(PluginInitContext context) public void Init(PluginInitContext context)
{ {
_context = context; Context = context;
Settings = context.API.LoadSettingJsonStorage<Settings>(); _settings = context.API.LoadSettingJsonStorage<Settings>();
_viewModel = new SettingsViewModel(Settings); _viewModel = new SettingsViewModel(_settings);
} }
public List<Result> Query(Query query) public List<Result> Query(Query query)
@ -31,12 +31,12 @@ namespace Flow.Launcher.Plugin.ProcessKiller
public string GetTranslatedPluginTitle() public string GetTranslatedPluginTitle()
{ {
return _context.API.GetTranslation("flowlauncher_plugin_processkiller_plugin_name"); return Localize.flowlauncher_plugin_processkiller_plugin_name();
} }
public string GetTranslatedPluginDescription() public string GetTranslatedPluginDescription()
{ {
return _context.API.GetTranslation("flowlauncher_plugin_processkiller_plugin_description"); return Localize.flowlauncher_plugin_processkiller_plugin_description();
} }
public List<Result> LoadContextMenus(Result result) public List<Result> LoadContextMenus(Result result)
@ -51,13 +51,13 @@ namespace Flow.Launcher.Plugin.ProcessKiller
{ {
menuOptions.Add(new Result menuOptions.Add(new Result
{ {
Title = _context.API.GetTranslation("flowlauncher_plugin_processkiller_kill_instances"), Title = Localize.flowlauncher_plugin_processkiller_kill_instances(),
SubTitle = processPath, SubTitle = processPath,
Action = _ => Action = _ =>
{ {
foreach (var p in similarProcesses) foreach (var p in similarProcesses)
{ {
processHelper.TryKill(_context, p); ProcessHelper.TryKill(p);
} }
return true; return true;
@ -72,8 +72,8 @@ namespace Flow.Launcher.Plugin.ProcessKiller
private List<Result> CreateResultsFromQuery(Query query) private List<Result> CreateResultsFromQuery(Query query)
{ {
// Get all non-system processes // Get all non-system processes
var allPocessList = processHelper.GetMatchingProcesses(); var allProcessList = processHelper.GetMatchingProcesses();
if (!allPocessList.Any()) if (allProcessList.Count == 0)
{ {
return null; return null;
} }
@ -82,12 +82,12 @@ namespace Flow.Launcher.Plugin.ProcessKiller
var searchTerm = query.Search; var searchTerm = query.Search;
var processlist = new List<ProcessResult>(); var processlist = new List<ProcessResult>();
var processWindowTitle = var processWindowTitle =
Settings.ShowWindowTitle || Settings.PutVisibleWindowProcessesTop ? _settings.ShowWindowTitle || _settings.PutVisibleWindowProcessesTop ?
ProcessHelper.GetProcessesWithNonEmptyWindowTitle() : ProcessHelper.GetProcessesWithNonEmptyWindowTitle() :
new Dictionary<int, string>(); [];
if (string.IsNullOrWhiteSpace(searchTerm)) if (string.IsNullOrWhiteSpace(searchTerm))
{ {
foreach (var p in allPocessList) foreach (var p in allProcessList)
{ {
var progressNameIdTitle = ProcessHelper.GetProcessNameIdTitle(p); var progressNameIdTitle = ProcessHelper.GetProcessNameIdTitle(p);
@ -97,8 +97,8 @@ namespace Flow.Launcher.Plugin.ProcessKiller
// Use window title for those processes if enabled // Use window title for those processes if enabled
processlist.Add(new ProcessResult( processlist.Add(new ProcessResult(
p, p,
Settings.PutVisibleWindowProcessesTop ? 200 : 0, _settings.PutVisibleWindowProcessesTop ? 200 : 0,
Settings.ShowWindowTitle ? windowTitle : progressNameIdTitle, _settings.ShowWindowTitle ? windowTitle : progressNameIdTitle,
null, null,
progressNameIdTitle)); progressNameIdTitle));
} }
@ -115,35 +115,35 @@ namespace Flow.Launcher.Plugin.ProcessKiller
} }
else else
{ {
foreach (var p in allPocessList) foreach (var p in allProcessList)
{ {
var progressNameIdTitle = ProcessHelper.GetProcessNameIdTitle(p); var progressNameIdTitle = ProcessHelper.GetProcessNameIdTitle(p);
if (processWindowTitle.TryGetValue(p.Id, out var windowTitle)) if (processWindowTitle.TryGetValue(p.Id, out var windowTitle))
{ {
// Get max score from searching process name, window title and process id // Get max score from searching process name, window title and process id
var windowTitleMatch = _context.API.FuzzySearch(searchTerm, windowTitle); var windowTitleMatch = Context.API.FuzzySearch(searchTerm, windowTitle);
var processNameIdMatch = _context.API.FuzzySearch(searchTerm, progressNameIdTitle); var processNameIdMatch = Context.API.FuzzySearch(searchTerm, progressNameIdTitle);
var score = Math.Max(windowTitleMatch.Score, processNameIdMatch.Score); var score = Math.Max(windowTitleMatch.Score, processNameIdMatch.Score);
if (score > 0) if (score > 0)
{ {
// Add score to prioritize processes with visible windows // Add score to prioritize processes with visible windows
// Use window title for those processes // Use window title for those processes
if (Settings.PutVisibleWindowProcessesTop) if (_settings.PutVisibleWindowProcessesTop)
{ {
score += 200; score += 200;
} }
processlist.Add(new ProcessResult( processlist.Add(new ProcessResult(
p, p,
score, score,
Settings.ShowWindowTitle ? windowTitle : progressNameIdTitle, _settings.ShowWindowTitle ? windowTitle : progressNameIdTitle,
score == windowTitleMatch.Score ? windowTitleMatch : null, score == windowTitleMatch.Score ? windowTitleMatch : null,
progressNameIdTitle)); progressNameIdTitle));
} }
} }
else else
{ {
var processNameIdMatch = _context.API.FuzzySearch(searchTerm, progressNameIdTitle); var processNameIdMatch = Context.API.FuzzySearch(searchTerm, progressNameIdTitle);
var score = processNameIdMatch.Score; var score = processNameIdMatch.Score;
if (score > 0) if (score > 0)
{ {
@ -162,7 +162,7 @@ namespace Flow.Launcher.Plugin.ProcessKiller
foreach (var pr in processlist) foreach (var pr in processlist)
{ {
var p = pr.Process; var p = pr.Process;
var path = processHelper.TryGetProcessFilename(p); var path = ProcessHelper.TryGetProcessFilename(p);
results.Add(new Result() results.Add(new Result()
{ {
IcoPath = path, IcoPath = path,
@ -172,12 +172,12 @@ namespace Flow.Launcher.Plugin.ProcessKiller
TitleHighlightData = pr.TitleMatch?.MatchData, TitleHighlightData = pr.TitleMatch?.MatchData,
Score = pr.Score, Score = pr.Score,
ContextData = p.ProcessName, ContextData = p.ProcessName,
AutoCompleteText = $"{_context.CurrentPluginMetadata.ActionKeyword}{Plugin.Query.TermSeparator}{p.ProcessName}", AutoCompleteText = $"{Context.CurrentPluginMetadata.ActionKeyword}{Plugin.Query.TermSeparator}{p.ProcessName}",
Action = (c) => Action = (c) =>
{ {
processHelper.TryKill(_context, p); ProcessHelper.TryKill(p);
// Re-query to refresh process list // Re-query to refresh process list
_context.API.ReQuery(); Context.API.ReQuery();
return true; return true;
} }
}); });
@ -194,17 +194,17 @@ namespace Flow.Launcher.Plugin.ProcessKiller
sortedResults.Insert(1, new Result() sortedResults.Insert(1, new Result()
{ {
IcoPath = firstResult?.IcoPath, IcoPath = firstResult?.IcoPath,
Title = string.Format(_context.API.GetTranslation("flowlauncher_plugin_processkiller_kill_all"), firstResult?.ContextData), Title = Localize.flowlauncher_plugin_processkiller_kill_all(firstResult?.ContextData),
SubTitle = string.Format(_context.API.GetTranslation("flowlauncher_plugin_processkiller_kill_all_count"), processlist.Count), SubTitle = Localize.flowlauncher_plugin_processkiller_kill_all_count(processlist.Count),
Score = 200, Score = 200,
Action = (c) => Action = (c) =>
{ {
foreach (var p in processlist) foreach (var p in processlist)
{ {
processHelper.TryKill(_context, p.Process); ProcessHelper.TryKill(p.Process);
} }
// Re-query to refresh process list // Re-query to refresh process list
_context.API.ReQuery(); Context.API.ReQuery();
return true; return true;
} }
}); });

View file

@ -16,8 +16,8 @@ namespace Flow.Launcher.Plugin.ProcessKiller
{ {
private static readonly string ClassName = nameof(ProcessHelper); private static readonly string ClassName = nameof(ProcessHelper);
private readonly HashSet<string> _systemProcessList = new() private readonly HashSet<string> _systemProcessList =
{ [
"conhost", "conhost",
"svchost", "svchost",
"idle", "idle",
@ -31,12 +31,12 @@ namespace Flow.Launcher.Plugin.ProcessKiller
"winlogon", "winlogon",
"services", "services",
"spoolsv", "spoolsv",
"explorer" "explorer"
}; ];
private const string FlowLauncherProcessName = "Flow.Launcher"; private const string FlowLauncherProcessName = "Flow.Launcher";
private bool IsSystemProcessOrFlowLauncher(Process p) => private bool IsSystemProcessOrFlowLauncher(Process p) =>
_systemProcessList.Contains(p.ProcessName.ToLower()) || _systemProcessList.Contains(p.ProcessName.ToLower()) ||
string.Equals(p.ProcessName, FlowLauncherProcessName, StringComparison.OrdinalIgnoreCase); string.Equals(p.ProcessName, FlowLauncherProcessName, StringComparison.OrdinalIgnoreCase);
@ -142,7 +142,7 @@ namespace Flow.Launcher.Plugin.ProcessKiller
return Process.GetProcesses().Where(p => !IsSystemProcessOrFlowLauncher(p) && TryGetProcessFilename(p) == processPath); return Process.GetProcesses().Where(p => !IsSystemProcessOrFlowLauncher(p) && TryGetProcessFilename(p) == processPath);
} }
public void TryKill(PluginInitContext context, Process p) public static void TryKill(Process p)
{ {
try try
{ {
@ -154,11 +154,11 @@ namespace Flow.Launcher.Plugin.ProcessKiller
} }
catch (Exception e) catch (Exception e)
{ {
context.API.LogException(ClassName, $"Failed to kill process {p.ProcessName}", e); Main.Context.API.LogException(ClassName, $"Failed to kill process {p.ProcessName}", e);
} }
} }
public unsafe string TryGetProcessFilename(Process p) public static unsafe string TryGetProcessFilename(Process p)
{ {
try try
{ {

View file

@ -3,25 +3,16 @@ using Flow.Launcher.Plugin.SharedModels;
namespace Flow.Launcher.Plugin.ProcessKiller namespace Flow.Launcher.Plugin.ProcessKiller
{ {
internal class ProcessResult internal class ProcessResult(Process process, int score, string title, MatchResult match, string tooltip)
{ {
public ProcessResult(Process process, int score, string title, MatchResult match, string tooltip) public Process Process { get; } = process;
{
Process = process;
Score = score;
Title = title;
TitleMatch = match;
Tooltip = tooltip;
}
public Process Process { get; } public int Score { get; } = score;
public int Score { get; } public string Title { get; } = title;
public string Title { get; } public MatchResult TitleMatch { get; } = match;
public MatchResult TitleMatch { get; } public string Tooltip { get; } = tooltip;
public string Tooltip { get; }
} }
} }

View file

@ -1,24 +1,7 @@
namespace Flow.Launcher.Plugin.ProcessKiller.ViewModels namespace Flow.Launcher.Plugin.ProcessKiller.ViewModels
{ {
public class SettingsViewModel public class SettingsViewModel(Settings settings)
{ {
public Settings Settings { get; set; } public Settings Settings { get; set; } = settings;
public SettingsViewModel(Settings settings)
{
Settings = settings;
}
public bool ShowWindowTitle
{
get => Settings.ShowWindowTitle;
set => Settings.ShowWindowTitle = value;
}
public bool PutVisibleWindowProcessesTop
{
get => Settings.PutVisibleWindowProcessesTop;
set => Settings.PutVisibleWindowProcessesTop = value;
}
} }
} }

View file

@ -4,6 +4,8 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:Flow.Launcher.Plugin.ProcessKiller.ViewModels"
d:DataContext="{d:DesignInstance Type=vm:SettingsViewModel}"
d:DesignHeight="300" d:DesignHeight="300"
d:DesignWidth="500" d:DesignWidth="500"
mc:Ignorable="d"> mc:Ignorable="d">
@ -18,11 +20,11 @@
Grid.Row="0" Grid.Row="0"
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}" Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
Content="{DynamicResource flowlauncher_plugin_processkiller_show_window_title}" Content="{DynamicResource flowlauncher_plugin_processkiller_show_window_title}"
IsChecked="{Binding ShowWindowTitle}" /> IsChecked="{Binding Settings.ShowWindowTitle}" />
<CheckBox <CheckBox
Grid.Row="1" Grid.Row="1"
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}" Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
Content="{DynamicResource flowlauncher_plugin_processkiller_put_visible_window_process_top}" Content="{DynamicResource flowlauncher_plugin_processkiller_put_visible_window_process_top}"
IsChecked="{Binding PutVisibleWindowProcessesTop}" /> IsChecked="{Binding Settings.PutVisibleWindowProcessesTop}" />
</Grid> </Grid>
</UserControl> </UserControl>

View file

@ -5,9 +5,6 @@ namespace Flow.Launcher.Plugin.ProcessKiller.Views;
public partial class SettingsControl : UserControl public partial class SettingsControl : UserControl
{ {
/// <summary>
/// Interaction logic for SettingsControl.xaml
/// </summary>
public SettingsControl(SettingsViewModel viewModel) public SettingsControl(SettingsViewModel viewModel)
{ {
InitializeComponent(); InitializeComponent();

View file

@ -67,7 +67,7 @@
<system:String x:Key="flowlauncher_plugin_program_suffixes_custom_urls">Özel URL Protokolleri</system:String> <system:String x:Key="flowlauncher_plugin_program_suffixes_custom_urls">Özel URL Protokolleri</system:String>
<system:String x:Key="flowlauncher_plugin_program_suffixes_custom_file_types">Özel Dosya Sonekleri</system:String> <system:String x:Key="flowlauncher_plugin_program_suffixes_custom_file_types">Özel Dosya Sonekleri</system:String>
<system:String x:Key="flowlauncher_plugin_program_suffixes_tooltip"> <system:String x:Key="flowlauncher_plugin_program_suffixes_tooltip">
Insert file suffixes you want to index. Suffixes should be separated by ';'. (ex&gt;bat;py) Dizinlemek istediğiniz dosya uzantılarını girin. Uzantılar ';' ile ayrılmalıdır. (örnek&gt;bat;py)
</system:String> </system:String>
<system:String x:Key="flowlauncher_plugin_program_protocol_tooltip"> <system:String x:Key="flowlauncher_plugin_program_protocol_tooltip">
İndekslemek istediğiniz .url dosyalarının protokollerini girin. Protokoller ';' ile ayrılmalı ve &quot;://&quot; ile bitmelidir. (örn&gt;ftp://;mailto://) İndekslemek istediğiniz .url dosyalarının protokollerini girin. Protokoller ';' ile ayrılmalı ve &quot;://&quot; ile bitmelidir. (örn&gt;ftp://;mailto://)
@ -86,8 +86,8 @@
<system:String x:Key="flowlauncher_plugin_program_customizedexplorer">Özelleştirilmiş Gezgin</system:String> <system:String x:Key="flowlauncher_plugin_program_customizedexplorer">Özelleştirilmiş Gezgin</system:String>
<system:String x:Key="flowlauncher_plugin_program_args">Parametreler</system:String> <system:String x:Key="flowlauncher_plugin_program_args">Parametreler</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">Kullanmak istediğiniz dosya gezgininin Ortam Değişkenini girerek, konteyner klasörünü açmak için kullanılan gezgini özelleştirebilirsiniz. Ortam Değişkeninin kullanılabilir olup olmadığını test etmek için CMD'yi kullanmak faydalı olacaktır.</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">Özelleştirilmiş gezgin için eklemek istediğiniz özelleştirilmiş argümanları girin. Üst dizin için %s, tam yol için %f (yalnızca win32 için geçerlidir). Ayrıntılar için gezginin web sitesini kontrol edin.</system:String>
<!-- Dialogs --> <!-- Dialogs -->
<system:String x:Key="flowlauncher_plugin_program_disable_dlgtitle_success">Başarılı</system:String> <system:String x:Key="flowlauncher_plugin_program_disable_dlgtitle_success">Başarılı</system:String>

View file

@ -0,0 +1,25 @@
using System;
using System.Globalization;
using System.Windows.Data;
namespace Flow.Launcher.Plugin.Shell.Converters;
public class LeaveShellOpenOrCloseShellAfterPressEnabledConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (
values.Length != 2 ||
values[0] is not bool closeShellAfterPressOrLeaveShellOpen ||
values[1] is not Shell shell
)
return Binding.DoNothing;
return (!closeShellAfterPressOrLeaveShellOpen) && shell != Shell.RunCommand;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}

View file

@ -34,6 +34,7 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -58,6 +59,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
<PackageReference Include="InputSimulator" Version="1.0.4" NoWarn="NU1701" /> <PackageReference Include="InputSimulator" Version="1.0.4" NoWarn="NU1701" />
</ItemGroup> </ItemGroup>

View file

@ -1,13 +1,14 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.ComponentModel; using System.ComponentModel;
using System.Diagnostics; using System.Diagnostics;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using Flow.Launcher.Plugin.SharedCommands;
using Flow.Launcher.Plugin.Shell.Views;
using WindowsInput; using WindowsInput;
using WindowsInput.Native; using WindowsInput.Native;
using Flow.Launcher.Plugin.SharedCommands;
using Control = System.Windows.Controls.Control; using Control = System.Windows.Controls.Control;
using Keys = System.Windows.Forms.Keys; using Keys = System.Windows.Forms.Keys;
@ -17,7 +18,7 @@ namespace Flow.Launcher.Plugin.Shell
{ {
private static readonly string ClassName = nameof(Main); private static readonly string ClassName = nameof(Main);
internal PluginInitContext Context { get; private set; } internal static PluginInitContext Context { get; private set; }
private const string Image = "Images/shell.png"; private const string Image = "Images/shell.png";
private bool _winRStroked; private bool _winRStroked;
@ -27,7 +28,7 @@ namespace Flow.Launcher.Plugin.Shell
public List<Result> Query(Query query) public List<Result> Query(Query query)
{ {
List<Result> results = new List<Result>(); List<Result> results = [];
string cmd = query.Search; string cmd = query.Search;
if (string.IsNullOrEmpty(cmd)) if (string.IsNullOrEmpty(cmd))
{ {
@ -45,7 +46,7 @@ namespace Flow.Launcher.Plugin.Shell
string basedir = null; string basedir = null;
string dir = null; string dir = null;
string excmd = Environment.ExpandEnvironmentVariables(cmd); string excmd = Environment.ExpandEnvironmentVariables(cmd);
if (Directory.Exists(excmd) && (cmd.EndsWith("/") || cmd.EndsWith(@"\"))) if (Directory.Exists(excmd) && (cmd.EndsWith('/') || cmd.EndsWith('\\')))
{ {
basedir = excmd; basedir = excmd;
dir = cmd; dir = cmd;
@ -54,7 +55,7 @@ namespace Flow.Launcher.Plugin.Shell
{ {
basedir = Path.GetDirectoryName(excmd); basedir = Path.GetDirectoryName(excmd);
var dirName = Path.GetDirectoryName(cmd); var dirName = Path.GetDirectoryName(cmd);
dir = (dirName.EndsWith("/") || dirName.EndsWith(@"\")) ? dirName : cmd[..(dirName.Length + 1)]; dir = (dirName.EndsWith('/') || dirName.EndsWith('\\')) ? dirName : cmd[..(dirName.Length + 1)];
} }
if (basedir != null) if (basedir != null)
@ -103,14 +104,14 @@ namespace Flow.Launcher.Plugin.Shell
{ {
if (m.Key == cmd) if (m.Key == cmd)
{ {
result.SubTitle = string.Format(Context.API.GetTranslation("flowlauncher_plugin_cmd_cmd_has_been_executed_times"), m.Value); result.SubTitle = Localize.flowlauncher_plugin_cmd_cmd_has_been_executed_times(m.Value);
return null; return null;
} }
var ret = new Result var ret = new Result
{ {
Title = m.Key, Title = m.Key,
SubTitle = string.Format(Context.API.GetTranslation("flowlauncher_plugin_cmd_cmd_has_been_executed_times"), m.Value), SubTitle = Localize.flowlauncher_plugin_cmd_cmd_has_been_executed_times(m.Value),
IcoPath = Image, IcoPath = Image,
Action = c => Action = c =>
{ {
@ -129,9 +130,9 @@ namespace Flow.Launcher.Plugin.Shell
}).Where(o => o != null); }).Where(o => o != null);
if (_settings.ShowOnlyMostUsedCMDs) if (_settings.ShowOnlyMostUsedCMDs)
return history.Take(_settings.ShowOnlyMostUsedCMDsNumber).ToList(); return [.. history.Take(_settings.ShowOnlyMostUsedCMDsNumber)];
return history.ToList(); return [.. history];
} }
private Result GetCurrentCmd(string cmd) private Result GetCurrentCmd(string cmd)
@ -140,7 +141,7 @@ namespace Flow.Launcher.Plugin.Shell
{ {
Title = cmd, Title = cmd,
Score = 5000, Score = 5000,
SubTitle = Context.API.GetTranslation("flowlauncher_plugin_cmd_execute_through_shell"), SubTitle = Localize.flowlauncher_plugin_cmd_execute_through_shell(),
IcoPath = Image, IcoPath = Image,
Action = c => Action = c =>
{ {
@ -165,7 +166,7 @@ namespace Flow.Launcher.Plugin.Shell
.Select(m => new Result .Select(m => new Result
{ {
Title = m.Key, Title = m.Key,
SubTitle = string.Format(Context.API.GetTranslation("flowlauncher_plugin_cmd_cmd_has_been_executed_times"), m.Value), SubTitle = Localize.flowlauncher_plugin_cmd_cmd_has_been_executed_times(m.Value),
IcoPath = Image, IcoPath = Image,
Action = c => Action = c =>
{ {
@ -182,9 +183,9 @@ namespace Flow.Launcher.Plugin.Shell
}); });
if (_settings.ShowOnlyMostUsedCMDs) if (_settings.ShowOnlyMostUsedCMDs)
return history.Take(_settings.ShowOnlyMostUsedCMDsNumber).ToList(); return [.. history.Take(_settings.ShowOnlyMostUsedCMDsNumber)];
return history.ToList(); return [.. history];
} }
private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdministrator = false) private ProcessStartInfo PrepareProcessStartInfo(string command, bool runAsAdministrator = false)
@ -199,7 +200,7 @@ namespace Flow.Launcher.Plugin.Shell
Verb = runAsAdministratorArg, Verb = runAsAdministratorArg,
WorkingDirectory = workingDirectory, WorkingDirectory = workingDirectory,
}; };
var notifyStr = Context.API.GetTranslation("flowlauncher_plugin_cmd_press_any_key_to_close"); var notifyStr = Localize.flowlauncher_plugin_cmd_press_any_key_to_close();
var addedCharacter = _settings.UseWindowsTerminal ? "\\" : ""; var addedCharacter = _settings.UseWindowsTerminal ? "\\" : "";
switch (_settings.Shell) switch (_settings.Shell)
{ {
@ -288,10 +289,10 @@ namespace Flow.Launcher.Plugin.Shell
case Shell.RunCommand: case Shell.RunCommand:
{ {
var parts = command.Split(new[] var parts = command.Split(
{ [
' ' ' '
}, 2); ], 2);
if (parts.Length == 2) if (parts.Length == 2)
{ {
var filename = parts[0]; var filename = parts[0];
@ -336,12 +337,12 @@ namespace Flow.Launcher.Plugin.Shell
catch (FileNotFoundException e) catch (FileNotFoundException e)
{ {
Context.API.ShowMsgError(GetTranslatedPluginTitle(), Context.API.ShowMsgError(GetTranslatedPluginTitle(),
string.Format(Context.API.GetTranslation("flowlauncher_plugin_cmd_command_not_found"), e.Message)); Localize.flowlauncher_plugin_cmd_command_not_found(e.Message));
} }
catch (Win32Exception e) catch (Win32Exception e)
{ {
Context.API.ShowMsgError(GetTranslatedPluginTitle(), Context.API.ShowMsgError(GetTranslatedPluginTitle(),
string.Format(Context.API.GetTranslation("flowlauncher_plugin_cmd_error_running_command"), e.Message)); Localize.flowlauncher_plugin_cmd_error_running_command(e.Message));
} }
catch (Exception e) catch (Exception e)
{ {
@ -383,9 +384,16 @@ namespace Flow.Launcher.Plugin.Shell
Context = context; Context = context;
_settings = context.API.LoadSettingJsonStorage<Settings>(); _settings = context.API.LoadSettingJsonStorage<Settings>();
context.API.RegisterGlobalKeyboardCallback(API_GlobalKeyboardEvent); context.API.RegisterGlobalKeyboardCallback(API_GlobalKeyboardEvent);
// Since the old Settings class set default value of ShowOnlyMostUsedCMDsNumber to 0 which is a wrong value,
// we need to fix it here to make sure the default value is 5
// todo: remove this code block after release v2.2.0
if (_settings.ShowOnlyMostUsedCMDsNumber == 0)
{
_settings.ShowOnlyMostUsedCMDsNumber = 5;
}
} }
bool API_GlobalKeyboardEvent(int keyevent, int vkcode, SpecialKeyState state) private bool API_GlobalKeyboardEvent(int keyevent, int vkcode, SpecialKeyState state)
{ {
if (!Context.CurrentPluginMetadata.Disabled && _settings.ReplaceWinR) if (!Context.CurrentPluginMetadata.Disabled && _settings.ReplaceWinR)
{ {
@ -405,7 +413,7 @@ namespace Flow.Launcher.Plugin.Shell
return true; return true;
} }
private void OnWinRPressed() private static void OnWinRPressed()
{ {
Context.API.ShowMainWindow(); Context.API.ShowMainWindow();
// show the main window and set focus to the query box // show the main window and set focus to the query box
@ -428,12 +436,12 @@ namespace Flow.Launcher.Plugin.Shell
public string GetTranslatedPluginTitle() public string GetTranslatedPluginTitle()
{ {
return Context.API.GetTranslation("flowlauncher_plugin_cmd_plugin_name"); return Localize.flowlauncher_plugin_cmd_plugin_name();
} }
public string GetTranslatedPluginDescription() public string GetTranslatedPluginDescription()
{ {
return Context.API.GetTranslation("flowlauncher_plugin_cmd_plugin_description"); return Localize.flowlauncher_plugin_cmd_plugin_description();
} }
public List<Result> LoadContextMenus(Result selectedResult) public List<Result> LoadContextMenus(Result selectedResult)
@ -442,7 +450,7 @@ namespace Flow.Launcher.Plugin.Shell
{ {
new() new()
{ {
Title = Context.API.GetTranslation("flowlauncher_plugin_cmd_run_as_different_user"), Title = Localize.flowlauncher_plugin_cmd_run_as_different_user(),
Action = c => Action = c =>
{ {
Execute(ShellCommand.RunAsDifferentUser, PrepareProcessStartInfo(selectedResult.Title)); Execute(ShellCommand.RunAsDifferentUser, PrepareProcessStartInfo(selectedResult.Title));
@ -453,7 +461,7 @@ namespace Flow.Launcher.Plugin.Shell
}, },
new() new()
{ {
Title = Context.API.GetTranslation("flowlauncher_plugin_cmd_run_as_administrator"), Title = Localize.flowlauncher_plugin_cmd_run_as_administrator(),
Action = c => Action = c =>
{ {
Execute(Process.Start, PrepareProcessStartInfo(selectedResult.Title, true)); Execute(Process.Start, PrepareProcessStartInfo(selectedResult.Title, true));
@ -464,7 +472,7 @@ namespace Flow.Launcher.Plugin.Shell
}, },
new() new()
{ {
Title = Context.API.GetTranslation("flowlauncher_plugin_cmd_copy"), Title = Localize.flowlauncher_plugin_cmd_copy(),
Action = c => Action = c =>
{ {
Context.API.CopyToClipboard(selectedResult.Title); Context.API.CopyToClipboard(selectedResult.Title);

View file

@ -1,45 +1,146 @@
using System.Collections.Generic; using System.Collections.Generic;
using Flow.Launcher.Localization.Attributes;
namespace Flow.Launcher.Plugin.Shell namespace Flow.Launcher.Plugin.Shell
{ {
public class Settings public class Settings : BaseModel
{ {
public Shell Shell { get; set; } = Shell.Cmd; private Shell _shell = Shell.Cmd;
public Shell Shell
public bool ReplaceWinR { get; set; } = false; {
get => _shell;
set
{
if (_shell != value)
{
_shell = value;
OnPropertyChanged();
}
}
}
public bool CloseShellAfterPress { get; set; } = false; private bool _replaceWinR = false;
public bool ReplaceWinR
public bool LeaveShellOpen { get; set; } {
get => _replaceWinR;
set
{
if (_replaceWinR != value)
{
_replaceWinR = value;
OnPropertyChanged();
}
}
}
public bool RunAsAdministrator { get; set; } = true; private bool _closeShellAfterPress = false;
public bool CloseShellAfterPress
{
get => _closeShellAfterPress;
set
{
if (_closeShellAfterPress != value)
{
_closeShellAfterPress = value;
OnPropertyChanged();
}
}
}
public bool UseWindowsTerminal { get; set; } = false; private bool _leaveShellOpen;
public bool LeaveShellOpen
{
get => _leaveShellOpen;
set
{
if (_leaveShellOpen != value)
{
_leaveShellOpen = value;
OnPropertyChanged();
}
}
}
public bool ShowOnlyMostUsedCMDs { get; set; } private bool _runAsAdministrator = true;
public bool RunAsAdministrator
{
get => _runAsAdministrator;
set
{
if (_runAsAdministrator != value)
{
_runAsAdministrator = value;
OnPropertyChanged();
}
}
}
public int ShowOnlyMostUsedCMDsNumber { get; set; } private bool _useWindowsTerminal = false;
public bool UseWindowsTerminal
{
get => _useWindowsTerminal;
set
{
if (_useWindowsTerminal != value)
{
_useWindowsTerminal = value;
OnPropertyChanged();
}
}
}
public Dictionary<string, int> CommandHistory { get; set; } = new Dictionary<string, int>(); private bool _showOnlyMostUsedCMDs;
public bool ShowOnlyMostUsedCMDs
{
get => _showOnlyMostUsedCMDs;
set
{
if (_showOnlyMostUsedCMDs != value)
{
_showOnlyMostUsedCMDs = value;
OnPropertyChanged();
}
}
}
private int _showOnlyMostUsedCMDsNumber = 5;
public int ShowOnlyMostUsedCMDsNumber
{
get => _showOnlyMostUsedCMDsNumber;
set
{
if (_showOnlyMostUsedCMDsNumber != value)
{
_showOnlyMostUsedCMDsNumber = value;
OnPropertyChanged();
}
}
}
public Dictionary<string, int> CommandHistory { get; set; } = [];
public void AddCmdHistory(string cmdName) public void AddCmdHistory(string cmdName)
{ {
if (CommandHistory.ContainsKey(cmdName)) if (!CommandHistory.TryAdd(cmdName, 1))
{ {
CommandHistory[cmdName] += 1; CommandHistory[cmdName] += 1;
} }
else
{
CommandHistory.Add(cmdName, 1);
}
} }
} }
[EnumLocalize]
public enum Shell public enum Shell
{ {
[EnumLocalizeValue("CMD")]
Cmd = 0, Cmd = 0,
[EnumLocalizeValue("PowerShell")]
Powershell = 1, Powershell = 1,
[EnumLocalizeValue("RunCommand")]
RunCommand = 2, RunCommand = 2,
[EnumLocalizeValue("Pwsh")]
Pwsh = 3, Pwsh = 3,
} }
} }

View file

@ -1,143 +0,0 @@
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace Flow.Launcher.Plugin.Shell
{
public partial class CMDSetting : UserControl
{
private readonly Settings _settings;
public CMDSetting(Settings settings)
{
InitializeComponent();
_settings = settings;
}
private void CMDSetting_OnLoaded(object sender, RoutedEventArgs re)
{
ReplaceWinR.IsChecked = _settings.ReplaceWinR;
CloseShellAfterPress.IsChecked = _settings.CloseShellAfterPress;
LeaveShellOpen.IsChecked = _settings.LeaveShellOpen;
AlwaysRunAsAdministrator.IsChecked = _settings.RunAsAdministrator;
UseWindowsTerminal.IsChecked = _settings.UseWindowsTerminal;
LeaveShellOpen.IsEnabled = _settings.Shell != Shell.RunCommand;
ShowOnlyMostUsedCMDs.IsChecked = _settings.ShowOnlyMostUsedCMDs;
if ((bool)!ShowOnlyMostUsedCMDs.IsChecked)
ShowOnlyMostUsedCMDsNumber.IsEnabled = false;
ShowOnlyMostUsedCMDsNumber.ItemsSource = new List<int>() { 5, 10, 20 };
if (_settings.ShowOnlyMostUsedCMDsNumber == 0)
{
ShowOnlyMostUsedCMDsNumber.SelectedIndex = 0;
_settings.ShowOnlyMostUsedCMDsNumber = (int)ShowOnlyMostUsedCMDsNumber.SelectedItem;
}
CloseShellAfterPress.Checked += (o, e) =>
{
_settings.CloseShellAfterPress = true;
LeaveShellOpen.IsChecked = false;
LeaveShellOpen.IsEnabled = false;
};
CloseShellAfterPress.Unchecked += (o, e) =>
{
_settings.CloseShellAfterPress = false;
LeaveShellOpen.IsEnabled = true;
};
LeaveShellOpen.Checked += (o, e) =>
{
_settings.LeaveShellOpen = true;
CloseShellAfterPress.IsChecked = false;
CloseShellAfterPress.IsEnabled = false;
};
LeaveShellOpen.Unchecked += (o, e) =>
{
_settings.LeaveShellOpen = false;
CloseShellAfterPress.IsEnabled = true;
};
AlwaysRunAsAdministrator.Checked += (o, e) =>
{
_settings.RunAsAdministrator = true;
};
AlwaysRunAsAdministrator.Unchecked += (o, e) =>
{
_settings.RunAsAdministrator = false;
};
UseWindowsTerminal.Checked += (o, e) =>
{
_settings.UseWindowsTerminal = true;
};
UseWindowsTerminal.Unchecked += (o, e) =>
{
_settings.UseWindowsTerminal = false;
};
ReplaceWinR.Checked += (o, e) =>
{
_settings.ReplaceWinR = true;
};
ReplaceWinR.Unchecked += (o, e) =>
{
_settings.ReplaceWinR = false;
};
ShellComboBox.SelectedIndex = _settings.Shell switch
{
Shell.Cmd => 0,
Shell.Powershell => 1,
Shell.Pwsh => 2,
_ => ShellComboBox.Items.Count - 1
};
ShellComboBox.SelectionChanged += (o, e) =>
{
_settings.Shell = ShellComboBox.SelectedIndex switch
{
0 => Shell.Cmd,
1 => Shell.Powershell,
2 => Shell.Pwsh,
_ => Shell.RunCommand
};
LeaveShellOpen.IsEnabled = _settings.Shell != Shell.RunCommand;
};
ShowOnlyMostUsedCMDs.Checked += (o, e) =>
{
_settings.ShowOnlyMostUsedCMDs = true;
ShowOnlyMostUsedCMDsNumber.IsEnabled = true;
};
ShowOnlyMostUsedCMDs.Unchecked += (o, e) =>
{
_settings.ShowOnlyMostUsedCMDs = false;
ShowOnlyMostUsedCMDsNumber.IsEnabled = false;
};
ShowOnlyMostUsedCMDsNumber.SelectedItem = _settings.ShowOnlyMostUsedCMDsNumber;
ShowOnlyMostUsedCMDsNumber.SelectionChanged += (o, e) =>
{
_settings.ShowOnlyMostUsedCMDsNumber = (int)ShowOnlyMostUsedCMDsNumber.SelectedItem;
};
}
}
}

View file

@ -0,0 +1,78 @@
using System.Collections.Generic;
namespace Flow.Launcher.Plugin.Shell.ViewModels;
public class ShellSettingViewModel : BaseModel
{
public Settings Settings { get; }
public List<ShellLocalized> AllShells { get; } = ShellLocalized.GetValues();
public Shell SelectedShell
{
get => Settings.Shell;
set
{
if (Settings.Shell != value)
{
Settings.Shell = value;
OnPropertyChanged();
}
}
}
public List<int> OnlyMostUsedCMDsNumbers { get; } = [5, 10, 20];
public int SelectedOnlyMostUsedCMDsNumber
{
get => Settings.ShowOnlyMostUsedCMDsNumber;
set
{
if (Settings.ShowOnlyMostUsedCMDsNumber != value)
{
Settings.ShowOnlyMostUsedCMDsNumber = value;
OnPropertyChanged();
}
}
}
public bool CloseShellAfterPress
{
get => Settings.CloseShellAfterPress;
set
{
if (Settings.CloseShellAfterPress != value)
{
Settings.CloseShellAfterPress = value;
OnPropertyChanged();
// Only allow CloseShellAfterPress to be true when LeaveShellOpen is false
if (value)
{
LeaveShellOpen = false;
}
}
}
}
public bool LeaveShellOpen
{
get => Settings.LeaveShellOpen;
set
{
if (Settings.LeaveShellOpen != value)
{
Settings.LeaveShellOpen = value;
OnPropertyChanged();
// Only allow LeaveShellOpen to be true when CloseShellAfterPress is false
if (value)
{
CloseShellAfterPress = false;
}
}
}
}
public ShellSettingViewModel(Settings settings)
{
Settings = settings;
}
}

View file

@ -1,13 +1,19 @@
<UserControl <UserControl
x:Class="Flow.Launcher.Plugin.Shell.CMDSetting" x:Class="Flow.Launcher.Plugin.Shell.Views.CMDSetting"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:converters="clr-namespace:Flow.Launcher.Plugin.Shell.Converters"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:Flow.Launcher.Plugin.Shell.ViewModels"
d:DataContext="{d:DesignInstance vm:ShellSettingViewModel}"
d:DesignHeight="300" d:DesignHeight="300"
d:DesignWidth="300" d:DesignWidth="300"
Loaded="CMDSetting_OnLoaded"
mc:Ignorable="d"> mc:Ignorable="d">
<UserControl.Resources>
<converters:LeaveShellOpenOrCloseShellAfterPressEnabledConverter x:Key="LeaveShellOpenOrCloseShellAfterPressEnabledConverter" />
</UserControl.Resources>
<Grid Margin="{StaticResource SettingPanelMargin}" VerticalAlignment="Top"> <Grid Margin="{StaticResource SettingPanelMargin}" VerticalAlignment="Top">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition /> <RowDefinition />
@ -23,50 +29,72 @@
Grid.Row="0" Grid.Row="0"
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}" Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Content="{DynamicResource flowlauncher_plugin_cmd_relace_winr}" /> Content="{DynamicResource flowlauncher_plugin_cmd_relace_winr}"
IsChecked="{Binding Settings.ReplaceWinR, Mode=TwoWay}" />
<CheckBox <CheckBox
x:Name="CloseShellAfterPress" x:Name="CloseShellAfterPress"
Grid.Row="1" Grid.Row="1"
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}" Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Content="{DynamicResource flowlauncher_plugin_cmd_close_cmd_after_press}" /> Content="{DynamicResource flowlauncher_plugin_cmd_close_cmd_after_press}"
IsChecked="{Binding CloseShellAfterPress, Mode=TwoWay}">
<CheckBox.IsEnabled>
<MultiBinding Converter="{StaticResource LeaveShellOpenOrCloseShellAfterPressEnabledConverter}">
<Binding Mode="OneWay" Path="LeaveShellOpen" />
<Binding Mode="OneWay" Path="SelectedShell" />
</MultiBinding>
</CheckBox.IsEnabled>
</CheckBox>
<CheckBox <CheckBox
x:Name="LeaveShellOpen" x:Name="LeaveShellOpen"
Grid.Row="2" Grid.Row="2"
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}" Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Content="{DynamicResource flowlauncher_plugin_cmd_leave_cmd_open}" /> Content="{DynamicResource flowlauncher_plugin_cmd_leave_cmd_open}"
IsChecked="{Binding LeaveShellOpen, Mode=TwoWay}">
<CheckBox.IsEnabled>
<MultiBinding Converter="{StaticResource LeaveShellOpenOrCloseShellAfterPressEnabledConverter}">
<Binding Mode="OneWay" Path="CloseShellAfterPress" />
<Binding Mode="OneWay" Path="SelectedShell" />
</MultiBinding>
</CheckBox.IsEnabled>
</CheckBox>
<CheckBox <CheckBox
x:Name="AlwaysRunAsAdministrator" x:Name="AlwaysRunAsAdministrator"
Grid.Row="3" Grid.Row="3"
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}" Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Content="{DynamicResource flowlauncher_plugin_cmd_always_run_as_administrator}" /> Content="{DynamicResource flowlauncher_plugin_cmd_always_run_as_administrator}"
IsChecked="{Binding Settings.RunAsAdministrator, Mode=TwoWay}" />
<CheckBox <CheckBox
x:Name="UseWindowsTerminal" x:Name="UseWindowsTerminal"
Grid.Row="4" Grid.Row="4"
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}" Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
HorizontalAlignment="Left" HorizontalAlignment="Left"
Content="{DynamicResource flowlauncher_plugin_cmd_use_windows_terminal}" /> Content="{DynamicResource flowlauncher_plugin_cmd_use_windows_terminal}"
IsChecked="{Binding Settings.UseWindowsTerminal, Mode=TwoWay}" />
<ComboBox <ComboBox
x:Name="ShellComboBox" x:Name="ShellComboBox"
Grid.Row="5" Grid.Row="5"
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}" Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
HorizontalAlignment="Left"> HorizontalAlignment="Left"
<ComboBoxItem>CMD</ComboBoxItem> DisplayMemberPath="Display"
<ComboBoxItem>PowerShell</ComboBoxItem> ItemsSource="{Binding AllShells, Mode=OneTime}"
<ComboBoxItem>Pwsh</ComboBoxItem> SelectedValue="{Binding SelectedShell, Mode=TwoWay}"
<ComboBoxItem>RunCommand</ComboBoxItem> SelectedValuePath="Value" />
</ComboBox>
<StackPanel Grid.Row="6" Orientation="Horizontal"> <StackPanel Grid.Row="6" Orientation="Horizontal">
<CheckBox <CheckBox
x:Name="ShowOnlyMostUsedCMDs" x:Name="ShowOnlyMostUsedCMDs"
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}" Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
Content="{DynamicResource flowlauncher_plugin_cmd_history}" /> Content="{DynamicResource flowlauncher_plugin_cmd_history}"
IsChecked="{Binding Settings.ShowOnlyMostUsedCMDs, Mode=TwoWay}" />
<ComboBox <ComboBox
x:Name="ShowOnlyMostUsedCMDsNumber" x:Name="ShowOnlyMostUsedCMDsNumber"
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}" Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
HorizontalAlignment="Left" /> HorizontalAlignment="Left"
IsEnabled="{Binding Settings.ShowOnlyMostUsedCMDs, Mode=OneWay}"
ItemsSource="{Binding OnlyMostUsedCMDsNumbers, Mode=OneTime}"
SelectedItem="{Binding SelectedOnlyMostUsedCMDsNumber, Mode=TwoWay}" />
</StackPanel> </StackPanel>
</Grid> </Grid>
</UserControl> </UserControl>

View file

@ -0,0 +1,15 @@
using System.Windows.Controls;
using Flow.Launcher.Plugin.Shell.ViewModels;
namespace Flow.Launcher.Plugin.Shell.Views
{
public partial class CMDSetting : UserControl
{
public CMDSetting(Settings settings)
{
var viewModel = new ShellSettingViewModel(settings);
DataContext = viewModel;
InitializeComponent();
}
}
}

View file

@ -5,15 +5,13 @@ namespace Flow.Launcher.Plugin.Sys
public partial class CommandKeywordSettingWindow public partial class CommandKeywordSettingWindow
{ {
private readonly Command _oldSearchSource; private readonly Command _oldSearchSource;
private readonly PluginInitContext _context;
public CommandKeywordSettingWindow(PluginInitContext context, Command old) public CommandKeywordSettingWindow(Command old)
{ {
_context = context;
_oldSearchSource = old; _oldSearchSource = old;
InitializeComponent(); InitializeComponent();
CommandKeyword.Text = old.Keyword; CommandKeyword.Text = old.Keyword;
CommandKeywordTips.Text = string.Format(_context.API.GetTranslation("flowlauncher_plugin_sys_custom_command_keyword_tip"), old.Name); CommandKeywordTips.Text = Localize.flowlauncher_plugin_sys_custom_command_keyword_tip(old.Name);
} }
private void OnCancelButtonClick(object sender, RoutedEventArgs e) private void OnCancelButtonClick(object sender, RoutedEventArgs e)
@ -26,8 +24,8 @@ namespace Flow.Launcher.Plugin.Sys
var keyword = CommandKeyword.Text; var keyword = CommandKeyword.Text;
if (string.IsNullOrEmpty(keyword)) if (string.IsNullOrEmpty(keyword))
{ {
var warning = _context.API.GetTranslation("flowlauncher_plugin_sys_input_command_keyword"); var warning = Localize.flowlauncher_plugin_sys_input_command_keyword();
_context.API.ShowMsgBox(warning); Main.Context.API.ShowMsgBox(warning);
} }
else else
{ {

View file

@ -34,6 +34,7 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel> <WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit> <Prefer32Bit>false</Prefer32Bit>
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
@ -58,6 +59,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<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.205">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">أوامر النظام</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">أوامر النظام</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">يوفر أوامر متعلقة بالنظام، مثل إيقاف التشغيل، القفل، الإعدادات، وما إلى ذلك.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">يوفر أوامر متعلقة بالنظام، مثل إيقاف التشغيل، القفل، الإعدادات، وما إلى ذلك.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Systémové příkazy</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Systémové příkazy</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Poskytuje příkazy související se systémem, jako je vypnutí, uzamčení počítače atd.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Poskytuje příkazy související se systémem, jako je vypnutí, uzamčení počítače atd.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">System Commands</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">System Commands</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Systembefehle</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Systembefehle</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Bietet systembezogene Befehle, z. B. Herunterfahren, Sperren, Einstellungen etc.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Bietet systembezogene Befehle, z. B. Herunterfahren, Sperren, Einstellungen etc.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -78,4 +78,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">System Commands</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">System Commands</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">System Commands</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">System Commands</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Comandos del sistema</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Comandos del sistema</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Proporciona comandos relacionados con el sistema. Por ejemplo, apagar, bloquear, configurar, etc.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Proporciona comandos relacionados con el sistema. Por ejemplo, apagar, bloquear, configurar, etc.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">Este tema admite dos modos (claro/oscuro) y fondo transparente desenfocado</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">Este tema admite dos modos (claro/oscuro)</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">Este tema admite fondo transparente desenfocado</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Commandes système</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Commandes système</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Fournit des commandes liées au système. Par exemple, arrêt, verrouillage, paramètres, etc.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Fournit des commandes liées au système. Par exemple, arrêt, verrouillage, paramètres, etc.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">Ce thème prend en charge deux modes (clair / sombre) et un fond transparent flou</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">Ce thème prend en charge deux modes (clair / sombre)</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">Ce thème prend en charge un fond transparent flou</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">פקודות מערכת</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">פקודות מערכת</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">מספק פקודות הקשורות למערכת, כגון כיבוי, נעילה, הגדרות ועוד.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">מספק פקודות הקשורות למערכת, כגון כיבוי, נעילה, הגדרות ועוד.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Comandi di Sistema</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Comandi di Sistema</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Fornisce comandi relativi al sistema, ad esempio spegnimento, blocco, impostazioni ecc.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Fornisce comandi relativi al sistema, ad esempio spegnimento, blocco, impostazioni ecc.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -18,7 +18,7 @@
<system:String x:Key="flowlauncher_plugin_sys_openrecyclebin_cmd">ごみ箱を開く</system:String> <system:String x:Key="flowlauncher_plugin_sys_openrecyclebin_cmd">ごみ箱を開く</system:String>
<system:String x:Key="flowlauncher_plugin_sys_exit_cmd">終了</system:String> <system:String x:Key="flowlauncher_plugin_sys_exit_cmd">終了</system:String>
<system:String x:Key="flowlauncher_plugin_sys_save_all_settings_cmd">設定を保存</system:String> <system:String x:Key="flowlauncher_plugin_sys_save_all_settings_cmd">設定を保存</system:String>
<system:String x:Key="flowlauncher_plugin_sys_restart_cmd">Flow Launcherを再起動する</system:String> <system:String x:Key="flowlauncher_plugin_sys_restart_cmd">Flow Launcherを再起動</system:String>
<system:String x:Key="flowlauncher_plugin_sys_setting_cmd">設定</system:String> <system:String x:Key="flowlauncher_plugin_sys_setting_cmd">設定</system:String>
<system:String x:Key="flowlauncher_plugin_sys_reload_plugin_data_cmd">プラグインデータのリロード</system:String> <system:String x:Key="flowlauncher_plugin_sys_reload_plugin_data_cmd">プラグインデータのリロード</system:String>
<system:String x:Key="flowlauncher_plugin_sys_check_for_update_cmd">更新を確認</system:String> <system:String x:Key="flowlauncher_plugin_sys_check_for_update_cmd">更新を確認</system:String>
@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">システムコマンド</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">システムコマンド</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">システム関連のコマンドを提供します。例:シャットダウン、ロック、設定など</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">システム関連のコマンドを提供します。例:シャットダウン、ロック、設定など</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">このテーマは2つのモード明るい/暗い)と透明な背景をぼかし効果が使用できます</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">このテーマはライトダークの2モードに対応しています</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">このテーマは背景のぼかした透明効果をサポートしています</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">시스템 명령어</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">시스템 명령어</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">시스템 종료, 컴퓨터 잠금, 설정 등과 같은 시스템 관련 명령어를 제공합니다</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">시스템 종료, 컴퓨터 잠금, 설정 등과 같은 시스템 관련 명령어를 제공합니다</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Systemkommandoer</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Systemkommandoer</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Gir systemrelaterte kommandoer, f.eks. slå av, lås, innstillinger osv.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Gir systemrelaterte kommandoer, f.eks. slå av, lås, innstillinger osv.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Systeemopdrachten</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Systeemopdrachten</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Voorziet in systeem gerelateerde opdrachten. bijv.: afsluiten, vergrendelen, instellingen, enz.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Voorziet in systeem gerelateerde opdrachten. bijv.: afsluiten, vergrendelen, instellingen, enz.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Komendy systemowe</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Komendy systemowe</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Wykonywanie komend systemowych, np. wyłącz, zablokuj komputer, otwórz ustawienia itp.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Wykonywanie komend systemowych, np. wyłącz, zablokuj komputer, otwórz ustawienia itp.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">System Commands</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">System Commands</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Comandos do sistema</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Comandos do sistema</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Disponibiliza os comandos relacionados com o sistema tais como: desligar, bloquear, reiniciar...</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Disponibiliza os comandos relacionados com o sistema tais como: desligar, bloquear, reiniciar...</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">Este tema tem suporte a dois modos (claro/escuro) e fundo transparente</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">Este tema tem suporte a dois modos (claro/escuro)</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">Este tema tem suporte a fundo transparente desfocado</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Системные команды</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Системные команды</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">Systémové príkazy</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">Systémové príkazy</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Poskytuje príkazy súvisiace so systémom ako je vypnutie, uzamknutie počítača atď.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Poskytuje príkazy súvisiace so systémom ako je vypnutie, uzamknutie počítača atď.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">Tento motív podporuje 2 režimy (svetlý/tmavý) a rozostrenie priehľadného pozadia</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">Tento motív podporuje 2 režimy (svetlý/tmavý)</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">Tento motív podporuje rozostrenie priehľadného pozadia</system:String>
</ResourceDictionary> </ResourceDictionary>

View file

@ -76,4 +76,9 @@
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">System Commands</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_name">System Commands</system:String>
<system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String> <system:String x:Key="flowlauncher_plugin_sys_plugin_description">Provides System related commands. e.g. shutdown, lock, settings etc.</system:String>
<!-- Theme Selector -->
<system:String x:Key="flowlauncher_plugin_sys_type_isdark_hasblur">This theme supports two (light/dark) modes and Blur Transparent Background</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_isdark">This theme supports two (light/dark) modes</system:String>
<system:String x:Key="flowlauncher_plugin_sys_type_hasblur">This theme supports Blur Transparent Background</system:String>
</ResourceDictionary> </ResourceDictionary>

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