diff options
author | Christian Grothoff <christian@grothoff.org> | 2020-10-11 17:03:12 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2020-10-11 17:03:12 +0200 |
commit | d69934f816c7e48d758452dd443eca0f02dd14ce (patch) | |
tree | e0b4493cc328b2bbda16a83edf443a697d47957d | |
parent | aa06ddd3cf1de03922fc4e45e46ef3476a69e3f8 (diff) | |
download | taler-merchant-demos-d69934f816c7e48d758452dd443eca0f02dd14ce.tar.gz taler-merchant-demos-d69934f816c7e48d758452dd443eca0f02dd14ce.tar.bz2 taler-merchant-demos-d69934f816c7e48d758452dd443eca0f02dd14ce.zip |
add landing subpage, simplify deployment
-rwxr-xr-x | bin/taler-merchant-demos | 20 | ||||
-rwxr-xr-x | setup.py | 3 | ||||
-rw-r--r-- | talermerchantdemos/landing/__init__.py | 3 | ||||
-rw-r--r-- | talermerchantdemos/landing/landing.py | 164 | ||||
l--------- | talermerchantdemos/landing/static | 1 | ||||
-rw-r--r-- | talermerchantdemos/landing/templates/base.html.j2 | 114 | ||||
-rw-r--r-- | talermerchantdemos/landing/templates/error.html.j2 | 13 | ||||
-rw-r--r-- | talermerchantdemos/landing/templates/index.html.j2 | 73 | ||||
l--------- | talermerchantdemos/landing/translations | 1 | ||||
-rw-r--r-- | translations/de/LC_MESSAGES/messages.po | 34 | ||||
-rw-r--r-- | translations/messages.pot | 34 |
11 files changed, 440 insertions, 20 deletions
diff --git a/bin/taler-merchant-demos b/bin/taler-merchant-demos index e4286a2..ade40cf 100755 --- a/bin/taler-merchant-demos +++ b/bin/taler-merchant-demos @@ -40,22 +40,22 @@ UWSGI_LOGFMT = "%(ltime) %(proto) %(method) %(uri) %(proto) => %(status)" # is accessed via a reverse proxy (like Nginx, for example). # # @param command line options. -def handle_serve_uwsgi(config, whichShop): - serve_uwsgi = config[whichShop]["uwsgi_serve"].value_string(required=True).lower() +def handle_serve_uwsgi(config, which_shop): + serve_uwsgi = config[which_shop]["uwsgi_serve"].value_string(required=True).lower() params = ["uwsgi", "uwsgi", "--master", "--die-on-term", "--log-format", UWSGI_LOGFMT, - "--module", "talermerchantdemos.{}:app".format(whichShop), + "--module", "talermerchantdemos.{}:app".format(which_shop), "--need-app", "--cache2", "name=paid_articles,items=500"] if serve_uwsgi == "tcp": - port = config[whichShop]["uwsgi_port"].value_int(required=True) + port = config[which_shop]["uwsgi_port"].value_int(required=True) spec = ":%d" % (port,) params.extend(["--socket", spec]) elif serve_uwsgi == "unix": - spec = config[whichShop]["uwsgi_unixpath"].value_filename(required=True) - mode = config[whichShop]["uwsgi_unixpath_mode"].value_filename(required=True) + spec = config[which_shop]["uwsgi_unixpath"].value_filename(required=True) + mode = config[which_shop]["uwsgi_unixpath_mode"].value_filename(required=True) params.extend(["--socket", spec]) params.extend(["--chmod-socket="+mode]) os.makedirs(os.path.dirname(spec), exist_ok=True) @@ -71,9 +71,9 @@ def handle_serve_uwsgi(config, whichShop): # The effect it to launch the blog HTTP service. # # @param args command line options. -def handle_serve_http(config, whichShop, port=None): +def handle_serve_http(config, which_shop, port=None): if port is None: - port = config[whichShop]["http_port"].value_int(required=True) + port = config[which_shop]["http_port"].value_int(required=True) if port is None: print("'http_port' configuration option is missing") exit(1) @@ -84,7 +84,7 @@ def handle_serve_http(config, whichShop, port=None): "--die-on-term", "--log-format", UWSGI_LOGFMT, "--http", spec, - "--module", "talermerchantdemos.{}:app".format(whichShop)) + "--module", "talermerchantdemos.{}:app".format(which_shop)) except: sys.stderr.write("Failed to start uwsgi. Please make sure to install uwsgi for Python3.") sys.exit(1) @@ -105,7 +105,7 @@ def handle_serve_from_config(config_obj, which_shop): @click.argument("which-shop") def demos(config, http_port, which_shop): """ - WHICH_SHOP is one of: blog, donations, or survey. + WHICH_SHOP is one of: blog, donations, survey or landing. """ if config: os.environ["TALER_CONFIG_FILE"] = config @@ -18,6 +18,9 @@ setup(name='talermerchantdemos', # Common "static/*.css", "static/*.svg", + # Landing files + "landing/templates/*.j2", + "landing/translations/*/LC_MESSAGES/*.mo", # Blog files "blog/templates/*.html", "blog/templates/*.j2", diff --git a/talermerchantdemos/landing/__init__.py b/talermerchantdemos/landing/__init__.py new file mode 100644 index 0000000..b5d856c --- /dev/null +++ b/talermerchantdemos/landing/__init__.py @@ -0,0 +1,3 @@ +from talermerchantdemos.landing.landing import app + +__all__ = ["app"] diff --git a/talermerchantdemos/landing/landing.py b/talermerchantdemos/landing/landing.py new file mode 100644 index 0000000..6bc4249 --- /dev/null +++ b/talermerchantdemos/landing/landing.py @@ -0,0 +1,164 @@ +## +# This file is part of GNU TALER. +# Copyright (C) 2017, 2020 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 +# Foundation; either version 2.1, or (at your option) any later version. +# +# TALER is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License along with +# GNU TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +# +# @author Christian Grothoff +# @brief Minimal Website for the landing page. + +import os +import re +import datetime +import base64 +import logging +from urllib.parse import urljoin +import flask +from flask import request +from flask_babel import Babel +from flask_babel import refresh +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 +import sys + +if not sys.version_info.major == 3 and sys.version_info.minor >= 6: + print("Python 3.6 or higher is required.") + print("You are using Python {}.{}.".format(sys.version_info.major, sys.version_info.minor)) + sys.exit(1) + +BASE_DIR = os.path.dirname(os.path.abspath(__file__)) +app = flask.Flask(__name__, template_folder=BASE_DIR) +app.debug = True +app.secret_key = base64.b64encode(os.urandom(64)).decode('utf-8') + +LOGGER = logging.getLogger(__name__) +TC = TalerConfig.from_env() +try: + BACKEND_URL = TC["frontends"]["backend"].value_string(required=True) + CURRENCY = TC["taler"]["currency"].value_string(required=True) + APIKEY = TC["frontends"]["backend_apikey"].value_string(required=True) +except ConfigurationError as ce: + print(ce) + exit(1) + +app.config.from_object(__name__) +babel = Babel(app) + +LOGGER.info("Using translations from:" + ':'.join(list(babel.translation_directories))) +translations = [str(translation) for translation in babel.list_translations()] +if not 'en' in translations: + translations.append('en') +LOGGER.info("Operating with the following translations available: " + ' '.join(translations)) + +app.jinja_env.globals.update(self_localized=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 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) + + +## +# Exception handler to capture all the unmanaged errors. +# +# @param e the Exception object, currently unused. +# @return flask-native response object carrying the error message +# (and execution stack!). +@app.errorhandler(Exception) +def internal_error(e): + return flask.render_template( + "templates/error.html.j2", + message=gettext("Internal error"), + stack=traceback.format_exc(), + lang=get_locale() + ) + +## +# Serve the /favicon.ico requests. +# +# @return the favicon.ico file. +@app.route("/favicon.ico") +def favicon(): + LOGGER.info("will look into: " + os.path.join(app.root_path, 'static')) + return flask.send_from_directory( + os.path.join(app.root_path, 'static'), + "favicon.ico", + mimetype="image/vnd.microsoft.ico" + ) + + +## +# Serve the main index page, redirecting to /<lang>/ +# +# @return response object of the index page. +@app.route("/") +def index(): + default = 'en' + target = flask.request.accept_languages.best_match(translations, default) + return flask.redirect("/" + target + "/", code=302) + +## +# Serve the internationalized main index page. +# +# @return response object of the index page. +@app.route("/<lang>/", methods=["GET"]) +def start(lang): + return flask.render_template( + "templates/index.html.j2", + merchant_currency=CURRENCY, + lang=lang + ) + +@app.errorhandler(404) +def handler(e): + return flask.render_template( + "templates/error.html.j2", + message=gettext("Page not found"), + lang=get_locale() + ) + +@app.errorhandler(405) +def handler(e): + return flask.render_template( + "templates/error.html.j2", + message=gettext("HTTP method not allowed for this page"), + lang=get_locale() + ) diff --git a/talermerchantdemos/landing/static b/talermerchantdemos/landing/static new file mode 120000 index 0000000..d9bc54d --- /dev/null +++ b/talermerchantdemos/landing/static @@ -0,0 +1 @@ +../static/
\ No newline at end of file diff --git a/talermerchantdemos/landing/templates/base.html.j2 b/talermerchantdemos/landing/templates/base.html.j2 new file mode 100644 index 0000000..7cf16f1 --- /dev/null +++ b/talermerchantdemos/landing/templates/base.html.j2 @@ -0,0 +1,114 @@ +<!DOCTYPE html> +<!-- + This file is part of GNU TALER. + Copyright (C) 2014, 2015, 2016, 2020 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 + Foundation; either version 2.1, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License along with + TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +--> + +<html data-taler-nojs="true"> +<head> + <title>{{ gettext("Taler Demo") }}</title> + <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='pure.css') }}" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='demo.css') }}" /> + <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='navbar.css') }}" /> + <style> + .warn { + background-color: #aa393977; + padding: 1em; + } + @keyframes hoveranim { + from {left:0;} + to {left:1vw;} + } + @keyframes hoveranimrevert { + from {left:1vw;} + to {left:0;} + } + .notice { + border-radius: 1em; + background: #0333; + border-left: 0.3em solid #033; + padding-left: 1em; + padding-top: 0.5em; + padding-bottom: 0.5em; + margin-top: 2em; + margin-bottom: 2em; + } + .notice { + position: relative; + left: 0; + animation-name: hoveranimrevert; + animation-duration: 1s; + } + .notice:hover { + left: 1vw; + animation-name: hoveranim; + animation-duration: 1s; + } + #main a:link, #main a:visited, #main a:hover, #main a:active { + color: black; + } + </style> + + {% block styles %}{% endblock %} + {% block scripts %}{% endblock %} +</head> + +<body> + <header class="demobar" style="display: flex; flex-direction: column;"> + <h1><span class="tt adorn-brackets">{{ gettext("Taler Demo") }}</span></h1> + <h1><span class="it"><a href="{{ env('TALER_ENV_URL_MERCHANT_SURVEY') }}">{{ gettext("Survey") }}</a></span></h1> + <p>{{ + gettext("This is the Taler demo.") + "<br>" + + gettext("Here you can try out the Taler payment system using a toy currency.") + }} + </p> + </header> + <div style="display:flex; flex-direction: column;" class="navcontainer"> + <nav class="demolist"> + <a href="{{ env('TALER_ENV_URL_INTRO', '#') }}" class="active">{{gettext("Introduction")}}</a> + <a href="{{ env('TALER_ENV_URL_BANK', '#') }}">{{gettext("Bank")}}</a> + <a href="{{ env('TALER_ENV_URL_MERCHANT_BLOG', '#') }}">{{gettext("Essay Shop")}}</a> + <a href="{{ env('TALER_ENV_URL_MERCHANT_DONATIONS', '#') }}">{{gettext("Donations")}}</a> + <a href="{{ env('TALER_ENV_URL_MERCHANT_SURVEY', '#') }}">{{gettext("Tipping/Survey")}}</a> + <!-- a href="{{ env('TALER_ENV_URL_BACKOFFICE', '#') }}">{{gettext("Back-office")}}</a --> + <span class="right"> + {{ gettext("English [en]") }} + <!-- <input type="checkbox"> --> + <div class="nav"> + <br> + <!--<hr style="width: 100%;">--> + {% if lang != 'en' %} + <a href="/en/" class="navbtn">English [en]</a><br> + {% endif %} + {% if lang != 'de' %} + <a href="/de/" class="navbtn">Deutsch [de]</a><br> + {% endif %} + </div> + </span> + </nav> + </div> + + <section id="main" class="content"> + {% block main %} + This is the main content of the page. + {% endblock %} + <hr /> + <div> + <p>{{ gettext('You can learn more about Taler on our main <a href="{site}">website</a>.').format(site="https://taler.net/") }}</p> + <div style="flex-grow:1"></div> + <p>Copyright © 2014—2020 Taler Systems SA</p> + </div> + </section> +</body> +</html> diff --git a/talermerchantdemos/landing/templates/error.html.j2 b/talermerchantdemos/landing/templates/error.html.j2 new file mode 100644 index 0000000..009947c --- /dev/null +++ b/talermerchantdemos/landing/templates/error.html.j2 @@ -0,0 +1,13 @@ +{% extends "templates/base.html.j2" %} +{% block main %} + <h1>{{ gettext("Error encountered") }}</h1> + + <p>{{ message }}</p> + + {% if stack %} + <p>{{gettext("Stack trace:")}}</p> + <pre> + {{ stack }} + </pre> + {% endif %} +{% endblock main %} diff --git a/talermerchantdemos/landing/templates/index.html.j2 b/talermerchantdemos/landing/templates/index.html.j2 new file mode 100644 index 0000000..cc6b874 --- /dev/null +++ b/talermerchantdemos/landing/templates/index.html.j2 @@ -0,0 +1,73 @@ +{% extends "templates/base.html.j2" %} +{% block main %} + <article> + <h2>Step 1: Install the Taler wallet</h2> + Install the wallet from the <a href="https://wallet.taler.net/">installation page</a>. + It only takes one click. + <p class="bluebox taler-installed-hide"> + You don't have a wallet installed yet. + </p> + <p class="greenbox taler-installed-show"> + Congratulations, you have installed the Taler wallet correctly. + You can now proceed with the next steps. + </p> + </article> + + <article> + <h2>Step 2: Withdraw coins</h2> + <p> + + Now you can withdraw coins into your wallet by going to our <a href="{{ bank_url }}">bank</a>. + + In this demo you are paying with KUDOS, an imaginary currency. When you + create an account at our bank, you'll get 100 KUDOS for free. + </p> + <p class="graybox"> + We cannnot check if you were able to complete this step, since websites + cannot see the balance in your wallet. Please click on the Taler icon + in your browser to check your balance. + </p> + </article> + + <article> + <h2>Step 3: Pay</h2> + We have two demo merchants where you can spend your coins: + <ul> + <li> + The <a href="{{ merchant_blog_url }}">essay store</a>, where you can pay KUDOS for + individual chapters of Richard Stallman's book "Free Software, Free + Society", which is also available for free at <a href="http://www.fsf.org/">the FSF</a>. + </li> + <li> + The <a href="{{ merchant_donations_url }}">project donation website</a>, where + you can show respect to a software project of your choice + by giving them KUDOS. + </li> + </ul> + </article> + <article> + <h2>Step 4: Check money flow</h2> + <ul> + <li> + Check if people who received your Taler payment got eventually + paid by the exchange via a wire transfer; visit the: + <a href="{{ bank_url }}/public-accounts">public accounts page</a> at the bank. + Note that only those account whose owners gave permission are showed + on that page. + </li> + </ul> + </article> + <!-- article> + <h2>Step 5: Merchant? Consult back-office</h2> + <ul> + <li> + If you are a merchant, you can check the <a href="{{ backoffice_url }}">back-office</a> + website to see how your Taler transactions got payed back by bank wire transfers. + </li> + </ul> + </article --> + <article> + <h2>Step 5: Reach out to us</h2> + Let us know what you think by <a href="mailto:demo-feedback@taler.net">contacting us</a>. + </article> +{% endblock %} diff --git a/talermerchantdemos/landing/translations b/talermerchantdemos/landing/translations new file mode 120000 index 0000000..0a951f7 --- /dev/null +++ b/talermerchantdemos/landing/translations @@ -0,0 +1 @@ +../../translations/
\ No newline at end of file diff --git a/translations/de/LC_MESSAGES/messages.po b/translations/de/LC_MESSAGES/messages.po index 2b4ebe4..e78b5b5 100644 --- a/translations/de/LC_MESSAGES/messages.po +++ b/translations/de/LC_MESSAGES/messages.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: taler-merchant-demos\n" "Report-Msgid-Bugs-To: taler@gnu.org\n" -"POT-Creation-Date: 2020-10-11 16:14+0200\n" +"POT-Creation-Date: 2020-10-11 16:57+0200\n" "PO-Revision-Date: 2020-10-09 21:25+0200\n" "Last-Translator: Christian Grothoff <cg@taler.net>\n" "Language: de\n" @@ -20,6 +20,7 @@ msgstr "" #: talermerchantdemos/blog/blog.py:114 #: talermerchantdemos/donations/donations.py:157 +#: talermerchantdemos/landing/landing.py:109 #: talermerchantdemos/survey/survey.py:110 msgid "Internal error" msgstr "Interner Fehler" @@ -58,6 +59,7 @@ msgstr "" #: talermerchantdemos/blog/blog.py:412 #: talermerchantdemos/donations/donations.py:323 +#: talermerchantdemos/landing/landing.py:154 #: talermerchantdemos/survey/survey.py:171 msgid "Page not found" msgstr "" @@ -78,6 +80,8 @@ msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:72 #: talermerchantdemos/donations/templates/base.html.j2:69 +#: talermerchantdemos/landing/templates/base.html.j2:20 +#: talermerchantdemos/landing/templates/base.html.j2:69 #: talermerchantdemos/survey/templates/base.html.j2:69 msgid "Taler Demo" msgstr "Taler Demonstrator" @@ -104,18 +108,21 @@ msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:83 #: talermerchantdemos/donations/templates/base.html.j2:80 +#: talermerchantdemos/landing/templates/base.html.j2:79 #: talermerchantdemos/survey/templates/base.html.j2:80 msgid "Introduction" msgstr "Einführung" #: talermerchantdemos/blog/templates/base.html.j2:84 #: talermerchantdemos/donations/templates/base.html.j2:81 +#: talermerchantdemos/landing/templates/base.html.j2:80 #: talermerchantdemos/survey/templates/base.html.j2:81 msgid "Bank" msgstr "Bank" #: talermerchantdemos/blog/templates/base.html.j2:85 #: talermerchantdemos/donations/templates/base.html.j2:82 +#: talermerchantdemos/landing/templates/base.html.j2:81 #: talermerchantdemos/survey/templates/base.html.j2:82 msgid "Essay Shop" msgstr "" @@ -123,36 +130,42 @@ msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:86 #: talermerchantdemos/donations/templates/base.html.j2:70 #: talermerchantdemos/donations/templates/base.html.j2:83 +#: talermerchantdemos/landing/templates/base.html.j2:82 #: talermerchantdemos/survey/templates/base.html.j2:83 msgid "Donations" msgstr "Spenden" #: talermerchantdemos/blog/templates/base.html.j2:87 #: talermerchantdemos/donations/templates/base.html.j2:84 +#: talermerchantdemos/landing/templates/base.html.j2:83 #: talermerchantdemos/survey/templates/base.html.j2:84 msgid "Tipping/Survey" msgstr "Umfrage" #: talermerchantdemos/blog/templates/base.html.j2:88 #: talermerchantdemos/donations/templates/base.html.j2:85 +#: talermerchantdemos/landing/templates/base.html.j2:84 #: talermerchantdemos/survey/templates/base.html.j2:85 msgid "Back-office" msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:90 #: talermerchantdemos/donations/templates/base.html.j2:87 +#: talermerchantdemos/landing/templates/base.html.j2:86 #: talermerchantdemos/survey/templates/base.html.j2:87 msgid "English [en]" msgstr "Deutsch [de]" #: talermerchantdemos/blog/templates/base.html.j2:112 #: talermerchantdemos/donations/templates/base.html.j2:109 +#: talermerchantdemos/landing/templates/base.html.j2:108 #: talermerchantdemos/survey/templates/base.html.j2:109 msgid "You can learn more about Taler on our main <a href=\"{site}\">website</a>." msgstr "" #: talermerchantdemos/blog/templates/error.html.j2:3 #: talermerchantdemos/donations/templates/error.html.j2:3 +#: talermerchantdemos/landing/templates/error.html.j2:3 #: talermerchantdemos/survey/templates/error.html.j2:3 msgid "Error encountered" msgstr "" @@ -171,6 +184,7 @@ msgstr "" #: talermerchantdemos/blog/templates/error.html.j2:19 #: talermerchantdemos/donations/templates/error.html.j2:19 +#: talermerchantdemos/landing/templates/error.html.j2:8 #: talermerchantdemos/survey/templates/error.html.j2:19 msgid "Stack trace:" msgstr "" @@ -338,18 +352,28 @@ msgstr "" msgid "Backend returned error status" msgstr "" +#: talermerchantdemos/landing/landing.py:162 #: talermerchantdemos/survey/survey.py:179 msgid "HTTP method not allowed for this page" msgstr "" -#: talermerchantdemos/survey/templates/base.html.j2:20 -msgid "Taler Survey Demo" -msgstr "" - +#: talermerchantdemos/landing/templates/base.html.j2:70 #: talermerchantdemos/survey/templates/base.html.j2:70 msgid "Survey" msgstr "Umfrage" +#: talermerchantdemos/landing/templates/base.html.j2:72 +msgid "This is the Taler demo." +msgstr "" + +#: talermerchantdemos/landing/templates/base.html.j2:73 +msgid "Here you can try out the Taler payment system using a toy currency." +msgstr "" + +#: talermerchantdemos/survey/templates/base.html.j2:20 +msgid "Taler Survey Demo" +msgstr "" + #: talermerchantdemos/survey/templates/base.html.j2:72 msgid "This is the Taler survey demonstration." msgstr "" diff --git a/translations/messages.pot b/translations/messages.pot index 05549ae..5e626cf 100644 --- a/translations/messages.pot +++ b/translations/messages.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-10-11 16:14+0200\n" +"POT-Creation-Date: 2020-10-11 16:57+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -19,6 +19,7 @@ msgstr "" #: talermerchantdemos/blog/blog.py:114 #: talermerchantdemos/donations/donations.py:157 +#: talermerchantdemos/landing/landing.py:109 #: talermerchantdemos/survey/survey.py:110 msgid "Internal error" msgstr "" @@ -57,6 +58,7 @@ msgstr "" #: talermerchantdemos/blog/blog.py:412 #: talermerchantdemos/donations/donations.py:323 +#: talermerchantdemos/landing/landing.py:154 #: talermerchantdemos/survey/survey.py:171 msgid "Page not found" msgstr "" @@ -77,6 +79,8 @@ msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:72 #: talermerchantdemos/donations/templates/base.html.j2:69 +#: talermerchantdemos/landing/templates/base.html.j2:20 +#: talermerchantdemos/landing/templates/base.html.j2:69 #: talermerchantdemos/survey/templates/base.html.j2:69 msgid "Taler Demo" msgstr "" @@ -103,18 +107,21 @@ msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:83 #: talermerchantdemos/donations/templates/base.html.j2:80 +#: talermerchantdemos/landing/templates/base.html.j2:79 #: talermerchantdemos/survey/templates/base.html.j2:80 msgid "Introduction" msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:84 #: talermerchantdemos/donations/templates/base.html.j2:81 +#: talermerchantdemos/landing/templates/base.html.j2:80 #: talermerchantdemos/survey/templates/base.html.j2:81 msgid "Bank" msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:85 #: talermerchantdemos/donations/templates/base.html.j2:82 +#: talermerchantdemos/landing/templates/base.html.j2:81 #: talermerchantdemos/survey/templates/base.html.j2:82 msgid "Essay Shop" msgstr "" @@ -122,36 +129,42 @@ msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:86 #: talermerchantdemos/donations/templates/base.html.j2:70 #: talermerchantdemos/donations/templates/base.html.j2:83 +#: talermerchantdemos/landing/templates/base.html.j2:82 #: talermerchantdemos/survey/templates/base.html.j2:83 msgid "Donations" msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:87 #: talermerchantdemos/donations/templates/base.html.j2:84 +#: talermerchantdemos/landing/templates/base.html.j2:83 #: talermerchantdemos/survey/templates/base.html.j2:84 msgid "Tipping/Survey" msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:88 #: talermerchantdemos/donations/templates/base.html.j2:85 +#: talermerchantdemos/landing/templates/base.html.j2:84 #: talermerchantdemos/survey/templates/base.html.j2:85 msgid "Back-office" msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:90 #: talermerchantdemos/donations/templates/base.html.j2:87 +#: talermerchantdemos/landing/templates/base.html.j2:86 #: talermerchantdemos/survey/templates/base.html.j2:87 msgid "English [en]" msgstr "" #: talermerchantdemos/blog/templates/base.html.j2:112 #: talermerchantdemos/donations/templates/base.html.j2:109 +#: talermerchantdemos/landing/templates/base.html.j2:108 #: talermerchantdemos/survey/templates/base.html.j2:109 msgid "You can learn more about Taler on our main <a href=\"{site}\">website</a>." msgstr "" #: talermerchantdemos/blog/templates/error.html.j2:3 #: talermerchantdemos/donations/templates/error.html.j2:3 +#: talermerchantdemos/landing/templates/error.html.j2:3 #: talermerchantdemos/survey/templates/error.html.j2:3 msgid "Error encountered" msgstr "" @@ -170,6 +183,7 @@ msgstr "" #: talermerchantdemos/blog/templates/error.html.j2:19 #: talermerchantdemos/donations/templates/error.html.j2:19 +#: talermerchantdemos/landing/templates/error.html.j2:8 #: talermerchantdemos/survey/templates/error.html.j2:19 msgid "Stack trace:" msgstr "" @@ -337,18 +351,28 @@ msgstr "" msgid "Backend returned error status" msgstr "" +#: talermerchantdemos/landing/landing.py:162 #: talermerchantdemos/survey/survey.py:179 msgid "HTTP method not allowed for this page" msgstr "" -#: talermerchantdemos/survey/templates/base.html.j2:20 -msgid "Taler Survey Demo" -msgstr "" - +#: talermerchantdemos/landing/templates/base.html.j2:70 #: talermerchantdemos/survey/templates/base.html.j2:70 msgid "Survey" msgstr "" +#: talermerchantdemos/landing/templates/base.html.j2:72 +msgid "This is the Taler demo." +msgstr "" + +#: talermerchantdemos/landing/templates/base.html.j2:73 +msgid "Here you can try out the Taler payment system using a toy currency." +msgstr "" + +#: talermerchantdemos/survey/templates/base.html.j2:20 +msgid "Taler Survey Demo" +msgstr "" + #: talermerchantdemos/survey/templates/base.html.j2:72 msgid "This is the Taler survey demonstration." msgstr "" |