diff --git a/translate/import.py b/translate/import.py index 6abf93c..742c6dc 100644 --- a/translate/import.py +++ b/translate/import.py @@ -4,92 +4,135 @@ from tempfile import TemporaryDirectory import subprocess import shutil import os -import re -import datetime from tools import convert_zh_to_tw, import_translation_json -# Wasneet声明 -# 这个版本完全是依照「不能跑就来打我」原则写的,欢迎纠错! - -# ============================== -IMPORTLANG = input("语言?(跳过则语言默认为zh_CN)") # 語言選項 -if len(IMPORTLANG) == 0: - IMPORTLANG = "zh_CN" -VERSION = "v" + input("版本号?(跳过则记录构建日期)") # 版本號 -if len(VERSION) == 1: - VERSION = "构建于" + str(datetime.date.today()) -WEBLATE_PATH = os.path.abspath("../psoutertale-weblate") -BUILD_PATH = os.path.abspath("..") # MDR留:其他有地方不认字符串啊qwq,以我的能力只会分开写了 -SOURCE_DIR = Path("../Petrichor-PSTVL").resolve() # AX留:更改了一些目录(Line 21 & 25),以Petrichor-PSTVL为根目录,psoutertale-weblate为上游仓库名,假设git clone后的文件夹名默认不更改 - -# 删除过时构建 -os.chdir(BUILD_PATH) # MDR留:抄的qwq -for file in os.listdir(BUILD_PATH): - if re.match(r'.+.love', file): - os.remove(file) +# ========== 配置区域 ========== +IMPORTLANG = "zh_CN" # 語言選項 +VERSION = "V1" # 版本號 +WEBLATE_PATH = Path("F:/Deskto/psoutertale-weblate") # WEBLATE文件夾路徑(須修改!) +SOURCE_DIR = Path("F:/Deskto/Petrichor-PSTVL").resolve() # PETRICHOR專案根目錄(須修改!) # ============================== -os.chdir(SOURCE_DIR / "translate") -# 拉取weblate仓库更改 -print("🟡「提示」 Weblate文本獲取中...") -os.system(f"cd {WEBLATE_PATH} && git pull") -print("🟡「提示」 翻譯文件處理中...") -for lua_file in src_text_path.glob("*.lua"): - import_translation_json( - lua_file, - f"strings/{lua_file.stem}/en_US.json", - f"strings/{lua_file.stem}/{IMPORTLANG}.json", - f"text/{IMPORTLANG}/{lua_file.stem}.lua", - ) -os.chdir("..") -PROJECT_ROOT = SOURCE_DIR -LANG_IMAGES = SOURCE_DIR / "images" / IMPORTLANG -BUILD_OUTPUT = f"{BUILD_PATH}/PETRICHOR-{IMPORTLANG} {VERSION}.love" -src_text_path = PROJECT_ROOT / "translate" / "src" +# Wasneet聲明: +# 這個版本還是「能跑就行」,不准糾我錯! -# 7z校驗 -if shutil.which("7z") is None: - print("🔴「錯誤」 沒安裝7-zip找我我能給你變一個出來啊。") - exit(1) +def main(): + PROJECT_ROOT = SOURCE_DIR + LANG_IMAGES = SOURCE_DIR / "images" / IMPORTLANG + BUILD_OUTPUT = SOURCE_DIR / "translate" / "gamebuild" / f"Petrichor-{VERSION}.love" + src_text_path = PROJECT_ROOT / "translate" / "src" + translate_dir = PROJECT_ROOT / "translate" -# 繁瑣的校驗 -if not LANG_IMAGES.exists(): - print(f"🔴「錯誤」 哥們我怎麼找不到這個文件夾呢:{LANG_IMAGES}? 應該不是我的鍋吧?") - exit(1) + print(f"🟢「初始化」 Hello!\n 我現在開始裝箱 {IMPORTLANG} 版 Petrichor!") + print(f" ▸ 版本號是:{VERSION}") + print(f" ▸ Weblate路徑是:{WEBLATE_PATH}") + print(f" ▸ 專案根目錄是:{PROJECT_ROOT}\n") -print("🟡「提示」 遊戲文件裝箱中...") -original_cwd = os.getcwd() + try: + os.chdir(translate_dir) + print(f"🟡「切換目錄」 進入翻譯專案目錄:{os.getcwd()}") -with TemporaryDirectory() as tmpdir: - tmp_path = Path(tmpdir) + print("\n🔵「文本同步」 從Weblate拉取最新譯文中...") + subprocess.run(f"cd {WEBLATE_PATH} && git pull", shell=True, check=True) - shutil.copytree( - SOURCE_DIR, - tmp_path, - ignore=shutil.ignore_patterns( - 'translate/*', - 'images', - '*.py', - '*.pyc', - '__pycache__', - '.git' - ), - dirs_exist_ok=True - ) - # 圖片多言語替換 - shutil.copytree( - LANG_IMAGES, - tmp_path / "images", - dirs_exist_ok=True - ) + print("\n🔵「文件準備」 處理LUA文本模板開始:") + for lua_file in src_text_path.glob("*.lua"): + print(f"🟢 處理模板:{lua_file.stem}") + + target_dir = translate_dir / "strings" / lua_file.stem + target_dir.mkdir(parents=True, exist_ok=True) - os.chdir(tmp_path) - command = f'7z a -tzip "{BUILD_OUTPUT}" .' - exit_code = os.system(command) - os.chdir(original_cwd) + print(" ▸ 克隆簡體中文譯文中...") + shutil.copy( + WEBLATE_PATH / "petrichor" / lua_file.stem / "zh_CN.json", + target_dir / "zh_CN.json" + ) - if exit_code != 0: - print(f"🔴「錯誤」 裝箱失敗,退出碼:{exit_code}。") - exit(1) + print(" ▸ 生成繁體中文譯文中...") + convert_zh_to_tw( + target_dir / "zh_CN.json", + target_dir / "zh_TW.json" + ) -print(f"\n🟢「提示」 裝箱好啦!給你放在{BUILD_OUTPUT}了,記得看一眼嗷。") + print(" ▸ 編譯最後的語言文件...") + import_translation_json( + lua_file, + target_dir / "en_US.json", + target_dir / f"{IMPORTLANG}.json", + translate_dir / "text" / IMPORTLANG / f"{lua_file.stem}.lua" + ) + print(f" ✔️ {lua_file.stem} ビンゴ !\n") + + print("\n🔵「資源校驗」") + if not LANG_IMAGES.exists(): + print(f"🔴「報錯」 我怎麼找不到{LANG_IMAGES}啊,是我的問題嗎(汗") + print("🔴「提示」 你看看你路徑配置的對不對(汗") + return + + image_count = len(list(LANG_IMAGES.glob("**/*"))) // 2 + print(f"🟢 找到了 {image_count} 個圖片!應該全了!") + + print("\n🔵「環境校驗」 來讓我找找你的7-zip...") + if not shutil.which("7z"): + print("🔴「報錯」 快點去安7-zip!") + print("🔴 我給你個網址:https://www.7-zip.org/") + return + print("🟢 好耶,你有7-zip耶!") + + print(f"\n🟢 「開始裝箱」 開始裝箱{VERSION}咯...") + with TemporaryDirectory() as tmpdir: + tmp_path = Path(tmpdir) + print(f"🟢 我在你電腦裡面創建個臨時檔案夾{tmp_path}沒意見吧?") + + print("\n🔵「準備文件」 克隆專案文件中...") + shutil.copytree( + PROJECT_ROOT, + tmp_path, + ignore=shutil.ignore_patterns( + 'translate', 'images', '*.py', '*.pyc', '__pycache__', '.git' + ), + dirs_exist_ok=True + ) + file_count = len(list(tmp_path.glob("**/*"))) // 2 + print(f"✔️ {file_count} 個專案文件已克隆完畢!") + + print("\n🔵「資源替換」 寫入多語言文件中...") + shutil.copytree( + LANG_IMAGES, + tmp_path / "images", + dirs_exist_ok=True + ) + print(f"✔️ {len(list((tmp_path / 'images').glob('**/*')))//2}個圖片資源替換完畢!") + + print("\n🔵「壓縮」 LOVE文件生成中...") + os.chdir(tmp_path) + try: + subprocess.run( + f'7z a -tzip "{BUILD_OUTPUT}" .', + shell=True, + check=True, + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL + ) + except subprocess.CalledProcessError as e: + print(f"🔴「壓縮錯誤」 裝箱失敗啦T T(錯誤碼:{e.returncode})") + print("🔴 你看看你關沒關遊戲文件?") + return + finally: + os.chdir(PROJECT_ROOT) + + if BUILD_OUTPUT.exists(): + print(f"\n🎉「裝箱完畢」 完成啦!!") + print(f"📦 給你放在{BUILD_OUTPUT}了,") + print(f"📏 檔案尺寸是{BUILD_OUTPUT.stat().st_size // 1024}KB,應該沒啥問題(可能吧") + else: + print("\n🔴「不明瞭的錯誤」 檔案生成失敗") + + except Exception as e: + print(f"\n🔴「啥情況?!」 {str(e)}") + finally: + print("\n🔵「清理完畢」 行啦我給之前創建那個文件夾刪了嗷") + print("🟢「再見咯」 放心的關閉該窗口吧!") + +if __name__ == "__main__": + main() \ No newline at end of file