2025-04-26 17:27:32 +08:00

83 lines
3.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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🏁 文本收集作業完成!") # 結尾提示