Kaynağa Gözat

Upcoming changes for translation system + RU Test

deadmoon 4 yıl önce
ebeveyn
işleme
ab154dde37

+ 0 - 153
Optimizer/EdgeForm.Designer.cs

@@ -1,153 +0,0 @@
-namespace Optimizer
-{
-    partial class EdgeForm
-    {
-        /// <summary>
-        /// Required designer variable.
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary>
-        /// Clean up any resources being used.
-        /// </summary>
-        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region Windows Form Designer generated code
-
-        /// <summary>
-        /// Required method for Designer support - do not modify
-        /// the contents of this method with the code editor.
-        /// </summary>
-        private void InitializeComponent()
-        {
-            this.label1 = new System.Windows.Forms.Label();
-            this.label2 = new System.Windows.Forms.Label();
-            this.textBox1 = new System.Windows.Forms.TextBox();
-            this.cancel = new System.Windows.Forms.Button();
-            this.ok = new System.Windows.Forms.Button();
-            this.SuspendLayout();
-            // 
-            // label1
-            // 
-            this.label1.AutoSize = true;
-            this.label1.Font = new System.Drawing.Font("Segoe UI Semibold", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.label1.ForeColor = System.Drawing.Color.DodgerBlue;
-            this.label1.Location = new System.Drawing.Point(10, 7);
-            this.label1.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
-            this.label1.Name = "label1";
-            this.label1.Size = new System.Drawing.Size(341, 28);
-            this.label1.TabIndex = 0;
-            this.label1.Tag = "themeable";
-            this.label1.Text = "Enter your desired download folder:";
-            // 
-            // label2
-            // 
-            this.label2.AutoSize = true;
-            this.label2.Font = new System.Drawing.Font("Segoe UI Semibold", 12F, ((System.Drawing.FontStyle)((System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic))), System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.label2.ForeColor = System.Drawing.Color.Silver;
-            this.label2.Location = new System.Drawing.Point(10, 67);
-            this.label2.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
-            this.label2.Name = "label2";
-            this.label2.Size = new System.Drawing.Size(110, 21);
-            this.label2.TabIndex = 34;
-            this.label2.Tag = "";
-            this.label2.Text = "(Example: X:\\)";
-            // 
-            // textBox1
-            // 
-            this.textBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
-            this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
-            this.textBox1.Font = new System.Drawing.Font("Segoe UI Semibold", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.textBox1.ForeColor = System.Drawing.Color.White;
-            this.textBox1.Location = new System.Drawing.Point(14, 38);
-            this.textBox1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
-            this.textBox1.Name = "textBox1";
-            this.textBox1.Size = new System.Drawing.Size(378, 29);
-            this.textBox1.TabIndex = 0;
-            // 
-            // cancel
-            // 
-            this.cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-            this.cancel.BackColor = System.Drawing.Color.DodgerBlue;
-            this.cancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-            this.cancel.FlatAppearance.BorderColor = System.Drawing.Color.DodgerBlue;
-            this.cancel.FlatAppearance.MouseDownBackColor = System.Drawing.Color.RoyalBlue;
-            this.cancel.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
-            this.cancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
-            this.cancel.ForeColor = System.Drawing.Color.White;
-            this.cancel.Location = new System.Drawing.Point(245, 108);
-            this.cancel.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
-            this.cancel.Name = "cancel";
-            this.cancel.Size = new System.Drawing.Size(71, 31);
-            this.cancel.TabIndex = 36;
-            this.cancel.Tag = "themeable";
-            this.cancel.Text = "Cancel";
-            this.cancel.UseVisualStyleBackColor = false;
-            this.cancel.Click += new System.EventHandler(this.cancel_Click);
-            // 
-            // ok
-            // 
-            this.ok.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
-            this.ok.BackColor = System.Drawing.Color.DodgerBlue;
-            this.ok.FlatAppearance.BorderColor = System.Drawing.Color.DodgerBlue;
-            this.ok.FlatAppearance.MouseDownBackColor = System.Drawing.Color.RoyalBlue;
-            this.ok.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
-            this.ok.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
-            this.ok.ForeColor = System.Drawing.Color.White;
-            this.ok.Location = new System.Drawing.Point(321, 108);
-            this.ok.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
-            this.ok.Name = "ok";
-            this.ok.Size = new System.Drawing.Size(71, 31);
-            this.ok.TabIndex = 35;
-            this.ok.Tag = "themeable";
-            this.ok.Text = "OK";
-            this.ok.UseVisualStyleBackColor = false;
-            this.ok.Click += new System.EventHandler(this.ok_Click);
-            // 
-            // EdgeForm
-            // 
-            this.AcceptButton = this.ok;
-            this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
-            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
-            this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
-            this.CancelButton = this.cancel;
-            this.ClientSize = new System.Drawing.Size(402, 149);
-            this.Controls.Add(this.cancel);
-            this.Controls.Add(this.ok);
-            this.Controls.Add(this.textBox1);
-            this.Controls.Add(this.label2);
-            this.Controls.Add(this.label1);
-            this.DoubleBuffered = true;
-            this.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.ForeColor = System.Drawing.Color.White;
-            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
-            this.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
-            this.MaximizeBox = false;
-            this.MinimizeBox = false;
-            this.Name = "EdgeForm";
-            this.ShowIcon = false;
-            this.ShowInTaskbar = false;
-            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
-            this.Load += new System.EventHandler(this.EdgeFolder_Load);
-            this.ResumeLayout(false);
-            this.PerformLayout();
-
-        }
-
-        #endregion
-
-        private System.Windows.Forms.Label label1;
-        private System.Windows.Forms.TextBox textBox1;
-        private System.Windows.Forms.Label label2;
-        private System.Windows.Forms.Button cancel;
-        private System.Windows.Forms.Button ok;
-    }
-}

+ 0 - 43
Optimizer/EdgeForm.cs

@@ -1,43 +0,0 @@
-using System;
-using System.IO;
-
-namespace Optimizer
-{
-    public partial class EdgeForm : System.Windows.Forms.Form
-    {
-        string _errorMessage = "This folder does not exist, choose a new one!";
-
-        public EdgeForm()
-        {
-            InitializeComponent();
-            Options.ApplyTheme(this);
-        }
-
-        private void EdgeFolder_Load(object sender, EventArgs e)
-        {
-            CheckForIllegalCrossThreadCalls = false;
-
-            textBox1.Text = Utilities.GetEdgeDownloadFolder();
-            textBox1.Select(textBox1.Text.Length, 0);
-        }
-
-        private void ok_Click(object sender, EventArgs e)
-        {
-            if (Directory.Exists(textBox1.Text))
-            {
-                Utilities.SetEdgeDownloadFolder(textBox1.Text);
-                this.Close();
-            }
-            else
-            {
-                HelperForm f = new HelperForm(null, MessageType.Error, _errorMessage);
-                f.ShowDialog();
-            }
-        }
-
-        private void cancel_Click(object sender, EventArgs e)
-        {
-            this.Close();
-        }
-    }
-}

+ 0 - 120
Optimizer/EdgeForm.resx

@@ -1,120 +0,0 @@
-<?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>
-</root>

+ 6 - 0
Optimizer/Enums.cs

@@ -84,4 +84,10 @@
         Center,
         Right
     }
+
+    public enum LanguageCode
+    {
+        EN,
+        RU
+    }
 }

+ 9 - 9
Optimizer/HelperForm.Designer.cs

@@ -36,10 +36,10 @@
             // lblMessage
             // 
             this.lblMessage.Font = new System.Drawing.Font("Segoe UI Semibold", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(161)));
-            this.lblMessage.Location = new System.Drawing.Point(12, 9);
+            this.lblMessage.Location = new System.Drawing.Point(10, 7);
             this.lblMessage.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
             this.lblMessage.Name = "lblMessage";
-            this.lblMessage.Size = new System.Drawing.Size(540, 86);
+            this.lblMessage.Size = new System.Drawing.Size(432, 69);
             this.lblMessage.TabIndex = 0;
             this.lblMessage.Text = "Restart to apply changes?";
             // 
@@ -53,10 +53,10 @@
             this.btnYes.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
             this.btnYes.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
             this.btnYes.ForeColor = System.Drawing.Color.White;
-            this.btnYes.Location = new System.Drawing.Point(448, 160);
+            this.btnYes.Location = new System.Drawing.Point(358, 128);
             this.btnYes.Margin = new System.Windows.Forms.Padding(2);
             this.btnYes.Name = "btnYes";
-            this.btnYes.Size = new System.Drawing.Size(120, 39);
+            this.btnYes.Size = new System.Drawing.Size(96, 31);
             this.btnYes.TabIndex = 31;
             this.btnYes.Tag = "themeable";
             this.btnYes.Text = "Yes";
@@ -73,10 +73,10 @@
             this.btnNo.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
             this.btnNo.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
             this.btnNo.ForeColor = System.Drawing.Color.White;
-            this.btnNo.Location = new System.Drawing.Point(321, 160);
+            this.btnNo.Location = new System.Drawing.Point(257, 128);
             this.btnNo.Margin = new System.Windows.Forms.Padding(2);
             this.btnNo.Name = "btnNo";
-            this.btnNo.Size = new System.Drawing.Size(120, 39);
+            this.btnNo.Size = new System.Drawing.Size(96, 31);
             this.btnNo.TabIndex = 32;
             this.btnNo.Tag = "themeable";
             this.btnNo.Text = "No";
@@ -86,18 +86,18 @@
             // HelperForm
             // 
             this.AcceptButton = this.btnYes;
-            this.AutoScaleDimensions = new System.Drawing.SizeF(120F, 120F);
+            this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
             this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
             this.CancelButton = this.btnNo;
-            this.ClientSize = new System.Drawing.Size(579, 211);
+            this.ClientSize = new System.Drawing.Size(463, 169);
             this.Controls.Add(this.btnNo);
             this.Controls.Add(this.btnYes);
             this.Controls.Add(this.lblMessage);
             this.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(161)));
             this.ForeColor = System.Drawing.Color.White;
             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
-            this.Margin = new System.Windows.Forms.Padding(2, 4, 2, 4);
+            this.Margin = new System.Windows.Forms.Padding(2, 3, 2, 3);
             this.MaximizeBox = false;
             this.MinimizeBox = false;
             this.Name = "HelperForm";

+ 26 - 1
Optimizer/HelperForm.cs

@@ -1,4 +1,7 @@
 using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
 
 namespace Optimizer
 {
@@ -19,6 +22,7 @@ namespace Optimizer
             }
             if (_type == MessageType.Restart)
             {
+                Options.SaveSettings();
                 Utilities.Reboot();
             }
             if (_type == MessageType.Hosts)
@@ -44,13 +48,16 @@ namespace Optimizer
             if (_type == MessageType.Error)
             {
                 btnNo.Visible = false;
-                btnYes.Text = "OK";
+                btnYes.Text = Options.TranslationList["btnOk"];
 
                 this.AcceptButton = btnNo;
                 this.AcceptButton = btnYes;
                 this.CancelButton = btnNo;
                 this.CancelButton = btnYes;
             }
+
+            // translate UI elements
+            if (Options.CurrentOptions.LanguageCode != LanguageCode.EN) Translate();
         }
 
         private void btnNo_Click(object sender, EventArgs e)
@@ -69,5 +76,23 @@ namespace Optimizer
             CheckForIllegalCrossThreadCalls = false;
             this.BringToFront();
         }
+
+        private void Translate()
+        {
+            Dictionary<string, string> translationList = Options.TranslationList.ToObject<Dictionary<string, string>>();
+
+            Control element;
+
+            foreach (var x in translationList)
+            {
+                if (x.Key == null || x.Key == string.Empty) continue;
+                element = this.Controls.Find(x.Key, true).FirstOrDefault();
+
+                if (element == null) continue;
+
+                element.Text = x.Value;
+            }
+        }
+
     }
 }

+ 8 - 8
Optimizer/HostsEditorForm.Designer.cs

@@ -43,7 +43,7 @@
             this.bpanel.Controls.Add(this.savebtn);
             this.bpanel.Dock = System.Windows.Forms.DockStyle.Bottom;
             this.bpanel.Location = new System.Drawing.Point(0, 392);
-            this.bpanel.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.bpanel.Margin = new System.Windows.Forms.Padding(2);
             this.bpanel.Name = "bpanel";
             this.bpanel.Size = new System.Drawing.Size(604, 49);
             this.bpanel.TabIndex = 0;
@@ -58,10 +58,10 @@
             this.closebtn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
             this.closebtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
             this.closebtn.ForeColor = System.Drawing.Color.White;
-            this.closebtn.Location = new System.Drawing.Point(447, 8);
-            this.closebtn.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.closebtn.Location = new System.Drawing.Point(342, 8);
+            this.closebtn.Margin = new System.Windows.Forms.Padding(2);
             this.closebtn.Name = "closebtn";
-            this.closebtn.Size = new System.Drawing.Size(71, 31);
+            this.closebtn.Size = new System.Drawing.Size(124, 31);
             this.closebtn.TabIndex = 35;
             this.closebtn.Tag = "themeable";
             this.closebtn.Text = "Close";
@@ -77,10 +77,10 @@
             this.savebtn.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
             this.savebtn.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
             this.savebtn.ForeColor = System.Drawing.Color.White;
-            this.savebtn.Location = new System.Drawing.Point(523, 8);
-            this.savebtn.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.savebtn.Location = new System.Drawing.Point(470, 8);
+            this.savebtn.Margin = new System.Windows.Forms.Padding(2);
             this.savebtn.Name = "savebtn";
-            this.savebtn.Size = new System.Drawing.Size(71, 31);
+            this.savebtn.Size = new System.Drawing.Size(124, 31);
             this.savebtn.TabIndex = 34;
             this.savebtn.Tag = "themeable";
             this.savebtn.Text = "Save";
@@ -92,7 +92,7 @@
             this.panel1.Controls.Add(this.textBox1);
             this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
             this.panel1.Location = new System.Drawing.Point(0, 0);
-            this.panel1.Margin = new System.Windows.Forms.Padding(2, 2, 2, 2);
+            this.panel1.Margin = new System.Windows.Forms.Padding(2);
             this.panel1.Name = "panel1";
             this.panel1.Size = new System.Drawing.Size(604, 392);
             this.panel1.TabIndex = 1;

+ 23 - 0
Optimizer/HostsEditorForm.cs

@@ -1,4 +1,6 @@
 using System;
+using System.Collections.Generic;
+using System.Linq;
 using System.Windows.Forms;
 
 namespace Optimizer
@@ -16,6 +18,9 @@ namespace Optimizer
             {
                 savebtn.Enabled = false;
             }
+
+            // translate UI elements
+            if (Options.CurrentOptions.LanguageCode != LanguageCode.EN) Translate();
         }
 
         private void HostsEditor_Load(object sender, EventArgs e)
@@ -30,6 +35,24 @@ namespace Optimizer
             textBox1.Focus();
         }
 
+        private void Translate()
+        {
+            this.Text = Options.TranslationList["HostsEditorForm"];
+            Dictionary<string, string> translationList = Options.TranslationList.ToObject<Dictionary<string, string>>();
+
+            Control element;
+
+            foreach (var x in translationList)
+            {
+                if (x.Key == null || x.Key == string.Empty) continue;
+                element = this.Controls.Find(x.Key, true).FirstOrDefault();
+
+                if (element == null) continue;
+
+                element.Text = x.Value;
+            }
+        }
+
         private void button1_Click(object sender, EventArgs e)
         {
             this.Close();

+ 0 - 12
Optimizer/Integrator.cs

@@ -11,18 +11,6 @@ namespace Optimizer
 {
     public static class Integrator
     {
-        static string _newLine = Environment.NewLine;
-
-        internal static string powerinfo = "Power Menu contains the following:" + _newLine + _newLine + "Lock" + _newLine + "Sign out" + _newLine + "Switch User" + _newLine + "Sleep" + _newLine + "Hibernate" + _newLine + "Restart" + _newLine + "Restart with Boot Options Menu" + _newLine + "Shut down" + _newLine + "Shut down (Hybrid)";
-
-        internal static string systemtoolsinfo = "System Tools Menu contains the following:" + _newLine + _newLine + "Control Panel" + _newLine + "Disk Cleanup" + _newLine + "Device Manager" + _newLine + "Event Viewer" + _newLine + "Registry Editor" + _newLine + "Security Center" + _newLine + "System Configuration" + _newLine + "Task Manager" + _newLine + "Task Scheduler" + _newLine + "Windows Update";
-
-        internal static string systemshortcutsinfo = "System Shortcuts Menu contains the following:" + _newLine + _newLine + "Administrative Tools" + _newLine + "Change Date and Time" + _newLine + "Change Regional Settings" + _newLine + "Folder Options" + _newLine + "God Mode" + _newLine + "Internet Options" + _newLine + "Network Connections" + _newLine + "Power Options" + _newLine + "Programs and Features" + _newLine + "Recycle Bin" + _newLine + "Run" + _newLine + "Search" + _newLine + "Services" + _newLine + "System Properties" + _newLine + "User Accounts" + _newLine + "User Accounts Classic" + _newLine + "Window Switcher";
-
-        internal static string desktopshortcutsinfo = "Desktop Shortcuts Menu contains the following:" + _newLine + _newLine + "Change Theme" + _newLine + "Change Wallpaper" + _newLine + "Change Screen Saver" + _newLine + "Change Desktop Icons" + _newLine + "Change Sound Scheme" + _newLine + "Change Mouse Pointers" + _newLine + "Change DPI Scaling" + _newLine + "Change Window Color and Appearance";
-
-        internal static string windowsappsinfo = "Windows Apps Menu contains the following:" + _newLine + _newLine + "Calculator" + _newLine + "Character Map" + _newLine + "Command Prompt" + _newLine + "Disk Defragmenter" + _newLine + "Internet Explorer" + _newLine + "Notepad" + _newLine + "Paint" + _newLine + "Problem Steps Recorder" + _newLine + "Snipping Tool" + _newLine + "Sound Recorder" + _newLine + "System Restore" + _newLine + "Task Scheduler" + _newLine + "Windows Media Player" + _newLine + "Wordpad";
-
         internal static string FolderDefaultIcon = @"%systemroot%\system32\imageres.dll,-112";
 
         private static T DirectCast<T>(object o)

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1072 - 440
Optimizer/MainForm.Designer.cs


Dosya farkı çok büyük olduğundan ihmal edildi
+ 247 - 225
Optimizer/MainForm.cs


+ 171 - 2
Optimizer/MainForm.resx

@@ -142,7 +142,7 @@
   <metadata name="infoTip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>615, 45</value>
   </metadata>
-  <data name="toggleSwitch1.ToolTip" xml:space="preserve">
+  <data name="performanceSw.ToolTip" xml:space="preserve">
     <value>Collection of internal Windows settings to optimize performance.
 Completely safe to apply.
 
@@ -44203,7 +44203,7 @@ Completely safe to apply.
         2EkIIWUk2EkIIWUk2EkIIWUk2EkIIWUk2EkIIeVjyzv+P/YEdIroBYDTAAAAAElFTkSuQmCC
 </value>
   </data>
-  <data name="label19.Text" xml:space="preserve">
+  <data name="integrator7.Text" xml:space="preserve">
     <value>Items can have custom icons and position.
 They can also be hidden, accessible only
 by pressing the SHIFT key.
@@ -44211,6 +44211,175 @@ by pressing the SHIFT key.
 It can also create custom commands
 for Run Dialog, making it easy to launch
 any application only by typing your desired keyword.</value>
+  </data>
+  <data name="pictureBox85.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+</value>
+  </data>
+  <data name="pictureBox87.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        iVBORw0KGgoAAAANSUhEUgAAAMwAAAB4CAYAAAC+eR2RAAAABGdBTUEAALGPC/xhBQAAAXFJREFUeF7t
+        01ENgDAUwMAJgUwD8tGFgIeF9f+anISukXScYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQ
+        YaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQYaSQ
+        YaSQYaSQYaSQYaSQYaSQYaSQYaSQYaTQup93gDOGgcAwEBgGAsNAYBgIDAOBYSAwDASGgcAwEBgGAsNA
+        YBgIDAOBYSAwDASGgcAwEBgGAsNAYBgIDAOBYSAwDASGgcAwEBgGAsNAYBgIDAOBYSAwDASGgcAwEBgG
+        AsNAYBgIDAOBYSBY37UHOGMYCAwDgWEgMAwEhoHAMBAYBgLDQGAYCAwDgWEgMAwEhoHAMBAYBgLDQGAY
+        CAwDgWEgMAwEhoHAMBAYBgLDQGAYCAwDgWEgMAwEhoHAMBAYBgLDQGAYCAwDgWEgMAwEhoHAMBAYBo7t
+        +QF7l+lda2DhiAAAAABJRU5ErkJggg==
+</value>
+  </data>
+  <data name="pictureBox86.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        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
+        QmCC
+</value>
   </data>
   <data name="pictureBox84.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>

+ 0 - 1
Optimizer/Optimize.cs

@@ -330,7 +330,6 @@ namespace Optimizer
             catch (Exception ex)
             {
                 ErrorLogger.LogError("Optimize.DisableSystemRestore", ex.Message, ex.StackTrace);
-                //MessageBox.Show(ex.Message, "Optimizer", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
 
             Utilities.StopService("VSS");

+ 2 - 9
Optimizer/Optimizer.csproj

@@ -105,12 +105,6 @@
     <Compile Include="ColoredControls\ColoredRadioButton.cs">
       <SubType>Component</SubType>
     </Compile>
-    <Compile Include="EdgeForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="EdgeForm.Designer.cs">
-      <DependentUpon>EdgeForm.cs</DependentUpon>
-    </Compile>
     <Compile Include="EmbeddedAssembly.cs" />
     <Compile Include="Enums.cs" />
     <Compile Include="HostsEditorForm.cs">
@@ -171,9 +165,6 @@
     <EmbeddedResource Include="AboutForm.resx">
       <DependentUpon>AboutForm.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="EdgeForm.resx">
-      <DependentUpon>EdgeForm.cs</DependentUpon>
-    </EmbeddedResource>
     <EmbeddedResource Include="HostsEditorForm.resx">
       <DependentUpon>HostsEditorForm.cs</DependentUpon>
     </EmbeddedResource>
@@ -217,6 +208,7 @@
     </Compile>
     <None Include="Resources\DesktopShortcuts.reg" />
     <None Include="Resources\DisableOfficeTelemetry.reg" />
+    <None Include="Resources\EN.json" />
     <None Include="Resources\EnableOfficeTelemetry.reg" />
     <None Include="Resources\EnableOfficeTelemetryTasks.bat" />
     <None Include="Resources\EnableTelemetryTasks.bat" />
@@ -225,6 +217,7 @@
     <None Include="Resources\InstallTakeOwnership.reg" />
     <None Include="Resources\PowerMenu.reg" />
     <None Include="Resources\RemoveTakeOwnership.reg" />
+    <None Include="Resources\RU.json" />
     <None Include="Resources\SystemShortcuts.reg" />
     <None Include="Resources\SystemTools.reg" />
     <None Include="Resources\WindowsApps.reg" />

+ 15 - 0
Optimizer/Options.cs

@@ -16,6 +16,8 @@ namespace Optimizer
         public bool EnableTray { get; set; }
         public bool ShowHelp { get; set; }
 
+        public LanguageCode LanguageCode { get; set; }
+        
         public bool EnablePerformanceTweaks { get; set; }
         public bool DisableNetworkThrottling { get; set; }
         public bool DisableWindowsDefender { get; set; }
@@ -70,6 +72,8 @@ namespace Optimizer
 
         internal static SettingsJson CurrentOptions = new SettingsJson();
 
+        internal static dynamic TranslationList;
+
         internal static void ApplyTheme(Form f)
         {
             switch (CurrentOptions.Color)
@@ -188,6 +192,8 @@ namespace Optimizer
                 CurrentOptions.EnableTray = true;
                 CurrentOptions.ShowHelp = true;
 
+                CurrentOptions.LanguageCode = LanguageCode.EN;
+
                 CurrentOptions.EnablePerformanceTweaks = false;
                 CurrentOptions.DisableNetworkThrottling = false;
                 CurrentOptions.DisableWindowsDefender = false;
@@ -244,6 +250,15 @@ namespace Optimizer
             {
                 CurrentOptions = JsonConvert.DeserializeObject<SettingsJson>(File.ReadAllText(SettingsFile));
             }
+
+            LoadTranslation();
+        }
+
+        internal static void LoadTranslation()
+        {
+            // load proper translation list
+            if (CurrentOptions.LanguageCode == LanguageCode.EN) TranslationList = JObject.Parse(Properties.Resources.EN);
+            if (CurrentOptions.LanguageCode == LanguageCode.RU) TranslationList = JObject.Parse(Properties.Resources.RU);
         }
     }
 }

+ 22 - 9
Optimizer/Program.cs

@@ -12,10 +12,10 @@ namespace Optimizer
 
         // Enter current version here
 
-        internal readonly static float Major = 8;
-        internal readonly static float Minor = 3;
+        internal readonly static float Major = 0;
+        internal readonly static float Minor = 0;
 
-        internal readonly static bool EXPERIMENTAL_BUILD = false;
+        internal readonly static bool EXPERIMENTAL_BUILD = true;
 
         internal static string GetCurrentVersionTostring()
         {
@@ -36,8 +36,13 @@ namespace Optimizer
 
         internal static MainForm MainForm;
 
-        readonly static string _adminMissingMessage = "Optimizer needs to be run as administrator!\nApp will now close...";
-        readonly static string _unsupportedMessage = "Optimizer works in Windows 7 or higher!\nApp will now close...";
+        static string _adminMissingMessage = "Optimizer needs to be run as administrator!\nApp will now close...";
+        static string _unsupportedMessage = "Optimizer works in Windows 7 or higher!\nApp will now close...";
+
+        static string _confInvalidVersionMsg = "Windows version does not match!";
+        static string _confInvalidFormatMsg = "Config file is in invalid format!";
+        static string _confNotFoundMsg = "Config file does not exist!";
+        static string _argInvalidMsg = "Invalid argument! Example: Optimizer.exe /silent.conf";
 
         [STAThread]
         static void Main(string[] switches)
@@ -83,6 +88,14 @@ namespace Optimizer
                     try
                     {
                         Options.LoadSettings();
+
+                        // ideal place to replace internal messages from translation list
+                        _adminMissingMessage = Options.TranslationList["adminMissingMsg"];
+                        _unsupportedMessage = Options.TranslationList["unsupportedMsg"];
+                        _confInvalidFormatMsg = Options.TranslationList["confInvalidFormatMsg"];
+                        _confInvalidVersionMsg = Options.TranslationList["confInvalidVersionMsg"];
+                        _confNotFoundMsg = Options.TranslationList["confNotFoundMsg"];
+                        _argInvalidMsg = Options.TranslationList["argInvalidMsg"];
                     }
                     catch (Exception ex)
                     {
@@ -140,25 +153,25 @@ namespace Optimizer
                                     }
                                     else
                                     {
-                                        MessageBox.Show("Windows version does not match!", "Invalid config file", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                                        MessageBox.Show(_confInvalidVersionMsg, "Optimizer", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                         Environment.Exit(0);
                                     }
                                 }
                                 else
                                 {
-                                    MessageBox.Show("Config file is in invalid format!", "Invalid config file", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                                    MessageBox.Show(_confInvalidFormatMsg, "Optimizer", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                     Environment.Exit(0);
                                 }
                             }
                             else
                             {
-                                MessageBox.Show("Config file does not exist!", "Invalid config file", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                                MessageBox.Show(_confNotFoundMsg, "Optimizer", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                 Environment.Exit(0);
                             }
                         }
                         else
                         {
-                            MessageBox.Show("Invalid argument. Example: optimizer.exe /silent.conf", "Invalid argument", MessageBoxButtons.OK, MessageBoxIcon.Information);
+                            MessageBox.Show(_argInvalidMsg, "Optimizer", MessageBoxButtons.OK, MessageBoxIcon.Information);
                             Environment.Exit(0);
                         }
                     }

+ 19 - 1
Optimizer/Properties/Resources.Designer.cs

@@ -19,7 +19,7 @@ namespace Optimizer.Properties {
     // class via a tool like ResGen or Visual Studio.
     // To add or remove a member, edit your .ResX file then rerun ResGen
     // with the /str option, or rebuild your VS project.
-    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")]
     [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
     [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
     internal class Resources {
@@ -145,6 +145,15 @@ namespace Optimizer.Properties {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to .
+        /// </summary>
+        internal static string EN {
+            get {
+                return ResourceManager.GetString("EN", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Windows Registry Editor Version 5.00
         ///
@@ -289,6 +298,15 @@ namespace Optimizer.Properties {
             }
         }
         
+        /// <summary>
+        ///   Looks up a localized string similar to .
+        /// </summary>
+        internal static string RU {
+            get {
+                return ResourceManager.GetString("RU", resourceCulture);
+            }
+        }
+        
         /// <summary>
         ///   Looks up a localized string similar to Windows Registry Editor Version 5.00
         ///

+ 6 - 0
Optimizer/Properties/Resources.resx

@@ -169,4 +169,10 @@
   <data name="EnableXboxTasks" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\EnableXboxTasks.bat;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
   </data>
+  <data name="EN" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\EN.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
+  </data>
+  <data name="RU" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\RU.json;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
+  </data>
 </root>

+ 252 - 0
Optimizer/Resources/EN.json

@@ -0,0 +1,252 @@
+{
+	"restartButton": "Apply & Restart",
+	"restartButton8": "Apply & Restart",
+	"restartButton10": "Apply & Restart",
+	"restartAndApply": "restart to apply changes?",
+	"txtVersion": "Version: {VN}",
+	"txtBitness": "You are working with {BITS}",
+	"linkUpdate": "Update available",
+	"lblLab": "Experimental build\n(delete after testing)",
+	"performanceSw": "Enable Performance Tweaks",
+	"networkSw": "Disable Network Throttling",
+	"defenderSw": "Disable Windows Defender",
+	"systemRestoreSw": "Disable System Restore",
+	"printSw": "Disable Print Service",
+	"mediaSharingSw": "Disable Media Player Sharing",
+	"faxSw": "Disable Fax Service",
+	"reportingSw": "Disable Error Reporting",
+	"homegroupSw": "Disable HomeGroup",
+	"superfetchSw": "Disable Superfetch",
+	"telemetryTasksSw": "Disable Telemetry Tasks",
+	"officeTelemetrySw": "Disable Office 2016 Telemetry",
+	"compatSw": "Disable Compatibility Assistant",
+	"smartScreenSw": "Disable SmartScreen",
+	"stickysw": "Disable Sticky Keys",
+	"universalTab": "Universal",
+	"modernAppsTab": "UWP Apps",
+	"startupTab": "Startup",
+	"appsTab": "Common Apps",
+	"cleanerTab": "Cleaner",
+	"pingerTab": "Pinger",
+	"registryFixerTab": "Registry",
+	"integratorTab": "Integrator",
+	"optionsTab": "Options",
+	"oldMixerSw": "Enable Classic Volume Mixer",
+	"colorBarSw": "Enable Taskbar Color",
+	"oldExplorerSw": "Disable Quick Access History",
+	"adsSw": "Disable Start Menu Ads",
+	"darkSw": "Enable Dark Theme",
+	"uODSw": "Uninstall OneDrive",
+	"peopleSw": "Disable My People",
+	"longPathsSw": "Enable Long Paths",
+	"autoUpdatesSw": "Disable Automatic Updates",
+	"driversSw": "Exclude Drivers from Updates",
+	"telemetryServicesSw": "Disable Telemetry Services",
+	"privacySw": "Enhance Privacy",
+	"ccSw": "Disable Cloud Clipboard",
+	"cortanaSw": "Disable Cortana",
+	"sensorSw": "Disable Sensor Services",
+	"castSw": "Remove Cast to Device",
+	"inkSw": "Disable Windows Ink",
+	"spellSw": "Disable Spell Checking",
+	"xboxSw": "Disable Xbox Live",
+	"gameBarSw": "Disable Game Bar",
+	"insiderSw": "Disable Insider Service",
+	"featuresSw": "Disable Feature Updates",
+	"actionSw": "Disable Notification Center",
+	"disableOneDriveSw": "Disable OneDrive",
+	"refreshModernAppsButton": "Refresh",
+	"uninstallModernAppsButton": "Uninstall",
+	"txtModernAppsTitle": "Uninstall unwanted UWP apps",
+	"chkSelectAllModernApps": "Select all",
+	"chkOnlyRemovable": "Only Uninstall-ables",
+	"txtUWP": "If you uninstall Store\nyou won't be able\nto install new UWP apps!\n\nAlso, some apps\ncan't be uninstalled.\n\nLike Microsoft Edge,\nSettings, etc.",
+	"startupTitle": "Choose your startup items",
+	"removeStartupItemB": "Remove",
+	"locateFileB": "Locate file",
+	"findInRegB": "Find in Registry",
+	"refreshStartupB": "Refresh",
+	"restoreStartupB": "Restore",
+	"backupStartupB": "Backup",
+	"lblBackupTitle": "Backup title:",
+	"doBackup": "OK",
+	"cancelBackup": "Cancel",
+	"startupItemName": "Name",
+	"startupItemLocation": "Location",
+	"startupItemType": "Type",
+	"txtFeedError": "No internet connection, try refreshing links again",
+	"appsTitle": "Quickly download && install useful apps",
+	"btnGetFeed": "Refresh links",
+	"bitPref": "Set bit preference",
+	"linkWarnings": "See warnings",
+	"txtDownloadStatus": "Idle",
+	"goToDownloadsB": "Go to Downloads",
+	"btnDownloadApps": "Download",
+	"cAutoInstall": "Install after downloading",
+	"changeDownDirB": "Change",
+	"setDownDirLbl": "Set download folder",
+	"c64": "64-bit",
+	"c32": "32-bit",
+	"checkSelectAll": "Select all",
+	"checkTemp": "Temporary files",
+	"checkLogs": "Windows logs",
+	"checkMiniDumps": "BSOD minidumps",
+	"checkBin": "Empty Recycle Bin",
+	"checkMediaCache": "Media Player cache",
+	"checkErrorReports": "Error reports",
+	"cleanDriveB": "Clean",
+	"lblPretext": "Size to be freed:",
+	"cleanerTitle": "Clean up your system drive",
+	"pingerTitle": "Ping IP addresses and assess your latency",
+	"lblPinger": "IP / Domain name",
+	"copyIPB": "Copy",
+	"copyB": "Copy IP",
+	"btnShodan": "Check on SHODAN.io",
+	"btnPing": "Ping",
+	"lblResults": "Results",
+	"flushCacheB": "Flush DNS cache",
+	"btnExport": "Export",
+	"hostsTitle": "Edit your hosts file efficiently",
+	"linkLocate": "Locate",
+	"linkAdvancedEdit": "Advanced editor",
+	"linkRestoreDefault": "Restore default",
+	"lblIP": "IP address",
+	"lblDomain": "Domain",
+	"chkBlock": "Block",
+	"addHostB": "Add",
+	"lblLock": "Protect your HOSTS file by locking it",
+	"chkReadOnly": "Read-only",
+	"lblAdblock": "Pre-made adblocks",
+	"lblAdblockSub": "(will delete your current config)",
+	"adblockS": "AdBlock + Social",
+	"adblockP": "AdBlock + Porn",
+	"removeHostB": "Remove",
+	"refreshHostsB": "Refresh",
+	"removeAllHostsB": "Remove all",
+	"regFixB": "Fix",
+	"regLbl": "(some changes might need this)",
+	"checkRestartExplorer": "Also restart Explorer to apply changes",
+	"checkRegistryEditor": "Registry Editor",
+	"checkFirewall": "Windows Firewall",
+	"checkContextMenu": "Right Click menu",
+	"checkRunDialog": "Run Dialog",
+	"checkFolderOptions": "Folder Options",
+	"checkControlPanel": "Control Panel",
+	"checkCommandPrompt": "Command Prompt",
+	"checkTaskManager": "Task Manager",
+	"checkEnableAll": "Enable all",
+	"registryTitle": "Fix common registry issues",
+	"quickAccessToggle": "Show Quick Access Menu",
+	"helpTipsToggle": "Show Help Messages",
+	"lblTheming": "Choose your theme",
+	"radioOcean": "Ocean",
+	"radioMagma": "Magma",
+	"radioZerg": "Zerg",
+	"radioCaramel": "Caramel",
+	"radioLime": "Lime",
+	"radioMinimal": "Minimal",
+	"lblUpdating": "Check && update",
+	"btnUpdate": "Check for update",
+	"btnChangelog": "View changes",
+	"lblUpdateDisabled": "Disabled in experimental builds",
+	"lblTroubleshoot": "Troubleshooting",
+	"btnViewLog": "View errors",
+	"btnOpenConf": "Show config folder",
+	"btnResetConfig": "Reset configuration",
+	"integrator1": "Integrator is able to add fully-customized\nitems in Desktop right-click menu:",
+	"integrator2": "• Any program",
+	"integrator3": "• Shortcuts to folders",
+	"integrator4": "• Links to web",
+	"integrator5": "• Any type of file",
+	"integrator6": "• Commands",
+	"integrator7": "Items can have custom icons and position.\nThey can also be hidden,accessible only\nby pressing the SHIFT key.\nIt can also create custom commands\nfor Run Dialog, making it easy to launch\nany application only by typing your desired keyword.",
+	"integratorInfoTab": "Info",
+	"tabPage8": "Add/Modify",
+	"tabPage9": "Remove",
+	"tabPage10": "Ready Menus",
+	"tabPage11": "Run Dialog",
+	"addItemL": "Add or modify an item",
+	"itemtype": "Item Type",
+	"radioProgram": "Program",
+	"radioFolder": "Folder",
+	"radioLink": "Link",
+	"radioFile": "File",
+	"radioCommand": "Command",
+	"itemtoaddgroup": "Program to add",
+	"folderToAdd": "Folder to add",
+	"linkToAdd": "Link to add",
+	"fileToAdd": "File to add",
+	"commandToAdd": "Command to add",
+	"icontoaddgroup": "Icon to add",
+	"checkDefaultIcon": "Use program's icon",
+	"itemposition": "Item position",
+	"radioTop": "Top",
+	"radioMiddle": "Middle",
+	"radioBottom": "Bottom",
+	"security": "Security",
+	"checkShift": "Show only when SHIFT is pressed",
+	"itemnamegroup": "Item name in menu",
+	"btnAddItem": "Add/Modify",
+	"removeIntegratorItemsL": "Remove existing Desktop items",
+	"removeDIB": "Remove",
+	"refreshIIB": "Refresh",
+	"removeAllIIB": "Remove all",
+	"PMB": "Add Power Menu",
+	"STB": "Add System Tools",
+	"WAB": "Add Windows Apps",
+	"SSB": "Add System Shortcuts",
+	"DSB": "Add Desktop Shortcuts",
+	"AddOwnerB": "Add Take Ownership",
+	"RemoveOwnerB": "Remove Take Ownership",
+	"readyMenusL": "Add useful, pre-made menus",
+	"refreshCCB": "Refresh",
+	"removeCCB": "Remove",
+	"removeCCL": "Remove existing commands",
+	"btnCreateCustomCommand": "Create",
+	"ccKeywordL": "keyword",
+	"ccFileL": "File location",
+	"ccL": "Define your custom Run commands",
+	"btnYes": "Yes",
+	"btnNo": "No",
+	"btnOk": "OK",
+	"HostsEditorForm": "Hosts Editor",
+	"savebtn": "Save",
+	"closebtn": "Close",
+	"adminMissingMsg": "Optimizer needs to be run as administrator!\nApp will now close...",
+	"unsupportedMsg": "Optimizer works in Windows 7 or higher!\nApp will now close...",
+	"confInvalidVersionMsg": "Windows version does not match!",
+	"confInvalidFormatMsg": "Config file is in invalid format!",
+	"confNotFoundMsg": "Config file does not exist!",
+	"argInvalidMsg": "Invalid argument! Example: Optimizer.exe /silent.conf",
+	"StartupPreviewForm": "Startup Items Preview",
+	"StartupRestoreForm": "Restore Startup Items",
+	"backupL": "Recover your startup items",
+	"txtNoBackups": "No backups found",
+	"previewBackupB": "Preview",
+	"restoreBackupB": "Restore",
+	"deleteBackupB": "Delete",
+	"noNewVersion": "You already have the latest version!",
+	"betaVersion": "You are using an experimental version!",
+	"removeAllStartup": "Are you sure you want to delete all startup items?",
+	"removeAllHosts": "Are you sure you want to delete all hosts entries?",
+	"removeAllItems": "Are you sure you want to delete all desktop items?",
+	"removeModernApps": "Are you sure you want to uninstall the following app(s)?",
+	"errorModernApps": "The following app(s) couldn't be uninstalled:\n",
+	"resetMessage": "Are you sure you want to reset configuration?\nThis will reset all your preferences, including any icons you extracted\nor downloaded using Integrator, but will not touch anything on your computer!",
+	"newVersion": "There is a new version available!\n\nLatest version: {LATEST}\nCurrent version: {CURRENT}\n\nDo you want to download it now?\n\nApp will restart in a few seconds.",
+	"downloadsFinished": "Finished",
+	"downloadDirInvalid": "Download folder specified is not valid",
+	"no64Download": "No 64-bit available, downloading 32-bit",
+	"no32Download": "No 32-bit available, skipping",
+	"installing": "Installing",
+	"linkInvalid": "Link is no longer valid",
+	"noErrorsM": "There are no errors to show!",
+	"hostNotFound": "Could not find host",
+	"pinging": "Pinging with 32 bytes - 9 times...",
+	"latency": "LATENCY",
+	"min": "Min",
+	"max": "Max",
+	"avg": "Average",
+	"timeout": "Request timed out",
+	"languagesL": "Choose language"
+}

+ 252 - 0
Optimizer/Resources/RU.json

@@ -0,0 +1,252 @@
+{
+	"restartButton": "Применить и перезапустить",
+	"restartButton8": "Применить и перезапустить",
+	"restartButton10": "Применить и перезапустить",
+	"restartAndApply": "перезагрузить, чтобы изменения вступили в силу?",
+	"txtVersion": "Версия: {VN}",
+	"txtBitness": "Вы работаете с {BITS}",
+	"linkUpdate": "обновление доступно",
+	"lblLab": "экспериментальная сборка\n(удалить после тестирования)",
+	"performanceSw": "Вкл Настройки производительности",
+	"networkSw": "Откл Сетевое регулирование",
+	"defenderSw": "Откл Защитник Windows",
+	"systemRestoreSw": "Откл Восстановление системы",
+	"printSw": "Откл Служба печати",
+	"mediaSharingSw": "Откл Совместное использование медиаплеера",
+	"faxSw": "Откл Служба факса",
+	"reportingSw": "Откл Отчет об ошибках",
+	"homegroupSw": "Откл Домашняя группа",
+	"superfetchSw": "Откл служба Superfetch",
+	"telemetryTasksSw": "Откл Задачи телеметрии",
+	"officeTelemetrySw": "Откл Офисная телеметрия",
+	"compatSw": "Откл Помощник по совместимости",
+	"smartScreenSw": "Откл SmartScreen",
+	"stickysw": "Откл Залипание клавиш",
+	"universalTab": "Универсальное",
+	"modernAppsTab": "UWP Приложения",
+	"startupTab": "Автозагрузка",
+	"appsTab": "Общие приложения",
+	"cleanerTab": "Очистка",
+	"pingerTab": "Пинг",
+	"registryFixerTab": "Реестр",
+	"integratorTab": "Интегратор",
+	"optionsTab": "Опции",
+	"oldMixerSw": "Вкл Классический микшер громкости",
+	"colorBarSw": "Вкл Цвет панели задач",
+	"oldExplorerSw": "Откл История быстрого доступа",
+	"adsSw": "Откл Реклама в меню Пуск",
+	"darkSw": "Вкл Темная тема",
+	"uODSw": "Удалить OneDrive",
+	"peopleSw": "Откл My People",
+	"longPathsSw": "Вкл Длинные пути",
+	"autoUpdatesSw": "Откл Автоматические обновления",
+	"driversSw": "Исключить драйверы из обновлений",
+	"telemetryServicesSw": "Откл Службы телеметрии",
+	"privacySw": "Повышение конфиденциальности",
+	"ccSw": "Откл Облачный буфер обмена",
+	"cortanaSw": "Откл Cortana",
+	"sensorSw": "Откл службы сенсоров",
+	"castSw": "Удалить трансляцию на устройство",
+	"inkSw": "Откл Windows Ink",
+	"spellSw": "Откл Проверка орфографии",
+	"xboxSw": "Откл Xbox Live",
+	"gameBarSw": "Откл Game Bar",
+	"insiderSw": "Откл Insider Service",
+	"featuresSw": "Откл Обновления функций",
+	"actionSw": "Откл Центр уведомлений",
+	"disableOneDriveSw": "Откл OneDrive",
+	"refreshModernAppsButton": "обновить",
+	"uninstallModernAppsButton": "удалить",
+	"txtModernAppsTitle": "Удалить ненужные приложения UWP",
+	"chkSelectAllModernApps": "выделить всё",
+	"chkOnlyRemovable": "только возможные для удаления",
+	"txtUWP": "Если вы удалите Store\nты не сможешь\nустанавливать новые приложения!\n\nТакже некоторые приложения\nне могут быть удалены.\n\nКак и Microsoft Edge,\nНастройки и т.д.",
+	"startupTitle": "Выберите элементы автозагрузки",
+	"removeStartupItemB": "Удалить",
+	"locateFileB": "Найти файл",
+	"findInRegB": "Найти в реестре",
+	"refreshStartupB": "Обновить",
+	"restoreStartupB": "Восстановить",
+	"backupStartupB": "Резервная копия",
+	"lblBackupTitle": "Резервная копия заголовка:",
+	"doBackup": "Ок",
+	"cancelBackup": "Отмена",
+	"startupItemName": "Название",
+	"startupItemLocation": "Расположение",
+	"startupItemType": "Тип",
+	"txtFeedError": "нет подключения к Интернету, попробуйте обновить ссылки еще раз",
+	"appsTitle": "Быстрая загрузка и установка полезных приложений",
+	"btnGetFeed": "обновить ссылки",
+	"bitPref": "указать разрядность",
+	"linkWarnings": "см предупреждение",
+	"txtDownloadStatus": "Бездействует",
+	"goToDownloadsB": "перейти к загрузкам",
+	"btnDownloadApps": "загрузить",
+	"cAutoInstall": "установить после загрузки",
+	"changeDownDirB": "изменить",
+	"setDownDirLbl": "установить папку загрузки",
+	"c64": "64-бит",
+	"c32": "32-бит",
+	"checkSelectAll": "выбрать все",
+	"checkTemp": "временные файлы",
+	"checkLogs": "журналы Windows",
+	"checkMiniDumps": "мини-дампы BSOD",
+	"checkBin": "пустая корзина",
+	"checkMediaCache": "кеш медиаплееров",
+	"checkErrorReports": "отчеты об ошибках",
+	"cleanDriveB": "очистить",
+	"lblPretext": "размер, который нужно освободить:",
+	"cleanerTitle": "очистить системный диск",
+	"pingerTitle": "пинг IP адреса и оценка ваших задержек",
+	"lblPinger": "IP / доменное имя",
+	"copyIPB": "копировать",
+	"copyB": "копировать IP",
+	"btnShodan": "проверить на SHODAN.io",
+	"btnPing": "пинг",
+	"lblResults": "результаты",
+	"flushCacheB": "очистить кеш DNS",
+	"btnExport": "экспорт",
+	"hostsTitle": "редактировать файл hosts",
+	"linkLocate": "найти",
+	"linkAdvancedEdit": "редактор",
+	"linkRestoreDefault": "сброс настроек",
+	"lblIP": "IP адрес",
+	"lblDomain": "домен",
+	"chkBlock": "блокировать",
+	"addHostB": "добавить",
+	"lblLock": "Защитите свой файл HOSTS,\nзаблокировав его",
+	"chkReadOnly": "только для чтения",
+	"lblAdblock": "готовый adblock",
+	"lblAdblockSub": "(удалит вашу текущую конфигурацию)",
+	"adblockS": "AdBlock + Соцсети",
+	"adblockP": "AdBlock + Porn",
+	"removeHostB": "удалить",
+	"refreshHostsB": "обновить",
+	"removeAllHostsB": "удалить все",
+	"regFixB": "исправить",
+	"regLbl": "(некоторые изменения могут нуждаться в этом)",
+	"checkRestartExplorer": "также перезапустите проводник, чтобы применить изменения",
+	"checkRegistryEditor": "редактор реестра",
+	"checkFirewall": "брандмауэр Windows",
+	"checkContextMenu": "контекстное меню",
+	"checkRunDialog": "диалог выполнить",
+	"checkFolderOptions": "опции папки",
+	"checkControlPanel": "панель управления",
+	"checkCommandPrompt": "командная строка",
+	"checkTaskManager": "диспетчер задач",
+	"checkEnableAll": "включить все",
+	"registryTitle": "исправить общие проблемы с реестром",
+	"quickAccessToggle": "показать меню быстрого доступа",
+	"helpTipsToggle": "показать справочные сообщения",
+	"lblTheming": "выберите свою тему",
+	"radioOcean": "океан",
+	"radioMagma": "магма",
+	"radioZerg": "зерги",
+	"radioCaramel": "карамель",
+	"radioLime": "лайм",
+	"radioMinimal": "минимальный",
+	"lblUpdating": "проверить обновление",
+	"btnUpdate": "Проверить обновления",
+	"btnChangelog": "посмотреть изменения",
+	"lblUpdateDisabled": "Отключено в экспериментальных сборках",
+	"lblTroubleshoot": "Исправление проблем",
+	"btnViewLog": "посмотреть ошибки",
+	"btnOpenConf": "показать папку конфигурации",
+	"btnResetConfig": "сброс конфигурации",
+	"integrator1": "Интегратор может добавлять полностью настраиваемые\nэлементы в контекстное меню рабочего стола:",
+	"integrator2": "• Любая программа",
+	"integrator3": "• Ярлыки для папок",
+	"integrator4": "• ссылки на веб-страницы",
+	"integrator5": "• любой тип файла",
+	"integrator6": "• команды",
+	"integrator7": "Элементы могут иметь настраиваемые значки и положение.\nОни также могут быть скрыты, доступны только\nнажатием клавиши SHIFT.\n\nОн также может создавать собственные команды\nдля диалог выполнить, что упрощает запуск\nлюбое приложение, только набрав желаемое\nключевое слово.",
+	"integratorInfoTab": "Информация",
+	"tabPage8": "добавить/изменить",
+	"tabPage9": "удалить",
+	"tabPage10": "готовые меню",
+	"tabPage11": "диалог выполнить",
+	"addItemL": "добавить или изменить элемент",
+	"itemtype": "тип элемента",
+	"radioProgram": "программа",
+	"radioFolder": "папка",
+	"radioLink": "ссылка",
+	"radioFile": "файл",
+	"radioCommand": "команда",
+	"itemtoaddgroup": "программа для добавления",
+	"folderToAdd": "папка для добавления",
+	"linkToAdd": "ссылка для добавления",
+	"fileToAdd": "файл для добавления",
+	"commandToAdd": "команда для добавления",
+	"icontoaddgroup": "значок для добавления",
+	"checkDefaultIcon": "использовать значок программы",
+	"itemposition": "позиция элемента",
+	"radioTop": "верх",
+	"radioMiddle": "середина",
+	"radioBottom": "низ",
+	"security": "безопасность",
+	"checkShift": "показывать только при нажатии клавиши SHIFT",
+	"itemnamegroup": "название пункта в меню",
+	"btnAddItem": "добавить/изменить",
+	"removeIntegratorItemsL": "Удалить существующие элементы рабочего стола",
+	"removeDIB": "стать владельцем",
+	"refreshIIB": "обновить",
+	"removeAllIIB": "удалить все",
+	"PMB": "добавить меню питания",
+	"STB": "добавить системные инструменты",
+	"WAB": "добавить приложения для Windows",
+	"SSB": "добавить системные ярлыки",
+	"DSB": "добавить ярлыки на рабочем столе",
+	"AddOwnerB": "добавить стать владельцем",
+	"RemoveOwnerB": "удалить стать владельцем",
+	"readyMenusL": "Добавить готовое меню",
+	"refreshCCB": "обновить",
+	"removeCCB": "Удалить",
+	"removeCCL": "Удалить существующие команды",
+	"btnCreateCustomCommand": "создать",
+	"ccKeywordL": "ключевое слово",
+	"ccFileL": "расположение файла",
+	"ccL": "Определите свои собственные команды",
+	"btnYes": "Да",
+	"btnNo": "Нет",
+	"btnOk": "Ок",
+	"HostsEditorForm": "Hosts редактор",
+	"savebtn": "сохранить",
+	"closebtn": "закрыть",
+	"adminMissingMsg": "Optimizer должен быть запущен от имени администратора!\nПриложение будет закрыто.",
+	"unsupportedMsg": "Optimizer работает в Windows 7 и выше!\nПриложение будет закрыто.",
+	"confInvalidVersionMsg": "Версия Windows не совпадает!",
+	"confInvalidFormatMsg": "Файл конфигурации имеет недопустимый формат!",
+	"confNotFoundMsg": "Файл конфигурации не существует!",
+	"argInvalidMsg": "Недопустимый аргумент! Пример: Optimizer.exe /silent.conf",
+	"StartupPreviewForm": "предварительный просмотр элементов автозагрузки",
+	"StartupRestoreForm": "Восстановить элементы автозагрузки",
+	"backupL": "Восстановить ваши элементы автозагрузки",
+	"txtNoBackups": "резервных копий не найдено",
+	"previewBackupB": "предварительный просмотр",
+	"restoreBackupB": "восстановить",
+	"deleteBackupB": "удалить",
+	"noNewVersion": "У вас уже установлена последняя версия!",
+	"betaVersion": "Вы используете экспериментальную версию!",
+	"removeAllStartup": "Вы действительно хотите удалить все элементы автозагрузки?",
+	"removeAllHosts": "Вы уверены, что хотите удалить все записи о хостах?",
+	"removeAllItems": "Вы уверены, что хотите удалить все элементы рабочего стола?",
+	"removeModernApps": "Вы уверены, что хотите удалить следующие приложения?",
+	"errorModernApps": "Следующие приложения не могут быть удалены:\n",
+	"resetMessage": "Это сбросит все ваши настройки, включая любые значки,\nкоторые вы извлекли или загрузили с помощью интегратора,\nно ничего не затронет на вашем компьютере!",
+	"newVersion": "Доступна новая версия!\n\nПоследняя версия: {LATEST}\nТекущая версия: {CURRENT}\n\nВы хотите скачать сейчас?\n\nПриложение перезапустится через несколько секунд.",
+	"downloadsFinished": "завершено",
+	"downloadDirInvalid": "Указанная папка загрузки недоступна",
+	"no64Download": "Нет 64-разрядной версии, скачивается 32-разрядная версия",
+	"no32Download": "Нет 32-битной версии, пропускаем",
+	"installing": "Установка",
+	"linkInvalid": "Ссылка больше не действительна",
+	"noErrorsM": "Нет ошибок!",
+	"hostNotFound": "Не удалось найти хост",
+	"pinging": "Пинг 32 байт - 9 раз...",
+	"latency": "задержка",
+	"min": "мин",
+	"max": "макс",
+	"avg": "среднее",
+	"timeout": "время ожидания всех пакетов истекло",
+	"languagesL": "выберите язык"
+}

+ 22 - 0
Optimizer/StartupPreviewForm.cs

@@ -22,6 +22,9 @@ namespace Optimizer
             CheckForIllegalCrossThreadCalls = false;
             Options.ApplyTheme(this);
 
+            // translate UI elements
+            if (Options.CurrentOptions.LanguageCode != LanguageCode.EN) Translate();
+
             foreach (StartupBackupItem x in items)
             {
                 if (File.Exists(SanitizePath(x.FileLocation)))
@@ -37,6 +40,25 @@ namespace Optimizer
             }    
         }
 
+        private void Translate()
+        {
+            this.Text = Options.TranslationList["StartupPreviewForm"];
+
+            Dictionary<string, string> translationList = Options.TranslationList.ToObject<Dictionary<string, string>>();
+
+            Control element;
+
+            foreach (var x in translationList)
+            {
+                if (x.Key == null || x.Key == string.Empty) continue;
+                element = this.Controls.Find(x.Key, true).FirstOrDefault();
+
+                if (element == null) continue;
+
+                element.Text = x.Value;
+            }
+        }
+
         private void StartupPreviewForm_Load(object sender, EventArgs e)
         {
             this.Focus();

+ 79 - 79
Optimizer/StartupRestoreForm.Designer.cs

@@ -28,28 +28,28 @@
         /// </summary>
         private void InitializeComponent()
         {
-            this.label5 = new System.Windows.Forms.Label();
+            this.backupL = new System.Windows.Forms.Label();
             this.listRestoreItems = new System.Windows.Forms.ListBox();
             this.panel1 = new System.Windows.Forms.Panel();
-            this.button39 = new System.Windows.Forms.Button();
-            this.button1 = new System.Windows.Forms.Button();
-            this.button2 = new System.Windows.Forms.Button();
             this.txtNoBackups = new System.Windows.Forms.Label();
+            this.previewBackupB = new System.Windows.Forms.Button();
+            this.restoreBackupB = new System.Windows.Forms.Button();
+            this.deleteBackupB = new System.Windows.Forms.Button();
             this.panel1.SuspendLayout();
             this.SuspendLayout();
             // 
-            // label5
+            // backupL
             // 
-            this.label5.AutoSize = true;
-            this.label5.Font = new System.Drawing.Font("Segoe UI Semibold", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
-            this.label5.ForeColor = System.Drawing.Color.DodgerBlue;
-            this.label5.Location = new System.Drawing.Point(7, 9);
-            this.label5.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
-            this.label5.Name = "label5";
-            this.label5.Size = new System.Drawing.Size(254, 28);
-            this.label5.TabIndex = 4;
-            this.label5.Tag = "themeable";
-            this.label5.Text = "Restore your startup items";
+            this.backupL.AutoSize = true;
+            this.backupL.Font = new System.Drawing.Font("Segoe UI Semibold", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+            this.backupL.ForeColor = System.Drawing.Color.DodgerBlue;
+            this.backupL.Location = new System.Drawing.Point(7, 9);
+            this.backupL.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0);
+            this.backupL.Name = "backupL";
+            this.backupL.Size = new System.Drawing.Size(254, 28);
+            this.backupL.TabIndex = 4;
+            this.backupL.Tag = "themeable";
+            this.backupL.Text = "Restore your startup items";
             // 
             // listRestoreItems
             // 
@@ -62,7 +62,7 @@
             this.listRestoreItems.ItemHeight = 21;
             this.listRestoreItems.Location = new System.Drawing.Point(0, 0);
             this.listRestoreItems.Name = "listRestoreItems";
-            this.listRestoreItems.Size = new System.Drawing.Size(404, 383);
+            this.listRestoreItems.Size = new System.Drawing.Size(364, 383);
             this.listRestoreItems.TabIndex = 5;
             this.listRestoreItems.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.listRestoreItems_MouseDoubleClick);
             // 
@@ -75,61 +75,9 @@
             this.panel1.Controls.Add(this.listRestoreItems);
             this.panel1.Location = new System.Drawing.Point(12, 50);
             this.panel1.Name = "panel1";
-            this.panel1.Size = new System.Drawing.Size(406, 385);
+            this.panel1.Size = new System.Drawing.Size(366, 385);
             this.panel1.TabIndex = 6;
             // 
-            // button39
-            // 
-            this.button39.BackColor = System.Drawing.Color.DodgerBlue;
-            this.button39.FlatAppearance.BorderColor = System.Drawing.Color.DodgerBlue;
-            this.button39.FlatAppearance.MouseDownBackColor = System.Drawing.Color.RoyalBlue;
-            this.button39.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
-            this.button39.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
-            this.button39.ForeColor = System.Drawing.Color.White;
-            this.button39.Location = new System.Drawing.Point(423, 50);
-            this.button39.Margin = new System.Windows.Forms.Padding(2);
-            this.button39.Name = "button39";
-            this.button39.Size = new System.Drawing.Size(102, 31);
-            this.button39.TabIndex = 31;
-            this.button39.Text = "Preview";
-            this.button39.UseVisualStyleBackColor = false;
-            this.button39.Click += new System.EventHandler(this.button39_Click);
-            // 
-            // button1
-            // 
-            this.button1.BackColor = System.Drawing.Color.DodgerBlue;
-            this.button1.FlatAppearance.BorderColor = System.Drawing.Color.DodgerBlue;
-            this.button1.FlatAppearance.MouseDownBackColor = System.Drawing.Color.RoyalBlue;
-            this.button1.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
-            this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
-            this.button1.ForeColor = System.Drawing.Color.White;
-            this.button1.Location = new System.Drawing.Point(423, 85);
-            this.button1.Margin = new System.Windows.Forms.Padding(2);
-            this.button1.Name = "button1";
-            this.button1.Size = new System.Drawing.Size(102, 31);
-            this.button1.TabIndex = 32;
-            this.button1.Text = "Restore";
-            this.button1.UseVisualStyleBackColor = false;
-            this.button1.Click += new System.EventHandler(this.button1_Click);
-            // 
-            // button2
-            // 
-            this.button2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-            this.button2.BackColor = System.Drawing.Color.DodgerBlue;
-            this.button2.FlatAppearance.BorderColor = System.Drawing.Color.DodgerBlue;
-            this.button2.FlatAppearance.MouseDownBackColor = System.Drawing.Color.RoyalBlue;
-            this.button2.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
-            this.button2.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
-            this.button2.ForeColor = System.Drawing.Color.White;
-            this.button2.Location = new System.Drawing.Point(423, 404);
-            this.button2.Margin = new System.Windows.Forms.Padding(2);
-            this.button2.Name = "button2";
-            this.button2.Size = new System.Drawing.Size(102, 31);
-            this.button2.TabIndex = 33;
-            this.button2.Text = "Delete";
-            this.button2.UseVisualStyleBackColor = false;
-            this.button2.Click += new System.EventHandler(this.button2_Click);
-            // 
             // txtNoBackups
             // 
             this.txtNoBackups.BackColor = System.Drawing.Color.Transparent;
@@ -138,23 +86,75 @@
             this.txtNoBackups.ForeColor = System.Drawing.Color.Gold;
             this.txtNoBackups.Location = new System.Drawing.Point(0, 0);
             this.txtNoBackups.Name = "txtNoBackups";
-            this.txtNoBackups.Size = new System.Drawing.Size(404, 383);
+            this.txtNoBackups.Size = new System.Drawing.Size(364, 383);
             this.txtNoBackups.TabIndex = 168;
             this.txtNoBackups.Text = "No backups found";
             this.txtNoBackups.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
             this.txtNoBackups.Visible = false;
             // 
+            // previewBackupB
+            // 
+            this.previewBackupB.BackColor = System.Drawing.Color.DodgerBlue;
+            this.previewBackupB.FlatAppearance.BorderColor = System.Drawing.Color.DodgerBlue;
+            this.previewBackupB.FlatAppearance.MouseDownBackColor = System.Drawing.Color.RoyalBlue;
+            this.previewBackupB.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
+            this.previewBackupB.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.previewBackupB.ForeColor = System.Drawing.Color.White;
+            this.previewBackupB.Location = new System.Drawing.Point(383, 50);
+            this.previewBackupB.Margin = new System.Windows.Forms.Padding(2);
+            this.previewBackupB.Name = "previewBackupB";
+            this.previewBackupB.Size = new System.Drawing.Size(209, 31);
+            this.previewBackupB.TabIndex = 31;
+            this.previewBackupB.Text = "Preview";
+            this.previewBackupB.UseVisualStyleBackColor = false;
+            this.previewBackupB.Click += new System.EventHandler(this.button39_Click);
+            // 
+            // restoreBackupB
+            // 
+            this.restoreBackupB.BackColor = System.Drawing.Color.DodgerBlue;
+            this.restoreBackupB.FlatAppearance.BorderColor = System.Drawing.Color.DodgerBlue;
+            this.restoreBackupB.FlatAppearance.MouseDownBackColor = System.Drawing.Color.RoyalBlue;
+            this.restoreBackupB.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
+            this.restoreBackupB.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.restoreBackupB.ForeColor = System.Drawing.Color.White;
+            this.restoreBackupB.Location = new System.Drawing.Point(383, 85);
+            this.restoreBackupB.Margin = new System.Windows.Forms.Padding(2);
+            this.restoreBackupB.Name = "restoreBackupB";
+            this.restoreBackupB.Size = new System.Drawing.Size(209, 31);
+            this.restoreBackupB.TabIndex = 32;
+            this.restoreBackupB.Text = "Restore";
+            this.restoreBackupB.UseVisualStyleBackColor = false;
+            this.restoreBackupB.Click += new System.EventHandler(this.button1_Click);
+            // 
+            // deleteBackupB
+            // 
+            this.deleteBackupB.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.deleteBackupB.BackColor = System.Drawing.Color.DodgerBlue;
+            this.deleteBackupB.FlatAppearance.BorderColor = System.Drawing.Color.DodgerBlue;
+            this.deleteBackupB.FlatAppearance.MouseDownBackColor = System.Drawing.Color.RoyalBlue;
+            this.deleteBackupB.FlatAppearance.MouseOverBackColor = System.Drawing.Color.RoyalBlue;
+            this.deleteBackupB.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+            this.deleteBackupB.ForeColor = System.Drawing.Color.White;
+            this.deleteBackupB.Location = new System.Drawing.Point(383, 404);
+            this.deleteBackupB.Margin = new System.Windows.Forms.Padding(2);
+            this.deleteBackupB.Name = "deleteBackupB";
+            this.deleteBackupB.Size = new System.Drawing.Size(209, 31);
+            this.deleteBackupB.TabIndex = 33;
+            this.deleteBackupB.Text = "Delete";
+            this.deleteBackupB.UseVisualStyleBackColor = false;
+            this.deleteBackupB.Click += new System.EventHandler(this.button2_Click);
+            // 
             // StartupRestoreForm
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
             this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
             this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(20)))), ((int)(((byte)(20)))), ((int)(((byte)(20)))));
-            this.ClientSize = new System.Drawing.Size(536, 447);
-            this.Controls.Add(this.button2);
-            this.Controls.Add(this.button1);
-            this.Controls.Add(this.button39);
+            this.ClientSize = new System.Drawing.Size(603, 447);
+            this.Controls.Add(this.deleteBackupB);
+            this.Controls.Add(this.restoreBackupB);
+            this.Controls.Add(this.previewBackupB);
             this.Controls.Add(this.panel1);
-            this.Controls.Add(this.label5);
+            this.Controls.Add(this.backupL);
             this.DoubleBuffered = true;
             this.Font = new System.Drawing.Font("Segoe UI Semibold", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
             this.ForeColor = System.Drawing.Color.White;
@@ -176,12 +176,12 @@
 
         #endregion
 
-        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.Label backupL;
         private System.Windows.Forms.ListBox listRestoreItems;
         private System.Windows.Forms.Panel panel1;
-        private System.Windows.Forms.Button button39;
-        private System.Windows.Forms.Button button1;
-        private System.Windows.Forms.Button button2;
+        private System.Windows.Forms.Button previewBackupB;
+        private System.Windows.Forms.Button restoreBackupB;
+        private System.Windows.Forms.Button deleteBackupB;
         private System.Windows.Forms.Label txtNoBackups;
     }
 }

+ 22 - 0
Optimizer/StartupRestoreForm.cs

@@ -24,6 +24,9 @@ namespace Optimizer
             CheckForIllegalCrossThreadCalls = false;
             Options.ApplyTheme(this);
 
+            // translate UI elements
+            if (Options.CurrentOptions.LanguageCode != LanguageCode.EN) Translate();
+
             RefreshBackups();
         }
 
@@ -41,6 +44,25 @@ namespace Optimizer
             }
         }
 
+        private void Translate()
+        {
+            this.Text = Options.TranslationList["StartupRestoreForm"];
+
+            Dictionary<string, string> translationList = Options.TranslationList.ToObject<Dictionary<string, string>>();
+
+            Control element;
+
+            foreach (var x in translationList)
+            {
+                if (x.Key == null || x.Key == string.Empty) continue;
+                element = this.Controls.Find(x.Key, true).FirstOrDefault();
+
+                if (element == null) continue;
+
+                element.Text = x.Value;
+            }
+        }
+
         private void StartupRestoreForm_Load(object sender, EventArgs e)
         {
             

+ 26 - 23
Optimizer/Utilities.cs

@@ -27,7 +27,8 @@ namespace Optimizer
         internal static readonly string LocalMachineStartupFolder = CleanHelper.ProgramData + "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";
         internal static readonly string CurrentUserStartupFolder = CleanHelper.ProfileAppDataRoaming + "\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";
 
-        internal readonly static string DefaultEdgeDownloadFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads");
+        // DEPRECATED
+        //internal readonly static string DefaultEdgeDownloadFolder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), "Downloads");
 
         internal static WindowsVersion CurrentWindowsVersion = WindowsVersion.Unsupported;
 
@@ -141,28 +142,30 @@ namespace Optimizer
             }
             return legit;
         }
-
-        internal static string GetEdgeDownloadFolder()
-        {
-            string current = string.Empty;
-
-            try
-            {
-                current = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge", "DownloadDirectory", DefaultEdgeDownloadFolder).ToString();
-            }
-            catch (Exception ex)
-            {
-                current = DefaultEdgeDownloadFolder;
-                ErrorLogger.LogError("Utilities.GetEdgeDownloadFolder", ex.Message, ex.StackTrace);
-            }
-
-            return current;
-        }
-
-        internal static void SetEdgeDownloadFolder(string path)
-        {
-            Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge", "DownloadDirectory", path, RegistryValueKind.String);
-        }
+        // DEPRECATED
+
+        //internal static string GetEdgeDownloadFolder()
+        //{
+        //    string current = string.Empty;
+
+        //    try
+        //    {
+        //        current = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge", "DownloadDirectory", DefaultEdgeDownloadFolder).ToString();
+        //    }
+        //    catch (Exception ex)
+        //    {
+        //        current = DefaultEdgeDownloadFolder;
+        //        ErrorLogger.LogError("Utilities.GetEdgeDownloadFolder", ex.Message, ex.StackTrace);
+        //    }
+
+        //    return current;
+        //}
+
+        // DEPRECATED
+        //internal static void SetEdgeDownloadFolder(string path)
+        //{
+        //    Registry.SetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Edge", "DownloadDirectory", path, RegistryValueKind.String);
+        //}
 
         internal static void RunBatchFile(string batchFile)
         {

BIN
lab/Optimizer-RU-Test.exe


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor