diff options
-rw-r--r-- | talermerchantdemos/blog/blog.py | 25 | ||||
-rw-r--r-- | talermerchantdemos/donations/donations.py | 31 | ||||
-rw-r--r-- | talermerchantdemos/httpcommon/__init__.py | 56 | ||||
-rw-r--r-- | talermerchantdemos/landing/landing.py | 51 | ||||
-rw-r--r-- | talermerchantdemos/survey/survey.py | 36 | ||||
-rw-r--r-- | talermerchantdemos/templates/common-base.html.j2 | 19 | ||||
-rw-r--r-- | talermerchantdemos/templates/language-switcher.html.j2 | 52 |
7 files changed, 102 insertions, 168 deletions
diff --git a/talermerchantdemos/blog/blog.py b/talermerchantdemos/blog/blog.py index d1a2865..2981f05 100644 --- a/talermerchantdemos/blog/blog.py +++ b/talermerchantdemos/blog/blog.py @@ -40,6 +40,7 @@ from talermerchantdemos.httpcommon import ( self_localized, Deadline, BackendException, + make_utility_processor, ) @@ -105,27 +106,9 @@ LOGGER.info( "Operating with the following translations available: " + " ".join(translations) ) -app.add_template_global(self_localized) - - -## -# Extends the templating language with a function (@c env) -# that fetches values from the environment. -# -# @return a @a dict containing the extension. -@app.context_processor -def utility_processor(): - # These helpers will be available in templates - def env(name, default=None): - return os.environ.get(name, default) - - def getactive(): - return "blog" - - def getlang(): - return get_locale() - - return dict(env=env, getactive=getactive, getlang=getlang) +# Add context processor that will make additional variables +# and functions available in the template. +app.context_processor(make_utility_processor("blog")) ## diff --git a/talermerchantdemos/donations/donations.py b/talermerchantdemos/donations/donations.py index 85ab9ec..903952c 100644 --- a/talermerchantdemos/donations/donations.py +++ b/talermerchantdemos/donations/donations.py @@ -31,7 +31,7 @@ import traceback import urllib from taler.util.talerconfig import TalerConfig, ConfigurationError from urllib.parse import urljoin -from ..httpcommon import backend_post, backend_get, self_localized +from ..httpcommon import backend_post, backend_get, make_utility_processor import sys if not sys.version_info.major == 3 and sys.version_info.minor >= 6: @@ -89,24 +89,9 @@ def get_locale(): return "en" -## -# Extend the templating language with a function -# that fetches values from the environment. -# -# @return the environment-reading function. -@app.context_processor -def utility_processor(): - def env(name, default=None): - return os.environ.get(name, default) - - def getactive(): - return "donations" - - def getlang(): - return get_locale() - - return dict(env=env, getlang=getlang, getactive=getactive) - +# Add context processor that will make additional variables +# and functions available in the template. +app.context_processor(make_utility_processor("donations")) ## # Return a error response to the client. @@ -201,9 +186,7 @@ def index(): # @return response object of the index page. @app.route("/<lang>/") def start(lang): - return flask.render_template( - "donations-index.html.j2", merchant_currency=CURRENCY - ) + return flask.render_template("donations-index.html.j2", merchant_currency=CURRENCY) ## @@ -272,9 +255,7 @@ def donate(lang): ) order_id = order_resp["order_id"] return flask.redirect( - flask.url_for( - "fulfillment", receiver=donation_receiver, order_id=order_id - ) + flask.url_for("fulfillment", receiver=donation_receiver, order_id=order_id) ) diff --git a/talermerchantdemos/httpcommon/__init__.py b/talermerchantdemos/httpcommon/__init__.py index 39cd696..785494b 100644 --- a/talermerchantdemos/httpcommon/__init__.py +++ b/talermerchantdemos/httpcommon/__init__.py @@ -5,6 +5,8 @@ from flask import request from datetime import datetime import time from flask_babel import gettext +import os +import re class BackendException(Exception): @@ -129,3 +131,57 @@ class Deadline: ) ) return now > self.value + + +all_languages = { + "en": "English [en]", + "ar": "Arabic [ar]", + "zh_Hant": "Chinese [zh]", + "fr": "French [fr]", + "de": "German [de]", + "hi": "Hindi [hi]", + "it": "Italian [it]", + "ja": "Japanese [ja]", + "ko": "Korean [ko]", + "pt": "Portuguese [pt]", + "pt_BR": "Portuguese (Brazil) [pt_BR]", + "ru": "Russian [ru]", + "es": "Spanish [es]", + "sv": "Swedish [sv]", + "tr": "Turkish [tr]", +} + + + +## +# Make the environment available into templates. +# +# @return the environment-reading function +def make_utility_processor(pagename): + def utility_processor(): + def getactive(): + return pagename + + def getlang(): + return get_locale() + + def env(name, default=None): + return os.environ.get(name, default) + + def prettydate(talerdate): + parsed_time = re.search(r"/Date\(([0-9]+)\)/", talerdate) + if not parsed_time: + return "malformed date given" + parsed_time = int(parsed_time.group(1)) + timestamp = datetime.datetime.fromtimestamp(parsed_time) + # returns the YYYY-MM-DD date format. + return timestamp.strftime("%Y-%b-%d") + + return dict( + env=env, + prettydate=prettydate, + getactive=getactive, + getlang=getlang, + all_languages=all_languages, + ) + return utility_processor diff --git a/talermerchantdemos/landing/landing.py b/talermerchantdemos/landing/landing.py index 3c1f304..5b6376e 100644 --- a/talermerchantdemos/landing/landing.py +++ b/talermerchantdemos/landing/landing.py @@ -29,7 +29,12 @@ from flask_babel import force_locale from flask_babel import gettext import traceback from taler.util.talerconfig import TalerConfig, ConfigurationError -from ..httpcommon import backend_get, backend_post, self_localized +from ..httpcommon import ( + backend_get, + backend_post, + self_localized, + make_utility_processor, +) import sys if not sys.version_info.major == 3 and sys.version_info.minor >= 6: @@ -68,47 +73,9 @@ LOGGER.info( "Operating with the following translations available: " + " ".join(translations) ) -app.add_template_global(self_localized) - - -@babel.localeselector -def get_locale(): - parts = request.path.split("/", 2) - if 2 >= len(parts): - # Totally unexpected path format, do not localize - return "en" - lang = parts[1] - if lang in translations: - return lang - return "en" - -## -# Make the environment available into templates. -# -# @return the environment-reading function. -@app.context_processor -def utility_processor(): - - def getactive(): - return "landing" - - def getlang(): - return get_locale() - - def env(name, default=None): - return os.environ.get(name, default) - - def prettydate(talerdate): - parsed_time = re.search(r"/Date\(([0-9]+)\)/", talerdate) - if not parsed_time: - return "malformed date given" - parsed_time = int(parsed_time.group(1)) - timestamp = datetime.datetime.fromtimestamp(parsed_time) - # returns the YYYY-MM-DD date format. - return timestamp.strftime("%Y-%b-%d") - - return dict(env=env, prettydate=prettydate, getactive=getactive, getlang=getlang) - +# Add context processor that will make additional variables +# and functions available in the template. +app.context_processor(make_utility_processor("landing")) ## # Exception handler to capture all the unmanaged errors. diff --git a/talermerchantdemos/survey/survey.py b/talermerchantdemos/survey/survey.py index 1b06218..466c14d 100644 --- a/talermerchantdemos/survey/survey.py +++ b/talermerchantdemos/survey/survey.py @@ -30,7 +30,13 @@ from flask_babel import force_locale from flask_babel import gettext import traceback from taler.util.talerconfig import TalerConfig, ConfigurationError -from ..httpcommon import backend_get, backend_post, self_localized, BackendException +from ..httpcommon import ( + backend_get, + backend_post, + self_localized, + BackendException, + make_utility_processor, +) import sys if not sys.version_info.major == 3 and sys.version_info.minor >= 6: @@ -85,31 +91,9 @@ def get_locale(): return "en" -## -# Make the environment available into templates. -# -# @return the environment-reading function. -@app.context_processor -def utility_processor(): - def env(name, default=None): - return os.environ.get(name, default) - - def prettydate(talerdate): - parsed_time = re.search(r"/Date\(([0-9]+)\)/", talerdate) - if not parsed_time: - return "malformed date given" - parsed_time = int(parsed_time.group(1)) - timestamp = datetime.datetime.fromtimestamp(parsed_time) - # returns the YYYY-MM-DD date format. - return timestamp.strftime("%Y-%b-%d") - - def getactive(): - return "survey" - - def getlang(): - return get_locale() - - return dict(env=env, prettydate=prettydate, getactive=getactive, getlang=getlang) +# Add context processor that will make additional variables +# and functions available in the template. +app.context_processor(make_utility_processor("survey")) ## diff --git a/talermerchantdemos/templates/common-base.html.j2 b/talermerchantdemos/templates/common-base.html.j2 index 17e27c6..6c5502b 100644 --- a/talermerchantdemos/templates/common-base.html.j2 +++ b/talermerchantdemos/templates/common-base.html.j2 @@ -1,7 +1,7 @@ <!DOCTYPE html> <!-- This file is part of GNU TALER. - Copyright (C) 2014, 2015, 2016, 2020 Taler Systems SA + Copyright (C) 2014, 2015, 2016, 2020, 2021 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software @@ -58,6 +58,21 @@ {% if getactive() == 'survey' %} class="active" {% endif %} >{{gettext("Tipping/Survey")}}</a> {% include 'language-switcher.html.j2' %} + + {# Language Selector #}} + <span class="right"> + {{ all_languages[getlang()] | default("en") }} + <div class="nav"> + <br> + {% for lang_code, lang_display in all_languages.items() %} + {% if lang_code != getlang() %} + <a href="/{{ lang_code }}/" class="navbtn">{{ lang_display }}</a> + <br> + {% endif %} + {% endfor %} + </div> + </span> + </nav> </div> @@ -73,7 +88,7 @@ }} </p> <div style="flex-grow:1"></div> - <p>Copyright © 2014—2020 Taler Systems SA</p> + <p>Copyright © 2014—2021 Taler Systems SA</p> </div> </section> </body> diff --git a/talermerchantdemos/templates/language-switcher.html.j2 b/talermerchantdemos/templates/language-switcher.html.j2 deleted file mode 100644 index 66c5405..0000000 --- a/talermerchantdemos/templates/language-switcher.html.j2 +++ /dev/null @@ -1,52 +0,0 @@ - <span class="right"> - {{ {"en": "English [en]", "ar": "Arabic [ar]", "zh_Hant": "Chinese [zh]", "fr": "French [fr]", "de": "German [de]", "hi": "Hindi [hi]", "it": "Italian [it]", "ja": "Japanese [ja]", "ko": "Korean [ko]", "pt": "Portuguese [pt]", "pt_BR": "Portuguese (Brazil) [pt_BR]", "ru": "Russian [ru]", "es": "Spanish [es]", "sv": "Swedish [sv]", "tr": "Turkish [tr]"}[getlang()] | default("en") }} - <div class="nav"> - <br> - {% if getlang() != 'en' %} - <a href="/en/" class="navbtn">English [en]</a><br> - {% endif %} - {% if getlang() != 'ar' %} - <a href="/ar/" class="navbtn">Arabic [ar]</a><br> - {% endif %} - {% if getlang() != 'zh_Hant' %} - <a href="/zh_Hant/" class="navbtn">Chinese [zh]</a><br> - {% endif %} - {% if getlang() != 'fr' %} - <a href="/fr/" class="navbtn">Français [fr]</a><br> - {% endif %} - {% if getlang() != 'de' %} - <a href="/de/" class="navbtn">Deutsch [de]</a><br> - {% endif %} - {% if getlang() != 'hi' %} - <a href="/hi/" class="navbtn">Hindi [hi]</a><br> - {% endif %} - {% if getlang() != 'it' %} - <a href="/it/" class="navbtn">Italiano [it]</a><br> - {% endif %} - {% if getlang() != 'ja' %} - <a href="/ja/" class="navbtn">Japanese [ja]</a><br> - {% endif %} - {% if getlang() != 'ko' %} - <a href="/ko/" class="navbtn">Korean [ko]</a><br> - {% endif %} - {% if getlang() != 'pt' %} - <a href="/pt/" class="navbtn">Português [pt]</a><br> - {% endif %} - {% if getlang() != 'pt_BR' %} - <a href="/pt_BR/" class="navbtn">Português (Brazil) [pt_BR]</a><br> - {% endif %} - {% if getlang() != 'ru' %} - <a href="/ru/" class="navbtn">Russian [pt]</a><br> - {% endif %} - {% if getlang() != 'es' %} - <a href="/es/" class="navbtn">Español [es]</a><br> - {% endif %} - {% if getlang() != 'sv' %} - <a href="/sv/" class="navbtn">Svenska [sv]</a><br> - {% endif %} - {% if getlang() != 'tr' %} - <a href="/tr/" class="navbtn">Turkish [tr]</a><br> - {% endif %} - - </div> -</span> |