Ejemplo n.º 1
0
        /// <summary>
        /// StringTableを読み込み、言語ファイルを返す。
        /// 言語ファイルにファイル履歴の枠組みを作成し設定する。
        /// </summary>
        /// <param name="path">StringTableファイルのパス</param>
        /// <param name="productLine">製品区分</param>
        /// <param name="fileID">FileID</param>
        /// <returns>言語ファイル</returns>
        public static MieLanguageFile LoadFromXml(string path, MieProduct.NProductLine productLine, out string fileID)
        {
            //// StringTableの読み込み
            var stringTableFile = StringTableFile.Load(path);
            //// ファイル履歴の作成
            MieLanguageHistoryFile mieLanguageHistoryFile = new MieLanguageHistoryFile(stringTableFile.Name);

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

            var mieLanguageFile = new MieLanguageFile(fileCode);

            stringTableFile
            .Entries
            .ForEach(entry =>
            {
                var referenceID      = MieTranslationLib.MieUtils.MieHashTools.ComputeReferenceID(stringTableFile.Name, entry.ID);
                var mieLanguageEntry = new MieLanguageEntry(entry.ID, entry.DefaultText, entry.FemaleText, productLine, referenceID);
                mieLanguageFile.AddEntry(mieLanguageEntry);
            });

            return(mieLanguageFile);
        }
Ejemplo n.º 2
0
        public static void SaveToSysyemDB(MieSystemDB systemDb, MieLanguageInfo langInfo)
        {
            using (SQLiteTransaction trans = systemDb.Connection.BeginTransaction())
            {
                foreach (var langFile in langInfo.Items.Values)
                {
                    if (langFile.FileCode == 0)
                    {
                        var msg = $"Unknown FileCode({langFile.FileCode}).";
                        logger.Fatal(msg);
                        throw new Exception(msg);
                    }
                    else
                    {
                        SQLiteCommand cmd = systemDb.Connection.CreateCommand();
                        cmd.CommandText = "INSERT INTO LanguageEntries VALUES(@FileCode,@ID,@ReferenceID,@ReferenceText,@DefaultText,@FemaleText,@ProductLine,@UpdatedAt);";
                        //// パラメータのセット
                        cmd.Parameters.Add("FileCode", System.Data.DbType.Int64);
                        cmd.Parameters.Add("ID", System.Data.DbType.Int32);
                        cmd.Parameters.Add("ReferenceID", System.Data.DbType.Int64);
                        cmd.Parameters.Add("ReferenceText", System.Data.DbType.String);
                        cmd.Parameters.Add("DefaultText", System.Data.DbType.String);
                        cmd.Parameters.Add("FemaleText", System.Data.DbType.String);
                        cmd.Parameters.Add("ProductLine", System.Data.DbType.Int32);
                        cmd.Parameters.Add("UpdatedAt", System.Data.DbType.Int64);

                        foreach (var entry in langFile.Items)
                        {
                            cmd.Parameters["FileCode"].Value      = langFile.FileCode;
                            cmd.Parameters["ID"].Value            = entry.ID;
                            cmd.Parameters["ReferenceID"].Value   = entry.ReferenceID;
                            cmd.Parameters["ReferenceText"].Value = MieHashTools.ComputeHashIds(entry.ReferenceID);
                            cmd.Parameters["DefaultText"].Value   = entry.DefaultText;
                            cmd.Parameters["FemaleText"].Value    = entry.FemaleText;
                            cmd.Parameters["ProductLine"].Value   = (int)entry.ProductLine;
                            cmd.Parameters["UpdatedAt"].Value     = entry.UpdatedAt.Ticks;

                            try
                            {
                                cmd.ExecuteNonQuery();
                            }
                            catch (Exception ex)
                            {
                                logger.Error(ex, $"LanguageEntries: FileCode({langFile.FileCode}) ID({entry.ID})");
                            }
                        }
                    }
                }

                trans.Commit();
            }
        }
Ejemplo n.º 3
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);
        }
Ejemplo n.º 4
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);
        }