diff options
author | Christian Grothoff <christian@grothoff.org> | 2021-05-27 14:12:35 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2021-05-27 14:12:35 +0200 |
commit | cc37eb61c15f0d31775b3d3d88ae02777b35bd7a (patch) | |
tree | 0d58e37f62333435ca2a4e402f30a4b2d57b6ee5 | |
parent | 851416c94731e4ff77c0f5e214a5a2b71e7071fe (diff) | |
download | auditor-cc37eb61c15f0d31775b3d3d88ae02777b35bd7a.tar.gz auditor-cc37eb61c15f0d31775b3d3d88ae02777b35bd7a.tar.bz2 auditor-cc37eb61c15f0d31775b3d3d88ae02777b35bd7a.zip |
update build scripts
-rw-r--r-- | .gitmodules | 3 | ||||
-rw-r--r-- | Makefile | 49 | ||||
-rw-r--r-- | build-system/configure.py | 34 | ||||
m--------- | inc | 0 | ||||
-rw-r--r-- | locale/en/LC_MESSAGES/messages.po | 44 | ||||
-rw-r--r-- | locale/messages.pot | 50 | ||||
-rwxr-xr-x | make_site.py | 57 | ||||
-rw-r--r-- | template/index.html.j2 | 218 | ||||
m--------- | web-common | 0 |
9 files changed, 256 insertions, 199 deletions
diff --git a/.gitmodules b/.gitmodules index 86ee36b..7b488d8 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ -[submodule "web-common"] - path = web-common - url = git://git.taler.net/web-common [submodule "build-system/taler-build-scripts"] path = build-system/taler-build-scripts url = https://git.taler.net/build-common.git @@ -2,52 +2,19 @@ include build-system/config.mk -# List of all supported languages, add new languages here! -LANGUAGES="en" - # All: build HTML pages in all languages and compile the -# TypeScript logic in web-common. .PHONY: all -all: locale template - (cd web-common && $(tsc)) - (for lang in `echo $(LANGUAGES)` ; do \ - $(cp) -R web-common/*.css web-common/*.ico rendered/static/ ; \ - done) - -# Extract translateable strings from jinja2 templates. -locale/messages.pot: template/*.j2 - $(python) inc/mybabel.py $(pybabel) extract -F locale/babel.map -o locale/messages.pot . - -# Update translation (.po) files with new strings. -.PHONY: locale-update -locale-update: locale/messages.pot - (for lang in `echo $(LANGUAGES)`; do \ - $(msgmerge) -q -U -m --previous locale/$$lang/LC_MESSAGES/messages.po locale/messages.pot ; \ - done) - - if $(grep) -nA1 '#-#-#-#-#' locale/*/LC_MESSAGES/messages.po; then $(echo) -e "\nERROR: Conflicts encountered in PO files.\n"; exit 1; fi - -# Compile translation files for use. -.PHONY: locale-compile -locale-compile: - (for lang in `echo $(LANGUAGES)`; do \ - $(pybabel) -q compile -d locale -l $$lang --use-fuzzy ; \ - done) - -# Process everything related to gettext translations. -.PHONY: locale -locale: locale-update locale-compile - -# Run the jinja2 templating engine to expand templates to HTML -# incorporating translations. -template: locale-compile - $(python) ./make_site.py +all: + ./inc/update-messages + env "BASEURL=$(opt_baseurl)" ./inc/build-site .PHONY: run run: all $(browser) http://0.0.0.0:8000/rendered/en & $(python) -m http.server +variant = $(opt_variant) + ifndef variant $(error variant is not set) endif @@ -56,15 +23,13 @@ endif install: all $(mkdir) -p $(prefix)/$(variant) $(cp) -r rendered/* $(prefix)/$(variant)/ - -.PHONY: uninstall -uninstall: - $(rm) -rf $(prefix)/$(variant) + $(cp) -r rendered/.well-known/ $(prefix)/$(variant)/ .PHONY: clean clean: $(rm) -rf __pycache__ *.pyc *~ \.*~ \#*\# $(rm) -rf rendered/ +.PHONY: submodules/update submodules/update: $(git) submodule update --recursive --remote diff --git a/build-system/configure.py b/build-system/configure.py index 6b13143..e39ce59 100644 --- a/build-system/configure.py +++ b/build-system/configure.py @@ -4,20 +4,24 @@ from talerbuildconfig import * b = BuildConfig() b.enable_prefix() -b.enable_variant() b.enable_configmk() -b.add_tool(PythonTool()) -b.add_tool(PyBabelTool()) -b.add_tool(PosixTool("cp")) -b.add_tool(PosixTool("echo")) -b.add_tool(PosixTool("env")) -b.add_tool(PosixTool("printf")) -b.add_tool(PosixTool("grep")) -b.add_tool(PosixTool("mkdir")) -b.add_tool(PosixTool("rm")) -b.add_tool(PosixTool("sh")) -b.add_tool(PosixTool("msgmerge")) -b.add_tool(PosixTool("tsc")) -b.add_tool(PosixTool("git")) -b.add_tool(BrowserTool()) + +# Base URL override for the site. The default (empty string) +# will fall back to the base URL defined www.yml. +b.use(Option("baseurl", "Override base URL that the site will run on", default="", required=False)) + +b.use(PythonTool()) +b.use(PyBabelTool()) +b.use(PosixTool("cp")) +b.use(PosixTool("echo")) +b.use(PosixTool("env")) +b.use(PosixTool("printf")) +b.use(PosixTool("grep")) +b.use(PosixTool("mkdir")) +b.use(PosixTool("rm")) +b.use(PosixTool("sh")) +b.use(PosixTool("msgmerge")) +b.use(PosixTool("tsc")) +b.use(PosixTool("git")) +b.use(BrowserTool()) b.run() diff --git a/inc b/inc -Subproject 76bbc33ea45cd415081f34ae93109fe5c9718fe +Subproject 2b72c7f57d318271856f992eb2e58c133ae5179 diff --git a/locale/en/LC_MESSAGES/messages.po b/locale/en/LC_MESSAGES/messages.po index 6e19b73..a7a6d62 100644 --- a/locale/en/LC_MESSAGES/messages.po +++ b/locale/en/LC_MESSAGES/messages.po @@ -2,7 +2,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-10-24 21:38+0200\n" +"POT-Creation-Date: 2021-05-27 14:03+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: en <LL@li.org>\n" @@ -13,60 +13,80 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n!=1)\n" "Generated-By: Babel 2.3.4\n" -#: template/index.html.j2:5 template/index.html.j2:52 +#: template/index.html.j2:5 template/index.html.j2:66 msgid "{curr} Auditor" msgstr "" -#: template/index.html.j2:54 +#: template/index.html.j2:68 msgid "This is an auditor for the {curr} currency." msgstr "" -#: template/index.html.j2:59 +#: template/index.html.j2:139 msgid "This is the Web site of the auditor for the {curr} currency." msgstr "" -#: template/index.html.j2:60 +#: template/index.html.j2:140 msgid "" "In the GNU Taler system, an auditor is responsible for verifying that an " "exchange operates correctly. If you trust us to do a good job auditing, " "please click here:" msgstr "" -#: template/index.html.j2:67 +#: template/index.html.j2:147 msgid "Add Auditor" msgstr "" -#: template/index.html.j2:70 +#: template/index.html.j2:150 msgid "" "This will tell your wallet that you are willing to trust exchanges that we " "audit to handle the {curr} currency properly." msgstr "" -#: template/index.html.j2:73 +#: template/index.html.j2:153 msgid "" "If you do not have a Taler wallet installed, please first install the wallet " "from <a href=\"https://wallet.taler.net/\">wallet installation page</a>. It " "only takes one click." msgstr "" -#: template/index.html.j2:84 +#: template/index.html.j2:172 +msgid "Contact" +msgstr "" + +#: template/index.html.j2:177 +msgid "Docs" +msgstr "" + +#: template/index.html.j2:178 +msgid "FAQ" +msgstr "" + +#: template/index.html.j2:183 +msgid "Bibliography" +msgstr "" + +#: template/index.html.j2:190 msgid "" "GNU Taler is developed as part of the <a href='https://www.gnu.org/'>GNU " "project</a> for the GNU operating system." msgstr "" -#: template/index.html.j2:86 +#: template/index.html.j2:192 msgid "and" msgstr "" -#: template/index.html.j2:89 +#: template/index.html.j2:195 msgid "" "We are grateful for support and free hosting of this site by <a " "href='https://www.bfh.ch/'>BFH</a>." msgstr "" -#: template/index.html.j2:91 +#: template/index.html.j2:197 msgid "" "This page was created using <a href='https://www.gnu.org/'>Free Software</a> " "only." msgstr "" + +#: template/index.html.j2:199 +msgid "JavaScript license information" +msgstr "" diff --git a/locale/messages.pot b/locale/messages.pot index b2802be..a6475f2 100644 --- a/locale/messages.pot +++ b/locale/messages.pot @@ -1,77 +1,97 @@ # Translations template for PROJECT. -# Copyright (C) 2020 ORGANIZATION +# Copyright (C) 2021 ORGANIZATION # This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2020. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2021. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2020-10-24 21:38+0200\n" +"POT-Creation-Date: 2021-05-27 14:03+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" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 2.7.0\n" +"Generated-By: Babel 2.6.0\n" -#: template/index.html.j2:5 template/index.html.j2:52 +#: template/index.html.j2:5 template/index.html.j2:66 msgid "{curr} Auditor" msgstr "" -#: template/index.html.j2:54 +#: template/index.html.j2:68 msgid "This is an auditor for the {curr} currency." msgstr "" -#: template/index.html.j2:59 +#: template/index.html.j2:139 msgid "This is the Web site of the auditor for the {curr} currency." msgstr "" -#: template/index.html.j2:60 +#: template/index.html.j2:140 msgid "" "In the GNU Taler system, an auditor is responsible for verifying that an " "exchange operates correctly. If you trust us to do a good job auditing, " "please click here:" msgstr "" -#: template/index.html.j2:67 +#: template/index.html.j2:147 msgid "Add Auditor" msgstr "" -#: template/index.html.j2:70 +#: template/index.html.j2:150 msgid "" "This will tell your wallet that you are willing to trust exchanges that " "we audit to handle the {curr} currency properly." msgstr "" -#: template/index.html.j2:73 +#: template/index.html.j2:153 msgid "" "If you do not have a Taler wallet installed, please first install the " "wallet from <a href=\"https://wallet.taler.net/\">wallet installation " "page</a>. It only takes one click." msgstr "" -#: template/index.html.j2:84 +#: template/index.html.j2:172 +msgid "Contact" +msgstr "" + +#: template/index.html.j2:177 +msgid "Docs" +msgstr "" + +#: template/index.html.j2:178 +msgid "FAQ" +msgstr "" + +#: template/index.html.j2:183 +msgid "Bibliography" +msgstr "" + +#: template/index.html.j2:190 msgid "" "GNU Taler is developed as part of the <a href='https://www.gnu.org/'>GNU " "project</a> for the GNU operating system." msgstr "" -#: template/index.html.j2:86 +#: template/index.html.j2:192 msgid "and" msgstr "" -#: template/index.html.j2:89 +#: template/index.html.j2:195 msgid "" "We are grateful for support and free hosting of this site by <a " "href='https://www.bfh.ch/'>BFH</a>." msgstr "" -#: template/index.html.j2:91 +#: template/index.html.j2:197 msgid "" "This page was created using <a href='https://www.gnu.org/'>Free " "Software</a> only." msgstr "" +#: template/index.html.j2:199 +msgid "JavaScript license information" +msgstr "" + diff --git a/make_site.py b/make_site.py deleted file mode 100755 index baeed0f..0000000 --- a/make_site.py +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env python3 -# coding: utf-8 -# -# This file is in the public domain. -# -# This script runs the jinja2 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 jinja2 -import sys -from pathlib import Path, PurePath - -# Make sure the current directory is in the search path when trying -# to import i18nfix. -sys.path.insert(0, ".") -sys.path.insert(0, "inc/") - -from inc.site import gen_site -from inc.fileproc import copy_files - -env = jinja2.Environment(loader=jinja2.FileSystemLoader(str(PurePath(__file__).parent)), - extensions=["jinja2.ext.i18n"], - lstrip_blocks=True, - trim_blocks=True, - undefined=jinja2.StrictUndefined, - autoescape=False) - -if len(sys.argv) >= 2 and sys.argv[1] == "-vv": - DEBUG=1 -elif len(sys.argv) >= 2 and sys.argv[1] == "-vvv": - DEBUG=2 -elif len(sys.argv) >= 2 and sys.argv[1] == "-vvvv": - DEBUG=3 -else: - DEBUG=0 - -def main(): - x = gen_site(DEBUG) - conf = x.load_config("www.yml") - if DEBUG: - print("generating html from jinja2 templates...") - x.run("template", conf, env) - if DEBUG >= 2: - print(Path.cwd()) - _ = Path("rendered") - for child in _.iterdir(): - print(child) - if DEBUG >= 2: - print(Path.cwd()) - if DEBUG: - print("copying directories...") - -if __name__ == "__main__": - main() diff --git a/template/index.html.j2 b/template/index.html.j2 index fbd1218..f6720bb 100644 --- a/template/index.html.j2 +++ b/template/index.html.j2 @@ -1,61 +1,141 @@ <!DOCTYPE html> -<html lang="en" data-taler-nojs="true"> -<head profile="http://www.w3.org/2005/10/profile"> - <meta charset="utf-8"/> - <title>{{ _("{curr} Auditor").format(curr=conf['currency']) }}</title> - <link rel="stylesheet" type="text/css" href="{{ url('static/pure.css') }}" /> - <link rel="stylesheet" type="text/css" href="{{ url('static/demo.css') }}" /> - <link rel="stylesheet" type="text/css" href="{{ url('static/taler-fallback.css') }}" id="taler-presence-stylesheet" /> - <link rel="icon" type="image/png" href="{{ url('static/favicon-taler.ico') }}" /> +<html lang="{{ lang }}"> + <head> + <meta charset="utf-8"/> + <title>{{ _("{curr} Auditor").format(curr=conf['currency']) }}</title> + <script> + /* + @licstart The following is the entire license notice for the + JavaScript code in this page. + Copyright (C) 2014, 2015, 2016, 2020, 2021 Taler Systems SA - <style type="text/css"> - a[disabled="true"] { - pointer-events: none; - color: grey; - } + The JavaScript code in this page is free software: you can + redistribute it and/or modify it under the terms of the GNU + General Public License (GNU GPL) as published by the Free Software + Foundation, either version 3 of the License, or (at your option) + any later version. The code is distributed WITHOUT ANY WARRANTY; + without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. - .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> + As additional permission under GNU GPL version 3 section 7, you + may distribute non-source (e.g., minimized or compacted) forms of + that code without the copy of the GNU GPL normally required by + section 4, provided you include this license notice and a URL + through which recipients can access the Corresponding Source. - <script> - function addAuditor() { - taler.addAuditor({ - url: "{{ conf['auditor_url'] }}", - currency: "{{ conf['currency'] }}", - auditorPub: "{{ conf['auditor_pub'] }}", - expirationStamp: (new Date(2027, 1)).getTime(), - }); - } - </script> -</head> + @licend The above is the entire license notice + for the JavaScript code in this page. + */ + </script> + <link rel="alternate" hreflang="en" href="{{ self_localized('en') }}" /> + <link rel="alternate" hreflang="ar" href="{{ self_localized('ar') }}" /> + <link rel="alternate" hreflang="zh-hant" href="{{ self_localized('zh_Hant') }}" /> + <link rel="alternate" hreflang="cs" href="{{ self_localized('cs') }}" /> + <link rel="alternate" hreflang="fr" href="{{ self_localized('fr') }}" /> + <link rel="alternate" hreflang="de" href="{{ self_localized('de') }}" /> + <link rel="alternate" hreflang="hi" href="{{ self_localized('hi') }}" /> + <link rel="alternate" hreflang="hu" href="{{ self_localized('hu') }}" /> + <link rel="alternate" hreflang="it" href="{{ self_localized('it') }}" /> + <link rel="alternate" hreflang="ja" href="{{ self_localized('ja') }}" /> + <link rel="alternate" hreflang="ko" href="{{ self_localized('ko') }}" /> + <link rel="alternate" hreflang="pt" href="{{ self_localized('pt') }}" /> + <link rel="alternate" hreflang="pt-br" href="{{ self_localized('pt_BR') }}" /> + <link rel="alternate" hreflang="ru" href="{{ self_localized('ru') }}" /> + <link rel="alternate" hreflang="es" href="{{ self_localized('es') }}" /> + <link rel="alternate" hreflang="sv" href="{{ self_localized('sv') }}" /> + <link rel="alternate" hreflang="tr" href="{{ self_localized('tr') }}" /> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <!-- Bootstrap core CSS --> + <link href="{{ url_dist('bootstrap@4.6.0/bootstrap.min.css') }}" rel="stylesheet"> + <!-- Custom styles for this template --> + <link href="{{ url_static('styles.css') }}" rel="stylesheet"> + <script src="{{ url_dist('bootstrap@4.6.0/jquery-3.5.1.slim.min.js') }}"></script> + <script src="{{ url_dist('bootstrap@4.6.0/bootstrap.bundle.min.js') }}"></script> + <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> + <!--[if lt IE 9]> + <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> + <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> + <![endif]--> + <link rel="icon" type="image/png" href="{{ url('static/favicon-taler.ico') }}" /> + </head> <body> - <div class="demobar"> - <h1><span class="it">{{ _("{curr} Auditor").format(curr=conf['currency']) }}</span></h1> - <p> - {{ _("This is an auditor for the {curr} currency.").format(curr=conf['currency']) }} - </p> - </div> + <header class="demobar" style="display: flex; flex-direction: row; justify-content: space-between;"> + <div style="max-width: 50em; margin-left: 2em;"> + <h1><span class="it">{{ _("{curr} Auditor").format(curr=conf['currency']) }}</span></h1> + <p> + {{ _("This is an auditor for the {curr} currency.").format(curr=conf['currency']) }} + </p> + </div> + </header> + + <nav class="demolist"> + <div class="nav-item dropdown"> + <button class="btn btn-dark dropdown-toggle" + type="button" + id="dropdownMenu1" + data-toggle="dropdown" + aria-haspopup="true" + aria-expanded="true"> + <img src="{{ url_static('images/languageicon.svg') }}" + height="35" + alt="[{{lang}}]" /> + {{ lang_full }} [{{ lang }}] + </button> + <ul class="dropdown-menu" aria-labelledby="dropdownMenu1"> + {% if lang != 'en' %} + <li><a class="dropdown-item" href="{{ self_localized('en') }}">English [en]</a></li> + {% endif %} + {% if lang != 'ar' %} + <li><a class="dropdown-item" href="{{ self_localized('ar') }}">Arabic [ar]</a></li> + {% endif %} +<!-- {% if lang != 'zh_Hant' %} + <li><a class="dropdown-item" href="{{ self_localized('zh_Hant') }}">Chinese [zh]</a></li> + {% endif %} --> + {% if lang != 'fr' %} + <li><a class="dropdown-item" href="{{ self_localized('fr') }}">Français [fr]</a></li> + {% endif %} + {% if lang != 'de' %} + <li><a class="dropdown-item" href="{{ self_localized('de') }}">Deutsch [de]</a></li> + {% endif %} +<!-- {% if lang != 'hi' %} + <li><a class="dropdown-item" href="{{ self_localized('hi') }}">Hindi [hi]</a></li> + {% endif %} --> + {% if lang != 'it' %} + <li><a class="dropdown-item" href="{{ self_localized('it') }}">Italiano [it]</a></li> + {% endif %} + {% if lang != 'ja' %} + <li><a class="dropdown-item" href="{{ self_localized('ja') }}">Japanese [ja]</a></li> + {% endif %} + {% if lang != 'ko' %} + <li><a class="dropdown-item" href="{{ self_localized('ko') }}">Korean [ko]</a></li> + {% endif %} +<!-- {% if lang != 'pt' %} + <li><a class="dropdown-item" href="{{ self_localized('pt') }}">Português [pt]</a></li> + {% endif %} --> +<!-- {% if lang != 'pt_BR' %} + <li><a class="dropdown-item" href="{{ self_localized('pt_BR') }}">Português (Brazil) [pt]</a></li> + {% endif %} --> + {% if lang != 'ru' %} + <li><a class="dropdown-item" href="{{ self_localized('ru') }}">Ру́сский язы́к [ru]</a></li> + {% endif %} + {% if lang != 'es' %} + <li><a class="dropdown-item" href="{{ self_localized('es') }}">Español [es]</a></li> + {% endif %} + {% if lang != 'sv' %} + <li><a class="dropdown-item" href="{{ self_localized('sv') }}">Svenska [sv]</a></li> + {% endif %} + {% if lang != 'tr' %} + <li><a class="dropdown-item" href="{{ self_localized('tr') }}">Türk [tr]</a></li> + {% endif %} + + </ul> + </div> + </nav> + <section id="main" class="content"> - <p style="color: black;"> + <p> {{ _("This is the Web site of the auditor for the {curr} currency.").format(curr=conf['currency']) }} {% trans %} In the GNU Taler system, an auditor is responsible for verifying @@ -77,20 +157,48 @@ {% endtrans %} </p> </div> - </section> - <footer id="footer"> - <div class="demobar"> +</section> + +<footer id="footer"> + <div class="container"> + <div class="row justify-content-center"> + <div class="col-12"> + <hr style="border-top: 1px solid #00000069; padding-bottom: 1em" /> + </div> + </div> + <div class="row"> + <div class="col-12 col-sm-4"> + <ul class="footer-list"> + <li><a href="{{ url_localized('contact.html') }}">{{ _("Contact") }}</a></li> + </ul> + </div> + <div class="col-12 col-sm-4"> + <ul class="footer-list"> + <li><a href="{{ url_localized('docs.html') }}">{{ _("Docs") }}</a> / + <a href="{{ url_localized('faq.html') }}">{{ _("FAQ") }}</a></li> + </ul> + </div> + <div class="col-12 col-sm-4"> + <ul class="footer-list"> + <li><a href="{{ url_localized('bibliography.html') }}">{{ _("Bibliography") }}</a></li> + </ul> + </div> + </div> + </div> + <div class="text-center mt-5"> <p> {{ _("GNU Taler is developed as part of the <a href='https://www.gnu.org/'>GNU project</a> for the GNU operating system.") }} <br> © <a href="https://gnunet.org/en/ev.html">GNUnet e.V.</a> {{_("and") }} - Taler Systems SA 2015-2020 + Taler Systems SA 2015-2021 <br> {{ _("We are grateful for support and free hosting of this site by <a href='https://www.bfh.ch/'>BFH</a>.") }} <br> {{ _("This page was created using <a href='https://www.gnu.org/'>Free Software</a> only.") }} + <br> + <a href="/javascript.html" data-jslicense="1">{{ _("JavaScript license information")}} </a> </p> </div> - </footer> +</footer> </body> </html> diff --git a/web-common b/web-common deleted file mode 160000 -Subproject 2457613ecc8b8971bd47119b1a02a2f290bb483 |