Spaces:
Sleeping
Sleeping
import os | |
import subprocess | |
from flask import request, session, jsonify | |
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') | |