From 75eacbf396e18d5e2a835ce59986aa7a92f2022b Mon Sep 17 00:00:00 2001 From: Alyner3 Date: Fri, 30 May 2025 12:42:03 +0200 Subject: [PATCH] Feat: Add simple translation launcher dialog --- tools/compile_translations.py | 2 +- tools/translate.py | 69 ++++++++++++++++++++++++++ tools/update_translations.py | 2 +- tools/{translation_venv.py => venv.py} | 2 +- 4 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 tools/translate.py rename tools/{translation_venv.py => venv.py} (94%) diff --git a/tools/compile_translations.py b/tools/compile_translations.py index bf85ac0..bd3fd4f 100644 --- a/tools/compile_translations.py +++ b/tools/compile_translations.py @@ -4,7 +4,7 @@ import os from pathlib import Path TRANSLATIONS_DIR = Path(__file__).resolve().parent.parent -VENV_RUNNER_DIR = TRANSLATIONS_DIR / "tools" / "translation_venv.py" +VENV_RUNNER_DIR = TRANSLATIONS_DIR / "tools" / "venv.py" ts_files = glob.glob(str(TRANSLATIONS_DIR / "*.ts")) success = [] diff --git a/tools/translate.py b/tools/translate.py new file mode 100644 index 0000000..5671352 --- /dev/null +++ b/tools/translate.py @@ -0,0 +1,69 @@ +import sys +from pathlib import Path + +from PyQt6.QtCore import QProcess +from PyQt6.QtWidgets import ( + QApplication, + QComboBox, + QDialog, + QDialogButtonBox, + QFormLayout, + QLabel, + QMessageBox, +) + +TRANSLATIONS_DIR = Path(__file__).resolve().parent.parent +VENV_RUNNER = TRANSLATIONS_DIR / "tools" / "venv.py" + +class TranslateDialog(QDialog): + def __init__(self, parent=None): + super().__init__(parent) + self.setWindowTitle("Choose Translation File") + + ts_files = sorted([f.name for f in TRANSLATIONS_DIR.glob("*.ts")]) + if not ts_files: + QMessageBox.information( + self, + "No Files", + f"No .ts files found in {TRANSLATIONS_DIR}", + ) + sys.exit(0) + + self.combo = QComboBox() + self.combo.addItems(ts_files) + + layout = QFormLayout() + layout.addRow(QLabel("Select a .ts file:"), self.combo) + + buttons = QDialogButtonBox( + QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel + ) + buttons.accepted.connect(self.run_translation) + buttons.rejected.connect(self.reject) + layout.addWidget(buttons) + + self.setLayout(layout) + + def run_translation(self): + selected = self.combo.currentText() + ts_path = TRANSLATIONS_DIR / selected + + success = QProcess.startDetached( + sys.executable, + [str(VENV_RUNNER), "linguist", str(ts_path)] + ) + if not success: + QMessageBox.critical( + self, + "Error", + "Failed to launch translation process.", + ) + return + + self.accept() + +if __name__ == "__main__": + app = QApplication(sys.argv) + dialog = TranslateDialog() + dialog.exec() + sys.exit(0) \ No newline at end of file diff --git a/tools/update_translations.py b/tools/update_translations.py index b8afe63..d127f9a 100644 --- a/tools/update_translations.py +++ b/tools/update_translations.py @@ -5,7 +5,7 @@ from pathlib import Path BASE_DIR = Path(__file__).resolve().parent.parent.parent TRANSLATIONS_DIR = BASE_DIR / "translations" -VENV_RUNNER_DIR = TRANSLATIONS_DIR / "tools" / "translation_venv.py" +VENV_RUNNER_DIR = TRANSLATIONS_DIR / "tools" / "venv.py" util_qt_files = glob.glob(str(BASE_DIR / "util_qt" / "**" / "*.py"), recursive=True) source_files = [str(BASE_DIR / "gui.py")] + util_qt_files diff --git a/tools/translation_venv.py b/tools/venv.py similarity index 94% rename from tools/translation_venv.py rename to tools/venv.py index f0727b7..17186c3 100644 --- a/tools/translation_venv.py +++ b/tools/venv.py @@ -39,6 +39,6 @@ def main(): if __name__ == "__main__": if len(sys.argv) < 2: - print("Usage: python translation_venv.py [pylupdate6|lrelease|linguist] ") + print("Usage: python venv.py [pylupdate6|lrelease|linguist] ") sys.exit(1) main() \ No newline at end of file