mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Release 2.0.2 | Plugin 5.1.0 (#4046)
This commit is contained in:
parent
a05e09908c
commit
f37d4c47cc
167 changed files with 1487 additions and 873 deletions
|
|
@ -85,5 +85,10 @@ QueryFullProcessImageName
|
|||
EVENT_OBJECT_HIDE
|
||||
EVENT_SYSTEM_DIALOGEND
|
||||
|
||||
DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS
|
||||
WM_POWERBROADCAST
|
||||
PBT_APMRESUMEAUTOMATIC
|
||||
PBT_APMRESUMEAUTOMATIC
|
||||
PBT_APMRESUMESUSPEND
|
||||
PowerRegisterSuspendResumeNotification
|
||||
PowerUnregisterSuspendResumeNotification
|
||||
DeviceNotifyCallbackRoutine
|
||||
|
|
@ -7,8 +7,8 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
{
|
||||
public const string PortableFolderName = "UserData";
|
||||
public const string DeletionIndicatorFile = ".dead";
|
||||
public static string PortableDataPath = Path.Combine(Constant.ProgramDirectory, PortableFolderName);
|
||||
public static string RoamingDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlowLauncher");
|
||||
public static readonly string PortableDataPath = Path.Combine(Constant.ProgramDirectory, PortableFolderName);
|
||||
public static readonly string RoamingDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlowLauncher");
|
||||
public static string DataDirectory()
|
||||
{
|
||||
if (PortableDataLocationInUse())
|
||||
|
|
@ -19,7 +19,8 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
|
||||
public static bool PortableDataLocationInUse()
|
||||
{
|
||||
if (Directory.Exists(PortableDataPath) && !File.Exists(DeletionIndicatorFile))
|
||||
if (Directory.Exists(PortableDataPath) &&
|
||||
!File.Exists(Path.Combine(PortableDataPath, DeletionIndicatorFile)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,7 @@ using Microsoft.Win32.SafeHandles;
|
|||
using Windows.Win32;
|
||||
using Windows.Win32.Foundation;
|
||||
using Windows.Win32.Graphics.Dwm;
|
||||
using Windows.Win32.System.Power;
|
||||
using Windows.Win32.System.Threading;
|
||||
using Windows.Win32.UI.Input.KeyboardAndMouse;
|
||||
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_MINIMIZE = (int)PInvoke.SC_MINIMIZE;
|
||||
|
||||
public const int WM_POWERBROADCAST = (int)PInvoke.WM_POWERBROADCAST;
|
||||
public const int PBT_APMRESUMEAUTOMATIC = (int)PInvoke.PBT_APMRESUMEAUTOMATIC;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Window Handle
|
||||
|
|
@ -918,5 +916,105 @@ namespace Flow.Launcher.Infrastructure
|
|||
}
|
||||
|
||||
#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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,10 +15,10 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<Version>5.0.0</Version>
|
||||
<PackageVersion>5.0.0</PackageVersion>
|
||||
<AssemblyVersion>5.0.0</AssemblyVersion>
|
||||
<FileVersion>5.0.0</FileVersion>
|
||||
<Version>5.1.0</Version>
|
||||
<PackageVersion>5.1.0</PackageVersion>
|
||||
<AssemblyVersion>5.1.0</AssemblyVersion>
|
||||
<FileVersion>5.1.0</FileVersion>
|
||||
<PackageId>Flow.Launcher.Plugin</PackageId>
|
||||
<Authors>Flow-Launcher</Authors>
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
|
|
|
|||
|
|
@ -150,6 +150,16 @@ namespace Flow.Launcher.Plugin.SharedCommands
|
|||
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>
|
||||
/// Open a directory window (using the OS's default handler, usually explorer)
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<system:String x:Key="plugin_query_version">الإصدار</system:String>
|
||||
<system:String x:Key="plugin_query_web">الموقع الإلكتروني</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="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>
|
||||
|
|
@ -595,8 +597,9 @@
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">يرجى الانتظار...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -595,8 +597,9 @@ Pokud před zkratku při zadávání přidáte znak "@", bude odpovíd
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Počkejte prosím...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -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 > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -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 > Allgemein.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Bitte warten Sie ...</system:String>
|
||||
|
|
|
|||
|
|
@ -587,6 +587,7 @@
|
|||
<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="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 -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -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 > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Por favor espere...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -224,7 +226,7 @@
|
|||
<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="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 -->
|
||||
<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="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="fileManagerExplorer">File Explorer</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">Explorador de archivos</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<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_newTab">Nueva pestaña</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_new_profile">New Profile</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Predeterminado</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">Nuevo perfil</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Cambiar la prioridad</system:String>
|
||||
|
|
@ -595,8 +597,9 @@ Si añade un prefijo "@" 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 > General.
|
||||
</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="fileNotFoundError">No se encuentra el archivo o directorio: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Por favor espere...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -594,8 +596,9 @@ Si vous ajoutez un préfixe "@" 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 > Général.
|
||||
</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 "Général" de la fenêtre des paramètres</system:String>
|
||||
<system:String x:Key="fileNotFoundError">Fichier ou répertoire introuvable : {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Veuillez patienter...</system:String>
|
||||
|
|
|
|||
|
|
@ -213,6 +213,8 @@
|
|||
<system:String x:Key="plugin_query_version">גרסה</system:String>
|
||||
<system:String x:Key="plugin_query_web">אתר</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="failedToRemovePluginSettingsMessage">תוספים: {0} - נכשל בהסרת קבצי הגדרות התוסף, יש להסירם ידנית</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">נכשל בהסרת מטמון התוסף</system:String>
|
||||
|
|
@ -594,8 +596,9 @@
|
|||
לא ניתן היה למצוא את מנהל הקבצים שצוין. אנא בדוק את ההגדרה של מנהל קבצים מותאם אישית תחת הגדרות > כללי.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">אנא המתן...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -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 > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Attendere prego...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<system:String x:Key="plugin_query_version">バージョン</system:String>
|
||||
<system:String x:Key="plugin_query_web">ウェブサイト</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="failedToRemovePluginSettingsMessage">プラグイン: {0} - プラグイン設定ファイルの削除に失敗しました。手動で削除してください</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="fileNotFoundMessage">展開されたzipファイルからplugin.jsonが見つからないか、このパス {0} が存在しません</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 -->
|
||||
<system:String x:Key="pluginStore">プラグインストア</system:String>
|
||||
|
|
@ -468,7 +470,7 @@
|
|||
<system:String x:Key="userdatapathButton">フォルダーを開く</system:String>
|
||||
<system:String x:Key="advanced">上級者向け機能</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="LogLevelINFO">情報</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="fileManagerPathNotFound">ファイルマネージャー '{0}' は、'{1}' に見つかりませんでした。続行しますか?</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 -->
|
||||
<system:String x:Key="defaultBrowserTitle">デフォルトのウェブブラウザー</system:String>
|
||||
|
|
@ -504,8 +506,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">新しいウィンドウ</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">新しいタブ</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">プライベートモード</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">デフォルト</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">新しいプロファイル</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">優先度の変更</system:String>
|
||||
|
|
@ -595,8 +597,9 @@
|
|||
指定されたファイルマネージャーが見つかりませんでした。設定 > 一般でカスタムファイルマネージャの設定を確認してください。
|
||||
</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="fileNotFoundError">ファイルまたはフォルダーが見つかりません: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">しばらくお待ちください…</system:String>
|
||||
|
|
|
|||
|
|
@ -205,6 +205,8 @@
|
|||
<system:String x:Key="plugin_query_version">버전</system:String>
|
||||
<system:String x:Key="plugin_query_web">웹사이트</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="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>
|
||||
|
|
@ -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 > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">잠시 기다려주세요...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -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 > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Vennligst vent...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -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 > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
|
|
|
|||
|
|
@ -8,33 +8,33 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
</system:String>
|
||||
<system:String x:Key="runtimePluginChooseRuntimeExecutable">Wybierz plik wykonywalny {0}</system:String>
|
||||
<system:String x:Key="runtimeExecutableInvalidChooseDownload">
|
||||
Your selected {0} executable is invalid.
|
||||
Wybrany plik wykonywalny {0} jest nieprawidłowy.
|
||||
{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 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="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 -->
|
||||
<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="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="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="shortcutsUninstallerCreated">Flow Launcher has detected you disabled portable mode, the relevant shortcuts and uninstaller entry have been created</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="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 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 wykrył włączenie trybu przenośnego. Czy chcesz przenieść aplikację do innej lokalizacji?</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 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 -->
|
||||
<system:String x:Key="pluginHasErrored">The following plugin has errored and cannot be loaded:</system:String>
|
||||
<system:String x:Key="pluginsHaveErrored">The following plugins have errored and cannot be loaded:</system:String>
|
||||
<system:String x:Key="referToLogs">Please refer to the logs for more information</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">Nie można załadować następujących wtyczek z powodu błędu:</system:String>
|
||||
<system:String x:Key="referToLogs">Aby uzyskać więcej informacji, zapoznaj się z logami</system:String>
|
||||
|
||||
<!-- Http -->
|
||||
<system:String x:Key="pleaseTryAgain">Please try again</system:String>
|
||||
<system:String x:Key="parseProxyFailed">Unable to parse Http Proxy</system:String>
|
||||
<system:String x:Key="pleaseTryAgain">Proszę spróbować ponownie</system:String>
|
||||
<system:String x:Key="parseProxyFailed">Nie można przetworzyć adresu serwera proxy HTTP</system:String>
|
||||
|
||||
<!-- AbstractPluginEnvironment -->
|
||||
<system:String x:Key="failToInstallTypeScriptEnv">Failed to install TypeScript environment. Please try again later</system:String>
|
||||
<system:String x:Key="failToInstallPythonEnv">Failed to install Python 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">Instalacja środowiska Python nie powiodła się. Spróbuj ponownie później.</system:String>
|
||||
|
||||
<!-- 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>
|
||||
|
|
@ -111,7 +111,7 @@ Kliknij "nie", 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="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="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="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>
|
||||
|
|
@ -123,7 +123,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="SearchPrecisionLow">Niska</system:String>
|
||||
<system:String x:Key="SearchPrecisionRegular">Standardowa</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="ShouldUseDoublePinyinToolTip">Use Double Pinyin instead of Full Pinyin to search.</system:String>
|
||||
<system:String x:Key="DoublePinyinSchema">Double Pinyin Schema</system:String>
|
||||
|
|
@ -213,6 +213,8 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<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_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="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>
|
||||
|
|
@ -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 > Ogólne.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Proszę czekać...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -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 > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Por favor, aguarde...</system:String>
|
||||
|
|
|
|||
|
|
@ -213,6 +213,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -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 -> Geral.
|
||||
</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="fileNotFoundError">Ficheiro ou diretório não encontrado: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Por favor aguarde...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<system:String x:Key="plugin_query_version">Версия</system:String>
|
||||
<system:String x:Key="plugin_query_web">Веб-сайт</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="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>
|
||||
|
|
@ -595,8 +597,9 @@
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Пожалуйста, подождите...</system:String>
|
||||
|
|
|
|||
|
|
@ -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_web">Webstránka</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="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>
|
||||
|
|
@ -596,8 +598,9 @@ Ak pri zadávaní skratky pred ňu pridáte "@", bude sa zhodovať s
|
|||
Zadaný správca súborov sa nenašiel. Skontrolujte nastavenie vlastného správcu súborov v Nastavenia > Všeobecné.
|
||||
</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="fileNotFoundError">Súbor alebo priečinok sa nenašiel: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Čakajte, prosím...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -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 > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -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 > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -224,7 +226,7 @@
|
|||
<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="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 -->
|
||||
<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="KeepMaxResults">Sabit Pencere Boyutu</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 -->
|
||||
<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="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="fileManagerExplorer">File Explorer</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">Dosya Gezgini</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<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_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_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Varsayılan</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">Yeni Profil</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Önceliği Ayarla</system:String>
|
||||
|
|
@ -593,8 +595,9 @@
|
|||
Belirtilen dosya yöneticisi bulunamadı. Lütfen Ayarlar > Genel bölümündeki Özel Dosya Yöneticisi ayarını kontrol edin.
|
||||
</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="fileNotFoundError">Dosya veya dizin bulunamadı: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Lütfen bekleyin...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<system:String x:Key="plugin_query_version">Версія</system:String>
|
||||
<system:String x:Key="plugin_query_web">Сайт</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="failedToRemovePluginSettingsMessage">Плагіни: {0} — Не вдалося видалити файли налаштувань плагінів, видаліть їх вручну.</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Не вдалося видалити кеш плагіну</system:String>
|
||||
|
|
@ -595,8 +597,9 @@
|
|||
Вказаний файловий менеджер не знайдено. Перевірте налаштування вашого файлового менеджера в розділі Налаштування > Загальні.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Будь ласка, зачекайте...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<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_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="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>
|
||||
|
|
@ -599,8 +601,9 @@
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Cảnh báo nhỏ...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<system:String x:Key="plugin_query_version">版本</system:String>
|
||||
<system:String x:Key="plugin_query_web">官方网站</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="failedToRemovePluginSettingsMessage">插件:{0} - 移除插件设置文件失败,请手动删除</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="fileNotFoundMessage">无法从提取的zip文件中找到plugin.json,或者此路径 {0} 不存在</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 -->
|
||||
<system:String x:Key="pluginStore">插件商店</system:String>
|
||||
|
|
@ -595,8 +597,9 @@
|
|||
找不到指定的文件管理器。请在“设置 > 通用”下检查自定义文件管理器设置。
|
||||
</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="fileNotFoundError">找不到文件或目录:{0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">请稍等...</system:String>
|
||||
|
|
|
|||
|
|
@ -214,6 +214,8 @@
|
|||
<system:String x:Key="plugin_query_version">版本</system:String>
|
||||
<system:String x:Key="plugin_query_web">官方網站</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="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>
|
||||
|
|
@ -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 > General.
|
||||
</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="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">請稍後...</system:String>
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ using System;
|
|||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Media;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
|
@ -61,8 +62,9 @@ namespace Flow.Launcher
|
|||
private bool _isArrowKeyPressed = false;
|
||||
|
||||
// Window Sound Effects
|
||||
private MediaPlayer animationSoundWMP;
|
||||
private SoundPlayer animationSoundWPF;
|
||||
private MediaPlayer _animationSoundWMP;
|
||||
private SoundPlayer _animationSoundWPF;
|
||||
private readonly Lock _soundLock = new();
|
||||
|
||||
// Window WndProc
|
||||
private HwndSource _hwndSource;
|
||||
|
|
@ -93,6 +95,7 @@ namespace Flow.Launcher
|
|||
UpdatePosition();
|
||||
|
||||
InitSoundEffects();
|
||||
RegisterSoundEffectsEvent();
|
||||
DataObject.AddPastingHandler(QueryTextBox, QueryTextBox_OnPaste);
|
||||
_viewModel.ActualApplicationThemeChanged += ViewModel_ActualApplicationThemeChanged;
|
||||
}
|
||||
|
|
@ -666,16 +669,6 @@ namespace Flow.Launcher
|
|||
handled = true;
|
||||
}
|
||||
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;
|
||||
|
|
@ -687,31 +680,78 @@ namespace Flow.Launcher
|
|||
|
||||
private void InitSoundEffects()
|
||||
{
|
||||
if (_settings.WMPInstalled)
|
||||
lock (_soundLock)
|
||||
{
|
||||
animationSoundWMP?.Close();
|
||||
animationSoundWMP = new MediaPlayer();
|
||||
animationSoundWMP.Open(new Uri(AppContext.BaseDirectory + "Resources\\open.wav"));
|
||||
}
|
||||
else
|
||||
{
|
||||
animationSoundWPF?.Dispose();
|
||||
animationSoundWPF = new SoundPlayer(AppContext.BaseDirectory + "Resources\\open.wav");
|
||||
animationSoundWPF.Load();
|
||||
if (_settings.WMPInstalled)
|
||||
{
|
||||
_animationSoundWMP?.Close();
|
||||
_animationSoundWMP = new MediaPlayer();
|
||||
_animationSoundWMP.Open(new Uri(AppContext.BaseDirectory + "Resources\\open.wav"));
|
||||
}
|
||||
else
|
||||
{
|
||||
_animationSoundWPF?.Dispose();
|
||||
_animationSoundWPF = new SoundPlayer(AppContext.BaseDirectory + "Resources\\open.wav");
|
||||
_animationSoundWPF.Load();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void SoundPlay()
|
||||
{
|
||||
if (_settings.WMPInstalled)
|
||||
lock (_soundLock)
|
||||
{
|
||||
animationSoundWMP.Position = TimeSpan.Zero;
|
||||
animationSoundWMP.Volume = _settings.SoundVolume / 100.0;
|
||||
animationSoundWMP.Play();
|
||||
if (_settings.WMPInstalled)
|
||||
{
|
||||
_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();
|
||||
_notifyIcon?.Dispose();
|
||||
animationSoundWMP?.Close();
|
||||
animationSoundWPF?.Dispose();
|
||||
_animationSoundWMP?.Close();
|
||||
_animationSoundWPF?.Dispose();
|
||||
_viewModel.ActualApplicationThemeChanged -= ViewModel_ActualApplicationThemeChanged;
|
||||
UnregisterSoundEffectsEvent();
|
||||
}
|
||||
|
||||
_disposed = true;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Concurrent;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
|
|
@ -74,7 +74,6 @@ namespace Flow.Launcher
|
|||
_mainVM.ChangeQueryText(query, requery);
|
||||
}
|
||||
|
||||
[System.Diagnostics.CodeAnalysis.SuppressMessage("Usage", "VSTHRD100:Avoid async void methods", Justification = "<Pending>")]
|
||||
public void RestartApp()
|
||||
{
|
||||
_mainVM.Hide();
|
||||
|
|
@ -179,7 +178,7 @@ namespace Flow.Launcher
|
|||
|
||||
Clipboard.SetFileDropList(paths);
|
||||
});
|
||||
|
||||
|
||||
if (exception == null)
|
||||
{
|
||||
if (showDefaultNotification)
|
||||
|
|
@ -218,7 +217,7 @@ namespace Flow.Launcher
|
|||
{
|
||||
LogException(nameof(PublicAPIInstance), "Failed to copy text to clipboard", exception);
|
||||
ShowMsgError(GetTranslation("failedToCopy"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -327,7 +326,7 @@ namespace Flow.Launcher
|
|||
|
||||
((PluginJsonStorage<T>)_pluginJsonStorages[type]).Save();
|
||||
}
|
||||
|
||||
|
||||
public void OpenDirectory(string directoryPath, string fileNameOrFilePath = null)
|
||||
{
|
||||
try
|
||||
|
|
@ -412,6 +411,12 @@ namespace Flow.Launcher
|
|||
|
||||
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)
|
||||
{
|
||||
var browserInfo = _settings.CustomBrowser;
|
||||
|
|
@ -441,13 +446,19 @@ namespace Flow.Launcher
|
|||
}
|
||||
else
|
||||
{
|
||||
Process.Start(new ProcessStartInfo()
|
||||
try
|
||||
{
|
||||
FileName = uri.AbsoluteUri,
|
||||
UseShellExecute = true
|
||||
})?.Dispose();
|
||||
|
||||
return;
|
||||
Process.Start(new ProcessStartInfo()
|
||||
{
|
||||
FileName = uri.AbsoluteUri,
|
||||
UseShellExecute = true
|
||||
})?.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);
|
||||
}
|
||||
|
||||
public void ToggleGameMode()
|
||||
public void ToggleGameMode()
|
||||
{
|
||||
_mainVM.ToggleGameMode();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
private static bool _portableMode = DataLocation.PortableDataLocationInUse();
|
||||
private static readonly bool _portableMode = DataLocation.PortableDataLocationInUse();
|
||||
|
||||
public bool PortableMode
|
||||
{
|
||||
|
|
|
|||
|
|
@ -91,9 +91,12 @@ public partial class SettingsPaneHotkeyViewModel : BaseModel
|
|||
if (window.ShowDialog() is not true) return;
|
||||
|
||||
var index = Settings.CustomPluginHotkeys.IndexOf(settingItem);
|
||||
Settings.CustomPluginHotkeys[index] = new CustomPluginHotkey(window.Hotkey, window.ActionKeyword);
|
||||
HotKeyMapper.RemoveHotkey(settingItem.Hotkey); // remove origin hotkey
|
||||
HotKeyMapper.SetCustomQueryHotkey(Settings.CustomPluginHotkeys[index]); // set new hotkey
|
||||
if (index >= 0 && index < Settings.CustomPluginHotkeys.Count)
|
||||
{
|
||||
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]
|
||||
|
|
@ -154,7 +157,10 @@ public partial class SettingsPaneHotkeyViewModel : BaseModel
|
|||
if (window.ShowDialog() is not true) return;
|
||||
|
||||
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]
|
||||
|
|
|
|||
|
|
@ -104,10 +104,10 @@
|
|||
|
||||
<ItemGroup>
|
||||
<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="Svg.Skia" Version="3.0.6" />
|
||||
<PackageReference Include="SkiaSharp" Version="3.119.0" />
|
||||
<PackageReference Include="Svg.Skia" Version="3.2.1" />
|
||||
<PackageReference Include="SkiaSharp" Version="3.119.1" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
|
|||
|
|
@ -7,10 +7,10 @@ namespace Flow.Launcher.Plugin.Calculator
|
|||
{
|
||||
[EnumLocalizeKey(nameof(Localize.flowlauncher_plugin_calculator_decimal_separator_use_system_locale))]
|
||||
UseSystemLocale,
|
||||
|
||||
|
||||
[EnumLocalizeKey(nameof(Localize.flowlauncher_plugin_calculator_decimal_separator_dot))]
|
||||
Dot,
|
||||
|
||||
Dot,
|
||||
|
||||
[EnumLocalizeKey(nameof(Localize.flowlauncher_plugin_calculator_decimal_separator_comma))]
|
||||
Comma
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@
|
|||
</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" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
||||
<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_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>
|
||||
|
|
@ -13,5 +13,5 @@
|
|||
<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_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>
|
||||
|
|
|
|||
|
|
@ -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">
|
||||
|
||||
<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_expression_not_complete">式が間違っているか不完全です(括弧を忘れていませんか?)</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_max_decimal_places">小数点以下の最大桁数</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>
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ using System.Linq;
|
|||
using System.Runtime.InteropServices;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Windows.Controls;
|
||||
using Mages.Core;
|
||||
using Flow.Launcher.Plugin.Calculator.Views;
|
||||
using Flow.Launcher.Plugin.Calculator.ViewModels;
|
||||
using Flow.Launcher.Plugin.Calculator.Views;
|
||||
using Mages.Core;
|
||||
|
||||
namespace Flow.Launcher.Plugin.Calculator
|
||||
{
|
||||
|
|
@ -26,7 +26,7 @@ namespace Flow.Launcher.Plugin.Calculator
|
|||
private const string IcoPath = "Images/calculator.png";
|
||||
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 SettingsViewModel _viewModel;
|
||||
|
|
@ -57,10 +57,10 @@ namespace Flow.Launcher.Plugin.Calculator
|
|||
{
|
||||
var search = query.Search;
|
||||
bool isFunctionPresent = FunctionRegex.IsMatch(search);
|
||||
|
||||
|
||||
// Mages is case sensitive, so we need to convert all function names to lower case.
|
||||
search = FunctionRegex.Replace(search, m => m.Value.ToLowerInvariant());
|
||||
|
||||
|
||||
var decimalSep = GetDecimalSeparator();
|
||||
var groupSep = GetGroupSeparator(decimalSep);
|
||||
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, ".");
|
||||
}
|
||||
|
||||
|
||||
return processedStr;
|
||||
}
|
||||
else
|
||||
|
|
@ -310,7 +310,7 @@ namespace Flow.Launcher.Plugin.Calculator
|
|||
return processedStr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static bool IsValidGrouping(string[] parts, int[] groupSizes)
|
||||
{
|
||||
if (parts.Length <= 1) return true;
|
||||
|
|
@ -326,7 +326,7 @@ namespace Flow.Launcher.Plugin.Calculator
|
|||
|
||||
var lastGroupSize = groupSizes.Last();
|
||||
var canRepeatLastGroup = lastGroupSize != 0;
|
||||
|
||||
|
||||
int groupIndex = 0;
|
||||
for (int i = parts.Length - 1; i > 0; i--)
|
||||
{
|
||||
|
|
@ -335,7 +335,7 @@ namespace Flow.Launcher.Plugin.Calculator
|
|||
{
|
||||
expectedSize = groupSizes[groupIndex];
|
||||
}
|
||||
else if(canRepeatLastGroup)
|
||||
else if (canRepeatLastGroup)
|
||||
{
|
||||
expectedSize = lastGroupSize;
|
||||
}
|
||||
|
|
@ -345,7 +345,7 @@ namespace Flow.Launcher.Plugin.Calculator
|
|||
}
|
||||
|
||||
if (parts[i].Length != expectedSize) return false;
|
||||
|
||||
|
||||
groupIndex++;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
|
||||
namespace Flow.Launcher.Plugin.Calculator;
|
||||
namespace Flow.Launcher.Plugin.Calculator;
|
||||
|
||||
public class Settings
|
||||
{
|
||||
|
|
|
|||
|
|
@ -66,8 +66,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
{
|
||||
contextMenus.Add(new Result
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_add_to_quickaccess_title"),
|
||||
SubTitle = Context.API.GetTranslation("plugin_explorer_add_to_quickaccess_subtitle"),
|
||||
Title = Localize.plugin_explorer_add_to_quickaccess_title(),
|
||||
SubTitle = Localize.plugin_explorer_add_to_quickaccess_subtitle(),
|
||||
Action = (context) =>
|
||||
{
|
||||
Settings.QuickAccessLinks.Add(new AccessLink
|
||||
|
|
@ -77,16 +77,14 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
Type = record.Type
|
||||
});
|
||||
|
||||
Context.API.ShowMsg(Context.API.GetTranslation("plugin_explorer_addfilefoldersuccess"),
|
||||
Context.API.GetTranslation("plugin_explorer_addfilefoldersuccess_detail"),
|
||||
Constants.ExplorerIconImageFullPath);
|
||||
|
||||
|
||||
Context.API.ShowMsg(Localize.plugin_explorer_addfilefoldersuccess(),
|
||||
Localize.plugin_explorer_addfilefoldersuccess_detail(),
|
||||
Constants.ExplorerIconImageFullPath);
|
||||
|
||||
return true;
|
||||
},
|
||||
SubTitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_titletooltip"),
|
||||
TitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_titletooltip"),
|
||||
SubTitleToolTip = Localize.plugin_explorer_contextmenu_titletooltip(),
|
||||
TitleToolTip = Localize.plugin_explorer_contextmenu_titletooltip(),
|
||||
IcoPath = Constants.QuickAccessImagePath,
|
||||
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue718"),
|
||||
});
|
||||
|
|
@ -95,22 +93,20 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
{
|
||||
contextMenus.Add(new Result
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_remove_from_quickaccess_title"),
|
||||
SubTitle = Context.API.GetTranslation("plugin_explorer_remove_from_quickaccess_subtitle"),
|
||||
Title = Localize.plugin_explorer_remove_from_quickaccess_title(),
|
||||
SubTitle = Localize.plugin_explorer_remove_from_quickaccess_subtitle(),
|
||||
Action = (context) =>
|
||||
{
|
||||
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.GetTranslation("plugin_explorer_removefilefoldersuccess_detail"),
|
||||
Constants.ExplorerIconImageFullPath);
|
||||
|
||||
|
||||
Context.API.ShowMsg(Localize.plugin_explorer_removefilefoldersuccess(),
|
||||
Localize.plugin_explorer_removefilefoldersuccess_detail(),
|
||||
Constants.ExplorerIconImageFullPath);
|
||||
|
||||
return true;
|
||||
},
|
||||
SubTitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_remove_titletooltip"),
|
||||
TitleToolTip = Context.API.GetTranslation("plugin_explorer_contextmenu_remove_titletooltip"),
|
||||
SubTitleToolTip = Localize.plugin_explorer_contextmenu_remove_titletooltip(),
|
||||
TitleToolTip = Localize.plugin_explorer_contextmenu_remove_titletooltip(),
|
||||
IcoPath = Constants.RemoveQuickAccessImagePath,
|
||||
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\uecc9")
|
||||
});
|
||||
|
|
@ -118,8 +114,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
|
||||
contextMenus.Add(new Result
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_copypath"),
|
||||
SubTitle = Context.API.GetTranslation("plugin_explorer_copypath_subtitle"),
|
||||
Title = Localize.plugin_explorer_copypath(),
|
||||
SubTitle = Localize.plugin_explorer_copypath_subtitle(),
|
||||
Action = _ =>
|
||||
{
|
||||
try
|
||||
|
|
@ -130,7 +126,7 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
catch (Exception 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;
|
||||
}
|
||||
},
|
||||
|
|
@ -140,8 +136,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
|
||||
contextMenus.Add(new Result
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_copyname"),
|
||||
SubTitle = Context.API.GetTranslation("plugin_explorer_copyname_subtitle"),
|
||||
Title = Localize.plugin_explorer_copyname(),
|
||||
SubTitle = Localize.plugin_explorer_copyname_subtitle(),
|
||||
Action = _ =>
|
||||
{
|
||||
try
|
||||
|
|
@ -152,7 +148,7 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
catch (Exception 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;
|
||||
}
|
||||
},
|
||||
|
|
@ -162,8 +158,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
|
||||
contextMenus.Add(new Result
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_copyfilefolder"),
|
||||
SubTitle = isFile ? Context.API.GetTranslation("plugin_explorer_copyfile_subtitle") : Context.API.GetTranslation("plugin_explorer_copyfolder_subtitle"),
|
||||
Title = Localize.plugin_explorer_copyfilefolder(),
|
||||
SubTitle = isFile ? Localize.plugin_explorer_copyfile_subtitle(): Localize.plugin_explorer_copyfolder_subtitle(),
|
||||
Action = _ =>
|
||||
{
|
||||
try
|
||||
|
|
@ -174,28 +170,26 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
catch (Exception 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;
|
||||
}
|
||||
|
||||
},
|
||||
IcoPath = icoPath,
|
||||
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\uf12b")
|
||||
});
|
||||
|
||||
|
||||
if (record.Type is ResultType.File or ResultType.Folder)
|
||||
contextMenus.Add(new Result
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_deletefilefolder"),
|
||||
SubTitle = isFile ? Context.API.GetTranslation("plugin_explorer_deletefile_subtitle") : Context.API.GetTranslation("plugin_explorer_deletefolder_subtitle"),
|
||||
Title = Localize.plugin_explorer_deletefilefolder(),
|
||||
SubTitle = isFile ? Localize.plugin_explorer_deletefile_subtitle(): Localize.plugin_explorer_deletefolder_subtitle(),
|
||||
Action = (context) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Context.API.ShowMsgBox(
|
||||
string.Format(Context.API.GetTranslation("plugin_explorer_delete_folder_link"), record.FullPath),
|
||||
Context.API.GetTranslation("plugin_explorer_deletefilefolder"),
|
||||
Localize.plugin_explorer_delete_folder_link(record.FullPath),
|
||||
Localize.plugin_explorer_deletefilefolder(),
|
||||
MessageBoxButton.OKCancel,
|
||||
MessageBoxImage.Warning)
|
||||
== MessageBoxResult.Cancel)
|
||||
|
|
@ -208,15 +202,15 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
|
||||
_ = Task.Run(() =>
|
||||
{
|
||||
Context.API.ShowMsg(Context.API.GetTranslation("plugin_explorer_deletefilefoldersuccess"),
|
||||
string.Format(Context.API.GetTranslation("plugin_explorer_deletefilefoldersuccess_detail"), record.FullPath),
|
||||
Context.API.ShowMsg(Localize.plugin_explorer_deletefilefoldersuccess(),
|
||||
Localize.plugin_explorer_deletefilefoldersuccess_detail(record.FullPath),
|
||||
Constants.ExplorerIconImageFullPath);
|
||||
});
|
||||
}
|
||||
catch (Exception 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;
|
||||
}
|
||||
|
||||
|
|
@ -230,7 +224,7 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
{
|
||||
contextMenus.Add(new Result()
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_show_contextmenu_title"),
|
||||
Title = Localize.plugin_explorer_show_contextmenu_title(),
|
||||
IcoPath = Constants.ShowContextMenuImagePath,
|
||||
Glyph = new GlyphInfo(FontFamily: "/Resources/#Segoe Fluent Icons", Glyph: "\ue700"),
|
||||
Action = _ =>
|
||||
|
|
@ -248,8 +242,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
if (record.Type == ResultType.File && CanRunAsDifferentUser(record.FullPath))
|
||||
contextMenus.Add(new Result
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_runasdifferentuser"),
|
||||
SubTitle = Context.API.GetTranslation("plugin_explorer_runasdifferentuser_subtitle"),
|
||||
Title = Localize.plugin_explorer_runasdifferentuser(),
|
||||
SubTitle = Localize.plugin_explorer_runasdifferentuser_subtitle(),
|
||||
Action = (context) =>
|
||||
{
|
||||
try
|
||||
|
|
@ -259,8 +253,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
catch (FileNotFoundException e)
|
||||
{
|
||||
Context.API.ShowMsgError(
|
||||
Context.API.GetTranslation("plugin_explorer_plugin_name"),
|
||||
string.Format(Context.API.GetTranslation("plugin_explorer_file_not_found"), e.Message));
|
||||
Localize.plugin_explorer_plugin_name(),
|
||||
Localize.plugin_explorer_file_not_found(e.Message));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -317,8 +311,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
{
|
||||
return new Result
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_opencontainingfolder"),
|
||||
SubTitle = Context.API.GetTranslation("plugin_explorer_opencontainingfolder_subtitle"),
|
||||
Title = Localize.plugin_explorer_opencontainingfolder(),
|
||||
SubTitle = Localize.plugin_explorer_opencontainingfolder_subtitle(),
|
||||
Action = _ =>
|
||||
{
|
||||
try
|
||||
|
|
@ -328,7 +322,7 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
catch (Exception 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;
|
||||
}
|
||||
|
||||
|
|
@ -339,11 +333,9 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
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
|
||||
{
|
||||
|
|
@ -361,8 +353,7 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
var raw_message = Context.API.GetTranslation("plugin_explorer_openwitheditor_error");
|
||||
var message = string.Format(raw_message, record.FullPath, Path.GetFileNameWithoutExtension(editorPath), editorPath);
|
||||
var message = Localize.plugin_explorer_openwitheditor_error(record.FullPath, Path.GetFileNameWithoutExtension(editorPath), editorPath);
|
||||
LogException(message, e);
|
||||
Context.API.ShowMsgError(message);
|
||||
return false;
|
||||
|
|
@ -377,7 +368,7 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
{
|
||||
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
|
||||
{
|
||||
|
|
@ -394,8 +385,7 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
var raw_message = Context.API.GetTranslation("plugin_explorer_openwithshell_error");
|
||||
var message = string.Format(raw_message, record.FullPath, Path.GetFileNameWithoutExtension(shellPath), shellPath);
|
||||
var message = Localize.plugin_explorer_openwithshell_error(record.FullPath, Path.GetFileNameWithoutExtension(shellPath), shellPath);
|
||||
LogException(message, e);
|
||||
Context.API.ShowMsgError(message);
|
||||
return false;
|
||||
|
|
@ -410,8 +400,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
{
|
||||
return new Result
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_excludefromindexsearch"),
|
||||
SubTitle = Context.API.GetTranslation("plugin_explorer_path") + " " + record.FullPath,
|
||||
Title = Localize.plugin_explorer_excludefromindexsearch(),
|
||||
SubTitle = Localize.plugin_explorer_path()+ " " + record.FullPath,
|
||||
Action = c_ =>
|
||||
{
|
||||
if (!Settings.IndexSearchExcludedSubdirectoryPaths.Any(x => string.Equals(x.Path, record.FullPath, StringComparison.OrdinalIgnoreCase)))
|
||||
|
|
@ -422,8 +412,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
|
||||
_ = Task.Run(() =>
|
||||
{
|
||||
Context.API.ShowMsg(Context.API.GetTranslation("plugin_explorer_excludedfromindexsearch_msg"),
|
||||
Context.API.GetTranslation("plugin_explorer_path") +
|
||||
Context.API.ShowMsg(Localize.plugin_explorer_excludedfromindexsearch_msg(),
|
||||
Localize.plugin_explorer_path()+
|
||||
" " + record.FullPath, Constants.ExplorerIconImageFullPath);
|
||||
|
||||
// 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
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_openindexingoptions"),
|
||||
SubTitle = Context.API.GetTranslation("plugin_explorer_openindexingoptions_subtitle"),
|
||||
Title = Localize.plugin_explorer_openindexingoptions(),
|
||||
SubTitle = Localize.plugin_explorer_openindexingoptions_subtitle(),
|
||||
Action = _ =>
|
||||
{
|
||||
try
|
||||
|
|
@ -459,7 +449,7 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
var message = Context.API.GetTranslation("plugin_explorer_openindexingoptions_errormsg");
|
||||
var message = Localize.plugin_explorer_openindexingoptions_errormsg();
|
||||
LogException(message, e);
|
||||
Context.API.ShowMsgError(message);
|
||||
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
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_openwith"),
|
||||
SubTitle = Context.API.GetTranslation("plugin_explorer_openwith_subtitle"),
|
||||
Title = Localize.plugin_explorer_openwith(),
|
||||
SubTitle = Localize.plugin_explorer_openwith_subtitle(),
|
||||
Action = _ =>
|
||||
{
|
||||
Process.Start("rundll32.exe", $"{Path.Combine(Environment.SystemDirectory, "shell32.dll")},OpenAs_RunDLL {record.FullPath}");
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.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.Linq.Async" Version="6.0.3" />
|
||||
<PackageReference Include="tlbimp-Microsoft.Search.Interop" Version="1.0.0" />
|
||||
|
|
|
|||
|
|
@ -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_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_new_action_keyword_assigned">This new action keyword is already assigned to another plugin, please choose a different one</system:String>
|
||||
|
||||
<!-- Controls -->
|
||||
<system:String x:Key="plugin_explorer_delete">Delete</system:String>
|
||||
|
|
|
|||
|
|
@ -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_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_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 -->
|
||||
<system:String x:Key="plugin_explorer_delete">Eliminar</system:String>
|
||||
|
|
|
|||
|
|
@ -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_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_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 -->
|
||||
<system:String x:Key="plugin_explorer_delete">Supprimer</system:String>
|
||||
|
|
|
|||
|
|
@ -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_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_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_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>
|
||||
|
|
@ -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_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_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 -->
|
||||
<system:String x:Key="plugin_explorer_delete">Sil</system:String>
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
<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_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 -->
|
||||
<system:String x:Key="plugin_explorer_delete">删除</system:String>
|
||||
|
|
|
|||
|
|
@ -90,12 +90,12 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
|
||||
public string GetTranslatedPluginTitle()
|
||||
{
|
||||
return Context.API.GetTranslation("plugin_explorer_plugin_name");
|
||||
return Localize.plugin_explorer_plugin_name();
|
||||
}
|
||||
|
||||
public string GetTranslatedPluginDescription()
|
||||
{
|
||||
return Context.API.GetTranslation("plugin_explorer_plugin_description");
|
||||
return Localize.plugin_explorer_plugin_description();
|
||||
}
|
||||
|
||||
public void OnCultureInfoChanged(CultureInfo newCulture)
|
||||
|
|
|
|||
|
|
@ -21,9 +21,9 @@ public static class EverythingDownloadHelper
|
|||
if (string.IsNullOrEmpty(installedLocation))
|
||||
{
|
||||
if (api.ShowMsgBox(
|
||||
string.Format(api.GetTranslation("flowlauncher_plugin_everything_installing_select"), Environment.NewLine),
|
||||
api.GetTranslation("flowlauncher_plugin_everything_installing_title"),
|
||||
MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||
Localize.flowlauncher_plugin_everything_installing_select(Environment.NewLine),
|
||||
Localize.flowlauncher_plugin_everything_installing_title(),
|
||||
MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||
{
|
||||
var dlg = new System.Windows.Forms.OpenFileDialog
|
||||
{
|
||||
|
|
@ -41,13 +41,13 @@ public static class EverythingDownloadHelper
|
|||
return installedLocation;
|
||||
}
|
||||
|
||||
api.ShowMsg(api.GetTranslation("flowlauncher_plugin_everything_installing_title"),
|
||||
api.GetTranslation("flowlauncher_plugin_everything_installing_subtitle"), "", useMainWindowAsOwner: false);
|
||||
api.ShowMsg(Localize.flowlauncher_plugin_everything_installing_title(),
|
||||
Localize.flowlauncher_plugin_everything_installing_subtitle(), "", useMainWindowAsOwner: false);
|
||||
|
||||
await DroplexPackage.Drop(App.Everything1_4_1_1009).ConfigureAwait(false);
|
||||
|
||||
api.ShowMsg(api.GetTranslation("flowlauncher_plugin_everything_installing_title"),
|
||||
api.GetTranslation("flowlauncher_plugin_everything_installationsuccess_subtitle"), "", useMainWindowAsOwner: false);
|
||||
api.ShowMsg(Localize.flowlauncher_plugin_everything_installing_title(),
|
||||
Localize.flowlauncher_plugin_everything_installationsuccess_subtitle(), "", useMainWindowAsOwner: false);
|
||||
|
||||
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");
|
||||
return File.Exists(scoopInstalledPath) ? scoopInstalledPath : string.Empty;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
|
|||
if (!await EverythingApi.IsEverythingRunningAsync(token))
|
||||
throw new EngineNotAvailableException(
|
||||
Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
|
||||
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_click_to_launch_or_install"),
|
||||
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_is_not_running"),
|
||||
Localize.flowlauncher_plugin_everything_click_to_launch_or_install(),
|
||||
Localize.flowlauncher_plugin_everything_is_not_running(),
|
||||
Constants.EverythingErrorImagePath,
|
||||
ClickToInstallEverythingAsync);
|
||||
}
|
||||
|
|
@ -38,7 +38,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
|
|||
Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
|
||||
"Please check whether your system is x86 or x64",
|
||||
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)
|
||||
{
|
||||
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");
|
||||
|
||||
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
|
||||
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);
|
||||
|
||||
return false;
|
||||
|
|
@ -97,8 +97,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search.Everything
|
|||
if (!Settings.EnableEverythingContentSearch)
|
||||
{
|
||||
throw new EngineNotAvailableException(Enum.GetName(Settings.IndexSearchEngineOption.Everything)!,
|
||||
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_enable_content_search"),
|
||||
Main.Context.API.GetTranslation("flowlauncher_plugin_everything_enable_content_search_tips"),
|
||||
Localize.flowlauncher_plugin_everything_enable_content_search(),
|
||||
Localize.flowlauncher_plugin_everything_enable_content_search_tips(),
|
||||
Constants.EverythingErrorImagePath,
|
||||
_ =>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
|
@ -124,7 +124,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -138,7 +138,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -153,7 +153,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -166,7 +166,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
return false;
|
||||
},
|
||||
Score = score,
|
||||
TitleToolTip = Main.Context.API.GetTranslation("plugin_explorer_plugin_ToolTipOpenDirectory"),
|
||||
TitleToolTip = Localize.plugin_explorer_plugin_ToolTipOpenDirectory(),
|
||||
SubTitleToolTip = Settings.DisplayMoreInformationInToolTip ? GetFolderMoreInfoTooltip(path) : path,
|
||||
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);
|
||||
var freespace = ToReadableSize(drv.AvailableFreeSpace, 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;
|
||||
|
||||
int? progressValue = Convert.ToInt32(usingSize);
|
||||
|
|
@ -262,8 +262,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
|
||||
return new Result
|
||||
{
|
||||
Title = Context.API.GetTranslation("plugin_explorer_openresultfolder"),
|
||||
SubTitle = Context.API.GetTranslation("plugin_explorer_openresultfolder_subtitle"),
|
||||
Title = Localize.plugin_explorer_openresultfolder(),
|
||||
SubTitle = Localize.plugin_explorer_openresultfolder_subtitle(),
|
||||
AutoCompleteText = GetPathWithActionKeyword(folderPath, ResultType.Folder, actionKeyword),
|
||||
IcoPath = folderPath,
|
||||
Score = 500,
|
||||
|
|
@ -330,12 +330,12 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
}
|
||||
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;
|
||||
},
|
||||
TitleToolTip = Main.Context.API.GetTranslation("plugin_explorer_plugin_ToolTipOpenContainingFolder"),
|
||||
TitleToolTip = Localize.plugin_explorer_plugin_ToolTipOpenContainingFolder(),
|
||||
SubTitleToolTip = Settings.DisplayMoreInformationInToolTip ? GetFileMoreInfoTooltip(filePath) : filePath,
|
||||
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 fileCreatedAt = PreviewPanel.GetFileCreatedAt(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"),
|
||||
filePath, fileSize, fileCreatedAt, fileModifiedAt, Environment.NewLine);
|
||||
return Localize.plugin_explorer_plugin_tooltip_more_info(filePath, fileSize, fileCreatedAt, fileModifiedAt, Environment.NewLine);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
@ -391,8 +390,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
var folderSize = PreviewPanel.GetFolderSize(folderPath);
|
||||
var folderCreatedAt = PreviewPanel.GetFolderCreatedAt(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"),
|
||||
folderPath, folderSize, folderCreatedAt, folderModifiedAt, Environment.NewLine);
|
||||
return Localize.plugin_explorer_plugin_tooltip_more_info(folderPath, folderSize, folderCreatedAt, folderModifiedAt, Environment.NewLine);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
@ -403,8 +401,7 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
|
||||
private static string GetVolumeMoreInfoTooltip(string volumePath, string freespace, string totalspace)
|
||||
{
|
||||
return string.Format(Context.API.GetTranslation("plugin_explorer_plugin_tooltip_more_info_volume"),
|
||||
volumePath, freespace, totalspace, Environment.NewLine);
|
||||
return Localize.plugin_explorer_plugin_tooltip_more_info_volume(volumePath, freespace, totalspace, Environment.NewLine);
|
||||
}
|
||||
|
||||
private static readonly string[] MediaExtensions =
|
||||
|
|
|
|||
|
|
@ -161,8 +161,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search
|
|||
{
|
||||
new()
|
||||
{
|
||||
Title = Context.API.GetTranslation("flowlauncher_plugin_everything_enable_content_search"),
|
||||
SubTitle = Context.API.GetTranslation("flowlauncher_plugin_everything_enable_content_search_tips"),
|
||||
Title = Localize.flowlauncher_plugin_everything_enable_content_search(),
|
||||
SubTitle = Localize.flowlauncher_plugin_everything_enable_content_search_tips(),
|
||||
IcoPath = "Images/index_error.png",
|
||||
Action = c =>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -105,8 +105,8 @@ namespace Flow.Launcher.Plugin.Explorer.Search.WindowsIndex
|
|||
|
||||
throw new EngineNotAvailableException(
|
||||
"Windows Index",
|
||||
Main.Context.API.GetTranslation("plugin_explorer_windowsSearchServiceFix"),
|
||||
Main.Context.API.GetTranslation("plugin_explorer_windowsSearchServiceNotRunning"),
|
||||
Localize.plugin_explorer_windowsSearchServiceFix(),
|
||||
Localize.plugin_explorer_windowsSearchServiceNotRunning(),
|
||||
Constants.WindowsIndexErrorImagePath,
|
||||
c =>
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,9 +14,9 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
{
|
||||
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; } = "";
|
||||
|
||||
|
|
@ -58,7 +58,6 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
|
||||
public bool QuickAccessKeywordEnabled { get; set; }
|
||||
|
||||
|
||||
public bool WarnWindowsSearchServiceOff { 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 string PreviewPanelDateFormat { get; set; } = "yyyy-MM-dd";
|
||||
|
||||
public string PreviewPanelTimeFormat { get; set; } = "HH:mm";
|
||||
|
|
@ -82,8 +80,8 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
private EverythingSearchManager EverythingManagerInstance => _everythingManagerInstance ??= new EverythingSearchManager(this);
|
||||
private WindowsIndexSearchManager WindowsIndexSearchManager => _windowsIndexSearchManager ??= new WindowsIndexSearchManager(this);
|
||||
|
||||
|
||||
public IndexSearchEngineOption IndexSearchEngine { get; set; } = IndexSearchEngineOption.WindowsIndex;
|
||||
|
||||
[JsonIgnore]
|
||||
public IIndexProvider IndexProvider => IndexSearchEngine switch
|
||||
{
|
||||
|
|
@ -139,7 +137,6 @@ namespace Flow.Launcher.Plugin.Explorer
|
|||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Everything Settings
|
||||
|
||||
public string EverythingInstalledPath { get; set; }
|
||||
|
|
|
|||
|
|
@ -296,7 +296,7 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
|
|||
return;
|
||||
}
|
||||
|
||||
var actionKeywordWindow = new ActionKeywordSetting(actionKeyword, Context.API);
|
||||
var actionKeywordWindow = new ActionKeywordSetting(actionKeyword);
|
||||
|
||||
if (!(actionKeywordWindow.ShowDialog() ?? false))
|
||||
{
|
||||
|
|
@ -432,8 +432,8 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
|
|||
case "QuickAccessLink":
|
||||
if (SelectedQuickAccessLink == null) return;
|
||||
if (Context.API.ShowMsgBox(
|
||||
Context.API.GetTranslation("plugin_explorer_delete_quick_access_link"),
|
||||
Context.API.GetTranslation("plugin_explorer_delete"),
|
||||
Localize.plugin_explorer_delete_quick_access_link(),
|
||||
Localize.plugin_explorer_delete(),
|
||||
MessageBoxButton.OKCancel,
|
||||
MessageBoxImage.Warning)
|
||||
== MessageBoxResult.Cancel)
|
||||
|
|
@ -443,8 +443,8 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
|
|||
case "IndexSearchExcludedPaths":
|
||||
if (SelectedIndexSearchExcludedPath == null) return;
|
||||
if (Context.API.ShowMsgBox(
|
||||
Context.API.GetTranslation("plugin_explorer_delete_index_search_excluded_path"),
|
||||
Context.API.GetTranslation("plugin_explorer_delete"),
|
||||
Localize.plugin_explorer_delete_index_search_excluded_path(),
|
||||
Localize.plugin_explorer_delete(),
|
||||
MessageBoxButton.OKCancel,
|
||||
MessageBoxImage.Warning)
|
||||
== MessageBoxResult.Cancel)
|
||||
|
|
@ -457,7 +457,7 @@ namespace Flow.Launcher.Plugin.Explorer.ViewModels
|
|||
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,13 +29,11 @@ namespace Flow.Launcher.Plugin.Explorer.Views
|
|||
}
|
||||
|
||||
private string actionKeyword;
|
||||
private readonly IPublicAPI _api;
|
||||
private bool _keywordEnabled;
|
||||
|
||||
public ActionKeywordSetting(ActionKeywordModel selectedActionKeyword, IPublicAPI api)
|
||||
public ActionKeywordSetting(ActionKeywordModel selectedActionKeyword)
|
||||
{
|
||||
CurrentActionKeyword = selectedActionKeyword;
|
||||
_api = api;
|
||||
ActionKeyword = selectedActionKeyword.Keyword;
|
||||
KeywordEnabled = selectedActionKeyword.Enabled;
|
||||
|
||||
|
|
@ -60,14 +58,14 @@ namespace Flow.Launcher.Plugin.Explorer.Views
|
|||
switch (CurrentActionKeyword.KeywordProperty, KeywordEnabled)
|
||||
{
|
||||
case (Settings.ActionKeyword.FileContentSearchActionKeyword, true):
|
||||
_api.ShowMsgBox(_api.GetTranslation("plugin_explorer_globalActionKeywordInvalid"));
|
||||
Main.Context.API.ShowMsgBox(Localize.plugin_explorer_globalActionKeywordInvalid());
|
||||
return;
|
||||
case (Settings.ActionKeyword.QuickAccessActionKeyword, true):
|
||||
_api.ShowMsgBox(_api.GetTranslation("plugin_explorer_quickaccess_globalActionKeywordInvalid"));
|
||||
Main.Context.API.ShowMsgBox(Localize.plugin_explorer_quickaccess_globalActionKeywordInvalid());
|
||||
return;
|
||||
}
|
||||
|
||||
if (!KeywordEnabled || !_api.ActionKeywordAssigned(ActionKeyword))
|
||||
if (!KeywordEnabled || !Main.Context.API.ActionKeywordAssigned(ActionKeyword))
|
||||
{
|
||||
DialogResult = true;
|
||||
Close();
|
||||
|
|
@ -75,7 +73,7 @@ namespace Flow.Launcher.Plugin.Explorer.Views
|
|||
}
|
||||
|
||||
// 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)
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ public partial class PreviewPanel : UserControl
|
|||
public string FileName { get; }
|
||||
|
||||
[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]
|
||||
private string _createdAt = "";
|
||||
|
|
@ -111,17 +111,17 @@ public partial class PreviewPanel : UserControl
|
|||
catch (FileNotFoundException)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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
|
||||
catch (AggregateException ae)
|
||||
|
|
@ -224,22 +224,22 @@ public partial class PreviewPanel : UserControl
|
|||
{
|
||||
case FileNotFoundException:
|
||||
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:
|
||||
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:
|
||||
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:
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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;
|
||||
|
||||
if (difference.TotalDays < 1)
|
||||
return Main.Context.API.GetTranslation("Today");
|
||||
return Localize.Today();
|
||||
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;
|
||||
if (monthsDiff == 1)
|
||||
return Main.Context.API.GetTranslation("OneMonthAgo");
|
||||
return Localize.OneMonthAgo();
|
||||
if (monthsDiff < 12)
|
||||
return string.Format(Main.Context.API.GetTranslation("MonthsAgo"), monthsDiff);
|
||||
return Localize.MonthsAgo(monthsDiff);
|
||||
|
||||
var yearsDiff = now.Year - fileDateTime.Year;
|
||||
if (now.Month < fileDateTime.Month || (now.Month == fileDateTime.Month && now.Day < fileDateTime.Day))
|
||||
yearsDiff--;
|
||||
|
||||
return yearsDiff == 1 ? Main.Context.API.GetTranslation("OneYearAgo") :
|
||||
string.Format(Main.Context.API.GetTranslation("YearsAgo"), yearsDiff);
|
||||
return yearsDiff == 1 ? Localize.OneYearAgo(): Localize.YearsAgo(yearsDiff);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ public partial class QuickAccessLinkSettings
|
|||
// Validate the input before proceeding
|
||||
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);
|
||||
return;
|
||||
}
|
||||
|
|
@ -107,7 +107,7 @@ public partial class QuickAccessLinkSettings
|
|||
x.Path.Equals(SelectedPath, 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);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -54,5 +55,9 @@
|
|||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -5,19 +5,19 @@ namespace Flow.Launcher.Plugin.PluginIndicator
|
|||
{
|
||||
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)
|
||||
{
|
||||
return QueryResults(query);
|
||||
}
|
||||
|
||||
public List<Result> HomeQuery()
|
||||
{
|
||||
return QueryResults();
|
||||
}
|
||||
|
||||
private List<Result> QueryResults(Query query = null)
|
||||
private static List<Result> QueryResults(Query query = null)
|
||||
{
|
||||
var nonGlobalPlugins = GetNonGlobalPlugins();
|
||||
var querySearch = query?.Search ?? string.Empty;
|
||||
|
|
@ -34,7 +34,7 @@ namespace Flow.Launcher.Plugin.PluginIndicator
|
|||
select new Result
|
||||
{
|
||||
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,
|
||||
IcoPath = plugin.IcoPath,
|
||||
AutoCompleteText = $"{keyword}{Plugin.Query.TermSeparator}",
|
||||
|
|
@ -44,10 +44,10 @@ namespace Flow.Launcher.Plugin.PluginIndicator
|
|||
return false;
|
||||
}
|
||||
};
|
||||
return results.ToList();
|
||||
return [.. results];
|
||||
}
|
||||
|
||||
private Dictionary<string, PluginPair> GetNonGlobalPlugins()
|
||||
private static Dictionary<string, PluginPair> GetNonGlobalPlugins()
|
||||
{
|
||||
var nonGlobalPlugins = new Dictionary<string, PluginPair>();
|
||||
foreach (var plugin in Context.API.GetAllPlugins())
|
||||
|
|
@ -66,19 +66,19 @@ namespace Flow.Launcher.Plugin.PluginIndicator
|
|||
return nonGlobalPlugins;
|
||||
}
|
||||
|
||||
public void Init(PluginInitContext context)
|
||||
{
|
||||
Context = context;
|
||||
}
|
||||
|
||||
public string GetTranslatedPluginTitle()
|
||||
{
|
||||
return Context.API.GetTranslation("flowlauncher_plugin_pluginindicator_plugin_name");
|
||||
return Localize.flowlauncher_plugin_pluginindicator_plugin_name();
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -52,6 +53,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.205">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
|
|
|||
|
|
@ -9,19 +9,19 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
{
|
||||
public class Main : IPlugin, IPluginI18n, IContextMenu, ISettingProvider
|
||||
{
|
||||
internal static PluginInitContext Context { get; private set; }
|
||||
|
||||
private Settings _settings;
|
||||
|
||||
private readonly ProcessHelper processHelper = new();
|
||||
|
||||
private static PluginInitContext _context;
|
||||
|
||||
internal Settings Settings;
|
||||
|
||||
private SettingsViewModel _viewModel;
|
||||
|
||||
public void Init(PluginInitContext context)
|
||||
{
|
||||
_context = context;
|
||||
Settings = context.API.LoadSettingJsonStorage<Settings>();
|
||||
_viewModel = new SettingsViewModel(Settings);
|
||||
Context = context;
|
||||
_settings = context.API.LoadSettingJsonStorage<Settings>();
|
||||
_viewModel = new SettingsViewModel(_settings);
|
||||
}
|
||||
|
||||
public List<Result> Query(Query query)
|
||||
|
|
@ -31,12 +31,12 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
|
||||
public string GetTranslatedPluginTitle()
|
||||
{
|
||||
return _context.API.GetTranslation("flowlauncher_plugin_processkiller_plugin_name");
|
||||
return Localize.flowlauncher_plugin_processkiller_plugin_name();
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
@ -51,13 +51,13 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
{
|
||||
menuOptions.Add(new Result
|
||||
{
|
||||
Title = _context.API.GetTranslation("flowlauncher_plugin_processkiller_kill_instances"),
|
||||
Title = Localize.flowlauncher_plugin_processkiller_kill_instances(),
|
||||
SubTitle = processPath,
|
||||
Action = _ =>
|
||||
{
|
||||
foreach (var p in similarProcesses)
|
||||
{
|
||||
processHelper.TryKill(_context, p);
|
||||
ProcessHelper.TryKill(p);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -72,8 +72,8 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
private List<Result> CreateResultsFromQuery(Query query)
|
||||
{
|
||||
// Get all non-system processes
|
||||
var allPocessList = processHelper.GetMatchingProcesses();
|
||||
if (!allPocessList.Any())
|
||||
var allProcessList = processHelper.GetMatchingProcesses();
|
||||
if (allProcessList.Count == 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
|
@ -82,12 +82,12 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
var searchTerm = query.Search;
|
||||
var processlist = new List<ProcessResult>();
|
||||
var processWindowTitle =
|
||||
Settings.ShowWindowTitle || Settings.PutVisibleWindowProcessesTop ?
|
||||
_settings.ShowWindowTitle || _settings.PutVisibleWindowProcessesTop ?
|
||||
ProcessHelper.GetProcessesWithNonEmptyWindowTitle() :
|
||||
new Dictionary<int, string>();
|
||||
[];
|
||||
if (string.IsNullOrWhiteSpace(searchTerm))
|
||||
{
|
||||
foreach (var p in allPocessList)
|
||||
foreach (var p in allProcessList)
|
||||
{
|
||||
var progressNameIdTitle = ProcessHelper.GetProcessNameIdTitle(p);
|
||||
|
||||
|
|
@ -97,8 +97,8 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
// Use window title for those processes if enabled
|
||||
processlist.Add(new ProcessResult(
|
||||
p,
|
||||
Settings.PutVisibleWindowProcessesTop ? 200 : 0,
|
||||
Settings.ShowWindowTitle ? windowTitle : progressNameIdTitle,
|
||||
_settings.PutVisibleWindowProcessesTop ? 200 : 0,
|
||||
_settings.ShowWindowTitle ? windowTitle : progressNameIdTitle,
|
||||
null,
|
||||
progressNameIdTitle));
|
||||
}
|
||||
|
|
@ -115,35 +115,35 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
}
|
||||
else
|
||||
{
|
||||
foreach (var p in allPocessList)
|
||||
foreach (var p in allProcessList)
|
||||
{
|
||||
var progressNameIdTitle = ProcessHelper.GetProcessNameIdTitle(p);
|
||||
|
||||
if (processWindowTitle.TryGetValue(p.Id, out var windowTitle))
|
||||
{
|
||||
// Get max score from searching process name, window title and process id
|
||||
var windowTitleMatch = _context.API.FuzzySearch(searchTerm, windowTitle);
|
||||
var processNameIdMatch = _context.API.FuzzySearch(searchTerm, progressNameIdTitle);
|
||||
var windowTitleMatch = Context.API.FuzzySearch(searchTerm, windowTitle);
|
||||
var processNameIdMatch = Context.API.FuzzySearch(searchTerm, progressNameIdTitle);
|
||||
var score = Math.Max(windowTitleMatch.Score, processNameIdMatch.Score);
|
||||
if (score > 0)
|
||||
{
|
||||
// Add score to prioritize processes with visible windows
|
||||
// Use window title for those processes
|
||||
if (Settings.PutVisibleWindowProcessesTop)
|
||||
if (_settings.PutVisibleWindowProcessesTop)
|
||||
{
|
||||
score += 200;
|
||||
}
|
||||
processlist.Add(new ProcessResult(
|
||||
p,
|
||||
score,
|
||||
Settings.ShowWindowTitle ? windowTitle : progressNameIdTitle,
|
||||
_settings.ShowWindowTitle ? windowTitle : progressNameIdTitle,
|
||||
score == windowTitleMatch.Score ? windowTitleMatch : null,
|
||||
progressNameIdTitle));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var processNameIdMatch = _context.API.FuzzySearch(searchTerm, progressNameIdTitle);
|
||||
var processNameIdMatch = Context.API.FuzzySearch(searchTerm, progressNameIdTitle);
|
||||
var score = processNameIdMatch.Score;
|
||||
if (score > 0)
|
||||
{
|
||||
|
|
@ -162,7 +162,7 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
foreach (var pr in processlist)
|
||||
{
|
||||
var p = pr.Process;
|
||||
var path = processHelper.TryGetProcessFilename(p);
|
||||
var path = ProcessHelper.TryGetProcessFilename(p);
|
||||
results.Add(new Result()
|
||||
{
|
||||
IcoPath = path,
|
||||
|
|
@ -172,12 +172,12 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
TitleHighlightData = pr.TitleMatch?.MatchData,
|
||||
Score = pr.Score,
|
||||
ContextData = p.ProcessName,
|
||||
AutoCompleteText = $"{_context.CurrentPluginMetadata.ActionKeyword}{Plugin.Query.TermSeparator}{p.ProcessName}",
|
||||
AutoCompleteText = $"{Context.CurrentPluginMetadata.ActionKeyword}{Plugin.Query.TermSeparator}{p.ProcessName}",
|
||||
Action = (c) =>
|
||||
{
|
||||
processHelper.TryKill(_context, p);
|
||||
ProcessHelper.TryKill(p);
|
||||
// Re-query to refresh process list
|
||||
_context.API.ReQuery();
|
||||
Context.API.ReQuery();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
@ -194,17 +194,17 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
sortedResults.Insert(1, new Result()
|
||||
{
|
||||
IcoPath = firstResult?.IcoPath,
|
||||
Title = string.Format(_context.API.GetTranslation("flowlauncher_plugin_processkiller_kill_all"), firstResult?.ContextData),
|
||||
SubTitle = string.Format(_context.API.GetTranslation("flowlauncher_plugin_processkiller_kill_all_count"), processlist.Count),
|
||||
Title = Localize.flowlauncher_plugin_processkiller_kill_all(firstResult?.ContextData),
|
||||
SubTitle = Localize.flowlauncher_plugin_processkiller_kill_all_count(processlist.Count),
|
||||
Score = 200,
|
||||
Action = (c) =>
|
||||
{
|
||||
foreach (var p in processlist)
|
||||
{
|
||||
processHelper.TryKill(_context, p.Process);
|
||||
ProcessHelper.TryKill(p.Process);
|
||||
}
|
||||
// Re-query to refresh process list
|
||||
_context.API.ReQuery();
|
||||
Context.API.ReQuery();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -16,8 +16,8 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
{
|
||||
private static readonly string ClassName = nameof(ProcessHelper);
|
||||
|
||||
private readonly HashSet<string> _systemProcessList = new()
|
||||
{
|
||||
private readonly HashSet<string> _systemProcessList =
|
||||
[
|
||||
"conhost",
|
||||
"svchost",
|
||||
"idle",
|
||||
|
|
@ -31,12 +31,12 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
"winlogon",
|
||||
"services",
|
||||
"spoolsv",
|
||||
"explorer"
|
||||
};
|
||||
"explorer"
|
||||
];
|
||||
|
||||
private const string FlowLauncherProcessName = "Flow.Launcher";
|
||||
|
||||
private bool IsSystemProcessOrFlowLauncher(Process p) =>
|
||||
private bool IsSystemProcessOrFlowLauncher(Process p) =>
|
||||
_systemProcessList.Contains(p.ProcessName.ToLower()) ||
|
||||
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);
|
||||
}
|
||||
|
||||
public void TryKill(PluginInitContext context, Process p)
|
||||
public static void TryKill(Process p)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
@ -154,11 +154,11 @@ namespace Flow.Launcher.Plugin.ProcessKiller
|
|||
}
|
||||
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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,25 +3,16 @@ using Flow.Launcher.Plugin.SharedModels;
|
|||
|
||||
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)
|
||||
{
|
||||
Process = process;
|
||||
Score = score;
|
||||
Title = title;
|
||||
TitleMatch = match;
|
||||
Tooltip = tooltip;
|
||||
}
|
||||
public Process Process { get; } = process;
|
||||
|
||||
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; }
|
||||
public string Tooltip { get; } = tooltip;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,7 @@
|
|||
namespace Flow.Launcher.Plugin.ProcessKiller.ViewModels
|
||||
{
|
||||
public class SettingsViewModel
|
||||
public class SettingsViewModel(Settings settings)
|
||||
{
|
||||
public Settings Settings { get; set; }
|
||||
|
||||
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;
|
||||
}
|
||||
public Settings Settings { get; set; } = settings;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||||
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:DesignWidth="500"
|
||||
mc:Ignorable="d">
|
||||
|
|
@ -18,11 +20,11 @@
|
|||
Grid.Row="0"
|
||||
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
|
||||
Content="{DynamicResource flowlauncher_plugin_processkiller_show_window_title}"
|
||||
IsChecked="{Binding ShowWindowTitle}" />
|
||||
IsChecked="{Binding Settings.ShowWindowTitle}" />
|
||||
<CheckBox
|
||||
Grid.Row="1"
|
||||
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
|
||||
Content="{DynamicResource flowlauncher_plugin_processkiller_put_visible_window_process_top}"
|
||||
IsChecked="{Binding PutVisibleWindowProcessesTop}" />
|
||||
IsChecked="{Binding Settings.PutVisibleWindowProcessesTop}" />
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
|
@ -5,9 +5,6 @@ namespace Flow.Launcher.Plugin.ProcessKiller.Views;
|
|||
|
||||
public partial class SettingsControl : UserControl
|
||||
{
|
||||
/// <summary>
|
||||
/// Interaction logic for SettingsControl.xaml
|
||||
/// </summary>
|
||||
public SettingsControl(SettingsViewModel viewModel)
|
||||
{
|
||||
InitializeComponent();
|
||||
|
|
|
|||
|
|
@ -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_file_types">Özel Dosya Sonekleri</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_program_suffixes_tooltip">
|
||||
Insert file suffixes you want to index. Suffixes should be separated by ';'. (ex>bat;py)
|
||||
Dizinlemek istediğiniz dosya uzantılarını girin. Uzantılar ';' ile ayrılmalıdır. (örnek>bat;py)
|
||||
</system:String>
|
||||
<system:String x:Key="flowlauncher_plugin_program_protocol_tooltip">
|
||||
İndekslemek istediğiniz .url dosyalarının protokollerini girin. Protokoller ';' ile ayrılmalı ve "://" ile bitmelidir. (örn>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_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_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_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">Ö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 -->
|
||||
<system:String x:Key="flowlauncher_plugin_program_disable_dlgtitle_success">Başarılı</system:String>
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
@ -34,6 +34,7 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -58,6 +59,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||
<PackageReference Include="InputSimulator" Version="1.0.4" NoWarn="NU1701" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using Flow.Launcher.Plugin.SharedCommands;
|
||||
using Flow.Launcher.Plugin.Shell.Views;
|
||||
using WindowsInput;
|
||||
using WindowsInput.Native;
|
||||
using Flow.Launcher.Plugin.SharedCommands;
|
||||
using Control = System.Windows.Controls.Control;
|
||||
using Keys = System.Windows.Forms.Keys;
|
||||
|
||||
|
|
@ -17,7 +18,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
{
|
||||
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 bool _winRStroked;
|
||||
|
|
@ -27,7 +28,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
|
||||
public List<Result> Query(Query query)
|
||||
{
|
||||
List<Result> results = new List<Result>();
|
||||
List<Result> results = [];
|
||||
string cmd = query.Search;
|
||||
if (string.IsNullOrEmpty(cmd))
|
||||
{
|
||||
|
|
@ -45,7 +46,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
string basedir = null;
|
||||
string dir = null;
|
||||
string excmd = Environment.ExpandEnvironmentVariables(cmd);
|
||||
if (Directory.Exists(excmd) && (cmd.EndsWith("/") || cmd.EndsWith(@"\")))
|
||||
if (Directory.Exists(excmd) && (cmd.EndsWith('/') || cmd.EndsWith('\\')))
|
||||
{
|
||||
basedir = excmd;
|
||||
dir = cmd;
|
||||
|
|
@ -54,7 +55,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
{
|
||||
basedir = Path.GetDirectoryName(excmd);
|
||||
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)
|
||||
|
|
@ -103,14 +104,14 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
{
|
||||
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;
|
||||
}
|
||||
|
||||
var ret = new Result
|
||||
{
|
||||
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,
|
||||
Action = c =>
|
||||
{
|
||||
|
|
@ -129,9 +130,9 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
}).Where(o => o != null);
|
||||
|
||||
if (_settings.ShowOnlyMostUsedCMDs)
|
||||
return history.Take(_settings.ShowOnlyMostUsedCMDsNumber).ToList();
|
||||
return [.. history.Take(_settings.ShowOnlyMostUsedCMDsNumber)];
|
||||
|
||||
return history.ToList();
|
||||
return [.. history];
|
||||
}
|
||||
|
||||
private Result GetCurrentCmd(string cmd)
|
||||
|
|
@ -140,7 +141,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
{
|
||||
Title = cmd,
|
||||
Score = 5000,
|
||||
SubTitle = Context.API.GetTranslation("flowlauncher_plugin_cmd_execute_through_shell"),
|
||||
SubTitle = Localize.flowlauncher_plugin_cmd_execute_through_shell(),
|
||||
IcoPath = Image,
|
||||
Action = c =>
|
||||
{
|
||||
|
|
@ -165,7 +166,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
.Select(m => new Result
|
||||
{
|
||||
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,
|
||||
Action = c =>
|
||||
{
|
||||
|
|
@ -182,9 +183,9 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
});
|
||||
|
||||
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)
|
||||
|
|
@ -199,7 +200,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
Verb = runAsAdministratorArg,
|
||||
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 ? "\\" : "";
|
||||
switch (_settings.Shell)
|
||||
{
|
||||
|
|
@ -288,10 +289,10 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
|
||||
case Shell.RunCommand:
|
||||
{
|
||||
var parts = command.Split(new[]
|
||||
{
|
||||
var parts = command.Split(
|
||||
[
|
||||
' '
|
||||
}, 2);
|
||||
], 2);
|
||||
if (parts.Length == 2)
|
||||
{
|
||||
var filename = parts[0];
|
||||
|
|
@ -336,12 +337,12 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
catch (FileNotFoundException e)
|
||||
{
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
|
@ -383,9 +384,16 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
Context = context;
|
||||
_settings = context.API.LoadSettingJsonStorage<Settings>();
|
||||
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)
|
||||
{
|
||||
|
|
@ -405,7 +413,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
return true;
|
||||
}
|
||||
|
||||
private void OnWinRPressed()
|
||||
private static void OnWinRPressed()
|
||||
{
|
||||
Context.API.ShowMainWindow();
|
||||
// show the main window and set focus to the query box
|
||||
|
|
@ -428,12 +436,12 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
|
||||
public string GetTranslatedPluginTitle()
|
||||
{
|
||||
return Context.API.GetTranslation("flowlauncher_plugin_cmd_plugin_name");
|
||||
return Localize.flowlauncher_plugin_cmd_plugin_name();
|
||||
}
|
||||
|
||||
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)
|
||||
|
|
@ -442,7 +450,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
{
|
||||
new()
|
||||
{
|
||||
Title = Context.API.GetTranslation("flowlauncher_plugin_cmd_run_as_different_user"),
|
||||
Title = Localize.flowlauncher_plugin_cmd_run_as_different_user(),
|
||||
Action = c =>
|
||||
{
|
||||
Execute(ShellCommand.RunAsDifferentUser, PrepareProcessStartInfo(selectedResult.Title));
|
||||
|
|
@ -453,7 +461,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
},
|
||||
new()
|
||||
{
|
||||
Title = Context.API.GetTranslation("flowlauncher_plugin_cmd_run_as_administrator"),
|
||||
Title = Localize.flowlauncher_plugin_cmd_run_as_administrator(),
|
||||
Action = c =>
|
||||
{
|
||||
Execute(Process.Start, PrepareProcessStartInfo(selectedResult.Title, true));
|
||||
|
|
@ -464,7 +472,7 @@ namespace Flow.Launcher.Plugin.Shell
|
|||
},
|
||||
new()
|
||||
{
|
||||
Title = Context.API.GetTranslation("flowlauncher_plugin_cmd_copy"),
|
||||
Title = Localize.flowlauncher_plugin_cmd_copy(),
|
||||
Action = c =>
|
||||
{
|
||||
Context.API.CopyToClipboard(selectedResult.Title);
|
||||
|
|
|
|||
|
|
@ -1,45 +1,146 @@
|
|||
using System.Collections.Generic;
|
||||
using Flow.Launcher.Localization.Attributes;
|
||||
|
||||
namespace Flow.Launcher.Plugin.Shell
|
||||
{
|
||||
public class Settings
|
||||
public class Settings : BaseModel
|
||||
{
|
||||
public Shell Shell { get; set; } = Shell.Cmd;
|
||||
|
||||
public bool ReplaceWinR { get; set; } = false;
|
||||
private Shell _shell = Shell.Cmd;
|
||||
public Shell Shell
|
||||
{
|
||||
get => _shell;
|
||||
set
|
||||
{
|
||||
if (_shell != value)
|
||||
{
|
||||
_shell = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool CloseShellAfterPress { get; set; } = false;
|
||||
|
||||
public bool LeaveShellOpen { get; set; }
|
||||
private bool _replaceWinR = false;
|
||||
public bool ReplaceWinR
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (CommandHistory.ContainsKey(cmdName))
|
||||
if (!CommandHistory.TryAdd(cmdName, 1))
|
||||
{
|
||||
CommandHistory[cmdName] += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
CommandHistory.Add(cmdName, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[EnumLocalize]
|
||||
public enum Shell
|
||||
{
|
||||
[EnumLocalizeValue("CMD")]
|
||||
Cmd = 0,
|
||||
|
||||
[EnumLocalizeValue("PowerShell")]
|
||||
Powershell = 1,
|
||||
|
||||
[EnumLocalizeValue("RunCommand")]
|
||||
RunCommand = 2,
|
||||
|
||||
[EnumLocalizeValue("Pwsh")]
|
||||
Pwsh = 3,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,13 +1,19 @@
|
|||
<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: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: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:DesignWidth="300"
|
||||
Loaded="CMDSetting_OnLoaded"
|
||||
mc:Ignorable="d">
|
||||
<UserControl.Resources>
|
||||
<converters:LeaveShellOpenOrCloseShellAfterPressEnabledConverter x:Key="LeaveShellOpenOrCloseShellAfterPressEnabledConverter" />
|
||||
</UserControl.Resources>
|
||||
|
||||
<Grid Margin="{StaticResource SettingPanelMargin}" VerticalAlignment="Top">
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition />
|
||||
|
|
@ -23,50 +29,72 @@
|
|||
Grid.Row="0"
|
||||
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
|
||||
HorizontalAlignment="Left"
|
||||
Content="{DynamicResource flowlauncher_plugin_cmd_relace_winr}" />
|
||||
Content="{DynamicResource flowlauncher_plugin_cmd_relace_winr}"
|
||||
IsChecked="{Binding Settings.ReplaceWinR, Mode=TwoWay}" />
|
||||
<CheckBox
|
||||
x:Name="CloseShellAfterPress"
|
||||
Grid.Row="1"
|
||||
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
|
||||
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
|
||||
x:Name="LeaveShellOpen"
|
||||
Grid.Row="2"
|
||||
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
|
||||
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
|
||||
x:Name="AlwaysRunAsAdministrator"
|
||||
Grid.Row="3"
|
||||
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
|
||||
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
|
||||
x:Name="UseWindowsTerminal"
|
||||
Grid.Row="4"
|
||||
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
|
||||
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
|
||||
x:Name="ShellComboBox"
|
||||
Grid.Row="5"
|
||||
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
|
||||
HorizontalAlignment="Left">
|
||||
<ComboBoxItem>CMD</ComboBoxItem>
|
||||
<ComboBoxItem>PowerShell</ComboBoxItem>
|
||||
<ComboBoxItem>Pwsh</ComboBoxItem>
|
||||
<ComboBoxItem>RunCommand</ComboBoxItem>
|
||||
</ComboBox>
|
||||
HorizontalAlignment="Left"
|
||||
DisplayMemberPath="Display"
|
||||
ItemsSource="{Binding AllShells, Mode=OneTime}"
|
||||
SelectedValue="{Binding SelectedShell, Mode=TwoWay}"
|
||||
SelectedValuePath="Value" />
|
||||
<StackPanel Grid.Row="6" Orientation="Horizontal">
|
||||
<CheckBox
|
||||
x:Name="ShowOnlyMostUsedCMDs"
|
||||
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
|
||||
Content="{DynamicResource flowlauncher_plugin_cmd_history}" />
|
||||
Content="{DynamicResource flowlauncher_plugin_cmd_history}"
|
||||
IsChecked="{Binding Settings.ShowOnlyMostUsedCMDs, Mode=TwoWay}" />
|
||||
<ComboBox
|
||||
x:Name="ShowOnlyMostUsedCMDsNumber"
|
||||
Margin="{StaticResource SettingPanelItemRightTopBottomMargin}"
|
||||
HorizontalAlignment="Left" />
|
||||
HorizontalAlignment="Left"
|
||||
IsEnabled="{Binding Settings.ShowOnlyMostUsedCMDs, Mode=OneWay}"
|
||||
ItemsSource="{Binding OnlyMostUsedCMDsNumbers, Mode=OneTime}"
|
||||
SelectedItem="{Binding SelectedOnlyMostUsedCMDsNumber, Mode=TwoWay}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
</UserControl>
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -5,15 +5,13 @@ namespace Flow.Launcher.Plugin.Sys
|
|||
public partial class CommandKeywordSettingWindow
|
||||
{
|
||||
private readonly Command _oldSearchSource;
|
||||
private readonly PluginInitContext _context;
|
||||
|
||||
public CommandKeywordSettingWindow(PluginInitContext context, Command old)
|
||||
public CommandKeywordSettingWindow(Command old)
|
||||
{
|
||||
_context = context;
|
||||
_oldSearchSource = old;
|
||||
InitializeComponent();
|
||||
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)
|
||||
|
|
@ -26,8 +24,8 @@ namespace Flow.Launcher.Plugin.Sys
|
|||
var keyword = CommandKeyword.Text;
|
||||
if (string.IsNullOrEmpty(keyword))
|
||||
{
|
||||
var warning = _context.API.GetTranslation("flowlauncher_plugin_sys_input_command_keyword");
|
||||
_context.API.ShowMsgBox(warning);
|
||||
var warning = Localize.flowlauncher_plugin_sys_input_command_keyword();
|
||||
Main.Context.API.ShowMsgBox(warning);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -58,6 +59,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.205">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
|
|
|
|||
|
|
@ -76,4 +76,9 @@
|
|||
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">أوامر النظام</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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -76,4 +76,9 @@
|
|||
<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>
|
||||
|
||||
<!-- 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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -76,4 +76,9 @@
|
|||
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">פקודות מערכת</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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@
|
|||
<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_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_reload_plugin_data_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_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>
|
||||
|
|
|
|||
|
|
@ -76,4 +76,9 @@
|
|||
<system:String x:Key="flowlauncher_plugin_sys_plugin_name">시스템 명령어</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>
|
||||
|
|
|
|||
|
|
@ -76,4 +76,9 @@
|
|||
<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>
|
||||
|
||||
<!-- 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>
|
||||
|
|
|
|||
|
|
@ -76,4 +76,9 @@
|
|||
<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>
|
||||
|
||||
<!-- 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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -76,4 +76,9 @@
|
|||
<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>
|
||||
|
||||
<!-- 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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
|
|
@ -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_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>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue