71 lines
2.4 KiB
Python
71 lines
2.4 KiB
Python
# -*- coding: utf-8 -*-
|
||
import sys
|
||
import io
|
||
|
||
# 强制 UTF-8 输出
|
||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
|
||
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8')
|
||
|
||
import openpyxl
|
||
import os
|
||
from datetime import datetime
|
||
|
||
def log(message):
|
||
print(f"[{datetime.now()}] {message}")
|
||
|
||
def parse_special_format(content):
|
||
"""解析特殊标记格式的数据。
|
||
新 TXT 格式 16 字段(编辑器 sb.Append 写出,去掉 RU/ES/PT/FR + 加 IsSecondary):
|
||
0=ID 1=活跃 2=ZH 3=TDZH 4=EN 5=JP 6=KR 7=IsSecondary
|
||
8=IsProperNoun 9=IsDialogue 10=DialogueSpeaker 11=IsDeprecated
|
||
12=IsCustom 13=IsSpecialTerm 14=Color 15=Icon
|
||
编辑器写出时还会附 16=Desc(备注),所以读到的字段数可能是 16 或 17。"""
|
||
records = []
|
||
for record in content.split('!@#$%'):
|
||
if not record.strip():
|
||
continue
|
||
fields = [f.strip() for f in record.split('%$#@!')]
|
||
if len(fields) in (16, 17):
|
||
# 不足 17 时补上空备注列
|
||
if len(fields) == 16:
|
||
fields.append("")
|
||
records.append(fields)
|
||
else:
|
||
log(f"忽略格式错误的记录(字段数={len(fields)}): {record[:60]}")
|
||
return records
|
||
|
||
def convert_file():
|
||
try:
|
||
txt_path = r"../Tools/MultilingualTxt.txt"
|
||
excel_path = r"../Tools/Multilingual.xlsx"
|
||
with open(txt_path, 'r', encoding='utf-8') as f:
|
||
content = f.read()
|
||
|
||
records = parse_special_format(content)
|
||
if not records:
|
||
log("错误:未找到有效记录")
|
||
return False
|
||
|
||
wb = openpyxl.Workbook()
|
||
ws = wb.active
|
||
# 17 列:删 RU/ES/PT/FR/德语 4 列,新增"次要文案"列
|
||
ws.append([
|
||
"ID", "活跃文本", "中文", "繁中", "英文", "日文", "韩文",
|
||
"次要文案",
|
||
"专有翻译", "台词", "台词说话者", "无需翻译", "自定义条目", "专有名词",
|
||
"颜色", "图标", "备注",
|
||
])
|
||
for row in records:
|
||
ws.append(row)
|
||
|
||
os.makedirs(os.path.dirname(excel_path), exist_ok=True)
|
||
wb.save(excel_path)
|
||
log(f"成功转换 {len(records)} 条记录")
|
||
return True
|
||
except Exception as e:
|
||
print(f"转换失败: {str(e)}", file=sys.stderr) # 只有错误才输出到 stderr
|
||
return False
|
||
|
||
|
||
if __name__ == "__main__":
|
||
sys.exit(0 if convert_file() else 1) |