mirror of
https://github.com/builtbybel/BloatyNosy.git
synced 2025-02-09 22:40:48 +01:00
Update locale strings
This commit is contained in:
parent
40adcd33c8
commit
6fa20edfcb
BIN
languages/de/Bloatynosy.resources.dll
Normal file
BIN
languages/de/Bloatynosy.resources.dll
Normal file
Binary file not shown.
BIN
languages/ko/Bloatynosy.resources.dll
Normal file
BIN
languages/ko/Bloatynosy.resources.dll
Normal file
Binary file not shown.
222
src/Bloatynosy/JsonPluginHandler.cs
Normal file
222
src/Bloatynosy/JsonPluginHandler.cs
Normal file
@ -0,0 +1,222 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace BloatynosyNue
|
||||
{
|
||||
public class JsonPluginHandler
|
||||
{
|
||||
public string PlugID { get; set; }
|
||||
public string PlugInfo { get; set; }
|
||||
public string[] PlugCheck { get; set; }
|
||||
public string[] PlugDo { get; set; }
|
||||
public string[] PlugUndo { get; set; }
|
||||
public string PlugCategory { get; set; }
|
||||
|
||||
private Logger logger;
|
||||
|
||||
public JsonPluginHandler(Logger logger)
|
||||
{
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
public bool PlugCheckFeature()
|
||||
{
|
||||
bool isFeatureActive = true;
|
||||
foreach (var command in PlugCheck)
|
||||
{
|
||||
if (!ExecuteCommandAndCheckResult(command))
|
||||
{
|
||||
isFeatureActive = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
logger.Log($"Feature '{PlugID}' is {(isFeatureActive ? "active" : "inactive")}", System.Drawing.Color.Black);
|
||||
return isFeatureActive;
|
||||
}
|
||||
|
||||
// PlugCheck Helper to execute commands and check the result
|
||||
private bool ExecuteCommandAndCheckResult(string command)
|
||||
{
|
||||
try
|
||||
{
|
||||
var process = new Process
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = "cmd.exe",
|
||||
Arguments = $"/c {command}",
|
||||
RedirectStandardOutput = true,
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
}
|
||||
};
|
||||
process.Start();
|
||||
process.WaitForExit();
|
||||
|
||||
// Read the output of the command
|
||||
string output = process.StandardOutput.ReadToEnd();
|
||||
|
||||
// Check if output contains "1" (indicating active) or "0" (indicating inactive)
|
||||
bool isActive = output.Contains("1");
|
||||
|
||||
// logger.Log($"Plugin executed successfully: {command}. Result: {(isActive ? "active" : "inactive")}", System.Drawing.Color.Black);
|
||||
return isActive;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Log($"Error executing plugin: {command}. Exception: {ex.Message}", System.Drawing.Color.Crimson);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public async void PlugDoFeature()
|
||||
{
|
||||
await ExecuteFeatureCommands(PlugDo);
|
||||
}
|
||||
|
||||
public async void PlugUndoFeature()
|
||||
{
|
||||
await ExecuteFeatureCommands(PlugUndo);
|
||||
}
|
||||
|
||||
private async Task ExecuteFeatureCommands(string[] commands)
|
||||
{
|
||||
foreach (var command in commands)
|
||||
{
|
||||
await ExecuteCommand(command);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ExecuteCommand(string command)
|
||||
{
|
||||
try
|
||||
{
|
||||
var process = new Process
|
||||
{
|
||||
StartInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = IsPowerShellCommand(command) ? "powershell.exe" : "cmd.exe",
|
||||
Arguments = IsPowerShellCommand(command) ? $"-Command \"{command}\"" : $"/c \"{command}\"",
|
||||
RedirectStandardOutput = true,
|
||||
RedirectStandardError = true,
|
||||
UseShellExecute = false,
|
||||
CreateNoWindow = true,
|
||||
}
|
||||
};
|
||||
|
||||
// Event handler for handling output data
|
||||
process.OutputDataReceived += (sender, e) =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(e.Data))
|
||||
{
|
||||
logger.Log($"Output: {e.Data}", System.Drawing.Color.Green);
|
||||
}
|
||||
};
|
||||
|
||||
// Event handler for handling error data
|
||||
process.ErrorDataReceived += (sender, e) =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(e.Data))
|
||||
{
|
||||
logger.Log($"Error: {e.Data}", System.Drawing.Color.Crimson);
|
||||
}
|
||||
};
|
||||
|
||||
process.Start();
|
||||
|
||||
// Begin asynchronous reading of the output and error streams
|
||||
process.BeginOutputReadLine();
|
||||
process.BeginErrorReadLine();
|
||||
|
||||
// Wait for the process to exit
|
||||
await process.WaitForExitAsync();
|
||||
|
||||
// Log command execution
|
||||
logger.Log($"Plugin executed command: {command}", System.Drawing.Color.Green);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Log($"Error executing plugin: {command}. Exception: {ex.Message}", System.Drawing.Color.Crimson);
|
||||
}
|
||||
}
|
||||
|
||||
// Determine if command should be run with Ps
|
||||
private bool IsPowerShellCommand(string command)
|
||||
{
|
||||
return command.StartsWith("powershell.exe") || command.Contains("Get-") || command.Contains("Set-");
|
||||
}
|
||||
|
||||
// Get plugin information
|
||||
public string GetPluginInformation()
|
||||
{
|
||||
return $"{PlugInfo.Replace("\\n", Environment.NewLine)}";
|
||||
}
|
||||
|
||||
private static void AddToPluginCategory(TreeNodeCollection pluginCategory, TreeNode node, string category)
|
||||
{
|
||||
if (pluginCategory == null)
|
||||
throw new ArgumentNullException(nameof(pluginCategory));
|
||||
var existingCategory = pluginCategory.Cast<TreeNode>().FirstOrDefault(n => n.Text == category);
|
||||
|
||||
if (existingCategory == null)
|
||||
{
|
||||
existingCategory = new TreeNode(category)
|
||||
{
|
||||
// BackColor = System.Drawing.Color.LightBlue,
|
||||
ForeColor = System.Drawing.Color.Black
|
||||
};
|
||||
pluginCategory.Add(existingCategory);
|
||||
}
|
||||
|
||||
existingCategory.Nodes.Add(node);
|
||||
}
|
||||
|
||||
public static async Task LoadPlugins(string pluginDirectory, TreeNodeCollection pluginCategory, Logger logger)
|
||||
{
|
||||
if (Directory.Exists(pluginDirectory))
|
||||
{
|
||||
var pluginFiles = Directory.GetFiles(pluginDirectory, "*.json");
|
||||
|
||||
foreach (var file in pluginFiles)
|
||||
{
|
||||
// Exclude JSON files of our DLL Plugins as they are loaded separately
|
||||
if (Path.GetFileName(file).IndexOf("Plugin", StringComparison.OrdinalIgnoreCase) >= 0)
|
||||
continue;
|
||||
|
||||
try
|
||||
{
|
||||
var json = File.ReadAllText(file);
|
||||
var plugin = JsonConvert.DeserializeObject<JsonPluginHandler>(json);
|
||||
|
||||
if (plugin != null)
|
||||
{
|
||||
plugin.logger = logger; // Set logger for the plugin
|
||||
|
||||
// Execute all commands for the plugin to check its feature
|
||||
bool isActive = plugin.PlugCheckFeature();
|
||||
|
||||
var pluginNode = new TreeNode(plugin.PlugID)
|
||||
{
|
||||
ToolTipText = plugin.PlugInfo,
|
||||
Checked = isActive,
|
||||
Tag = plugin // Store plugin object in Tag property
|
||||
};
|
||||
|
||||
// Add to the appropriate category
|
||||
AddToPluginCategory(pluginCategory, pluginNode, plugin.PlugCategory);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Log($"Error loading plugin from file '{file}': {ex.Message}", System.Drawing.Color.Crimson);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
58
src/Bloatynosy/Locales/Strings.Designer.cs
generated
58
src/Bloatynosy/Locales/Strings.Designer.cs
generated
@ -555,6 +555,15 @@ namespace BloatynosyNue.Locales {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Switch to Plugins Store ähnelt.
|
||||
/// </summary>
|
||||
internal static string ctl_btnStore {
|
||||
get {
|
||||
return ResourceManager.GetString("ctl_btnStore", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Donate ähnelt.
|
||||
/// </summary>
|
||||
@ -641,11 +650,11 @@ namespace BloatynosyNue.Locales {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Sort ähnelt.
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die More Infos ähnelt.
|
||||
/// </summary>
|
||||
internal static string formDumputer_ctl_lblSort {
|
||||
internal static string formDumputer_ctl_lblMoreInfo {
|
||||
get {
|
||||
return ResourceManager.GetString("formDumputer_ctl_lblSort", resourceCulture);
|
||||
return ResourceManager.GetString("formDumputer_ctl_lblMoreInfo", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
@ -659,7 +668,7 @@ namespace BloatynosyNue.Locales {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Filter ähnelt.
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Search apps ähnelt.
|
||||
/// </summary>
|
||||
internal static string formDumputer_ctl_textBoxSearch {
|
||||
get {
|
||||
@ -758,7 +767,7 @@ namespace BloatynosyNue.Locales {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Enable All ähnelt.
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Activate All ähnelt.
|
||||
/// </summary>
|
||||
internal static string formExperience_ctl_btnApply {
|
||||
get {
|
||||
@ -767,7 +776,7 @@ namespace BloatynosyNue.Locales {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Disable All ähnelt.
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Deactivate All ähnelt.
|
||||
/// </summary>
|
||||
internal static string formExperience_ctl_btnRevert {
|
||||
get {
|
||||
@ -784,15 +793,6 @@ namespace BloatynosyNue.Locales {
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Sort ähnelt.
|
||||
/// </summary>
|
||||
internal static string formExperience_ctl_lblSort {
|
||||
get {
|
||||
return ResourceManager.GetString("formExperience_ctl_lblSort", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Click 'Enable All' to apply all changes, or 'Disable All' to revert to the default settings. You can also make individual adjustments as needed. ähnelt.
|
||||
/// </summary>
|
||||
@ -803,7 +803,7 @@ namespace BloatynosyNue.Locales {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Filter ähnelt.
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Search ähnelt.
|
||||
/// </summary>
|
||||
internal static string formExperience_ctl_textBoxSearch {
|
||||
get {
|
||||
@ -885,7 +885,7 @@ namespace BloatynosyNue.Locales {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die The plugin environment is not ready.\n\nWould you like to enable the store and download the required components? ähnelt.
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die The required plugin environment is not set up. Do you want to download the necessary components? ähnelt.
|
||||
/// </summary>
|
||||
internal static string formPlugins_status_notReady {
|
||||
get {
|
||||
@ -957,11 +957,20 @@ namespace BloatynosyNue.Locales {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die About this app ähnelt.
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die About app ähnelt.
|
||||
/// </summary>
|
||||
internal static string tt_btnAboutApp {
|
||||
internal static string formSettings_ctl_lblSecAboutApp {
|
||||
get {
|
||||
return ResourceManager.GetString("tt_btnAboutApp", resourceCulture);
|
||||
return ResourceManager.GetString("formSettings_ctl_lblSecAboutApp", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Language ähnelt.
|
||||
/// </summary>
|
||||
internal static string formSettings_ctl_lblSecLanguage {
|
||||
get {
|
||||
return ResourceManager.GetString("formSettings_ctl_lblSecLanguage", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1000,5 +1009,14 @@ namespace BloatynosyNue.Locales {
|
||||
return ResourceManager.GetString("tt_btnPlugins", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sucht eine lokalisierte Zeichenfolge, die Settings ähnelt.
|
||||
/// </summary>
|
||||
internal static string tt_btnSettings {
|
||||
get {
|
||||
return ResourceManager.GetString("tt_btnSettings", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -141,14 +141,11 @@
|
||||
<data name="formDumputer_ctl_lblHeader" xml:space="preserve">
|
||||
<value>App-Debloat</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblSort" xml:space="preserve">
|
||||
<value>Sortieren</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>Bewege Apps vom linken Korb in den rechten Mülleimer, um sie zu löschen.</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_textBoxSearch" xml:space="preserve">
|
||||
<value>Filtern</value>
|
||||
<value>Apps durchsuchen</value>
|
||||
</data>
|
||||
<data name="formDumputer_status_Loading" xml:space="preserve">
|
||||
<value>Lade APPX-Pakete...</value>
|
||||
@ -162,14 +159,11 @@
|
||||
<data name="formExperience_ctl_lblHeader" xml:space="preserve">
|
||||
<value>Erlebnis personalisieren</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_lblSort" xml:space="preserve">
|
||||
<value>Sortieren</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>Klick auf 'Alle aktivieren', um alle Änderungen anzuwenden, oder 'Alle deaktivieren', um Standardwerte zu behalten. Einzelne Einstellungen kannst du separat anpassen.</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_textBoxSearch" xml:space="preserve">
|
||||
<value>Filtern</value>
|
||||
<value>Durchsuchen</value>
|
||||
</data>
|
||||
<data name="formExperience_statusPermissions" xml:space="preserve">
|
||||
<value>Fehler bei der Aktualisierung des Funktionsstatus aufgrund fehlender Berechtigungen.</value>
|
||||
@ -201,8 +195,8 @@
|
||||
<data name="formPlugins_ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>Entdecke neue Möglichkeiten mit den Bloatynosy Nue Plugins</value>
|
||||
</data>
|
||||
<data name="tt_btnAboutApp" xml:space="preserve">
|
||||
<value>Über diese App</value>
|
||||
<data name="tt_btnSettings" xml:space="preserve">
|
||||
<value>Einstellungen</value>
|
||||
</data>
|
||||
<data name="tt_btnDumputer" xml:space="preserve">
|
||||
<value>Entferne vorinstallierte Apps auf Windows 11 (24H2 und 23H2), um dein System aufzuräumen.</value>
|
||||
@ -429,4 +423,16 @@
|
||||
<data name="formDumputer_status_countPackages" xml:space="preserve">
|
||||
<value>App-Pakete geladen:</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblMoreInfo" xml:space="preserve">
|
||||
<value>Mehr Informationen</value>
|
||||
</data>
|
||||
<data name="formSettings_ctl_lblSecLanguage" xml:space="preserve">
|
||||
<value>Sprache</value>
|
||||
</data>
|
||||
<data name="formSettings_ctl_lblSecAboutApp" xml:space="preserve">
|
||||
<value>Über diese App</value>
|
||||
</data>
|
||||
<data name="ctl_btnStore" xml:space="preserve">
|
||||
<value>Wechsle zum Plugin-Store</value>
|
||||
</data>
|
||||
</root>
|
@ -121,7 +121,7 @@
|
||||
<value>Indietro</value>
|
||||
</data>
|
||||
<data name="ctl_btnDumputer" xml:space="preserve">
|
||||
<value>Cassonetto™</value>
|
||||
<value>Pulizia™</value>
|
||||
</data>
|
||||
<data name="ctl_btnExperience" xml:space="preserve">
|
||||
<value>Esperienza</value>
|
||||
@ -141,9 +141,6 @@
|
||||
<data name="formDumputer_ctl_lblHeader" xml:space="preserve">
|
||||
<value>Dump applicazione</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblSort" xml:space="preserve">
|
||||
<value>Ordina</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>Sposta le app dal cestino di sinistra al cestino di destra per eliminarle</value>
|
||||
</data>
|
||||
@ -162,9 +159,6 @@
|
||||
<data name="formExperience_ctl_lblHeader" xml:space="preserve">
|
||||
<value>Personalizza esperienza</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_lblSort" xml:space="preserve">
|
||||
<value>Ordina</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>Per procedere seleziona "Accetta e applica" o "Rifiuta" per mantenere le impostazioni predefinite. È inoltre possibile apportare modifiche individuali.</value>
|
||||
</data>
|
||||
@ -202,7 +196,7 @@
|
||||
<value>Più possibilità con i plugin
|
||||
Bloatynosy Nue</value>
|
||||
</data>
|
||||
<data name="tt_btnAboutApp" xml:space="preserve">
|
||||
<data name="tt_btnSettings" xml:space="preserve">
|
||||
<value>Info su questa app</value>
|
||||
</data>
|
||||
<data name="tt_btnDumputer" xml:space="preserve">
|
||||
@ -371,7 +365,7 @@ Bloatynosy Nue</value>
|
||||
<value>Questa funzione allineerà il pulsante Start a sinistra</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblDetails" xml:space="preserve">
|
||||
<value>Dettagli sull'app selezionata</value>
|
||||
<value>Dettagli app selezionata</value>
|
||||
</data>
|
||||
<data name="formDumputer_status_Removing" xml:space="preserve">
|
||||
<value>Tentativo di rimozione</value>
|
||||
|
434
src/Bloatynosy/Locales/Strings.ko.resx
Normal file
434
src/Bloatynosy/Locales/Strings.ko.resx
Normal file
@ -0,0 +1,434 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 2.0
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">2.0</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||
<comment>This is a comment</comment>
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used for serialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="metadata">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||
<xsd:attribute name="type" type="xsd:string" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="assembly">
|
||||
<xsd:complexType>
|
||||
<xsd:attribute name="alias" type="xsd:string" />
|
||||
<xsd:attribute name="name" type="xsd:string" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
<xsd:attribute ref="xml:space" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>2.0</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="ctl_btnBack" xml:space="preserve">
|
||||
<value>뒤로</value>
|
||||
</data>
|
||||
<data name="ctl_btnDumputer" xml:space="preserve">
|
||||
<value>Dumputer™</value>
|
||||
</data>
|
||||
<data name="ctl_btnExperience" xml:space="preserve">
|
||||
<value>경험</value>
|
||||
</data>
|
||||
<data name="ctl_lblHeader" xml:space="preserve">
|
||||
<value>Windows 11 설정</value>
|
||||
</data>
|
||||
<data name="ctl_lblSteps" xml:space="preserve">
|
||||
<value>다음을 수행하고자 합니다</value>
|
||||
</data>
|
||||
<data name="ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>Windows 11 개인 정보 보호 및 개인화 수준을 높이고, 블로트웨어를 제거하여 깔끔하게 정리하고, 커뮤니티 플러그인으로 기능을 강화하세요.</value>
|
||||
</data>
|
||||
<data name="formDumputer_tt_btnRemove" xml:space="preserve">
|
||||
<value>제거</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblHeader" xml:space="preserve">
|
||||
<value>응용 프로그램 덤프</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>앱을 왼쪽 바구니에서 오른쪽 쓰레기통으로 이동하여 삭제합니다</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_textBoxSearch" xml:space="preserve">
|
||||
<value>필터</value>
|
||||
</data>
|
||||
<data name="formDumputer_status_Loading" xml:space="preserve">
|
||||
<value>appx 패키지 로드 중...</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_btnApply" xml:space="preserve">
|
||||
<value>모두 활성화</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_btnRevert" xml:space="preserve">
|
||||
<value>모두 비활성화</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_lblHeader" xml:space="preserve">
|
||||
<value>사용자 지정 경험</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>모든 변경 사항을 적용하려면 '모두 활성화'를 클릭하고, 기본 설정으로 되돌리려면 '모두 비활성화'를 클릭합니다. 필요에 따라 개별적으로 조정할 수도 있습니다.</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_textBoxSearch" xml:space="preserve">
|
||||
<value>필터</value>
|
||||
</data>
|
||||
<data name="formExperience_statusPermissions" xml:space="preserve">
|
||||
<value>권한이 부족하여 기능 상태를 업데이트하지 못했습니다.</value>
|
||||
</data>
|
||||
<data name="formExperience_status_Disabled" xml:space="preserve">
|
||||
<value>비활성화</value>
|
||||
</data>
|
||||
<data name="formExperience_status_Enabled" xml:space="preserve">
|
||||
<value>활성화</value>
|
||||
</data>
|
||||
<data name="formPluginsReview_ctl_btnRun" xml:space="preserve">
|
||||
<value>실행</value>
|
||||
</data>
|
||||
<data name="formPluginsReview_ctl_btnViewSc" xml:space="preserve">
|
||||
<value>스크립트 보기</value>
|
||||
</data>
|
||||
<data name="formPluginsReview_ctl_lblHeader" xml:space="preserve">
|
||||
<value>선택 사항 검토</value>
|
||||
</data>
|
||||
<data name="formPlugins_ctl_btnNext" xml:space="preserve">
|
||||
<value>다음</value>
|
||||
</data>
|
||||
<data name="formPlugins_ctl_btnPluginStore" xml:space="preserve">
|
||||
<value>스토어 방문</value>
|
||||
</data>
|
||||
<data name="formPlugins_ctl_lblHeader" xml:space="preserve">
|
||||
<value>확장</value>
|
||||
</data>
|
||||
<data name="formPlugins_ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>Bloatynosy Nue 의 더 많은 가능성
|
||||
플러그인</value>
|
||||
</data>
|
||||
<data name="tt_btnSettings" xml:space="preserve">
|
||||
<value>이 앱 정보</value>
|
||||
</data>
|
||||
<data name="tt_btnDumputer" xml:space="preserve">
|
||||
<value>Windows 11 (24H2 및 23H2)에서 사전 설치된 앱을 제거하여 시스템을 깔끔하게 정리하세요.</value>
|
||||
</data>
|
||||
<data name="tt_btnExperience" xml:space="preserve">
|
||||
<value>향상된 개인 정보 보호, 제어 및 개인화를 위한 Windows 11 설정 사용자 지정</value>
|
||||
</data>
|
||||
<data name="tt_btnLogger" xml:space="preserve">
|
||||
<value>알림</value>
|
||||
</data>
|
||||
<data name="tt_btnPlugins" xml:space="preserve">
|
||||
<value>플러그인</value>
|
||||
</data>
|
||||
<data name="_adsFileExplorerAds" xml:space="preserve">
|
||||
<value>파일 탐색기 광고 비활성화</value>
|
||||
</data>
|
||||
<data name="_adsFileExplorerAds_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 파일 탐색기에서 광고가 비활성화됩니다.</value>
|
||||
</data>
|
||||
<data name="_adsFinishSetupAds" xml:space="preserve">
|
||||
<value>설정 완료 광고 비활성화</value>
|
||||
</data>
|
||||
<data name="_adsFinishSetupAds_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 '디바이스 설정을 완료하겠습니다' 및 기타 광고가 비활성화됩니다.</value>
|
||||
</data>
|
||||
<data name="_adsLockScreenAds" xml:space="preserve">
|
||||
<value>잠금 화면 팁 및 광고 비활성화</value>
|
||||
</data>
|
||||
<data name="_adsLockScreenAds_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 잠금 화면에서 팁과 광고를 비활성화할 수 있습니다.</value>
|
||||
</data>
|
||||
<data name="_adsPersonalizedAds" xml:space="preserve">
|
||||
<value>맞춤 광고 비활성화</value>
|
||||
</data>
|
||||
<data name="_adsPersonalizedAds_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 맞춤 광고가 비활성화됩니다.</value>
|
||||
</data>
|
||||
<data name="_adsSettingsAds" xml:space="preserve">
|
||||
<value>설정 광고 비활성화</value>
|
||||
</data>
|
||||
<data name="_adsSettingsAds_desc" xml:space="preserve">
|
||||
<value>이 기능은 설정에서 광고를 비활성화합니다.</value>
|
||||
</data>
|
||||
<data name="_adsStartmenuAds" xml:space="preserve">
|
||||
<value>시작 메뉴 광고 비활성화</value>
|
||||
</data>
|
||||
<data name="_adsStartmenuAds_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 시작 메뉴에서 광고가 비활성화됩니다.</value>
|
||||
</data>
|
||||
<data name="_adsTailoredExperiences" xml:space="preserve">
|
||||
<value>맞춤형 경험 비활성화</value>
|
||||
</data>
|
||||
<data name="_adsTailoredExperiences_desc" xml:space="preserve">
|
||||
<value>맞춤형 환경을 통해 Microsoft는 사용자로부터 정보를 얻어 개인화된 팁, 광고 및 추천을 제공할 수 있습니다. 많은 사람들이 이를 텔레메트리 또는 스파이라고 부릅니다.</value>
|
||||
</data>
|
||||
<data name="_adsTipsAndSuggestions" xml:space="preserve">
|
||||
<value>일반 팁 및 광고 비활성화</value>
|
||||
</data>
|
||||
<data name="_adsTipsAndSuggestions_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 일반 팁과 광고가 비활성화됩니다.</value>
|
||||
</data>
|
||||
<data name="_adsWelcomeExperienceAds" xml:space="preserve">
|
||||
<value>환영 경험 광고 비활성화</value>
|
||||
</data>
|
||||
<data name="_adsWelcomeExperienceAds_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 시작 환경에서 광고가 비활성화됩니다.</value>
|
||||
</data>
|
||||
<data name="_aiCopilotTaskbar" xml:space="preserve">
|
||||
<value>작업 표시줄에 Copilot 표시 안 함</value>
|
||||
</data>
|
||||
<data name="_aiCopilotTaskbar_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 작업 표시줄에서 Copilot이 비활성화됩니다.</value>
|
||||
</data>
|
||||
<data name="_aiRecallMachine" xml:space="preserve">
|
||||
<value>시스템 전체 스냅샷 허용 안 함</value>
|
||||
</data>
|
||||
<data name="_aiRecallMachine_desc" xml:space="preserve">
|
||||
<value>이 기능은 시스템 전체 스냅샷을 비활성화합니다.</value>
|
||||
</data>
|
||||
<data name="_aiRecallUser" xml:space="preserve">
|
||||
<value>Windows에서 화면 스냅샷 저장 허용 안 함</value>
|
||||
</data>
|
||||
<data name="_aiRecallUser_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 화면의 스냅샷을 저장할 때 리콜 기능이 비활성화됩니다.”</value>
|
||||
</data>
|
||||
<data name="_gamingGameDVR" xml:space="preserve">
|
||||
<value>게임 DVR 비활성화</value>
|
||||
</data>
|
||||
<data name="_gamingGameDVR_desc" xml:space="preserve">
|
||||
<value>이 기능은 게임 DVR을 비활성화합니다.</value>
|
||||
</data>
|
||||
<data name="_gamingPowerThrottling" xml:space="preserve">
|
||||
<value>전원 스로틀링 비활성화</value>
|
||||
</data>
|
||||
<data name="_gamingPowerThrottling_desc" xml:space="preserve">
|
||||
<value>이 기능은 전원 스로틀링을 비활성화합니다.</value>
|
||||
</data>
|
||||
<data name="_gamingVisualFX" xml:space="preserve">
|
||||
<value>시각 효과 비활성화</value>
|
||||
</data>
|
||||
<data name="_gamingVisualFX_desc" xml:space="preserve">
|
||||
<value>이 기능은 Windows에서 시각 효과를 비활성화합니다.</value>
|
||||
</data>
|
||||
<data name="_privacyActivityHistory" xml:space="preserve">
|
||||
<value>활동 기록 비활성화</value>
|
||||
</data>
|
||||
<data name="_privacyLocationTracking" xml:space="preserve">
|
||||
<value>위치 추적 비활성화</value>
|
||||
</data>
|
||||
<data name="_privacyLocationTracking_desc" xml:space="preserve">
|
||||
<value>위치 추적 사용 안 함 (Windows가 사용자 위치에 액세스하지 못하도록 함)</value>
|
||||
</data>
|
||||
<data name="_privacyPrivacyExperience" xml:space="preserve">
|
||||
<value>로그인 시 개인정보 설정 경험 비활성화</value>
|
||||
</data>
|
||||
<data name="_privacyPrivacyExperience_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 로그인 시 개인정보 설정 경험이 비활성화됩니다.</value>
|
||||
</data>
|
||||
<data name="_privacyTelemetry" xml:space="preserve">
|
||||
<value>원격 측정 데이터 수집 끄기</value>
|
||||
</data>
|
||||
<data name="_privacyTelemetry_desc" xml:space="preserve">
|
||||
<value>이 기능은 원격 분석 데이터 수집을 끄고 데이터가 Microsoft로 전송되지 않도록 합니다.</value>
|
||||
</data>
|
||||
<data name="_uiFullContextMenus" xml:space="preserve">
|
||||
<value>Windows 11에서 전체 컨텍스트 메뉴 표시</value>
|
||||
</data>
|
||||
<data name="_uiFullContextMenus_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 Windows 11에서 전체 상황에 맞는 메뉴를 사용할 수 있습니다.</value>
|
||||
</data>
|
||||
<data name="_uiLockScreen" xml:space="preserve">
|
||||
<value>개인화된 잠금 화면 사용하지 않음</value>
|
||||
</data>
|
||||
<data name="_uiLockScreen_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 개인화된 잠금 화면이 비활성화됩니다.</value>
|
||||
</data>
|
||||
<data name="_uiSearchboxTaskbarMode" xml:space="preserve">
|
||||
<value>작업 표시줄의 검색창 숨기기</value>
|
||||
</data>
|
||||
<data name="_uiSearchboxTaskbarMode_desc" xml:space="preserve">
|
||||
<value>이 기능은 작업 표시줄의 검색창을 숨깁니다.</value>
|
||||
</data>
|
||||
<data name="_uiShowOrHideMostUsedApps" xml:space="preserve">
|
||||
<value>시작 메뉴에서 가장 많이 사용하는 앱 숨기기</value>
|
||||
</data>
|
||||
<data name="_uiShowOrHideMostUsedApps_desc" xml:space="preserve">
|
||||
<value>이 기능은 시작 메뉴에서 가장 많이 사용하는 앱을 숨깁니다.</value>
|
||||
</data>
|
||||
<data name="_uiShowTaskViewButton" xml:space="preserve">
|
||||
<value>작업 표시줄의 작업 보기 버튼 숨기기</value>
|
||||
</data>
|
||||
<data name="_uiShowTaskViewButton_desc" xml:space="preserve">
|
||||
<value>이 기능은 작업 표시줄의 작업 보기 버튼을 숨깁니다.</value>
|
||||
</data>
|
||||
<data name="_uiStartLayout" xml:space="preserve">
|
||||
<value>시작 메뉴에 더 많은 앱 고정</value>
|
||||
</data>
|
||||
<data name="_uiStartLayout_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 시작 메뉴에 더 많은 앱을 고정할 수 있습니다</value>
|
||||
</data>
|
||||
<data name="_uiTaskbarAlignment" xml:space="preserve">
|
||||
<value>시작 버튼을 왼쪽으로 정렬</value>
|
||||
</data>
|
||||
<data name="_uiTaskbarAlignment_desc" xml:space="preserve">
|
||||
<value>이 기능을 사용하면 시작 버튼이 왼쪽으로 정렬됩니다</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblDetails" xml:space="preserve">
|
||||
<value>선택한 앱에 대한 세부 정보</value>
|
||||
</data>
|
||||
<data name="formDumputer_status_Removing" xml:space="preserve">
|
||||
<value>제거 시도 중</value>
|
||||
</data>
|
||||
<data name="formDumputer_status_successRemove" xml:space="preserve">
|
||||
<value>성공적으로 제거됨</value>
|
||||
</data>
|
||||
<data name="formDumputer_status_failedRemove" xml:space="preserve">
|
||||
<value>오류 제거</value>
|
||||
</data>
|
||||
<data name="formDumputer_status_noItems" xml:space="preserve">
|
||||
<value>휴지통에 아직 항목이 없습니다</value>
|
||||
</data>
|
||||
<data name="formDumputer_status_Refreshing" xml:space="preserve">
|
||||
<value>앱 목록 새로 고침...</value>
|
||||
</data>
|
||||
<data name="formDumputer_tt_btnRefresh" xml:space="preserve">
|
||||
<value>새로 고침</value>
|
||||
</data>
|
||||
<data name="formDumputer_tt_btnAdd" xml:space="preserve">
|
||||
<value>추가</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_btnUninstall" xml:space="preserve">
|
||||
<value>제거</value>
|
||||
</data>
|
||||
<data name="_privacyActivityHistory_desc" xml:space="preserve">
|
||||
<value>활동 기록 사용 안 함 (Windows에서 활동을 추적 및 저장하지 못하도록 함)</value>
|
||||
</data>
|
||||
<data name="formPluginsReview_status_Summary" xml:space="preserve">
|
||||
<value>선택한 플러그인이 없습니다. 적용하거나 되돌릴 플러그인을 선택해 주세요.</value>
|
||||
</data>
|
||||
<data name="formPluginsReview_status_tobeApplied" xml:space="preserve">
|
||||
<value>적용 대상</value>
|
||||
</data>
|
||||
<data name="formPluginsReview_status_tobeReverted" xml:space="preserve">
|
||||
<value>되돌리기</value>
|
||||
</data>
|
||||
<data name="ctl_Donate" xml:space="preserve">
|
||||
<value>기부하기</value>
|
||||
</data>
|
||||
<data name="ctl_DonationPrompts" xml:space="preserve">
|
||||
<value>Bloatynosy Nue를 즐기고 있나요? 프로젝트를 후원하고 싶으시다면 기부를 통해 프로젝트를 계속 진행할 수 있습니다. 정말 감사합니다!
|
||||
Bloatynosy Nue가 여러분의 하루를 더 편하게 만들어 주었다면, 이 마법이 계속 유지될 수 있도록 작은 기부금을 보내주세요! 작은 금액이지만 모두 도움이 됩니다!
|
||||
Bloatynosy Nue가 하는 일이 마음에 드시나요? 작은 기부를 통해 더 나은 서비스를 만들 수 있도록 도와주세요! 미리 감사드립니다! 😄;
|
||||
Bloatynosy Nue 덕분에 Windows 11을 즐기고 계신다면, 프로젝트가 계속 유지될 수 있도록 기부해 주세요. 정말 감사합니다!
|
||||
Bloatynosy Nue의 결과가 마음에 드시나요? 기부를 통해 사랑을 표현해 보세요. 계속 개선하는 데 큰 도움이 됩니다!
|
||||
Bloatynosy Nue가 도움이 되었다면 제가 이 멋진 도구를 계속 개발할 수 있도록 작은 기부금을 보내주세요. 작은 금액도 소중합니다!
|
||||
Bloatynosy Nue가 여러분의 삶을 더 편하게 만들었다면, 제가 계속 개선할 수 있도록 기부해주시면 큰 도움이 될 것입니다. 후원해 주셔서 감사합니다!
|
||||
</value>
|
||||
</data>
|
||||
<data name="ctl_DonateAsk" xml:space="preserve">
|
||||
<value>기부하시겠습니까?</value>
|
||||
</data>
|
||||
<data name="formPlugins_ctl_lblInstalled" xml:space="preserve">
|
||||
<value>설치됨</value>
|
||||
</data>
|
||||
<data name="formPlugins_status_notReady" xml:space="preserve">
|
||||
<value>플러그인 환경이 준비되지 않았습니다.\n\n스토어를 활성화하고 필요한 구성 요소를 다운로드하시겠습니까?</value>
|
||||
</data>
|
||||
<data name="formPlugins_status_Ready" xml:space="preserve">
|
||||
<value>다운로드 완료! \n스토어를 사용할 준비가 되었습니다.</value>
|
||||
</data>
|
||||
<data name="formDumputer_status_countPackages" xml:space="preserve">
|
||||
<value>앱 패키지가 로드됨:</value>
|
||||
</data>
|
||||
</root>
|
@ -141,35 +141,29 @@
|
||||
<data name="formDumputer_ctl_lblHeader" xml:space="preserve">
|
||||
<value>Application Dump</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblSort" xml:space="preserve">
|
||||
<value>Sort</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>Move apps from the left basket to the right trash can to delete them</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_textBoxSearch" xml:space="preserve">
|
||||
<value>Filter</value>
|
||||
<value>Search apps</value>
|
||||
</data>
|
||||
<data name="formDumputer_status_Loading" xml:space="preserve">
|
||||
<value>Loading appx packages...</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_btnApply" xml:space="preserve">
|
||||
<value>Enable All</value>
|
||||
<value>Activate All</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_btnRevert" xml:space="preserve">
|
||||
<value>Disable All</value>
|
||||
<value>Deactivate All</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_lblHeader" xml:space="preserve">
|
||||
<value>Customize Experience</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_lblSort" xml:space="preserve">
|
||||
<value>Sort</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_lblSubHeader" xml:space="preserve">
|
||||
<value>Click 'Enable All' to apply all changes, or 'Disable All' to revert to the default settings. You can also make individual adjustments as needed.</value>
|
||||
</data>
|
||||
<data name="formExperience_ctl_textBoxSearch" xml:space="preserve">
|
||||
<value>Filter</value>
|
||||
<value>Search</value>
|
||||
</data>
|
||||
<data name="formExperience_statusPermissions" xml:space="preserve">
|
||||
<value>Failed to update feature status due to insufficient permissions.</value>
|
||||
@ -202,8 +196,8 @@
|
||||
<value>More Possibilities with Bloatynosy Nue
|
||||
Plugins</value>
|
||||
</data>
|
||||
<data name="tt_btnAboutApp" xml:space="preserve">
|
||||
<value>About this app</value>
|
||||
<data name="tt_btnSettings" xml:space="preserve">
|
||||
<value>Settings</value>
|
||||
</data>
|
||||
<data name="tt_btnDumputer" xml:space="preserve">
|
||||
<value>Remove pre-installed apps on Windows 11 (24H2 and 23H2) to declutter your system</value>
|
||||
@ -429,7 +423,7 @@ If Bloatynosy Nue made life easier for you, a donation would go a long way in ma
|
||||
<value>Installed</value>
|
||||
</data>
|
||||
<data name="formPlugins_status_notReady" xml:space="preserve">
|
||||
<value>The plugin environment is not ready.\n\nWould you like to enable the store and download the required components?</value>
|
||||
<value>The required plugin environment is not set up. Do you want to download the necessary components?</value>
|
||||
</data>
|
||||
<data name="formPlugins_status_Ready" xml:space="preserve">
|
||||
<value>Download complete! \nThe Store is ready to use.</value>
|
||||
@ -437,4 +431,16 @@ If Bloatynosy Nue made life easier for you, a donation would go a long way in ma
|
||||
<data name="formDumputer_status_countPackages" xml:space="preserve">
|
||||
<value>App packages loaded:</value>
|
||||
</data>
|
||||
<data name="formDumputer_ctl_lblMoreInfo" xml:space="preserve">
|
||||
<value>More Infos</value>
|
||||
</data>
|
||||
<data name="formSettings_ctl_lblSecLanguage" xml:space="preserve">
|
||||
<value>Language</value>
|
||||
</data>
|
||||
<data name="formSettings_ctl_lblSecAboutApp" xml:space="preserve">
|
||||
<value>About app</value>
|
||||
</data>
|
||||
<data name="ctl_btnStore" xml:space="preserve">
|
||||
<value>Switch to Plugins Store</value>
|
||||
</data>
|
||||
</root>
|
98
src/Bloatynosy/PSPluginHandler.cs
Normal file
98
src/Bloatynosy/PSPluginHandler.cs
Normal file
@ -0,0 +1,98 @@
|
||||
using BloatynosyNue;
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows.Forms;
|
||||
|
||||
public class PSPluginHandler
|
||||
{
|
||||
public void LoadPowerShellPlugins(TreeView treeView)
|
||||
{
|
||||
var scriptDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "plugins");
|
||||
|
||||
if (!Directory.Exists(scriptDirectory))
|
||||
{
|
||||
MessageBox.Show("plugins directory does not exist.");
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a Dependencies category in the TreeView
|
||||
TreeNode dependencyCategory = new TreeNode("Plugins");
|
||||
treeView.Nodes.Add(dependencyCategory);
|
||||
|
||||
var scriptFiles = Directory.GetFiles(scriptDirectory, "*.ps1");
|
||||
|
||||
foreach (var file in scriptFiles)
|
||||
{
|
||||
var scriptName = Path.GetFileNameWithoutExtension(file);
|
||||
|
||||
// Create a TreeNode for each ps script
|
||||
var scriptNode = new TreeNode
|
||||
{
|
||||
ToolTipText = file,
|
||||
Text = $"{scriptName} [PS]",
|
||||
Tag = file // Store the file path as the Tag
|
||||
};
|
||||
|
||||
// Add the script node to the Dependecy category
|
||||
dependencyCategory.Nodes.Add(scriptNode);
|
||||
}
|
||||
}
|
||||
|
||||
// Execute the selected PowerShell script
|
||||
public async Task ExecutePlugin(string pluginPath, Logger logger)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (var process = new Process())
|
||||
{
|
||||
process.StartInfo.FileName = "powershell.exe";
|
||||
process.StartInfo.Arguments = $"-NoProfile -ExecutionPolicy Bypass -File \"{pluginPath}\"";
|
||||
process.StartInfo.RedirectStandardOutput = true;
|
||||
process.StartInfo.RedirectStandardError = true;
|
||||
process.StartInfo.UseShellExecute = false;
|
||||
process.StartInfo.CreateNoWindow = true;
|
||||
|
||||
var outputBuilder = new StringBuilder();
|
||||
var errorBuilder = new StringBuilder();
|
||||
|
||||
// Handle output from PowerShell script
|
||||
process.OutputDataReceived += (sender, e) =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(e.Data))
|
||||
{
|
||||
outputBuilder.AppendLine(e.Data);
|
||||
logger.Log($"PowerShell script output: {e.Data}", System.Drawing.Color.Black);
|
||||
}
|
||||
};
|
||||
|
||||
// Handle error from PowerShell script
|
||||
process.ErrorDataReceived += (sender, e) =>
|
||||
{
|
||||
if (!string.IsNullOrEmpty(e.Data))
|
||||
{
|
||||
errorBuilder.AppendLine(e.Data);
|
||||
logger.Log($"PowerShell script error: {e.Data}", System.Drawing.Color.Crimson);
|
||||
}
|
||||
};
|
||||
|
||||
process.Start();
|
||||
process.BeginOutputReadLine();
|
||||
process.BeginErrorReadLine();
|
||||
|
||||
await Task.Run(() =>
|
||||
{
|
||||
process.WaitForExit();
|
||||
});
|
||||
|
||||
logger.Log($"PowerShell script executed successfully: {pluginPath}", System.Drawing.Color.Green);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.Log($"Error executing PowerShell script: {pluginPath}. Exception: {ex.Message}", System.Drawing.Color.Crimson);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user