diff --git a/src/pretix/base/views/js_catalog.py b/src/pretix/base/views/js_catalog.py
new file mode 100644
index 0000000000..be5b6f1c0e
--- /dev/null
+++ b/src/pretix/base/views/js_catalog.py
@@ -0,0 +1,25 @@
+from django.utils import timezone
+from django.views.decorators.cache import cache_page
+from django.views.decorators.http import etag
+from django.views.i18n import (
+ get_javascript_catalog, render_javascript_catalog, to_locale,
+)
+
+# Yes, we want to regenerate this every time the module has been imported to
+# refresh the cache at least at every code deployment
+import_date = timezone.now().strftime("%Y%m%d%H%M")
+
+
+# This is not a valid Django URL configuration, as the final
+# configuration is done by the pretix.multidomain package.
+js_info_dict = {
+ 'packages': ('pretix',),
+}
+
+
+@etag(lambda *s, **k: import_date)
+@cache_page(3600, key_prefix='js18n-%s' % import_date)
+def js_catalog(request, lang):
+ packages = ['pretix']
+ catalog, plural = get_javascript_catalog(to_locale(lang), 'djangojs', packages)
+ return render_javascript_catalog(catalog, plural)
diff --git a/src/pretix/control/templates/pretixcontrol/base.html b/src/pretix/control/templates/pretixcontrol/base.html
index 310ec9ce18..21ee7b5638 100644
--- a/src/pretix/control/templates/pretixcontrol/base.html
+++ b/src/pretix/control/templates/pretixcontrol/base.html
@@ -9,7 +9,7 @@
{% compress css %}
{% endcompress %}
-
+
{% compress js %}
diff --git a/src/pretix/presale/templates/pretixpresale/base.html b/src/pretix/presale/templates/pretixpresale/base.html
index 790db0f17b..932e57cf73 100644
--- a/src/pretix/presale/templates/pretixpresale/base.html
+++ b/src/pretix/presale/templates/pretixpresale/base.html
@@ -15,7 +15,7 @@
{% endcompress %}
{% endif %}
-
+
{% compress js %}
diff --git a/src/pretix/urls.py b/src/pretix/urls.py
index 1dd4039a91..c72f3fd1fb 100644
--- a/src/pretix/urls.py
+++ b/src/pretix/urls.py
@@ -1,24 +1,10 @@
from django.conf import settings
from django.conf.urls import include, url
-from django.utils import timezone
-from django.views.decorators.cache import cache_page
-from django.views.decorators.http import etag
-from django.views.i18n import javascript_catalog
import pretix.control.urls
import pretix.presale.urls
-from .base.views import cachedfiles, health, redirect
-
-# This is not a valid Django URL configuration, as the final
-# configuration is done by the pretix.multidomain package.
-js_info_dict = {
- 'packages': ('pretix',),
-}
-
-# Yes, we want to regenerate this every time the module has been imported to
-# refresh the cache at least at every code deployment
-import_date = timezone.now().strftime("%Y%m%d%H%M")
+from .base.views import cachedfiles, health, js_catalog, redirect
base_patterns = [
url(r'^download/(?P[^/]+)/$', cachedfiles.DownloadView.as_view(),
@@ -26,9 +12,7 @@ base_patterns = [
url(r'^healthcheck/$', health.healthcheck,
name='healthcheck'),
url(r'^redirect/$', redirect.redir_view, name='redirect'),
- url(r'^jsi18n/$',
- etag(lambda *s, **k: import_date)(cache_page(3600, key_prefix='js18n-%s' % import_date)(javascript_catalog)),
- js_info_dict, name='javascript-catalog'),
+ url(r'^jsi18n/(?P[a-zA-Z-_]+)/$', js_catalog.js_catalog, name='javascript-catalog'),
]
control_patterns = [