summaryrefslogtreecommitdiff
path: root/talermerchantdemos
diff options
context:
space:
mode:
Diffstat (limited to 'talermerchantdemos')
-rw-r--r--talermerchantdemos/blog/blog.py25
-rw-r--r--talermerchantdemos/donations/donations.py31
-rw-r--r--talermerchantdemos/httpcommon/__init__.py56
-rw-r--r--talermerchantdemos/landing/landing.py51
-rw-r--r--talermerchantdemos/survey/survey.py36
-rw-r--r--talermerchantdemos/templates/common-base.html.j219
-rw-r--r--talermerchantdemos/templates/language-switcher.html.j252
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 &copy; 2014&mdash;2020 Taler Systems SA</p>
+ <p>Copyright &copy; 2014&mdash;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&ccedil;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&ntilde;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>