diff options
-rw-r--r-- | babel.cfg | 4 | ||||
-rw-r--r-- | talermerchantdemos/blog/blog.py | 6 | ||||
-rw-r--r-- | talermerchantdemos/httpcommon/__init__.py | 28 | ||||
-rw-r--r-- | talermerchantdemos/survey/survey.py | 32 | ||||
-rw-r--r-- | talermerchantdemos/survey/templates/base.html.j2 | 4 | ||||
-rw-r--r-- | talermerchantdemos/survey/templates/error.html.j2 | 2 | ||||
-rw-r--r-- | talermerchantdemos/survey/templates/index.html.j2 | 2 | ||||
-rw-r--r-- | translations/de/LC_MESSAGES/messages.po | 330 | ||||
-rw-r--r-- | translations/messages.pot | 238 |
9 files changed, 501 insertions, 145 deletions
@@ -1,2 +1,4 @@ -[jinja2: **/templates/**.j2 **/*.py] +[jinja2: **/templates/**.j2] extensions=jinja2.ext.autoescape,jinja2.ext.with_ + +[python: **/*.py] diff --git a/talermerchantdemos/blog/blog.py b/talermerchantdemos/blog/blog.py index ba6571b..be9b0a2 100644 --- a/talermerchantdemos/blog/blog.py +++ b/talermerchantdemos/blog/blog.py @@ -79,13 +79,11 @@ BACKEND_URL = urljoin(BACKEND_BASE_URL, "instances/blog/") app.config.from_object(__name__) babel = Babel(app) -print("Using translations from:") -print(list(babel.translation_directories)) +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') -print("Operating with the following translations available:") -print(translations) +LOGGER.info("Operating with the following translations available: " + ' '.join(translations)) app.jinja_env.globals.update(self_localized=self_localized) diff --git a/talermerchantdemos/httpcommon/__init__.py b/talermerchantdemos/httpcommon/__init__.py index d07fe69..650228d 100644 --- a/talermerchantdemos/httpcommon/__init__.py +++ b/talermerchantdemos/httpcommon/__init__.py @@ -4,7 +4,7 @@ from urllib.parse import urljoin from flask import request from datetime import datetime import time - +from flask_babel import gettext ## # Return a error response to the client. @@ -32,19 +32,19 @@ def backend_post(backend_url, endpoint, json): final_url, json=json, headers=headers ) except requests.ConnectionError: - err_abort(500, message="Could not establish connection to backend") + err_abort(500, message=gettext("Could not establish connection to backend")) try: response_json = resp.json() except ValueError: err_abort( 500, - message="Could not parse response from backend", + message=gettext("Could not parse response from backend"), status_code=resp.status_code ) if resp.status_code != 200: err_abort( 500, - message="Backend returned error status", + message=gettext("Backend returned error status"), json=response_json, status_code=resp.status_code ) @@ -68,21 +68,29 @@ def backend_get(backend_url, endpoint, params): final_url, params=params, headers=headers ) except requests.ConnectionError: - err_abort(500, message="Could not establish connection to backend") + err_abort(500, message=gettext("Could not establish connection to backend")) try: response_json = resp.json() except ValueError: - err_abort(500, message="Could not parse response from backend") + err_abort(500, message=gettext("Could not parse response from backend")) if resp.status_code != 200: err_abort( 500, - message="Backend returned error status", + message=gettext("Backend returned error status"), json=response_json, status_code=resp.status_code ) print("Backend responds to {}: {}".format(final_url, str(response_json))) return response_json +def get_locale(): + parts = request.path.split('/', 2) + if (2 >= len(parts)): + # Totally unexpected path format, do not localize + return "en" + lang = parts[1] + return lang + ## # Helper function used inside Jinja2 logic to create a links # to the current page but in a different language. Used to @@ -107,7 +115,11 @@ def self_localized(lang): # @param abort_status_code status code to return along the response. # @param params _kw_ arguments to passed verbatim to the templating engine. def err_abort(abort_status_code, **params): - t = flask.render_template("templates/error.html.j2", **params) + t = flask.render_template( + "templates/error.html.j2", + lang=get_locale(), + **params + ) flask.abort(flask.make_response(t, abort_status_code)) diff --git a/talermerchantdemos/survey/survey.py b/talermerchantdemos/survey/survey.py index 140088d..38065f1 100644 --- a/talermerchantdemos/survey/survey.py +++ b/talermerchantdemos/survey/survey.py @@ -57,13 +57,11 @@ app.config.from_object(__name__) babel = Babel(app) INSTANCED_URL = urljoin(BACKEND_URL, f"instances/survey/") -print("Using translations from:") -print(list(babel.translation_directories)) +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') -print("Operating with the following translations available:") -print(translations) +LOGGER.info("Operating with the following translations available: " + ' '.join(translations)) app.jinja_env.globals.update(self_localized=self_localized) @@ -110,10 +108,10 @@ def internal_error(e): return flask.render_template( "templates/error.html.j2", message=gettext("Internal error"), - stack=traceback.format_exc() + stack=traceback.format_exc(), + lang=get_locale() ) - ## # Serve the /favicon.ico requests. # @@ -133,7 +131,10 @@ def favicon(): # @param abort_status_code status code to return along the response. # @param params _kw_ arguments to passed verbatim to the templating engine. def err_abort(abort_status_code, **params): - t = flask.render_template("templates/error.html.j2", **params) + t = flask.render_template( + "templates/error.html.j2", + lang=get_locale(), + **params) flask.abort(flask.make_response(t, abort_status_code)) ## @@ -144,8 +145,8 @@ def err_abort(abort_status_code, **params): # @return the URL where to redirect the browser, in order # for the wallet to pick the tip up, or a error page # otherwise. -@app.route("/submit-survey", methods=["POST"]) -def submit_survey(): +@app.route("/<lang>/submit-survey", methods=["POST"]) +def submit_survey(lang): tip_spec = dict( amount=CURRENCY + ":1.0", next_url=os.environ.get("TALER_ENV_URL_INTRO", "https://taler.net/"), @@ -177,4 +178,15 @@ def start(lang): @app.errorhandler(404) def handler(e): return flask.render_template( - "templates/error.html.j2", message=gettext("Page not found")) + "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/survey/templates/base.html.j2 b/talermerchantdemos/survey/templates/base.html.j2 index b6d1c62..1beb0d5 100644 --- a/talermerchantdemos/survey/templates/base.html.j2 +++ b/talermerchantdemos/survey/templates/base.html.j2 @@ -90,10 +90,10 @@ <br> <!--<hr style="width: 100%;">--> {% if lang != 'en' %} - <a href="{{ self_localized('en') }}" class="navbtn">English [en]</a><br> + <a href="/en/" class="navbtn">English [en]</a><br> {% endif %} {% if lang != 'de' %} - <a href="{{ self_localized('de') }}" class="navbtn">Deutsch [de]</a><br> + <a href="/de/" class="navbtn">Deutsch [de]</a><br> {% endif %} </div> </span> diff --git a/talermerchantdemos/survey/templates/error.html.j2 b/talermerchantdemos/survey/templates/error.html.j2 index ffc2e1f..844da08 100644 --- a/talermerchantdemos/survey/templates/error.html.j2 +++ b/talermerchantdemos/survey/templates/error.html.j2 @@ -6,7 +6,7 @@ {% if status_code %} <p> - {{ gettext ("The backend returned status code {code}.").format(code=status_code) }}. + {{ gettext ("The backend returned status code {code}.").format(code=status_code) }} </p> {% endif %} diff --git a/talermerchantdemos/survey/templates/index.html.j2 b/talermerchantdemos/survey/templates/index.html.j2 index 9c9df5b..3539bf8 100644 --- a/talermerchantdemos/survey/templates/index.html.j2 +++ b/talermerchantdemos/survey/templates/index.html.j2 @@ -8,7 +8,7 @@ </p> </div> <div> - <form action="{{ url_for('submit_survey') }}" method="post" class="pure-form pure-form-stacked"> + <form action="{{ "/" + lang + "/submit-survey" }}" method="post" class="pure-form pure-form-stacked"> <legend>{{ gettext("Which payment system do you prefer?") }}</legend> <fieldset> <label for="option-taler"> diff --git a/translations/de/LC_MESSAGES/messages.po b/translations/de/LC_MESSAGES/messages.po index b7a78fc..d980693 100644 --- a/translations/de/LC_MESSAGES/messages.po +++ b/translations/de/LC_MESSAGES/messages.po @@ -1,160 +1,256 @@ -# German translations for PROJECT. -# Copyright (C) 2020 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2020. +# German translations for GNU Taler merchant demos. +# Copyright (C) 2020 Taler Systems SA +# This file is distributed under the same license as the GNU Taler project. +# Christian Grothoff <cg@taler.net>, 2020. # msgid "" msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-10-11 15:01+0200\n" +"Project-Id-Version: taler-merchant-demos\n" +"Report-Msgid-Bugs-To: taler@gnu.org\n" +"POT-Creation-Date: 2020-10-11 15:39+0200\n" "PO-Revision-Date: 2020-10-09 21:25+0200\n" -"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Last-Translator: Christian Grothoff <cg@taler.net>\n" "Language: de\n" -"Language-Team: de <LL@li.org>\n" +"Language-Team: de <de@taler.net>\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" -#~ msgid "You did not like this article?" -#~ msgstr "" +#: talermerchantdemos/blog/blog.py:114 talermerchantdemos/survey/survey.py:110 +msgid "Internal error" +msgstr "Interner Fehler" -#~ msgid "" -#~ "You can <a href=\"{url}\">request a " -#~ "refund</a> within the first hour after" -#~ " buying it." -#~ msgstr "" +#: talermerchantdemos/blog/blog.py:180 +msgid "Cannot refund unpaid article" +msgstr "" + +#: talermerchantdemos/blog/blog.py:186 +msgid "Article is not anymore refundable" +msgstr "" + +#: talermerchantdemos/blog/blog.py:217 +msgid "You did not pay for this article (nice try!)" +msgstr "" + +#: talermerchantdemos/blog/blog.py:223 +msgid "Item not refundable (anymore)" +msgstr "" + +#: talermerchantdemos/blog/blog.py:248 +msgid "Internal error: Files for article ({}) not found." +msgstr "" + +#: talermerchantdemos/blog/blog.py:253 +msgid "Supplemental file ({}) for article ({}) not found." +msgstr "" + +#: talermerchantdemos/blog/blog.py:326 talermerchantdemos/blog/blog.py:339 +msgid "Direct access forbidden" +msgstr "" + +#: talermerchantdemos/blog/blog.py:405 +msgid "Internal server error" +msgstr "" + +#: talermerchantdemos/blog/blog.py:412 talermerchantdemos/survey/survey.py:182 +msgid "Page not found" +msgstr "" + +#: talermerchantdemos/blog/templates/article_frame.html.j2:9 +msgid "You did not like this article?" +msgstr "" + +#: talermerchantdemos/blog/templates/article_frame.html.j2:10 +msgid "" +"You can <a href=\"{url}\">request a refund</a> within the first hour " +"after buying it." +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:23 +msgid "Taler Essay Shop Demo" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:72 +#: talermerchantdemos/survey/templates/base.html.j2:69 +msgid "Taler Demo" +msgstr "Taler Demonstrator" + +#: talermerchantdemos/blog/templates/base.html.j2:73 +msgid "Shop" +msgstr "Laden" + +#: talermerchantdemos/blog/templates/base.html.j2:75 +msgid "On this page you can buy articles using an imaginary currency." +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:76 +msgid "" +"The articles are chapters from Richard Stallman's book "Free " +"Software, Free Society"." +msgstr "" -#~ msgid "Taler Essay Shop Demo" -#~ msgstr "" +#: talermerchantdemos/blog/templates/base.html.j2:77 +msgid "" +"The book is <a href=\"{shop}\">published by the FSF</a> and available " +"gratis at <a href=\"{gnu}\">gnu.org</a>." +msgstr "" -#~ msgid "Taler Demo" -#~ msgstr "" +#: talermerchantdemos/blog/templates/base.html.j2:83 +#: talermerchantdemos/survey/templates/base.html.j2:80 +msgid "Introduction" +msgstr "Einführung" -#~ msgid "Shop" -#~ msgstr "" +#: talermerchantdemos/blog/templates/base.html.j2:84 +#: talermerchantdemos/survey/templates/base.html.j2:81 +msgid "Bank" +msgstr "Bank" -#~ msgid "On this page you can buy articles using an imaginary currency." -#~ msgstr "" +#: talermerchantdemos/blog/templates/base.html.j2:85 +#: talermerchantdemos/survey/templates/base.html.j2:82 +msgid "Essay Shop" +msgstr "" -#~ msgid "" -#~ "The articles are chapters from Richard" -#~ " Stallman's book "Free Software, Free" -#~ " Society"." -#~ msgstr "" +#: talermerchantdemos/blog/templates/base.html.j2:86 +#: talermerchantdemos/survey/templates/base.html.j2:83 +msgid "Donations" +msgstr "Spenden" -#~ msgid "" -#~ "The book is <a href=\"{shop}\">published " -#~ "by the FSF</a> and available gratis " -#~ "at <a href=\"{gnu}\">gnu.org</a>." -#~ msgstr "" +#: talermerchantdemos/blog/templates/base.html.j2:87 +#: talermerchantdemos/survey/templates/base.html.j2:84 +msgid "Tipping/Survey" +msgstr "Umfrage" -#~ msgid "Introduction" -#~ msgstr "" +#: talermerchantdemos/blog/templates/base.html.j2:88 +#: talermerchantdemos/survey/templates/base.html.j2:85 +msgid "Back-office" +msgstr "" -#~ msgid "Bank" -#~ msgstr "" +#: talermerchantdemos/blog/templates/base.html.j2:90 +#: talermerchantdemos/survey/templates/base.html.j2:87 +msgid "English [en]" +msgstr "Deutsch [de]" -#~ msgid "Essay Shop" -#~ msgstr "" +#: talermerchantdemos/blog/templates/base.html.j2:112 +#: talermerchantdemos/survey/templates/base.html.j2:109 +msgid "You can learn more about Taler on our main <a href=\"{site}\">website</a>." +msgstr "" -#~ msgid "Donations" -#~ msgstr "" +#: talermerchantdemos/blog/templates/error.html.j2:3 +#: talermerchantdemos/survey/templates/error.html.j2:3 +msgid "Error encountered" +msgstr "" -#~ msgid "Tipping/Survey" -#~ msgstr "" +#: talermerchantdemos/blog/templates/error.html.j2:9 +#: talermerchantdemos/survey/templates/error.html.j2:9 +msgid "The backend returned status code {code}." +msgstr "" -#~ msgid "Back-office" -#~ msgstr "" +#: talermerchantdemos/blog/templates/error.html.j2:14 +#: talermerchantdemos/survey/templates/error.html.j2:14 +msgid "Backend response:" +msgstr "" -#~ msgid "English [en]" -#~ msgstr "" +#: talermerchantdemos/blog/templates/error.html.j2:19 +#: talermerchantdemos/survey/templates/error.html.j2:19 +msgid "Stack trace:" +msgstr "" -#~ msgid "" -#~ "You can learn more about Taler on" -#~ " our main <a href=\"{site}\">website</a>." -#~ msgstr "" +#: talermerchantdemos/blog/templates/index.html.j2:3 +msgid "Essay Shop: Free Software, Free Society" +msgstr "" -#~ msgid "Error encountered" -#~ msgstr "" +#: talermerchantdemos/blog/templates/index.html.j2:5 +msgid "" +"This is the latest edition of <cite>Free Software, Free Society: Selected" +" Essays of Richard M. Stallman.</cite>" +msgstr "" -#~ msgid "The backend returned status code {code}." -#~ msgstr "" +#: talermerchantdemos/blog/templates/index.html.j2:13 +msgid "" +"Verbatim copying and distribution of this entire book are permitted " +"worldwide, without royalty, in any medium, provided this notice is " +"preserved. Permission is granted to copy and distribute translations of " +"this book from the original English into another language provided the " +"translation has been approved by the Free Software Foundation and the " +"copyright notice and this permission notice are preserved on all copies." +msgstr "" -#~ msgid "Backend response:" -#~ msgstr "" +#: talermerchantdemos/blog/templates/index.html.j2:18 +msgid "Chapters" +msgstr "Kapitel" -#~ msgid "Stack trace:" -#~ msgstr "" +#: talermerchantdemos/blog/templates/index.html.j2:21 +msgid "Click on an individual chapter to to purchase it with GNU Taler." +msgstr "" -#~ msgid "Essay Shop: Free Software, Free Society" -#~ msgstr "Essay Laden: Freie Software, Freie Gesellschaft" +#: talermerchantdemos/blog/templates/index.html.j2:22 +msgid "" +"You can get free, virtual money to buy articles on this page at the <a " +"href=\"{}\")\">bank</a>" +msgstr "" + +#: talermerchantdemos/blog/templates/index.html.j2:30 +msgid "Pay to read more..." +msgstr "Bezahlen um weiterzulesen..." -#~ msgid "" -#~ "This is the latest edition of " -#~ "<cite>Free Software, Free Society: Selected" -#~ " Essays of Richard M. Stallman.</cite>" -#~ msgstr "" +#: talermerchantdemos/blog/templates/index.html.j2:33 +msgid "No articles available in this language." +msgstr "Keine Artikel in dieser Sprache verfügbar." -#~ msgid "" -#~ "Verbatim copying and distribution of " -#~ "this entire book are permitted " -#~ "worldwide, without royalty, in any " -#~ "medium, provided this notice is " -#~ "preserved. Permission is granted to copy" -#~ " and distribute translations of this " -#~ "book from the original English into " -#~ "another language provided the translation " -#~ "has been approved by the Free " -#~ "Software Foundation and the copyright " -#~ "notice and this permission notice are" -#~ " preserved on all copies." -#~ msgstr "" +#: talermerchantdemos/httpcommon/__init__.py:35 +#: talermerchantdemos/httpcommon/__init__.py:71 +msgid "Could not establish connection to backend" +msgstr "" -#~ msgid "Chapters" -#~ msgstr "" +#: talermerchantdemos/httpcommon/__init__.py:41 +#: talermerchantdemos/httpcommon/__init__.py:75 +msgid "Could not parse response from backend" +msgstr "" -#~ msgid "Click on an individual chapter to to purchase it with GNU Taler." -#~ msgstr "" +#: talermerchantdemos/httpcommon/__init__.py:47 +#: talermerchantdemos/httpcommon/__init__.py:79 +msgid "Backend returned error status" +msgstr "" -#~ msgid "" -#~ "You can get free, virtual money to" -#~ " buy articles on this page at " -#~ "the <a href=\"{}\")\">bank</a>" -#~ msgstr "" +#: talermerchantdemos/survey/survey.py:190 +msgid "HTTP method not allowed for this page" +msgstr "" -#~ msgid "Pay to read more..." -#~ msgstr "" +#: talermerchantdemos/survey/templates/base.html.j2:20 +msgid "Taler Survey Demo" +msgstr "" -#~ msgid "No articles available in this language." -#~ msgstr "" +#: talermerchantdemos/survey/templates/base.html.j2:70 +msgid "Survey" +msgstr "Umfrage" -#~ msgid "Taler Survey Demo" -#~ msgstr "" - -#~ msgid "Survey" -#~ msgstr "" - -#~ msgid "This is the Taler survey demonstration." -#~ msgstr "" - -#~ msgid "It demonatrates how merchants can reward their users by granting tips." -#~ msgstr "" +#: talermerchantdemos/survey/templates/base.html.j2:72 +msgid "This is the Taler survey demonstration." +msgstr "" -#~ msgid "" -#~ "Tipping is a way for offer cash" -#~ " rewards that go directly into a " -#~ "user's wallet." -#~ msgstr "" +#: talermerchantdemos/survey/templates/base.html.j2:73 +msgid "It demonatrates how merchants can reward their users by granting tips." +msgstr "" + +#: talermerchantdemos/survey/templates/base.html.j2:74 +msgid "" +"Tipping is a way for offer cash rewards that go directly into a user's " +"wallet." +msgstr "" + +#: talermerchantdemos/survey/templates/index.html.j2:6 +msgid "" +"On this page, you can participate in our survey about payment systems and" +" receive a tip in return." +msgstr "" -#~ msgid "" -#~ "On this page, you can participate " -#~ "in our survey about payment systems " -#~ "and receive a tip in return." -#~ msgstr "" +#: talermerchantdemos/survey/templates/index.html.j2:12 +msgid "Which payment system do you prefer?" +msgstr "Welches Bezahlsystem bevorzugen Sie?" -#~ msgid "Which payment system do you prefer?" -#~ msgstr "" +#: talermerchantdemos/survey/templates/index.html.j2:23 +msgid "Submit Survey" +msgstr "Antwort abschicken" diff --git a/translations/messages.pot b/translations/messages.pot index 368a4bb..c47b411 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 15:01+0200\n" +"POT-Creation-Date: 2020-10-11 15:39+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" @@ -17,3 +17,239 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 2.6.0\n" +#: talermerchantdemos/blog/blog.py:114 talermerchantdemos/survey/survey.py:110 +msgid "Internal error" +msgstr "" + +#: talermerchantdemos/blog/blog.py:180 +msgid "Cannot refund unpaid article" +msgstr "" + +#: talermerchantdemos/blog/blog.py:186 +msgid "Article is not anymore refundable" +msgstr "" + +#: talermerchantdemos/blog/blog.py:217 +msgid "You did not pay for this article (nice try!)" +msgstr "" + +#: talermerchantdemos/blog/blog.py:223 +msgid "Item not refundable (anymore)" +msgstr "" + +#: talermerchantdemos/blog/blog.py:248 +msgid "Internal error: Files for article ({}) not found." +msgstr "" + +#: talermerchantdemos/blog/blog.py:253 +msgid "Supplemental file ({}) for article ({}) not found." +msgstr "" + +#: talermerchantdemos/blog/blog.py:326 talermerchantdemos/blog/blog.py:339 +msgid "Direct access forbidden" +msgstr "" + +#: talermerchantdemos/blog/blog.py:405 +msgid "Internal server error" +msgstr "" + +#: talermerchantdemos/blog/blog.py:412 talermerchantdemos/survey/survey.py:182 +msgid "Page not found" +msgstr "" + +#: talermerchantdemos/blog/templates/article_frame.html.j2:9 +msgid "You did not like this article?" +msgstr "" + +#: talermerchantdemos/blog/templates/article_frame.html.j2:10 +msgid "" +"You can <a href=\"{url}\">request a refund</a> within the first hour " +"after buying it." +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:23 +msgid "Taler Essay Shop Demo" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:72 +#: talermerchantdemos/survey/templates/base.html.j2:69 +msgid "Taler Demo" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:73 +msgid "Shop" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:75 +msgid "On this page you can buy articles using an imaginary currency." +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:76 +msgid "" +"The articles are chapters from Richard Stallman's book "Free " +"Software, Free Society"." +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:77 +msgid "" +"The book is <a href=\"{shop}\">published by the FSF</a> and available " +"gratis at <a href=\"{gnu}\">gnu.org</a>." +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:83 +#: talermerchantdemos/survey/templates/base.html.j2:80 +msgid "Introduction" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:84 +#: talermerchantdemos/survey/templates/base.html.j2:81 +msgid "Bank" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:85 +#: talermerchantdemos/survey/templates/base.html.j2:82 +msgid "Essay Shop" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:86 +#: talermerchantdemos/survey/templates/base.html.j2:83 +msgid "Donations" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:87 +#: talermerchantdemos/survey/templates/base.html.j2:84 +msgid "Tipping/Survey" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:88 +#: talermerchantdemos/survey/templates/base.html.j2:85 +msgid "Back-office" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:90 +#: talermerchantdemos/survey/templates/base.html.j2:87 +msgid "English [en]" +msgstr "" + +#: talermerchantdemos/blog/templates/base.html.j2:112 +#: 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/survey/templates/error.html.j2:3 +msgid "Error encountered" +msgstr "" + +#: talermerchantdemos/blog/templates/error.html.j2:9 +#: talermerchantdemos/survey/templates/error.html.j2:9 +msgid "The backend returned status code {code}." +msgstr "" + +#: talermerchantdemos/blog/templates/error.html.j2:14 +#: talermerchantdemos/survey/templates/error.html.j2:14 +msgid "Backend response:" +msgstr "" + +#: talermerchantdemos/blog/templates/error.html.j2:19 +#: talermerchantdemos/survey/templates/error.html.j2:19 +msgid "Stack trace:" +msgstr "" + +#: talermerchantdemos/blog/templates/index.html.j2:3 +msgid "Essay Shop: Free Software, Free Society" +msgstr "" + +#: talermerchantdemos/blog/templates/index.html.j2:5 +msgid "" +"This is the latest edition of <cite>Free Software, Free Society: Selected" +" Essays of Richard M. Stallman.</cite>" +msgstr "" + +#: talermerchantdemos/blog/templates/index.html.j2:13 +msgid "" +"Verbatim copying and distribution of this entire book are permitted " +"worldwide, without royalty, in any medium, provided this notice is " +"preserved. Permission is granted to copy and distribute translations of " +"this book from the original English into another language provided the " +"translation has been approved by the Free Software Foundation and the " +"copyright notice and this permission notice are preserved on all copies." +msgstr "" + +#: talermerchantdemos/blog/templates/index.html.j2:18 +msgid "Chapters" +msgstr "" + +#: talermerchantdemos/blog/templates/index.html.j2:21 +msgid "Click on an individual chapter to to purchase it with GNU Taler." +msgstr "" + +#: talermerchantdemos/blog/templates/index.html.j2:22 +msgid "" +"You can get free, virtual money to buy articles on this page at the <a " +"href=\"{}\")\">bank</a>" +msgstr "" + +#: talermerchantdemos/blog/templates/index.html.j2:30 +msgid "Pay to read more..." +msgstr "" + +#: talermerchantdemos/blog/templates/index.html.j2:33 +msgid "No articles available in this language." +msgstr "" + +#: talermerchantdemos/httpcommon/__init__.py:35 +#: talermerchantdemos/httpcommon/__init__.py:71 +msgid "Could not establish connection to backend" +msgstr "" + +#: talermerchantdemos/httpcommon/__init__.py:41 +#: talermerchantdemos/httpcommon/__init__.py:75 +msgid "Could not parse response from backend" +msgstr "" + +#: talermerchantdemos/httpcommon/__init__.py:47 +#: talermerchantdemos/httpcommon/__init__.py:79 +msgid "Backend returned error status" +msgstr "" + +#: talermerchantdemos/survey/survey.py:190 +msgid "HTTP method not allowed for this page" +msgstr "" + +#: talermerchantdemos/survey/templates/base.html.j2:20 +msgid "Taler Survey Demo" +msgstr "" + +#: talermerchantdemos/survey/templates/base.html.j2:70 +msgid "Survey" +msgstr "" + +#: talermerchantdemos/survey/templates/base.html.j2:72 +msgid "This is the Taler survey demonstration." +msgstr "" + +#: talermerchantdemos/survey/templates/base.html.j2:73 +msgid "It demonatrates how merchants can reward their users by granting tips." +msgstr "" + +#: talermerchantdemos/survey/templates/base.html.j2:74 +msgid "" +"Tipping is a way for offer cash rewards that go directly into a user's " +"wallet." +msgstr "" + +#: talermerchantdemos/survey/templates/index.html.j2:6 +msgid "" +"On this page, you can participate in our survey about payment systems and" +" receive a tip in return." +msgstr "" + +#: talermerchantdemos/survey/templates/index.html.j2:12 +msgid "Which payment system do you prefer?" +msgstr "" + +#: talermerchantdemos/survey/templates/index.html.j2:23 +msgid "Submit Survey" +msgstr "" + |