コード例 #1
0
ファイル: Program.cs プロジェクト: synctam/PfkJpModAid
        private static void MakeCsv(TOptions.TArgs opt)
        {
            var langInfo = new PfkLanguageInfo();

            //// 原文を読み込み言語情報を作成する。
            PfkLanguageDao.LoadFromFile(langInfo, opt.FileNameLangInput);

            //// 言語情報から翻訳シートを出力する。制御文字はタグ化する。
            if (opt.RowsPerSheet > 0)
            {
                //// シートを分割する。
                var dir      = Path.GetDirectoryName(Path.GetFullPath(opt.FileNameSheet));
                var fileName = Path.GetFileNameWithoutExtension(opt.FileNameSheet);

                int total = langInfo.GetEntryCountWithoutEmpty();
                var count = total / opt.RowsPerSheet;
                for (var i = 0; i < count + 1; i++)
                {
                    var path = Path.Combine(dir, $"{fileName}_{i + 1}.csv");
                    var from = i * opt.RowsPerSheet;
                    var to   = (i * opt.RowsPerSheet) + opt.RowsPerSheet - 1;
                    PfkTransSheetDao.SaveToCsv(
                        langInfo, path, from, to, opt.UseTag);
                }
            }
            else
            {
                //// シートを分割しない。
                PfkTransSheetDao.SaveToCsv(
                    langInfo, opt.FileNameSheet, 0, 9999999, opt.UseTag);
            }
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: synctam/PfkJpModAid
        private static void MakeExcel(TOptions.TArgs opt)
        {
            var langInfo = new PfkLanguageInfo();

            PfkLanguageDao.LoadFromFile(langInfo, opt.FileNameLangInput);

            var fanInfo = new PfkLanguageInfo();

            if (!string.IsNullOrWhiteSpace(opt.FileNameFanInput))
            {
                //// 有志翻訳版の言語情報を作成する。
                PfkLanguageDao.LoadFromFile(fanInfo, opt.FileNameFanInput);
            }

            //// UMM対応版データを読み込む。
            var ummDataInfo = new PfkUmmDataInfo();

            if (!string.IsNullOrEmpty(opt.FileNameUmm))
            {
                PfkUmmDataDao.LoadFromCsv(ummDataInfo, opt.FileNameUmm);
            }

            PfkTransSheetDao.SaveToExcel(
                langInfo, fanInfo, ummDataInfo, opt.FileNameSheet, opt.RowsPerSheet, opt.UseTag);
        }
コード例 #3
0
        /// <summary>
        /// 比較用翻訳シートを出力する。
        /// (比較用のため、出力項目は、キーと原文のみ)
        /// </summary>
        /// <param name="langInfo">言語情報</param>
        /// <param name="path">CSV形式の翻訳シートのパス</param>
        /// <param name="from">シート分割の始点</param>
        /// <param name="to">シート分割の終点</param>
        /// <param name="useTag">タグ化の有無</param>
        public static void SaveToCsv(
            PfkLanguageInfo langInfo, string path, int from, int to, bool useTag)
        {
            using (var sw = new StreamWriter(path, false, Encoding.UTF8))
            {
                using (var writer = new CsvWriter(sw, CultureInfo.InvariantCulture))
                {
                    writer.Configuration.RegisterClassMap <CsvMapperTransSheetForCompare>();
                    writer.WriteHeader <PfkTransSheetEntry>();
                    writer.NextRecord();
                    int total = 0;
                    foreach (var langFile in langInfo.Items.Values)
                    {
                        foreach (var langEntry in langFile.Items.Values)
                        {
                            if (string.IsNullOrWhiteSpace(langEntry.Text))
                            {
                                continue;
                            }

                            if (total >= from && total <= to)
                            {
                                // 出力
                                var data = new PfkTransSheetEntry();

                                data.English = langEntry.Text;

                                if (useTag)
                                {
                                    //// 制御文字をタグ化する。
                                    data.English = PfkTransSheetEntry.GetEscapedText(data.English);
                                }

                                //// TAB文字は無条件にタグ化する。
                                //// 理由:CSVファイルを表計算ソフトで読み込んだ場合、TAB文字は無視されてしまう場合があるため。
                                data.English = PfkTransSheetEntry.GetEscapedTab(data.English);

                                data.Key = langEntry.Key;
                                writer.WriteRecord(data);
                                writer.NextRecord();
                            }

                            total++;
                        }
                    }
                }
            }
        }
コード例 #4
0
        public static void SaveToExcel(
            PfkLanguageInfo langInfo,
            PfkLanguageInfo funInfo,
            PfkUmmDataInfo ummDataInfo,
            string path,
            int maxRowCount,
            bool useTag)
        {
            using (var workbook = new XLWorkbook())
            {
                IXLWorksheet worksheet = null;

                bool useFunTrans = false;
                if (funInfo.Items.Count > 0)
                {
                    useFunTrans = true;
                }

                if (maxRowCount == 0)
                {
                    maxRowCount = 9999999;
                }

                int sheetNo = 1;
                foreach (var langFile in langInfo.Items.Values)
                {
                    int sequenceNo = 1;
                    int rowNo      = maxRowCount + 2;
                    foreach (var langEntry in langFile.Items.Values)
                    {
                        if (string.IsNullOrWhiteSpace(langEntry.Text))
                        {
                            continue;
                        }

                        if (rowNo > maxRowCount + 1)
                        {
                            worksheet = workbook.Worksheets.Add($"Sheet{sheetNo}");
                            sheetNo++;

                            //// ヘッダー出力
                            WriteExcelHeader(worksheet);

                            rowNo = 2;
                        }

                        // 出力
                        var data = new PfkTransSheetEntry();

                        data.Key     = langEntry.Key;
                        data.English = langEntry.Text;

                        //// 有志翻訳版が指定された場合は、有志翻訳のデータを反映する。
                        if (useFunTrans)
                        {
                            var funEntry = funInfo.GetEntry(langEntry.Key);
                            if (JapaneseStringUtils.TJapaneseStringUtils.ContainsJapanese(funEntry.Text))
                            {
                                data.Japanese = funEntry.Text;
                            }
                        }

                        if (useTag)
                        {
                            //// 制御文字をタグ化する。
                            data.English  = PfkTransSheetEntry.GetEscapedText(data.English);
                            data.Japanese = PfkTransSheetEntry.GetEscapedText(data.Japanese);
                        }

                        //// TAB文字は無条件にタグ化する。
                        //// 理由:CSVファイルを表計算ソフトで読み込んだ場合、TAB文字は無視されてしまう場合があるため。
                        data.English  = PfkTransSheetEntry.GetEscapedTab(data.English);
                        data.Japanese = PfkTransSheetEntry.GetEscapedTab(data.Japanese);

                        //// UMMデータの取得
                        var ummDataEntry = ummDataInfo.GetEntry(data.Key);
                        if (ummDataEntry == null)
                        {
                            data.MachineTranslation = string.Empty;
                        }
                        else
                        {
                            //// UMMデータがある場合は機械翻訳として取り込む。
                            data.MachineTranslation = PfkTransSheetEntry.GetEscapedTab(ummDataEntry.Value);
                        }

                        //// リファレンスIDを算出する。
                        data.ReferenceID = PfkHashTools.ComputeHashX(langEntry.Key.ToString());
                        data.Sequence    = sequenceNo;

                        //// 各カラムの属性を設定する。
                        int dummyInt = 0;
                        if (int.TryParse(data.English, out dummyInt))
                        {
                            //// 符号付き数値を適切の扱うための対処。
                            //// シングルコーテーションを付けた文字列形式で格納する。
                            worksheet.Cell(rowNo, 2).Style.NumberFormat.Format = "@";
                            worksheet.Cell(rowNo, 2).Style.IncludeQuotePrefix  = true;

                            worksheet.Cell(rowNo, 3).Style.NumberFormat.Format = "@";
                            worksheet.Cell(rowNo, 3).Style.IncludeQuotePrefix  = true;
                        }
                        else if (
                            data.English.StartsWith("-") ||
                            data.English.StartsWith("+") ||
                            data.English.StartsWith("="))
                        {
                            //// 計算式と誤認されないようにするための対処。
                            //// シングルコーテーションを付けた標準形式で格納する。
                            //// (注:文字列形式では255文字以上のデータがエラーとなるため不可)
                            worksheet.Cell(rowNo, 2).Style.IncludeQuotePrefix = true;
                            worksheet.Cell(rowNo, 3).Style.IncludeQuotePrefix = true;
                        }
                        else
                        {
                            //// 上記以外のデータは標準形式とする。
                        }

                        //// データを転機する。
                        worksheet.Cell(rowNo, 1).Value = data.Key;
                        worksheet.Cell(rowNo, 2).Value = data.English;
                        worksheet.Cell(rowNo, 3).Value = data.Japanese;
                        worksheet.Cell(rowNo, 4).Value = data.MachineTranslation;
                        worksheet.Cell(rowNo, 5).Style.NumberFormat.Format = "@";
                        worksheet.Cell(rowNo, 5).Style.IncludeQuotePrefix  = true;
                        worksheet.Cell(rowNo, 5).Value = data.ReferenceID;
                        worksheet.Cell(rowNo, 6).Value = data.Sequence;

                        rowNo++;

                        sequenceNo++;
                    }
                }

                workbook.SaveAs(path);
            }
        }