diff --git a/modules/alice.py b/modules/alice.py
index 8382cc4..4ba53ce 100644
--- a/modules/alice.py
+++ b/modules/alice.py
@@ -101,7 +101,7 @@ def handleAlice(filename, estimate):
else:
try:
- with open("translated/" + filename, "w", encoding="UTF-8") as outFile:
+ with open("translated/" + filename, "w", encoding="utf-8", newline="\n") as outFile:
start = time.time()
translatedData = openFiles(filename)
diff --git a/modules/anim.py b/modules/anim.py
index 9c5ebd7..36e71b0 100644
--- a/modules/anim.py
+++ b/modules/anim.py
@@ -102,7 +102,7 @@ def handleAnim(filename, estimate):
else:
try:
- with open("translated/" + filename, "w", encoding="UTF-8") as outFile:
+ with open("translated/" + filename, "w", encoding="utf-8", newline="\n") as outFile:
start = time.time()
translatedData = openFiles(filename)
diff --git a/modules/atelier.py b/modules/atelier.py
index aace460..f55bd5d 100644
--- a/modules/atelier.py
+++ b/modules/atelier.py
@@ -66,7 +66,7 @@ def handleAtelier(filename, estimate):
else:
try:
- with open("translated/" + filename, "w", encoding="utf-8") as outFile:
+ with open("translated/" + filename, "w", encoding="utf-8", newline="\n") as outFile:
start = time.time()
translatedData = openFiles(filename)
outFile.writelines(translatedData[0])
diff --git a/modules/json.py b/modules/json.py
index 8689b17..b12dfca 100644
--- a/modules/json.py
+++ b/modules/json.py
@@ -94,7 +94,7 @@ def handleJSON(filename, estimate):
else:
try:
- with open("translated/" + filename, "w", encoding="UTF-8") as outFile:
+ with open("translated/" + filename, "w", encoding="utf-8", newline="\n") as outFile:
start = time.time()
translatedData = openFiles(filename)
diff --git a/modules/lune.py b/modules/lune.py
index d62bd85..4f92ef8 100644
--- a/modules/lune.py
+++ b/modules/lune.py
@@ -97,7 +97,7 @@ def handleLune(filename, estimate):
else:
try:
- with open("translated/" + filename, "w", encoding="UTF-8") as outFile:
+ with open("translated/" + filename, "w", encoding="utf-8", newline="\n") as outFile:
start = time.time()
translatedData = openFiles(filename)
diff --git a/modules/rpgmakerace.py b/modules/rpgmakerace.py
index e8ea148..d825c8f 100644
--- a/modules/rpgmakerace.py
+++ b/modules/rpgmakerace.py
@@ -40,19 +40,19 @@ ESTIMATE = ""
TOKENS = [0, 0]
NAMESLIST = []
FIRSTLINESPEAKERS = False # If 1st line of dialogue is a speaker, set to True
+FACENAME101 = False # Find Speakers in 101 Codes based on Face Name
NAMES = False # Output a list of all the character names found
BRFLAG = False # If the game uses
instead
FIXTEXTWRAP = True # Overwrites textwrap
IGNORETLTEXT = False # Ignores all translated text.
MISMATCH = [] # Lists files that throw a mismatch error (Length of GPT list response is wrong)
-BRACKETNAMES = False
PBAR = None
FILENAME = None
# Regex - Need to change this if you want to translate from/to other languages. Default is Japanese Regex
LANGREGEX = r"[一-龠ぁ-ゔァ-ヴーa-zA-Z0-9\uFF61-\uFF9F]+"
-# Pricing - Depends on the model https://openai.com/pricing
+# Pricing - Depends on the model https://openai.com/pricing ($ Price Per 1M)
# Batch Size - GPT 3.5 Struggles past 15 lines per request. GPT4 struggles past 50 lines per request
# If you are getting a MISMATCH LENGTH error, lower the batch size.
if "gpt-3.5" in MODEL:
@@ -82,7 +82,7 @@ POSITION = 0
LEAVE = False
# Dialogue / Scroll / Choices (Main Codes)
-CODE401 = True
+CODE401 = False
CODE405 = False
CODE102 = False
@@ -94,7 +94,7 @@ CODE408 = False # Warning, translates comments and can inflate costs.
CODE122 = False
# Other
-CODE355655 = False
+CODE355655 = True
CODE357 = False
CODE657 = False
CODE356 = False
@@ -116,7 +116,7 @@ def handleACE(filename, estimate):
# Translate
if not estimate:
try:
- with open("translated/" + filename, "w", encoding="utf-8") as outFile:
+ with open("translated/" + filename, "w", encoding="utf-8", newline="\n") as outFile:
yaml = YAML(pure=True)
yaml.width = 4096
yaml.default_style = "'"
@@ -283,7 +283,7 @@ def parseMap(data, filename):
return [data, totalTokens, None]
-def translateNote(event, regex):
+def translateNote(event, regex, wrap=True):
# Regex String
jaString = event["note"]
match = re.findall(regex, jaString, re.DOTALL)
@@ -292,21 +292,25 @@ def translateNote(event, regex):
i = 0
while i < len(match):
initialJAString = match[i]
+ modifiedJAString = initialJAString
# Remove any textwrap
- modifiedJAString = initialJAString.replace("\n", " ")
+ if wrap:
+ modifiedJAString = modifiedJAString.replace("\n", " ")
# Translate
response = translateGPT(
modifiedJAString,
"Reply with only the " + LANGUAGE + " translation.",
- False,
+ True,
)
translatedText = response[0]
tokens[0] += response[1][0]
tokens[1] += response[1][1]
# Textwrap
- translatedText = textwrap.fill(translatedText, width=NOTEWIDTH)
+ if wrap:
+ translatedText = textwrap.fill(translatedText, width=NOTEWIDTH)
+
translatedText = translatedText.replace('"', "")
jaString = jaString.replace(initialJAString, translatedText)
event["note"] = jaString
@@ -502,6 +506,7 @@ def searchNames(data, pbar, context):
newContext = "Reply with only the " + LANGUAGE + " translation of the RPG class name"
if "MapInfos" in context:
newContext = "Reply with only the " + LANGUAGE + " translation of the location name"
+ data = list(data.values())
if "Enemies" in context:
newContext = "Reply with only the " + LANGUAGE + " translation of the enemy NPC name"
if "Weapons" in context:
@@ -516,14 +521,8 @@ def searchNames(data, pbar, context):
file.write(f"\n#{context}\n")
while i < len(data) or filling == True:
if i < len(data):
- # Empty Data
- if "MapInfos" in FILENAME and i == 0:
+ if not data[i] or not data[i]["name"]:
i += 1
- if "MapInfos" in FILENAME and j == 0:
- j += 1
- if data[i] is None or data[i]["name"] == "":
- i += 1
-
continue
# Filling up Batch
@@ -590,6 +589,14 @@ def searchNames(data, pbar, context):
tokensResponse = translateNote(data[i], r"")
totalTokens[0] += tokensResponse[0]
totalTokens[1] += tokensResponse[1]
+ if "")
+ totalTokens[0] += tokensResponse[0]
+ totalTokens[1] += tokensResponse[1]
+ if "")
+ totalTokens[0] += tokensResponse[0]
+ totalTokens[1] += tokensResponse[1]
i += 1
else:
@@ -630,13 +637,22 @@ def searchNames(data, pbar, context):
else:
number += 1
+ # Notes
+ if "")
+ totalTokens[0] += tokensResponse[0]
+ totalTokens[1] += tokensResponse[1]
+ if "")
+ totalTokens[0] += tokensResponse[0]
+ totalTokens[1] += tokensResponse[1]
+
i += 1
else:
batchFull = True
if context in ["Enemies", "Classes", "MapInfos"]:
if len(nameList) < BATCHSIZE:
nameList.append(data[i]["name"])
-
# Notes
if "note" in data[i]:
if " 0:
jaString = codeList[i]["p"][0]
+ # Check if there is text to translate
+ if not re.search(r"\w+", jaString):
+ i += 1
+ continue
oldjaString = jaString
else:
codeList[i]["c"] = -1
i += 1
continue
+ # Validate Japanese Text
+ if not re.search(LANGREGEX, jaString) and IGNORETLTEXT:
+ i += 1
+ continue
+
# # For Retarded Devs
# retardRegex = r'([\\]+[nN]\[[\\]+V\[\d*?\]\])'
# match = re.search(retardRegex, jaString)
@@ -896,7 +924,12 @@ def searchCodes(page, pbar, jobList, filename):
# Brackets
if len(speakerList) == 0:
- speakerList = re.findall(r"^【(.*?)】$", jaString)
+ speakerList = re.findall(r"^【(.*?)】$|^【(.*?)】[\\]*[a-zA-Z]*\[.*\]$", jaString)
+ if speakerList:
+ if speakerList[0][0]:
+ speakerList = [speakerList[0][0]]
+ else:
+ speakerList = [speakerList[0][1]]
# Colors
if len(speakerList) == 0:
@@ -905,10 +938,6 @@ def searchCodes(page, pbar, jobList, filename):
jaString,
)
- # Full Width Space
- if len(speakerList) == 0:
- speakerList = re.findall(r"^[ ](.*)", jaString)
-
# First Line Speakers
if len(speakerList) == 0 and FIRSTLINESPEAKERS is True:
# Remove any RPGMaker Code at start
@@ -994,7 +1023,7 @@ def searchCodes(page, pbar, jobList, filename):
### \\n
nCase = None
- regex = r"([\\]+[kKnN][wWcCrRrEe]?[\[<](.*?)[>\]])"
+ regex = r"([\\]+[kKnN][wWcCrRrEe][\[<](.*?)[>\]])"
match = re.search(regex, finalJAString)
# Set Name
@@ -1013,39 +1042,6 @@ def searchCodes(page, pbar, jobList, filename):
nametag = nametag.replace(speaker, tledSpeaker)
speaker = tledSpeaker
- # Bracket Names
- if BRACKETNAMES is True and len(matchList) != 0:
- if matchList[0][0] != "":
- match0 = matchList[0][0]
- match1 = matchList[0][1]
- else:
- match0 = matchList[0][2]
- match1 = matchList[0][3]
-
- # Translate Speaker
- speakerID = j
- response = getSpeaker(match1)
- speaker = response[0]
- totalTokens[0] += response[1][0]
- totalTokens[1] += response[1][1]
-
- # Set Nametag and Remove from Final String
- fullSpeaker = match0.replace(match1, speaker)
- finalJAString = finalJAString.replace(match0, "")
-
- # Set next item as dialogue
- if codeList[j + 1]["c"] == 401 or codeList[j + 1]["c"] == -1:
- # Set name var to top of list
- codeList[j]["p"] = [fullSpeaker]
- codeList[j]["c"] = code
- j += 1
- codeList[j]["p"] = [finalJAString]
- codeList[j]["c"] = code
- else:
- # Set nametag in string
- codeList[j]["p"] = [fullSpeaker + finalJAString]
- codeList[j]["c"] = code
-
# Remove Extra Stuff bad for translation.
finalJAString = finalJAString.replace("゙", "")
finalJAString = finalJAString.replace("―", "-")
@@ -1063,20 +1059,14 @@ def searchCodes(page, pbar, jobList, filename):
for match in rcodeMatch:
finalJAString = finalJAString.replace(match[0], match[1])
- # Formatting
- formatMatch = re.findall(r"[\\]+[!><.|#^{}]", finalJAString)
- if len(formatMatch) > 0:
- for match in formatMatch:
- finalJAString = finalJAString.replace(match, "")
-
# Remove any RPGMaker Code at start
ffMatch = re.search(
- r"^(\s*[\\]+[aAbBdDeEfFgGhHjJlLmMoOpPqQrRsStTuUwWxXyYzZ]+\[[\w\d\[\]\\]+\])",
+ r"^(\s*[\\]+[aAbBdDeEfFgGhHjJlLmMoOpPqQrRsStTuUwWxXyYzZ]+\[[\w\d\[\]\\]+?\])",
finalJAString,
)
if ffMatch != None:
- finalJAString = finalJAString.replace(ffMatch.group(0), "")
- nametag += ffMatch.group(0)
+ finalJAString = finalJAString.replace(ffMatch.group(1), "")
+ nametag += ffMatch.group(1)
# Remove _ABL Codes
ffMatch = re.search(r"^(_ABL).*", finalJAString)
@@ -1094,6 +1084,13 @@ def searchCodes(page, pbar, jobList, filename):
# 1st Passthrough (Grabbing Data)
if setData == False:
+ # Remove Textwrap
+ if FIXTEXTWRAP:
+ finalJAString = finalJAString.replace("\n", " ")
+ if "\\px[200]" in finalJAString:
+ finalJAString = finalJAString.replace("\\px[200]", "")
+
+ # Append
if finalJAString != "":
if speaker == "" and finalJAString != "":
list401.append(finalJAString)
@@ -1143,6 +1140,11 @@ def searchCodes(page, pbar, jobList, filename):
if BRFLAG is True:
translatedText = translatedText.replace("\n", "
")
+ # px
+ if "\\px[200]" in nametag:
+ translatedText = translatedText.replace("\\px[200]", "")
+ translatedText = translatedText.replace("\n", "\n\\px[200]")
+
### Add Var Strings
# CL Flag
if CLFlag:
@@ -1164,8 +1166,6 @@ def searchCodes(page, pbar, jobList, filename):
endtag = ""
# Set Data
- if speakerID != None:
- codeList[speakerID]["p"] = [fullSpeaker]
codeList[j]["p"] = [translatedText]
codeList[j]["c"] = code
speaker = ""
@@ -1177,7 +1177,7 @@ def searchCodes(page, pbar, jobList, filename):
## Event Code: 122 [Set Variables]
if "c" in codeList[i] and codeList[i]["c"] == 122 and CODE122 is True:
# This is going to be the var being set. (IMPORTANT)
- if codeList[i]["p"][0] not in list(range(155, 165)):
+ if codeList[i]["p"][0] not in list(range(20, 150)):
i += 1
continue
@@ -1198,46 +1198,125 @@ def searchCodes(page, pbar, jobList, filename):
i += 1
continue
+ # Validate Japanese Text
+ if not re.search(LANGREGEX, jaString):
+ i += 1
+ continue
+
# Set String
matchedText = None
- if len(re.findall(r"([\'\"])", jaString)) == 2:
+ if len(re.findall(r"([\'\"\`])", jaString)) >= 2:
matchedText = re.search(r"[\'\"\`](.*)[\'\"\`]", jaString)
- # else:
- # matchedText = re.search(r'(.*)', jaString)
+ if matchedText and matchedText.group(1) != " ":
+ # Remove Textwrap
+ finalJAString = matchedText.group(1).replace("\\n", " ")
- # Last Check
- if matchedText != None:
- # Remove Textwrap
- finalJAString = matchedText.group(1).replace("\\n", " ")
+ # Pass 1
+ if setData == False:
+ if finalJAString != "":
+ list122.append(finalJAString)
- # Pass 1
- if setData == False:
- if finalJAString != "":
- list122.append(finalJAString)
+ # Pass 2
+ else:
+ if len(list122) > 0:
+ # Grab and Replace
+ translatedText = list122[0]
+ translatedText = jaString.replace(jaString, translatedText)
- # Pass 2
- else:
- if len(list122) > 0:
- # Grab and Replace
- translatedText = list122[0]
- translatedText = jaString.replace(jaString, translatedText)
+ # Remove characters that may break scripts
+ charList = ['"', "\\n"]
+ for char in charList:
+ translatedText = translatedText.replace(char, "")
- # Remove characters that may break scripts
- charList = ['"', "\\n"]
- for char in charList:
- translatedText = translatedText.replace(char, "")
+ # Textwrap
+ translatedText = textwrap.fill(translatedText, width=WIDTH)
+ translatedText = translatedText.replace("\n", "\\n")
- # Textwrap
- translatedText = textwrap.fill(translatedText, width=WIDTH)
- translatedText = translatedText.replace("\n", "\\n")
-
- # Set
- codeList[i]["p"][4] = jaString.replace(finalJAString, translatedText)
- list122.pop(0)
+ # Set
+ codeList[i]["p"][4] = f"`{translatedText}`"
+ list122.pop(0)
## Event Code: 357 [Picture Text] [Optional]
if "c" in codeList[i] and codeList[i]["c"] == 357 and CODE357 is True:
headerString = codeList[i]["p"][0]
+ argVar = None
+
+ def translatePlugins(argVar, font):
+ ### Message Text First
+ if argVar in codeList[i]["p"][3]:
+ acExist = False
+ jaString = codeList[i]["p"][3][argVar]
+
+ # Check ac
+ if "\\ac" in jaString:
+ acExist = True
+ else:
+ acExist = False
+
+ # If there isn't any Japanese in the text just skip
+ # if not re.search(r'[一-龠]+|[ぁ-ゔ]+|[ァ-ヴー]+', jaString):
+ # i += 1
+ # continue
+
+ # Remove any textwrap & TL
+ jaString = jaString.replace("\\n", " ")
+ if acExist:
+ jaString = jaString.replace("\\ac ", " ")
+ jaString = jaString.replace("\\ac", "")
+
+ # Pass 1
+ if setData == False:
+ list357.append(jaString)
+
+ # Pass 2
+ else:
+ if len(list357) > 0:
+ # Grab and Replace
+ translatedText = list357[0]
+ translatedText = jaString.replace(jaString, translatedText)
+
+ # Remove characters that may break scripts
+ charList = ['"', "\\n"]
+ for char in charList:
+ translatedText = translatedText.replace(char, "")
+
+ # Textwrap
+ # translatedText = textwrap.fill(translatedText, 80)
+ # translatedText = translatedText.replace("\n", "\\n")
+ # translatedText = re.sub(r"[\\]+c", r"\\\\c", translatedText)
+ translatedText = re.sub(r"[\\]+\*item", r"\\\\*item", translatedText)
+
+ # Center Text
+ if acExist:
+ translatedText = f'\\ac {translatedText.replace('\n', '\n\\ac ')}'
+
+ # Check and Set Font
+ if "fontSize" in codeList[i]["p"][3]:
+ if font:
+ codeList[i]["p"][3]["fontSize"] = font
+
+ # Set
+ codeList[i]["p"][3][argVar] = f"{translatedText}"
+ list357.pop(0)
+
+ # Map Plugins
+ headerMappings = {
+ "LL_InfoPopupWIndow": ("messageText", None),
+ "QuestSystem": ("DetailNote", None),
+ "BalloonInBattle": ("text", None),
+ "MNKR_CommonPopupCoreMZ": ("text", None),
+ "DestinationWindow": ("destination", None),
+ "_TMLogWindowMZ": ("text", None),
+ "TorigoyaMZ_NotifyMessage": ("message", None),
+ "SoR_GabWindow": ("arg1", None),
+ "DarkPlasma_CharacterText": ("text", None),
+ "DTextPicture": ("text", None),
+ "TextPicture": ("text", None),
+ }
+
+ for key, (argVar, font) in headerMappings.items():
+ if key in headerString:
+ translatePlugins(argVar, font)
if headerString == "LL_GalgeChoiceWindow":
### Message Text First
@@ -1262,7 +1341,7 @@ def searchCodes(page, pbar, jobList, filename):
question = codeList[i]["p"][3]["messageText"]
response = translateGPT(
matchList,
- f"Previous text for context: {question}\n\nThis will be a dialogue option",
+ f"Previous text for context: {question}\n",
True,
)
totalTokens[0] += response[1][0]
@@ -1276,180 +1355,6 @@ def searchCodes(page, pbar, jobList, filename):
# Set Data
codeList[i]["p"][3]["choices"] = translatedText
- if "SoR_GabWindow" in headerString:
- argVar = "arg1"
- ### Message Text First
- if argVar in codeList[i]["p"][3]:
- jaString = codeList[i]["p"][3][argVar]
-
- # If there isn't any Japanese in the text just skip
- if not re.search(
- LANGREGEX,
- jaString,
- ):
- i += 1
- continue
-
- # Remove any textwrap & TL
- jaString = re.sub(r"\n", " ", jaString)
- response = translateGPT(jaString, "", False)
- translatedText = response[0]
- totalTokens[0] += response[1][0]
- totalTokens[1] += response[1][1]
-
- # Textwrap & Set
- translatedText = textwrap.fill(translatedText, width=WIDTH)
- codeList[i]["p"][3][argVar] = translatedText
- pbar.update(1)
-
- if "TorigoyaMZ_NotifyMessage" in headerString:
- argVar = "message"
- ### Message Text First
- if argVar in codeList[i]["p"][3]:
- jaString = codeList[i]["p"][3][argVar]
-
- # If there isn't any Japanese in the text just skip
- if not re.search(
- LANGREGEX,
- jaString,
- ):
- i += 1
- continue
-
- # Remove any textwrap & TL
- jaString = re.sub(r"\n", " ", jaString)
- response = translateGPT(jaString, "", False)
- translatedText = response[0]
- totalTokens[0] += response[1][0]
- totalTokens[1] += response[1][1]
-
- # Textwrap & Set
- translatedText = textwrap.fill(translatedText, width=WIDTH)
- codeList[i]["p"][3][argVar] = translatedText
- pbar.update(1)
-
- if "_TMLogWindowMZ" in headerString:
- argVar = "text"
- ### Message Text First
- if argVar in codeList[i]["p"][3]:
- jaString = codeList[i]["p"][3][argVar]
-
- # If there isn't any Japanese in the text just skip
- # if not re.search(r'[一-龠]+|[ぁ-ゔ]+|[ァ-ヴー]+', jaString):
- # i += 1
- # continue
-
- # Remove any textwrap & TL
- jaString = re.sub(r"\n", " ", jaString)
- response = translateGPT(jaString, "", False)
- translatedText = response[0]
- totalTokens[0] += response[1][0]
- totalTokens[1] += response[1][1]
-
- # Textwrap & Set
- translatedText = textwrap.fill(translatedText, width=WIDTH)
- codeList[i]["p"][3][argVar] = translatedText
- pbar.update(1)
-
- if "DestinationWindow" in headerString:
- argVar = "destination"
- ### Message Text First
- if argVar in codeList[i]["p"][3]:
- jaString = codeList[i]["p"][3][argVar]
-
- # If there isn't any Japanese in the text just skip
- # if not re.search(r'[一-龠]+|[ぁ-ゔ]+|[ァ-ヴー]+', jaString):
- # i += 1
- # continue
-
- # Remove any textwrap & TL
- jaString = re.sub(r"\n", " ", jaString)
- response = translateGPT(jaString, "", False)
- translatedText = response[0]
- totalTokens[0] += response[1][0]
- totalTokens[1] += response[1][1]
-
- # Textwrap & Set
- translatedText = textwrap.fill(translatedText, width=WIDTH)
- codeList[i]["p"][3][argVar] = translatedText
- pbar.update(1)
-
- if "MNKR_CommonPopupCoreMZ" in headerString:
- argVar = "text"
- ### Message Text First
- if argVar in codeList[i]["p"][3]:
- jaString = codeList[i]["p"][3][argVar]
-
- # If there isn't any Japanese in the text just skip
- # if not re.search(r'[一-龠]+|[ぁ-ゔ]+|[ァ-ヴー]+', jaString):
- # i += 1
- # continue
-
- # Remove any textwrap & TL
- jaString = re.sub(r"\n", " ", jaString)
- response = translateGPT(jaString, "", False)
- translatedText = response[0]
- totalTokens[0] += response[1][0]
- totalTokens[1] += response[1][1]
-
- # Textwrap & Set
- translatedText = textwrap.fill(translatedText, width=WIDTH)
- codeList[i]["p"][3][argVar] = translatedText
- pbar.update(1)
-
- if "TextPicture" in headerString or "BalloonInBattle" in headerString:
- argVar = "text"
- ### Message Text First
- if argVar in codeList[i]["p"][3]:
- acExist = False
- jaString = codeList[i]["p"][3][argVar]
-
- # Check ac
- if "\\ac" in jaString:
- acExist = True
- else:
- acExist = False
-
- # If there isn't any Japanese in the text just skip
- # if not re.search(r'[一-龠]+|[ぁ-ゔ]+|[ァ-ヴー]+', jaString):
- # i += 1
- # continue
-
- # Remove any textwrap & TL
- jaString = re.sub(r"\n", " ", jaString)
- if acExist:
- jaString = jaString.replace("\\ac ", " ")
- jaString = jaString.replace("\\ac", "")
-
- # Pass 1
- if setData == False:
- list357.append(jaString)
-
- # Pass 2
- else:
- if len(list357) > 0:
- # Grab and Replace
- translatedText = list357[0]
- translatedText = jaString.replace(jaString, translatedText)
-
- # Remove characters that may break scripts
- charList = ['"', "\\n"]
- for char in charList:
- translatedText = translatedText.replace(char, "")
-
- # Textwrap
- translatedText = textwrap.fill(translatedText, WIDTH)
- translatedText = translatedText.replace("- ", "-")
-
- # Center Text
- if acExist:
- translatedText = f'\\ac {translatedText.replace('\n', '\n\\ac ')}'
-
- # Set
- codeList[i]["p"][3][argVar] = translatedText
- # codeList[i]["p"][3]['fontSize'] = "18"
- list357.pop(0)
-
## Event Code: 657 [Picture Text] [Optional]
if "c" in codeList[i] and codeList[i]["c"] == 657 and CODE657 is True:
if "text" in codeList[i]["p"][0]:
@@ -1550,7 +1455,7 @@ def searchCodes(page, pbar, jobList, filename):
continue
# Get Speaker
- if "\\" not in jaString:
+ if "\\" not in jaString and jaString:
response = getSpeaker(jaString)
totalTokens[0] += response[1][0]
totalTokens[1] += response[1][1]
@@ -1569,29 +1474,52 @@ def searchCodes(page, pbar, jobList, filename):
continue
else:
speaker = ""
+ elif FACENAME101:
+ faceName = codeList[i]["p"][0]
+ if faceName == "Actor1_1":
+ speaker = "Sakura"
+ if faceName == "Actor2_1":
+ speaker = "Suzune"
+ if faceName == "Actor3_1":
+ speaker = "Kaji"
+ if faceName == "Actor4_1":
+ speaker = "Kirari"
+ if faceName == "Actor5_1":
+ speaker = "Onsen"
+ if faceName == "Actor6_1":
+ speaker = "Gufu"
+ if faceName == "Actor7_1":
+ speaker = "Kahimeru"
+ if faceName == "Actor10_1":
+ speaker = "Miuma"
+ if faceName == "Actor11_1":
+ speaker = "Nurari"
+ if faceName == "Actor12_1":
+ speaker = "Kokotsuzumi"
## Event Code: 355 or 655 Scripts [Optional]
if "c" in codeList[i] and (codeList[i]["c"] == 355 or codeList[i]["c"] == 655) and CODE355655 is True:
jaString = codeList[i]["p"][0]
- regex = r"BattleManager\._logWindow.addText\('(.*)'"
+ regexPatterns = [r'ShowName\("(.+)"\)']
- # Var Text
- match = re.search(regex, jaString)
- if re.search(regex, jaString):
- finalJAString = match.group(1)
- # Pass 1
- if setData is False:
- list355655.append(finalJAString)
+ # Iterate over the list of regex patterns
+ for regex in regexPatterns:
+ match = re.search(regex, jaString)
+ if re.search(regex, jaString):
+ finalJAString = match.group(1)
+ # Pass 1
+ if setData is False:
+ list355655.append(finalJAString)
- # Pass 2
- else:
- # Grab and Replace
- translatedText = list355655[0]
- translatedText = translatedText.replace("'", "\\'")
+ # Pass 2
+ else:
+ # Grab and Replace
+ translatedText = list355655[0]
+ translatedText = translatedText.replace("'", "\\'")
- # Set
- codeList[i]["p"][0] = codeList[i]["p"][0].replace(finalJAString, translatedText)
- list355655.pop(0)
+ # Set
+ codeList[i]["p"][0] = codeList[i]["p"][0].replace(finalJAString, translatedText)
+ list355655.pop(0)
## Event Code: 408 (Script)
if "c" in codeList[i] and (codeList[i]["c"] == 408) and CODE408 is True:
@@ -1651,9 +1579,11 @@ def searchCodes(page, pbar, jobList, filename):
if "info:" in jaString:
regex = r"info:(.*)"
elif "ActiveMessage:" in jaString:
- regex = r""
+ regex = r"?"
elif "event_text" in jaString:
regex = r"event_text\s*:\s*(.*)"
+ elif "拡張選択肢" in jaString:
+ regex = r"拡張選択肢.+?\[(.+)"
else:
i += 1
continue
@@ -1665,20 +1595,36 @@ def searchCodes(page, pbar, jobList, filename):
if setData is False:
list108.append(match.group(1))
+ # Grab Next
+ j = i
+ while codeList[j + 1]["c"] == 408:
+ j += 1
+ list108[len(list108) - 1] = list108[len(list108) - 1] + codeList[j]["p"][0].replace(">", "")
+ codeList[j]["p"][0] = ""
+ list108[len(list108) - 1] = list108[len(list108) - 1].replace("\n", " ")
+
# Pass 2
else:
# Grab and Replace
translatedText = list108[0]
list108.pop(0)
+ # Textwrap
+ # if codeList[i + 1]["c"] == 408:
+ # translatedText = textwrap.fill(translatedText, WIDTH)
+
# Remove characters that may break scripts
- charList = [".", '"']
+ charList = ['"']
for char in charList:
translatedText = translatedText.replace(char, "")
translatedText = translatedText.replace('"', '"')
- translatedText = translatedText.replace(" ", "_")
+ # translatedText = translatedText.replace(" ", "_")
translatedText = jaString.replace(match.group(1), translatedText)
+ # Add >
+ if "ActiveMessage" in translatedText and ">" not in translatedText:
+ translatedText = translatedText + ">"
+
# Set Data
codeList[i]["p"][0] = translatedText
@@ -1836,7 +1782,7 @@ def searchCodes(page, pbar, jobList, filename):
question = translatedText
response = translateGPT(
choiceList,
- f"Previous text for context: {question}\n\nThis will be a dialogue option",
+ f"Previous text for context: {question}\n",
True,
)
totalTokens[0] += response[1][0]
@@ -1862,7 +1808,6 @@ def searchCodes(page, pbar, jobList, filename):
# Avoid Empty Strings
if jaString == "":
- i += 1
continue
# If and En Statements
@@ -1881,14 +1826,14 @@ def searchCodes(page, pbar, jobList, filename):
if len(textHistory) > 0:
response = translateGPT(
choiceList,
- "This will be a dialogue option.\nPrevious text for context: " + str(textHistory),
+ f"Previous text for context: {str(textHistory)}\n",
True,
)
translatedTextList = response[0]
totalTokens[0] += response[1][0]
totalTokens[1] += response[1][1]
else:
- response = translateGPT(choiceList, "This will be a dialogue option", True)
+ response = translateGPT(choiceList, "", True)
translatedTextList = response[0]
totalTokens[0] += response[1][0]
totalTokens[1] += response[1][1]
@@ -1896,6 +1841,13 @@ def searchCodes(page, pbar, jobList, filename):
# Check Mismatch
if len(translatedTextList) == len(choiceList):
for choice in range(len(codeList[i]["p"][0])):
+ jaString = codeList[i]["p"][0][choice]
+ jaString = jaString.replace(" 。", ".")
+
+ # Avoid Empty Strings
+ if jaString == "":
+ continue
+
translatedText = translatedTextList[choice]
# Set Data
@@ -1968,7 +1920,10 @@ def searchCodes(page, pbar, jobList, filename):
continue
# Translate
- getSpeaker(jaString)
+ response = getSpeaker(jaString)
+ translatedText = response[0]
+ totalTokens[0] += response[1][0]
+ totalTokens[1] += response[1][1]
# Remove characters that may break scripts
charList = [".", '"', "'", "\\n"]
@@ -2007,7 +1962,7 @@ def searchCodes(page, pbar, jobList, filename):
# 122
if len(list122) > 0:
- response = translateGPT(list122, "Keep you translation as brief as possible", True)
+ response = translateGPT(list122, "Keep your translation as brief as possible", True)
list122TL = response[0]
totalTokens[0] += response[1][0]
totalTokens[1] += response[1][1]
@@ -2091,8 +2046,7 @@ def searchCodes(page, pbar, jobList, filename):
# Special Format (Scenario)
else:
- page = codeListFinal
-
+ page[:] = codeListFinal
except IndexError as e:
traceback.print_exc()
raise Exception(str(e) + "Failed to translate: " + oldjaString) from None
@@ -2235,6 +2189,14 @@ Translate 'Taroを倒した!' as 'Taro was defeated!'",
noteResponse = translateNote(state, r"\n(.*)\n")
totalTokens[0] += noteResponse[0]
totalTokens[1] += noteResponse[1]
+ if "ShowHoverState" in state["note"]:
+ noteResponse = translateNote(state, r"")
+ totalTokens[0] += noteResponse[0]
+ totalTokens[1] += noteResponse[1]
+ if "職業" in state["note"]:
+ noteResponse = translateNote(state, r"<..>(.+?)", False)
+ totalTokens[0] += noteResponse[0]
+ totalTokens[1] += noteResponse[1]
# Count totalTokens
totalTokens[0] += nameResponse[1][0] if nameResponse != "" else 0
@@ -2345,19 +2307,10 @@ def searchSystem(data, pbar):
+ ' translation of the battle text.\nTranslate "常時ダッシュ" as "Always Dash"\nTranslate "次の%1まで" as Next %1.',
False,
)
+ translatedText = response[0]
totalTokens[0] += response[1][0]
totalTokens[1] += response[1][1]
- translatedList = response[0]
-
- for item in translatedList:
- translatedText = item
- # Remove characters that may break scripts
- charList = [".", '"', "\\n"]
- for char in charList:
- translatedText = translatedText.replace(char, "")
-
- # Set Data
- messages[key] = translatedList
+ messages[key] = translatedText
return totalTokens
@@ -2379,7 +2332,7 @@ def getSpeaker(speaker):
response = translateGPT(
f"{speaker}",
"Reply with the " + LANGUAGE + " translation of the NPC name.",
- True,
+ False,
)
response[0] = response[0].title()
response[0] = response[0].replace("'S", "'s")
@@ -2438,9 +2391,10 @@ def translateText(system, user, history, penalty, format, model=MODEL):
# History
if isinstance(history, list):
- msg.extend([{"role": "system", "content": h} for h in history])
+ msg.append({"role": "system", "content": "Translation History:"})
+ msg.extend([{"role": "assistant", "content": h} for h in history])
else:
- msg.append({"role": "system", "content": history})
+ msg.append({"role": "assistant", "content": history})
# Response Format
if format == "json":
@@ -2475,7 +2429,8 @@ def cleanTranslatedText(translatedText):
"】": "]",
"【": "[",
"é": "e",
- "ō": "o",
+ "this guy": "this bastard",
+ "This guy": "This bastard",
"Placeholder Text": "",
# Add more replacements as needed
}
diff --git a/modules/rpgmakermvmz.py b/modules/rpgmakermvmz.py
index 4dc7c58..9a0e2ae 100644
--- a/modules/rpgmakermvmz.py
+++ b/modules/rpgmakermvmz.py
@@ -42,7 +42,7 @@ FACENAME101 = False # Find Speakers in 101 Codes based on Face Name
NAMES = False # Output a list of all the character names found
BRFLAG = False # If the game uses
instead
FIXTEXTWRAP = True # Overwrites textwrap
-IGNORETLTEXT = False # Ignores all translated text.
+IGNORETLTEXT = True # Ignores all translated text.
MISMATCH = [] # Lists files that throw a mismatch error (Length of GPT list response is wrong)
PBAR = None
FILENAME = None
@@ -85,7 +85,7 @@ CODE405 = False
CODE102 = False
# Optional
-CODE101 = False # Turn this one when names exist in 101
+CODE101 = True # Turn this one when names exist in 101
CODE408 = False # Warning, translates comments and can inflate costs.
# Variables
@@ -114,7 +114,7 @@ def handleMVMZ(filename, estimate):
# Translate
if not estimate:
try:
- with open("translated/" + filename, "w", encoding="utf-8") as outFile:
+ with open("translated/" + filename, "w", encoding="utf-8", newline="\n") as outFile:
json.dump(translatedData[0], outFile, ensure_ascii=False, indent=4)
except Exception:
traceback.print_exc()
@@ -138,7 +138,7 @@ def handleMVMZ(filename, estimate):
def openFiles(filename):
- with open("files/" + filename, "r", encoding="utf-8") as f:
+ with open("files/" + filename, "r", encoding="utf-8-sig") as f:
data = json.load(f)
# Map Files
diff --git a/modules/text.py b/modules/text.py
index 7c147eb..4153cd2 100644
--- a/modules/text.py
+++ b/modules/text.py
@@ -89,7 +89,7 @@ def handleText(filename, estimate):
# Translate
if not estimate:
try:
- with open("translated/" + filename, "w", encoding="utf-8") as outFile:
+ with open("translated/" + filename, "w", encoding="utf-8", newline="\n") as outFile:
outFile.writelines(translatedData[0])
except Exception:
traceback.print_exc()
diff --git a/modules/tyrano.py b/modules/tyrano.py
index 79e9d38..1d52856 100644
--- a/modules/tyrano.py
+++ b/modules/tyrano.py
@@ -89,7 +89,7 @@ def handleTyrano(filename, estimate):
# Translate
if not estimate:
try:
- with open("translated/" + filename, "w", encoding="utf-8") as outFile:
+ with open("translated/" + filename, "w", encoding="utf-8", newline="\n") as outFile:
outFile.writelines(translatedData[0])
except Exception:
traceback.print_exc()
diff --git a/modules/wolf.py b/modules/wolf.py
index 5b69ba7..62f1a60 100644
--- a/modules/wolf.py
+++ b/modules/wolf.py
@@ -118,7 +118,7 @@ def handleWOLF(filename, estimate):
# Translate
if not estimate:
try:
- with open("translated/" + filename, "w", encoding="utf-8") as outFile:
+ with open("translated/" + filename, "w", encoding="utf-8", newline="\n") as outFile:
json.dump(translatedData[0], outFile, ensure_ascii=False, indent=4)
except Exception:
traceback.print_exc()
diff --git a/vocab.txt b/vocab.txt
index 33f820e..1b45aea 100644
--- a/vocab.txt
+++ b/vocab.txt
@@ -1,20 +1,18 @@
Here are some vocabulary and terms so that you know the proper spelling and translation.
```
# Game Characters
-小鳥遊 乙羽 (Takanashi Otoha) - Female
-暁 莉乃 (Akatsuki Rino) - Female
-小鳥遊 麗子 (Takanashi Reiko) - Female
-田中 心々愛 (Tanaka Cocoa) - Female
-茂部 (Mobu) - Male
-たかし (Takashi) - Male
-小鳥遊 乙羽 (Kotori Yuu Otoha) - Female
-暁 莉乃 (Akira Rino) - Female
-小鳥遊 麗子 (Kotori Yuu Reiko) - Female
-田中 心々愛 (Tanaka Kokoroa) - Female
-陽向葵ゅか (Aoi Hinata) - Female
-水野七海 (Nanami Mizuno) - Female
-秋山はるる (Haruru Akiyama) - Female
-山田じぇみ子 (Junko Yamada) - Female
+桜 謳歌 (Sakura Ouka) - Female
+鈴音 (Suzune) - Female
+鍛冶 演歌 (Kaji Enka) - Female
+希来里 (Kirari) - Female
+温泉 玉子 (Onsen Tamago) - Female
+愚譜 徳朗 (Gufu Tokuro) - Unknown
+華姫瑠 (Kahimeru) - Unknown
+枝切 はらら (Edakiri Harara) - Unknown
+枝切 鋏 (Edakiri Hasami) - Unknown
+御馬 忠勝 (Miuma Tadakatsu) - Unknown
+ぬらり (Nurari) - Unknown
+狐鼓 (Kokotsuzumi) - Unknown
# Lewd Terms
マンコ (pussy)