From b630b8222027387a769605d8feac4cc0f406a50b Mon Sep 17 00:00:00 2001 From: Kirill Volinsky Date: Mon, 21 May 2012 07:42:17 +0000 Subject: added Langpack Suite git-svn-id: http://svn.miranda-ng.org/main/trunk@115 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- tools/Langpack Suite/Form1.Designer.cs | 580 +++++++++++++ tools/Langpack Suite/Form1.cs | 943 +++++++++++++++++++++ tools/Langpack Suite/Form1.resx | 520 ++++++++++++ tools/Langpack Suite/LangpackSuite.csproj | 151 ++++ tools/Langpack Suite/LangpackSuite.sln | 20 + tools/Langpack Suite/Program.cs | 21 + tools/Langpack Suite/Properties/AssemblyInfo.cs | 36 + .../Properties/Resources.Designer.cs | 63 ++ tools/Langpack Suite/Properties/Resources.resx | 117 +++ .../Langpack Suite/Properties/Settings.Designer.cs | 26 + tools/Langpack Suite/Properties/Settings.settings | 7 + tools/Langpack Suite/Searcher.cs | 280 ++++++ tools/Langpack Suite/app.config | 3 + tools/Langpack Suite/myRes.resx | 324 +++++++ tools/Langpack Suite/myRes.ru-RU.resx | 326 +++++++ tools/Langpack Suite/res/miranda_logo.ico | Bin 0 -> 22486 bytes 16 files changed, 3417 insertions(+) create mode 100644 tools/Langpack Suite/Form1.Designer.cs create mode 100644 tools/Langpack Suite/Form1.cs create mode 100644 tools/Langpack Suite/Form1.resx create mode 100644 tools/Langpack Suite/LangpackSuite.csproj create mode 100644 tools/Langpack Suite/LangpackSuite.sln create mode 100644 tools/Langpack Suite/Program.cs create mode 100644 tools/Langpack Suite/Properties/AssemblyInfo.cs create mode 100644 tools/Langpack Suite/Properties/Resources.Designer.cs create mode 100644 tools/Langpack Suite/Properties/Resources.resx create mode 100644 tools/Langpack Suite/Properties/Settings.Designer.cs create mode 100644 tools/Langpack Suite/Properties/Settings.settings create mode 100644 tools/Langpack Suite/Searcher.cs create mode 100644 tools/Langpack Suite/app.config create mode 100644 tools/Langpack Suite/myRes.resx create mode 100644 tools/Langpack Suite/myRes.ru-RU.resx create mode 100644 tools/Langpack Suite/res/miranda_logo.ico 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 + { + /// + /// Требуется переменная конструктора. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Освободить все используемые ресурсы. + /// + /// истинно, если управляемый ресурс должен быть удален; иначе ложно. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Код, автоматически созданный конструктором форм Windows + + /// + /// Обязательный метод для поддержки конструктора - не изменяйте + /// содержимое данного метода при помощи редактора кода. + /// + 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 str = new List(); + 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 str = new List(); + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 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). + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsEAAA7BAbiRa+0AAAGfSURBVDhPpVPNSoJREPUp6iV6iWjbIkqkQEytFhFFGSpl + iYniwjJCk0BaSKYEVrRqUdAmbJFZumkRFlQShQUFIVFw6ox8H1/+ETQw3GHmzrlzZubqdE0kvp1FZKOq + tJvdq/MzQe/OoMt+hk5HXpQ2fYy1BLIvnaDDeCBJvb5rDARLorTpY4x3GoIw0NazJwnWcBkzqU9R52ZF + lD7G2nt26kFYGtF5YTz2jLsXIFMEXIlHUdr0jYaL0HsLcvcXHfJjiXxlKwuRpzdgKnQAT+pWbApjRt9P + b6aOpSdChR1mk8iTJUePqq+9fwCTgST8yYLY9DFmmUujz30qOTIdlsLXWT4BZuMlKZnCU2ubbKsqAHOE + Ri0AOR9eVgF4am2zI4axUE76oALUUvDufgnvWjFPL8vrk2s3QlelwD5om0gA/05ZOCtC2+qMwhbJYTB4 + pS6Wug/aMU6sv8KTrqijU0Y65EpgZPFCAOrGSCTtIllWHmCL3WPYuw+TMyFqsG/DsHDeeJGUUpRV7p7P + oz9QVFeZNn0tV1kB+ddn0n6Sv37nb56FK3JTt4m6AAAAAElFTkSuQmCC + + + + + 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 + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// + /////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA//////// + AAD///////8AAP/j//+P/wAA/8f//8P/AAD/j///4f8AAP4P///w/wAA/h////B/AAD8P///+D8AAPg/ + ///8HwAA8H/P9/wfAADwf4/z/A8AAOB/j/H+DwAA4H8P8P4HAADAfg/wfgcAAMB8D/A8BwAAwAAP8AAD + AADAAAfgAAMAAIAAAAAAAwAAgAAAAAABAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAEAAAAA + AAAAAQAAAAAAAAABAAAAAAAAAAEAAIAAAAAAAwAA///AB///AAD//+AP//8AAP//8B///wAA///4P/// + AAD///////8AAP///////wAA////////AAD///////8AAP///////wAA////////AAD///////8AAP// + /////wAA////////AAAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwCAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAADMAgAAnWcRRYu8AAAMEQAAAAAAAAAAAAAAAAAAAAAAABcSCT2LyDEx + tmQAAMwCAAAAAAAAAAAAAAAAAADMASkwsp8Aptj+HmyHpwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADWX + u7wAlML+KSyYlQAAzAEAAAAAAAAAAAAAmGoArN//AJfC8QAAAAoAAMwDOzuuSwAAAAIAAAAANzetTgAA + egUAAAAGALHj+QCWxP82NrBgAAAAAAAAzAgTbbP3Dc///zdjdoQAAAAALkehrQCXxvsAAAwRAAAAAACf + 0vskNnukAAAAAF6Ws5cNz///BVCP8AAAmQgAAK9TAML1/w3P//8bSHK7J0mSwADB9P8Aq9r+AAAWGgAA + AAIAtun9ALPi/yA9fLsjapvDDc///wCn1v8AAH5CPEDKqg3P//8Nz///Cc7//wvO//8Ax/r/AML0/yUl + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj4+PA39/ + fwa/v78BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+/vwF/f38Hj4+PAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAj4+PAw8R + Eh4APk5zADxLXV9fXwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX3R5CwBi + e4IAFx1eDw8PH39/fwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE9P + TwgALzpcAKrV3wCgydUPFxkgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAD1VmTgDH+foAcIzBAAcISD8/PwkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAvLy8KAFVrhADJ+/sAvu7zABkfP6+vrwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAACvr68BAHqYiADM//8ApM3mABMXYC8vLwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAX19fBgBZb4EAy/7+AMz//wBOYoJvb28GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABveHsJALLf0QDM//8AqtXrABAUW19fXwcAAAAAAAAAAAAA + AAAAAAAAAAAAAK+vrwEAOEZZAMr8+wDM//8Am8LTDw8PGAAAAAAAAAAAAAAAAAAAAAB/f38Ef39/AwAA + AAAAAAAAAAAAAAAAAACPj48Df39/BQAAAAAAAAAAAAAAAAAAAAAfW2o/AMv+/gDM//8Amb/fAAIDPa+v + rwEAAAAAAAAAAAAAAAAAAAAAHy0wHgC35ecAzP//AMz//wAwPGWfn58CAAAAAAAAAAAAAAAALy8vDQBN + YX0ADxI9v7+/AQAAAAAAAAAAAAAAAAA9TVcAJS5rLy8vDgAAAAAAAAAAAAAAAJ+fnwIAnsW3AMz//wDM + //8Ra4K1Dw8PGQAAAAAAAAAAAAAAAI+PjwMAb4uUAMz//wDM//8Ap9HjDw8PIAAAAAAAAAAAAAAAAF9f + XwUAXHODAMz//wAsN3O/v78CAAAAAAAAAAAAAAAAAIaomgCz4PAADRBYX19fBgAAAAAAAAAAAAAAAB9j + dE8AzP//AMz//yLL9foSHyJhf39/AwAAAAAAAAAAHzA1HgDF9vMAzP//AMz//wBzkLs/Pz8PAAAAAAAA + AACPj48DADI+VgDH+fkAzP//ADM/fK+vrwMAAAAAAAAAAAAAAAAAZn+MAMz//wCQtNkAAwQ+b29vAwAA + AAAAAAAAX25yEwDM//8AzP//Mtb//zF7jr4fHx8XAAAAAAAAAAAAU2hyAMz//wDM//8AzP//AHWTxg8P + DyCvr68CT09PCQAsN1cAvu7xAMz//wDM//8AQVGIf39/BAAAAAAAAAAAAAAAAABzkJMAzP//AMz//wB+ + nc0AAwRDT09PCq+vrwIPHyMmAMz//wDM//9J2v//XM7q9AACAz4AAAAAn5+fAgeStbcOzv//CM3//wDM + //8AwvL5AEVWnwAiK2gAYXmfAMX2+ADM//8AzP//AMz//wBOYph/f38IAAAAAAAAAAC/v78BAImrpADM + //8AzP//AMz//wCexeMAN0WMACQtaQCMr8MAzP//Es///2Df//+E5v//CSs0c7+/vwNPT08MHMDp4jfX + //8z1v//HNH//wDM//8AzP//AMz//wDM//8Kzv//FMz6/QTM//8AzP//AGZ/xgAAAEoAAAA/AAAAPwAA + AEIAmL/RAMz//wCw3PYAzP//AMz//wDM//8AzP//AMz//wLM//9C2f//dOP//5nq//8nWWanX19fDAAA + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAGNjYwM/Pz8JPz8/CW9vbwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAb29vAj8/Pwo/Pz8KY2NjAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAABfX18EAAAAFAAGCDcALTlkACs2QQ8PDwYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzdBFABCU18AEBRSAAAANwAA + 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 + 0P8AIMD/ALTz/gDM//8Z0f//N9f+/g9ewP8AANf/AADy/wAr6/4Asvr/AMz//xHP/v4o1P//QNj//1jd + /v5w4v//h+f//6Ds/v638P//1Pb//zNTxP4AAMLuAAAASQUFnq0ICvn+A4b1/oHl/v668f7+t/D+/rTw + /v6y7/7+r+/+/q3u/v6h7P7+RMb2/glB2P4ICer+CAj7/ggI/P4EWu7+AMv+/gDL/v4Ay/7+AMv+/gDJ + /P4AiM3+AFC0/gBkxP4AtPH+AMv+/g7O/v492P7+Tdv+/glIvf4HB+f+CAj+/ggI/P4IJPP+Bp/3/h3R + /v421v7+Tdv+/mXg/v595f7+lOn+/q3u/v7F8/7+uuH2/goQyf4HB9juAAAAShkZn60oKP7/JDb1/h6y + +f+d6///0vb+/tL2///O9f//tvD+/mrY+/8eiuf/ITLd/ycn9f4oKP7/KCj+/igo/v8cT+7/AMv+/gDM + //8AzP//AMv+/gDM//8AzP//AMv+/gDM//8AzP//Cs3+/kPZ//9X3f//U9z+/hY7t/8mJvD/KCj//ygo + /v4oKP7/Jyj2/xpx8v4gvfr/Qtn//2vh/v6K5///ouz//7vx/v605Pn/P1zW/yYm8P4jI97vAAAASi0t + n61JSf//SUn+/kJS9f8sifL/QbX1/l/I+P9LsvL/MoXo/jpV4/9FRvD/SEj8/0lJ/v5JSf//SUn+/klJ + //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== + + + \ 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 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {6F20B52F-64EA-4A78-9149-6C36CE2AF043} + WinExe + Properties + LangpackSuite + LangpackSuite + v4.0 + Client + 512 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + res/miranda_logo.ico + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + True + True + myRes.resx + + + True + True + myRes.ru-RU.resx + + + + + + Form1.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + ResXFileCodeGenerator + myRes.Designer.cs + + + ResXFileCodeGenerator + myRes.ru-RU.Designer.cs + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + False + Клиентский профиль Microsoft .NET Framework 4 %28x86 и x64%29 + true + + + False + Клиентский профиль .NET Framework 3.5 SP1 + false + + + False + .NET Framework 3.5 SP1 + false + + + False + Установщик Windows 3.1 + true + + + + + \ 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 + { + /// + /// Главная точка входа для приложения. + /// + [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 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.239 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +namespace LangpackSuite.Properties { + using System; + + + /// + /// Класс ресурса со строгой типизацией для поиска локализованных строк и т.д. + /// + // Этот класс создан автоматически классом 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() { + } + + /// + /// Возвращает кэшированный экземпляр ResourceManager, использованный этим классом. + /// + [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; + } + } + + /// + /// Перезаписывает свойство CurrentUICulture текущего потока для всех + /// обращений к ресурсу с помощью этого класса ресурса со строгой типизацией. + /// + [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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ 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 @@ +//------------------------------------------------------------------------------ +// +// Этот код создан программой. +// Исполняемая версия:4.0.30319.239 +// +// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае +// повторной генерации кода. +// +//------------------------------------------------------------------------------ + +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 @@ + + + + + + + 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 str = new List(); + List dup = new List(); + 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 @@ + + + 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ANSI Format for Core less 0.9.30 + + + Langpack assigned... + + + Assign + + + Automatic + + + Commented lines founded... + + + Find Commented + + + Comment MUID for Core less 0.10 + + + Commented lines not found! + + + File =CORE=.txt not found... + + + Create Langpack + + + File =dbtool=.txt not found... + + + Done! + + + Find Dupes + + + File =DUPES=.txt not found... + + + Dupes founded... + + + Dupes not found! + + + Working stoped. + + + Error + + + .txt not found... + + + not found... + + + File + + + Finding Langpack... + + + Generation stopped. + + + Generating langpack... + + + Assign Langpack File + + + Output File + + + Old Core Support + + + Working mode + + + File =HEAD=.txt not found... + + + Information + + + Langpack File Name: + + + Name: + + + 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). + + + URL of SVN: + + + Langpack not Founded... + + + not assigned + + + Language: + + + Generating LinkList... + + + Create File + + + Manual + + + Can not open file. + + + Not Translated lines founded... + + + Find Not Translated + + + Not translated lines not found! + + + Can not write file. + + + Add your own file to Langpack + + + Writing files from Plugins folder... + + + Subfolder Plugins not found... + + + Writing files from Root folder... + + + Select + + + Generator + + + LinkListGen + + + Dupes Search + + + File =VERSION=.txt not found... + + + File VersionInfo.txt founded, making shot langpack... + + + Writing files from Weather folder... + + + Subfolder Weather not found... + + + VersionInfo.txt not found, making full langpack... + + + Selected wrong directory... + + + Get VersionInfo from Internet or type full local path + + + e.g. http://www.miranda-vi.org/report/mataes + + + Command line arguments list + + + Arguments + + + \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 + + \ 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 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Сохранять в ANSI формате для ядер меньше 0.9.30 + + + Ленгпак выбран... + + + Выбрать + + + Автоматический + + + Найдены закомментированные строки... + + + Поиск закомментированного + + + Комментировать MUID для версий ядер меньше 0.10 + + + Закомментированные строки не найдены! + + + Файл =CORE=.txt не найден... + + + Сгенерировать ленгпак + + + Файл =dbtool=.txt не найден... + + + Выполнено! + + + Поиск дублей + + + Файл =DUPES=.txt не найден... + + + Дубли найдены... + + + Дубли не найдены! + + + Работа остановлена. + + + Ошибка + + + .txt не найден... + + + не найден... + + + Файл + + + Поиск ленгпака... + + + Генерация остановлена. + + + Генерация ленгпака... + + + Выбор файла ленгпака + + + Файл результата + + + Поддержка старых версий ядра + + + Режим работы + + + Файл =HEAD=.txt не найден... + + + Информация + + + Название ленгпака: + + + Имя: + + + Файл LinkList.txt содержит ссылки на отдельные файлы +локализации и может быть использован в любой программе +для загрузки файлов из сети. Загруженные файлы могут +быть использованы для генерации полной локализации или +состоящей только из используемых Вами модулей +(информация будет взята из version info файла, при его +наличии). + + + URL сайта с исходниками: + + + Ленгпак не найден... + + + не выбран + + + Язык интерфейса: + + + Генерация LinkList... + + + Создать файл + + + Ручной + + + Невозможно открыть файл. + + + Найдены непереведённые строки... + + + Поиск непереведенного + + + Непереведённые строки не найдены! + + + Невозможно записать файл. + + + Добавить свой файл в ленгпак + + + Запись файлов из папки Plugins... + + + Запись файлов из корневой папки... + + + Выбрать + + + Генератор + + + Список файлов + + + Поиск дублей + + + Файл =VERSION=.txt не найден... + + + Найден файл VersionInfo.txt, будет сгенерирован короткий ленгпак... + + + Запись файлов из папки Weather... + + + VersionInfo.txt не найден, будет сгенерирован полный ленгпак... + + + Папка выбрана неверно... + + + Подпапка Plugins не найдена... + + + Подпапка Weather не найдена... + + + Скачать файл ВИ с Интернета или полный путь + + + например, http://www.miranda-vi.org/report/mataes + + + Список аргументов командной строки + + + Аргументы + + + \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 + + \ 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 Binary files /dev/null and b/tools/Langpack Suite/res/miranda_logo.ico differ -- cgit v1.2.3