Improvements #9
|
@ -1,6 +1,6 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
python manage.py migrate
|
python manage.py migrate
|
||||||
python manage.py getlocales
|
python manage.py loco
|
||||||
python manage.py makemessages -l en -l de
|
python manage.py makemessages -l en -l de
|
||||||
python manage.py compilemessages -f
|
python manage.py compilemessages -f
|
||||||
python manage.py getplzindex
|
python manage.py getplzindex
|
||||||
|
|
|
@ -1,52 +0,0 @@
|
||||||
import os
|
|
||||||
import requests
|
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand
|
|
||||||
from django.utils.translation import trans_real
|
|
||||||
from django.apps import apps
|
|
||||||
from pflaenzli_django.settings import LOCO_API_KEY
|
|
||||||
|
|
||||||
API_URL = ' https://localise.biz/api/export/locale'
|
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
|
||||||
help = 'Fetch translations from Loco (Localise.biz) and write them to message files'
|
|
||||||
|
|
||||||
def handle(self, *args, **options):
|
|
||||||
errors = 0
|
|
||||||
|
|
||||||
if LOCO_API_KEY is None or LOCO_API_KEY == '':
|
|
||||||
self.stdout.write(self.style.ERROR('An API key is required'))
|
|
||||||
return
|
|
||||||
|
|
||||||
app_config = apps.get_app_config('pflaenzli')
|
|
||||||
app_path = app_config.path
|
|
||||||
|
|
||||||
for locale in trans_real.get_languages():
|
|
||||||
url = f'{API_URL}/{locale}.po'
|
|
||||||
self.stdout.write(f'Getting translations for locale {self.style.SUCCESS(locale)}')
|
|
||||||
response = requests.get(url, auth=(LOCO_API_KEY, ''))
|
|
||||||
|
|
||||||
if response.status_code == 200:
|
|
||||||
destination = f'{app_path}/locale/{locale}/LC_MESSAGES/django.po'
|
|
||||||
self.stdout.write(f'Saving to {destination}')
|
|
||||||
|
|
||||||
os.makedirs(os.path.dirname(destination), exist_ok=True)
|
|
||||||
|
|
||||||
with open(destination, 'wb') as f:
|
|
||||||
f.write(response.content)
|
|
||||||
|
|
||||||
self.stdout.write(self.style.SUCCESS(
|
|
||||||
f'Locale {locale} successfully saved to {destination}\n'))
|
|
||||||
|
|
||||||
else:
|
|
||||||
self.stdout.write(self.style.ERROR(
|
|
||||||
f'There was an error processing the request to {url}: {response.status_code}\n'))
|
|
||||||
errors += 1
|
|
||||||
|
|
||||||
if errors == len(trans_real.get_languages()):
|
|
||||||
self.stdout.write(self.style.ERROR('No locales could be downloaded.'))
|
|
||||||
elif errors > 1:
|
|
||||||
self.stdout.write(self.style.WARNING('There were errors getting some locales.'))
|
|
||||||
else:
|
|
||||||
self.stdout.write(self.style.SUCCESS('All translations fetched and written to message files.'))
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Aleo:wght@400;700&family=Lato:ital,wght@0,400;0,700;1,400;1,700&display=swap');
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
/* Primary */
|
/* Primary */
|
||||||
--pfl-color: #4c6e4dff;
|
--pfl-color: #4c6e4dff;
|
||||||
|
@ -20,6 +22,10 @@
|
||||||
--bs-heading-color: #000;
|
--bs-heading-color: #000;
|
||||||
--pfl-logo: url('/static/light.png');
|
--pfl-logo: url('/static/light.png');
|
||||||
--pfl-home-background: url('/static/home/home-light.webp');
|
--pfl-home-background: url('/static/home/home-light.webp');
|
||||||
|
|
||||||
|
--bs-body-font-family: 'Lato', sans-serif;
|
||||||
|
--pfl-heading-font-family: 'Aleo', serif;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
:root[data-bs-theme='dark'] {
|
:root[data-bs-theme='dark'] {
|
||||||
|
@ -53,6 +59,7 @@
|
||||||
--bs-btn-hover-border-color: var(--bg-pfl-color);
|
--bs-btn-hover-border-color: var(--bg-pfl-color);
|
||||||
--bs-btn-focus-shadow-rgb: 49, 132, 253;
|
--bs-btn-focus-shadow-rgb: 49, 132, 253;
|
||||||
--bs-btn-active-bg: var(--pfl-color);
|
--bs-btn-active-bg: var(--pfl-color);
|
||||||
|
--bs-btn-active-color: var(--bs-body-bg);
|
||||||
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,6 +68,9 @@
|
||||||
--bs-btn-hover-bg: var(--bg-pfl-brown);
|
--bs-btn-hover-bg: var(--bg-pfl-brown);
|
||||||
--bs-btn-color: var(--bs-heading-color);
|
--bs-btn-color: var(--bs-heading-color);
|
||||||
--bs-btn-hover-color: var(--bs-heading-color);
|
--bs-btn-hover-color: var(--bs-heading-color);
|
||||||
|
--bs-btn-active-bg: var(--bg-pfl-brown);
|
||||||
|
--bs-btn-active-color: var(--bs-heading-color);
|
||||||
|
--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
|
||||||
}
|
}
|
||||||
|
|
||||||
.bg-pfl {
|
.bg-pfl {
|
||||||
|
@ -86,10 +96,19 @@ a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btn,
|
||||||
|
.badge {
|
||||||
|
font-family: 'Lato', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
.nav-tabs .nav-link {
|
.nav-tabs .nav-link {
|
||||||
color: var(--pfl-primary-text)
|
color: var(--pfl-primary-text)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.navbar-brand {
|
||||||
|
font-family: var(--pfl-heading-font-family);
|
||||||
|
}
|
||||||
|
|
||||||
.pfl-logo {
|
.pfl-logo {
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
width: 2rem;
|
width: 2rem;
|
||||||
|
@ -159,4 +178,13 @@ a {
|
||||||
--bs-btn-hover-bg: var(--bg-pfl-orange);
|
--bs-btn-hover-bg: var(--bg-pfl-orange);
|
||||||
--bs-btn-hover-border-color: var(--bg-pfl-orange);
|
--bs-btn-hover-border-color: var(--bg-pfl-orange);
|
||||||
--bs-btn-active-bg: var(--pfl-orange);
|
--bs-btn-active-bg: var(--pfl-orange);
|
||||||
|
}
|
||||||
|
|
||||||
|
h1,
|
||||||
|
h2,
|
||||||
|
h3,
|
||||||
|
h4,
|
||||||
|
h5 {
|
||||||
|
font-family: var(--pfl-heading-font-family);
|
||||||
|
font-weight: 500;
|
||||||
}
|
}
|
|
@ -50,6 +50,7 @@ INSTALLED_APPS = [
|
||||||
"crispy_bootstrap5",
|
"crispy_bootstrap5",
|
||||||
"friendly_captcha",
|
"friendly_captcha",
|
||||||
"django.contrib.sitemaps",
|
"django.contrib.sitemaps",
|
||||||
|
"djangoloco",
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
crispy-bootstrap5==0.7
|
crispy-bootstrap5==0.7
|
||||||
Django==4.1.7
|
Django==4.1.10
|
||||||
|
djangoloco==1.0
|
||||||
django-bootstrap5==22.2
|
django-bootstrap5==22.2
|
||||||
django-crispy-forms==2.0
|
django-crispy-forms==2.0
|
||||||
django-jquery==3.1.0
|
django-jquery==3.1.0
|
||||||
|
|
Loading…
Reference in a new issue