import os import json def should_ignore(line): """檢查這行是不是要跳過不處理的(比如註解或特殊標記)""" line = line.strip() return line.startswith(("@", ">", ".", "END")) or line == "" def collect_texts_from_txt(path): """從目錄下的所有txt檔案裡收集需要翻譯的文字""" normal_texts = {} # 存普通對話文本 special_texts = {} # 存星號開頭的特殊文本 namedesc_texts = {} # 存名稱和描述類的文本 # 掃描目錄裡所有txt檔案 for filename in os.listdir(path): if filename.endswith(".txt"): file_path = os.path.join(path, filename) # 讀取檔案全部內容 with open(file_path, "r", encoding="utf-8") as f: lines = f.readlines() # 逐行分析內容 for i, line in enumerate(lines): stripped = line.strip() if should_ignore(stripped): continue # 跳過不需要處理的行 # 生成唯一鍵值(檔案名+行號) key = f"{filename}__{i}" # 遇到名稱或描述類的文本(name:/desc:/menuDesc:) if stripped.startswith(("name:", "desc:", "menuDesc:")): # 把開頭的標記切掉,只留內容文字 idx = stripped.find(":") namedesc_texts[key] = stripped[idx + 1:].strip() # 遇到星號開頭的就是特殊文本 elif stripped.startswith("*"): special_texts[key] = stripped # 剩下的都當普通文本處理 else: normal_texts[key] = stripped return normal_texts, special_texts, namedesc_texts def save_json(data, path, name): """把整理好的資料存成JSON檔案""" # 先建立放翻譯檔的目錄(如果不存在就自動創建) translate_dir = os.path.join(path, "translate") os.makedirs(translate_dir, exist_ok=True) # 組合完整檔案路徑 json_path = os.path.join(translate_dir, name) # 寫入JSON格式(保持非ASCII字原樣顯示) with open(json_path, "w", encoding="utf-8") as f: json.dump(data, f, ensure_ascii=False, indent=2) def walk_and_process(root="."): """開始掃描整個資料夾結構,找出需要處理的目錄""" # 走訪所有子目錄 for dirpath, dirnames, filenames in os.walk(root): # 檢查目錄裡是否有txt檔案 txts_in_dir = [f for f in filenames if f.endswith(".txt")] if not txts_in_dir: continue # 跳過沒有txt檔的目錄 # 收集三類文本資料 normal, special, namedesc = collect_texts_from_txt(dirpath) # 分別儲存不同類型的翻譯文件 if normal: save_json(normal, dirpath, "translation.json") print(f"✔ 已生成 translation.json 於 {dirpath}") # 提示 if special: save_json(special, dirpath, "translation_special.json") print(f"✔ 已生成 translation_special.json 於 {dirpath}") if namedesc: save_json(namedesc, dirpath, "translation_namedesc.json") print(f"✔ 已生成 translation_namedesc.json 於 {dirpath}") if __name__ == "__main__": walk_and_process() print("\n🏁 文本收集作業完成!") # 結尾提示