示例#1
0
        /// <summary>
        /// 日本語化とXMLファイルの保存。
        /// </summary>
        /// <param name="fileID">FileID</param>
        /// <param name="enFolderPath">原文のXMLファイルのパス</param>
        /// <param name="jpFolderPath">日本語版のXMLファイルのパス</param>
        /// <param name="transSheetFile">翻訳シートファイル</param>
        /// <param name="useReferenceID">ReferenceIDの有無</param>
        public static void SaveToXml(
            string fileID,
            string enFolderPath,
            string jpFolderPath,
            MieTransSheetFile transSheetFile,
            bool useReferenceID = false)
        {
            //// StringTableの読み込み
            var enPath = Path.Combine(enFolderPath, fileID + ".stringtable");
            {
                //// Bugfix: stringtable内のNameパラメーターに誤りがあるため、修正する。
                enPath = enPath.Replace("bounty encounters", "bounty_encounters");
            }

            var stringTableFile = StringTableFile.Load(enPath);
            //// ファイル履歴の作成
            MieLanguageHistoryFile mieLanguageHistoryFile = new MieLanguageHistoryFile(stringTableFile.Name);

            //// FileIDを統一形式に変換する。
            var commonFileID = MieStringUtils.NormalizedFileID(fileID);
            var fileCode     = MieHashTools.ComputeFileID(commonFileID);

            if (transSheetFile == null)
            {
                //// 翻訳シートがない場合は転記しない。
            }
            else
            {
                foreach (var entry in stringTableFile.Entries)
                {
                    MieTransSheetEntry sheetEntry = transSheetFile.GetEntry(entry.ID);

                    if (sheetEntry == null || string.IsNullOrWhiteSpace(entry.DefaultText))
                    {
                        //// 原文の翻訳テキストが存在しない場合は転記しない。
                    }
                    else
                    {
                        if (string.IsNullOrWhiteSpace(sheetEntry.DefaultTranslationText))
                        {
                            //// 翻訳テキストが存在しない場合は転記しない。
                        }
                        else
                        {
                            entry.DefaultText = sheetEntry.DefaultTranslationText;
                            if (!string.IsNullOrWhiteSpace(entry.FemaleText))
                            {
                                //// 女性版テキストが存在する場合は標準テキストを転記する。
                                entry.FemaleText = sheetEntry.DefaultTranslationText;
                            }
                        }
                    }

                    if (sheetEntry != null)
                    {
                        if (sheetEntry.FileID.StartsWith(@"game"))
                        {
                            if (useReferenceID)
                            {
                                entry.DefaultText = $"{sheetEntry.ReferenceID}:{entry.DefaultText}";
                            }
                        }
                    }
                }
            }

            var jpPath   = Path.Combine(jpFolderPath, fileID + ".stringtable");
            var jpFolder = Path.GetDirectoryName(jpPath);

            MieCommonUtils.SafeCreateDirectory(jpFolder);
            StringTableFile.Save(stringTableFile, jpPath, StringTableFile.ExportType.Xml);
        }
示例#2
0
        public static void CreateXml(
            string fileID,
            MieLanguageFile langFile,
            string jpPath,
            MieTransSheetFile transSheetFile,
            bool useMT,
            bool useReferenceID)
        {
            var stringTableFile = new StringTableFile(fileID);

            foreach (var tableEntry in langFile.Items)
            {
                MieTransSheetEntry transSheetEntry = null;
                if (transSheetFile != null)
                {
                    transSheetEntry = transSheetFile.GetEntry(tableEntry.ID);
                }

                var translatedText = string.Empty;
                if (transSheetEntry == null)
                {
                    //// 翻訳シートエントリーがないので、ReferenceIDを個別に算出。
                    //// no | useRef | en | result
                    //// 0  |    o   |  o | ref付きen
                    //// 1  |    o   |  x | en
                    //// 2  |    x   |  o | en
                    //// 3  |    x   |  x | en
                    if (useReferenceID && !string.IsNullOrEmpty(tableEntry.DefaultText)) //// 0
                    {
                        //// 翻訳シートにエントリーが存在しない。
                        logger.Error($"TransSheetEntry not found. Product({tableEntry.ProductLine.ToString()}) FileID({fileID}), ID({tableEntry.ID})");

                        //// ReferenceIDを算出。
                        long referenceID = MieHashTools.ComputeReferenceID(stringTableFile.Name, tableEntry.ID);
                        //// ReferenceIDからhash文字列を生成
                        var strReferenceID = $"{MieHashTools.ComputeHashIds(referenceID)}:";

                        translatedText = $"{strReferenceID}{tableEntry.DefaultText}";
                    }
                    else
                    {
                        translatedText = tableEntry.DefaultText;
                    }
                }
                else
                {
                    //// 翻訳
                    translatedText = transSheetEntry.Translate(tableEntry.DefaultText, useMT, useReferenceID);
                }

                if (string.IsNullOrWhiteSpace(tableEntry.FemaleText))
                {
                    //// 女性の台詞なしの場合。
                    var entry = new StringTableFile.Entry(tableEntry.ID, translatedText);
                    stringTableFile.Entries.Add(entry);
                }
                else
                {
                    //// 女性の台詞ありの場合。
                    //// 男性と同じ台詞を割り当てる。
                    var entry = new StringTableFile.Entry(tableEntry.ID, translatedText, translatedText);
                    stringTableFile.Entries.Add(entry);
                }
            }

            Console.WriteLine(fileID);
            SaveToXml(fileID, stringTableFile, jpPath);
        }