Jelajahi Sumber

Merge pull request #5922 from mailcow/staging

2024-06
Niklas Meyer 1 tahun lalu
induk
melakukan
9c814cc182
73 mengubah file dengan 11304 tambahan dan 1344 penghapusan
  1. 1 1
      .github/workflows/rebuild_backup_image.yml
  2. 3 5
      data/Dockerfiles/acme/Dockerfile
  3. 8 0
      data/Dockerfiles/acme/acme.sh
  4. 1 1
      data/Dockerfiles/backup/Dockerfile
  5. 1 1
      data/Dockerfiles/clamd/Dockerfile
  6. 1 1
      data/Dockerfiles/dockerapi/Dockerfile
  7. 2 2
      data/Dockerfiles/dockerapi/modules/DockerApi.py
  8. 5 4
      data/Dockerfiles/dovecot/Dockerfile
  9. 52 3
      data/Dockerfiles/dovecot/docker-entrypoint.sh
  10. 7 0
      data/Dockerfiles/dovecot/optimize-fts.sh
  11. 1 1
      data/Dockerfiles/dovecot/sa-rules.sh
  12. 1 1
      data/Dockerfiles/netfilter/Dockerfile
  13. 10 10
      data/Dockerfiles/netfilter/main.py
  14. 1 1
      data/Dockerfiles/olefy/Dockerfile
  15. 1 1
      data/Dockerfiles/phpfpm/Dockerfile
  16. 1 1
      data/Dockerfiles/postfix/Dockerfile
  17. 0 6
      data/Dockerfiles/postfix/postfix.sh
  18. 1 1
      data/Dockerfiles/postfix/syslog-ng-redis_slave.conf
  19. 1 1
      data/Dockerfiles/postfix/syslog-ng.conf
  20. 9 6
      data/Dockerfiles/rspamd/Dockerfile
  21. 0 632
      data/Dockerfiles/rspamd/metadata_exporter.lua
  22. 15 1
      data/Dockerfiles/solr/solr.sh
  23. 1 1
      data/Dockerfiles/unbound/Dockerfile
  24. 5 1
      data/Dockerfiles/unbound/healthcheck.sh
  25. 1 1
      data/Dockerfiles/watchdog/Dockerfile
  26. 2 3
      data/conf/dovecot/dovecot.conf
  27. 1 1
      data/conf/postfix/anonymize_headers.pcre
  28. 10 10
      data/conf/postfix/main.cf
  29. 47 56
      data/conf/postfix/postscreen_access.cidr
  30. 0 16
      data/conf/rspamd/local.d/rbl.conf
  31. 0 40
      data/conf/rspamd/local.d/rbl_group.conf
  32. 7 0
      data/web/inc/ajax/container_ctrl.php
  33. 4 4
      data/web/inc/functions.inc.php
  34. 13 8
      data/web/inc/functions.rspamd.inc.php
  35. 0 1
      data/web/inc/header.inc.php
  36. 1 1
      data/web/inc/presets/sieve/sieve_1.yml
  37. 1 1
      data/web/js/site/user.js
  38. 765 17
      data/web/lang/lang.ca-es.json
  39. 33 10
      data/web/lang/lang.cs-cz.json
  40. 232 17
      data/web/lang/lang.da-dk.json
  41. 546 18
      data/web/lang/lang.es-es.json
  42. 420 18
      data/web/lang/lang.fi-fi.json
  43. 341 160
      data/web/lang/lang.fr-fr.json
  44. 1291 2
      data/web/lang/lang.gr-gr.json
  45. 913 15
      data/web/lang/lang.hu-hu.json
  46. 47 7
      data/web/lang/lang.it-it.json
  47. 303 17
      data/web/lang/lang.ko-kr.json
  48. 964 9
      data/web/lang/lang.lt-lt.json
  49. 698 73
      data/web/lang/lang.lv-lv.json
  50. 985 2
      data/web/lang/lang.nb-no.json
  51. 159 20
      data/web/lang/lang.nl-nl.json
  52. 890 15
      data/web/lang/lang.pl-pl.json
  53. 1051 17
      data/web/lang/lang.pt-pt.json
  54. 108 12
      data/web/lang/lang.ro-ro.json
  55. 91 11
      data/web/lang/lang.ru-ru.json
  56. 759 6
      data/web/lang/lang.si-si.json
  57. 59 11
      data/web/lang/lang.sk-sk.json
  58. 208 14
      data/web/lang/lang.sv-se.json
  59. 4 2
      data/web/lang/lang.tr-tr.json
  60. 12 5
      data/web/lang/lang.uk-ua.json
  61. 115 14
      data/web/lang/lang.zh-cn.json
  62. 22 5
      data/web/lang/lang.zh-tw.json
  63. 0 1
      data/web/templates/base.twig
  64. 1 1
      data/web/templates/debug.twig
  65. 1 1
      data/web/templates/user/tab-user-auth.twig
  66. 16 14
      docker-compose.yml
  67. 7 0
      generate_config.sh
  68. 0 1
      helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml
  69. 0 1
      helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml
  70. 1 2
      helper-scripts/docker-compose.override.yml.d/EXTERNAL_MYSQL_SOCKET/docker-compose.override.yml
  71. 0 1
      helper-scripts/docker-compose.override.yml.d/HAPROXY/docker-compose.override.yml
  72. 34 1
      helper-scripts/nextcloud.sh
  73. 13 0
      update.sh

+ 1 - 1
.github/workflows/rebuild_backup_image.yml

@@ -26,7 +26,7 @@ jobs:
           password: ${{ secrets.BACKUPIMAGEBUILD_ACTION_DOCKERHUB_TOKEN }}
 
       - name: Build and push
-        uses: docker/build-push-action@v5
+        uses: docker/build-push-action@v6
         with:
           context: .
           platforms: linux/amd64,linux/arm64

+ 3 - 5
data/Dockerfiles/acme/Dockerfile

@@ -1,8 +1,8 @@
-FROM alpine:3.18
+FROM alpine:3.20
 
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
-ARG PIP_BREAK_SYSTEM_PACKAGES=1
+
 RUN apk upgrade --no-cache \
   && apk add --update --no-cache \
   bash \
@@ -15,9 +15,7 @@ RUN apk upgrade --no-cache \
   tini \
   tzdata \
   python3 \
-  py3-pip \
-  && pip3 install --upgrade pip \
-  && pip3 install acme-tiny
+  acme-tiny --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community/
 
 COPY acme.sh /srv/acme.sh
 COPY functions.sh /srv/functions.sh

+ 8 - 0
data/Dockerfiles/acme/acme.sh

@@ -33,6 +33,10 @@ if [[ "${ONLY_MAILCOW_HOSTNAME}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
   ONLY_MAILCOW_HOSTNAME=y
 fi
 
+if [[ "${AUTODISCOVER_SAN}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
+  AUTODISCOVER_SAN=y
+fi
+
 # Request individual certificate for every domain
 if [[ "${ENABLE_SSL_SNI}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
   ENABLE_SSL_SNI=y
@@ -211,7 +215,11 @@ while true; do
       ADDITIONAL_SAN_ARR+=($i)
     fi
   done
+
+  if [[ ${AUTODISCOVER_SAN} == "y" ]]; then
+  # Fetch certs for autoconfig and autodiscover subdomains
   ADDITIONAL_WC_ARR+=('autodiscover' 'autoconfig')
+  fi
 
   if [[ ${SKIP_IP_CHECK} != "y" ]]; then
   # Start IP detection

+ 1 - 1
data/Dockerfiles/backup/Dockerfile

@@ -1,3 +1,3 @@
-FROM debian:bullseye-slim
+FROM debian:bookworm-slim
 
 RUN apt update && apt install pigz

+ 1 - 1
data/Dockerfiles/clamd/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.19
+FROM alpine:3.20
 
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 

+ 1 - 1
data/Dockerfiles/dockerapi/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.19
+FROM alpine:3.20
 
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 

+ 2 - 2
data/Dockerfiles/dockerapi/modules/DockerApi.py

@@ -358,8 +358,8 @@ class DockerApi:
         for line in cmd_response.split("\n"):
           if '$2$' in line:
             hash = line.strip()
-            hash_out = re.search('\$2\$.+$', hash).group(0)
-            rspamd_passphrase_hash = re.sub('[^0-9a-zA-Z\$]+', '', hash_out.rstrip())
+            hash_out = re.search(r'\$2\$.+$', hash).group(0)
+            rspamd_passphrase_hash = re.sub(r'[^0-9a-zA-Z\$]+', '', hash_out.rstrip())
             rspamd_password_filename = "/etc/rspamd/override.d/worker-controller-password.inc"
             cmd = '''/bin/echo 'enable_password = "%s";' > %s && cat %s''' % (rspamd_passphrase_hash, rspamd_password_filename, rspamd_password_filename)
             cmd_response = self.exec_cmd_container(container, cmd, user="_rspamd")

+ 5 - 4
data/Dockerfiles/dovecot/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.19
+FROM alpine:3.20
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 # renovate: datasource=github-releases depName=tianon/gosu versioning=semver-coerced extractVersion=^(?<version>.*)$
@@ -24,6 +24,7 @@ RUN addgroup -g 5000 vmail \
   envsubst \
   ca-certificates \
   curl \
+  coreutils \
   jq \
   lua \
   lua-cjson \
@@ -62,7 +63,7 @@ RUN addgroup -g 5000 vmail \
   perl-package-stash-xs \
   perl-par-packer \
   perl-parse-recdescent \
-  perl-lockfile-simple --repository=http://dl-cdn.alpinelinux.org/alpine/edge/community/ \
+  perl-lockfile-simple \
   libproc \
   perl-readonly \
   perl-regexp-common \
@@ -104,13 +105,12 @@ RUN addgroup -g 5000 vmail \
   dovecot-pigeonhole-plugin \
   dovecot-pop3d \
   dovecot-fts-solr \
+  dovecot-fts-flatcurve \
   && arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) \
   && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$arch" \
   && chmod +x /usr/local/bin/gosu \
   && gosu nobody true
 
-# RUN cpan LockFile::Simple
-
 COPY trim_logs.sh /usr/local/bin/trim_logs.sh
 COPY clean_q_aged.sh /usr/local/bin/clean_q_aged.sh
 COPY syslog-ng.conf /etc/syslog-ng/syslog-ng.conf
@@ -129,6 +129,7 @@ COPY stop-supervisor.sh /usr/local/sbin/stop-supervisor.sh
 COPY quarantine_notify.py /usr/local/bin/quarantine_notify.py
 COPY quota_notify.py /usr/local/bin/quota_notify.py
 COPY repl_health.sh /usr/local/bin/repl_health.sh
+COPY optimize-fts.sh /usr/local/bin/optimize-fts.sh
 
 ENTRYPOINT ["/docker-entrypoint.sh"]
 CMD exec /usr/bin/supervisord -c /etc/supervisor/supervisord.conf

+ 52 - 3
data/Dockerfiles/dovecot/docker-entrypoint.sh

@@ -29,6 +29,7 @@ ${REDIS_CMDLINE} SET DOVECOT_REPL_HEALTH 1 > /dev/null
 # Create missing directories
 [[ ! -d /etc/dovecot/sql/ ]] && mkdir -p /etc/dovecot/sql/
 [[ ! -d /etc/dovecot/lua/ ]] && mkdir -p /etc/dovecot/lua/
+[[ ! -d /etc/dovecot/conf.d/ ]] && mkdir -p /etc/dovecot/conf.d/
 [[ ! -d /var/vmail/_garbage ]] && mkdir -p /var/vmail/_garbage
 [[ ! -d /var/vmail/sieve ]] && mkdir -p /var/vmail/sieve
 [[ ! -d /etc/sogo ]] && mkdir -p /etc/sogo
@@ -109,7 +110,14 @@ EOF
 
 echo -n ${ACL_ANYONE} > /etc/dovecot/acl_anyone
 
-if [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
+if [[ "${FLATCURVE_EXPERIMENTAL}" =~ ^([yY][eE][sS]|[yY]) ]]; then
+echo -e "\e[33mActivating Flatcurve as FTS Backend...\e[0m"
+echo -e "\e[33mDepending on your previous setup a full reindex might be needed... \e[0m"
+echo -e "\e[34mVisit https://docs.mailcow.email/manual-guides/Dovecot/u_e-dovecot-fts/#fts-related-dovecot-commands to learn how to reindex\e[0m"
+echo -n 'quota acl zlib mail_crypt mail_crypt_acl mail_log notify fts fts_flatcurve listescape replication' > /etc/dovecot/mail_plugins
+echo -n 'quota imap_quota imap_acl acl zlib imap_zlib imap_sieve mail_crypt mail_crypt_acl notify mail_log fts fts_flatcurve listescape replication' > /etc/dovecot/mail_plugins_imap
+echo -n 'quota sieve acl zlib mail_crypt mail_crypt_acl fts fts_flatcurve notify listescape replication' > /etc/dovecot/mail_plugins_lmtp
+elif [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
 echo -n 'quota acl zlib mail_crypt mail_crypt_acl mail_log notify listescape replication' > /etc/dovecot/mail_plugins
 echo -n 'quota imap_quota imap_acl acl zlib imap_zlib imap_sieve mail_crypt mail_crypt_acl notify listescape replication mail_log' > /etc/dovecot/mail_plugins_imap
 echo -n 'quota sieve acl zlib mail_crypt mail_crypt_acl notify listescape replication' > /etc/dovecot/mail_plugins_lmtp
@@ -239,6 +247,47 @@ function script_deinit()
 end
 EOF
 
+# Temporarily set FTS depending on user choice inside mailcow.conf. Will be removed as soon as Solr is dropped
+if [[ "${FLATCURVE_EXPERIMENTAL}" =~ ^([yY][eE][sS]|[yY])$ ]]; then
+cat <<EOF > /etc/dovecot/conf.d/fts.conf
+# Autogenerated by mailcow
+plugin {
+    fts_autoindex = yes
+    fts_autoindex_exclude = \Junk
+    fts_autoindex_exclude2 = \Trash
+    fts = flatcurve
+
+    # These are not flatcurve settings, but required for Dovecot FTS. See
+    # Dovecot FTS Configuration link above for further information.
+    fts_languages = en es de
+    fts_tokenizer_generic = algorithm=simple
+    fts_tokenizers = generic email-address
+
+    # OPTIONAL: Recommended default FTS core configuration
+    fts_filters = normalizer-icu snowball stopwords
+    fts_filters_en = lowercase snowball english-possessive stopwords
+}
+EOF
+elif [[ ! "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])$ ]]; then
+cat <<EOF > /etc/dovecot/conf.d/fts.conf
+# Autogenerated by mailcow
+plugin {
+  fts = solr
+  fts_autoindex = yes
+  fts_autoindex_exclude = \Junk
+  fts_autoindex_exclude2 = \Trash
+  fts_solr = url=http://solr:8983/solr/dovecot-fts/
+
+  fts_tokenizers = generic email-address
+  fts_tokenizer_generic = algorithm=simple
+
+  fts_filters = normalizer-icu snowball stopwords
+  fts_filters_en = lowercase snowball english-possessive stopwords
+}
+EOF
+fi
+
+
 # Replace patterns in app-passdb.lua
 sed -i "s/__DBUSER__/${DBUSER}/g" /etc/dovecot/lua/passwd-verify.lua
 sed -i "s/__DBPASS__/${DBPASS}/g" /etc/dovecot/lua/passwd-verify.lua
@@ -343,7 +392,6 @@ mail_replica = tcp:${MAILCOW_REPLICA_IP}:${DOVEADM_REPLICA_PORT}
 EOF
 fi
 
-
 # 401 is user dovecot
 if [[ ! -s /mail_crypt/ecprivkey.pem || ! -s /mail_crypt/ecpubkey.pem ]]; then
 	openssl ecparam -name prime256v1 -genkey | openssl pkey -out /mail_crypt/ecprivkey.pem
@@ -387,7 +435,8 @@ chmod +x /usr/lib/dovecot/sieve/rspamd-pipe-ham \
   /usr/local/bin/maildir_gc.sh \
   /usr/local/sbin/stop-supervisor.sh \
   /usr/local/bin/quota_notify.py \
-  /usr/local/bin/repl_health.sh
+  /usr/local/bin/repl_health.sh \
+  /usr/local/bin/optimize-fts.sh
 
 # Prepare environment file for cronjobs
 printenv | sed 's/^\(.*\)$/export \1/g' > /source_env.sh

+ 7 - 0
data/Dockerfiles/dovecot/optimize-fts.sh

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+if [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ && ! "${FLATCURVE_EXPERIMENTAL}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
+    exit 0
+else
+    doveadm fts optimize -A
+fi

+ 1 - 1
data/Dockerfiles/dovecot/sa-rules.sh

@@ -11,7 +11,7 @@ else
 fi
 
 # Deploy
-curl --connect-timeout 15 --retry 10 --max-time 30 http://www.spamassassin.heinlein-support.de/$(dig txt 1.4.3.spamassassin.heinlein-support.de +short | tr -d '"' | tr -dc '0-9').tar.gz --output /tmp/sa-rules-heinlein.tar.gz
+curl --connect-timeout 15 --retry 10 --max-time 30 https://www.spamassassin.heinlein-support.de/$(dig txt 1.4.3.spamassassin.heinlein-support.de +short | tr -d '"' | tr -dc '0-9').tar.gz --output /tmp/sa-rules-heinlein.tar.gz
 if gzip -t /tmp/sa-rules-heinlein.tar.gz; then
   tar xfvz /tmp/sa-rules-heinlein.tar.gz -C /tmp/sa-rules-heinlein
   cat /tmp/sa-rules-heinlein/*cf > /etc/rspamd/custom/sa-rules

+ 1 - 1
data/Dockerfiles/netfilter/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.19
+FROM alpine:3.20
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 WORKDIR /app

+ 10 - 10
data/Dockerfiles/netfilter/main.py

@@ -80,16 +80,16 @@ def refreshF2bregex():
   global exit_code
   if not r.get('F2B_REGEX'):
     f2bregex = {}
-    f2bregex[1] = 'mailcow UI: Invalid password for .+ by ([0-9a-f\.:]+)'
-    f2bregex[2] = 'Rspamd UI: Invalid password by ([0-9a-f\.:]+)'
-    f2bregex[3] = 'warning: .*\[([0-9a-f\.:]+)\]: SASL .+ authentication failed: (?!.*Connection lost to authentication server).+'
-    f2bregex[4] = 'warning: non-SMTP command from .*\[([0-9a-f\.:]+)]:.+'
-    f2bregex[5] = 'NOQUEUE: reject: RCPT from \[([0-9a-f\.:]+)].+Protocol error.+'
-    f2bregex[6] = '-login: Disconnected.+ \(auth failed, .+\): user=.*, method=.+, rip=([0-9a-f\.:]+),'
-    f2bregex[7] = '-login: Aborted login.+ \(auth failed .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
-    f2bregex[8] = '-login: Aborted login.+ \(tried to use disallowed .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
-    f2bregex[9] = 'SOGo.+ Login from \'([0-9a-f\.:]+)\' for user .+ might not have worked'
-    f2bregex[10] = '([0-9a-f\.:]+) \"GET \/SOGo\/.* HTTP.+\" 403 .+'
+    f2bregex[1] = r'mailcow UI: Invalid password for .+ by ([0-9a-f\.:]+)'
+    f2bregex[2] = r'Rspamd UI: Invalid password by ([0-9a-f\.:]+)'
+    f2bregex[3] = r'warning: .*\[([0-9a-f\.:]+)\]: SASL .+ authentication failed: (?!.*Connection lost to authentication server).+'
+    f2bregex[4] = r'warning: non-SMTP command from .*\[([0-9a-f\.:]+)]:.+'
+    f2bregex[5] = r'NOQUEUE: reject: RCPT from \[([0-9a-f\.:]+)].+Protocol error.+'
+    f2bregex[6] = r'-login: Disconnected.+ \(auth failed, .+\): user=.*, method=.+, rip=([0-9a-f\.:]+),'
+    f2bregex[7] = r'-login: Aborted login.+ \(auth failed .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
+    f2bregex[8] = r'-login: Aborted login.+ \(tried to use disallowed .+\): user=.+, rip=([0-9a-f\.:]+), lip.+'
+    f2bregex[9] = r'SOGo.+ Login from \'([0-9a-f\.:]+)\' for user .+ might not have worked'
+    f2bregex[10] = r'([0-9a-f\.:]+) \"GET \/SOGo\/.* HTTP.+\" 403 .+'
     r.set('F2B_REGEX', json.dumps(f2bregex, ensure_ascii=False))
   else:
     try:

+ 1 - 1
data/Dockerfiles/olefy/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.19
+FROM alpine:3.20
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 ARG PIP_BREAK_SYSTEM_PACKAGES=1

+ 1 - 1
data/Dockerfiles/phpfpm/Dockerfile

@@ -1,4 +1,4 @@
-FROM php:8.2-fpm-alpine3.18
+FROM php:8.2-fpm-alpine3.20
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 # renovate: datasource=github-tags depName=krakjoe/apcu versioning=semver-coerced extractVersion=^v(?<version>.*)$

+ 1 - 1
data/Dockerfiles/postfix/Dockerfile

@@ -1,4 +1,4 @@
-FROM debian:bullseye-slim
+FROM debian:bookworm-slim
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 ARG DEBIAN_FRONTEND=noninteractive

+ 0 - 6
data/Dockerfiles/postfix/postfix.sh

@@ -415,12 +415,6 @@ postscreen_dnsbl_sites = wl.mailspike.net=127.0.0.[18;19;20]*-2
   b.barracudacentral.org=127.0.0.2*7
   bl.mailspike.net=127.0.0.2*5
   bl.mailspike.net=127.0.0.[10;11;12]*4
-  dnsbl.sorbs.net=127.0.0.10*8
-  dnsbl.sorbs.net=127.0.0.5*6
-  dnsbl.sorbs.net=127.0.0.7*3
-  dnsbl.sorbs.net=127.0.0.8*2
-  dnsbl.sorbs.net=127.0.0.6*2
-  dnsbl.sorbs.net=127.0.0.9*2
 EOF
 fi
 DNSBL_CONFIG=$(grep -v '^#' /opt/postfix/conf/dns_blocklists.cf | grep '\S')

+ 1 - 1
data/Dockerfiles/postfix/syslog-ng-redis_slave.conf

@@ -1,4 +1,4 @@
-@version: 3.28
+@version: 3.38
 @include "scl.conf"
 options {
   chain_hostnames(off);

+ 1 - 1
data/Dockerfiles/postfix/syslog-ng.conf

@@ -1,4 +1,4 @@
-@version: 3.28
+@version: 3.38
 @include "scl.conf"
 options {
   chain_hostnames(off);

+ 9 - 6
data/Dockerfiles/rspamd/Dockerfile

@@ -2,6 +2,7 @@ FROM debian:bullseye-slim
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 ARG DEBIAN_FRONTEND=noninteractive
+ARG RSPAMD_VER=rspamd_3.7.5-2~8c86c1676   
 ARG CODENAME=bullseye
 ENV LC_ALL C
 
@@ -12,11 +13,14 @@ RUN apt-get update && apt-get install -y \
   apt-transport-https \
   dnsutils \
   netcat \
-  && apt-key adv --fetch-keys https://rspamd.com/apt-stable/gpg.key \
-  && echo "deb https://rspamd.com/apt-stable/ $CODENAME main" > /etc/apt/sources.list.d/rspamd.list \
-  && apt-get update \
-  && apt-get --no-install-recommends -y install rspamd redis-tools procps nano \
-  && rm -rf /var/lib/apt/lists/* \
+  wget \
+  redis-tools \ 
+  procps \ 
+  nano \
+  && arch=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) \
+  && wget -P /tmp https://rspamd.com/apt-stable/pool/main/r/rspamd/${RSPAMD_VER}~${CODENAME}_${arch}.deb\
+  && apt install -y /tmp/${RSPAMD_VER}~${CODENAME}_${arch}.deb \
+  && rm -rf /var/lib/apt/lists/* /tmp/*\
   && apt-get autoremove --purge \
   && apt-get clean \
   && mkdir -p /run/rspamd \
@@ -25,7 +29,6 @@ RUN apt-get update && apt-get install -y \
   && sed -i 's/#analysis_keyword_table > 0/analysis_cat_table.macro_exist == "M"/g' /usr/share/rspamd/lualib/lua_scanners/oletools.lua
 
 COPY settings.conf /etc/rspamd/settings.conf
-COPY metadata_exporter.lua /usr/share/rspamd/plugins/metadata_exporter.lua
 COPY set_worker_password.sh /set_worker_password.sh
 COPY docker-entrypoint.sh /docker-entrypoint.sh
 

+ 0 - 632
data/Dockerfiles/rspamd/metadata_exporter.lua

@@ -1,632 +0,0 @@
---[[
-Copyright (c) 2016, Andrew Lewis <nerf@judo.za.org>
-Copyright (c) 2016, Vsevolod Stakhov <vsevolod@highsecure.ru>
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-]]--
-
-if confighelp then
-  return
-end
-
--- A plugin that pushes metadata (or whole messages) to external services
-
-local redis_params
-local lua_util = require "lua_util"
-local rspamd_http = require "rspamd_http"
-local rspamd_util = require "rspamd_util"
-local rspamd_logger = require "rspamd_logger"
-local ucl = require "ucl"
-local E = {}
-local N = 'metadata_exporter'
-
-local settings = {
-  pusher_enabled = {},
-  pusher_format = {},
-  pusher_select = {},
-  mime_type = 'text/plain',
-  defer = false,
-  mail_from = '',
-  mail_to = 'postmaster@localhost',
-  helo = 'rspamd',
-  email_template = [[From: "Rspamd" <$mail_from>
-To: $mail_to
-Subject: Spam alert
-Date: $date
-MIME-Version: 1.0
-Message-ID: <$our_message_id>
-Content-type: text/plain; charset=utf-8
-Content-Transfer-Encoding: 8bit
-
-Authenticated username: $user
-IP: $ip
-Queue ID: $qid
-SMTP FROM: $from
-SMTP RCPT: $rcpt
-MIME From: $header_from
-MIME To: $header_to
-MIME Date: $header_date
-Subject: $header_subject
-Message-ID: $message_id
-Action: $action
-Score: $score
-Symbols: $symbols]],
-}
-
-local function get_general_metadata(task, flatten, no_content)
-  local r = {}
-  local ip = task:get_from_ip()
-  if ip and ip:is_valid() then
-    r.ip = tostring(ip)
-  else
-    r.ip = 'unknown'
-  end
-  r.user = task:get_user() or 'unknown'
-  r.qid = task:get_queue_id() or 'unknown'
-  r.subject = task:get_subject() or 'unknown'
-  r.action = task:get_metric_action('default')
-
-  local s = task:get_metric_score('default')[1]
-  r.score = flatten and string.format('%.2f', s) or s
-
-  local fuzzy = task:get_mempool():get_variable("fuzzy_hashes", "fstrings")
-  if fuzzy and #fuzzy > 0 then
-    local fz = {}
-    for _,h in ipairs(fuzzy) do
-      table.insert(fz, h)
-    end
-    if not flatten then
-      r.fuzzy = fz
-    else
-      r.fuzzy = table.concat(fz, ', ')
-    end
-  else
-    r.fuzzy = 'unknown'
-  end
-
-  local rcpt = task:get_recipients('smtp')
-  if rcpt then
-    local l = {}
-    for _, a in ipairs(rcpt) do
-      table.insert(l, a['addr'])
-    end
-    if not flatten then
-      r.rcpt = l
-    else
-      r.rcpt = table.concat(l, ', ')
-    end
-  else
-    r.rcpt = 'unknown'
-  end
-  local from = task:get_from('smtp')
-  if ((from or E)[1] or E).addr then
-    r.from = from[1].addr
-  else
-    r.from = 'unknown'
-  end
-  local syminf = task:get_symbols_all()
-  if flatten then
-    local l = {}
-    for _, sym in ipairs(syminf) do
-      local txt
-      if sym.options then
-        local topt = table.concat(sym.options, ', ')
-        txt = sym.name .. '(' .. string.format('%.2f', sym.score) .. ')' .. ' [' .. topt .. ']'
-      else
-        txt = sym.name .. '(' .. string.format('%.2f', sym.score) .. ')'
-      end
-      table.insert(l, txt)
-    end
-    r.symbols = table.concat(l, '\n\t')
-  else
-    r.symbols = syminf
-  end
-  local function process_header(name)
-    local hdr = task:get_header_full(name)
-    if hdr then
-      local l = {}
-      for _, h in ipairs(hdr) do
-        table.insert(l, h.decoded)
-      end
-      if not flatten then
-        return l
-      else
-        return table.concat(l, '\n')
-      end
-    else
-      return 'unknown'
-    end
-  end
-  if not no_content then
-    r.header_from = process_header('from')
-    r.header_to = process_header('to')
-    r.header_subject = process_header('subject')
-    r.header_date = process_header('date')
-    r.message_id = task:get_message_id()
-  end
-  return r
-end
-
-local formatters = {
-  default = function(task)
-    return task:get_content(), {}
-  end,
-  email_alert = function(task, rule, extra)
-    local meta = get_general_metadata(task, true)
-    local display_emails = {}
-    local mail_targets = {}
-    meta.mail_from = rule.mail_from or settings.mail_from
-    local mail_rcpt = rule.mail_to or settings.mail_to
-    if type(mail_rcpt) ~= 'table' then
-      table.insert(display_emails, string.format('<%s>', mail_rcpt))
-      table.insert(mail_targets, mail_rcpt)
-    else
-      for _, e in ipairs(mail_rcpt) do
-        table.insert(display_emails, string.format('<%s>', e))
-        table.insert(mail_targets, mail_rcpt)
-      end
-    end
-    if rule.email_alert_sender then
-      local x = task:get_from('smtp')
-      if x and string.len(x[1].addr) > 0 then
-        table.insert(mail_targets, x)
-        table.insert(display_emails, string.format('<%s>', x[1].addr))
-      end
-    end
-    if rule.email_alert_user then
-      local x = task:get_user()
-      if x then
-        table.insert(mail_targets, x)
-        table.insert(display_emails, string.format('<%s>', x))
-      end
-    end
-    if rule.email_alert_recipients then
-      local x = task:get_recipients('smtp')
-      if x then
-        for _, e in ipairs(x) do
-          if string.len(e.addr) > 0 then
-            table.insert(mail_targets, e.addr)
-            table.insert(display_emails, string.format('<%s>', e.addr))
-          end
-        end
-      end
-    end
-    meta.mail_to = table.concat(display_emails, ', ')
-    meta.our_message_id = rspamd_util.random_hex(12) .. '@rspamd'
-    meta.date = rspamd_util.time_to_string(rspamd_util.get_time())
-    return lua_util.template(rule.email_template or settings.email_template, meta), { mail_targets = mail_targets}
-  end,
-  json = function(task)
-    return ucl.to_format(get_general_metadata(task), 'json-compact')
-  end
-}
-
-local function is_spam(action)
-  return (action == 'reject' or action == 'add header' or action == 'rewrite subject')
-end
-
-local selectors = {
-  default = function(task)
-    return true
-  end,
-  is_spam = function(task)
-    local action = task:get_metric_action('default')
-    return is_spam(action)
-  end,
-  is_spam_authed = function(task)
-    if not task:get_user() then
-      return false
-    end
-    local action = task:get_metric_action('default')
-    return is_spam(action)
-  end,
-  is_reject = function(task)
-    local action = task:get_metric_action('default')
-    return (action == 'reject')
-  end,
-  is_reject_authed = function(task)
-    if not task:get_user() then
-      return false
-    end
-    local action = task:get_metric_action('default')
-    return (action == 'reject')
-  end,
-}
-
-local function maybe_defer(task, rule)
-  if rule.defer then
-    rspamd_logger.warnx(task, 'deferring message')
-    task:set_pre_result('soft reject', 'deferred', N)
-  end
-end
-
-local pushers = {
-  redis_pubsub = function(task, formatted, rule)
-    local _,ret,upstream
-    local function redis_pub_cb(err)
-      if err then
-        rspamd_logger.errx(task, 'got error %s when publishing on server %s',
-            err, upstream:get_addr())
-        return maybe_defer(task, rule)
-      end
-      return true
-    end
-    ret,_,upstream = rspamd_redis_make_request(task,
-      redis_params, -- connect params
-      nil, -- hash key
-      true, -- is write
-      redis_pub_cb, --callback
-      'PUBLISH', -- command
-      {rule.channel, formatted} -- arguments
-    )
-    if not ret then
-      rspamd_logger.errx(task, 'error connecting to redis')
-      maybe_defer(task, rule)
-    end
-  end,
-  http = function(task, formatted, rule)
-    local function http_callback(err, code)
-      if err then
-        rspamd_logger.errx(task, 'got error %s in http callback', err)
-        return maybe_defer(task, rule)
-      end
-      if code ~= 200 then
-        rspamd_logger.errx(task, 'got unexpected http status: %s', code)
-        return maybe_defer(task, rule)
-      end
-      return true
-    end
-    local hdrs = {}
-    if rule.meta_headers then
-      local gm = get_general_metadata(task, false, true)
-      local pfx = rule.meta_header_prefix or 'X-Rspamd-'
-      for k, v in pairs(gm) do
-        if type(v) == 'table' then
-          hdrs[pfx .. k] = ucl.to_format(v, 'json-compact')
-        else
-          hdrs[pfx .. k] = v
-        end
-      end
-    end
-    rspamd_http.request({
-      task=task,
-      url=rule.url,
-      body=formatted,
-      callback=http_callback,
-      mime_type=rule.mime_type or settings.mime_type,
-      headers=hdrs,
-    })
-  end,
-  send_mail = function(task, formatted, rule, extra)
-    local lua_smtp = require "lua_smtp"
-    local function sendmail_cb(ret, err)
-      if not ret then
-        rspamd_logger.errx(task, 'SMTP export error: %s', err)
-        maybe_defer(task, rule)
-      end
-    end
-
-    lua_smtp.sendmail({
-      task = task,
-      host = rule.smtp,
-      port = rule.smtp_port or settings.smtp_port or 25,
-      from = rule.mail_from or settings.mail_from,
-      recipients = extra.mail_targets or rule.mail_to or settings.mail_to,
-      helo = rule.helo or settings.helo,
-      timeout = rule.timeout or settings.timeout,
-    }, formatted, sendmail_cb)
-  end,
-}
-
-local opts = rspamd_config:get_all_opt(N)
-if not opts then return end
-local process_settings = {
-  select = function(val)
-    selectors.custom = assert(load(val))()
-  end,
-  format = function(val)
-    formatters.custom = assert(load(val))()
-  end,
-  push = function(val)
-    pushers.custom = assert(load(val))()
-  end,
-  custom_push = function(val)
-    if type(val) == 'table' then
-      for k, v in pairs(val) do
-        pushers[k] = assert(load(v))()
-      end
-    end
-  end,
-  custom_select = function(val)
-    if type(val) == 'table' then
-      for k, v in pairs(val) do
-        selectors[k] = assert(load(v))()
-      end
-    end
-  end,
-  custom_format = function(val)
-    if type(val) == 'table' then
-      for k, v in pairs(val) do
-        formatters[k] = assert(load(v))()
-      end
-    end
-  end,
-  pusher_enabled = function(val)
-    if type(val) == 'string' then
-      if pushers[val] then
-        settings.pusher_enabled[val] = true
-      else
-        rspamd_logger.errx(rspamd_config, 'Pusher type: %s is invalid', val)
-      end
-    elseif type(val) == 'table' then
-      for _, v in ipairs(val) do
-        if pushers[v] then
-          settings.pusher_enabled[v] = true
-        else
-          rspamd_logger.errx(rspamd_config, 'Pusher type: %s is invalid', val)
-        end
-      end
-    end
-  end,
-}
-for k, v in pairs(opts) do
-  local f = process_settings[k]
-  if f then
-    f(opts[k])
-  else
-    settings[k] = v
-  end
-end
-if type(settings.rules) ~= 'table' then
-  -- Legacy config
-  settings.rules = {}
-  if not next(settings.pusher_enabled) then
-    if pushers.custom then
-      rspamd_logger.infox(rspamd_config, 'Custom pusher implicitly enabled')
-      settings.pusher_enabled.custom = true
-    else
-      -- Check legacy options
-      if settings.url then
-        rspamd_logger.warnx(rspamd_config, 'HTTP pusher implicitly enabled')
-        settings.pusher_enabled.http = true
-      end
-      if settings.channel then
-        rspamd_logger.warnx(rspamd_config, 'Redis Pubsub pusher implicitly enabled')
-        settings.pusher_enabled.redis_pubsub = true
-      end
-      if settings.smtp and settings.mail_to then
-        rspamd_logger.warnx(rspamd_config, 'SMTP pusher implicitly enabled')
-        settings.pusher_enabled.send_mail = true
-      end
-    end
-  end
-  if not next(settings.pusher_enabled) then
-    rspamd_logger.errx(rspamd_config, 'No push backend enabled')
-    return
-  end
-  if settings.formatter then
-    settings.format = formatters[settings.formatter]
-    if not settings.format then
-      rspamd_logger.errx(rspamd_config, 'No such formatter: %s', settings.formatter)
-      return
-    end
-  end
-  if settings.selector then
-    settings.select = selectors[settings.selector]
-    if not settings.select then
-      rspamd_logger.errx(rspamd_config, 'No such selector: %s', settings.selector)
-      return
-    end
-  end
-  for k in pairs(settings.pusher_enabled) do
-    local formatter = settings.pusher_format[k]
-    local selector = settings.pusher_select[k]
-    if not formatter then
-      settings.pusher_format[k] = settings.formatter or 'default'
-      rspamd_logger.infox(rspamd_config, 'Using default formatter for %s pusher', k)
-    else
-      if not formatters[formatter] then
-        rspamd_logger.errx(rspamd_config, 'No such formatter: %s - disabling %s', formatter, k)
-        settings.pusher_enabled.k = nil
-      end
-    end
-    if not selector then
-      settings.pusher_select[k] = settings.selector or 'default'
-      rspamd_logger.infox(rspamd_config, 'Using default selector for %s pusher', k)
-    else
-      if not selectors[selector] then
-        rspamd_logger.errx(rspamd_config, 'No such selector: %s - disabling %s', selector, k)
-        settings.pusher_enabled.k = nil
-      end
-    end
-  end
-  if settings.pusher_enabled.redis_pubsub then
-    redis_params = rspamd_parse_redis_server(N)
-    if not redis_params then
-      rspamd_logger.errx(rspamd_config, 'No redis servers are specified')
-      settings.pusher_enabled.redis_pubsub = nil
-    else
-      local r = {}
-      r.backend = 'redis_pubsub'
-      r.channel = settings.channel
-      r.defer = settings.defer
-      r.selector = settings.pusher_select.redis_pubsub
-      r.formatter = settings.pusher_format.redis_pubsub
-      settings.rules[r.backend:upper()] = r
-    end
-  end
-  if settings.pusher_enabled.http then
-    if not settings.url then
-      rspamd_logger.errx(rspamd_config, 'No URL is specified')
-      settings.pusher_enabled.http = nil
-    else
-      local r = {}
-      r.backend = 'http'
-      r.url = settings.url
-      r.mime_type = settings.mime_type
-      r.defer = settings.defer
-      r.selector = settings.pusher_select.http
-      r.formatter = settings.pusher_format.http
-      settings.rules[r.backend:upper()] = r
-    end
-  end
-  if settings.pusher_enabled.send_mail then
-    if not (settings.mail_to and settings.smtp) then
-      rspamd_logger.errx(rspamd_config, 'No mail_to and/or smtp setting is specified')
-      settings.pusher_enabled.send_mail = nil
-    else
-      local r = {}
-      r.backend = 'send_mail'
-      r.mail_to = settings.mail_to
-      r.mail_from = settings.mail_from
-      r.helo = settings.hello
-      r.smtp = settings.smtp
-      r.smtp_port = settings.smtp_port
-      r.email_template = settings.email_template
-      r.defer = settings.defer
-      r.selector = settings.pusher_select.send_mail
-      r.formatter = settings.pusher_format.send_mail
-      settings.rules[r.backend:upper()] = r
-    end
-  end
-  if not next(settings.pusher_enabled) then
-    rspamd_logger.errx(rspamd_config, 'No push backend enabled')
-    return
-  end
-elseif not next(settings.rules) then
-  lua_util.debugm(N, rspamd_config, 'No rules enabled')
-  return
-end
-if not settings.rules or not next(settings.rules) then
-  rspamd_logger.errx(rspamd_config, 'No rules enabled')
-  return
-end
-local backend_required_elements = {
-  http = {
-    'url',
-  },
-  smtp = {
-    'mail_to',
-    'smtp',
-  },
-  redis_pubsub = {
-    'channel',
-  },
-}
-local check_element = {
-  selector = function(k, v)
-    if not selectors[v] then
-      rspamd_logger.errx(rspamd_config, 'Rule %s has invalid selector %s', k, v)
-      return false
-    else
-      return true
-    end
-  end,
-  formatter = function(k, v)
-    if not formatters[v] then
-      rspamd_logger.errx(rspamd_config, 'Rule %s has invalid formatter %s', k, v)
-      return false
-    else
-      return true
-    end
-  end,
-}
-local backend_check = {
-  default = function(k, rule)
-    local reqset = backend_required_elements[rule.backend]
-    if reqset then
-      for _, e in ipairs(reqset) do
-        if not rule[e] then
-          rspamd_logger.errx(rspamd_config, 'Rule %s misses required setting %s', k, e)
-          settings.rules[k] = nil
-        end
-      end
-    end
-    for sett, v in pairs(rule) do
-      local f = check_element[sett]
-      if f then
-        if not f(sett, v) then
-          settings.rules[k] = nil
-        end
-      end
-    end
-  end,
-}
-backend_check.redis_pubsub = function(k, rule)
-  if not redis_params then
-    redis_params = rspamd_parse_redis_server(N)
-  end
-  if not redis_params then
-    rspamd_logger.errx(rspamd_config, 'No redis servers are specified')
-    settings.rules[k] = nil
-  else
-    backend_check.default(k, rule)
-  end
-end
-setmetatable(backend_check, {
-  __index = function()
-    return backend_check.default
-  end,
-})
-for k, v in pairs(settings.rules) do
-  if type(v) == 'table' then
-    local backend = v.backend
-    if not backend then
-      rspamd_logger.errx(rspamd_config, 'Rule %s has no backend', k)
-      settings.rules[k] = nil
-    elseif not pushers[backend] then
-      rspamd_logger.errx(rspamd_config, 'Rule %s has invalid backend %s', k, backend)
-      settings.rules[k] = nil
-    else
-      local f = backend_check[backend]
-      f(k, v)
-    end
-  else
-    rspamd_logger.errx(rspamd_config, 'Rule %s has bad type: %s', k, type(v))
-    settings.rules[k] = nil
-  end
-end
-
-local function gen_exporter(rule)
-  return function (task)
-    if task:has_flag('skip') then return end
-    local selector = rule.selector or 'default'
-    local selected = selectors[selector](task)
-    if selected then
-      lua_util.debugm(N, task, 'Message selected for processing')
-      local formatter = rule.formatter or 'default'
-      local formatted, extra = formatters[formatter](task, rule)
-      if formatted then
-        pushers[rule.backend](task, formatted, rule, extra)
-      else
-        lua_util.debugm(N, task, 'Formatter [%s] returned non-truthy value [%s]', formatter, formatted)
-      end
-    else
-      lua_util.debugm(N, task, 'Selector [%s] returned non-truthy value [%s]', selector, selected)
-    end
-  end
-end
-
-if not next(settings.rules) then
-  rspamd_logger.errx(rspamd_config, 'No rules enabled')
-  lua_util.disable_module(N, "config")
-end
-for k, r in pairs(settings.rules) do
-  rspamd_config:register_symbol({
-    name = 'EXPORT_METADATA_' .. k,
-    type = 'idempotent',
-    callback = gen_exporter(r),
-    priority = 10,
-    flags = 'empty,explicit_disable,ignore_passthrough',
-  })
-end

+ 15 - 1
data/Dockerfiles/solr/solr.sh

@@ -1,7 +1,15 @@
 #!/bin/bash
 
-if [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
+if [[ "${FLATCURVE_EXPERIMENTAL}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
+  echo "FLATCURVE_EXPERIMENTAL=y, skipping Solr but enabling Flatcurve as FTS for Dovecot!"
+  echo "Solr will be removed in the future!"
+  sleep 365d
+  exit 0
+elif [[ "${SKIP_SOLR}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
   echo "SKIP_SOLR=y, skipping Solr..."
+  echo "HINT: You could try the newer FTS Backend Flatcurve, which is currently in experimental state..."
+  echo "Simply set FLATCURVE_EXPERIMENTAL=y inside your mailcow.conf and restart the stack afterwards!"
+  echo "Solr will be removed in the future!"
   sleep 365d
   exit 0
 fi
@@ -57,5 +65,11 @@ if [[ "${1}" == "--bootstrap" ]]; then
   exit 0
 fi
 
+echo "Starting up Solr..."
+echo -e "\e[31mSolr is deprecated! You can try the new FTS System now by enabling FLATCURVE_EXPERIMENTAL=y inside mailcow.conf and restarting the stack\e[0m"
+echo -e "\e[31mSolr will be removed completely soon!\e[0m"
+
+sleep 15
+
 exec gosu solr solr-foreground
 

+ 1 - 1
data/Dockerfiles/unbound/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.18
+FROM alpine:3.20
 
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 

+ 5 - 1
data/Dockerfiles/unbound/healthcheck.sh

@@ -5,9 +5,13 @@ if [[ "${SKIP_UNBOUND_HEALTHCHECK}" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
     SKIP_UNBOUND_HEALTHCHECK=y
 fi
 
+# Reset logfile
+echo "$(date +"%Y-%m-%d %H:%M:%S"): Starting health check - logs can be found in /var/log/healthcheck.log"
+echo "$(date +"%Y-%m-%d %H:%M:%S"): Starting health check" > /var/log/healthcheck.log
+
 # Declare log function for logfile inside container
 function log_to_file() {
-    echo "$(date +"%Y-%m-%d %H:%M:%S"): $1" > /var/log/healthcheck.log
+    echo "$(date +"%Y-%m-%d %H:%M:%S"): $1" >> /var/log/healthcheck.log
 }
 
 # General Ping function to check general pingability

+ 1 - 1
data/Dockerfiles/watchdog/Dockerfile

@@ -1,4 +1,4 @@
-FROM alpine:3.18
+FROM alpine:3.20
 LABEL maintainer "The Infrastructure Company GmbH <info@servercow.de>"
 
 # Installation

+ 2 - 3
data/conf/dovecot/dovecot.conf

@@ -10,6 +10,7 @@
 auth_mechanisms = plain login
 #mail_debug = yes
 #auth_debug = yes
+#log_debug = category=fts-flatcurve # Activate Logging for Flatcurve FTS Searchings
 log_path = syslog
 disable_plaintext_auth = yes
 # Uncomment on NFS share
@@ -194,9 +195,6 @@ plugin {
   acl_shared_dict = file:/var/vmail/shared-mailboxes.db
   acl = vfile
   acl_user = %u
-  fts = solr
-  fts_autoindex = yes
-  fts_solr = url=http://solr:8983/solr/dovecot-fts/
   quota = dict:Userquota::proxy::sqlquota
   quota_rule2 = Trash:storage=+100%%
   sieve = /var/vmail/sieve/%u.sieve
@@ -305,6 +303,7 @@ replication_dsync_parameters = -d -l 30 -U -n INBOX
 !include_try /etc/dovecot/extra.conf
 !include_try /etc/dovecot/sogo-sso.conf
 !include_try /etc/dovecot/shared_namespace.conf
+!include_try /etc/dovecot/conf.d/fts.conf
 # </Includes>
 default_client_limit = 10400
 default_vsz_limit = 1024 M

+ 1 - 1
data/conf/postfix/anonymize_headers.pcre

@@ -1,6 +1,6 @@
 if /^\s*Received:.*Authenticated sender.*\(Postcow\)/
 #/^Received: from .*? \([\w-.]* \[.*?\]\)\s+\(Authenticated sender: (.+)\)\s+by.+\(Postcow\) with (E?SMTPS?A?) id ([A-F0-9]+).+;.*?/
-/^Received: from .*? \([\w-.]* \[.*?\]\)(.*|\n.*)\(Authenticated sender: (.+)\)\s+by.+\(Postcow\) with (.*)/
+/^Received: from .*? \([\w\-.]* \[.*?\]\)(.*|\n.*)\(Authenticated sender: (.+)\)\s+by.+\(Postcow\) with (.*)/
   REPLACE Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with $3
 endif
 if /^\s*Received: from.* \(.*dovecot-mailcow.*mailcow-network.*\).*\(Postcow\)/

+ 10 - 10
data/conf/postfix/main.cf

@@ -114,14 +114,14 @@ smtpd_tls_loglevel = 1
 
 # Mandatory protocols and ciphers are used when a connections is enforced to use TLS
 # Does _not_ apply to enforced incoming TLS settings per mailbox
-smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
-lmtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
-smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+smtp_tls_mandatory_protocols = >=TLSv1.2
+lmtp_tls_mandatory_protocols = >=TLSv1.2
+smtpd_tls_mandatory_protocols = >=TLSv1.2
 smtpd_tls_mandatory_ciphers = high
 
-smtp_tls_protocols = !SSLv2, !SSLv3
-lmtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
-smtpd_tls_protocols = !SSLv2, !SSLv3
+smtp_tls_protocols = >=TLSv1.2
+lmtp_tls_protocols = >=TLSv1.2
+smtpd_tls_protocols = >=TLSv1.2
 
 smtpd_tls_security_level = may
 tls_preempt_cipherlist = yes
@@ -163,12 +163,12 @@ transport_maps = pcre:/opt/postfix/conf/custom_transport.pcre,
   proxy:mysql:/opt/postfix/conf/sql/mysql_transport_maps.cf
 smtp_sasl_auth_soft_bounce = no
 postscreen_discard_ehlo_keywords = silent-discard, dsn, chunking
-smtpd_discard_ehlo_keywords = chunking
-compatibility_level = 2
+smtpd_discard_ehlo_keywords = chunking, silent-discard
+compatibility_level = 3.7
 smtputf8_enable = no
 # Define protocols for SMTPS and submission service
-submission_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
-smtps_smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
+submission_smtpd_tls_mandatory_protocols = >=TLSv1.2
+smtps_smtpd_tls_mandatory_protocols = >=TLSv1.2
 parent_domain_matches_subdomains = debug_peer_list,fast_flush_domains,mynetworks,qmqpd_authorized_clients
 
 # DO NOT EDIT ANYTHING BELOW #

+ 47 - 56
data/conf/postfix/postscreen_access.cidr

@@ -1,6 +1,6 @@
-# Whitelist generated by Postwhite v3.4 on Mon Apr  1 00:15:02 UTC 2024
+# Whitelist generated by Postwhite v3.4 on Sat Jun  1 00:15:02 UTC 2024
 # https://github.com/stevejenkins/postwhite/
-# 2009 total rules
+# 2000 total rules
 2a00:1450:4000::/36	permit
 2a01:111:f400::/48	permit
 2a01:111:f403:8000::/50	permit
@@ -13,14 +13,15 @@
 2.207.151.53	permit
 3.70.123.177	permit
 3.93.157.0/24	permit
+3.94.40.108	permit
 3.129.120.190	permit
-3.137.16.58	permit
 3.210.190.0/24	permit
 8.20.114.31	permit
 8.25.194.0/23	permit
 8.25.196.0/23	permit
 8.39.54.0/23	permit
 8.40.222.0/23	permit
+10.162.0.0/16	permit
 12.130.86.238	permit
 13.70.32.43	permit
 13.72.50.45	permit
@@ -32,12 +33,15 @@
 13.110.216.0/22	permit
 13.110.224.0/20	permit
 13.111.0.0/16	permit
+13.111.191.0/24	permit
 15.200.21.50	permit
 15.200.44.248	permit
 15.200.201.185	permit
+17.41.0.0/16	permit
 17.57.155.0/24	permit
 17.57.156.0/24	permit
 17.58.0.0/16	permit
+17.142.0.0/15	permit
 18.156.89.250	permit
 18.157.243.190	permit
 18.194.95.56	permit
@@ -65,10 +69,9 @@
 20.107.239.64/30	permit
 20.112.250.133	permit
 20.118.139.208/30	permit
-20.185.213.160/27	permit
-20.185.213.224/27	permit
+20.141.10.196	permit
+20.185.213.0/24	permit
 20.185.214.0/27	permit
-20.185.214.2	permit
 20.185.214.32/27	permit
 20.185.214.64/27	permit
 20.231.239.246	permit
@@ -121,7 +124,6 @@
 44.206.138.57	permit
 44.236.56.93	permit
 44.238.220.251	permit
-46.19.168.0/23	permit
 46.19.170.16	permit
 46.226.48.0/21	permit
 46.228.36.37	permit
@@ -182,11 +184,9 @@
 50.18.125.237	permit
 50.18.126.162	permit
 50.31.32.0/19	permit
-50.56.130.220	permit
-50.56.130.221	permit
+50.56.130.220/30	permit
 51.137.58.21	permit
 51.140.75.55	permit
-51.144.100.179	permit
 52.1.14.157	permit
 52.5.230.59	permit
 52.27.5.72	permit
@@ -194,18 +194,19 @@
 52.28.63.81	permit
 52.36.138.31	permit
 52.37.142.146	permit
+52.50.24.208	permit
 52.58.216.183	permit
 52.59.143.3	permit
 52.60.41.5	permit
 52.60.115.116	permit
 52.61.91.9	permit
 52.71.0.205	permit
-52.82.172.0/22	permit
 52.94.124.0/28	permit
 52.95.48.152/29	permit
 52.95.49.88/29	permit
 52.96.91.34	permit
 52.96.111.82	permit
+52.96.172.98	permit
 52.96.214.50	permit
 52.96.222.194	permit
 52.96.222.226	permit
@@ -215,7 +216,6 @@
 52.100.0.0/14	permit
 52.103.0.0/17	permit
 52.119.213.144/28	permit
-52.160.39.140	permit
 52.165.175.144	permit
 52.185.106.240/28	permit
 52.200.59.0/24	permit
@@ -227,15 +227,16 @@
 52.222.75.85	permit
 52.222.89.228	permit
 52.234.172.96/28	permit
+52.235.253.128	permit
 52.236.28.240/28	permit
 52.244.206.214	permit
 52.247.53.144	permit
 52.250.107.196	permit
 52.250.126.174	permit
 54.90.148.255	permit
+54.165.19.38	permit
 54.172.97.247	permit
 54.174.52.0/24	permit
-54.174.53.128/30	permit
 54.174.57.0/24	permit
 54.174.59.0/24	permit
 54.174.60.0/23	permit
@@ -267,7 +268,6 @@
 62.201.172.32/27	permit
 62.253.227.114	permit
 63.80.14.0/23	permit
-63.111.28.137	permit
 63.128.21.0/24	permit
 63.143.57.128/25	permit
 63.143.59.128/25	permit
@@ -283,17 +283,6 @@
 64.127.115.252	permit
 64.132.88.0/23	permit
 64.132.92.0/24	permit
-64.147.123.17	permit
-64.147.123.18	permit
-64.147.123.19	permit
-64.147.123.20	permit
-64.147.123.21	permit
-64.147.123.24	permit
-64.147.123.25	permit
-64.147.123.26	permit
-64.147.123.27	permit
-64.147.123.28	permit
-64.147.123.29	permit
 64.147.123.128/27	permit
 64.207.219.7	permit
 64.207.219.8	permit
@@ -351,21 +340,7 @@
 65.154.166.0/24	permit
 65.212.180.36	permit
 66.102.0.0/20	permit
-66.111.4.25	permit
-66.111.4.26	permit
-66.111.4.27	permit
-66.111.4.28	permit
-66.111.4.29	permit
-66.111.4.221	permit
-66.111.4.222	permit
-66.111.4.224	permit
-66.111.4.225	permit
-66.111.4.229	permit
-66.111.4.230	permit
 66.119.150.192/26	permit
-66.135.202.0/27	permit
-66.135.215.0/24	permit
-66.135.222.1	permit
 66.162.193.226/31	permit
 66.163.184.0/24	permit
 66.163.185.0/24	permit
@@ -471,6 +446,10 @@
 69.65.42.195	permit
 69.65.49.192/29	permit
 69.72.32.0/20	permit
+69.72.40.93	permit
+69.72.40.94/31	permit
+69.72.40.96/30	permit
+69.72.47.205	permit
 69.147.84.227	permit
 69.162.98.0/24	permit
 69.169.224.0/20	permit
@@ -479,7 +458,6 @@
 70.37.151.128/25	permit
 70.42.149.0/24	permit
 70.42.149.35	permit
-72.3.237.64/28	permit
 72.14.192.0/18	permit
 72.21.192.0/19	permit
 72.21.217.142	permit
@@ -1297,6 +1275,7 @@
 108.175.30.45	permit
 108.177.8.0/21	permit
 108.177.96.0/19	permit
+108.179.144.0/20	permit
 109.237.142.0/24	permit
 111.221.23.128/25	permit
 111.221.26.0/27	permit
@@ -1406,6 +1385,12 @@
 139.180.17.0/24	permit
 141.148.159.229	permit
 141.193.32.0/23	permit
+141.193.184.32/27	permit
+141.193.184.64/26	permit
+141.193.184.128/25	permit
+141.193.185.32/27	permit
+141.193.185.64/26	permit
+141.193.185.128/25	permit
 143.55.224.0/21	permit
 143.55.232.0/22	permit
 143.55.236.0/22	permit
@@ -1419,8 +1404,7 @@
 144.178.38.0/24	permit
 145.253.228.160/29	permit
 145.253.239.128/29	permit
-146.20.14.105	permit
-146.20.14.107	permit
+146.20.14.104/30	permit
 146.20.112.0/26	permit
 146.20.113.0/24	permit
 146.20.191.0/24	permit
@@ -1495,10 +1479,9 @@
 163.47.180.0/22	permit
 163.114.130.16	permit
 163.114.132.120	permit
-164.177.132.168	permit
-164.177.132.169	permit
-164.177.132.170	permit
-164.177.132.171	permit
+163.114.134.16	permit
+163.114.135.16	permit
+164.177.132.168/30	permit
 165.173.128.0/24	permit
 166.78.68.0/22	permit
 166.78.68.221	permit
@@ -1575,9 +1558,13 @@
 185.80.93.227	permit
 185.80.95.31	permit
 185.90.20.0/22	permit
+185.138.56.128/25	permit
 185.189.236.0/22	permit
 185.211.120.0/22	permit
 185.250.236.0/22	permit
+185.250.239.148	permit
+185.250.239.168	permit
+185.250.239.190	permit
 188.125.68.132	permit
 188.125.68.152/31	permit
 188.125.68.156	permit
@@ -1645,7 +1632,6 @@
 193.122.128.100	permit
 193.123.56.63	permit
 194.19.134.0/25	permit
-194.64.234.128/27	permit
 194.64.234.129	permit
 194.106.220.0/23	permit
 194.113.24.0/22	permit
@@ -1667,9 +1653,13 @@
 198.37.144.0/20	permit
 198.37.152.186	permit
 198.61.254.0/23	permit
+198.61.254.21	permit
 198.61.254.231	permit
 198.178.234.57	permit
 198.244.48.0/20	permit
+198.244.59.30	permit
+198.244.59.33	permit
+198.244.59.35	permit
 198.244.60.0/22	permit
 198.245.80.0/20	permit
 198.245.81.0/24	permit
@@ -1681,7 +1671,9 @@
 199.34.22.36	permit
 199.59.148.0/22	permit
 199.67.80.2	permit
+199.67.80.20	permit
 199.67.82.2	permit
+199.67.82.20	permit
 199.67.84.0/24	permit
 199.67.86.0/24	permit
 199.67.88.0/24	permit
@@ -1733,7 +1725,6 @@
 203.209.230.76/31	permit
 204.11.168.0/21	permit
 204.13.11.48/29	permit
-204.13.11.48/30	permit
 204.14.232.0/21	permit
 204.14.232.64/28	permit
 204.14.234.64/28	permit
@@ -1742,7 +1733,6 @@
 204.92.114.187	permit
 204.92.114.203	permit
 204.92.114.204/31	permit
-204.132.224.66	permit
 204.141.32.0/23	permit
 204.141.42.0/23	permit
 204.220.160.0/20	permit
@@ -1786,8 +1776,7 @@
 207.67.98.192/27	permit
 207.68.176.0/26	permit
 207.68.176.96/27	permit
-207.97.204.96	permit
-207.97.204.97	permit
+207.97.204.96/29	permit
 207.126.144.0/20	permit
 207.171.160.0/19	permit
 207.211.30.64/26	permit
@@ -1826,7 +1815,6 @@
 208.71.42.212/31	permit
 208.71.42.214	permit
 208.72.249.240/29	permit
-208.74.204.0/22	permit
 208.74.204.5	permit
 208.74.204.9	permit
 208.75.120.0/22	permit
@@ -1842,6 +1830,9 @@
 209.46.117.168	permit
 209.46.117.179	permit
 209.61.151.0/24	permit
+209.61.151.236	permit
+209.61.151.249	permit
+209.61.151.251	permit
 209.67.98.46	permit
 209.67.98.59	permit
 209.85.128.0/17	permit
@@ -1951,7 +1942,6 @@
 216.39.62.60/31	permit
 216.39.62.136/29	permit
 216.39.62.144/31	permit
-216.46.168.0/24	permit
 216.58.192.0/19	permit
 216.66.217.240/29	permit
 216.71.138.33	permit
@@ -1966,9 +1956,6 @@
 216.99.5.68	permit
 216.109.114.32/27	permit
 216.109.114.64/29	permit
-216.113.160.0/24	permit
-216.113.172.0/25	permit
-216.113.175.0/24	permit
 216.128.126.97	permit
 216.136.162.65	permit
 216.136.162.120/29	permit
@@ -1999,6 +1986,8 @@
 2603:1030:20e:3::23c	permit
 2603:1030:b:3::152	permit
 2603:1030:c02:8::14	permit
+2607:13c0:0001:0000:0000:0000:0000:7000/116	permit
+2607:13c0:0002:0000:0000:0000:0000:1000/116	permit
 2607:f8b0:4000::/36	permit
 2620:109:c003:104::/64	permit
 2620:109:c003:104::215	permit
@@ -2007,6 +1996,8 @@
 2620:109:c00d:104::/64	permit
 2620:10d:c090:400::8:1	permit
 2620:10d:c091:400::8:1	permit
+2620:10d:c09b:400::8:1	permit
+2620:10d:c09c:400::8:1	permit
 2620:119:50c0:207::/64	permit
 2620:119:50c0:207::215	permit
 2800:3f0:4000::/36	permit

+ 0 - 16
data/conf/rspamd/local.d/rbl.conf

@@ -1,20 +1,4 @@
 rbls {
-  sorbs { 
-    symbol = "RBL_SORBS"; 
-    rbl = "dnsbl.sorbs.net";  
-    returncodes { 
-      # http:// www.sorbs.net/general/using.shtml 
-      RBL_SORBS_HTTP = "127.0.0.2"; 
-      RBL_SORBS_SOCKS = "127.0.0.3";  
-      RBL_SORBS_MISC = "127.0.0.4"; 
-      RBL_SORBS_SMTP = "127.0.0.5"; 
-      RBL_SORBS_RECENT = "127.0.0.6"; 
-      RBL_SORBS_WEB = "127.0.0.7";  
-      RBL_SORBS_DUL = "127.0.0.10"; 
-      RBL_SORBS_BLOCK = "127.0.0.8";  
-      RBL_SORBS_ZOMBIE = "127.0.0.9"; 
-    } 
-  }
   interserver_ip {
     symbol = "RBL_INTERSERVER_IP";
     rbl = "rbl.interserver.net";

+ 0 - 40
data/conf/rspamd/local.d/rbl_group.conf

@@ -5,46 +5,6 @@ symbols = {
   "RBL_UCEPROTECT_LEVEL2" {
     score = 1.5;
   }
-  "RBL_SORBS" { 
-    score = 0.0;  
-    description = "Unrecognised result from SORBS RBL"; 
-  } 
-  "RBL_SORBS_HTTP" {  
-    score = 2.5;  
-    description = "List of Open HTTP Proxy Servers."; 
-  } 
-  "RBL_SORBS_SOCKS" { 
-    score = 2.5;  
-    description = "List of Open SOCKS Proxy Servers.";  
-  } 
-  "RBL_SORBS_MISC" {  
-    score = 1.0;  
-    description = "List of open Proxy Servers not listed in the SOCKS or HTTP lists.";  
-  } 
-  "RBL_SORBS_SMTP" {  
-    score = 4.0;  
-    description = "List of Open SMTP relay servers."; 
-  } 
-  "RBL_SORBS_RECENT" {  
-    score = 2.0;  
-    description = "List of hosts that have been noted as sending spam/UCE/UBE to the admins of SORBS within the last 28 days (includes new.spam.dnsbl.sorbs.net)."; 
-  } 
-  "RBL_SORBS_WEB" { 
-    score = 2.0;  
-    description = "List of web (WWW) servers which have spammer abusable vulnerabilities (e.g. FormMail scripts)";  
-  } 
-  "RBL_SORBS_DUL" { 
-    score = 2.0;  
-    description = "Dynamic IP Address ranges (NOT a Dial Up list!)";  
-  } 
-  "RBL_SORBS_BLOCK" { 
-    score = 0.5;  
-    description = "List of hosts demanding that they never be tested by SORBS.";  
-  } 
-  "RBL_SORBS_ZOMBIE" {  
-    score = 2.0;  
-    description = "List of networks hijacked from their original owners, some of which have already used for spamming.";  
-  }
   "RECEIVED_SPAMHAUS_XBL" {
     weight = 0.0;
     description = "Received address is listed in ZEN XBL";

+ 7 - 0
data/web/inc/ajax/container_ctrl.php

@@ -1,4 +1,11 @@
 <?php
+
+// Block requests by checking the 'Sec-Fetch-Dest' header.
+if (isset($_SERVER['HTTP_SEC_FETCH_DEST']) && $_SERVER['HTTP_SEC_FETCH_DEST'] !== 'empty') {
+  header('HTTP/1.1 403 Forbidden');
+  exit;
+}
+
 require_once $_SERVER['DOCUMENT_ROOT'] . '/inc/prerequisites.inc.php';
 if (!isset($_SESSION['mailcow_cc_role']) || $_SESSION['mailcow_cc_role'] != 'admin') {
 	exit();

+ 4 - 4
data/web/inc/functions.inc.php

@@ -284,17 +284,17 @@ function last_login($action, $username, $sasl_limit_days = 7, $ui_offset = 1) {
             }
             if (!$sasl[$k]['location']) {
               $curl = curl_init();
-              curl_setopt($curl, CURLOPT_URL,"https://dfdata.bella.network/lookup/" . $sasl[$k]['real_rip']);
+              curl_setopt($curl, CURLOPT_URL,"https://dfdata.bella.network/country/" . $sasl[$k]['real_rip']);
               curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
               curl_setopt($curl, CURLOPT_USERAGENT, 'Moocow');
               curl_setopt($curl, CURLOPT_TIMEOUT, 5);
               $ip_data = curl_exec($curl);
               if (!curl_errno($curl)) {
                 $ip_data_array = json_decode($ip_data, true);
-                if ($ip_data_array !== false and !empty($ip_data_array['location']['shortcountry'])) {
-                  $sasl[$k]['location'] = $ip_data_array['location']['shortcountry'];
+                if ($ip_data_array !== false and !empty($ip_data_array['shortcountry'])) {
+                  $sasl[$k]['location'] = $ip_data_array['shortcountry'];
                     try {
-                      $redis->hSet('IP_SHORTCOUNTRY', $sasl[$k]['real_rip'], $ip_data_array['location']['shortcountry']);
+                      $redis->hSet('IP_SHORTCOUNTRY', $sasl[$k]['real_rip'], $ip_data_array['shortcountry']);
                     }
                     catch (RedisException $e) {
                       $_SESSION['return'][] = array(

+ 13 - 8
data/web/inc/functions.rspamd.inc.php

@@ -145,17 +145,22 @@ function rspamd_maps($_action, $_data = null) {
       $maps = (array)$_data['map'];
       $valid_maps = array();
       foreach ($maps as $map) {
+        $is_valid = false;
         foreach ($RSPAMD_MAPS as $rspamd_map_type) {
-          if (!in_array($map, $rspamd_map_type)) {
-            $_SESSION['return'][] = array(
-              'type' => 'danger',
-              'log' => array(__FUNCTION__, $_action, '-'),
-              'msg' => array('global_map_invalid', $map)
-            );
-          } else {
-            array_push($valid_maps, $map);
+          if (in_array($map, $rspamd_map_type)) {
+            $is_valid = true;
+            break;
           }
         }
+        if ($is_valid) {
+          array_push($valid_maps, $map);
+        } else {
+          $_SESSION['return'][] = array(
+            'type' => 'danger',
+            'log' => array(__FUNCTION__, $_action, '-'),
+            'msg' => array('global_map_invalid', $map)
+          );
+        }
       }
       foreach ($valid_maps as $map) {
         try {

+ 0 - 1
data/web/inc/header.inc.php

@@ -49,7 +49,6 @@ $globalVariables = [
   'app_links' => customize('get', 'app_links'),
   'is_root_uri' => (parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) == '/'),
   'uri' => $_SERVER['REQUEST_URI'],
-  'last_login' => last_login('get', $_SESSION['mailcow_cc_username'], 7, 0)['ui']['time']
 ];
 
 foreach ($globalVariables as $globalVariableName => $globalVariableValue) {

+ 1 - 1
data/web/inc/presets/sieve/sieve_1.yml

@@ -1,7 +1,7 @@
 headline: lang.sieve_preset_1
 content: |
   require ["reject","body","regex"];
-  if anyof (body :raw :regex ["filename=.*\.doc","filename=.*\.exe","filename=.*\.moo"]) {
+  if anyof (body :raw :regex ["filename=\".*\\.(doc|exe|moo)\""]) {
     reject text:
   doc, exe and moo are dangerous file extensions.
   Why would you do that? I am a sad cow.

+ 1 - 1
data/web/js/site/user.js

@@ -676,5 +676,5 @@ jQuery(function($){
   onVisible("[id^=wl_policy_mailbox_table]", () => draw_wl_policy_mailbox_table());
   onVisible("[id^=sync_job_table]", () => draw_sync_job_table());
   onVisible("[id^=app_passwd_table]", () => draw_app_passwd_table());
-  last_logins('get');
+  onVisible("[id^=recent-logins]", () => last_logins('get'));
 });

+ 765 - 17
data/web/lang/lang.ca-es.json

@@ -19,7 +19,16 @@
         "spam_alias": "Àlies temporals",
         "spam_score": "Puntuació de correu brossa",
         "tls_policy": "Política TLS",
-        "unlimited_quota": "Quota ilimitada per bústies de correo"
+        "unlimited_quota": "Quota ilimitada per bústies de correo",
+        "delimiter_action": "",
+        "ratelimit": "",
+        "smtp_ip_access": "",
+        "sogo_access": "",
+        "domain_relayhost": "",
+        "extend_sender_acl": "",
+        "mailbox_relayhost": "",
+        "pushover": "",
+        "spam_policy": ""
     },
     "add": {
         "activate_filter_warn": "All other filters will be deactivated, when active is checked.",
@@ -73,7 +82,33 @@
         "validate": "Validar",
         "validation_success": "Validated successfully",
         "app_name": "Nom de l'aplicació",
-        "app_password": "Afegir contrasenya a l'aplicació"
+        "app_password": "Afegir contrasenya a l'aplicació",
+        "dry": "",
+        "inactive": "",
+        "disable_login": "",
+        "goto_ham": "",
+        "goto_spam": "",
+        "mailbox_quota_def": "",
+        "private_comment": "",
+        "public_comment": "",
+        "relay_unknown_only": "",
+        "relayhost_wrapped_tls_info": "",
+        "subscribeall": "",
+        "tags": "",
+        "timeout1": "",
+        "timeout2": "",
+        "relay_transport_info": "",
+        "domain_matches_hostname": "",
+        "gal": "",
+        "gal_info": "",
+        "generate": "",
+        "nexthop": "",
+        "app_passwd_protocols": "",
+        "bcc_dest_format": "",
+        "comment_info": "",
+        "custom_params": "",
+        "custom_params_hint": "",
+        "destination": ""
     },
     "admin": {
         "access": "Accés",
@@ -156,7 +191,167 @@
         "ui_texts": "Etiquetes i textos de la UI",
         "unchanged_if_empty": "Si no hi ha canvis, deixa'l en blanc",
         "upload": "Pujar",
-        "username": "Nom d'usuari"
+        "username": "Nom d'usuari",
+        "lookup_mx": "",
+        "logo_dark_label": "",
+        "optional": "",
+        "copy_to_clipboard": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "license_info": "",
+        "message": "",
+        "message_size": "",
+        "nexthop": "",
+        "no": "",
+        "no_active_bans": "",
+        "oauth2_apps": "",
+        "oauth2_client_secret": "",
+        "oauth2_info": "",
+        "password_policy_chars": "",
+        "password_policy_numbers": "",
+        "password_policy_special_chars": "",
+        "priority": "",
+        "quarantine_bcc": "",
+        "quarantine_max_size": "",
+        "quarantine_notification_html": "",
+        "quarantine_redirect": "",
+        "quarantine_release_format_att": "",
+        "quarantine_retention_size": "",
+        "quota_notification_html": "",
+        "quota_notification_subject": "",
+        "quota_notifications": "",
+        "relay_rcpt": "",
+        "relay_run": "",
+        "routing": "",
+        "rspamd_global_filters_regex": "",
+        "title": "",
+        "transport_maps": "",
+        "transport_test_rcpt_info": "",
+        "transports_hint": "",
+        "ui_header_announcement_active": "",
+        "validate_license_now": "",
+        "verify": "",
+        "yes": "",
+        "password_length": "",
+        "password_policy": "",
+        "logo_normal_label": "",
+        "f2b_max_ban_time": "",
+        "f2b_ban_time_increment": "",
+        "add_relayhost_hint": "",
+        "add_transport": "",
+        "add_transports_hint": "",
+        "admins": "",
+        "quarantine_exclude_domains": "",
+        "quarantine_max_age": "",
+        "quarantine_release_format_raw": "",
+        "quota_notification_sender": "",
+        "quota_notifications_info": "",
+        "quota_notifications_vars": "",
+        "r_active": "",
+        "r_inactive": "",
+        "rate_name": "",
+        "regex_maps": "",
+        "ui_header_announcement": "",
+        "cors_settings": "",
+        "allowed_methods": "",
+        "allowed_origins": "",
+        "oauth2_renew_secret": "",
+        "oauth2_revoke_tokens": "",
+        "send": "",
+        "success": "",
+        "sys_mails": "",
+        "text": "",
+        "time": "",
+        "unban_pending": "",
+        "ip_check": "",
+        "quarantine_notification_sender": "",
+        "dkim_domains_wo_keys": "",
+        "dkim_to": "",
+        "duplicate": "",
+        "excludes": "",
+        "f2b_blacklist": "",
+        "f2b_filter": "",
+        "guid": "",
+        "oauth2_add_client": "",
+        "rsetting_content": "",
+        "queue_unban": "",
+        "ip_check_disabled": "",
+        "ip_check_opt_in": "",
+        "options": "",
+        "relayhosts": "",
+        "reset_limit": "",
+        "rsetting_add_rule": "",
+        "rspamd_com_settings": "",
+        "ui_footer": "",
+        "dkim_from": "",
+        "admins_ldap": "",
+        "advanced_settings": "",
+        "api_info": "",
+        "api_read_only": "",
+        "api_read_write": "",
+        "api_skip_ip_check": "",
+        "arrival_time": "",
+        "authed_user": "",
+        "ays": "",
+        "activate_send": "",
+        "active_rspamd_settings_map": "",
+        "add_admin": "",
+        "add_settings_rule": "",
+        "oauth2_redirect_uri": "",
+        "domain_admin": "",
+        "password_policy_length": "",
+        "password_policy_lowerupper": "",
+        "quarantine_release_format": "",
+        "rsetting_none": "",
+        "rsettings_insert_preset": "",
+        "transport_dest_format": "",
+        "ban_list_info": "",
+        "convert_html_to_text": "",
+        "credentials_transport_warning": "",
+        "customer_id": "",
+        "destination": "",
+        "dkim_domains_selector": "",
+        "dkim_from_title": "",
+        "dkim_overwrite_key": "",
+        "dkim_to_title": "",
+        "domain_s": "",
+        "f2b_list_info": "",
+        "f2b_regex_info": "",
+        "from": "",
+        "generate": "",
+        "guid_and_license": "",
+        "hash_remove_info": "",
+        "html": "",
+        "include_exclude": "",
+        "include_exclude_info": "",
+        "includes": "",
+        "is_mx_based": "",
+        "last_applied": "",
+        "login_time": "",
+        "oauth2_client_id": "",
+        "quarantine_max_score": "",
+        "quarantine_notification_subject": "",
+        "rsetting_no_selection": "",
+        "rsettings_preset_1": "",
+        "rsettings_preset_2": "",
+        "rsettings_preset_3": "",
+        "rsettings_preset_4": "",
+        "rspamd_global_filters": "",
+        "rspamd_global_filters_agree": "",
+        "rspamd_global_filters_info": "",
+        "rspamd_settings_map": "",
+        "sal_level": "",
+        "service": "",
+        "service_id": "",
+        "ui_header_announcement_content": "",
+        "ui_header_announcement_help": "",
+        "ui_header_announcement_select": "",
+        "ui_header_announcement_type": "",
+        "ui_header_announcement_type_danger": "",
+        "ui_header_announcement_type_info": "",
+        "ui_header_announcement_type_warning": "",
+        "duplicate_dkim": "",
+        "r_info": ""
     },
     "danger": {
         "access_denied": "Accés denegat o dades incorrectes",
@@ -207,7 +402,87 @@
         "target_domain_invalid": "El domini \"goto\" no és vàlid",
         "targetd_not_found": "No s'ha trobat el domini destí",
         "username_invalid": "El nom d'usuari no es pot fer servir",
-        "validity_missing": "Si et plau posa un període de validesa"
+        "validity_missing": "Si et plau posa un període de validesa",
+        "webauthn_authenticator_failed": "",
+        "webauthn_publickey_failed": "",
+        "value_missing": "",
+        "unknown": "",
+        "app_name_empty": "",
+        "app_passwd_id_invalid": "",
+        "bcc_empty": "",
+        "invalid_bcc_map_type": "",
+        "invalid_filter_type": "",
+        "invalid_host": "",
+        "bcc_exists": "",
+        "bcc_must_be_email": "",
+        "comment_too_long": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "defquota_empty": "",
+        "extended_sender_acl_denied": "",
+        "extra_acl_invalid": "",
+        "extra_acl_invalid_domain": "",
+        "fido2_verification_failed": "",
+        "file_open_error": "",
+        "filter_type": "",
+        "from_invalid": "",
+        "global_filter_write_error": "",
+        "global_map_invalid": "",
+        "global_map_write_error": "",
+        "ham_learn_error": "",
+        "invalid_nexthop": "",
+        "invalid_recipient_map_new": "",
+        "invalid_destination": "",
+        "tfa_token_invalid": "",
+        "tls_policy_map_dest_invalid": "",
+        "rl_timeframe": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "invalid_nexthop_authenticated": "",
+        "invalid_recipient_map_old": "",
+        "private_key_error": "",
+        "pushover_credentials_missing": "",
+        "pushover_key": "",
+        "pushover_token": "",
+        "recipient_map_entry_exists": "",
+        "redis_error": "",
+        "relayhost_invalid": "",
+        "reset_f2b_regex": "",
+        "rspamd_ui_pw_length": "",
+        "script_empty": "",
+        "set_acl_failed": "",
+        "targetd_relay_domain": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "template_name_invalid": "",
+        "temp_error": "",
+        "text_empty": "",
+        "tls_policy_map_entry_exists": "",
+        "tls_policy_map_parameter_invalid": "",
+        "totp_verification_failed": "",
+        "transport_dest_exists": "",
+        "webauthn_verification_failed": "",
+        "webauthn_username_failed": "",
+        "unknown_tfa_method": "",
+        "unlimited_quota_acl": "",
+        "yotp_verification_failed": "",
+        "no_user_defined": "",
+        "demo_mode_enabled": "",
+        "dkim_domain_or_sel_exists": "",
+        "domain_cannot_match_hostname": "",
+        "ip_list_empty": "",
+        "settings_map_invalid": "",
+        "sieve_error": "",
+        "spam_learn_error": "",
+        "subject_empty": "",
+        "mailbox_defquota_exceeds_mailbox_maxquota": "",
+        "malformed_username": "",
+        "map_content_empty": "",
+        "mysql_error": "",
+        "network_host_invalid": "",
+        "next_hop_interferes": "",
+        "next_hop_interferes_any": "",
+        "nginx_reload_failed": ""
     },
     "diagnostics": {
         "cname_from_a": "Valor derivat de registre A/AAAA. Això és compatible sempre que el registre assenyali el recurs correcte.",
@@ -217,7 +492,8 @@
         "dns_records_name": "Nom",
         "dns_records_status": "Valor actual",
         "dns_records_type": "Tipus",
-        "optional": "Aquest registre és opcional."
+        "optional": "Aquest registre és opcional.",
+        "dns_records_docs": ""
     },
     "edit": {
         "active": "Actiu",
@@ -273,7 +549,82 @@
         "title": "Editar l'objecte",
         "unchanged_if_empty": "Si no hay cambios dejalo en blanco",
         "username": "Usuari",
-        "validate_save": "Validar i desar"
+        "validate_save": "Validar i desar",
+        "lookup_mx": "",
+        "acl": "",
+        "admin": "",
+        "allow_from_smtp": "",
+        "footer_exclude": "",
+        "domain_footer_skip_replies": "",
+        "domain_footer_plain": "",
+        "gal_info": "",
+        "grant_types": "",
+        "pushover": "",
+        "scope": "",
+        "custom_attributes": "",
+        "disable_login": "",
+        "none_inherit": "",
+        "pushover_info": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_info_vars": {
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": "",
+            "auth_user": "",
+            "from_user": "",
+            "custom": ""
+        },
+        "gal": "",
+        "mbox_rl_info": "",
+        "nexthop": "",
+        "private_comment": "",
+        "public_comment": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "sogo_visible": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "app_name": "",
+        "app_passwd": "",
+        "bcc_dest_format": "",
+        "client_id": "",
+        "client_secret": "",
+        "comment_info": "",
+        "created_on": "",
+        "delete_ays": "",
+        "domain_footer_info": "",
+        "inactive": "",
+        "extended_sender_acl": "",
+        "extended_sender_acl_info": "",
+        "last_modified": "",
+        "mailbox_quota_def": "",
+        "mailbox_relayhost_info": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "sender_acl_disabled": "",
+        "sender_acl_info": "",
+        "sogo_access_info": "",
+        "sogo_visible_info": "",
+        "timeout1": "",
+        "timeout2": "",
+        "generate": "",
+        "app_passwd_protocols": "",
+        "ratelimit": "",
+        "relayhost": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "quota_warning_bcc": "",
+        "quota_warning_bcc_info": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "spam_filter": "",
+        "advanced_settings": "",
+        "redirect_uri": "",
+        "sogo_access": ""
     },
     "footer": {
         "cancel": "Cancel·lar",
@@ -282,7 +633,13 @@
         "delete_these_items": "Si et plau confirma els canvis al objecte amb id:",
         "loading": "Si et plau espera ...",
         "restart_container_info": "<b>Important:</b> Un reinici pot trigar una estona, si et plau espera a que acabi.",
-        "restart_now": "Reiniciar ara"
+        "restart_now": "Reiniciar ara",
+        "hibp_check": "",
+        "hibp_nok": "",
+        "hibp_ok": "",
+        "nothing_selected": "",
+        "restart_container": "",
+        "restarting_container": ""
     },
     "header": {
         "administration": "Administració",
@@ -291,16 +648,24 @@
         "mailcow_config": "Configuració",
         "quarantine": "Quarantena",
         "restart_sogo": "Reiniciar SOGo",
-        "user_settings": "Preferències d'usuari"
+        "user_settings": "Preferències d'usuari",
+        "restart_netfilter": "",
+        "apps": "",
+        "mailcow_system": ""
     },
     "info": {
-        "no_action": "No hi ha cap acció aplicable"
+        "no_action": "No hi ha cap acció aplicable",
+        "awaiting_tfa_confirmation": "",
+        "session_expires": ""
     },
     "login": {
         "delayed": "Pots iniciar de sessió passats %s segons.",
         "login": "Inici de sessió",
         "password": "Contrasenya",
-        "username": "Nom d'usuari"
+        "username": "Nom d'usuari",
+        "fido2_webauthn": "",
+        "mobileconfig_info": "",
+        "other_logins": ""
     },
     "mailbox": {
         "action": "Acció",
@@ -385,7 +750,97 @@
         "tls_enforce_out": "Forçar TLS al enviar",
         "toggle_all": "Tots",
         "username": "Nom d'usuari",
-        "waiting": "Esperant"
+        "waiting": "Esperant",
+        "booking_0_short": "",
+        "booking_null": "",
+        "booking_custom": "",
+        "sieve_preset_8": "",
+        "sieve_preset_header": "",
+        "sogo_visible": "",
+        "stats": "",
+        "tls_policy_maps_long": "",
+        "quarantine_notification": "",
+        "recipient_map_old_info": "",
+        "table_size_show_n": "",
+        "tls_map_dest": "",
+        "tls_map_dest_info": "",
+        "sieve_preset_2": "",
+        "add_tls_policy_map": "",
+        "sieve_preset_3": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "table_size": "",
+        "tls_map_parameters": "",
+        "disable_x": "",
+        "domain_templates": "",
+        "last_pw_change": "",
+        "no": "",
+        "public_comment": "",
+        "q_add_header": "",
+        "q_reject": "",
+        "recipient": "",
+        "relay_unknown": "",
+        "sieve_preset_1": "",
+        "sieve_preset_7": "",
+        "tls_map_parameters_info": "",
+        "tls_map_policy": "",
+        "tls_policy_maps": "",
+        "dkim_domains_selector": "",
+        "templates": "",
+        "never": "",
+        "add_template": "",
+        "all_domains": "",
+        "allowed_protocols": "",
+        "bcc_map": "",
+        "booking_custom_short": "",
+        "booking_ltnull": "",
+        "booking_lt0_short": "",
+        "catch_all": "",
+        "created_on": "",
+        "daily": "",
+        "disable_login": "",
+        "domain_quota_total": "",
+        "enable_x": "",
+        "gal": "",
+        "goto_ham": "",
+        "goto_spam": "",
+        "hourly": "",
+        "insert_preset": "",
+        "last_mail_login": "",
+        "last_modified": "",
+        "mailbox": "",
+        "mailbox_defaults": "",
+        "mailbox_defaults_info": "",
+        "mailbox_defquota": "",
+        "mailbox_templates": "",
+        "open_logs": "",
+        "private_comment": "",
+        "q_all": "",
+        "quarantine_category": "",
+        "recipient_map_new_info": "",
+        "sender": "",
+        "sieve_preset_4": "",
+        "sieve_preset_5": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "template": "",
+        "tls_policy_maps_enforced_tls": "",
+        "tls_policy_maps_info": "",
+        "weekly": "",
+        "yes": "",
+        "sogo_visible_n": "",
+        "add_alias_expand": "",
+        "alias_domain_alias_hint": "",
+        "alias_domain_backupmx": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "sogo_visible_y": "",
+        "syncjob_check_log": "",
+        "syncjob_EX_OK": "",
+        "sieve_preset_6": ""
     },
     "quarantine": {
         "action": "Acció",
@@ -408,15 +863,59 @@
         "subj": "Assumpte",
         "text_from_html_content": "Contingut (a partir del HTML)",
         "text_plain_content": "Contingut (text/plain)",
-        "toggle_all": "Marcar tots"
+        "toggle_all": "Marcar tots",
+        "deliver_inbox": "",
+        "spam_score": "",
+        "table_size": "",
+        "type": "",
+        "learn_spam_delete": "",
+        "confirm": "",
+        "confirm_delete": "",
+        "danger": "",
+        "disabled_by_config": "",
+        "spam": "",
+        "download_eml": "",
+        "high_danger": "",
+        "info": "",
+        "junk_folder": "",
+        "low_danger": "",
+        "medium_danger": "",
+        "neutral_danger": "",
+        "notified": "",
+        "qhandler_success": "",
+        "qinfo": "",
+        "quick_delete_link": "",
+        "quick_info_link": "",
+        "quick_release_link": "",
+        "rspamd_result": "",
+        "sender_header": "",
+        "settings_info": "",
+        "table_size_show_n": "",
+        "refresh": "",
+        "rejected": "",
+        "rewrite_subject": ""
     },
     "queue": {
-        "queue_manager": "Queue Manager"
+        "queue_manager": "Queue Manager",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "show_message": "",
+        "unban": ""
     },
     "start": {
         "help": "Mostrar/Ocultar panell d'ajuda",
         "mailcow_apps_detail": "Tria una aplicació (de moment només SOGo) per a accedir als teus correus, calendari, contactes i més.",
-        "mailcow_panel_detail": "Els <b>administradors del domini</b> poden crear, modificar o esborrar bústies i àlies, configurar i obtenir informació detallada sobre els seus dominis<br>\r\n\tEls <b>usuaris d'e-mail</b> poden crear àlies temporals (spam àlies), canviar la seva contrasenya i la configuració del seu filtre anti-spam."
+        "mailcow_panel_detail": "Els <b>administradors del domini</b> poden crear, modificar o esborrar bústies i àlies, configurar i obtenir informació detallada sobre els seus dominis<br>\r\n\tEls <b>usuaris d'e-mail</b> poden crear àlies temporals (spam àlies), canviar la seva contrasenya i la configuració del seu filtre anti-spam.",
+        "imap_smtp_server_auth_info": ""
     },
     "success": {
         "admin_modified": "Els canvis fets a l'administrador s'han desat",
@@ -453,7 +952,56 @@
         "resource_modified": "S'han desat els canvis fets al recurs %s",
         "resource_removed": "S'ha esborrat el recurs %s",
         "ui_texts": "S'han desat els canvis als noms de App",
-        "upload_success": "El fitxer s'ha pujat"
+        "upload_success": "El fitxer s'ha pujat",
+        "template_removed": "",
+        "tls_policy_map_entry_deleted": "",
+        "app_passwd_added": "",
+        "bcc_saved": "",
+        "hash_deleted": "",
+        "ip_check_opt_in_modified": "",
+        "item_released": "",
+        "learned_ham": "",
+        "license_modified": "",
+        "logged_in_as": "",
+        "pushover_settings_edited": "",
+        "qlearn_spam": "",
+        "queue_command_success": "",
+        "recipient_map_entry_deleted": "",
+        "recipient_map_entry_saved": "",
+        "settings_map_removed": "",
+        "verified_fido2_login": "",
+        "global_filter_written": "",
+        "bcc_deleted": "",
+        "cors_headers_edited": "",
+        "db_init_complete": "",
+        "delete_filter": "",
+        "delete_filters": "",
+        "deleted_syncjob": "",
+        "deleted_syncjobs": "",
+        "domain_add_dkim_available": "",
+        "dkim_duplicated": "",
+        "sogo_profile_reset": "",
+        "template_modified": "",
+        "tls_policy_map_entry_saved": "",
+        "verified_webauthn_login": "",
+        "template_added": "",
+        "acl_saved": "",
+        "admin_added": "",
+        "admin_api_modified": "",
+        "admin_removed": "",
+        "app_passwd_removed": "",
+        "bcc_edited": "",
+        "domain_footer_modified": "",
+        "dovecot_restart_success": "",
+        "f2b_banlist_refreshed": "",
+        "rl_saved": "",
+        "rspamd_ui_pw_set": "",
+        "saved_settings": "",
+        "settings_map_added": "",
+        "verified_totp_login": "",
+        "verified_yotp_login": "",
+        "nginx_reloaded": "",
+        "password_policy_saved": ""
     },
     "tfa": {
         "api_register": "%s fa servir la Yubico Cloud API. Obté una API key per la teva clau <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">aquí</a>",
@@ -473,7 +1021,15 @@
         "webauthn": "Autenticació WebAuthn",
         "waiting_usb_auth": "<i>Esperant el dispositiu USB...</i><br><br>Apreta el botó del teu dispositiu USB WebAuthn ara.",
         "waiting_usb_register": "<i>Esperant el dispositiu USB...</i><br><br>Posa el teu password i confirma el registre del teu WebAuthn apretant el botó del teu dispositiiu USB WebAuthn.",
-        "yubi_otp": "Autenticació OTP de Yubico"
+        "yubi_otp": "Autenticació OTP de Yubico",
+        "reload_retry": "",
+        "authenticators": "",
+        "error_code": "",
+        "start_webauthn_validation": "",
+        "tfa_token_invalid": "",
+        "init_webauthn": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": ""
     },
     "user": {
         "action": "Acció",
@@ -556,6 +1112,198 @@
         "username": "Usuari",
         "waiting": "Esperant",
         "week": "Setmana",
-        "weeks": "Setmanes"
+        "weeks": "Setmanes",
+        "last_mail_login": "",
+        "last_pw_change": "",
+        "last_ui_login": "",
+        "login_history": "",
+        "open_logs": "",
+        "password": "",
+        "pushover_info": "",
+        "pushover_sender_array": "",
+        "app_hint": "",
+        "allowed_protocols": "",
+        "apple_connection_profile": "",
+        "apple_connection_profile_complete": "",
+        "apple_connection_profile_with_app_password": "",
+        "delete_ays": "",
+        "pushover_sound": "",
+        "years": "",
+        "daily": "",
+        "attribute": "",
+        "hourly": "",
+        "mailbox": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_only_x_prio": "",
+        "q_add_header": "",
+        "quarantine_notification": "",
+        "sogo_profile_reset": "",
+        "app_passwds": "",
+        "created_on": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "create_app_passwd": "",
+        "month": "",
+        "months": "",
+        "open_webmail_sso": "",
+        "password_repeat": "",
+        "pushover_text": "",
+        "quarantine_notification_info": "",
+        "recent_successful_connections": "",
+        "save": "",
+        "sender_acl_disabled": "",
+        "sogo_profile_reset_now": "",
+        "verify": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_check_log": "",
+        "title": "",
+        "apple_connection_profile_mailonly": "",
+        "expire_in": "",
+        "fido2_webauthn": "",
+        "pushover_sender_regex": "",
+        "pushover_title": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "q_all": "",
+        "quarantine_category": "",
+        "quarantine_category_info": "",
+        "sogo_profile_reset_help": "",
+        "spam_score_reset": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "value": "",
+        "with_app_password": "",
+        "year": "",
+        "from": "",
+        "text": "",
+        "q_reject": "",
+        "generate": "",
+        "advanced_settings": "",
+        "app_name": "",
+        "direct_protocol_access": "",
+        "email": "",
+        "email_and_dav": "",
+        "empty": "",
+        "never": "",
+        "no_last_login": "",
+        "weekly": ""
+    },
+    "datatables": {
+        "decimal": "",
+        "infoPostFix": "",
+        "collapse_all": "",
+        "emptyTable": "",
+        "expand_all": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "lengthMenu": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "paginate": {
+            "first": "",
+            "last": "",
+            "next": "",
+            "previous": ""
+        },
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "thousands": ""
+    },
+    "debug": {
+        "history_all_servers": "",
+        "architecture": "",
+        "containers_info": "",
+        "container_running": "",
+        "docs": "",
+        "login_time": "",
+        "logs": "",
+        "error_show_ip": "",
+        "external_logs": "",
+        "in_memory_logs": "",
+        "jvm_memory_solr": "",
+        "last_modified": "",
+        "log_info": "",
+        "memory": "",
+        "online_users": "",
+        "restart_container": "",
+        "show_ip": "",
+        "size": "",
+        "solr_status": "",
+        "started_at": "",
+        "started_on": "",
+        "static_logs": "",
+        "success": "",
+        "system_containers": "",
+        "timezone": "",
+        "uptime": "",
+        "update_available": "",
+        "no_update_available": "",
+        "chart_this_server": "",
+        "container_disabled": "",
+        "container_stopped": "",
+        "cores": "",
+        "current_time": "",
+        "disk_usage": "",
+        "solr_dead": "",
+        "update_failed": "",
+        "username": "",
+        "wip": "",
+        "service": ""
+    },
+    "warning": {
+        "domain_added_sogo_failed": "",
+        "dovecot_restart_failed": "",
+        "fuzzy_learn_error": "",
+        "hash_not_found": "",
+        "no_active_admin": "",
+        "quota_exceeded_scope": "",
+        "cannot_delete_self": "",
+        "session_token": "",
+        "session_ua": "",
+        "ip_invalid": "",
+        "is_not_primary_alias": ""
+    },
+    "ratelimit": {
+        "hour": "",
+        "day": "",
+        "disabled": "",
+        "second": "",
+        "minute": ""
+    },
+    "oauth2": {
+        "permit": "",
+        "profile": "",
+        "scope_ask_permission": "",
+        "authorize_app": "",
+        "deny": "",
+        "profile_desc": "",
+        "access_denied": ""
+    },
+    "fido2": {
+        "confirm": "",
+        "fido2_auth": "",
+        "fido2_success": "",
+        "fido2_validation_failed": "",
+        "fn": "",
+        "known_ids": "",
+        "register_status": "",
+        "rename": "",
+        "set_fido2": "",
+        "set_fido2_touchid": "",
+        "set_fn": "",
+        "start_fido2_validation": "",
+        "none": ""
     }
 }

+ 33 - 10
data/web/lang/lang.cs-cz.json

@@ -346,7 +346,12 @@
         "f2b_ban_time_increment": "Délka banu je prodlužována s každým dalším banem",
         "f2b_max_ban_time": "Maximální délka banu (s)",
         "cors_settings": "Nastavení CORS",
-        "queue_unban": "zrušit ban"
+        "queue_unban": "zrušit ban",
+        "copy_to_clipboard": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "allowed_methods": "",
+        "allowed_origins": ""
     },
     "danger": {
         "access_denied": "Přístup odepřen nebo jsou neplatná data ve formuláři",
@@ -475,7 +480,9 @@
         "webauthn_publickey_failed": "Pro vybraný ověřovací prostředek nebyl uložen žádný veřejný klíč",
         "webauthn_username_failed": "Zvolený ověřovací prostředek patří k jinému účtu",
         "extended_sender_acl_denied": "chybějící ACL pro nastavení externích adres odesílatele",
-        "demo_mode_enabled": "Demo režim je zapnutý"
+        "demo_mode_enabled": "Demo režim je zapnutý",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": ""
     },
     "datatables": {
         "emptyTable": "Tabulka neobsahuje žádná data",
@@ -500,7 +507,8 @@
         "decimal": ",",
         "thousands": " ",
         "collapse_all": "Sbalit vše",
-        "expand_all": "Rozbalit vše"
+        "expand_all": "Rozbalit vše",
+        "infoPostFix": ""
     },
     "debug": {
         "chart_this_server": "Graf (tento server)",
@@ -540,7 +548,8 @@
         "update_failed": "Nepodařilo se zkontrolovat aktualizace",
         "wip": "Nedokončená vývojová verze",
         "memory": "Paměť",
-        "container_disabled": "Kontejner je zastaven nebo zakázán"
+        "container_disabled": "Kontejner je zastaven nebo zakázán",
+        "cores": ""
     },
     "diagnostics": {
         "cname_from_a": "Hodnota odvozena z A/AAAA záznamu. Lze použít, pokud záznam ukazuje na správný zdroj.",
@@ -672,12 +681,17 @@
             "auth_user": "{= auth_user =} - Ověřené uživatelské jméno zadané MTA",
             "from_user": "{= from_user =}    - uživatelská část odesílatele, např. pro \"moo@mailcow.tld\" vrátí \"moo\"",
             "from_domain": "{= from_domain =} - Doména odesílatele",
-            "from_addr": "{= from_addr =} - E-mailová adresa odesílatele"
+            "from_addr": "{= from_addr =} - E-mailová adresa odesílatele",
+            "custom": ""
         },
         "domain_footer": "Patička pro celou doménu",
         "domain_footer_html": "HTML text",
         "domain_footer_plain": "Prostý text",
-        "pushover_sound": "Zvukové upozornění"
+        "pushover_sound": "Zvukové upozornění",
+        "footer_exclude": "",
+        "custom_attributes": "",
+        "domain_footer_skip_replies": "",
+        "pushover": ""
     },
     "fido2": {
         "confirm": "Potvrdit",
@@ -985,7 +999,8 @@
         "hold_mail_legend": "Podrží vybrané e-maily. (Zabrání dalším pokusům o doručení)",
         "show_message": "Zobrazit zprávu",
         "unhold_mail": "Uvolnit",
-        "unhold_mail_legend": "Uvolnit vybrané e-maily k doručení. (Pouze v případě předchozího podržení)"
+        "unhold_mail_legend": "Uvolnit vybrané e-maily k doručení. (Pouze v případě předchozího podržení)",
+        "unban": ""
     },
     "ratelimit": {
         "disabled": "Vypnuto",
@@ -1081,7 +1096,10 @@
         "verified_webauthn_login": "WebAuthn přihlášení ověřeno",
         "verified_yotp_login": "Yubico OTP přihlášení ověřeno",
         "cors_headers_edited": "Nastavení CORS byla uložena",
-        "domain_footer_modified": "Změny patičky domény %s byly uloženy"
+        "domain_footer_modified": "Změny patičky domény %s byly uloženy",
+        "f2b_banlist_refreshed": "",
+        "domain_add_dkim_available": "",
+        "ip_check_opt_in_modified": ""
     },
     "tfa": {
         "api_register": "%s používá Yubico Cloud API. Prosím získejte API klíč pro své Yubico <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">ZDE</a>",
@@ -1106,7 +1124,10 @@
         "webauthn": "WebAuthn ověření",
         "waiting_usb_auth": "<i>Čeká se na USB zařízení...</i><br><br>Prosím stiskněte tlačítko na svém WebAuthn USB zařízení.",
         "waiting_usb_register": "<i>Čeká se na USB zařízení...</i><br><br>Prosím zadejte své heslo výše a potvrďte WebAuthn registraci stiskem tlačítka na svém WebAuthn USB zařízení.",
-        "yubi_otp": "Yubico OTP ověření"
+        "yubi_otp": "Yubico OTP ověření",
+        "authenticators": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": ""
     },
     "user": {
         "action": "Akce",
@@ -1268,7 +1289,9 @@
         "with_app_password": "s heslem aplikace",
         "year": "rok",
         "years": "let",
-        "pushover_sound": "Zvukové upozornění"
+        "pushover_sound": "Zvukové upozornění",
+        "attribute": "",
+        "value": ""
     },
     "warning": {
         "cannot_delete_self": "Nelze smazat právě přihlášeného uživatele",

+ 232 - 17
data/web/lang/lang.da-dk.json

@@ -107,7 +107,8 @@
         "validation_success": "Valideret med succes",
         "bcc_dest_format": "BCC-destination skal være en enkelt gyldig e-mail-adresse.<br>Hvis du har brug for at sende en kopi til flere adresser, kan du oprette et alias og bruge det her.",
         "app_passwd_protocols": "Tilladte protokoller for app adgangskode",
-        "tags": "Tag's"
+        "tags": "Tag's",
+        "dry": ""
     },
     "admin": {
         "access": "Adgang",
@@ -317,7 +318,40 @@
         "yes": "&#10003;",
         "ip_check_opt_in": "Opt-In for brug af tredjepartstjeneste <strong>ipv4.mailcow.email</strong> og <strong>ipv6.mailcow.email</strong> til at finde eksterne IP-adresser.",
         "queue_unban": "unban",
-        "admins": "Administratorer"
+        "admins": "Administratorer",
+        "copy_to_clipboard": "",
+        "f2b_ban_time_increment": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "f2b_max_ban_time": "",
+        "cors_settings": "",
+        "allowed_origins": "",
+        "allowed_methods": "",
+        "options": "",
+        "password_length": "",
+        "password_policy": "",
+        "password_policy_chars": "",
+        "password_policy_length": "",
+        "ip_check": "",
+        "login_time": "",
+        "oauth2_apps": "",
+        "oauth2_add_client": "",
+        "password_policy_lowerupper": "",
+        "password_policy_numbers": "",
+        "password_policy_special_chars": "",
+        "relay_rcpt": "",
+        "service": "",
+        "transport_test_rcpt_info": "",
+        "ip_check_disabled": "",
+        "rsettings_preset_4": "",
+        "convert_html_to_text": "",
+        "success": "",
+        "is_mx_based": "",
+        "admins_ldap": "",
+        "api_read_only": "",
+        "api_read_write": ""
     },
     "danger": {
         "access_denied": "Adgang nægtet eller ugyldig formular data",
@@ -435,7 +469,20 @@
         "validity_missing": "Tildel venligst en gyldighedsperiode",
         "value_missing": "Angiv alle værdier",
         "yotp_verification_failed": "Yubico OTP verifikationen mislykkedes: %s",
-        "webauthn_publickey_failed": "Der er ikke gemt nogen offentlig nøgle for den valgte autentifikator"
+        "webauthn_publickey_failed": "Der er ikke gemt nogen offentlig nøgle for den valgte autentifikator",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "webauthn_authenticator_failed": "",
+        "webauthn_username_failed": "",
+        "nginx_reload_failed": "",
+        "template_exists": "",
+        "extended_sender_acl_denied": "",
+        "extra_acl_invalid_domain": "",
+        "template_id_invalid": "",
+        "template_name_invalid": "",
+        "demo_mode_enabled": ""
     },
     "debug": {
         "chart_this_server": "Diagram (denne server)",
@@ -453,7 +500,30 @@
         "started_on": "Startede den",
         "static_logs": "Statiske logfiler",
         "system_containers": "System og Beholdere",
-        "error_show_ip": "Kunne ikke finde de offentlige IP-adresser"
+        "error_show_ip": "Kunne ikke finde de offentlige IP-adresser",
+        "update_available": "",
+        "username": "",
+        "timezone": "",
+        "started_at": "",
+        "success": "",
+        "uptime": "",
+        "architecture": "",
+        "container_running": "",
+        "cores": "",
+        "current_time": "",
+        "docs": "",
+        "last_modified": "",
+        "login_time": "",
+        "memory": "",
+        "show_ip": "",
+        "size": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "wip": "",
+        "online_users": "",
+        "service": "",
+        "container_disabled": "",
+        "container_stopped": ""
     },
     "diagnostics": {
         "cname_from_a": "Værdi afledt af A / AAAA-post. Dette understøttes, så længe posten peger på den korrekte ressource.",
@@ -568,7 +638,34 @@
         "admin": "Rediger administrator",
         "lookup_mx": "Destination er et regulært udtryk, der matcher MX-navnet (<code>.*google\\.dk</code> for at dirigere al e-mail, der er målrettet til en MX, der ender på google.dk, over dette hop)",
         "mailbox_relayhost_info": "Anvendt på postkassen og kun direkte aliasser, og overskriver et domæne relæ-host.",
-        "quota_warning_bcc": "Kvoteadvarsel BCC"
+        "quota_warning_bcc": "Kvoteadvarsel BCC",
+        "footer_exclude": "",
+        "custom_attributes": "",
+        "last_modified": "",
+        "app_passwd_protocols": "",
+        "created_on": "",
+        "domain_footer_info_vars": {
+            "custom": "",
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": ""
+        },
+        "domain_footer_skip_replies": "",
+        "spam_filter": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_info": "",
+        "domain_footer_plain": "",
+        "sogo_access_info": "",
+        "acl": "",
+        "none_inherit": "",
+        "pushover": "",
+        "pushover_sound": "",
+        "quota_warning_bcc_info": "",
+        "ratelimit": "",
+        "sogo_access": ""
     },
     "footer": {
         "cancel": "Afbestille",
@@ -581,7 +678,9 @@
         "restart_container": "Genstart beholderen",
         "restart_container_info": "<b>Vigtig:</b> Det kan tage et stykke tid at gennemføre en yndefuld genstart. Vent til den er færdig.",
         "restart_now": "Genstart nu",
-        "restarting_container": "Genstart af beholder, det kan tage et stykke tid"
+        "restarting_container": "Genstart af beholder, det kan tage et stykke tid",
+        "hibp_check": "",
+        "nothing_selected": ""
     },
     "header": {
         "administration": "Konfiguration og detailer",
@@ -592,7 +691,8 @@
         "quarantine": "Karantæne",
         "restart_netfilter": "Genstart netfilter",
         "restart_sogo": "Genstart SOGo",
-        "user_settings": "Brugerindstillinger"
+        "user_settings": "Brugerindstillinger",
+        "mailcow_system": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "Venter på TFA-bekræftelse",
@@ -757,7 +857,31 @@
         "yes": "&#10003;",
         "goto_ham": "Lær som <b>ønsket</b>",
         "catch_all": "Fang-alt",
-        "open_logs": "Åben logfiler"
+        "open_logs": "Åben logfiler",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "all_domains": "",
+        "domain_templates": "",
+        "last_modified": "",
+        "last_pw_change": "",
+        "mailbox_templates": "",
+        "template": "",
+        "relay_unknown": "",
+        "add_alias_expand": "",
+        "add_template": "",
+        "created_on": "",
+        "goto_spam": "",
+        "recipient": "",
+        "relay_all": "",
+        "sender": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "templates": ""
     },
     "oauth2": {
         "access_denied": "Log ind som mailboks ejer for at give adgang via OAuth2.",
@@ -818,10 +942,24 @@
         "table_size_show_n": "Vis %s genstande",
         "text_from_html_content": "Indhold (konverterede html)",
         "text_plain_content": "Indhold (text/plain)",
-        "toggle_all": "Skift alt"
+        "toggle_all": "Skift alt",
+        "settings_info": ""
     },
     "queue": {
-        "queue_manager": "Køadministrator"
+        "queue_manager": "Køadministrator",
+        "deliver_mail": "",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": ""
     },
     "start": {
         "help": "Vis / skjul hjælpepanel",
@@ -903,7 +1041,17 @@
         "verified_totp_login": "Bekræftet TOTP-login",
         "verified_webauthn_login": "Bekræftet WebAuthn-login",
         "verified_fido2_login": "Bekræftet FIDO2-login",
-        "verified_yotp_login": "Bekræftet Yubico OTP-login"
+        "verified_yotp_login": "Bekræftet Yubico OTP-login",
+        "template_removed": "",
+        "domain_footer_modified": "",
+        "cors_headers_edited": "",
+        "domain_add_dkim_available": "",
+        "f2b_banlist_refreshed": "",
+        "ip_check_opt_in_modified": "",
+        "nginx_reloaded": "",
+        "password_policy_saved": "",
+        "template_added": "",
+        "template_modified": ""
     },
     "tfa": {
         "api_register": "%s bruger Yubico Cloud API. Få en API-nøgle til din nøgle <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">here</a>",
@@ -928,7 +1076,10 @@
         "webauthn": "WebAuthn godkendelse",
         "waiting_usb_auth": "<i>Venter på USB-enhed...</i><br><br>Tryk let på knappen på din USB-enhed nu.",
         "waiting_usb_register": "<i>Venter på USB-enhed...</i><br><br>Indtast din adgangskode ovenfor, og bekræft din registrering ved at trykke på knappen på din USB-enhed.",
-        "yubi_otp": "Yubico OTP godkendelse"
+        "yubi_otp": "Yubico OTP godkendelse",
+        "authenticators": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": ""
     },
     "fido2": {
         "set_fn": "Set venneligt navn",
@@ -942,7 +1093,8 @@
         "start_fido2_validation": "Start FIDO2 validering",
         "fido2_auth": "Login med FIDO2",
         "fido2_success": "Enheden blev registreret",
-        "fido2_validation_failed": "Validering mislykkedes"
+        "fido2_validation_failed": "Validering mislykkedes",
+        "set_fido2_touchid": ""
     },
     "user": {
         "action": "Handling",
@@ -1071,7 +1223,42 @@
         "waiting": "Venter",
         "week": "uge",
         "weekly": "Ugeligt",
-        "weeks": "uger"
+        "weeks": "uger",
+        "empty": "",
+        "allowed_protocols": "",
+        "login_history": "",
+        "mailbox": "",
+        "mailbox_general": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "apple_connection_profile_with_app_password": "",
+        "attribute": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "created_on": "",
+        "direct_protocol_access": "",
+        "fido2_webauthn": "",
+        "from": "",
+        "last_pw_change": "",
+        "last_ui_login": "",
+        "month": "",
+        "months": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "pushover_sound": "",
+        "recent_successful_connections": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "value": "",
+        "with_app_password": "",
+        "year": "",
+        "years": "",
+        "mailbox_settings": ""
     },
     "warning": {
         "cannot_delete_self": "Kan ikke slette en bruger som er logget ind.",
@@ -1083,12 +1270,40 @@
         "no_active_admin": "Kan ikke deaktivere den sidste administrator",
         "quota_exceeded_scope": "Domænekvote overskredet: Kun ubegrænsede postkasser kan oprettes i dette domæneomfang.",
         "session_token": "Form nøgle ugyldig: Nøgle passer ikke",
-        "session_ua": "Form nøgle ugyldig: Bruger-Agent gyldighedskontrols fejl"
+        "session_ua": "Form nøgle ugyldig: Bruger-Agent gyldighedskontrols fejl",
+        "is_not_primary_alias": ""
     },
     "datatables": {
         "lengthMenu": "Vis _MENU_ poster",
         "paginate": {
-            "first": "Først"
-        }
+            "first": "Først",
+            "last": "",
+            "next": "",
+            "previous": ""
+        },
+        "decimal": "",
+        "infoPostFix": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "thousands": "",
+        "emptyTable": "",
+        "expand_all": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "collapse_all": ""
+    },
+    "ratelimit": {
+        "day": "",
+        "hour": "",
+        "disabled": "",
+        "second": "",
+        "minute": ""
     }
 }

+ 546 - 18
data/web/lang/lang.es-es.json

@@ -24,7 +24,11 @@
         "protocol_access": "Cambiar protocolo de acceso",
         "quarantine_category": "Cambiar categoría de las notificaciones de cuarentena",
         "domain_relayhost": "Cambiar relayhost por un dominio",
-        "extend_sender_acl": "Permitir extender la ACL del remitente por direcciones externas"
+        "extend_sender_acl": "Permitir extender la ACL del remitente por direcciones externas",
+        "smtp_ip_access": "",
+        "sogo_access": "",
+        "mailbox_relayhost": "",
+        "pushover": ""
     },
     "add": {
         "activate_filter_warn": "Todos los demás filtros se desactivarán cuando este filtro se active.",
@@ -95,7 +99,16 @@
         "app_password": "Añadir contraseña para la app",
         "public_comment": "Comentarios públicos",
         "disable_login": "Desactivar login (el correo entrante seguirá activo)",
-        "comment_info": "Los comentarios privados no son visibles al usuario, mientras que los comentarios públicos aparecerán sobre la información general del usuario"
+        "comment_info": "Los comentarios privados no son visibles al usuario, mientras que los comentarios públicos aparecerán sobre la información general del usuario",
+        "dry": "",
+        "private_comment": "",
+        "relay_transport_info": "",
+        "domain_matches_hostname": "",
+        "relay_unknown_only": "",
+        "relayhost_wrapped_tls_info": "",
+        "app_passwd_protocols": "",
+        "bcc_dest_format": "",
+        "tags": ""
     },
     "admin": {
         "access": "Acceso",
@@ -248,7 +261,97 @@
         "unban_pending": "Desbloqueo pendiente",
         "unchanged_if_empty": "Si no hay cambios déjalo en blanco",
         "upload": "Cargar",
-        "username": "Nombre de usuario"
+        "username": "Nombre de usuario",
+        "lookup_mx": "",
+        "license_info": "",
+        "message": "",
+        "oauth2_apps": "",
+        "transport_dest_format": "",
+        "ui_footer": "",
+        "copy_to_clipboard": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "no": "",
+        "quarantine_max_score": "",
+        "queue_unban": "",
+        "rate_name": "",
+        "regex_maps": "",
+        "relay_rcpt": "",
+        "rsetting_no_selection": "",
+        "rsettings_preset_3": "",
+        "rsettings_preset_4": "",
+        "title": "",
+        "transport_test_rcpt_info": "",
+        "oauth2_add_client": "",
+        "oauth2_revoke_tokens": "",
+        "options": "",
+        "ui_header_announcement": "",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "quarantine_redirect": "",
+        "time": "",
+        "ui_header_announcement_active": "",
+        "ui_header_announcement_type_info": "",
+        "ui_header_announcement_type_warning": "",
+        "validate_license_now": "",
+        "reset_limit": "",
+        "success": "",
+        "allowed_methods": "",
+        "allowed_origins": "",
+        "cors_settings": "",
+        "login_time": "",
+        "yes": "",
+        "f2b_filter": "",
+        "html": "",
+        "oauth2_redirect_uri": "",
+        "oauth2_renew_secret": "",
+        "admins": "",
+        "admins_ldap": "",
+        "guid": "",
+        "guid_and_license": "",
+        "hash_remove_info": "",
+        "is_mx_based": "",
+        "last_applied": "",
+        "ip_check": "",
+        "ip_check_disabled": "",
+        "ip_check_opt_in": "",
+        "rspamd_global_filters_regex": "",
+        "sal_level": "",
+        "service": "",
+        "service_id": "",
+        "oauth2_info": "",
+        "optional": "",
+        "password_length": "",
+        "password_policy": "",
+        "password_policy_chars": "",
+        "password_policy_length": "",
+        "password_policy_lowerupper": "",
+        "password_policy_numbers": "",
+        "priority": "",
+        "quarantine_bcc": "",
+        "rspamd_global_filters": "",
+        "rspamd_global_filters_agree": "",
+        "rspamd_global_filters_info": "",
+        "ui_header_announcement_content": "",
+        "ui_header_announcement_help": "",
+        "ui_header_announcement_select": "",
+        "ui_header_announcement_type": "",
+        "ui_header_announcement_type_danger": "",
+        "verify": "",
+        "customer_id": "",
+        "dkim_overwrite_key": "",
+        "domain_admin": "",
+        "domain_s": "",
+        "f2b_regex_info": "",
+        "advanced_settings": "",
+        "api_info": "",
+        "api_read_only": "",
+        "api_read_write": "",
+        "api_skip_ip_check": "",
+        "authed_user": "",
+        "ays": "",
+        "convert_html_to_text": "",
+        "password_policy_special_chars": ""
     },
     "danger": {
         "access_denied": "Acceso denegado o datos del formulario inválidos",
@@ -336,7 +439,50 @@
         "username_invalid": "Nombre de usuario no se puede utilizar",
         "validity_missing": "Por favor asigna un periodo de validez",
         "value_missing": "Por favor proporcione todos los valores",
-        "yotp_verification_failed": "Verificación Yubico OTP fallida: %s"
+        "yotp_verification_failed": "Verificación Yubico OTP fallida: %s",
+        "invalid_mime_type": "",
+        "description_invalid": "",
+        "dkim_domain_or_sel_exists": "",
+        "extended_sender_acl_denied": "",
+        "extra_acl_invalid": "",
+        "last_key": "",
+        "webauthn_authenticator_failed": "",
+        "webauthn_publickey_failed": "",
+        "webauthn_username_failed": "",
+        "app_name_empty": "",
+        "app_passwd_id_invalid": "",
+        "comment_too_long": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "demo_mode_enabled": "",
+        "global_filter_write_error": "",
+        "pushover_credentials_missing": "",
+        "pushover_key": "",
+        "pushover_token": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "maxquota_empty": "",
+        "nginx_reload_failed": "",
+        "targetd_relay_domain": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "temp_error": "",
+        "tfa_token_invalid": "",
+        "tls_policy_map_dest_invalid": "",
+        "extra_acl_invalid_domain": "",
+        "fido2_verification_failed": "",
+        "template_name_invalid": "",
+        "resource_invalid": "",
+        "file_open_error": "",
+        "img_tmp_missing": "",
+        "invalid_filter_type": "",
+        "global_map_invalid": "",
+        "global_map_write_error": "",
+        "ham_learn_error": "",
+        "img_invalid": "",
+        "imagick_exception": "",
+        "max_alias_exceeded": "",
+        "reset_f2b_regex": ""
     },
     "debug": {
         "containers_info": "Información de los contenedores",
@@ -354,7 +500,30 @@
         "solr_status": "Solr status",
         "uptime": "Uptime",
         "static_logs": "Logs estáticos",
-        "system_containers": "Sistema y Contenedores"
+        "system_containers": "Sistema y Contenedores",
+        "container_disabled": "",
+        "architecture": "",
+        "update_failed": "",
+        "wip": "",
+        "chart_this_server": "",
+        "container_running": "",
+        "container_stopped": "",
+        "cores": "",
+        "current_time": "",
+        "error_show_ip": "",
+        "history_all_servers": "",
+        "jvm_memory_solr": "",
+        "memory": "",
+        "online_users": "",
+        "service": "",
+        "show_ip": "",
+        "started_on": "",
+        "success": "",
+        "timezone": "",
+        "update_available": "",
+        "no_update_available": "",
+        "username": "",
+        "login_time": ""
     },
     "diagnostics": {
         "cname_from_a": "Valor derivado del registro A / AAAA. Esto es permitido siempre que el registro apunte al recurso correcto.",
@@ -364,7 +533,8 @@
         "dns_records_name": "Nombre",
         "dns_records_status": "Información actual",
         "dns_records_type": "Tipo",
-        "optional": "Este récord es opcional."
+        "optional": "Este récord es opcional.",
+        "dns_records_docs": ""
     },
     "edit": {
         "active": "Activo",
@@ -432,13 +602,85 @@
         "title": "Editar objeto",
         "unchanged_if_empty": "Si no hay cambios dejalo en blanco",
         "username": "Nombre de usuario",
-        "validate_save": "Validar y guardar"
+        "validate_save": "Validar y guardar",
+        "lookup_mx": "",
+        "footer_exclude": "",
+        "custom_attributes": "",
+        "domain_footer_info_vars": {
+            "from_user": "",
+            "from_name": "",
+            "from_domain": "",
+            "custom": "",
+            "auth_user": "",
+            "from_addr": ""
+        },
+        "domain_footer_plain": "",
+        "domain_footer_skip_replies": "",
+        "sender_acl_info": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "spam_score": "",
+        "domain_footer_info": "",
+        "acl": "",
+        "relay_transport_info": "",
+        "sender_acl_disabled": "",
+        "sogo_access": "",
+        "sogo_access_info": "",
+        "sogo_visible": "",
+        "sogo_visible_info": "",
+        "spam_alias": "",
+        "spam_filter": "",
+        "spam_policy": "",
+        "generate": "",
+        "private_comment": "",
+        "public_comment": "",
+        "pushover": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_text": "",
+        "admin": "",
+        "advanced_settings": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "app_passwd": "",
+        "app_passwd_protocols": "",
+        "comment_info": "",
+        "created_on": "",
+        "delete_ays": "",
+        "extended_sender_acl": "",
+        "extended_sender_acl_info": "",
+        "mbox_rl_info": "",
+        "none_inherit": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "mailbox_relayhost_info": "",
+        "pushover_verify": "",
+        "quota_warning_bcc": "",
+        "quota_warning_bcc_info": "",
+        "ratelimit": "",
+        "relay_unknown_only": "",
+        "pushover_info": "",
+        "pushover_sender_regex": "",
+        "app_name": "",
+        "disable_login": ""
     },
     "footer": {
         "hibp_nok": "¡Se encontró coincidencia - esta es una contraseña <b>no segura</b>, selecciona otra!",
         "hibp_ok": "No se encontraron coincidencias",
         "loading": "Espera por favor...",
-        "restart_now": "Reiniciar ahora"
+        "restart_now": "Reiniciar ahora",
+        "cancel": "",
+        "confirm_delete": "",
+        "delete_now": "",
+        "hibp_check": "",
+        "nothing_selected": "",
+        "delete_these_items": "",
+        "restart_container": "",
+        "restarting_container": "",
+        "restart_container_info": ""
     },
     "header": {
         "administration": "Administración",
@@ -447,17 +689,24 @@
         "mailcow_config": "Configuración",
         "quarantine": "Cuarentena",
         "restart_sogo": "Reiniciar SOGo",
-        "user_settings": "Configuraciones de usuario"
+        "user_settings": "Configuraciones de usuario",
+        "apps": "",
+        "mailcow_system": "",
+        "restart_netfilter": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "En espera de confirmación de TFA",
-        "no_action": "No hay acción aplicable"
+        "no_action": "No hay acción aplicable",
+        "session_expires": ""
     },
     "login": {
         "delayed": "El inicio de sesión ha sido retrasado %s segundos.",
         "login": "Inicio de sesión",
         "password": "Contraseña",
-        "username": "Nombre de usuario"
+        "username": "Nombre de usuario",
+        "fido2_webauthn": "",
+        "mobileconfig_info": "",
+        "other_logins": ""
     },
     "mailbox": {
         "action": "Acción",
@@ -569,7 +818,70 @@
         "toggle_all": "Selecionar todo",
         "username": "Nombre de usuario",
         "waiting": "Esperando",
-        "weekly": "Cada semana"
+        "weekly": "Cada semana",
+        "disable_login": "",
+        "templates": "",
+        "public_comment": "",
+        "q_add_header": "",
+        "q_reject": "",
+        "table_size": "",
+        "domain_templates": "",
+        "catch_all": "",
+        "created_on": "",
+        "goto_ham": "",
+        "add_alias_expand": "",
+        "add_template": "",
+        "alias_domain_alias_hint": "",
+        "alias_domain_backupmx": "",
+        "all_domains": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "goto_spam": "",
+        "insert_preset": "",
+        "last_mail_login": "",
+        "last_pw_change": "",
+        "last_run_reset": "",
+        "mailbox": "",
+        "mailbox_defaults": "",
+        "no": "",
+        "open_logs": "",
+        "owner": "",
+        "private_comment": "",
+        "q_all": "",
+        "quarantine_category": "",
+        "recipient": "",
+        "relay_unknown": "",
+        "sender": "",
+        "sieve_preset_1": "",
+        "sieve_preset_5": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "template": "",
+        "tls_policy_maps_enforced_tls": "",
+        "yes": "",
+        "table_size_show_n": "",
+        "mailbox_defaults_info": "",
+        "sieve_preset_header": "",
+        "mailbox_templates": "",
+        "sieve_preset_2": "",
+        "sieve_preset_3": "",
+        "sieve_preset_8": "",
+        "sogo_visible": "",
+        "sogo_visible_n": "",
+        "sogo_visible_y": "",
+        "spam_aliases": "",
+        "stats": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "sieve_preset_4": "",
+        "sieve_preset_6": "",
+        "sieve_preset_7": ""
     },
     "oauth2": {
         "access_denied": "Inicie sesión como propietario del buzón para otorgar acceso a través de OAuth2.",
@@ -611,10 +923,43 @@
         "subj": "Asunto",
         "text_from_html_content": "Contenido (html convertido)",
         "text_plain_content": "Contenido (text/plain)",
-        "toggle_all": "Seleccionar todos"
+        "toggle_all": "Seleccionar todos",
+        "spam": "",
+        "confirm": "",
+        "download_eml": "",
+        "info": "",
+        "deliver_inbox": "",
+        "junk_folder": "",
+        "notified": "",
+        "qinfo": "",
+        "quick_delete_link": "",
+        "quick_info_link": "",
+        "quick_release_link": "",
+        "refresh": "",
+        "rejected": "",
+        "rewrite_subject": "",
+        "rspamd_result": "",
+        "sender_header": "",
+        "settings_info": "",
+        "table_size": "",
+        "table_size_show_n": "",
+        "type": ""
     },
     "queue": {
-        "queue_manager": "Administrador de cola"
+        "queue_manager": "Administrador de cola",
+        "legend": "",
+        "ays": "",
+        "deliver_mail": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": "",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "show_message": "",
+        "unban": ""
     },
     "start": {
         "help": "Mostrar/Ocultar panel de ayuda",
@@ -670,7 +1015,43 @@
         "tls_policy_map_entry_saved": "Regla de póliza de TLS \"%s\" ha sido guardada",
         "verified_totp_login": "Inicio de sesión TOTP verificado",
         "verified_webauthn_login": "Inicio de sesión WebAuthn verificado",
-        "verified_yotp_login": "Inicio de sesión Yubico OTP verificado"
+        "verified_yotp_login": "Inicio de sesión Yubico OTP verificado",
+        "sogo_profile_reset": "",
+        "template_added": "",
+        "template_removed": "",
+        "ui_texts": "",
+        "upload_success": "",
+        "verified_fido2_login": "",
+        "admin_added": "",
+        "admin_api_modified": "",
+        "admin_removed": "",
+        "app_links": "",
+        "app_passwd_added": "",
+        "app_passwd_removed": "",
+        "cors_headers_edited": "",
+        "domain_add_dkim_available": "",
+        "dkim_duplicated": "",
+        "domain_footer_modified": "",
+        "dovecot_restart_success": "",
+        "eas_reset": "",
+        "f2b_banlist_refreshed": "",
+        "f2b_modified": "",
+        "global_filter_written": "",
+        "hash_deleted": "",
+        "ip_check_opt_in_modified": "",
+        "item_deleted": "",
+        "item_released": "",
+        "items_deleted": "",
+        "items_released": "",
+        "learned_ham": "",
+        "license_modified": "",
+        "nginx_reloaded": "",
+        "object_modified": "",
+        "password_policy_saved": "",
+        "pushover_settings_edited": "",
+        "reset_main_logo": "",
+        "resource_removed": "",
+        "template_modified": ""
     },
     "tfa": {
         "api_register": "%s utiliza la API de la nube de Yubico. Por favor, obtén una clave API para tu llave <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">aquí</a>.",
@@ -690,7 +1071,15 @@
         "webauthn": "Autenticación WebAuthn",
         "waiting_usb_auth": "<i>Esperando al dispositivo USB...</i><br><br>Toque el botón en su dispositivo USB WebAuthn ahora.",
         "waiting_usb_register": "<i>Esperando al dispositivo USB....</i><br><br>Ingrese su contraseña arriba y confirme su registro WebAuthn tocando el botón en su dispositivo USB WebAuthn.",
-        "yubi_otp": "Yubico OTP"
+        "yubi_otp": "Yubico OTP",
+        "authenticators": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": "",
+        "error_code": "",
+        "init_webauthn": "",
+        "reload_retry": "",
+        "start_webauthn_validation": "",
+        "tfa_token_invalid": ""
     },
     "user": {
         "action": "Acción",
@@ -771,11 +1160,150 @@
         "waiting": "Esperando",
         "week": "Semana",
         "weekly": "Cada semana",
-        "weeks": "Semanas"
+        "weeks": "Semanas",
+        "fido2_webauthn": "",
+        "last_pw_change": "",
+        "save": "",
+        "pushover_info": "",
+        "client_configuration": "",
+        "created_on": "",
+        "q_add_header": "",
+        "active_sieve": "",
+        "apple_connection_profile_mailonly": "",
+        "attribute": "",
+        "email": "",
+        "expire_in": "",
+        "last_ui_login": "",
+        "loading": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "messages": "",
+        "month": "",
+        "months": "",
+        "no_active_filter": "",
+        "password_repeat": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "recent_successful_connections": "",
+        "sogo_profile_reset_help": "",
+        "sogo_profile_reset_now": "",
+        "spam_score_reset": "",
+        "spamfilter_table_domain_policy": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "last_mail_login": "",
+        "pushover_verify": "",
+        "q_all": "",
+        "quarantine_category_info": "",
+        "create_app_passwd": "",
+        "no_last_login": "",
+        "sender_acl_disabled": "",
+        "show_sieve_filters": "",
+        "email_and_dav": "",
+        "empty": "",
+        "syncjob_check_log": "",
+        "login_history": "",
+        "mailbox": "",
+        "text": "",
+        "apple_connection_profile_with_app_password": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "delete_ays": "",
+        "direct_protocol_access": "",
+        "force_pw_update": "",
+        "from": "",
+        "generate": "",
+        "in_use": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "title": "",
+        "value": "",
+        "verify": "",
+        "with_app_password": "",
+        "year": "",
+        "years": "",
+        "advanced_settings": "",
+        "app_hint": "",
+        "allowed_protocols": "",
+        "app_name": "",
+        "app_passwds": "",
+        "apple_connection_profile": "",
+        "apple_connection_profile_complete": "",
+        "password": ""
     },
     "warning": {
         "domain_added_sogo_failed": "Se agregó el dominio pero no se pudo reiniciar SOGo, revisa los logs del servidor.",
         "fuzzy_learn_error": "Error aprendiendo hash: %s",
-        "ip_invalid": "IP inválida omitida: %s"
+        "ip_invalid": "IP inválida omitida: %s",
+        "session_token": "",
+        "session_ua": "",
+        "cannot_delete_self": "",
+        "dovecot_restart_failed": "",
+        "hash_not_found": "",
+        "is_not_primary_alias": "",
+        "no_active_admin": "",
+        "quota_exceeded_scope": ""
+    },
+    "datatables": {
+        "decimal": "",
+        "infoPostFix": "",
+        "paginate": {
+            "last": "",
+            "first": "",
+            "next": "",
+            "previous": ""
+        },
+        "collapse_all": "",
+        "emptyTable": "",
+        "expand_all": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "thousands": "",
+        "lengthMenu": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        }
+    },
+    "fido2": {
+        "set_fn": "",
+        "start_fido2_validation": "",
+        "confirm": "",
+        "fido2_auth": "",
+        "fido2_success": "",
+        "fido2_validation_failed": "",
+        "fn": "",
+        "known_ids": "",
+        "none": "",
+        "register_status": "",
+        "rename": "",
+        "set_fido2": "",
+        "set_fido2_touchid": ""
+    },
+    "ratelimit": {
+        "disabled": "",
+        "second": "",
+        "minute": "",
+        "hour": "",
+        "day": ""
     }
 }

+ 420 - 18
data/web/lang/lang.fi-fi.json

@@ -20,7 +20,15 @@
         "spam_score": "Roskapostitulos",
         "syncjobs": "Synkronoi työt",
         "tls_policy": "TLS-käytäntö",
-        "unlimited_quota": "Rajoittamaton kiintiö sähkö postilaatikoille"
+        "unlimited_quota": "Rajoittamaton kiintiö sähkö postilaatikoille",
+        "app_passwds": "",
+        "domain_desc": "",
+        "domain_relayhost": "",
+        "mailbox_relayhost": "",
+        "protocol_access": "",
+        "pushover": "",
+        "quarantine_category": "",
+        "smtp_ip_access": ""
     },
     "add": {
         "activate_filter_warn": "Kaikki muut suodattimet deaktivoidaan, kun aktiivinen on valittu.",
@@ -90,7 +98,17 @@
         "timeout2": "Aikakatkaisu yhteyden muodostamiseen paikalliseen isäntään",
         "username": "Käyttäjätunnus",
         "validate": "Vahvista",
-        "validation_success": "Vahvistettu onnistuneesti"
+        "validation_success": "Vahvistettu onnistuneesti",
+        "dry": "",
+        "tags": "",
+        "inactive": "",
+        "relay_transport_info": "",
+        "app_name": "",
+        "app_password": "",
+        "app_passwd_protocols": "",
+        "bcc_dest_format": "",
+        "disable_login": "",
+        "relay_unknown_only": ""
     },
     "admin": {
         "access": "Hallinta",
@@ -267,7 +285,73 @@
         "upload": "Lataa",
         "username": "Käyttäjätunnus",
         "validate_license_now": "Vahvista GUID-tunnus lisenssi palvelinta vastaan",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "copy_to_clipboard": "",
+        "f2b_ban_time_increment": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "f2b_max_ban_time": "",
+        "allowed_methods": "",
+        "allowed_origins": "",
+        "cors_settings": "",
+        "ip_check": "",
+        "rspamd_global_filters": "",
+        "service": "",
+        "password_policy_lowerupper": "",
+        "password_policy_numbers": "",
+        "quarantine_max_score": "",
+        "quarantine_redirect": "",
+        "domain_admin": "",
+        "f2b_filter": "",
+        "f2b_regex_info": "",
+        "html": "",
+        "oauth2_apps": "",
+        "oauth2_add_client": "",
+        "optional": "",
+        "options": "",
+        "password_length": "",
+        "password_policy_chars": "",
+        "rspamd_global_filters_agree": "",
+        "rspamd_global_filters_info": "",
+        "sal_level": "",
+        "success": "",
+        "title": "",
+        "transport_test_rcpt_info": "",
+        "ui_header_announcement": "",
+        "ui_header_announcement_active": "",
+        "ui_header_announcement_content": "",
+        "password_policy": "",
+        "password_policy_length": "",
+        "queue_unban": "",
+        "relay_rcpt": "",
+        "rsettings_preset_3": "",
+        "rsettings_preset_4": "",
+        "ui_header_announcement_help": "",
+        "ui_header_announcement_select": "",
+        "ui_header_announcement_type": "",
+        "ui_header_announcement_type_danger": "",
+        "ui_header_announcement_type_info": "",
+        "ui_header_announcement_type_warning": "",
+        "verify": "",
+        "ip_check_disabled": "",
+        "ip_check_opt_in": "",
+        "is_mx_based": "",
+        "login_time": "",
+        "rspamd_global_filters_regex": "",
+        "password_policy_special_chars": "",
+        "quarantine_bcc": "",
+        "regex_maps": "",
+        "dkim_overwrite_key": "",
+        "admins": "",
+        "admins_ldap": "",
+        "advanced_settings": "",
+        "api_read_only": "",
+        "api_read_write": "",
+        "api_skip_ip_check": "",
+        "ays": "",
+        "convert_html_to_text": ""
     },
     "danger": {
         "access_denied": "Käyttö estetty tai lomake tiedot eivät kelpaa",
@@ -369,7 +453,36 @@
         "username_invalid": "Käyttäjätunnusta %s ei voi käyttää",
         "validity_missing": "Anna voimassaolo aika",
         "value_missing": "Anna kaikki arvot",
-        "yotp_verification_failed": "Yubico OTP todentaminen epäonnistui: %s"
+        "yotp_verification_failed": "Yubico OTP todentaminen epäonnistui: %s",
+        "webauthn_authenticator_failed": "",
+        "webauthn_publickey_failed": "",
+        "cors_invalid_origin": "",
+        "file_open_error": "",
+        "global_filter_write_error": "",
+        "global_map_invalid": "",
+        "global_map_write_error": "",
+        "ham_learn_error": "",
+        "invalid_filter_type": "",
+        "cors_invalid_method": "",
+        "pushover_key": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "nginx_reload_failed": "",
+        "pushover_credentials_missing": "",
+        "pushover_token": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "template_name_invalid": "",
+        "tls_policy_map_dest_invalid": "",
+        "webauthn_username_failed": "",
+        "app_name_empty": "",
+        "app_passwd_id_invalid": "",
+        "demo_mode_enabled": "",
+        "dkim_domain_or_sel_exists": "",
+        "extended_sender_acl_denied": "",
+        "fido2_verification_failed": "",
+        "reset_f2b_regex": "",
+        "tfa_token_invalid": ""
     },
     "debug": {
         "containers_info": "Säilön tiedot",
@@ -389,7 +502,28 @@
         "uptime": "Päällä",
         "started_on": "Aloitettiin",
         "static_logs": "Staattiset lokit",
-        "system_containers": "Systeemi & Säiliöt"
+        "system_containers": "Systeemi & Säiliöt",
+        "memory": "",
+        "architecture": "",
+        "online_users": "",
+        "error_show_ip": "",
+        "success": "",
+        "wip": "",
+        "container_disabled": "",
+        "history_all_servers": "",
+        "service": "",
+        "timezone": "",
+        "update_available": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "username": "",
+        "chart_this_server": "",
+        "container_running": "",
+        "container_stopped": "",
+        "cores": "",
+        "login_time": "",
+        "current_time": "",
+        "show_ip": ""
     },
     "diagnostics": {
         "cname_from_a": "Arvo johdettu A / AAAA-tietueesta. Tätä tuetaan niin kauan kuin tietue osoittaa oikealle resurssille.",
@@ -399,7 +533,8 @@
         "dns_records_name": "Nimi",
         "dns_records_status": "Nykyinen tila",
         "dns_records_type": "Tyyppi",
-        "optional": "Tämä tietue on valinnainen."
+        "optional": "Tämä tietue on valinnainen.",
+        "dns_records_docs": ""
     },
     "edit": {
         "active": "Aktiivinen",
@@ -480,7 +615,57 @@
         "title": "Muokkaa objektia",
         "unchanged_if_empty": "Jos muuttumaton jätä tyhjäksi",
         "username": "Käyttäjätunnus",
-        "validate_save": "Vahvista ja tallenna"
+        "validate_save": "Vahvista ja tallenna",
+        "lookup_mx": "",
+        "footer_exclude": "",
+        "custom_attributes": "",
+        "domain_footer_info_vars": {
+            "from_addr": "",
+            "from_domain": "",
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "custom": ""
+        },
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "app_name": "",
+        "app_passwd": "",
+        "app_passwd_protocols": "",
+        "created_on": "",
+        "sogo_access": "",
+        "sogo_access_info": "",
+        "domain_footer_skip_replies": "",
+        "domain_footer_plain": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "ratelimit": "",
+        "acl": "",
+        "advanced_settings": "",
+        "allow_from_smtp": "",
+        "domain_footer_info": "",
+        "none_inherit": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_regex": "",
+        "pushover_verify": "",
+        "quota_warning_bcc_info": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "spam_filter": "",
+        "pushover_text": "",
+        "admin": "",
+        "generate": "",
+        "delete_ays": "",
+        "disable_login": "",
+        "pushover": "",
+        "pushover_info": "",
+        "pushover_sender_array": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "mailbox_relayhost_info": "",
+        "pushover_vars": "",
+        "pushover_evaluate_x_prio": "",
+        "quota_warning_bcc": ""
     },
     "footer": {
         "cancel": "Peruuta",
@@ -493,7 +678,9 @@
         "restart_container": "Uudelleen käynnistä moottori",
         "restart_container_info": "<b>Tärkeää:</b> Uudelleenkäynnistys voi kestää jonkin aikaa, odota, kunnes se päättyy.",
         "restart_now": "Käynnistä uudelleen nyt",
-        "restarting_container": "Uudelleen käynnistä container, tämä saattaa kestää jonkin aikaa..."
+        "restarting_container": "Uudelleen käynnistä container, tämä saattaa kestää jonkin aikaa...",
+        "hibp_check": "",
+        "nothing_selected": ""
     },
     "header": {
         "administration": "Kokoonpanon & tiedot",
@@ -504,7 +691,8 @@
         "quarantine": "Karanteeni",
         "restart_netfilter": "Uudelleen käynnistä netfilter",
         "restart_sogo": "Uudelleen käynnistä SOGo",
-        "user_settings": "Käyttäjän asetukset"
+        "user_settings": "Käyttäjän asetukset",
+        "mailcow_system": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "Odotetaan TFA-vahvistusta",
@@ -515,7 +703,10 @@
         "delayed": "Kirjautuminen viivästyi %s sekunttia.",
         "login": "Kirjaudu",
         "password": "Salasana",
-        "username": "Käyttäjätunnus"
+        "username": "Käyttäjätunnus",
+        "fido2_webauthn": "",
+        "mobileconfig_info": "",
+        "other_logins": ""
     },
     "mailbox": {
         "action": "Toiminnot",
@@ -639,7 +830,58 @@
         "username": "Käyttäjätunnus",
         "waiting": "Odotetaan..",
         "weekly": "Viikoittain",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "templates": "",
+        "catch_all": "",
+        "created_on": "",
+        "disable_login": "",
+        "domain_templates": "",
+        "goto_ham": "",
+        "goto_spam": "",
+        "template": "",
+        "sieve_preset_8": "",
+        "allow_from_smtp_info": "",
+        "sieve_preset_header": "",
+        "sender": "",
+        "sieve_preset_6": "",
+        "sieve_preset_7": "",
+        "insert_preset": "",
+        "last_mail_login": "",
+        "add_template": "",
+        "alias_domain_alias_hint": "",
+        "all_domains": "",
+        "allow_from_smtp": "",
+        "allowed_protocols": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "recipient": "",
+        "relay_unknown": "",
+        "stats": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "table_size": "",
+        "table_size_show_n": "",
+        "tls_policy_maps_enforced_tls": "",
+        "last_pw_change": "",
+        "open_logs": "",
+        "q_add_header": "",
+        "q_all": "",
+        "mailbox_defaults": "",
+        "mailbox_defaults_info": "",
+        "mailbox_templates": "",
+        "sieve_preset_1": "",
+        "sieve_preset_2": "",
+        "sieve_preset_3": "",
+        "sieve_preset_4": "",
+        "sieve_preset_5": "",
+        "add_alias_expand": ""
     },
     "oauth2": {
         "access_denied": "Kirjaudu sisään postilaatikon omistajana myöntääksesi käyttöoikeuden OAuth2: n kautta.",
@@ -683,10 +925,41 @@
         "subj": "Aihe",
         "text_from_html_content": "Sisältö (muunnettu html)",
         "text_plain_content": "Sisältö (teksti / tavallinen)",
-        "toggle_all": "Valitse kaikki"
+        "toggle_all": "Valitse kaikki",
+        "spam": "",
+        "deliver_inbox": "",
+        "info": "",
+        "type": "",
+        "quick_info_link": "",
+        "table_size": "",
+        "table_size_show_n": "",
+        "confirm": "",
+        "qinfo": "",
+        "sender_header": "",
+        "settings_info": "",
+        "rewrite_subject": "",
+        "junk_folder": "",
+        "notified": "",
+        "quick_release_link": "",
+        "rejected": "",
+        "quick_delete_link": "",
+        "refresh": ""
     },
     "queue": {
-        "queue_manager": "Jonon hallinta"
+        "queue_manager": "Jonon hallinta",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": ""
     },
     "start": {
         "help": "Näytä/Piilota help paneeli",
@@ -761,7 +1034,24 @@
         "upload_success": "Tiedosto ladattu onnistuneesti",
         "verified_totp_login": "Vahvistettu TOTP-kirjautuminen",
         "verified_webauthn_login": "Vahvistettu WebAuthn kirjautuminen",
-        "verified_yotp_login": "Vahvistettu Yubico OTP kirjautuminen"
+        "verified_yotp_login": "Vahvistettu Yubico OTP kirjautuminen",
+        "app_passwd_added": "",
+        "global_filter_written": "",
+        "template_added": "",
+        "template_modified": "",
+        "app_passwd_removed": "",
+        "cors_headers_edited": "",
+        "domain_add_dkim_available": "",
+        "domain_footer_modified": "",
+        "dovecot_restart_success": "",
+        "f2b_banlist_refreshed": "",
+        "ip_check_opt_in_modified": "",
+        "learned_ham": "",
+        "nginx_reloaded": "",
+        "password_policy_saved": "",
+        "pushover_settings_edited": "",
+        "template_removed": "",
+        "verified_fido2_login": ""
     },
     "tfa": {
         "api_register": "%s käyttää Yubico Cloud API. Saat avaimesi API-avaimen <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">täältä</a>",
@@ -785,7 +1075,11 @@
         "webauthn": "WebAuthn todennus",
         "waiting_usb_auth": "<i>Odotetaan USB-laitetta...</i><br><br>Napauta painiketta WebAuthn USB-laitteessa nyt",
         "waiting_usb_register": "<i>Odotetaan USB-laitetta...</i><br><br>Anna salasanasi yltä ja vahvista WebAuthn-rekisteröinti napauttamalla painiketta WebAuthn USB-laitteessa.",
-        "yubi_otp": "Yubico OTP-todennus"
+        "yubi_otp": "Yubico OTP-todennus",
+        "authenticators": "",
+        "tfa_token_invalid": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": ""
     },
     "user": {
         "action": "Toiminnot",
@@ -880,7 +1174,76 @@
         "waiting": "Odottaa",
         "week": "Viikko",
         "weekly": "Viikoittain",
-        "weeks": "Viikkoa"
+        "weeks": "Viikkoa",
+        "attribute": "",
+        "last_ui_login": "",
+        "allowed_protocols": "",
+        "delete_ays": "",
+        "email_and_dav": "",
+        "empty": "",
+        "fido2_webauthn": "",
+        "text": "",
+        "generate": "",
+        "last_mail_login": "",
+        "last_pw_change": "",
+        "login_history": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "month": "",
+        "months": "",
+        "no_last_login": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "password": "",
+        "password_repeat": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_sender_array": "",
+        "recent_successful_connections": "",
+        "value": "",
+        "mailbox": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "title": "",
+        "verify": "",
+        "with_app_password": "",
+        "year": "",
+        "years": "",
+        "advanced_settings": "",
+        "app_hint": "",
+        "app_name": "",
+        "app_passwds": "",
+        "apple_connection_profile": "",
+        "apple_connection_profile_mailonly": "",
+        "apple_connection_profile_with_app_password": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "create_app_passwd": "",
+        "created_on": "",
+        "direct_protocol_access": "",
+        "email": "",
+        "apple_connection_profile_complete": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "q_add_header": "",
+        "q_all": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_category_info": "",
+        "pushover_only_x_prio": "",
+        "from": "",
+        "save": "",
+        "syncjob_check_log": ""
     },
     "warning": {
         "cannot_delete_self": "Kirjautuneen käyttäjän poistaminen ei onnistu",
@@ -890,7 +1253,10 @@
         "ip_invalid": "Ohitettu virheellinen IP-osoite: %s",
         "no_active_admin": "Viimeistä aktiivista järjestelmänvalvojaa ei voi poistaa käytöstä",
         "session_token": "Lomakkeen tunnus sanoma ei kelpaa: tunnus sanoman risti riita",
-        "session_ua": "Lomakkeen tunnus sanoma ei kelpaa: käyttäjä agentin tarkistus virhe"
+        "session_ua": "Lomakkeen tunnus sanoma ei kelpaa: käyttäjä agentin tarkistus virhe",
+        "is_not_primary_alias": "",
+        "quota_exceeded_scope": "",
+        "dovecot_restart_failed": ""
     },
     "datatables": {
         "emptyTable": "Tietoja ei ole saatavilla taulukossa",
@@ -901,7 +1267,43 @@
         "search": "Etsi:",
         "paginate": {
             "first": "Ensimmäinen",
-            "last": "Edellinen"
+            "last": "Edellinen",
+            "next": "",
+            "previous": ""
+        },
+        "infoPostFix": "",
+        "decimal": "",
+        "collapse_all": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "thousands": "",
+        "zeroRecords": "",
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
         }
+    },
+    "fido2": {
+        "confirm": "",
+        "fido2_auth": "",
+        "fido2_validation_failed": "",
+        "fn": "",
+        "known_ids": "",
+        "register_status": "",
+        "rename": "",
+        "set_fido2": "",
+        "fido2_success": "",
+        "none": "",
+        "set_fido2_touchid": "",
+        "set_fn": "",
+        "start_fido2_validation": ""
+    },
+    "ratelimit": {
+        "disabled": "",
+        "second": "",
+        "minute": "",
+        "hour": "",
+        "day": ""
     }
 }

+ 341 - 160
data/web/lang/lang.fr-fr.json

@@ -25,7 +25,7 @@
         "spam_score": "Score SPAM",
         "syncjobs": "Tâches de synchronisation",
         "tls_policy": "Politique TLS",
-        "unlimited_quota": "Quota illimité pour les boites de courriel",
+        "unlimited_quota": "Quota illimité pour les boîtes de réception",
         "domain_desc": "Modifier la description du domaine",
         "domain_relayhost": "Changer le relais pour un domaine",
         "mailbox_relayhost": "Changer le relais d’une boîte de réception"
@@ -52,7 +52,7 @@
         "delete2duplicates": "Supprimer les doubles à destination",
         "description": "Description",
         "destination": "Destination",
-        "disable_login": "Désactiver l'authentification (les e-mails entrants resteront acceptés)",
+        "disable_login": "Désactiver l'authentification (les courriels entrants resteront acceptés)",
         "domain": "domaine",
         "domain_matches_hostname": "Le domaine %s correspond à la machine (hostname)",
         "domain_quota_m": "Quota total du domaine (Mo)",
@@ -68,11 +68,11 @@
         "hostname": "Nom d'hôte",
         "inactive": "Inactif",
         "kind": "Type",
-        "mailbox_quota_def": "Quota boîte mail par défaut",
-        "mailbox_quota_m": "Quota max par boîte (Mo)",
+        "mailbox_quota_def": "Quota boîte de réception par défaut",
+        "mailbox_quota_m": "Quota max par boîte de réception (Mo)",
         "mailbox_username": "Identifiant (partie gauche d'une adresse de courriel)",
         "max_aliases": "Nombre maximal d'alias",
-        "max_mailboxes": "Nombre maximal de boîtes",
+        "max_mailboxes": "Nombre maximal de boîtes de réception",
         "mins_interval": "Période de relève (minutes)",
         "multiple_bookings": "Inscriptions multiples",
         "nexthop": "Suivant",
@@ -84,10 +84,10 @@
         "public_comment": "Commentaire public",
         "quota_mb": "Quota (Mo)",
         "relay_all": "Relayer tous les destinataires",
-        "relay_all_info": "↪ Si vous choissisez <b>de ne pas</b> relayer tous les destinataires, vous devez ajouter une boîte (\"aveugle\") pour chaque destinataire simple qui doit être relayé.",
+        "relay_all_info": "↪ Si vous choissisez <b>de ne pas</b> relayer tous les destinataires, vous devez ajouter une boîte de réception (\"aveugle\") pour chaque destinataire simple qui doit être relayé.",
         "relay_domain": "Relayer ce domaine",
         "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> Vous pouvez définir des cartes de transport vers une destination personnalisée pour ce domaine. sinon, une recherche MX sera effectuée.",
-        "relay_unknown_only": "Relayer uniquement les boîtes inexistantes. Les boîtes existantes seront livrées localement.",
+        "relay_unknown_only": "Relayer uniquement les boîtes de réception inexistantes. Les boîtes de réception existantes seront livrées localement.",
         "relayhost_wrapped_tls_info": "Veuillez <b>ne pas</b> utiliser des ports TLS wrappés (généralement utilisés sur le port 465).<br>\r\nUtilisez n'importe quel port non encapsulé et lancez STARTTLS. Une politique TLS pour appliquer TLS peut être créée dans \"Cartes de politique TLS\".",
         "select": "Veuillez sélectionner…",
         "select_domain": "Sélectionner d'abord un domaine",
@@ -96,7 +96,7 @@
         "skipcrossduplicates": "Ignorer les messages en double dans les dossiers (premier arrivé, premier servi)",
         "subscribeall": "S'abonner à tous les dossiers",
         "syncjob": "Ajouter une tâche de synchronisation",
-        "syncjob_hint": "Sachez que les mots de passe seront sauvegardés en clair !",
+        "syncjob_hint": "Sachez que les mots de passe seront enregistrés en clair !",
         "target_address": "Aller à l'adresse",
         "target_address_info": "<small>Adresse(s) de courriel complète(s) (séparées par des virgules).</small>",
         "target_domain": "Domaine cible",
@@ -105,7 +105,7 @@
         "username": "Nom d'utilisateur",
         "validate": "Valider",
         "validation_success": "Validation réussie",
-        "bcc_dest_format": "La destination Cci doit être une seule adresse e-mail valide.<br>Si vous avez besoin d'envoyer une copie à plusieurs adresses, créez un alias et utilisez-le ici.",
+        "bcc_dest_format": "La destination Cci doit être une seule adresse de courriel valide.<br>Si vous avez besoin d'envoyer une copie à plusieurs adresses, créez un alias et utilisez-le ici.",
         "tags": "Etiquettes",
         "app_passwd_protocols": "Protocoles autorisés pour le mot de passe de l'application",
         "dry": "Simuler la synchronisation"
@@ -194,7 +194,7 @@
         "generate": "générer",
         "guid": "GUID - Identifiant de l'instance",
         "guid_and_license": "GUID & Licence",
-        "hash_remove_info": "La suppression d'un hachage ratelimit (s'il existe toujours) réinitialisera complètement son compteur.<br>\r\n  Chaque hachage est indiqué par une couleur individuelle.",
+        "hash_remove_info": "La suppression d'un hachage limite d'envoi (s'il existe toujours) réinitialisera complètement son compteur.<br>\n  Chaque hachage est indiqué par une couleur individuelle.",
         "help_text": "Remplacer le texte d'aide sous le masque de connexion (HTML autorisé)",
         "host": "Hôte",
         "html": "HTML",
@@ -203,7 +203,7 @@
         "in_use_by": "Utilisé par",
         "inactive": "Inactif",
         "include_exclude": "Inclure/Exclure",
-        "include_exclude_info": "Par défaut - sans sélection - <b>toutes les boîtes</b> sont adressées",
+        "include_exclude_info": "Par défaut - sans sélection - <b>toutes les boîte de réception</b> sont adressées",
         "includes": "Inclure ces destinataires",
         "last_applied": "Dernière application",
         "license_info": "Une licence n’est pas requise, mais contribue au développement.<br><a href=\"https://www.servercow.de/mailcow?lang=en#sal\" target=\"_blank\" alt=\"SAL order\">Enregistrer votre GUID ici</a> or <a href=\"https://www.servercow.de/mailcow?lang=en#support\" target=\"_blank\" alt=\"Support order\">acheter le support pour votre intallation Mailcow.</a>",
@@ -222,7 +222,7 @@
         "no_record": "Aucun enregistrement",
         "oauth2_client_id": "Client ID",
         "oauth2_client_secret": "Secret client",
-        "oauth2_info": "L'implémentation OAuth2 prend en charge le type d'autorisation \"Authorization Code\" et émet des jetons d'actualisation.<br>\nLe serveur émet également automatiquement de nouveaux jetons d'actualisation, après qu'un jeton d'actualisation a été utilisé.<br><br>\n→ La portée par défaut est <i>profile</i>. Seuls les utilisateurs d'une boîte peuvent être authentifiés par rapport à OAuth2. Si le paramètre scope est omis, il revient au <i>profile</i>.<br>\n→ Le paramètre <i>state</i> doit être envoyé par le client dans le cadre de la demande d'autorisation.<br><br>\nChemins d'accès aux requêtes vers l'API OAuth <br>\n<ul>\n  <li>Point de terminaison d'autorisation : <code>/oauth/authorize</code></li>\n  <li>Point de terminaison du jeton : <code>/oauth/token</code></li>\n  <li>Page de ressource : <code>/oauth/profile</code></li>\n</ul>\nLa régénération du secret client ne fera pas expirer les codes d'autorisation existants, mais ils ne pourront pas renouveler leur jeton.<br><br>\nLa révocation des jetons clients entraînera la fin immédiate de toutes les sessions actives. Tous les clients doivent se ré-authentifier.",
+        "oauth2_info": "L'implémentation OAuth2 prend en charge le type d'autorisation \"Authorization Code\" et émet des jetons d'actualisation.<br>\nLe serveur émet également automatiquement de nouveaux jetons d'actualisation, après qu'un jeton d'actualisation a été utilisé.<br><br>\n→ La portée par défaut est <i>profile</i>. Seuls les utilisateurs d'une boîte de réception peuvent être authentifiés par rapport à OAuth2. Si le paramètre scope est omis, il revient au <i>profile</i>.<br>\n→ Le paramètre <i>state</i> doit être envoyé par le client dans le cadre de la demande d'autorisation.<br><br>\nChemins d'accès aux requêtes vers l'API OAuth <br>\n<ul>\n  <li>Point de terminaison d'autorisation : <code>/oauth/authorize</code></li>\n  <li>Point de terminaison du jeton : <code>/oauth/token</code></li>\n  <li>Page de ressource : <code>/oauth/profile</code></li>\n</ul>\nLa régénération du secret client ne fera pas expirer les codes d'autorisation existants, mais ils ne pourront pas renouveler leur jeton.<br><br>\nLa révocation des jetons clients entraînera la fin immédiate de toutes les sessions actives. Tous les clients doivent se ré-authentifier.",
         "oauth2_redirect_uri": "URI de redirection",
         "oauth2_renew_secret": "Générer un nouveau secret client",
         "oauth2_revoke_tokens": "Révoquer tous les jetons",
@@ -237,24 +237,24 @@
         "quarantine_max_age": "Âge maximun en jour(s)<br><small>La valeur doit être égale ou supérieure à 1 jour.</small>",
         "quarantine_max_size": "Taille maximum en Mo (les éléments plus grands sont mis au rebut):<br><small>0 ne signifie <b>pas</b> illimité.</small>",
         "quarantine_max_score": "Ignorer la notification si le score de spam est au dessus de cette valeur :<br><small>Par défaut : 9999.0</small>",
-        "quarantine_notification_html": "Modèle de courriel de notification:<br><small>Laisser vide pour restaurer le modèle par défaut.</small>",
-        "quarantine_notification_sender": "Notification par e-mail de l’expéditeur",
+        "quarantine_notification_html": "Modèle de courriel de notification :<br><small>Laisser vide pour restaurer le modèle par défaut.</small>",
+        "quarantine_notification_sender": "Notification par courriel de l’expéditeur",
         "quarantine_notification_subject": "Objet du courriel de notification",
         "quarantine_redirect": "<b>Rediriger toutes les notifications</b> vers ce destinataire:<br><small>Laisser vide pour désactiver. <b>Courrier non signé et non coché. Doit être livré en interne seulement.</b></small>",
         "quarantine_release_format": "Format des éléments diffusés",
         "quarantine_release_format_att": "En pièce jointe",
         "quarantine_release_format_raw": "Original non modifié",
-        "quarantine_retention_size": "Rétentions par boîte:<br><small>0 indique <b>inactive</b>.</small>",
-        "quota_notification_html": "Modèle de courriel de notification:<br><small>Laisser vide pour restaurer le modèle par défaut.</small>",
-        "quota_notification_sender": "Notification par e-mail de l’expéditeur",
+        "quarantine_retention_size": "Rétentions par boîte de réception:<br><small>0 indique <b>inactive</b>.</small>",
+        "quota_notification_html": "Modèle de courriel de notification :<br><small>Laisser vide pour restaurer le modèle par défaut.</small>",
+        "quota_notification_sender": "Notification par courriel de l’expéditeur",
         "quota_notification_subject": "Objet du courriel de notification",
         "quota_notifications": "Notifications de quotas",
         "quota_notifications_info": "Les notications de quota sont envoyées aux utilisateurs une fois lors du passage à 80 % et une fois lors du passage à 95 % d’utilisation.",
-        "quota_notifications_vars": "{{percent}} égale le quota actuel de l’utilisateur<br>{{username}} est le nom de la boîte",
+        "quota_notifications_vars": "{{percent}} égale le quota actuel de l’utilisateur<br>{{username}} est le nom de la boîte de réception",
         "r_active": "Restrictions actives",
         "r_inactive": "Restrictions inactives",
         "r_info": "Les éléments grisés/désactivés sur la liste des restrictions actives ne sont pas considérés comme des restrictions valides pour Mailcow et ne peuvent pas être déplacés. Des restrictions inconnues seront établies par ordre d’apparition de toute façon. <br>Vous pouvez ajouter de nouveaux éléments dans le code <code>inc/vars.local.inc.php</code> pour pouvoir les basculer.",
-        "rate_name": "Nom du taux",
+        "rate_name": "Nom de la limite",
         "recipients": "Destinataires",
         "refresh": "Rafraîchir",
         "regen_api_key": "Regénérer la clé API",
@@ -274,9 +274,9 @@
         "rsetting_no_selection": "Veuillez sélectionner une règle",
         "rsetting_none": "Pas de règles disponibles",
         "rsettings_insert_preset": "Insérer un exemple de préréglage \"%s\"",
-        "rsettings_preset_1": "Désactiver tout sauf DKIM et la limite tarifaire pour les utilisateurs authentifiés",
+        "rsettings_preset_1": "Désactiver tout sauf DKIM et la limite d'envoi pour les utilisateurs authentifiés",
         "rsettings_preset_2": "Les postmasters veulent du spam",
-        "rsettings_preset_3": "Autoriser uniquement des expéditeurs particuliers pour une boîte (c.-à-d. utilisation comme boîte interne seulement)",
+        "rsettings_preset_3": "Autoriser uniquement des expéditeurs particuliers pour une boîte de réception (c.-à-d. utilisation comme boîte de réception interne seulement)",
         "rspamd_com_settings": "Un nom de paramètre sera généré automatiquement, voir l’exemple de préréglages ci-dessous. Pour plus de détails voir : <a href=\"https://rspamd.com/doc/configuration/settings.html#settings-structure\" target=\"_blank\">Docs Rspamd</a>",
         "rspamd_global_filters": "Cartes des filtres globaux",
         "rspamd_global_filters_agree": "Je serai prudent !",
@@ -312,7 +312,7 @@
         "ui_header_announcement_type_warning": "Important",
         "ui_header_announcement_type_danger": "Très important",
         "ui_texts": "Textes et étiquettes de l'interface utilisateur",
-        "unban_pending": "unban en attente",
+        "unban_pending": "Débanissement en attente",
         "unchanged_if_empty": "Si non modifié, laisser en blanc",
         "upload": "Charger",
         "username": "Nom d'utilisateur",
@@ -338,7 +338,20 @@
         "oauth2_apps": "Applications OAuth2",
         "password_length": "Longueur des mots de passe",
         "password_policy_chars": "Doit contenir au moins une lettre",
-        "password_policy_length": "La longueur minimale du mot de passe est de %d"
+        "password_policy_length": "La longueur minimale du mot de passe est de %d",
+        "f2b_manage_external_info": "Fail2ban maintiendra la liste de bannissement, mais ne définira pas activement de règles pour bloquer le trafic. Utilisez la liste de bannissement générée ci-dessous pour bloquer le trafic de manière externe.",
+        "f2b_manage_external": "Gérer Fail2Ban en externe",
+        "transport_test_rcpt_info": "&#8226 ; Utilisez null@hosted.mailcow.de pour tester le relais vers une destination étrangère.",
+        "relay_rcpt": "Adresse \"À :\"",
+        "is_mx_based": "Basé sur MX",
+        "service": "",
+        "success": "",
+        "cors_settings": "",
+        "ip_check_opt_in": "",
+        "admins_ldap": "",
+        "login_time": "",
+        "options": "",
+        "queue_unban": ""
     },
     "danger": {
         "access_denied": "Accès refusé ou données de formulaire non valides",
@@ -352,9 +365,9 @@
         "app_passwd_id_invalid": "Le mot de passe ID %s de l'application est non valide",
         "bcc_empty": "La destination BCC destination ne peut pas être vide",
         "bcc_exists": "Une carte de transport BCC %s existe pour le type %s",
-        "bcc_must_be_email": "Le destination BCC %s n'est pas une adresse e-mail valide",
+        "bcc_must_be_email": "La destination BCC %s n'est pas une adresse de courriel valide",
         "comment_too_long": "Le commentaire est trop long, 160 caractère max sont permis",
-        "defquota_empty": "Le quota par défaut par boîte ne doit pas être 0.",
+        "defquota_empty": "Le quota par défaut par boîte de réception doit pas être 0.",
         "description_invalid": "La description des ressources pour %s est non valide",
         "dkim_domain_or_sel_exists": "Une clé DKIM pour \"%s\" existe et ne sera pas écrasée",
         "dkim_domain_or_sel_invalid": "Domaine ou sélection DKIM non valide : %s",
@@ -389,22 +402,22 @@
         "invalid_recipient_map_old": "Destinataire original spécifié non valide : %s",
         "ip_list_empty": "La liste des adresses IP autorisées ne peut pas être vide",
         "is_alias": "%s est déjà connu comme une adresse alias",
-        "is_alias_or_mailbox": "%s est déjà connu comme un alias, une boîte ou une adresse alias développée à partir d’un domaine alias.",
+        "is_alias_or_mailbox": "%s est déjà connu comme un alias, une boîte de réception ou une adresse alias développée à partir d’un domaine alias.",
         "is_spam_alias": "%s est déjà connu comme une adresse alias temporaire (alias d'adresse spam)",
         "last_key": "La dernière clé ne peut pas être supprimée, veuillez désactiver TFA à la place.",
         "login_failed": "La connexion a échoué",
         "mailbox_defquota_exceeds_mailbox_maxquota": "Le quota par défaut dépasse la limite maximale du quota",
-        "mailbox_invalid": "Le nom de la boîte n'est pas valide",
+        "mailbox_invalid": "Le nom de la boîte de réception n'est pas valide",
         "mailbox_quota_exceeded": "Le quota dépasse la limite du domaine (max. %d Mo)",
-        "mailbox_quota_exceeds_domain_quota": "Le quota maximum dépasse la limite du quota de domaine",
+        "mailbox_quota_exceeds_domain_quota": "Le quota maximal dépasse la limite du quota de domaine",
         "mailbox_quota_left_exceeded": "Espace libre insuffisant (espace libre : %d Mio)",
-        "mailboxes_in_use": "Le max. des boîtes doit être supérieur ou égal à %d",
+        "mailboxes_in_use": "Le max. des boîtes de réception doit être supérieur ou égal à %d",
         "malformed_username": "Nom d’utilisateur malformé",
         "map_content_empty": "Le contenu de la carte ne peut pas être vide",
         "max_alias_exceeded": "Le nombre max. d'aliases est dépassé",
-        "max_mailbox_exceeded": "Le nombre max. de boîte est dépassé (%d of %d)",
-        "max_quota_in_use": "Le quota de la boîte doit être supérieur ou égal à %d Mo",
-        "maxquota_empty": "Le quota maximum par boîte ne doit pas être de 0.",
+        "max_mailbox_exceeded": "Le nombre max. de boîte de réception est dépassé (%d of %d)",
+        "max_quota_in_use": "Le quota de la boîte de réception doit être supérieur ou égal à %d Mo",
+        "maxquota_empty": "Le quota maximum par boîte de réception ne doit pas être de 0.",
         "mysql_error": "Erreur MySQL : %s",
         "nginx_reload_failed": "Le rechargement de Nginx a échoué : %s",
         "network_host_invalid": "Réseau ou hôte non valide : %s",
@@ -429,15 +442,15 @@
         "release_send_failed": "Le message n’a pas pu être diffusé : %s",
         "reset_f2b_regex": "Le filtre regex n'a pas pu être réinitialisé à temps, veuillez réessayer ou attendre quelques secondes de plus et recharger le site web.",
         "resource_invalid": "Le nom de la resource %s n'est pas valide",
-        "rl_timeframe": "Le délai limite du taux est incorrect",
-        "rspamd_ui_pw_length": "Le mot de passe de l'interface Rspamd doit être de 6 caratères au minimum",
+        "rl_timeframe": "Le délai de la limite d'envoi est incorrect",
+        "rspamd_ui_pw_length": "Le mot de passe de l'interface Rspamd doit être de 6 caractères au minimum",
         "script_empty": "Le script ne peut pas être vide",
         "sender_acl_invalid": "La valeur ACL de l’expéditeur %s est invalide",
-        "set_acl_failed": "Impossible de définir ACL",
+        "set_acl_failed": "Impossible de définir l'ACL",
         "settings_map_invalid": "La carte des paramètres %s est invalide",
         "sieve_error": "Erreur d'analyse syntaxique Sieve : %s",
         "spam_learn_error": "Erreur d'apprentissage du spam : %s",
-        "subject_empty": "Le sujet ne peut^pas être vide",
+        "subject_empty": "Le sujet ne peut pas être vide",
         "target_domain_invalid": "Le domaine cible %s n'est pas valide",
         "targetd_not_found": "Le domaine cible %s est introuvable",
         "targetd_relay_domain": "Le domaine cible %s est un domaine de relais",
@@ -449,7 +462,7 @@
         "tls_policy_map_parameter_invalid": "Le paramètre Policy est invalide",
         "totp_verification_failed": "Echec de la vérification TOTP",
         "transport_dest_exists": "La destination de transport \"%s\" existe",
-        "webauthn_verification_failed": "Echec de la vérification WebAuthn : %s",
+        "webauthn_verification_failed": "Échec de la vérification WebAuthn : %s",
         "fido2_verification_failed": "La vérification FIDO2 a échoué : %s",
         "unknown": "Une erreur inconnue est survenue",
         "unknown_tfa_method": "Methode TFA inconnue",
@@ -458,13 +471,18 @@
         "validity_missing": "Veuillez attribuer une période de validité",
         "value_missing": "Veuillez fournir toutes les valeurs",
         "yotp_verification_failed": "La vérification Yubico OTP a échoué : %s",
-        "webauthn_authenticator_failed": "L'authentificateur selectionné est introuvable",
+        "webauthn_authenticator_failed": "L'authentificateur sélectionné est introuvable",
         "demo_mode_enabled": "Le mode de démonstration est activé",
-        "template_exists": "La template %s existe déja",
-        "template_id_invalid": "Le numéro de template %s est invalide",
-        "template_name_invalid": "Le nom de la template est invalide",
+        "template_exists": "Le modèle %s existe déjà",
+        "template_id_invalid": "Le numéro de modèle %s est invalide",
+        "template_name_invalid": "Le nom du modèle est invalide",
         "img_dimensions_exceeded": "L'image dépasse les dimensions maximales",
-        "img_size_exceeded": "L'image dépasse la taille maximale de fichier"
+        "img_size_exceeded": "L'image dépasse la taille maximale de fichier",
+        "webauthn_publickey_failed": "Aucune clé publique n'a été stockée pour l'authentificateur sélectionné.",
+        "cors_invalid_method": "Allow-Method specifiée invalide",
+        "cors_invalid_origin": "Allow-Origin spécifiée invalide",
+        "extended_sender_acl_denied": "ACL manquante pour définir les adresses des expéditeurs externes",
+        "webauthn_username_failed": "L'authentificateur sélectionné appartient à un autre compte"
     },
     "debug": {
         "chart_this_server": "Graphique (ce serveur)",
@@ -474,7 +492,7 @@
         "history_all_servers": "Historique (tous les serveurs)",
         "in_memory_logs": "Logs En-mémoire",
         "jvm_memory_solr": "Utilisation mémoire JVM",
-        "log_info": "<p>Les logs <b>En-mémoire</b> Mailcow sont collectés dans des listes Redis et découpées en LOG_LINES (%d) chaque minute pour réduire la charge.\r\n  <br>Les logs En-mémoire ne sont pas destinés à être persistants. Toutes les applications qui se connectent en mémoire, se connectent également au démon Docker et donc au pilote de journalisation par défaut.\r\n  <br>Le type de journal en mémoire doit être utilisé pour déboguer les problèmes mineurs avec les conteneurs.</p>\r\n  <p><b>Les logs externes</b> sont collectés via l'API de l'application concernée.</p>\r\n  <p>Les journaux <b>statiques</b> sont principalement des journaux d’activité, qui ne sont pas enregistrés dans Dockerd, mais qui doivent toujours être persistants (sauf pour les logs API).</p>",
+        "log_info": "<p>Les logs <b>En-mémoire</b> Mailcow sont collectés dans des listes Redis et découpées en LOG_LINES (%d) chaque minute pour réduire la charge.\n  <br>Les logs En-mémoire ne sont pas destinés à être persistants. Toutes les applications qui se connectent en mémoire, se connectent également au démon Docker, et donc au pilote de journalisation par défaut.\n  <br>Le type de journal en mémoire doit être utilisé pour déboguer les problèmes mineurs avec les conteneurs.</p>\n  <p><b>Les logs externes</b> sont collectés via l'API de l'application concernée.</p>\n  <p>Les journaux <b>statiques</b> sont principalement des journaux d’activité, qui ne sont pas enregistrés dans Dockerd, mais qui doivent toujours être persistants (sauf pour les logs API).</p>",
         "logs": "Logs",
         "restart_container": "Redémarrer",
         "solr_dead": "Solr est en cours de démarrage, désactivé ou mort.",
@@ -487,7 +505,25 @@
         "uptime": "Disponibilité",
         "started_on": "Démarré à",
         "static_logs": "Logs statiques",
-        "system_containers": "Système & Conteneurs"
+        "system_containers": "Système & Conteneurs",
+        "timezone": "Fuseau horaire",
+        "username": "Nom d'utilisateur",
+        "wip": "En cours de réalisation",
+        "architecture": "Architecture",
+        "cores": "Cœurs",
+        "current_time": "Heure du système",
+        "service": "",
+        "show_ip": "",
+        "memory": "",
+        "success": "",
+        "update_available": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "error_show_ip": "",
+        "container_running": "",
+        "container_disabled": "",
+        "container_stopped": "",
+        "login_time": ""
     },
     "diagnostics": {
         "cname_from_a": "Valeur dérivée de l’enregistrement A/AAAA. Ceci est supporté tant que l’enregistrement indique la bonne ressource.",
@@ -496,7 +532,7 @@
         "dns_records_docs": "Veuillez également consulter <a target=\"_blank\" href=\"https://docs.mailcow.email/getstarted/prerequisite-dns\">la documentation</a>.",
         "dns_records_data": "Données correcte",
         "dns_records_name": "Nom",
-        "dns_records_status": "Etat courant",
+        "dns_records_status": "État courant",
         "dns_records_type": "Type",
         "optional": "Cet enregistrement est optionel."
     },
@@ -511,7 +547,7 @@
         "app_passwd": "Mot de passe de l'application",
         "automap": "Essayer d’automatiser les dossiers (\"Sent items\", \"Sent\" => \"Sent\" etc.)",
         "backup_mx_options": "Options Backup MX",
-        "bcc_dest_format": "La destination BCC doit être une seule adresse e-mail valide.",
+        "bcc_dest_format": "La destination BCC doit être une seule adresse de courriel valide.",
         "client_id": "ID client",
         "client_secret": "Secret client",
         "comment_info": "Un commentaire privé n’est pas visible pour l’utilisateur, tandis qu’un commentaire public est affiché comme infobulle lorsque vous le placez dans un aperçu des utilisateurs",
@@ -527,7 +563,7 @@
         "domains": "Domaines",
         "dont_check_sender_acl": "Désactiver la vérification de l’expéditeur pour le domaine %s (+ alias de domaines)",
         "edit_alias_domain": "Édition des alias de domaine",
-        "encryption": "Cryptage",
+        "encryption": "Chiffrement",
         "exclude": "Exclure des objets (regex)",
         "extended_sender_acl": "Adresses de l’expéditeur externe",
         "extended_sender_acl_info": "Une clé de domaine DKIM doit être importée, si disponible.<br>\r\n  N’oubliez pas d’ajouter ce serveur à l’enregistrement TXT SPF correspondant.<br>\r\n  Chaque fois qu’un domaine ou un alias de domaine est ajouté à ce serveur, et qui chevauche une adresse externe, l’adresse externe est supprimée.<br>\r\n  Utiliser @domain.tld pour permettre l'envoi comme *@domain.tld.",
@@ -542,14 +578,14 @@
         "inactive": "Inactif",
         "kind": "Type",
         "last_modified": "Dernière modification",
-        "mailbox": "Édition de la boîte mail",
-        "mailbox_quota_def": "Quota par défaut de la boîte",
+        "mailbox": "Édition de la boîte de réception",
+        "mailbox_quota_def": "Quota par défaut de la boîte de réception",
         "max_aliases": "Nombre max. d'alias",
-        "max_mailboxes": "Nombre max. de boîtes possibles",
-        "max_quota": "Quota max. par boîte mail (Mo)",
+        "max_mailboxes": "Nombre max. de boîte de réception possibles",
+        "max_quota": "Quota max. par boîte de réception (Mo)",
         "maxage": "Âge maximal en jours des messages qui seront consultés à distance<br><small>(0 = ignorer la durée)</small>",
         "maxbytespersecond": "Octets max. par seconde <br><small>(0 = pas de limite)</small>",
-        "mbox_rl_info": "Cette limite de taux est appliquée au nom de connexion SASL, elle correspond à toute adresse \"from\" utilisée par l’utilisateur connecté. Une limite tarifaire pour les boîtes remplace une limite tarifaire pour l’ensemble du domaine.",
+        "mbox_rl_info": "Cette limite d'envoi est appliquée au nom de connexion SASL, elle correspond à toute adresse \"from\" utilisée par l’utilisateur connecté. Une limite d'envoi pour les boîtes de réception remplace une limite d'envoi pour l’ensemble du domaine.",
         "mins_interval": "Intervalle (min)",
         "multiple_bookings": "Réservations multiples",
         "nexthop": "Saut suivant",
@@ -559,22 +595,22 @@
         "private_comment": "Commentaire privé",
         "public_comment": "Commentaire public",
         "pushover_evaluate_x_prio": "Acheminement du courrier hautement prioritaire [<code>X-Priority: 1</code>]",
-        "pushover_info": "Les paramètres de notification push s’appliqueront à tout le courrier propre (non spam) livré à <b>%s</b> y compris les alias (partagés, non partagés, étiquetés).",
+        "pushover_info": "Les paramètres de notification push s’appliqueront à tout le courrier propre (non-spam) livré à <b>%s</b> y compris les alias (partagés, non partagés, étiquetés).",
         "pushover_only_x_prio": "Ne tenir compte que du courrier hautement prioritaire [<code>X-Priority: 1</code>]",
-        "pushover_sender_array": "Ne tenir compte que des adresses électroniques suivantes de l’expéditeur : <small>(séparées par des virgules)</small>",
+        "pushover_sender_array": "Ne tenir compte que des adresses de courriel suivantes de l’expéditeur : <small>(séparées par des virgules)</small>",
         "pushover_sender_regex": "Tenir compte de l’expéditeur regex suivant",
         "pushover_text": "Texte de la notification",
         "pushover_title": "Titre de la notification",
         "pushover_vars": "Lorsque aucun filtre d’expéditeur n’est défini, tous les messages seront considérés.<br>Les filtres Regex ainsi que les vérifications exactes de l’expéditeur peuvent être définis individuellement et seront considérés de façon séquentielle. Ils ne dépendent pas les uns des autres.<br>Variables utilisables pour le texte et le titre (veuillez prendre note des politiques de protection des données)",
-        "pushover_verify": "Vérifier les justificatifs",
+        "pushover_verify": "Vérifier les informations d'identification",
         "quota_mb": "Quota (Mo)",
-        "ratelimit": "Limite de taux",
-        "redirect_uri": "Redirection/rappel URL",
+        "ratelimit": "Limite d'envoi",
+        "redirect_uri": "URL de redirection/callback",
         "relay_all": "Relayer tous les destinataires",
-        "relay_all_info": "↪ Si vous <b>ne choissisez pas</b> de relayer tous les destinataires, vous devrez ajouter une boîte (\"aveugle\") pour chaque destinataire qui devrait être relayé.",
+        "relay_all_info": "↪ Si vous <b>ne choisissez pas</b> de relayer tous les destinataires, vous devrez ajouter une boîte de réception (\"aveugle\") pour chaque destinataire qui devrait être relayé.",
         "relay_domain": "Relayer ce domaine",
         "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> Vous pouvez définir des cartes de transport vers une destination personnalisée pour ce domaine. Si elle n’est pas configurée, une recherche MX sera effectuée.",
-        "relay_unknown_only": "Relais des boîtes non existantes seulement. Les boîtes existantes seront livrées localement..",
+        "relay_unknown_only": "Relais des boîtes de réception non existantes seulement. Les boîtes de réception existantes seront livrées localement.",
         "relayhost": "Transports dépendant de l’expéditeur",
         "remove": "Enlever",
         "resource": "Ressource",
@@ -582,12 +618,12 @@
         "scope": "Portée",
         "sender_acl": "Permettre d’envoyer comme",
         "sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">Le contrôle de l’expéditeur est désactivé</span>",
-        "sender_acl_info": "Si l’utilisateur de la boîte A est autorisé à envoyer en tant qu’utilisateur de la boîte B, l’adresse de l’expéditeur n’est pas automatiquement affichée comme sélectionnable du champ \"from\" dans SOGo.<br>\r\n  L’utilisateur B de la boîte doit créer une délégation dans Sogo pour permettre à l’utilisateur A de la boîte de sélectionner son adresse comme expéditeur. Pour déléguer une boîte dans Sogo, utilisez le menu (trois points) à droite du nom de votre boîte dans le coin supérieur gauche dans la vue de courrier. Ce comportement ne s’applique pas aux adresses alias.",
+        "sender_acl_info": "Si l’utilisateur de la boîte de réception A est autorisé à envoyer en tant qu’utilisateur de la boîte de réception B, l’adresse de l’expéditeur n’est pas automatiquement affichée comme sélectionnable du champ \"de\" dans SOGo.<br>\n  L’utilisateur B de la boîte de réception doit créer une délégation dans Sogo pour permettre à l’utilisateur A de la boîte de réception de sélectionner son adresse comme expéditeur. Pour déléguer une boîte de réception dans Sogo, utilisez le menu (trois points) à droite du nom de votre boîte dans le coin supérieur gauche dans la vue de courrier. Ce comportement ne s’applique pas aux adresses alias.",
         "sieve_desc": "Description courte",
         "sieve_type": "Type de filtre",
         "skipcrossduplicates": "Ignorer les messages en double dans les dossiers (premier arrivé, premier servi)",
         "sogo_visible": "Alias visible dans SOGo",
-        "sogo_visible_info": "Cette option affecte uniquement les objets qui peuvent être affichés dans SOGo (adresses alias partagées ou non partagées pointant vers au moins une boîte mail locale). Si caché, un alias n’apparaîtra pas comme expéditeur sélectionnable dans SOGo.",
+        "sogo_visible_info": "Cette option affecte uniquement les objets qui peuvent être affichés dans SOGo (adresses alias partagées ou non partagées pointant vers au moins une boîte de réception locale). Si caché, un alias n’apparaîtra pas comme expéditeur sélectionnable dans SOGo.",
         "spam_alias": "Créer ou modifier des adresses alias limitées dans le temps",
         "spam_filter": "Filtre spam",
         "spam_policy": "Ajouter ou supprimer des éléments à la liste blanche/noire",
@@ -601,9 +637,35 @@
         "title": "Éditer l'objet",
         "unchanged_if_empty": "Si non modifié, laisser en blanc",
         "username": "Nom d'utilisateur",
-        "validate_save": "Valider et sauver",
+        "validate_save": "Valider et enregistrer",
         "lookup_mx": "La destination est une expression régulière qui doit correspondre avec le nom du MX (<code>.*\\.google\\.com</code> pour acheminer tout le courrier destiné à un MX se terminant par google.com via ce saut)",
-        "mailbox_relayhost_info": "S'applique uniquement à la boîte aux lettres et aux alias directs, remplace le relayhost du domaine."
+        "mailbox_relayhost_info": "S'applique uniquement à la boîte de réception et aux alias directs, remplace le relayhost du domaine.",
+        "acl": "ACL (Permission)",
+        "footer_exclude": "Exclure du pied de page",
+        "custom_attributes": "Attributs personnalisés",
+        "domain_footer_info_vars": {
+            "from_addr": "{= from_addr =} - Partie de l'enveloppe relative à l'adresse de provenance",
+            "from_domain": "{= from_domain =} - Partie de l'enveloppe provenant du domaine",
+            "custom": "{= foo =} - Si la boîte de réception possède l'attribut personnalisé \"foo\" avec la valeur \"bar\", elle renvoie \"bar\"",
+            "auth_user": "{= auth_user =}    - Nom d'utilisateur authentifié spécifié par un MTA",
+            "from_user": "{= from_user =}   -La partie utilisateur de l'enveloppe, par exemple, pour \"moo@mailcow.tld\", renvoie \"moo\"",
+            "from_name": "{= from_name =} - À partir du nom de l'enveloppe, par exemple, pour \"Mailcow &lt;moo@mailcow.tld&gt ;\" on obtient \"Mailcow\""
+        },
+        "domain_footer_skip_replies": "Ignorer le pied de page des courriels de réponse",
+        "domain_footer": "Pied de page du domaine",
+        "domain_footer_html": "Pied de page HTML",
+        "domain_footer_info": "Les pieds de page du domaine sont ajoutés à tous les courriels sortants associés à une adresse au sein de ce domaine. <br> Les variables suivantes peuvent être utilisées pour le pied de page :",
+        "domain_footer_plain": "Pied de page",
+        "app_passwd_protocols": "Protocoles autorisés pour le mot de passe d'application",
+        "created_on": "Créé le",
+        "none_inherit": "Aucun / Héritage",
+        "quota_warning_bcc": "Avertissement sur les quotas BCC",
+        "quota_warning_bcc_info": "Les avertissements seront envoyés en copies séparées aux destinataires suivants. Le sujet sera précédé du nom d'utilisateur correspondant entre parenthèses, par exemple : <code>Avertissement sur les quotas (user@example.com)</code>.",
+        "sogo_access_info": "L'authentification unique à partir de l'interface de messagerie reste opérationnelle. Ce paramètre n'affecte pas l'accès à tous les autres services et ne supprime ni ne modifie le profil SOGo existant d'un utilisateur.",
+        "admin": "Modifier l'administrateur",
+        "pushover": "",
+        "pushover_sound": "",
+        "sogo_access": ""
     },
     "footer": {
         "cancel": "Annuler",
@@ -614,20 +676,23 @@
         "hibp_ok": "Aucune correspondance trouvée.",
         "loading": "Veuillez patienter…",
         "restart_container": "Redémarrer le conteneur",
-        "restart_container_info": "<b>Important:</b> Un redémarrage en douceur peut prendre un certain temps, veuillez attendre qu’il soit terminé.",
+        "restart_container_info": "<b>Important :</b> Un redémarrage en douceur peut prendre un certain temps, veuillez attendre qu’il soit terminé.",
         "restart_now": "Redémarrer maintenant",
-        "restarting_container": "Redémarrage du conteneur, cela peut prendre un certain temps"
+        "restarting_container": "Redémarrage du conteneur, cela peut prendre un certain temps",
+        "nothing_selected": "Rien n'est sélectionné",
+        "hibp_check": ""
     },
     "header": {
         "administration": "Configuration & détails",
         "apps": "Applications",
         "debug": "Information Système",
-        "email": "E-Mail",
+        "email": "Courriel",
         "mailcow_config": "Configuration",
         "quarantine": "Quarantaine",
         "restart_netfilter": "Redémarrer Netfilter",
         "restart_sogo": "Redémarrer SOGo",
-        "user_settings": "Paramètres utilisateur"
+        "user_settings": "Paramètres utilisateur",
+        "mailcow_system": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "En attente de la confirmation de TFA",
@@ -638,7 +703,7 @@
         "delayed": "La connexion a été retardée de %s secondes.",
         "fido2_webauthn": "FIDO2/WebAuthn Login",
         "login": "Connexion",
-        "mobileconfig_info": "Veuillez vous connecter en tant qu’utilisateur de la boîte pour télécharger le profil de connexion Apple demandé.",
+        "mobileconfig_info": "Veuillez vous connecter en tant qu’utilisateur de la boîte de réception pour télécharger le profil de connexion Apple demandé.",
         "other_logins": "Clé d'authentification",
         "password": "Mot de passe",
         "username": "Nom d'utilisateur"
@@ -646,7 +711,7 @@
     "mailbox": {
         "action": "Action",
         "activate": "Activer",
-        "active": "Active",
+        "active": "Actif",
         "add": "Ajouter",
         "add_alias": "Ajouter un alias",
         "add_bcc_entry": "Ajouter une carte BCC",
@@ -654,19 +719,19 @@
         "add_domain_alias": "Ajouter un alias de domaine",
         "add_domain_record_first": "Veuillez d’abord ajouter un domaine",
         "add_filter": "Ajouter un filtre",
-        "add_mailbox": "Ajouter une boîte",
+        "add_mailbox": "Ajouter une boîte de réception",
         "add_recipient_map_entry": "Ajouter la carte du destinataire",
         "add_resource": "Ajouter une ressource",
         "add_tls_policy_map": "Ajouter la carte de la politique des TLS",
         "address_rewriting": "Réécriture de l’adresse",
         "alias": "Alias",
-        "alias_domain_alias_hint": "Les alias <b>ne sont pas</b> appliqués automatiquement sur les alias de domaine. Un alias d'adresse <code>my-alias@domain</code> <b>ne couvre pas</b> l'adresse <code>my-alias@alias-domain</code> (où \"alias-domain\" est un alias imaginaire pour \"domain\").<br>Veuillez utiliser un filtre à tamis pour rediriger le courrier vers une boîte externe (voir l'onglet \"Filtres\" ou utilisez SOGo -> Forwarder).",
+        "alias_domain_alias_hint": "Les alias <b>ne sont pas</b> appliqués automatiquement sur les alias de domaine. Un alias d'adresse <code>my-alias@domain</code> <b>ne couvre pas</b> l'adresse <code>my-alias@alias-domain</code> (où \"alias-domain\" est un alias imaginaire pour \"domain\").<br>Veuillez utiliser un filtre à tamis pour rediriger le courrier vers une boîte de réception externe (voir l'onglet « Filtres » ou utilisez SOGo → Transférer).",
         "alias_domain_backupmx": "Alias de domaine inactif pour le domaine relais",
         "aliases": "Aliases",
         "allow_from_smtp": "Restreindre l'utilisation de <b>SMTP</b> à ces adresses IP",
         "allow_from_smtp_info": "Laissez vide pour autoriser tous les expéditeurs.<br>Adresses IPv4/IPv6 et réseaux.",
         "allowed_protocols": "Protocoles autorisés",
-        "backup_mx": "Sauvegarde MX",
+        "backup_mx": "Domaine de relais",
         "bcc": "BCC",
         "bcc_destination": "Destination BCC",
         "bcc_destinations": "Destinations BCC",
@@ -682,9 +747,9 @@
         "bcc_type": "Type de BCC",
         "booking_null": "Toujours montrer comme libre",
         "booking_0_short": "Toujours libre",
-        "booking_custom": "Limite rigide à un nombre de réservations personnalisé",
-        "booking_custom_short": "Limite rigide",
-        "booking_ltnull": "Illimité, mais afficher aussi occupé lorsque réservé",
+        "booking_custom": "Limitation stricte à un nombre personnalisé de réservations",
+        "booking_custom_short": "Limite stricte",
+        "booking_ltnull": "Illimité, mais indiqué comme occupé lors de la réservation",
         "booking_lt0_short": "Limite souple",
         "daily": "Quotidiennement",
         "deactivate": "Désactiver",
@@ -700,32 +765,32 @@
         "domain_quota_total": "Quota total du domaine",
         "domains": "Domaines",
         "edit": "Éditer",
-        "empty": "Pas de résulats",
+        "empty": "Pas de résultats",
         "enable_x": "Activer",
-        "excludes": "Exclut",
-        "filter_table": "Table de filtre",
+        "excludes": "Exclus",
+        "filter_table": "Table de filtrage",
         "filters": "Filtres",
         "fname": "Nom complet",
         "force_pw_update": "Forcer la mise à jour du mot de passe à la prochaine ouverture de session",
         "gal": "Carnet d'Adresses Global (GAL)",
-        "hourly": "Horaire",
+        "hourly": "Toutes les heures",
         "in_use": "Utilisé (%)",
         "inactive": "Inactif",
         "insert_preset": "Insérer un exemple de préréglage \"%s\"",
         "kind": "Type",
         "last_mail_login": "Dernière connexion mail",
         "last_modified": "Dernière modification",
-        "last_run": "Dernière éxécution",
+        "last_run": "Dernière exécution",
         "last_run_reset": "Calendrier suivant",
-        "mailbox": "Mailbox",
-        "mailbox_defquota": "Taille de boîte par défaut",
-        "mailbox_quota": "Taille max. d’une boîte",
-        "mailboxes": "Boîtes mail",
+        "mailbox": "Boîte de réception",
+        "mailbox_defquota": "Taille de boîte de réception par défaut",
+        "mailbox_quota": "Taille max. d’une boîte de réception",
+        "mailboxes": "Boîtes de réception",
         "mailbox_defaults": "Paramètres par défaut",
-        "mailbox_defaults_info": "Définir les paramètres par défaut pour les nouvelles boîtes aux lettres.",
+        "mailbox_defaults_info": "Définir les paramètres par défaut pour les nouvelles boîtes de réception.",
         "max_aliases": "Nombre maximal d'alias",
-        "max_mailboxes": "Nombre maximal de boîtes",
-        "max_quota": "Quota max. par boîte mail",
+        "max_mailboxes": "Nombre maximal de boîte de réception",
+        "max_quota": "Quota max. par boîte de réception",
         "mins_interval": "Intervalle (min)",
         "msg_num": "Message #",
         "multiple_bookings": "Réservations multiples",
@@ -736,18 +801,18 @@
         "owner": "Propriétaire",
         "private_comment": "Commentaire privé",
         "public_comment": "Commentaire public",
-        "q_add_header": "Courriers indésirables",
-        "q_all": " quand déplacé dans le dossier spam ou rejeté",
-        "q_reject": "Rejecté",
+        "q_add_header": "lorsqu'il est déplacé dans le dossier Indésirables",
+        "q_all": " quand déplacé dans le dossier indésirables ou rejeté",
+        "q_reject": "en cas de refus",
         "quarantine_notification": "Avis de quarantaine",
         "quarantine_category": "Catégorie de la notification de quarantaine",
         "quick_actions": "Actions",
         "recipient_map": "Carte du destinataire",
         "recipient_map_info": "Les cartes des destinataires sont utilisées pour remplacer l’adresse de destination d’un message avant sa livraison.",
         "recipient_map_new": "Nouveau destinataire",
-        "recipient_map_new_info": "La destination de la carte du destinataire doit être une adresse électronique valide.",
+        "recipient_map_new_info": "La destination de la carte du destinataire doit être une adresse de courriel valide.",
         "recipient_map_old": "Destinataire original",
-        "recipient_map_old_info": "Une carte de destination originale doit être une adresse e-mail valide ou un nom de domaine.",
+        "recipient_map_old_info": "Une carte de destination originale doit être une adresse de courriel valide ou un nom de domaine.",
         "recipient_maps": "Cartes des bénéficiaires",
         "relay_all": "Relayer tous les destinataires",
         "remove": "Supprimer",
@@ -755,16 +820,16 @@
         "running": "En fonctionnement",
         "set_postfilter": "Marquer comme postfiltre",
         "set_prefilter": "Marquer comme préfiltre",
-        "sieve_info": "Vous pouvez stocker plusieurs filtres par utilisateur, mais un seul préfiltre et un seul postfiltre peuvent être actifs en même temps.<br>\r\nChaque filtre sera traité dans l’ordre décrit. Ni un script \"rejeter\" ni un \"garder\" n’arrêtera le traitement des autres scripts. Les modifications apportées aux scripts de tamis globaux déclencheront un redémarrage de Dovecot.<br><br>Préfiltre de tamis global → Préfiltre → Scripts utilisateur → Postfiltre → Postfiltre du tamis global",
+        "sieve_info": "Vous pouvez stocker plusieurs filtres par utilisateur, mais un seul préfiltre et un seul postfiltre peuvent être actifs simultanément.<br>\nChaque filtre sera traité dans l’ordre décrit. Ni un script « rejeter » ni un « garder » n’arrêtera le traitement des autres scripts. Les modifications apportées aux scripts de tamis globaux déclencheront un redémarrage de Dovecot.<br><br>Préfiltre de tamis global → Préfiltre → Scripts utilisateur → Postfiltre → Postfiltre du tamis global",
         "sieve_preset_1": "Jeter le courrier avec les types de fichiers dangereux probables",
-        "sieve_preset_2": "Toujours marquer l’e-mail d’un expéditeur spécifique comme vu",
-        "sieve_preset_3": "Jeter en silence, arrêter tout traitement supplémentaire du tamis",
-        "sieve_preset_4": "Fichier dans INBOX, éviter le traitement ultérieur par filtres à tamis",
+        "sieve_preset_2": "Toujours marquer l'adresse de courriel d’un expéditeur spécifique comme vu",
+        "sieve_preset_3": "Jeter en silence, arrêter tout traitement supplémentaire par filtre sieve",
+        "sieve_preset_4": "Fichier dans INBOX, éviter le traitement ultérieur par filtres sieve",
         "sieve_preset_5": "Répondeur auto (vacances)",
         "sieve_preset_6": "Rejeter le courrier avec réponse",
         "sieve_preset_7": "Rediriger et garder/déposer",
-        "sieve_preset_8": "Supprimer le message envoyé à une adresse alias dont fait partie l’expéditeur",
-        "sieve_preset_header": "Voir les exemples de préréglages ci-dessous. Pour plus de détails voir <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipedia</a>.",
+        "sieve_preset_8": "Rediriger les courriels d'un expéditeur spécifique, les marquer comme lus et les classer dans des sous-dossiers.",
+        "sieve_preset_header": "Voir les exemples de préréglages ci-dessous. Pour plus de détails, voir <a href=\"https://en.wikipedia.org/wiki/Sieve_(mail_filtering_language)\" target=\"_blank\">Wikipédia</a>.",
         "sogo_visible": "Alias visible dans SOGo",
         "sogo_visible_n": "Masquer alias dans SOGo",
         "sogo_visible_y": "Afficher alias dans SOGo",
@@ -785,19 +850,44 @@
         "tls_map_policy": "Politique",
         "tls_policy_maps": "Cartes des politiques des TLS",
         "tls_policy_maps_info": "Cette carte de politique remplace les règles de transport TLS sortantes indépendamment des paramètres de politique TLS des utilisateurs.<br>\r\n  Veuillez vérifier <a href=\"http://www.postfix.org/postconf.5.html#smtp_tls_policy_maps\" target=\"_blank\">la doc \"smtp_tls_policy_maps\" </a> pour plus d'informations.",
-        "tls_policy_maps_enforced_tls": "Ces politiques remplaceront également le comportement des utilisateurs de boîtes qui appliquent les connexions TLS sortantes. Si aucune politique n’existe ci-dessous, ces utilisateurs appliqueront les valeurs par défaut spécifiées comme <code>smtp_tls_mandatory_protocols</code> et <code>smtp_tls_mandatory_ciphers</code>.",
+        "tls_policy_maps_enforced_tls": "Ces politiques remplaceront également le comportement des utilisateurs de boîtes de réception qui appliquent les connexions TLS sortantes. Si aucune politique n’existe ci-dessous, ces utilisateurs appliqueront les valeurs par défaut spécifiées comme <code>smtp_tls_mandatory_protocols</code> et <code>smtp_tls_mandatory_ciphers</code>.",
         "tls_policy_maps_long": "Contournement de la carte de politique TLS sortante",
         "toggle_all": "Tout basculer",
         "username": "Nom d'utilisateur",
         "waiting": "En attente",
         "weekly": "Hebdomadaire",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "add_alias_expand": "Étendre l'alias aux alias de domaine",
+        "catch_all": "Catch-All",
+        "created_on": "Créé le",
+        "goto_ham": "Apprendre comme <b>ham</b>",
+        "goto_spam": "Apprendre comme <b>pourriel</b>",
+        "last_pw_change": "Dernier changement de mot de passe",
+        "mailbox_templates": "Modèle de boîte de réception",
+        "relay_unknown": "Relayer les boîtes de réception inconnues",
+        "all_domains": "Tous les domaines",
+        "syncjob_EXIT_OVERQUOTA": "Quota dépassé de la boîte de réception cible",
+        "syncjob_check_log": "",
+        "add_template": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "templates": "",
+        "recipient": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "template": "",
+        "domain_templates": "",
+        "open_logs": "",
+        "sender": ""
     },
     "oauth2": {
-        "access_denied": "Veuillez vous connecter en tant que propriétaire de la boîte pour accorder l’accès via Oauth2.",
+        "access_denied": "Veuillez vous connecter en tant que propriétaire de la boîte de réception pour accorder l’accès via Oauth2.",
         "authorize_app": "Autoriser l'application",
         "deny": "Refuser",
-        "permit": "Autorise l'application",
+        "permit": "Autoriser l'application",
         "profile": "Profil",
         "profile_desc": "Afficher les informations personnelles : nom d’utilisateur, nom complet, créé, modifié, actif",
         "scope_ask_permission": "Une application demande les permissions suivantes"
@@ -810,8 +900,8 @@
         "confirm_delete": "Confirmer la suppression de cet élément.",
         "danger": "Danger",
         "deliver_inbox": "Envoyer dans la boîte de reception",
-        "disabled_by_config": "La configuration actuelle du système désactive la fonctionnalité de quarantaine. Veuillez définir \"retentions par boîte\" et une \"taille maximum\" pour les éléments en quarantaine.",
-        "settings_info": "Quantité maximum d'éléments à mettre en quarantaine : %s<br>Taille maximale des e-mails : %s MiB",
+        "disabled_by_config": "La configuration actuelle du système désactive la fonctionnalité de quarantaine. Veuillez définir « retentions par boîte » et une « taille maximale » pour les éléments en quarantaine.",
+        "settings_info": "Quantité maximale d'éléments à mettre en quarantaine : %s<br>Taille maximale des courriels : %s MiB",
         "download_eml": "Télécharger (.eml)",
         "empty": "Pas de résultat",
         "high_danger": "Haut",
@@ -824,7 +914,7 @@
         "notified": "Notifié",
         "qhandler_success": "Demande envoyée avec succès au système. Vous pouvez maintenant fermer la fenêtre.",
         "qid": "Rspamd QID",
-        "qinfo": "Le système de quarantaine enregistrera le courrier rejeté dans la base de données (l'expéditeur n'aura <em> pas </em> l'impression d'un courrier remis) ainsi que le courrier, qui est remis sous forme de copie dans le dossier indésirable d'une boîte aux lettres.\r\n  <br>\"Apprendre comme spam et supprimer\" apprendra un message comme spam via le théorème Bayesianet calculera également des hachages flous pour refuser des messages similaires à l'avenir.\r\n  <br>Veuillez noter que l'apprentissage de plusieurs messages peut prendre du temps, selon votre système. <br> Les éléments figurant sur la liste noire sont exclus de la quarantaine.",
+        "qinfo": "Le système de quarantaine enregistrera le courrier rejeté dans la base de données (l'expéditeur n'aura <em> pas </em> l'impression d'un courrier remis) ainsi que le courrier, remis sous forme de copie dans le dossier indésirable d'une boîte de réception.\n  <br>« Apprendre comme spam et supprimer » apprendra un message comme spam via le théorème Bayésien calculera également des hachages flous pour refuser des messages similaires à l'avenir.\n  <br>Veuillez noter que l'apprentissage de plusieurs messages peut prendre du temps, selon votre système. <br> Les éléments figurant sur la liste noire sont exclus de la quarantaine.",
         "qitem": "Élément de quarantaine",
         "quarantine": "Quarantaine",
         "quick_actions": "Actions",
@@ -856,26 +946,39 @@
         "toggle_all": "Tout basculer"
     },
     "queue": {
-        "queue_manager": "Gestion de la file d'attente"
+        "queue_manager": "Gestion de la file d'attente",
+        "hold_mail": "Garder",
+        "legend": "Fonctions d'action de la file d'attente du courrier :",
+        "info": "La file d'attente contient tous les courriels en attente de livraison. Si un courriel reste longtemps dans la file d'attente, il est automatiquement supprimé par le système.<br>Le message d'erreur du courriel concerné indique pourquoi le courriel n'a pas pu être distribué.",
+        "deliver_mail_legend": "Tentatives de réexpédition des courriers sélectionnés.",
+        "hold_mail_legend": "Met en attente les courriers sélectionnés. (Empêche les tentatives de distribution ultérieures)",
+        "unban": "file d'attente d'unban",
+        "unhold_mail": "Libérer",
+        "unhold_mail_legend": "Libère les courriers sélectionnés pour la distribution. (Nécessite une mise en attente préalable)",
+        "deliver_mail": "",
+        "delete": "",
+        "flush": "",
+        "show_message": "",
+        "ays": ""
     },
     "start": {
         "help": "Afficher/masquer le panneau d’aide",
-        "imap_smtp_server_auth_info": "Veuillez utiliser votre adresse e-mail complète et le mécanisme d’authentification PLAIN.<br>\r\nVos données de connexion seront cryptées par le cryptage obligatoire côté serveur.",
-        "mailcow_apps_detail": "Utiliser une application mailcow pour accéder à vos messages, calendrier, contacts et plus.",
-        "mailcow_panel_detail": "<b>Les administrateurs de domaines</b> peuvent créer, modifier or supprimer des boîtes et alias, changer de domaines et lire de plus amples renseignements sur les domaines qui leurs sont attribués.<br>\r\n<b>Les utilisateurs de boîtes</b> sont en mesure de créer des alias limités dans le temps (alias spam), de modifier leurs mots de passe et les paramètres du filtre anti-spam."
+        "imap_smtp_server_auth_info": "Veuillez utiliser votre adresse courriel complète et le mécanisme d’authentification PLAIN.<br>\nVos données de connexion seront cryptées par le cryptage obligatoire côté serveur.",
+        "mailcow_apps_detail": "Utiliser une application mailcow pour accéder à vos messages, vos calendriers, vos contacts et plus.",
+        "mailcow_panel_detail": "<b>Les administrateurs de domaines</b> peuvent créer, modifier, ou supprimer des boîtes de réception et alias, changer de domaines et lire de plus amples renseignements sur les domaines qui leur sont attribués.<br>\n<b>Les utilisateurs de boîtes de réception</b> sont en mesure de créer des alias limités dans le temps (alias spam), de modifier leurs mots de passe et les paramètres du filtre anti-spam."
     },
     "success": {
-        "acl_saved": "ACL (Access Control List) pour l'objet %s sauvé",
-        "admin_added": "Administrateur %s a été ajoutées",
+        "acl_saved": "ACL (Access Control List) pour l'objet %s enregistré",
+        "admin_added": "Administrateur %s a été ajouté",
         "admin_api_modified": "Les modifications apportées à l’API ont été enregistrées",
         "admin_modified": "Les modifications apportées à l’administrateur ont été enregistrées",
         "admin_removed": "Administrateur %s a été effacé",
         "alias_added": "L'adresse alias %s (%d) a été ajoutée",
         "alias_domain_removed": "L'alias de domaine %s a été effacé",
-        "alias_modified": "Le changement de l'adresse alias %s a été sauvegardée",
+        "alias_modified": "Le changement de l'adresse alias %s a été enregistré",
         "alias_removed": "L'alias %s a été effacé",
         "aliasd_added": "Alias de domaine %s ajouté",
-        "aliasd_modified": "Les changements de l'alias de domaine %s ont été sauvegardés",
+        "aliasd_modified": "Les changements de l'alias de domaine %s ont été enregistrés",
         "app_links": "Modifications enregistrées dans les liens d’application",
         "app_passwd_added": "Ajout d’un nouveau mot de passe d’application",
         "app_passwd_removed": "Suppression de l’identifiant du mot de passe de l’application %s",
@@ -887,14 +990,14 @@
         "delete_filters": "Filtres supprimés : %s",
         "deleted_syncjob": "ID du travail de synchronisation supprimé : %s",
         "deleted_syncjobs": "Travail de synchronisation supprimé : %s",
-        "dkim_added": "La clé DKIM %s a été sauvegardée",
-        "dkim_duplicated": "La clé DKIM pour e domaine %s a été copiée vers %s",
+        "dkim_added": "La clé DKIM %s a été enregistrée",
+        "dkim_duplicated": "La clé DKIM pour le domaine %s a été copiée vers %s",
         "dkim_removed": "La clé DKIM %s a été supprimée",
         "domain_added": "Domaine ajouté %s",
         "domain_admin_added": "L'administrateur de domaine %s a été ajouté",
-        "domain_admin_modified": "Les modifications de l'administrateur de domaine %s ont été sauvées",
+        "domain_admin_modified": "Les modifications de l'administrateur de domaine %s ont été enregistrées",
         "domain_admin_removed": "L'administrateur de domaine %s a été supprimé",
-        "domain_modified": "Les modification du domaine %s ont été sauvées",
+        "domain_modified": "Les modifications du domaine %s ont été enregistrées",
         "domain_removed": "Le domaine %s a été supprimé",
         "dovecot_restart_success": "Dovecot a été relancé avec succès",
         "eas_reset": "Les périphériques Activesync pour l’utilisateur %s ont été réinitialisés",
@@ -910,40 +1013,49 @@
         "learned_ham": "ID %s acquis avec succès comme ham",
         "license_modified": "Les modifications apportées à la licence ont été enregistrées",
         "logged_in_as": "Connecté en tant que %s",
-        "mailbox_added": "La boîte mail %s a été ajoutée",
-        "mailbox_modified": "Les modifications de la boîte %s ont été sauvées",
-        "mailbox_removed": "La boîte %s a été supprimée",
+        "mailbox_added": "La boîte de réception %s a été ajoutée",
+        "mailbox_modified": "Les modifications de la boîte de réception %s ont été enregistrées",
+        "mailbox_removed": "La boîte de réception %s a été supprimée",
         "nginx_reloaded": "Nginx a été rechargé",
-        "object_modified": "Les changements de %s ont été sauvés",
+        "object_modified": "Les changements de %s ont été enregistrés",
         "pushover_settings_edited": "Paramètres Pushover réglés avec succès, veuillez vérifier les informations d’identification.",
         "qlearn_spam": "Le message ID %s a été appris comme spam et supprimé",
         "queue_command_success": "Queue de commande terminée avec succès",
         "recipient_map_entry_deleted": "La carte du destinataire ID %s a été effacée",
-        "recipient_map_entry_saved": "L'entrée de la carte du bénéficiaire \"%s\" a été sauvée",
+        "recipient_map_entry_saved": "L'entrée de la carte du bénéficiaire \"%s\" a été enregistrée",
         "relayhost_added": "L'entrée de la carte %s a été ajoutée",
         "relayhost_removed": "L'entrée de la carte %s a été supprimée",
         "reset_main_logo": "Réinitialisation du logo par défaut",
         "resource_added": "La ressource %s a été ajoutée",
-        "resource_modified": "Les modifications apportées à la boîte %s ont été enregistrées",
+        "resource_modified": "Les modifications apportées à la boîte de réception %s ont été enregistrées",
         "resource_removed": "La ressource %s a été supprimée",
-        "rl_saved": "Limite de taux pour l’objet %s enregistrée",
+        "rl_saved": "Limite d'envoi pour l’objet %s enregistrée",
         "rspamd_ui_pw_set": "Mot de passe de l'interface Rspamd sauvegardé avec succès",
         "saved_settings": "Paramètres enregistrés",
         "settings_map_added": "Ajout de l’entrée de la carte des paramètres",
         "settings_map_removed": "Suppression de la carte des paramètres ID %s",
         "sogo_profile_reset": "Le profil SOGo profile pour l'utilisateur %s est remis à zéro",
-        "tls_policy_map_entry_deleted": "La carte de stratégie TLS ID %s a été supprimé",
-        "tls_policy_map_entry_saved": "La carte de stratégie TLS ID \"%s\" a été sauvée",
+        "tls_policy_map_entry_deleted": "La carte de stratégie TLS ID %s a été supprimée",
+        "tls_policy_map_entry_saved": "La carte de stratégie TLS ID \"%s\" a été enregistrée",
         "ui_texts": "Enregistrement des modifications apportées aux textes de l’interface utilisateur",
         "upload_success": "Fichier téléchargé avec succès",
         "verified_totp_login": "Authentification TOTP vérifiée",
         "verified_webauthn_login": "Authentification WebAuthn vérifiée",
         "verified_fido2_login": "Authentification FIDO2 vérifiée",
-        "verified_yotp_login": "Authentification Yubico OTP vérifiée"
+        "verified_yotp_login": "Authentification Yubico OTP vérifiée",
+        "cors_headers_edited": "Les paramètres CORS ont été enregistrés",
+        "domain_footer_modified": "Les modifications apportées au pied de page du domaine %s ont été enregistrées",
+        "f2b_banlist_refreshed": "L'ID de la liste de ban a été actualisé avec succès.",
+        "template_added": "Modèles ajoutés %s",
+        "template_removed": "Le modèle ayant l'ID %s a été supprimé",
+        "domain_add_dkim_available": "A DKIM key did already exist",
+        "ip_check_opt_in_modified": "Le contrôle de l'IP a été enregistré avec succès",
+        "password_policy_saved": "",
+        "template_modified": ""
     },
     "tfa": {
-        "api_register": "%s utilise l'API Yubico Cloud. Veuillez obtenir une clé API pour votre clé <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">here</a>",
-        "confirm": "confirmer",
+        "api_register": "%s utilise l'API Yubico Cloud. Veuillez obtenir une clé API pour votre clé <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">ici</a>",
+        "confirm": "Confirmer",
         "confirm_totp_token": "Veuillez confirmer vos modifications en saisissant le jeton généré",
         "delete_tfa": "Désactiver TFA",
         "disable_tfa": "Désactiver TFA jusqu’à la prochaine ouverture de session réussie",
@@ -964,21 +1076,25 @@
         "webauthn": "Authentification WebAuthn",
         "waiting_usb_auth": "<i>En attente d’un périphérique USB…</i><br><br>S’il vous plaît appuyez maintenant sur le bouton de votre périphérique USB WebAuthn.",
         "waiting_usb_register": "<i>En attente d’un périphérique USB…</i><br><br>Veuillez entrer votre mot de passe ci-dessus et confirmer votre inscription WebAuthn en appuyant sur le bouton de votre périphérique USB WebAuthn.",
-        "yubi_otp": "Authentification OTP Yubico"
+        "yubi_otp": "Authentification OTP Yubico",
+        "authenticators": "Authentificateurs",
+        "u2f_deprecated_important": "Veuillez enregistrer votre clé dans le panneau d'administration avec la nouvelle méthode WebAuthn.",
+        "u2f_deprecated": "Il semble que votre clé ait été enregistrée à l'aide de la méthode U2F obsolète. Nous allons désactiver l'authentification à deux facteurs pour vous et supprimer votre clé."
     },
     "fido2": {
         "set_fn": "Définir un nom",
         "fn": "Nom",
-        "rename": "renommer",
+        "rename": "Renommer",
         "confirm": "Confirmer",
-        "register_status": "Etat de l'enregistrement",
+        "register_status": "État de l'enregistrement",
         "known_ids": "Identifiant(s) connu(s)",
         "none": "Désactivé",
         "set_fido2": "Enregistrer un nouvel appareil FIDO2",
         "start_fido2_validation": "Tester la validation FIDO2",
         "fido2_auth": "Se connecter avec FIDO2",
         "fido2_success": "L'appareil est enregistré avec succès",
-        "fido2_validation_failed": "La validation a échoué"
+        "fido2_validation_failed": "La validation a échoué",
+        "set_fido2_touchid": "Enregistrer Touch ID sur Apple M1"
     },
     "user": {
         "action": "Action",
@@ -995,9 +1111,9 @@
         "alias_valid_until": "Valide jusque",
         "aliases_also_send_as": "Aussi autorisé à envoyer en tant qu’utilisateur",
         "aliases_send_as_all": "Ne pas vérifier l’accès de l’expéditeur pour les domaines suivants et leurs alias",
-        "app_hint": "Les mots de passe d’application sont des mots de passe alternatifs pour votre connexion IMAP, SMTP, Caldav, Carddav et EAS. Le nom d’utilisateur reste inchangé.<br>SOGo n'est pas disponible au travers de mots de passe.",
+        "app_hint": "Les mots de passe d’application sont des mots de passe alternatifs pour votre connexion IMAP, SMTP, Caldav, Carddav et EAS. Le nom d’utilisateur reste inchangé.<br>SOGo n'est pas disponible au travers des mots de passe d'application.",
         "app_name": "Nom d'application",
-        "app_passwds": "Mots de passe de l'application",
+        "app_passwds": "Mots de passe d'applications",
         "apple_connection_profile": "Profil de connexion Apple",
         "apple_connection_profile_complete": "Ce profil de connexion inclut les paramètres IMAP et SMTP ainsi que les chemins Caldav (calendriers) et Carddav (contacts) pour un appareil Apple.",
         "apple_connection_profile_mailonly": "Ce profil de connexion inclut les paramètres de configuration IMAP et SMTP pour un périphérique Apple.",
@@ -1010,14 +1126,14 @@
         "delete_ays": "Veuillez confirmer le processus de suppression.",
         "direct_aliases": "Adresses alias directes",
         "direct_aliases_desc": "Les adresses d’alias directes sont affectées par le filtre anti-spam et les paramètres de politique TLS.",
-        "eas_reset": "Réinitialiser le cache de l’appareil Activesync",
-        "eas_reset_help": "Dans de nombreux cas, une réinitialisation du cache de l’appareil aidera à récupérer un profil Activesync cassé.<br><b>Attention :</b> Tous les éléments seront à nouveau téléchargés !",
+        "eas_reset": "Réinitialiser le cache de l’appareil ActiveSync",
+        "eas_reset_help": "Dans de nombreux cas, une réinitialisation du cache de l’appareil aidera à récupérer un profil ActiveSync cassé.<br><b>Attention :</b> Tous les éléments seront de nouveau téléchargés !",
         "eas_reset_now": "Réinitialiser maintenant",
         "edit": "Éditer",
-        "email": "E-mail",
-        "email_and_dav": "E-mail, calendriers et contacts",
-        "encryption": "Cryptage",
-        "excludes": "Exclut",
+        "email": "Courriel",
+        "email_and_dav": "Courriel, calendriers et contacts",
+        "encryption": "Chiffrement",
+        "excludes": "Exclus",
         "expire_in": "Expire dans",
         "force_pw_update": "Vous <b>devez</b> définir un nouveau mot de passe pour pouvoir accéder aux services liés aux logiciels de groupe.",
         "generate": "générer",
@@ -1030,7 +1146,7 @@
         "last_mail_login": "Dernière connexion mail",
         "last_run": "Dernière exécution",
         "loading": "Chargement…",
-        "mailbox_details": "Détails de la boîte",
+        "mailbox_details": "Détails",
         "messages": "messages",
         "never": "jamais",
         "new_password": "Nouveau mot de passe",
@@ -1044,27 +1160,27 @@
         "pushover_evaluate_x_prio": "Acheminement du courrier hautement prioritaire [<code>X-Priority: 1</code>]",
         "pushover_info": "Les paramètres de notification push s’appliqueront à tout le courrier propre (non spam) livré à <b>%s</b> y compris les alias (partagés, non partagés, étiquetés).",
         "pushover_only_x_prio": "Ne tenir compte que du courrier hautement prioritaire [<code>X-Priority: 1</code>]",
-        "pushover_sender_array": "Tenez compte des adresses courriel suivantes de l’expéditeur : <small>(comma-separated)</small>",
+        "pushover_sender_array": "Tenir compte des adresses de courriel suivantes de l’expéditeur : <small>(comma-separated)</small>",
         "pushover_sender_regex": "Apparier les expéditeurs par le regex suivant",
         "pushover_text": "Texte de notification",
         "pushover_title": "Titre de la notification",
-        "pushover_vars": "Lorsquaucun filtre d’expéditeur n’est défini, tous les messages seront considérés.<br>Les filtres Regex ainsi que les vérifications exactes de l’expéditeur peuvent être définis individuellement et seront considérés de façon séquentielle. Ils ne dépendent pas les uns des autres.<br>Variables utilisables pour le texte et le titre (veuillez prendre note des politiques de protection des données)",
-        "pushover_verify": "Vérifier les justificatifs",
+        "pushover_vars": "Lorsque aucun filtre d’expéditeur n’est défini, tous les messages seront considérés.<br>Les filtres Regex ainsi que les vérifications exactes de l’expéditeur peuvent être définis individuellement et seront considérés de façon séquentielle. Ils ne dépendent pas les uns des autres.<br>Variables utilisables pour le texte et le titre (veuillez prendre note des politiques de protection des données)",
+        "pushover_verify": "Vérifier les identifiants",
         "q_add_header": "Courrier indésirable",
         "q_all": "Toutes les catégories",
         "q_reject": "Rejeté",
         "quarantine_notification": "Avis de quarantaine",
         "quarantine_category": "Catégorie de la notification de quarantaine",
-        "quarantine_notification_info": "Une fois qu’un avis a été envoyé, les articles seront marqués comme \"notified\" et aucune autre notification ne sera envoyée pour ce point particulier.",
-        "quarantine_category_info": "La catégorie de notification \"Rejeté\" inclut le courrier qui a été rejeté, tandis que \"Dossier indésirable\" informera un utilisateur des e-mails qui ont été placés dans le dossier indésirable.",
+        "quarantine_notification_info": "Une fois qu’un avis a été envoyé, les articles seront marqués comme « notifiés » et aucune autre notification ne sera envoyée pour ce point particulier.",
+        "quarantine_category_info": "La catégorie de notification « Rejeté » inclut le courrier rejeté, tandis que « Dossier indésirable » informera un utilisateur des courriels placés dans le dossier indésirable.",
         "remove": "Enlever",
-        "running": "En fonction",
-        "save": "Sauvegarder les changements",
-        "save_changes": "Sauvegarder les changements",
+        "running": "En fonctionnement",
+        "save": "Enregistrer les changements",
+        "save_changes": "Enregistrer les changements",
         "sender_acl_disabled": "<span class=\"badge fs-6 bg-danger\">Le contrôle de l’expéditeur est désactivé</span>",
         "shared_aliases": "Adresses alias partagées",
         "shared_aliases_desc": "Les alias partagés ne sont pas affectés par les paramètres spécifiques à l’utilisateur tels que le filtre anti-spam ou la politique de chiffrement. Les filtres anti-spam correspondants ne peuvent être effectués que par un administrateur en tant que politique de domaine.",
-        "show_sieve_filters": "Afficher le filtre de tamis actif de l’utilisateur",
+        "show_sieve_filters": "Afficher le filtre sieve actif de l’utilisateur",
         "sogo_profile_reset": "Remise à zéro du profil SOGo",
         "sogo_profile_reset_help": "Ceci détruira un profil Sogo des utilisateurs et <b>supprimera toutes les données de contact et de calendrier irrécupérables</b>.",
         "sogo_profile_reset_now": "Remise à zéro du profil maintenant",
@@ -1073,10 +1189,10 @@
         "spamfilter": "Filtre de spam",
         "spamfilter_behavior": "Note",
         "spamfilter_bl": "Liste noire (BlackList)",
-        "spamfilter_bl_desc": "Les adresses de courriel sur la liste noire de <b>always (toujours)</b> peuvent être classées comme des pourriels et rejetées. Des caractères génériques peuvent être utilisés. Un filtre n’est appliqué qu’aux alias directs (alias avec une seule boîte cible), à l’exclusion des alias tous azimuts et d’une boîte elle-même.",
+        "spamfilter_bl_desc": "Les adresses de courriel sur la liste noire de <b>toujours</b> peuvent être classées comme des pourriels et rejetées. Des caractères génériques peuvent être utilisés. Un filtre n’est appliqué qu’aux alias directs (alias avec une seule boîte de réception cible), à l’exclusion des alias tous azimuts et d’une boîte de réception elle-même.",
         "spamfilter_default_score": "Valeurs par défaut",
         "spamfilter_green": "Vert : ce message n'est pas un spam",
-        "spamfilter_hint": "La première valeur indique un \"faible score de spam\", la seconde représente un \"haut score de spam\".",
+        "spamfilter_hint": "La première valeur indique un « faible score de spam », la seconde représente un « haut score de spam ».",
         "spamfilter_red": "Rouge : Ce message est un spam et sera rejeté par le serveur",
         "spamfilter_table_action": "Action",
         "spamfilter_table_add": "Ajouter un élément",
@@ -1085,12 +1201,12 @@
         "spamfilter_table_remove": "supprimer",
         "spamfilter_table_rule": "Règle",
         "spamfilter_wl": "Liste blanche (WhiteList)",
-        "spamfilter_wl_desc": "La liste blanche est programmé pour <b> ne jamais</b> classer comme spam les adresses e-mail qu'elle contient. Des caractères génériques peuvent être utilisés. Un filtre n’est appliqué qu’aux alias directs (alias avec une seule boîte cible), à l’exclusion des alias catch-all et d’une boîte mail.",
+        "spamfilter_wl_desc": "La liste blanche est programmée pour <b> ne jamais</b> classer comme spam les adresses de courriel qu'elle contient. Des caractères génériques peuvent être utilisés. Un filtre n’est appliqué qu’aux alias directs (alias avec une seule boîte de réception cible), à l’exclusion des alias catch-all et d’une boîte de réception.",
         "spamfilter_yellow": "Jaune : ce message est peut être un spam, il sera étiqueté comme spam et déplacé vers votre dossier Pourriel",
         "status": "Statut",
         "sync_jobs": "Jobs de synchronisation",
         "tag_handling": "Régler la manipulation du courrier étiqueté",
-        "tag_help_example": "Exemple pour une adresse e-mail étiquetée : me<b>+Facebook</b>@example.org",
+        "tag_help_example": "Exemple pour une adresse de courriel étiquetée : me<b>+Facebook</b>@example.org",
         "tag_help_explain": "Dans un sous-dossier : un nouveau sous-dossier nommé selon l'étiquette sera créé sous INBOX (\"INBOX/Facebook\").<br>\nDans le sujet : le nom des balises sera ajouté au début du sujet de l'e-mail, exemple : \"[Facebook] My News\".",
         "tag_in_none": "Ne rien faire",
         "tag_in_subfolder": "Dans un sous dossier",
@@ -1100,7 +1216,7 @@
         "tls_enforce_in": "Appliquer le TLS entrant",
         "tls_enforce_out": "Appliquer le TLS sortant",
         "tls_policy": "Politique de chiffrement",
-        "tls_policy_warning": "<strong>Attention:</strong> Si vous décidez d’appliquer le transfert de courrier chiffré, vous risquez de perdre des courriels.<br>Les messages qui ne satisfont pas à la politique seront renvoyés avec une erreur grave par le système de messagerie.<br>Cette option s’applique à votre adresse courriel principale (login name), toutes les adresses dérivées de domaines alias ainsi que les adresses alias <b>avec cette seule boîte</b> comme cible.",
+        "tls_policy_warning": "<strong>Attention :</strong> Si vous décidez d’appliquer le transfert de courrier chiffré, vous risquez de perdre des courriels.<br>Les messages qui ne satisfont pas à la politique seront renvoyés avec une erreur grave par le système de messagerie.<br>Cette option s’applique à votre adresse courriel principale (login name), toutes les adresses dérivées de domaines alias ainsi que les adresses alias <b>avec cette seule boîte de réception</b> comme cible.",
         "user_settings": "Paramètres utilisateur",
         "username": "Nom d'utilisateur",
         "verify": "Vérification",
@@ -1111,7 +1227,38 @@
         "months": "mois",
         "year": "année",
         "years": "années",
-        "with_app_password": "avec le mot de passe de l'application"
+        "with_app_password": "avec le mot de passe de l'application",
+        "apple_connection_profile_with_app_password": "Un nouveau mot de passe est généré et ajouté au profil, de sorte qu'aucun mot de passe ne doit être saisi lors de la configuration de votre appareil. Ne partagez pas le fichier car il vous donne un accès complet à votre boîte de réception.",
+        "attribute": "Attribut",
+        "direct_protocol_access": "Cet utilisateur de la boîte aux lettres dispose d'un <b>accès externe direct</b> aux protocoles et applications suivants. Votre administrateur contrôle ce paramètre. Il est possible de créer des mots de passe d'application pour accorder l'accès à des protocoles et des applications individuels.<br>Le bouton « Connexion au webmail » permet une connexion unique à SOGo et est toujours disponible.",
+        "open_webmail_sso": "Connexion au webmail",
+        "recent_successful_connections": "Voir les connexions réussies",
+        "syncjob_EXIT_TLS_FAILURE": "Problème de connexion chiffrée",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "Problème d'authentification",
+        "syncjob_EXIT_OVERQUOTA": "La boîte de réception cible a dépassé le quota",
+        "login_history": "Historique des connexions",
+        "change_password_hint_app_passwords": "Votre compte a %d mots de passe d'application qui ne seront pas modifiés. Pour les gérer, allez dans l'onglet Mots de passe de l'application.",
+        "clear_recent_successful_connections": "Vider l'historique des connexions réussies",
+        "created_on": "Créé le",
+        "last_ui_login": "Dernière connexion sur l'interface",
+        "syncjob_check_log": "Vérifier le journal",
+        "syncjob_last_run_result": "Résultat du dernier lancement",
+        "syncjob_EX_OK": "Succès",
+        "syncjob_EXIT_CONNECTION_FAILURE": "Problème de connexion",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "Impossible de se connecter au serveur distant",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "Nom d'utilisateur ou mot de passe incorrect",
+        "value": "Valeur",
+        "allowed_protocols": "Protocoles autorisés",
+        "mailbox": "Boîte de réception",
+        "open_logs": "",
+        "empty": "",
+        "last_pw_change": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "month": "",
+        "pushover_sound": "",
+        "from": "",
+        "fido2_webauthn": ""
     },
     "warning": {
         "cannot_delete_self": "Impossible de supprimer l’utilisateur connecté",
@@ -1120,9 +1267,43 @@
         "fuzzy_learn_error": "Erreur d’apprentissage du hachage flou: %s",
         "hash_not_found": "Hachage non trouvé ou déjà supprimé",
         "ip_invalid": "IP non valide ignorée : %s",
-        "no_active_admin": "Impossible de désactiver le dernier administrateur active",
-        "quota_exceeded_scope": "Dépassement du quota de domaine : Seules des boîtes illimitées peuvent être créées dans ce domaine.",
+        "no_active_admin": "Impossible de désactiver le dernier administrateur actif",
+        "quota_exceeded_scope": "Dépassement du quota de domaine : Seules des boîtes de réception illimitées peuvent être créées dans ce domaine.",
         "session_token": "Jeton de formulaire invalide : Jeton différent",
-        "session_ua": "Jeton de formulaire invalide : erreur de validation User-Agent"
+        "session_ua": "Jeton de formulaire invalide : erreur de validation User-Agent",
+        "is_not_primary_alias": "Alias non primaire ignoré %s"
+    },
+    "datatables": {
+        "decimal": ".",
+        "expand_all": "Tout déplier",
+        "thousands": ",",
+        "paginate": {
+            "first": "Premier",
+            "last": "Dernier",
+            "next": "",
+            "previous": ""
+        },
+        "aria": {
+            "sortAscending": ": activer pour trier les colonnes en ordre croissant",
+            "sortDescending": ": activer pour trier les colonnes en ordre décroissant"
+        },
+        "infoEmpty": "Affichage de 0 à 0 de 0 entrées",
+        "infoFiltered": "(filtré à partir de _MAX_ entrées totales)",
+        "lengthMenu": "Afficher les entrées _MENU_",
+        "loadingRecords": "Chargement…",
+        "processing": "Veuillez patienter…",
+        "collapse_all": "Tout réduire",
+        "infoPostFix": "",
+        "emptyTable": "",
+        "info": "",
+        "search": "",
+        "zeroRecords": ""
+    },
+    "ratelimit": {
+        "disabled": "Désactivé",
+        "day": "",
+        "second": "",
+        "minute": "",
+        "hour": ""
     }
 }

+ 1291 - 2
data/web/lang/lang.gr-gr.json

@@ -6,7 +6,162 @@
         "weeks": "Εβδομάδες",
         "with_app_password": "με κωδικό εφαρμογής",
         "year": "χρόνος",
-        "years": "χρόνια"
+        "years": "χρόνια",
+        "alias_select_validity": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "text": "",
+        "action": "",
+        "clear_recent_successful_connections": "",
+        "client_configuration": "",
+        "create_app_passwd": "",
+        "running": "",
+        "save": "",
+        "tag_handling": "",
+        "tag_in_none": "",
+        "alias_time_left": "",
+        "alias_valid_until": "",
+        "aliases_also_send_as": "",
+        "aliases_send_as_all": "",
+        "allowed_protocols": "",
+        "direct_protocol_access": "",
+        "eas_reset": "",
+        "pushover_sound": "",
+        "pushover_verify": "",
+        "q_add_header": "",
+        "q_all": "",
+        "remove": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_category_info": "",
+        "quarantine_notification": "",
+        "quarantine_notification_info": "",
+        "recent_successful_connections": "",
+        "save_changes": "",
+        "sender_acl_disabled": "",
+        "shared_aliases": "",
+        "shared_aliases_desc": "",
+        "show_sieve_filters": "",
+        "sogo_profile_reset": "",
+        "sogo_profile_reset_help": "",
+        "sogo_profile_reset_now": "",
+        "spam_score_reset": "",
+        "spamfilter": "",
+        "spamfilter_behavior": "",
+        "spamfilter_bl": "",
+        "title": "",
+        "tls_policy": "",
+        "tls_policy_warning": "",
+        "user_settings": "",
+        "username": "",
+        "value": "",
+        "waiting": "",
+        "no_record": "",
+        "edit": "",
+        "email": "",
+        "email_and_dav": "",
+        "empty": "",
+        "encryption": "",
+        "spamfilter_default_score": "",
+        "spamfilter_green": "",
+        "spamfilter_red": "",
+        "active": "",
+        "active_sieve": "",
+        "advanced_settings": "",
+        "alias": "",
+        "alias_create_random": "",
+        "alias_extend_all": "",
+        "alias_full_date": "",
+        "alias_remove_all": "",
+        "app_hint": "",
+        "app_name": "",
+        "app_passwds": "",
+        "apple_connection_profile": "",
+        "apple_connection_profile_complete": "",
+        "attribute": "",
+        "create_syncjob": "",
+        "created_on": "",
+        "daily": "",
+        "day": "",
+        "delete_ays": "",
+        "direct_aliases": "",
+        "direct_aliases_desc": "",
+        "eas_reset_help": "",
+        "eas_reset_now": "",
+        "excludes": "",
+        "expire_in": "",
+        "fido2_webauthn": "",
+        "force_pw_update": "",
+        "from": "",
+        "generate": "",
+        "hour": "",
+        "hourly": "",
+        "hours": "",
+        "in_use": "",
+        "interval": "",
+        "is_catch_all": "",
+        "last_mail_login": "",
+        "last_pw_change": "",
+        "last_run": "",
+        "last_ui_login": "",
+        "loading": "",
+        "login_history": "",
+        "mailbox": "",
+        "mailbox_details": "",
+        "mailbox_general": "",
+        "month": "",
+        "months": "",
+        "never": "",
+        "new_password": "",
+        "new_password_repeat": "",
+        "no_active_filter": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "password": "",
+        "password_now": "",
+        "password_repeat": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_vars": "",
+        "spamfilter_bl_desc": "",
+        "spamfilter_hint": "",
+        "spamfilter_table_action": "",
+        "spamfilter_table_add": "",
+        "spamfilter_table_domain_policy": "",
+        "spamfilter_table_empty": "",
+        "spamfilter_table_remove": "",
+        "spamfilter_table_rule": "",
+        "spamfilter_wl": "",
+        "spamfilter_wl_desc": "",
+        "spamfilter_yellow": "",
+        "sync_jobs": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "tag_help_example": "",
+        "tag_help_explain": "",
+        "tag_in_subfolder": "",
+        "tag_in_subject": "",
+        "tls_enforce_in": "",
+        "tls_enforce_out": "",
+        "no_last_login": "",
+        "status": "",
+        "apple_connection_profile_mailonly": "",
+        "apple_connection_profile_with_app_password": "",
+        "change_password": "",
+        "change_password_hint_app_passwords": "",
+        "mailbox_settings": "",
+        "messages": "",
+        "spam_aliases": ""
     },
     "warning": {
         "cannot_delete_self": "Αδυναμία διαγραφής συνδεδεμένου χρήστη",
@@ -15,6 +170,1140 @@
         "domain_added_sogo_failed": "Προστέθηκε το όνομα χώρου αλλά απέτυχε η επανεκκίνηση του SOGo.",
         "hash_not_found": "Η κατακερματισμένη τιμή (hash value) δεν βρέθηκε ή έχει είδη διαγραφεί.",
         "ip_invalid": "Παραλείφθηκε μη έγκυρη διεύθυνση IP: %s",
-        "is_not_primary_alias": "Παραλείφθηκε μη πρωτεύον ψευδώνυμο %s"
+        "is_not_primary_alias": "Παραλείφθηκε μη πρωτεύον ψευδώνυμο %s",
+        "fuzzy_learn_error": "",
+        "quota_exceeded_scope": "",
+        "session_token": "",
+        "session_ua": ""
+    },
+    "edit": {
+        "footer_exclude": "",
+        "kind": "",
+        "last_modified": "",
+        "lookup_mx": "",
+        "mailbox": "",
+        "mailbox_quota_def": "",
+        "mailbox_relayhost_info": "",
+        "max_aliases": "",
+        "max_mailboxes": "",
+        "max_quota": "",
+        "maxage": "",
+        "maxbytespersecond": "",
+        "gal_info": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "pushover_text": "",
+        "full_name": "",
+        "gal": "",
+        "generate": "",
+        "extended_sender_acl_info": "",
+        "force_pw_update": "",
+        "force_pw_update_info": "",
+        "none_inherit": "",
+        "password": "",
+        "password_repeat": "",
+        "previous": "",
+        "private_comment": "",
+        "public_comment": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "spam_alias": "",
+        "spam_filter": "",
+        "spam_policy": "",
+        "custom_attributes": "",
+        "delete2": "",
+        "delete2duplicates": "",
+        "delete_ays": "",
+        "description": "",
+        "disable_login": "",
+        "domain": "",
+        "domain_admin": "",
+        "domain_footer_info_vars": {
+            "custom": "",
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": ""
+        },
+        "timeout2": "",
+        "unchanged_if_empty": "",
+        "username": "",
+        "domain_footer_skip_replies": "",
+        "exclude": "",
+        "extended_sender_acl": "",
+        "domain_footer": "",
+        "pushover_sender_regex": "",
+        "pushover_title": "",
+        "target_domain": "",
+        "acl": "",
+        "active": "",
+        "admin": "",
+        "advanced_settings": "",
+        "alias": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "domain_footer_html": "",
+        "domain_footer_info": "",
+        "grant_types": "",
+        "hostname": "",
+        "domain_footer_plain": "",
+        "domain_quota": "",
+        "domains": "",
+        "dont_check_sender_acl": "",
+        "edit_alias_domain": "",
+        "encryption": "",
+        "mbox_rl_info": "",
+        "mins_interval": "",
+        "multiple_bookings": "",
+        "nexthop": "",
+        "pushover": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "inactive": "",
+        "pushover_verify": "",
+        "quota_mb": "",
+        "quota_warning_bcc": "",
+        "quota_warning_bcc_info": "",
+        "ratelimit": "",
+        "redirect_uri": "",
+        "relay_all": "",
+        "relay_all_info": "",
+        "relay_domain": "",
+        "relayhost": "",
+        "remove": "",
+        "resource": "",
+        "save": "",
+        "scope": "",
+        "sender_acl": "",
+        "sender_acl_disabled": "",
+        "sender_acl_info": "",
+        "sieve_desc": "",
+        "sieve_type": "",
+        "skipcrossduplicates": "",
+        "sogo_access": "",
+        "sogo_access_info": "",
+        "sogo_visible": "",
+        "sogo_visible_info": "",
+        "spam_score": "",
+        "subfolder2": "",
+        "syncjob": "",
+        "target_address": "",
+        "timeout1": "",
+        "validate_save": "",
+        "app_name": "",
+        "app_passwd": "",
+        "app_passwd_protocols": "",
+        "automap": "",
+        "backup_mx_options": "",
+        "bcc_dest_format": "",
+        "client_id": "",
+        "client_secret": "",
+        "comment_info": "",
+        "created_on": "",
+        "delete1": "",
+        "title": ""
+    },
+    "admin": {
+        "oauth2_redirect_uri": "",
+        "oauth2_renew_secret": "",
+        "quarantine_exclude_domains": "",
+        "quota_notification_sender": "",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "dkim_add_key": "",
+        "dkim_domains_selector": "",
+        "dkim_domains_wo_keys": "",
+        "dkim_from": "",
+        "dkim_from_title": "",
+        "dkim_key_length": "",
+        "dkim_key_missing": "",
+        "domain_admin": "",
+        "options": "",
+        "save": "",
+        "search_domain_da": "",
+        "send": "",
+        "sender": "",
+        "service": "",
+        "service_id": "",
+        "source": "",
+        "spamfilter": "",
+        "subject": "",
+        "success": "",
+        "copy_to_clipboard": "",
+        "credentials_transport_warning": "",
+        "customer_id": "",
+        "customize": "",
+        "destination": "",
+        "dkim_key_unused": "",
+        "dkim_key_valid": "",
+        "dkim_keys": "",
+        "dkim_overwrite_key": "",
+        "dkim_private_key": "",
+        "dkim_to": "",
+        "dkim_to_title": "",
+        "domain": "",
+        "domain_admins": "",
+        "domain_s": "",
+        "duplicate_dkim": "",
+        "edit": "",
+        "empty": "",
+        "excludes": "",
+        "f2b_ban_time": "",
+        "f2b_ban_time_increment": "",
+        "f2b_blacklist": "",
+        "f2b_filter": "",
+        "f2b_list_info": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "f2b_max_attempts": "",
+        "f2b_max_ban_time": "",
+        "f2b_netban_ipv4": "",
+        "f2b_netban_ipv6": "",
+        "f2b_parameters": "",
+        "f2b_regex_info": "",
+        "f2b_retry_window": "",
+        "forwarding_hosts": "",
+        "forwarding_hosts_add_hint": "",
+        "forwarding_hosts_hint": "",
+        "from": "",
+        "generate": "",
+        "guid": "",
+        "guid_and_license": "",
+        "hash_remove_info": "",
+        "help_text": "",
+        "host": "",
+        "html": "",
+        "import": "",
+        "import_private_key": "",
+        "in_use_by": "",
+        "inactive": "",
+        "include_exclude": "",
+        "include_exclude_info": "",
+        "includes": "",
+        "ip_check": "",
+        "ip_check_disabled": "",
+        "ip_check_opt_in": "",
+        "is_mx_based": "",
+        "last_applied": "",
+        "license_info": "",
+        "link": "",
+        "loading": "",
+        "login_time": "",
+        "logo_info": "",
+        "lookup_mx": "",
+        "main_name": "",
+        "merged_vars_hint": "",
+        "message": "",
+        "message_size": "",
+        "nexthop": "",
+        "no": "",
+        "no_active_bans": "",
+        "no_new_rows": "",
+        "no_record": "",
+        "oauth2_apps": "",
+        "oauth2_add_client": "",
+        "oauth2_client_id": "",
+        "oauth2_client_secret": "",
+        "oauth2_info": "",
+        "oauth2_revoke_tokens": "",
+        "optional": "",
+        "password": "",
+        "password_length": "",
+        "password_policy": "",
+        "password_policy_chars": "",
+        "password_policy_length": "",
+        "password_policy_lowerupper": "",
+        "password_policy_numbers": "",
+        "password_policy_special_chars": "",
+        "password_repeat": "",
+        "priority": "",
+        "private_key": "",
+        "quarantine": "",
+        "quarantine_bcc": "",
+        "quarantine_max_age": "",
+        "quarantine_max_score": "",
+        "quarantine_max_size": "",
+        "quarantine_notification_html": "",
+        "quarantine_notification_sender": "",
+        "quarantine_notification_subject": "",
+        "quarantine_redirect": "",
+        "quarantine_release_format": "",
+        "quarantine_release_format_att": "",
+        "quarantine_release_format_raw": "",
+        "quarantine_retention_size": "",
+        "quota_notification_html": "",
+        "quota_notification_subject": "",
+        "quota_notifications": "",
+        "quota_notifications_info": "",
+        "quota_notifications_vars": "",
+        "queue_unban": "",
+        "r_active": "",
+        "r_inactive": "",
+        "r_info": "",
+        "rate_name": "",
+        "recipients": "",
+        "refresh": "",
+        "regen_api_key": "",
+        "regex_maps": "",
+        "relay_from": "",
+        "relay_run": "",
+        "relayhosts": "",
+        "relayhosts_hint": "",
+        "remove": "",
+        "remove_row": "",
+        "reset_default": "",
+        "reset_limit": "",
+        "routing": "",
+        "rsetting_add_rule": "",
+        "rsetting_content": "",
+        "rsetting_desc": "",
+        "rsetting_no_selection": "",
+        "rsetting_none": "",
+        "rsettings_insert_preset": "",
+        "rsettings_preset_1": "",
+        "rsettings_preset_2": "",
+        "rsettings_preset_3": "",
+        "rsettings_preset_4": "",
+        "rspamd_com_settings": "",
+        "rspamd_global_filters": "",
+        "rspamd_global_filters_agree": "",
+        "rspamd_global_filters_info": "",
+        "rspamd_global_filters_regex": "",
+        "rspamd_settings_map": "",
+        "sal_level": "",
+        "sys_mails": "",
+        "text": "",
+        "time": "",
+        "title": "",
+        "title_name": "",
+        "to_top": "",
+        "transport_dest_format": "",
+        "transport_maps": "",
+        "transport_test_rcpt_info": "",
+        "transports_hint": "",
+        "ui_footer": "",
+        "ui_header_announcement": "",
+        "ui_header_announcement_active": "",
+        "ui_header_announcement_content": "",
+        "ui_header_announcement_help": "",
+        "ui_header_announcement_select": "",
+        "ui_header_announcement_type": "",
+        "ui_header_announcement_type_danger": "",
+        "ui_header_announcement_type_info": "",
+        "ui_header_announcement_type_warning": "",
+        "ui_texts": "",
+        "unban_pending": "",
+        "unchanged_if_empty": "",
+        "upload": "",
+        "username": "",
+        "validate_license_now": "",
+        "verify": "",
+        "yes": "",
+        "relay_rcpt": "",
+        "duplicate": "",
+        "access": "",
+        "action": "",
+        "activate_api": "",
+        "activate_send": "",
+        "active": "",
+        "active_rspamd_settings_map": "",
+        "add": "",
+        "add_admin": "",
+        "add_domain_admin": "",
+        "add_forwarding_host": "",
+        "add_relayhost": "",
+        "add_relayhost_hint": "",
+        "add_row": "",
+        "add_settings_rule": "",
+        "add_transport": "",
+        "add_transports_hint": "",
+        "additional_rows": "",
+        "admin": "",
+        "admin_details": "",
+        "admin_domains": "",
+        "admins": "",
+        "admins_ldap": "",
+        "advanced_settings": "",
+        "allowed_methods": "",
+        "allowed_origins": "",
+        "api_allow_from": "",
+        "api_info": "",
+        "api_key": "",
+        "cors_settings": "",
+        "api_read_only": "",
+        "api_read_write": "",
+        "api_skip_ip_check": "",
+        "app_links": "",
+        "app_name": "",
+        "apps_name": "",
+        "arrival_time": "",
+        "authed_user": "",
+        "ays": "",
+        "ban_list_info": "",
+        "change_logo": "",
+        "configuration": "",
+        "convert_html_to_text": "",
+        "f2b_whitelist": "",
+        "filter_table": ""
+    },
+    "danger": {
+        "release_send_failed": "",
+        "global_filter_write_error": "",
+        "global_map_invalid": "",
+        "global_map_write_error": "",
+        "goto_empty": "",
+        "goto_invalid": "",
+        "ham_learn_error": "",
+        "imagick_exception": "",
+        "img_invalid": "",
+        "img_tmp_missing": "",
+        "ip_list_empty": "",
+        "is_alias": "",
+        "is_spam_alias": "",
+        "reset_f2b_regex": "",
+        "pushover_token": "",
+        "quota_not_0_not_numeric": "",
+        "recipient_map_entry_exists": "",
+        "relayhost_invalid": "",
+        "webauthn_authenticator_failed": "",
+        "webauthn_username_failed": "",
+        "access_denied": "",
+        "alias_domain_invalid": "",
+        "invalid_bcc_map_type": "",
+        "invalid_destination": "",
+        "invalid_filter_type": "",
+        "alias_empty": "",
+        "alias_goto_identical": "",
+        "alias_invalid": "",
+        "aliasd_targetd_identical": "",
+        "aliases_in_use": "",
+        "app_name_empty": "",
+        "app_passwd_id_invalid": "",
+        "bcc_empty": "",
+        "bcc_exists": "",
+        "bcc_must_be_email": "",
+        "dkim_domain_or_sel_exists": "",
+        "dkim_domain_or_sel_invalid": "",
+        "domain_cannot_match_hostname": "",
+        "domain_exists": "",
+        "domain_invalid": "",
+        "domain_not_empty": "",
+        "domain_not_found": "",
+        "extended_sender_acl_denied": "",
+        "extra_acl_invalid": "",
+        "extra_acl_invalid_domain": "",
+        "fido2_verification_failed": "",
+        "file_open_error": "",
+        "filter_type": "",
+        "from_invalid": "",
+        "mailbox_quota_exceeds_domain_quota": "",
+        "mailbox_quota_left_exceeded": "",
+        "template_name_invalid": "",
+        "domain_quota_m_in_use": "",
+        "comment_too_long": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "defquota_empty": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "invalid_host": "",
+        "invalid_mime_type": "",
+        "invalid_nexthop": "",
+        "invalid_nexthop_authenticated": "",
+        "invalid_recipient_map_new": "",
+        "invalid_recipient_map_old": "",
+        "is_alias_or_mailbox": "",
+        "last_key": "",
+        "login_failed": "",
+        "mailbox_defquota_exceeds_mailbox_maxquota": "",
+        "mailbox_invalid": "",
+        "mailbox_quota_exceeded": "",
+        "mailboxes_in_use": "",
+        "malformed_username": "",
+        "map_content_empty": "",
+        "max_alias_exceeded": "",
+        "max_mailbox_exceeded": "",
+        "max_quota_in_use": "",
+        "maxquota_empty": "",
+        "mysql_error": "",
+        "network_host_invalid": "",
+        "next_hop_interferes": "",
+        "next_hop_interferes_any": "",
+        "nginx_reload_failed": "",
+        "no_user_defined": "",
+        "object_exists": "",
+        "object_is_not_numeric": "",
+        "password_complexity": "",
+        "password_empty": "",
+        "password_mismatch": "",
+        "policy_list_from_exists": "",
+        "policy_list_from_invalid": "",
+        "private_key_error": "",
+        "pushover_credentials_missing": "",
+        "pushover_key": "",
+        "redis_error": "",
+        "resource_invalid": "",
+        "rl_timeframe": "",
+        "rspamd_ui_pw_length": "",
+        "script_empty": "",
+        "sender_acl_invalid": "",
+        "set_acl_failed": "",
+        "settings_map_invalid": "",
+        "sieve_error": "",
+        "spam_learn_error": "",
+        "subject_empty": "",
+        "target_domain_invalid": "",
+        "targetd_not_found": "",
+        "targetd_relay_domain": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "temp_error": "",
+        "text_empty": "",
+        "tfa_token_invalid": "",
+        "tls_policy_map_dest_invalid": "",
+        "tls_policy_map_entry_exists": "",
+        "tls_policy_map_parameter_invalid": "",
+        "totp_verification_failed": "",
+        "transport_dest_exists": "",
+        "webauthn_verification_failed": "",
+        "webauthn_publickey_failed": "",
+        "unknown": "",
+        "unknown_tfa_method": "",
+        "unlimited_quota_acl": "",
+        "username_invalid": "",
+        "validity_missing": "",
+        "value_missing": "",
+        "yotp_verification_failed": "",
+        "demo_mode_enabled": "",
+        "description_invalid": ""
+    },
+    "success": {
+        "bcc_deleted": "",
+        "bcc_edited": "",
+        "bcc_saved": "",
+        "dkim_removed": "",
+        "domain_added": "",
+        "resource_removed": "",
+        "alias_modified": "",
+        "alias_removed": "",
+        "aliasd_added": "",
+        "app_links": "",
+        "ip_check_opt_in_modified": "",
+        "item_deleted": "",
+        "cors_headers_edited": "",
+        "db_init_complete": "",
+        "learned_ham": "",
+        "license_modified": "",
+        "settings_map_removed": "",
+        "sogo_profile_reset": "",
+        "template_added": "",
+        "template_modified": "",
+        "template_removed": "",
+        "tls_policy_map_entry_deleted": "",
+        "tls_policy_map_entry_saved": "",
+        "upload_success": "",
+        "verified_fido2_login": "",
+        "verified_totp_login": "",
+        "verified_webauthn_login": "",
+        "verified_yotp_login": "",
+        "acl_saved": "",
+        "admin_added": "",
+        "admin_api_modified": "",
+        "admin_modified": "",
+        "admin_removed": "",
+        "alias_added": "",
+        "alias_domain_removed": "",
+        "aliasd_modified": "",
+        "app_passwd_added": "",
+        "app_passwd_removed": "",
+        "delete_filter": "",
+        "delete_filters": "",
+        "deleted_syncjob": "",
+        "deleted_syncjobs": "",
+        "dkim_added": "",
+        "domain_add_dkim_available": "",
+        "dkim_duplicated": "",
+        "domain_admin_added": "",
+        "domain_admin_modified": "",
+        "domain_admin_removed": "",
+        "domain_footer_modified": "",
+        "domain_modified": "",
+        "domain_removed": "",
+        "dovecot_restart_success": "",
+        "eas_reset": "",
+        "f2b_banlist_refreshed": "",
+        "f2b_modified": "",
+        "forwarding_host_added": "",
+        "forwarding_host_removed": "",
+        "global_filter_written": "",
+        "hash_deleted": "",
+        "item_released": "",
+        "items_deleted": "",
+        "items_released": "",
+        "logged_in_as": "",
+        "mailbox_added": "",
+        "mailbox_modified": "",
+        "mailbox_removed": "",
+        "nginx_reloaded": "",
+        "object_modified": "",
+        "password_policy_saved": "",
+        "pushover_settings_edited": "",
+        "qlearn_spam": "",
+        "queue_command_success": "",
+        "recipient_map_entry_deleted": "",
+        "recipient_map_entry_saved": "",
+        "relayhost_added": "",
+        "relayhost_removed": "",
+        "reset_main_logo": "",
+        "resource_added": "",
+        "resource_modified": "",
+        "rl_saved": "",
+        "rspamd_ui_pw_set": "",
+        "saved_settings": "",
+        "settings_map_added": "",
+        "ui_texts": ""
+    },
+    "debug": {
+        "history_all_servers": "",
+        "in_memory_logs": "",
+        "jvm_memory_solr": "",
+        "last_modified": "",
+        "login_time": "",
+        "logs": "",
+        "memory": "",
+        "online_users": "",
+        "username": "",
+        "wip": "",
+        "docs": "",
+        "error_show_ip": "",
+        "external_logs": "",
+        "architecture": "",
+        "chart_this_server": "",
+        "containers_info": "",
+        "container_running": "",
+        "container_disabled": "",
+        "container_stopped": "",
+        "cores": "",
+        "current_time": "",
+        "disk_usage": "",
+        "log_info": "",
+        "restart_container": "",
+        "service": "",
+        "show_ip": "",
+        "size": "",
+        "solr_status": "",
+        "started_at": "",
+        "started_on": "",
+        "static_logs": "",
+        "success": "",
+        "system_containers": "",
+        "timezone": "",
+        "uptime": "",
+        "update_available": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "solr_dead": ""
+    },
+    "diagnostics": {
+        "cname_from_a": "",
+        "dns_records": "",
+        "dns_records_docs": "",
+        "dns_records_24hours": "",
+        "dns_records_data": "",
+        "dns_records_name": "",
+        "dns_records_status": "",
+        "dns_records_type": "",
+        "optional": ""
+    },
+    "mailbox": {
+        "last_mail_login": "",
+        "sieve_preset_1": "",
+        "bcc_to_rcpt": "",
+        "bcc_to_sender": "",
+        "bcc_type": "",
+        "booking_null": "",
+        "mailbox_quota": "",
+        "mailboxes": "",
+        "sieve_preset_2": "",
+        "sieve_preset_3": "",
+        "sieve_preset_4": "",
+        "sieve_preset_5": "",
+        "sieve_preset_6": "",
+        "sieve_preset_7": "",
+        "sieve_preset_8": "",
+        "sieve_preset_header": "",
+        "sogo_visible": "",
+        "sogo_visible_n": "",
+        "sogo_visible_y": "",
+        "spam_aliases": "",
+        "stats": "",
+        "status": "",
+        "tls_map_dest": "",
+        "tls_map_parameters": "",
+        "tls_enforce_in": "",
+        "tls_enforce_out": "",
+        "tls_policy_maps_enforced_tls": "",
+        "tls_policy_maps_info": "",
+        "goto_ham": "",
+        "recipient_maps": "",
+        "quarantine_category": "",
+        "quarantine_notification": "",
+        "quick_actions": "",
+        "recipient_map_info": "",
+        "recipient_map_new": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "table_size": "",
+        "alias_domain_backupmx": "",
+        "aliases": "",
+        "empty": "",
+        "enable_x": "",
+        "excludes": "",
+        "filter_table": "",
+        "filters": "",
+        "fname": "",
+        "force_pw_update": "",
+        "recipient": "",
+        "recipient_map": "",
+        "action": "",
+        "activate": "",
+        "active": "",
+        "add": "",
+        "add_alias": "",
+        "add_alias_expand": "",
+        "add_bcc_entry": "",
+        "add_domain": "",
+        "add_domain_alias": "",
+        "add_domain_record_first": "",
+        "add_filter": "",
+        "add_mailbox": "",
+        "add_recipient_map_entry": "",
+        "add_resource": "",
+        "add_template": "",
+        "add_tls_policy_map": "",
+        "address_rewriting": "",
+        "alias": "",
+        "alias_domain_alias_hint": "",
+        "all_domains": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "backup_mx": "",
+        "bcc": "",
+        "bcc_destination": "",
+        "bcc_destinations": "",
+        "bcc_info": "",
+        "bcc_local_dest": "",
+        "bcc_map": "",
+        "bcc_map_type": "",
+        "bcc_maps": "",
+        "bcc_rcpt_map": "",
+        "bcc_sender_map": "",
+        "booking_0_short": "",
+        "booking_custom": "",
+        "booking_custom_short": "",
+        "booking_ltnull": "",
+        "booking_lt0_short": "",
+        "catch_all": "",
+        "created_on": "",
+        "daily": "",
+        "deactivate": "",
+        "description": "",
+        "disable_login": "",
+        "disable_x": "",
+        "dkim_domains_selector": "",
+        "dkim_key_length": "",
+        "domain": "",
+        "domain_admins": "",
+        "domain_quota_total": "",
+        "edit": "",
+        "gal": "",
+        "goto_spam": "",
+        "hourly": "",
+        "in_use": "",
+        "inactive": "",
+        "insert_preset": "",
+        "kind": "",
+        "last_modified": "",
+        "last_pw_change": "",
+        "last_run": "",
+        "last_run_reset": "",
+        "mailbox": "",
+        "mailbox_defaults": "",
+        "mailbox_defaults_info": "",
+        "mailbox_defquota": "",
+        "mailbox_templates": "",
+        "max_aliases": "",
+        "max_mailboxes": "",
+        "max_quota": "",
+        "mins_interval": "",
+        "msg_num": "",
+        "never": "",
+        "no": "",
+        "no_record": "",
+        "no_record_single": "",
+        "open_logs": "",
+        "owner": "",
+        "private_comment": "",
+        "public_comment": "",
+        "q_add_header": "",
+        "q_all": "",
+        "q_reject": "",
+        "recipient_map_new_info": "",
+        "recipient_map_old": "",
+        "recipient_map_old_info": "",
+        "relay_all": "",
+        "relay_unknown": "",
+        "remove": "",
+        "resources": "",
+        "running": "",
+        "sender": "",
+        "set_postfilter": "",
+        "set_prefilter": "",
+        "sieve_info": "",
+        "sync_jobs": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "table_size_show_n": "",
+        "target_address": "",
+        "target_domain": "",
+        "templates": "",
+        "template": "",
+        "tls_map_parameters_info": "",
+        "tls_map_policy": "",
+        "tls_policy_maps": "",
+        "tls_policy_maps_long": "",
+        "toggle_all": "",
+        "username": "",
+        "waiting": "",
+        "weekly": "",
+        "yes": "",
+        "multiple_bookings": "",
+        "domain_aliases": "",
+        "domain_templates": "",
+        "domain_quota": "",
+        "domains": "",
+        "tls_map_dest_info": ""
+    },
+    "quarantine": {
+        "high_danger": "",
+        "quick_delete_link": "",
+        "quick_info_link": "",
+        "quick_release_link": "",
+        "rcpt": "",
+        "received": "",
+        "recipients": "",
+        "text_from_html_content": "",
+        "text_plain_content": "",
+        "qitem": "",
+        "quick_actions": "",
+        "refresh": "",
+        "show_item": "",
+        "spam": "",
+        "spam_score": "",
+        "action": "",
+        "atts": "",
+        "check_hash": "",
+        "confirm": "",
+        "confirm_delete": "",
+        "danger": "",
+        "deliver_inbox": "",
+        "disabled_by_config": "",
+        "download_eml": "",
+        "empty": "",
+        "info": "",
+        "junk_folder": "",
+        "learn_spam_delete": "",
+        "low_danger": "",
+        "medium_danger": "",
+        "neutral_danger": "",
+        "notified": "",
+        "qhandler_success": "",
+        "qid": "",
+        "qinfo": "",
+        "rejected": "",
+        "release": "",
+        "release_body": "",
+        "release_subject": "",
+        "remove": "",
+        "rewrite_subject": "",
+        "rspamd_result": "",
+        "sender": "",
+        "sender_header": "",
+        "settings_info": "",
+        "subj": "",
+        "table_size": "",
+        "table_size_show_n": "",
+        "toggle_all": "",
+        "type": "",
+        "quarantine": ""
+    },
+    "header": {
+        "mailcow_config": "",
+        "quarantine": "",
+        "restart_sogo": "",
+        "user_settings": "",
+        "apps": "",
+        "administration": "",
+        "debug": "",
+        "email": "",
+        "mailcow_system": "",
+        "restart_netfilter": ""
+    },
+    "info": {
+        "no_action": "",
+        "awaiting_tfa_confirmation": "",
+        "session_expires": ""
+    },
+    "login": {
+        "delayed": "",
+        "login": "",
+        "mobileconfig_info": "",
+        "password": "",
+        "fido2_webauthn": "",
+        "username": "",
+        "other_logins": ""
+    },
+    "queue": {
+        "unhold_mail_legend": "",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "queue_manager": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": ""
+    },
+    "ratelimit": {
+        "disabled": "",
+        "second": "",
+        "minute": "",
+        "hour": "",
+        "day": ""
+    },
+    "tfa": {
+        "authenticators": "",
+        "api_register": "",
+        "confirm": "",
+        "confirm_totp_token": "",
+        "error_code": "",
+        "init_webauthn": "",
+        "key_id": "",
+        "key_id_totp": "",
+        "none": "",
+        "reload_retry": "",
+        "select": "",
+        "scan_qr_code": "",
+        "set_tfa": "",
+        "start_webauthn_validation": "",
+        "tfa": "",
+        "tfa_token_invalid": "",
+        "totp": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": "",
+        "webauthn": "",
+        "waiting_usb_auth": "",
+        "waiting_usb_register": "",
+        "yubi_otp": "",
+        "delete_tfa": "",
+        "disable_tfa": "",
+        "enter_qr_code": ""
+    },
+    "acl": {
+        "alias_domains": "",
+        "app_passwds": "",
+        "bcc_maps": "",
+        "delimiter_action": "",
+        "domain_desc": "",
+        "domain_relayhost": "",
+        "eas_reset": "",
+        "extend_sender_acl": "",
+        "filters": "",
+        "login_as": "",
+        "mailbox_relayhost": "",
+        "prohibited": "",
+        "protocol_access": "",
+        "pushover": "",
+        "quarantine": "",
+        "quarantine_attachments": "",
+        "quarantine_category": "",
+        "quarantine_notification": "",
+        "ratelimit": "",
+        "recipient_maps": "",
+        "smtp_ip_access": "",
+        "sogo_access": "",
+        "sogo_profile_reset": "",
+        "spam_alias": "",
+        "spam_policy": "",
+        "spam_score": "",
+        "syncjobs": "",
+        "tls_policy": "",
+        "unlimited_quota": ""
+    },
+    "add": {
+        "activate_filter_warn": "",
+        "active": "",
+        "add": "",
+        "add_domain_only": "",
+        "add_domain_restart": "",
+        "alias_address": "",
+        "alias_address_info": "",
+        "alias_domain": "",
+        "alias_domain_info": "",
+        "app_name": "",
+        "app_password": "",
+        "app_passwd_protocols": "",
+        "automap": "",
+        "backup_mx_options": "",
+        "bcc_dest_format": "",
+        "comment_info": "",
+        "custom_params": "",
+        "custom_params_hint": "",
+        "delete1": "",
+        "delete2": "",
+        "enc_method": "",
+        "delete2duplicates": "",
+        "description": "",
+        "destination": "",
+        "disable_login": "",
+        "domain": "",
+        "domain_matches_hostname": "",
+        "domain_quota_m": "",
+        "generate": "",
+        "tags": "",
+        "dry": "",
+        "exclude": "",
+        "full_name": "",
+        "gal": "",
+        "gal_info": "",
+        "goto_ham": "",
+        "goto_null": "",
+        "goto_spam": "",
+        "hostname": "",
+        "inactive": "",
+        "kind": "",
+        "mailbox_quota_def": "",
+        "mailbox_quota_m": "",
+        "mailbox_username": "",
+        "max_aliases": "",
+        "max_mailboxes": "",
+        "mins_interval": "",
+        "multiple_bookings": "",
+        "nexthop": "",
+        "password": "",
+        "password_repeat": "",
+        "port": "",
+        "post_domain_add": "",
+        "private_comment": "",
+        "public_comment": "",
+        "quota_mb": "",
+        "relay_all": "",
+        "relay_all_info": "",
+        "relay_domain": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "relayhost_wrapped_tls_info": "",
+        "select": "",
+        "select_domain": "",
+        "sieve_desc": "",
+        "sieve_type": "",
+        "skipcrossduplicates": "",
+        "subscribeall": "",
+        "syncjob": "",
+        "syncjob_hint": "",
+        "target_address": "",
+        "target_address_info": "",
+        "target_domain": "",
+        "timeout1": "",
+        "timeout2": "",
+        "username": "",
+        "validate": "",
+        "validation_success": ""
+    },
+    "datatables": {
+        "collapse_all": "",
+        "decimal": "",
+        "emptyTable": "",
+        "expand_all": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "thousands": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "paginate": {
+            "first": "",
+            "last": "",
+            "next": "",
+            "previous": ""
+        },
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "lengthMenu": "",
+        "infoPostFix": ""
+    },
+    "fido2": {
+        "confirm": "",
+        "fido2_auth": "",
+        "fido2_success": "",
+        "fido2_validation_failed": "",
+        "fn": "",
+        "known_ids": "",
+        "none": "",
+        "register_status": "",
+        "rename": "",
+        "set_fido2": "",
+        "set_fido2_touchid": "",
+        "set_fn": "",
+        "start_fido2_validation": ""
+    },
+    "footer": {
+        "cancel": "",
+        "confirm_delete": "",
+        "delete_now": "",
+        "delete_these_items": "",
+        "hibp_check": "",
+        "hibp_nok": "",
+        "hibp_ok": "",
+        "loading": "",
+        "nothing_selected": "",
+        "restart_container": "",
+        "restart_container_info": "",
+        "restart_now": "",
+        "restarting_container": ""
+    },
+    "oauth2": {
+        "access_denied": "",
+        "authorize_app": "",
+        "deny": "",
+        "permit": "",
+        "profile": "",
+        "profile_desc": "",
+        "scope_ask_permission": ""
+    },
+    "start": {
+        "help": "",
+        "imap_smtp_server_auth_info": "",
+        "mailcow_apps_detail": "",
+        "mailcow_panel_detail": ""
     }
 }

+ 913 - 15
data/web/lang/lang.hu-hu.json

@@ -22,7 +22,225 @@
         "activate_api": "API aktiválása",
         "activate_send": "Küldés gomb aktiválása",
         "add": "Hozzáad",
-        "active": "Aktív"
+        "active": "Aktív",
+        "api_info": "Az API még fejlesztés alatt áll. A dokumentáció megtalálható a <a href=\"/api\">/api</a> alatt",
+        "allowed_methods": "Hozzáférés-Szabályozás-Engedélyezési-Módszerek",
+        "logo_normal_label": "Normál",
+        "logo_dark_label": "Sötét üzemmódhoz invertálva",
+        "f2b_regex_info": "Figyelembe vett naplók: SOGo, Postfix, Dovecot, PHP-FPM.",
+        "f2b_retry_window": "Újrapróbálkozási ablak (s) a maximális próbálkozásokhoz",
+        "f2b_whitelist": "Fehérlistás hálózatok/hostok",
+        "filter_table": "Szűrő táblázat",
+        "forwarding_hosts": "Továbbító hostok",
+        "forwarding_hosts_add_hint": "Megadhat IPv4/IPv6 címeket, hálózatokat CIDR jelölésben, állomásneveket (amelyek IP-címekre lesznek feloldva) vagy tartományneveket (amelyek IP-címekre lesznek feloldva az SPF rekordok vagy ezek hiányában az MX rekordok lekérdezésével).",
+        "from": "A címről",
+        "copy_to_clipboard": "Szöveg másolva a vágólapra!",
+        "f2b_manage_external": "A Fail2Ban külső kezelése",
+        "f2b_manage_external_info": "A Fail2ban továbbra is karbantartja a tiltólistát, de nem állít be aktívan szabályokat a forgalom blokkolására. Használja az alábbi generált tiltólistát a forgalom külső blokkolásához.",
+        "f2b_max_ban_time": "Maximális tiltási idő (s)",
+        "f2b_netban_ipv4": "IPv4 alhálózat mérete, amelyre tilalmat kell alkalmazni (8-32)",
+        "f2b_netban_ipv6": "IPv6 alhálózat mérete, amelyre tilalmat kell alkalmazni (8-128)",
+        "f2b_parameters": "Fail2ban paraméterek",
+        "forwarding_hosts_hint": "A bejövő üzeneteket feltétel nélkül elfogadják az itt felsorolt összes állomásról. Ezeket az állomáshelyeket nem ellenőrzik a DNSBL-ek alapján, és nem vetik alá a szürkelistázásnak. A tőlük érkező spameket a rendszer soha nem utasítja el, de opcionálisan a Junk mappába iktathatja őket. Leggyakrabban olyan levelezőszerverek megadására használjuk, amelyeken olyan szabályt állítottunk be, amely a bejövő e-maileket a mailcow-kiszolgálóra továbbítja.",
+        "guid_and_license": "GUID & Licenc",
+        "help_text": "Súgó szöveg felülírása a bejelentkezési maszk alatt (HTML engedélyezett)",
+        "html": "HTML",
+        "import": "Import",
+        "ip_check": "IP ellenőrzés",
+        "ip_check_disabled": "Az IP-ellenőrzés le van tiltva. Bekapcsolhatja a következő menüpont alatt<br> <strong>Rendszer > Beállítások > Opciók > Személyreszabás</strong>",
+        "is_mx_based": "MX alapú",
+        "last_applied": "Utoljára alkalmazott",
+        "link": "Link",
+        "loading": "Kérjük, várj...",
+        "login_time": "Bejelentkezési idő",
+        "f2b_list_info": "Egy feketelistán szereplő állomás vagy hálózat mindig nagyobb súlyú, mint egy fehérlistás entitás. <b>A lista frissítései néhány másodpercig tartanak.</b>",
+        "f2b_ban_time_increment": "A tiltási idő minden egyes tiltással növekszik",
+        "additional_rows": " - további sorokat adtak hozzá",
+        "admin": "Adminisztrátor",
+        "admin_details": "Rendszergazda adatok szerkesztése",
+        "admin_domains": "Domain hozzárendelések",
+        "f2b_max_attempts": "Max. próbálkozások",
+        "generate": "generálni",
+        "admins": "Adminisztrátorok",
+        "admins_ldap": "LDAP rendszergazdák",
+        "allowed_origins": "Hozzáférés-Szabályozás-Engedélyezési-Származás",
+        "api_allow_from": "API-hozzáférés engedélyezése ezekről az IP/CIDR hálózati jelölésekről",
+        "api_key": "API-kulcs",
+        "api_read_only": "Csak olvasható hozzáférés",
+        "api_read_write": "Olvasás-írás hozzáférés",
+        "api_skip_ip_check": "IP-ellenőrzés kihagyása az API esetében",
+        "cors_settings": "CORS beállítások",
+        "guid": "GUID - egyedi példányazonosító",
+        "dkim_to": "A címre",
+        "dkim_to_title": "Céltartomány(ok) - felülírásra kerül",
+        "domain": "Domain",
+        "domain_admin": "Domain adminisztrátor",
+        "domain_admins": "Domain adminisztrátorok",
+        "domain_s": "Domain(ek)",
+        "duplicate": "Duplikátum",
+        "duplicate_dkim": "Duplikált DKIM bejegyzés",
+        "edit": "Szerkesztés",
+        "empty": "Nincs eredmény",
+        "excludes": "Kizárja ezeket a kedvezményezetteket",
+        "f2b_ban_time": "Tilalmi idő (s)",
+        "f2b_blacklist": "Feketelistás hálózatok/hostok",
+        "f2b_filter": "Regex szűrők",
+        "logo_info": "A képed 40px magasságúra lesz méretezve a felső navigációs sávhoz és max. 250px szélességűre a kezdőlaphoz. A skálázható grafika használata erősen ajánlott.",
+        "dkim_add_key": "ARC/DKIM kulcs hozzáadása",
+        "dkim_domains_selector": "Válogató",
+        "dkim_domains_wo_keys": "A hiányzó kulcsokkal rendelkező tartományok kiválasztása",
+        "dkim_from": "A címről",
+        "dkim_from_title": "Forrás tartomány, ahonnan az adatokat másolni kell",
+        "dkim_key_length": "DKIM kulcs hossza (bit)",
+        "dkim_key_missing": "Kulcs hiányzik",
+        "import_private_key": "Privát kulcs importálása",
+        "in_use_by": "Használja a",
+        "inactive": "Inaktív",
+        "include_exclude": "Beleértve/Kivéve",
+        "include_exclude_info": "Alapértelmezés szerint - kiválasztás nélkül - <b>minden postafiók</b> címzésre kerül.",
+        "includes": "Vegye fel ezeket a címzetteket",
+        "add_row": "Sor hozzáadása",
+        "host": "Host",
+        "active_rspamd_settings_map": "Aktív beállítások térképe",
+        "add_admin": "Adminisztrátor hozzáadása",
+        "add_forwarding_host": "Továbbító állomás hozzáadása",
+        "add_relayhost": "Feladófüggő szállítás hozzáadása",
+        "add_relayhost_hint": "Felhívjuk figyelmed, hogy ha vannak hitelesítési adatok, azok egyszerű szövegként kerülnek tárolásra.",
+        "add_settings_rule": "Beállítási szabály hozzáadása",
+        "add_transport": "Szállítás hozzáadása",
+        "add_transports_hint": "Felhívjuk figyelmed, hogy ha vannak hitelesítési adatok, azok egyszerű szövegként kerülnek tárolásra.",
+        "advanced_settings": "Speciális beállítások",
+        "change_logo": "Logó módosítása",
+        "dkim_key_unused": "Nem használt kulcs",
+        "add_domain_admin": "Tartományi rendszergazda hozzáadása",
+        "dkim_key_valid": "Érvényes kulcs",
+        "dkim_keys": "ARC/DKIM kulcsok",
+        "dkim_overwrite_key": "A meglévő DKIM kulcs felülírása",
+        "dkim_private_key": "Privát kulcs",
+        "app_links": "App linkek",
+        "app_name": "Alkalmazás neve",
+        "arrival_time": "Érkezési idő (szerveridő)",
+        "authed_user": "Azonosított felhasználó",
+        "ays": "Biztos, hogy folytatni akarod?",
+        "ban_list_info": "A tiltott IP-címek listáját lásd alább: <b>hálózat (fennmaradó tiltási idő) - [akciók]</b>.<br />A tiltás feloldására várakozó IP-ket néhány másodpercen belül eltávolítjuk az aktív tiltási listáról.<br />A piros címkék a feketelistán szereplő aktív állandó tiltásokat jelzik.",
+        "configuration": "Konfiguráció",
+        "convert_html_to_text": "HTML átalakítása egyszerű szöveggé",
+        "credentials_transport_warning": "<b>Figyelmeztetés</b>: Egy új közlekedési térképbejegyzés hozzáadása frissíti a hitelesítő adatokat minden olyan bejegyzéshez, amelynek a következő ugrás oszlopa megegyezik.",
+        "customize": "Testreszabás",
+        "destination": "Célállomás",
+        "customer_id": "Ügyfél azonosító",
+        "apps_name": "\"mailcow Apps\" név",
+        "oauth2_redirect_uri": "",
+        "hash_remove_info": "",
+        "ip_check_opt_in": "",
+        "license_info": "",
+        "message_size": "",
+        "nexthop": "",
+        "no_active_bans": "",
+        "no_new_rows": "",
+        "no_record": "",
+        "oauth2_apps": "",
+        "oauth2_add_client": "",
+        "oauth2_client_id": "",
+        "oauth2_client_secret": "",
+        "oauth2_info": "",
+        "oauth2_renew_secret": "",
+        "oauth2_revoke_tokens": "",
+        "optional": "",
+        "options": "",
+        "password": "",
+        "password_length": "",
+        "password_policy": "",
+        "password_policy_chars": "",
+        "password_policy_length": "",
+        "password_policy_lowerupper": "",
+        "password_policy_numbers": "",
+        "password_policy_special_chars": "",
+        "password_repeat": "",
+        "priority": "",
+        "private_key": "",
+        "quarantine": "",
+        "quarantine_exclude_domains": "",
+        "quarantine_release_format_raw": "",
+        "quarantine_retention_size": "",
+        "quota_notification_html": "",
+        "quota_notification_sender": "",
+        "quota_notification_subject": "",
+        "quota_notifications": "",
+        "quota_notifications_info": "",
+        "quota_notifications_vars": "",
+        "r_active": "",
+        "r_inactive": "",
+        "rsettings_preset_1": "",
+        "rsettings_preset_2": "",
+        "rsettings_preset_3": "",
+        "rsettings_preset_4": "",
+        "rspamd_com_settings": "",
+        "rspamd_global_filters": "",
+        "rspamd_global_filters_info": "",
+        "transports_hint": "",
+        "ui_footer": "",
+        "ui_header_announcement_type_danger": "",
+        "ui_header_announcement_type_info": "",
+        "ui_header_announcement_type_warning": "",
+        "ui_texts": "",
+        "unban_pending": "",
+        "unchanged_if_empty": "",
+        "validate_license_now": "",
+        "yes": "",
+        "sal_level": "",
+        "main_name": "",
+        "quarantine_max_age": "",
+        "quarantine_max_score": "",
+        "quarantine_max_size": "",
+        "queue_unban": "",
+        "reset_default": "",
+        "reset_limit": "",
+        "remove": "",
+        "no": "",
+        "rate_name": "",
+        "merged_vars_hint": "",
+        "message": "",
+        "rsetting_desc": "",
+        "rsetting_no_selection": "",
+        "rsetting_none": "",
+        "rsettings_insert_preset": "",
+        "r_info": "",
+        "refresh": "",
+        "regen_api_key": "",
+        "regex_maps": "",
+        "relay_from": "",
+        "relay_rcpt": "",
+        "relay_run": "",
+        "relayhosts": "",
+        "relayhosts_hint": "",
+        "remove_row": "",
+        "rspamd_global_filters_regex": "",
+        "rspamd_settings_map": "",
+        "service_id": "",
+        "success": "",
+        "transport_maps": "",
+        "transport_test_rcpt_info": "",
+        "quarantine_notification_html": "",
+        "quarantine_notification_sender": "",
+        "quarantine_notification_subject": "",
+        "quarantine_redirect": "",
+        "quarantine_release_format": "",
+        "quarantine_release_format_att": "",
+        "routing": "",
+        "rsetting_add_rule": "",
+        "rsetting_content": "",
+        "ui_header_announcement": "",
+        "ui_header_announcement_active": "",
+        "ui_header_announcement_content": "",
+        "ui_header_announcement_help": "",
+        "ui_header_announcement_select": "",
+        "ui_header_announcement_type": "",
+        "recipients": "",
+        "quarantine_bcc": "",
+        "rspamd_global_filters_agree": "",
+        "service": "",
+        "lookup_mx": ""
     },
     "edit": {
         "active": "Aktív",
@@ -39,7 +257,121 @@
         "description": "Leírás",
         "domain_quota": "Domain kvóta",
         "domains": "Domainek",
-        "edit_alias_domain": "Alias domain szerkesztése"
+        "edit_alias_domain": "Alias domain szerkesztése",
+        "footer_exclude": "",
+        "max_aliases": "",
+        "max_mailboxes": "",
+        "max_quota": "",
+        "maxage": "",
+        "maxbytespersecond": "",
+        "grant_types": "",
+        "last_modified": "",
+        "sogo_visible": "",
+        "force_pw_update": "",
+        "sogo_access": "",
+        "mailbox": "",
+        "mailbox_quota_def": "",
+        "sogo_visible_info": "",
+        "spam_alias": "",
+        "spam_filter": "",
+        "spam_score": "",
+        "subfolder2": "",
+        "syncjob": "",
+        "target_address": "",
+        "target_domain": "",
+        "timeout1": "",
+        "timeout2": "",
+        "unchanged_if_empty": "",
+        "username": "",
+        "custom_attributes": "",
+        "delete2": "",
+        "delete2duplicates": "",
+        "delete_ays": "",
+        "disable_login": "",
+        "domain": "",
+        "domain_admin": "",
+        "spam_policy": "",
+        "domain_footer_skip_replies": "",
+        "encryption": "",
+        "exclude": "",
+        "extended_sender_acl": "",
+        "extended_sender_acl_info": "",
+        "relay_all": "",
+        "relay_domain": "",
+        "full_name": "",
+        "generate": "",
+        "admin": "",
+        "created_on": "",
+        "multiple_bookings": "",
+        "acl": "",
+        "pushover_sound": "",
+        "app_passwd_protocols": "",
+        "automap": "",
+        "bcc_dest_format": "",
+        "comment_info": "",
+        "delete1": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_info": "",
+        "domain_footer_info_vars": {
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": "",
+            "custom": ""
+        },
+        "domain_footer_plain": "",
+        "dont_check_sender_acl": "",
+        "force_pw_update_info": "",
+        "mbox_rl_info": "",
+        "mins_interval": "",
+        "mailbox_relayhost_info": "",
+        "none_inherit": "",
+        "nexthop": "",
+        "password": "",
+        "previous": "",
+        "private_comment": "",
+        "public_comment": "",
+        "pushover": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "quota_mb": "",
+        "quota_warning_bcc": "",
+        "quota_warning_bcc_info": "",
+        "redirect_uri": "",
+        "relay_all_info": "",
+        "sender_acl": "",
+        "sender_acl_disabled": "",
+        "sieve_type": "",
+        "skipcrossduplicates": "",
+        "sogo_access_info": "",
+        "validate_save": "",
+        "inactive": "",
+        "gal": "",
+        "gal_info": "",
+        "hostname": "",
+        "kind": "",
+        "scope": "",
+        "password_repeat": "",
+        "ratelimit": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "relayhost": "",
+        "remove": "",
+        "resource": "",
+        "save": "",
+        "sender_acl_info": "",
+        "sieve_desc": "",
+        "title": "",
+        "lookup_mx": ""
     },
     "footer": {
         "cancel": "Mégse",
@@ -52,18 +384,21 @@
         "restart_container": "Konténer újraindítása",
         "restart_container_info": "<b>Fontos:</b> A teljes újraindulás eltarthat egy ideig, kérjük várjon, amíg befejeződik!",
         "restart_now": "Újraindítás most",
-        "restarting_container": "Konténer újraindítása. Ez eltarthat egy darabig."
+        "restarting_container": "Konténer újraindítása. Ez eltarthat egy darabig.",
+        "nothing_selected": "",
+        "hibp_check": ""
     },
     "header": {
         "administration": "Beállítások és részletek",
         "apps": "Appok",
-        "debug": "Rendszer információ",
+        "debug": "Információ",
         "email": "E-Mail",
         "mailcow_config": "Beállítások",
         "quarantine": "Karantén",
         "restart_netfilter": "Netfilter újraindítása",
         "restart_sogo": "SOGo újraindítása",
-        "user_settings": "Felhasználó beállításai"
+        "user_settings": "Felhasználó beállításai",
+        "mailcow_system": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "TFA megerősítésre várakozás",
@@ -75,7 +410,9 @@
         "login": "Bejelentkezés",
         "mobileconfig_info": "A kért Apple kapcsolat profil letöltéséhez jelentkezzen be, mint postafiók-felhasználó.",
         "password": "Jelszó",
-        "username": "Felhasználónév"
+        "username": "Felhasználónév",
+        "other_logins": "",
+        "fido2_webauthn": ""
     },
     "mailbox": {
         "action": "Művelet",
@@ -170,7 +507,87 @@
         "toggle_all": "Összes átváltása",
         "username": "Felhasználónév",
         "waiting": "Várakozás",
-        "weekly": "Hetente"
+        "weekly": "Hetente",
+        "sieve_preset_6": "",
+        "sieve_preset_8": "",
+        "sender": "",
+        "set_postfilter": "",
+        "set_prefilter": "",
+        "sieve_info": "",
+        "sieve_preset_header": "",
+        "sogo_visible": "",
+        "mailbox_defaults_info": "",
+        "mailbox_templates": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "recipient_map_old_info": "",
+        "relay_all": "",
+        "relay_unknown": "",
+        "sieve_preset_1": "",
+        "sieve_preset_2": "",
+        "sieve_preset_3": "",
+        "sieve_preset_4": "",
+        "sieve_preset_5": "",
+        "sieve_preset_7": "",
+        "sogo_visible_n": "",
+        "sogo_visible_y": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "templates": "",
+        "tls_policy_maps_enforced_tls": "",
+        "tls_policy_maps_info": "",
+        "tls_map_policy": "",
+        "booking_custom_short": "",
+        "booking_ltnull": "",
+        "booking_lt0_short": "",
+        "catch_all": "",
+        "created_on": "",
+        "dkim_domains_selector": "",
+        "dkim_key_length": "",
+        "domain_templates": "",
+        "template": "",
+        "add_alias_expand": "",
+        "add_template": "",
+        "alias_domain_alias_hint": "",
+        "all_domains": "",
+        "bcc_info": "",
+        "bcc_map_type": "",
+        "bcc_maps": "",
+        "bcc_rcpt_map": "",
+        "bcc_sender_map": "",
+        "bcc_to_rcpt": "",
+        "bcc_to_sender": "",
+        "bcc_type": "",
+        "booking_null": "",
+        "booking_0_short": "",
+        "booking_custom": "",
+        "domain_quota_total": "",
+        "gal": "",
+        "goto_ham": "",
+        "goto_spam": "",
+        "last_modified": "",
+        "last_pw_change": "",
+        "mailbox_defaults": "",
+        "max_aliases": "",
+        "max_mailboxes": "",
+        "max_quota": "",
+        "no": "",
+        "open_logs": "",
+        "q_all": "",
+        "recipient": "",
+        "recipient_map_info": "",
+        "recipient_map_new_info": "",
+        "q_add_header": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "tls_policy_maps": "",
+        "tls_policy_maps_long": "",
+        "yes": ""
     },
     "oauth2": {
         "access_denied": "Kérjük jelentkezzen be postafiók felhasználójával az OAuth2 használatához.",
@@ -217,10 +634,38 @@
         "table_size_show_n": "%s tétel mutatása",
         "text_from_html_content": "Tartalom (konvertált html)",
         "text_plain_content": "Tartalom (sima szöveg)",
-        "toggle_all": "Összes átkapcsolása"
+        "toggle_all": "Összes átkapcsolása",
+        "settings_info": "",
+        "info": "",
+        "junk_folder": "",
+        "disabled_by_config": "",
+        "qhandler_success": "",
+        "release_body": "",
+        "spam": "",
+        "type": "",
+        "quick_info_link": "",
+        "check_hash": "",
+        "confirm": "",
+        "deliver_inbox": "",
+        "rejected": "",
+        "rewrite_subject": "",
+        "qid": ""
     },
     "queue": {
-        "queue_manager": "Queue Manager"
+        "queue_manager": "Queue Manager",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": ""
     },
     "start": {
         "help": "Súgó panel megjelenítése/elrejtése",
@@ -275,7 +720,44 @@
         "resource_modified": "Postafiók %s módosításai mentve",
         "resource_removed": "Erőforrás %s eltávolítva",
         "saved_settings": "Beállítások mentve",
-        "upload_success": "File sikeresen feltöltve"
+        "upload_success": "File sikeresen feltöltve",
+        "reset_main_logo": "",
+        "template_removed": "",
+        "cors_headers_edited": "",
+        "domain_footer_modified": "",
+        "f2b_banlist_refreshed": "",
+        "bcc_saved": "",
+        "domain_add_dkim_available": "",
+        "dkim_duplicated": "",
+        "f2b_modified": "",
+        "forwarding_host_added": "",
+        "forwarding_host_removed": "",
+        "ip_check_opt_in_modified": "",
+        "nginx_reloaded": "",
+        "acl_saved": "",
+        "bcc_deleted": "",
+        "bcc_edited": "",
+        "password_policy_saved": "",
+        "pushover_settings_edited": "",
+        "queue_command_success": "",
+        "recipient_map_entry_deleted": "",
+        "recipient_map_entry_saved": "",
+        "relayhost_added": "",
+        "relayhost_removed": "",
+        "template_added": "",
+        "template_modified": "",
+        "rl_saved": "",
+        "rspamd_ui_pw_set": "",
+        "settings_map_added": "",
+        "settings_map_removed": "",
+        "sogo_profile_reset": "",
+        "tls_policy_map_entry_deleted": "",
+        "tls_policy_map_entry_saved": "",
+        "ui_texts": "",
+        "verified_fido2_login": "",
+        "verified_totp_login": "",
+        "verified_webauthn_login": "",
+        "verified_yotp_login": ""
     },
     "user": {
         "action": "Művelet",
@@ -376,7 +858,70 @@
         "waiting": "Várakozás",
         "week": "hét",
         "weekly": "heti",
-        "weeks": "hét"
+        "weeks": "hét",
+        "aliases_send_as_all": "",
+        "app_hint": "",
+        "direct_aliases_desc": "",
+        "sogo_profile_reset_now": "",
+        "aliases_also_send_as": "",
+        "apple_connection_profile_complete": "",
+        "apple_connection_profile_mailonly": "",
+        "apple_connection_profile_with_app_password": "",
+        "attribute": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "eas_reset_help": "",
+        "empty": "",
+        "shared_aliases_desc": "",
+        "value": "",
+        "allowed_protocols": "",
+        "last_pw_change": "",
+        "direct_protocol_access": "",
+        "fido2_webauthn": "",
+        "from": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "month": "",
+        "months": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "q_all": "",
+        "sogo_profile_reset": "",
+        "sogo_profile_reset_help": "",
+        "spamfilter_table_domain_policy": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "tls_policy_warning": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "last_ui_login": "",
+        "q_add_header": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_category_info": "",
+        "recent_successful_connections": "",
+        "created_on": "",
+        "is_catch_all": "",
+        "login_history": "",
+        "mailbox": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "with_app_password": "",
+        "year": "",
+        "years": ""
     },
     "warning": {
         "cannot_delete_self": "Bejelentkezett felhasználó nem törölhető.",
@@ -384,7 +929,12 @@
         "no_active_admin": "Utolsó aktív admin felhasználó nem deaktiválható.",
         "quota_exceeded_scope": "Domain kvóta átlépve: csak korlátok nélküli postafiókok hozhatók létre ebben a domain-ben.",
         "session_token": "Űrlap-token érvénytelen: Tokenek nem egyeznek",
-        "session_ua": "Űrlap-token érvénytelen: User-Agent hitelesítési probléma"
+        "session_ua": "Űrlap-token érvénytelen: User-Agent hitelesítési probléma",
+        "domain_added_sogo_failed": "",
+        "dovecot_restart_failed": "",
+        "fuzzy_learn_error": "",
+        "hash_not_found": "",
+        "is_not_primary_alias": ""
     },
     "acl": {
         "delimiter_action": "Elhatárolás",
@@ -399,13 +949,361 @@
         "protocol_access": "Protokoll-hozzáférés módosítása",
         "quarantine_attachments": "Karantén mellékletek",
         "quarantine_category": "Karantén értesítési kategória módosítása",
-        "quarantine_notification": "Karantén értesítések módosítása"
+        "quarantine_notification": "Karantén értesítések módosítása",
+        "eas_reset": "EAS-eszközök alaphelyzetbe állítása",
+        "extend_sender_acl": "Küldő ACL külső címekkel való bővítésének engedélyezése",
+        "mailbox_relayhost": "Relayhost módosítása egy postafiókhoz",
+        "prohibited": "ACL által tiltott",
+        "pushover": "Pushover",
+        "ratelimit": "Mérték határ",
+        "recipient_maps": "Címzett térképek",
+        "smtp_ip_access": "Az SMTP engedélyezett állomásainak módosítása",
+        "sogo_profile_reset": "SOGo profil visszaállítása",
+        "spam_alias": "Ideiglenes álnevek",
+        "spam_policy": "Fekete/Fehér lista",
+        "spam_score": "Spam pontszám",
+        "syncjobs": "Szinkronizálási feladatok",
+        "tls_policy": "TLS szabályzat",
+        "unlimited_quota": "Korlátlan kvóta a postafiókok számára",
+        "sogo_access": "A SOGo-hozzáférés kezelésének lehetővé tétele"
     },
     "diagnostics": {
-        "dns_records": "DNS bejegyzések"
+        "dns_records": "DNS bejegyzések",
+        "dns_records_data": "",
+        "dns_records_name": "",
+        "dns_records_status": "",
+        "cname_from_a": "",
+        "dns_records_24hours": "",
+        "dns_records_docs": "",
+        "dns_records_type": "",
+        "optional": ""
     },
     "add": {
         "username": "Felhasználónév",
-        "validation_success": "Sikeres ellenőrzés"
+        "validation_success": "Sikeres ellenőrzés",
+        "mailbox_quota_def": "Alapértelmezett postafiók kvóta",
+        "password_repeat": "Megerősítő jelszó (ismétlés)",
+        "post_domain_add": "A \"sogo-mailcow\" SOGo konténert újra kell indítani egy új tartomány hozzáadása után!<br><br>Kiegészítésképpen a tartományok DNS-konfigurációját is felül kell vizsgálni. A DNS-konfiguráció jóváhagyása után indítsa újra az \"acme-mailcow\"-t, hogy automatikusan generáljon tanúsítványokat az új tartományhoz (autoconfig.&lt;domain&gt;, autodiscover.&lt;domain&gt;).<br>Ez a lépés opcionális, és 24 óránként megismétlődik.",
+        "dry": "Szinkronizálás szimulálása",
+        "inactive": "Inaktív",
+        "kind": "Kedves",
+        "mailbox_quota_m": "Maximális kvóta postafiókonként (MiB)",
+        "mailbox_username": "Felhasználónév (az e-mail cím bal oldali része)",
+        "max_aliases": "Max. lehetséges álnevek",
+        "max_mailboxes": "Max. lehetséges postafiókok",
+        "mins_interval": "A lekérdezési időköz (perc)",
+        "password": "Jelszó",
+        "port": "Port",
+        "public_comment": "Nyilvános megjegyzés",
+        "target_domain": "Céltartomány",
+        "timeout1": "Időtúllépés a távoli állomáshoz való csatlakozáskor",
+        "timeout2": "Időtúllépés a helyi állomáshoz való csatlakozáskor",
+        "validate": "Érvényesítsd",
+        "description": "Leírás",
+        "destination": "Célállomás",
+        "disable_login": "Bejelentkezés letiltása (a bejövő leveleket továbbra is elfogadja)",
+        "domain_matches_hostname": "Domain %s megegyezik a hostnévvel",
+        "domain_quota_m": "Teljes tartományi kvóta (MiB)",
+        "enc_method": "Titkosítási módszer",
+        "exclude": "Objektumok kizárása (regex)",
+        "full_name": "Teljes név",
+        "gal": "Globális címlista",
+        "goto_ham": "Tanulj <span class=\"text-success\"><b>sonkaként</b></span>",
+        "goto_null": "Leveleket csendben eldobni",
+        "goto_spam": "Tanuld <span class=\"text-danger\"><b>spamként</b></span>",
+        "syncjob_hint": "Ne feledje, hogy a jelszavakat egyszerű szöveges formában kell elmenteni!",
+        "target_address": "Továbbítási címek",
+        "target_address_info": "<small>Teljes e-mail cím(ek) (vesszővel elválasztva).</small>",
+        "bcc_dest_format": "A BCC-célpontnak egyetlen érvényes e-mail címnek kell lennie.<br>Ha több címre kell másolatot küldenie, hozzon létre egy aliast, és használja azt.",
+        "comment_info": "A privát megjegyzés nem látható a felhasználó számára, míg a nyilvános megjegyzés tooltip-ként jelenik meg, amikor a felhasználó áttekintésében a megjegyzésre mutat.",
+        "custom_params": "Egyéni paraméterek",
+        "gal_info": "A GAL tartalmazza a tartomány összes objektumát, és egyetlen felhasználó sem szerkesztheti. A SOGo-ban a Szabad/Elfoglalt információ hiányzik, ha ki van kapcsolva! <b>Indítsa újra a SOGo-t a változások alkalmazásához.</b>",
+        "hostname": "Házigazda",
+        "backup_mx_options": "Továbbítási opciók",
+        "custom_params_hint": "Megfelelő: --param=xy, Rossz: --param xy",
+        "delete1": "Törlés a forrásból, ha befejeződött",
+        "delete2": "A forráson kívüli üzenetek törlése a célállomáson",
+        "delete2duplicates": "Duplikáltak törlése a célállomáson",
+        "domain": "Domain",
+        "nexthop": "Következő hop",
+        "tags": "Címkék",
+        "app_password": "Alkalmazás jelszó hozzáadása",
+        "private_comment": "Privát megjegyzés",
+        "alias_address_info": "<small>Teljes e-mail cím(ek) vagy @example.com, egy domainhez tartozó összes üzenetet elfogásához (vesszővel elválasztva). <b>csak mailcow tartományok</b>.</small>",
+        "generate": "generál",
+        "activate_filter_warn": "Az összes többi szűrő deaktiválódik, ha az aktív opció be van jelölve.",
+        "active": "Aktív",
+        "add": "Hozzáad",
+        "add_domain_only": "Csak domain hozzáadása",
+        "add_domain_restart": "Domain hozzáadása és a SOGo újraindítása",
+        "alias_address": "Alias cím(ek)",
+        "alias_domain": "Alias domain",
+        "alias_domain_info": "<small>Csak érvényes tartománynevek (vesszővel elválasztva).</small>",
+        "app_name": "Alkalmazás neve",
+        "app_passwd_protocols": "Engedélyezett protokollok az alkalmazás jelszavához",
+        "multiple_bookings": "",
+        "quota_mb": "",
+        "relay_all": "",
+        "relay_all_info": "",
+        "relay_domain": "",
+        "relay_unknown_only": "",
+        "relayhost_wrapped_tls_info": "",
+        "select_domain": "",
+        "sieve_desc": "",
+        "skipcrossduplicates": "",
+        "relay_transport_info": "",
+        "sieve_type": "",
+        "subscribeall": "",
+        "automap": "",
+        "syncjob": "",
+        "select": ""
+    },
+    "danger": {
+        "webauthn_authenticator_failed": "",
+        "rl_timeframe": "",
+        "mailbox_invalid": "",
+        "is_spam_alias": "",
+        "last_key": "",
+        "access_denied": "",
+        "alias_domain_invalid": "",
+        "alias_empty": "",
+        "alias_goto_identical": "",
+        "alias_invalid": "",
+        "aliasd_targetd_identical": "",
+        "aliases_in_use": "",
+        "bcc_empty": "",
+        "bcc_exists": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "domain_cannot_match_hostname": "",
+        "domain_exists": "",
+        "domain_invalid": "",
+        "domain_not_empty": "",
+        "domain_not_found": "",
+        "domain_quota_m_in_use": "",
+        "extended_sender_acl_denied": "",
+        "extra_acl_invalid": "",
+        "extra_acl_invalid_domain": "",
+        "fido2_verification_failed": "",
+        "file_open_error": "",
+        "from_invalid": "",
+        "global_filter_write_error": "",
+        "global_map_invalid": "",
+        "global_map_write_error": "",
+        "goto_empty": "",
+        "goto_invalid": "",
+        "ham_learn_error": "",
+        "imagick_exception": "",
+        "mailbox_quota_exceeded": "",
+        "text_empty": "",
+        "tfa_token_invalid": "",
+        "tls_policy_map_dest_invalid": "",
+        "tls_policy_map_entry_exists": "",
+        "tls_policy_map_parameter_invalid": "",
+        "app_name_empty": "",
+        "app_passwd_id_invalid": "",
+        "private_key_error": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "login_failed": "",
+        "mailbox_defquota_exceeds_mailbox_maxquota": "",
+        "mailbox_quota_exceeds_domain_quota": "",
+        "mailbox_quota_left_exceeded": "",
+        "mailboxes_in_use": "",
+        "malformed_username": "",
+        "map_content_empty": "",
+        "max_alias_exceeded": "",
+        "next_hop_interferes": "",
+        "next_hop_interferes_any": "",
+        "object_exists": "",
+        "object_is_not_numeric": "",
+        "password_complexity": "",
+        "password_empty": "",
+        "password_mismatch": "",
+        "policy_list_from_exists": "",
+        "policy_list_from_invalid": "",
+        "pushover_credentials_missing": "",
+        "pushover_key": "",
+        "pushover_token": "",
+        "quota_not_0_not_numeric": "",
+        "recipient_map_entry_exists": "",
+        "redis_error": "",
+        "relayhost_invalid": "",
+        "release_send_failed": "",
+        "reset_f2b_regex": "",
+        "resource_invalid": "",
+        "rspamd_ui_pw_length": "",
+        "script_empty": "",
+        "sender_acl_invalid": "",
+        "set_acl_failed": "",
+        "settings_map_invalid": "",
+        "sieve_error": "",
+        "spam_learn_error": "",
+        "subject_empty": "",
+        "target_domain_invalid": "",
+        "targetd_not_found": "",
+        "template_name_invalid": "",
+        "temp_error": "",
+        "totp_verification_failed": "",
+        "transport_dest_exists": "",
+        "webauthn_verification_failed": "",
+        "webauthn_publickey_failed": "",
+        "webauthn_username_failed": "",
+        "unknown": "",
+        "unknown_tfa_method": "",
+        "unlimited_quota_acl": "",
+        "is_alias_or_mailbox": "",
+        "targetd_relay_domain": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "no_user_defined": "",
+        "bcc_must_be_email": "",
+        "comment_too_long": "",
+        "defquota_empty": "",
+        "demo_mode_enabled": "",
+        "description_invalid": "",
+        "dkim_domain_or_sel_exists": "",
+        "dkim_domain_or_sel_invalid": "",
+        "img_invalid": "",
+        "img_tmp_missing": "",
+        "invalid_bcc_map_type": "",
+        "invalid_destination": "",
+        "invalid_filter_type": "",
+        "invalid_host": "",
+        "invalid_mime_type": "",
+        "invalid_nexthop": "",
+        "invalid_nexthop_authenticated": "",
+        "invalid_recipient_map_new": "",
+        "invalid_recipient_map_old": "",
+        "ip_list_empty": "",
+        "is_alias": "",
+        "max_mailbox_exceeded": "",
+        "max_quota_in_use": "",
+        "maxquota_empty": "",
+        "network_host_invalid": "",
+        "username_invalid": "",
+        "validity_missing": "",
+        "value_missing": "",
+        "yotp_verification_failed": "",
+        "nginx_reload_failed": "",
+        "filter_type": "",
+        "mysql_error": ""
+    },
+    "debug": {
+        "architecture": "",
+        "started_at": "",
+        "started_on": "",
+        "error_show_ip": "",
+        "external_logs": "",
+        "chart_this_server": "",
+        "containers_info": "",
+        "container_running": "",
+        "container_disabled": "",
+        "online_users": "",
+        "last_modified": "",
+        "login_time": "",
+        "logs": "",
+        "memory": "",
+        "container_stopped": "",
+        "cores": "",
+        "current_time": "",
+        "disk_usage": "",
+        "docs": "",
+        "history_all_servers": "",
+        "in_memory_logs": "",
+        "jvm_memory_solr": "",
+        "log_info": "",
+        "show_ip": "",
+        "size": "",
+        "solr_dead": "",
+        "solr_status": "",
+        "static_logs": "",
+        "success": "",
+        "system_containers": "",
+        "timezone": "",
+        "uptime": "",
+        "update_available": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "username": "",
+        "wip": "",
+        "restart_container": "",
+        "service": ""
+    },
+    "tfa": {
+        "delete_tfa": "",
+        "none": "",
+        "error_code": "",
+        "authenticators": "",
+        "confirm_totp_token": "",
+        "init_webauthn": "",
+        "key_id": "",
+        "select": "",
+        "tfa_token_invalid": "",
+        "u2f_deprecated_important": "",
+        "disable_tfa": "",
+        "enter_qr_code": "",
+        "key_id_totp": "",
+        "reload_retry": "",
+        "scan_qr_code": "",
+        "set_tfa": "",
+        "start_webauthn_validation": "",
+        "tfa": "",
+        "totp": "",
+        "u2f_deprecated": "",
+        "webauthn": "",
+        "waiting_usb_auth": "",
+        "waiting_usb_register": "",
+        "yubi_otp": "",
+        "confirm": "",
+        "api_register": ""
+    },
+    "datatables": {
+        "thousands": "",
+        "lengthMenu": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "paginate": {
+            "first": "",
+            "last": "",
+            "previous": "",
+            "next": ""
+        },
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "emptyTable": "",
+        "expand_all": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "collapse_all": "",
+        "infoPostFix": "",
+        "decimal": ""
+    },
+    "ratelimit": {
+        "minute": "",
+        "disabled": "",
+        "second": "",
+        "hour": "",
+        "day": ""
+    },
+    "fido2": {
+        "confirm": "",
+        "fido2_validation_failed": "",
+        "fn": "",
+        "known_ids": "",
+        "none": "",
+        "register_status": "",
+        "rename": "",
+        "set_fido2": "",
+        "fido2_auth": "",
+        "fido2_success": "",
+        "set_fido2_touchid": "",
+        "set_fn": "",
+        "start_fido2_validation": ""
     }
 }

+ 47 - 7
data/web/lang/lang.it-it.json

@@ -341,7 +341,17 @@
         "rsettings_preset_4": "Disattivare Rspamd per un dominio",
         "options": "Opzioni",
         "cors_settings": "Impostazioni CORS",
-        "copy_to_clipboard": "Testo copiato negli appunti!"
+        "copy_to_clipboard": "Testo copiato negli appunti!",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "allowed_methods": "",
+        "allowed_origins": "",
+        "ip_check": "",
+        "ip_check_disabled": "",
+        "ip_check_opt_in": "",
+        "queue_unban": ""
     },
     "danger": {
         "access_denied": "Accesso negato o form di login non corretto",
@@ -466,7 +476,13 @@
         "template_exists": "Il template %s esiste già",
         "template_id_invalid": "Il template con ID %s non è valido",
         "img_dimensions_exceeded": "L'immagine supera la dimensione massima consentita",
-        "img_size_exceeded": "L'immagine supera la dimensione massima del file"
+        "img_size_exceeded": "L'immagine supera la dimensione massima del file",
+        "webauthn_authenticator_failed": "",
+        "webauthn_username_failed": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "webauthn_publickey_failed": "",
+        "extended_sender_acl_denied": ""
     },
     "debug": {
         "chart_this_server": "Grafico (questo server)",
@@ -503,7 +519,11 @@
         "memory": "Memoria",
         "timezone": "Fuso orario",
         "no_update_available": "Il sistema è aggiornato all'ultima versione",
-        "update_failed": "Impossibile verificare la presenza di un aggiornamento"
+        "update_failed": "Impossibile verificare la presenza di un aggiornamento",
+        "architecture": "",
+        "show_ip": "",
+        "wip": "",
+        "error_show_ip": ""
     },
     "diagnostics": {
         "cname_from_a": "Valore letto dal record A/AAAA. Questo è supportato finché il record punta alla risorsa corretta.",
@@ -632,7 +652,20 @@
         "last_modified": "Ultima modifica",
         "pushover_sound": "Suono",
         "custom_attributes": "Attributi personalizzati",
-        "domain_footer_skip_replies": "Ignora il piè di pagina nelle e-mail di risposta"
+        "domain_footer_skip_replies": "Ignora il piè di pagina nelle e-mail di risposta",
+        "footer_exclude": "",
+        "domain_footer_info_vars": {
+            "custom": "",
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": ""
+        },
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_plain": "",
+        "domain_footer_info": ""
     },
     "fido2": {
         "confirm": "Conferma",
@@ -939,7 +972,9 @@
         "show_message": "Mostra messaggio",
         "unhold_mail": "Sblocca",
         "hold_mail_legend": "Blocca le mail selezionate. (Previene ulteriori tentativi di consegna)",
-        "legend": "Funzioni delle azioni della coda di posta:"
+        "legend": "Funzioni delle azioni della coda di posta:",
+        "unban": "",
+        "unhold_mail_legend": ""
     },
     "start": {
         "help": "Mostra/Nascondi pannello di aiuto",
@@ -1028,7 +1063,10 @@
         "template_added": "Aggiunto template %s",
         "template_modified": "Le modifiche al template %s sono state salvate",
         "template_removed": "Il template con ID %s è stato cancellato",
-        "f2b_banlist_refreshed": "L'ID della lista blocchi è stato aggiornato con successo."
+        "f2b_banlist_refreshed": "L'ID della lista blocchi è stato aggiornato con successo.",
+        "domain_footer_modified": "",
+        "ip_check_opt_in_modified": "",
+        "cors_headers_edited": ""
     },
     "tfa": {
         "api_register": "%s usa le API Yubico Cloud. Richiedi una chiave API <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">qui</a>",
@@ -1264,6 +1302,8 @@
         "aria": {
             "sortAscending": ": attivare l'ordinamento crescente delle colonne",
             "sortDescending": ": attivare l'ordinamento decrescente delle colonne"
-        }
+        },
+        "decimal": "",
+        "infoPostFix": ""
     }
 }

+ 303 - 17
data/web/lang/lang.ko-kr.json

@@ -25,7 +25,10 @@
         "syncjobs": "동기화 작업",
         "tls_policy": "TLS 정책",
         "unlimited_quota": "메일에 무제한 할당",
-        "domain_desc": "도메인 설명 변경"
+        "domain_desc": "도메인 설명 변경",
+        "domain_relayhost": "",
+        "mailbox_relayhost": "",
+        "quarantine_category": ""
     },
     "add": {
         "activate_filter_warn": "활성화가 체크되어 있으면 모든 다른 필터들은 비활성화됩니다.",
@@ -101,7 +104,11 @@
         "timeout2": "로컬 호스트 연결 시간 초과",
         "username": "사용자명",
         "validate": "확인하기",
-        "validation_success": "성공적으로 확인됨"
+        "validation_success": "성공적으로 확인됨",
+        "dry": "",
+        "tags": "",
+        "app_passwd_protocols": "",
+        "bcc_dest_format": ""
     },
     "admin": {
         "access": "접근",
@@ -301,7 +308,50 @@
         "username": "사용자 이름",
         "validate_license_now": "라이선스 서버와 GUID 확인",
         "verify": "확인",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "is_mx_based": "",
+        "optional": "",
+        "oauth2_apps": "",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "f2b_manage_external": "",
+        "copy_to_clipboard": "",
+        "domain_admin": "",
+        "f2b_ban_time_increment": "",
+        "f2b_manage_external_info": "",
+        "f2b_max_ban_time": "",
+        "login_time": "",
+        "oauth2_add_client": "",
+        "allowed_methods": "",
+        "allowed_origins": "",
+        "cors_settings": "",
+        "dkim_overwrite_key": "",
+        "f2b_filter": "",
+        "f2b_regex_info": "",
+        "html": "",
+        "options": "",
+        "password_length": "",
+        "password_policy": "",
+        "ip_check": "",
+        "ip_check_disabled": "",
+        "ip_check_opt_in": "",
+        "queue_unban": "",
+        "service": "",
+        "transport_test_rcpt_info": "",
+        "password_policy_chars": "",
+        "password_policy_length": "",
+        "password_policy_lowerupper": "",
+        "password_policy_numbers": "",
+        "password_policy_special_chars": "",
+        "quarantine_max_score": "",
+        "relay_rcpt": "",
+        "rsettings_preset_4": "",
+        "success": "",
+        "admins": "",
+        "admins_ldap": "",
+        "api_read_only": "",
+        "api_read_write": "",
+        "convert_html_to_text": ""
     },
     "danger": {
         "access_denied": "접근이 거부되거나 잘못된 데이터 양식",
@@ -415,7 +465,24 @@
         "username_invalid": "%s는 사용지 이름으로 사용할 수 없습니다.",
         "validity_missing": "유효 기간을 지정해주세요.",
         "value_missing": "모든 값을 입력해주세요.",
-        "yotp_verification_failed": "Yubico OTP 검증 실패: %s"
+        "yotp_verification_failed": "Yubico OTP 검증 실패: %s",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "webauthn_authenticator_failed": "",
+        "webauthn_publickey_failed": "",
+        "webauthn_username_failed": "",
+        "fido2_verification_failed": "",
+        "nginx_reload_failed": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "template_name_invalid": "",
+        "demo_mode_enabled": "",
+        "dkim_domain_or_sel_exists": "",
+        "reset_f2b_regex": "",
+        "tfa_token_invalid": "",
+        "extended_sender_acl_denied": ""
     },
     "debug": {
         "chart_this_server": "Chart (this server)",
@@ -437,7 +504,26 @@
         "uptime": "Uptime",
         "started_on": "Started on",
         "static_logs": "Static logs",
-        "system_containers": "System & Containers"
+        "system_containers": "System & Containers",
+        "container_running": "",
+        "architecture": "",
+        "container_disabled": "",
+        "cores": "",
+        "current_time": "",
+        "error_show_ip": "",
+        "memory": "",
+        "online_users": "",
+        "service": "",
+        "show_ip": "",
+        "success": "",
+        "timezone": "",
+        "update_available": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "username": "",
+        "wip": "",
+        "login_time": "",
+        "container_stopped": ""
     },
     "diagnostics": {
         "cname_from_a": "Value derived from A/AAAA record. This is supported as long as the record points to the correct resource.",
@@ -447,7 +533,8 @@
         "dns_records_name": "Name",
         "dns_records_status": "Current State",
         "dns_records_type": "Type",
-        "optional": "This record is optional."
+        "optional": "This record is optional.",
+        "dns_records_docs": ""
     },
     "edit": {
         "active": "Active",
@@ -545,7 +632,40 @@
         "title": "Edit object",
         "unchanged_if_empty": "If unchanged leave blank",
         "username": "Username",
-        "validate_save": "Validate and save"
+        "validate_save": "Validate and save",
+        "lookup_mx": "",
+        "footer_exclude": "",
+        "domain_footer_skip_replies": "",
+        "custom_attributes": "",
+        "domain_footer_info_vars": {
+            "from_addr": "",
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_domain": "",
+            "custom": ""
+        },
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_info": "",
+        "acl": "",
+        "admin": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "app_passwd_protocols": "",
+        "domain_footer_plain": "",
+        "created_on": "",
+        "sogo_access": "",
+        "sogo_access_info": "",
+        "spam_filter": "",
+        "mailbox_relayhost_info": "",
+        "none_inherit": "",
+        "pushover": "",
+        "pushover_sound": "",
+        "quota_warning_bcc": "",
+        "quota_warning_bcc_info": "",
+        "ratelimit": ""
     },
     "footer": {
         "cancel": "Cancel",
@@ -558,7 +678,9 @@
         "restart_container": "Restart container",
         "restart_container_info": "<b>Important:</b> A graceful restart may take a while to complete, please wait for it to finish.",
         "restart_now": "Restart now",
-        "restarting_container": "Restarting container, this may take a while"
+        "restarting_container": "Restarting container, this may take a while",
+        "nothing_selected": "",
+        "hibp_check": ""
     },
     "header": {
         "administration": "Configuration & Details",
@@ -569,7 +691,8 @@
         "quarantine": "Quarantine",
         "restart_netfilter": "Restart netfilter",
         "restart_sogo": "Restart SOGo",
-        "user_settings": "User Settings"
+        "user_settings": "User Settings",
+        "mailcow_system": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "Awaiting TFA confirmation",
@@ -581,7 +704,9 @@
         "login": "Login",
         "mobileconfig_info": "Please login as mailbox user to download the requested Apple connection profile.",
         "password": "Password",
-        "username": "Username"
+        "username": "Username",
+        "fido2_webauthn": "",
+        "other_logins": ""
     },
     "mailbox": {
         "action": "조치",
@@ -722,7 +847,41 @@
         "username": "Username",
         "waiting": "Waiting",
         "weekly": "Weekly",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "domain_templates": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "allow_from_smtp_info": "",
+        "catch_all": "",
+        "goto_spam": "",
+        "last_pw_change": "",
+        "mailbox_defaults": "",
+        "mailbox_templates": "",
+        "open_logs": "",
+        "sender": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "templates": "",
+        "template": "",
+        "q_reject": "",
+        "q_all": "",
+        "quarantine_category": "",
+        "recipient": "",
+        "add_alias_expand": "",
+        "add_template": "",
+        "all_domains": "",
+        "allow_from_smtp": "",
+        "created_on": "",
+        "goto_ham": "",
+        "mailbox_defaults_info": "",
+        "q_add_header": "",
+        "allowed_protocols": "",
+        "relay_unknown": ""
     },
     "oauth2": {
         "access_denied": "Please login as mailbox owner to grant access via OAuth2.",
@@ -774,10 +933,33 @@
         "table_size_show_n": "%s개 항목 보기",
         "text_from_html_content": "내용 (converted html)",
         "text_plain_content": "내용 (text/plain)",
-        "toggle_all": "선택 반전"
+        "toggle_all": "선택 반전",
+        "rejected": "",
+        "quick_info_link": "",
+        "rewrite_subject": "",
+        "confirm": "",
+        "deliver_inbox": "",
+        "info": "",
+        "junk_folder": "",
+        "settings_info": "",
+        "type": "",
+        "spam": ""
     },
     "queue": {
-        "queue_manager": "대기열 관리자"
+        "queue_manager": "대기열 관리자",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "show_message": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": "",
+        "unban": "",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": ""
     },
     "start": {
         "help": "Show/Hide help panel",
@@ -858,7 +1040,18 @@
         "upload_success": "File uploaded successfully",
         "verified_totp_login": "Verified TOTP login",
         "verified_webauthn_login": "Verified WebAuthn login",
-        "verified_yotp_login": "Verified Yubico OTP login"
+        "verified_yotp_login": "Verified Yubico OTP login",
+        "f2b_banlist_refreshed": "",
+        "ip_check_opt_in_modified": "",
+        "domain_footer_modified": "",
+        "domain_add_dkim_available": "",
+        "template_added": "",
+        "template_modified": "",
+        "cors_headers_edited": "",
+        "template_removed": "",
+        "nginx_reloaded": "",
+        "password_policy_saved": "",
+        "verified_fido2_login": ""
     },
     "tfa": {
         "api_register": "%s uses the Yubico Cloud API. Please get an API key for your key <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">here</a>",
@@ -882,7 +1075,11 @@
         "webauthn": "WebAuthn authentication",
         "waiting_usb_auth": "<i>Waiting for USB device...</i><br><br>Please tap the button on your WebAuthn USB device now.",
         "waiting_usb_register": "<i>Waiting for USB device...</i><br><br>Please enter your password above and confirm your WebAuthn registration by tapping the button on your WebAuthn USB device.",
-        "yubi_otp": "Yubico OTP authentication"
+        "yubi_otp": "Yubico OTP authentication",
+        "authenticators": "",
+        "tfa_token_invalid": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": ""
     },
     "user": {
         "action": "조치",
@@ -1006,7 +1203,47 @@
         "waiting": "대기중",
         "week": "주",
         "weekly": "매주",
-        "weeks": "주"
+        "weeks": "주",
+        "mailbox": "",
+        "q_all": "",
+        "q_reject": "",
+        "recent_successful_connections": "",
+        "open_logs": "",
+        "syncjob_check_log": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "open_webmail_sso": "",
+        "value": "",
+        "q_add_header": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "apple_connection_profile_with_app_password": "",
+        "attribute": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "created_on": "",
+        "direct_protocol_access": "",
+        "fido2_webauthn": "",
+        "last_pw_change": "",
+        "last_ui_login": "",
+        "login_history": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "month": "",
+        "pushover_sound": "",
+        "quarantine_category": "",
+        "quarantine_category_info": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "with_app_password": "",
+        "years": "",
+        "syncjob_last_run_result": "",
+        "empty": "",
+        "allowed_protocols": "",
+        "from": "",
+        "months": "",
+        "year": ""
     },
     "warning": {
         "cannot_delete_self": "Cannot delete logged in user",
@@ -1018,6 +1255,55 @@
         "no_active_admin": "Cannot deactivate last active admin",
         "quota_exceeded_scope": "Domain quota exceeded: Only unlimited mailboxes can be created in this domain scope.",
         "session_token": "Form token invalid: Token mismatch",
-        "session_ua": "Form token invalid: User-Agent validation error"
+        "session_ua": "Form token invalid: User-Agent validation error",
+        "is_not_primary_alias": ""
+    },
+    "datatables": {
+        "infoPostFix": "",
+        "decimal": "",
+        "collapse_all": "",
+        "emptyTable": "",
+        "loadingRecords": "",
+        "processing": "",
+        "zeroRecords": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "thousands": "",
+        "search": "",
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "expand_all": "",
+        "lengthMenu": "",
+        "paginate": {
+            "first": "",
+            "last": "",
+            "next": "",
+            "previous": ""
+        }
+    },
+    "fido2": {
+        "fido2_validation_failed": "",
+        "fn": "",
+        "known_ids": "",
+        "none": "",
+        "register_status": "",
+        "rename": "",
+        "set_fido2": "",
+        "set_fido2_touchid": "",
+        "set_fn": "",
+        "start_fido2_validation": "",
+        "confirm": "",
+        "fido2_auth": "",
+        "fido2_success": ""
+    },
+    "ratelimit": {
+        "disabled": "",
+        "second": "",
+        "minute": "",
+        "hour": "",
+        "day": ""
     }
 }

+ 964 - 9
data/web/lang/lang.lt-lt.json

@@ -27,7 +27,8 @@
         "mailbox_relayhost": "Pakeisti siuntimo serverį pašto dėžutei",
         "prohibited": "Draudžiama pagal ACL",
         "spam_alias": "Laikini slapyvardžiai",
-        "syncjobs": "Sinchronizuoti darbus"
+        "syncjobs": "Sinchronizuoti darbus",
+        "pushover": ""
     },
     "add": {
         "active": "Aktyvus",
@@ -72,7 +73,42 @@
         "domain_matches_hostname": "Domenas %s atitinka serverio vardą",
         "exclude": "Išskirti objektus (regex)",
         "gal": "Visuotinis adresų sąrašas",
-        "gal_info": "GAL (Global Address List) apima visus domeno objektus ir jų negali redaguoti joks vartotojas. SOGo trūksta laisvosios/užimtosios informacijos, jei tai išjungta! <b>Perkraukite SOGo, kad pritaikytumėte pakeitimus.</b>"
+        "gal_info": "GAL (Global Address List) apima visus domeno objektus ir jų negali redaguoti joks vartotojas. SOGo trūksta laisvosios/užimtosios informacijos, jei tai išjungta! <b>Perkraukite SOGo, kad pritaikytumėte pakeitimus.</b>",
+        "comment_info": "",
+        "goto_ham": "",
+        "hostname": "",
+        "kind": "",
+        "mailbox_quota_m": "",
+        "mailbox_username": "",
+        "max_aliases": "",
+        "max_mailboxes": "",
+        "mins_interval": "",
+        "syncjob_hint": "",
+        "tags": "",
+        "target_address": "",
+        "target_address_info": "",
+        "target_domain": "",
+        "timeout1": "",
+        "timeout2": "",
+        "username": "",
+        "validate": "",
+        "validation_success": "",
+        "multiple_bookings": "",
+        "nexthop": "",
+        "port": "",
+        "post_domain_add": "",
+        "private_comment": "",
+        "public_comment": "",
+        "quota_mb": "",
+        "relay_all": "",
+        "relay_all_info": "",
+        "relay_domain": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "relayhost_wrapped_tls_info": "",
+        "skipcrossduplicates": "",
+        "subscribeall": "",
+        "syncjob": ""
     },
     "admin": {
         "access": "Prieiga",
@@ -175,7 +211,147 @@
         "f2b_blacklist": "Tinklai juodajame saraše",
         "loading": "Prašau palaukite...",
         "password_policy_lowerupper": "Privalo turėti mažuosius ir didžiuosius ženklus/raides",
-        "relay_from": "„Nuo:“ adresas"
+        "relay_from": "„Nuo:“ adresas",
+        "activate_api": "",
+        "api_read_write": "",
+        "api_skip_ip_check": "",
+        "credentials_transport_warning": "",
+        "customize": "",
+        "destination": "",
+        "dkim_add_key": "",
+        "dkim_domains_selector": "",
+        "dkim_domains_wo_keys": "",
+        "dkim_from_title": "",
+        "dkim_key_missing": "",
+        "dkim_key_unused": "",
+        "dkim_to_title": "",
+        "forwarding_hosts": "",
+        "guid": "",
+        "guid_and_license": "",
+        "logo_info": "",
+        "lookup_mx": "",
+        "main_name": "",
+        "merged_vars_hint": "",
+        "no_active_bans": "",
+        "no_new_rows": "",
+        "oauth2_client_secret": "",
+        "oauth2_redirect_uri": "",
+        "oauth2_revoke_tokens": "",
+        "password_policy": "",
+        "quarantine_bcc": "",
+        "queue_unban": "",
+        "r_info": "",
+        "rate_name": "",
+        "recipients": "",
+        "regex_maps": "",
+        "relayhosts": "",
+        "remove_row": "",
+        "reset_default": "",
+        "rspamd_global_filters_regex": "",
+        "rspamd_settings_map": "",
+        "service": "",
+        "service_id": "",
+        "subject": "",
+        "success": "",
+        "sys_mails": "",
+        "title": "",
+        "title_name": "",
+        "transport_dest_format": "",
+        "transport_maps": "",
+        "ui_texts": "",
+        "unban_pending": "",
+        "unchanged_if_empty": "",
+        "validate_license_now": "",
+        "activate_send": "",
+        "active_rspamd_settings_map": "",
+        "add_forwarding_host": "",
+        "add_relayhost": "",
+        "add_relayhost_hint": "",
+        "add_row": "",
+        "add_transport": "",
+        "add_transports_hint": "",
+        "additional_rows": "",
+        "admin_domains": "",
+        "advanced_settings": "",
+        "allowed_methods": "",
+        "allowed_origins": "",
+        "api_allow_from": "",
+        "api_info": "",
+        "api_read_only": "",
+        "app_links": "",
+        "app_name": "",
+        "apps_name": "",
+        "arrival_time": "",
+        "authed_user": "",
+        "ays": "",
+        "ban_list_info": "",
+        "change_logo": "",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "configuration": "",
+        "excludes": "",
+        "f2b_ban_time": "",
+        "f2b_ban_time_increment": "",
+        "f2b_list_info": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "f2b_max_attempts": "",
+        "f2b_max_ban_time": "",
+        "f2b_netban_ipv4": "",
+        "f2b_netban_ipv6": "",
+        "f2b_regex_info": "",
+        "f2b_retry_window": "",
+        "forwarding_hosts_add_hint": "",
+        "forwarding_hosts_hint": "",
+        "hash_remove_info": "",
+        "help_text": "",
+        "host": "",
+        "in_use_by": "",
+        "include_exclude": "",
+        "include_exclude_info": "",
+        "includes": "",
+        "ip_check": "",
+        "ip_check_disabled": "",
+        "ip_check_opt_in": "",
+        "is_mx_based": "",
+        "last_applied": "",
+        "license_info": "",
+        "link": "",
+        "oauth2_info": "",
+        "priority": "",
+        "quarantine_exclude_domains": "",
+        "quarantine_max_age": "",
+        "quarantine_max_score": "",
+        "quarantine_max_size": "",
+        "quarantine_notification_html": "",
+        "quarantine_notification_subject": "",
+        "quarantine_redirect": "",
+        "quarantine_release_format": "",
+        "quarantine_retention_size": "",
+        "quota_notification_html": "",
+        "quota_notification_sender": "",
+        "quota_notification_subject": "",
+        "quota_notifications_info": "",
+        "quota_notifications_vars": "",
+        "relayhosts_hint": "",
+        "reset_limit": "",
+        "routing": "",
+        "rsetting_content": "",
+        "rsetting_no_selection": "",
+        "rsetting_none": "",
+        "rsettings_insert_preset": "",
+        "rsettings_preset_1": "",
+        "rsettings_preset_2": "",
+        "rsettings_preset_3": "",
+        "rsettings_preset_4": "",
+        "rspamd_com_settings": "",
+        "rspamd_global_filters": "",
+        "rspamd_global_filters_info": "",
+        "transport_test_rcpt_info": "",
+        "transports_hint": "",
+        "ui_footer": "",
+        "ui_header_announcement_active": "",
+        "ui_header_announcement_help": ""
     },
     "danger": {
         "demo_mode_enabled": "Demo Režimas įjungtas",
@@ -194,12 +370,250 @@
         "mailbox_quota_left_exceeded": "Per mažai vietos diske (liko %d MiB)",
         "comment_too_long": "Komentaeas per ilgas, maksimalus leistinas simbolių skaičius yra 160",
         "nginx_reload_failed": "Nginx perkrovimas nepavyko: %s",
-        "invalid_filter_type": "Netinkamas filtro tipas"
+        "invalid_filter_type": "Netinkamas filtro tipas",
+        "access_denied": "",
+        "alias_domain_invalid": "",
+        "alias_empty": "",
+        "alias_goto_identical": "",
+        "alias_invalid": "",
+        "aliasd_targetd_identical": "",
+        "aliases_in_use": "",
+        "app_name_empty": "",
+        "global_filter_write_error": "",
+        "global_map_invalid": "",
+        "global_map_write_error": "",
+        "no_user_defined": "",
+        "app_passwd_id_invalid": "",
+        "bcc_empty": "",
+        "bcc_exists": "",
+        "bcc_must_be_email": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "defquota_empty": "",
+        "dkim_domain_or_sel_exists": "",
+        "dkim_domain_or_sel_invalid": "",
+        "domain_cannot_match_hostname": "",
+        "domain_not_empty": "",
+        "extended_sender_acl_denied": "",
+        "extra_acl_invalid": "",
+        "extra_acl_invalid_domain": "",
+        "fido2_verification_failed": "",
+        "from_invalid": "",
+        "goto_empty": "",
+        "goto_invalid": "",
+        "ham_learn_error": "",
+        "imagick_exception": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "img_tmp_missing": "",
+        "invalid_bcc_map_type": "",
+        "invalid_destination": "",
+        "invalid_host": "",
+        "invalid_nexthop": "",
+        "invalid_nexthop_authenticated": "",
+        "invalid_recipient_map_new": "",
+        "invalid_recipient_map_old": "",
+        "ip_list_empty": "",
+        "is_alias": "",
+        "is_alias_or_mailbox": "",
+        "is_spam_alias": "",
+        "last_key": "",
+        "mailbox_invalid": "",
+        "mailbox_quota_exceeded": "",
+        "mailbox_quota_exceeds_domain_quota": "",
+        "mailboxes_in_use": "",
+        "malformed_username": "",
+        "map_content_empty": "",
+        "max_alias_exceeded": "",
+        "max_mailbox_exceeded": "",
+        "max_quota_in_use": "",
+        "maxquota_empty": "",
+        "network_host_invalid": "",
+        "next_hop_interferes": "",
+        "next_hop_interferes_any": "",
+        "object_exists": "",
+        "object_is_not_numeric": "",
+        "password_complexity": "",
+        "password_empty": "",
+        "password_mismatch": "",
+        "policy_list_from_exists": "",
+        "policy_list_from_invalid": "",
+        "private_key_error": "",
+        "pushover_credentials_missing": "",
+        "pushover_key": "",
+        "pushover_token": "",
+        "quota_not_0_not_numeric": "",
+        "recipient_map_entry_exists": "",
+        "redis_error": "",
+        "relayhost_invalid": "",
+        "release_send_failed": "",
+        "reset_f2b_regex": "",
+        "resource_invalid": "",
+        "rl_timeframe": "",
+        "rspamd_ui_pw_length": "",
+        "script_empty": "",
+        "sender_acl_invalid": "",
+        "set_acl_failed": "",
+        "settings_map_invalid": "",
+        "sieve_error": "",
+        "spam_learn_error": "",
+        "subject_empty": "",
+        "target_domain_invalid": "",
+        "targetd_not_found": "",
+        "targetd_relay_domain": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "template_name_invalid": "",
+        "temp_error": "",
+        "text_empty": "",
+        "tfa_token_invalid": "",
+        "tls_policy_map_dest_invalid": "",
+        "tls_policy_map_entry_exists": "",
+        "tls_policy_map_parameter_invalid": "",
+        "totp_verification_failed": "",
+        "transport_dest_exists": "",
+        "webauthn_verification_failed": "",
+        "webauthn_authenticator_failed": "",
+        "webauthn_publickey_failed": "",
+        "webauthn_username_failed": "",
+        "unknown": "",
+        "unknown_tfa_method": "",
+        "unlimited_quota_acl": "",
+        "username_invalid": "",
+        "validity_missing": "",
+        "value_missing": "",
+        "yotp_verification_failed": ""
     },
     "edit": {
         "validate_save": "Patikrinti ir išsaugoti",
         "unchanged_if_empty": "Jei nepakeista, palikite tuščią",
-        "username": "Naudotojo vardas"
+        "username": "Naudotojo vardas",
+        "kind": "",
+        "nexthop": "",
+        "ratelimit": "",
+        "remove": "",
+        "acl": "",
+        "active": "",
+        "admin": "",
+        "advanced_settings": "",
+        "alias": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "app_name": "",
+        "app_passwd": "",
+        "app_passwd_protocols": "",
+        "automap": "",
+        "backup_mx_options": "",
+        "bcc_dest_format": "",
+        "client_id": "",
+        "client_secret": "",
+        "comment_info": "",
+        "created_on": "",
+        "custom_attributes": "",
+        "delete1": "",
+        "delete2": "",
+        "delete2duplicates": "",
+        "delete_ays": "",
+        "description": "",
+        "disable_login": "",
+        "domain": "",
+        "domain_admin": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_info": "",
+        "domain_footer_info_vars": {
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": "",
+            "custom": ""
+        },
+        "domain_footer_plain": "",
+        "domain_footer_skip_replies": "",
+        "domain_quota": "",
+        "domains": "",
+        "dont_check_sender_acl": "",
+        "edit_alias_domain": "",
+        "encryption": "",
+        "exclude": "",
+        "extended_sender_acl": "",
+        "extended_sender_acl_info": "",
+        "force_pw_update": "",
+        "force_pw_update_info": "",
+        "footer_exclude": "",
+        "full_name": "",
+        "gal": "",
+        "gal_info": "",
+        "generate": "",
+        "grant_types": "",
+        "hostname": "",
+        "inactive": "",
+        "last_modified": "",
+        "lookup_mx": "",
+        "mailbox": "",
+        "mailbox_quota_def": "",
+        "mailbox_relayhost_info": "",
+        "max_aliases": "",
+        "max_mailboxes": "",
+        "max_quota": "",
+        "maxage": "",
+        "maxbytespersecond": "",
+        "mbox_rl_info": "",
+        "mins_interval": "",
+        "multiple_bookings": "",
+        "none_inherit": "",
+        "password": "",
+        "password_repeat": "",
+        "previous": "",
+        "private_comment": "",
+        "public_comment": "",
+        "pushover": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "quota_mb": "",
+        "quota_warning_bcc": "",
+        "quota_warning_bcc_info": "",
+        "redirect_uri": "",
+        "relay_all": "",
+        "relay_all_info": "",
+        "relay_domain": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "relayhost": "",
+        "resource": "",
+        "save": "",
+        "scope": "",
+        "sender_acl": "",
+        "sender_acl_disabled": "",
+        "sender_acl_info": "",
+        "sieve_desc": "",
+        "sieve_type": "",
+        "skipcrossduplicates": "",
+        "sogo_access": "",
+        "sogo_access_info": "",
+        "sogo_visible": "",
+        "sogo_visible_info": "",
+        "spam_alias": "",
+        "spam_filter": "",
+        "spam_policy": "",
+        "spam_score": "",
+        "subfolder2": "",
+        "syncjob": "",
+        "target_address": "",
+        "target_domain": "",
+        "timeout1": "",
+        "timeout2": "",
+        "title": ""
     },
     "fido2": {
         "confirm": "Patvirtinti",
@@ -254,7 +668,8 @@
         "other_logins": "Prisijungimas raktu",
         "password": "Slaptažodis",
         "username": "Naudotojo vardas",
-        "mobileconfig_info": "Prašome prisijungti kaip pašto dėžutės vartotojui, kad galėtumėte atsisiųsti pageidaujamą „Apple“ ryšio profilį."
+        "mobileconfig_info": "Prašome prisijungti kaip pašto dėžutės vartotojui, kad galėtumėte atsisiųsti pageidaujamą „Apple“ ryšio profilį.",
+        "delayed": ""
     },
     "mailbox": {
         "action": "Veiksmas",
@@ -333,14 +748,156 @@
         "max_mailboxes": "Maks. galimų pašto dėžučių",
         "max_quota": "Maks. kvota kiekvienai pašto dėžutei",
         "mins_interval": "Intervalas (min)",
-        "msg_num": "Žinutė #"
+        "msg_num": "Žinutė #",
+        "bcc_info": "",
+        "bcc_rcpt_map": "",
+        "bcc_sender_map": "",
+        "bcc_to_rcpt": "",
+        "bcc_to_sender": "",
+        "created_on": "",
+        "dkim_domains_selector": "",
+        "empty": "",
+        "excludes": "",
+        "filter_table": "",
+        "force_pw_update": "",
+        "insert_preset": "",
+        "kind": "",
+        "last_mail_login": "",
+        "last_modified": "",
+        "last_pw_change": "",
+        "last_run": "",
+        "no_record_single": "",
+        "open_logs": "",
+        "status": "",
+        "yes": "",
+        "multiple_bookings": "",
+        "never": "",
+        "no": "",
+        "no_record": "",
+        "owner": "",
+        "private_comment": "",
+        "public_comment": "",
+        "q_add_header": "",
+        "q_all": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_notification": "",
+        "quick_actions": "",
+        "recipient": "",
+        "recipient_map": "",
+        "recipient_map_info": "",
+        "recipient_map_new": "",
+        "recipient_map_new_info": "",
+        "recipient_map_old": "",
+        "recipient_map_old_info": "",
+        "recipient_maps": "",
+        "relay_all": "",
+        "relay_unknown": "",
+        "remove": "",
+        "resources": "",
+        "running": "",
+        "sender": "",
+        "set_postfilter": "",
+        "set_prefilter": "",
+        "sieve_info": "",
+        "sieve_preset_1": "",
+        "sieve_preset_2": "",
+        "sieve_preset_3": "",
+        "sieve_preset_4": "",
+        "sieve_preset_5": "",
+        "sieve_preset_6": "",
+        "sieve_preset_7": "",
+        "sieve_preset_8": "",
+        "sieve_preset_header": "",
+        "sogo_visible": "",
+        "sogo_visible_n": "",
+        "sogo_visible_y": "",
+        "spam_aliases": "",
+        "stats": "",
+        "sync_jobs": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "table_size": "",
+        "table_size_show_n": "",
+        "target_address": "",
+        "target_domain": "",
+        "templates": "",
+        "template": "",
+        "tls_enforce_in": "",
+        "tls_enforce_out": "",
+        "tls_map_dest": "",
+        "tls_map_dest_info": "",
+        "tls_map_parameters": "",
+        "tls_map_parameters_info": "",
+        "tls_map_policy": "",
+        "tls_policy_maps": "",
+        "tls_policy_maps_enforced_tls": "",
+        "tls_policy_maps_info": "",
+        "tls_policy_maps_long": "",
+        "toggle_all": "",
+        "username": "",
+        "waiting": "",
+        "weekly": ""
     },
     "quarantine": {
         "atts": "Priedaj",
         "check_hash": "Ieškoti failo Hash'o @ VT",
         "confirm": "Patvirtinti",
         "confirm_delete": "Patvirtinti šio elemento trynimą",
-        "danger": "Pavojus"
+        "danger": "Pavojus",
+        "text_plain_content": "",
+        "action": "",
+        "deliver_inbox": "",
+        "disabled_by_config": "",
+        "download_eml": "",
+        "empty": "",
+        "high_danger": "",
+        "info": "",
+        "junk_folder": "",
+        "learn_spam_delete": "",
+        "low_danger": "",
+        "medium_danger": "",
+        "neutral_danger": "",
+        "notified": "",
+        "qhandler_success": "",
+        "qid": "",
+        "qinfo": "",
+        "qitem": "",
+        "quarantine": "",
+        "quick_actions": "",
+        "quick_delete_link": "",
+        "quick_info_link": "",
+        "quick_release_link": "",
+        "rcpt": "",
+        "received": "",
+        "recipients": "",
+        "refresh": "",
+        "rejected": "",
+        "release": "",
+        "release_body": "",
+        "release_subject": "",
+        "remove": "",
+        "rewrite_subject": "",
+        "rspamd_result": "",
+        "sender": "",
+        "sender_header": "",
+        "settings_info": "",
+        "show_item": "",
+        "spam": "",
+        "spam_score": "",
+        "subj": "",
+        "table_size": "",
+        "table_size_show_n": "",
+        "text_from_html_content": "",
+        "toggle_all": "",
+        "type": ""
     },
     "success": {
         "domain_admin_added": "Pridėtas domeno administractorius %s",
@@ -349,6 +906,404 @@
         "domain_removed": "Domenas %s ištrintas",
         "dovecot_restart_success": "„Doveccot“ perkrautas",
         "domain_added": "Pridėtas domenas %s",
-        "domain_admin_modified": "Pakeitimai domeno adminustratoriui %s išsaugoti"
+        "domain_admin_modified": "Pakeitimai domeno adminustratoriui %s išsaugoti",
+        "bcc_saved": "",
+        "cors_headers_edited": "",
+        "db_init_complete": "",
+        "delete_filter": "",
+        "delete_filters": "",
+        "recipient_map_entry_deleted": "",
+        "recipient_map_entry_saved": "",
+        "relayhost_added": "",
+        "relayhost_removed": "",
+        "reset_main_logo": "",
+        "acl_saved": "",
+        "admin_added": "",
+        "admin_api_modified": "",
+        "admin_modified": "",
+        "admin_removed": "",
+        "alias_added": "",
+        "alias_domain_removed": "",
+        "alias_modified": "",
+        "alias_removed": "",
+        "aliasd_added": "",
+        "aliasd_modified": "",
+        "app_links": "",
+        "app_passwd_added": "",
+        "app_passwd_removed": "",
+        "bcc_deleted": "",
+        "bcc_edited": "",
+        "deleted_syncjob": "",
+        "deleted_syncjobs": "",
+        "dkim_added": "",
+        "domain_add_dkim_available": "",
+        "dkim_duplicated": "",
+        "dkim_removed": "",
+        "domain_footer_modified": "",
+        "eas_reset": "",
+        "f2b_banlist_refreshed": "",
+        "f2b_modified": "",
+        "forwarding_host_added": "",
+        "forwarding_host_removed": "",
+        "global_filter_written": "",
+        "hash_deleted": "",
+        "ip_check_opt_in_modified": "",
+        "item_deleted": "",
+        "item_released": "",
+        "items_deleted": "",
+        "items_released": "",
+        "learned_ham": "",
+        "license_modified": "",
+        "logged_in_as": "",
+        "mailbox_added": "",
+        "mailbox_modified": "",
+        "mailbox_removed": "",
+        "nginx_reloaded": "",
+        "object_modified": "",
+        "password_policy_saved": "",
+        "pushover_settings_edited": "",
+        "qlearn_spam": "",
+        "queue_command_success": "",
+        "resource_added": "",
+        "resource_modified": "",
+        "resource_removed": "",
+        "rl_saved": "",
+        "rspamd_ui_pw_set": "",
+        "saved_settings": "",
+        "settings_map_added": "",
+        "settings_map_removed": "",
+        "sogo_profile_reset": "",
+        "template_added": "",
+        "template_modified": "",
+        "template_removed": "",
+        "tls_policy_map_entry_deleted": "",
+        "tls_policy_map_entry_saved": "",
+        "ui_texts": "",
+        "upload_success": "",
+        "verified_fido2_login": "",
+        "verified_totp_login": "",
+        "verified_webauthn_login": "",
+        "verified_yotp_login": ""
+    },
+    "oauth2": {
+        "access_denied": "",
+        "authorize_app": "",
+        "deny": "",
+        "permit": "",
+        "profile": "",
+        "profile_desc": "",
+        "scope_ask_permission": ""
+    },
+    "ratelimit": {
+        "minute": "",
+        "disabled": "",
+        "second": "",
+        "hour": "",
+        "day": ""
+    },
+    "user": {
+        "user_settings": "",
+        "action": "",
+        "active": "",
+        "active_sieve": "",
+        "advanced_settings": "",
+        "alias": "",
+        "alias_create_random": "",
+        "alias_extend_all": "",
+        "alias_full_date": "",
+        "alias_remove_all": "",
+        "alias_select_validity": "",
+        "alias_time_left": "",
+        "alias_valid_until": "",
+        "aliases_also_send_as": "",
+        "aliases_send_as_all": "",
+        "app_hint": "",
+        "allowed_protocols": "",
+        "app_name": "",
+        "app_passwds": "",
+        "apple_connection_profile": "",
+        "apple_connection_profile_complete": "",
+        "apple_connection_profile_mailonly": "",
+        "apple_connection_profile_with_app_password": "",
+        "attribute": "",
+        "change_password": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "client_configuration": "",
+        "create_app_passwd": "",
+        "create_syncjob": "",
+        "created_on": "",
+        "daily": "",
+        "day": "",
+        "delete_ays": "",
+        "direct_aliases": "",
+        "direct_aliases_desc": "",
+        "direct_protocol_access": "",
+        "eas_reset": "",
+        "eas_reset_help": "",
+        "eas_reset_now": "",
+        "edit": "",
+        "email": "",
+        "email_and_dav": "",
+        "empty": "",
+        "encryption": "",
+        "excludes": "",
+        "expire_in": "",
+        "fido2_webauthn": "",
+        "force_pw_update": "",
+        "from": "",
+        "generate": "",
+        "hour": "",
+        "hourly": "",
+        "hours": "",
+        "in_use": "",
+        "interval": "",
+        "is_catch_all": "",
+        "last_mail_login": "",
+        "last_pw_change": "",
+        "last_run": "",
+        "last_ui_login": "",
+        "loading": "",
+        "login_history": "",
+        "mailbox": "",
+        "mailbox_details": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "messages": "",
+        "month": "",
+        "months": "",
+        "never": "",
+        "new_password": "",
+        "new_password_repeat": "",
+        "no_active_filter": "",
+        "no_last_login": "",
+        "no_record": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "password": "",
+        "password_now": "",
+        "password_repeat": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "q_add_header": "",
+        "q_all": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_category_info": "",
+        "quarantine_notification": "",
+        "quarantine_notification_info": "",
+        "recent_successful_connections": "",
+        "remove": "",
+        "running": "",
+        "save": "",
+        "save_changes": "",
+        "sender_acl_disabled": "",
+        "shared_aliases": "",
+        "shared_aliases_desc": "",
+        "show_sieve_filters": "",
+        "sogo_profile_reset": "",
+        "sogo_profile_reset_help": "",
+        "sogo_profile_reset_now": "",
+        "spam_aliases": "",
+        "spam_score_reset": "",
+        "spamfilter": "",
+        "spamfilter_behavior": "",
+        "spamfilter_bl": "",
+        "spamfilter_bl_desc": "",
+        "spamfilter_default_score": "",
+        "spamfilter_green": "",
+        "spamfilter_hint": "",
+        "spamfilter_red": "",
+        "spamfilter_table_action": "",
+        "spamfilter_table_add": "",
+        "spamfilter_table_domain_policy": "",
+        "spamfilter_table_empty": "",
+        "spamfilter_table_remove": "",
+        "spamfilter_table_rule": "",
+        "spamfilter_wl": "",
+        "spamfilter_wl_desc": "",
+        "spamfilter_yellow": "",
+        "status": "",
+        "sync_jobs": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "tag_handling": "",
+        "tag_help_example": "",
+        "tag_help_explain": "",
+        "tag_in_none": "",
+        "tag_in_subfolder": "",
+        "tag_in_subject": "",
+        "text": "",
+        "title": "",
+        "tls_enforce_in": "",
+        "tls_enforce_out": "",
+        "tls_policy": "",
+        "tls_policy_warning": "",
+        "username": "",
+        "value": "",
+        "verify": "",
+        "waiting": "",
+        "week": "",
+        "weekly": "",
+        "weeks": "",
+        "with_app_password": "",
+        "year": "",
+        "years": ""
+    },
+    "datatables": {
+        "collapse_all": "",
+        "decimal": "",
+        "emptyTable": "",
+        "expand_all": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "infoPostFix": "",
+        "thousands": "",
+        "lengthMenu": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "paginate": {
+            "first": "",
+            "last": "",
+            "next": "",
+            "previous": ""
+        },
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        }
+    },
+    "debug": {
+        "architecture": "",
+        "chart_this_server": "",
+        "containers_info": "",
+        "container_running": "",
+        "container_disabled": "",
+        "container_stopped": "",
+        "cores": "",
+        "current_time": "",
+        "disk_usage": "",
+        "docs": "",
+        "error_show_ip": "",
+        "external_logs": "",
+        "history_all_servers": "",
+        "in_memory_logs": "",
+        "jvm_memory_solr": "",
+        "last_modified": "",
+        "log_info": "",
+        "login_time": "",
+        "logs": "",
+        "memory": "",
+        "online_users": "",
+        "restart_container": "",
+        "service": "",
+        "show_ip": "",
+        "size": "",
+        "solr_dead": "",
+        "solr_status": "",
+        "started_at": "",
+        "started_on": "",
+        "static_logs": "",
+        "success": "",
+        "system_containers": "",
+        "timezone": "",
+        "uptime": "",
+        "update_available": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "username": "",
+        "wip": ""
+    },
+    "diagnostics": {
+        "cname_from_a": "",
+        "dns_records": "",
+        "dns_records_24hours": "",
+        "dns_records_data": "",
+        "dns_records_docs": "",
+        "dns_records_name": "",
+        "dns_records_status": "",
+        "dns_records_type": "",
+        "optional": ""
+    },
+    "queue": {
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "queue_manager": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": ""
+    },
+    "start": {
+        "help": "",
+        "imap_smtp_server_auth_info": "",
+        "mailcow_apps_detail": "",
+        "mailcow_panel_detail": ""
+    },
+    "tfa": {
+        "authenticators": "",
+        "api_register": "",
+        "confirm": "",
+        "confirm_totp_token": "",
+        "delete_tfa": "",
+        "disable_tfa": "",
+        "enter_qr_code": "",
+        "error_code": "",
+        "init_webauthn": "",
+        "key_id": "",
+        "key_id_totp": "",
+        "none": "",
+        "reload_retry": "",
+        "scan_qr_code": "",
+        "select": "",
+        "set_tfa": "",
+        "start_webauthn_validation": "",
+        "tfa": "",
+        "tfa_token_invalid": "",
+        "totp": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": "",
+        "webauthn": "",
+        "waiting_usb_auth": "",
+        "waiting_usb_register": "",
+        "yubi_otp": ""
+    },
+    "warning": {
+        "cannot_delete_self": "",
+        "domain_added_sogo_failed": "",
+        "dovecot_restart_failed": "",
+        "fuzzy_learn_error": "",
+        "hash_not_found": "",
+        "ip_invalid": "",
+        "is_not_primary_alias": "",
+        "no_active_admin": "",
+        "quota_exceeded_scope": "",
+        "session_token": "",
+        "session_ua": ""
     }
 }

File diff ditekan karena terlalu besar
+ 698 - 73
data/web/lang/lang.lv-lv.json


+ 985 - 2
data/web/lang/lang.nb-no.json

@@ -158,7 +158,89 @@
         "username": "Brukernavn",
         "validate_license_now": "Validér GUID mot lisenstjener",
         "verify": "Validér",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "from": "",
+        "help_text": "",
+        "no": "",
+        "password_policy_lowerupper": "",
+        "password_policy_numbers": "",
+        "quarantine_max_size": "",
+        "quarantine_release_format": "",
+        "regen_api_key": "",
+        "forwarding_hosts_add_hint": "",
+        "forwarding_hosts_hint": "",
+        "generate": "",
+        "guid": "",
+        "guid_and_license": "",
+        "hash_remove_info": "",
+        "host": "",
+        "html": "",
+        "import": "",
+        "import_private_key": "",
+        "in_use_by": "",
+        "inactive": "",
+        "include_exclude": "",
+        "include_exclude_info": "",
+        "includes": "",
+        "ip_check": "",
+        "ip_check_disabled": "",
+        "ip_check_opt_in": "",
+        "is_mx_based": "",
+        "last_applied": "",
+        "license_info": "",
+        "link": "",
+        "loading": "",
+        "login_time": "",
+        "logo_info": "",
+        "lookup_mx": "",
+        "main_name": "",
+        "merged_vars_hint": "",
+        "message": "",
+        "message_size": "",
+        "nexthop": "",
+        "no_active_bans": "",
+        "no_new_rows": "",
+        "no_record": "",
+        "oauth2_apps": "",
+        "oauth2_add_client": "",
+        "oauth2_client_id": "",
+        "oauth2_client_secret": "",
+        "oauth2_info": "",
+        "oauth2_redirect_uri": "",
+        "oauth2_renew_secret": "",
+        "oauth2_revoke_tokens": "",
+        "optional": "",
+        "options": "",
+        "password": "",
+        "password_length": "",
+        "password_policy": "",
+        "password_policy_chars": "",
+        "password_policy_length": "",
+        "password_policy_special_chars": "",
+        "password_repeat": "",
+        "priority": "",
+        "private_key": "",
+        "quarantine": "",
+        "quarantine_bcc": "",
+        "quarantine_exclude_domains": "",
+        "quarantine_max_age": "",
+        "quarantine_max_score": "",
+        "quarantine_notification_html": "",
+        "quarantine_notification_sender": "",
+        "quarantine_notification_subject": "",
+        "quarantine_redirect": "",
+        "quarantine_release_format_att": "",
+        "quarantine_release_format_raw": "",
+        "quarantine_retention_size": "",
+        "quota_notification_html": "",
+        "quota_notification_sender": "",
+        "quota_notification_subject": "",
+        "quota_notifications": "",
+        "quota_notifications_info": "",
+        "quota_notifications_vars": "",
+        "rate_name": "",
+        "recipients": "",
+        "refresh": ""
     },
     "acl": {
         "ratelimit": "Nivågrense",
@@ -321,6 +403,907 @@
         "invalid_mime_type": "Ugyldig mime-type",
         "invalid_nexthop": "\"Next hop\"-format er ugyldig",
         "img_dimensions_exceeded": "Bildet overskriver maksimal bildestørrelse",
-        "img_size_exceeded": "Bildet overskrider maksimal filstørrelse"
+        "img_size_exceeded": "Bildet overskrider maksimal filstørrelse",
+        "mailboxes_in_use": "",
+        "malformed_username": "",
+        "map_content_empty": "",
+        "max_alias_exceeded": "",
+        "max_mailbox_exceeded": "",
+        "max_quota_in_use": "",
+        "maxquota_empty": "",
+        "transport_dest_exists": "",
+        "invalid_nexthop_authenticated": "",
+        "invalid_recipient_map_new": "",
+        "invalid_recipient_map_old": "",
+        "ip_list_empty": "",
+        "is_alias": "",
+        "is_alias_or_mailbox": "",
+        "is_spam_alias": "",
+        "last_key": "",
+        "login_failed": "",
+        "mailbox_defquota_exceeds_mailbox_maxquota": "",
+        "mailbox_invalid": "",
+        "mailbox_quota_exceeded": "",
+        "mailbox_quota_exceeds_domain_quota": "",
+        "mailbox_quota_left_exceeded": "",
+        "mysql_error": "",
+        "network_host_invalid": "",
+        "next_hop_interferes": "",
+        "next_hop_interferes_any": "",
+        "nginx_reload_failed": "",
+        "no_user_defined": "",
+        "object_exists": "",
+        "object_is_not_numeric": "",
+        "password_complexity": "",
+        "password_empty": "",
+        "password_mismatch": "",
+        "policy_list_from_exists": "",
+        "policy_list_from_invalid": "",
+        "private_key_error": "",
+        "pushover_credentials_missing": "",
+        "pushover_key": "",
+        "pushover_token": "",
+        "quota_not_0_not_numeric": "",
+        "recipient_map_entry_exists": "",
+        "redis_error": "",
+        "relayhost_invalid": "",
+        "release_send_failed": "",
+        "reset_f2b_regex": "",
+        "resource_invalid": "",
+        "rl_timeframe": "",
+        "rspamd_ui_pw_length": "",
+        "script_empty": "",
+        "sender_acl_invalid": "",
+        "set_acl_failed": "",
+        "settings_map_invalid": "",
+        "sieve_error": "",
+        "spam_learn_error": "",
+        "subject_empty": "",
+        "target_domain_invalid": "",
+        "targetd_not_found": "",
+        "targetd_relay_domain": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "template_name_invalid": "",
+        "temp_error": "",
+        "text_empty": "",
+        "tfa_token_invalid": "",
+        "tls_policy_map_dest_invalid": "",
+        "tls_policy_map_entry_exists": "",
+        "tls_policy_map_parameter_invalid": "",
+        "totp_verification_failed": "",
+        "webauthn_verification_failed": "",
+        "webauthn_authenticator_failed": "",
+        "webauthn_publickey_failed": "",
+        "webauthn_username_failed": "",
+        "unknown": "",
+        "unknown_tfa_method": "",
+        "unlimited_quota_acl": "",
+        "username_invalid": "",
+        "validity_missing": "",
+        "value_missing": "",
+        "yotp_verification_failed": ""
+    },
+    "quarantine": {
+        "qinfo": "",
+        "qitem": "",
+        "quarantine": "",
+        "quick_actions": "",
+        "quick_delete_link": "",
+        "quick_info_link": "",
+        "danger": "",
+        "medium_danger": "",
+        "neutral_danger": "",
+        "notified": "",
+        "qhandler_success": "",
+        "qid": "",
+        "settings_info": "",
+        "action": "",
+        "atts": "",
+        "check_hash": "",
+        "confirm": "",
+        "confirm_delete": "",
+        "deliver_inbox": "",
+        "disabled_by_config": "",
+        "download_eml": "",
+        "empty": "",
+        "high_danger": "",
+        "info": "",
+        "junk_folder": "",
+        "learn_spam_delete": "",
+        "low_danger": "",
+        "quick_release_link": "",
+        "rcpt": "",
+        "received": "",
+        "recipients": "",
+        "refresh": "",
+        "rejected": "",
+        "release": "",
+        "release_body": "",
+        "release_subject": "",
+        "remove": "",
+        "rewrite_subject": "",
+        "rspamd_result": "",
+        "sender": "",
+        "sender_header": "",
+        "show_item": "",
+        "spam": "",
+        "spam_score": "",
+        "subj": "",
+        "table_size": "",
+        "table_size_show_n": "",
+        "text_from_html_content": "",
+        "text_plain_content": "",
+        "toggle_all": "",
+        "type": ""
+    },
+    "start": {
+        "imap_smtp_server_auth_info": "",
+        "mailcow_apps_detail": "",
+        "help": "",
+        "mailcow_panel_detail": ""
+    },
+    "success": {
+        "domain_admin_added": "",
+        "admin_added": "",
+        "admin_api_modified": "",
+        "domain_admin_modified": "",
+        "domain_admin_removed": "",
+        "domain_footer_modified": "",
+        "domain_modified": "",
+        "domain_removed": "",
+        "dovecot_restart_success": "",
+        "eas_reset": "",
+        "f2b_banlist_refreshed": "",
+        "pushover_settings_edited": "",
+        "qlearn_spam": "",
+        "queue_command_success": "",
+        "recipient_map_entry_deleted": "",
+        "recipient_map_entry_saved": "",
+        "relayhost_added": "",
+        "relayhost_removed": "",
+        "reset_main_logo": "",
+        "resource_added": "",
+        "resource_modified": "",
+        "resource_removed": "",
+        "rl_saved": "",
+        "rspamd_ui_pw_set": "",
+        "saved_settings": "",
+        "settings_map_added": "",
+        "settings_map_removed": "",
+        "sogo_profile_reset": "",
+        "template_added": "",
+        "upload_success": "",
+        "verified_fido2_login": "",
+        "verified_totp_login": "",
+        "verified_webauthn_login": "",
+        "verified_yotp_login": "",
+        "acl_saved": "",
+        "admin_modified": "",
+        "admin_removed": "",
+        "alias_added": "",
+        "alias_domain_removed": "",
+        "alias_modified": "",
+        "alias_removed": "",
+        "aliasd_added": "",
+        "aliasd_modified": "",
+        "app_links": "",
+        "app_passwd_added": "",
+        "app_passwd_removed": "",
+        "bcc_deleted": "",
+        "bcc_edited": "",
+        "bcc_saved": "",
+        "cors_headers_edited": "",
+        "db_init_complete": "",
+        "delete_filter": "",
+        "delete_filters": "",
+        "deleted_syncjob": "",
+        "deleted_syncjobs": "",
+        "dkim_added": "",
+        "domain_add_dkim_available": "",
+        "dkim_duplicated": "",
+        "dkim_removed": "",
+        "domain_added": "",
+        "f2b_modified": "",
+        "forwarding_host_added": "",
+        "forwarding_host_removed": "",
+        "global_filter_written": "",
+        "hash_deleted": "",
+        "ip_check_opt_in_modified": "",
+        "item_deleted": "",
+        "item_released": "",
+        "items_deleted": "",
+        "items_released": "",
+        "learned_ham": "",
+        "license_modified": "",
+        "logged_in_as": "",
+        "mailbox_added": "",
+        "mailbox_modified": "",
+        "mailbox_removed": "",
+        "nginx_reloaded": "",
+        "object_modified": "",
+        "password_policy_saved": "",
+        "template_modified": "",
+        "template_removed": "",
+        "tls_policy_map_entry_deleted": "",
+        "tls_policy_map_entry_saved": "",
+        "ui_texts": ""
+    },
+    "edit": {
+        "description": "",
+        "disable_login": "",
+        "domain": "",
+        "sogo_visible_info": "",
+        "spam_alias": "",
+        "footer_exclude": "",
+        "gal_info": "",
+        "grant_types": "",
+        "hostname": "",
+        "inactive": "",
+        "kind": "",
+        "last_modified": "",
+        "lookup_mx": "",
+        "mailbox": "",
+        "mailbox_quota_def": "",
+        "mailbox_relayhost_info": "",
+        "max_quota": "",
+        "maxage": "",
+        "maxbytespersecond": "",
+        "domain_footer_skip_replies": "",
+        "encryption": "",
+        "exclude": "",
+        "extended_sender_acl": "",
+        "extended_sender_acl_info": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "quota_mb": "",
+        "quota_warning_bcc": "",
+        "ratelimit": "",
+        "domain_admin": "",
+        "domain_footer": "",
+        "private_comment": "",
+        "public_comment": "",
+        "skipcrossduplicates": "",
+        "sogo_access": "",
+        "sogo_access_info": "",
+        "sogo_visible": "",
+        "spam_score": "",
+        "subfolder2": "",
+        "spam_filter": "",
+        "spam_policy": "",
+        "syncjob": "",
+        "target_address": "",
+        "target_domain": "",
+        "timeout1": "",
+        "timeout2": "",
+        "title": "",
+        "unchanged_if_empty": "",
+        "username": "",
+        "validate_save": "",
+        "full_name": "",
+        "gal": "",
+        "client_id": "",
+        "max_aliases": "",
+        "mbox_rl_info": "",
+        "mins_interval": "",
+        "multiple_bookings": "",
+        "none_inherit": "",
+        "acl": "",
+        "active": "",
+        "admin": "",
+        "advanced_settings": "",
+        "alias": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "app_name": "",
+        "app_passwd": "",
+        "app_passwd_protocols": "",
+        "automap": "",
+        "backup_mx_options": "",
+        "bcc_dest_format": "",
+        "client_secret": "",
+        "comment_info": "",
+        "created_on": "",
+        "custom_attributes": "",
+        "delete1": "",
+        "delete2": "",
+        "delete2duplicates": "",
+        "delete_ays": "",
+        "domain_footer_html": "",
+        "domain_footer_info": "",
+        "domain_footer_info_vars": {
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": "",
+            "custom": ""
+        },
+        "domain_footer_plain": "",
+        "domain_quota": "",
+        "domains": "",
+        "dont_check_sender_acl": "",
+        "edit_alias_domain": "",
+        "force_pw_update": "",
+        "force_pw_update_info": "",
+        "generate": "",
+        "nexthop": "",
+        "password": "",
+        "password_repeat": "",
+        "previous": "",
+        "pushover": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "quota_warning_bcc_info": "",
+        "redirect_uri": "",
+        "relay_all": "",
+        "relay_all_info": "",
+        "relay_domain": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "relayhost": "",
+        "remove": "",
+        "resource": "",
+        "save": "",
+        "scope": "",
+        "sender_acl": "",
+        "sender_acl_disabled": "",
+        "sender_acl_info": "",
+        "sieve_desc": "",
+        "sieve_type": "",
+        "max_mailboxes": ""
+    },
+    "fido2": {
+        "none": "",
+        "register_status": "",
+        "rename": "",
+        "set_fido2": "",
+        "set_fido2_touchid": "",
+        "confirm": "",
+        "fido2_auth": "",
+        "fido2_success": "",
+        "fido2_validation_failed": "",
+        "fn": "",
+        "known_ids": "",
+        "set_fn": "",
+        "start_fido2_validation": ""
+    },
+    "mailbox": {
+        "bcc_sender_map": "",
+        "bcc_to_rcpt": "",
+        "bcc_to_sender": "",
+        "bcc_type": "",
+        "booking_null": "",
+        "booking_0_short": "",
+        "booking_custom": "",
+        "booking_custom_short": "",
+        "booking_ltnull": "",
+        "created_on": "",
+        "daily": "",
+        "deactivate": "",
+        "disable_x": "",
+        "domain": "",
+        "excludes": "",
+        "gal": "",
+        "goto_ham": "",
+        "goto_spam": "",
+        "hourly": "",
+        "in_use": "",
+        "mins_interval": "",
+        "msg_num": "",
+        "multiple_bookings": "",
+        "never": "",
+        "sieve_preset_8": "",
+        "sieve_preset_header": "",
+        "sogo_visible": "",
+        "sogo_visible_n": "",
+        "sogo_visible_y": "",
+        "spam_aliases": "",
+        "tls_policy_maps_long": "",
+        "add_domain": "",
+        "booking_lt0_short": "",
+        "catch_all": "",
+        "dkim_domains_selector": "",
+        "description": "",
+        "disable_login": "",
+        "dkim_key_length": "",
+        "domain_admins": "",
+        "domain_aliases": "",
+        "domain_quota": "",
+        "filter_table": "",
+        "filters": "",
+        "fname": "",
+        "force_pw_update": "",
+        "insert_preset": "",
+        "kind": "",
+        "last_mail_login": "",
+        "last_modified": "",
+        "last_pw_change": "",
+        "last_run": "",
+        "last_run_reset": "",
+        "mailbox": "",
+        "mailbox_defaults": "",
+        "mailbox_defaults_info": "",
+        "mailbox_defquota": "",
+        "mailbox_templates": "",
+        "max_aliases": "",
+        "max_mailboxes": "",
+        "remove": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "table_size": "",
+        "action": "",
+        "activate": "",
+        "active": "",
+        "add": "",
+        "add_alias": "",
+        "add_alias_expand": "",
+        "add_bcc_entry": "",
+        "add_domain_alias": "",
+        "add_domain_record_first": "",
+        "add_filter": "",
+        "add_mailbox": "",
+        "add_recipient_map_entry": "",
+        "add_resource": "",
+        "add_template": "",
+        "add_tls_policy_map": "",
+        "address_rewriting": "",
+        "alias": "",
+        "alias_domain_alias_hint": "",
+        "alias_domain_backupmx": "",
+        "aliases": "",
+        "all_domains": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "backup_mx": "",
+        "bcc": "",
+        "bcc_destination": "",
+        "bcc_destinations": "",
+        "bcc_info": "",
+        "bcc_local_dest": "",
+        "bcc_map": "",
+        "bcc_map_type": "",
+        "bcc_maps": "",
+        "bcc_rcpt_map": "",
+        "domain_templates": "",
+        "domain_quota_total": "",
+        "domains": "",
+        "edit": "",
+        "empty": "",
+        "enable_x": "",
+        "inactive": "",
+        "mailbox_quota": "",
+        "mailboxes": "",
+        "max_quota": "",
+        "no": "",
+        "no_record": "",
+        "no_record_single": "",
+        "open_logs": "",
+        "owner": "",
+        "private_comment": "",
+        "public_comment": "",
+        "q_add_header": "",
+        "q_all": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_notification": "",
+        "quick_actions": "",
+        "recipient": "",
+        "recipient_map": "",
+        "recipient_map_info": "",
+        "recipient_map_new": "",
+        "recipient_map_new_info": "",
+        "recipient_map_old": "",
+        "recipient_map_old_info": "",
+        "recipient_maps": "",
+        "relay_all": "",
+        "relay_unknown": "",
+        "resources": "",
+        "running": "",
+        "sender": "",
+        "set_postfilter": "",
+        "set_prefilter": "",
+        "sieve_info": "",
+        "sieve_preset_1": "",
+        "sieve_preset_2": "",
+        "sieve_preset_3": "",
+        "sieve_preset_4": "",
+        "sieve_preset_5": "",
+        "sieve_preset_6": "",
+        "sieve_preset_7": "",
+        "stats": "",
+        "status": "",
+        "sync_jobs": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "table_size_show_n": "",
+        "target_address": "",
+        "target_domain": "",
+        "templates": "",
+        "template": "",
+        "tls_enforce_in": "",
+        "tls_enforce_out": "",
+        "tls_map_dest": "",
+        "tls_map_dest_info": "",
+        "tls_map_parameters": "",
+        "tls_map_parameters_info": "",
+        "tls_map_policy": "",
+        "tls_policy_maps": "",
+        "tls_policy_maps_enforced_tls": "",
+        "tls_policy_maps_info": "",
+        "toggle_all": "",
+        "username": "",
+        "waiting": "",
+        "weekly": "",
+        "yes": ""
+    },
+    "info": {
+        "no_action": "",
+        "awaiting_tfa_confirmation": "",
+        "session_expires": ""
+    },
+    "tfa": {
+        "api_register": "",
+        "delete_tfa": "",
+        "authenticators": "",
+        "confirm": "",
+        "confirm_totp_token": "",
+        "disable_tfa": "",
+        "error_code": "",
+        "enter_qr_code": "",
+        "init_webauthn": "",
+        "key_id": "",
+        "key_id_totp": "",
+        "none": "",
+        "reload_retry": "",
+        "scan_qr_code": "",
+        "select": "",
+        "set_tfa": "",
+        "start_webauthn_validation": "",
+        "tfa": "",
+        "tfa_token_invalid": "",
+        "totp": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": "",
+        "webauthn": "",
+        "waiting_usb_auth": "",
+        "waiting_usb_register": "",
+        "yubi_otp": ""
+    },
+    "footer": {
+        "cancel": "",
+        "confirm_delete": "",
+        "delete_now": "",
+        "delete_these_items": "",
+        "hibp_check": "",
+        "hibp_nok": "",
+        "hibp_ok": "",
+        "restart_now": "",
+        "restarting_container": "",
+        "loading": "",
+        "nothing_selected": "",
+        "restart_container": "",
+        "restart_container_info": ""
+    },
+    "header": {
+        "administration": "",
+        "apps": "",
+        "debug": "",
+        "email": "",
+        "mailcow_system": "",
+        "mailcow_config": "",
+        "quarantine": "",
+        "restart_netfilter": "",
+        "restart_sogo": "",
+        "user_settings": ""
+    },
+    "user": {
+        "app_name": "",
+        "direct_aliases": "",
+        "direct_aliases_desc": "",
+        "eas_reset": "",
+        "expire_in": "",
+        "pushover_only_x_prio": "",
+        "quarantine_notification_info": "",
+        "recent_successful_connections": "",
+        "spamfilter_bl": "",
+        "spamfilter_default_score": "",
+        "status": "",
+        "tag_help_explain": "",
+        "tag_in_none": "",
+        "text": "",
+        "aliases_send_as_all": "",
+        "app_hint": "",
+        "interval": "",
+        "is_catch_all": "",
+        "last_mail_login": "",
+        "last_pw_change": "",
+        "last_run": "",
+        "tag_in_subfolder": "",
+        "tag_in_subject": "",
+        "title": "",
+        "quarantine_notification": "",
+        "action": "",
+        "active": "",
+        "active_sieve": "",
+        "advanced_settings": "",
+        "alias": "",
+        "alias_create_random": "",
+        "alias_extend_all": "",
+        "alias_full_date": "",
+        "alias_remove_all": "",
+        "alias_select_validity": "",
+        "alias_time_left": "",
+        "alias_valid_until": "",
+        "aliases_also_send_as": "",
+        "allowed_protocols": "",
+        "app_passwds": "",
+        "apple_connection_profile": "",
+        "apple_connection_profile_complete": "",
+        "apple_connection_profile_mailonly": "",
+        "apple_connection_profile_with_app_password": "",
+        "attribute": "",
+        "change_password": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "client_configuration": "",
+        "create_app_passwd": "",
+        "create_syncjob": "",
+        "created_on": "",
+        "daily": "",
+        "day": "",
+        "delete_ays": "",
+        "direct_protocol_access": "",
+        "eas_reset_help": "",
+        "eas_reset_now": "",
+        "edit": "",
+        "email": "",
+        "email_and_dav": "",
+        "empty": "",
+        "encryption": "",
+        "excludes": "",
+        "fido2_webauthn": "",
+        "force_pw_update": "",
+        "from": "",
+        "generate": "",
+        "hour": "",
+        "hourly": "",
+        "hours": "",
+        "in_use": "",
+        "last_ui_login": "",
+        "loading": "",
+        "login_history": "",
+        "mailbox": "",
+        "mailbox_details": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "messages": "",
+        "month": "",
+        "months": "",
+        "never": "",
+        "new_password": "",
+        "new_password_repeat": "",
+        "no_active_filter": "",
+        "no_last_login": "",
+        "no_record": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "password": "",
+        "password_now": "",
+        "password_repeat": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "q_add_header": "",
+        "q_all": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_category_info": "",
+        "remove": "",
+        "running": "",
+        "save": "",
+        "save_changes": "",
+        "sender_acl_disabled": "",
+        "shared_aliases": "",
+        "shared_aliases_desc": "",
+        "show_sieve_filters": "",
+        "sogo_profile_reset": "",
+        "sogo_profile_reset_help": "",
+        "sogo_profile_reset_now": "",
+        "spam_aliases": "",
+        "spam_score_reset": "",
+        "spamfilter": "",
+        "spamfilter_behavior": "",
+        "spamfilter_bl_desc": "",
+        "spamfilter_green": "",
+        "spamfilter_hint": "",
+        "spamfilter_red": "",
+        "spamfilter_table_action": "",
+        "spamfilter_table_add": "",
+        "spamfilter_table_domain_policy": "",
+        "spamfilter_table_empty": "",
+        "spamfilter_table_remove": "",
+        "spamfilter_table_rule": "",
+        "spamfilter_wl": "",
+        "spamfilter_wl_desc": "",
+        "spamfilter_yellow": "",
+        "sync_jobs": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "tag_handling": "",
+        "tag_help_example": "",
+        "tls_enforce_in": "",
+        "tls_enforce_out": "",
+        "tls_policy": "",
+        "tls_policy_warning": "",
+        "user_settings": "",
+        "username": "",
+        "value": "",
+        "verify": "",
+        "waiting": "",
+        "week": "",
+        "weekly": "",
+        "weeks": "",
+        "with_app_password": "",
+        "year": "",
+        "years": ""
+    },
+    "warning": {
+        "session_token": "",
+        "session_ua": "",
+        "cannot_delete_self": "",
+        "domain_added_sogo_failed": "",
+        "dovecot_restart_failed": "",
+        "fuzzy_learn_error": "",
+        "hash_not_found": "",
+        "ip_invalid": "",
+        "is_not_primary_alias": "",
+        "no_active_admin": "",
+        "quota_exceeded_scope": ""
+    },
+    "diagnostics": {
+        "dns_records_docs": "",
+        "cname_from_a": "",
+        "dns_records": "",
+        "dns_records_24hours": "",
+        "dns_records_data": "",
+        "dns_records_name": "",
+        "dns_records_status": "",
+        "dns_records_type": "",
+        "optional": ""
+    },
+    "debug": {
+        "service": "",
+        "show_ip": "",
+        "architecture": "",
+        "chart_this_server": "",
+        "containers_info": "",
+        "container_running": "",
+        "container_disabled": "",
+        "container_stopped": "",
+        "cores": "",
+        "current_time": "",
+        "disk_usage": "",
+        "docs": "",
+        "error_show_ip": "",
+        "external_logs": "",
+        "history_all_servers": "",
+        "in_memory_logs": "",
+        "jvm_memory_solr": "",
+        "last_modified": "",
+        "log_info": "",
+        "login_time": "",
+        "logs": "",
+        "memory": "",
+        "online_users": "",
+        "restart_container": "",
+        "size": "",
+        "solr_dead": "",
+        "solr_status": "",
+        "started_at": "",
+        "started_on": "",
+        "static_logs": "",
+        "success": "",
+        "system_containers": "",
+        "timezone": "",
+        "uptime": "",
+        "update_available": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "username": "",
+        "wip": ""
+    },
+    "login": {
+        "fido2_webauthn": "",
+        "delayed": "",
+        "login": "",
+        "mobileconfig_info": "",
+        "other_logins": "",
+        "password": "",
+        "username": ""
+    },
+    "datatables": {
+        "collapse_all": "",
+        "decimal": "",
+        "emptyTable": "",
+        "expand_all": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "infoPostFix": "",
+        "thousands": "",
+        "lengthMenu": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "paginate": {
+            "first": "",
+            "last": "",
+            "next": "",
+            "previous": ""
+        },
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        }
+    },
+    "oauth2": {
+        "access_denied": "",
+        "authorize_app": "",
+        "deny": "",
+        "permit": "",
+        "profile": "",
+        "profile_desc": "",
+        "scope_ask_permission": ""
+    },
+    "queue": {
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "queue_manager": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": ""
+    },
+    "ratelimit": {
+        "disabled": "",
+        "second": "",
+        "minute": "",
+        "hour": "",
+        "day": ""
     }
 }

+ 159 - 20
data/web/lang/lang.nl-nl.json

@@ -26,7 +26,9 @@
         "syncjobs": "Sync jobs",
         "tls_policy": "Versleutelingsbeleid",
         "unlimited_quota": "Onbeperkte quota voor mailboxen",
-        "domain_desc": "Wijzig domeinbeschrijving"
+        "domain_desc": "Wijzig domeinbeschrijving",
+        "domain_relayhost": "",
+        "mailbox_relayhost": ""
     },
     "add": {
         "activate_filter_warn": "Alle andere filters worden gedeactiveerd zolang deze geactiveerd is.",
@@ -104,7 +106,9 @@
         "validate": "Verifieer",
         "validation_success": "Succesvol geverifieerd",
         "tags": "Tags",
-        "bcc_dest_format": "BCC-bestemming moet één geldig e-mailadres zijn.<br>Als u een kopie naar meerdere adressen wilt sturen, maak dan een alias aan en gebruik die hier."
+        "bcc_dest_format": "BCC-bestemming moet één geldig e-mailadres zijn.<br>Als u een kopie naar meerdere adressen wilt sturen, maak dan een alias aan en gebruik die hier.",
+        "dry": "",
+        "app_passwd_protocols": ""
     },
     "admin": {
         "access": "Toegang",
@@ -185,7 +189,7 @@
         "filter_table": "Filtertabel",
         "forwarding_hosts": "Forwarding hosts",
         "forwarding_hosts_add_hint": "Het is mogelijk om IPv4- of IPv6-adressen, netwerken in CIDR-notatie, hostnames (worden omgezet naar IP-adressen) of domeinnamen (worden tevens omgezet naar IP-adressen of, bij gebrek daaraan, MX-records) op te geven.",
-        "forwarding_hosts_hint": "Inkomende berichten worden onvoorwaardelijk geaccepteerd vanaf iedere host hieronder vermeld. Deze hosts worden hierdoor niet gecontroleerd op DNSBLs, en zullen de greylisting omzeilen. Spam wordt daarentegen zoals gebruikelijk in de spamfolder geplaatst. Dit wordt vaak gebruikt om mailservers te specificeren die forwarden naar deze Mailcow-server.",
+        "forwarding_hosts_hint": "Inkomende berichten worden onvoorwaardelijk geaccepteerd vanaf iedere host hieronder vermeld. Deze hosts worden hierdoor niet gecontroleerd op DNSBLs, en zullen de greylisting omzeilen. Spam wordt daarentegen zoals gebruikelijk in de spamfolder geplaatst. Dit wordt vaak gebruikt om mailservers te specificeren die alles doorsturen naar deze Mailcow-server.",
         "from": "Afzender",
         "generate": "genereer",
         "guid": "Identificatienummer - GUID",
@@ -295,7 +299,7 @@
         "to_top": "Naar boven",
         "transport_dest_format": "Voorbeeld: example.org, .example.org, *, mailbox@example.org (meerdere waarden zijn kommagescheiden)",
         "transport_maps": "Transport-maps",
-        "transports_hint": "→ Een transport-map wordt boven een afzendergebonden transport-map verkozen.<br>→ Het uitgaande versleutelingsbeleid van individuele gebruikers wordt genegeerd en kan uitsluitend worden gehandhaafd doormiddel van globaal versleutelingsbeleid.<br>→ De transportservice is altijd \"smtp:\" en zal daarom met TLS proberen te verbinden. Wrapped TLS (SMTPS) wordt niet ondersteund.<br>→ Adressen overeenkomend met \"/localhost$/\" zullen altijd via \"local:\" getransporteerd worden, hierdoor zullen \"*\"-bestemmingen niet van toepassing zijn op deze adressen.<br>→ Om de aanmeldingsgegevens van een (voorbeeld) nexthop \"[host]:25\" te bepalen, zoekt Postfix <b>altijd</b> naar \"nexthop\" voodat er wordt gekeken naar \"[nexthop]:25\". Dit maakt het onmogelijk om \"nexthop\" en \"[nexthop]:25\" tegelijkertijd te gebruiken.",
+        "transports_hint": "→ Een transport-map wordt boven een afzendergebonden transport-map verkozen.<br>→ Het uitgaande versleutelingsbeleid van individuele gebruikers wordt genegeerd en kan uitsluitend worden gehandhaafd door middel van globaal versleutelingsbeleid.<br>→ De transportservice is altijd \"smtp:\" en zal daarom met TLS proberen te verbinden. Wrapped TLS (SMTPS) wordt niet ondersteund.<br>→ Adressen overeenkomend met \"/localhost$/\" zullen altijd via \"local:\" getransporteerd worden, hierdoor zullen \"*\"-bestemmingen niet van toepassing zijn op deze adressen.<br>→ Om de aanmeldingsgegevens van een (voorbeeld) nexthop \"[host]:25\" te bepalen, zoekt Postfix <b>altijd</b> naar \"nexthop\" voodat er wordt gekeken naar \"[nexthop]:25\". Dit maakt het onmogelijk om \"nexthop\" en \"[nexthop]:25\" tegelijkertijd te gebruiken.",
         "ui_footer": "Footer (HTML toegestaan)",
         "ui_header_announcement": "Aankondigingen",
         "ui_header_announcement_active": "Activeer aankondiging",
@@ -337,7 +341,17 @@
         "admins_ldap": "LDAP administrators",
         "api_read_only": "Alleen-lezen toegang",
         "api_read_write": "Lees en schrijf toegang",
-        "login_time": "Login tijd"
+        "login_time": "Login tijd",
+        "allowed_methods": "",
+        "copy_to_clipboard": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "allowed_origins": "",
+        "ip_check_opt_in": "",
+        "queue_unban": "",
+        "transport_test_rcpt_info": "",
+        "yes": "",
+        "no": ""
     },
     "danger": {
         "access_denied": "Toegang geweigerd of ongeldige gegevens",
@@ -463,7 +477,12 @@
         "demo_mode_enabled": "Demo modus is ingeschakeld",
         "template_exists": "Sjabloon %s bestaat al",
         "template_id_invalid": "Sjabloon ID %s ongeldig",
-        "template_name_invalid": "Sjabloon naam ongeldig"
+        "template_name_invalid": "Sjabloon naam ongeldig",
+        "webauthn_username_failed": "",
+        "cors_invalid_origin": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "extended_sender_acl_denied": ""
     },
     "debug": {
         "chart_this_server": "Grafiek (deze server)",
@@ -473,7 +492,7 @@
         "history_all_servers": "Geschiedenis (alle servers)",
         "in_memory_logs": "Geheugenlogs",
         "jvm_memory_solr": "JVM-geheugengebruik",
-        "log_info": "<p>Mailcows <b>geheugenlogs</b> worden elke minuut afgesneden naar maximaal %d regels (LOG_LINES) om de stabiliteit te garanderen.<br>Geheugenlogs zijn niet bedoeld om bewaard te blijven. Alle applicaties die geheugenlogs schrijven worden ook naar het Docker-proces gelogd.<br>De geheugenlogs kunnen gebruikt worden voor het oplossen van problemen met bepaalde containers.</p><p><b>Externe logs</b> worden verzameld doormiddel van de API van deze applicaties.</p><p><b>Statische logs</b> zijn activiteitenlogs die niet naar het Docker-proces worden gelogd, maar wel bewaard moeten blijven (uitgezonderd API-logs).</p>",
+        "log_info": "<p>Mailcows <b>geheugenlogs</b> worden elke minuut afgesneden naar maximaal %d regels (LOG_LINES) om de stabiliteit te garanderen.<br>Geheugenlogs zijn niet bedoeld om bewaard te blijven. Alle applicaties die geheugenlogs schrijven worden ook naar het Docker-proces gelogd.<br>De geheugenlogs kunnen gebruikt worden voor het oplossen van problemen met bepaalde containers.</p><p><b>Externe logs</b> worden verzameld door middel van de API van deze applicaties.</p><p><b>Statische logs</b> zijn activiteitenlogs die niet naar het Docker-proces worden gelogd, maar wel bewaard moeten blijven (uitgezonderd API-logs).</p>",
         "logs": "Logs",
         "restart_container": "Herstart",
         "solr_dead": "Solr is uitgeschakeld, uitgevallen of nog bezig met opstarten.",
@@ -627,7 +646,26 @@
         "acl": "ACL (Toestemming)",
         "domain_footer": "Domeinbreede footer",
         "domain_footer_html": "HTML footer",
-        "mailbox_relayhost_info": "Wordt alleen toegepast op de mailbox en directe aliassen, maar heft een domein relayhost op."
+        "mailbox_relayhost_info": "Wordt alleen toegepast op de mailbox en directe aliassen, maar heft een domein relayhost op.",
+        "lookup_mx": "",
+        "footer_exclude": "",
+        "domain_footer_skip_replies": "",
+        "custom_attributes": "",
+        "quota_warning_bcc": "",
+        "domain_footer_info_vars": {
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": "",
+            "custom": ""
+        },
+        "pushover": "",
+        "domain_footer_plain": "",
+        "none_inherit": "",
+        "quota_warning_bcc_info": "",
+        "sogo_access": "",
+        "sogo_access_info": ""
     },
     "footer": {
         "cancel": "Annuleren",
@@ -640,7 +678,9 @@
         "restart_container": "Herstart container",
         "restart_container_info": "<b>Belangrijk:</b> Een herstart kan enige tijd in beslag nemen, wacht aub totdat dit proces voltooid is.<br>Deze pagina zal zichzelf verversen zodra het proces voltooid is.",
         "restart_now": "Nu herstarten",
-        "restarting_container": "Container wordt herstart, even geduld aub..."
+        "restarting_container": "Container wordt herstart, even geduld aub...",
+        "hibp_check": "",
+        "nothing_selected": ""
     },
     "header": {
         "administration": "Configuratie & details",
@@ -651,7 +691,8 @@
         "quarantine": "Quarantaine",
         "restart_netfilter": "Herstart netfilter",
         "restart_sogo": "Herstart SOGo",
-        "user_settings": "Gebruikersinstellingen"
+        "user_settings": "Gebruikersinstellingen",
+        "mailcow_system": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "In afwachting van tweefactorauthenticatie...",
@@ -684,7 +725,7 @@
         "add_tls_policy_map": "Voeg versleutelingsbeleid toe",
         "address_rewriting": "Adresomleidingen",
         "alias": "Alias",
-        "alias_domain_alias_hint": "Aliassen worden <b>niet</b> automatisch toegepast op domeinaliassen. Aliasadres <code>alias@domein</code> dekt het adres <code>alias@alias-domein</code> <b>niet</b> (waarbij \"alias-domein\" een aliasdomein is voor \"domein\").<br>Gebruik een filter om mail te forwarden naar een externe mailbox (zie het tabje \"Filters\" of gebruik SOGo -> Doorsturen).",
+        "alias_domain_alias_hint": "Aliassen worden <b>niet</b> automatisch toegepast op domeinaliassen. Aliasadres <code>alias@domein</code> dekt het adres <code>alias@alias-domein</code> <b>niet</b> (waarbij \"alias-domein\" een aliasdomein is voor \"domein\").<br>Gebruik een filter om mail door te sturen naar een externe mailbox (zie het tabje \"Filters\" of gebruik SOGo -> Doorsturen).",
         "alias_domain_backupmx": "Aliasdomein inactief voor geforward domein",
         "aliases": "Aliassen",
         "allow_from_smtp": "Sta enkel de volgende IP-adressen toe voor <b>SMTP</b>",
@@ -694,7 +735,7 @@
         "bcc": "BCC",
         "bcc_destination": "BCC-bestemming",
         "bcc_destinations": "BCC-bestemmingen",
-        "bcc_info": "BCC-maps worden gebruikt om kopieën van alle berichten naar een ander adres te forwarden.<br>Wees er van bewust dat er geen melding wordt gedaan van een mislukte aflevering.",
+        "bcc_info": "BCC-maps worden gebruikt om kopieën van alle berichten naar een ander adres door te sturen.<br>Wees er van bewust dat er geen melding wordt gedaan van een mislukte aflevering.",
         "bcc_local_dest": "Lokale bestemming",
         "bcc_map": "BCC-map",
         "bcc_map_type": "BCC-type",
@@ -812,7 +853,35 @@
         "toggle_all": "Selecteer alles",
         "username": "Gebruikersnaam",
         "waiting": "Wachten",
-        "weekly": "Wekelijks"
+        "weekly": "Wekelijks",
+        "add_alias_expand": "",
+        "all_domains": "",
+        "goto_spam": "",
+        "sender": "",
+        "catch_all": "",
+        "add_template": "",
+        "created_on": "",
+        "domain_templates": "",
+        "domain_quota_total": "",
+        "goto_ham": "",
+        "last_pw_change": "",
+        "mailbox_templates": "",
+        "no": "",
+        "open_logs": "",
+        "recipient": "",
+        "relay_unknown": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "templates": "",
+        "template": "",
+        "yes": ""
     },
     "oauth2": {
         "access_denied": "Log in als een mailboxgebruiker om toegang via OAuth te verlenen",
@@ -877,7 +946,20 @@
         "toggle_all": "Selecteer alles"
     },
     "queue": {
-        "queue_manager": "Queue manager"
+        "queue_manager": "Queue manager",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": ""
     },
     "start": {
         "help": "Toon/verberg hulppaneel",
@@ -960,7 +1042,16 @@
         "verified_totp_login": "TOTP succesvol geverifieerd",
         "verified_webauthn_login": "WebAuthn succesvol geverifieerd",
         "verified_fido2_login": "FIDO2 succesvol geverifieerd",
-        "verified_yotp_login": "Yubico OTP succesvol geverifieerd"
+        "verified_yotp_login": "Yubico OTP succesvol geverifieerd",
+        "f2b_banlist_refreshed": "",
+        "ip_check_opt_in_modified": "",
+        "password_policy_saved": "",
+        "template_added": "",
+        "cors_headers_edited": "",
+        "domain_add_dkim_available": "",
+        "domain_footer_modified": "",
+        "template_modified": "",
+        "template_removed": ""
     },
     "tfa": {
         "api_register": "%s maakt gebruik van de Yubico Cloud API. Om dit te benutten is er een API-key van Yubico vereist, deze kan <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">hier</a> opgevraagd worden",
@@ -985,7 +1076,10 @@
         "webauthn": "WebAuthn",
         "waiting_usb_auth": "<i>In afwachting van USB-apparaat...</i><br><br>Druk nu op de knop van je WebAuthn-apparaat.",
         "waiting_usb_register": "<i>In afwachting van USB-apparaat...</i><br><br>Voer je wachtwoord hierboven in en bevestig de registratie van het WebAuthn-apparaat door op de knop van het apparaat te drukken.",
-        "yubi_otp": "Yubico OTP"
+        "yubi_otp": "Yubico OTP",
+        "authenticators": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": ""
     },
     "fido2": {
         "set_fn": "Stel naam in",
@@ -999,7 +1093,8 @@
         "start_fido2_validation": "Start FIDO2-validatie",
         "fido2_auth": "Aanmelden met FIDO2",
         "fido2_success": "Apparaat succesvol geregistreerd",
-        "fido2_validation_failed": "Validatie mislukt"
+        "fido2_validation_failed": "Validatie mislukt",
+        "set_fido2_touchid": ""
     },
     "user": {
         "action": "Handeling",
@@ -1129,7 +1224,41 @@
         "waiting": "Wachten",
         "week": "week",
         "weekly": "Wekelijks",
-        "weeks": "weken"
+        "weeks": "weken",
+        "attribute": "",
+        "years": "",
+        "value": "",
+        "fido2_webauthn": "",
+        "recent_successful_connections": "",
+        "syncjob_check_log": "",
+        "allowed_protocols": "",
+        "apple_connection_profile_with_app_password": "",
+        "direct_protocol_access": "",
+        "last_pw_change": "",
+        "last_ui_login": "",
+        "login_history": "",
+        "mailbox": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "month": "",
+        "months": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "year": "",
+        "with_app_password": "",
+        "from": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "created_on": "",
+        "empty": ""
     },
     "warning": {
         "cannot_delete_self": "Gebruikers kunnen niet worden verwijderd wanneer deze zijn aangemeld",
@@ -1141,7 +1270,8 @@
         "no_active_admin": "Het is niet mogelijk om de laatste actieve administrator te verwijderen",
         "quota_exceeded_scope": "Domeinquota overschreden: Voor dit domein kunnen uitsluitend onbeperkte mailboxen aangemaakt worden.",
         "session_token": "Token ongeldig: komt niet overeen",
-        "session_ua": "Token ongeldig: gebruikersagentvalidatie mislukt"
+        "session_ua": "Token ongeldig: gebruikersagentvalidatie mislukt",
+        "is_not_primary_alias": ""
     },
     "datatables": {
         "emptyTable": "Geen data beschikbaar in tabel",
@@ -1165,6 +1295,15 @@
         "loadingRecords": "Laden...",
         "processing": "Wachten alstublieft..",
         "search": "Zoeken:",
-        "zeroRecords": "Geen overeenkomsten gevonden"
+        "zeroRecords": "Geen overeenkomsten gevonden",
+        "infoPostFix": "",
+        "infoFiltered": ""
+    },
+    "ratelimit": {
+        "disabled": "",
+        "second": "",
+        "minute": "",
+        "hour": "",
+        "day": ""
     }
 }

+ 890 - 15
data/web/lang/lang.pl-pl.json

@@ -2,7 +2,33 @@
     "acl": {
         "sogo_profile_reset": "Usuń profil SOGo (webmail)",
         "syncjobs": "Polecenie synchronizacji",
-        "alias_domains": "Dodaj aliasy domen"
+        "alias_domains": "Dodaj aliasy domen",
+        "quarantine_notification": "",
+        "ratelimit": "",
+        "recipient_maps": "",
+        "smtp_ip_access": "",
+        "sogo_access": "",
+        "spam_alias": "",
+        "spam_policy": "",
+        "spam_score": "",
+        "tls_policy": "",
+        "unlimited_quota": "",
+        "app_passwds": "",
+        "bcc_maps": "",
+        "delimiter_action": "",
+        "domain_desc": "",
+        "domain_relayhost": "",
+        "eas_reset": "",
+        "extend_sender_acl": "",
+        "filters": "",
+        "login_as": "",
+        "mailbox_relayhost": "",
+        "prohibited": "",
+        "protocol_access": "",
+        "quarantine": "",
+        "quarantine_attachments": "",
+        "quarantine_category": "",
+        "pushover": ""
     },
     "add": {
         "active": "Aktywny",
@@ -43,7 +69,46 @@
         "target_address": "Adresy Idź do:",
         "target_address_info": "<small> Pełny/e adres/y email (oddzielone przecinkami).</small>",
         "target_domain": "Domena docelowa:",
-        "username": "Nazwa użytkownika"
+        "username": "Nazwa użytkownika",
+        "dry": "",
+        "add_domain_only": "",
+        "automap": "",
+        "bcc_dest_format": "",
+        "comment_info": "",
+        "custom_params": "",
+        "custom_params_hint": "",
+        "delete2": "",
+        "disable_login": "",
+        "domain_matches_hostname": "",
+        "destination": "",
+        "sieve_desc": "",
+        "sieve_type": "",
+        "skipcrossduplicates": "",
+        "subscribeall": "",
+        "tags": "",
+        "timeout1": "",
+        "gal": "",
+        "gal_info": "",
+        "goto_ham": "",
+        "goto_null": "",
+        "goto_spam": "",
+        "inactive": "",
+        "mailbox_quota_def": "",
+        "private_comment": "",
+        "public_comment": "",
+        "relay_transport_info": "",
+        "timeout2": "",
+        "validate": "",
+        "relay_unknown_only": "",
+        "relayhost_wrapped_tls_info": "",
+        "validation_success": "",
+        "activate_filter_warn": "",
+        "add_domain_restart": "",
+        "app_name": "",
+        "generate": "",
+        "nexthop": "",
+        "app_password": "",
+        "app_passwd_protocols": ""
     },
     "admin": {
         "access": "Dostęp",
@@ -99,7 +164,194 @@
         "spamfilter": "Filtr spamu",
         "time": "Czas",
         "unchanged_if_empty": "W przypadku braku zmian, nie wypełniaj",
-        "username": "Nazwa użytkownika"
+        "username": "Nazwa użytkownika",
+        "oauth2_redirect_uri": "",
+        "oauth2_renew_secret": "",
+        "oauth2_revoke_tokens": "",
+        "rspamd_global_filters_regex": "",
+        "ui_header_announcement_type_warning": "",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "rate_name": "",
+        "ui_texts": "",
+        "unban_pending": "",
+        "f2b_ban_time_increment": "",
+        "f2b_max_ban_time": "",
+        "relayhosts_hint": "",
+        "copy_to_clipboard": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "in_use_by": "",
+        "include_exclude": "",
+        "include_exclude_info": "",
+        "includes": "",
+        "is_mx_based": "",
+        "nexthop": "",
+        "no": "",
+        "no_active_bans": "",
+        "no_new_rows": "",
+        "oauth2_apps": "",
+        "oauth2_add_client": "",
+        "oauth2_client_id": "",
+        "oauth2_client_secret": "",
+        "oauth2_info": "",
+        "optional": "",
+        "options": "",
+        "password_length": "",
+        "password_policy": "",
+        "password_policy_chars": "",
+        "password_policy_length": "",
+        "quarantine_notification_html": "",
+        "quarantine_notification_subject": "",
+        "quarantine_redirect": "",
+        "quarantine_release_format": "",
+        "quarantine_release_format_att": "",
+        "quarantine_release_format_raw": "",
+        "quarantine_retention_size": "",
+        "quota_notification_html": "",
+        "quota_notification_sender": "",
+        "quota_notification_subject": "",
+        "quota_notifications": "",
+        "quota_notifications_info": "",
+        "quota_notifications_vars": "",
+        "queue_unban": "",
+        "recipients": "",
+        "regen_api_key": "",
+        "relay_rcpt": "",
+        "relay_run": "",
+        "relayhosts": "",
+        "remove_row": "",
+        "reset_default": "",
+        "reset_limit": "",
+        "rsetting_add_rule": "",
+        "rsetting_content": "",
+        "rsetting_desc": "",
+        "rsetting_no_selection": "",
+        "rsetting_none": "",
+        "rsettings_insert_preset": "",
+        "rsettings_preset_1": "",
+        "rsettings_preset_2": "",
+        "rsettings_preset_3": "",
+        "rsettings_preset_4": "",
+        "rspamd_com_settings": "",
+        "rspamd_global_filters": "",
+        "rspamd_global_filters_agree": "",
+        "rspamd_global_filters_info": "",
+        "rspamd_settings_map": "",
+        "sal_level": "",
+        "send": "",
+        "sender": "",
+        "service": "",
+        "service_id": "",
+        "subject": "",
+        "success": "",
+        "sys_mails": "",
+        "text": "",
+        "title": "",
+        "ui_header_announcement_type": "",
+        "ui_header_announcement_type_danger": "",
+        "ui_header_announcement_type_info": "",
+        "validate_license_now": "",
+        "verify": "",
+        "yes": "",
+        "allowed_methods": "",
+        "allowed_origins": "",
+        "cors_settings": "",
+        "customize": "",
+        "credentials_transport_warning": "",
+        "destination": "",
+        "dkim_domains_selector": "",
+        "hash_remove_info": "",
+        "html": "",
+        "message_size": "",
+        "dkim_domains_wo_keys": "",
+        "dkim_from_title": "",
+        "dkim_overwrite_key": "",
+        "excludes": "",
+        "f2b_blacklist": "",
+        "f2b_filter": "",
+        "f2b_list_info": "",
+        "f2b_netban_ipv4": "",
+        "f2b_netban_ipv6": "",
+        "f2b_regex_info": "",
+        "from": "",
+        "generate": "",
+        "guid": "",
+        "guid_and_license": "",
+        "help_text": "",
+        "dkim_to": "",
+        "dkim_to_title": "",
+        "domain_admin": "",
+        "domain_s": "",
+        "duplicate": "",
+        "duplicate_dkim": "",
+        "ip_check": "",
+        "ip_check_disabled": "",
+        "ip_check_opt_in": "",
+        "last_applied": "",
+        "merged_vars_hint": "",
+        "license_info": "",
+        "link": "",
+        "login_time": "",
+        "logo_info": "",
+        "main_name": "",
+        "password_policy_lowerupper": "",
+        "password_policy_numbers": "",
+        "password_policy_special_chars": "",
+        "quarantine_bcc": "",
+        "quarantine_exclude_domains": "",
+        "quarantine_max_age": "",
+        "quarantine_max_score": "",
+        "quarantine_max_size": "",
+        "quarantine_notification_sender": "",
+        "title_name": "",
+        "to_top": "",
+        "transport_dest_format": "",
+        "transport_maps": "",
+        "transport_test_rcpt_info": "",
+        "transports_hint": "",
+        "ui_header_announcement": "",
+        "ui_header_announcement_active": "",
+        "ui_header_announcement_content": "",
+        "ui_header_announcement_help": "",
+        "ui_header_announcement_select": "",
+        "upload": "",
+        "regex_maps": "",
+        "relay_from": "",
+        "dkim_from": "",
+        "activate_api": "",
+        "activate_send": "",
+        "active_rspamd_settings_map": "",
+        "add_admin": "",
+        "add_relayhost": "",
+        "add_relayhost_hint": "",
+        "add_row": "",
+        "add_settings_rule": "",
+        "add_transport": "",
+        "add_transports_hint": "",
+        "customer_id": "",
+        "additional_rows": "",
+        "admins": "",
+        "admins_ldap": "",
+        "advanced_settings": "",
+        "api_allow_from": "",
+        "api_info": "",
+        "api_key": "",
+        "api_read_only": "",
+        "api_read_write": "",
+        "api_skip_ip_check": "",
+        "app_links": "",
+        "app_name": "",
+        "apps_name": "",
+        "arrival_time": "",
+        "authed_user": "",
+        "ays": "",
+        "ban_list_info": "",
+        "change_logo": "",
+        "convert_html_to_text": "",
+        "routing": "",
+        "ui_footer": "",
+        "lookup_mx": ""
     },
     "danger": {
         "access_denied": "Odmowa dostępu lub nieprawidłowe dane w formularzu",
@@ -145,7 +397,92 @@
         "target_domain_invalid": "Domena Idź do jest nieprawidłowa",
         "targetd_not_found": "Nie znaleziono domeny docelowej",
         "username_invalid": "Nie można użyć nazwy użytkownika",
-        "validity_missing": "Proszę wyznaczyć termin ważności"
+        "validity_missing": "Proszę wyznaczyć termin ważności",
+        "webauthn_authenticator_failed": "",
+        "app_name_empty": "",
+        "app_passwd_id_invalid": "",
+        "bcc_empty": "",
+        "bcc_exists": "",
+        "bcc_must_be_email": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "mysql_error": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "invalid_filter_type": "",
+        "invalid_host": "",
+        "invalid_mime_type": "",
+        "invalid_nexthop": "",
+        "invalid_nexthop_authenticated": "",
+        "invalid_recipient_map_new": "",
+        "invalid_recipient_map_old": "",
+        "mailbox_defquota_exceeds_mailbox_maxquota": "",
+        "map_content_empty": "",
+        "network_host_invalid": "",
+        "next_hop_interferes": "",
+        "next_hop_interferes_any": "",
+        "nginx_reload_failed": "",
+        "no_user_defined": "",
+        "tls_policy_map_entry_exists": "",
+        "tls_policy_map_parameter_invalid": "",
+        "totp_verification_failed": "",
+        "transport_dest_exists": "",
+        "webauthn_verification_failed": "",
+        "webauthn_publickey_failed": "",
+        "webauthn_username_failed": "",
+        "unknown": "",
+        "value_missing": "",
+        "yotp_verification_failed": "",
+        "unknown_tfa_method": "",
+        "unlimited_quota_acl": "",
+        "comment_too_long": "",
+        "defquota_empty": "",
+        "demo_mode_enabled": "",
+        "dkim_domain_or_sel_exists": "",
+        "domain_cannot_match_hostname": "",
+        "extended_sender_acl_denied": "",
+        "from_invalid": "",
+        "global_filter_write_error": "",
+        "global_map_invalid": "",
+        "global_map_write_error": "",
+        "ham_learn_error": "",
+        "imagick_exception": "",
+        "img_invalid": "",
+        "img_tmp_missing": "",
+        "invalid_bcc_map_type": "",
+        "invalid_destination": "",
+        "private_key_error": "",
+        "pushover_credentials_missing": "",
+        "pushover_key": "",
+        "pushover_token": "",
+        "recipient_map_entry_exists": "",
+        "redis_error": "",
+        "relayhost_invalid": "",
+        "release_send_failed": "",
+        "reset_f2b_regex": "",
+        "rl_timeframe": "",
+        "rspamd_ui_pw_length": "",
+        "set_acl_failed": "",
+        "settings_map_invalid": "",
+        "sieve_error": "",
+        "spam_learn_error": "",
+        "subject_empty": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "template_name_invalid": "",
+        "text_empty": "",
+        "tls_policy_map_dest_invalid": "",
+        "malformed_username": "",
+        "extra_acl_invalid": "",
+        "targetd_relay_domain": "",
+        "temp_error": "",
+        "tfa_token_invalid": "",
+        "script_empty": "",
+        "ip_list_empty": "",
+        "extra_acl_invalid_domain": "",
+        "fido2_verification_failed": "",
+        "file_open_error": "",
+        "filter_type": ""
     },
     "edit": {
         "active": "Aktywny",
@@ -190,7 +527,93 @@
         "target_domain": "Domena docelowa",
         "title": "Edytuj obiekt",
         "unchanged_if_empty": "Jeżli bez zmian, nie wypełniaj",
-        "username": "Nazwa użytkownika"
+        "username": "Nazwa użytkownika",
+        "comment_info": "",
+        "created_on": "",
+        "footer_exclude": "",
+        "domain_footer_skip_replies": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "scope": "",
+        "sender_acl_disabled": "",
+        "sender_acl_info": "",
+        "sieve_type": "",
+        "skipcrossduplicates": "",
+        "sogo_access": "",
+        "sogo_access_info": "",
+        "timeout2": "",
+        "validate_save": "",
+        "custom_attributes": "",
+        "domain_footer_info_vars": {
+            "from_user": "",
+            "from_addr": "",
+            "custom": "",
+            "auth_user": "",
+            "from_name": "",
+            "from_domain": ""
+        },
+        "domain_footer_plain": "",
+        "relayhost": "",
+        "timeout1": "",
+        "acl": "",
+        "admin": "",
+        "advanced_settings": "",
+        "allow_from_smtp": "",
+        "bcc_dest_format": "",
+        "client_id": "",
+        "client_secret": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_info": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "ratelimit": "",
+        "redirect_uri": "",
+        "sogo_visible": "",
+        "sogo_visible_info": "",
+        "spam_alias": "",
+        "spam_filter": "",
+        "spam_policy": "",
+        "spam_score": "",
+        "sieve_desc": "",
+        "gal_info": "",
+        "grant_types": "",
+        "last_modified": "",
+        "delete2": "",
+        "delete_ays": "",
+        "disable_login": "",
+        "extended_sender_acl": "",
+        "extended_sender_acl_info": "",
+        "force_pw_update": "",
+        "force_pw_update_info": "",
+        "mailbox_quota_def": "",
+        "mailbox_relayhost_info": "",
+        "mbox_rl_info": "",
+        "none_inherit": "",
+        "nexthop": "",
+        "private_comment": "",
+        "public_comment": "",
+        "pushover": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "maxbytespersecond": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "app_name": "",
+        "app_passwd": "",
+        "app_passwd_protocols": "",
+        "automap": "",
+        "gal": "",
+        "generate": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "quota_warning_bcc": "",
+        "quota_warning_bcc_info": "",
+        "lookup_mx": ""
     },
     "footer": {
         "cancel": "Anuluj",
@@ -198,7 +621,14 @@
         "delete_now": "Usuń teraz",
         "delete_these_items": "Czy jesteś pewien, że chcesz usunąć następujące elementy?",
         "loading": "Proszę czekać...",
-        "restart_now": "Uruchom ponownie teraz"
+        "restart_now": "Uruchom ponownie teraz",
+        "hibp_check": "",
+        "hibp_nok": "",
+        "restart_container_info": "",
+        "restarting_container": "",
+        "hibp_ok": "",
+        "nothing_selected": "",
+        "restart_container": ""
     },
     "header": {
         "administration": "Administrowanie",
@@ -206,16 +636,25 @@
         "mailcow_config": "Konfiguracja",
         "quarantine": "Kwarantanna",
         "restart_sogo": "Uruchom ponownie SOGo",
-        "user_settings": "Ustawienia użytkownika"
+        "user_settings": "Ustawienia użytkownika",
+        "apps": "",
+        "debug": "",
+        "mailcow_system": "",
+        "restart_netfilter": ""
     },
     "info": {
-        "no_action": "Żadne działanie nie ma zastosowania"
+        "no_action": "Żadne działanie nie ma zastosowania",
+        "awaiting_tfa_confirmation": "",
+        "session_expires": ""
     },
     "login": {
         "delayed": "Logowanie zostało opóźnione o %s sekund.",
         "login": "Zaloguj się",
         "password": "Hasło",
-        "username": "Nazwa użytkownika"
+        "username": "Nazwa użytkownika",
+        "mobileconfig_info": "",
+        "fido2_webauthn": "",
+        "other_logins": ""
     },
     "mailbox": {
         "action": "Działanie",
@@ -275,7 +714,122 @@
         "tls_enforce_out": "Uruchom TLS wychodzące",
         "toggle_all": "Zaznacz wszystkie",
         "username": "Nazwa użytkownika",
-        "weekly": "Co tydzień"
+        "weekly": "Co tydzień",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "add_alias_expand": "",
+        "add_bcc_entry": "",
+        "add_filter": "",
+        "add_recipient_map_entry": "",
+        "allow_from_smtp": "",
+        "bcc_info": "",
+        "bcc_local_dest": "",
+        "bcc_map": "",
+        "bcc_map_type": "",
+        "bcc_maps": "",
+        "bcc_rcpt_map": "",
+        "bcc_sender_map": "",
+        "bcc_to_rcpt": "",
+        "bcc_to_sender": "",
+        "bcc_type": "",
+        "booking_null": "",
+        "booking_0_short": "",
+        "booking_custom": "",
+        "booking_custom_short": "",
+        "booking_ltnull": "",
+        "booking_lt0_short": "",
+        "catch_all": "",
+        "created_on": "",
+        "goto_spam": "",
+        "insert_preset": "",
+        "last_mail_login": "",
+        "last_modified": "",
+        "last_pw_change": "",
+        "last_run_reset": "",
+        "mailbox": "",
+        "mailbox_defaults": "",
+        "mailbox_defaults_info": "",
+        "mailbox_defquota": "",
+        "mailbox_templates": "",
+        "no": "",
+        "q_add_header": "",
+        "q_all": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "recipient": "",
+        "recipient_map": "",
+        "recipient_map_info": "",
+        "recipient_map_old": "",
+        "recipient_map_old_info": "",
+        "recipient_maps": "",
+        "relay_unknown": "",
+        "sogo_visible_y": "",
+        "stats": "",
+        "status": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "tls_policy_maps_info": "",
+        "tls_policy_maps_long": "",
+        "waiting": "",
+        "yes": "",
+        "sieve_preset_8": "",
+        "add_template": "",
+        "add_tls_policy_map": "",
+        "address_rewriting": "",
+        "allow_from_smtp_info": "",
+        "table_size": "",
+        "alias_domain_alias_hint": "",
+        "disable_login": "",
+        "disable_x": "",
+        "dkim_domains_selector": "",
+        "domain_templates": "",
+        "sieve_preset_3": "",
+        "sieve_preset_5": "",
+        "allowed_protocols": "",
+        "bcc": "",
+        "bcc_destination": "",
+        "bcc_destinations": "",
+        "enable_x": "",
+        "filters": "",
+        "force_pw_update": "",
+        "gal": "",
+        "goto_ham": "",
+        "open_logs": "",
+        "owner": "",
+        "private_comment": "",
+        "public_comment": "",
+        "recipient_map_new": "",
+        "recipient_map_new_info": "",
+        "running": "",
+        "sender": "",
+        "set_postfilter": "",
+        "set_prefilter": "",
+        "sieve_info": "",
+        "sieve_preset_1": "",
+        "sieve_preset_2": "",
+        "sieve_preset_6": "",
+        "sieve_preset_7": "",
+        "sieve_preset_header": "",
+        "sogo_visible": "",
+        "sogo_visible_n": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "table_size_show_n": "",
+        "templates": "",
+        "template": "",
+        "tls_map_parameters_info": "",
+        "tls_map_policy": "",
+        "tls_policy_maps": "",
+        "tls_policy_maps_enforced_tls": "",
+        "sieve_preset_4": "",
+        "alias_domain_backupmx": "",
+        "all_domains": "",
+        "tls_map_dest": "",
+        "tls_map_dest_info": "",
+        "tls_map_parameters": ""
     },
     "quarantine": {
         "action": "Działanie",
@@ -283,10 +837,68 @@
         "quarantine": "Kwarantanna",
         "quick_actions": "Szybkie działania",
         "remove": "Usuń",
-        "toggle_all": "Zaznacz wszystkie"
+        "toggle_all": "Zaznacz wszystkie",
+        "deliver_inbox": "",
+        "disabled_by_config": "",
+        "download_eml": "",
+        "high_danger": "",
+        "neutral_danger": "",
+        "info": "",
+        "junk_folder": "",
+        "learn_spam_delete": "",
+        "low_danger": "",
+        "medium_danger": "",
+        "notified": "",
+        "rcpt": "",
+        "atts": "",
+        "check_hash": "",
+        "confirm": "",
+        "confirm_delete": "",
+        "danger": "",
+        "qhandler_success": "",
+        "qid": "",
+        "qinfo": "",
+        "quick_delete_link": "",
+        "quick_info_link": "",
+        "quick_release_link": "",
+        "received": "",
+        "recipients": "",
+        "refresh": "",
+        "rejected": "",
+        "release": "",
+        "release_body": "",
+        "rspamd_result": "",
+        "sender": "",
+        "sender_header": "",
+        "show_item": "",
+        "spam": "",
+        "spam_score": "",
+        "subj": "",
+        "table_size": "",
+        "table_size_show_n": "",
+        "text_from_html_content": "",
+        "text_plain_content": "",
+        "type": "",
+        "settings_info": "",
+        "release_subject": "",
+        "rewrite_subject": "",
+        "qitem": ""
     },
     "queue": {
-        "queue_manager": "Queue Manager"
+        "queue_manager": "Queue Manager",
+        "hold_mail_legend": "",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": ""
     },
     "start": {
         "help": "Pokaż/Ukryj panel pomocy",
@@ -322,7 +934,63 @@
         "object_modified": "Zapisano zmiany w obiekcie %s",
         "resource_added": "Dodano śródło %s",
         "resource_modified": "Zapisano zmiany w skrzynce %s",
-        "resource_removed": "Usunięto zasób %s"
+        "resource_removed": "Usunięto zasób %s",
+        "hash_deleted": "",
+        "template_removed": "",
+        "tls_policy_map_entry_saved": "",
+        "ui_texts": "",
+        "upload_success": "",
+        "verified_fido2_login": "",
+        "verified_webauthn_login": "",
+        "verified_totp_login": "",
+        "verified_yotp_login": "",
+        "tls_policy_map_entry_deleted": "",
+        "acl_saved": "",
+        "admin_added": "",
+        "admin_api_modified": "",
+        "admin_removed": "",
+        "app_links": "",
+        "app_passwd_added": "",
+        "app_passwd_removed": "",
+        "bcc_deleted": "",
+        "bcc_edited": "",
+        "bcc_saved": "",
+        "cors_headers_edited": "",
+        "db_init_complete": "",
+        "delete_filter": "",
+        "delete_filters": "",
+        "deleted_syncjob": "",
+        "deleted_syncjobs": "",
+        "domain_add_dkim_available": "",
+        "dkim_duplicated": "",
+        "domain_footer_modified": "",
+        "f2b_banlist_refreshed": "",
+        "ip_check_opt_in_modified": "",
+        "item_released": "",
+        "items_released": "",
+        "learned_ham": "",
+        "license_modified": "",
+        "nginx_reloaded": "",
+        "password_policy_saved": "",
+        "pushover_settings_edited": "",
+        "qlearn_spam": "",
+        "queue_command_success": "",
+        "recipient_map_entry_deleted": "",
+        "recipient_map_entry_saved": "",
+        "relayhost_added": "",
+        "relayhost_removed": "",
+        "reset_main_logo": "",
+        "rl_saved": "",
+        "rspamd_ui_pw_set": "",
+        "saved_settings": "",
+        "settings_map_added": "",
+        "settings_map_removed": "",
+        "sogo_profile_reset": "",
+        "template_added": "",
+        "template_modified": "",
+        "dovecot_restart_success": "",
+        "global_filter_written": "",
+        "logged_in_as": ""
     },
     "tfa": {
         "api_register": "%s używa Yubico Cloud API. Proszę pobrać klucz API dla Twojego klucza <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">here</a>",
@@ -342,7 +1010,15 @@
         "webauthn": "Uwierzytelnianie WebAuthn",
         "waiting_usb_auth": "<i>Czekam na urządzenie USB...</i><br><br>Wciśnij teraz przycisk na urządzeniu WebAuthn USB.",
         "waiting_usb_register": "<i> Czekam na urządzenie USB...</i><br><br>Wprowadź swoje  hasło powyżej i potwierdź rejestrację WebAuthn przez naciśnięcie przycisku na urządzeniu WebAuthn USB.",
-        "yubi_otp": "Uwierzytelnianie Yubico OTP"
+        "yubi_otp": "Uwierzytelnianie Yubico OTP",
+        "authenticators": "",
+        "init_webauthn": "",
+        "reload_retry": "",
+        "start_webauthn_validation": "",
+        "tfa_token_invalid": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": "",
+        "error_code": ""
     },
     "user": {
         "action": "Działanie",
@@ -429,6 +1105,205 @@
         "username": "Nazwa użytkownika",
         "week": "Tydzień",
         "weekly": "Co tydzień",
-        "weeks": "Tygodnie"
+        "weeks": "Tygodnie",
+        "last_ui_login": "",
+        "loading": "",
+        "spam_score_reset": "",
+        "status": "",
+        "change_password_hint_app_passwords": "",
+        "verify": "",
+        "email": "",
+        "login_history": "",
+        "mailbox": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "month": "",
+        "months": "",
+        "app_name": "",
+        "apple_connection_profile": "",
+        "from": "",
+        "generate": "",
+        "pushover_sound": "",
+        "value": "",
+        "quarantine_category_info": "",
+        "running": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "title": "",
+        "advanced_settings": "",
+        "app_hint": "",
+        "allowed_protocols": "",
+        "apple_connection_profile_complete": "",
+        "apple_connection_profile_mailonly": "",
+        "apple_connection_profile_with_app_password": "",
+        "attribute": "",
+        "clear_recent_successful_connections": "",
+        "created_on": "",
+        "direct_protocol_access": "",
+        "email_and_dav": "",
+        "fido2_webauthn": "",
+        "last_mail_login": "",
+        "last_pw_change": "",
+        "no_last_login": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "password": "",
+        "password_repeat": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "q_add_header": "",
+        "q_all": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_notification_info": "",
+        "recent_successful_connections": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "waiting": "",
+        "with_app_password": "",
+        "year": "",
+        "years": "",
+        "empty": "",
+        "save": "",
+        "sender_acl_disabled": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "expire_in": "",
+        "app_passwds": "",
+        "text": "",
+        "create_app_passwd": "",
+        "delete_ays": ""
+    },
+    "debug": {
+        "size": "",
+        "started_at": "",
+        "started_on": "",
+        "static_logs": "",
+        "show_ip": "",
+        "solr_dead": "",
+        "solr_status": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "architecture": "",
+        "chart_this_server": "",
+        "container_disabled": "",
+        "log_info": "",
+        "online_users": "",
+        "restart_container": "",
+        "success": "",
+        "system_containers": "",
+        "timezone": "",
+        "uptime": "",
+        "update_available": "",
+        "username": "",
+        "wip": "",
+        "containers_info": "",
+        "container_running": "",
+        "in_memory_logs": "",
+        "jvm_memory_solr": "",
+        "last_modified": "",
+        "logs": "",
+        "memory": "",
+        "service": "",
+        "container_stopped": "",
+        "cores": "",
+        "current_time": "",
+        "disk_usage": "",
+        "docs": "",
+        "error_show_ip": "",
+        "external_logs": "",
+        "history_all_servers": "",
+        "login_time": ""
+    },
+    "oauth2": {
+        "deny": "",
+        "access_denied": "",
+        "authorize_app": "",
+        "permit": "",
+        "profile_desc": "",
+        "scope_ask_permission": "",
+        "profile": ""
+    },
+    "fido2": {
+        "confirm": "",
+        "fido2_auth": "",
+        "fido2_success": "",
+        "fido2_validation_failed": "",
+        "fn": "",
+        "known_ids": "",
+        "none": "",
+        "register_status": "",
+        "set_fido2": "",
+        "set_fido2_touchid": "",
+        "set_fn": "",
+        "start_fido2_validation": "",
+        "rename": ""
+    },
+    "warning": {
+        "quota_exceeded_scope": "",
+        "session_token": "",
+        "session_ua": "",
+        "no_active_admin": "",
+        "cannot_delete_self": "",
+        "domain_added_sogo_failed": "",
+        "dovecot_restart_failed": "",
+        "fuzzy_learn_error": "",
+        "hash_not_found": "",
+        "ip_invalid": "",
+        "is_not_primary_alias": ""
+    },
+    "datatables": {
+        "paginate": {
+            "next": "",
+            "first": "",
+            "last": "",
+            "previous": ""
+        },
+        "collapse_all": "",
+        "emptyTable": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "thousands": "",
+        "lengthMenu": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "expand_all": "",
+        "info": "",
+        "decimal": "",
+        "infoPostFix": ""
+    },
+    "diagnostics": {
+        "dns_records_24hours": "",
+        "dns_records_data": "",
+        "dns_records_status": "",
+        "dns_records_type": "",
+        "optional": "",
+        "dns_records_docs": "",
+        "dns_records": "",
+        "cname_from_a": "",
+        "dns_records_name": ""
+    },
+    "ratelimit": {
+        "disabled": "",
+        "second": "",
+        "minute": "",
+        "hour": "",
+        "day": ""
     }
 }

+ 1051 - 17
data/web/lang/lang.pt-pt.json

@@ -12,7 +12,7 @@
         "domain_quota_m": "Total de espaço por domínio (MiB):",
         "full_name": "Nome:",
         "mailbox_quota_m": "Máximo espaço por conta (MiB):",
-        "mailbox_username": "Usuário (primeira parte do endereço de email):",
+        "mailbox_username": "Utilizador (primeira parte do endereço de email):",
         "max_aliases": "Máximo de apelidos:",
         "max_mailboxes": "Máximo de contas:",
         "password": "Senha:",
@@ -27,7 +27,57 @@
         "target_address": "Encaminhar para:",
         "target_address_info": "<small>Endereço de email completo (separado por vírgulas).</small>",
         "target_domain": "Domínio de Destino:",
-        "username": "Administrador"
+        "username": "Administrador",
+        "dry": "",
+        "enc_method": "",
+        "exclude": "",
+        "gal": "",
+        "gal_info": "",
+        "generate": "",
+        "goto_ham": "",
+        "goto_spam": "",
+        "hostname": "",
+        "inactive": "",
+        "kind": "",
+        "mailbox_quota_def": "",
+        "mins_interval": "",
+        "multiple_bookings": "",
+        "nexthop": "",
+        "post_domain_add": "",
+        "private_comment": "",
+        "public_comment": "",
+        "sieve_desc": "",
+        "sieve_type": "",
+        "skipcrossduplicates": "",
+        "subscribeall": "",
+        "syncjob": "",
+        "syncjob_hint": "",
+        "tags": "",
+        "timeout1": "",
+        "timeout2": "",
+        "validate": "",
+        "validation_success": "",
+        "activate_filter_warn": "",
+        "add_domain_only": "",
+        "add_domain_restart": "",
+        "app_name": "",
+        "app_password": "",
+        "app_passwd_protocols": "",
+        "automap": "",
+        "bcc_dest_format": "",
+        "comment_info": "",
+        "custom_params": "",
+        "custom_params_hint": "",
+        "delete1": "",
+        "delete2": "",
+        "delete2duplicates": "",
+        "destination": "",
+        "disable_login": "",
+        "domain_matches_hostname": "",
+        "goto_null": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "relayhost_wrapped_tls_info": ""
     },
     "admin": {
         "access": "Acessos",
@@ -58,7 +108,219 @@
         "search_domain_da": "Selecione o(s) domínio(s)",
         "spamfilter": "Filtro de Spam",
         "unchanged_if_empty": "Deixar em branco para não alterar",
-        "username": "Administrador"
+        "username": "Administrador",
+        "lookup_mx": "",
+        "relayhosts": "",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "convert_html_to_text": "",
+        "host": "",
+        "html": "",
+        "import": "",
+        "import_private_key": "",
+        "nexthop": "",
+        "no": "",
+        "sal_level": "",
+        "copy_to_clipboard": "",
+        "cors_settings": "",
+        "customer_id": "",
+        "quarantine_notification_html": "",
+        "rspamd_settings_map": "",
+        "sender": "",
+        "credentials_transport_warning": "",
+        "customize": "",
+        "dkim_from": "",
+        "f2b_ban_time_increment": "",
+        "f2b_blacklist": "",
+        "f2b_filter": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "f2b_max_ban_time": "",
+        "f2b_netban_ipv4": "",
+        "f2b_netban_ipv6": "",
+        "f2b_parameters": "",
+        "f2b_regex_info": "",
+        "f2b_retry_window": "",
+        "f2b_whitelist": "",
+        "forwarding_hosts": "",
+        "forwarding_hosts_add_hint": "",
+        "forwarding_hosts_hint": "",
+        "from": "",
+        "generate": "",
+        "guid": "",
+        "hash_remove_info": "",
+        "help_text": "",
+        "in_use_by": "",
+        "inactive": "",
+        "include_exclude": "",
+        "include_exclude_info": "",
+        "includes": "",
+        "ip_check_opt_in": "",
+        "is_mx_based": "",
+        "last_applied": "",
+        "license_info": "",
+        "link": "",
+        "login_time": "",
+        "logo_info": "",
+        "main_name": "",
+        "merged_vars_hint": "",
+        "message_size": "",
+        "no_active_bans": "",
+        "no_new_rows": "",
+        "oauth2_apps": "",
+        "oauth2_add_client": "",
+        "oauth2_client_id": "",
+        "oauth2_client_secret": "",
+        "oauth2_info": "",
+        "oauth2_redirect_uri": "",
+        "priority": "",
+        "private_key": "",
+        "quarantine": "",
+        "quarantine_bcc": "",
+        "quarantine_exclude_domains": "",
+        "quarantine_max_age": "",
+        "quarantine_max_score": "",
+        "quarantine_max_size": "",
+        "quarantine_notification_sender": "",
+        "quarantine_notification_subject": "",
+        "quota_notification_sender": "",
+        "quota_notification_subject": "",
+        "quota_notifications": "",
+        "quota_notifications_info": "",
+        "quota_notifications_vars": "",
+        "queue_unban": "",
+        "rate_name": "",
+        "recipients": "",
+        "refresh": "",
+        "relayhosts_hint": "",
+        "remove_row": "",
+        "reset_default": "",
+        "reset_limit": "",
+        "routing": "",
+        "rsetting_add_rule": "",
+        "rsetting_content": "",
+        "rsetting_none": "",
+        "rsettings_insert_preset": "",
+        "rsettings_preset_1": "",
+        "rsettings_preset_2": "",
+        "rsettings_preset_3": "",
+        "rsettings_preset_4": "",
+        "rspamd_com_settings": "",
+        "rspamd_global_filters": "",
+        "rspamd_global_filters_agree": "",
+        "rspamd_global_filters_info": "",
+        "rspamd_global_filters_regex": "",
+        "service": "",
+        "service_id": "",
+        "source": "",
+        "subject": "",
+        "success": "",
+        "sys_mails": "",
+        "text": "",
+        "time": "",
+        "title": "",
+        "transport_dest_format": "",
+        "transport_test_rcpt_info": "",
+        "ui_header_announcement_active": "",
+        "ui_header_announcement_content": "",
+        "ui_header_announcement_help": "",
+        "ui_header_announcement_select": "",
+        "ui_header_announcement_type": "",
+        "ui_header_announcement_type_danger": "",
+        "ui_header_announcement_type_info": "",
+        "ui_header_announcement_type_warning": "",
+        "ui_texts": "",
+        "unban_pending": "",
+        "validate_license_now": "",
+        "verify": "",
+        "yes": "",
+        "api_read_write": "",
+        "f2b_list_info": "",
+        "f2b_max_attempts": "",
+        "activate_api": "",
+        "activate_send": "",
+        "active_rspamd_settings_map": "",
+        "add_admin": "",
+        "add_forwarding_host": "",
+        "add_relayhost": "",
+        "add_relayhost_hint": "",
+        "allowed_methods": "",
+        "allowed_origins": "",
+        "api_allow_from": "",
+        "api_info": "",
+        "api_read_only": "",
+        "api_skip_ip_check": "",
+        "app_links": "",
+        "app_name": "",
+        "apps_name": "",
+        "arrival_time": "",
+        "authed_user": "",
+        "ays": "",
+        "ban_list_info": "",
+        "change_logo": "",
+        "regen_api_key": "",
+        "regex_maps": "",
+        "relay_from": "",
+        "relay_rcpt": "",
+        "relay_run": "",
+        "transports_hint": "",
+        "ui_footer": "",
+        "ui_header_announcement": "",
+        "dkim_domains_wo_keys": "",
+        "ip_check": "",
+        "message": "",
+        "oauth2_renew_secret": "",
+        "oauth2_revoke_tokens": "",
+        "optional": "",
+        "options": "",
+        "password_length": "",
+        "password_policy": "",
+        "password_policy_chars": "",
+        "password_policy_length": "",
+        "password_policy_lowerupper": "",
+        "password_policy_numbers": "",
+        "password_policy_special_chars": "",
+        "title_name": "",
+        "to_top": "",
+        "transport_maps": "",
+        "upload": "",
+        "ip_check_disabled": "",
+        "duplicate_dkim": "",
+        "empty": "",
+        "excludes": "",
+        "f2b_ban_time": "",
+        "destination": "",
+        "dkim_domains_selector": "",
+        "dkim_from_title": "",
+        "dkim_key_missing": "",
+        "dkim_key_unused": "",
+        "dkim_key_valid": "",
+        "dkim_overwrite_key": "",
+        "dkim_private_key": "",
+        "dkim_to": "",
+        "dkim_to_title": "",
+        "domain_admin": "",
+        "domain_s": "",
+        "duplicate": "",
+        "guid_and_license": "",
+        "send": "",
+        "rsetting_desc": "",
+        "rsetting_no_selection": "",
+        "add_row": "",
+        "add_settings_rule": "",
+        "add_transport": "",
+        "add_transports_hint": "",
+        "additional_rows": "",
+        "admins": "",
+        "admins_ldap": "",
+        "advanced_settings": "",
+        "api_key": "",
+        "quarantine_redirect": "",
+        "quarantine_release_format": "",
+        "quarantine_release_format_att": "",
+        "quarantine_release_format_raw": "",
+        "quarantine_retention_size": "",
+        "quota_notification_html": ""
     },
     "danger": {
         "access_denied": "Acesso negado ou dados inválidos",
@@ -96,8 +358,100 @@
         "sender_acl_invalid": "Campo Sender ACL é inválido",
         "target_domain_invalid": "O endereço de Domínio Destino é inválido",
         "targetd_not_found": "Domínio de Destino não encontrado",
-        "username_invalid": "Nome de usuário inválido",
-        "validity_missing": "Você deve definir um período de validade"
+        "username_invalid": "Nome de utilizador inválido",
+        "validity_missing": "Você deve definir um período de validade",
+        "ip_list_empty": "",
+        "redis_error": "",
+        "targetd_relay_domain": "",
+        "unknown": "",
+        "app_passwd_id_invalid": "",
+        "tls_policy_map_entry_exists": "",
+        "img_invalid": "",
+        "demo_mode_enabled": "",
+        "description_invalid": "",
+        "webauthn_username_failed": "",
+        "bcc_empty": "",
+        "bcc_exists": "",
+        "bcc_must_be_email": "",
+        "comment_too_long": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "defquota_empty": "",
+        "dkim_domain_or_sel_exists": "",
+        "domain_cannot_match_hostname": "",
+        "extended_sender_acl_denied": "",
+        "extra_acl_invalid": "",
+        "extra_acl_invalid_domain": "",
+        "fido2_verification_failed": "",
+        "file_open_error": "",
+        "filter_type": "",
+        "from_invalid": "",
+        "global_filter_write_error": "",
+        "global_map_invalid": "",
+        "global_map_write_error": "",
+        "ham_learn_error": "",
+        "imagick_exception": "",
+        "mysql_error": "",
+        "unknown_tfa_method": "",
+        "maxquota_empty": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "img_tmp_missing": "",
+        "invalid_bcc_map_type": "",
+        "invalid_destination": "",
+        "invalid_filter_type": "",
+        "invalid_host": "",
+        "invalid_nexthop_authenticated": "",
+        "invalid_recipient_map_old": "",
+        "mailbox_defquota_exceeds_mailbox_maxquota": "",
+        "malformed_username": "",
+        "map_content_empty": "",
+        "max_alias_exceeded": "",
+        "network_host_invalid": "",
+        "next_hop_interferes": "",
+        "next_hop_interferes_any": "",
+        "nginx_reload_failed": "",
+        "no_user_defined": "",
+        "policy_list_from_exists": "",
+        "policy_list_from_invalid": "",
+        "private_key_error": "",
+        "pushover_credentials_missing": "",
+        "pushover_key": "",
+        "pushover_token": "",
+        "recipient_map_entry_exists": "",
+        "relayhost_invalid": "",
+        "reset_f2b_regex": "",
+        "resource_invalid": "",
+        "rl_timeframe": "",
+        "rspamd_ui_pw_length": "",
+        "script_empty": "",
+        "set_acl_failed": "",
+        "settings_map_invalid": "",
+        "sieve_error": "",
+        "spam_learn_error": "",
+        "subject_empty": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "template_name_invalid": "",
+        "temp_error": "",
+        "text_empty": "",
+        "tfa_token_invalid": "",
+        "tls_policy_map_dest_invalid": "",
+        "tls_policy_map_parameter_invalid": "",
+        "totp_verification_failed": "",
+        "webauthn_verification_failed": "",
+        "webauthn_authenticator_failed": "",
+        "webauthn_publickey_failed": "",
+        "unlimited_quota_acl": "",
+        "value_missing": "",
+        "release_send_failed": "",
+        "last_key": "",
+        "app_name_empty": "",
+        "invalid_mime_type": "",
+        "invalid_nexthop": "",
+        "invalid_recipient_map_new": "",
+        "yotp_verification_failed": "",
+        "transport_dest_exists": ""
     },
     "edit": {
         "active": "Ativo",
@@ -129,25 +483,147 @@
         "target_domain": "Domínio de Destino:",
         "title": "Editar dos Objetos",
         "unchanged_if_empty": "Deixar em branco para não modificar",
-        "username": "Administrador"
+        "username": "Administrador",
+        "lookup_mx": "",
+        "footer_exclude": "",
+        "generate": "",
+        "grant_types": "",
+        "hostname": "",
+        "inactive": "",
+        "kind": "",
+        "last_modified": "",
+        "mailbox_quota_def": "",
+        "mailbox_relayhost_info": "",
+        "maxage": "",
+        "maxbytespersecond": "",
+        "domain_footer_skip_replies": "",
+        "encryption": "",
+        "exclude": "",
+        "extended_sender_acl": "",
+        "sieve_desc": "",
+        "sieve_type": "",
+        "skipcrossduplicates": "",
+        "sogo_access": "",
+        "sogo_access_info": "",
+        "sogo_visible": "",
+        "custom_attributes": "",
+        "delete2": "",
+        "delete2duplicates": "",
+        "delete_ays": "",
+        "ratelimit": "",
+        "redirect_uri": "",
+        "syncjob": "",
+        "nexthop": "",
+        "domain_footer_info_vars": {
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": "",
+            "custom": "",
+            "auth_user": ""
+        },
+        "domain_footer_plain": "",
+        "extended_sender_acl_info": "",
+        "force_pw_update": "",
+        "pushover_evaluate_x_prio": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "none_inherit": "",
+        "acl": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "app_passwd": "",
+        "app_passwd_protocols": "",
+        "automap": "",
+        "bcc_dest_format": "",
+        "client_id": "",
+        "client_secret": "",
+        "comment_info": "",
+        "created_on": "",
+        "delete1": "",
+        "disable_login": "",
+        "domain_footer_info": "",
+        "force_pw_update_info": "",
+        "mbox_rl_info": "",
+        "mins_interval": "",
+        "multiple_bookings": "",
+        "private_comment": "",
+        "public_comment": "",
+        "pushover": "",
+        "gal": "",
+        "gal_info": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "quota_warning_bcc": "",
+        "quota_warning_bcc_info": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "relayhost": "",
+        "resource": "",
+        "scope": "",
+        "sender_acl_disabled": "",
+        "sender_acl_info": "",
+        "sogo_visible_info": "",
+        "spam_alias": "",
+        "spam_filter": "",
+        "spam_policy": "",
+        "spam_score": "",
+        "subfolder2": "",
+        "timeout1": "",
+        "timeout2": "",
+        "validate_save": "",
+        "admin": "",
+        "advanced_settings": "",
+        "allow_from_smtp": "",
+        "app_name": ""
     },
     "footer": {
-        "loading": "Aguarde..."
+        "loading": "Aguarde...",
+        "restart_container": "",
+        "delete_these_items": "",
+        "hibp_check": "",
+        "confirm_delete": "",
+        "nothing_selected": "",
+        "restart_container_info": "",
+        "cancel": "",
+        "delete_now": "",
+        "restart_now": "",
+        "restarting_container": "",
+        "hibp_nok": "",
+        "hibp_ok": ""
     },
     "header": {
         "administration": "Administração",
         "email": "E-Mail",
         "mailcow_config": "Configuração",
-        "user_settings": "Configurações do usuário"
+        "user_settings": "Configurações do utilizador",
+        "debug": "",
+        "mailcow_system": "",
+        "quarantine": "",
+        "restart_netfilter": "",
+        "restart_sogo": "",
+        "apps": ""
     },
     "info": {
-        "no_action": "Nenhuma ação foi definida"
+        "no_action": "Nenhuma ação foi definida",
+        "awaiting_tfa_confirmation": "",
+        "session_expires": ""
     },
     "login": {
         "delayed": "Sua entrada será atrasada por %s segundos.",
         "login": "Entrar",
         "password": "Senha",
-        "username": "Usuário"
+        "username": "Utilizador",
+        "fido2_webauthn": "",
+        "mobileconfig_info": "",
+        "other_logins": ""
     },
     "mailbox": {
         "action": "Ação",
@@ -186,20 +662,218 @@
         "target_domain": "Domínio Destino",
         "tls_enforce_in": "Forçar TLS na entrada",
         "tls_enforce_out": "Forçar TLS na saída",
-        "username": "Usuário"
+        "username": "Utilizador",
+        "disable_login": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "disable_x": "",
+        "q_add_header": "",
+        "add_tls_policy_map": "",
+        "address_rewriting": "",
+        "inactive": "",
+        "sieve_preset_header": "",
+        "sogo_visible": "",
+        "sogo_visible_n": "",
+        "sogo_visible_y": "",
+        "spam_aliases": "",
+        "stats": "",
+        "status": "",
+        "sync_jobs": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "table_size": "",
+        "yes": "",
+        "insert_preset": "",
+        "kind": "",
+        "last_mail_login": "",
+        "quarantine_notification": "",
+        "quick_actions": "",
+        "recipient": "",
+        "add_domain_record_first": "",
+        "empty": "",
+        "recipient_map": "",
+        "templates": "",
+        "template": "",
+        "weekly": "",
+        "public_comment": "",
+        "filters": "",
+        "force_pw_update": "",
+        "gal": "",
+        "recipient_map_new_info": "",
+        "recipient_map_old": "",
+        "recipient_map_old_info": "",
+        "relay_unknown": "",
+        "activate": "",
+        "add_alias_expand": "",
+        "add_filter": "",
+        "add_recipient_map_entry": "",
+        "add_resource": "",
+        "add_template": "",
+        "alias_domain_alias_hint": "",
+        "alias_domain_backupmx": "",
+        "all_domains": "",
+        "allow_from_smtp": "",
+        "allowed_protocols": "",
+        "bcc": "",
+        "bcc_destination": "",
+        "bcc_info": "",
+        "bcc_map": "",
+        "bcc_map_type": "",
+        "bcc_maps": "",
+        "bcc_rcpt_map": "",
+        "bcc_sender_map": "",
+        "bcc_to_rcpt": "",
+        "bcc_to_sender": "",
+        "bcc_type": "",
+        "booking_null": "",
+        "booking_0_short": "",
+        "booking_custom": "",
+        "booking_custom_short": "",
+        "booking_ltnull": "",
+        "booking_lt0_short": "",
+        "catch_all": "",
+        "created_on": "",
+        "daily": "",
+        "deactivate": "",
+        "dkim_domains_selector": "",
+        "domain_templates": "",
+        "enable_x": "",
+        "excludes": "",
+        "goto_ham": "",
+        "goto_spam": "",
+        "hourly": "",
+        "last_modified": "",
+        "last_pw_change": "",
+        "last_run": "",
+        "last_run_reset": "",
+        "mailbox": "",
+        "mailbox_defaults": "",
+        "mailbox_defaults_info": "",
+        "mailbox_defquota": "",
+        "mailbox_templates": "",
+        "mins_interval": "",
+        "multiple_bookings": "",
+        "never": "",
+        "no": "",
+        "open_logs": "",
+        "owner": "",
+        "private_comment": "",
+        "q_all": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "recipient_map_info": "",
+        "recipient_map_new": "",
+        "running": "",
+        "sender": "",
+        "set_postfilter": "",
+        "set_prefilter": "",
+        "sieve_info": "",
+        "sieve_preset_1": "",
+        "sieve_preset_2": "",
+        "sieve_preset_3": "",
+        "sieve_preset_4": "",
+        "sieve_preset_5": "",
+        "sieve_preset_6": "",
+        "sieve_preset_7": "",
+        "sieve_preset_8": "",
+        "table_size_show_n": "",
+        "tls_map_dest": "",
+        "tls_map_dest_info": "",
+        "tls_map_parameters": "",
+        "tls_map_parameters_info": "",
+        "tls_map_policy": "",
+        "tls_policy_maps": "",
+        "tls_policy_maps_enforced_tls": "",
+        "tls_policy_maps_info": "",
+        "tls_policy_maps_long": "",
+        "toggle_all": "",
+        "waiting": "",
+        "resources": "",
+        "bcc_local_dest": "",
+        "recipient_maps": "",
+        "add_bcc_entry": "",
+        "allow_from_smtp_info": "",
+        "bcc_destinations": ""
     },
     "quarantine": {
         "action": "Ação",
-        "remove": "Remover"
+        "remove": "Remover",
+        "empty": "",
+        "high_danger": "",
+        "medium_danger": "",
+        "danger": "",
+        "info": "",
+        "junk_folder": "",
+        "qinfo": "",
+        "qitem": "",
+        "quarantine": "",
+        "quick_actions": "",
+        "quick_delete_link": "",
+        "quick_info_link": "",
+        "quick_release_link": "",
+        "received": "",
+        "recipients": "",
+        "refresh": "",
+        "spam": "",
+        "atts": "",
+        "learn_spam_delete": "",
+        "check_hash": "",
+        "confirm": "",
+        "confirm_delete": "",
+        "deliver_inbox": "",
+        "disabled_by_config": "",
+        "download_eml": "",
+        "low_danger": "",
+        "neutral_danger": "",
+        "notified": "",
+        "qhandler_success": "",
+        "qid": "",
+        "rcpt": "",
+        "rejected": "",
+        "release": "",
+        "release_body": "",
+        "release_subject": "",
+        "rewrite_subject": "",
+        "rspamd_result": "",
+        "sender": "",
+        "sender_header": "",
+        "settings_info": "",
+        "show_item": "",
+        "spam_score": "",
+        "subj": "",
+        "table_size_show_n": "",
+        "text_from_html_content": "",
+        "text_plain_content": "",
+        "toggle_all": "",
+        "type": "",
+        "table_size": ""
     },
     "queue": {
-        "queue_manager": "Queue Manager"
+        "queue_manager": "Queue Manager",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": ""
     },
     "start": {
         "help": "Mostrar/Ocultar painel de ajuda",
         "imap_smtp_server_auth_info": "Utilize o endereço de email completo com o método de autentucação PLAIN.<br>\r\nOs dados de login serão encryptados pelo servidor.",
         "mailcow_apps_detail": "Use um mailcow app para acessar seus emails, calendário, contatos e outras informações.",
-        "mailcow_panel_detail": "<b>Administradores:</b> podem criar, alterar ou apagar contas e apelidos , alterar domínios e outras informações de seus domínios atribuídos.<br>\r\n\t<b>Usuários:</b> podem criar apelidos por tempo determinado , alterar senha e configuração do nível do filtro de spam."
+        "mailcow_panel_detail": "<b>Administradores:</b> podem criar, alterar ou apagar contas e apelidos , alterar domínios e outras informações de seus domínios atribuídos.<br>\r\n\t<b>utilizadors:</b> podem criar apelidos por tempo determinado , alterar senha e configuração do nível do filtro de spam."
     },
     "success": {
         "admin_modified": "Administrador alterado com sucesso",
@@ -220,7 +894,72 @@
         "mailbox_added": "Conta %s adicionada com sucesso",
         "mailbox_modified": "A conta %s foi alterada com sucesso",
         "mailbox_removed": "Conta %s removida com sucesso",
-        "resource_modified": "A conta %s foi alterada com sucesso"
+        "resource_modified": "A conta %s foi alterada com sucesso",
+        "forwarding_host_added": "",
+        "upload_success": "",
+        "verified_totp_login": "",
+        "verified_webauthn_login": "",
+        "verified_yotp_login": "",
+        "verified_fido2_login": "",
+        "nginx_reloaded": "",
+        "hash_deleted": "",
+        "object_modified": "",
+        "password_policy_saved": "",
+        "pushover_settings_edited": "",
+        "qlearn_spam": "",
+        "queue_command_success": "",
+        "recipient_map_entry_deleted": "",
+        "recipient_map_entry_saved": "",
+        "relayhost_added": "",
+        "relayhost_removed": "",
+        "tls_policy_map_entry_saved": "",
+        "ui_texts": "",
+        "delete_filter": "",
+        "acl_saved": "",
+        "admin_added": "",
+        "admin_api_modified": "",
+        "admin_removed": "",
+        "app_links": "",
+        "app_passwd_added": "",
+        "app_passwd_removed": "",
+        "bcc_deleted": "",
+        "bcc_edited": "",
+        "bcc_saved": "",
+        "cors_headers_edited": "",
+        "db_init_complete": "",
+        "delete_filters": "",
+        "deleted_syncjob": "",
+        "deleted_syncjobs": "",
+        "domain_add_dkim_available": "",
+        "dkim_duplicated": "",
+        "domain_footer_modified": "",
+        "dovecot_restart_success": "",
+        "eas_reset": "",
+        "f2b_banlist_refreshed": "",
+        "f2b_modified": "",
+        "forwarding_host_removed": "",
+        "global_filter_written": "",
+        "ip_check_opt_in_modified": "",
+        "item_deleted": "",
+        "item_released": "",
+        "items_deleted": "",
+        "items_released": "",
+        "learned_ham": "",
+        "license_modified": "",
+        "logged_in_as": "",
+        "reset_main_logo": "",
+        "resource_added": "",
+        "resource_removed": "",
+        "rl_saved": "",
+        "rspamd_ui_pw_set": "",
+        "saved_settings": "",
+        "settings_map_added": "",
+        "sogo_profile_reset": "",
+        "template_added": "",
+        "template_modified": "",
+        "template_removed": "",
+        "tls_policy_map_entry_deleted": "",
+        "settings_map_removed": ""
     },
     "user": {
         "action": "Ação",
@@ -267,9 +1006,304 @@
         "tls_enforce_out": "Forçar TLS na saída",
         "tls_policy": "Regras de Encryptação",
         "tls_policy_warning": "<strong>Aviso:</strong> Se você selecionar para forçar o envio encryptado , alguns emails poderão ser rejeitados.<br>Mensages que não satisfizerem as politicas dos outros servidores serão rejeitadas definitivamente.",
-        "user_settings": "Configurações do usuário",
+        "user_settings": "Configurações do utilizador",
         "username": "Administrador",
         "week": "Semana",
-        "weeks": "Semanas"
+        "weeks": "Semanas",
+        "clear_recent_successful_connections": "",
+        "created_on": "",
+        "q_add_header": "",
+        "q_all": "",
+        "change_password_hint_app_passwords": "",
+        "password_repeat": "",
+        "pushover_evaluate_x_prio": "",
+        "tag_in_subject": "",
+        "app_name": "",
+        "years": "",
+        "value": "",
+        "encryption": "",
+        "excludes": "",
+        "expire_in": "",
+        "fido2_webauthn": "",
+        "from": "",
+        "generate": "",
+        "hourly": "",
+        "direct_aliases": "",
+        "email_and_dav": "",
+        "attribute": "",
+        "app_hint": "",
+        "direct_aliases_desc": "",
+        "direct_protocol_access": "",
+        "eas_reset": "",
+        "eas_reset_help": "",
+        "eas_reset_now": "",
+        "email": "",
+        "empty": "",
+        "in_use": "",
+        "interval": "",
+        "is_catch_all": "",
+        "last_mail_login": "",
+        "last_pw_change": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "password": "",
+        "active_sieve": "",
+        "advanced_settings": "",
+        "aliases_also_send_as": "",
+        "allowed_protocols": "",
+        "apple_connection_profile": "",
+        "apple_connection_profile_complete": "",
+        "apple_connection_profile_mailonly": "",
+        "apple_connection_profile_with_app_password": "",
+        "client_configuration": "",
+        "create_app_passwd": "",
+        "create_syncjob": "",
+        "daily": "",
+        "delete_ays": "",
+        "force_pw_update": "",
+        "last_run": "",
+        "last_ui_login": "",
+        "loading": "",
+        "login_history": "",
+        "mailbox": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "messages": "",
+        "month": "",
+        "months": "",
+        "never": "",
+        "no_active_filter": "",
+        "no_last_login": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_category_info": "",
+        "quarantine_notification": "",
+        "quarantine_notification_info": "",
+        "recent_successful_connections": "",
+        "running": "",
+        "save": "",
+        "sender_acl_disabled": "",
+        "shared_aliases": "",
+        "shared_aliases_desc": "",
+        "show_sieve_filters": "",
+        "sogo_profile_reset": "",
+        "sogo_profile_reset_help": "",
+        "sogo_profile_reset_now": "",
+        "spam_score_reset": "",
+        "spamfilter_table_domain_policy": "",
+        "status": "",
+        "sync_jobs": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "tag_handling": "",
+        "tag_help_example": "",
+        "tag_help_explain": "",
+        "tag_in_none": "",
+        "tag_in_subfolder": "",
+        "text": "",
+        "title": "",
+        "verify": "",
+        "waiting": "",
+        "weekly": "",
+        "with_app_password": "",
+        "year": "",
+        "app_passwds": ""
+    },
+    "datatables": {
+        "decimal": "",
+        "infoPostFix": "",
+        "paginate": {
+            "first": "",
+            "last": "",
+            "next": "",
+            "previous": ""
+        },
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "thousands": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "collapse_all": "",
+        "emptyTable": "",
+        "expand_all": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "lengthMenu": "",
+        "zeroRecords": ""
+    },
+    "debug": {
+        "external_logs": "",
+        "current_time": "",
+        "architecture": "",
+        "cores": "",
+        "chart_this_server": "",
+        "containers_info": "",
+        "container_running": "",
+        "container_disabled": "",
+        "container_stopped": "",
+        "disk_usage": "",
+        "docs": "",
+        "error_show_ip": "",
+        "history_all_servers": "",
+        "timezone": "",
+        "uptime": "",
+        "wip": "",
+        "in_memory_logs": "",
+        "jvm_memory_solr": "",
+        "last_modified": "",
+        "log_info": "",
+        "login_time": "",
+        "logs": "",
+        "memory": "",
+        "online_users": "",
+        "restart_container": "",
+        "service": "",
+        "show_ip": "",
+        "size": "",
+        "solr_dead": "",
+        "solr_status": "",
+        "started_at": "",
+        "started_on": "",
+        "static_logs": "",
+        "success": "",
+        "system_containers": "",
+        "update_available": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "username": ""
+    },
+    "oauth2": {
+        "deny": "",
+        "permit": "",
+        "profile": "",
+        "profile_desc": "",
+        "access_denied": "",
+        "authorize_app": "",
+        "scope_ask_permission": ""
+    },
+    "warning": {
+        "session_ua": "",
+        "ip_invalid": "",
+        "is_not_primary_alias": "",
+        "cannot_delete_self": "",
+        "domain_added_sogo_failed": "",
+        "dovecot_restart_failed": "",
+        "fuzzy_learn_error": "",
+        "hash_not_found": "",
+        "no_active_admin": "",
+        "quota_exceeded_scope": "",
+        "session_token": ""
+    },
+    "tfa": {
+        "webauthn": "",
+        "authenticators": "",
+        "api_register": "",
+        "confirm": "",
+        "confirm_totp_token": "",
+        "delete_tfa": "",
+        "disable_tfa": "",
+        "enter_qr_code": "",
+        "error_code": "",
+        "init_webauthn": "",
+        "key_id": "",
+        "key_id_totp": "",
+        "none": "",
+        "reload_retry": "",
+        "scan_qr_code": "",
+        "select": "",
+        "waiting_usb_auth": "",
+        "yubi_otp": "",
+        "set_tfa": "",
+        "start_webauthn_validation": "",
+        "tfa": "",
+        "tfa_token_invalid": "",
+        "totp": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": "",
+        "waiting_usb_register": ""
+    },
+    "fido2": {
+        "fido2_success": "",
+        "fido2_validation_failed": "",
+        "start_fido2_validation": "",
+        "confirm": "",
+        "fido2_auth": "",
+        "fn": "",
+        "register_status": "",
+        "rename": "",
+        "set_fido2": "",
+        "set_fido2_touchid": "",
+        "set_fn": "",
+        "known_ids": "",
+        "none": ""
+    },
+    "diagnostics": {
+        "optional": "",
+        "dns_records_24hours": "",
+        "dns_records_data": "",
+        "dns_records_name": "",
+        "dns_records_status": "",
+        "dns_records_type": "",
+        "dns_records_docs": "",
+        "cname_from_a": "",
+        "dns_records": ""
+    },
+    "ratelimit": {
+        "disabled": "",
+        "second": "",
+        "minute": "",
+        "hour": "",
+        "day": ""
+    },
+    "acl": {
+        "syncjobs": "",
+        "delimiter_action": "",
+        "domain_desc": "",
+        "domain_relayhost": "",
+        "eas_reset": "",
+        "extend_sender_acl": "",
+        "login_as": "",
+        "mailbox_relayhost": "",
+        "prohibited": "",
+        "protocol_access": "",
+        "pushover": "",
+        "quarantine": "",
+        "quarantine_attachments": "",
+        "quarantine_category": "",
+        "quarantine_notification": "",
+        "recipient_maps": "",
+        "smtp_ip_access": "",
+        "sogo_access": "",
+        "sogo_profile_reset": "",
+        "spam_alias": "",
+        "spam_policy": "",
+        "spam_score": "",
+        "tls_policy": "",
+        "unlimited_quota": "",
+        "ratelimit": "",
+        "alias_domains": "",
+        "app_passwds": "",
+        "bcc_maps": "",
+        "filters": ""
     }
 }

+ 108 - 12
data/web/lang/lang.ro-ro.json

@@ -107,7 +107,8 @@
         "username": "Nume de utilizator",
         "validate": "Validează",
         "validation_success": "Validat cu succes",
-        "tags": "Etichete"
+        "tags": "Etichete",
+        "dry": ""
     },
     "admin": {
         "access": "Acces",
@@ -343,7 +344,14 @@
         "ip_check_disabled": "Verificarea IP este dezactivată. Puteţi activa la<br> <strong>Sistem > Configuraţie > Opţiuni > Personalizează</strong>",
         "ip_check_opt_in": "Alegeţi să folosiţi servicile <strong>ipv4.mailcow.email</strong> şi <strong>ipv6.mailcow.email</strong> să rezolvaţi addrese IP externale.",
         "options": "Opţiuni",
-        "queue_unban": "retractează interzicere"
+        "queue_unban": "retractează interzicere",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "allowed_methods": "",
+        "copy_to_clipboard": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "allowed_origins": ""
     },
     "danger": {
         "access_denied": "Accesul a fost respins sau datele formularului sunt invalide",
@@ -471,7 +479,10 @@
         "extended_sender_acl_denied": "lipseşte ACL pentru setarea adrese externe",
         "template_exists": "Şablon %s deja există",
         "template_id_invalid": "Şablon ID %s este invalid",
-        "template_name_invalid": "Nume de şablon este invalid"
+        "template_name_invalid": "Nume de şablon este invalid",
+        "cors_invalid_origin": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": ""
     },
     "debug": {
         "chart_this_server": "Grafic (acest server)",
@@ -498,7 +509,21 @@
         "success": "Succes",
         "system_containers": "Sistem și Containere",
         "uptime": "Timp de funcționare",
-        "username": "Utilizator"
+        "username": "Utilizator",
+        "architecture": "",
+        "container_running": "",
+        "show_ip": "",
+        "wip": "",
+        "error_show_ip": "",
+        "memory": "",
+        "timezone": "",
+        "update_available": "",
+        "no_update_available": "",
+        "update_failed": "",
+        "container_disabled": "",
+        "container_stopped": "",
+        "cores": "",
+        "current_time": ""
     },
     "diagnostics": {
         "cname_from_a": "Valoare derivată din înregistrarea A/AAAA. Acest lucru este acceptat atâta timp cât înregistrarea indică resursele corecte.",
@@ -624,7 +649,23 @@
         "title": "Editează obiectul",
         "unchanged_if_empty": "Dacă rămâne neschimbat se lasă necompletat",
         "username": "Nume de utilizator",
-        "validate_save": "Validează și salvează"
+        "validate_save": "Validează și salvează",
+        "footer_exclude": "",
+        "domain_footer_skip_replies": "",
+        "custom_attributes": "",
+        "domain_footer_info_vars": {
+            "custom": "",
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": ""
+        },
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_info": "",
+        "domain_footer_plain": "",
+        "pushover_sound": ""
     },
     "fido2": {
         "set_fn": "Setați un nume prietenos",
@@ -665,7 +706,8 @@
         "quarantine": "Carantină",
         "restart_netfilter": "Repornire netfilter",
         "restart_sogo": "Repornire SOGo",
-        "user_settings": "Setări utilizator"
+        "user_settings": "Setări utilizator",
+        "mailcow_system": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "În așteptarea confirmării TFA",
@@ -848,7 +890,13 @@
         "username": "Nume de utilizator",
         "waiting": "Aşteptare",
         "weekly": "Săptămânal",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "mailbox_templates": "",
+        "template": "",
+        "templates": "",
+        "add_template": "",
+        "domain_templates": "",
+        "relay_unknown": ""
     },
     "oauth2": {
         "access_denied": "Conectează-te ca proprietar al cutiei poștale pentru a acorda acces prin OAuth2.",
@@ -913,7 +961,20 @@
         "toggle_all": "Comută toate"
     },
     "queue": {
-        "queue_manager": "Manager de coadă"
+        "queue_manager": "Manager de coadă",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": "",
+        "delete": "",
+        "flush": "",
+        "ays": "",
+        "deliver_mail": "",
+        "info": "",
+        "legend": ""
     },
     "ratelimit": {
         "disabled": "Dezactivat",
@@ -1005,7 +1066,14 @@
         "verified_webauthn_login": "Autentificarea WebAuthn verificată",
         "verified_fido2_login": "Conectare FIDO2 verificată",
         "verified_yotp_login": "Autentificarea Yubico OTP verificată",
-        "domain_add_dkim_available": "O cheie DKIM deja a existat"
+        "domain_add_dkim_available": "O cheie DKIM deja a existat",
+        "domain_footer_modified": "",
+        "f2b_banlist_refreshed": "",
+        "ip_check_opt_in_modified": "",
+        "cors_headers_edited": "",
+        "template_added": "",
+        "template_modified": "",
+        "template_removed": ""
     },
     "tfa": {
         "api_register": "%s utilizează API-ul Yubico Cloud. Obțineți o cheie API pentru cheia dvs. de <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">aici</a>",
@@ -1030,7 +1098,10 @@
         "webauthn": "Autentificare WebAuthn",
         "waiting_usb_auth": "<i>În așteptarea dispozitivului USB...</i><br><br>Apasă acum butonul de pe dispozitivul tău USB WebAuthn.",
         "waiting_usb_register": "<i>În așteptarea dispozitivului USB...</i><br><br>Introdu parola ta mai sus și confirmă înregistrarea ta WebAuthn atingând butonul de pe dispozitivul tău USB WebAuthn.",
-        "yubi_otp": "Autentificare Yubico OTP"
+        "yubi_otp": "Autentificare Yubico OTP",
+        "authenticators": "",
+        "u2f_deprecated_important": "",
+        "u2f_deprecated": ""
     },
     "user": {
         "action": "Acțiune",
@@ -1191,7 +1262,10 @@
         "weeks": "săptămâni",
         "with_app_password": "cu parola aplicație",
         "year": "an",
-        "years": "ani"
+        "years": "ani",
+        "attribute": "",
+        "pushover_sound": "",
+        "value": ""
     },
     "warning": {
         "cannot_delete_self": "Nu se poate șterge utilizatorul conectat",
@@ -1208,6 +1282,28 @@
     },
     "datatables": {
         "expand_all": "Expandează tot",
-        "decimal": ","
+        "decimal": ",",
+        "infoPostFix": "",
+        "emptyTable": "",
+        "thousands": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": "",
+        "lengthMenu": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "paginate": {
+            "first": "",
+            "last": "",
+            "next": "",
+            "previous": ""
+        },
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "collapse_all": ""
     }
 }

+ 91 - 11
data/web/lang/lang.ru-ru.json

@@ -348,7 +348,10 @@
         "ip_check_opt_in": "Согласие на использование сторонних служб <strong>ipv4.mailcow.email</strong> и <strong>ipv6.mailcow.email</strong> для разрешения внешних IP-адресов.",
         "f2b_manage_external": "Внешнее управление Fail2Ban",
         "f2b_manage_external_info": "Fail2ban по-прежнему будет вести банлист, но не будет активно устанавливать правила для блокировки трафика. Используйте сгенерированный ниже банлист для внешнего блокирования трафика.",
-        "copy_to_clipboard": "Текст скопирован в буфер обмена!"
+        "copy_to_clipboard": "Текст скопирован в буфер обмена!",
+        "logo_normal_label": "",
+        "logo_dark_label": "",
+        "options": ""
     },
     "danger": {
         "access_denied": "Доступ запрещён, или указаны неверные данные",
@@ -470,7 +473,16 @@
         "yotp_verification_failed": "Ошибка валидации Yubico OTP: %s",
         "cors_invalid_method": "Указан недопустимый метод разрешения",
         "demo_mode_enabled": "Демонстрационный режим включен",
-        "cors_invalid_origin": "Указан неверный Allow-Origin"
+        "cors_invalid_origin": "Указан неверный Allow-Origin",
+        "webauthn_authenticator_failed": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "webauthn_publickey_failed": "",
+        "webauthn_username_failed": "",
+        "extended_sender_acl_denied": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "template_name_invalid": ""
     },
     "debug": {
         "chart_this_server": "Диаграмма (текущий сервер)",
@@ -497,7 +509,21 @@
         "success": "Успех",
         "system_containers": "Система и контейнеры",
         "uptime": "Время работы",
-        "username": "Имя пользователя"
+        "username": "Имя пользователя",
+        "wip": "",
+        "architecture": "",
+        "container_running": "",
+        "container_disabled": "",
+        "container_stopped": "",
+        "cores": "",
+        "current_time": "",
+        "error_show_ip": "",
+        "memory": "",
+        "show_ip": "",
+        "timezone": "",
+        "update_available": "",
+        "no_update_available": "",
+        "update_failed": ""
     },
     "diagnostics": {
         "cname_from_a": "Значение, полученное из записи A/AAAA. Это поддерживается до тех пор, пока запись указывает на правильный ресурс.",
@@ -636,7 +662,10 @@
         "domain_footer": "Нижний колонтитул домена",
         "domain_footer_html": "HTML нижний колонтитул",
         "domain_footer_plain": "ПРОСТОЙ нижний колонтитул",
-        "custom_attributes": "Пользовательские атрибуты"
+        "custom_attributes": "Пользовательские атрибуты",
+        "domain_footer_skip_replies": "",
+        "pushover_sound": "",
+        "sogo_access": ""
     },
     "fido2": {
         "confirm": "Подтвердить",
@@ -677,7 +706,8 @@
         "quarantine": "Карантин",
         "restart_netfilter": "Перезапустить netfilter",
         "restart_sogo": "Перезапустить SOGo",
-        "user_settings": "Настройки пользователя"
+        "user_settings": "Настройки пользователя",
+        "mailcow_system": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "В ожидании подтверждения TFA",
@@ -860,7 +890,13 @@
         "username": "Имя пользователя",
         "waiting": "В ожидании",
         "weekly": "Раз в неделю",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "domain_templates": "",
+        "add_template": "",
+        "mailbox_templates": "",
+        "relay_unknown": "",
+        "templates": "",
+        "template": ""
     },
     "oauth2": {
         "access_denied": "Пожалуйста, войдите в систему как владелец почтового аккаунта, чтобы получить доступ через OAuth2.",
@@ -925,7 +961,20 @@
         "type": "Тип"
     },
     "queue": {
-        "queue_manager": "Очередь на отправку"
+        "queue_manager": "Очередь на отправку",
+        "delete": "",
+        "info": "",
+        "unhold_mail_legend": "",
+        "flush": "",
+        "legend": "",
+        "ays": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": ""
     },
     "ratelimit": {
         "disabled": "Отключен",
@@ -1019,7 +1068,12 @@
         "verified_yotp_login": "Авторизация Yubico OTP пройдена",
         "cors_headers_edited": "Настройки CORS сохранены",
         "domain_footer_modified": "Изменения в нижнем колонтитуле домена %s сохранены",
-        "f2b_banlist_refreshed": "Идентификатор банлиста был успешно обновлен."
+        "f2b_banlist_refreshed": "Идентификатор банлиста был успешно обновлен.",
+        "domain_add_dkim_available": "",
+        "ip_check_opt_in_modified": "",
+        "template_added": "",
+        "template_modified": "",
+        "template_removed": ""
     },
     "tfa": {
         "api_register": "%s использует Yubico Cloud API. Пожалуйста, получите ключ API для вашего ключа <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">здесь</a>",
@@ -1045,7 +1099,9 @@
         "waiting_usb_auth": "<i>Ожидание устройства USB...</i><br><br>Пожалуйста, нажмите кнопку на USB устройстве сейчас.",
         "waiting_usb_register": "<i>Ожидание устройства USB...</i><br><br>Пожалуйста, введите пароль выше и подтвердите регистрацию, нажав кнопку на USB устройстве.",
         "yubi_otp": "Yubico OTP аутентификация",
-        "u2f_deprecated": "Похоже, что ваш ключ был зарегистрирован с использованием устаревшего метода U2F. Мы деактивируем для вас двухфакторную аутентификацию и удалим ваш ключ."
+        "u2f_deprecated": "Похоже, что ваш ключ был зарегистрирован с использованием устаревшего метода U2F. Мы деактивируем для вас двухфакторную аутентификацию и удалим ваш ключ.",
+        "authenticators": "",
+        "u2f_deprecated_important": ""
     },
     "user": {
         "action": "Действия",
@@ -1208,7 +1264,8 @@
         "with_app_password": "с паролем приложения",
         "change_password_hint_app_passwords": "В вашей учетной записи есть {{number_of_app_passwords}} паролей приложений, которые не будут изменены. Чтобы управлять ими, перейдите на вкладку \"Пароли приложений\".",
         "attribute": "Атрибут",
-        "value": "Значение"
+        "value": "Значение",
+        "pushover_sound": ""
     },
     "warning": {
         "cannot_delete_self": "Вы не можете удалить сами себя",
@@ -1224,6 +1281,29 @@
         "session_ua": "Неверный токен формы: ошибка проверки User-Agent"
     },
     "datatables": {
-        "infoPostFix": ""
+        "collapse_all": "Свернуть все",
+        "expand_all": "Развернуть все",
+        "infoPostFix": "",
+        "decimal": "",
+        "thousands": "",
+        "lengthMenu": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "paginate": {
+            "last": "",
+            "first": "",
+            "next": "",
+            "previous": ""
+        },
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "emptyTable": "",
+        "info": "",
+        "infoEmpty": "",
+        "infoFiltered": ""
     }
 }

+ 759 - 6
data/web/lang/lang.si-si.json

@@ -107,7 +107,8 @@
         "post_domain_add": "SOGo container \"sogo-mailcow\" mora biti ponovno zagnan po dodajanju nove domene!<br><br>Dodatno se mora preveriti DNS konfiguracija domene. Ko je DNS konfiguracija domene odobrena, ponovno zaženite \"acme-mailcow\" za samodejno generiranje certifikatov za novo domeno (autoconfig.&lt;domain&gt;, autodiscover.&lt;domain&gt;).<br>Ta korak je opcijski in se ponovno poskuša vsakih 24 ur.",
         "relay_transport_info": "<div class=\"badge fs-6 bg-info\">Info</div> Definirate lahko preslikave transportov za cilj po meri za to domeno. Če ni nastavljena, se ustvari MX poizvedba.",
         "syncjob_hint": "Pozor! Gesla se morajo shraniti v plain-text!",
-        "timeout2": "Časovna omejitev za povezavo do lokalnega gostitelja"
+        "timeout2": "Časovna omejitev za povezavo do lokalnega gostitelja",
+        "dry": ""
     },
     "admin": {
         "access": "Dostop",
@@ -347,7 +348,10 @@
         "logo_dark_label": "Za temni način",
         "cors_settings": "Nastavitve CORS",
         "allowed_methods": "Dovoljene metode za upravljanje dostopa",
-        "allowed_origins": "Upravljanje-dostopa-Dovoljeni-Viri"
+        "allowed_origins": "Upravljanje-dostopa-Dovoljeni-Viri",
+        "copy_to_clipboard": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": ""
     },
     "danger": {
         "alias_goto_identical": "Alias in goto naslov morata biti identična",
@@ -476,7 +480,9 @@
         "temp_error": "Začasna napaka",
         "cors_invalid_method": "Navedena neveljavna Allow metoda",
         "cors_invalid_origin": "Naveden neveljaven Allow-Origin",
-        "invalid_recipient_map_new": "Naveden neveljaven nov prejemnik: %s"
+        "invalid_recipient_map_new": "Naveden neveljaven nov prejemnik: %s",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": ""
     },
     "debug": {
         "containers_info": "Informacije o vsebniku (containerju)",
@@ -511,7 +517,13 @@
         "no_update_available": "Sistem je na najnovejši verziji",
         "update_failed": "Ni mogoče preveriti za posodobitve",
         "username": "Uporabniško ime",
-        "wip": "Trenutno v delu"
+        "wip": "Trenutno v delu",
+        "log_info": "",
+        "login_time": "",
+        "logs": "",
+        "memory": "",
+        "online_users": "",
+        "restart_container": ""
     },
     "datatables": {
         "infoFiltered": "(filtrirano od _MAX_ skupaj zapisov)",
@@ -536,7 +548,8 @@
         "aria": {
             "sortAscending": ": aktivirajte za razvrstitev stolpca naraščajoče",
             "sortDescending": ": aktivirajte za razvrstitev stolpca padajoče"
-        }
+        },
+        "infoPostFix": ""
     },
     "diagnostics": {
         "cname_from_a": "Vrednost pridobljena iz A/AAAA zapisa. To je podprto, če zapis kaže na pravilen resurs.",
@@ -551,6 +564,746 @@
     },
     "edit": {
         "acl": "ACL (Dovoljenje)",
-        "active": "Aktivno"
+        "active": "Aktivno",
+        "maxbytespersecond": "",
+        "footer_exclude": "",
+        "gal_info": "",
+        "inactive": "",
+        "kind": "",
+        "last_modified": "",
+        "lookup_mx": "",
+        "mailbox": "",
+        "mailbox_quota_def": "",
+        "mailbox_relayhost_info": "",
+        "maxage": "",
+        "mins_interval": "",
+        "domain_quota": "",
+        "spam_alias": "",
+        "gal": "",
+        "domain_footer_skip_replies": "",
+        "domains": "",
+        "dont_check_sender_acl": "",
+        "full_name": "",
+        "edit_alias_domain": "",
+        "encryption": "",
+        "exclude": "",
+        "extended_sender_acl": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "spam_filter": "",
+        "skipcrossduplicates": "",
+        "sogo_access": "",
+        "sogo_access_info": "",
+        "sogo_visible": "",
+        "sogo_visible_info": "",
+        "spam_policy": "",
+        "spam_score": "",
+        "subfolder2": "",
+        "syncjob": "",
+        "target_address": "",
+        "title": "",
+        "username": "",
+        "app_name": "",
+        "custom_attributes": "",
+        "delete2": "",
+        "delete2duplicates": "",
+        "generate": "",
+        "grant_types": "",
+        "redirect_uri": "",
+        "domain_footer_plain": "",
+        "extended_sender_acl_info": "",
+        "force_pw_update": "",
+        "force_pw_update_info": "",
+        "mbox_rl_info": "",
+        "multiple_bookings": "",
+        "none_inherit": "",
+        "nexthop": "",
+        "password": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "pushover_sender_regex": "",
+        "alias": "",
+        "max_aliases": "",
+        "max_mailboxes": "",
+        "max_quota": "",
+        "admin": "",
+        "advanced_settings": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "app_passwd": "",
+        "app_passwd_protocols": "",
+        "automap": "",
+        "backup_mx_options": "",
+        "bcc_dest_format": "",
+        "client_id": "",
+        "client_secret": "",
+        "comment_info": "",
+        "created_on": "",
+        "delete1": "",
+        "delete_ays": "",
+        "description": "",
+        "disable_login": "",
+        "domain": "",
+        "domain_admin": "",
+        "domain_footer_info": "",
+        "domain_footer_info_vars": {
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": "",
+            "custom": ""
+        },
+        "password_repeat": "",
+        "previous": "",
+        "private_comment": "",
+        "public_comment": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "pushover_verify": "",
+        "quota_mb": "",
+        "quota_warning_bcc": "",
+        "quota_warning_bcc_info": "",
+        "ratelimit": "",
+        "relay_all": "",
+        "relay_all_info": "",
+        "relay_domain": "",
+        "relay_transport_info": "",
+        "relay_unknown_only": "",
+        "relayhost": "",
+        "remove": "",
+        "hostname": "",
+        "resource": "",
+        "save": "",
+        "scope": "",
+        "sender_acl": "",
+        "sender_acl_disabled": "",
+        "sender_acl_info": "",
+        "sieve_desc": "",
+        "sieve_type": "",
+        "target_domain": "",
+        "timeout1": "",
+        "timeout2": "",
+        "unchanged_if_empty": "",
+        "validate_save": ""
+    },
+    "mailbox": {
+        "add_resource": "",
+        "domain_templates": "",
+        "activate": "",
+        "public_comment": "",
+        "set_prefilter": "",
+        "sieve_preset_5": "",
+        "active": "",
+        "add": "",
+        "add_alias": "",
+        "add_alias_expand": "",
+        "add_bcc_entry": "",
+        "bcc_destinations": "",
+        "bcc_local_dest": "",
+        "mailbox_defaults_info": "",
+        "mailbox_defquota": "",
+        "mailbox_templates": "",
+        "multiple_bookings": "",
+        "private_comment": "",
+        "q_add_header": "",
+        "q_all": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_notification": "",
+        "quick_actions": "",
+        "recipient": "",
+        "recipient_map": "",
+        "recipient_map_info": "",
+        "recipient_map_new": "",
+        "recipient_map_new_info": "",
+        "recipient_map_old": "",
+        "recipient_map_old_info": "",
+        "recipient_maps": "",
+        "relay_unknown": "",
+        "running": "",
+        "sender": "",
+        "set_postfilter": "",
+        "sieve_preset_1": "",
+        "sieve_preset_2": "",
+        "sieve_info": "",
+        "sieve_preset_3": "",
+        "sieve_preset_4": "",
+        "sieve_preset_6": "",
+        "sieve_preset_7": "",
+        "sieve_preset_8": "",
+        "sogo_visible": "",
+        "status": "",
+        "target_address": "",
+        "target_domain": "",
+        "template": "",
+        "templates": "",
+        "tls_enforce_in": "",
+        "tls_enforce_out": "",
+        "tls_map_dest_info": "",
+        "tls_map_parameters": "",
+        "tls_map_policy": "",
+        "tls_policy_maps": "",
+        "tls_policy_maps_enforced_tls": "",
+        "tls_policy_maps_long": "",
+        "backup_mx": "",
+        "force_pw_update": "",
+        "gal": "",
+        "last_run": "",
+        "last_run_reset": "",
+        "filter_table": "",
+        "filters": "",
+        "fname": "",
+        "remove": "",
+        "tls_map_dest": "",
+        "add_mailbox": "",
+        "domain_admins": "",
+        "domain_aliases": "",
+        "edit": "",
+        "empty": "",
+        "enable_x": "",
+        "excludes": "",
+        "catch_all": "",
+        "no_record_single": "",
+        "relay_all": "",
+        "action": "",
+        "add_domain": "",
+        "add_domain_alias": "",
+        "add_domain_record_first": "",
+        "add_filter": "",
+        "add_recipient_map_entry": "",
+        "add_template": "",
+        "add_tls_policy_map": "",
+        "address_rewriting": "",
+        "alias": "",
+        "alias_domain_alias_hint": "",
+        "alias_domain_backupmx": "",
+        "aliases": "",
+        "all_domains": "",
+        "allow_from_smtp": "",
+        "allow_from_smtp_info": "",
+        "allowed_protocols": "",
+        "bcc": "",
+        "bcc_destination": "",
+        "bcc_info": "",
+        "bcc_map": "",
+        "bcc_map_type": "",
+        "bcc_maps": "",
+        "bcc_rcpt_map": "",
+        "bcc_sender_map": "",
+        "bcc_to_rcpt": "",
+        "bcc_to_sender": "",
+        "bcc_type": "",
+        "booking_null": "",
+        "booking_0_short": "",
+        "booking_custom": "",
+        "booking_custom_short": "",
+        "booking_ltnull": "",
+        "booking_lt0_short": "",
+        "created_on": "",
+        "daily": "",
+        "deactivate": "",
+        "description": "",
+        "disable_login": "",
+        "disable_x": "",
+        "dkim_domains_selector": "",
+        "dkim_key_length": "",
+        "domain": "",
+        "domain_quota": "",
+        "domain_quota_total": "",
+        "domains": "",
+        "goto_ham": "",
+        "goto_spam": "",
+        "hourly": "",
+        "in_use": "",
+        "inactive": "",
+        "insert_preset": "",
+        "kind": "",
+        "last_mail_login": "",
+        "last_modified": "",
+        "last_pw_change": "",
+        "mailbox": "",
+        "mailbox_defaults": "",
+        "mailbox_quota": "",
+        "mailboxes": "",
+        "max_aliases": "",
+        "max_mailboxes": "",
+        "max_quota": "",
+        "mins_interval": "",
+        "msg_num": "",
+        "never": "",
+        "no": "",
+        "no_record": "",
+        "open_logs": "",
+        "owner": "",
+        "resources": "",
+        "sieve_preset_header": "",
+        "sogo_visible_n": "",
+        "sogo_visible_y": "",
+        "spam_aliases": "",
+        "stats": "",
+        "sync_jobs": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "table_size": "",
+        "table_size_show_n": "",
+        "tls_map_parameters_info": "",
+        "tls_policy_maps_info": "",
+        "toggle_all": "",
+        "username": "",
+        "waiting": "",
+        "weekly": "",
+        "yes": ""
+    },
+    "user": {
+        "login_history": "",
+        "advanced_settings": "",
+        "alias": "",
+        "alias_create_random": "",
+        "alias_extend_all": "",
+        "alias_full_date": "",
+        "alias_remove_all": "",
+        "action": "",
+        "active": "",
+        "active_sieve": "",
+        "alias_select_validity": "",
+        "alias_time_left": "",
+        "alias_valid_until": "",
+        "delete_ays": "",
+        "direct_aliases": "",
+        "email_and_dav": "",
+        "spamfilter_table_rule": "",
+        "spamfilter_wl": "",
+        "verify": "",
+        "waiting": "",
+        "week": "",
+        "weekly": "",
+        "month": "",
+        "months": "",
+        "sogo_profile_reset_now": "",
+        "spam_aliases": "",
+        "spam_score_reset": "",
+        "spamfilter": "",
+        "value": "",
+        "eas_reset_now": "",
+        "remove": "",
+        "text": "",
+        "no_active_filter": "",
+        "no_last_login": "",
+        "spamfilter_bl_desc": "",
+        "spamfilter_default_score": "",
+        "day": "",
+        "never": "",
+        "pushover_verify": "",
+        "tag_handling": "",
+        "edit": "",
+        "last_ui_login": "",
+        "title": "",
+        "tls_enforce_in": "",
+        "tls_enforce_out": "",
+        "tls_policy": "",
+        "tls_policy_warning": "",
+        "aliases_also_send_as": "",
+        "aliases_send_as_all": "",
+        "app_hint": "",
+        "allowed_protocols": "",
+        "app_name": "",
+        "app_passwds": "",
+        "apple_connection_profile": "",
+        "apple_connection_profile_complete": "",
+        "apple_connection_profile_mailonly": "",
+        "apple_connection_profile_with_app_password": "",
+        "attribute": "",
+        "change_password": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "client_configuration": "",
+        "create_app_passwd": "",
+        "create_syncjob": "",
+        "created_on": "",
+        "daily": "",
+        "direct_aliases_desc": "",
+        "direct_protocol_access": "",
+        "eas_reset": "",
+        "eas_reset_help": "",
+        "email": "",
+        "empty": "",
+        "encryption": "",
+        "excludes": "",
+        "expire_in": "",
+        "fido2_webauthn": "",
+        "force_pw_update": "",
+        "from": "",
+        "generate": "",
+        "hour": "",
+        "hourly": "",
+        "hours": "",
+        "in_use": "",
+        "interval": "",
+        "is_catch_all": "",
+        "last_mail_login": "",
+        "last_pw_change": "",
+        "last_run": "",
+        "loading": "",
+        "mailbox": "",
+        "mailbox_details": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "messages": "",
+        "new_password": "",
+        "new_password_repeat": "",
+        "no_record": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "password": "",
+        "password_now": "",
+        "password_repeat": "",
+        "pushover_evaluate_x_prio": "",
+        "pushover_info": "",
+        "pushover_only_x_prio": "",
+        "pushover_sender_array": "",
+        "pushover_sender_regex": "",
+        "pushover_text": "",
+        "pushover_title": "",
+        "pushover_sound": "",
+        "pushover_vars": "",
+        "q_add_header": "",
+        "q_all": "",
+        "q_reject": "",
+        "quarantine_category": "",
+        "quarantine_category_info": "",
+        "quarantine_notification": "",
+        "quarantine_notification_info": "",
+        "recent_successful_connections": "",
+        "running": "",
+        "save": "",
+        "save_changes": "",
+        "sender_acl_disabled": "",
+        "shared_aliases": "",
+        "shared_aliases_desc": "",
+        "show_sieve_filters": "",
+        "sogo_profile_reset": "",
+        "sogo_profile_reset_help": "",
+        "spamfilter_behavior": "",
+        "spamfilter_bl": "",
+        "spamfilter_green": "",
+        "spamfilter_hint": "",
+        "spamfilter_red": "",
+        "spamfilter_table_action": "",
+        "spamfilter_table_add": "",
+        "spamfilter_table_domain_policy": "",
+        "spamfilter_table_empty": "",
+        "spamfilter_table_remove": "",
+        "spamfilter_wl_desc": "",
+        "spamfilter_yellow": "",
+        "status": "",
+        "sync_jobs": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": "",
+        "tag_help_example": "",
+        "tag_help_explain": "",
+        "tag_in_none": "",
+        "tag_in_subfolder": "",
+        "tag_in_subject": "",
+        "user_settings": "",
+        "username": "",
+        "weeks": "",
+        "with_app_password": "",
+        "year": "",
+        "years": ""
+    },
+    "fido2": {
+        "set_fn": "",
+        "rename": "",
+        "set_fido2": "",
+        "set_fido2_touchid": "",
+        "start_fido2_validation": "",
+        "confirm": "",
+        "fido2_auth": "",
+        "fido2_success": "",
+        "fido2_validation_failed": "",
+        "fn": "",
+        "known_ids": "",
+        "none": "",
+        "register_status": ""
+    },
+    "footer": {
+        "cancel": "",
+        "confirm_delete": "",
+        "delete_now": "",
+        "delete_these_items": "",
+        "hibp_check": "",
+        "hibp_nok": "",
+        "hibp_ok": "",
+        "loading": "",
+        "nothing_selected": "",
+        "restart_container": "",
+        "restart_container_info": "",
+        "restart_now": "",
+        "restarting_container": ""
+    },
+    "quarantine": {
+        "qid": "",
+        "quarantine": "",
+        "quick_actions": "",
+        "quick_delete_link": "",
+        "neutral_danger": "",
+        "qitem": "",
+        "download_eml": "",
+        "action": "",
+        "atts": "",
+        "check_hash": "",
+        "confirm": "",
+        "confirm_delete": "",
+        "danger": "",
+        "deliver_inbox": "",
+        "disabled_by_config": "",
+        "empty": "",
+        "high_danger": "",
+        "info": "",
+        "junk_folder": "",
+        "learn_spam_delete": "",
+        "low_danger": "",
+        "medium_danger": "",
+        "notified": "",
+        "qhandler_success": "",
+        "qinfo": "",
+        "quick_info_link": "",
+        "quick_release_link": "",
+        "rcpt": "",
+        "received": "",
+        "recipients": "",
+        "refresh": "",
+        "rejected": "",
+        "release": "",
+        "release_body": "",
+        "release_subject": "",
+        "remove": "",
+        "rewrite_subject": "",
+        "rspamd_result": "",
+        "sender": "",
+        "sender_header": "",
+        "settings_info": "",
+        "show_item": "",
+        "spam": "",
+        "spam_score": "",
+        "subj": "",
+        "table_size": "",
+        "table_size_show_n": "",
+        "text_from_html_content": "",
+        "text_plain_content": "",
+        "toggle_all": "",
+        "type": ""
+    },
+    "ratelimit": {
+        "minute": "",
+        "hour": "",
+        "day": "",
+        "disabled": "",
+        "second": ""
+    },
+    "start": {
+        "help": "",
+        "imap_smtp_server_auth_info": "",
+        "mailcow_panel_detail": "",
+        "mailcow_apps_detail": ""
+    },
+    "queue": {
+        "unhold_mail": "",
+        "unhold_mail_legend": "",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "deliver_mail": "",
+        "ays": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "queue_manager": "",
+        "show_message": "",
+        "unban": ""
+    },
+    "success": {
+        "acl_saved": "",
+        "admin_added": "",
+        "cors_headers_edited": "",
+        "db_init_complete": "",
+        "delete_filter": "",
+        "delete_filters": "",
+        "deleted_syncjob": "",
+        "deleted_syncjobs": "",
+        "dkim_added": "",
+        "domain_add_dkim_available": "",
+        "dkim_duplicated": "",
+        "dkim_removed": "",
+        "domain_added": "",
+        "domain_admin_removed": "",
+        "domain_footer_modified": "",
+        "domain_modified": "",
+        "domain_removed": "",
+        "dovecot_restart_success": "",
+        "f2b_banlist_refreshed": "",
+        "domain_admin_added": "",
+        "domain_admin_modified": "",
+        "f2b_modified": "",
+        "forwarding_host_added": "",
+        "resource_modified": "",
+        "resource_removed": "",
+        "rl_saved": "",
+        "reset_main_logo": "",
+        "resource_added": "",
+        "rspamd_ui_pw_set": "",
+        "saved_settings": "",
+        "settings_map_added": "",
+        "settings_map_removed": "",
+        "sogo_profile_reset": "",
+        "template_added": "",
+        "template_modified": "",
+        "template_removed": "",
+        "tls_policy_map_entry_deleted": "",
+        "eas_reset": "",
+        "mailbox_added": "",
+        "items_deleted": "",
+        "items_released": "",
+        "learned_ham": "",
+        "license_modified": "",
+        "logged_in_as": "",
+        "password_policy_saved": "",
+        "hash_deleted": "",
+        "app_links": "",
+        "admin_api_modified": "",
+        "admin_modified": "",
+        "admin_removed": "",
+        "alias_added": "",
+        "alias_domain_removed": "",
+        "alias_modified": "",
+        "alias_removed": "",
+        "aliasd_added": "",
+        "aliasd_modified": "",
+        "app_passwd_added": "",
+        "app_passwd_removed": "",
+        "bcc_deleted": "",
+        "bcc_edited": "",
+        "bcc_saved": "",
+        "forwarding_host_removed": "",
+        "global_filter_written": "",
+        "ip_check_opt_in_modified": "",
+        "item_deleted": "",
+        "item_released": "",
+        "mailbox_modified": "",
+        "mailbox_removed": "",
+        "nginx_reloaded": "",
+        "object_modified": "",
+        "pushover_settings_edited": "",
+        "qlearn_spam": "",
+        "queue_command_success": "",
+        "recipient_map_entry_deleted": "",
+        "recipient_map_entry_saved": "",
+        "relayhost_added": "",
+        "relayhost_removed": "",
+        "tls_policy_map_entry_saved": "",
+        "ui_texts": "",
+        "upload_success": "",
+        "verified_fido2_login": "",
+        "verified_totp_login": "",
+        "verified_webauthn_login": "",
+        "verified_yotp_login": ""
+    },
+    "tfa": {
+        "webauthn": "",
+        "waiting_usb_register": "",
+        "authenticators": "",
+        "api_register": "",
+        "confirm_totp_token": "",
+        "none": "",
+        "select": "",
+        "yubi_otp": "",
+        "waiting_usb_auth": "",
+        "delete_tfa": "",
+        "disable_tfa": "",
+        "enter_qr_code": "",
+        "error_code": "",
+        "init_webauthn": "",
+        "key_id": "",
+        "confirm": "",
+        "key_id_totp": "",
+        "reload_retry": "",
+        "scan_qr_code": "",
+        "set_tfa": "",
+        "start_webauthn_validation": "",
+        "tfa": "",
+        "tfa_token_invalid": "",
+        "totp": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": ""
+    },
+    "header": {
+        "debug": "",
+        "administration": "",
+        "apps": "",
+        "email": "",
+        "mailcow_system": "",
+        "mailcow_config": "",
+        "quarantine": "",
+        "restart_netfilter": "",
+        "restart_sogo": "",
+        "user_settings": ""
+    },
+    "warning": {
+        "domain_added_sogo_failed": "",
+        "dovecot_restart_failed": "",
+        "fuzzy_learn_error": "",
+        "hash_not_found": "",
+        "ip_invalid": "",
+        "no_active_admin": "",
+        "quota_exceeded_scope": "",
+        "session_token": "",
+        "session_ua": "",
+        "cannot_delete_self": "",
+        "is_not_primary_alias": ""
+    },
+    "info": {
+        "awaiting_tfa_confirmation": "",
+        "no_action": "",
+        "session_expires": ""
+    },
+    "login": {
+        "delayed": "",
+        "fido2_webauthn": "",
+        "login": "",
+        "mobileconfig_info": "",
+        "other_logins": "",
+        "password": "",
+        "username": ""
+    },
+    "oauth2": {
+        "access_denied": "",
+        "authorize_app": "",
+        "deny": "",
+        "permit": "",
+        "profile": "",
+        "profile_desc": "",
+        "scope_ask_permission": ""
     }
 }

+ 59 - 11
data/web/lang/lang.sk-sk.json

@@ -342,7 +342,16 @@
         "username": "Prihlasovacie meno",
         "validate_license_now": "Validovať GUID cez licenčný server",
         "verify": "Kontrola",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "queue_unban": "",
+        "allowed_origins": "",
+        "cors_settings": "",
+        "f2b_ban_time_increment": "",
+        "f2b_max_ban_time": "",
+        "copy_to_clipboard": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "allowed_methods": ""
     },
     "danger": {
         "access_denied": "Prístup zamietnutý alebo nesprávne dáta formulára",
@@ -464,7 +473,16 @@
         "username_invalid": "Používateľské meno %s nemôže byť použité",
         "validity_missing": "Zadajte periódu platnosti",
         "value_missing": "Prosím poskytnite všetky hodnoty",
-        "yotp_verification_failed": "Overenie cez OTP Yubico zlyhalo: %s"
+        "yotp_verification_failed": "Overenie cez OTP Yubico zlyhalo: %s",
+        "webauthn_publickey_failed": "",
+        "webauthn_username_failed": "",
+        "webauthn_authenticator_failed": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "demo_mode_enabled": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "extended_sender_acl_denied": ""
     },
     "datatables": {
         "info": "Záznamy _START_ až _END_ z celkom _TOTAL_",
@@ -489,7 +507,8 @@
         "decimal": ",",
         "thousands": " ",
         "collapse_all": "Zbaliť všetko",
-        "expand_all": "Rozbaliť všetko"
+        "expand_all": "Rozbaliť všetko",
+        "infoPostFix": ""
     },
     "debug": {
         "chart_this_server": "Graf (tento server)",
@@ -516,7 +535,21 @@
         "success": "Úspech",
         "system_containers": "Systém & Kontajnery",
         "uptime": "Doba behu",
-        "username": "Používateľské meno"
+        "username": "Používateľské meno",
+        "architecture": "",
+        "error_show_ip": "",
+        "update_failed": "",
+        "show_ip": "",
+        "timezone": "",
+        "update_available": "",
+        "no_update_available": "",
+        "wip": "",
+        "current_time": "",
+        "memory": "",
+        "container_running": "",
+        "container_disabled": "",
+        "container_stopped": "",
+        "cores": ""
     },
     "diagnostics": {
         "cname_from_a": "Hodnota odvodená od A/AAAA záznamu. Toto je podporené len v prípade ak záznam poukazuje na správny zdroj.",
@@ -648,12 +681,17 @@
             "from_domain": "{= from_domain =} - Doména odosielateľa",
             "auth_user": "{= auth_user =} - Prihlasovacie meno odosielateľa",
             "from_user": "{= from_user =}   - Používateľská časť e-mailovej adresy odosielateľa, napr. pre \"moo@mailcow.tld\" vráti \"moo\"",
-            "from_name": "{= from_name =}   - Meno odosielateľa, napr. pre \"Mailcow &lt;moo@mailcow.tld&gt;\" vráti \"Mailcow\""
+            "from_name": "{= from_name =}   - Meno odosielateľa, napr. pre \"Mailcow &lt;moo@mailcow.tld&gt;\" vráti \"Mailcow\"",
+            "custom": ""
         },
         "domain_footer": "Pätička pre celú doménu",
         "domain_footer_html": "HTML text",
         "domain_footer_info": "Pätička pre celú doménu sa pridáva do všetkých odchádzajúcich e-mailov spojených s adresou v rámci tejto domény. <br> Pre pätičku je možné použiť nasledujúce premenné:",
-        "domain_footer_plain": "Obyčajný text"
+        "domain_footer_plain": "Obyčajný text",
+        "footer_exclude": "",
+        "domain_footer_skip_replies": "",
+        "custom_attributes": "",
+        "pushover_sound": ""
     },
     "fido2": {
         "confirm": "Potvrdiť",
@@ -883,7 +921,8 @@
         "username": "Používateľské meno",
         "waiting": "Čakanie",
         "weekly": "Týždenný",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "relay_unknown": ""
     },
     "oauth2": {
         "access_denied": "Prosím prihláste sa ako používateľ mailovej schránky, aby ste mohli získať prístup cez OAuth2.",
@@ -960,7 +999,8 @@
         "unhold_mail": "Uvoľniť",
         "unhold_mail_legend": "Uvoľniť vybrané e-maily na doručenie. (Len v prípade predchádzajúceho podržania)",
         "hold_mail": "Podržať",
-        "hold_mail_legend": "Podržať vybrané e-maily. (Zabráni ďalším pokusom o doručenie)"
+        "hold_mail_legend": "Podržať vybrané e-maily. (Zabráni ďalším pokusom o doručenie)",
+        "unban": ""
     },
     "ratelimit": {
         "disabled": "Vypnuté",
@@ -1055,7 +1095,11 @@
         "verified_totp_login": "Overené TOTP prihlásenie",
         "verified_webauthn_login": "Overené WebAuthn prihlásenie",
         "verified_yotp_login": "Overené Yubico OTP prihlásenie",
-        "domain_footer_modified": "Zmeny v pätičke domény %s boli uložené"
+        "domain_footer_modified": "Zmeny v pätičke domény %s boli uložené",
+        "cors_headers_edited": "",
+        "f2b_banlist_refreshed": "",
+        "ip_check_opt_in_modified": "",
+        "domain_add_dkim_available": ""
     },
     "tfa": {
         "api_register": "%s využíva Yubico Cloud API. Prosím, zaobstarajte si API kľúč pre váš kľúč <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">tu</a>",
@@ -1082,7 +1126,8 @@
         "waiting_usb_register": "<i>Čakanie na USB zariadenie...</i><br><br>Prosím zadajte vaše heslo a potvrďte registráciu stlačením tlačidla na vašom USB zariadení.",
         "yubi_otp": "Yubico OTP autentifikácia",
         "u2f_deprecated_important": "Zaregistrujte si svoj Kľúč v paneli správcu pomocou novej metódy WebAuthn.",
-        "u2f_deprecated": "Zdá sa, že váš kľúč bol zaregistrovaný pomocou zastaranej metódy U2F. Deaktivujeme vám dvojfaktorovú autentifikáciu a odstránime váš Kľúč."
+        "u2f_deprecated": "Zdá sa, že váš kľúč bol zaregistrovaný pomocou zastaranej metódy U2F. Deaktivujeme vám dvojfaktorovú autentifikáciu a odstránime váš Kľúč.",
+        "authenticators": ""
     },
     "user": {
         "action": "Akcia",
@@ -1243,7 +1288,10 @@
         "weeks": "týždne",
         "with_app_password": "s heslom aplikácie",
         "year": "rok",
-        "years": "rokov"
+        "years": "rokov",
+        "value": "",
+        "attribute": "",
+        "pushover_sound": ""
     },
     "warning": {
         "cannot_delete_self": "Nemožno vymazať prihláseného používateľa",

+ 208 - 14
data/web/lang/lang.sv-se.json

@@ -60,7 +60,7 @@
         "exclude": "Exkludera objekt (regex-filter)",
         "full_name": "Fullständiga namn",
         "gal": "Global adressbok",
-        "gal_info": "Den global adressboken innehåller alla objekt i en domän och kan inte redigeras av någon användare. Informationen om tillgänglighet i SOGo är endast synlig när den globala adressboken är påslagen.  <b>Starta om SOGo för att tillämpa ändringar.</b>",
+        "gal_info": "Den global adressboken innehåller alla objekt i en domän och kan inte redigeras av någon användare. Informationen om tillgänglighet i SOGo är endast synlig när den globala adressboken är påslagen. <b>Starta om SOGo för att tillämpa ändringar.</b>",
         "generate": "generera",
         "goto_ham": "Markera detta som en <span class=\"text-success\"><b>felaktig spam-registrering</b>, detta kommer förhindra liknande fel i framtiden</span>",
         "goto_null": "Kasta e-postmeddelanande omedelbart",
@@ -106,7 +106,9 @@
         "validate": "Validera",
         "validation_success": "Korrekt validerad",
         "app_passwd_protocols": "Tillåtna protokoll för applösenord",
-        "bcc_dest_format": "BCC-destinationen måste vara en enda giltig e-postadress.<br>Om du behöver skicka en kopia till flera adresser skapar du ett alias och använder det här."
+        "bcc_dest_format": "BCC-destinationen måste vara en enda giltig e-postadress.<br>Om du behöver skicka en kopia till flera adresser skapar du ett alias och använder det här.",
+        "dry": "",
+        "tags": ""
     },
     "admin": {
         "access": "Åtkomst",
@@ -325,7 +327,31 @@
         "username": "Användarnamn",
         "validate_license_now": "Validera installations-ID mot licensservern",
         "verify": "Verifiera",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "allowed_origins": "",
+        "allowed_methods": "",
+        "logo_dark_label": "",
+        "cors_settings": "",
+        "logo_normal_label": "",
+        "ip_check": "",
+        "f2b_ban_time_increment": "",
+        "copy_to_clipboard": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "f2b_max_ban_time": "",
+        "ip_check_disabled": "",
+        "login_time": "",
+        "oauth2_apps": "",
+        "oauth2_add_client": "",
+        "options": "",
+        "api_read_only": "",
+        "ip_check_opt_in": "",
+        "is_mx_based": "",
+        "queue_unban": "",
+        "rsettings_preset_4": "",
+        "service": "",
+        "success": "",
+        "api_read_write": ""
     },
     "danger": {
         "access_denied": "Nekad åtkomst, eller ofullständig/ogiltig data",
@@ -444,7 +470,19 @@
         "username_invalid": "Användarnamnet %s kan inte användas",
         "validity_missing": "Ange en giltighetsperiod",
         "value_missing": "Ange alla värden",
-        "yotp_verification_failed": "Yubico OTP-verifiering misslyckades: %s"
+        "yotp_verification_failed": "Yubico OTP-verifiering misslyckades: %s",
+        "webauthn_authenticator_failed": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "webauthn_publickey_failed": "",
+        "webauthn_username_failed": "",
+        "demo_mode_enabled": "",
+        "extended_sender_acl_denied": "",
+        "template_exists": "",
+        "template_id_invalid": "",
+        "template_name_invalid": ""
     },
     "debug": {
         "chart_this_server": "Tabell (denna server)",
@@ -467,7 +505,25 @@
         "uptime": "Upptid",
         "started_on": "Startades",
         "static_logs": "Statiska loggar",
-        "system_containers": "System & behållare"
+        "system_containers": "System & behållare",
+        "success": "",
+        "architecture": "",
+        "login_time": "",
+        "update_available": "",
+        "container_running": "",
+        "container_disabled": "",
+        "container_stopped": "",
+        "cores": "",
+        "current_time": "",
+        "error_show_ip": "",
+        "memory": "",
+        "service": "",
+        "show_ip": "",
+        "timezone": "",
+        "update_failed": "",
+        "username": "",
+        "wip": "",
+        "no_update_available": ""
     },
     "diagnostics": {
         "cname_from_a": "Värde härstammar från A/AAAA-uppslaget. Detta stöds så länge som uppslaget pekar mot rätt resurs.",
@@ -585,7 +641,31 @@
         "title": "Ändra objekt",
         "unchanged_if_empty": "Lämna blakt, om oförändrat",
         "username": "Användarnamn",
-        "validate_save": "Validera och spara"
+        "validate_save": "Validera och spara",
+        "footer_exclude": "",
+        "mailbox_relayhost_info": "",
+        "domain_footer_skip_replies": "",
+        "pushover_sound": "",
+        "custom_attributes": "",
+        "sogo_access": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_info_vars": {
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": "",
+            "custom": ""
+        },
+        "app_passwd_protocols": "",
+        "domain_footer_info": "",
+        "domain_footer_plain": "",
+        "none_inherit": "",
+        "sogo_access_info": "",
+        "pushover": "",
+        "acl": "",
+        "lookup_mx": ""
     },
     "footer": {
         "cancel": "Avbryt",
@@ -598,7 +678,9 @@
         "restart_container": "Starta om kontainer",
         "restart_container_info": "<b>Viktigt:</b> En fullständig omstart kan ta ett tag att slutföra, vänta tills att det är klart.",
         "restart_now": "Starta om nu",
-        "restarting_container": "Startar om kontainern, det kan ta en stund"
+        "restarting_container": "Startar om kontainern, det kan ta en stund",
+        "hibp_check": "",
+        "nothing_selected": ""
     },
     "header": {
         "administration": "Konfiguration & detaljer",
@@ -609,7 +691,8 @@
         "quarantine": "Karantän",
         "restart_netfilter": "Starta om netfilter",
         "restart_sogo": "Starta om SOGo",
-        "user_settings": "Användarinställningar"
+        "user_settings": "Användarinställningar",
+        "mailcow_system": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "Inväntar en TFA-bekräftelse",
@@ -775,7 +858,30 @@
         "username": "Användarnamn",
         "waiting": "Väntar",
         "weekly": "Varje vecka",
-        "yes": "&#10003;"
+        "yes": "&#10003;",
+        "goto_ham": "",
+        "goto_spam": "",
+        "templates": "",
+        "template": "",
+        "add_template": "",
+        "catch_all": "",
+        "all_domains": "",
+        "domain_templates": "",
+        "last_pw_change": "",
+        "mailbox_templates": "",
+        "open_logs": "",
+        "recipient": "",
+        "relay_unknown": "",
+        "sender": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": ""
     },
     "oauth2": {
         "access_denied": "Logga in som ägare av en postlåda för att tilldela åtkomst via OAuth2.",
@@ -840,7 +946,20 @@
         "toggle_all": "Markera alla"
     },
     "queue": {
-        "queue_manager": "Kö-hanteraring"
+        "queue_manager": "Kö-hanteraring",
+        "unban": "",
+        "ays": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": "",
+        "delete": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "show_message": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": ""
     },
     "start": {
         "help": "Visa/dölj hjälppanel",
@@ -924,7 +1043,15 @@
         "verified_totp_login": "Verifierad TOTP inloggning",
         "verified_webauthn_login": "Verifierad WebAuthn inloggning",
         "verified_fido2_login": "Verifierad FIDO2 inloggning",
-        "verified_yotp_login": "Verifierad Yubico OTP inloggning"
+        "verified_yotp_login": "Verifierad Yubico OTP inloggning",
+        "domain_footer_modified": "",
+        "template_added": "",
+        "template_modified": "",
+        "cors_headers_edited": "",
+        "domain_add_dkim_available": "",
+        "f2b_banlist_refreshed": "",
+        "ip_check_opt_in_modified": "",
+        "template_removed": ""
     },
     "tfa": {
         "api_register": "%s använder Yubico Moln-API. Vänligen skaffa en API-nyckel för din nyckel <a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">här</a>",
@@ -949,7 +1076,10 @@
         "webauthn": "WebAuthn-autentisering",
         "waiting_usb_auth": "<i>Väntar på USB-enhet...</i><br><br>Tryck på knappen på USB-enheten nu.",
         "waiting_usb_register": "<i>Väntar på USB-enhet...</i><br><br>Vänligen fyll i det övre lösenordsfältet först och tryck sedan på knappen på USB-enheten.",
-        "yubi_otp": "Yubico OTP-autentisering"
+        "yubi_otp": "Yubico OTP-autentisering",
+        "authenticators": "",
+        "u2f_deprecated": "",
+        "u2f_deprecated_important": ""
     },
     "fido2": {
         "set_fn": "Ange ett eget namn",
@@ -963,7 +1093,8 @@
         "start_fido2_validation": "Starta FIDO2 verifiering",
         "fido2_auth": "Loggain med FIDO2",
         "fido2_success": "Enheten har registrerats",
-        "fido2_validation_failed": "Verifiering misslyckades"
+        "fido2_validation_failed": "Verifiering misslyckades",
+        "set_fido2_touchid": ""
     },
     "user": {
         "action": "Åtgärd",
@@ -1097,7 +1228,37 @@
         "weekly": "Varje vecka",
         "weeks": "veckor",
         "year": "år",
-        "years": "år"
+        "years": "år",
+        "empty": "",
+        "pushover_sound": "",
+        "fido2_webauthn": "",
+        "recent_successful_connections": "",
+        "value": "",
+        "with_app_password": "",
+        "attribute": "",
+        "from": "",
+        "allowed_protocols": "",
+        "apple_connection_profile_with_app_password": "",
+        "change_password_hint_app_passwords": "",
+        "clear_recent_successful_connections": "",
+        "direct_protocol_access": "",
+        "last_pw_change": "",
+        "last_ui_login": "",
+        "login_history": "",
+        "mailbox": "",
+        "mailbox_general": "",
+        "mailbox_settings": "",
+        "open_logs": "",
+        "open_webmail_sso": "",
+        "syncjob_check_log": "",
+        "syncjob_last_run_result": "",
+        "syncjob_EX_OK": "",
+        "syncjob_EXIT_CONNECTION_FAILURE": "",
+        "syncjob_EXIT_TLS_FAILURE": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE": "",
+        "syncjob_EXIT_OVERQUOTA": "",
+        "syncjob_EXIT_CONNECTION_FAILURE_HOST1": "",
+        "syncjob_EXIT_AUTHENTICATION_FAILURE_USER1": ""
     },
     "warning": {
         "cannot_delete_self": "Inloggade användare kan inte tas bort",
@@ -1111,5 +1272,38 @@
         "quota_exceeded_scope": "Domänkvoten fylld: Endast postlådor med obegränsade kvoter kan skapas på den här domänen.",
         "session_token": "Formulär-nyckeln är ogiltig: Nyckeln matchar inte",
         "session_ua": "Formulär-nyckeln är ogiltig: User-Agenten kunde inte valideras"
+    },
+    "datatables": {
+        "info": "",
+        "expand_all": "",
+        "emptyTable": "",
+        "infoFiltered": "",
+        "infoEmpty": "",
+        "lengthMenu": "",
+        "loadingRecords": "",
+        "processing": "",
+        "search": "",
+        "zeroRecords": "",
+        "paginate": {
+            "first": "",
+            "last": "",
+            "next": "",
+            "previous": ""
+        },
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "collapse_all": "",
+        "thousands": "",
+        "decimal": "",
+        "infoPostFix": ""
+    },
+    "ratelimit": {
+        "day": "",
+        "disabled": "",
+        "second": "",
+        "minute": "",
+        "hour": ""
     }
 }

+ 4 - 2
data/web/lang/lang.tr-tr.json

@@ -350,7 +350,8 @@
         "reset_limit": "Hashi kaldır",
         "routing": "Yönlendirme",
         "rsetting_add_rule": "Kural ekle",
-        "rsetting_content": "Kural içeriği"
+        "rsetting_content": "Kural içeriği",
+        "add": ""
     },
     "warning": {
         "cannot_delete_self": "Cannot delete logged in user",
@@ -388,7 +389,8 @@
         "loadingRecords": "Yükleniyor...",
         "processing": "Lütfen bekleyin...",
         "search": "Ara:",
-        "zeroRecords": "Eşleşen kayıt bulunamadı"
+        "zeroRecords": "Eşleşen kayıt bulunamadı",
+        "infoPostFix": ""
     },
     "edit": {
         "inactive": "Pasif",

+ 12 - 5
data/web/lang/lang.uk-ua.json

@@ -349,7 +349,9 @@
         "queue_unban": "розблокувати",
         "f2b_manage_external": "Керування Fail2Ban ззовні",
         "f2b_manage_external_info": "Fail2ban буде підтримувати список заборонених, але не буде активно встановлювати правила для блокування трафіку. Використовуйте згенерований список заборон нижче для зовнішнього блокування трафіку.",
-        "copy_to_clipboard": "Текст скопійовано в буфер обміну!"
+        "copy_to_clipboard": "Текст скопійовано в буфер обміну!",
+        "logo_normal_label": "",
+        "logo_dark_label": ""
     },
     "danger": {
         "alias_domain_invalid": "Неприпустимий псевдонім домену: %s",
@@ -478,7 +480,9 @@
         "extended_sender_acl_denied": "відсутній ACL для встановлення зовнішніх адрес відправників",
         "template_exists": "Шаблон %s вже існує",
         "template_id_invalid": "Ідентифікатор шаблону %s недійсний",
-        "template_name_invalid": "Ім'я шаблону невірне"
+        "template_name_invalid": "Ім'я шаблону невірне",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": ""
     },
     "debug": {
         "chart_this_server": "Діаграма (цей сервер)",
@@ -660,7 +664,8 @@
         },
         "domain_footer_html": "Нижній колонтитул HTML",
         "domain_footer_plain": "ЗВИЧАЙНИЙ нижній колонтитул",
-        "custom_attributes": "Користувацькі атрибути"
+        "custom_attributes": "Користувацькі атрибути",
+        "domain_footer_skip_replies": ""
     },
     "fido2": {
         "confirm": "Підтвердити",
@@ -1067,7 +1072,8 @@
         "cors_headers_edited": "Налаштування CORS збережено",
         "ip_check_opt_in_modified": "Перевірка IP-адреси успішно збережено",
         "template_removed": "Шаблону із ID %s видалено",
-        "f2b_banlist_refreshed": "Ідентифікатор списку заборонених успішно оновлено."
+        "f2b_banlist_refreshed": "Ідентифікатор списку заборонених успішно оновлено.",
+        "domain_footer_modified": ""
     },
     "tfa": {
         "confirm": "Підтвердьте",
@@ -1094,7 +1100,8 @@
         "set_tfa": "Встановити метод двофакторної перевірки",
         "u2f_deprecated": "Схоже, ваш ключ був зареєстрований за допомогою застарілого методу U2F. Ми дезактивуємо двофакторну автентифікацію для вас і видалимо ваш ключ.",
         "waiting_usb_auth": "<i>Очікування пристрою USB...</i><br><br>Будь ласка, натисніть зараз кнопку на USB пристрої.",
-        "waiting_usb_register": "<i>Очікування USB-пристрою...</i><br><br>Будь ласка, введіть пароль вище та підтвердіть реєстрацію, натиснувши кнопку на USB пристрої."
+        "waiting_usb_register": "<i>Очікування USB-пристрою...</i><br><br>Будь ласка, введіть пароль вище та підтвердіть реєстрацію, натиснувши кнопку на USB пристрої.",
+        "authenticators": ""
     },
     "user": {
         "action": "Дії",

+ 115 - 14
data/web/lang/lang.zh-cn.json

@@ -107,7 +107,8 @@
         "timeout2": "本地主机连接超时时间",
         "username": "用户名",
         "validate": "验证",
-        "validation_success": "验证成功"
+        "validation_success": "验证成功",
+        "dry": ""
     },
     "admin": {
         "access": "权限管理",
@@ -336,7 +337,21 @@
         "validate_license_now": "通过证书服务器验证 GUID",
         "verify": "验证",
         "yes": "&#10003;",
-        "options": "选项"
+        "options": "选项",
+        "f2b_max_ban_time": "最长封禁时间(秒)",
+        "copy_to_clipboard": "复制到粘贴板",
+        "allowed_methods": "",
+        "allowed_origins": "",
+        "logo_dark_label": "",
+        "logo_normal_label": "",
+        "cors_settings": "",
+        "f2b_ban_time_increment": "",
+        "f2b_manage_external": "",
+        "f2b_manage_external_info": "",
+        "ip_check": "",
+        "ip_check_disabled": "",
+        "ip_check_opt_in": "",
+        "queue_unban": ""
     },
     "danger": {
         "access_denied": "访问被拒绝或者表单数据无效",
@@ -456,7 +471,18 @@
         "validity_missing": "请设置有效期",
         "value_missing": "请填入所有值",
         "yotp_verification_failed": "Yubico OTP 认证失败: %s",
-        "template_exists": "模板 %s 已存在"
+        "template_exists": "模板 %s 已存在",
+        "template_name_invalid": "模板名称无效",
+        "webauthn_authenticator_failed": "",
+        "webauthn_username_failed": "",
+        "cors_invalid_method": "",
+        "cors_invalid_origin": "",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": "",
+        "webauthn_publickey_failed": "",
+        "demo_mode_enabled": "",
+        "extended_sender_acl_denied": "",
+        "template_id_invalid": ""
     },
     "debug": {
         "chart_this_server": "图表 (此服务器)",
@@ -487,7 +513,17 @@
         "container_disabled": "容器已被停止或禁用",
         "container_running": "运行中",
         "cores": "核心数",
-        "memory": "内存"
+        "memory": "内存",
+        "error_show_ip": "无法解析公网IP地址",
+        "show_ip": "显示公网IP",
+        "update_available": "有可用更新",
+        "update_failed": "无法检查更新",
+        "container_stopped": "",
+        "architecture": "",
+        "no_update_available": "",
+        "wip": "",
+        "current_time": "",
+        "timezone": ""
     },
     "diagnostics": {
         "cname_from_a": "来自 A/AAAA 记录的值。但只要记录指向正确的资源即可。",
@@ -611,7 +647,25 @@
         "title": "编辑对象",
         "unchanged_if_empty": "如果不更改则留空",
         "username": "用户名",
-        "validate_save": "验证并保存"
+        "validate_save": "验证并保存",
+        "footer_exclude": "",
+        "created_on": "",
+        "domain_footer_skip_replies": "",
+        "last_modified": "",
+        "custom_attributes": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_info": "",
+        "domain_footer_info_vars": {
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": "",
+            "custom": ""
+        },
+        "domain_footer_plain": "",
+        "pushover_sound": ""
     },
     "fido2": {
         "confirm": "确认",
@@ -652,7 +706,8 @@
         "quarantine": "隔离",
         "restart_netfilter": "重启 netfilter",
         "restart_sogo": "重启 SOGo",
-        "user_settings": "用户设置"
+        "user_settings": "用户设置",
+        "mailcow_system": ""
     },
     "info": {
         "awaiting_tfa_confirmation": "等待 TFA 确认",
@@ -831,7 +886,17 @@
         "mailbox_templates": "邮箱模板",
         "gal": "全局地址列表",
         "max_aliases": "最大别名数",
-        "max_mailboxes": "最大可能的邮箱数"
+        "max_mailboxes": "最大可能的邮箱数",
+        "goto_ham": "",
+        "goto_spam": "",
+        "templates": "",
+        "template": "",
+        "force_pw_update": "",
+        "last_modified": "",
+        "add_template": "",
+        "created_on": "",
+        "max_quota": "",
+        "relay_unknown": ""
     },
     "oauth2": {
         "access_denied": "请作为邮箱所有者登录以使用 OAuth2 授权",
@@ -897,13 +962,25 @@
     },
     "queue": {
         "queue_manager": "队列管理器",
-        "delete": "全部删除"
+        "delete": "全部删除",
+        "show_message": "",
+        "unban": "",
+        "unhold_mail": "",
+        "unhold_mail_legend": "",
+        "flush": "",
+        "info": "",
+        "legend": "",
+        "ays": "",
+        "deliver_mail": "",
+        "deliver_mail_legend": "",
+        "hold_mail": "",
+        "hold_mail_legend": ""
     },
     "ratelimit": {
         "disabled": "禁用",
         "second": "msgs / 秒",
         "minute": "msgs / 分钟",
-        "hour": "msgs / 小说",
+        "hour": "msgs / 小",
         "day": "msgs / 天"
     },
     "start": {
@@ -989,7 +1066,14 @@
         "verified_fido2_login": "FIDO2 登录验证成功",
         "verified_totp_login": "TOTP 登录验证成功",
         "verified_webauthn_login": "WebAuthn 登录验证成功",
-        "verified_yotp_login": "Yubico OTP 登录验证成功"
+        "verified_yotp_login": "Yubico OTP 登录验证成功",
+        "cors_headers_edited": "",
+        "domain_footer_modified": "",
+        "f2b_banlist_refreshed": "",
+        "ip_check_opt_in_modified": "",
+        "template_added": "",
+        "template_modified": "",
+        "template_removed": ""
     },
     "tfa": {
         "api_register": "%s 使用了 Yubico Cloud API,请<a href=\"https://upgrade.yubico.com/getapikey/\" target=\"_blank\">在此</a>为你的密钥获取 API 密钥",
@@ -1016,7 +1100,8 @@
         "webauthn": "WebAuthn 认证",
         "waiting_usb_auth": "<i>等待 USB 设备中...</i><br><br>现在请触碰你的 WebAuthn USB 设备上的按钮。",
         "waiting_usb_register": "<i>等待 USB 设备中...</i><br><br>请在上方输入你的密码并请触碰你的 WebAuthn USB 设备上的按钮以确认注册该 WebAuthn 设备。",
-        "yubi_otp": "Yubico OTP 认证"
+        "yubi_otp": "Yubico OTP 认证",
+        "authenticators": ""
     },
     "user": {
         "action": "操作",
@@ -1177,7 +1262,10 @@
         "weeks": "周",
         "with_app_password": "包含应用密码",
         "year": "年",
-        "years": "年"
+        "years": "年",
+        "pushover_sound": "",
+        "attribute": "",
+        "value": ""
     },
     "warning": {
         "cannot_delete_self": "不能删除已登录的用户",
@@ -1202,7 +1290,20 @@
         "paginate": {
             "first": "第一页",
             "last": "最后一页",
-            "previous": "上一页"
-        }
+            "previous": "上一页",
+            "next": "下一页"
+        },
+        "decimal": "",
+        "infoPostFix": "",
+        "infoFiltered": "",
+        "thousands": "",
+        "lengthMenu": "",
+        "loadingRecords": "",
+        "zeroRecords": "",
+        "aria": {
+            "sortAscending": "",
+            "sortDescending": ""
+        },
+        "emptyTable": ""
     }
 }

+ 22 - 5
data/web/lang/lang.zh-tw.json

@@ -480,7 +480,9 @@
         "extended_sender_acl_denied": "缺少設定外部寄件者地址的 ACL",
         "template_exists": "模板 %s 已存在",
         "template_id_invalid": "範本 ID %s 無效",
-        "template_name_invalid": "模板名稱無效"
+        "template_name_invalid": "模板名稱無效",
+        "img_dimensions_exceeded": "",
+        "img_size_exceeded": ""
     },
     "debug": {
         "chart_this_server": "圖表 (此伺服器)",
@@ -520,7 +522,8 @@
         "update_available": "有可用更新",
         "no_update_available": "系統已經是最新版本",
         "update_failed": "無法檢查更新",
-        "wip": "工作正在進行中"
+        "wip": "工作正在進行中",
+        "timezone": ""
     },
     "diagnostics": {
         "cname_from_a": "由 A/AAAA 紀錄獲取。只要紀錄指向正確的資源,此功能就會持續運作。",
@@ -650,7 +653,19 @@
         "validate_save": "驗證並儲存",
         "domain_footer_info": "網域範圍的頁尾將會新增至與該網域內的位址關聯的所有外發電子郵件。 <br> 以下變數可用於頁尾:",
         "custom_attributes": "自訂屬性",
-        "pushover_sound": "聲音"
+        "pushover_sound": "聲音",
+        "domain_footer_skip_replies": "",
+        "domain_footer": "",
+        "domain_footer_html": "",
+        "domain_footer_info_vars": {
+            "auth_user": "",
+            "from_user": "",
+            "from_name": "",
+            "from_addr": "",
+            "from_domain": "",
+            "custom": ""
+        },
+        "domain_footer_plain": ""
     },
     "fido2": {
         "confirm": "確認",
@@ -1069,7 +1084,8 @@
         "webauthn": "WebAuthn 認證",
         "waiting_usb_auth": "<i>等待 USB 裝置...</i><br><br>請觸碰 USB 裝置上的按鈕。",
         "waiting_usb_register": "<i>等待 USB 裝置...</i><br><br>請輸入密碼並觸碰 USB 裝置上的按鈕來確認註冊。",
-        "yubi_otp": "Yubico OTP 認證"
+        "yubi_otp": "Yubico OTP 認證",
+        "authenticators": ""
     },
     "user": {
         "action": "操作",
@@ -1271,7 +1287,8 @@
         "collapse_all": "全部折疊",
         "emptyTable": "表中沒有可用數據",
         "thousands": ",",
-        "decimal": "."
+        "decimal": ".",
+        "infoPostFix": ""
     },
     "queue": {
         "deliver_mail_legend": "嘗試重新投遞選定的郵件。",

+ 0 - 1
data/web/templates/base.twig

@@ -146,7 +146,6 @@
   var lang_fido2 = {{ lang_fido2|raw }};
   var docker_timeout = {{ docker_timeout|raw }} * 1000;
   var mailcow_cc_role = '{{ mailcow_cc_role }}';
-  var last_login = '{{ last_login }}';
   var mailcow_info = {
     version_tag: '{{ mailcow_info.version_tag }}',
     last_version_tag: '{{ mailcow_info.last_version_tag }}',

+ 1 - 1
data/web/templates/debug.twig

@@ -77,7 +77,7 @@
                         <td>Version</td>
                         <td class="text-break">
                           <div class="fw-bolder">
-                            <p ><a href="#" id="mailcow_version">{{ mailcow_info.version_tag }}</a></p>
+                            <p><a href="{{ mailcow_info.git_project_url }}/releases/tag/{{ mailcow_info.version_tag }}" id="mailcow_version" target="_blank">{{ mailcow_info.version_tag }}</a></p>
                             <p id="mailcow_update"></p>
                           </div>
                         </td>

+ 1 - 1
data/web/templates/user/tab-user-auth.twig

@@ -155,7 +155,7 @@
               <li class="login-history" data-days="31"><a class="dropdown-item" href="#">1 {{ lang.user.month }}</a></li>
             </ul>
           </div>
-          <div class="last-login mt-4"></div>
+          <div class="last-login mt-4" id="recent-logins"></div>
           <span class="clear-last-logins mt-2">
             {{ lang.user.clear_recent_successful_connections }}
           </span>

+ 16 - 14
docker-compose.yml

@@ -1,8 +1,7 @@
-version: '2.1'
 services:
 
     unbound-mailcow:
-      image: mailcow/unbound:1.21
+      image: mailcow/unbound:1.22
       environment:
         - TZ=${TZ}
         - SKIP_UNBOUND_HEALTHCHECK=${SKIP_UNBOUND_HEALTHCHECK:-n}
@@ -62,7 +61,7 @@ services:
             - redis
 
     clamd-mailcow:
-      image: mailcow/clamd:1.65
+      image: mailcow/clamd:1.66
       restart: always
       depends_on:
         unbound-mailcow:
@@ -81,7 +80,7 @@ services:
             - clamd
 
     rspamd-mailcow:
-      image: mailcow/rspamd:1.95
+      image: mailcow/rspamd:1.96
       stop_grace_period: 30s
       depends_on:
         - dovecot-mailcow
@@ -111,7 +110,7 @@ services:
             - rspamd
 
     php-fpm-mailcow:
-      image: mailcow/phpfpm:1.87
+      image: mailcow/phpfpm:1.88
       command: "php-fpm -d date.timezone=${TZ} -d expose_php=0"
       depends_on:
         - redis-mailcow
@@ -222,7 +221,7 @@ services:
             - sogo
 
     dovecot-mailcow:
-      image: mailcow/dovecot:1.28.2
+      image: mailcow/dovecot:1.30
       depends_on:
         - mysql-mailcow
         - netfilter-mailcow
@@ -265,6 +264,7 @@ services:
         - REDIS_SLAVEOF_IP=${REDIS_SLAVEOF_IP:-}
         - REDIS_SLAVEOF_PORT=${REDIS_SLAVEOF_PORT:-}
         - COMPOSE_PROJECT_NAME=${COMPOSE_PROJECT_NAME:-mailcow-dockerized}
+        - FLATCURVE_EXPERIMENTAL=${FLATCURVE_EXPERIMENTAL:-n}
       ports:
         - "${DOVEADM_PORT:-127.0.0.1:19991}:12345"
         - "${IMAP_PORT:-143}:143"
@@ -290,7 +290,7 @@ services:
         ofelia.job-exec.dovecot_sarules.schedule: "@every 24h"
         ofelia.job-exec.dovecot_sarules.command: "/bin/bash -c \"/usr/local/bin/sa-rules.sh\""
         ofelia.job-exec.dovecot_fts.schedule: "@every 24h"
-        ofelia.job-exec.dovecot_fts.command: "/usr/bin/curl http://solr:8983/solr/dovecot-fts/update?optimize=true"
+        ofelia.job-exec.dovecot_fts.command: "/bin/bash -c \"/usr/local/bin/gosu vmail /usr/local/bin/optimize-fts.sh\""
         ofelia.job-exec.dovecot_repl_health.schedule: "@every 5m"
         ofelia.job-exec.dovecot_repl_health.command: "/bin/bash -c \"/usr/local/bin/gosu vmail /usr/local/bin/repl_health.sh\""
       ulimits:
@@ -305,7 +305,7 @@ services:
             - dovecot
 
     postfix-mailcow:
-      image: mailcow/postfix:1.74
+      image: mailcow/postfix:1.75
       depends_on:
         mysql-mailcow:
           condition: service_started
@@ -405,13 +405,14 @@ services:
           condition: service_started
         unbound-mailcow:
           condition: service_healthy
-      image: mailcow/acme:1.87
+      image: mailcow/acme:1.88
       dns:
         - ${IPV4_NETWORK:-172.22.1}.254
       environment:
         - LOG_LINES=${LOG_LINES:-9999}
         - ACME_CONTACT=${ACME_CONTACT:-}
         - ADDITIONAL_SAN=${ADDITIONAL_SAN}
+        - AUTODISCOVER_SAN=${AUTODISCOVER_SAN:-y}
         - MAILCOW_HOSTNAME=${MAILCOW_HOSTNAME}
         - DBNAME=${DBNAME}
         - DBUSER=${DBUSER}
@@ -441,7 +442,7 @@ services:
             - acme
 
     netfilter-mailcow:
-      image: mailcow/netfilter:1.58
+      image: mailcow/netfilter:1.59
       stop_grace_period: 30s
       restart: always
       privileged: true
@@ -460,7 +461,7 @@ services:
         - /lib/modules:/lib/modules:ro
 
     watchdog-mailcow:
-      image: mailcow/watchdog:2.02
+      image: mailcow/watchdog:2.03
       dns:
         - ${IPV4_NETWORK:-172.22.1}.254
       tmpfs:
@@ -532,7 +533,7 @@ services:
             - watchdog
 
     dockerapi-mailcow:
-      image: mailcow/dockerapi:2.07
+      image: mailcow/dockerapi:2.08
       security_opt:
         - label=disable
       restart: always
@@ -553,7 +554,7 @@ services:
     
     ##### Will be removed soon #####
     solr-mailcow:
-      image: mailcow/solr:1.8.2
+      image: mailcow/solr:1.8.3
       restart: always
       depends_on:
         - netfilter-mailcow
@@ -565,6 +566,7 @@ services:
         - TZ=${TZ}
         - SOLR_HEAP=${SOLR_HEAP:-1024}
         - SKIP_SOLR=${SKIP_SOLR:-y}
+        - FLATCURVE_EXPERIMENTAL=${FLATCURVE_EXPERIMENTAL:-n}
       networks:
         mailcow-network:
           aliases:
@@ -572,7 +574,7 @@ services:
     ################################
 
     olefy-mailcow:
-      image: mailcow/olefy:1.12
+      image: mailcow/olefy:1.13
       restart: always
       environment:
         - TZ=${TZ}

+ 7 - 0
generate_config.sh

@@ -336,6 +336,13 @@ MAILDIR_GC_TIME=7200
 
 ADDITIONAL_SAN=
 
+# Obtain certificates for autodiscover.* and autoconfig.* domains.
+# This can be useful to switch off in case you are in a scenario where a reverse proxy already handles those.
+# There are mixed scenarios where ports 80,443 are occupied and you do not want to share certs
+# between services. So acme-mailcow obtains for maildomains and all web-things get handled
+# in the reverse proxy.
+AUTODISCOVER_SAN=y
+
 # Additional server names for mailcow UI
 #
 # Specify alternative addresses for the mailcow UI to respond to

+ 0 - 1
helper-scripts/docker-compose.override.yml.d/BUILD_FLAGS/docker-compose.override.yml

@@ -1,4 +1,3 @@
-version: '2.1'
 services:
   unbound-mailcow:
     build: ./data/Dockerfiles/unbound

+ 0 - 1
helper-scripts/docker-compose.override.yml.d/EXTERNAL_DNS/docker-compose.override.yml

@@ -1,4 +1,3 @@
-version: '2.1'
 services:
 
     clamd-mailcow:

+ 1 - 2
helper-scripts/docker-compose.override.yml.d/EXTERNAL_MYSQL_SOCKET/docker-compose.override.yml

@@ -1,4 +1,3 @@
-version: '2.1'
 services:
 
     php-fpm-mailcow:
@@ -26,6 +25,6 @@ services:
         - /var/run/mysqld/mysqld.sock:/var/run/mysqld/mysqld.sock
 
     mysql-mailcow:
-      image: alpine:3.19
+      image: alpine:3.20
       command: /bin/true
       restart: "no"

+ 0 - 1
helper-scripts/docker-compose.override.yml.d/HAPROXY/docker-compose.override.yml

@@ -2,7 +2,6 @@
 ## Set haproxy_trusted_networks in Dovecots extra.conf!
 ##
 
-version: '2.1'
 services:
 
     dovecot-mailcow:

+ 34 - 1
helper-scripts/nextcloud.sh

@@ -1,6 +1,39 @@
 #!/usr/bin/env bash
 # renovate: datasource=github-releases depName=nextcloud/server versioning=semver extractVersion=^v(?<version>.*)$
-NEXTCLOUD_VERSION=28.0.1
+NEXTCLOUD_VERSION=28.0.6
+
+display_warning() {
+    local message=("$@")
+    local max_length=0
+
+    for line in "${message[@]}"; do
+        if (( ${#line} > max_length )); then
+            max_length=${#line}
+        fi
+    done
+
+    local border=$(printf '%*s' "$((max_length + 4))" '' | tr ' ' '#')
+
+    echo -e "\e[31m${border}"
+    for line in "${message[@]}"; do
+        printf "\e[31m# %-*s #\n" "$max_length" "$line"
+    done
+    echo -e "\e[31m${border}"
+    echo -e "\e[0m"
+}
+
+display_warning "WARNING: This Script is deprecated and will be removed in December 2024!" \
+                "mailcow will drop this installation/maintenance script within December 2024..." \
+                "To ensure you can still use your Nextcloud Datas, please migrate to a standalone" \
+                "Nextcloud instance either on a new Host or this host." \
+                "You can either use Nextcloud in Docker or install it manually." \
+                " "\
+                "mailcow will NOT DELETE any Nextcloud Data, even when this script was removed!!"
+
+echo -e "Waiting 5 seconds before continuing..."
+
+
+sleep 5
 
 echo -ne "Checking prerequisites..."
 sleep 1

+ 13 - 0
update.sh

@@ -450,6 +450,7 @@ CONFIG_ARRAY=(
   "SKIP_CLAMD"
   "SKIP_IP_CHECK"
   "ADDITIONAL_SAN"
+  "AUTODISCOVER_SAN"
   "DOVEADM_PORT"
   "IPV4_NETWORK"
   "IPV6_NETWORK"
@@ -715,6 +716,18 @@ for option in ${CONFIG_ARRAY[@]}; do
       echo '# Comma separated list without spaces! Example: ADDITIONAL_SERVER_NAMES=a.b.c,d.e.f' >> mailcow.conf
       echo 'ADDITIONAL_SERVER_NAMES=' >> mailcow.conf
     fi
+
+  elif [[ ${option} == "AUTODISCOVER_SAN" ]]; then
+    if ! grep -q ${option} mailcow.conf; then
+      echo "Adding new option \"${option}\" to mailcow.conf"
+      echo '# Obtain certificates for autodiscover.* and autoconfig.* domains.' >> mailcow.conf
+      echo '# This can be useful to switch off in case you are in a scenario where a reverse proxy already handles those.' >> mailcow.conf
+      echo '# There are mixed scenarios where ports 80,443 are occupied and you do not want to share certs' >> mailcow.conf
+      echo '# between services. So acme-mailcow obtains for maildomains and all web-things get handled' >> mailcow.conf
+      echo '# in the reverse proxy.' >> mailcow.conf
+      echo 'AUTODISCOVER_SAN=y' >> mailcow.conf
+    fi
+
   elif [[ ${option} == "ACME_CONTACT" ]]; then
     if ! grep -q ${option} mailcow.conf; then
       echo "Adding new option \"${option}\" to mailcow.conf"

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini