1
0
mirror of https://github.com/webrecorder/pywb.git synced 2025-03-14 15:53:28 +01:00

more locale fixes: (#653)

* more locale fixes:
- fix running wb-manager w/o i18n dependencies
- dependencies: move babel to extra_requires, show warning if locale used or 'wb-manager i18n' called and i18n are not installed
- not found page: don't language switch header banner on nested content frame
This commit is contained in:
Ilya Kreymer 2021-06-18 14:58:21 -07:00 committed by GitHub
parent 3ca765f847
commit cff2a9efc5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 33 additions and 11 deletions

View File

@ -3,8 +3,14 @@ pywb 2.6.0b2 changelist
* Update documentation for CDX Server API (by @sebastian-nagel) `#651 <https://github.com/webrecorder/pywb/pull/651>`_ * Update documentation for CDX Server API (by @sebastian-nagel) `#651 <https://github.com/webrecorder/pywb/pull/651>`_
Localization fixes: `#653 <https://github.com/webrecorder/pywb/pull/653>`_
* Ensure banner template is not autoescaped * 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 pywb 2.6.0b1 changelist
~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~

View File

@ -5,4 +5,5 @@ uwsgi
ujson ujson
pysocks pysocks
lxml lxml
babel
translate_toolkit translate_toolkit

View File

@ -685,7 +685,7 @@ class RewriterApp(object):
return self._error_response(environ, wbe) return self._error_response(environ, wbe)
def _not_found_response(self, environ, url): 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') return WbResponse.text_response(resp, status='404 Not Found', content_type='text/html')

View File

@ -442,14 +442,25 @@ Create manage file based web archive collections
acl.set_defaults(func=do_acl) acl.set_defaults(func=do_acl)
# LOC # 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): 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 = LocManager()
loc.process(r) loc.process(r)
loc_help = 'Generate strings for i18n/localization' loc_help = 'Generate strings for i18n/localization'
loc = subparsers.add_parser('i18n', help=loc_help) 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) loc.set_defaults(func=do_loc)
# Parse # Parse

View File

@ -8,8 +8,6 @@ from six.moves.urllib.parse import urlsplit, quote
from jinja2 import Environment, TemplateNotFound, contextfunction, select_autoescape from jinja2 import Environment, TemplateNotFound, contextfunction, select_autoescape
from jinja2 import FileSystemLoader, PackageLoader, ChoiceLoader from jinja2 import FileSystemLoader, PackageLoader, ChoiceLoader
from babel.support import Translations
from webassets.ext.jinja2 import AssetsExtension from webassets.ext.jinja2 import AssetsExtension
from webassets.loaders import YAMLLoader from webassets.loaders import YAMLLoader
from webassets.env import Resolver from webassets.env import Resolver
@ -17,6 +15,7 @@ from webassets.env import Resolver
from pkg_resources import resource_filename from pkg_resources import resource_filename
import os import os
import logging
try: try:
import ujson as json import ujson as json
@ -128,9 +127,12 @@ class JinjaEnv(object):
self.default_locale = default_locale self.default_locale = default_locale
if locales_root_dir: if locales_root_dir:
for loc in locales: try:
loc_map[loc] = Translations.load(locales_root_dir, [loc, default_locale]) from babel.support import Translations
#jinja_env.jinja_env.install_gettext_translations(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): def get_translate(context):
loc = context.get('env', {}).get('pywb_lang', default_locale) loc = context.get('env', {}).get('pywb_lang', default_locale)

View File

@ -1,5 +1,5 @@
<header> <header>
{% if locales|length > 1 %} {% if not err_msg and locales|length > 1 %}
<div class="language-select"> <div class="language-select">
{{ _('Language:') }} {{ _('Language:') }}
<ul role="listbox" aria-activedescendant="{{ env.pywb_lang | default(default_locale) }}" aria-labelledby="{{ _('Language select') }}"> <ul role="listbox" aria-activedescendant="{{ env.pywb_lang | default(default_locale) }}" aria-labelledby="{{ _('Language select') }}">

View File

@ -14,5 +14,4 @@ portalocker
wsgiprox>=1.5.1 wsgiprox>=1.5.1
fakeredis<1.0 fakeredis<1.0
tldextract tldextract
babel
python-dateutil python-dateutil

View File

@ -108,7 +108,10 @@ setup(
], ],
install_requires=load_requirements('requirements.txt'), install_requires=load_requirements('requirements.txt'),
extras_require={ extras_require={
"i18n": ["translate_toolkit"], "i18n": [
"babel",
"translate_toolkit"
],
}, },
tests_require=[ tests_require=[
'pytest', 'pytest',