from flask import Flask, Blueprint, g, redirect, request, session, abort, render_template, url_for, Response, make_responseimport datetimeapp = Flask(__name__, template_folder='../templates')main = Blueprint('main', __name__, url_prefix='/<lang_pre>')app.url_map.strict_slashes = Falseapp.secret_key='p9uyg7yuwriwjigjergkrgrrrr'app.config['SUPPORTED_LANGUAGES'] = {'ka': 'Georgian', 'en': 'English'}translation_list = [{ 'name': 'anytrans', 'ka': 'ქარ', 'en': 'Eng'}, { 'name': 'any', 'ka': 'რამე', 'en': 'Any'}, ]@main.before_requestdef ensure_lang_support(): lang_pre = g.get('lang_pre', None) session['lang_pre'] = lang_pre if lang_pre and lang_pre not in app.config['SUPPORTED_LANGUAGES'].keys(): ''' fix for unsupported lang inserted ''' session['lang_pre'] = '/ka/' g.lang_pre = 'ka' return abort(404)@main.context_processordef inject_language(): return dict(sess_lang=g.lang_pre)@main.url_defaultsdef add_language_pre(endpoint, values): if 'lang_pre' in values or not g.get('lang_pre', None): return if app.url_map.is_endpoint_expecting(endpoint, 'lang_pre'): values['lang_pre'] = g.lang_pre@main.url_value_preprocessordef pull_lang_pre(endpoint, values): g.lang_pre = values.pop('lang_pre')@main.route('/change/<new_lang_pre>', methods=['POST','GET'])def change(new_lang_pre): response = make_response(session["lang_pre"]) session['lang_pre'] = new_lang_pre response.set_cookie('lang_pre', new_lang_pre) return response@main.after_requestdef set_lang_cookie(response): response.set_cookie('lang_pre', g.lang_pre) return response@main.context_processordef inject_translations(): return dict(translations=get_translation())def get_translation(): lang = g.lang_pre translations = {} for trans in translation_list: translations.update({trans['name']:trans[lang]}) return translations@main.route('/')def index(): return render_template('index.html')@main.route('/home/hale/')def home(): url = url_for('main.index') return render_template('index.html')@app.route('/')def redir(): lang = request.cookies.get('lang_pre',None) if lang: return redirect('/'+ lang + '/') else: return redirect('/ka/') if __name__ == '__main__': app.run(){% extends 'html/base.html' %}{% block body%} <script type="text/javascript"> function change_lang(id){ $.get('/{{sess_lang}}/change/'+id, function(data){ var pathname = window.location.pathname.split( '/' ); var newPathname = ""; for (i = 2; i < pathname.length; i++) { newPathname += "/"; newPathname += pathname[i]; } window.location.href = '/'+ id + newPathname }); } </script>{% if sess_lang =='ka' %} <p>{{sess_lang}}</p> <p onclick='change_lang(id)' id="en" >change</p>{% else %} <p>{{sess_lang}}</p> <p onclick='change_lang(id)' id="ka" >change</p>{% endif %}<div > <a href="/">Home</a> <a href="/{{sess_lang}}/home/hale/">Home</a></div>{% endblock %}