import os import subprocess from flask import jsonify, request, session from flask_babel import Babel def get_languages_from_dir(directory): """Return a list of directory names in the given directory.""" return [name for name in os.listdir(directory) if os.path.isdir(os.path.join(directory, name))] BABEL_DEFAULT_LOCALE = "en_US" BABEL_LANGUAGES = get_languages_from_dir("translations") def create_babel(app): """Create and initialize a Babel instance with the given Flask app.""" babel = Babel(app) app.config["BABEL_DEFAULT_LOCALE"] = BABEL_DEFAULT_LOCALE app.config["BABEL_LANGUAGES"] = BABEL_LANGUAGES babel.init_app(app, locale_selector=get_locale) compile_translations() def get_locale(): """Get the user's locale from the session or the request's accepted languages.""" return session.get("language") or request.accept_languages.best_match(BABEL_LANGUAGES) def get_languages(): """Return a list of available languages in JSON format.""" return jsonify(BABEL_LANGUAGES) def compile_translations(): """Compile the translation files.""" result = subprocess.run( ["pybabel", "compile", "-d", "translations"], stdout=subprocess.PIPE, ) if result.returncode != 0: raise Exception(f"Compiling translations failed:\n{result.stdout.decode()}") print("Translations compiled successfully")