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 <d...@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 " » ", @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 & 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" + } +}