/// <summary> /// 翻訳データ取り込み /// </summary> /// <returns>取り込み件数</returns> public int ImportTranslationFile( string filename ) { //取り込み件数 int importCount = 0; var where = new System.Text.StringBuilder(); //cfgファイルを読み込んで解析 var configurationFile = new ConfigurationData.ConfigurationFile(); if ( !configurationFile.AnalysisCfgFile( filename , true ) ) { //データなし return 0; } //DBのデータ置換処理 foreach ( ConfigurationData.Text.TextData textData in configurationFile.TextDataList ) { //処理対象DBを判定 DataTable.TranslationDataTable tgtDB = this.TranslationDataTable[textData.DataType]; //件数分ループ foreach ( ConfigurationData.Translate.TranslateText translateText in textData.TranslateTextList ) { if ( translateText.SourceText != "" ) { //データが存在するか検索 DataRow[] selectRow = tgtDB.GetExistsDataRow(null,textData,translateText); if ( selectRow.Length > 0 ) { //データ存在 foreach ( DataRow tgtRow in selectRow ) { //データがあるため、値が異なっていたら置換する tgtDB.SetDataValue( tgtRow , DataTable.TranslationDataTable.ColumnNameJapaneseText , translateText.SourceText ); if ( tgtRow.RowState != DataRowState.Unchanged ) { importCount++; // 更新日 tgtDB.SetDataValue( tgtRow , DataTable.TranslationDataTable.ColumnNameUpdateDate , System.DateTime.Now.ToString( "yyyy-MM-dd HH:mm:ss" ) ); tgtDB.SetDataValue( tgtRow , DataTable.TranslationDataTable.ColumnNameAutoTrans , false ); tgtDB.SetDataValue( tgtRow , DataTable.TranslationDataTable.ColumnNameMemo , "翻訳取込" ); } } } else { //データ存在しないため登録しない } } } } return importCount; }
/// <summary> /// 翻訳データ取り込み /// </summary> /// <returns>取り込み件数</returns> public int ImportTranslationFile(string filename) { //取り込み件数 int importCount = 0; var where = new System.Text.StringBuilder(); //cfgファイルを読み込んで解析 var configurationFile = new ConfigurationData.ConfigurationFile(); if (!configurationFile.AnalysisCfgFile(filename, true)) { //データなし return(0); } //DBのデータ置換処理 foreach (ConfigurationData.Text.TextData textData in configurationFile.TextDataList) { //処理対象DBを判定 DataTable.TranslationDataTable tgtDB = this.TranslationDataTable[textData.DataType]; //件数分ループ foreach (ConfigurationData.Translate.TranslateText translateText in textData.TranslateTextList) { if (translateText.SourceText != "") { //データが存在するか検索 DataRow[] selectRow = tgtDB.GetExistsDataRow(null, textData, translateText); if (selectRow.Length > 0) { //データ存在 foreach (DataRow tgtRow in selectRow) { //データがあるため、値が異なっていたら置換する tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameJapaneseText, translateText.SourceText); if (tgtRow.RowState != DataRowState.Unchanged) { importCount++; // 更新日 tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameUpdateDate, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameAutoTrans, false); tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameMemo, "翻訳取込"); } } } else { //データ存在しないため登録しない } } } } return(importCount); }
/// <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(); } }