summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-10-11 15:40:39 +0200
committerChristian Grothoff <christian@grothoff.org>2020-10-11 15:40:39 +0200
commit449f1d5765ffffcf2c708f4ccf6278e9c79081d0 (patch)
tree284ae10511cb677edb390f5fa20533c0f52e3eb9
parenta984947846c7b83d3151fc4987ca615edcb168ef (diff)
downloadtaler-merchant-demos-449f1d5765ffffcf2c708f4ccf6278e9c79081d0.tar.gz
taler-merchant-demos-449f1d5765ffffcf2c708f4ccf6278e9c79081d0.tar.bz2
taler-merchant-demos-449f1d5765ffffcf2c708f4ccf6278e9c79081d0.zip
improve i18n for survey
-rw-r--r--babel.cfg4
-rw-r--r--talermerchantdemos/blog/blog.py6
-rw-r--r--talermerchantdemos/httpcommon/__init__.py28
-rw-r--r--talermerchantdemos/survey/survey.py32
-rw-r--r--talermerchantdemos/survey/templates/base.html.j24
-rw-r--r--talermerchantdemos/survey/templates/error.html.j22
-rw-r--r--talermerchantdemos/survey/templates/index.html.j22
-rw-r--r--translations/de/LC_MESSAGES/messages.po330
-rw-r--r--translations/messages.pot238
9 files changed, 501 insertions, 145 deletions
diff --git a/babel.cfg b/babel.cfg
index 339b5df..1cbe423 100644
--- a/babel.cfg
+++ b/babel.cfg
@@ -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 &quot;Free "
+"Software, Free Society&quot;."
+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 &quot;Free Software, Free"
-#~ " Society&quot;."
-#~ 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 &quot;Free "
+"Software, Free Society&quot;."
+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 ""
+