Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- import io
- import re
- import os
- pathOrg = "./TEXTDUMP/EU.nds/" #You might need to update the ROM folder name
- pathTrans = "./Localize/de/msg/" #You might need to update the locale name
- filesBIG = ["battle", "bgm", "cmes0", "cmes1", "cmes2", "cmes3", "cmes4", "cmes5", "comu0", "ev_title",
- "ex_ending", "ex_illust", "ex_item", "ex_itemget", "ex_mon", "ex_monspot", "ex_montec",
- "exms0", "exms1", "exms2", "exms3", "extra", "item", "item_mes", "item_mes2", "item_sub", "kmes0",
- "kmes1", "kmes2", "map", "mesi0", "mesk0", "mesk1", "mesk2", "mesk3", "mesk4", "mess0",
- "mest1", "mest2", "mest3", "mest4", "mest5", "mon_tec", "monster", "msg01", "msg02", "msg03", "msg04",
- "player", "ques0", "tec_mes", "tech", "w_map", "zukan" ]
- filesSMALL = ["sfc_btl", "sfc_item", "sfc_mon", "sfc_tec", "small"]
- if not os.path.exists(pathOrg + "/translated/BIG/"):
- os.makedirs(pathOrg + "/translated/BIG/")
- if not os.path.exists(pathOrg + "/translated/SMALL/"):
- os.makedirs(pathOrg + "/translated/SMALL/")
- msgNameRE = re.compile('((MSG)|(FLD))([^,])*(,)')
- starRE = re.compile('([★])')
- newlineRE = re.compile('(\\\\)')
- tabRE = re.compile('(<S10>)')
- quotesRE = re.compile('([„“])')
- squotesRE = re.compile('(‚)(.)*(‛)')
- quoteRE = re.compile('(’)')
- dashRE = re.compile('(–)')
- divRE = re.compile('(<S1>)')
- heartRE = re.compile('(♡)')
- msgwndRE = re.compile('(<CT>)')
- waitRE = re.compile('(<WAIT>)')
- endWaitRE = re.compile('(</WAIT>)')
- aclearRE = re.compile('(<AUTO_PAGE>)')
- acloseRE = re.compile('(<AUTO_END>)')
- clearRE = re.compile('(<PAGE>)')
- sel1RE = re.compile('(<C1>)')
- endSel1RE = re.compile('(</C1>)')
- sel2RE = re.compile('(<C2>)')
- endSel2RE = re.compile('(</C2>)')
- sel3RE = re.compile('(<C3>)')
- endSel3RE = re.compile('(</C3>)')
- sel4RE = re.compile('(<C4>)')
- endSel4RE = re.compile('(</C4>)')
- countRE = re.compile('(<NUMBER>)')
- cronoRE = re.compile('(<NAME_CRO>)')
- luccaRE = re.compile('(<NAME_LUC>)')
- marleRE = re.compile('(<NAME_MAR>)')
- frogRE = re.compile('(<NAME_FRO>)')
- roboRE = re.compile('(<NAME_ROB>)')
- aylaRE = re.compile('(<NAME_AYL>)')
- magusRE = re.compile('(<NAME_MAG>)')
- hero1RE = re.compile('(<NAME_PT1>)')
- hero2RE = re.compile('(<NAME_PT2>)')
- hero3RE = re.compile('(<NAME_PT3>)')
- nameRE = re.compile('(<NAME_CNO>)')
- itemRE = re.compile('(<NAME_ITM>)')
- magicRE = re.compile('(<NAME_TEC>)')
- enemyRE = re.compile('(<NAME_MON>)')
- epochRE = re.compile('(<NAME_SIL>)')
- fireRE = re.compile('(<ICON_FIRE>)')
- waterRE = re.compile('(<ICON_Aqua>)|(<ICON_WATER>)')
- lightRE = re.compile('(<ICON_LIGHT>)')
- shadowRE = re.compile('(<ICON_SHADOW>)')
- messageStartRE = re.compile('(\[@ITEM )[\d]+( \(EN\) \]\n)')
- messageEndRE = re.compile('(\\\\0\n\n\[@ITEM )[\d]+( \(L2\) \]\n)')
- def processFile(filename, folder):
- fileOrg = io.open(pathOrg + folder + filename + ".msg.txt", mode="r", encoding="utf8")
- content = fileOrg.read()
- fileTrans = io.open(pathTrans + filename + ".txt", mode="r", encoding="utf-8")
- trans = fileTrans.readlines()
- for x in range(0, len(trans)):
- trans[x] = trans[x].strip()
- m = msgNameRE.search(trans[x])
- while m is not None:
- trans[x] = trans[x][m.end():]
- m = msgNameRE.search(trans[x])
- m = starRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{STAR}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = starRE.search(trans[x])
- m = quotesRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = quotesRE.search(trans[x])
- m = squotesRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += trans[x][m.start() + 1:m.end() -1]
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = squotesRE.search(trans[x])
- m = quoteRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "\'"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = quoteRE.search(trans[x])
- m = dashRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "-"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = dashRE.search(trans[x])
- m = divRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = divRE.search(trans[x])
- m = heartRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "♥"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = heartRE.search(trans[x])
- m = msgwndRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{MSGWND}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = msgwndRE.search(trans[x])
- m = waitRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{WAIT}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = waitRE.search(trans[x])
- m = endWaitRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{/WAIT}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = endWaitRE.search(trans[x])
- m = aclearRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{CLEAR}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = aclearRE.search(trans[x])
- m = acloseRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{CLOSE}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = acloseRE.search(trans[x])
- m = clearRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{PRESS_CLEAR}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = clearRE.search(trans[x])
- m = tabRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += " "
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = tabRE.search(trans[x])
- m = sel1RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{SEL1}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = sel1RE.search(trans[x])
- m = sel2RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{SEL2}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = sel2RE.search(trans[x])
- m = sel3RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{SEL3}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = sel3RE.search(trans[x])
- m = sel4RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{SEL4}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = sel4RE.search(trans[x])
- m = endSel1RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{/SEL1}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = endSel1RE.search(trans[x])
- m = endSel2RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{/SEL2}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = endSel2RE.search(trans[x])
- m = endSel3RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{/SEL3}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = endSel3RE.search(trans[x])
- m = endSel4RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{/SEL4}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = endSel4RE.search(trans[x])
- m = countRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{COUNT}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = countRE.search(trans[x])
- m = cronoRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{Crono}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = cronoRE.search(trans[x])
- m = luccaRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{Lucca}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = luccaRE.search(trans[x])
- m = marleRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{Marle}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = marleRE.search(trans[x])
- m = frogRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{Frog}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = frogRE.search(trans[x])
- m = roboRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{Robo}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = roboRE.search(trans[x])
- m = aylaRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{Ayla}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = aylaRE.search(trans[x])
- m = magusRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{Magus}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = magusRE.search(trans[x])
- m = epochRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{Epoch}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = epochRE.search(trans[x])
- m = hero1RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{HERO1}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = hero1RE.search(trans[x])
- m = hero2RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{HERO2}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = hero2RE.search(trans[x])
- m = hero3RE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{HERO3}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = hero3RE.search(trans[x])
- m = nameRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{NAME}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = nameRE.search(trans[x])
- m = itemRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{ITEM}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = itemRE.search(trans[x])
- m = magicRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{MAGIC}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = magicRE.search(trans[x])
- m = enemyRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{ENEMY}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = enemyRE.search(trans[x])
- m = fireRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{FIRE}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = fireRE.search(trans[x])
- m = waterRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{WATER}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = waterRE.search(trans[x])
- m = lightRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{LIGHT}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = lightRE.search(trans[x])
- m = shadowRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "{BOMB/SHADOW}"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = shadowRE.search(trans[x])
- m = newlineRE.search(trans[x])
- while m is not None:
- tmp = trans[x][:m.start()]
- tmp += "\n"
- tmp += trans[x][m.end():]
- trans[x] = tmp
- m = newlineRE.search(trans[x])
- contentNew = ""
- i = 0
- first = True
- endMatch = None
- for match in messageStartRE.finditer(content):
- if first:
- contentNew += content[:match.end()]
- first = False
- else:
- contentNew += content[oldMatch.end() + endMatch.start():match.end()]
- oldMatch = match
- contentNew += trans[i]
- i = i + 1
- lastEnd = endMatch
- endMatch = messageEndRE.search(content[match.end():])
- contentNew += content[lastEnd.start():]
- fileNew = io.open(pathOrg + "/translated/" + folder + filename + ".msg.txt", mode="w", encoding="utf8")
- fileNew.write(contentNew)
- return
- for file in filesBIG:
- print(file)
- processFile( file, "/BIG/")
- for file in filesSMALL:
- processFile( file, "/SMALL/")
Advertisement
Add Comment
Please, Sign In to add comment