/// <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);
        }
Ejemplo n.º 3
0
        /// <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();
            }
        }