diff --git a/.gitmodules b/.gitmodules
deleted file mode 100644
index 554cc07..0000000
--- a/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "Site"]
- path = Site
- url = ssh://git@file.tsanie.us:9022/tsanie/fleet-contractor-site.git
diff --git a/ConsoleApplication1/App.config b/ConsoleApplication1/App.config
index c1ce669..2047533 100644
--- a/ConsoleApplication1/App.config
+++ b/ConsoleApplication1/App.config
@@ -1,7 +1,7 @@
-
+
@@ -11,4 +11,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ConsoleApplication1/ConsoleApplication1.csproj b/ConsoleApplication1/ConsoleApplication1.csproj
index b33b0ee..e8cb129 100644
--- a/ConsoleApplication1/ConsoleApplication1.csproj
+++ b/ConsoleApplication1/ConsoleApplication1.csproj
@@ -9,9 +9,24 @@
Properties
ConsoleApplication1
ConsoleApplication1
- v4.7.1
+ v4.7.2
512
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
AnyCPU
@@ -34,6 +49,18 @@
false
+
+ ..\Reflib\FIC\FICBLC.dll
+
+
+ ..\Reflib\FIC\FICIntf.dll
+
+
+ ..\Reflib\FIC\FICIntfAdv.dll
+
+
+ ..\Reflib\FIC\FICModels.dll
+
..\Reflib\FICore.dll
@@ -80,6 +107,18 @@
IronIntelContractorSiteLib
+
+
+ False
+ Microsoft .NET Framework 4.7.2 %28x86 和 x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 17, 17
+
+
+ 87, 17
+
+
\ No newline at end of file
diff --git a/LanguageExtractTool/Form1.Designer.cs b/LanguageExtractTool/Form1.Designer.cs
new file mode 100644
index 0000000..a34b267
--- /dev/null
+++ b/LanguageExtractTool/Form1.Designer.cs
@@ -0,0 +1,143 @@
+namespace LanguageExtractTool
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.label1 = new System.Windows.Forms.Label();
+ this.txt_src = new System.Windows.Forms.TextBox();
+ this.label2 = new System.Windows.Forms.Label();
+ this.txt_destdir = new System.Windows.Forms.TextBox();
+ this.button1 = new System.Windows.Forms.Button();
+ this.button2 = new System.Windows.Forms.Button();
+ this.button3 = new System.Windows.Forms.Button();
+ this.fbd = new System.Windows.Forms.FolderBrowserDialog();
+ this.ofd = new System.Windows.Forms.OpenFileDialog();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(63, 38);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(43, 13);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "源文件";
+ //
+ // txt_src
+ //
+ this.txt_src.Location = new System.Drawing.Point(114, 35);
+ this.txt_src.Name = "txt_src";
+ this.txt_src.Size = new System.Drawing.Size(362, 20);
+ this.txt_src.TabIndex = 1;
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(39, 91);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(67, 13);
+ this.label2.TabIndex = 2;
+ this.label2.Text = "目标文件夹";
+ //
+ // txt_destdir
+ //
+ this.txt_destdir.Location = new System.Drawing.Point(113, 91);
+ this.txt_destdir.Name = "txt_destdir";
+ this.txt_destdir.Size = new System.Drawing.Size(363, 20);
+ this.txt_destdir.TabIndex = 3;
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(482, 33);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(116, 23);
+ this.button1.TabIndex = 4;
+ this.button1.Text = "选择源文件";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // button2
+ //
+ this.button2.Location = new System.Drawing.Point(482, 91);
+ this.button2.Name = "button2";
+ this.button2.Size = new System.Drawing.Size(116, 23);
+ this.button2.TabIndex = 5;
+ this.button2.Text = "选择目标文件夹";
+ this.button2.UseVisualStyleBackColor = true;
+ this.button2.Click += new System.EventHandler(this.button2_Click);
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(268, 156);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(75, 23);
+ this.button3.TabIndex = 6;
+ this.button3.Text = "开始提取";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // ofd
+ //
+ this.ofd.Filter = "xml files|*.xml|All files|*.*";
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(614, 193);
+ this.Controls.Add(this.button3);
+ this.Controls.Add(this.button2);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.txt_destdir);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.txt_src);
+ this.Controls.Add(this.label1);
+ this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
+ this.MaximizeBox = false;
+ this.Name = "Form1";
+ this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+ this.Text = "提取Fleet多语言文件";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox txt_src;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.TextBox txt_destdir;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.Button button2;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.FolderBrowserDialog fbd;
+ private System.Windows.Forms.OpenFileDialog ofd;
+ }
+}
+
diff --git a/LanguageExtractTool/Form1.cs b/LanguageExtractTool/Form1.cs
new file mode 100644
index 0000000..cf7d13c
--- /dev/null
+++ b/LanguageExtractTool/Form1.cs
@@ -0,0 +1,160 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Xml;
+using System.IO;
+using Newtonsoft.Json;
+
+namespace LanguageExtractTool
+{
+ public partial class Form1 : Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+
+ //this.txt_src.Text = @"E:\IronIntel\Contractor2.0\Language\contractor_res.xml";
+ //this.txt_destdir.Text = @"E:\IronIntel\Contractor2.0\Contractor\Site\Languages";
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ if (ofd.ShowDialog() == DialogResult.OK)
+ {
+ txt_src.Text = ofd.FileName;
+ }
+ }
+
+ private void button2_Click(object sender, EventArgs e)
+ {
+ if (fbd.ShowDialog() == DialogResult.OK)
+ {
+ txt_destdir.Text = fbd.SelectedPath;
+ }
+ }
+
+
+ private void button3_Click(object sender, EventArgs e)
+ {
+ if (string.IsNullOrWhiteSpace(txt_src.Text))
+ {
+ MessageBox.Show("请选择源文件");
+ return;
+ }
+ if (string.IsNullOrWhiteSpace(txt_destdir.Text))
+ {
+ MessageBox.Show("请选择要存放资源文件的文件夹");
+ return;
+ }
+ string destpath = txt_destdir.Text.Trim();
+ XmlDocument doc = new XmlDocument();
+ doc.Load(txt_src.Text);
+ Dictionary docs = GetResources();
+
+ foreach (XmlNode node in doc.DocumentElement.ChildNodes)
+ {
+ if (string.Equals(node.Name, "Category", StringComparison.OrdinalIgnoreCase))
+ {
+ foreach (XmlNode codenode in node.ChildNodes)
+ {
+ string code = codenode.Name;
+
+ foreach (var d in docs)
+ {
+ string lgid = d.Key;
+ XmlNode node1 = codenode[lgid];
+ if (node1 == null)
+ {
+ var lgids = lgid.Split('-');
+ node1 = codenode[lgids[0]];
+ }
+ if (node1 != null)
+ d.Value.Values[code] = node1.InnerText;
+ }
+ }
+ }
+ }
+
+ foreach (var kv in docs)
+ {
+ string fn = Path.Combine(txt_destdir.Text.Trim(), kv.Key + ".json");
+ string s = JsonConvert.SerializeObject(kv.Value);
+ using (FileStream fs = new FileStream(fn, FileMode.Create, FileAccess.Write))
+ {
+ using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
+ {
+ sw.Write(s);
+ }
+ }
+ }
+
+ MessageBox.Show("分解完成。");
+ }
+
+ private Dictionary GetResources()
+ {
+ Dictionary docs = new Dictionary(StringComparer.OrdinalIgnoreCase);
+
+ ResourceObject resen = new ResourceObject();
+ resen.Ver = Convert.ToInt64(DateTime.Now.ToString("yyMMddHHmm"));
+ resen.LanguageId = "en";
+ docs.Add("en", resen);
+
+ ResourceObject resfr = new ResourceObject();
+ resfr.Ver = Convert.ToInt64(DateTime.Now.ToString("yyMMddHHmm"));
+ resfr.LanguageId = "fr";
+ docs.Add("fr", resfr);
+
+ ResourceObject res1 = new ResourceObject();
+ res1.Ver = Convert.ToInt64(DateTime.Now.ToString("yyMMddHHmm"));
+ res1.LanguageId = "en-us";
+ docs.Add("en-us", res1);
+
+ ResourceObject res2 = new ResourceObject();
+ res2.Ver = Convert.ToInt64(DateTime.Now.ToString("yyMMddHHmm"));
+ res2.LanguageId = "en-ca";
+ docs.Add("en-ca", res2);
+
+ ResourceObject res3 = new ResourceObject();
+ res3.Ver = Convert.ToInt64(DateTime.Now.ToString("yyMMddHHmm"));
+ res3.LanguageId = "en-au";
+ docs.Add("en-au", res3);
+
+ ResourceObject res4 = new ResourceObject();
+ res4.Ver = Convert.ToInt64(DateTime.Now.ToString("yyMMddHHmm"));
+ res4.LanguageId = "en-Components";
+ docs.Add("en-Components", res4);
+
+ ResourceObject res5 = new ResourceObject();
+ res5.Ver = Convert.ToInt64(DateTime.Now.ToString("yyMMddHHmm"));
+ res5.LanguageId = "fr-fr";
+ docs.Add("fr-fr", res5);
+
+ ResourceObject res6 = new ResourceObject();
+ res6.Ver = Convert.ToInt64(DateTime.Now.ToString("yyMMddHHmm"));
+ res6.LanguageId = "fr-ca";
+ docs.Add("fr-ca", res6);
+
+ ResourceObject res7 = new ResourceObject();
+ res7.Ver = Convert.ToInt64(DateTime.Now.ToString("yyMMddHHmm"));
+ res7.LanguageId = "zh-cn";
+ docs.Add("zh-cn", res7);
+
+ return docs;
+ }
+
+ public class ResourceObject
+ {
+ public long Ver { get; set; } = 100;
+ public string LanguageId { get; set; } = "en-us";
+ public Dictionary Values { get; private set; } = new Dictionary();
+ }
+
+ }
+}
diff --git a/LanguageExtractTool/Form1.resx b/LanguageExtractTool/Form1.resx
new file mode 100644
index 0000000..1597d39
--- /dev/null
+++ b/LanguageExtractTool/Form1.resx
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 17, 17
+
+
+ 87, 17
+
+
\ No newline at end of file
diff --git a/LanguageExtractTool/Form2.Designer.cs b/LanguageExtractTool/Form2.Designer.cs
new file mode 100644
index 0000000..2874830
--- /dev/null
+++ b/LanguageExtractTool/Form2.Designer.cs
@@ -0,0 +1,165 @@
+namespace LanguageExtractTool
+{
+ partial class Form2
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.ofd = new System.Windows.Forms.OpenFileDialog();
+ this.btn_export = new System.Windows.Forms.Button();
+ this.button1 = new System.Windows.Forms.Button();
+ this.txt_src = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.label2 = new System.Windows.Forms.Label();
+ this.cbx_languages = new System.Windows.Forms.ComboBox();
+ this.btn_import_mobile = new System.Windows.Forms.Button();
+ this.btn_export_mobile = new System.Windows.Forms.Button();
+ this.btn_import = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // ofd
+ //
+ this.ofd.Filter = "xml files|*.xml|All files|*.*";
+ //
+ // btn_export
+ //
+ this.btn_export.Location = new System.Drawing.Point(63, 133);
+ this.btn_export.Name = "btn_export";
+ this.btn_export.Size = new System.Drawing.Size(99, 28);
+ this.btn_export.TabIndex = 41;
+ this.btn_export.Text = "导出Excel";
+ this.btn_export.UseVisualStyleBackColor = true;
+ this.btn_export.Click += new System.EventHandler(this.btn_export_Click);
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(492, 66);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(116, 23);
+ this.button1.TabIndex = 40;
+ this.button1.Text = "选择源文件";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click_1);
+ //
+ // txt_src
+ //
+ this.txt_src.Location = new System.Drawing.Point(111, 68);
+ this.txt_src.Name = "txt_src";
+ this.txt_src.Size = new System.Drawing.Size(362, 20);
+ this.txt_src.TabIndex = 39;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(60, 71);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(43, 13);
+ this.label1.TabIndex = 38;
+ this.label1.Text = "源文件";
+ //
+ // label2
+ //
+ this.label2.AutoSize = true;
+ this.label2.Location = new System.Drawing.Point(72, 26);
+ this.label2.Name = "label2";
+ this.label2.Size = new System.Drawing.Size(31, 13);
+ this.label2.TabIndex = 42;
+ this.label2.Text = "语言";
+ //
+ // cbx_languages
+ //
+ this.cbx_languages.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.cbx_languages.FormattingEnabled = true;
+ this.cbx_languages.Location = new System.Drawing.Point(111, 23);
+ this.cbx_languages.Name = "cbx_languages";
+ this.cbx_languages.Size = new System.Drawing.Size(362, 21);
+ this.cbx_languages.TabIndex = 43;
+ //
+ // btn_import_mobile
+ //
+ this.btn_import_mobile.Location = new System.Drawing.Point(451, 133);
+ this.btn_import_mobile.Name = "btn_import_mobile";
+ this.btn_import_mobile.Size = new System.Drawing.Size(112, 28);
+ this.btn_import_mobile.TabIndex = 46;
+ this.btn_import_mobile.Text = "导入Excel (Mobile)";
+ this.btn_import_mobile.UseVisualStyleBackColor = true;
+ this.btn_import_mobile.Click += new System.EventHandler(this.btn_import_mobile_Click);
+ //
+ // btn_export_mobile
+ //
+ this.btn_export_mobile.Location = new System.Drawing.Point(324, 133);
+ this.btn_export_mobile.Name = "btn_export_mobile";
+ this.btn_export_mobile.Size = new System.Drawing.Size(121, 28);
+ this.btn_export_mobile.TabIndex = 45;
+ this.btn_export_mobile.Text = "导出Excel (Mobile)";
+ this.btn_export_mobile.UseVisualStyleBackColor = true;
+ this.btn_export_mobile.Click += new System.EventHandler(this.btn_export_mobile_Click);
+ //
+ // btn_import
+ //
+ this.btn_import.Location = new System.Drawing.Point(168, 133);
+ this.btn_import.Name = "btn_import";
+ this.btn_import.Size = new System.Drawing.Size(84, 28);
+ this.btn_import.TabIndex = 44;
+ this.btn_import.Text = "导入Excel";
+ this.btn_import.UseVisualStyleBackColor = true;
+ this.btn_import.Click += new System.EventHandler(this.btn_import_Click);
+ //
+ // Form2
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(675, 195);
+ this.Controls.Add(this.btn_import_mobile);
+ this.Controls.Add(this.btn_export_mobile);
+ this.Controls.Add(this.btn_import);
+ this.Controls.Add(this.cbx_languages);
+ this.Controls.Add(this.label2);
+ this.Controls.Add(this.btn_export);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.txt_src);
+ this.Controls.Add(this.label1);
+ this.Name = "Form2";
+ this.Text = "多语言Excel导入导出";
+ this.Load += new System.EventHandler(this.Form2_Load);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+ private System.Windows.Forms.OpenFileDialog ofd;
+ private System.Windows.Forms.Button btn_export;
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.TextBox txt_src;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Label label2;
+ private System.Windows.Forms.ComboBox cbx_languages;
+ private System.Windows.Forms.Button btn_import_mobile;
+ private System.Windows.Forms.Button btn_export_mobile;
+ private System.Windows.Forms.Button btn_import;
+ }
+}
\ No newline at end of file
diff --git a/LanguageExtractTool/Form2.cs b/LanguageExtractTool/Form2.cs
new file mode 100644
index 0000000..0ed0a6a
--- /dev/null
+++ b/LanguageExtractTool/Form2.cs
@@ -0,0 +1,536 @@
+using DocumentFormat.OpenXml;
+using DocumentFormat.OpenXml.Packaging;
+using DocumentFormat.OpenXml.Spreadsheet;
+using IronIntel.Contractor;
+using IronIntel.Contractor.ExportExcel;
+using Newtonsoft.Json;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Data.OleDb;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Xml;
+
+namespace LanguageExtractTool
+{
+ public partial class Form2 : Form
+ {
+ public Form2()
+ {
+ InitializeComponent();
+ }
+
+ private void Form2_Load(object sender, EventArgs e)
+ {
+ List lan = new List();
+ lan.Add(new Languages { ID = "all", Name = "ALL" });
+ lan.Add(new Languages { ID = "en-us", Name = "English (United States)" });
+ lan.Add(new Languages { ID = "en-ca", Name = "English (Canada)" });
+ lan.Add(new Languages { ID = "en-au", Name = "English (Australia)" });
+ lan.Add(new Languages { ID = "fr-fr", Name = "français (France)" });
+ lan.Add(new Languages { ID = "fr-ca", Name = "français (Canada)" });
+ lan.Add(new Languages { ID = "zh-cn", Name = "中文" });
+ lan.Add(new Languages { ID = "es-es", Name = "Spain" });
+
+ this.cbx_languages.ValueMember = "ID";
+ this.cbx_languages.DisplayMember = "Name";
+ this.cbx_languages.DataSource = lan;
+ }
+
+ private void button1_Click_1(object sender, EventArgs e)
+ {
+ if (ofd.ShowDialog() == DialogResult.OK)
+ {
+ txt_src.Text = ofd.FileName;
+ }
+ }
+
+ private void btn_export_Click(object sender, EventArgs e)
+ {
+ if (string.IsNullOrWhiteSpace(txt_src.Text))
+ {
+ MessageBox.Show("请选择源文件");
+ return;
+ }
+
+ SaveFileDialog sfd = new SaveFileDialog();
+ sfd.Filter = "Excel files(*.xlsx)|*.xlsx";
+ sfd.FilterIndex = 1;
+ sfd.RestoreDirectory = true;
+ if (sfd.ShowDialog() == DialogResult.OK)
+ {
+ List ls = LoadLanguagesXml();
+ byte[] buffer = ExportLanguages(ls);
+ try
+ {
+ using (FileStream fs = new FileStream(sfd.FileName, FileMode.Create, FileAccess.Write))
+ {
+ fs.Write(buffer, 0, buffer.Length);
+ MessageBox.Show("导出成功");
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ }
+ }
+ }
+
+ private void btn_import_Click(object sender, EventArgs e)
+ {
+ if (string.IsNullOrWhiteSpace(txt_src.Text))
+ {
+ MessageBox.Show("请选择源文件");
+ return;
+ }
+
+ OpenFileDialog sfd = new OpenFileDialog();
+ sfd.Title = "Excel文件";
+ sfd.FileName = "";
+ sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
+ sfd.Filter = "Excel文件| *.xlsx;*.xls";
+ sfd.ValidateNames = true;
+ sfd.CheckFileExists = true;
+ sfd.CheckPathExists = true;
+
+ if (sfd.ShowDialog() == DialogResult.OK)
+ {
+ try
+ {
+ using (FileStream fs = new FileStream(sfd.FileName, FileMode.Open, FileAccess.Read))
+ {
+ byte[] fileBuffer = new byte[fs.Length];
+ fs.Read(fileBuffer, 0, Convert.ToInt32(fs.Length));
+ DataTable dt = new ImportFromExcel().LoadExcelData(fileBuffer);
+ if (dt == null || dt.Rows.Count == 0)
+ return;
+ List ls = LoadLanguagesDataTable(dt);
+
+ ImportExcel(ls);
+ MessageBox.Show("导入成功");
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ }
+ }
+ }
+
+
+ private void btn_export_mobile_Click(object sender, EventArgs e)
+ {
+ if (string.IsNullOrWhiteSpace(txt_src.Text))
+ {
+ MessageBox.Show("请选择源文件");
+ return;
+ }
+
+ SaveFileDialog sfd = new SaveFileDialog();
+ sfd.Filter = "Excel files(*.xlsx)|*.xlsx";
+ sfd.FilterIndex = 1;
+ sfd.RestoreDirectory = true;
+ if (sfd.ShowDialog() == DialogResult.OK)
+ {
+ List ls = LoadLanguagesMobileXml();
+ byte[] buffer = ExportLanguages(ls);
+ try
+ {
+ using (FileStream fs = new FileStream(sfd.FileName, FileMode.Create, FileAccess.Write))
+ {
+ fs.Write(buffer, 0, buffer.Length);
+ MessageBox.Show("导出成功");
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ }
+ }
+ }
+
+ private void btn_import_mobile_Click(object sender, EventArgs e)
+ {
+ if (string.IsNullOrWhiteSpace(txt_src.Text))
+ {
+ MessageBox.Show("请选择源文件");
+ return;
+ }
+
+ OpenFileDialog sfd = new OpenFileDialog();
+ sfd.Title = "Excel文件";
+ sfd.FileName = "";
+ sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
+ sfd.Filter = "Excel文件| *.xlsx;*.xls";
+ sfd.ValidateNames = true;
+ sfd.CheckFileExists = true;
+ sfd.CheckPathExists = true;
+
+ if (sfd.ShowDialog() == DialogResult.OK)
+ {
+ try
+ {
+ using (FileStream fs = new FileStream(sfd.FileName, FileMode.Open, FileAccess.Read))
+ {
+ byte[] fileBuffer = new byte[fs.Length];
+ fs.Read(fileBuffer, 0, Convert.ToInt32(fs.Length));
+ DataTable dt = new ImportFromExcel().LoadExcelData(fileBuffer);
+ if (dt == null || dt.Rows.Count == 0)
+ return;
+ List ls = LoadLanguagesDataTable(dt);
+
+ ImportExcelMobile(ls);
+ MessageBox.Show("导入成功");
+ }
+ }
+ catch (Exception ex)
+ {
+ MessageBox.Show(ex.Message);
+ }
+ }
+ }
+
+ private List LoadLanguagesXml()
+ {
+ XmlDocument doc = new XmlDocument();
+ doc.Load(txt_src.Text);
+
+ List ls = new List();
+ foreach (XmlNode node in doc.DocumentElement.ChildNodes)
+ {
+ if (string.Equals(node.Name, "Category", StringComparison.OrdinalIgnoreCase))
+ {
+ foreach (XmlNode codenode in node.ChildNodes)
+ {
+ LanguagesItem li = new LanguagesItem();
+ li.ID = codenode.Name;
+ foreach (XmlNode node1 in codenode.ChildNodes)
+ {
+ if (string.IsNullOrWhiteSpace(node1.InnerText))
+ {
+ continue;
+ }
+ string lgid = node1.Name;
+ string lgvalue = node1.InnerText;
+ lgvalue = lgvalue.Replace("\n", "
");
+ lgvalue = Regex.Replace(lgvalue, "^ | $", "");
+
+ if (string.Compare(lgid, "en-us", true) == 0)
+ li.EnglishUS = lgvalue;
+ else if (string.Compare(lgid, "en-au", true) == 0)
+ li.EnglishAU = lgvalue;
+ else if (string.Compare(lgid, "en-ca", true) == 0)
+ li.EnglishCA = lgvalue;
+ else if (string.Compare(lgid, "fr-fr", true) == 0)
+ li.France = lgvalue;
+ else if (string.Compare(lgid, "fr-ca", true) == 0)
+ li.FranceCA = lgvalue;
+ else if (string.Compare(lgid, "zh-cn", true) == 0)
+ li.Chinese = lgvalue;
+ else if (string.Compare(lgid, "es-es", true) == 0)
+ li.Spain = lgvalue;
+ }
+ ls.Add(li);
+ }
+ }
+ }
+ return ls;
+ }
+
+ private List LoadLanguagesMobileXml()
+ {
+ XmlDocument doc = new XmlDocument();
+ doc.Load(txt_src.Text);
+
+ List ls = new List();
+ foreach (XmlNode node in doc.DocumentElement.ChildNodes)
+ {
+ LanguagesItem li = new LanguagesItem();
+ li.ID = node.Name;
+ foreach (XmlNode node1 in node.ChildNodes)
+ {
+ if (string.IsNullOrWhiteSpace(node1.InnerText))
+ {
+ continue;
+ }
+ string lgid = node1.Name;
+ string lgvalue = node1.InnerText;
+ if (string.Compare(lgid, "en-us", true) == 0)
+ li.EnglishUS = lgvalue;
+ else if (string.Compare(lgid, "en-au", true) == 0)
+ li.EnglishAU = lgvalue;
+ else if (string.Compare(lgid, "en-ca", true) == 0)
+ li.EnglishCA = lgvalue;
+ else if (string.Compare(lgid, "fr-fr", true) == 0)
+ li.France = lgvalue;
+ else if (string.Compare(lgid, "fr-ca", true) == 0)
+ li.FranceCA = lgvalue;
+ else if (string.Compare(lgid, "zh-cn", true) == 0)
+ li.Chinese = lgvalue;
+ else if (string.Compare(lgid, "es-es", true) == 0)
+ li.Spain = lgvalue;
+ }
+ ls.Add(li);
+
+ }
+ return ls;
+ }
+
+ private byte[] ExportLanguages(List ls)
+ {
+ string clgid = cbx_languages.SelectedValue.ToString();
+ ExportToExcel ete = new ExportToExcel();
+ DataTable dt = new DataTable();
+ dt.Columns.Add("ID", typeof(string));
+ dt.Columns.Add("English (United States)", typeof(string));
+ if (clgid == "all")
+ {
+ dt.Columns.Add("English (Canada)", typeof(string));
+ dt.Columns.Add("English (Australia)", typeof(string));
+ dt.Columns.Add("français (France)", typeof(string));
+ dt.Columns.Add("français (Canada)", typeof(string));
+ dt.Columns.Add("中文", typeof(string));
+ dt.Columns.Add("Spain", typeof(string));
+ }
+ else if (clgid == "en-ca")
+ dt.Columns.Add("English (Canada)", typeof(string));
+ else if (clgid == "en-au")
+ dt.Columns.Add("English (Australia)", typeof(string));
+ else if (clgid == "fr-fr")
+ dt.Columns.Add("français (France)", typeof(string));
+ else if (clgid == "fr-ca")
+ dt.Columns.Add("français (Canada)", typeof(string));
+ else if (clgid == "zh-cn")
+ dt.Columns.Add("中文", typeof(string));
+ else if (clgid == "es-es")
+ dt.Columns.Add("Spain", typeof(string));
+ foreach (var item in ls)
+ {
+ DataRow row = dt.NewRow();
+ row[0] = item.ID;
+ row[1] = item.EnglishUS;
+ if (clgid == "all")
+ {
+ row[2] = item.EnglishCA;
+ row[3] = item.EnglishAU;
+ row[4] = item.France;
+ row[5] = item.FranceCA;
+ row[6] = item.Chinese;
+ row[7] = item.Spain;
+ }
+ else if (clgid == "en-ca")
+ row[2] = item.EnglishCA;
+ else if (clgid == "en-au")
+ row[2] = item.EnglishAU;
+ else if (clgid == "fr-fr")
+ row[2] = item.France;
+ else if (clgid == "fr-ca")
+ row[2] = item.FranceCA;
+ else if (clgid == "zh-cn")
+ row[2] = item.Chinese;
+ else if (clgid == "es-es")
+ row[2] = item.Spain;
+
+ dt.Rows.Add(row);
+ }
+
+ double[] widths = new double[] { 200d, 200d, 200d, 200d, 200d, 200d, 200d, 200d };
+ byte[] data = ete.CreateExcel(dt, null, widths, null);
+ return data;
+ }
+
+ private List LoadLanguagesDataTable(DataTable dt)
+ {
+ List ls = new List();
+ string clgid = cbx_languages.SelectedValue.ToString();
+ foreach (DataRow dr in dt.Rows)
+ {
+ LanguagesItem li = new LanguagesItem();
+ li.ID = dr["ID"].ToString();
+ li.EnglishUS = DataRowValue(dr, "en-us");
+ if (clgid == "all")
+ {
+ li.EnglishCA = DataRowValue(dr, "en-ca");
+ li.EnglishAU = DataRowValue(dr, "en-au");
+ li.France = DataRowValue(dr, "fr-fr");
+ li.FranceCA = DataRowValue(dr, "fr-ca");
+ li.Chinese = DataRowValue(dr, "zh-cn");
+ li.Spain = DataRowValue(dr, "es-es");
+ }
+ else if (clgid == "en-ca")
+ li.EnglishCA = DataRowValue(dr, clgid);
+ else if (clgid == "en-au")
+ li.EnglishAU = DataRowValue(dr, clgid);
+ else if (clgid == "fr-fr")
+ li.France = DataRowValue(dr, clgid);
+ else if (clgid == "fr-ca")
+ li.FranceCA = DataRowValue(dr, clgid);
+ else if (clgid == "zh-cn")
+ li.Chinese = DataRowValue(dr, clgid);
+ else if (clgid == "es-es")
+ li.Spain = DataRowValue(dr, clgid);
+
+ ls.Add(li);
+ }
+ return ls;
+ }
+
+ private string DataRowValue(DataRow dr, string lgid)
+ {
+ string value = string.Empty;
+
+ if (lgid == "en-ca")
+ value = "English (Canada)";
+ else if (lgid == "en-au")
+ value = "English (Australia)";
+ else if (lgid == "fr-fr")
+ value = "français (France)";
+ else if (lgid == "fr-ca")
+ value = "français (Canada)";
+ else if (lgid == "zh-cn")
+ value = "中文";
+ else if (lgid == "es-es")
+ value = "Spain";
+ else
+ value = "English (United States)";
+
+ string v = dr[value].ToString();
+ v = Regex.Replace(v, "^|$", " ");
+ return v;
+ }
+
+ private void ImportExcel(List ls)
+ {
+ if (ls == null || ls.Count == 0)
+ return;
+
+ string clgid = cbx_languages.SelectedValue.ToString();
+ XmlDocument doc = new XmlDocument();
+ doc.Load(txt_src.Text);
+ foreach (XmlNode node in doc.DocumentElement.ChildNodes)
+ {
+ if (string.Equals(node.Name, "Category", StringComparison.OrdinalIgnoreCase))
+ {
+ foreach (XmlNode codenode in node.ChildNodes)
+ {
+ string id = codenode.Name;
+ LanguagesItem lan = ls.FirstOrDefault(m => m.ID == id);
+ if (lan == null)
+ continue;
+
+ foreach (XmlNode node1 in codenode.ChildNodes)
+ {
+ string lgid = node1.Name;
+ string lgvalue = node1.InnerText;
+ if (clgid == "all")
+ {
+ string text = LanguagesText(lgid, lan);
+ if (!string.IsNullOrEmpty(text))
+ node1.InnerText = text;
+ }
+ else
+ {
+ if (clgid == lgid)
+ {
+ string text = LanguagesText(clgid, lan);
+ if (!string.IsNullOrEmpty(text))
+ node1.InnerText = text;
+ }
+ }
+
+ }
+ }
+ }
+ }
+ doc.Save(txt_src.Text);
+ }
+ private void ImportExcelMobile(List ls)
+ {
+ if (ls == null || ls.Count == 0)
+ return;
+
+ string clgid = cbx_languages.SelectedValue.ToString();
+ XmlDocument doc = new XmlDocument();
+ doc.Load(txt_src.Text);
+ foreach (XmlNode node in doc.DocumentElement.ChildNodes)
+ {
+ string id = node.Name;
+ LanguagesItem lan = ls.FirstOrDefault(m => m.ID == id);
+ if (lan == null)
+ continue;
+
+ foreach (XmlNode node1 in node.ChildNodes)
+ {
+ string lgid = node1.Name;
+ string lgvalue = node1.InnerText;
+ if (clgid == "all")
+ {
+ string text = LanguagesText(lgid, lan);
+ if (!string.IsNullOrEmpty(text))
+ node1.InnerText = text;
+ }
+ else
+ {
+ if (clgid == lgid)
+ {
+ string text = LanguagesText(clgid, lan);
+ if (!string.IsNullOrEmpty(text))
+ node1.InnerText = text;
+ }
+ }
+ }
+ }
+ doc.Save(txt_src.Text);
+ }
+
+
+ private string LanguagesText(string lgid, LanguagesItem lan)
+ {
+ string text = string.Empty;
+ if (lgid == "en-us" && !string.IsNullOrEmpty(lan.EnglishUS))
+ text = lan.EnglishUS;
+ else if (lgid == "en-ca" && !string.IsNullOrEmpty(lan.EnglishCA))
+ text = lan.EnglishCA;
+ else if (lgid == "en-au" && !string.IsNullOrEmpty(lan.EnglishAU))
+ text = lan.EnglishAU;
+ else if (lgid == "fr-fr" && !string.IsNullOrEmpty(lan.France))
+ text = lan.France;
+ else if (lgid == "fr-ca" && !string.IsNullOrEmpty(lan.FranceCA))
+ text = lan.FranceCA;
+ else if (lgid == "zh-cn" && !string.IsNullOrEmpty(lan.Chinese))
+ text = lan.Chinese;
+ else if (lgid == "es-es" && !string.IsNullOrEmpty(lan.Spain))
+ text = lan.Spain;
+
+ return text;
+ }
+
+ }
+
+ class Languages
+ {
+ public string ID { get; set; }
+ public string Name { get; set; }
+ }
+
+ class LanguagesItem
+ {
+ public string ID { get; set; }
+ public string EnglishUS { get; set; }
+ public string EnglishCA { get; set; }
+ public string EnglishAU { get; set; }
+ public string France { get; set; }
+ public string FranceCA { get; set; }
+ public string Chinese { get; set; }
+ public string Spain { get; set; }
+ }
+}
diff --git a/LanguageExtractTool/Form2.resx b/LanguageExtractTool/Form2.resx
new file mode 100644
index 0000000..6db16d1
--- /dev/null
+++ b/LanguageExtractTool/Form2.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 231, 17
+
+
\ No newline at end of file
diff --git a/LanguageExtractTool/LanguageExtractTool.csproj b/LanguageExtractTool/LanguageExtractTool.csproj
new file mode 100644
index 0000000..b69384e
--- /dev/null
+++ b/LanguageExtractTool/LanguageExtractTool.csproj
@@ -0,0 +1,126 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {BE465497-20E8-4C29-B98F-3AF19996F1CB}
+ WinExe
+ LanguageExtractTool
+ LanguageExtractTool
+ v4.7.2
+ 512
+ true
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ ..\Reflib\DocumentFormat.OpenXml.dll
+
+
+ False
+ ..\Reflib\Newtonsoft.Json.dll
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ FleetInspection.cs
+
+
+ Form
+
+
+ Form1.cs
+
+
+ Form
+
+
+ Form2.cs
+
+
+ Form
+
+
+ LanguageMerge.cs
+
+
+
+
+ FleetInspection.cs
+
+
+ Form1.cs
+
+
+ Form2.cs
+
+
+ LanguageMerge.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+
+
+
+ {515fb61f-f032-4a48-8f32-93b59b9d37f8}
+ IronIntelContractorBusiness
+
+
+
+
\ No newline at end of file
diff --git a/LanguageExtractTool/LanguageMerge.Designer.cs b/LanguageExtractTool/LanguageMerge.Designer.cs
new file mode 100644
index 0000000..9f37a18
--- /dev/null
+++ b/LanguageExtractTool/LanguageMerge.Designer.cs
@@ -0,0 +1,116 @@
+
+namespace LanguageExtractTool
+{
+ partial class LanguageMerge
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.button1 = new System.Windows.Forms.Button();
+ this.txt_src = new System.Windows.Forms.TextBox();
+ this.label1 = new System.Windows.Forms.Label();
+ this.button3 = new System.Windows.Forms.Button();
+ this.ofd = new System.Windows.Forms.OpenFileDialog();
+ this.button4 = new System.Windows.Forms.Button();
+ this.SuspendLayout();
+ //
+ // button1
+ //
+ this.button1.Location = new System.Drawing.Point(485, 45);
+ this.button1.Name = "button1";
+ this.button1.Size = new System.Drawing.Size(116, 23);
+ this.button1.TabIndex = 43;
+ this.button1.Text = "选择源文件";
+ this.button1.UseVisualStyleBackColor = true;
+ this.button1.Click += new System.EventHandler(this.button1_Click);
+ //
+ // txt_src
+ //
+ this.txt_src.Location = new System.Drawing.Point(104, 47);
+ this.txt_src.Name = "txt_src";
+ this.txt_src.Size = new System.Drawing.Size(362, 20);
+ this.txt_src.TabIndex = 42;
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(53, 50);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(43, 13);
+ this.label1.TabIndex = 41;
+ this.label1.Text = "源文件";
+ //
+ // button3
+ //
+ this.button3.Location = new System.Drawing.Point(160, 107);
+ this.button3.Name = "button3";
+ this.button3.Size = new System.Drawing.Size(75, 23);
+ this.button3.TabIndex = 44;
+ this.button3.Text = "开始合并";
+ this.button3.UseVisualStyleBackColor = true;
+ this.button3.Click += new System.EventHandler(this.button3_Click);
+ //
+ // ofd
+ //
+ this.ofd.Filter = "xml files|*.xml|All files|*.*";
+ //
+ // button4
+ //
+ this.button4.Location = new System.Drawing.Point(356, 107);
+ this.button4.Name = "button4";
+ this.button4.Size = new System.Drawing.Size(126, 23);
+ this.button4.TabIndex = 46;
+ this.button4.Text = "添加en-components";
+ this.button4.UseVisualStyleBackColor = true;
+ this.button4.Click += new System.EventHandler(this.button4_Click);
+ //
+ // LanguageMerge
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(680, 163);
+ this.Controls.Add(this.button4);
+ this.Controls.Add(this.button3);
+ this.Controls.Add(this.button1);
+ this.Controls.Add(this.txt_src);
+ this.Controls.Add(this.label1);
+ this.Name = "LanguageMerge";
+ this.Text = "多语言合并";
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Button button1;
+ private System.Windows.Forms.TextBox txt_src;
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.Button button3;
+ private System.Windows.Forms.OpenFileDialog ofd;
+ private System.Windows.Forms.Button button4;
+ }
+}
\ No newline at end of file
diff --git a/LanguageExtractTool/LanguageMerge.cs b/LanguageExtractTool/LanguageMerge.cs
new file mode 100644
index 0000000..f7c2752
--- /dev/null
+++ b/LanguageExtractTool/LanguageMerge.cs
@@ -0,0 +1,199 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using System.Xml;
+
+namespace LanguageExtractTool
+{
+ public partial class LanguageMerge : Form
+ {
+ public LanguageMerge()
+ {
+ InitializeComponent();
+ }
+
+ private void button1_Click(object sender, EventArgs e)
+ {
+ if (ofd.ShowDialog() == DialogResult.OK)
+ {
+ txt_src.Text = ofd.FileName;
+ }
+ }
+
+ private void button3_Click(object sender, EventArgs e)
+ {
+ if (string.IsNullOrWhiteSpace(txt_src.Text))
+ {
+ MessageBox.Show("请选择源文件");
+ return;
+ }
+ XmlDocument doc = new XmlDocument();
+ doc.Load(txt_src.Text);
+ foreach (XmlNode node in doc.DocumentElement.ChildNodes)
+ {
+ if (string.Equals(node.Name, "Category", StringComparison.OrdinalIgnoreCase))
+ {
+ foreach (XmlNode pcode in node.ChildNodes)
+ {
+ MergeLanuageItem li = new MergeLanuageItem();
+ li.PageID = new NodeValueItem() { Name = pcode.Name, Text = pcode.InnerText };
+ foreach (XmlNode lancode in pcode.ChildNodes)
+ {
+ if (string.IsNullOrWhiteSpace(lancode.InnerText))
+ {
+ continue;
+ }
+ string lgid = lancode.Name;
+ string lgvalue = lancode.InnerText;
+
+ if (string.Compare(lgid, "en-us", true) == 0)
+ {
+ li.English = new NodeValueItem() { Name = "en", Text = lgvalue };
+ li.EnglishUS = new NodeValueItem() { Name = lgid, Text = lgvalue };
+ }
+ else if (string.Compare(lgid, "en-au", true) == 0)
+ li.EnglishAU = new NodeValueItem() { Name = lgid, Text = lgvalue };
+ else if (string.Compare(lgid, "en-ca", true) == 0)
+ li.EnglishCA = new NodeValueItem() { Name = lgid, Text = lgvalue };
+ else if (string.Compare(lgid, "fr-fr", true) == 0)
+ {
+ li.FranceNew = new NodeValueItem() { Name = "fr", Text = lgvalue };
+ li.France = new NodeValueItem() { Name = lgid, Text = lgvalue };
+ }
+ else if (string.Compare(lgid, "fr-ca", true) == 0)
+ li.FranceCA = new NodeValueItem() { Name = lgid, Text = lgvalue };
+ else if (string.Compare(lgid, "zh-cn", true) == 0)
+ {
+ li.Chinese = new NodeValueItem() { Name = lgid, Text = lgvalue };
+ }
+
+ }
+
+ XmlNode pagenode = doc.GetElementsByTagName(li.PageID.Name)[0];
+
+ XmlElement frel = doc.CreateElement("fr");
+ frel.InnerText = li.FranceNew.Text;
+ pagenode.PrependChild(frel);
+ XmlElement enel = doc.CreateElement("en");
+ enel.InnerText = li.English.Text;
+ pagenode.PrependChild(enel);
+
+ try
+ {
+ string rst = doc.InnerXml;
+ var url = "../" + li.PageID.Name + "/";
+ if (li.EnglishUS != null && string.Compare(li.English.Text, li.EnglishUS.Text, true) == 0)
+ {
+ var lnode = pagenode.SelectSingleNode(url + li.EnglishUS.Name);
+ pagenode.RemoveChild(lnode);
+ }
+ if (li.EnglishAU != null && string.Compare(li.English.Text, li.EnglishAU.Text, true) == 0)
+ {
+ var lnode = pagenode.SelectSingleNode(url + li.EnglishAU.Name);
+ pagenode.RemoveChild(lnode);
+ }
+ if (li.EnglishCA != null && string.Compare(li.English.Text, li.EnglishCA.Text, true) == 0)
+ {
+ var lnode = pagenode.SelectSingleNode(url + li.EnglishCA.Name);
+ pagenode.RemoveChild(lnode);
+ }
+ if (li.France != null)
+ {
+ var lnode = pagenode.SelectSingleNode(url + li.France.Name);
+ pagenode.RemoveChild(lnode);
+ }
+ if (li.FranceCA != null)
+ {
+ var lnode = pagenode.SelectSingleNode(url + li.FranceCA.Name);
+ pagenode.RemoveChild(lnode);
+ }
+
+ }
+ catch (Exception ex)
+ {
+ var name = li.PageID.Name;
+ }
+ }
+ }
+ }
+ doc.Save(txt_src.Text);
+ MessageBox.Show("合并完成。");
+ }
+
+ private void button4_Click(object sender, EventArgs e)
+ {
+ if (string.IsNullOrWhiteSpace(txt_src.Text))
+ {
+ MessageBox.Show("请选择源文件");
+ return;
+ }
+ XmlDocument doc = new XmlDocument();
+ doc.Load(txt_src.Text);
+ foreach (XmlNode node in doc.DocumentElement.ChildNodes)
+ {
+ if (string.Equals(node.Name, "Category", StringComparison.OrdinalIgnoreCase))
+ {
+ foreach (XmlNode pcode in node.ChildNodes)
+ {
+ MergeLanuageItem li = new MergeLanuageItem();
+ li.PageID = new NodeValueItem() { Name = pcode.Name, Text = pcode.InnerText };
+ foreach (XmlNode lancode in pcode.ChildNodes)
+ {
+ if (string.IsNullOrWhiteSpace(lancode.InnerText))
+ {
+ continue;
+ }
+ string lgid = lancode.Name;
+ string lgvalue = lancode.InnerText;
+
+ //if (string.Compare(lgid, "en", true) == 0)
+ //{
+ // li.English = new NodeValueItem() { Name = lgid, Text = lgvalue };
+ //}
+ if (string.Compare(lgid, "en-Components", true) == 0)
+ {
+ pcode.RemoveChild(lancode);
+ break;
+ }
+ }
+
+ //XmlNode pagenode = doc.GetElementsByTagName(li.PageID.Name)[0];
+
+ //XmlElement enel = doc.CreateElement("en-Components");
+ //enel.InnerText = li.English.Text;
+ //pagenode.AppendChild(enel);
+ }
+ }
+ }
+ doc.Save(txt_src.Text);
+ MessageBox.Show("添加完成。");
+
+ }
+ }
+
+ class MergeLanuageItem
+ {
+ public NodeValueItem PageID { get; set; }
+ public NodeValueItem English { get; set; }
+ public NodeValueItem EnglishUS { get; set; }
+ public NodeValueItem EnglishCA { get; set; }
+ public NodeValueItem EnglishAU { get; set; }
+ public NodeValueItem EnglishCOM { get; set; }
+ public NodeValueItem FranceNew { get; set; }
+ public NodeValueItem France { get; set; }
+ public NodeValueItem FranceCA { get; set; }
+ public NodeValueItem Chinese { get; set; }
+ }
+
+ class NodeValueItem
+ {
+ public string Name { get; set; }
+ public string Text { get; set; }
+ }
+}
diff --git a/LanguageExtractTool/LanguageMerge.resx b/LanguageExtractTool/LanguageMerge.resx
new file mode 100644
index 0000000..9b30d6c
--- /dev/null
+++ b/LanguageExtractTool/LanguageMerge.resx
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+ 17, 17
+
+
\ No newline at end of file
diff --git a/LanguageExtractTool/Program.cs b/LanguageExtractTool/Program.cs
new file mode 100644
index 0000000..742eb67
--- /dev/null
+++ b/LanguageExtractTool/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace LanguageExtractTool
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/LanguageExtractTool/Properties/AssemblyInfo.cs b/LanguageExtractTool/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..eaa4fe6
--- /dev/null
+++ b/LanguageExtractTool/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("LanguageExtractTool")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("LanguageExtractTool")]
+[assembly: AssemblyCopyright("Copyright © 2020")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("be465497-20e8-4c29-b98f-3af19996f1cb")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/LanguageExtractTool/Properties/Resources.Designer.cs b/LanguageExtractTool/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..ff61030
--- /dev/null
+++ b/LanguageExtractTool/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace LanguageExtractTool.Properties
+{
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "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()
+ {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager
+ {
+ get
+ {
+ if ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("LanguageExtractTool.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [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/LanguageExtractTool/Properties/Resources.resx b/LanguageExtractTool/Properties/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/LanguageExtractTool/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/LanguageExtractTool/Properties/Settings.Designer.cs b/LanguageExtractTool/Properties/Settings.Designer.cs
new file mode 100644
index 0000000..a83ffc2
--- /dev/null
+++ b/LanguageExtractTool/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace LanguageExtractTool.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.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/LanguageExtractTool/Properties/Settings.settings b/LanguageExtractTool/Properties/Settings.settings
new file mode 100644
index 0000000..3964565
--- /dev/null
+++ b/LanguageExtractTool/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/Reflib/FIASPNETCache.dll b/Reflib/FIASPNETCache.dll
deleted file mode 100644
index 03557a8..0000000
Binary files a/Reflib/FIASPNETCache.dll and /dev/null differ
diff --git a/Reflib/FIC/FICBLC.dll b/Reflib/FIC/FICBLC.dll
index 8debfa0..65a6a57 100644
Binary files a/Reflib/FIC/FICBLC.dll and b/Reflib/FIC/FICBLC.dll differ
diff --git a/Reflib/FIC/FICEmailSubscribe.dll b/Reflib/FIC/FICEmailSubscribe.dll
index b6cfe4b..58ed5fd 100644
Binary files a/Reflib/FIC/FICEmailSubscribe.dll and b/Reflib/FIC/FICEmailSubscribe.dll differ
diff --git a/Reflib/FIC/FICExport.dll b/Reflib/FIC/FICExport.dll
index 30f9807..717d4a9 100644
Binary files a/Reflib/FIC/FICExport.dll and b/Reflib/FIC/FICExport.dll differ
diff --git a/Reflib/FIC/FICIntf.dll b/Reflib/FIC/FICIntf.dll
index a03cbb0..51c1643 100644
Binary files a/Reflib/FIC/FICIntf.dll and b/Reflib/FIC/FICIntf.dll differ
diff --git a/Reflib/FIC/FICIntfAdv.dll b/Reflib/FIC/FICIntfAdv.dll
index f39380a..a341669 100644
Binary files a/Reflib/FIC/FICIntfAdv.dll and b/Reflib/FIC/FICIntfAdv.dll differ
diff --git a/Reflib/FIC/FICModels.dll b/Reflib/FIC/FICModels.dll
index abf1003..74c9294 100644
Binary files a/Reflib/FIC/FICModels.dll and b/Reflib/FIC/FICModels.dll differ
diff --git a/Reflib/FIC/FIChartLib.dll b/Reflib/FIC/FIChartLib.dll
index d5f636e..1f39cd6 100644
Binary files a/Reflib/FIC/FIChartLib.dll and b/Reflib/FIC/FIChartLib.dll differ
diff --git a/Reflib/FIC/FICore.std.dll b/Reflib/FIC/FICore.std.dll
new file mode 100644
index 0000000..5465e26
Binary files /dev/null and b/Reflib/FIC/FICore.std.dll differ
diff --git a/Reflib/FIC/FRPTExtIntf.dll b/Reflib/FIC/FRPTExtIntf.dll
index 39cafe4..e9d0c01 100644
Binary files a/Reflib/FIC/FRPTExtIntf.dll and b/Reflib/FIC/FRPTExtIntf.dll differ
diff --git a/Reflib/FICachManager.dll b/Reflib/FICachManager.dll
deleted file mode 100644
index 21feea2..0000000
Binary files a/Reflib/FICachManager.dll and /dev/null differ
diff --git a/Reflib/FICacheManager.Redis.dll b/Reflib/FICacheManager.Redis.dll
deleted file mode 100644
index eecf81e..0000000
Binary files a/Reflib/FICacheManager.Redis.dll and /dev/null differ
diff --git a/Reflib/FICore.std.dll b/Reflib/FICore.std.dll
index 38526bf..77ed116 100644
Binary files a/Reflib/FICore.std.dll and b/Reflib/FICore.std.dll differ
diff --git a/Reflib/FICoreDbCreator.dll b/Reflib/FICoreDbCreator.dll
index d50a41b..232a6a7 100644
Binary files a/Reflib/FICoreDbCreator.dll and b/Reflib/FICoreDbCreator.dll differ
diff --git a/Reflib/FleetClientBase.dll b/Reflib/FleetClientBase.dll
index b22801e..a79fca3 100644
Binary files a/Reflib/FleetClientBase.dll and b/Reflib/FleetClientBase.dll differ
diff --git a/Reflib/FleetServiceClient.dll b/Reflib/FleetServiceClient.dll
index 778a193..6a362e9 100644
Binary files a/Reflib/FleetServiceClient.dll and b/Reflib/FleetServiceClient.dll differ
diff --git a/Reflib/Foresight.Service.Client.dll b/Reflib/Foresight.Service.Client.dll
new file mode 100644
index 0000000..f0d5700
Binary files /dev/null and b/Reflib/Foresight.Service.Client.dll differ
diff --git a/Reflib/ForesightCredentialClient.dll b/Reflib/ForesightCredentialClient.dll
new file mode 100644
index 0000000..1558aae
Binary files /dev/null and b/Reflib/ForesightCredentialClient.dll differ
diff --git a/Reflib/ForesightServiceMonitorClient.dll b/Reflib/ForesightServiceMonitorClient.dll
new file mode 100644
index 0000000..57692bd
Binary files /dev/null and b/Reflib/ForesightServiceMonitorClient.dll differ
diff --git a/Reflib/ForesightServicesClient.dll b/Reflib/ForesightServicesClient.dll
deleted file mode 100644
index cb4a18b..0000000
Binary files a/Reflib/ForesightServicesClient.dll and /dev/null differ
diff --git a/Reflib/IronIntel.ServiceModel.Client.dll b/Reflib/IronIntel.ServiceModel.Client.dll
deleted file mode 100644
index 50daa5e..0000000
Binary files a/Reflib/IronIntel.ServiceModel.Client.dll and /dev/null differ
diff --git a/Reflib/IronIntel.Services.Contractor.dll b/Reflib/IronIntel.Services.Contractor.dll
deleted file mode 100644
index b8ef87e..0000000
Binary files a/Reflib/IronIntel.Services.Contractor.dll and /dev/null differ
diff --git a/Reflib/IronIntel.Services.CredentialObjects.dll b/Reflib/IronIntel.Services.CredentialObjects.dll
deleted file mode 100644
index ffa390d..0000000
Binary files a/Reflib/IronIntel.Services.CredentialObjects.dll and /dev/null differ
diff --git a/Reflib/IronIntelServiceModel.dll b/Reflib/IronIntelServiceModel.dll
deleted file mode 100644
index e32bd25..0000000
Binary files a/Reflib/IronIntelServiceModel.dll and /dev/null differ
diff --git a/Reflib/IronIntelSysClient.dll b/Reflib/IronIntelSysClient.dll
deleted file mode 100644
index 0f8ed0a..0000000
Binary files a/Reflib/IronIntelSysClient.dll and /dev/null differ
diff --git a/Reflib/StackExchange.Redis.StrongName.dll b/Reflib/StackExchange.Redis.StrongName.dll
deleted file mode 100644
index c4ebd3c..0000000
Binary files a/Reflib/StackExchange.Redis.StrongName.dll and /dev/null differ
diff --git a/Reflib/iisitebase.dll b/Reflib/iisitebase.dll
deleted file mode 100644
index 1d6c44b..0000000
Binary files a/Reflib/iisitebase.dll and /dev/null differ
diff --git a/Reflib/iisyslib.dll b/Reflib/iisyslib.dll
deleted file mode 100644
index 042448a..0000000
Binary files a/Reflib/iisyslib.dll and /dev/null differ
diff --git a/Reflib/ironcontractorwinlib.dll b/Reflib/ironcontractorwinlib.dll
deleted file mode 100644
index e534b58..0000000
Binary files a/Reflib/ironcontractorwinlib.dll and /dev/null differ
diff --git a/Reflib/irondbobjlib.dll b/Reflib/irondbobjlib.dll
index 1b8ed01..b29fb37 100644
Binary files a/Reflib/irondbobjlib.dll and b/Reflib/irondbobjlib.dll differ