/// <summary> /// 导入翻译文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Sbtn_tai_Click(object sender, EventArgs e) { var patch = OpenFile.OpenDialog("请选择翻译后的语言包", "翻译后的包(*.tbl)|*.tbl", "是否将文件导入到字库中"); if (string.IsNullOrWhiteSpace(patch)) { return; } var form = this; progress = new FormProgress(); progress.SetFormText("正在解析tbl文件"); var task = new Task(() => { var tblParse = new TblParse(patch); var models = tblParse.Parser(); form.Invoke((Action <string, int>)SetFormInfo, "导入汉化的进度", models.Count); var items = ModelManager.Instance.Items; //遍历已翻译过的 models = models.Where(x => x.Value.Length > 0).ToList(); foreach (var x in models) { //已form主线程的方式执行代码 form.Invoke((Action)SetFormProgress); var item = items.FirstOrDefault(_ => _.Key == x.Key); if (item == null) { continue; } var hanLen = EncodingHelp.GetStringLength(item.Value); var tranLen = EncodingHelp.GetStringLength(x.Value); if (tranLen > hanLen) { continue; } item.Transform = x.Value; } //保存字库 ModelManager.Instance.Save(); uiHelper.InitData(sdgv_items, GetPage); }); task.Start(); progress.ShowDialog(form); }
/// <summary> /// 执行汉化 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Sbtn_transform_Click(object sender, EventArgs e) { var patch = OpenFile.OpenDialog("请选择需要翻译的语言包", "需要翻译的包(*.tbl)|*.tbl", "是否翻译此文件"); if (string.IsNullOrWhiteSpace(patch)) { return; } var form = this; void UpdateStatus(string text) { statusStrip1.Items[1].Text = text; } void ShowMessage(string message) { MessageBoxEx.Show(message, "提示"); } UpdateStatus("正在解析tbl文件"); var task = new Task(() => { form.Invoke((Action <string>)UpdateStatus, "执行汉化中"); var tblTransform = new TblTransform(patch); tblTransform.TransformEventHandler += OnTransformEventHandler; var bytes = tblTransform.Transform(ModelManager.Instance.Items.ToArray()); var _path = $@"{Environment.CurrentDirectory }\汉化"; if (!Directory.Exists(_path)) { Directory.CreateDirectory(_path); } var path = $@"{_path}\data.bin.lan.kor_{DateTime.Now:yyyyMMddss}.tbl"; using (var stream = new FileStream(path, FileMode.CreateNew)) { stream.Write(bytes, 0, bytes.Length); } form.Invoke((Action <string>)ShowMessage, "汉化完成"); }); task.Start(); }
/// <summary> /// 导入韩服文件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Sbtn_improt_han_Click(object sender, EventArgs e) { var patch = OpenFile.OpenDialog("请选择韩文语言包", "原始韩文包(*.tbl)|*.tbl", "是否将文件导入到字库中"); if (string.IsNullOrWhiteSpace(patch)) { return; } var form = this; progress = new FormProgress(); progress.SetFormText("正在解析tbl文件"); var task = new Task(() => { var tblParse = new TblParse(patch); var models = tblParse.Parser(); form.Invoke((Action <string, int>)SetFormInfo, "导入韩文进度", models.Count); var items = ModelManager.Instance.Items; //过滤字库 models.ForEach(x => { if (!items.Exists(item => item.Key == x.Key)) { items.Add(x); } form.Invoke((Action)SetFormProgress); }); //保存字库 ModelManager.Instance.Save(); uiHelper.InitData(sdgv_items, GetPage); }); task.Start(); progress.ShowDialog(form); task.Wait(); }