/// <summary> /// BackgroundWorker処理開始 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void TranslationBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { //BackgroundWorker var bw = (BackgroundWorker)sender; //設定値 var settingsParameters = (SettingsParameters)e.Argument; //翻訳データベースインスタンス ConfigurationData.TranslationDataBase translationDataBase; if (settingsParameters.IsMachineTranslation) { //自動翻訳あり translationDataBase = new ConfigurationData.TranslationDataBase(settingsParameters.MicrosoftTranslatorAPIClientId, settingsParameters.MicrosoftTranslatorAPIClientSecret); } else { //自動翻訳なし translationDataBase = new ConfigurationData.TranslationDataBase(); } //進行状況表示処理用処理定義 var progressStatus = new ProgressStatus(bw); //処理開始 try { //フォルダ数 const string StatusTextFirstLevelDirectory = @"({0,3}/{1,3})-[ {2} ]"; //ファイル数 const string StatusTextCfgFile = @" -- ({0,3}/{1,3})-[ {2} ]"; //翻訳数 const string StatusTextTranslateOne = @" --- 翻訳処理"; const string StatusTextTranslate = @" --- 翻訳処理({0,3}/{1,3}) "; ConfigurationData.ConfigurationFolder configurationFolder; ConfigurationData.ConfigurationFile configurationFile; //表示リセット progressStatus.Reset(); progressStatus.DispStatus(@"処理開始"); //翻訳DB読込 translationDataBase.Load(); //第一階層のフォルダを列挙 List <string> firstLevelDirectoryList = Common.File.GetFolderList(settingsParameters.GameDataPath, "*.*", false); //最大フォルダ件数設定 progressStatus.FirstLevelDirectoryMaxCount = firstLevelDirectoryList.Count; //フォルダ分だけループ foreach (string tgtDirectory in firstLevelDirectoryList) { System.Threading.Thread.Sleep(1); //wait if (bw.CancellationPending) //キャンセルされたか調べる { //キャンセルされた e.Cancel = true; return; } //フォルダ情報のインスタンス作成 configurationFolder = new ConfigurationData.ConfigurationFolder(); //ディレクトリ名のみにする configurationFolder.DirectoryName = Common.File.GetFileName(Common.File.DeleteDirectorySeparator(tgtDirectory)); //保存パス configurationFolder.SavePath = settingsParameters.SavePath; progressStatus.FirstLevelDirectoryNowCount++; string msgFirstLevelDirectory = String.Format(StatusTextFirstLevelDirectory, progressStatus.FirstLevelDirectoryNowCount, progressStatus.FirstLevelDirectoryMaxCount, configurationFolder.DirectoryName); //対象外のフォルダ if (this.SettingsParameters.SaveFolderName.Equals(configurationFolder.DirectoryName, StringComparison.CurrentCultureIgnoreCase)) { //保存先フォルダは対象外なので、次のフォルダへ progressStatus.DispStatus(msgFirstLevelDirectory + " --- 対象外フォルダ"); progressStatus.DispStatus(""); continue; } //フォルダ内の*.cfgを列挙 List <string> cfgList = Common.File.GetFileList(tgtDirectory, "*.cfg", true); if (cfgList.Count == 0) { //ファイル無しは次のフォルダへ progressStatus.DispStatus(msgFirstLevelDirectory + " --- cfgファイル無し"); progressStatus.DispStatus(""); continue; } //ファイル数 progressStatus.CfgFileMaxCount = cfgList.Count; //cfgファイルを1ファイルづつ処理する foreach (string cfgFile in cfgList) { System.Threading.Thread.Sleep(1); //wait if (bw.CancellationPending) //キャンセルされたか調べる { //キャンセルされた e.Cancel = true; return; } string cfgFilename = cfgFile.Substring(tgtDirectory.Length + 1); progressStatus.CfgFileNowCount++; string msgCfgFile = msgFirstLevelDirectory + String.Format(StatusTextCfgFile, progressStatus.CfgFileNowCount, progressStatus.CfgFileMaxCount, cfgFilename); //cfgファイルを1ファイル configurationFile = new ConfigurationData.ConfigurationFile(); if (!Common.File.GetExtension(cfgFile).Equals("cfg", StringComparison.CurrentCultureIgnoreCase)) { //拡張子がcfg以外は何もしない progressStatus.DispStatus(msgCfgFile + " --- 対象外ファイル"); continue; } //cfgファイルを読み込んで解析 if (!configurationFile.AnalysisCfgFile(cfgFile)) { //データなしのため、次のファイルへ progressStatus.DispStatus(msgCfgFile + " --- 翻訳するテキスト無し"); continue; } //データ追加 configurationFolder.Add(configurationFile); //翻訳処理 progressStatus.TranslationMaxCount = configurationFile.TranslationMaxCount; foreach (ConfigurationData.Text.TextData textData in configurationFile.TextDataList) { foreach (ConfigurationData.Translate.TranslateText translateText in textData.TranslateTextList) { System.Threading.Thread.Sleep(1); //wait progressStatus.TranslationNowCount++; if (progressStatus.TranslationMaxCount <= 1) { string msgTranslate = String.Format(StatusTextTranslateOne); progressStatus.DispStatus(msgCfgFile + msgTranslate); } else { string msgTranslate = String.Format(StatusTextTranslate, progressStatus.TranslationNowCount, progressStatus.TranslationMaxCount); progressStatus.DispStatus(msgCfgFile + msgTranslate); } //翻訳処理 translationDataBase.Translate(configurationFolder.DirectoryName, cfgFilename, textData, translateText); } } } //Module Manager用cfgファイルに保存する //データがなければファイルは作成しない configurationFolder.ExportModuleManagerCfgFile(); progressStatus.DispStatus(""); } } finally { //データベース保存 translationDataBase.Save(); } }
/// <summary> /// 翻訳ファイル読み込みボタン /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ImportFileButton_Click(object sender, EventArgs e) { string filename = ""; //記憶されているフォルダのチェック if (this.ImportTranslationFilePath.Equals("") || !Common.File.ExistsDirectory(this.ImportTranslationFilePath)) { //未設定or存在しないので、保存先フォルダを初期値として設定 this.ImportTranslationFilePath = Common.File.CombinePath(this.TargetFolderComboBox.Text.Trim(), this.SaveFolderNameTextBox.Text.Trim()); if (!Common.File.ExistsDirectory(this.ImportTranslationFilePath)) { //存在しない場合はデスクトップ this.ImportTranslationFilePath = Common.File.GetDesktopDirectory(); } } //OpenFileDialogクラスのインスタンスを作成 var openFileDialog = new OpenFileDialog(); openFileDialog.FileName = ""; //はじめに表示されるフォルダを指定する openFileDialog.InitialDirectory = this.ImportTranslationFilePath; //[ファイルの種類]に表示される選択肢を指定 openFileDialog.Filter = "ModuleManager用cfgファイル|*.cfg"; //[ファイルの種類] openFileDialog.FilterIndex = 1; //タイトルを設定する openFileDialog.Title = "翻訳用ModuleManagerのcfgファイルを選択してください。"; //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする openFileDialog.RestoreDirectory = true; //存在しないファイルの名前が指定されたとき警告を表示する openFileDialog.CheckFileExists = true; //存在しないパスが指定されたとき警告を表示する openFileDialog.CheckPathExists = true; //ダイアログを表示する if (openFileDialog.ShowDialog() == DialogResult.OK) { //OKボタンがクリックされた filename = openFileDialog.FileName; //フォルダを記憶 this.ImportTranslationFilePath = Common.File.GetDirectoryName(filename); } if (filename.Equals("")) { //キャンセル return; } try { //翻訳データベース var translationDataBase = new ConfigurationData.TranslationDataBase(); //データベースLoad translationDataBase.Load(); //翻訳データベースへ取り込み int importCount = translationDataBase.ImportTranslationFile(filename); if (importCount == 0) { this.DispErrorMessage(string.Format("取り込むデータはありません。", importCount), false); } else { //データベース保存 translationDataBase.Save(); this.DispErrorMessage(string.Format("{0} 件取り込みました。", importCount), false); } translationDataBase = null; } catch (Exception ex) { this.DispErrorMessage(ex.Message, true); return; } }