Translation on Firefox Translations models; new logo

- Email translation moves from LibreTranslate to our own translator
  service (translator/): Mozilla's Firefox Translations models on the
  Bergamot engine, fastText language detection (176 languages). Polish,
  English, German, French, Spanish and Italian on first start (~350 MB
  instead of ~10 GB); Admin panel > Email translation installs and
  removes languages. Built and pushed as the `translator` image.
- Every message is translated paragraph by paragraph as plain text;
  names travel with their sentence and are kept only where the model
  changed them; a sentence start the model copied ("Enclosed") is tried
  again in lower case; list markers are not sent
- The Translate button shows only for installed languages
- New logo: favicon, app/maskable/iPhone icons, notification badge,
  email logo and calendar copy regenerated; BIMI logo rebuilt in SVG
  Tiny PS with its gradients; masks render in browsers
- Launch screen background is the app's dark grey

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-18 22:04:04 +02:00
co-authored by Claude Opus 5.5
parent 8a1b9979e9
commit 972e10876b
38 changed files with 1627 additions and 223 deletions
+10 -14
View File
@@ -158,22 +158,18 @@ services:
retries: 12
restart: unless-stopped
# Email translation (app/translation.py). The first start downloads every
# language model (several GB) into the volume; later starts reuse them.
libretranslate:
image: libretranslate/libretranslate:v1.9.6
environment:
LT_DISABLE_WEB_UI: "true"
LT_UPDATE_MODELS: "false"
# Email translation (translator/, app/translation.py): Firefox Translations
# models and fastText. The first start downloads the default languages
# (about 350 MB) into the volume; the admin panel adds more.
translator:
build:
context: ..
dockerfile: docker/Dockerfile.translator
image: webmail/translator:dev
ports:
- "127.0.0.1:5005:5000"
volumes:
- ltmodels:/home/libretranslate/.local
healthcheck:
test: ["CMD-SHELL", "python3 -c \"import urllib.request; urllib.request.urlopen('http://127.0.0.1:5000/languages', timeout=4)\""]
interval: 15s
timeout: 6s
retries: 240
- translatordata:/data
restart: unless-stopped
greenmail:
@@ -188,7 +184,7 @@ services:
- "127.0.0.1:3993:3993" # IMAPS
volumes:
ltmodels:
translatordata:
pgdata:
meilidata:
blobs: