You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by wa...@apache.org on 2020/10/22 17:42:43 UTC

[openoffice-org] branch main updated: Templates files to be translated

This is an automated email from the ASF dual-hosted git repository.

wave pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/openoffice-org.git


The following commit(s) were added to refs/heads/main by this push:
     new 1924140  Templates files to be translated
1924140 is described below

commit 1924140a4b132d4f64bebd4347324524d0ad0544
Author: Dave Fisher <da...@davefisher.tech>
AuthorDate: Thu Oct 22 10:42:08 2020 -0700

    Templates files to be translated
---
 templates/FRAMEWORKS.txt        |  30 ++++
 templates/README.txt            | 211 ++++++++++++++++++++++++++
 templates/brand.html            |  76 ++++++++++
 templates/doctype.html          |   1 +
 templates/footer.html           |  26 ++++
 templates/html_page.html        |   3 +
 templates/navigator.html        |   1 +
 templates/single_narrative.html |   1 +
 templates/skeleton.html         |  29 ++++
 templates/ssi.json              | 325 ++++++++++++++++++++++++++++++++++++++++
 10 files changed, 703 insertions(+)

diff --git a/templates/FRAMEWORKS.txt b/templates/FRAMEWORKS.txt
new file mode 100644
index 0000000..a0d89da
--- /dev/null
+++ b/templates/FRAMEWORKS.txt
@@ -0,0 +1,30 @@
+Observations about the suitability and challenges using various frameworks.
+
+(1) Pelican
+- Suitable for our Markdown, but we will need to rename all files - mdtext -> md
+- Has it's own methods for HTML which are not really compatible with our current methods.
+  We would need to write our own plugin and rename all of the htm and html files to a special prefix like aoo.
+
+Seems like a bad fit. Thumbs down.
+
+(2) JBake
+- Suitable for our Markdown, but will need to rename all files - mdtext -> md
+- Html and Htm will need to have a minimal piece of metadata inserted in order to call out the particular template.
+  See https://jbake.org/docs/2.6.5/#content_files and https://jbake.org/docs/2.6.5/#custom_templates
+
+- Assets and Content is separated so that all of our as is files should be in a sepearate tree.
+- We can obsolete directories without deleting the content via https://jbake.org/docs/2.6.5/#ignoring_files_and_directories
+
+This could be a good fit. Thumbs up.
+
+(3) Hugo
+- Go based.
+- Looks like a lot of rewrite.
+
+No opinion, but it looks like a steep learning curve
+
+(4) Jekyll
+- Ruby based
+- Suitable for our Markdown, but will need to rename all files - mdtext -> md
+- Unclear how we would handle the html parsing.
+
diff --git a/templates/README.txt b/templates/README.txt
new file mode 100644
index 0000000..b265d4a
--- /dev/null
+++ b/templates/README.txt
@@ -0,0 +1,211 @@
+Some thoughts and documentation.
+
+(1) SSI within the templates and produced html remains a good idea.
+
+(2) SSI directory structure could be replaced could be replaced by a json file.
+
+- footer is always the same.
+  Path to the footer file to include. Always the same.
+- doctype is always the same.
+  Path to the doctype file to use. Ought to eliminate this hack.
+- home is always the same.
+  The name to use for the first breadcrumb which will take you to "/".
+- brand for the top of the page.
+  Path to the brand file to include. Varies according the language site.
+- topnav for the upper navigation bar.
+  Path to the top nav menu to include. Varies according the language site.
+- leftnav is optional and special.
+  Path to a left nav menu to include. Varies according the language site or "project" site.
+- rightnav is optional and only used once for l10n where there is also a leftnav.
+  Path to a right nav menu to include. Varies according the language site or "project" site.
+
+(3) ssi.json is a directory of directories.
+
+Note this actitivty should also build the breadrcumb list. See (5)
+
+For each template key look up the subpath and then look for the ssi element name.
+If missing then go up a level on the subpath.
+
+e.g. if you are looking in "/api/some/deep/path/"
+then you look into "/api/some/deep/", "/api/some/", "/api/", and "/"
+
+ssi[path][key]
+
+For api:
+    "/api/": {
+	"leftnav":"/api/leftnav.html"
+    }
+    "/": {
+	"doctype":"/doctype.html",
+	"footer":"/footer.html",
+	"brand":"/brand.html",
+	"topnav":"/topnav.html",
+	"home":"home"
+    }
+
+
+For de:
+    "/de/product/": {
+	"leftnav":"/de/product/leftnav.html"
+    }
+    "/de/": {
+	"brand":"/de/brand.html",
+	"topnav":"/de/topnav.html"
+    }
+    "/": {
+	"doctype":"/doctype.html",
+	"footer":"/footer.html",
+	"brand":"/brand.html",
+	"topnav":"/topnav.html",
+	"home":"home"
+    }
+
+For xx:
+    "/xx/why/": {
+	"leftnav":"/xx/why/leftnav.html"
+    }
+    "/xx/product/": {
+	"leftnav":"/xx/product/leftnav.html"
+    }
+    "/xx/": {
+	"topnav":"/xx/topnav.html",
+	"brand":"/xx/brand.html"
+    }
+    "/": {
+	"doctype":"/doctype.html",
+	"footer":"/footer.html",
+	"brand":"/brand.html",
+	"topnav":"/topnav.html",
+	"home":"home"
+    }
+
+(4) List of templates:
+
+See lib/path.pm
+
+- brand.html
+  - brand.mdtext
+- footer.html
+  - footer.mdtext
+- doctype.html
+  - doctype.mdtext
+- navigator.html
+  - topnav.mdtext
+  - leftnav.mdtext
+  - rightnav.mdtext
+- html_page.html
+  - *.html
+  - *.htm
+  - extends skeleton.html
+  - replaces block content with content extracted from html
+- single_narrative.html
+  - *.mdtext thats not already covered by above.
+  - extends skeleton.html
+  
+- skeleton.html
+  - this is the page design:
+
+<!--#include virtual="{{ ssi.headers.doctype }}" -->
+<html>
+<head>
+<link href="/css/ooo.css" rel="stylesheet" type="text/css">
+{% if head %}{{ head|safe }}{% else %}
+<title>{% block title %}{{ headers.title }}{% endblock %}</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+{% if headers.css %}<link href="{{ headers.css }}" rel="stylesheet" type="text/css">{% endif %}
+{% endif %}
+<!--#include virtual="/scripts/google-analytics.js" --> 
+<!--#include virtual="/scripts/entourage.js" -->
+</head>
+<body{% if bodytag %} {{ bodytag|safe }}{% endif %}>
+<!--#include virtual="{{ ssi.headers.brand }}" -->
+  <div id="topbara">
+    {% if ssi.headers.topnav %}<!--#include virtual="{{ ssi.headers.topnav }}" -->{% endif %}
+    <div id="breadcrumbsa">{% block breaddcrumbs %}{{ breadcrumbs|safe }}{% endblock %}</div>
+  </div>
+  <div id="clear"></div>
+  {% if ssi.headers.leftnav %}<!--#include virtual="{{ ssi.headers.leftnav }}" -->{% endif %}
+  {% if ssi.headers.rightnav %}<!--#include virtual="{{ ssi.headers.rightnav }}" -->{% endif %}
+  <div id="content">
+    {% block legacy %}{% if ssi.headers.legacy %}<div class="legacy">{{ ssi.headers.legacy }}</div>{% endif %}{% endblock %}
+    {% block title %}{% if headers.title %}<h1 class="title">{{ headers.title }}</h1>{% endif %}{% endblock %}
+    {% block content %}{{ content|markdown }}{% endblock %}
+  </div>
+<!--#include virtual="{{ ssi.headers.footer }}" -->
+</body>
+</html>
+
+(5) Breadcrumbs
+
+sub breadcrumbs {
+    my @path = split m!/!, shift;
+    pop @path;
+    my @rv;
+    my $relpath = "";
+    for (@path) {
+        $relpath .= "$_/";
+        $_ ||= "home";
+        push @rv, qq(<a href="$relpath">$_</a>);
+    }
+    return join "&nbsp;&raquo;&nbsp;", @rv;
+}
+
+Consider converting into an ul / li structure
+
+Combine with ssi processing.
+
+(6) HTML file rewriting.
+
+In lib/view.pm see the html_page function:
+
+The following match is done on the html source:
+
+    if ($args{content} =~ m!<head.*?>(.*?)</head>(?:.*?<body(.*?)>)?(.*?)(?:</body>|\Z)!si) {
+        @args{qw/head bodytag content/} = ($1, $2, $3);
+    }
+
+Head attributes are ignored.
+All head content is copied.
+Any body attributes are preserved.
+All of the body content is copied.
+
+If a python framework is used then suggest that re.find be used.
+
+(7) CSS
+
+/css/ooo.css - Skeleton css
+/css/exceptions.css - Original exceptions - Home page and downloads
+/css/home.css - Home page
+/css/styles.css - original css - Home page and Downloads
+
+Lots of css scattered throughout the site.
+
+Navigator inserted css which seems to be worthless.
+<style type="text/css">
+/* The following code is added by mdx_elementid.py
+   It was originally lifted from http://subversion.apache.org/style/site.css */
+/*
+ * Hide class="elementid-permalink", except when an enclosing heading
+ * has the :hover property.
+ */
+.headerlink, .elementid-permalink {
+  visibility: hidden;
+}
+h2:hover > .headerlink, h3:hover > .headerlink, h1:hover > .headerlink, h6:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, dt:hover > .elementid-permalink { visibility: visible }</style>
+
+(8) Javascript
+
+/scripts/
+api.simile-widgets.org - used for stats time plots.
+entourage.js - ssi included tracking downloads somehow.
+google-analytics.js - ssi included
+jquery-1.11.2.min.js - upgrade?
+ooo.js
+sorttable.js - other copies used
+tableDecorate.js - other copies used
+
+scripts are not optimized and not really normalized.
+ssi including entourage.js on all pages is a little silly. It only makes sense on download pages.
+
+We need to determine google-analytics vs. ASF foundation policy.
+
diff --git a/templates/brand.html b/templates/brand.html
new file mode 100644
index 0000000..5607b29
--- /dev/null
+++ b/templates/brand.html
@@ -0,0 +1,76 @@
+  <div id="{{ headers.divid }}">
+  <div id="languagesdiv">
+  	{% block language %}{% if headers.language %}{{ headers.language }}{% else %}Language{% endif %}:{% endblock %}
+  	<select id="selectlanguage" onchange="javascript:location.href=location.protocol+'//'+location.host+'/'+this.value;">
+  	<!-- Asturian --><option value="ast">Asturianu (ast)</option>
+	<!-- Catalan --><option value="ca">Català (ca)</option>
+  	<!-- Czech --><option value="cs">Čeština (cs)</option>
+  	<!-- Danish --><option value="da">Dansk (da)</option>
+  	<!-- German --><option value="de">Deutsch (de)</option>
+  	<!-- English [British]<option value="en-gb">English [British] (en-gb)</option> -->
+  	<!-- English [US] --><option value="?redirect=soft" selected="selected">English (en)</option>
+  	<!-- Spanish --><option value="es">Español (es)</option>
+  	<!-- Basque --><option value="eu">Euskara (eu)</option>
+  	<!-- French --><option value="fr">Français (fr)</option>
+  	<!-- Scottish --><option value="gd">Gàidhlig (gd)</option>
+  	<!-- Galician --><option value="gl">Galego (gl)</option>
+  	<!-- Italian --><option value="it">Italiano (it)</option>
+  	<!-- Lithuanian --><option value="lt">Lietuvių (lt)</option>
+  	<!-- Hungarian --><option value="hu">Magyar (hu)</option>
+  	<!-- Dutch --><option value="nl">Nederlands (nl)</option>
+  	<!-- Norwegian --><option value="no">Norsk (no)</option>
+	<!-- Polish --><option value="pl">Polski (pl)</option>
+  	<!-- Portuguese [Brazilian] --><option value="pt-br">Português [do Brasil] (pt-br)</option>
+  	<!-- Portuguese [European] --><option value="pt">Português [Europeu] (pt)</option>
+  	<!-- Slovak --><option value="sk">Slovenčina (sk)</option>
+  	<!-- Slovenian --><option value="sl">Slovenščina (sl)</option>
+  	<!-- Finnish --><option value="fi">Suomi (fi)</option>
+  	<!-- Swedish --><option value="sv">Svenska (sv)</option>
+  	<!-- Turkish  --><option value="tr">Türkçe (tr)</option>
+  	<!-- Vietnamese --><option value="vi">Tiếng Việt (vi)</option>
+  	<!-- Greek --><option value="el">Ελληνικά (el)</option>
+  	<!-- Bulgarian --><option value="bg">български език (bg)</option>
+  	<!-- Russian --><option value="ru">Русский (ru)</option>
+  	<!-- Serbian [Cyrillic] --><option value="sr">Cрпски [ћирилицом] (sr)</option>
+ 	<!-- Arabic <option value="ar">العربية (ar)</option> -->
+  	<!-- Hebrew --><option value="he">עברית (he)</option>
+  	<!-- Hindi --><option value="hi">हिन्दी (hi)</option>
+  	<!-- Khmer --><option value="km">ភាសាខ្មែរ (km)</option>
+  	<!-- Tamil --><option value="ta">தமிழ் (ta)</option>
+  	<!-- Thai --><option value="th">ภาษาไทย (th)</option>
+  	<!-- Chinese [simplified] --><option value="zh-cn">简体中文 (zh-cn)</option>
+  	<!-- Chinese [traditional] --><option value="zh-tw">正體中文 (zh-tw)</option>
+  	<!-- Japanese --><option value="ja">日本語 (ja)</option>
+  	<!-- Korean --><option value="ko">한국어 (ko)</option>
+	</select>
+	<script>
+	  var lang = "{{headers.selectedlang}}";
+	  var dropdown = document.getElementById('selectlanguage');
+	  var options = dropdown.options;
+	  for( var i = 0; i < dropdown.options.length; i++ ) {
+	    if( dropdown.options[ i ].value == lang ) {
+	      dropdown.selectedIndex = i;
+	      break;
+	    }
+	  }
+	</script>
+  </div>
+  <div id="bannerleft"><a title="Apache OpenOffice" href="/"><img id="ooo-logo" alt="{{ headers.name }}" src="/images/{{ headers.logo }}"/></a></div>
+    <div id="bannerright">        
+      <div id="searchdiv">
+	<form id="cse-search-box-header" action="https://www.google.com/search" method="get">
+	  <div>
+	    <input type="hidden" name="domains" value="{{ headers.domain }}"/>
+	    <input type="hidden" name="sitesearch" value="{{ headers.domain }}"/>
+	  </div>
+	  <div class="topsrchbox">
+	    <input name="resultsPerPage" value="40" type="hidden"/> 
+	    <input name="q" id="query" type="text" title="search query"/>
+	    <input name="Button" value="{{ headers.search }}" type="submit" class="topsrchbutton"/>
+	  </div>
+	</form>
+      </div>
+    </div>
+    {% block tagline %}{% if headers.tagline %}<div id="bannercenter"><br/>{{ headers.tagline }}</div>{% endif %}{% endblock %}
+  </div>
+  {% block announce %}{% if headers.announce %}<div id="announce"><a href="{{ headers.announceurl }}" title="{{ headers.announcetip }}">{{ headers.announce }}</a></div>{% endif %}{% endblock %}
diff --git a/templates/doctype.html b/templates/doctype.html
new file mode 100644
index 0000000..7b88be0
--- /dev/null
+++ b/templates/doctype.html
@@ -0,0 +1 @@
+<!DOCTYPE {{ headers.doctype }}>
diff --git a/templates/footer.html b/templates/footer.html
new file mode 100644
index 0000000..f3b1866
--- /dev/null
+++ b/templates/footer.html
@@ -0,0 +1,26 @@
+  <div id="{{ headers.divid }}">
+    <div id="asfbanner">
+      <p><a href="https://www.apache.org/events/current-event.html"><img src="https://www.apache.org/events/current-event-234x60.png" alt="Apache Events" height="60" width="234" /></a></p>
+    </div>
+    <div id="poweredbya">
+      <p>
+        <a href="https://www.apache.org/">
+		<img src="/images/asf_logo_small.png" alt="Apache Software Foundation" height="76" width="188"/>
+        </a>
+      </p>
+    </div>
+    <div id="copyrighta">
+      <p style="text-align:center;">
+        <a href="/license.html">Copyright &amp; License</a> |
+        <a href="/privacy.html">Privacy</a> |
+        <a href="/contact_us.html">Contact Us</a> |
+        <a href="/donations.html">Donate</a> |
+        <a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
+      </p>
+      <p>
+        Apache and the Apache feather logo are trademarks of The Apache Software Foundation.
+        OpenOffice, OpenOffice.org and the seagull logo are registered trademarks of The Apache Software Foundation.
+        Other names appearing on the site may be trademarks of their respective owners.
+      </p>
+    </div>
+  </div>
diff --git a/templates/html_page.html b/templates/html_page.html
new file mode 100644
index 0000000..40148eb
--- /dev/null
+++ b/templates/html_page.html
@@ -0,0 +1,3 @@
+{% extends "skeleton.html" %}
+  {% block content %}{% autoescape off %}{{ content }}{% endautoescape %}{% endblock %}
+{$ endextends $}
diff --git a/templates/navigator.html b/templates/navigator.html
new file mode 100644
index 0000000..b2e744f
--- /dev/null
+++ b/templates/navigator.html
@@ -0,0 +1 @@
+<div id="{{ headers.divid }}">{% block content %}{{ content|markdown }}{% endblock %}</div>
diff --git a/templates/single_narrative.html b/templates/single_narrative.html
new file mode 100644
index 0000000..19d6b98
--- /dev/null
+++ b/templates/single_narrative.html
@@ -0,0 +1 @@
+{% extends "skeleton.html" %}
diff --git a/templates/skeleton.html b/templates/skeleton.html
new file mode 100644
index 0000000..a1f7b06
--- /dev/null
+++ b/templates/skeleton.html
@@ -0,0 +1,29 @@
+<!--#include virtual="{{ ssi.headers.doctype }}" -->
+<html>
+<head>
+<link href="/css/ooo.css" rel="stylesheet" type="text/css">
+{% if head %}{{ head|safe }}{% else %}
+<title>{% block title %}{{ headers.title }}{% endblock %}</title>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+{% if headers.css %}<link href="{{ headers.css }}" rel="stylesheet" type="text/css">{% endif %}
+{% endif %}
+<!--#include virtual="/scripts/google-analytics.js" --> 
+<!--#include virtual="/scripts/entourage.js" -->
+</head>
+<body{% if bodytag %} {{ bodytag|safe }}{% endif %}>
+<!--#include virtual="{{ ssi.headers.brand }}" -->
+  <div id="topbara">
+    {% if ssi.headers.topnav %}<!--#include virtual="{{ ssi.headers.topnav }}" -->{% endif %}
+    <div id="breadcrumbsa">{% block breaddcrumbs %}{{ breadcrumbs|safe }}{% endblock %}</div>
+  </div>
+  <div id="clear"></div>
+  {% if ssi.headers.leftnav %}<!--#include virtual="{{ ssi.headers.leftnav }}" -->{% endif %}
+  {% if ssi.headers.rightnav %}<!--#include virtual="{{ ssi.headers.rightnav }}" -->{% endif %}
+  <div id="content">
+    {% block legacy %}{% if ssi.headers.legacy %}<div class="legacy">{{ ssi.headers.legacy }}</div>{% endif %}{% endblock %}
+    {% block title %}{% if headers.title %}<h1 class="title">{{ headers.title }}</h1>{% endif %}{% endblock %}
+    {% block content %}{{ content|markdown }}{% endblock %}
+  </div>
+<!--#include virtual="{{ ssi.headers.footer }}" -->
+</body>
+</html>
diff --git a/templates/ssi.json b/templates/ssi.json
new file mode 100644
index 0000000..15957e9
--- /dev/null
+++ b/templates/ssi.json
@@ -0,0 +1,325 @@
+{
+    "/": {
+	"doctype":"/doctype.html",
+	"footer":"/footer.html",
+	"brand":"/brand.html",
+	"topnav":"/topnav.html",
+	"home":"home"
+    }
+    "/sl/": {
+	"brand":"/sl/brand.html",
+	"topnav":"/sl/topnav.html"
+    }
+    "/sk/": {
+	"brand":"/sk/brand.html",
+	"topnav":"/sk/topnav.html"
+    }
+    "/kab/": {
+	"brand":"/kab/brand.html",
+	"topnav":"/kab/topnav.html"
+    }
+    "/pl/why/": {
+	"leftnav":"/pl/why/leftnav.html"
+    }
+    "/pl/product/": {
+	"leftnav":"/pl/product/leftnav.html"
+    }
+    "/pl/": {
+	"brand":"/pl/brand.html",
+	"topnav":"/pl/topnav.html"
+    }
+    "/l10n/": {
+	"topnav":"/l10n/topnav.html",
+	"leftnav":"/l10n/leftnav.html",
+	"rightnav":"/l10n/rightnav.html"
+    }
+    "/vi/": {
+	"brand":"/vi/brand.html",
+	"topnav":"/vi/topnav.html"
+    }
+    "/sv/product/": {
+	"leftnav":"/sv/product/leftnav.html"
+    }
+    "/sv/": {
+	"brand":"/sv/brand.html",
+	"topnav":"/sv/topnav.html"
+    }
+    "/he/why/": {
+	"leftnav":"/he/why/leftnav.html"
+    }
+    "/he/product/": {
+	"leftnav":"/he/product/leftnav.html"
+    }
+    "/he/": {
+	"topnav":"/he/topnav.html",
+	"brand":"/he/brand.html"
+    }
+    "/km/": {
+	"brand":"/km/brand.html",
+	"topnav":"/km/topnav.html"
+    }
+    "/hy/": {
+	"brand":"/hy/brand.html",
+	"topnav":"/hy/topnav.html"
+    }
+    "/why/": {
+	"leftnav":"/why/leftnav.html"
+    }
+    "/am/": {
+	"brand":"/am/brand.html",
+	"topnav":"/am/topnav.html"
+    }
+    "/da/why/": {
+	"leftnav":"/da/why/leftnav.html"
+    }
+    "/da/product/": {
+	"leftnav":"/da/product/leftnav.html"
+    }
+    "/da/": {
+	"brand":"/da/brand.html",
+	"topnav":"/da/topnav.html"
+    }
+    "/no/why/": {
+	"leftnav":"/no/why/leftnav.html"
+    }
+    "/no/product/": {
+	"leftnav":"/no/product/leftnav.html"
+    }
+    "/no/": {
+	"topnav":"/no/topnav.html",
+	"brand":"/no/brand.html"
+    }
+    "/ja/": {
+	"brand":"/ja/brand.html",
+	"topnav":"/ja/topnav.html"
+    }
+    "/el/": {
+	"brand":"/el/brand.html",
+	"topnav":"/el/topnav.html"
+    }
+    "/it/": {
+	"brand":"/it/brand.html",
+	"topnav":"/it/topnav.html"
+    }
+    "/om/": {
+	"brand":"/om/brand.html",
+	"topnav":"/om/topnav.html"
+    }
+    "/ca/": {
+	"brand":"/ca/brand.html",
+	"topnav":"/ca/topnav.html"
+    }
+    "/is/": {
+	"brand":"/is/brand.html",
+	"topnav":"/is/topnav.html"
+    }
+    "/cs/": {
+	"brand":"/cs/brand.html",
+	"topnav":"/cs/topnav.html"
+    }
+    "/ru/why/": {
+	"leftnav":"/ru/why/leftnav.html"
+    }
+    "/ru/": {
+	"brand":"/ru/brand.html"
+	"topnav":"/ru/topnav.html"
+    }
+    "/product/": {
+	"leftnav":"/product/leftnav.html"
+    }
+    "/zh-cn/": {
+	"brand":"/zh-cn/brand.html",
+	"topnav":"/zh-cn/topnav.html"
+    }
+    "/pt/why/": {
+	"leftnav":"/pt/why/leftnav.html"
+    }
+    "/pt/product/": {
+	"leftnav":"/pt/product/leftnav.html"
+    }
+    "/pt/": {
+	"topnav":"/pt/topnav.html",
+	"brand":"/pt/brand.html"
+    }
+    "/zh/": {
+	"brand":"/zh/brand.html",
+	"topnav":"/zh/topnav.html"
+    }
+    "/uk/": {
+	"brand":"/uk/brand.html",
+	"topnav":"/uk/topnav.html"
+    }
+    "/sr/": {
+	"brand":"/sr/brand.html",
+	"topnav":"/sr/topnav.html"
+    }
+    "/sr-latn/why/": {
+	"leftnav":"/sr-latn/why/leftnav.html"
+    }
+    "/sr-latn/product/": {
+	"leftnav":"/sr-latn/product/leftnav.html"
+    }
+    "/sr-latn/": {
+	"topnav":"/sr-latn/topnav.html",
+	"brand":"/sr-latn/brand.html"
+    }
+    "/zh-tw/": {
+	"brand":"/zh-tw/brand.html",
+	"topnav":"/zh-tw/topnav.html"
+    }
+    "/ar/": {
+	"brand":"/ar/brand.html",
+	"topnav":"/ar/topnav.html"
+    }
+    "/gl/": {
+	"brand":"/gl/brand.html",
+	"topnav":"/gl/topnav.html"
+    }
+    "/pt-br/": {
+	"brand":"/pt-br/brand.html",
+	"topnav":"/pt-br/topnav.html"
+    }
+    "/hu/why/": {
+	"leftnav":"/hu/why/leftnav.html"
+    }
+    "/hu/product/": {
+	"leftnav":"/hu/product/leftnav.html"
+    }
+    "/hu/": {
+	"brand":"/hu/brand.html",
+	"topnav":"/hu/topnav.html"
+    }
+    "/nl/why/": {
+	"leftnav":"/nl/why/leftnav.html"
+    }
+    "/nl/product/": {
+	"leftnav":"/nl/product/leftnav.html"
+    }
+    "/nl/": {
+	"brand":"/nl/brand.html",
+	"topnav":"/nl/topnav.html"
+    }
+    "/bg/": {
+	"brand":"/bg/brand.html",
+	"topnav":"/bg/topnav.html"
+    }
+    "/ast/": {
+	"brand":"/ast/brand.html",
+	"topnav":"/ast/topnav.html"
+    }
+    "/af/": {
+	"brand":"/af/brand.html",
+	"topnav":"/af/topnav.html"
+    }
+    "/hi/": {
+	"brand":"/hi/brand.html",
+	"topnav":"/hi/topnav.html"
+    }
+    "/api/": {
+	"leftnav":"/api/leftnav.html"
+    }
+    "/de/product/": {
+	"leftnav":"/de/product/leftnav.html"
+    }
+    "/de/": {
+	"brand":"/de/brand.html",
+	"topnav":"/de/topnav.html"
+    }
+    "/gd/": {
+	"brand":"/gd/brand.html",
+	"topnav":"/gd/topnav.html"
+    }
+    "/ko/product/": {
+	"leftnav":"/ko/product/leftnav.html"
+    }
+    "/ko/": {
+	"brand":"/ko/brand.html",
+	"topnav":"/ko/topnav.html"
+    }
+    "/fi/": {
+	"brand":"/fi/brand.html",
+	"topnav":"/fi/topnav.html"
+    }
+    "/fr/": {
+	"brand":"/fr/brand.html",
+	"topnav":"/fr/topnav.html"
+    }
+    "/es/producto/": {
+	"leftnav":"/es/producto/leftnav.html"
+    }
+    "/es/por-que/": {
+	"leftnav":"/es/por-que/leftnav.html"
+    }
+    "/es/participar/": {
+	"leftnav":"/es/participar/leftnav.html"
+    }
+    "/es/noticias/": {
+	"leftnav":"/es/noticias/leftnav.html"
+    }
+    "/es/": {
+	"brand":"/es/brand.html",
+	"topnav":"/es/topnav.html"
+    }
+    "/et/": {
+	"brand":"/et/brand.html",
+	"topnav":"/et/topnav.html"
+    }
+    "/lt/why/": {
+	"leftnav":"/lt/why/leftnav.html"
+    }
+    "/lt/product/": {
+	"leftnav":"/lt/product/leftnav.html"
+    }
+    "/lt/": {
+	"topnav":"/lt/topnav.html",
+	"brand":"/lt/brand.html"
+    }
+    "/eu/why/": {
+	"leftnav":"/eu/why/leftnav.html"
+    }
+    "/eu/product/": {
+	"leftnav":"/eu/product/leftnav.html"
+    }
+    "/eu/": {
+	"brand":"/eu/brand.html",
+	"topnav":"/eu/topnav.html"
+    }
+    "/sr-cyrl/why/": {
+	"leftnav":"/sr-cyrl/why/leftnav.html"
+    }
+    "/sr-cyrl/product/": {
+	"leftnav":"/sr-cyrl/product/leftnav.html"
+    }
+    "/sr-cyrl/": {
+	"topnav":"/sr-cyrl/topnav.html",
+	"brand":"/sr-cyrl/brand.html"
+    }
+    "/xx/why/": {
+	"leftnav":"/xx/why/leftnav.html"
+    }
+    "/xx/product/": {
+	"leftnav":"/xx/product/leftnav.html"
+    }
+    "/xx/": {
+	"topnav":"/xx/topnav.html",
+	"brand":"/xx/brand.html"
+    }
+    "/ta/": {
+	"brand":"/ta/brand.html",
+	"topnav":"/ta/topnav.html"
+    }
+    "/th/": {
+	"brand":"/th/brand.html",
+	"topnav":"/th/topnav.html"
+    }
+    "/tr/why/": {
+	"leftnav":"/tr/why/leftnav.html"
+    }
+    "/tr/product/": {
+	"leftnav":"/tr/product/leftnav.html"
+    }
+    "/tr/": {
+	"topnav":"/tr/topnav.ehtml",
+	"brand":"/tr/brand.html"
+    }
+}