diff --git a/src-ui/angular.json b/src-ui/angular.json index 79233eeda..514b351fc 100644 --- a/src-ui/angular.json +++ b/src-ui/angular.json @@ -13,6 +13,12 @@ "root": "", "sourceRoot": "src", "prefix": "app", + "i18n": { + "sourceLocale": "en-US", + "locales": { + "de": "src/locale/messages.de-DE.xlf" + } + }, "architect": { "build": { "builder": "@angular-devkit/build-angular:browser", @@ -23,6 +29,7 @@ "main": "src/main.ts", "polyfills": "src/polyfills.ts", "tsConfig": "tsconfig.app.json", + "localize": true, "aot": true, "assets": [ "src/favicon.ico", diff --git a/src/documents/templates/index.html b/src/documents/templates/index.html index 47a352cd5..c95e4b15f 100644 --- a/src/documents/templates/index.html +++ b/src/documents/templates/index.html @@ -12,11 +12,11 @@ - + Loading... - - - + + + diff --git a/src/documents/views.py b/src/documents/views.py index 32b88a18f..7dc3ae3e6 100755 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -7,6 +7,7 @@ from django.conf import settings from django.db.models import Count, Max, Case, When, IntegerField from django.db.models.functions import Lower from django.http import HttpResponse, HttpResponseBadRequest, Http404 +from django.utils.translation import get_language from django.views.decorators.cache import cache_control from django.views.generic import TemplateView from django_filters.rest_framework import DjangoFilterBackend @@ -61,6 +62,10 @@ class IndexView(TemplateView): context['cookie_prefix'] = settings.COOKIE_PREFIX context['username'] = self.request.user.username context['full_name'] = self.request.user.get_full_name() + context['styles_css'] = f"frontend/{get_language()}/styles.css" + context['runtime_js'] = f"frontend/{get_language()}/runtime.js" + context['polyfills_js'] = f"frontend/{get_language()}/polyfills.js" + context['main_js'] = f"frontend/{get_language()}/main.js" return context diff --git a/src/paperless/settings.py b/src/paperless/settings.py index 5af1be85e..b59968dea 100644 --- a/src/paperless/settings.py +++ b/src/paperless/settings.py @@ -6,6 +6,8 @@ import re from dotenv import load_dotenv +from django.utils.translation import gettext_lazy as _ + # Tap paperless.conf if it's available if os.path.exists("../paperless.conf"): load_dotenv("../paperless.conf") @@ -117,6 +119,7 @@ MIDDLEWARE = [ 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', + 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', @@ -246,6 +249,11 @@ if os.getenv("PAPERLESS_DBHOST"): LANGUAGE_CODE = 'en-us' +LANGUAGES = [ + ("en-us", _("English")), + ("de", _("German")) +] + TIME_ZONE = os.getenv("PAPERLESS_TIME_ZONE", "UTC") USE_I18N = True diff --git a/src/paperless/urls.py b/src/paperless/urls.py index 39e99a7a4..e44762aee 100755 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -88,7 +88,8 @@ urlpatterns = [ # Frontend assets TODO: this is pretty bad, but it works. path('assets/', - RedirectView.as_view(url='/static/frontend/assets/%(path)s')), + RedirectView.as_view(url='/static/frontend/en-us/assets/%(path)s')), + # TODO: with localization, this is even worse! :/ # login, logout path('accounts/', include('django.contrib.auth.urls')),