#!/usr/bin/env python3 """ Translation management script for yt-local Usage: python manage_translations.py extract # Extract strings to messages.pot python manage_translations.py init es # Initialize Spanish translation python manage_translations.py update # Update all translations python manage_translations.py compile # Compile translations to .mo files """ import sys import os import subprocess # Ensure we use the Python from the virtual environment if available if hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix): # Already in venv pass else: # Try to activate venv venv_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'venv') if os.path.exists(venv_path): venv_bin = os.path.join(venv_path, 'bin') if os.path.exists(venv_bin): os.environ['PATH'] = venv_bin + os.pathsep + os.environ['PATH'] def run_command(cmd): """Run a shell command and print output""" print(f"Running: {' '.join(cmd)}") # Use the pybabel from the same directory as our Python executable if cmd[0] == 'pybabel': import os pybabel_path = os.path.join(os.path.dirname(sys.executable), 'pybabel') if os.path.exists(pybabel_path): cmd = [pybabel_path] + cmd[1:] result = subprocess.run(cmd, capture_output=True, text=True) if result.stdout: print(result.stdout) if result.stderr: print(result.stderr, file=sys.stderr) return result.returncode def extract(): """Extract translatable strings from source code""" print("Extracting translatable strings...") return run_command([ 'pybabel', 'extract', '-F', 'babel.cfg', '-k', 'lazy_gettext', '-k', '_l', '-o', 'translations/messages.pot', '.' ]) def init(language): """Initialize a new language translation""" print(f"Initializing {language} translation...") return run_command([ 'pybabel', 'init', '-i', 'translations/messages.pot', '-d', 'translations', '-l', language ]) def update(): """Update existing translations with new strings""" print("Updating translations...") return run_command([ 'pybabel', 'update', '-i', 'translations/messages.pot', '-d', 'translations' ]) def compile_translations(): """Compile .po files to .mo files""" print("Compiling translations...") return run_command([ 'pybabel', 'compile', '-d', 'translations' ]) def main(): if len(sys.argv) < 2: print(__doc__) sys.exit(1) command = sys.argv[1] if command == 'extract': sys.exit(extract()) elif command == 'init': if len(sys.argv) < 3: print("Error: Please specify a language code (e.g., es, fr, de)") sys.exit(1) sys.exit(init(sys.argv[2])) elif command == 'update': sys.exit(update()) elif command == 'compile': sys.exit(compile_translations()) else: print(f"Unknown command: {command}") print(__doc__) sys.exit(1) if __name__ == '__main__': main()