Language switcher

This commit is contained in:
Martin Trigaux 2015-11-10 10:38:53 +01:00
parent 5393e5fc94
commit ec97bc7919
2 changed files with 35 additions and 4 deletions

View File

@ -83,14 +83,14 @@
</div>
<nav class="collapse navbar-collapse navbar-main navbar-right" role="navigation">
{% if versions %}
{% if languages %}
<ul class="navbar-nav navbar-right nav">
<li class="versions">
<li class="languages">
<a class="dropdown-toggle" data-toggle="dropdown">
{{ version }} <span class="caret"></span>
{{ language }} <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
{% for name, url in versions %}
{% for name, url in languages %}
<li><a href="{{ url }}">{{ name }}</a></li>
{% endfor %}
</ul>

31
conf.py
View File

@ -286,9 +286,14 @@ def setup(app):
app.add_javascript('inventory.js');
app.add_javascript('coa-valuation.js')
app.add_config_value('canonical_root', None, 'env')
app.connect('html-page-context', analytics)
app.add_config_value('google_analytics_key', '', 'env')
app.connect('html-page-context', localize)
app.add_config_value('languages', '', 'env')
app.connect('doctree-resolved', tag_toctrees)
def analytics(app, pagename, templatename, context, doctree):
@ -314,3 +319,29 @@ def tag_toctrees(app, doctree, docname):
return
app.env.metadata[docname]['has-toc'] = True
def localize(app, pagename, templatename, context, doctree):
""" Adds a language switcher below the menu, requires ``canonical_root``
and ``languages`` (an ordered, space-separated lists of all possible
languages).
"""
if not (app.config.canonical_root and app.config.languages):
return
current_lang = app.config.language or 'en'
context['language'] = current_lang.upper()
context['languages'] = [
(la.upper(), _build_url(app.config.canonical_root, la, pagename))
for la in app.config.languages.split(',')
if la != current_lang
]
def _build_url(root, branch, pagename):
return "{canonical_url}{canonical_branch}/{canonical_page}".format(
canonical_url=root,
canonical_branch=branch,
canonical_page=(pagename + '.html').replace('index.html', '')
.replace('index/', ''),
)