/// <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);
        }
Пример #2
0
        /// <summary>
        /// 英語から日本語へ翻訳
        /// </summary>
        /// <param name="TranslateText"></param>
        public void Translate(string directoryName,
                              string cfgFilename,
                              Text.TextData textData,
                              Translate.TranslateText translateText)
        {
            if (directoryName.Equals("") ||
                cfgFilename.Equals("") ||
                translateText.SourceText.Equals(""))
            {
                return;
            }

            //dataOrder
            if (!this.DataOrder.ContainsKey(directoryName))
            {
                this.DataOrder.Add(directoryName, new Dictionary <DataType, int>());
            }
            if (!(this.DataOrder[directoryName]).ContainsKey(textData.DataType))
            {
                (this.DataOrder[directoryName]).Add(textData.DataType, 1);
            }
            int dataOrder = (this.DataOrder[directoryName])[textData.DataType]++;

            try
            {
                //処理対象DB
                DataTable.TranslationDataTable tgtDB = this.TranslationDataTable[textData.DataType];

                //DBに存在するかチェック
                DataRow[] selectRow = tgtDB.GetExistsDataRow(directoryName, textData, translateText);
                if (selectRow.Length > 0)
                {
                    //データが存在する

                    DataRow tgtRow      = selectRow[0];
                    DataRow sameTextRow = null;

                    //データあり
                    translateText.JapaneseText = ( string )tgtRow[DataTable.TranslationDataTable.ColumnNameJapaneseText];

                    //存在チェックありに変更
                    tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameExists, true);

                    //Order
                    tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameSortOrder, dataOrder);

                    //変更無しに設定
                    tgtRow.AcceptChanges();



                    //元テキスト変更の場合
                    if (!translateText.SourceText.Equals(( string )tgtRow[DataTable.TranslationDataTable.ColumnNameEnglishText]))
                    {
                        //英語テキスト変更
                        tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameEnglishText, translateText.SourceText);
                        tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameMemo, "英語テキスト変更");

                        //英語テキスト変更のため再翻訳
                        //翻訳済みテキストと同じデータがあればそれを使用する
                        sameTextRow = tgtDB.SearchSameText(translateText.SourceText);
                        if (sameTextRow != null)
                        {
                            translateText.JapaneseText = ( string )sameTextRow[DataTable.TranslationDataTable.ColumnNameJapaneseText];

                            //備考
                            tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameMemo, "英語テキスト変更:同じ英語テキストから日本語を取得");
                            tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameAutoTrans, sameTextRow[DataTable.TranslationDataTable.ColumnNameAutoTrans]);
                        }
                    }
                    else if (translateText.JapaneseText.Equals(""))
                    {
                        //未翻訳
                        //翻訳済みテキストと同じデータがあればそれを使用する
                        sameTextRow = tgtDB.SearchSameText(translateText.SourceText);
                        if (sameTextRow != null)
                        {
                            translateText.JapaneseText = ( string )sameTextRow[DataTable.TranslationDataTable.ColumnNameJapaneseText];

                            //備考
                            tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameMemo, "同じ英語テキストから日本語を取得");
                            tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameAutoTrans, sameTextRow[DataTable.TranslationDataTable.ColumnNameAutoTrans]);
                        }
                    }
                    else if (tgtRow[DataTable.TranslationDataTable.ColumnNameAutoTrans].Equals(true))
                    {
                        //自動翻訳の場合で、英語データが同じで手動翻訳の場合はそちらを使用する
                        sameTextRow = tgtDB.SearchSameText(translateText.SourceText);
                        if (sameTextRow != null && sameTextRow[DataTable.TranslationDataTable.ColumnNameAutoTrans].Equals(false))
                        {
                            translateText.JapaneseText = ( string )sameTextRow[DataTable.TranslationDataTable.ColumnNameJapaneseText];

                            //備考
                            tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameMemo, "同じ英語テキストから日本語を取得");
                            tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameAutoTrans, sameTextRow[DataTable.TranslationDataTable.ColumnNameAutoTrans]);
                        }
                    }


                    //空欄の場合や元テキストが変更され、同じ翻訳データが無い場合は再翻訳
                    if (translateText.JapaneseText.Equals("") && this.TranslatorApi != null)
                    {
                        //自動翻訳
                        translateText.JapaneseText = this.ProperNoun.ReinstateDummyText(
                            this.TranslatorApi.TranslateEnglishToJapanese(
                                this.ProperNoun.ReplaceDummyText(directoryName, translateText.SourceText, textData.DataType)
                                )
                            );
                        if (!translateText.JapaneseText.Equals(""))
                        {
                            tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameMemo, "自動翻訳で日本語を取得");
                            tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameAutoTrans, true);
                        }
                    }

                    //日本語が変更されていたらデータ保存
                    tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameJapaneseText, translateText.JapaneseText);

                    //タイトル等データをセット
                    tgtDB.SetTitleData(tgtRow, textData, translateText);


                    if (tgtRow.RowState != DataRowState.Unchanged)
                    {
                        //変更された
                        // 更新日
                        tgtDB.SetDataValue(tgtRow, DataTable.TranslationDataTable.ColumnNameUpdateDate, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                    }

                    //コメント設定
                    translateText.Comment = String.Format("{0} {1}",
                                                          tgtRow[DataTable.TranslationDataTable.ColumnNameUpdateDate],
                                                          tgtRow[DataTable.TranslationDataTable.ColumnNameMemo]);
                }
                else
                {
                    //データ無し

                    //新規レコード追加
                    //新規行
                    DataRow newRow      = tgtDB.NewRow();
                    DataRow sameTextRow = null;

                    // 備考
                    tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameMemo, "新規追加");

                    //翻訳済みで英語テキストが同じデータがあればそれを使用する
                    sameTextRow = tgtDB.SearchSameText(translateText.SourceText);
                    if (sameTextRow != null)
                    {
                        translateText.JapaneseText = ( string )sameTextRow[DataTable.TranslationDataTable.ColumnNameJapaneseText];

                        tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameMemo, "新規追加:同じ英語テキストから日本語を取得");
                        tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameAutoTrans, sameTextRow[DataTable.TranslationDataTable.ColumnNameAutoTrans]);
                    }
                    else
                    {
                        //データ無しの場合は自動翻訳
                        if (translateText.JapaneseText.Equals("") && this.TranslatorApi != null)
                        {
                            //自動翻訳
                            translateText.JapaneseText = this.ProperNoun.ReinstateDummyText(
                                this.TranslatorApi.TranslateEnglishToJapanese(
                                    this.ProperNoun.ReplaceDummyText(directoryName, translateText.SourceText, textData.DataType)
                                    )
                                );

                            if (!translateText.JapaneseText.Equals(""))
                            {
                                tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameMemo, "新規追加:自動翻訳で日本語を取得");
                                tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameAutoTrans, true);
                            }
                        }
                    }

                    //フォルダ名
                    tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameDirName, directoryName);
                    // 元テキスト
                    tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameEnglishText, translateText.SourceText);
                    // 日本語テキスト
                    tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameJapaneseText, translateText.JapaneseText);
                    // cfgファイル名
                    tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameCgfFileName, cfgFilename);

                    // 追加日
                    tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameAddDate, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                    // 更新日
                    tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameUpdateDate, System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

                    //Order
                    tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameSortOrder, dataOrder);

                    //存在チェック
                    tgtDB.SetDataValue(newRow, DataTable.TranslationDataTable.ColumnNameExists, true);

                    //タイトル等データをセット
                    tgtDB.SetTitleData(newRow, textData, translateText);

                    //新規追加
                    tgtDB.Rows.Add(newRow);

                    //コメント設定
                    translateText.Comment = String.Format("{0} {1}",
                                                          newRow[DataTable.TranslationDataTable.ColumnNameUpdateDate],
                                                          newRow[DataTable.TranslationDataTable.ColumnNameMemo]);
                }
            }
            catch
            {
                throw;
            }
        }