2025-04-21 21:50:59 +08:00

135 lines
4.9 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.

from tools import *
from pathlib import Path
from tempfile import TemporaryDirectory
import subprocess
import shutil
import os
import datetime
from tools import convert_zh_to_tw, import_translation_json
# ========== 配置区域 ==========
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")
SOURCE_DIR = Path("../Petrichor-PSTVL").resolve()
# ==============================
# WTGIIIR協定
# Wasneet: That's Great If It Is Run-able協定
os.chdir("translate")
print(f"🟡「切換目錄」 進入翻譯專案目錄:{os.getcwd()}")
os.system(f"cd {WEBLATE_PATH} && git pull")
print("\n🔵「文本同步」 從Weblate拉取最新譯文中...")
print("\n🔵「文件準備」 處理LUA文本模板開始")
for lua_file in src_text_path.glob("*.lua"):
print(f"🟢 處理模板:{lua_file.stem}")
print(" ▸ 克隆簡體中文譯文中...")
for lang in ["zh_CN"]:
shutil.copy(
f"{WEBLATE_PATH}/petrichor/{lua_file.stem}/{lang}.json",
f"strings/{lua_file.stem}/{lang}.json",
)
print(" ▸ 生成繁體中文譯文中...")
convert_zh_to_tw(
f"strings/{lua_file.stem}/zh_CN.json", f"strings/{lua_file.stem}/zh_TW.json"
)
print(" ▸ 編譯最後的語言文件...")
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",
)
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"
print(f"🟢「初始化」 Hello\n 我現在開始裝箱 {IMPORTLANG} 版 Petrichor")
print(f" ▸ 版本號是:{VERSION}")
print(f" ▸ Weblate路徑是{WEBLATE_PATH}")
print(f" ▸ 專案根目錄是:{PROJECT_ROOT}\n")
# 7z校驗
print(f"\n🟢「開始裝箱」 準備為 {VERSION} 打包囉!")
print("\n🔵「環境校驗」 來讓我找找你的7-zip...")
if shutil.which("7z") is None:
print("🔴「報錯」 快點去安裝7-zip沒有這個我怎麼幫你裝箱嘛")
print("🔴「提示」 官方網址https://www.7-zip.org/")
exit(1)
else:
print("🟢「好耶」 你電腦裡有7-zip耶太棒了")
# 繁瑣的校驗
if not LANG_IMAGES.exists():
print(f"🔴「報錯」 找不到這個語言圖片資料夾:{LANG_IMAGES}")
print("🔴「提示」 你看看你路徑有沒有填錯?是不是打錯字了?")
exit(1)
else:
image_count = len(list(LANG_IMAGES.glob("**/*"))) // 2
print(f"🟢 找到了 {image_count} 張圖片,看起來都在!")
print("🟡「提示」 遊戲文件裝箱中...")
original_cwd = os.getcwd()
with TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
print(f"\n🔵「準備臨時空間」 建個臨時檔案夾{tmp_path}沒意見吧")
print("🔵「準備文件」 開始複製專案主體檔案...")
shutil.copytree(
SOURCE_DIR,
tmp_path,
ignore=shutil.ignore_patterns(
'translate', # 把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("🟢 圖片替換完畢,準備壓縮!")
print("\n🔵「壓縮階段」 開始使用7-zip打包成.love檔案...")
os.chdir(tmp_path)
# 讓7z閉嘴
command = f'7z a -tzip "{BUILD_OUTPUT}" .'
result = subprocess.run(
command,
shell=True,
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL
)
exit_code = result.returncode
os.chdir(original_cwd)
if result.returncode == 0:
size_kb = BUILD_OUTPUT.stat().st_size // 1024
print(f"\n🎉「裝箱完成」 成功打包!我放在{BUILD_OUTPUT}")
print(f"📏 檔案大小為:約 {size_kb} KB應該沒問題")
else:
if result.returncode == 2:
print(f"🔴「錯誤」 裝箱時檔案被佔用了,遊戲是不是開著呀?")
else:
print(f"🔴「錯誤」 打包失敗!錯誤碼:{result.returncode}")
exit(1)
print("\n🔵「清理臨時資料」 收拾乾淨囉~")
print("🟢「完成」 一切搞定,可以關掉這個視窗囉!辛苦啦~")