diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-03-15 12:59:41 +0100 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-03-15 12:59:41 +0100 |
commit | 520c115b3a787b6509b003f28dd45d3b1894fad9 (patch) | |
tree | a51ea0cbc0b522725c5f67b8ca33e242a6b86c6e | |
parent | 63aaa9a290bdc27752d2f07c24dfcc7c67b2e686 (diff) | |
download | landing-520c115b3a787b6509b003f28dd45d3b1894fad9.tar.gz landing-520c115b3a787b6509b003f28dd45d3b1894fad9.tar.bz2 landing-520c115b3a787b6509b003f28dd45d3b1894fad9.zip |
templating and i18n
-rw-r--r-- | common/base.j2 | 122 | ||||
-rw-r--r-- | index.html.j2 (renamed from index.html) | 16 | ||||
-rwxr-xr-x | template.py | 80 |
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 © 2014—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 © 2014—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) |