summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-03-15 12:59:41 +0100
committerFlorian Dold <florian.dold@gmail.com>2017-03-15 12:59:41 +0100
commit520c115b3a787b6509b003f28dd45d3b1894fad9 (patch)
treea51ea0cbc0b522725c5f67b8ca33e242a6b86c6e
parent63aaa9a290bdc27752d2f07c24dfcc7c67b2e686 (diff)
downloadlanding-520c115b3a787b6509b003f28dd45d3b1894fad9.tar.gz
landing-520c115b3a787b6509b003f28dd45d3b1894fad9.tar.bz2
landing-520c115b3a787b6509b003f28dd45d3b1894fad9.zip
templating and i18n
-rw-r--r--common/base.j2122
-rw-r--r--index.html.j2 (renamed from index.html)16
-rwxr-xr-xtemplate.py80
3 files changed, 210 insertions, 8 deletions
diff --git a/common/base.j2 b/common/base.j2
new file mode 100644
index 0000000..9a54048
--- /dev/null
+++ b/common/base.j2
@@ -0,0 +1,122 @@
+<!DOCTYPE html>
+<html lang="en" data-taler-nojs="true">
+<head profile="http://www.w3.org/2005/10/profile">
+ <meta charset="utf-8"/>
+ <title>Taler Demonstration Framework</title>
+ <link rel="stylesheet" type="text/css" href="static/web-common/style.css" />
+ <link rel="stylesheet" type="text/css" href="static/web-common/taler-fallback.css" id="taler-presence-stylesheet" />
+ <link rel="icon" type="image/png" href="static/web-common/favicon-taler.ico" />
+
+ <style type="text/css">
+ a[disabled="true"] {
+ pointer-events: none;
+ color: grey;
+ }
+
+ .bluebox {
+ background-color: #C2C6FF;
+ border: solid;
+ border-radius: 5px;
+ padding: 0.5em;
+ }
+ .greenbox {
+ background-color: #5EFF64;
+ border: solid;
+ border-radius: 5px;
+ padding: 0.5em;
+ }
+ .graybox {
+ background-color: #DDDDDD;
+ border: solid;
+ border-radius: 5px;
+ padding: 0.5em;
+ }
+ </style>
+</head>
+
+<body>
+
+ <header>
+ <a href="." id="logo">
+ <img src="static/web-common/logo-2015-medium.png" width="100" height="100" alt="Logo">
+ </a>
+ <!--#include virtual="static/web-common/dropdown-navbar.html"-->
+ <h1 class="nav">Taler Demo</h1>
+ </header>
+
+ <aside class="sidebar" id="left">
+ </aside>
+
+ <section id="main">
+ <article>
+ <h2>Step 1: Install the Taler wallet</h2>
+ Install the wallet from the <a href="https://taler.net/wallet-installation.html">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">bank</a>.
+
+ In this demo you're 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 can't check if you were able to complete this step, since websites
+ can't 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</sup></h2>
+ We have two demo merchants where you can spend your coins:
+ <ul>
+ <li>
+ The <a href="shop">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="donations">project donation Web site</a>, where
+ you can show respect to a software project of your choice
+ by giving them KUDOS.
+ </li>
+ </ul>
+ </article>
+ <article>
+ <h2>Step 4: Back office</sup></h2>
+ Finally, you can take the perspective of the merchant, who just
+ sold articles using taler.
+ <ul>
+ <li>
+ The <a href="block/track">back office Web site</a>
+ allows you to track the transactions of the merchant.
+ </li>
+ <li>
+ The <a href="bank/public-accounts">public accounts page</a> at the bank
+ allow you to observe transactions of certain bank accounts, including
+ those of the shops, from the perspective of the bank.
+ </li>
+ </ul>
+ </article>
+ <article>
+ <h2>Step 5: Reach out to us</sup></h2>
+ Let us know what you think by <a href="mailto:demo-feedback@taler.net">contacting us</a>.
+ </article>
+ </section>
+ <div class="copyright">
+ <p>Copyright &copy; 2014&mdash;2016 INRIA</p>
+ <a href="/javascript" data-jslicense="1" class="jslicenseinfo">JavaScript license information</a>
+ </div>
+</body>
+</html>
diff --git a/index.html b/index.html.j2
index 2d4470d..60a1da3 100644
--- a/index.html
+++ b/index.html.j2
@@ -40,10 +40,10 @@
<h1><span class="it"><a href="#">Introduction</a></span></h1>
<p>This is the entry point of the Taler demo. Follow the instructions and try Taler with the other pages linked below!</p>
<ul>
- <li><a href="{{ env('TALER_ENV_URL_INTRO', '#') }}">Introduction</a></li>
- <li><a href="{{ env('TALER_ENV_URL_BANK', '#') }}">Bank</a></li>
- <li><a href="{{ env('TALER_ENV_URL_MERCHANT_BLOG', '#') }}">Blog Shop</a></li>
- <li><a href="{{ env('TALER_ENV_URL_MERCHANT_DONATIONS', '#') }}">Donations</a></li>
+ <li><a href="{{ intro_url }}">Introduction</a></li>
+ <li><a href="{{ bank_url }}">Bank</a></li>
+ <li><a href="{{ merchant_blog_url }}">Blog Shop</a></li>
+ <li><a href="{{ merchant_donations_url }}">Donations</a></li>
</ul>
<p>You can learn more about Taler on our main <a href="https://taler.net">website</a>.</p>
</div>
@@ -65,7 +65,7 @@
<h2>Step 2: Withdraw coins</h2>
<p>
- Now you can withdraw coins into your wallet by going to our <a href="bank">bank</a>.
+ Now you can withdraw coins into your wallet by going to our <a href="{{ bank_url }}">bank</a>.
In this demo you're paying with KUDOS, an imaginary currency. When you
create an account at our bank, you'll get 100 KUDOS for free.
@@ -82,12 +82,12 @@
We have two demo merchants where you can spend your coins:
<ul>
<li>
- The <a href="shop">essay store</a>, where you can pay KUDOS for
+ 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="donations">project donation Web site</a>, where
+ The <a href="{{ merchant_donations_url }}">project donation Web site</a>, where
you can show respect to a software project of your choice
by giving them KUDOS.
</li>
@@ -116,7 +116,7 @@
<hr />
<div class="copyright">
<p>Copyright &copy; 2014&mdash;2017 INRIA</p>
- <a href="/javascript" data-jslicense="1" class="jslicenseinfo">JavaScript license information</a>
+ <a href="{{ url('javascript.html') }}" data-jslicense="1" class="jslicenseinfo">JavaScript license information</a>
</div>
</section>
</body>
diff --git a/template.py b/template.py
new file mode 100755
index 0000000..0bb4092
--- /dev/null
+++ b/template.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+# This file is in the public domain.
+#
+# This script runs the jinga2 templating engine on an input template-file
+# using the specified locale for gettext translations, and outputs
+# the resulting (HTML) ouptut-file.
+#
+# Note that the gettext files need to be prepared first. This script
+# is thus to be invoked via the Makefile.
+import os
+import os.path
+import sys
+import re
+import gettext
+import jinja2
+import glob
+import codecs
+import os
+import os.path
+
+env = jinja2.Environment(loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
+ extensions=["jinja2.ext.i18n"],
+ lstrip_blocks=True,
+ trim_blocks=True,
+
+ undefined=jinja2.StrictUndefined,
+ autoescape=False)
+
+default_ctx = {}
+default_ctx["merchant_blog_url"] = os.environ.get("TALER_ENV_URL_MERCHANT_BLOG", "#")
+default_ctx["merchant_donations_url"] = os.environ.get("TALER_ENV_URL_MERCHANT_DONATIONS", "#")
+default_ctx["intro_url"] = os.environ.get("TALER_ENV_URL_INTRO", "#")
+default_ctx["bank_url"] = os.environ.get("TALER_ENV_URL_BANK", "#")
+default_ctx["auditor_url"] = os.environ.get("TALER_ENV_URL_AUDITOR", "#")
+
+
+for in_file in glob.glob("*.j2"):
+ name, ext = re.match(r"(.*)\.([^.]+)$", in_file.rstrip(".j2")).groups()
+ tmpl = env.get_template(in_file)
+
+ def self_localized(other_locale):
+ """
+ Return URL for the current page in another locale.
+ """
+ return "../" + other_locale + "/" + in_file.rstrip(".j2")
+
+ def url_localized(filename):
+ return "../" + locale + "/" + filename
+
+ def url(x):
+ # TODO: look at the app root environment variable
+ # TODO: check if file exists
+ return "../" + x
+
+ for l in ("en", "de", "it", "es"):
+ locale = os.path.basename(l)
+
+ if os.path.isdir(os.path.join("./locale/", locale)):
+ tr = gettext.translation("messages",
+ localedir="locale",
+ languages=[locale])
+
+ env.install_gettext_translations(tr, newstyle=True)
+ else:
+ print("warning: locale {} not found".format(locale))
+
+ ctx = dict(
+ lang=locale,
+ url=url,
+ self_localized=self_localized,
+ url_localized=url_localized,
+ filename=name + "." + ext)
+ ctx.update(default_ctx)
+
+ content = tmpl.render(**ctx)
+ out_name = "./" + locale + "/" + in_file.rstrip(".j2")
+ os.makedirs("./" + locale, exist_ok=True)
+
+ with codecs.open(out_name, "w", "utf-8") as f:
+ f.write(content)