Загрузка данных


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 с готовыми файлами русификатора.")