diff --git a/CHANGES.rst b/CHANGES.rst index bd940775..5dc0ac56 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -3,8 +3,14 @@ pywb 2.6.0b2 changelist * Update documentation for CDX Server API (by @sebastian-nagel) `#651 `_ +Localization fixes: `#653 `_ + * Ensure banner template is not autoescaped +* Don't show locale switch on not found pages (redundant with banner) + +* Ensure wb-manager works when optional i18n dependencies are not installed + pywb 2.6.0b1 changelist ~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/extra_requirements.txt b/extra_requirements.txt index 5e5860de..a7329ac6 100644 --- a/extra_requirements.txt +++ b/extra_requirements.txt @@ -5,4 +5,5 @@ uwsgi ujson pysocks lxml +babel translate_toolkit diff --git a/pywb/apps/rewriterapp.py b/pywb/apps/rewriterapp.py index 1b3004de..e91dc677 100644 --- a/pywb/apps/rewriterapp.py +++ b/pywb/apps/rewriterapp.py @@ -685,7 +685,7 @@ class RewriterApp(object): return self._error_response(environ, wbe) def _not_found_response(self, environ, url): - resp = self.not_found_view.render_to_string(environ, url=url) + resp = self.not_found_view.render_to_string(environ, url=url, err_msg="Not Found") return WbResponse.text_response(resp, status='404 Not Found', content_type='text/html') diff --git a/pywb/manager/manager.py b/pywb/manager/manager.py index bb079690..fc767b7d 100644 --- a/pywb/manager/manager.py +++ b/pywb/manager/manager.py @@ -442,14 +442,25 @@ Create manage file based web archive collections acl.set_defaults(func=do_acl) # LOC - from pywb.manager.locmanager import LocManager + loc_avail = False + try: + from pywb.manager.locmanager import LocManager + loc_avail = True + except: + pass + def do_loc(r): + if not loc_avail: + print("You must install i18n extensions with 'pip install pywb[i18n]' to use localization features") + return + loc = LocManager() loc.process(r) loc_help = 'Generate strings for i18n/localization' loc = subparsers.add_parser('i18n', help=loc_help) - LocManager.init_parser(loc) + if loc_avail: + LocManager.init_parser(loc) loc.set_defaults(func=do_loc) # Parse diff --git a/pywb/rewrite/templateview.py b/pywb/rewrite/templateview.py index 4a388151..dadd331c 100644 --- a/pywb/rewrite/templateview.py +++ b/pywb/rewrite/templateview.py @@ -8,8 +8,6 @@ from six.moves.urllib.parse import urlsplit, quote from jinja2 import Environment, TemplateNotFound, contextfunction, select_autoescape from jinja2 import FileSystemLoader, PackageLoader, ChoiceLoader -from babel.support import Translations - from webassets.ext.jinja2 import AssetsExtension from webassets.loaders import YAMLLoader from webassets.env import Resolver @@ -17,6 +15,7 @@ from webassets.env import Resolver from pkg_resources import resource_filename import os +import logging try: import ujson as json @@ -128,9 +127,12 @@ class JinjaEnv(object): self.default_locale = default_locale if locales_root_dir: - for loc in locales: - loc_map[loc] = Translations.load(locales_root_dir, [loc, default_locale]) - #jinja_env.jinja_env.install_gettext_translations(translations) + try: + from babel.support import Translations + for loc in locales: + loc_map[loc] = Translations.load(locales_root_dir, [loc, default_locale]) + except: + logging.warn("Ignoring Locales. You must install i18n extensions with 'pip install pywb[i18n]' to use localization features") def get_translate(context): loc = context.get('env', {}).get('pywb_lang', default_locale) diff --git a/pywb/templates/header.html b/pywb/templates/header.html index c45a9e0d..24228983 100644 --- a/pywb/templates/header.html +++ b/pywb/templates/header.html @@ -1,5 +1,5 @@
- {% if locales|length > 1 %} + {% if not err_msg and locales|length > 1 %}
{{ _('Language:') }}
    diff --git a/requirements.txt b/requirements.txt index 7f3d3401..60e078ec 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,5 +14,4 @@ portalocker wsgiprox>=1.5.1 fakeredis<1.0 tldextract -babel python-dateutil diff --git a/setup.py b/setup.py index bf2f7215..c3591550 100755 --- a/setup.py +++ b/setup.py @@ -108,7 +108,10 @@ setup( ], install_requires=load_requirements('requirements.txt'), extras_require={ - "i18n": ["translate_toolkit"], + "i18n": [ + "babel", + "translate_toolkit" + ], }, tests_require=[ 'pytest',