monra's picture
Update server/babel.py
060d729
raw
history blame
1.42 kB
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')