Exemple #1
0
        private static void MakeMod(TOptions.TArgs opt)
        {
            //// 用語集の読み込み
            PfkGlossaryInfo glossaryInfo = null;

            if (string.IsNullOrWhiteSpace(opt.FileNameGlossary))
            {
                glossaryInfo = new PfkGlossaryInfo();
            }
            else
            {
                glossaryInfo = PfkGlossaryDao.LoadFromCsv(opt.FileNameGlossary);
            }

            //// 翻訳シートを読み込む
            var sheetInfo = new PfkTransSheetInfo();
            var fileID    = "enGB";

            switch (opt.SheetType)
            {
            case TOptions.NSheetType.Unknown:
                break;

            case TOptions.NSheetType.SingleFile:
                //// タグの制御文字への変換は副作用がないため、必ず実行する。
                PfkTransSheetDao.LoadFromFile(sheetInfo, opt.FileNameSheet, fileID, true);
                break;

            case TOptions.NSheetType.MultiFile:
                PfkTransSheetDao.LoadFromFolder(sheetInfo, opt.FileNameSheet, fileID, true);
                break;

            default:
                throw new Exception($"Unknown error. Sheet type({opt.SheetType})");
            }

            if (opt.UseUnityModMan)
            {
                //// UMM形式のCSVファイルを出力する(タグは制御文字に変換する)。
                PfkUmmDataDao.SaveToUmmFile(
                    opt.FileNameInput,
                    sheetInfo,
                    glossaryInfo,
                    opt.FileNameOutput,
                    opt.UseReferenceId,
                    opt.UseMachineTrans,
                    opt.MtransMark,
                    opt.UseForceMt);
            }
            else
            {
                //// 翻訳済みJSONファイルを出力する(タグは制御文字に変換する)。
                PfkLanguageDao.SaveToFile(
                    opt.FileNameInput,
                    sheetInfo,
                    glossaryInfo,
                    opt.FileNameOutput,
                    opt.UseReferenceId,
                    opt.UseMachineTrans,
                    opt.MtransMark,
                    opt.UseForceMt);
            }
        }
        /// <summary>
        /// 翻訳済みのJSONファイルを出力する。
        /// </summary>
        /// <param name="originalPath">原文の言語ファイルのパス</param>
        /// <param name="sheetInfo">翻訳情報</param>
        /// <param name="glossaryInfo">用語集情報</param>
        /// <param name="fileNameOutput">翻訳されたJSONファイルのパス</param>
        /// <param name="useReferenceID">ReferenveIDの有無</param>
        /// <param name="useMT">機械翻訳の有無</param>
        /// <param name="mtMark">機械翻訳の印</param>
        /// <param name="forceMT">置換文字などの特殊文字列を含む場合でも機械翻訳を適用する</param>
        public static void SaveToFile(
            string originalPath,
            PfkTransSheetInfo sheetInfo,
            PfkGlossaryInfo glossaryInfo,
            string fileNameOutput,
            bool useReferenceID,
            bool useMT,
            string mtMark,
            bool forceMT)
        {
            bool useGlossary = false;

            if (glossaryInfo.Count > 0)
            {
                //// 用語集が未指定(空)の場合は、用語集を使用しない。
                useGlossary = true;
            }

            //// 原文の言語ファイルのパスからFileIDを取得する。
            var fileID = PfkLanguageFile.GetFileID(originalPath);
            //// FileIDに該当する翻訳ファイルを取得する。
            var sheetFile = sheetInfo.GetFile(fileID);

            if (sheetFile == null)
            {
                throw new Exception($"Trans sheet file not found. File({originalPath})");
            }

            //// 原文を読み込む。
            var text = string.Empty;

            using (var sr = new StreamReader(originalPath, Encoding.UTF8))
            {
                text = sr.ReadToEnd();
            }

            //// JSONテキストから、言語情報を取得する。
            var jsonData = PfkGameDesignBase.FromJson(text);

            foreach (var stringPair in jsonData.Strings)
            {
                var sheetEntry = sheetFile.GetEntry(stringPair.Key);
                //// 翻訳済みテキストを取得する。
                var translatedText = sheetEntry.Translate(stringPair.Value, useMT, mtMark, forceMT);
                //// ReferenceIDを付加する。
                if (useReferenceID && !string.IsNullOrWhiteSpace(translatedText))
                {
                    translatedText = $"#{sheetEntry.ReferenceID}:{translatedText}";
                }

                if (useGlossary)
                {
                    //// 用語を置換する。
                    translatedText = glossaryInfo.ReplaceVariable(
                        translatedText, PfkGlossaryEntry.NConversionType.NounTranslate, string.Empty);
                }

                //// JSONに翻訳済みテキストを反映する。
                stringPair.Value = translatedText;
            }

            //// フォーマット済みの形式でJSONファイル書き出す。
            QuickType.Converter.Settings.Formatting = Newtonsoft.Json.Formatting.Indented;
            //// JSON形式のテキストを取得する。
            var translatedJson = Serialize.ToJson(jsonData);
            var utf8WithoutBom = new UTF8Encoding(false);

            //// UTF-8(BOMなし)で出力する。
            using (var sw = new StreamWriter(fileNameOutput, false, utf8WithoutBom))
            {
                sw.Write(translatedJson);
            }
        }
Exemple #3
0
        /// <summary>
        /// UMM形式のCSVファイルの保存。
        /// </summary>
        /// <param name="originalPath">原文のパス</param>
        /// <param name="sheetInfo">翻訳シートのパス</param>
        /// <param name="glossaryInfo">用語集のパス</param>
        /// <param name="fileNameOutput">日本語化ファイルのパス</param>
        /// <param name="useReferenceID">ReferenceIDの出力有無</param>
        /// <param name="useMT">機械翻訳の使用有無</param>
        /// <param name="mtMark">機械翻訳テキストの先頭に表示する文字</param>
        /// <param name="forceMT">機械翻訳使用時、置換文字などの特殊文字列を含む場合でも機械翻訳を使用する</param>
        public static void SaveToUmmFile(
            string originalPath,
            PfkTransSheetInfo sheetInfo,
            PfkGlossaryInfo glossaryInfo,
            string fileNameOutput,
            bool useReferenceID,
            bool useMT,
            string mtMark,
            bool forceMT)
        {
            bool useGlossary = false;

            if (glossaryInfo.Count > 0)
            {
                //// 用語集が未指定(空)の場合は、用語集を使用しない。
                useGlossary = true;
            }

            //// 原文の言語ファイルのパスからFileIDを取得する。
            var fileID = PfkLanguageFile.GetFileID(originalPath);
            //// FileIDに該当する翻訳ファイルを取得する。
            var sheetFile = sheetInfo.GetFile(fileID);

            if (sheetFile == null)
            {
                throw new Exception($"Trans sheet file not found. File({originalPath})");
            }

            //// 原文を読み込む。
            var text = string.Empty;

            using (var sr = new StreamReader(originalPath, Encoding.UTF8))
            {
                text = sr.ReadToEnd();
            }

            //// JSONテキストから、言語情報を取得する。
            var jsonData = PfkGameDesignBase.FromJson(text);

            using (var sw = new StreamWriter(fileNameOutput, false, Encoding.UTF8))
            {
                using (var writer = new CsvWriter(sw, CultureInfo.InvariantCulture))
                {
                    writer.Configuration.RegisterClassMap <CsvMapperUmm>();
                    writer.WriteHeader <PfkUmmDataEntry>();
                    writer.NextRecord();

                    int no = 1;
                    foreach (var stringPair in jsonData.Strings)
                    {
                        var ummEntry = new PfkUmmDataEntry();

                        var sheetEntry = sheetFile.GetEntry(stringPair.Key);
                        //// 翻訳済みテキストを取得する。
                        var translatedText = sheetEntry.Translate(stringPair.Value, useMT, mtMark, forceMT);
                        //// ReferenceIDを付加する。
                        if (useReferenceID && !string.IsNullOrWhiteSpace(translatedText))
                        {
                            translatedText = $"#{sheetEntry.ReferenceID}:{translatedText}";
                        }

                        if (useGlossary)
                        {
                            //// 用語を置換する。
                            translatedText = glossaryInfo.ReplaceVariable(
                                translatedText, PfkGlossaryEntry.NConversionType.NounTranslate, string.Empty);
                        }

                        ummEntry.Key   = stringPair.Key;
                        ummEntry.Value = translatedText;
                        ummEntry.No    = sheetEntry.ReferenceID;
                        writer.WriteRecord(ummEntry);
                        writer.NextRecord();
                        no++;
                    }
                }
            }
        }