diff --git a/.gitignore b/.gitignore index 06b52b9..7a2b09c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .history/ .idea/ compendium/To Do/Alte Übersetzung/Ganz alt/tmp.html +compendium/To Do/GPT/actors_split/ \ No newline at end of file diff --git a/compendium/To Do/tracking.md b/compendium/To Do/tracking.md deleted file mode 100644 index d323331..0000000 --- a/compendium/To Do/tracking.md +++ /dev/null @@ -1,11 +0,0 @@ -Fini : -F Cheminade -> Items UA1 -> DONE -Faytoto -> acteurs UA1 -Dwim -> RNHD actors -Highcrown -> Acteurs Ennemi Ombre -> DONE -KeylaKhaine -> Acteurs Mort sur le Reik (27/03/24 fi) -Kyllian -> Acteurs Middenheim (15/05/24, fini) -Bobours -> Acteurs PBTT (15/05/24, fini) -Eltrys -> EiS - -En cours : diff --git a/merge_neu.py b/merge_neu.py deleted file mode 100644 index 52d17ca..0000000 --- a/merge_neu.py +++ /dev/null @@ -1,101 +0,0 @@ -import json -import sys -import os - -def merge_entry(target, source, warn_ids): - sid = source.get("id", "unbekannt") - - # Name ersetzen - new_name = source.get('name', target.get('name')) - target['name'] = new_name - - # Beschreibung ergänzen - source_desc = source.get('description', '') - target_desc = target.get('description', '') - if source_desc and target_desc: - target['description'] = source_desc + "\n\n" + target_desc - elif source_desc: - target['description'] = source_desc - - # Trappings ersetzen - if 'trappings' in source: - target['trappings'] = source['trappings'] - - # Effekte bearbeiten - source_effects = source.get('effects', []) - target_effects = target.get('effects', []) - - # Labels in Ziel-Effekten ersetzen - if isinstance(target_effects, list): - for effect in target_effects: - if isinstance(effect, dict): - effect['label'] = new_name - else: - warn_ids.append(sid) - target_effects = [] - - # Neue Effekte anhängen - if isinstance(source_effects, list) and source_effects: - target_effects.extend(source_effects) - target['effects'] = target_effects - - return target - -def merge_files(target_file, source_files, output_file=None, new_ids_log="new_ids.txt", warn_log="warn_ids.txt"): - with open(target_file, "r", encoding="utf-8") as f: - target_json = json.load(f) - - target_entries = target_json.get("entries", target_json) - target_by_id = {entry["id"]: entry for entry in target_entries} - new_ids = [] - warn_ids = [] - - for source_path in source_files: - print(f"🔄 Verarbeite {source_path} ...") - with open(source_path, "r", encoding="utf-8") as f: - source_json = json.load(f) - - source_entries = source_json.get("entries", source_json) - - for source_entry in source_entries: - sid = source_entry.get("id") - if not sid: - print("⚠️ Eintrag ohne ID übersprungen.") - continue - - if sid in target_by_id: - target_by_id[sid] = merge_entry(target_by_id[sid], source_entry, warn_ids) - else: - target_by_id[sid] = source_entry - new_ids.append(sid) - - if "entries" in target_json: - target_json["entries"] = list(target_by_id.values()) - final_output = target_json - else: - final_output = list(target_by_id.values()) - - with open(output_file or target_file, "w", encoding="utf-8") as f: - json.dump(final_output, f, indent=4, ensure_ascii=False) - - if new_ids: - with open(new_ids_log, "w", encoding="utf-8") as f: - f.write("\n".join(new_ids)) - print(f"🆕 {len(new_ids)} neue IDs – siehe {new_ids_log}") - - if warn_ids: - with open(warn_log, "w", encoding="utf-8") as f: - f.write("\n".join(warn_ids)) - print(f"⚠️ {len(warn_ids)} Items mit ungültigen 'effects' – siehe {warn_log}") - - print(f"📁 Merge abgeschlossen → Datei überschrieben: {target_file}") - -# Aufruf: python merge_items_with_effects_overwrite.py ziel.json quelle1.json [quelle2.json ...] -if __name__ == "__main__": - if len(sys.argv) < 3: - print("Nutzung: python merge_items_with_effects_overwrite.py ziel.json quelle1.json [quelle2.json ...]") - sys.exit(1) - - target = sys.argv[1] - sources = sys.argv[2:] - merge_files(target, sources) diff --git a/python/find_translated_scripts.py b/python/find_translated_scripts.py new file mode 100644 index 0000000..006c2e4 --- /dev/null +++ b/python/find_translated_scripts.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- +import os +import difflib +import chardet +import shutil +import urllib.parse + +def normalize_line(line): + return line.strip() + +def detect_encoding(file_path): + with open(file_path, "rb") as f: + raw_data = f.read() + result = chardet.detect(raw_data) + return result['encoding'] if result['encoding'] else 'utf-8' + +def convert_to_utf8(file_path): + # Erkenne das aktuelle Encoding + encoding = detect_encoding(file_path) + if encoding.lower() == 'utf-8': + return file_path # Keine Konvertierung notwendig + + # Konvertiere die Datei nach UTF-8 + utf8_path = file_path + ".utf8" + with open(file_path, "rb") as f: + content = f.read().decode(encoding, errors="replace") + with open(utf8_path, "w", encoding="utf-8") as f: + f.write(content) + + # Originaldatei löschen und umbenennen + print(f"Konvertiert: {file_path} ({encoding}) -> {utf8_path}") + os.remove(file_path) + shutil.move(utf8_path, file_path) + + return file_path + +def find_translated_files(original_folder, modified_folder, output_file): + original_files = {f for f in os.listdir(original_folder) if f.endswith(".js")} + modified_files = {f for f in os.listdir(modified_folder) if f.endswith(".js")} + + common_files = original_files.intersection(modified_files) + translated_files = [] + total_differences = 0 + + with open(output_file, "w", encoding="utf-8") as f: + for file_name in sorted(common_files): + original_path = os.path.abspath(os.path.join(original_folder, file_name)) + modified_path = os.path.abspath(os.path.join(modified_folder, file_name)) + + # Dateien in UTF-8 konvertieren, falls notwendig + original_utf8 = convert_to_utf8(original_path) + modified_utf8 = convert_to_utf8(modified_path) + + try: + with open(original_utf8, "r", encoding="utf-8") as orig_file, \ + open(modified_utf8, "r", encoding="utf-8") as mod_file: + + original_lines = [normalize_line(line) for line in orig_file if normalize_line(line)] + modified_lines = [normalize_line(line) for line in mod_file if normalize_line(line)] + + diff = list(difflib.unified_diff(original_lines, modified_lines, + fromfile=original_path, + tofile=modified_path, + lineterm="")) + + if diff: + num_changes = sum(1 for line in diff if line.startswith(("-", "+")) and not line.startswith(("---", "+++"))) + translated_files.append((file_name, num_changes, original_path, modified_path)) + total_differences += num_changes + + # VS Code Diff Link erzeugen (absoluter Pfad, URL-enkodiert) + encoded_orig = urllib.parse.quote(original_path) + encoded_mod = urllib.parse.quote(modified_path) + vscode_diff_link = f"vscode://file/{encoded_orig}:0?diff={encoded_mod}:0" + + # Header und Unterschiede in die Ausgabedatei schreiben + f.write(f"📝 Unterschiede in [{file_name}]({vscode_diff_link}) ({num_changes} Änderungen):\n") + f.write("\n".join(diff) + "\n\n") + + except Exception as e: + print(f"Fehler beim Verarbeiten von {file_name}: {e}") + + # Zusammenfassung am Ende der Datei hinzufügen (sortiert) + f.write("\n🔎 Zusammenfassung der Unterschiede (nach Anzahl der Änderungen sortiert):\n") + for file_name, count, orig_path, mod_path in sorted(translated_files, key=lambda x: x[1], reverse=True): + encoded_orig = urllib.parse.quote(orig_path) + encoded_mod = urllib.parse.quote(mod_path) + vscode_diff_link = f"vscode://file/{encoded_orig}:0?diff={encoded_mod}:0" + f.write(f"- [{file_name}]({vscode_diff_link}): {count} Änderungen\n") + f.write(f"\n📊 Gesamtanzahl der Änderungen: {total_differences}\n") + + print(f"Prüfung abgeschlossen. {len(translated_files)} übersetzte Dateien gefunden.") + print(f"Ergebnis gespeichert in: {output_file}") + +# Beispielpfade (kannst du anpassen) +original_folder = "original_scripts" +modified_folder = "modified_scripts" +output_file = "translated_files_with_direct_vscode_diff_links.md" + +find_translated_files(original_folder, modified_folder, output_file) diff --git a/python/merge_actors.py b/python/merge_actors.py new file mode 100644 index 0000000..761f9f2 --- /dev/null +++ b/python/merge_actors.py @@ -0,0 +1,21 @@ +import json +import os + +# Verzeichnis mit den übersetzten Dateien +input_directory = "actors_split_translated" +output_file = "wfrp4e-eis-actors-merged.json" + +# Alle übersetzten Dateien finden +merged_actors = {} +for file_name in os.listdir(input_directory): + if file_name.endswith(".json"): + file_path = os.path.join(input_directory, file_name) + with open(file_path, 'r', encoding='utf-8') as file: + data = json.load(file) + merged_actors.update(data) + +# Gesamte Datei speichern +with open(output_file, 'w', encoding='utf-8') as out_file: + json.dump(merged_actors, out_file, ensure_ascii=False, indent=4) + +print(f"{len(merged_actors)} Einträge erfolgreich zusammengeführt.") diff --git a/compendium/To Do/merge_neu.py b/python/merge_neu.py similarity index 100% rename from compendium/To Do/merge_neu.py rename to python/merge_neu.py diff --git a/python/split_actors.py b/python/split_actors.py new file mode 100644 index 0000000..72f1457 --- /dev/null +++ b/python/split_actors.py @@ -0,0 +1,23 @@ +import json +import os + +# Pfad zur Originaldatei +input_file = "wfrp4e-eis-actors-extracted.json" +output_directory = "actors_split" + +# Stelle sicher, dass der Ausgabeordner existiert +os.makedirs(output_directory, exist_ok=True) + +# Datei einlesen +with open(input_file, 'r', encoding='utf-8') as file: + data = json.load(file) + +# Einträge einzeln speichern +for actor_id, actor_data in data.items(): + # Dateiname erstellen + file_name = f"{output_directory}/{actor_id}.json" + # Einzeln speichern + with open(file_name, 'w', encoding='utf-8') as out_file: + json.dump({actor_id: actor_data}, out_file, ensure_ascii=False, indent=4) + +print(f"Einträge in {len(data)} Dateien aufgeteilt.") diff --git a/python/upload_GPT.py b/python/upload_GPT.py new file mode 100644 index 0000000..9b61d9e --- /dev/null +++ b/python/upload_GPT.py @@ -0,0 +1,48 @@ +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.firefox.options import Options +import time +import os + +# Verzeichnisse +input_directory = "actors_split" +download_directory = "actors_split_translated" +os.makedirs(download_directory, exist_ok=True) + +# Geckodriver-Pfad (anpassen) +geckodriver_path = "/Pfad/zu/deinem/geckodriver" + +# Firefox-Optionen +options = Options() +options.headless = False # Setze auf True, wenn du den Browser nicht sehen willst + +# Webdriver starten +driver = webdriver.Firefox(executable_path=geckodriver_path, options=options) + +# ChatGPT-Website öffnen +driver.get("https://chat.openai.com/") + +# Warten, bis du dich eingeloggt hast +input("Bitte logge dich in ChatGPT ein und drücke dann Enter...") + +# Dateien hochladen +for file_name in os.listdir(input_directory): + if file_name.endswith(".json"): + file_path = os.path.abspath(os.path.join(input_directory, file_name)) + + # Datei-Upload starten + upload_button = driver.find_element(By.XPATH, "//input[@type='file']") + upload_button.send_keys(file_path) + print(f"Datei hochgeladen: {file_name}") + + # Warte auf die Antwort und download + time.sleep(20) # Wartezeit anpassen je nach Dateigröße + + # Speichern der übersetzten Datei + with open(os.path.join(download_directory, file_name), 'w', encoding='utf-8') as out_file: + out_file.write(driver.page_source) + + print(f"Übersetzte Datei gespeichert: {file_name}") + +# Browser schließen +driver.quit()