diff options
author | Wojtek Kosior <koszko@koszko.org> | 2022-10-31 18:08:33 +0100 |
---|---|---|
committer | Wojtek Kosior <koszko@koszko.org> | 2022-10-31 18:08:33 +0100 |
commit | e5d9ee98a548e2b863104e52eb2bc309b1336179 (patch) | |
tree | 729b649284823a45d95baeec27618223c21e83a3 /src/hydrilla_website/app.py | |
parent | 5bd4d055f314eeba9187163b191ffa6ecce03f33 (diff) | |
download | hydrilla-website-e5d9ee98a548e2b863104e52eb2bc309b1336179.tar.gz hydrilla-website-e5d9ee98a548e2b863104e52eb2bc309b1336179.zip |
add internationalization and polish translations
Diffstat (limited to 'src/hydrilla_website/app.py')
-rw-r--r-- | src/hydrilla_website/app.py | 55 |
1 files changed, 42 insertions, 13 deletions
diff --git a/src/hydrilla_website/app.py b/src/hydrilla_website/app.py index a86c22a..289bf76 100644 --- a/src/hydrilla_website/app.py +++ b/src/hydrilla_website/app.py @@ -30,6 +30,8 @@ import typing as t from pathlib import Path import flask +import werkzeug +import itsdangerous import jinja2 from . import common_jinja_templates @@ -38,26 +40,34 @@ from . import common_jinja_templates here = Path(__file__).resolve().parent -supported_languages = {'en_US'} +supported_locales = {'en_US', 'pl_PL'} default_locale = 'en_US' def choose_locale() -> None: app = t.cast(HydrillaWebsite, flask.current_app) - best_locale_match = flask.request.accept_languages.best_match( - supported_languages, - default = default_locale - ) - if best_locale_match is None: - app._hydrilla_request_locale = default_locale + + user_chosen_locale = flask.request.cookies.get('chosen-locale') + if user_chosen_locale not in supported_locales: + user_chosen_locale = None + + if user_chosen_locale is None: + best_locale_match = flask.request.accept_languages.best_match( + supported_locales, + default = default_locale + ) + if best_locale_match is None: + app._hydrilla_request_locale = default_locale + else: + app._hydrilla_request_locale = best_locale_match else: - app._hydrilla_request_locale = best_locale_match + app._hydrilla_request_locale = user_chosen_locale translations = gettext.translation( - 'messages', - localedir = here / 'locales', - languages = [app._hydrilla_request_locale] - ) + 'messages', + localedir = here / 'locales', + languages = [app._hydrilla_request_locale] + ) app.jinja_env.install_gettext_translations(translations) @@ -90,7 +100,10 @@ website_app = HydrillaWebsite() @website_app.route('/', methods=['GET']) def main() -> str: - return flask.render_template('index.html.jinja') + return flask.render_template( + 'index.html.jinja', + locale_serializer = itsdangerous.Serializer(secret, salt='set_locale') + ) @website_app.route('/favicon.ico', methods=['GET']) def favicon() -> str: @@ -99,3 +112,19 @@ def favicon() -> str: @website_app.route('/downloads', methods=['GET']) def downloads() -> str: return flask.render_template('downloads.html.jinja') + +@website_app.route('/set-lang', methods=['POST']) +def set_locale() -> werkzeug.Response: + serializer = itsdangerous.Serializer(secret, salt='set_locale') + new_locale = serializer.loads(flask.request.form['lang_code']) + + response = flask.redirect(flask.url_for('main') + '#langs', code=303) + response.set_cookie(key='chosen-locale', value=new_locale, path='/') + + return response + +secret = 'not-so-secret' + +def set_secret(new_secret: str) -> None: + global secret + secret = new_secret |