From bf974e83effd789c83bddfae7e8a35d3e437afa3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 26 Nov 2014 12:39:55 +0530 Subject: [PATCH] Add a "Change Language" link to the User Manual sidebar --- manual/build.py | 3 +++ manual/conf.py | 13 +++++++++++++ manual/custom.py | 16 +++++++++++++++- manual/templates/layout.html | 17 +++++++++++++++++ src/calibre/linux.py | 3 ++- 5 files changed, 50 insertions(+), 2 deletions(-) diff --git a/manual/build.py b/manual/build.py index 7645230858..2007d8d578 100755 --- a/manual/build.py +++ b/manual/build.py @@ -77,6 +77,9 @@ if __name__ == '__main__': if len(sys.argv) == 1: base = j(tempfile.gettempdir(), 'manual') os.environ['CALIBRE_OVERRIDE_LANG'] = language = 'en' + if 'ALL_USER_MANUAL_LANGUAGES' not in os.environ: + import json + os.environ['ALL_USER_MANUAL_LANGUAGES'] = ' '.join(json.load(open('locale/completed.json', 'rb'))) sphinx_build(language, base, t='online', quiet=False) else: language, base = sys.argv[1:] diff --git a/manual/conf.py b/manual/conf.py index c2f1405f09..fadd4f1607 100644 --- a/manual/conf.py +++ b/manual/conf.py @@ -138,6 +138,19 @@ html_title = title html_short_title = 'Start' html_logo = 'resources/logo.png' +from calibre.utils.localization import get_language +html_context = {} +html_context['other_languages'] = [ + (lc, get_language(lc)) for lc in os.environ.get('ALL_USER_MANUAL_LANGUAGES', '').split() if lc != language] +def sort_languages(x): + from calibre.utils.icu import sort_key + lc, name = x + if lc == language: + return '' + return sort_key(unicode(name)) +html_context['other_languages'].sort(key=sort_languages) +del sort_languages, get_language + epub_author = 'Kovid Goyal' epub_publisher = 'Kovid Goyal' epub_identifier = 'http://manual.calibre-ebook.com' diff --git a/manual/custom.py b/manual/custom.py index b7e539e3b5..dcd979a5d7 100644 --- a/manual/custom.py +++ b/manual/custom.py @@ -4,6 +4,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' import sys, os, re, textwrap +from functools import partial import init_calibre del init_calibre @@ -219,7 +220,7 @@ def cli_docs(app): documented = [' '*4 + c[0] for c in documented_cmds] undocumented = [' * ' + c for c in undocumented_cmds] - raw = (CLI_INDEX % cli_index_strings()).format(documented='\n'.join(documented), + raw = (CLI_INDEX % cli_index_strings()[:5]).format(documented='\n'.join(documented), undocumented='\n'.join(undocumented)) if not os.path.exists('cli'): os.makedirs('cli') @@ -254,12 +255,25 @@ def template_docs(app): raw = generate_template_language_help(app.config.language) update_cli_doc('template_ref', raw, app) +def localized_path(app, langcode, pagename): + href = app.builder.get_target_uri(pagename) + href = re.sub(r'generated/[a-z]+/', 'generated/%s/' % langcode, href) + prefix = '/' + if langcode != 'en': + prefix += langcode + '/' + return prefix + href + +def add_html_context(app, pagename, templatename, context, *args): + context['localized_path'] = partial(localized_path, app) + context['change_language_text'] = cli_index_strings()[5] + def setup(app): app.add_builder(EPUBHelpBuilder) app.add_builder(LaTeXHelpBuilder) app.connect('source-read', source_read_handler) app.connect('doctree-read', substitute) app.connect('builder-inited', generate_docs) + app.connect('html-page-context', add_html_context) app.connect('build-finished', finished) def finished(app, exception): diff --git a/manual/templates/layout.html b/manual/templates/layout.html index afd9728a6d..534cb302dd 100644 --- a/manual/templates/layout.html +++ b/manual/templates/layout.html @@ -6,7 +6,15 @@ .float-right-img { float: right; margin-left: 1em; margin-bottom: 1em } .half-with-img { max-width: 50% } .fit-img { max-width: 95% } + #languages-menu { display: none } + {% endblock %} @@ -65,6 +73,15 @@
+ {%- if not embedded %} +
{{ change_language_text }}
+ +
+ {%- endif %} {% endblock %} diff --git a/src/calibre/linux.py b/src/calibre/linux.py index a40ad923f9..cfb967b354 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -1106,7 +1106,8 @@ def cli_index_strings(): ' if you installed calibre in :file:`/Applications` the command line tools' ' are in :file:`/Applications/calibre.app/Contents/console.app/Contents/MacOS/`.'), _( 'Documented Commands'), _('Undocumented Commands'), _( - 'You can see usage for undocumented commands by executing them without arguments in a terminal.') + 'You can see usage for undocumented commands by executing them without arguments in a terminal.'), _( + 'Change Language') if __name__ == '__main__':