import zipfile
import json
import re
import os
# Исходный архив с .txt файлами игры и архив с вашими переведенными .json
original_txt_zip = "archive.zip"
translated_json_zip = "translated_json.zip"
final_output_zip = "RUSSIAN_PATCH.zip"
message_re = re.compile(r'(MESSAGE\s*\([^,]+,\s*"([^"]*)",\s*")([^"]*)(")')
with zipfile.ZipFile(original_txt_zip, 'r') as z_txt, \
zipfile.ZipFile(translated_json_zip, 'r') as z_json, \
zipfile.ZipFile(final_output_zip, 'w') as z_out:
for file_info in z_txt.infolist():
if file_info.filename.endswith('.txt'):
# Читаем оригинальный игровой скрипт
txt_content = z_txt.read(file_info).decode('utf-8', errors='ignore')
# Ищем для него соответствующий переведенный json
json_name = os.path.splitext(file_info.filename)[0] + '.json'
if json_name in z_json.namelist():
json_data = json.loads(z_json.read(json_name).decode('utf-8'))
# Счетчик для точного совпадения строк по порядку
idx = [1]
def replace_match(match):
full_prefix = match.group(1) # Кусок до текста перевода
jp_text = match.group(2) # Японский текст (если был)
en_text = match.group(3) # Английский текст
suffix = match.group(4) # Закрывающая кавычка
key = f"msg_{idx[0]}"
idx[0] += 1
# Если для этой строки есть русский перевод в JSON, подставляем его
if key in json_data:
return f'{full_prefix}{json_data[key]}{suffix}'
return match.group(0) # Если перевода нет, оставляем как было
# Проводим замену текста в файле
new_txt_content = message_re.sub(replace_match, txt_content)
else:
new_txt_content = txt_content
# Записываем обновленный файл в финальный архив патча
z_out.writestr(file_info.filename, new_txt_content.encode('utf-8'))
print("Готово! Создан архив RUSSIAN_PATCH.zip с готовыми файлами русификатора.")