summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/Langpack Suite/Form1.Designer.cs580
-rw-r--r--tools/Langpack Suite/Form1.cs943
-rw-r--r--tools/Langpack Suite/Form1.resx520
-rw-r--r--tools/Langpack Suite/LangpackSuite.csproj151
-rw-r--r--tools/Langpack Suite/LangpackSuite.sln20
-rw-r--r--tools/Langpack Suite/Program.cs21
-rw-r--r--tools/Langpack Suite/Properties/AssemblyInfo.cs36
-rw-r--r--tools/Langpack Suite/Properties/Resources.Designer.cs63
-rw-r--r--tools/Langpack Suite/Properties/Resources.resx117
-rw-r--r--tools/Langpack Suite/Properties/Settings.Designer.cs26
-rw-r--r--tools/Langpack Suite/Properties/Settings.settings7
-rw-r--r--tools/Langpack Suite/Searcher.cs280
-rw-r--r--tools/Langpack Suite/app.config3
-rw-r--r--tools/Langpack Suite/myRes.resx324
-rw-r--r--tools/Langpack Suite/myRes.ru-RU.resx326
-rw-r--r--tools/Langpack Suite/res/miranda_logo.icobin0 -> 22486 bytes
16 files changed, 3417 insertions, 0 deletions
diff --git a/tools/Langpack Suite/Form1.Designer.cs b/tools/Langpack Suite/Form1.Designer.cs
new file mode 100644
index 0000000000..0bde227757
--- /dev/null
+++ b/tools/Langpack Suite/Form1.Designer.cs
@@ -0,0 +1,580 @@
+namespace Langpack_Suite
+{
+ partial class MainForm
+ {
+ /// <summary>
+ /// Требуется переменная конструктора.
+ /// </summary>
+ private System.ComponentModel.IContainer components = null;
+
+ /// <summary>
+ /// Освободить все используемые ресурсы.
+ /// </summary>
+ /// <param name="disposing">истинно, если управляемый ресурс должен быть удален; иначе ложно.</param>
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Код, автоматически созданный конструктором форм Windows
+
+ /// <summary>
+ /// Обязательный метод для поддержки конструктора - не изменяйте
+ /// содержимое данного метода при помощи редактора кода.
+ /// </summary>
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+ this.CreateLangpackBtn = new System.Windows.Forms.Button();
+ this.groupBox2 = new System.Windows.Forms.GroupBox();
+ this.LangpackNameEdit = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.InfMessageLangBox = new System.Windows.Forms.TextBox();
+ this.CommentMUIDCheckBox = new System.Windows.Forms.CheckBox();
+ this.groupBox4 = new System.Windows.Forms.GroupBox();
+ this.ANSICheckBox = new System.Windows.Forms.CheckBox();
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.tabPage1 = new System.Windows.Forms.TabPage();
+ this.groupBox3 = new System.Windows.Forms.GroupBox();
+ this.OwnFileCheckBox = new System.Windows.Forms.CheckBox();
+ this.SelectOwnFileBtn = new System.Windows.Forms.Button();
+ this.OwnFileEdit = new System.Windows.Forms.TextBox();
+ this.groupBox6 = new System.Windows.Forms.GroupBox();
+ this.label6 = new System.Windows.Forms.Label();
+ this.VIURLTextBox = new System.Windows.Forms.TextBox();
+ this.GetVICheckBox = new System.Windows.Forms.CheckBox();
+ this.tabPage2 = new System.Windows.Forms.TabPage();
+ this.label4 = new System.Windows.Forms.Label();
+ this.SVNURLEditBox = new System.Windows.Forms.TextBox();
+ this.InfMessageLinkBox = new System.Windows.Forms.TextBox();
+ this.LinkListGenBtn = new System.Windows.Forms.Button();
+ this.label3 = new System.Windows.Forms.Label();
+ this.tabPage3 = new System.Windows.Forms.TabPage();
+ this.InfMessageFindBox = new System.Windows.Forms.TextBox();
+ this.CommentFindBtn = new System.Windows.Forms.Button();
+ this.NotTranslFindBtn = new System.Windows.Forms.Button();
+ this.DupesFindBtn = new System.Windows.Forms.Button();
+ this.groupBox5 = new System.Windows.Forms.GroupBox();
+ this.AutoModeBtn = new System.Windows.Forms.RadioButton();
+ this.ManualModeBtn = new System.Windows.Forms.RadioButton();
+ this.groupBox1 = new System.Windows.Forms.GroupBox();
+ this.LangPathLbl = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.AssignLangBtn = new System.Windows.Forms.Button();
+ this.label5 = new System.Windows.Forms.Label();
+ this.LanguageComboBox = new System.Windows.Forms.ComboBox();
+ this.VarButton = new System.Windows.Forms.Button();
+ this.groupBox2.SuspendLayout();
+ this.groupBox4.SuspendLayout();
+ this.tabControl1.SuspendLayout();
+ this.tabPage1.SuspendLayout();
+ this.groupBox3.SuspendLayout();
+ this.groupBox6.SuspendLayout();
+ this.tabPage2.SuspendLayout();
+ this.tabPage3.SuspendLayout();
+ this.groupBox5.SuspendLayout();
+ this.groupBox1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // CreateLangpackBtn
+ //
+ this.CreateLangpackBtn.Location = new System.Drawing.Point(99, 258);
+ this.CreateLangpackBtn.Name = "CreateLangpackBtn";
+ this.CreateLangpackBtn.Size = new System.Drawing.Size(141, 31);
+ this.CreateLangpackBtn.TabIndex = 1;
+ this.CreateLangpackBtn.Text = "Create Langpack";
+ this.CreateLangpackBtn.UseVisualStyleBackColor = true;
+ this.CreateLangpackBtn.Click += new System.EventHandler(this.CreateLangpackBtn_Click);
+ //
+ // groupBox2
+ //
+ this.groupBox2.Controls.Add(this.LangpackNameEdit);
+ this.groupBox2.Controls.Add(this.label1);
+ this.groupBox2.Location = new System.Drawing.Point(6, 3);
+ this.groupBox2.Name = "groupBox2";
+ this.groupBox2.Size = new System.Drawing.Size(317, 58);
+ this.groupBox2.TabIndex = 2;
+ this.groupBox2.TabStop = false;
+ this.groupBox2.Text = "Output File";
+ //
+ // LangpackNameEdit
+ //
+ this.LangpackNameEdit.Location = new System.Drawing.Point(129, 22);
+ this.LangpackNameEdit.Name = "LangpackNameEdit";
+ this.LangpackNameEdit.Size = new System.Drawing.Size(151, 20);
+ this.LangpackNameEdit.TabIndex = 1;
+ this.LangpackNameEdit.Text = "Langpack_russian";
+ //
+ // label1
+ //
+ this.label1.Location = new System.Drawing.Point(6, 25);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(125, 13);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "Langpack File Name:";
+ this.label1.TextAlign = System.Drawing.ContentAlignment.TopRight;
+ //
+ // InfMessageLangBox
+ //
+ this.InfMessageLangBox.BackColor = System.Drawing.SystemColors.Control;
+ this.InfMessageLangBox.Location = new System.Drawing.Point(7, 295);
+ this.InfMessageLangBox.Multiline = true;
+ this.InfMessageLangBox.Name = "InfMessageLangBox";
+ this.InfMessageLangBox.ReadOnly = true;
+ this.InfMessageLangBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.InfMessageLangBox.Size = new System.Drawing.Size(317, 70);
+ this.InfMessageLangBox.TabIndex = 3;
+ //
+ // CommentMUIDCheckBox
+ //
+ this.CommentMUIDCheckBox.AutoSize = true;
+ this.CommentMUIDCheckBox.Location = new System.Drawing.Point(9, 20);
+ this.CommentMUIDCheckBox.Name = "CommentMUIDCheckBox";
+ this.CommentMUIDCheckBox.Size = new System.Drawing.Size(186, 17);
+ this.CommentMUIDCheckBox.TabIndex = 6;
+ this.CommentMUIDCheckBox.Text = "Comment MUID for Core less 0.10";
+ this.CommentMUIDCheckBox.UseVisualStyleBackColor = true;
+ //
+ // groupBox4
+ //
+ this.groupBox4.Controls.Add(this.ANSICheckBox);
+ this.groupBox4.Controls.Add(this.CommentMUIDCheckBox);
+ this.groupBox4.Location = new System.Drawing.Point(6, 184);
+ this.groupBox4.Name = "groupBox4";
+ this.groupBox4.Size = new System.Drawing.Size(317, 70);
+ this.groupBox4.TabIndex = 7;
+ this.groupBox4.TabStop = false;
+ this.groupBox4.Text = "Old Core Support";
+ //
+ // ANSICheckBox
+ //
+ this.ANSICheckBox.AutoSize = true;
+ this.ANSICheckBox.Location = new System.Drawing.Point(9, 43);
+ this.ANSICheckBox.Name = "ANSICheckBox";
+ this.ANSICheckBox.Size = new System.Drawing.Size(180, 17);
+ this.ANSICheckBox.TabIndex = 7;
+ this.ANSICheckBox.Text = "ANSI Format for Core less 0.9.30";
+ this.ANSICheckBox.UseVisualStyleBackColor = true;
+ //
+ // tabControl1
+ //
+ this.tabControl1.Controls.Add(this.tabPage1);
+ this.tabControl1.Controls.Add(this.tabPage2);
+ this.tabControl1.Controls.Add(this.tabPage3);
+ this.tabControl1.Location = new System.Drawing.Point(-3, 0);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(337, 393);
+ this.tabControl1.TabIndex = 8;
+ //
+ // tabPage1
+ //
+ this.tabPage1.BackColor = System.Drawing.SystemColors.Control;
+ this.tabPage1.Controls.Add(this.InfMessageLangBox);
+ this.tabPage1.Controls.Add(this.groupBox2);
+ this.tabPage1.Controls.Add(this.CreateLangpackBtn);
+ this.tabPage1.Controls.Add(this.groupBox4);
+ this.tabPage1.Controls.Add(this.groupBox3);
+ this.tabPage1.Controls.Add(this.groupBox6);
+ this.tabPage1.Location = new System.Drawing.Point(4, 22);
+ this.tabPage1.Name = "tabPage1";
+ this.tabPage1.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage1.Size = new System.Drawing.Size(329, 367);
+ this.tabPage1.TabIndex = 0;
+ this.tabPage1.Text = "Generator";
+ //
+ // groupBox3
+ //
+ this.groupBox3.Controls.Add(this.OwnFileCheckBox);
+ this.groupBox3.Controls.Add(this.SelectOwnFileBtn);
+ this.groupBox3.Controls.Add(this.OwnFileEdit);
+ this.groupBox3.Location = new System.Drawing.Point(6, 130);
+ this.groupBox3.Name = "groupBox3";
+ this.groupBox3.Size = new System.Drawing.Size(317, 53);
+ this.groupBox3.TabIndex = 5;
+ this.groupBox3.TabStop = false;
+ //
+ // OwnFileCheckBox
+ //
+ this.OwnFileCheckBox.AutoSize = true;
+ this.OwnFileCheckBox.Location = new System.Drawing.Point(6, -1);
+ this.OwnFileCheckBox.Name = "OwnFileCheckBox";
+ this.OwnFileCheckBox.Size = new System.Drawing.Size(170, 17);
+ this.OwnFileCheckBox.TabIndex = 4;
+ this.OwnFileCheckBox.Text = "Add your own file to Langpack";
+ this.OwnFileCheckBox.UseVisualStyleBackColor = true;
+ this.OwnFileCheckBox.CheckedChanged += new System.EventHandler(this.OwnFilesCheckBox_CheckedChanged);
+ //
+ // SelectOwnFileBtn
+ //
+ this.SelectOwnFileBtn.Enabled = false;
+ this.SelectOwnFileBtn.Location = new System.Drawing.Point(222, 19);
+ this.SelectOwnFileBtn.Name = "SelectOwnFileBtn";
+ this.SelectOwnFileBtn.Size = new System.Drawing.Size(75, 23);
+ this.SelectOwnFileBtn.TabIndex = 1;
+ this.SelectOwnFileBtn.Text = "Select";
+ this.SelectOwnFileBtn.UseVisualStyleBackColor = true;
+ this.SelectOwnFileBtn.Click += new System.EventHandler(this.SelectOwnFilesBtn_Click);
+ //
+ // OwnFileEdit
+ //
+ this.OwnFileEdit.Enabled = false;
+ this.OwnFileEdit.Location = new System.Drawing.Point(22, 21);
+ this.OwnFileEdit.Name = "OwnFileEdit";
+ this.OwnFileEdit.Size = new System.Drawing.Size(186, 20);
+ this.OwnFileEdit.TabIndex = 0;
+ //
+ // groupBox6
+ //
+ this.groupBox6.Controls.Add(this.label6);
+ this.groupBox6.Controls.Add(this.VIURLTextBox);
+ this.groupBox6.Controls.Add(this.GetVICheckBox);
+ this.groupBox6.Location = new System.Drawing.Point(6, 61);
+ this.groupBox6.Name = "groupBox6";
+ this.groupBox6.Size = new System.Drawing.Size(317, 67);
+ this.groupBox6.TabIndex = 8;
+ this.groupBox6.TabStop = false;
+ //
+ // label6
+ //
+ this.label6.AutoSize = true;
+ this.label6.Enabled = false;
+ this.label6.Location = new System.Drawing.Point(23, 46);
+ this.label6.Name = "label6";
+ this.label6.Size = new System.Drawing.Size(223, 13);
+ this.label6.TabIndex = 2;
+ this.label6.Text = "e.g. http://www.miranda-vi.org/report/mataes";
+ //
+ // VIURLTextBox
+ //
+ this.VIURLTextBox.Enabled = false;
+ this.VIURLTextBox.Location = new System.Drawing.Point(22, 23);
+ this.VIURLTextBox.Name = "VIURLTextBox";
+ this.VIURLTextBox.Size = new System.Drawing.Size(275, 20);
+ this.VIURLTextBox.TabIndex = 1;
+ //
+ // GetVICheckBox
+ //
+ this.GetVICheckBox.AutoSize = true;
+ this.GetVICheckBox.Location = new System.Drawing.Point(6, 0);
+ this.GetVICheckBox.Name = "GetVICheckBox";
+ this.GetVICheckBox.Size = new System.Drawing.Size(261, 17);
+ this.GetVICheckBox.TabIndex = 0;
+ this.GetVICheckBox.Text = "Get VersionInfo from Internet or type full local path";
+ this.GetVICheckBox.UseVisualStyleBackColor = true;
+ this.GetVICheckBox.CheckedChanged += new System.EventHandler(this.GetVICheckBox_CheckedChanged);
+ //
+ // tabPage2
+ //
+ this.tabPage2.BackColor = System.Drawing.SystemColors.Control;
+ this.tabPage2.Controls.Add(this.label4);
+ this.tabPage2.Controls.Add(this.SVNURLEditBox);
+ this.tabPage2.Controls.Add(this.InfMessageLinkBox);
+ this.tabPage2.Controls.Add(this.LinkListGenBtn);
+ this.tabPage2.Controls.Add(this.label3);
+ this.tabPage2.Location = new System.Drawing.Point(4, 22);
+ this.tabPage2.Name = "tabPage2";
+ this.tabPage2.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage2.Size = new System.Drawing.Size(329, 367);
+ this.tabPage2.TabIndex = 1;
+ this.tabPage2.Text = "LinkListGen";
+ //
+ // label4
+ //
+ this.label4.AutoSize = true;
+ this.label4.Location = new System.Drawing.Point(11, 121);
+ this.label4.Name = "label4";
+ this.label4.Size = new System.Drawing.Size(69, 13);
+ this.label4.TabIndex = 6;
+ this.label4.Text = "URL of SVN:";
+ //
+ // SVNURLEditBox
+ //
+ this.SVNURLEditBox.Location = new System.Drawing.Point(11, 137);
+ this.SVNURLEditBox.Name = "SVNURLEditBox";
+ this.SVNURLEditBox.Size = new System.Drawing.Size(315, 20);
+ this.SVNURLEditBox.TabIndex = 5;
+ this.SVNURLEditBox.Text = "http://mir-rl.googlecode.com/svn/trunk";
+ //
+ // InfMessageLinkBox
+ //
+ this.InfMessageLinkBox.BackColor = System.Drawing.SystemColors.Control;
+ this.InfMessageLinkBox.Location = new System.Drawing.Point(7, 232);
+ this.InfMessageLinkBox.Multiline = true;
+ this.InfMessageLinkBox.Name = "InfMessageLinkBox";
+ this.InfMessageLinkBox.ReadOnly = true;
+ this.InfMessageLinkBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.InfMessageLinkBox.Size = new System.Drawing.Size(317, 132);
+ this.InfMessageLinkBox.TabIndex = 4;
+ //
+ // LinkListGenBtn
+ //
+ this.LinkListGenBtn.Location = new System.Drawing.Point(111, 178);
+ this.LinkListGenBtn.Name = "LinkListGenBtn";
+ this.LinkListGenBtn.Size = new System.Drawing.Size(102, 41);
+ this.LinkListGenBtn.TabIndex = 1;
+ this.LinkListGenBtn.Text = "Create File";
+ this.LinkListGenBtn.UseVisualStyleBackColor = true;
+ this.LinkListGenBtn.Click += new System.EventHandler(this.LinkListGenBtn_Click);
+ //
+ // label3
+ //
+ this.label3.AutoSize = true;
+ this.label3.Location = new System.Drawing.Point(6, 26);
+ this.label3.Name = "label3";
+ this.label3.Size = new System.Drawing.Size(316, 65);
+ this.label3.TabIndex = 0;
+ this.label3.Text = resources.GetString("label3.Text");
+ //
+ // tabPage3
+ //
+ this.tabPage3.BackColor = System.Drawing.SystemColors.Control;
+ this.tabPage3.Controls.Add(this.InfMessageFindBox);
+ this.tabPage3.Controls.Add(this.CommentFindBtn);
+ this.tabPage3.Controls.Add(this.NotTranslFindBtn);
+ this.tabPage3.Controls.Add(this.DupesFindBtn);
+ this.tabPage3.Controls.Add(this.groupBox5);
+ this.tabPage3.Controls.Add(this.groupBox1);
+ this.tabPage3.Location = new System.Drawing.Point(4, 22);
+ this.tabPage3.Name = "tabPage3";
+ this.tabPage3.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage3.Size = new System.Drawing.Size(329, 367);
+ this.tabPage3.TabIndex = 2;
+ this.tabPage3.Text = "Dupes Search";
+ //
+ // InfMessageFindBox
+ //
+ this.InfMessageFindBox.BackColor = System.Drawing.SystemColors.Control;
+ this.InfMessageFindBox.Location = new System.Drawing.Point(7, 232);
+ this.InfMessageFindBox.Multiline = true;
+ this.InfMessageFindBox.Name = "InfMessageFindBox";
+ this.InfMessageFindBox.ReadOnly = true;
+ this.InfMessageFindBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
+ this.InfMessageFindBox.Size = new System.Drawing.Size(317, 132);
+ this.InfMessageFindBox.TabIndex = 6;
+ //
+ // CommentFindBtn
+ //
+ this.CommentFindBtn.Enabled = false;
+ this.CommentFindBtn.Location = new System.Drawing.Point(192, 160);
+ this.CommentFindBtn.Name = "CommentFindBtn";
+ this.CommentFindBtn.Size = new System.Drawing.Size(134, 34);
+ this.CommentFindBtn.TabIndex = 5;
+ this.CommentFindBtn.Text = "Find Commented";
+ this.CommentFindBtn.UseVisualStyleBackColor = true;
+ this.CommentFindBtn.Click += new System.EventHandler(this.CommentFindBtn_Click);
+ //
+ // NotTranslFindBtn
+ //
+ this.NotTranslFindBtn.Enabled = false;
+ this.NotTranslFindBtn.Location = new System.Drawing.Point(80, 160);
+ this.NotTranslFindBtn.Name = "NotTranslFindBtn";
+ this.NotTranslFindBtn.Size = new System.Drawing.Size(108, 34);
+ this.NotTranslFindBtn.TabIndex = 4;
+ this.NotTranslFindBtn.Text = "Find Not Translated";
+ this.NotTranslFindBtn.UseVisualStyleBackColor = true;
+ this.NotTranslFindBtn.Click += new System.EventHandler(this.NotTranslFindBtn_Click);
+ //
+ // DupesFindBtn
+ //
+ this.DupesFindBtn.Enabled = false;
+ this.DupesFindBtn.Location = new System.Drawing.Point(6, 160);
+ this.DupesFindBtn.Name = "DupesFindBtn";
+ this.DupesFindBtn.Size = new System.Drawing.Size(69, 34);
+ this.DupesFindBtn.TabIndex = 3;
+ this.DupesFindBtn.Text = "Find Dupes";
+ this.DupesFindBtn.UseVisualStyleBackColor = true;
+ this.DupesFindBtn.Click += new System.EventHandler(this.DupesFindBtn_Click);
+ //
+ // groupBox5
+ //
+ this.groupBox5.Controls.Add(this.AutoModeBtn);
+ this.groupBox5.Controls.Add(this.ManualModeBtn);
+ this.groupBox5.Location = new System.Drawing.Point(6, 105);
+ this.groupBox5.Name = "groupBox5";
+ this.groupBox5.Size = new System.Drawing.Size(320, 45);
+ this.groupBox5.TabIndex = 2;
+ this.groupBox5.TabStop = false;
+ this.groupBox5.Text = "Working mode";
+ //
+ // AutoModeBtn
+ //
+ this.AutoModeBtn.AutoSize = true;
+ this.AutoModeBtn.Enabled = false;
+ this.AutoModeBtn.Location = new System.Drawing.Point(203, 18);
+ this.AutoModeBtn.Name = "AutoModeBtn";
+ this.AutoModeBtn.Size = new System.Drawing.Size(72, 17);
+ this.AutoModeBtn.TabIndex = 1;
+ this.AutoModeBtn.TabStop = true;
+ this.AutoModeBtn.Text = "Automatic";
+ this.AutoModeBtn.UseVisualStyleBackColor = true;
+ //
+ // ManualModeBtn
+ //
+ this.ManualModeBtn.AutoSize = true;
+ this.ManualModeBtn.Enabled = false;
+ this.ManualModeBtn.Location = new System.Drawing.Point(9, 18);
+ this.ManualModeBtn.Name = "ManualModeBtn";
+ this.ManualModeBtn.Size = new System.Drawing.Size(60, 17);
+ this.ManualModeBtn.TabIndex = 0;
+ this.ManualModeBtn.TabStop = true;
+ this.ManualModeBtn.Text = "Manual";
+ this.ManualModeBtn.UseVisualStyleBackColor = true;
+ //
+ // groupBox1
+ //
+ this.groupBox1.Controls.Add(this.LangPathLbl);
+ this.groupBox1.Controls.Add(this.label2);
+ this.groupBox1.Controls.Add(this.AssignLangBtn);
+ this.groupBox1.Location = new System.Drawing.Point(6, 6);
+ this.groupBox1.Name = "groupBox1";
+ this.groupBox1.Size = new System.Drawing.Size(320, 82);
+ this.groupBox1.TabIndex = 1;
+ this.groupBox1.TabStop = false;
+ this.groupBox1.Text = "Assign Langpack File";
+ //
+ // LangPathLbl
+ //
+ this.LangPathLbl.AutoSize = true;
+ this.LangPathLbl.Location = new System.Drawing.Point(44, 54);
+ this.LangPathLbl.Name = "LangPathLbl";
+ this.LangPathLbl.Size = new System.Drawing.Size(67, 13);
+ this.LangPathLbl.TabIndex = 2;
+ this.LangPathLbl.Text = "not assigned";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(6, 54);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(38, 13);
+ this.label2.TabIndex = 1;
+ this.label2.Text = "Name:";
+ //
+ // AssignLangBtn
+ //
+ this.AssignLangBtn.Location = new System.Drawing.Point(114, 19);
+ this.AssignLangBtn.Name = "AssignLangBtn";
+ this.AssignLangBtn.Size = new System.Drawing.Size(75, 23);
+ this.AssignLangBtn.TabIndex = 0;
+ this.AssignLangBtn.Text = "Assign";
+ this.AssignLangBtn.UseVisualStyleBackColor = true;
+ this.AssignLangBtn.Click += new System.EventHandler(this.AssignLangBtn_Click);
+ //
+ // label5
+ //
+ this.label5.Location = new System.Drawing.Point(83, 400);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(119, 18);
+ this.label5.TabIndex = 9;
+ this.label5.Text = "Language:";
+ this.label5.TextAlign = System.Drawing.ContentAlignment.TopRight;
+ //
+ // LanguageComboBox
+ //
+ this.LanguageComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.LanguageComboBox.FormattingEnabled = true;
+ this.LanguageComboBox.Items.AddRange(new object[] {
+ "English",
+ "Русский"});
+ this.LanguageComboBox.Location = new System.Drawing.Point(204, 397);
+ this.LanguageComboBox.Name = "LanguageComboBox";
+ this.LanguageComboBox.Size = new System.Drawing.Size(121, 21);
+ this.LanguageComboBox.TabIndex = 10;
+ this.LanguageComboBox.SelectedIndexChanged += new System.EventHandler(this.LanguageComboBox_SelectedIndexChanged);
+ //
+ // VarButton
+ //
+ this.VarButton.Image = ((System.Drawing.Image)(resources.GetObject("VarButton.Image")));
+ this.VarButton.Location = new System.Drawing.Point(7, 395);
+ this.VarButton.Name = "VarButton";
+ this.VarButton.Size = new System.Drawing.Size(22, 22);
+ this.VarButton.TabIndex = 11;
+ this.VarButton.UseVisualStyleBackColor = true;
+ this.VarButton.Click += new System.EventHandler(this.VarButton_Click);
+ //
+ // MainForm
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(329, 422);
+ this.Controls.Add(this.VarButton);
+ this.Controls.Add(this.LanguageComboBox);
+ this.Controls.Add(this.label5);
+ this.Controls.Add(this.tabControl1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.MaximizeBox = false;
+ this.Name = "MainForm";
+ this.Text = "Miranda IM Langpack Suite";
+ this.groupBox2.ResumeLayout(false);
+ this.groupBox2.PerformLayout();
+ this.groupBox4.ResumeLayout(false);
+ this.groupBox4.PerformLayout();
+ this.tabControl1.ResumeLayout(false);
+ this.tabPage1.ResumeLayout(false);
+ this.tabPage1.PerformLayout();
+ this.groupBox3.ResumeLayout(false);
+ this.groupBox3.PerformLayout();
+ this.groupBox6.ResumeLayout(false);
+ this.groupBox6.PerformLayout();
+ this.tabPage2.ResumeLayout(false);
+ this.tabPage2.PerformLayout();
+ this.tabPage3.ResumeLayout(false);
+ this.tabPage3.PerformLayout();
+ this.groupBox5.ResumeLayout(false);
+ this.groupBox5.PerformLayout();
+ this.groupBox1.ResumeLayout(false);
+ this.groupBox1.PerformLayout();
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button CreateLangpackBtn;
+ private System.Windows.Forms.GroupBox groupBox2;
+ private System.Windows.Forms.TextBox LangpackNameEdit;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox InfMessageLangBox;
+ private System.Windows.Forms.CheckBox CommentMUIDCheckBox;
+ private System.Windows.Forms.GroupBox groupBox4;
+ private System.Windows.Forms.CheckBox ANSICheckBox;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage tabPage1;
+ private System.Windows.Forms.TabPage tabPage2;
+ private System.Windows.Forms.TextBox SVNURLEditBox;
+ private System.Windows.Forms.TextBox InfMessageLinkBox;
+ private System.Windows.Forms.Button LinkListGenBtn;
+ private System.Windows.Forms.Label label3;
+ private System.Windows.Forms.Label label4;
+ private System.Windows.Forms.TabPage tabPage3;
+ public System.Windows.Forms.TextBox InfMessageFindBox;
+ private System.Windows.Forms.Button CommentFindBtn;
+ private System.Windows.Forms.Button NotTranslFindBtn;
+ private System.Windows.Forms.Button DupesFindBtn;
+ private System.Windows.Forms.GroupBox groupBox5;
+ private System.Windows.Forms.RadioButton AutoModeBtn;
+ private System.Windows.Forms.RadioButton ManualModeBtn;
+ private System.Windows.Forms.GroupBox groupBox1;
+ private System.Windows.Forms.Label LangPathLbl;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.Button AssignLangBtn;
+ private System.Windows.Forms.Label label5;
+ public System.Windows.Forms.ComboBox LanguageComboBox;
+ private System.Windows.Forms.GroupBox groupBox3;
+ private System.Windows.Forms.CheckBox OwnFileCheckBox;
+ private System.Windows.Forms.Button SelectOwnFileBtn;
+ private System.Windows.Forms.TextBox OwnFileEdit;
+ private System.Windows.Forms.GroupBox groupBox6;
+ private System.Windows.Forms.Label label6;
+ private System.Windows.Forms.TextBox VIURLTextBox;
+ private System.Windows.Forms.CheckBox GetVICheckBox;
+ private System.Windows.Forms.Button VarButton;
+ }
+}
+
diff --git a/tools/Langpack Suite/Form1.cs b/tools/Langpack Suite/Form1.cs
new file mode 100644
index 0000000000..58f1003079
--- /dev/null
+++ b/tools/Langpack Suite/Form1.cs
@@ -0,0 +1,943 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Windows.Forms;
+using System.IO;
+using System.Globalization;
+using System.Resources;
+using System.Net;
+
+namespace Langpack_Suite
+{
+ public partial class MainForm : Form
+ {
+ private CultureInfo culture;
+ public FolderBrowserDialog LangpackFolder;
+ public String[] arguments;
+ public bool vitype, quiet = false;
+ public string output = "";
+ Searcher search;
+ ToolTip tipper;
+ public MainForm()
+ {
+ arguments = Environment.GetCommandLineArgs();
+ InitializeComponent();
+ search = new Searcher(this);
+ tipper = new ToolTip();
+ tipper.AutoPopDelay = 5000;
+ tipper.InitialDelay = 1000;
+ tipper.ReshowDelay = 500;
+ tipper.ShowAlways = true;
+
+ for (int i = 1; i < arguments.Length; i++)
+ {
+ string key = arguments[i].Substring(0, 2);
+ if (key.Equals("\\q"))
+ {
+ quiet = true;
+ }
+ if (key.Equals("\\n"))
+ {
+ LangpackNameEdit.Text = arguments[i].Substring(2);
+ }
+ if (key.Equals("\\o"))
+ {
+ string fname = arguments[i].Substring(2);
+ if (fname.Contains("\\"))
+ OwnFileEdit.Text = fname;
+ else
+ OwnFileEdit.Text = Directory.GetCurrentDirectory() + "\\" + fname;
+ OwnFileCheckBox.Checked = true;
+ OwnFilesCheckBoxChange();
+ }
+ if (key.Equals("\\c"))
+ {
+ CommentMUIDCheckBox.Checked = true;
+ }
+ if (key.Equals("\\a"))
+ {
+ ANSICheckBox.Checked = true;
+ }
+ if (key.Equals("\\u"))
+ {
+ string fname = arguments[i].Substring(2);
+ VIURLTextBox.Text = fname;
+ GetVICheckBox.Checked = true;
+ GetVICheckBoxChange();
+ }
+ if (key.Equals("\\l"))
+ {
+ output = arguments[i].Substring(2);
+ }
+ }
+ if (quiet)
+ {
+ Hide();
+ GenerateLang();
+ Close();
+ Environment.Exit(1);
+ }
+ culture = CultureInfo.CurrentCulture;
+ if (culture.ToString() == "ru-RU")
+ {
+ LanguageComboBox.SelectedIndex = 1;
+ }
+ else
+ {
+ culture = CultureInfo.CreateSpecificCulture("en-EN");
+ LanguageComboBox.SelectedIndex = 0;
+ }
+ adjustCulture();
+ }
+
+ private void adjustCulture()
+ {
+ ResourceManager rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ string CurrentText = "";
+ CurrentText = rm.GetString("tipper", culture);
+ tipper.SetToolTip(this.VarButton, CurrentText);
+ CurrentText = rm.GetString("tabPage1", culture);
+ tabPage1.Text = CurrentText;
+ CurrentText = rm.GetString("groupBox2", culture);
+ groupBox2.Text = CurrentText;
+ CurrentText = rm.GetString("label1", culture);
+ label1.Text = CurrentText;
+ CurrentText = rm.GetString("GetVICheckBox", culture);
+ GetVICheckBox.Text = CurrentText;
+ CurrentText = rm.GetString("label6", culture);
+ label6.Text = CurrentText;
+ CurrentText = rm.GetString("OwnFileCheckBox", culture);
+ OwnFileCheckBox.Text = CurrentText;
+ CurrentText = rm.GetString("SelectOwnFileBtn", culture);
+ SelectOwnFileBtn.Text = CurrentText;
+ CurrentText = rm.GetString("groupBox4", culture);
+ groupBox4.Text = CurrentText;
+ CurrentText = rm.GetString("CommentMUIDCheckBox", culture);
+ CommentMUIDCheckBox.Text = CurrentText;
+ CurrentText = rm.GetString("ANSICheckBox", culture);
+ ANSICheckBox.Text = CurrentText;
+ CurrentText = rm.GetString("CreateLangpackBtn", culture);
+ CreateLangpackBtn.Text = CurrentText;
+ CurrentText = rm.GetString("LanguageLbl", culture);
+ label5.Text = CurrentText;
+ CurrentText = rm.GetString("tabPage2", culture);
+ tabPage2.Text = CurrentText;
+ CurrentText = rm.GetString("label3", culture);
+ label3.Text = CurrentText;
+ CurrentText = rm.GetString("label4", culture);
+ label4.Text = CurrentText;
+ CurrentText = rm.GetString("LinkListGenBtn", culture);
+ LinkListGenBtn.Text = CurrentText;
+ CurrentText = rm.GetString("tabPage3", culture);
+ tabPage3.Text = CurrentText;
+ CurrentText = rm.GetString("groupBox1", culture);
+ groupBox1.Text = CurrentText;
+ CurrentText = rm.GetString("AssignLangBtn", culture);
+ AssignLangBtn.Text = CurrentText;
+ CurrentText = rm.GetString("label2", culture);
+ label2.Text = CurrentText;
+ CurrentText = rm.GetString("LangPathLbl", culture);
+ string stmp = LangPathLbl.Text.ToUpper();
+ if (!stmp.StartsWith("LANGPACK_"))
+ LangPathLbl.Text = CurrentText;
+ CurrentText = rm.GetString("groupBox5", culture);
+ groupBox5.Text = CurrentText;
+ CurrentText = rm.GetString("ManualModeBtn", culture);
+ ManualModeBtn.Text = CurrentText;
+ CurrentText = rm.GetString("AutoModeBtn", culture);
+ AutoModeBtn.Text = CurrentText;
+ CurrentText = rm.GetString("DupesFindBtn", culture);
+ DupesFindBtn.Text = CurrentText;
+ CurrentText = rm.GetString("NotTranslFindBtn", culture);
+ NotTranslFindBtn.Text = CurrentText;
+ CurrentText = rm.GetString("CommentFindBtn", culture);
+ CommentFindBtn.Text = CurrentText;
+
+ }
+
+ private void GenerateLang()
+ {
+ string s = "", st = "", we = "", FolderName = "";
+
+ InfMessageLangBox.Text = "";
+ ResourceManager rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ string LocaleText = rm.GetString("GenText", culture);
+
+ if (VIURLTextBox.Text.Contains(":\\"))
+ vitype = true;
+ else
+ vitype = false;
+
+ InfMessageLangBox.Text = LocaleText + "\r\n";
+
+ FolderName = Directory.GetCurrentDirectory();
+ if (output == "")
+ output = FolderName + "\\" + LangpackNameEdit.Text + ".txt";
+ if (File.Exists(output))
+ File.Delete(output);
+
+ if (File.Exists(FolderName + "\\=HEAD=.txt"))
+ File.Copy(FolderName + "\\=HEAD=.txt", output);
+ else
+ {
+ LocaleText = rm.GetString("WrongSelect", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ LocaleText = rm.GetString("HeadNotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ LocaleText = rm.GetString("GenStop", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText;
+ return;
+ }
+
+ StreamWriter LangPack = new StreamWriter(output, true);
+ StreamReader ReadFile;
+
+ if (GetVICheckBox.Checked && VIURLTextBox.Text != "" && !vitype)
+ {
+ string FullURL = VIURLTextBox.Text.ToUpper();
+ if (!FullURL.StartsWith("HTTP"))
+ {
+ FullURL = "HTTP://" + FullURL;
+ }
+ WebClient wc = new WebClient();
+ byte[] data = wc.DownloadData(FullURL.ToLower());
+ byte[] allfile = new byte[data.Length + 3];
+ allfile[0] = 239; allfile[1] = 187; allfile[2] = 191;
+ data.CopyTo(allfile, 3);
+ FileStream _FileStream = new System.IO.FileStream("VersionInfo.txt", System.IO.FileMode.Create, System.IO.FileAccess.Write);
+ _FileStream.Write(allfile, 0, allfile.Length);
+ _FileStream.Close();
+ }
+
+ string vipath = "";
+ if (vitype)
+ vipath = VIURLTextBox.Text;
+ else
+ vipath = FolderName + "\\VersionInfo.txt";
+
+ if (File.Exists(vipath))
+ {
+ LocaleText = rm.GetString("VIGen", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ LangPack.WriteLine("");
+ string InclPlug = "Plugins-included: ";
+ byte[] buffer = new byte[3];
+ byte[] bom = { 239, 187, 191 };
+ FileStream rf = new FileStream(vipath, FileMode.Open, FileAccess.Read);
+ rf.Read(buffer, 0, 3);
+ rf.Close();
+ if (buffer[0] == bom[0] && buffer[1] == bom[1] && buffer[2] == bom[2])
+ ReadFile = new StreamReader(vipath);
+ else
+ ReadFile = new StreamReader(vipath, Encoding.Default);
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ if (s.StartsWith("Active Plugins"))
+ {
+ s = ReadFile.ReadLine();
+ while (s != "")
+ {
+ if (s.StartsWith("¤") || s.StartsWith(" "))
+ {
+ int l = s.IndexOf(".");
+ s = s.Substring(2, l - 2);
+ if (InclPlug == "Plugins-included: ")
+ InclPlug = InclPlug + s;
+ else
+ InclPlug = InclPlug + ", " + s;
+ }
+ s = ReadFile.ReadLine();
+ }
+ break;
+ }
+ }
+ LangPack.WriteLine(InclPlug);
+ ReadFile.Close();
+
+ if (OwnFileCheckBox.Checked && OwnFileEdit.Text != "")
+ {
+ if (File.Exists(OwnFileEdit.Text))
+ {
+ LangPack.WriteLine("");
+ ReadFile = new StreamReader(OwnFileEdit.Text);
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ else
+ {
+ int f = OwnFileEdit.Text.LastIndexOf('\\');
+ string file = OwnFileEdit.Text.Substring(f + 1);
+ LocaleText = rm.GetString("FileText", culture);
+ string LocaleText2 = rm.GetString("FileNotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + file + LocaleText2 + "\r\n";
+ }
+ }
+
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\=CORE=.txt"))
+ {
+ ReadFile = new StreamReader(FolderName + "\\=CORE=.txt");
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("CoreNotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ LocaleText = rm.GetString("GenStop", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText;
+ return;
+ }
+
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\=dbtool=.txt"))
+ {
+ ReadFile = new StreamReader(FolderName + "\\=dbtool=.txt");
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("DbtoolNotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ LocaleText = rm.GetString("GenStop", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText;
+ return;
+ }
+
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\=DUPES=.txt"))
+ {
+ ReadFile = new StreamReader(FolderName + "\\=DUPES=.txt");
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("DupesNotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ LocaleText = rm.GetString("GenStop", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText;
+ return;
+ }
+
+ rf = new FileStream(vipath, FileMode.Open, FileAccess.Read);
+ rf.Read(buffer, 0, 3);
+ rf.Close();
+ if (buffer[0] == bom[0] && buffer[1] == bom[1] && buffer[2] == bom[2])
+ ReadFile = new StreamReader(vipath);
+ else
+ ReadFile = new StreamReader(vipath, Encoding.Default);
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ if (s.StartsWith("Active Plugins"))
+ {
+ s = ReadFile.ReadLine();
+ while (s != "")
+ {
+ StreamReader plug_in;
+ if (s.StartsWith("¤") || s.StartsWith(" "))
+ {
+ string back_s = s;
+ int l = s.IndexOf(".");
+ s = s.Substring(2, l - 2);
+ string stmp = s.ToUpper();
+ if (stmp == "VERSIONINFO")
+ s = "Svc_VI";
+ if (stmp == "DBEDITORPP")
+ s = "Svc_DBEPP";
+ if (stmp == "IMPORT_SA")
+ s = "Import";
+ if ((stmp[stmp.Length - 1].Equals('W')) && (stmp != "CLIST_MW") && (stmp != "DBX_DBRW") && (stmp != "IEVIEW"))
+ s = s.Remove(s.Length - 1);
+ if (stmp == "ICQ")
+ {
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\plugins\\" + s + ".txt"))
+ {
+ plug_in = new StreamReader(FolderName + "\\plugins\\" + s + ".txt");
+ while ((st = plug_in.ReadLine()) != null)
+ {
+ LangPack.WriteLine(st);
+ }
+ plug_in.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("FileText", culture);
+ string LocaleText2 = rm.GetString("File2NotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + s + LocaleText2 + "\r\n";
+ }
+ if (back_s.Contains("Plus Mod Protocol"))
+ {
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\plugins\\ICQ_Plus.txt"))
+ {
+ plug_in = new StreamReader(FolderName + "\\plugins\\ICQ_Plus.txt");
+ while ((st = plug_in.ReadLine()) != null)
+ {
+ LangPack.WriteLine(st);
+ }
+ plug_in.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("FileText", culture);
+ string LocaleText2 = rm.GetString("File2NotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "ICQ_Plus" + LocaleText2 + "\r\n";
+ }
+ }
+ continue;
+ }
+ if (stmp == "WEATHER")
+ {
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\plugins\\" + s + ".txt"))
+ {
+ plug_in = new StreamReader(FolderName + "\\plugins\\" + s + ".txt");
+ while ((st = plug_in.ReadLine()) != null)
+ {
+ LangPack.WriteLine(st);
+ }
+ plug_in.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("FileText", culture);
+ string LocaleText2 = rm.GetString("File2NotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + s + LocaleText2 + "\r\n";
+ }
+
+ plug_in = new StreamReader(vipath);
+ while ((st = plug_in.ReadLine()) != null)
+ {
+ if (st.StartsWith("Weather ini files:"))
+ {
+ st = plug_in.ReadLine();
+ st = plug_in.ReadLine();
+ while (st != "")
+ {
+ int w = st.IndexOf(".");
+ st = st.Substring(1, w - 1);
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\weather\\" + st + ".txt"))
+ {
+ StreamReader weather = new StreamReader(FolderName + "\\weather\\" + st + ".txt");
+ while ((we = weather.ReadLine()) != null)
+ {
+ LangPack.WriteLine(we);
+ }
+ weather.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("FileText", culture);
+ string LocaleText2 = rm.GetString("File2NotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + st + LocaleText2 + "\r\n";
+ }
+ st = plug_in.ReadLine();
+ }
+ }
+ }
+ plug_in.Close();
+ continue;
+ }
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\plugins\\" + s + ".txt"))
+ {
+ plug_in = new StreamReader(FolderName + "\\plugins\\" + s + ".txt");
+ while ((st = plug_in.ReadLine()) != null)
+ {
+ LangPack.WriteLine(st);
+ }
+ plug_in.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("FileText", culture);
+ string LocaleText2 = rm.GetString("File2NotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + s + LocaleText2 + "\r\n";
+ }
+ }
+ s = ReadFile.ReadLine();
+ }
+ break;
+ }
+ }
+ ReadFile.Close();
+ LangPack.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("WOVIGen", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\=VERSION=.txt"))
+ {
+ ReadFile = new StreamReader(FolderName + "\\=VERSION=.txt");
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("VersionNotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ }
+
+ if (OwnFileCheckBox.Checked && OwnFileEdit.Text != "")
+ {
+ if (File.Exists(OwnFileEdit.Text))
+ {
+ LangPack.WriteLine("");
+ ReadFile = new StreamReader(OwnFileEdit.Text);
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ else
+ {
+ int f = OwnFileEdit.Text.LastIndexOf('\\');
+ string file = OwnFileEdit.Text.Substring(f + 1);
+ LocaleText = rm.GetString("FileText", culture);
+ string LocaleText2 = rm.GetString("FileNotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + file + LocaleText2 + "\r\n";
+ }
+ }
+
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\=CORE=.txt"))
+ {
+ ReadFile = new StreamReader(FolderName + "\\=CORE=.txt");
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("CoreNotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ LocaleText = rm.GetString("GenStop", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText;
+ return;
+ }
+
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\=dbtool=.txt"))
+ {
+ ReadFile = new StreamReader(FolderName + "\\=dbtool=.txt");
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("DbtoolNotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ LocaleText = rm.GetString("GenStop", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText;
+ return;
+ }
+
+ LangPack.WriteLine("");
+ if (File.Exists(FolderName + "\\=DUPES=.txt"))
+ {
+ ReadFile = new StreamReader(FolderName + "\\=DUPES=.txt");
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ else
+ {
+ LocaleText = rm.GetString("DupesNotFound", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText + "\r\n";
+ LocaleText = rm.GetString("GenStop", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText;
+ return;
+ }
+
+ DirectoryInfo PluginsDir = new DirectoryInfo(FolderName + "\\Plugins");
+ foreach (FileInfo fi in PluginsDir.GetFiles())
+ {
+ string stmp = fi.Name.ToUpper();
+ if (stmp == "ICQ.TXT")
+ {
+ LangPack.WriteLine("");
+ ReadFile = new StreamReader(fi.FullName);
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ if (File.Exists(FolderName + "\\Plugins\\ICQ_Plus.txt"))
+ {
+
+ LangPack.WriteLine("");
+ ReadFile = new StreamReader(FolderName + "\\Plugins\\ICQ_Plus.txt");
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ continue;
+ }
+ if (stmp == "ICQ_PLUS.TXT")
+ {
+ continue;
+ }
+ if (stmp == "WEATHER.TXT")
+ {
+ LangPack.WriteLine("");
+ ReadFile = new StreamReader(fi.FullName);
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+
+ DirectoryInfo WeatherDir = new DirectoryInfo(FolderName + "\\Weather");
+ foreach (FileInfo wi in WeatherDir.GetFiles())
+ {
+ LangPack.WriteLine("");
+ ReadFile = new StreamReader(wi.FullName);
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ continue;
+ }
+ LangPack.WriteLine("");
+ ReadFile = new StreamReader(fi.FullName);
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ LangPack.WriteLine(s);
+ }
+ ReadFile.Close();
+ }
+ LangPack.Close();
+ }
+
+ if (CommentMUIDCheckBox.Checked)
+ {
+ List<string> str = new List<string>();
+ ReadFile = new StreamReader(output);
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ if (s.StartsWith("#muuid"))
+ {
+ s = s.Insert(0, ";");
+ str.Add(s);
+ }
+ else
+ {
+ str.Add(s);
+ }
+ }
+ ReadFile.Close();
+
+ LangPack = new StreamWriter(output, false, Encoding.UTF8);
+ for (int i = 0; i < str.Count; i++)
+ {
+ try
+ {
+ LangPack.Write(str[i] + "\r\n");
+ }
+ catch (IOException)
+ {
+ if (!quiet)
+ {
+ LocaleText = rm.GetString("NotWrite", culture);
+ string LocaleText2 = rm.GetString("Error", culture);
+ MessageBox.Show(LocaleText, LocaleText2, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ return;
+ }
+ }
+ LangPack.Close();
+ }
+
+ if (ANSICheckBox.Checked)
+ {
+ List<string> str = new List<string>();
+ ReadFile = new StreamReader(output);
+ while ((s = ReadFile.ReadLine()) != null)
+ {
+ str.Add(s);
+ }
+ ReadFile.Close();
+
+ LangPack = new StreamWriter(output, false, Encoding.Default);
+ for (int i = 0; i < str.Count; i++)
+ {
+ try
+ {
+ LangPack.Write(str[i] + "\r\n");
+ }
+ catch (IOException)
+ {
+ if (!quiet)
+ {
+ LocaleText = rm.GetString("NotWrite", culture);
+ string LocaleText2 = rm.GetString("Error", culture);
+ MessageBox.Show(LocaleText, LocaleText2, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ return;
+ }
+ }
+ LangPack.Close();
+ }
+
+ if (!quiet)
+ {
+ LocaleText = rm.GetString("Done", culture);
+ InfMessageLangBox.Text = InfMessageLangBox.Text + LocaleText;
+ string LocaleText3 = rm.GetString("Inf", culture);
+ MessageBox.Show(LocaleText, LocaleText3, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ }
+
+ private void OwnFilesCheckBoxChange()
+ {
+ if (OwnFileCheckBox.Checked)
+ {
+ OwnFileEdit.Enabled = true;
+ SelectOwnFileBtn.Enabled = true;
+ }
+ else
+ {
+ OwnFileEdit.Enabled = false;
+ SelectOwnFileBtn.Enabled = false;
+ }
+ }
+
+ private void OwnFilesCheckBox_CheckedChanged(object sender, EventArgs e)
+ {
+ OwnFilesCheckBoxChange();
+ }
+
+ private void SelectOwnFilesBtn_Click(object sender, EventArgs e)
+ {
+ OpenFileDialog SelectOwnFilesOpenFileDialog = new OpenFileDialog();
+ SelectOwnFilesOpenFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
+ SelectOwnFilesOpenFileDialog.FilterIndex = 1;
+ SelectOwnFilesOpenFileDialog.RestoreDirectory = true;
+ SelectOwnFilesOpenFileDialog.InitialDirectory = Directory.GetCurrentDirectory();
+ if (SelectOwnFilesOpenFileDialog.ShowDialog() == DialogResult.OK)
+ {
+ try
+ {
+ OwnFileEdit.Text = SelectOwnFilesOpenFileDialog.FileName;
+ }
+ catch (FileNotFoundException)
+ {
+ if (!quiet)
+ {
+ ResourceManager rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ string LocaleText = rm.GetString("NotOpen", culture);
+ string LocaleText2 = rm.GetString("Error", culture);
+ MessageBox.Show(LocaleText, LocaleText2, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ }
+ return;
+ }
+ }
+ }
+
+ private void CreateLangpackBtn_Click(object sender, EventArgs e)
+ {
+ GenerateLang();
+ }
+
+ private void LinkListGenBtn_Click(object sender, EventArgs e)
+ {
+ string FolderName = "", SVNURL = "";
+ InfMessageLinkBox.Text = "";
+ ResourceManager rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ string LocaleText = rm.GetString("LinkListGen", culture);
+ InfMessageLinkBox.Text = LocaleText + "\r\n";
+
+ FolderName = Directory.GetCurrentDirectory();
+ if (File.Exists(FolderName + "\\LinkList.txt"))
+ File.Delete(FolderName + "\\LinkList.txt");
+
+ if (SVNURLEditBox.Text[SVNURLEditBox.Text.Length - 1] != '/')
+ SVNURL = SVNURLEditBox.Text + "/";
+ else
+ SVNURL = SVNURLEditBox.Text;
+
+ StreamWriter LinkList_out = new StreamWriter(FolderName + "\\LinkList.txt", false, Encoding.UTF8);
+ DirectoryInfo RootDir = new DirectoryInfo(FolderName);
+ LocaleText = rm.GetString("RootLink", culture);
+ InfMessageLinkBox.Text = InfMessageLinkBox.Text + LocaleText + "\r\n";
+ foreach (FileInfo fi in RootDir.GetFiles())
+ {
+ if (fi.Name.StartsWith("="))
+ {
+ LinkList_out.WriteLine(SVNURL + fi.Name);
+ }
+ }
+
+ LinkList_out.WriteLine(SVNURL + "LangpackSuite.exe");
+
+ if (Directory.Exists(FolderName + "\\Plugins"))
+ {
+ DirectoryInfo PlugDir = new DirectoryInfo(FolderName + "\\Plugins");
+ LocaleText = rm.GetString("PlugLink", culture);
+ InfMessageLinkBox.Text = InfMessageLinkBox.Text + LocaleText + "\r\n";
+ foreach (FileInfo fi in PlugDir.GetFiles())
+ {
+ LinkList_out.WriteLine(SVNURL + "Plugins/" + fi.Name);
+ }
+ }
+ else
+ {
+ LocaleText = rm.GetString("PlugLinkNotFound", culture);
+ InfMessageLinkBox.Text = InfMessageLinkBox.Text + LocaleText + "\r\n";
+ }
+
+ if (Directory.Exists(FolderName + "\\Weather"))
+ {
+ DirectoryInfo WeatherDir = new DirectoryInfo(FolderName + "\\Weather");
+ LocaleText = rm.GetString("WeatherLink", culture);
+ InfMessageLinkBox.Text = InfMessageLinkBox.Text + LocaleText + "\r\n";
+ foreach (FileInfo fi in WeatherDir.GetFiles())
+ {
+ LinkList_out.WriteLine(SVNURL + "Weather/" + fi.Name);
+ }
+ }
+ else
+ {
+ LocaleText = rm.GetString("WeatherLinkNotFound", culture);
+ InfMessageLinkBox.Text = InfMessageLinkBox.Text + LocaleText + "\r\n";
+ }
+
+ LinkList_out.Close();
+
+ if (!quiet)
+ {
+ LocaleText = rm.GetString("Done", culture);
+ string LocaleText2 = rm.GetString("Inf", culture);
+ InfMessageLinkBox.Text = InfMessageLinkBox.Text + LocaleText;
+ MessageBox.Show(LocaleText, LocaleText2, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ }
+
+ private void AssignLangBtn_Click(object sender, EventArgs e)
+ {
+ string FolderName = "";
+ InfMessageFindBox.Text = "";
+
+ FolderName = Directory.GetCurrentDirectory();
+ DirectoryInfo RootDir = new DirectoryInfo(FolderName);
+ ResourceManager rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ string LocaleText = rm.GetString("FindLang", culture);
+ InfMessageFindBox.Text = InfMessageFindBox.Text + LocaleText + "\r\n";
+ foreach (FileInfo fi in RootDir.GetFiles())
+ {
+ string stmp = fi.Name.ToUpper();
+ if (stmp.StartsWith("LANGPACK_"))
+ {
+ search.filename = fi.FullName;
+ LangPathLbl.Text = fi.Name;
+ DupesFindBtn.Enabled = true;
+ NotTranslFindBtn.Enabled = true;
+ CommentFindBtn.Enabled = true;
+ ManualModeBtn.Enabled = true;
+ ManualModeBtn.Checked = true;
+ search.mode = 1;
+ LocaleText = rm.GetString("AssignLang", culture);
+ InfMessageFindBox.Text = InfMessageFindBox.Text + LocaleText + "\r\n";
+ break;
+ }
+ }
+ if (search.filename == null)
+ {
+ LocaleText = rm.GetString("LangNotFound", culture);
+ InfMessageFindBox.Text = InfMessageFindBox.Text + LocaleText + "\r\n";
+ LocaleText = rm.GetString("DupStop", culture);
+ InfMessageFindBox.Text = InfMessageFindBox.Text + LocaleText;
+ return;
+ }
+
+ }
+
+ private void DupesFindBtn_Click(object sender, EventArgs e)
+ {
+ search.DupesSearch();
+ }
+
+ private void NotTranslFindBtn_Click(object sender, EventArgs e)
+ {
+ search.NotTransSearch();
+ }
+
+ private void CommentFindBtn_Click(object sender, EventArgs e)
+ {
+ search.CommentsSearch();
+ }
+
+ private void LanguageComboBox_SelectedIndexChanged(object sender, EventArgs e)
+ {
+ if (LanguageComboBox.SelectedIndex == 0)
+ culture = CultureInfo.CreateSpecificCulture("en-EN");
+ if (LanguageComboBox.SelectedIndex == 1)
+ culture = CultureInfo.CreateSpecificCulture("ru-RU");
+ adjustCulture();
+
+ }
+
+ private void GetVICheckBoxChange()
+ {
+ if (GetVICheckBox.Checked)
+ {
+ VIURLTextBox.Enabled = true;
+ }
+ else
+ {
+ VIURLTextBox.Enabled = false;
+ }
+ }
+
+ private void GetVICheckBox_CheckedChanged(object sender, EventArgs e)
+ {
+ GetVICheckBoxChange();
+ }
+
+ private void VarButton_Click(object sender, EventArgs e)
+ {
+ ResourceManager rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ string LocaleText = rm.GetString("VarText", culture);
+ string LocaleHead = rm.GetString("VarHead", culture);
+ MessageBox.Show(LocaleText, LocaleHead);
+ }
+ }
+} \ No newline at end of file
diff --git a/tools/Langpack Suite/Form1.resx b/tools/Langpack Suite/Form1.resx
new file mode 100644
index 0000000000..29c28e2f52
--- /dev/null
+++ b/tools/Langpack Suite/Form1.resx
@@ -0,0 +1,520 @@
+<?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="label3.Text" xml:space="preserve">
+ <value>LinkList.txt file contains links to the translation files of different
+plugins and can be used in any download manager. Downloaded
+files can be used to generate a complete localization or consisting
+only from localization of plugins used by you (information is taken
+from the version info file, if available).</value>
+ </data>
+ <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+ <data name="VarButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
+ YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAGfSURBVDhPpVPNSoJREPUp6iV6iWjbIkqkQEytFhFFGSpl
+ iYniwjJCk0BaSKYEVrRqUdAmbJFZumkRFlQShQUFIVFw6ox8H1/+ETQw3GHmzrlzZubqdE0kvp1FZKOq
+ tJvdq/MzQe/OoMt+hk5HXpQ2fYy1BLIvnaDDeCBJvb5rDARLorTpY4x3GoIw0NazJwnWcBkzqU9R52ZF
+ lD7G2nt26kFYGtF5YTz2jLsXIFMEXIlHUdr0jYaL0HsLcvcXHfJjiXxlKwuRpzdgKnQAT+pWbApjRt9P
+ b6aOpSdChR1mk8iTJUePqq+9fwCTgST8yYLY9DFmmUujz30qOTIdlsLXWT4BZuMlKZnCU2ubbKsqAHOE
+ Ri0AOR9eVgF4am2zI4axUE76oALUUvDufgnvWjFPL8vrk2s3QlelwD5om0gA/05ZOCtC2+qMwhbJYTB4
+ pS6Wug/aMU6sv8KTrqijU0Y65EpgZPFCAOrGSCTtIllWHmCL3WPYuw+TMyFqsG/DsHDeeJGUUpRV7p7P
+ oz9QVFeZNn0tV1kB+ddn0n6Sv37nb56FK3JTt4m6AAAAAElFTkSuQmCC
+</value>
+ </data>
+ <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+ <value>
+ AAABAAYAEBAAAAEACABoBQAAZgAAACAgAAABAAgAqAgAAM4FAAAwMAAAAQAIAKgOAAB2DgAAEBAAAAEA
+ IABoBAAAHh0AACAgAAABACAAqBAAAIYhAAAwMAAAAQAgAKglAAAuMgAAKAAAABAAAAAgAAAAAQAIAAAA
+ AABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABUYrsAAK7jAACZzgAAAMwAAADGAAC47QANz/8AAIO4ADNK
+ vgAYg8YAJ0yzAAAAxAA5RMUAAMv+ABkawAA6Yb8AF4PFACM1swAAALMABcz/AACPxwALWqsAA1yYAA1k
+ pwANLpkAA6rgAAC87gAAAK4APEDKAAnO/wALzv8AAMf6AADC9AAlJbMAAAC5AADJ/AAAueoANja2AADC
+ 9QAbSHIAJ0mSAADB9AAAq9oAALbpAACz4gAgPXwAI2qbAACn1gATbbMAN2N2AC5HoQAAl8YAAJ/SACQ2
+ ewBelrMABVCPAACs3wAAl8IAALHjAACWxAApMLIAAKbYAB5shwA1l7sAAJTCACksmAARRYsACT2LAP//
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEMAAAAAAABEAAAAAAAAPT4/AAAAAAAAQEFC
+ AAAAADk6AAAAAAAAAAA7PAAAADEHMgAzNAAANTYANwc4AAAnBygpKisAACwtLi8HMAAdBwceHyAhIiMk
+ JR4fBw4mExQHBxUWBxcYBxkaBwcbHAQJCgsMDQcHBw4PBRAREgQEBAQEBAUGBwcIBQQEBAQAAAAAAAAA
+ AQIDAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//8AAP//AAD//wAA//8AAPfv
+ AADH4wAAz/MAAImRAACBgQAAAAAAAAAAAAAAAAAAAAEAAPw/AAD//wAA//8AACgAAAAgAAAAQAAAAAEA
+ CAAAAAAAgAQAAAAAAAAAAAAAAAEAAAABAAAAAAAAABigAAAAtQAAPLQAPT2+AAxEvAAGUrQAVHamAAAD
+ yQAAANcAAArUAAAA3gAOGNQACDXFACI0xgA6OsoAAADiAAAR4gAFBfEABQX5AAUU9gAvL/cALy/6AC8w
+ +wAuNvoAMDD+AABRyAAWXMEAAEnUABNS3wA7VcYAG2XYACdD5gAEavUAJW/1AFNTzABVVdsAcHDNAFNt
+ 4QBZYu4AU2/zAFNv9ABMePIAYGD6AGJi/gA5iJsAPpKnADmTqwAyl7AAJqC/AGCLlQBykZkARJitAFaV
+ pgBnlaEAYJyrAGWcqgB3maIAfaSuAGuruwBsrr8Ae6eyAH2rtgBzq7gAfa67AACQ0gAcqMsAGazRAAmy
+ 3QAcsNYAFLDYACClxwAuqsoALKzMADynwQAqr9EAILTaAAWX+AAom/UAAKPhAA+34QAYvecAAKLwAAis
+ 9wAAqPgAFKn1AAC++AAuv+QAN6f4AC+9+QBNsMkAW7PIAFKh1gBIudUAQrvcAGW1ygB3uMgAb5z0AEeg
+ 7QANwe4ABsPyAAfG9gAMx/YAAMD4AADH+gAAxfwABcj5AAHL/gAEyvwAAMz/AATM/wAJzf8ADc7/ABXM
+ +gARz/8AFND/ABzR/wA1x+sAJcD0ACbM9QAg0v8AK9T/AC7V/wAx1f8AN9f/ADnX/wBSxOwAXc3pAEbV
+ +QBB2f8ARNn+AEna/wBO2/8AT9z/AFXc/wBZ3f8AXd7/AGPQ6gBg3/8AcNr7AGTg/wBp4P8AbeH/AHXj
+ /wB55P8Af+X/AIWSogCLqrIAmrK5AKSktwClpbgAnJzJAI6O9ACTk/wAlJT/AILm/wCF5v8AiOf/AI/k
+ /ACN6P8Ak+L3AJDo/wCZ6v8Anev/AKTk+wCm7f8Aqu3/AK3u/wCw6fYAsO//ALTw/wDG7PsAwPL/AMfz
+ /wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAEAAAAAAAAAAAAAAAAAAAAAATEsAAAAAAAAAAAAAAAAAAGouAAAAAAAAAAAAAAAAPWpjAAAAAAAA
+ AAAAAAAAAAAAYGpDAAAAAAAAAAAAAD5qaj0AAAAAAAAAAAAAAAAAAAAAV2pGAAAAAAAAAAAAampLAAAA
+ AAAAAAAAAAAAAAAAAAAAampCAAAAAAAAAFFqbQAAAAAAAAAAAAAAAAAAAAAAAABeamo1AAAAAAA7am1F
+ AAAAAAA+agAAAAAAX1AAAAAAAABqbXcAAAAAAGZqbTQAAAAAAGpqAAAAAAA/ajEAAAAAAGptezgAAAAA
+ am1tLwAAAABjam05AAAAADxqajAAAAAAam2DiQAAAFpwcG1lMgA4ZWptbTYAAAAAW2ptbUIzAEpqcoqc
+ AAAAdXt7dGptamptcm1tLQAAAABIakRtampqbW2Bj6IzAAB2ioqKgX17gYMbbW1BAgkJCGdqBlRqbW1w
+ e4qfpgcABFWfnJyRkZCOHwptbWoBCxAcanQFEVRtcHuHkaKsHgAPIaKppqalix0SEmpqbU8DGmdygQ0T
+ FE14gYqfqa0MACMYWKKtn2IgGBkYVG1qbWpqcIeHDhgZGCJZip+kJhUAJSwsKConLCwsLCxOam1wcHqK
+ j34kLCwsLCwoKicsLACXmpqampqampqammFyeoGKjpGiXJiampqampqampqaAAAAlpaWlpaWlpaWll6D
+ ipGfpaCSlpaWlpaWlpaWlgAAAAAAAAAAAAAAAAAAAIOfoqmtkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAH+pqJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//////////////////////////////////
+ /f/+f/5/+P/+P/D//x/x//+P4///h8Pnz8fD58fDw8PDw4EDwIOAA8ABgAAAAQAAAAEAAAABAAAAAQAA
+ AAEAAAABwAAAA//4H////D//////////////////////////////////KAAAADAAAABgAAAAAQAIAAAA
+ AACACgAAAAAAAAAAAAAAAQAAAAEAAAAAAABMTHgAAA+OAAAEngA/P4AAAQGkABcXqAABILUAFju3ADQ4
+ uQAbYIwACUi9ABVNvQABULQADHaqABNpvwBERIsAR0eRAF9ftgBTU7sAYmK9AHBwvQAAAMUAAQjDAAAA
+ zAAKEMkAERHGAAAA1AAAAdoAFxfaAAAgwAAANt8AITLdAAIC5gAAAO8ACAnqAAAV6gAAAPIACAj7AAAn
+ 4AABK+sACCTzADAw4AAmJvEAJyj2ACgo/gAkNvUAD17AAA9TzwAJQdgAAVLSAA5a1wAzU8QAP1zWAAFk
+ xAAAd8EADHbDABVh0AABedYAHE/uAARa7gA6VeMAPlPxAABr7AAAeOYAGnHyAC958ABYWNIATEzhAEVc
+ 4QBFRvAAR0f4AEhI/gBCUvQAZmbhAGZm9ABlafcAaWn9AC+TrAA2kakAMZSuADSUrAA/lKkAKpaxACWe
+ vQBDipwARIqcAFSFkgBehpEAW4iSAGWAhgBjg4sAYYaQAGyKkgBrjpcAbI+XAHCJkABqkZoAd5OaAHqT
+ mQBOlacAVpamAFebrABFm7AAU5+yAGWZpwBgmqoAdJ+pAHKcrgBVpLgAX6u/AGektABopLcAb6m4AG2t
+ vQB9p7IAdqi0AAGAxAABiM0AE57RAD+GxQAbrtMAHq/UABCm3QAStd4AH7TZAB623QAgosMANqbDADio
+ xAAqr9EANajcACWy1QAkuN4ALbjbADOw0AAeiucAA4b1AAaf9wAyhegALInyAAOg4AAOuOIADbvnAAW+
+ 7QALvusACL/tABC24QAUu+UAFbzmABy85AABtPIAALT5AAG7+gAWsfYAHrL5ACKj9AAgvfoAMbv3AGON
+ zwB6icYASrDJAEy1zwBdvdUAV7/ZAGOuxAB4tsYAaKDQAGK90wB0vtEAXaHsAEqh8QBBtfUAS7LyAAzC
+ 7wAGwvEAAcH1AATF9gAKw/IACcb2AAHC+gAHx/gAA8T8AArC+wACyPsABsj5AAHK/QAEyvwAAMz+AAXM
+ /gALzf4AEc/+ABnN+QAV0P4AG9H+ACbC6QAgxO0APMbpADLJ7wArx/UAIM79ACHS/gAl0/4AKNT+ACzU
+ /gAz1f4AOdf+ADzY/gB6w9UASMfnAETG9gBNwPYAX8j4AETR+ABC2P4ASdr+AE3b/gBd1vsAUdz+AFbc
+ /gBc2vwAWd3+AF7e/gBm0fEAYd/+AGrb/ABl4P4Aa+H+AHTi/gB75P4AgIC+AIWF0QCMvckAoaHGAIGB
+ 6gCLi/0AmafyAKio4gCoqO0ArKz+AJ3W5ACC5f4AiOb+AI3o/gCS6f4Am+r+AKLs/gCs7f4AuuH2ALTk
+ +QCy7/4AtfD+ALrx/gDC8v4AzPT+ANL1/gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGt9hwAAAAAAAAAAAAAAAAAAAAAAAACp
+ lFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgryUAAAAAAAAAAAAAAAAAAAAAAAAAAAAoryOWQAAAAAAAAAA
+ AAAAAAAAAAAAAACzvLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMO8vE8AAAAAAAAAAAAAAAAAAAAAdLW8
+ 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
+ s7UAALmlAMn8/wC56v8Jzv//C87//w3P//8Ay/7/Nja2lAAAs+UFzP//Dc///w3P//8Aj8f/C1qr/w3P
+ //8DXJj/DWSn/w3P//8NLpn/A6rg/w3P//8Nz///ALzu/wAArsQAAMzjM0q+/xiDxv8nTLP/AADE/zlE
+ xf8Nz///Dc///w3P//8Ay/7/GRrA/wAAxv86Yb//F4PF/yM1s/8AAMy8AADMiAAAzMUAAMzFAADMxQAA
+ zMUAAMbHALjt/w3P//8Nz///AIO4/AAAxscAAMzFAADMxQAAzMUAAMzFAADMZQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAFRiu5AAruP/AJnO/EhQo1IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAADMCQAAzAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ AAD//wAA//8AAPfvAADDwwAAh+EAAICBAAAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8PwAA/n8AAP//
+ AAAoAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ Q2MjwPT8Yd///13e//9Z3f//Tdv//zrX//841///Qtn//0TZ/v8WXMH/AMz//wDM//8AkNL/AAC1/wAA
+ 1/8AANf/AAPJ/wC++P8CzP//BlK0/wCi8P8AzP//AMz//wDM//8Lzv//N9f//2Tg//+I5///q+7//0Rq
+ nukAAAQ+AACqwhSp9f+O6P//h+f//4Pm//9/5f//e+T//3fj//9q4f//G2XY/wAK1P8AzP//AMz//wDH
+ +v8AGKD/AADe/wAA4v8ASdT/AMz//x3R//8MRLz/ABHi/wCo+P8AzP//Dc7//zDV//9U3P//eOT//5zr
+ ///B8v//O1XG/wAAMnYEBLzIBGr1/5rq//+x7///re7//6nt//+n7f//cNr7/xNS3/8FBfH/BQXy/wDF
+ /P8AzP//AMz//wCj4f8APLT/AFHI/wDA+P8V0P//Rdn//wg1xf8FBfn/BRT2/wWX+P8g0v//RNn//2jg
+ //+M6P//sO///8bs+/8OGNT/AQE+fCQkv8guNvr/N6f4/57r///A8v//j+T8/0eg7f8nQ+b/Ly/6/zAw
+ //8vL/v/CKz3/wDM//8AzP//AMz//wDM//8AzP//Ec///0/c//9V3f//IjTG/zAw/v8wMP//LzD7/yVv
+ 9f8vvfn/V93//4/o//+k5Pv/U23h/y8v9/8MDD98SUm/x2Ji//9hYfv/U2/0/0x48v9ZYu7/YGD5/2Ji
+ /v9iYv//YmL//2Ji/v8om/X/AMz//wjN//8Mzv//Es///y7V//9e3v//deP//1LE7P9VVdv/YmL//2Ji
+ //9iYv//YmL+/2Bg+f9Tb/P/THjy/1li7/9hYfv/YmL//xgYP3hgYKielJT//5SU//+UlP//lJT//5SU
+ //+UlP//lJT//5SU//+UlP//lJT//2+c9P8U0P//K9T//0HZ//9X3f//beH//4Lm//+a6v//UqHW/46O
+ 9P+UlP//lJT//5SU//+UlP//lJT//5SU//+UlP//lJT//5SU//+Skvz7ExMjRmlpbg5YWHl2XFx/i1xc
+ f4xcXH+MXFx/jFxcf4xcXH+MXFx/jFxcf4xcXH+MWlp8jCCv1tdP2///ZOD//3rk//+Q6P//pu3//5Hi
+ 9/k6TmmdXFx+jFxcf4xcXH+MXFx/jFxcf4xcXH+MXFx/jFxcf4xcXH+MXFx/izExRExfX18GAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH1JeMj3T+fKJ5///nuv//7Tw
+ ///H8///LWV0jE9PTwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD05dQELF
+ 5tqw7///rOj28j1seIQvLy8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAf39/BD9mbyI/S04Sj4+PAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ /////////////////////////x/4//wf+D/4P/wf8D/8D+B//gfA888DwOHHA4HBw4GBgcGBgAHAAQAB
+ gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/wD///+B////w/////////////////////
+ ////////KAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ //8+U/H/A8T8/gDM//8AzP//AMv+/gDM//8AzP//AMv+/gHM//8U0P//Sdr+/mDf//9v4v//RNH4/jQ4
+ uf9HR/j/SUn//0lJ/v5JSf//SUn+/0hI/P5CUvT/L3nw/yKj9P4xu/f/TcD2/12h7P5FXOH/RUbx/0lJ
+ /f5AQN/uAAAASUJCn6tqav//amr+/mpq/v9pafz/Z2f2/mVl8/9mZvT/aGj5/mlp/f9qav7/amr//2pq
+ /v5qav//amr+/mpq//9laff/FrH2/gDM//8Ezf//Ds7+/hLP//8U0P//HtL+/jrX//9Z3f//aOD+/nfk
+ //+F5v//Najc/lhY0v9pafz/amr//2pq/v5qav//amr//2pq/v5qav7/aWn9/2ho+f5mZvT/ZWXz/2dn
+ 9v5pafz/amr+/2pq/v5cXN/uAAAARFFRlYmMjP7+jIz+/oyM/v6MjP7+jIz+/oyM/v6MjP7+jIz+/oyM
+ /v6MjP7+jIz+/oyM/v6MjP7+jIz+/oyM/v6Li/z+SqHx/gzO/v4a0f7+KdT+/jjX/v5H2v7+Vdz+/mTf
+ /v5y4v7+gOX+/o/o/v6I5v7+P4bF/oGB6v6MjP7+jIz+/oyM/v6MjP7+jIz+/oyM/v6MjP7+jIz+/oyM
+ /v6MjP7+jIz+/oyM/v6MjP7+jIz+/oyM/v5ubsjVAAAALCQkMiOTk9vMrKz9+62t//+trf//rKz+/q2t
+ //+trf//rKz+/q2t//+trf//ra3//6ys/v6trf//rKz+/q2t//+srP7/mafy/iDO/f8y1v//QNn+/k/b
+ //9e3v//bOH+/nvk//+J5///mOr+/qjt//9m0fH/eonG/qmp+f+trf//ra3//6ys/v6trf//ra3//6ys
+ /v6trf//ra3//6ys/v6trf//ra3//6ys/v6trf//rKz+/p+f7OcvL0hjCwsLDQAAAAAeHiQTLi49RjAw
+ P1EwMD9SMDA/UjAwP1IwMD9SMDA/UjAwP1IwMD9SMDA/UjAwP1IwMD9SMDA/UjAwP1IwMD9SLi4+UxCE
+ paZA2P//V93+/mfg//914///g+b+/pLp//+h7P//r+/+/rPv//8gcoq1KCg1YC8vP1IwMD9SMDA/UjAw
+ P1IwMD9SMDA/UjAwP1IwMD9SMDA/UjAwP1IwMD9SMDA/UjAwP1IwMD9SLy8/UBoaIyoMDAwJAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAABcwNxgQuuXQZOD+/n/l/v6N6P7+m+v+/qvu/v658f7+yvT+/mG4ztYACg00U1NTBAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAJeXlwEDO0k0FcLt34Hl//+m7f//s+/+/sLy///R9f7+kdHh4gQh
+ KEcbGxsKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLi4sBACs2Jw6kybFn3/35wPL+/qzs
+ /PpcorOzBiEnPBgYGAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8/
+ PwQfOkEaADtKOQAaICAfHx8MY2NjAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD///////8AAP///////wAA////////
+ AAD///////8AAP///////wAA////////AAD/8P//D/8AAP/A//8D/wAA/4D//wH/AAD+Af//gH8AAPwD
+ ///APwAA/AP//8AfAAD4B///4B8AAPAP7/fwDwAA4A+H4fAHAADgHwPg+AcAAMAfA+D4AwAAwD4D4HwD
+ AACAPAPgPAEAAIAQA+AIAQAAgAAD4AABAACAAAPAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AACAAAAAAAEAAP//wAP//wAA///AB///AAD//+AP//8AAP//+B///wAA////////AAD///////8AAP//
+ /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAA==
+</value>
+ </data>
+</root> \ No newline at end of file
diff --git a/tools/Langpack Suite/LangpackSuite.csproj b/tools/Langpack Suite/LangpackSuite.csproj
new file mode 100644
index 0000000000..b2b14bf47f
--- /dev/null
+++ b/tools/Langpack Suite/LangpackSuite.csproj
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">x86</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{6F20B52F-64EA-4A78-9149-6C36CE2AF043}</ProjectGuid>
+ <OutputType>WinExe</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>LangpackSuite</RootNamespace>
+ <AssemblyName>LangpackSuite</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <TargetFrameworkProfile>Client</TargetFrameworkProfile>
+ <FileAlignment>512</FileAlignment>
+ <PublishUrl>publish\</PublishUrl>
+ <Install>true</Install>
+ <InstallFrom>Disk</InstallFrom>
+ <UpdateEnabled>false</UpdateEnabled>
+ <UpdateMode>Foreground</UpdateMode>
+ <UpdateInterval>7</UpdateInterval>
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
+ <UpdatePeriodically>false</UpdatePeriodically>
+ <UpdateRequired>false</UpdateRequired>
+ <MapFileExtensions>true</MapFileExtensions>
+ <ApplicationRevision>0</ApplicationRevision>
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
+ <IsWebBootstrapper>false</IsWebBootstrapper>
+ <UseApplicationTrust>false</UseApplicationTrust>
+ <BootstrapperEnabled>true</BootstrapperEnabled>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
+ <PlatformTarget>x86</PlatformTarget>
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug\</OutputPath>
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
+ <PlatformTarget>x86</PlatformTarget>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release\</OutputPath>
+ <DefineConstants>TRACE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup>
+ <ApplicationIcon>res/miranda_logo.ico</ApplicationIcon>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Data.DataSetExtensions" />
+ <Reference Include="Microsoft.CSharp" />
+ <Reference Include="System.Data" />
+ <Reference Include="System.Deployment" />
+ <Reference Include="System.Drawing" />
+ <Reference Include="System.Windows.Forms" />
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Form1.cs">
+ <SubType>Form</SubType>
+ </Compile>
+ <Compile Include="Form1.Designer.cs">
+ <DependentUpon>Form1.cs</DependentUpon>
+ </Compile>
+ <Compile Include="myRes.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>myRes.resx</DependentUpon>
+ </Compile>
+ <Compile Include="myRes.ru-RU.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DesignTime>True</DesignTime>
+ <DependentUpon>myRes.ru-RU.resx</DependentUpon>
+ </Compile>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ <Compile Include="Searcher.cs" />
+ <EmbeddedResource Include="Form1.resx">
+ <DependentUpon>Form1.cs</DependentUpon>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Properties\Resources.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+ <SubType>Designer</SubType>
+ </EmbeddedResource>
+ <Compile Include="Properties\Resources.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Resources.resx</DependentUpon>
+ <DesignTime>True</DesignTime>
+ </Compile>
+ <EmbeddedResource Include="myRes.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>myRes.Designer.cs</LastGenOutput>
+ </EmbeddedResource>
+ <EmbeddedResource Include="myRes.ru-RU.resx">
+ <Generator>ResXFileCodeGenerator</Generator>
+ <LastGenOutput>myRes.ru-RU.Designer.cs</LastGenOutput>
+ </EmbeddedResource>
+ <None Include="app.config" />
+ <None Include="Properties\Settings.settings">
+ <Generator>SettingsSingleFileGenerator</Generator>
+ <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+ </None>
+ <Compile Include="Properties\Settings.Designer.cs">
+ <AutoGen>True</AutoGen>
+ <DependentUpon>Settings.settings</DependentUpon>
+ <DesignTimeSharedInput>True</DesignTimeSharedInput>
+ </Compile>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="res\miranda_logo.ico" />
+ </ItemGroup>
+ <ItemGroup>
+ <BootstrapperPackage Include=".NETFramework,Version=v4.0,Profile=Client">
+ <Visible>False</Visible>
+ <ProductName>Клиентский профиль Microsoft .NET Framework 4 %28x86 и x64%29</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Client.3.5">
+ <Visible>False</Visible>
+ <ProductName>Клиентский профиль .NET Framework 3.5 SP1</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
+ <Visible>False</Visible>
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
+ <Install>false</Install>
+ </BootstrapperPackage>
+ <BootstrapperPackage Include="Microsoft.Windows.Installer.3.1">
+ <Visible>False</Visible>
+ <ProductName>Установщик Windows 3.1</ProductName>
+ <Install>true</Install>
+ </BootstrapperPackage>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+ Other similar extension points exist, see Microsoft.Common.targets.
+ <Target Name="BeforeBuild">
+ </Target>
+ <Target Name="AfterBuild">
+ </Target>
+ -->
+</Project> \ No newline at end of file
diff --git a/tools/Langpack Suite/LangpackSuite.sln b/tools/Langpack Suite/LangpackSuite.sln
new file mode 100644
index 0000000000..188599727e
--- /dev/null
+++ b/tools/Langpack Suite/LangpackSuite.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LangpackSuite", "LangpackSuite.csproj", "{6F20B52F-64EA-4A78-9149-6C36CE2AF043}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x86 = Debug|x86
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {6F20B52F-64EA-4A78-9149-6C36CE2AF043}.Debug|x86.ActiveCfg = Debug|x86
+ {6F20B52F-64EA-4A78-9149-6C36CE2AF043}.Debug|x86.Build.0 = Debug|x86
+ {6F20B52F-64EA-4A78-9149-6C36CE2AF043}.Release|x86.ActiveCfg = Release|x86
+ {6F20B52F-64EA-4A78-9149-6C36CE2AF043}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/tools/Langpack Suite/Program.cs b/tools/Langpack Suite/Program.cs
new file mode 100644
index 0000000000..79ed85d9c9
--- /dev/null
+++ b/tools/Langpack Suite/Program.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Windows.Forms;
+
+namespace Langpack_Suite
+{
+ static class Program
+ {
+ /// <summary>
+ /// Главная точка входа для приложения.
+ /// </summary>
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new MainForm());
+ }
+ }
+}
diff --git a/tools/Langpack Suite/Properties/AssemblyInfo.cs b/tools/Langpack Suite/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..1f96514bd5
--- /dev/null
+++ b/tools/Langpack Suite/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Управление общими сведениями о сборке осуществляется с помощью
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("Lang_generator")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Lang_generator")]
+[assembly: AssemblyCopyright("Copyright © 2011")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми
+// для COM-компонентов. Если требуется обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("dbdf6342-32a0-4426-87a2-ca5b1c786b44")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер построения
+// Редакция
+//
+// Можно задать все значения или принять номер построения и номер редакции по умолчанию,
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/tools/Langpack Suite/Properties/Resources.Designer.cs b/tools/Langpack Suite/Properties/Resources.Designer.cs
new file mode 100644
index 0000000000..2b8724b2a0
--- /dev/null
+++ b/tools/Langpack Suite/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// Этот код создан программой.
+// Исполняемая версия:4.0.30319.239
+//
+// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+// повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace LangpackSuite.Properties {
+ using System;
+
+
+ /// <summary>
+ /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д.
+ /// </summary>
+ // Этот класс создан автоматически классом StronglyTypedResourceBuilder
+ // с помощью такого средства, как ResGen или Visual Studio.
+ // Чтобы добавить или удалить член, измените файл .ResX и снова запустите ResGen
+ // с параметром /str или перестройте свой проект VS.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ /// <summary>
+ /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LangpackSuite.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ /// <summary>
+ /// Перезаписывает свойство CurrentUICulture текущего потока для всех
+ /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией.
+ /// </summary>
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/tools/Langpack Suite/Properties/Resources.resx b/tools/Langpack Suite/Properties/Resources.resx
new file mode 100644
index 0000000000..ffecec851a
--- /dev/null
+++ b/tools/Langpack Suite/Properties/Resources.resx
@@ -0,0 +1,117 @@
+<?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.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: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" type="xsd:string" />
+ <xsd:attribute name="type" type="xsd:string" />
+ <xsd:attribute name="mimetype" type="xsd:string" />
+ </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" msdata:Ordinal="1" />
+ <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+ <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+ </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=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+ <resheader name="writer">
+ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+ </resheader>
+</root> \ No newline at end of file
diff --git a/tools/Langpack Suite/Properties/Settings.Designer.cs b/tools/Langpack Suite/Properties/Settings.Designer.cs
new file mode 100644
index 0000000000..a02c6aae83
--- /dev/null
+++ b/tools/Langpack Suite/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+// Этот код создан программой.
+// Исполняемая версия:4.0.30319.239
+//
+// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+// повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace LangpackSuite.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/tools/Langpack Suite/Properties/Settings.settings b/tools/Langpack Suite/Properties/Settings.settings
new file mode 100644
index 0000000000..abf36c5d3d
--- /dev/null
+++ b/tools/Langpack Suite/Properties/Settings.settings
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+ <Profiles>
+ <Profile Name="(Default)" />
+ </Profiles>
+ <Settings />
+</SettingsFile>
diff --git a/tools/Langpack Suite/Searcher.cs b/tools/Langpack Suite/Searcher.cs
new file mode 100644
index 0000000000..a34b1c4628
--- /dev/null
+++ b/tools/Langpack Suite/Searcher.cs
@@ -0,0 +1,280 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.IO;
+using System.Windows.Forms;
+using System.Globalization;
+using System.Resources;
+
+namespace Langpack_Suite
+{
+ class Searcher
+ {
+ private CultureInfo culture;
+ List<string> str = new List<string>();
+ List<string> dup = new List<string>();
+ public string filename;
+ public byte mode = 1;
+ MainForm _mainForm;
+
+ public Searcher(MainForm mainForm)
+ {
+ _mainForm = mainForm;
+ }
+
+ public void DupesSearch()
+ {
+ string s = "";
+ int i = 0;
+ str.Clear();
+ dup.Clear();
+ StreamReader fstr_in = new StreamReader(filename);
+ while ((s = fstr_in.ReadLine()) != null)
+ {
+ Console.WriteLine(s);
+ if (s.StartsWith("["))
+ {
+ str.Add(s);
+ i += 1;
+ }
+ else if ((s.StartsWith(";")) && (s.Contains("[")))
+ {
+ int q = s.IndexOf("[");
+ s = s.Remove(0, q);
+ int qq = s.LastIndexOf("]");
+ s += " ";
+ s = s.Remove(qq + 1);
+ str.Add(s);
+ }
+ }
+ fstr_in.Close();
+ for (i = 0; i <= str.Count - 1; i++)
+ {
+ for (int j = 0; j <= str.Count - 1; j++)
+ {
+ if ((str[i].Equals(str[j])) && (i != j))
+ {
+ if (dup.Count == 0)
+ {
+ dup.Add(str[i]);
+ }
+ else
+ {
+ int k = 0;
+ for (int z = 0; z <= dup.Count - 1; z++)
+ {
+ if (str[i].Equals(dup[z]))
+ {
+ k += 1;
+ }
+ }
+ if (k == 0)
+ {
+ dup.Add(str[i]);
+ }
+ }
+ }
+ }
+ }
+ ResourceManager rm;
+ string LocaleText;
+ if (_mainForm.LanguageComboBox.SelectedIndex == 0)
+ culture = CultureInfo.CreateSpecificCulture("en-EN");
+ if (_mainForm.LanguageComboBox.SelectedIndex == 1)
+ culture = CultureInfo.CreateSpecificCulture("ru-RU");
+ if (dup.Count > 0)
+ {
+ rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ LocaleText = rm.GetString("DupFound", culture);
+ _mainForm.InfMessageFindBox.Text = _mainForm.InfMessageFindBox.Text + LocaleText + "\r\n";
+ if (mode == 1)
+ {
+ StreamWriter fstr_out = new StreamWriter(filename + "_dupes");
+ for (i = 0; i <= dup.Count - 1; i++)
+ {
+ try
+ {
+ fstr_out.Write(dup[i] + "\r\n");
+ }
+ catch (IOException)
+ {
+ LocaleText = rm.GetString("NotWrite", culture);
+ string LocaleText2 = rm.GetString("Error", culture);
+ MessageBox.Show(LocaleText, LocaleText2, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ fstr_out.Close();
+ LocaleText = rm.GetString("Done", culture);
+ _mainForm.InfMessageFindBox.Text = _mainForm.InfMessageFindBox.Text + LocaleText + "\r\n";
+ string LocaleText3 = rm.GetString("Inf", culture);
+ MessageBox.Show(LocaleText, LocaleText3, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ else
+ {
+ //автоматический поиск и удаление дублей
+ }
+ }
+ else
+ {
+ rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ LocaleText = rm.GetString("DupNotFound", culture);
+ _mainForm.InfMessageFindBox.Text = _mainForm.InfMessageFindBox.Text + LocaleText + "\r\n";
+ string LocaleText3 = rm.GetString("Inf", culture);
+ MessageBox.Show(LocaleText, LocaleText3, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ }
+
+ public void NotTransSearch()
+ {
+ string s = "", ss = "";
+ str.Clear();
+ dup.Clear();
+ StreamReader fstr_in = new StreamReader(filename);
+ while ((s = fstr_in.ReadLine()) != null)
+ {
+ Console.WriteLine(s);
+ str.Add(s);
+ }
+ fstr_in.Close();
+ for (int i = 0; i <= str.Count - 1; i++)
+ {
+ if (i == str.Count - 1)
+ {
+ s = str[i].ToString();
+ if (s.StartsWith("["))
+ {
+ dup.Add(str[i]);
+ }
+ }
+ else
+ {
+ s = str[i].ToString();
+ ss = str[i + 1].ToString();
+ if ((s.StartsWith("[")) && (ss.StartsWith("[")))
+ {
+ dup.Add(str[i]);
+ }
+ }
+ }
+ ResourceManager rm;
+ string LocaleText;
+ if (_mainForm.LanguageComboBox.SelectedIndex == 0)
+ culture = CultureInfo.CreateSpecificCulture("en-EN");
+ if (_mainForm.LanguageComboBox.SelectedIndex == 1)
+ culture = CultureInfo.CreateSpecificCulture("ru-RU");
+ if (dup.Count > 0)
+ {
+ rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ LocaleText = rm.GetString("NotTransFound", culture);
+ _mainForm.InfMessageFindBox.Text = _mainForm.InfMessageFindBox.Text + LocaleText + "\r\n";
+ if (mode == 1)
+ {
+ StreamWriter fstr_out = new StreamWriter(filename + "_ntrans");
+ for (int i = 0; i <= dup.Count - 1; i++)
+ {
+ try
+ {
+ fstr_out.Write(dup[i] + "\r\n");
+ }
+ catch (IOException)
+ {
+ LocaleText = rm.GetString("NotWrite", culture);
+ string LocaleText2 = rm.GetString("Error", culture);
+ MessageBox.Show(LocaleText, LocaleText2, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ fstr_out.Close();
+ LocaleText = rm.GetString("Done", culture);
+ _mainForm.InfMessageFindBox.Text = _mainForm.InfMessageFindBox.Text + LocaleText + "\r\n";
+ string LocaleText3 = rm.GetString("Inf", culture);
+ MessageBox.Show(LocaleText, LocaleText3, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ else
+ {
+ //автоматический поиск и удаление не переведенных строк
+ }
+ }
+ else
+ {
+ rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ LocaleText = rm.GetString("NotTransNotFound", culture);
+ _mainForm.InfMessageFindBox.Text = _mainForm.InfMessageFindBox.Text + LocaleText + "\r\n";
+ string LocaleText3 = rm.GetString("Inf", culture);
+ MessageBox.Show(LocaleText, LocaleText3, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ }
+ public void CommentsSearch()
+ {
+ string s = "";
+ str.Clear();
+ dup.Clear();
+ StreamReader fstr_in = new StreamReader(filename);
+ while ((s = fstr_in.ReadLine()) != null)
+ {
+ Console.WriteLine(s);
+ str.Add(s);
+ }
+ fstr_in.Close();
+ for (int i = 0; i <= str.Count - 1; i++)
+ {
+ s = str[i].ToString();
+ if ((s.StartsWith(";")) && (s.Contains("[")))
+ {
+ dup.Add(str[i]);
+ }
+ }
+ ResourceManager rm;
+ string LocaleText;
+ if (_mainForm.LanguageComboBox.SelectedIndex == 0)
+ culture = CultureInfo.CreateSpecificCulture("en-EN");
+ if (_mainForm.LanguageComboBox.SelectedIndex == 1)
+ culture = CultureInfo.CreateSpecificCulture("ru-RU");
+ if (dup.Count > 0)
+ {
+ rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ LocaleText = rm.GetString("ComFound", culture);
+ _mainForm.InfMessageFindBox.Text = _mainForm.InfMessageFindBox.Text + LocaleText + "\r\n";
+ if (mode == 1)
+ {
+ StreamWriter fstr_out = new StreamWriter(filename + "_com");
+ for (int i = 0; i <= dup.Count - 1; i++)
+ {
+ try
+ {
+ fstr_out.Write(dup[i] + "\r\n");
+ }
+ catch (IOException)
+ {
+ LocaleText = rm.GetString("NotWrite", culture);
+ string LocaleText2 = rm.GetString("Error", culture);
+ MessageBox.Show(LocaleText, LocaleText2, MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return;
+ }
+ }
+ fstr_out.Close();
+ LocaleText = rm.GetString("Done", culture);
+ _mainForm.InfMessageFindBox.Text = _mainForm.InfMessageFindBox.Text + LocaleText + "\r\n";
+ string LocaleText3 = rm.GetString("Inf", culture);
+ MessageBox.Show(LocaleText, LocaleText3, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ else
+ {
+ //автоматический поиск и удаление закомментированных строк
+ }
+ }
+ else
+ {
+ rm = new ResourceManager("LangpackSuite.myRes", typeof(MainForm).Assembly);
+ LocaleText = rm.GetString("ComNotFound", culture);
+ _mainForm.InfMessageFindBox.Text = _mainForm.InfMessageFindBox.Text + LocaleText + "\r\n";
+ string LocaleText3 = rm.GetString("Inf", culture);
+ MessageBox.Show(LocaleText, LocaleText3, MessageBoxButtons.OK, MessageBoxIcon.Information);
+ }
+ }
+ }
+}
+
diff --git a/tools/Langpack Suite/app.config b/tools/Langpack Suite/app.config
new file mode 100644
index 0000000000..f76deb94ff
--- /dev/null
+++ b/tools/Langpack Suite/app.config
@@ -0,0 +1,3 @@
+<?xml version="1.0"?>
+<configuration>
+<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup></configuration>
diff --git a/tools/Langpack Suite/myRes.resx b/tools/Langpack Suite/myRes.resx
new file mode 100644
index 0000000000..1a7159acfd
--- /dev/null
+++ b/tools/Langpack Suite/myRes.resx
@@ -0,0 +1,324 @@
+<?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="ANSICheckBox" xml:space="preserve">
+ <value>ANSI Format for Core less 0.9.30</value>
+ </data>
+ <data name="AssignLang" xml:space="preserve">
+ <value>Langpack assigned...</value>
+ </data>
+ <data name="AssignLangBtn" xml:space="preserve">
+ <value>Assign</value>
+ </data>
+ <data name="AutoModeBtn" xml:space="preserve">
+ <value>Automatic</value>
+ </data>
+ <data name="ComFound" xml:space="preserve">
+ <value>Commented lines founded...</value>
+ </data>
+ <data name="CommentFindBtn" xml:space="preserve">
+ <value>Find Commented</value>
+ </data>
+ <data name="CommentMUIDCheckBox" xml:space="preserve">
+ <value>Comment MUID for Core less 0.10</value>
+ </data>
+ <data name="ComNotFound" xml:space="preserve">
+ <value>Commented lines not found!</value>
+ </data>
+ <data name="CoreNotFound" xml:space="preserve">
+ <value>File =CORE=.txt not found...</value>
+ </data>
+ <data name="CreateLangpackBtn" xml:space="preserve">
+ <value>Create Langpack</value>
+ </data>
+ <data name="DbtoolNotFound" xml:space="preserve">
+ <value>File =dbtool=.txt not found...</value>
+ </data>
+ <data name="Done" xml:space="preserve">
+ <value>Done!</value>
+ </data>
+ <data name="DupesFindBtn" xml:space="preserve">
+ <value>Find Dupes</value>
+ </data>
+ <data name="DupesNotFound" xml:space="preserve">
+ <value>File =DUPES=.txt not found...</value>
+ </data>
+ <data name="DupFound" xml:space="preserve">
+ <value>Dupes founded...</value>
+ </data>
+ <data name="DupNotFound" xml:space="preserve">
+ <value>Dupes not found!</value>
+ </data>
+ <data name="DupStop" xml:space="preserve">
+ <value>Working stoped.</value>
+ </data>
+ <data name="Error" xml:space="preserve">
+ <value>Error</value>
+ </data>
+ <data name="File2NotFound" xml:space="preserve">
+ <value>.txt not found...</value>
+ </data>
+ <data name="FileNotFound" xml:space="preserve">
+ <value> not found...</value>
+ </data>
+ <data name="FileText" xml:space="preserve">
+ <value>File </value>
+ </data>
+ <data name="FindLang" xml:space="preserve">
+ <value>Finding Langpack...</value>
+ </data>
+ <data name="GenStop" xml:space="preserve">
+ <value>Generation stopped.</value>
+ </data>
+ <data name="GenText" xml:space="preserve">
+ <value>Generating langpack...</value>
+ </data>
+ <data name="groupBox1" xml:space="preserve">
+ <value>Assign Langpack File</value>
+ </data>
+ <data name="groupBox2" xml:space="preserve">
+ <value>Output File</value>
+ </data>
+ <data name="groupBox4" xml:space="preserve">
+ <value>Old Core Support</value>
+ </data>
+ <data name="groupBox5" xml:space="preserve">
+ <value>Working mode</value>
+ </data>
+ <data name="HeadNotFound" xml:space="preserve">
+ <value>File =HEAD=.txt not found...</value>
+ </data>
+ <data name="Inf" xml:space="preserve">
+ <value>Information</value>
+ </data>
+ <data name="label1" xml:space="preserve">
+ <value>Langpack File Name:</value>
+ </data>
+ <data name="label2" xml:space="preserve">
+ <value>Name:</value>
+ </data>
+ <data name="label3" xml:space="preserve">
+ <value>LinkList.txt file contains links to the translation files of different
+plugins and can be used in any download manager. Downloaded
+files can be used to generate a complete localization or consisting
+only from localization of plugins used by you (information is taken
+from the version info file, if available).</value>
+ </data>
+ <data name="label4" xml:space="preserve">
+ <value>URL of SVN:</value>
+ </data>
+ <data name="LangNotFound" xml:space="preserve">
+ <value>Langpack not Founded...</value>
+ </data>
+ <data name="LangPathLbl" xml:space="preserve">
+ <value>not assigned</value>
+ </data>
+ <data name="LanguageLbl" xml:space="preserve">
+ <value>Language:</value>
+ </data>
+ <data name="LinkListGen" xml:space="preserve">
+ <value>Generating LinkList...</value>
+ </data>
+ <data name="LinkListGenBtn" xml:space="preserve">
+ <value>Create File</value>
+ </data>
+ <data name="ManualModeBtn" xml:space="preserve">
+ <value>Manual</value>
+ </data>
+ <data name="NotOpen" xml:space="preserve">
+ <value>Can not open file.</value>
+ </data>
+ <data name="NotTransFound" xml:space="preserve">
+ <value>Not Translated lines founded...</value>
+ </data>
+ <data name="NotTranslFindBtn" xml:space="preserve">
+ <value>Find Not Translated</value>
+ </data>
+ <data name="NotTransNotFound" xml:space="preserve">
+ <value>Not translated lines not found!</value>
+ </data>
+ <data name="NotWrite" xml:space="preserve">
+ <value>Can not write file.</value>
+ </data>
+ <data name="OwnFileCheckBox" xml:space="preserve">
+ <value>Add your own file to Langpack</value>
+ </data>
+ <data name="PlugLink" xml:space="preserve">
+ <value>Writing files from Plugins folder...</value>
+ </data>
+ <data name="PlugLinkNotFound" xml:space="preserve">
+ <value>Subfolder Plugins not found...</value>
+ </data>
+ <data name="RootLink" xml:space="preserve">
+ <value>Writing files from Root folder...</value>
+ </data>
+ <data name="SelectOwnFileBtn" xml:space="preserve">
+ <value>Select</value>
+ </data>
+ <data name="tabPage1" xml:space="preserve">
+ <value>Generator</value>
+ </data>
+ <data name="tabPage2" xml:space="preserve">
+ <value>LinkListGen</value>
+ </data>
+ <data name="tabPage3" xml:space="preserve">
+ <value>Dupes Search</value>
+ </data>
+ <data name="VersionNotFound" xml:space="preserve">
+ <value>File =VERSION=.txt not found...</value>
+ </data>
+ <data name="VIGen" xml:space="preserve">
+ <value>File VersionInfo.txt founded, making shot langpack...</value>
+ </data>
+ <data name="WeatherLink" xml:space="preserve">
+ <value>Writing files from Weather folder...</value>
+ </data>
+ <data name="WeatherLinkNotFound" xml:space="preserve">
+ <value>Subfolder Weather not found...</value>
+ </data>
+ <data name="WOVIGen" xml:space="preserve">
+ <value>VersionInfo.txt not found, making full langpack...</value>
+ </data>
+ <data name="WrongSelect" xml:space="preserve">
+ <value>Selected wrong directory...</value>
+ </data>
+ <data name="GetVICheckBox" xml:space="preserve">
+ <value>Get VersionInfo from Internet or type full local path</value>
+ </data>
+ <data name="label6" xml:space="preserve">
+ <value>e.g. http://www.miranda-vi.org/report/mataes</value>
+ </data>
+ <data name="tipper" xml:space="preserve">
+ <value>Command line arguments list</value>
+ </data>
+ <data name="VarHead" xml:space="preserve">
+ <value>Arguments</value>
+ </data>
+ <data name="VarText" xml:space="preserve">
+ <value>\q - silent generate
+\n - Langpack file name
+\o - Path for adding own File
+\c - comment muid's
+\a - ANSI format
+\u - link to VI from miranda-vi.org or full local path
+\l - Output Langpack path
+
+Example, LangpackSuite.exe \q \nLang_Test \o"My Strings.txt" \uD:\Miranda\VersionInfo.txt</value>
+ </data>
+</root> \ No newline at end of file
diff --git a/tools/Langpack Suite/myRes.ru-RU.resx b/tools/Langpack Suite/myRes.ru-RU.resx
new file mode 100644
index 0000000000..d31cc29f13
--- /dev/null
+++ b/tools/Langpack Suite/myRes.ru-RU.resx
@@ -0,0 +1,326 @@
+<?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="ANSICheckBox" xml:space="preserve">
+ <value>Сохранять в ANSI формате для ядер меньше 0.9.30</value>
+ </data>
+ <data name="AssignLang" xml:space="preserve">
+ <value>Ленгпак выбран...</value>
+ </data>
+ <data name="AssignLangBtn" xml:space="preserve">
+ <value>Выбрать</value>
+ </data>
+ <data name="AutoModeBtn" xml:space="preserve">
+ <value>Автоматический</value>
+ </data>
+ <data name="ComFound" xml:space="preserve">
+ <value>Найдены закомментированные строки...</value>
+ </data>
+ <data name="CommentFindBtn" xml:space="preserve">
+ <value>Поиск закомментированного</value>
+ </data>
+ <data name="CommentMUIDCheckBox" xml:space="preserve">
+ <value>Комментировать MUID для версий ядер меньше 0.10</value>
+ </data>
+ <data name="ComNotFound" xml:space="preserve">
+ <value>Закомментированные строки не найдены!</value>
+ </data>
+ <data name="CoreNotFound" xml:space="preserve">
+ <value>Файл =CORE=.txt не найден...</value>
+ </data>
+ <data name="CreateLangpackBtn" xml:space="preserve">
+ <value>Сгенерировать ленгпак</value>
+ </data>
+ <data name="DbtoolNotFound" xml:space="preserve">
+ <value>Файл =dbtool=.txt не найден...</value>
+ </data>
+ <data name="Done" xml:space="preserve">
+ <value>Выполнено!</value>
+ </data>
+ <data name="DupesFindBtn" xml:space="preserve">
+ <value>Поиск дублей</value>
+ </data>
+ <data name="DupesNotFound" xml:space="preserve">
+ <value>Файл =DUPES=.txt не найден...</value>
+ </data>
+ <data name="DupFound" xml:space="preserve">
+ <value>Дубли найдены...</value>
+ </data>
+ <data name="DupNotFound" xml:space="preserve">
+ <value>Дубли не найдены!</value>
+ </data>
+ <data name="DupStop" xml:space="preserve">
+ <value>Работа остановлена.</value>
+ </data>
+ <data name="Error" xml:space="preserve">
+ <value>Ошибка</value>
+ </data>
+ <data name="File2NotFound" xml:space="preserve">
+ <value>.txt не найден...</value>
+ </data>
+ <data name="FileNotFound" xml:space="preserve">
+ <value> не найден...</value>
+ </data>
+ <data name="FileText" xml:space="preserve">
+ <value>Файл </value>
+ </data>
+ <data name="FindLang" xml:space="preserve">
+ <value>Поиск ленгпака...</value>
+ </data>
+ <data name="GenStop" xml:space="preserve">
+ <value>Генерация остановлена.</value>
+ </data>
+ <data name="GenText" xml:space="preserve">
+ <value>Генерация ленгпака...</value>
+ </data>
+ <data name="groupBox1" xml:space="preserve">
+ <value>Выбор файла ленгпака</value>
+ </data>
+ <data name="groupBox2" xml:space="preserve">
+ <value>Файл результата</value>
+ </data>
+ <data name="groupBox4" xml:space="preserve">
+ <value>Поддержка старых версий ядра</value>
+ </data>
+ <data name="groupBox5" xml:space="preserve">
+ <value>Режим работы</value>
+ </data>
+ <data name="HeadNotFound" xml:space="preserve">
+ <value>Файл =HEAD=.txt не найден...</value>
+ </data>
+ <data name="Inf" xml:space="preserve">
+ <value>Информация</value>
+ </data>
+ <data name="label1" xml:space="preserve">
+ <value>Название ленгпака:</value>
+ </data>
+ <data name="label2" xml:space="preserve">
+ <value>Имя:</value>
+ </data>
+ <data name="label3" xml:space="preserve">
+ <value>Файл LinkList.txt содержит ссылки на отдельные файлы
+локализации и может быть использован в любой программе
+для загрузки файлов из сети. Загруженные файлы могут
+быть использованы для генерации полной локализации или
+состоящей только из используемых Вами модулей
+(информация будет взята из version info файла, при его
+наличии).</value>
+ </data>
+ <data name="label4" xml:space="preserve">
+ <value>URL сайта с исходниками:</value>
+ </data>
+ <data name="LangNotFound" xml:space="preserve">
+ <value>Ленгпак не найден...</value>
+ </data>
+ <data name="LangPathLbl" xml:space="preserve">
+ <value>не выбран</value>
+ </data>
+ <data name="LanguageLbl" xml:space="preserve">
+ <value>Язык интерфейса:</value>
+ </data>
+ <data name="LinkListGen" xml:space="preserve">
+ <value>Генерация LinkList...</value>
+ </data>
+ <data name="LinkListGenBtn" xml:space="preserve">
+ <value>Создать файл</value>
+ </data>
+ <data name="ManualModeBtn" xml:space="preserve">
+ <value>Ручной</value>
+ </data>
+ <data name="NotOpen" xml:space="preserve">
+ <value>Невозможно открыть файл.</value>
+ </data>
+ <data name="NotTransFound" xml:space="preserve">
+ <value>Найдены непереведённые строки...</value>
+ </data>
+ <data name="NotTranslFindBtn" xml:space="preserve">
+ <value>Поиск непереведенного</value>
+ </data>
+ <data name="NotTransNotFound" xml:space="preserve">
+ <value>Непереведённые строки не найдены!</value>
+ </data>
+ <data name="NotWrite" xml:space="preserve">
+ <value>Невозможно записать файл.</value>
+ </data>
+ <data name="OwnFileCheckBox" xml:space="preserve">
+ <value>Добавить свой файл в ленгпак</value>
+ </data>
+ <data name="PlugLink" xml:space="preserve">
+ <value>Запись файлов из папки Plugins...</value>
+ </data>
+ <data name="RootLink" xml:space="preserve">
+ <value>Запись файлов из корневой папки...</value>
+ </data>
+ <data name="SelectOwnFileBtn" xml:space="preserve">
+ <value>Выбрать</value>
+ </data>
+ <data name="tabPage1" xml:space="preserve">
+ <value>Генератор</value>
+ </data>
+ <data name="tabPage2" xml:space="preserve">
+ <value>Список файлов</value>
+ </data>
+ <data name="tabPage3" xml:space="preserve">
+ <value>Поиск дублей</value>
+ </data>
+ <data name="VersionNotFound" xml:space="preserve">
+ <value>Файл =VERSION=.txt не найден...</value>
+ </data>
+ <data name="VIGen" xml:space="preserve">
+ <value>Найден файл VersionInfo.txt, будет сгенерирован короткий ленгпак...</value>
+ </data>
+ <data name="WeatherLink" xml:space="preserve">
+ <value>Запись файлов из папки Weather...</value>
+ </data>
+ <data name="WOVIGen" xml:space="preserve">
+ <value>VersionInfo.txt не найден, будет сгенерирован полный ленгпак...</value>
+ </data>
+ <data name="WrongSelect" xml:space="preserve">
+ <value>Папка выбрана неверно...</value>
+ </data>
+ <data name="PlugLinkNotFound" xml:space="preserve">
+ <value>Подпапка Plugins не найдена...</value>
+ </data>
+ <data name="WeatherLinkNotFound" xml:space="preserve">
+ <value>Подпапка Weather не найдена...</value>
+ </data>
+ <data name="GetVICheckBox" xml:space="preserve">
+ <value>Скачать файл ВИ с Интернета или полный путь</value>
+ </data>
+ <data name="label6" xml:space="preserve">
+ <value>например, http://www.miranda-vi.org/report/mataes</value>
+ </data>
+ <data name="tipper" xml:space="preserve">
+ <value>Список аргументов командной строки</value>
+ </data>
+ <data name="VarHead" xml:space="preserve">
+ <value>Аргументы</value>
+ </data>
+ <data name="VarText" xml:space="preserve">
+ <value>\q - тихая генерация
+\n - имя файла ленгпака
+\o - путь к файлу для включения в ленгпак
+\c - комментировать muid'ы
+\a - ANSI формат ленгпака
+\u - ссылка на ВИ с miranda-vi.org или полный локальный путь
+\l - путь выходного файла ленгпака
+
+Пример, LangpackSuite.exe \q \nLang_Test \o"My Strings.txt" \uD:\Miranda\VersionInfo.txt</value>
+ </data>
+</root> \ No newline at end of file
diff --git a/tools/Langpack Suite/res/miranda_logo.ico b/tools/Langpack Suite/res/miranda_logo.ico
new file mode 100644
index 0000000000..e36ab7bb46
--- /dev/null
+++ b/tools/Langpack Suite/res/miranda_logo.ico
Binary files differ