public static Dictionary <string, string> MakeFixedDic( string tralnslate_from, string tralnslate_to , string rom_from, string rom_to ) { //よくある定型文の翻訳辞書 Dictionary <string, string> transDic = new Dictionary <string, string>(); if (rom_from != "" && rom_to != "") { transDic = TranslateTextUtil.LoadTranslateDic(tralnslate_from, tralnslate_to, rom_from, rom_to); } //固定文の辞書 TranslateTextUtil.AppendFixedDic(transDic, tralnslate_from, tralnslate_to); return(transDic); }
public void ImportAllText(Form self, string filename) { //少し時間がかかるので、しばらくお待ちください表示. using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait(self)) { Undo.UndoData undodata = Program.Undo.NewUndoData("ImportAllText" + Path.GetFileName(filename) ); uint id = U.NOT_FOUND; string text = ""; string[] lines = File.ReadAllLines(filename); for (int i = 0; i < lines.Length; i++) { string line = lines[i]; if (U.IsComment(line) || U.OtherLangLine(line)) { continue; } line = U.ClipComment(line); if (line.Length <= 0) { continue; } if (!TranslateTextUtil.IsTextIDCode(line)) { text += line + "\r\n"; continue; } //次の数字があったので、現在のテキストの書き込み. pleaseWait.DoEvents("Write:" + U.To0xHexString(id)); WriteText(id, text, undodata); //次のテキスト id = U.atoh(U.substr(line, 1)); text = ""; } //最後のデータ WriteText(id, text, undodata); Program.Undo.Push(undodata); } }
public ToolTranslateROMForm() { InitializeComponent(); FontROMTextBox.AllowDropFilename(); TranslateFormROMFilename.AllowDropFilename(); TranslateToROMFilename.AllowDropFilename(); SimpleTranslateFromROMFilename.AllowDropFilename(); SimpleTranslateToROMFilename.AllowDropFilename(); SimpleTranslateToTranslateDataFilename.AllowDropFilename(); useAutoTranslateCheckBox_CheckedChanged(null, null); int from, to; TranslateTextUtil.TranslateLanguageAutoSelect(out from, out to); U.ForceUpdate(Translate_from, from); U.ForceUpdate(Translate_to, to); UseFontNameTextEdit.Text = UseFontNameTextEdit.Font.FontFamily.ToString(); MakeExplainFunctions(); }
private void ToolSubtitleSetingDialogForm_Load(object sender, EventArgs e) { int from, to; TranslateTextUtil.TranslateLanguageAutoSelect(out from, out to); String dir = Path.GetDirectoryName(Program.ROM.Filename); FromLangString = TranslateTextUtil.GetLangIntCodeToLangText(from); SimpleTranslateFromROMFilename.Text = MainFormUtil.FindOrignalROMByLang(dir, FromLangString); ToLangString = TranslateTextUtil.GetLangIntCodeToLangText(to); SimpleTranslateToROMFilename.Text = MainFormUtil.FindOrignalROMByLang(dir, ToLangString); if (Program.ROM.RomInfo.is_multibyte()) { ShortLength = 10; } else { ShortLength = 20; } }
public void ExportallText(Form self , string writeTextFileName , string tralnslate_from, string tralnslate_to , string rom_from, string rom_to , bool isModifiedTextOnly , bool isOneLiner ) { //少し時間がかかるので、しばらくお待ちください表示. using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait(self)) { FETextDecode decode = new FETextDecode(); Dictionary <string, string> transDic = TranslateTextUtil.MakeFixedDic(tralnslate_from, tralnslate_to, rom_from, rom_to); if (ExportFilterArray != null) { using (StreamWriter writer = new StreamWriter(writeTextFileName)) { List <U.AddrResult> list = TextForm.MakeItemList(); for (int i = 0; i < list.Count; i++) { if (!ExportFilterArray.ContainsKey(i)) { continue; } string text = decode.Decode((uint)i); pleaseWait.DoEvents("Text:" + U.To0xHexString((uint)i)); ExportText(writer, (uint)i, text, tralnslate_from, tralnslate_to, transDic, isModifiedTextOnly, isOneLiner); } } return; } using (StreamWriter writer = new StreamWriter(writeTextFileName)) { //テキスト { List <U.AddrResult> list = TextForm.MakeItemList(); for (int i = 0; i < list.Count; i++) { if (ExportFilterArray != null && ExportFilterArray[i] != false) { continue; } string text = decode.Decode((uint)i); pleaseWait.DoEvents("Text:" + U.To0xHexString((uint)i)); ExportText(writer, (uint)i, text, tralnslate_from, tralnslate_to, transDic, isModifiedTextOnly, isOneLiner); } } //メニュー1 if (Program.ROM.RomInfo.is_multibyte) { List <U.AddrResult> menuDefineList = MenuDefinitionForm.MakeListAll(); for (int n = 0; n < menuDefineList.Count; n++) { if (!U.isSafetyOffset(menuDefineList[n].addr + 8)) { continue; } uint p = menuDefineList[n].addr + 8; if (!U.isSafetyOffset(Program.ROM.p32(p))) { continue; } List <U.AddrResult> list = MenuCommandForm.MakeListPointer(p); for (int i = 0; i < list.Count; i++) { if (!U.isSafetyOffset(list[i].addr)) { continue; } uint text_pointer = list[i].addr + 0; uint textid = Program.ROM.u32(text_pointer); string str = FETextDecode.Direct(textid); if (str.Trim() == "") { continue; } pleaseWait.DoEvents("Menu:" + U.To0xHexString(textid)); ExportText(writer, U.toPointer(text_pointer), str, tralnslate_from, tralnslate_to, transDic, isModifiedTextOnly, isOneLiner); } } } //地形 if (Program.ROM.RomInfo.is_multibyte) { List <U.AddrResult> list = MapTerrainNameForm.MakeList(); for (int i = 0; i < list.Count; i++) { if (!U.isSafetyOffset(list[i].addr)) { continue; } uint text_pointer = list[i].addr + 0; uint textid = Program.ROM.u32(text_pointer); string str = FETextDecode.Direct(textid); if (str.Trim() == "") { continue; } pleaseWait.DoEvents("Terrain:" + U.To0xHexString(textid)); ExportText(writer, U.toPointer(text_pointer), str, tralnslate_from, tralnslate_to, transDic, isModifiedTextOnly, isOneLiner); } } //サウンドルーム //FE7のサウンドルームは、日本語直地 if (Program.ROM.RomInfo.is_multibyte && Program.ROM.RomInfo.version == 7) { List <U.AddrResult> list = SoundRoomForm.MakeList(); for (int i = 0; i < list.Count; i++) { if (!U.isSafetyOffset(list[i].addr)) { continue; } uint text_pointer = list[i].addr + 12; uint textid = Program.ROM.u32(text_pointer); string str = FETextDecode.Direct(textid); if (str.Trim() == "") { continue; } pleaseWait.DoEvents("SoundRoom:" + U.To0xHexString(textid)); ExportText(writer, U.toPointer(text_pointer), str, tralnslate_from, tralnslate_to, transDic, isModifiedTextOnly, isOneLiner); } } //その他文字列 { List <U.AddrResult> list = OtherTextForm.MakeList(); for (int i = 0; i < list.Count; i++) { if (!U.isSafetyOffset(list[i].addr)) { continue; } uint text_pointer = list[i].addr + 0; uint p_str = Program.ROM.p32(text_pointer); string str = Program.ROM.getString(p_str); if (str.Trim() == "") { continue; } pleaseWait.DoEvents("Other:" + U.To0xHexString(p_str)); ExportText(writer, U.toPointer(text_pointer), str, tralnslate_from, tralnslate_to, transDic, isModifiedTextOnly, isOneLiner); } } } } }
public void ImportAllText(Form self, string filename, Undo.UndoData undodata) { //少し時間がかかるので、しばらくお待ちください表示. using (InputFormRef.AutoPleaseWait pleaseWait = new InputFormRef.AutoPleaseWait(self)) { uint id = U.NOT_FOUND; string[] lines = File.ReadAllLines(filename); //上書きするテキスト領域を再利用リストに突っ込む List <Address> list = new List <FEBuilderGBA.Address>(); for (int i = 0; i < lines.Length; i++) { string line = lines[i]; if (U.IsCommentSlashOnly(line) || U.OtherLangLine(line)) { continue; } line = U.ClipComment(line); if (line.Length <= 0) { continue; } if (!TranslateTextUtil.IsTextIDCode(line)) { continue; } AddRecycle(id, list); //次のテキスト id = U.atoh(U.substr(line, 1)); } this.Recycle.AddRecycle(list); this.Recycle.RecycleOptimize(); id = U.NOT_FOUND; string text = ""; for (int i = 0; i < lines.Length; i++) { string line = lines[i]; if (U.IsCommentSlashOnly(line) || U.OtherLangLine(line)) { continue; } line = U.ClipComment(line); if (line.Length <= 0) { continue; } if (!TranslateTextUtil.IsTextIDCode(line)) { text += line + "\r\n"; continue; } //次の数字があったので、現在のテキストの書き込み. pleaseWait.DoEvents("Write:" + U.To0xHexString(id)); WriteText(id, text, undodata); //次のテキスト id = U.atoh(U.substr(line, 1)); text = ""; } //最後のデータ WriteText(id, text, undodata); } }