diff --git a/actions/email_server b/actions/email_server
new file mode 100755
index 000000000..1cc122e5d
--- /dev/null
+++ b/actions/email_server
@@ -0,0 +1,82 @@
+#!/usr/bin/python3
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import argparse
+import logging
+import os
+import sys
+
+import plinth.log
+
+EXIT_SYNTAX = 10
+EXIT_PERM = 20
+
+# Set up logging
+plinth.log.pipe_to_syslog(to_stderr='tty')
+logger = logging.getLogger(os.path.basename(__file__))
+
+
+def reserved_for_root(fun):
+ def wrapped(*args, **kwargs):
+ if os.getuid() != 0:
+ logger.critical('This action is reserved for root')
+ sys.exit(EXIT_PERM)
+ return fun(*args, **kwargs)
+ return wrapped
+
+
+def main():
+ if not sys.stdin.isatty():
+ print('WARNING: Output will not be shown. Check syslog for logs',
+ file=sys.stderr)
+
+ parser = argparse.ArgumentParser()
+ group = parser.add_mutually_exclusive_group(required=True)
+ group.add_argument('-i', nargs='+', dest='ipc')
+
+ # Select the first non-empty dict item
+ adict = vars(parser.parse_args())
+ generator = (kv for kv in adict.items() if kv[1] is not None)
+ subcommand, arguments = next(generator)
+
+ function = globals()['subcommand_' + subcommand]
+ try:
+ function(*arguments)
+ except Exception as e:
+ logger.exception(e)
+ _log_additional_info()
+ sys.exit(1)
+
+
+@reserved_for_root
+def subcommand_ipc(module_name, action_name, *args):
+ import plinth.modules.email_server.audit as audit
+
+ # We only run actions defined in the audit module
+ if module_name not in audit.__all__:
+ logger.critical('Bad module name: %r', module_name)
+ sys.exit(EXIT_SYNTAX)
+
+ module = getattr(audit, module_name)
+ function = getattr(module, 'action_' + action_name, None)
+ if function is None:
+ logger.critical('Bad action: %s/%r', module_name, action_name)
+ sys.exit(EXIT_SYNTAX)
+
+ function(*args)
+
+
+def _log_additional_info():
+ import grp
+ import pwd
+ resu = ','.join(pwd.getpwuid(uid).pw_name for uid in os.getresuid())
+ resg = ','.join(grp.getgrgid(gid).gr_name for gid in os.getresgid())
+ pyver = sys.version.replace('\n', ' ')
+ logger.error('--- Additional Information ---')
+ logger.error('resuid=%s, resgid=%s', resu, resg)
+ logger.error('argv=%r, cwd=%r', sys.argv, os.getcwd())
+ logger.error('pyver=%s (%s)', pyver, os.uname().machine)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/actions/wordpress b/actions/wordpress
new file mode 100755
index 000000000..ee2afe868
--- /dev/null
+++ b/actions/wordpress
@@ -0,0 +1,189 @@
+#!/usr/bin/python3
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""
+Configuration helper for WordPress.
+"""
+
+import argparse
+import os
+import pathlib
+import random
+import shutil
+import string
+import subprocess
+
+import augeas
+from plinth import action_utils
+from plinth.modules.wordpress import PUBLIC_ACCESS_FILE
+
+_config_file_path = pathlib.Path('/etc/wordpress/config-default.php')
+_db_file_path = pathlib.Path('/etc/wordpress/database.php')
+_db_backup_file = pathlib.Path(
+ '/var/lib/plinth/backups-data/wordpress-database.sql')
+DB_HOST = 'localhost'
+DB_NAME = 'wordpress_fbx'
+DB_USER = 'wordpress_fbx'
+
+
+def parse_arguments():
+ """Return parsed command line arguments as dictionary."""
+ parser = argparse.ArgumentParser()
+ subparsers = parser.add_subparsers(dest='subcommand', help='Sub command')
+
+ subparsers.add_parser('setup',
+ help='Create initial configuration and database')
+ subparsers.add_parser('dump-database', help='Dump database to file')
+ subparsers.add_parser('restore-database',
+ help='Restore database from file')
+ subparser = subparsers.add_parser('set-public',
+ help='Allow/disallow public access')
+ subparser.add_argument('--enable', choices=('True', 'False'),
+ help='Whether to enable or disable public acceess')
+
+ subparsers.required = True
+ return parser.parse_args()
+
+
+def subcommand_setup(_):
+ """Create initial configuration and database for WordPress."""
+ if _db_file_path.exists() or _config_file_path.exists():
+ return
+
+ db_password = _generate_secret_key(16)
+
+ _create_config_file(DB_HOST, DB_NAME, DB_USER, db_password)
+ _create_database(DB_NAME)
+ _set_privileges(DB_HOST, DB_NAME, DB_USER, db_password)
+
+
+def _create_config_file(db_host, db_name, db_user, db_password):
+ """Create a PHP configuration file included by WordPress."""
+ secret_keys = [_generate_secret_key() for _ in range(8)]
+
+ config_contents = f'''~`+=,.:/?|')
+ rand = random.SystemRandom()
+ return ''.join(rand.choice(chars) for _ in range(length))
+
+
+def subcommand_set_public(arguments):
+ """Allow/disallow public access."""
+ public_access_file = pathlib.Path(PUBLIC_ACCESS_FILE)
+ if arguments.enable == 'True':
+ public_access_file.touch()
+ else:
+ public_access_file.unlink(missing_ok=True)
+
+ action_utils.service_reload('apache2')
+
+
+def subcommand_dump_database(_):
+ """Dump database to file."""
+ _db_backup_file.parent.mkdir(parents=True, exist_ok=True)
+ with _db_backup_file.open('w') as file_handle:
+ subprocess.run([
+ 'mysqldump', '--add-drop-database', '--add-drop-table',
+ '--add-drop-trigger', '--user', 'root', '--databases', DB_NAME
+ ], stdout=file_handle, check=True)
+
+
+def subcommand_restore_database(_):
+ """Restore database from file."""
+ with _db_backup_file.open('r') as file_handle:
+ subprocess.run(['mysql', '--user', 'root'], stdin=file_handle,
+ check=True)
+
+ _set_privileges(DB_HOST, DB_NAME, DB_USER, _read_db_password())
+
+
+def _read_db_password():
+ """Return the password stored in the DB configuration file."""
+ aug = _load_augeas()
+ return aug.get('./$dbpass').strip('\'"')
+
+
+def _load_augeas():
+ """Initialize augeas."""
+ aug = augeas.Augeas(flags=augeas.Augeas.NO_LOAD +
+ augeas.Augeas.NO_MODL_AUTOLOAD)
+ aug.transform('Phpvars', str(_db_file_path))
+ aug.set('/augeas/context', '/files' + str(_db_file_path))
+ aug.load()
+
+ return aug
+
+
+def main():
+ """Parse arguments and perform all duties."""
+ arguments = parse_arguments()
+
+ subcommand = arguments.subcommand.replace('-', '_')
+ subcommand_method = globals()['subcommand_' + subcommand]
+ subcommand_method(arguments)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/container b/container
index 1b9082446..c02e6b7b2 100755
--- a/container
+++ b/container
@@ -126,7 +126,6 @@ import sys
import tempfile
import time
import urllib.parse
-
from urllib.request import urlopen
URLS = {
@@ -139,7 +138,7 @@ URLS = {
}
TRUSTED_KEYS = ['013D86D8BA32EAB4A6691BF85D4153D6FE188FC8']
-KEY_SERVER = 'keys.gnupg.net'
+KEY_SERVER = 'keyserver.ubuntu.com'
PROVISION_SCRIPT = '''
set -x
diff --git a/debian/changelog b/debian/changelog
index 067b21f78..b1d6fe8d2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,71 @@
+freedombox (21.8) unstable; urgency=medium
+
+ [ Andrij Mizyk ]
+ * Translated using Weblate (Ukrainian)
+ * Translated using Weblate (Ukrainian)
+ * Translated using Weblate (Ukrainian)
+
+ [ fliu ]
+ * diagnostics: Allow underscores (_) in app names
+ * doc/dev: Using mocking instead of importing external modules
+ * email: Basic app to manage an email server
+ * email: Enable LDAP by calling postconf in a thread-safe way
+ * email: Implement `email_server ipc set_sasl` and `set_submission`
+ * email: Set up local delivery (no spam filtering)
+ * email: Code quality fixes
+ * email: Fix enabling SMTPS; check return value
+ * email: dovecot: Support user lookup by UID number
+ * email: Address some code review comments
+ * email: Install rspamd; proxy its web interface
+ * email: Parse command arguments with a mutually exclusive group
+ * email: mutex: create lock file as plinth user
+ * email, plinth.log: Write more information to syslog
+ * email: postconf: Handle postconf returning an empty key
+ * email: audit: improve the speed of post-installation setup
+ * email: Open lock file as plinth user
+ * email: Support UID number lookup in Dovecot
+ * email: diagnostics: Fix sudo permission problem
+ * email: views: Implement tab rendering
+ * email: Implement alias management
+ * email: aliases: Use bootstrap styles
+ * email: Add UI for creating the home directory
+ * email: Add templates for TLS and domains
+ * email: Implement view for setting up domains
+ * email: postfix: Install LDAP map support
+ * email: Implement spam sorting with sieve
+ * email: apache: X-Robots-Tag header, full URL match
+ * email: Implement auto-discovery
+ * email: LMTP: remove the recipient's UID number from email headers
+ * email: Code cleanup
+ * email: Implement outbound mail filtering
+ * email: Reload postfix in domain view
+ * email: Code cleanup, address reviews
+ * email: Local delivery: use full email address
+ * email: postfix: dovecot: Set strong security parameters
+ * email: setup: Find Let's Encrypt certificates
+ * email: Documentation, code cleanup
+ * email: setup: Configure Roundcube
+ * email: Sender spoofing patch 1/2: domain rewriting
+ * email: implemented service alert
+
+ [ Sunil Mohan Adapa ]
+ * doc/dev: Drop seemingly irrelevant automodule reference
+ * container: Use keyserver.ubuntu.com as the default keyserver
+ * d/lintian-overrides: Allow all systemd services paths
+ * d/control: Drop wireless-tools as recommends
+ * tests: functional: Add a convenience method to logout
+ * wordpress: New app to manage a WordPress site/blog
+
+ [ Petter Reinholdtsen ]
+ * Translated using Weblate (Norwegian Bokmål)
+
+ [ James Valleroy ]
+ * security: Remove display of past vulnerabilities
+ * locale: Update translation strings
+ * doc: Fetch latest manual
+
+ -- James Valleroy Mon, 30 Aug 2021 20:01:46 -0400
+
freedombox (21.7~bpo11+1) bullseye-backports; urgency=medium
* Rebuild for bullseye-backports.
diff --git a/debian/control b/debian/control
index a21a63897..b0241cbe3 100644
--- a/debian/control
+++ b/debian/control
@@ -176,8 +176,6 @@ Recommends:
tcpdump,
# Basic editor, VIM style
vim-tiny,
-# iwconfig, iwlist and other wireless network tools
- wireless-tools,
# Priority: standard
whois,
# Basic editor, Emacs style
diff --git a/debian/copyright b/debian/copyright
index 6d594ce10..dc737e4d1 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -278,6 +278,12 @@ Copyright: 2005 Andrew Dolgov
Comment: https://git.tt-rss.org/fox/tt-rss/src/master/images/favicon-72px.png
License: GPL-3+
+Files: static/themes/default/icons/wordpress.png
+ static/themes/default/icons/wordpress.svg
+Copyright: 2011-2021 WordPress Contributors
+Comment: https://github.com/WordPress/wordpress-develop/blob/master/src/wp-admin/images/wordpress-logo.svg
+License: GPL-2+
+
Files: static/themes/default/icons/windows.png
static/themes/default/icons/windows.svg
Copyright: 2007 ruli (https://thenounproject.com/2007ruli/)
diff --git a/debian/freedombox.lintian-overrides b/debian/freedombox.lintian-overrides
index 408a2e0a6..549015397 100644
--- a/debian/freedombox.lintian-overrides
+++ b/debian/freedombox.lintian-overrides
@@ -15,3 +15,6 @@ freedombox binary: non-standard-apache2-configuration-name *
# web servers. At some point we would like to work with other web servers but
# that requires significant effort.
freedombox binary: web-application-works-only-with-apache
+
+# Temporary workaround for https://bugs.debian.org/992465
+freedombox: systemd-service-file-outside-lib usr/lib/systemd/system/*.service
diff --git a/debian/gbp.conf b/debian/gbp.conf
index 9746d42be..973a10492 100644
--- a/debian/gbp.conf
+++ b/debian/gbp.conf
@@ -1,3 +1,7 @@
[dch]
git-log = --no-merges
multimaint-merge = True
+
+[tag]
+debian-tag = v%(version)s
+sign-tags = True
diff --git a/doc/dev/conf.py b/doc/dev/conf.py
index 80d680a1b..937d93efd 100644
--- a/doc/dev/conf.py
+++ b/doc/dev/conf.py
@@ -16,24 +16,8 @@ list see the documentation: http://www.sphinx-doc.org/en/master/config
import os
import sys
-import django
-import django.conf
-
sys.path.insert(0, os.path.abspath('../../'))
-# -- Django setup ------------------------------------------------------------
-
-# Ensure that Django models can be imported by Sphinx
-import plinth.settings # noqa pylint: disable=E402 isort:skip
-
-kwargs = {}
-for setting in dir(plinth.settings):
- if setting.isupper():
- kwargs[setting] = getattr(plinth.settings, setting)
-
-django.conf.settings.configure(**kwargs)
-django.setup(set_prefix=True)
-
# -- Project information -----------------------------------------------------
# pylint: disable=invalid-name
@@ -209,4 +193,29 @@ autodoc_default_options = {
'special-members': '__init__',
}
+# Mock importing packages
+autodoc_mock_imports = [
+ 'apt',
+ 'augeas',
+ 'axes',
+ 'bootstrapform',
+ 'captcha',
+ 'cherrypy',
+ 'configobj',
+ 'dbus',
+ 'django',
+ 'gi',
+ 'markupsafe',
+ 'OpenSSL',
+ 'pam',
+ 'paramiko',
+ 'psutil',
+ 'pytest',
+ 'requests',
+ 'ruamel',
+ 'setuptools',
+ 'stronghold',
+ 'yaml',
+]
+
html_favicon = './_static/favicon.ico'
diff --git a/doc/dev/reference/index.rst b/doc/dev/reference/index.rst
index 1a16ce3e5..bf40769aa 100644
--- a/doc/dev/reference/index.rst
+++ b/doc/dev/reference/index.rst
@@ -20,5 +20,3 @@ and are updated when the API is updated.
views
forms
notifications
-
-.. automodule:: plinth.modules.ttrss
diff --git a/doc/manual/en/Download.raw.wiki b/doc/manual/en/Download.raw.wiki
index d29e85a7f..623caea35 100644
--- a/doc/manual/en/Download.raw.wiki
+++ b/doc/manual/en/Download.raw.wiki
@@ -44,25 +44,11 @@ It is important to verify the images you have downloaded to ensure that the file
* First open a terminal and import the public keys of the !FreedomBox developers who built the images:
{{{
-$ gpg --recv-keys BCBEBD57A11F70B23782BC5736C361440C9BC971
-
-$ gpg --recv-keys 7D6ADB750F91085589484BE677C0C75E7B650808
-
-# This is the FreedomBox CI server's key
-$ gpg --recv-keys 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
-}}}
- If this command shows an error such as ''new key but contains no user ID - skipped'', then use a different keyserver to download the keys:
- {{{
-$ gpg --keyserver keys.gnupg.net --recv-keys BCBEBD57A11F70B23782BC5736C361440C9BC971
-$ gpg --keyserver keys.gnupg.net --recv-keys 7D6ADB750F91085589484BE677C0C75E7B650808
-$ gpg --keyserver keys.gnupg.net --recv-keys 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
- }}}
- Or
- {{{
$ gpg --keyserver keyserver.ubuntu.com --recv-keys BCBEBD57A11F70B23782BC5736C361440C9BC971
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 7D6ADB750F91085589484BE677C0C75E7B650808
+# This is the FreedomBox CI server's key
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
- }}}
+}}}
* Next, verify the fingerprint of the public keys:
{{{
$ gpg --fingerprint BCBEBD57A11F70B23782BC5736C361440C9BC971
diff --git a/doc/manual/en/ReleaseNotes.raw.wiki b/doc/manual/en/ReleaseNotes.raw.wiki
index 838e5cbf2..c5c45d25f 100644
--- a/doc/manual/en/ReleaseNotes.raw.wiki
+++ b/doc/manual/en/ReleaseNotes.raw.wiki
@@ -10,6 +10,20 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f
The following are the release notes for each !FreedomBox version.
+== FreedomBox 21.8 (2021-08-30) ==
+
+=== Highlights ===
+
+ * wordpress: New app to manage a !WordPress site/blog
+
+=== Other Changes ===
+
+ * d/control: Drop wireless-tools as recommends
+ * email: Basic app to manage an email server
+ - Email server app is currently disabled by default, so it is not yet visible in the interface.
+ * locale: Update translations for Norwegian Bokmål, Ukrainian
+ * security: Remove display of past vulnerabilities
+
== FreedomBox 21.7 (2021-08-16) ==
=== Highlights ===
diff --git a/doc/manual/en/ejabberd.raw.wiki b/doc/manual/en/ejabberd.raw.wiki
index 5ed1a8d27..2662cbe2c 100644
--- a/doc/manual/en/ejabberd.raw.wiki
+++ b/doc/manual/en/ejabberd.raw.wiki
@@ -40,12 +40,6 @@ Once you have a Domain Name, you can tell your !FreedomBox to use it by setting
Please note that [[FreedomBox/Manual/PageKite|PageKite]] does not support the XMPP protocol at this time.
-=== Use Let's encrypt certificate for ejabberd ===
-
-If your !FreedomBox server uses a Let's Encrypt certificate, you will also want to use it for ejabberd. To do so, as your !FreedomBox admin, go to '''System''' > '''Let's Encrypt''', and select the checkbox at `Use certificate for ejabberd`:
-
-{{attachment:certificate-for-ejabberd.png|Use of certificate for Ejabberd}}
-
=== Registering FreedomBox users to use XMPP ===
Currently, all users created through !FreedomBox will be able to login to the XMPP server. You can add new users through the System module [[FreedomBox/Manual/Users|Users and Groups]]. It does not matter which Groups are selected for the new user.
diff --git a/doc/manual/en/images/certificate-for-ejabberd.png b/doc/manual/en/images/certificate-for-ejabberd.png
deleted file mode 100644
index 5e68901e3..000000000
Binary files a/doc/manual/en/images/certificate-for-ejabberd.png and /dev/null differ
diff --git a/doc/manual/es/Download.raw.wiki b/doc/manual/es/Download.raw.wiki
index 713f24e92..3b0775e7e 100644
--- a/doc/manual/es/Download.raw.wiki
+++ b/doc/manual/es/Download.raw.wiki
@@ -41,25 +41,11 @@ Es importante verificar las imágenes que has descargado para asegurar que el fi
* Primero abre un terminal e importa las claves publicas de los desarrolladores de !FreedomBox que construyeron las imágenes:
{{{
-$ gpg --recv-keys BCBEBD57A11F70B23782BC5736C361440C9BC971
-
-$ gpg --recv-keys 7D6ADB750F91085589484BE677C0C75E7B650808
-
-# Esta es la clave del servidor de integración contínua de FreedomBox
-$ gpg --recv-keys 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
-}}}
- Si este comando muestra un error como ''new key but contains no user ID - skipped'' usa un servidor de claves diferente para descargarlas:
- {{{
-$ gpg --keyserver keys.gnupg.net --recv-keys BCBEBD57A11F70B23782BC5736C361440C9BC971
-$ gpg --keyserver keys.gnupg.net --recv-keys 7D6ADB750F91085589484BE677C0C75E7B650808
-$ gpg --keyserver keys.gnupg.net --recv-keys 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
- }}}
- O
- {{{
$ gpg --keyserver keyserver.ubuntu.com --recv-keys BCBEBD57A11F70B23782BC5736C361440C9BC971
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 7D6ADB750F91085589484BE677C0C75E7B650808
+# Esta es la clave del servidor de integración contínua de FreedomBox
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 013D86D8BA32EAB4A6691BF85D4153D6FE188FC8
- }}}
+}}}
* A continuación, verifica la huella de las claves públicas:
{{{
$ gpg --fingerprint BCBEBD57A11F70B23782BC5736C361440C9BC971
diff --git a/doc/manual/es/ReleaseNotes.raw.wiki b/doc/manual/es/ReleaseNotes.raw.wiki
index 838e5cbf2..c5c45d25f 100644
--- a/doc/manual/es/ReleaseNotes.raw.wiki
+++ b/doc/manual/es/ReleaseNotes.raw.wiki
@@ -10,6 +10,20 @@ For more technical details, see the [[https://salsa.debian.org/freedombox-team/f
The following are the release notes for each !FreedomBox version.
+== FreedomBox 21.8 (2021-08-30) ==
+
+=== Highlights ===
+
+ * wordpress: New app to manage a !WordPress site/blog
+
+=== Other Changes ===
+
+ * d/control: Drop wireless-tools as recommends
+ * email: Basic app to manage an email server
+ - Email server app is currently disabled by default, so it is not yet visible in the interface.
+ * locale: Update translations for Norwegian Bokmål, Ukrainian
+ * security: Remove display of past vulnerabilities
+
== FreedomBox 21.7 (2021-08-16) ==
=== Highlights ===
diff --git a/doc/manual/es/ejabberd.raw.wiki b/doc/manual/es/ejabberd.raw.wiki
index baea0f7aa..287633db3 100644
--- a/doc/manual/es/ejabberd.raw.wiki
+++ b/doc/manual/es/ejabberd.raw.wiki
@@ -38,12 +38,6 @@ Una vez tengas ya tu Nombre de Dominio puedes decirle a tu !FreedomBox que lo us
Ten en cuenta que de momento [[es/FreedomBox/Manual/PageKite|PageKite]] no soporta el protocolo XMPP.
-=== Usar certificado Let's encrypt para ejabberd ===
-
-Si tu servidor !FreedomBox usa certificado Let's Encrypt querrás emplearlo también para ejabberd. Para ello, ve como admin de !FreedomBox a '''Sistema''' > '''Let's Encrypt''' y marca la caja `Usar certificado para ejabberd`:
-
-{{attachment:FreedomBox/Manual/ejabberd/certificate-for-ejabberd.png|Uso de certificado para Ejabberd}}
-
=== Habilitar a usuarios para usar XMPP ===
Actualmente todos los usuarios creados con !FreedomBox podrán ingresar al servidor XMPP. Puedes añadir usuarios nuevos con el módulo [[es/FreedomBox/Manual/Users|Usuarios y Grupos]] del Sistema. Los grupos seleccionados para el usuario nuevo no importan.
diff --git a/doc/manual/es/images/certificate-for-ejabberd.png b/doc/manual/es/images/certificate-for-ejabberd.png
deleted file mode 100644
index 5e68901e3..000000000
Binary files a/doc/manual/es/images/certificate-for-ejabberd.png and /dev/null differ
diff --git a/plinth/__init__.py b/plinth/__init__.py
index 74f79da13..6a912bf81 100644
--- a/plinth/__init__.py
+++ b/plinth/__init__.py
@@ -3,4 +3,4 @@
Package init file.
"""
-__version__ = '21.7'
+__version__ = '21.8'
diff --git a/plinth/locale/ar_SA/LC_MESSAGES/django.po b/plinth/locale/ar_SA/LC_MESSAGES/django.po
index 3fe0a0407..17e4cfba7 100644
--- a/plinth/locale/ar_SA/LC_MESSAGES/django.po
+++ b/plinth/locale/ar_SA/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2020-06-10 15:41+0000\n"
"Last-Translator: aiman an \n"
"Language-Team: Arabic (Saudi Arabia) Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Web Server"
+msgid "Email Server"
+msgstr "خادم ويب"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+msgid "Service Alert"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+msgid "Create home directory"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3130,10 +3375,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3801,11 +4042,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4862,11 +5098,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5132,8 +5363,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5161,30 +5392,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5938,10 +6165,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6118,7 +6341,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6190,13 +6413,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -6944,6 +7160,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7080,10 +7347,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/bg/LC_MESSAGES/django.po b/plinth/locale/bg/LC_MESSAGES/django.po
index 9842d5832..0cbad0666 100644
--- a/plinth/locale/bg/LC_MESSAGES/django.po
+++ b/plinth/locale/bg/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-01-18 12:32+0000\n"
"Last-Translator: ikmaak \n"
"Language-Team: Bulgarian Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Web Server"
+msgid "Email Server"
+msgstr "Уеб Сървър"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+msgid "Service Alert"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+msgid "Create home directory"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3137,10 +3382,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3808,11 +4049,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4869,11 +5105,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5143,8 +5374,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5172,30 +5403,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5949,10 +6176,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6129,7 +6352,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6201,13 +6424,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -6961,6 +7177,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7097,10 +7364,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/bn/LC_MESSAGES/django.po b/plinth/locale/bn/LC_MESSAGES/django.po
index 6c6fe7a97..d743126b8 100644
--- a/plinth/locale/bn/LC_MESSAGES/django.po
+++ b/plinth/locale/bn/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-06-16 07:33+0000\n"
"Last-Translator: Oymate \n"
"Language-Team: Bengali Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+msgid "Email Server"
+msgstr ""
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "Certificates"
+msgid "Has a TLS certificate"
+msgstr "অনুমতিপত্র"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "ডোমেন"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "নিষ্ক্রিয়"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "Enabled"
+msgid "Enable selected"
+msgstr "সক্রিয়"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service/Port"
+msgid "Service Alert"
+msgstr "সেবা/পোর্ট"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+msgid "Create home directory"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificates"
+msgid "Certificate path"
+msgstr "অনুমতিপত্র"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "ডোমেন"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enabled"
+msgid "Enabled aliases"
+msgstr "সক্রিয়"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "নিষ্ক্রিয়"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3128,10 +3387,6 @@ msgstr "বাতিল"
msgid "Service"
msgstr "সেবা"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "ডোমেন"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3799,11 +4054,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4860,11 +5110,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5132,8 +5377,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5161,30 +5406,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5938,10 +6179,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6118,7 +6355,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6190,13 +6427,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -6944,6 +7174,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7080,10 +7361,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/cs/LC_MESSAGES/django.po b/plinth/locale/cs/LC_MESSAGES/django.po
index 5ad9d8b96..1ac5b4adc 100644
--- a/plinth/locale/cs/LC_MESSAGES/django.po
+++ b/plinth/locale/cs/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-01-25 11:32+0000\n"
"Last-Translator: Milan \n"
"Language-Team: Czech . Doménu je možné nastavit na stránce nastavení systému."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Chat server"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "Available Domains"
+msgid "RoundCube availability"
+msgstr "Domény k dispozici"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Žádný certifikát"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Doména"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Vypnuto"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "kabel je připojen"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Označené zachycené stavy smazány"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Vytvořit novou zálohu"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Přidat"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "New Backup"
+msgid "New value"
+msgstr "Nová záloha"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Aktualizovat"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Typ služby"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Download directory"
+msgid "You do not have a home directory."
+msgstr "Složka pro stahování"
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Create home directory"
+msgstr "Vytvořit repozitář"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Aktuální stav:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Nastavení doménového názvu"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Stav certifikátu"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private repository"
+msgid "Private key path"
+msgstr "Neveřejný repozitář"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Domů"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Zabezpečení"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Domény"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Zapnout poškozování"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Vypnuto"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3627,10 +3910,6 @@ msgstr "Storno"
msgid "Service"
msgstr "Služba"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Domény"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4348,11 +4627,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Toto připojení není aktivní."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Zabezpečení"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5626,11 +5900,6 @@ msgstr ""
"lesssecureapps\">https://www.google.com/settings/security/lesssecureapps"
"a>)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "E-mailový klient"
@@ -5936,8 +6205,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5965,38 +6234,34 @@ msgid "Current Vulnerabilities"
msgstr "Stávající zranitelnosti zabezpečení"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Minulé zranitelnosti zabezpečení"
-
-#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Block Sandbox"
msgid "Sandboxed"
msgstr "Pískoviště s kostkami"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Block Sandbox"
msgid "Sandbox Coverage"
msgstr "Pískoviště s kostkami"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
#, fuzzy
#| msgid "yes"
msgid "Yes"
msgstr "ano"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
#, fuzzy
#| msgid "None"
msgid "No"
msgstr "Žádný"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
#, fuzzy
#| msgid "Tor is running"
msgid "Not running"
@@ -6878,10 +7143,6 @@ msgstr "Jméno domácího mazlíčka"
msgid "Add new introducer"
msgstr "Přidat nový uvaděč"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Přidat"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Připojené uvaděče"
@@ -7095,7 +7356,7 @@ msgstr "SOCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr "Tor SOCKS port je k dispozici na vašem %(box_name)s na TCP portu 9050."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Nastavení se nezměnila"
@@ -7192,13 +7453,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Aktualizovat"
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update"
@@ -8092,6 +8346,63 @@ msgstr "Smazat připojení"
msgid "Server deleted."
msgstr "Sdílení smazáno."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Adresa"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "wiki a blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "veřejný přístup"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8248,10 +8559,6 @@ msgstr "Základní funkce a webové rozhraní pro %(box_name)s"
msgid " Home"
msgstr " Domů"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Domů"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Aplikace"
@@ -8553,6 +8860,9 @@ msgstr "%(percentage)s%% dokončeno"
msgid "Gujarati"
msgstr "gudžarátština"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Minulé zranitelnosti zabezpečení"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "Správa archivu zpráv zapnuta"
@@ -9313,9 +9623,6 @@ msgstr "gudžarátština"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "Webový server přes vrstvu zabezpečeného soketu (SSL)"
-#~ msgid "Current status:"
-#~ msgstr "Aktuální stav:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Smazat wiki nebo blog"
@@ -9337,9 +9644,6 @@ msgstr "gudžarátština"
#~ msgid "Abort"
#~ msgstr "Přerušit"
-#~ msgid "New Backup"
-#~ msgstr "Nová záloha"
-
#~ msgid "chrony client in contact with servers"
#~ msgstr "klient chrony v kontaktu se servery"
diff --git a/plinth/locale/da/LC_MESSAGES/django.po b/plinth/locale/da/LC_MESSAGES/django.po
index 9b3cff649..2c50fb515 100644
--- a/plinth/locale/da/LC_MESSAGES/django.po
+++ b/plinth/locale/da/LC_MESSAGES/django.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: FreedomBox UI\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-01-18 12:32+0000\n"
"Last-Translator: ikmaak \n"
"Language-Team: Danish brugernavn@%(domainname)s. Du kan konfigurere systemets "
"domæne på Konfigurer siden."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Chatserver"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "Available Domains"
+msgid "RoundCube availability"
+msgstr "Tilgængelige Domæner"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certficate"
+msgid "Has a TLS certificate"
+msgstr "Intet certifikat"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Domæne"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+#, fuzzy
+#| msgid "Enable Roundcube"
+msgid "Roundcube"
+msgstr "Aktiver Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Deaktiveret"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "kabel forbundet"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete %(name)s"
+msgid "Delete selected"
+msgstr "Slet %(name)s"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Opret en ny sikkerhedskopi"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+#, fuzzy
+#| msgid "Address"
+msgid "Add"
+msgstr "Adresse"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Opdater"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Servicetype"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Download directory"
+msgid "You do not have a home directory."
+msgstr "Download-mappe"
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Create home directory"
+msgstr "Opret lager"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Nuværende status:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Certificates (Let's Encrypt)"
+msgid "Use Let's Encrypt"
+msgstr "Certifikater (Let's Encrypt)"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Domænenavn gemt"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Certifikat Status"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Create User"
+msgid "Private key path"
+msgstr "Opret Bruger"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Sikkerhed"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Domæner"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable PageKite"
+msgid "Enabled aliases"
+msgstr "Aktiver PageKite"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Deaktiveret"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3602,10 +3885,6 @@ msgstr "Annuller"
msgid "Service"
msgstr "Tjeneste"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Domæner"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4327,11 +4606,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Denne forbindelse er ikke aktiv."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Sikkerhed"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5605,13 +5879,6 @@ msgstr ""
"lesssecureapps\">https://www.google.com/settings/security/lesssecureapps"
"a>)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-#, fuzzy
-#| msgid "Enable Roundcube"
-msgid "Roundcube"
-msgstr "Aktiver Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
#, fuzzy
#| msgid "Email Client (Roundcube)"
@@ -5913,8 +6180,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5944,36 +6211,32 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Block Sandbox (Minetest)"
msgid "Sandboxed"
msgstr "Block Testområde (Minetest)"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Block Sandbox (Minetest)"
msgid "Sandbox Coverage"
msgstr "Block Testområde (Minetest)"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
#, fuzzy
#| msgid "yes"
msgid "Yes"
msgstr "ja"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
#, fuzzy
#| msgid "is not running"
msgid "Not running"
@@ -6827,12 +7090,6 @@ msgstr "Navn"
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-#, fuzzy
-#| msgid "Address"
-msgid "Add"
-msgstr "Adresse"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -7041,7 +7298,7 @@ msgstr "SOCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr "En Tor SOCKS-port er tilgængelig på din %(box_name)s TCP-port 9050."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Indstilling uændret"
@@ -7128,13 +7385,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Opdater"
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update"
@@ -8017,6 +8267,63 @@ msgstr "Slet Forbindelse"
msgid "Server deleted."
msgstr "{name} slettet."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Adresse"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki & Blog"
+msgid "Website and Blog"
+msgstr "Wiki & Blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "Publish Key"
+msgid "Public access"
+msgstr "Distribuer Nøgle"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8172,10 +8479,6 @@ msgstr "Plinth administrationsværktøj til %(box_name)s"
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Apps"
@@ -9036,9 +9339,6 @@ msgstr ""
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "Sikker Webserver (via SSL)"
-#~ msgid "Current status:"
-#~ msgstr "Nuværende status:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Slet Wiki eller Blog"
diff --git a/plinth/locale/de/LC_MESSAGES/django.po b/plinth/locale/de/LC_MESSAGES/django.po
index 09759f4b8..928257d95 100644
--- a/plinth/locale/de/LC_MESSAGES/django.po
+++ b/plinth/locale/de/LC_MESSAGES/django.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: FreedomBox UI\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-07-24 18:34+0000\n"
"Last-Translator: Johannes Keyser \n"
"Language-Team: German Systemeinstellungen "
"konfigurieren."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Chatserver"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Verzeichnis ist nicht vorhanden."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "unavailable"
+msgid "RoundCube availability"
+msgstr "nicht verfügbar"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Kein Zertifikat"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Domain"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Deaktiviert"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "Kabel verbunden"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Ausgewählte Schnappschüsse gelöscht"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Neue Sicherung erstellen"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Hinzufügen"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "New Backup"
+msgid "New value"
+msgstr "neues Backup"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Aktualisieren"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Typ des Dienstes"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Pfad ist kein Verzeichnis."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "Aktualisiertes Medienverzeichnis"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Aktueller Status:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Domainname gesetzt"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Zertifikatstatus"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private key of this machine"
+msgid "Private key path"
+msgstr "Privater Schlüssel dieser Maschine"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Startseite"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Sicherheit"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Domains"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Schaden einschalten"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Deaktiviert"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3657,10 +3942,6 @@ msgstr "Abbrechen"
msgid "Service"
msgstr "Dienst"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Domains"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4444,11 +4725,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Diese Verbindung ist nicht aktiv."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Sicherheit"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5692,11 +5968,6 @@ msgstr ""
"lesssecureapps\">https://www.google.com/settings/security/lesssecureapps"
"a>)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "E-Mail-Client"
@@ -6006,9 +6277,15 @@ msgstr ""
"bereitstellt."
#: plinth/modules/security/templates/security_report.html:19
+#, fuzzy
+#| msgid ""
+#| "The following table lists the current reported number, and historical "
+#| "count, of security vulnerabilities for each installed app. More "
+#| "information on the vulnerabilities can be found on the Debian Security Bug Tracker ."
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -6046,30 +6323,26 @@ msgid "Current Vulnerabilities"
msgstr "Aktuelle Sicherheitslücken anzeigen"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Frühere Sicherheitslücken anzeigen"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Sandboxed"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Sandbox-Abdeckung"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "N/A"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Ja"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Nein"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "Läuft nicht"
@@ -6935,10 +7208,6 @@ msgstr "Pet-Name"
msgid "Add new introducer"
msgstr "Neuen Vermittler hinzufügen"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Hinzufügen"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Verbundene Vermittler"
@@ -7148,7 +7417,7 @@ msgstr "SOCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr "Tor SOCKS-Port ist auf Ihrer %(box_name)s auf TCP port 9050 verfügbar."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Einstellung unverändert"
@@ -7237,13 +7506,6 @@ msgstr ""
"erachtet wird, erfolgt dieser automatisch um 02:00 Uhr, so dass alle "
"Anwendungen kurzzeitig nicht verfügbar sind."
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Aktualisieren"
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr "Aktualisierungen"
@@ -8096,6 +8358,63 @@ msgstr "Verbindung zum Server löschen"
msgid "Server deleted."
msgstr "Server gelöscht."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Adresse"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki und Blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "öffentlicher Zugang"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8263,10 +8582,6 @@ msgstr "Kernfunktionalität und Weboberfläche für %(box_name)s"
msgid " Home"
msgstr " Startseite"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Startseite"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Apps"
@@ -8559,6 +8874,9 @@ msgstr "%(percentage)s %% abgeschlossen"
msgid "Gujarati"
msgstr "Gujarati"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Frühere Sicherheitslücken anzeigen"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "Nachrichten-Archiv-Verwaltung aktiviert"
@@ -9316,9 +9634,6 @@ msgstr "Gujarati"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "Webserver mit Verschlüsselung"
-#~ msgid "Current status:"
-#~ msgstr "Aktueller Status:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Lösche Wiki oder Blog"
@@ -9340,9 +9655,6 @@ msgstr "Gujarati"
#~ msgid "Abort"
#~ msgstr "Abbrechen"
-#~ msgid "New Backup"
-#~ msgstr "neues Backup"
-
#, fuzzy
#~| msgid "NTP client in contact with servers"
#~ msgid "chrony client in contact with servers"
diff --git a/plinth/locale/django.pot b/plinth/locale/django.pot
index 84c39004b..6fed41b19 100644
--- a/plinth/locale/django.pot
+++ b/plinth/locale/django.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -21,7 +21,7 @@ msgstr ""
msgid "Page source"
msgstr ""
-#: plinth/context_processors.py:23 plinth/views.py:78
+#: plinth/context_processors.py:23 plinth/views.py:80
msgid "FreedomBox"
msgstr ""
@@ -925,7 +925,7 @@ msgstr ""
#: plinth/modules/matrixsynapse/views.py:124 plinth/modules/mumble/views.py:28
#: plinth/modules/pagekite/forms.py:78 plinth/modules/quassel/views.py:29
#: plinth/modules/shadowsocks/views.py:59
-#: plinth/modules/transmission/views.py:47
+#: plinth/modules/transmission/views.py:47 plinth/modules/wordpress/views.py:36
msgid "Configuration updated"
msgstr ""
@@ -1341,15 +1341,18 @@ msgid "Diagnostics"
msgstr ""
#: plinth/modules/diagnostics/__init__.py:98
+#: plinth/modules/email_server/templates/email_server.html:29
msgid "passed"
msgstr ""
#: plinth/modules/diagnostics/__init__.py:99
+#: plinth/modules/email_server/templates/email_server.html:27
#: plinth/modules/networks/views.py:49
msgid "failed"
msgstr ""
#: plinth/modules/diagnostics/__init__.py:100
+#: plinth/modules/email_server/templates/email_server.html:25
msgid "error"
msgstr ""
@@ -1841,6 +1844,246 @@ msgid ""
"Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+msgid "Email Server"
+msgstr ""
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+msgid "Service Alert"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+msgid "Create home directory"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3125,10 +3368,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3796,11 +4035,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4857,11 +5091,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5127,8 +5356,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5156,30 +5385,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5933,10 +6158,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6113,7 +6334,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6185,13 +6406,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -6939,6 +7153,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7075,10 +7340,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/el/LC_MESSAGES/django.po b/plinth/locale/el/LC_MESSAGES/django.po
index 0b1202b0c..36a1660a1 100644
--- a/plinth/locale/el/LC_MESSAGES/django.po
+++ b/plinth/locale/el/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-04-14 04:27+0000\n"
"Last-Translator: Michalis \n"
"Language-Team: Greek . Μπορείτε να ρυθμίσετε το όνομα της υπηρεσίας στο Ρυθμίστε page."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Διακομιστής συνομιλίας"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Ο κατάλογος δεν υπάρχει."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "Unavailable Shares"
+msgid "RoundCube availability"
+msgstr "Με διαθέσιμα μερίσματα"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Δεν υπάρχει πιστοποιητικό"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Όνομα διαδικτύου"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Απενεργοποιήθηκε"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "το καλώδιο είναι συνδεδεμένο"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Διαγράφηκαν επιλεγμένα στιγμιότυπα"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Δημιουργία νέου αντιγράφου ασφαλείας"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Προσθήκη"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Ενημερωμένη έκδοση"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Τύπος υπηρεσίας"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Το μονοπάτι δεν είναι κατάλογος."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "O κατάλογος πολυμέσων ενημερώθηκε"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "To όνομα διαδικτύου ρυθμίστηκε επιτυχώς"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Κατάσταση πιστοποιητικού"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private repository"
+msgid "Private key path"
+msgstr "Ιδιωτικό αποθετήριο"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Κεντρική σελίδα"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Ασφάλεια"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Ονόματα διαδικτύου"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Ενεργοποίηση ζημιών"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Απενεργοποιήθηκε"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3706,10 +3987,6 @@ msgstr "Άκυρο"
msgid "Service"
msgstr "Υπηρεσία"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Ονόματα διαδικτύου"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4428,11 +4705,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Αυτή η σύνδεση δεν είναι ενεργή."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Ασφάλεια"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5712,11 +5984,6 @@ msgstr ""
"settings/security/lesssecureapps\">https://www.google.com/settings/security/"
"lesssecureapps )."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "Πρόγραμμα-πελάτης ηλεκτρονικού ταχυδρομείου"
@@ -6044,8 +6311,8 @@ msgstr ""
#| "The following table lists the current reported number, and historical "
#| "count, of security vulnerabilities for each installed app."
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -6079,32 +6346,28 @@ msgid "Current Vulnerabilities"
msgstr "Τρέχοντα θέματα ασφαλείας"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Προηγούμενα θέματα ασφαλείας"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Φιλτραρισμένα"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Sandboxed"
msgid "Sandbox Coverage"
msgstr "Φιλτραρισμένα"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "Μη εφαρμόσιμα"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Ναι"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Όχι"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -6994,10 +7257,6 @@ msgstr "Όνομα \"κατοικίδιου\""
msgid "Add new introducer"
msgstr "Προσθέστε νέο εισαγωγέα"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Προσθήκη"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Συνδεδεμένοι εισαγωγείς"
@@ -7207,7 +7466,7 @@ msgstr "SOCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr "Μια θύρα Tor SOCKS είναι διαθέσιμη στη θύρα 9050 του %(box_name)s σας."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Οι ρυθμίσεις δεν άλλαξαν"
@@ -7297,13 +7556,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Ενημερωμένη έκδοση"
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update"
@@ -8208,6 +8460,63 @@ msgstr "Διαγραφή σύνδεσης"
msgid "Server deleted."
msgstr "Το μέρισμα διαγράφηκε."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Διεύθυνση"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki και Blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "δημόσια πρόσβαση"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8368,10 +8677,6 @@ msgstr "Βασική λειτουργικότητα και σελίδα ιστο
msgid " Home"
msgstr " Κεντρική σελίδα"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Κεντρική σελίδα"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Εφαρμογές"
@@ -8675,6 +8980,9 @@ msgstr "ολοκληρώθηκε το %(percentage)s%%"
msgid "Gujarati"
msgstr "Gujarati"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Προηγούμενα θέματα ασφαλείας"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "Η Διαχείριση αρχειοθέτησης μηνυμάτων ενεργοποιήθηκε"
diff --git a/plinth/locale/es/LC_MESSAGES/django.po b/plinth/locale/es/LC_MESSAGES/django.po
index e4268a300..a7a9ad4e7 100644
--- a/plinth/locale/es/LC_MESSAGES/django.po
+++ b/plinth/locale/es/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-03-12 13:03+0000\n"
"Last-Translator: Fioddor Superconcentrado \n"
"Language-Team: Spanish username@%(domainname)s. Puede configurar su dominio "
"en la página de sistema Configurar ."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Servidor de Chat"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "La carpeta no existe."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "unavailable"
+msgid "RoundCube availability"
+msgstr "indisponible"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "No certificado"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Dominio"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Desactivado"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "El cable está conectado"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Las instantáneas seleccionadas fueron eliminadas"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Crear una copia de seguridad nueva"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Añadir"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "New Backup"
+msgid "New value"
+msgstr "Nueva copia de seguridad"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Actualización"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Tipo de servicio"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "No es una carpeta."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "Carpeta multimedia actualizada"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Estado actual:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Asignar nombre de dominio"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Estado del certificado"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private key of this machine"
+msgid "Private key path"
+msgstr "Clave privada en este dispositivo"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Principal"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Protección"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Dominios"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Activar daño"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Desactivado"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3620,10 +3905,6 @@ msgstr "Cancelar"
msgid "Service"
msgstr "Servicio"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Dominios"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4388,11 +4669,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Esta conexión no está activa."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Protección"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5613,11 +5889,6 @@ msgstr ""
"google.com/settings/security/lesssecureapps\">https://www.google.com/"
"settings/security/lesssecureapps)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "Cliente de correo"
@@ -5927,8 +6198,8 @@ msgstr ""
#| "The following table lists the current reported number, and historical "
#| "count, of security vulnerabilities for each installed app."
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5964,30 +6235,26 @@ msgid "Current Vulnerabilities"
msgstr "Vulnerabilidades Actuales"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Vulnerabilidades Anteriores"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Aisladas"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Índice de aislamiento"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "N/A"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Sí"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "No"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "No se está ejecutando"
@@ -6837,10 +7104,6 @@ msgstr "Nombre de alias"
msgid "Add new introducer"
msgstr "Añadir nuevo presentador"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Añadir"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Presentadores conectados"
@@ -7050,7 +7313,7 @@ msgstr ""
"Un puerto SOCKS de Tor está disponible en su %(box_name)s en el puerto TCP "
"9050."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Configuración sin cambio"
@@ -7139,13 +7402,6 @@ msgstr ""
"tiempo. Si se decide retrasar el reinicio del sistema, éste se hará de forma "
"automática a las 02:00 h."
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Actualización"
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr "Actualizaciones"
@@ -7982,6 +8238,63 @@ msgstr "Eliminar conexión al servidor"
msgid "Server deleted."
msgstr "Servidor eliminado."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Dirección"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki y Blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "Acceso público"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8142,10 +8455,6 @@ msgstr "Funcionalidad central e interfaz web para %(box_name)s"
msgid " Home"
msgstr " Inicio"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Principal"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Aplicaciones"
@@ -8436,6 +8745,9 @@ msgstr "%(percentage)s%% completado"
msgid "Gujarati"
msgstr "Gujarati"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Vulnerabilidades Anteriores"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "Gestión activa de mensajes activada"
@@ -9186,9 +9498,6 @@ msgstr "Gujarati"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "Servidor Web sobre SSL"
-#~ msgid "Current status:"
-#~ msgstr "Estado actual:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Eliminar Wiki o Blog"
@@ -9210,9 +9519,6 @@ msgstr "Gujarati"
#~ msgid "Abort"
#~ msgstr "Cancelar"
-#~ msgid "New Backup"
-#~ msgstr "Nueva copia de seguridad"
-
#~ msgid "chrony client in contact with servers"
#~ msgstr "Cliente de «chrony» en contacto con los servidores"
diff --git a/plinth/locale/fa/LC_MESSAGES/django.po b/plinth/locale/fa/LC_MESSAGES/django.po
index 8e75ae8b8..d3f53752a 100644
--- a/plinth/locale/fa/LC_MESSAGES/django.po
+++ b/plinth/locale/fa/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-01-18 12:32+0000\n"
"Last-Translator: ikmaak \n"
"Language-Team: Persian Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Web Server"
+msgid "Email Server"
+msgstr "سرور وب"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "Available Domains"
+msgid "RoundCube availability"
+msgstr "دامنههای موجود"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certficate"
+msgid "Has a TLS certificate"
+msgstr "بدون گواهی دیجیتال"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "دامنه"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "غیرفعال"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "سیم وصل است"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete %(name)s"
+msgid "Delete selected"
+msgstr "پاککردن %(name)s"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create Connection"
+msgid "Create a new email alias"
+msgstr "ساختن اتصال"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+#, fuzzy
+#| msgid "Address"
+msgid "Add"
+msgstr "نشانی"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "نوع سرویس"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Connection"
+msgid "Create home directory"
+msgstr "ساختن اتصال"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "وضعیت کنونی:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Certificates (Let's Encrypt)"
+msgid "Use Let's Encrypt"
+msgstr "گواهی دیجیتال (Let's Encrypt)"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "نام دامنه تنظیم شد"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "وضعیت گواهی دیجیتال"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Create Connection"
+msgid "Private key path"
+msgstr "ساختن اتصال"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "امنیت"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "دامنهها"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enabled"
+msgid "Enabled aliases"
+msgstr "فعال"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "غیرفعال"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3533,10 +3812,6 @@ msgstr "انصراف"
msgid "Service"
msgstr "سرویس"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "دامنهها"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4248,11 +4523,6 @@ msgstr "آیپی ن۶"
msgid "This connection is not active."
msgstr "این اتصال فعال نیست."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "امنیت"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5382,11 +5652,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
#, fuzzy
msgid "Email Client"
@@ -5685,8 +5950,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5716,34 +5981,30 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
msgid "Sandboxed"
msgstr "بازی مکعبها (Minetest)"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
msgid "Sandbox Coverage"
msgstr "بازی مکعبها (Minetest)"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
#, fuzzy
#| msgid "yes"
msgid "Yes"
msgstr "بله"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -6567,12 +6828,6 @@ msgstr "نام"
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-#, fuzzy
-#| msgid "Address"
-msgid "Add"
-msgstr "نشانی"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6751,7 +7006,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6823,13 +7078,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Create..."
@@ -7651,6 +7899,63 @@ msgstr "پاککردن اتصال"
msgid "Server deleted."
msgstr "{name} پاک شد."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "نشانی"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Manage Wikis and Blogs"
+msgid "Website and Blog"
+msgstr "مدیریت ویکیها و وبلاگها"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "Publish Key"
+msgid "Public access"
+msgstr "انتشار کلید"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7789,10 +8094,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
#, fuzzy
msgid " Apps"
@@ -8338,9 +8639,6 @@ msgstr ""
#~ "Failed to disable certificate renewal management for {domain}: {error}"
#~ msgstr "باطلکردن گواهی دامنهٔ {domain} شکست خورد: {error}"
-#~ msgid "Current status:"
-#~ msgstr "وضعیت کنونی:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "پاککردن ویکی یا وبلاگ"
diff --git a/plinth/locale/fake/LC_MESSAGES/django.po b/plinth/locale/fake/LC_MESSAGES/django.po
index 319059bc3..95a6c8cbe 100644
--- a/plinth/locale/fake/LC_MESSAGES/django.po
+++ b/plinth/locale/fake/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Plinth 0.6\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2016-01-31 22:24+0530\n"
"Last-Translator: Sunil Mohan Adapa \n"
"Language-Team: Plinth Developers USERNAME@%(domainname)s. YOU CAN SETUP YOUR DOMAIN ON THE SYSTEM "
"CONFIGURE PAGE."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Web Server"
+msgid "Email Server"
+msgstr "WEB SERVER"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "Enable Subdomains"
+msgid "RoundCube availability"
+msgstr "ENABLE SUBDOMAINS"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certficate"
+msgid "Has a TLS certificate"
+msgstr "NO CERTFICATE"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "DOMAIN"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+#, fuzzy
+#| msgid "Enable Roundcube"
+msgid "Roundcube"
+msgstr "ENABLE ROUNDCUBE"
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "DISABLED"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "CABLE IS CONNECTED"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete %(name)s"
+msgid "Delete selected"
+msgstr "DELETE %(name)s"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "PageKite Account"
+msgid "Create a new email alias"
+msgstr "PAGEKITE ACCOUNT"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+#, fuzzy
+#| msgid "Address"
+msgid "Add"
+msgstr "ADDRESS"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+#, fuzzy
+#| msgid "Update URL"
+msgid "Update"
+msgstr "UPDATE URL"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service type"
+msgid "Service Alert"
+msgstr "SERVICE TYPE"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Download directory"
+msgid "You do not have a home directory."
+msgstr "DOWNLOAD DIRECTORY"
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create User"
+msgid "Create home directory"
+msgstr "CREATE USER"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "CURRENT STATUS:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Certificates (Let's Encrypt)"
+msgid "Use Let's Encrypt"
+msgstr "CERTIFICATES (LET'S ENCRYPT)"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "DOMAIN NAME SET"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "CERTIFICATE STATUS"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Create User"
+msgid "Private key path"
+msgstr "CREATE USER"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "SECURITY"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+#, fuzzy
+#| msgid "Domain"
+msgid "Domains"
+msgstr "DOMAIN"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable PageKite"
+msgid "Enabled aliases"
+msgstr "ENABLE PAGEKITE"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "DISABLED"
+
#: plinth/modules/firewall/__init__.py:33
#, fuzzy, python-brace-format
#| msgid ""
@@ -3724,12 +4011,6 @@ msgstr "CANCEL"
msgid "Service"
msgstr "SERVICE"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-#, fuzzy
-#| msgid "Domain"
-msgid "Domains"
-msgstr "DOMAIN"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
#, fuzzy
@@ -4467,11 +4748,6 @@ msgstr "IPV6"
msgid "This connection is not active."
msgstr "THIS CONNECTION IS NOT ACTIVE."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "SECURITY"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5764,13 +6040,6 @@ msgstr ""
"lesssecureapps\" >HTTPS://WWW.GOOGLE.COM/SETTINGS/SECURITY/LESSSECUREAPPS"
"a>)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-#, fuzzy
-#| msgid "Enable Roundcube"
-msgid "Roundcube"
-msgstr "ENABLE ROUNDCUBE"
-
#: plinth/modules/roundcube/__init__.py:56
#, fuzzy
#| msgid "Email Client (Roundcube)"
@@ -6074,8 +6343,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -6105,36 +6374,32 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Blocked"
msgid "Sandboxed"
msgstr "BLOCKED"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Blocked"
msgid "Sandbox Coverage"
msgstr "BLOCKED"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
#, fuzzy
#| msgid "yes"
msgid "Yes"
msgstr "YES"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
#, fuzzy
#| msgid "Tor is not running"
msgid "Not running"
@@ -6980,12 +7245,6 @@ msgstr "NAME"
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-#, fuzzy
-#| msgid "Address"
-msgid "Add"
-msgstr "ADDRESS"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -7203,7 +7462,7 @@ msgstr "SOCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr "A TOR SOCKS PORT IS AVAILABLE ON YOUR %(box_name)s ON TCP PORT 9050."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "SETTING UNCHANGED"
@@ -7290,15 +7549,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-#, fuzzy
-#| msgid "Update URL"
-msgid "Update"
-msgstr "UPDATE URL"
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update URL"
@@ -8176,6 +8426,63 @@ msgstr "DELETE CONNECTION"
msgid "Server deleted."
msgstr "{name} DELETED."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "ADDRESS"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "WIKI AND BLOG"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "Publish Key"
+msgid "Public access"
+msgstr "PUBLISH KEY"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8336,10 +8643,6 @@ msgstr "PLINTH ADMINISTRATIVE INTERFACE FOR THE %(box_name)s"
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
#, fuzzy
#| msgid "Apps"
@@ -9093,9 +9396,6 @@ msgstr ""
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "WEB SERVER OVER SECURE SOCKET LAYER"
-#~ msgid "Current status:"
-#~ msgstr "CURRENT STATUS:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "DELETE WIKI OR BLOG"
diff --git a/plinth/locale/fr/LC_MESSAGES/django.po b/plinth/locale/fr/LC_MESSAGES/django.po
index 37f1c5b04..4df088cf2 100644
--- a/plinth/locale/fr/LC_MESSAGES/django.po
+++ b/plinth/locale/fr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: FreedomBox UI\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-05-31 22:13+0000\n"
"Last-Translator: Coucouf \n"
"Language-Team: French Configurer."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Serveur de discussion"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Le répertoire n’existe pas."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "unavailable"
+msgid "RoundCube availability"
+msgstr "indisponible"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Aucun certificat"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Domaine"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Désactivé"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "Le câble est connecté"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Supprimer les instantanés sélectionnés"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Créer une nouvelle sauvegarde"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Ajouter"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "New Backup"
+msgid "New value"
+msgstr "Nouvelle sauvegarde"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Mises à jour"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Type de service"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Le chemin n’est pas un répertoire."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "Répertoire multimédia mis à jour"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "État actuel :"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Nom de domaine configuré"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "État du certificat"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private key of this machine"
+msgid "Private key path"
+msgstr "Clé privée de cette machine"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Accueil"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Sécurité"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Domaines"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Activer les blessures"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Désactivé"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3684,10 +3969,6 @@ msgstr "Annuler"
msgid "Service"
msgstr "Service"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Domaines"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4471,11 +4752,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Cette connexion n'est pas active."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Sécurité"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5735,11 +6011,6 @@ msgstr ""
"settings/security/lesssecureapps\">https://www.google.com/settings/security/"
"lesssecureapps)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "Client de courriel"
@@ -6052,9 +6323,15 @@ msgstr ""
"FreedomBox."
#: plinth/modules/security/templates/security_report.html:19
+#, fuzzy
+#| msgid ""
+#| "The following table lists the current reported number, and historical "
+#| "count, of security vulnerabilities for each installed app. More "
+#| "information on the vulnerabilities can be found on the Debian Security Bug Tracker ."
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -6094,30 +6371,26 @@ msgid "Current Vulnerabilities"
msgstr "Failles actuelles"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Anciennes failles"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Isolé"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Couverture de l’isolation"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "Non applicable"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Oui"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Non"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "Inactif"
@@ -6983,10 +7256,6 @@ msgstr "Surnom"
msgid "Add new introducer"
msgstr "Ajouter un nouvel introducteur"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Ajouter"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Introducteurs connectés"
@@ -7196,7 +7465,7 @@ msgstr ""
"Un port SOCKS pour Tor est accessible sur votre %(box_name)s sur le port TCP "
"9050."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Paramètre inchangé"
@@ -7288,13 +7557,6 @@ msgstr ""
"nécessaire, il est effectué à 2h00, rendant indisponible l’ensemble des "
"applications pour une courte période."
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Mises à jour"
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr "Mises à jour"
@@ -8149,6 +8411,63 @@ msgstr "Supprimer la connexion à un serveur"
msgid "Server deleted."
msgstr "Serveur supprimé."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Adresse"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki et blogue"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "Accès public"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8313,10 +8632,6 @@ msgstr "Fonctions de base et interface web de la %(box_name)s"
msgid " Home"
msgstr " Accueil"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Accueil"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Applis"
@@ -8612,6 +8927,9 @@ msgstr "%(percentage)s%% effectué"
msgid "Gujarati"
msgstr "Gujarati"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Anciennes failles"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "Gestion des archives de messages activée"
@@ -9391,9 +9709,6 @@ msgstr "Gujarati"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "Serveur web via SSL (Secure Socket Layer)"
-#~ msgid "Current status:"
-#~ msgstr "État actuel :"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Supprimer le Wiki ou le Blogue"
@@ -9419,9 +9734,6 @@ msgstr "Gujarati"
#~ msgid "Abort"
#~ msgstr "Annuler"
-#~ msgid "New Backup"
-#~ msgstr "Nouvelle sauvegarde"
-
#, fuzzy
#~| msgid "NTP client in contact with servers"
#~ msgid "chrony client in contact with servers"
diff --git a/plinth/locale/gl/LC_MESSAGES/django.po b/plinth/locale/gl/LC_MESSAGES/django.po
index d39618a0b..b3a856a69 100644
--- a/plinth/locale/gl/LC_MESSAGES/django.po
+++ b/plinth/locale/gl/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-01-18 12:32+0000\n"
"Last-Translator: ikmaak \n"
"Language-Team: Galician Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Web Server"
+msgid "Email Server"
+msgstr "Servidor web"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Discovery"
+msgid "Service Alert"
+msgstr "Descubrimento de servizo"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+msgid "Create home directory"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3135,10 +3382,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3808,11 +4051,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4871,11 +5109,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5145,8 +5378,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5174,30 +5407,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5953,10 +6182,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6133,7 +6358,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6205,13 +6430,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Manual"
@@ -6969,6 +7187,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7105,10 +7374,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/gu/LC_MESSAGES/django.po b/plinth/locale/gu/LC_MESSAGES/django.po
index 3c777bd68..57ba5f216 100644
--- a/plinth/locale/gu/LC_MESSAGES/django.po
+++ b/plinth/locale/gu/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-01-18 12:32+0000\n"
"Last-Translator: ikmaak \n"
"Language-Team: Gujarati username@%(domainname)s. તમે સિસ્ટમ પર તમારા ડોમેન સેટ કરી શકો છો રૂપરેખાંકિત કરો પાનું."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "ચેટ સર્વર"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "Accept all SSL certificates"
+msgid "Has a TLS certificate"
+msgstr "બધા SSL પ્રમાણપત્રો સ્વીકારો"
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "અક્ષમ કરેલું"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "Enabled"
+msgid "Enable selected"
+msgstr "સક્ષમ કરેલું"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "સેવા પ્રકાર"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Documentation"
+msgid "Create home directory"
+msgstr "દસ્તાવેજીકરણ"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "વર્તમાન સ્થિતિ:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "ક્ષેત્રીય નામ સ્થાપિત કર્યું"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Documentation"
+msgid "Private key path"
+msgstr "દસ્તાવેજીકરણ"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enabled"
+msgid "Enabled aliases"
+msgstr "સક્ષમ કરેલું"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "અક્ષમ કરેલું"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3352,10 +3617,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4030,11 +4291,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5112,11 +5368,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5388,8 +5639,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5417,30 +5668,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -6203,10 +6450,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6385,7 +6628,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "સેટિંગ યથાવત"
@@ -6461,13 +6704,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update URL"
@@ -7261,6 +7497,57 @@ msgstr "ઇન્ટરનેટ સાથે સીધો જોડાણ."
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7399,10 +7686,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
#, fuzzy
#| msgid "BitTorrent Web Client"
@@ -7748,9 +8031,6 @@ msgstr ""
#~ msgid "Download Manual"
#~ msgstr "માર્ગદર્શિકા ડાઉનલોડ"
-#~ msgid "Current status:"
-#~ msgstr "વર્તમાન સ્થિતિ:"
-
#, fuzzy
#~| msgid "Error setting language: {exception}"
#~ msgid "Error setting default app: {exception}"
diff --git a/plinth/locale/hi/LC_MESSAGES/django.po b/plinth/locale/hi/LC_MESSAGES/django.po
index 36a0b89ec..af70867fc 100644
--- a/plinth/locale/hi/LC_MESSAGES/django.po
+++ b/plinth/locale/hi/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-01-18 12:32+0000\n"
"Last-Translator: ikmaak \n"
"Language-Team: Hindi username@%(domainname)s. आपका डोमेन सिसटेम पर सेटअप कर सकता है कॉन्फ़िगर पेजॅ."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "चाट सर्वर"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "Available Domains"
+msgid "RoundCube availability"
+msgstr "उपलब्ध वाले डोमेन्स"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "कोई प्रमाणपत्र नहीं"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "डोमेन"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "राउंडक्यूब"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "मोज़िला थंडरबर्ड"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "अक्षम किया गया है"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "केबल कनेक्ट हो गया"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete all the snapshots"
+msgid "Delete selected"
+msgstr "सब स्नैपशॉटस हटाएँ"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create Account"
+msgid "Create a new email alias"
+msgstr "अकाउंट बनाएँ"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "जोड़ें"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "Backups"
+msgid "New value"
+msgstr "बैकअप"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "अपडेट"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "सेवा टाइप"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Download directory"
+msgid "You do not have a home directory."
+msgstr "डायरेक्टरी डाउनलोड करें"
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create User"
+msgid "Create home directory"
+msgstr "यूसर बनाये"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "वर्तमान स्थिति:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "लेटस एंक्रिप्ट"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "डोमेन नाम सेट हो गया है"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "प्रमाणपत्र स्थिति"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Create User"
+msgid "Private key path"
+msgstr "यूसर बनाये"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "होम"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "सुरक्षा"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "डोमेन्स"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "क्षति को सक्षम करें"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "अक्षम किया गया है"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3599,10 +3882,6 @@ msgstr "कैंसिल"
msgid "Service"
msgstr "सर्विस"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "डोमेन्स"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4304,11 +4583,6 @@ msgstr "आईपीवी6"
msgid "This connection is not active."
msgstr "यह कनेक्शन सक्रिय नहीं है."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "सुरक्षा"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5571,11 +5845,6 @@ msgstr ""
"security/lesssecureapps\">https://www.google.com/settings/security/"
"lesssecureapps)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "राउंडक्यूब"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "ईमेल क्लाइंट"
@@ -5881,8 +6150,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5912,38 +6181,34 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Block Sandbox"
msgid "Sandboxed"
msgstr "ब्लॉक सेंडबोक्स"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Block Sandbox"
msgid "Sandbox Coverage"
msgstr "ब्लॉक सेंडबोक्स"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
#, fuzzy
#| msgid "yes"
msgid "Yes"
msgstr "हाँ"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
#, fuzzy
#| msgid "None"
msgid "No"
msgstr "कोई नहीं"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
#, fuzzy
#| msgid "Tor is running"
msgid "Not running"
@@ -6801,10 +7066,6 @@ msgstr "पेट नाम"
msgid "Add new introducer"
msgstr "नया इंट्रोड्यूसर जोड़ें"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "जोड़ें"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "कनेक्टेड इंट्रोड्यूसरस"
@@ -7014,7 +7275,7 @@ msgstr "सॉक्स"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr "एक टोर सॉक्स पोर्ट आपका %(box_name)s र उपलब्ध है, TCP पोर्ट ९०५० पर."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "सेटिंग स्थिर है"
@@ -7110,13 +7371,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "अपडेट"
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update"
@@ -8001,6 +8255,63 @@ msgstr "कनेक्शन हटाएँ"
msgid "Server deleted."
msgstr "शेयर हटाया गया."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "ऍड्रेस"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "विकि और ब्लॉग"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "Publish Key"
+msgid "Public access"
+msgstr "चाबी प्रकाशित करें"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8159,10 +8470,6 @@ msgstr "%(box_name)s के लिए कोर फंक्शनलिटी
msgid " Home"
msgstr " होम"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "होम"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " ऐप्स"
@@ -9209,9 +9516,6 @@ msgstr ""
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "सुरक्षित सॉकेट लेयर पर वेब सर्वर"
-#~ msgid "Current status:"
-#~ msgstr "वर्तमान स्थिति:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "विकी या ब्लॉग हटाइये"
@@ -9230,11 +9534,6 @@ msgstr ""
#~ msgid "Default app set"
#~ msgstr "डिफ़ॉल्ट एेप सेट"
-#, fuzzy
-#~| msgid "Backups"
-#~ msgid "New Backup"
-#~ msgstr "बैकअप"
-
#, fuzzy
#~| msgid "NTP client in contact with servers"
#~ msgid "chrony client in contact with servers"
diff --git a/plinth/locale/hu/LC_MESSAGES/django.po b/plinth/locale/hu/LC_MESSAGES/django.po
index d72c4bbba..31f91b90b 100644
--- a/plinth/locale/hu/LC_MESSAGES/django.po
+++ b/plinth/locale/hu/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-04-22 21:32+0000\n"
"Last-Translator: Benedek Nagy \n"
"Language-Team: Hungarian username@%(domainname)s. Beállíthatod a "
"rendszered domain nevét a Beállítások lapon."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Chat szerver"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Specified directory does not exist."
+msgid "User does not exist"
+msgstr "A megadott könyvtár nem létezik."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "unavailable"
+msgid "RoundCube availability"
+msgstr "elérhetetlen"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Nincs tanúsítvány"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Domain"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Letiltva"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "kábel csatlakoztatva"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Kiválasztott pillanatképek törölve"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Új biztonsági másolat létrehozása"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Hozzáadás"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "New Backup"
+msgid "New value"
+msgstr "Új biztonsági másolat"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Frissítés"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Szolgáltatás típusa"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Az elérési út nem könyvtár."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "Médiakönyvtár frissítve"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Jelenlegi állapot:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Domain név beállítva"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Tanúsítvány állapot"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private repository"
+msgid "Private key path"
+msgstr "Privát tároló"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Kezdőlap"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Biztonság"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Domainek"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Sérülés engedélyezése"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Letiltva"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3623,10 +3908,6 @@ msgstr "Mégse"
msgid "Service"
msgstr "Szolgáltatás"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Domainek"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4403,11 +4684,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Ez a kapcsolat nem aktív."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Biztonság"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5587,11 +5863,6 @@ msgstr ""
"href=\"https://www.google.com/settings/security/lesssecureapps\">https://www."
"google.com/settings/security/lesssecureapps)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "E-mail kliens"
@@ -5874,8 +6145,8 @@ msgstr ""
#| "The following table lists the current reported number, and historical "
#| "count, of security vulnerabilities for each installed app."
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5905,30 +6176,26 @@ msgid "Current Vulnerabilities"
msgstr "Jelenlegi biztonsági rések"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Múltbéli biztonsági rések"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Virtuális környezetben"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Virtuális környezet lefedettsége"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Igen"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Nem"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "Nem fut"
@@ -6781,10 +7048,6 @@ msgstr "Becenév"
msgid "Add new introducer"
msgstr "Új bevezető hozzáadása"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Hozzáadás"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Csatlakozott bevezetők"
@@ -6992,7 +7255,7 @@ msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
"Egy Tor SOCKS port elérhető a te %(box_name)s eszközöd 9050-es TCP portján."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "A beállítás változatlan"
@@ -7075,13 +7338,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Frissítés"
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr "Frissítések"
@@ -7860,6 +8116,63 @@ msgstr "Kapcsolat törlése a kiszolgálóval"
msgid "Server deleted."
msgstr "Kiszolgáló törölve."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Cím"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki és blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "nyilvános hozzáférés"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8006,10 +8319,6 @@ msgstr "Alapvető funkcionalitás és webes felület %(box_name)s eszközére"
msgid " Home"
msgstr " Kezdőlap"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Kezdőlap"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Alkalmazások"
@@ -8299,6 +8608,9 @@ msgstr "befejezettségi szint: %(percentage)s%%"
msgid "Gujarati"
msgstr "Gudzsaráti"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Múltbéli biztonsági rések"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "Üzenetarchívum kezelése engedélyezve"
@@ -9073,9 +9385,6 @@ msgstr "Gudzsaráti"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "Webszerver Secure Socket Layer-en keresztül"
-#~ msgid "Current status:"
-#~ msgstr "Jelenlegi állapot:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Wiki vagy Blog törlése"
@@ -9097,9 +9406,6 @@ msgstr "Gudzsaráti"
#~ msgid "Abort"
#~ msgstr "Megszakítás"
-#~ msgid "New Backup"
-#~ msgstr "Új biztonsági másolat"
-
#, fuzzy
#~| msgid "NTP client in contact with servers"
#~ msgid "chrony client in contact with servers"
diff --git a/plinth/locale/id/LC_MESSAGES/django.po b/plinth/locale/id/LC_MESSAGES/django.po
index bf3081147..3d0a994fc 100644
--- a/plinth/locale/id/LC_MESSAGES/django.po
+++ b/plinth/locale/id/LC_MESSAGES/django.po
@@ -2,7 +2,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Indonesian (FreedomBox)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-06-24 00:42+0000\n"
"Last-Translator: Reza Almanda \n"
"Language-Team: Indonesian nama pengguna @%(domainname)s. Anda dapat mengatur "
"domain Anda pada sistem Konfigurasi halaman."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Server obrolan"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Direktori ini tidak ada."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "unavailable"
+msgid "RoundCube availability"
+msgstr "tidak tersedia"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Tidak sertifikat"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Domain"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Non-Aktifkan"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "Enable PageKite"
+msgid "Enable selected"
+msgstr "Aktifkan PageKite"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Menghapus snapshot yang dipilih"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Buat cadangan baru"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Tambah"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Memperbarui"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Tipe Layanan"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Create home directory"
+msgstr "Buat Repositori"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Status saat ini:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Set nama domain"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Status Sertifikat"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private repository"
+msgid "Private key path"
+msgstr "Penyimpanan Pribadi"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Beranda"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Domain"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Aktifkan kerusakan"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Non-Aktifkan"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3496,10 +3777,6 @@ msgstr "Batal"
msgid "Service"
msgstr "Layanan"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Domain"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4167,11 +4444,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5232,11 +5504,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "Klien Email"
@@ -5514,8 +5781,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5543,30 +5810,26 @@ msgid "Current Vulnerabilities"
msgstr "Kerentanan Saat Ini"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Kerentanan Masa Lalu"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Sandboxed"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Cakupan Sandbox"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "Tidak Ada"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Ya"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Tidak"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "Tidak berjalan"
@@ -6336,10 +6599,6 @@ msgstr "Nama"
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Tambah"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6520,7 +6779,7 @@ msgstr "SOCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6593,13 +6852,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Memperbarui"
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update URL"
@@ -7387,6 +7639,63 @@ msgstr "Hapus Koneksi"
msgid "Server deleted."
msgstr "{name} dihapus."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Address"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki dan Blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "akses publik"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7524,10 +7833,6 @@ msgstr "Fungsionalitas inti dan antarmuka web untuk %(box_name)s"
msgid " Home"
msgstr " Beranda"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Beranda"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Aplikasi"
@@ -7801,6 +8106,9 @@ msgstr "%(percentage)s %% selesai"
msgid "Gujarati"
msgstr "Bahasa Gujarat"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Kerentanan Masa Lalu"
+
#, fuzzy
#~| msgid "Application installed."
#~ msgid "Public registration disabled"
@@ -7911,9 +8219,6 @@ msgstr "Bahasa Gujarat"
#~ msgid "Samba share"
#~ msgstr "Publikasikan Kunci"
-#~ msgid "Enable PageKite"
-#~ msgstr "Aktifkan PageKite"
-
#~ msgid "Save settings"
#~ msgstr "Simpan pengaturan"
@@ -7967,9 +8272,6 @@ msgstr "Bahasa Gujarat"
#~ msgid "Upload"
#~ msgstr "Unduh profil saya"
-#~ msgid "Current status:"
-#~ msgstr "Status saat ini:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Hapus Wiki atau Blog"
diff --git a/plinth/locale/it/LC_MESSAGES/django.po b/plinth/locale/it/LC_MESSAGES/django.po
index f8e6f3999..7b27a1e7d 100644
--- a/plinth/locale/it/LC_MESSAGES/django.po
+++ b/plinth/locale/it/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-02-20 22:50+0000\n"
"Last-Translator: Dietmar \n"
"Language-Team: Italian . Configura "
"la pagina ."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Server Chat"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Nessun certificato"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+msgid "domain"
+msgstr "Dominio"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Disabilitato"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "il cavo è connesso"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+msgid "Delete selected"
+msgstr "Istantanee selezionate cancellate"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Creare un nuovo backup"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "Backups"
+msgid "New value"
+msgstr "Backup"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Tipo Servizio"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Create home directory"
+msgstr "Creare Repository"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Stato corrente:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+msgid "Common name"
+msgstr "Imposta nome di dominio"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Stato Certificato"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private repository"
+msgid "Private key path"
+msgstr "Deposito privato"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Sicurezza"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Domini"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Abilita danni"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Disabilitato"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3585,10 +3861,6 @@ msgstr "Cancella"
msgid "Service"
msgstr "Servizio"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Domini"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4289,11 +4561,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Questa connessione non è attiva."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Sicurezza"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5452,11 +5719,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5722,8 +5984,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5751,30 +6013,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Copertura della Sandbox"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Si"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "No"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -6530,10 +6788,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6712,7 +6966,7 @@ msgstr "SOCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Impostazioni invariate"
@@ -6786,13 +7040,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr "Aggiornamenti"
@@ -7545,6 +7792,63 @@ msgstr "Cancella Connessione a server"
msgid "Server deleted."
msgstr "Server cancellato."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Indirizzo"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki e Blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "Public share"
+msgid "Public access"
+msgstr "Share pubblico"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7688,10 +7992,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
@@ -8552,9 +8852,6 @@ msgstr ""
#~ msgstr ""
#~ "Disabilitazione gestione rinnovo certificati fallita per {domain}:{error}"
-#~ msgid "Current status:"
-#~ msgstr "Stato corrente:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Cancella Wiki o Blog"
@@ -8579,11 +8876,6 @@ msgstr ""
#~ msgid "Default app set"
#~ msgstr "Default"
-#, fuzzy
-#~| msgid "Backups"
-#~ msgid "New Backup"
-#~ msgstr "Backup"
-
#, fuzzy
#~| msgid "NTP client in contact with servers"
#~ msgid "chrony client in contact with servers"
diff --git a/plinth/locale/ja/LC_MESSAGES/django.po b/plinth/locale/ja/LC_MESSAGES/django.po
index 72670324c..bb5a87473 100644
--- a/plinth/locale/ja/LC_MESSAGES/django.po
+++ b/plinth/locale/ja/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-05-20 12:32+0000\n"
"Last-Translator: Jacque Fresco \n"
"Language-Team: Japanese Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+msgid "Email Server"
+msgstr ""
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+msgid "Service Alert"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+msgid "Create home directory"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3127,10 +3370,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3798,11 +4037,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4859,11 +5093,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5129,8 +5358,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5158,30 +5387,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5935,10 +6160,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6115,7 +6336,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6187,13 +6408,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -6941,6 +7155,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7077,10 +7342,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/kn/LC_MESSAGES/django.po b/plinth/locale/kn/LC_MESSAGES/django.po
index 5fbc9f099..12625bee2 100644
--- a/plinth/locale/kn/LC_MESSAGES/django.po
+++ b/plinth/locale/kn/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2020-07-16 16:41+0000\n"
"Last-Translator: Yogesh \n"
"Language-Team: Kannada Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+msgid "Email Server"
+msgstr ""
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+msgid "Service Alert"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+msgid "Create home directory"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3127,10 +3370,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3798,11 +4037,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4859,11 +5093,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5131,8 +5360,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5160,30 +5389,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5937,10 +6162,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6117,7 +6338,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6189,13 +6410,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -6943,6 +7157,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7079,10 +7344,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/lt/LC_MESSAGES/django.po b/plinth/locale/lt/LC_MESSAGES/django.po
index c09ea3e25..bc146c840 100644
--- a/plinth/locale/lt/LC_MESSAGES/django.po
+++ b/plinth/locale/lt/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-02-22 10:50+0000\n"
"Last-Translator: Kornelijus Tvarijanavičius \n"
"Language-Team: Lithuanian Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+msgid "Email Server"
+msgstr ""
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+msgid "Service Alert"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+msgid "Create home directory"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3128,10 +3371,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3799,11 +4038,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4860,11 +5094,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5130,8 +5359,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5159,30 +5388,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5936,10 +6161,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6116,7 +6337,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6188,13 +6409,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -6942,6 +7156,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7078,10 +7343,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/nb/LC_MESSAGES/django.po b/plinth/locale/nb/LC_MESSAGES/django.po
index 359e2c0b1..a31c59c47 100644
--- a/plinth/locale/nb/LC_MESSAGES/django.po
+++ b/plinth/locale/nb/LC_MESSAGES/django.po
@@ -15,9 +15,9 @@ msgid ""
msgstr ""
"Project-Id-Version: FreedomBox UI\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
-"PO-Revision-Date: 2021-07-30 08:35+0000\n"
-"Last-Translator: Allan Nordhøy \n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
+"PO-Revision-Date: 2021-08-19 13:51+0000\n"
+"Last-Translator: Petter Reinholdtsen \n"
"Language-Team: Norwegian Bokmål \n"
"Language: nb\n"
@@ -25,13 +25,13 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Weblate 4.7.2-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
#: doc/dev/_templates/layout.html:11
msgid "Page source"
msgstr "Sidekilde"
-#: plinth/context_processors.py:23 plinth/views.py:78
+#: plinth/context_processors.py:23 plinth/views.py:80
msgid "FreedomBox"
msgstr "FreedomBox"
@@ -170,7 +170,7 @@ msgstr ""
#: plinth/modules/backups/__init__.py:203
msgid "Enable a Backup Schedule"
-msgstr ""
+msgstr "Aktiver sikkerhetskopitidsplan"
#: plinth/modules/backups/__init__.py:207
#: plinth/modules/backups/__init__.py:254
@@ -185,6 +185,8 @@ msgid ""
"A scheduled backup failed. Past {error_count} attempts for backup did not "
"succeed. The latest error is: {error_message}"
msgstr ""
+"En sikkerhetskopi på tidsplanen feilet. De {error_count} foregående "
+"forsøkene lyktes heller ikke. Den siste feilen er: {error_message}"
#: plinth/modules/backups/__init__.py:250
#, fuzzy
@@ -199,13 +201,15 @@ msgstr "{app} (Ingen data å sikkerhetskopiere)"
#: plinth/modules/backups/forms.py:53
msgid "Enable scheduled backups"
-msgstr ""
+msgstr "Aktiver regelmessige sikkerhetskopier"
#: plinth/modules/backups/forms.py:54
msgid ""
"If enabled, a backup is taken every day, every week and every month. Older "
"backups are removed."
msgstr ""
+"Med dette aktivert tas det sikkerhetskopi hver dag, uke og måned, og eldre "
+"sikkerhetskopier fjernes."
#: plinth/modules/backups/forms.py:58
msgid "Number of daily backups to keep"
@@ -379,8 +383,8 @@ msgid ""
"Password of the SSH Server. SSH key-based authentication is not yet "
"possible."
msgstr ""
-"Passord til SSH-tjeneren. Nøkkelbasert SSH-autentisering er så langt ikke "
-"mulig."
+"Passord til SSH-tjeneren. Nøkkelbasert SSH-autentisering er foreløbig "
+"ikke mulig."
#: plinth/modules/backups/forms.py:267
msgid "Remote backup repository already exists."
@@ -1013,7 +1017,7 @@ msgstr "Oppdater IP-adresse og domener"
#: plinth/modules/matrixsynapse/views.py:124 plinth/modules/mumble/views.py:28
#: plinth/modules/pagekite/forms.py:78 plinth/modules/quassel/views.py:29
#: plinth/modules/shadowsocks/views.py:59
-#: plinth/modules/transmission/views.py:47
+#: plinth/modules/transmission/views.py:47 plinth/modules/wordpress/views.py:36
msgid "Configuration updated"
msgstr "Oppsett oppdatert"
@@ -1361,16 +1365,14 @@ msgstr ""
"som ellers ikke ville kunne kontakte hverandre."
#: plinth/modules/coturn/__init__.py:41
-#, fuzzy, python-brace-format
-#| msgid ""
-#| "It is not meant to be used directly by users. Servers such as matrix-"
-#| "synapse need to be configured with the details provided here."
+#, python-brace-format
msgid ""
"It is not meant to be used directly by users. Servers such as Matrix Synapse or ejabberd need to "
"be configured with the details provided here."
msgstr ""
-"Det er ikke ment å brukes direkte av brukere. Tjenere som matrix-synapse må "
+"Det er ikke ment å brukes direkte av brukere. Tjenere som Matrix Synapse eller ejabberd må "
"settes opp med detaljene herfra."
#: plinth/modules/coturn/__init__.py:62
@@ -1498,12 +1500,14 @@ msgid "Diagnostics"
msgstr "Diagnostikk"
#: plinth/modules/diagnostics/__init__.py:98
+#: plinth/modules/email_server/templates/email_server.html:29
#, fuzzy
#| msgid "Quassel"
msgid "passed"
msgstr "Quassel"
#: plinth/modules/diagnostics/__init__.py:99
+#: plinth/modules/email_server/templates/email_server.html:27
#: plinth/modules/networks/views.py:49
#, fuzzy
#| msgid "Setup failed."
@@ -1511,6 +1515,7 @@ msgid "failed"
msgstr "Oppsettet mislyktes."
#: plinth/modules/diagnostics/__init__.py:100
+#: plinth/modules/email_server/templates/email_server.html:25
msgid "error"
msgstr "feil"
@@ -2085,6 +2090,288 @@ msgstr ""
"se slik ut: username@%(domainname)s . Du kan sette opp ditt domene på "
"systemsiden Configure ."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Nettprat-tjener"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Mappen finnes ikke."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "Available Domains"
+msgid "RoundCube availability"
+msgstr "Tilgjengelige domener"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Sertifikat mangler"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Domene"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Deaktivert"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "kabel er tilknyttet"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Slettet alle valgte avbildninger"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Lag ny sikkerhetskopi"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Legg til"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "New Backup"
+msgid "New value"
+msgstr "Ny sikkerhetskopi"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Oppdater"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Type tjeneste"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Stien er ikke en katalog."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "Oppdatert mediekatalog"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Nåværende status:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Domenenavn satt"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Sertifikatsstatus"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private key of this machine"
+msgid "Private key path"
+msgstr "Privatnøkkel tilhørende denne maskinen"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Hjem"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Sikkerhet"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Domener"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Aktiver skade"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Deaktivert"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3633,10 +3920,6 @@ msgstr "Kanseller"
msgid "Service"
msgstr "Tjeneste"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Domener"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4371,11 +4654,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Denne forbindelsen er ikke aktiv."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Sikkerhet"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5650,11 +5928,6 @@ msgstr ""
"lesssecureapps\">https://www.google.com/settings/security/lesssecureapps"
"a>)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "E-postklient"
@@ -5959,16 +6232,20 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
#, fuzzy
#| msgid ""
-#| "The following table lists the reported number of security vulnerabilities "
-#| "for each installed app."
+#| "The following table lists the current reported number, and historical "
+#| "count, of security vulnerabilities for each installed app. More "
+#| "information on the vulnerabilities can be found on the Debian Security Bug Tracker ."
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
-"Følgende tabell lister antall innrapporterte sikkerhetssårbarheter for hver "
-"installerte program."
+"Følgende tabell lister gjeldende innrapporterte og historiske antall "
+"sikkerhetssårbarheter for hver installerte program. Mer informasjon om "
+"sårbarehetene kan finnes i Debians sikkerhetsfeiloversikt ."
#: plinth/modules/security/templates/security_report.html:28
msgid ""
@@ -5996,36 +6273,30 @@ msgstr "Vis sikkerhetssårbarheter"
#: plinth/modules/security/templates/security_report.html:47
#, fuzzy
-#| msgid "Show security vulnerabilities"
-msgid "Past Vulnerabilities"
-msgstr "Vis sikkerhetssårbarheter"
-
-#: plinth/modules/security/templates/security_report.html:48
-#, fuzzy
#| msgid "Block Sandbox"
msgid "Sandboxed"
msgstr "Block-sandkassen"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Block Sandbox"
msgid "Sandbox Coverage"
msgstr "Block-sandkassen"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
#, fuzzy
msgid "N/A"
msgstr "I/t"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Ja"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Nei"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "Kjører ikke"
@@ -6164,10 +6435,8 @@ msgid "Make files in this folder available to anyone with the link."
msgstr "Gjør filene i denne mappen tilgjengelig for alle som har lenken."
#: plinth/modules/sharing/forms.py:34
-#, fuzzy
-#| msgid "User groups that can read the files in the share"
msgid "User groups that can read the files in the share:"
-msgstr "Brukergrupper som kan lese filene på det delte området"
+msgstr "Brukergrupper som kan lese filene på det delte området:"
#: plinth/modules/sharing/forms.py:36
msgid ""
@@ -6895,10 +7164,6 @@ msgstr "Kjæledyrnavn"
msgid "Add new introducer"
msgstr "Legg til en ny introduserer"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Legg til"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Tilknyttede introduserere"
@@ -7105,7 +7370,7 @@ msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
"En Tor SOCKS-port er tilgjengelig på din %(box_name)s på TCP port 9050."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Oppsett uendret"
@@ -7190,13 +7455,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Oppdater"
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update"
@@ -8088,6 +8346,63 @@ msgstr "Slett tilkobling"
msgid "Server deleted."
msgstr "Tjener slettet."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Adresse"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki og Blogg"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "Offentlig tilgang"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8115,7 +8430,7 @@ msgstr "Zoph"
#: plinth/modules/zoph/__init__.py:63
msgid "Photo Organizer"
-msgstr ""
+msgstr "Foto-organiserer"
#: plinth/modules/zoph/forms.py:14
msgid "Enable OpenStreetMap for maps"
@@ -8126,6 +8441,8 @@ msgid ""
"When enabled, requests will be made to OpenStreetMap servers from user's "
"browser. This impacts privacy."
msgstr ""
+"Når dette er aktivt gjøres det forespørsler til tjenere hos OpenStreetMap "
+"fra brukerens nettleser. Dette gir inngrep i privatsværen."
#: plinth/modules/zoph/templates/zoph-pre-setup.html:15
#: plinth/modules/zoph/templates/zoph-pre-setup.html:28
@@ -8139,7 +8456,9 @@ msgstr "Gå i gang med oppsett"
msgid ""
"User account %(username)s will become the administrator "
"account for Zoph."
-msgstr "Brukerkontoen %(username)s vil bli administratorkonto for Zoph."
+msgstr ""
+"Brukerkontoen %(username)s vil bli administratorkonto for "
+"Zoph."
#: plinth/network.py:29
msgid "PPPoE"
@@ -8240,10 +8559,6 @@ msgstr "Kjernefunksjonalitet og nettbrukergrensesnitt for %(box_name)s"
msgid " Home"
msgstr " Hjem"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Hjem"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Programmer"
@@ -8536,6 +8851,11 @@ msgstr "%(percentage)s%% fullført"
msgid "Gujarati"
msgstr "Gujarati"
+#, fuzzy
+#~| msgid "Show security vulnerabilities"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Vis sikkerhetssårbarheter"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "Meldingsarkivhåndtering aktivert"
@@ -9295,9 +9615,6 @@ msgstr "Gujarati"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "Webtjener over SSL"
-#~ msgid "Current status:"
-#~ msgstr "Nåværende status:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Slette wiki eller blogg"
@@ -9319,9 +9636,6 @@ msgstr "Gujarati"
#~ msgid "Abort"
#~ msgstr "Anuller"
-#~ msgid "New Backup"
-#~ msgstr "Ny sikkerhetskopi"
-
#~ msgid "chrony client in contact with servers"
#~ msgstr "chrony-klient har kontakt med tjenere"
diff --git a/plinth/locale/nl/LC_MESSAGES/django.po b/plinth/locale/nl/LC_MESSAGES/django.po
index dec0bd2c5..83c6ab5ea 100644
--- a/plinth/locale/nl/LC_MESSAGES/django.po
+++ b/plinth/locale/nl/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-04-22 21:32+0000\n"
"Last-Translator: ikmaak \n"
"Language-Team: Dutch username@%(domainname)s. Het domein kan worden ingesteld op "
"de Instellingen pagina."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Chatserver"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Map bestaat niet."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "unavailable"
+msgid "RoundCube availability"
+msgstr "niet beschikbaar"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Geen certificaat"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Domein"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Uitgeschakeld"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "kabel is verbonden"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Verwijderde geselecteerde snapshots"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Maak een nieuwe back-up"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Toevoegen"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "Backups"
+msgid "New value"
+msgstr "Back-ups"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Update"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Dienst Type"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Pad is geen map."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "Mediamap bijgewerkt"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Huidige status:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Domeinnaam ingesteld"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Certificaatstatus"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private key of this machine"
+msgid "Private key path"
+msgstr "Privésleutel van deze machine"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Startpagina"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Security"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Domeinen"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Inschakelen Schade"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Uitgeschakeld"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3629,10 +3914,6 @@ msgstr "Annuleer"
msgid "Service"
msgstr "Dienst"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Domeinen"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4411,11 +4692,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Deze verbinding is niet actief."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Security"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5645,11 +5921,6 @@ msgstr ""
"(https://"
"www.google.com/settings/security/lesssecureapps )."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "Email Cliënt"
@@ -5956,9 +6227,15 @@ msgstr ""
"de kerndiensten en gebruikersinterface voor een FreedomBox server levert."
#: plinth/modules/security/templates/security_report.html:19
+#, fuzzy
+#| msgid ""
+#| "The following table lists the current reported number, and historical "
+#| "count, of security vulnerabilities for each installed app. More "
+#| "information on the vulnerabilities can be found on the Debian Security Bug Tracker ."
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5997,30 +6274,26 @@ msgid "Current Vulnerabilities"
msgstr "Huidige kwetsbaarheden"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Kwetsbaarheden in het verleden"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Geïsoleerd"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Isolatie-bereik"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "N.v.t."
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Ja"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Nee"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "Inaktief"
@@ -6870,10 +7143,6 @@ msgstr "Naam Huisdier"
msgid "Add new introducer"
msgstr "Nieuwe introduceerder toevoegen"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Toevoegen"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Verbonden introduceerders"
@@ -7084,7 +7353,7 @@ msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
"Een Tor SOCKS poort is beschikbaar op %(box_name)s, via TCP poort 9050."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Instelling onveranderd"
@@ -7171,13 +7440,6 @@ msgstr ""
"het systeem opnieuw moet worden opgestart, gebeurt dit automatisch om 02:00 "
"uur, waardoor alle toepassingen even niet beschikbaar zijn."
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Update"
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr "Updates"
@@ -8016,6 +8278,63 @@ msgstr "Verwijder verbinding met server"
msgid "Server deleted."
msgstr "Server verwijderd."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Adres"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki en Blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "openbare toegang"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8178,10 +8497,6 @@ msgstr "Basisfunctionaliteit en webinterface voor %(box_name)s"
msgid " Home"
msgstr " Startpagina"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Startpagina"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Toepassingen"
@@ -8473,6 +8788,9 @@ msgstr "%(percentage)s%% voltooid"
msgid "Gujarati"
msgstr "Gujarati"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Kwetsbaarheden in het verleden"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "Berichten Archief Management aangezet"
@@ -9270,9 +9588,6 @@ msgstr "Gujarati"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "Web Server over Secure Socket Layer"
-#~ msgid "Current status:"
-#~ msgstr "Huidige status:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Verwijder Wiki of Blog"
@@ -9297,11 +9612,6 @@ msgstr "Gujarati"
#~ msgid "Default app set"
#~ msgstr "Standaard"
-#, fuzzy
-#~| msgid "Backups"
-#~ msgid "New Backup"
-#~ msgstr "Back-ups"
-
#, fuzzy
#~| msgid "NTP client in contact with servers"
#~ msgid "chrony client in contact with servers"
diff --git a/plinth/locale/pl/LC_MESSAGES/django.po b/plinth/locale/pl/LC_MESSAGES/django.po
index 69542e26b..bbd0c6ab7 100644
--- a/plinth/locale/pl/LC_MESSAGES/django.po
+++ b/plinth/locale/pl/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-03-03 16:50+0000\n"
"Last-Translator: Karol Werner \n"
"Language-Team: Polish . Możesz ustawić swoją domenę na stronie Konfiguruj ."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Serwer czatu"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Brak certyfikatu"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Domena"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Wyłączony"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "Enabled"
+msgid "Enable selected"
+msgstr "Włączony"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete %(name)s"
+msgid "Delete selected"
+msgstr "Usuń %(name)s"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Utwórz nową kopię zapasową"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Typ usługi"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Create home directory"
+msgstr "Utwórz repozytorium"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Aktualny status:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Nazwa domeny ustawiona"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Status certyfikatu"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Private key path"
+msgstr "Utwórz repozytorium"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Dom"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Włącz zniszczenia"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Wyłączony"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3431,10 +3706,6 @@ msgstr "Anuluj"
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4108,11 +4379,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5202,11 +5468,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
#, fuzzy
#| msgid "Dynamic DNS Client"
@@ -5484,8 +5745,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5515,34 +5776,30 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Blocked"
msgid "Sandboxed"
msgstr "Zablokowano"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Blocked"
msgid "Sandbox Coverage"
msgstr "Zablokowano"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Tak"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Nie"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
#, fuzzy
#| msgid "deluge-web is not running"
msgid "Not running"
@@ -6336,10 +6593,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6520,7 +6773,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Ustawienie bez zmian"
@@ -6594,13 +6847,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update URL"
@@ -7428,6 +7674,59 @@ msgstr "Bezpośrednie połłączenie z internetem."
msgid "Server deleted."
msgstr "Archiwum zostało usunięte."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki i blog"
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7583,10 +7882,6 @@ msgstr "Interfejs administracyjny Plinth dla %(box_name)s"
msgid " Home"
msgstr " Dom"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Dom"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Aplikacje"
@@ -8198,9 +8493,6 @@ msgstr "Gujarati"
#~ msgstr ""
#~ "Nie powiodło się połączenie ze zdalnym repozytorium. Szczegóły: %(err)s"
-#~ msgid "Current status:"
-#~ msgstr "Aktualny status:"
-
#, fuzzy
#~| msgid "Error setting language: {exception}"
#~ msgid "Error setting default app: {exception}"
diff --git a/plinth/locale/pt/LC_MESSAGES/django.po b/plinth/locale/pt/LC_MESSAGES/django.po
index 177768c45..1924509e1 100644
--- a/plinth/locale/pt/LC_MESSAGES/django.po
+++ b/plinth/locale/pt/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-05-08 22:33+0000\n"
"Last-Translator: ssantos \n"
"Language-Team: Portuguese Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Web Server"
+msgid "Email Server"
+msgstr "Servidor Web"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain Name"
+msgid "domain"
+msgstr "Nome de Domínio"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "Applications"
+msgid "Enable selected"
+msgstr "Aplicações"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete files"
+msgid "Delete selected"
+msgstr "Apagar ficheiros"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Criar novo backup"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "New Backup"
+msgid "New value"
+msgstr "Novo Backup"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Discovery"
+msgid "Service Alert"
+msgstr "Descoberta do Serviço"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Create home directory"
+msgstr "Criar Repositório"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Nome do domínio definido"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Create new repository"
+msgid "Private key path"
+msgstr "Criar novo repositório"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+#, fuzzy
+#| msgid "Domain Name"
+msgid "Domains"
+msgstr "Nome de Domínio"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Applications"
+msgid "Enabled aliases"
+msgstr "Aplicações"
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3304,12 +3571,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-#, fuzzy
-#| msgid "Domain Name"
-msgid "Domains"
-msgstr "Nome de Domínio"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3989,11 +4250,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5084,11 +5340,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5368,8 +5619,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5399,30 +5650,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
#, fuzzy
#| msgid "Service discovery server is not running"
msgid "Not running"
@@ -6194,10 +6441,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6380,7 +6623,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Definição inalterada"
@@ -6452,13 +6695,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "General Configuration"
@@ -7265,6 +7501,57 @@ msgstr "Erro a estabelecer ligação ao servidor: {}"
msgid "Server deleted."
msgstr "Arquivo apagado."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7405,10 +7692,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
@@ -7790,9 +8073,6 @@ msgstr "Gujarati"
#~ msgid "Abort"
#~ msgstr "Abandonar"
-#~ msgid "New Backup"
-#~ msgstr "Novo Backup"
-
#, fuzzy
#~| msgid "NTP client in contact with servers"
#~ msgid "chrony client in contact with servers"
diff --git a/plinth/locale/ru/LC_MESSAGES/django.po b/plinth/locale/ru/LC_MESSAGES/django.po
index 23215b7b8..378a1820e 100644
--- a/plinth/locale/ru/LC_MESSAGES/django.po
+++ b/plinth/locale/ru/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-02-01 18:42+0000\n"
"Last-Translator: Алексей Докучаев \n"
"Language-Team: Russian username@%(domainname)s. Вы можете "
"настроить ваш домен на странице Настройка ."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Чат-сервер"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Каталог не существует."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "Unavailable Shares"
+msgid "RoundCube availability"
+msgstr "Недоступный общий доступ"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Не сертификата"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Домен"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Выключено"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "кабель подключен"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Удалить выбранные снапшоты"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Создать новую резервную копию"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Добавить"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "Backups"
+msgid "New value"
+msgstr "Резервные копии"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Обновление"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Тип службы"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Путь не каталог."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "Обновленный каталог медиа"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Текущий статус:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Смена доменного имени"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Статус сертификата"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private key of this machine"
+msgid "Private key path"
+msgstr "Приватный ключ этой машины"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Домой"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Безопасность"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Домены"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Включить урон"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Выключено"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3599,10 +3884,6 @@ msgstr "Отмена"
msgid "Service"
msgstr "Служба"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Домены"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4362,11 +4643,6 @@ msgstr "IРv6"
msgid "This connection is not active."
msgstr "Это подключение не активно."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Безопасность"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5646,11 +5922,6 @@ msgstr ""
"security/lesssecureapps\" >https://www.google.com/settings/security/"
"lesssecureapps)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "Почтовый клиент"
@@ -5962,8 +6233,8 @@ msgstr ""
#| "The following table lists the current reported number, and historical "
#| "count, of security vulnerabilities for each installed app."
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -6000,30 +6271,26 @@ msgid "Current Vulnerabilities"
msgstr "Текущие уязвимости"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Прошлые уязвимости"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Песочница"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Покрытие песочницы"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "Н/Д"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Да"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Нет"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "Не запущен"
@@ -6870,10 +7137,6 @@ msgstr "Имя питомца"
msgid "Add new introducer"
msgstr "Добавить нового посредника"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Добавить"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Подключенные посредники"
@@ -7078,7 +7341,7 @@ msgstr "SОCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr "Порт Tor SOCKS вашего %(box_name)s доступен по порту TCP 9050."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Настройки без изменений"
@@ -7165,13 +7428,6 @@ msgstr ""
"выполняется автоматически в 02:00, в результате чего все приложения на "
"короткое время становятся недоступными."
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Обновление"
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update"
@@ -8018,6 +8274,63 @@ msgstr "Удалить соединение с сервером"
msgid "Server deleted."
msgstr "Сервер удален."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Адрес"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Вики и Блог"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "публичный доступ"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8165,10 +8478,6 @@ msgstr "Базовая функциональность и веб-интерфе
msgid " Home"
msgstr " Домой"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Домой"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Приложения"
@@ -8461,6 +8770,9 @@ msgstr "%(percentage)s%% завершено"
msgid "Gujarati"
msgstr "Гуджарати"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Прошлые уязвимости"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "Управление архивом сообщение включено"
@@ -9165,9 +9477,6 @@ msgstr "Гуджарати"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "Веб-сервер через Secure Socket Layer"
-#~ msgid "Current status:"
-#~ msgstr "Текущий статус:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Удаление блога или вики"
@@ -9186,11 +9495,6 @@ msgstr "Гуджарати"
#~ msgid "Default app set"
#~ msgstr "Приложение по умолчанию настроено"
-#, fuzzy
-#~| msgid "Backups"
-#~ msgid "New Backup"
-#~ msgstr "Резервные копии"
-
#, fuzzy
#~| msgid "NTP client in contact with servers"
#~ msgid "chrony client in contact with servers"
diff --git a/plinth/locale/si/LC_MESSAGES/django.po b/plinth/locale/si/LC_MESSAGES/django.po
index 35d08dce2..47c90cdb3 100644
--- a/plinth/locale/si/LC_MESSAGES/django.po
+++ b/plinth/locale/si/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-04-27 13:32+0000\n"
"Last-Translator: HelaBasa \n"
"Language-Team: Sinhala Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+msgid "Email Server"
+msgstr ""
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+msgid "Service Alert"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+msgid "Create home directory"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3127,10 +3370,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3798,11 +4037,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4859,11 +5093,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5129,8 +5358,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5158,30 +5387,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5935,10 +6160,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6115,7 +6336,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6187,13 +6408,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -6941,6 +7155,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7077,10 +7342,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/sl/LC_MESSAGES/django.po b/plinth/locale/sl/LC_MESSAGES/django.po
index 07352575e..5ce74e38c 100644
--- a/plinth/locale/sl/LC_MESSAGES/django.po
+++ b/plinth/locale/sl/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-01-18 12:32+0000\n"
"Last-Translator: ikmaak \n"
"Language-Team: Slovenian Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Domain Name Server"
+msgid "Email Server"
+msgstr "Strežnik z imenom domene"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete Archive"
+msgid "Delete selected"
+msgstr "Izbriši arhiv"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create remote backup repository"
+msgid "Create a new email alias"
+msgstr "Ustvari oddaljeno skladišče za rezervne kopije"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Discovery"
+msgid "Service Alert"
+msgstr "Odkrivanje storitev"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create new repository"
+msgid "Create home directory"
+msgstr "Ustvari novo skladišče"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Create new repository"
+msgid "Private key path"
+msgstr "Ustvari novo skladišče"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3303,10 +3558,6 @@ msgstr "Prekliči"
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3978,11 +4229,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5053,11 +5299,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5329,8 +5570,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5360,30 +5601,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -6143,10 +6380,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6323,7 +6556,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6403,13 +6636,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -7197,6 +7423,57 @@ msgstr "Napaka ob nameščanju aplikacije: {error}"
msgid "Server deleted."
msgstr "Arhiv je izbrisan."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7333,10 +7610,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/sq/LC_MESSAGES/django.po b/plinth/locale/sq/LC_MESSAGES/django.po
index cbde8997e..20de7672a 100644
--- a/plinth/locale/sq/LC_MESSAGES/django.po
+++ b/plinth/locale/sq/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-06-07 12:34+0000\n"
"Last-Translator: Besnik Bleta \n"
"Language-Team: Albanian Formësoni e sistemit."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Shërbyes Fjalosjesh"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Drejtoria s’ekziston."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "unavailable"
+msgid "RoundCube availability"
+msgstr "jo i passhëm"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "S’ka dëshmi"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Përkatësi"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "E çaktivizuar"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "kablloja është e lidhur"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "U fshinë fotografimet e përzgjedhur"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Krijoni një kopjeruajtje të re"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Shtoje"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Përditësoje"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Lloj Shërbimi"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Shtegu s’është drejtori."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "U përditësua drejtori mediash"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Emri i përkatësisë u caktua"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Gjendje Dëshmie"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private key of this machine"
+msgid "Private key path"
+msgstr "Kyç privat i kësaj makine"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Kreu"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Siguri"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Përkatësi"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Aktivizo dëmtim"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "E çaktivizuar"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3599,10 +3880,6 @@ msgstr "Anuloje"
msgid "Service"
msgstr "Shërbim"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Përkatësi"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4379,11 +4656,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Kjo lidhje s’është aktive."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Siguri"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5616,11 +5888,6 @@ msgstr ""
"Google (https://www.google.com/settings/security/lesssecureapps )."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "Klient Email"
@@ -5927,8 +6194,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5962,30 +6229,26 @@ msgid "Current Vulnerabilities"
msgstr "Cenueshmëri Aktuale"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Cenueshmëri të dikurshme"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Në bankëprovë"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Mbulim Bankëprove"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "N/A"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Po"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Jo"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "S’xhiron"
@@ -6824,10 +7087,6 @@ msgstr "Emër Kafshe Shtëpiake"
msgid "Add new introducer"
msgstr "Shtoni paraqitës të ri"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Shtoje"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Paraqitës të lidhur"
@@ -7016,7 +7275,7 @@ msgstr "SOCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -7088,13 +7347,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Përditësoje"
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr "Përditësime"
@@ -7842,6 +8094,63 @@ msgstr "Fshije Lidhjen me Shërbyesin"
msgid "Server deleted."
msgstr "Shërbyesi u fshi."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Adresë"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki dhe Blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "hyrje publike"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7978,10 +8287,6 @@ msgstr ""
msgid " Home"
msgstr " Kreu"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Kreu"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Aplikacione"
@@ -8246,3 +8551,6 @@ msgstr ""
#: plinth/web_framework.py:113
msgid "Gujarati"
msgstr "Gujaratase"
+
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Cenueshmëri të dikurshme"
diff --git a/plinth/locale/sr/LC_MESSAGES/django.po b/plinth/locale/sr/LC_MESSAGES/django.po
index 377ad97e3..86031ee08 100644
--- a/plinth/locale/sr/LC_MESSAGES/django.po
+++ b/plinth/locale/sr/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-01-18 12:32+0000\n"
"Last-Translator: ikmaak \n"
"Language-Team: Serbian Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Domain Name Server"
+msgid "Email Server"
+msgstr "Domain Name Server"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete Archive"
+msgid "Delete selected"
+msgstr "Izbriši arhivu"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Kreiraj novu rezervnu kopiju"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Discovery"
+msgid "Service Alert"
+msgstr "Otkrivanje Servisa"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Create home directory"
+msgstr "Kreirajte repozitorij"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3201,10 +3454,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3874,11 +4123,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4945,11 +5189,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5217,8 +5456,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5246,30 +5485,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -6025,10 +6260,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6205,7 +6436,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6277,13 +6508,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -7031,6 +7255,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7167,10 +7442,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/sv/LC_MESSAGES/django.po b/plinth/locale/sv/LC_MESSAGES/django.po
index 3d44ad7ce..6ef1a2261 100644
--- a/plinth/locale/sv/LC_MESSAGES/django.po
+++ b/plinth/locale/sv/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-04-22 21:32+0000\n"
"Last-Translator: Michael Breidenbach \n"
"Language-Team: Swedish användarnamn@%(domainname)s. Du kan ställa in "
"din domän på systemet Konfigurera sidan."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Chat-Server"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Katalogen finns inte."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "unavailable"
+msgid "RoundCube availability"
+msgstr "otillgängligt"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Inget certifikat"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Domän"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Inaktiverad"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "kabeln är ansluten"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Borttagna markerade ögonblicksbilder"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Skapa en ny säkerhetskopia"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Lägg till"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Uppdatera"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Servicetype"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Sökvägen är inte en katalog."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "Uppdaterad mediekatalog"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Nuvarande status:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Låt oss kryptera"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Domännamn inställt"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Certifikatets status"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private key of this machine"
+msgid "Private key path"
+msgstr "Maskinens privata nyckel"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Hem"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Säkerhet"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Domäner"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Aktivera skador"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Inaktiverad"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3590,10 +3873,6 @@ msgstr "Avbryt"
msgid "Service"
msgstr "Tjänst"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Domäner"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4366,11 +4645,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Den här anslutningen är inte aktiv."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Säkerhet"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5597,11 +5871,6 @@ msgstr ""
"security/lesssecureapps\" >https://www.Google.com/settings/Security/"
"lesssecureapps)."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "E-postklient"
@@ -5904,9 +6173,15 @@ msgstr ""
"server."
#: plinth/modules/security/templates/security_report.html:19
+#, fuzzy
+#| msgid ""
+#| "The following table lists the current reported number, and historical "
+#| "count, of security vulnerabilities for each installed app. More "
+#| "information on the vulnerabilities can be found on the Debian Security Bug Tracker ."
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5943,30 +6218,26 @@ msgid "Current Vulnerabilities"
msgstr "Aktuella sårbarheter"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Tidigare sårbarheter"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Sandboxed"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Sandbox Täckning"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "N/A"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Ja"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Nej"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "Körs inte"
@@ -6809,10 +7080,6 @@ msgstr "Namn på husdjur"
msgid "Add new introducer"
msgstr "Lägg till ny introduktören"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Lägg till"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Anslutna introducerare"
@@ -7018,7 +7285,7 @@ msgstr "SOCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr "En Tor SOCKS-port finns på din %(box_name)s på TCP-port 9050."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Instänllningar oförändrade"
@@ -7107,13 +7374,6 @@ msgstr ""
"systemet bedöms vara nödvändigt, det sker automatiskt vid 02:00 orsakar alla "
"apps för att vara tillgängligt en kort stund."
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Uppdatera"
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr "Uppdateringar"
@@ -7948,6 +8208,63 @@ msgstr "Ta bort anslutning till server"
msgid "Server deleted."
msgstr "Servern har tagits bort."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Adress"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki och Blogg"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "Publik tillgång"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8107,10 +8424,6 @@ msgstr "Kärnfunktioner och webbgränssnitt för %(box_name)s"
msgid " Home"
msgstr " Hem"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Hem"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Appar"
@@ -8404,6 +8717,9 @@ msgstr "%(percentage)s %% färdigt"
msgid "Gujarati"
msgstr "Gujarati"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Tidigare sårbarheter"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "Meddelandearkivhantering aktiverad"
@@ -9007,9 +9323,6 @@ msgstr "Gujarati"
#~ msgid "Tor Anonymity Network"
#~ msgstr "Tor Anonymitetsnätverk"
-#~ msgid "Current status:"
-#~ msgstr "Nuvarande status:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Ta Bort Wiki eller Blogg"
diff --git a/plinth/locale/ta/LC_MESSAGES/django.po b/plinth/locale/ta/LC_MESSAGES/django.po
index 9683c2f21..de7dc897a 100644
--- a/plinth/locale/ta/LC_MESSAGES/django.po
+++ b/plinth/locale/ta/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -22,7 +22,7 @@ msgstr ""
msgid "Page source"
msgstr ""
-#: plinth/context_processors.py:23 plinth/views.py:78
+#: plinth/context_processors.py:23 plinth/views.py:80
msgid "FreedomBox"
msgstr ""
@@ -926,7 +926,7 @@ msgstr ""
#: plinth/modules/matrixsynapse/views.py:124 plinth/modules/mumble/views.py:28
#: plinth/modules/pagekite/forms.py:78 plinth/modules/quassel/views.py:29
#: plinth/modules/shadowsocks/views.py:59
-#: plinth/modules/transmission/views.py:47
+#: plinth/modules/transmission/views.py:47 plinth/modules/wordpress/views.py:36
msgid "Configuration updated"
msgstr ""
@@ -1342,15 +1342,18 @@ msgid "Diagnostics"
msgstr ""
#: plinth/modules/diagnostics/__init__.py:98
+#: plinth/modules/email_server/templates/email_server.html:29
msgid "passed"
msgstr ""
#: plinth/modules/diagnostics/__init__.py:99
+#: plinth/modules/email_server/templates/email_server.html:27
#: plinth/modules/networks/views.py:49
msgid "failed"
msgstr ""
#: plinth/modules/diagnostics/__init__.py:100
+#: plinth/modules/email_server/templates/email_server.html:25
msgid "error"
msgstr ""
@@ -1842,6 +1845,246 @@ msgid ""
"Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+msgid "Email Server"
+msgstr ""
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+msgid "Delete selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+msgid "Create a new email alias"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+msgid "Service Alert"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+msgid "Create home directory"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3126,10 +3369,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3797,11 +4036,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4858,11 +5092,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5128,8 +5357,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5157,30 +5386,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5934,10 +6159,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6114,7 +6335,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6186,13 +6407,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -6940,6 +7154,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7076,10 +7341,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/te/LC_MESSAGES/django.po b/plinth/locale/te/LC_MESSAGES/django.po
index d7638ac3d..82d5bc1ae 100644
--- a/plinth/locale/te/LC_MESSAGES/django.po
+++ b/plinth/locale/te/LC_MESSAGES/django.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: FreedomBox UI\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-05-17 18:31+0000\n"
"Last-Translator: chilumula vamshi krishna \n"
"Language-Team: Telugu kaanfigar పేజీలో సెటప్ చేయవచ్చు."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "కబుర్ల సేవిక"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "డైరెక్టరీ ఉనికిలో లేదు."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "Available Domains"
+msgid "RoundCube availability"
+msgstr "అందుబాటులో ఉన్న డొమైన్లు"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "ధృవీకరణ పత్రం లేదు"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "డొమైన్"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "రౌండ్ క్యూబ్"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "మొజిల్లా థండర్ బర్డ్"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "నిలిపివేయబడింది"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "కేబుల్ అనుసంధానించబడిన"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete all the snapshots"
+msgid "Delete selected"
+msgstr "అన్ని స్నాప్షాట్లను తొలగించు"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "క్రొత్త బ్యాకప్ను సృష్టించండి"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "జోడించు"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+#, fuzzy
+#| msgid "Backups"
+msgid "New value"
+msgstr "బ్యాకప్స్"
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "నవీకరణ"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "సేవా రకం"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Download directory"
+msgid "You do not have a home directory."
+msgstr "డైరెక్టరీని దిగుమతి చేయు"
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "మీడియా డైరెక్టరీని నవీకరించబడింది"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "ప్రస్తుత స్థితి:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "లెట్స్ ఎన్క్రిప్ట్"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "అధికారక్షేత్రం పేరు అమర్పు"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "యోగ్యతాపత్రం స్థితి"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Create User"
+msgid "Private key path"
+msgstr "వినియోగదారుని సృష్టించు"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "ముంగిలి"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "భద్రత"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "డొమైన్లు"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+msgid "Enabled aliases"
+msgstr "PageKite ప్రారంభించు"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "నిలిపివేయబడింది"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3549,10 +3833,6 @@ msgstr "రద్దుచేయి"
msgid "Service"
msgstr "సేవ"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "డొమైన్లు"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4264,11 +4544,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "ఈ అనుసంధానం చురుకుగాలేదు."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "భద్రత"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5487,11 +5762,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "రౌండ్ క్యూబ్"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "ఇమెయిల్ క్లయింట్"
@@ -5809,8 +6079,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5840,38 +6110,34 @@ msgid "Current Vulnerabilities"
msgstr "ప్రస్తుత దుర్బలతలు"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "గత దుర్బలతలు"
-
-#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Block Sandbox (Minetest)"
msgid "Sandboxed"
msgstr "స్యాండ్ బాక్స్ ను అడ్డగించు (మైన్ పరీక్ష)"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid "Block Sandbox (Minetest)"
msgid "Sandbox Coverage"
msgstr "స్యాండ్ బాక్స్ ను అడ్డగించు (మైన్ పరీక్ష)"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "N/A"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
#, fuzzy
#| msgid "yes"
msgid "Yes"
msgstr "అవును"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
#, fuzzy
#| msgid "None"
msgid "No"
msgstr "ఏమీ లేదు"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
#, fuzzy
#| msgid "is not running"
msgid "Not running"
@@ -6727,10 +6993,6 @@ msgstr "ముద్దుపేరు"
msgid "Add new introducer"
msgstr "కొత్త పరిచయకర్తని జోడించండి"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "జోడించు"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "కనెక్ట్ చేసిన పరిచయకర్తలు"
@@ -6942,7 +7204,7 @@ msgstr "సాక్స్లు"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr "టిసిపి పోర్ట్ 9050 పై ఒక టార్ సొక్స్ పోర్ట్ మీ %(box_name)sలో అందుబాటులో ఉంది."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "మారకుండా అమర్చుతోంది"
@@ -7034,13 +7296,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "నవీకరణ"
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update"
@@ -7884,6 +8139,63 @@ msgstr "అనుసంధానం తొలగించు"
msgid "Server deleted."
msgstr "{name} తొలగించబడింది."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "చిరునామా"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "వికీ మరియు బ్లాగ్"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "ప్రజా ప్రాప్తి"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8027,10 +8339,6 @@ msgstr ""
msgid " Home"
msgstr "ముంగిలి"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "ముంగిలి"
-
#: plinth/templates/base.html:115
#, fuzzy
#| msgid "Apps"
@@ -8328,6 +8636,9 @@ msgstr "%(percentage)s %% పూర్తి"
msgid "Gujarati"
msgstr "గుజరాతీ"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "గత దుర్బలతలు"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "ప్రాచీన సందేశ నిర్వహణ ప్రారంభించబడింది"
@@ -9087,9 +9398,6 @@ msgstr "గుజరాతీ"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "సెక్యుర్ సాకెట్ లేయర్ పై వెబ్ సర్వర్"
-#~ msgid "Current status:"
-#~ msgstr "ప్రస్తుత స్థితి:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "వికీ లేదా బ్లాగును తొలగించు"
@@ -9114,11 +9422,6 @@ msgstr "గుజరాతీ"
#~ msgid "Default app set"
#~ msgstr "అప్రమేయం"
-#, fuzzy
-#~| msgid "Backups"
-#~ msgid "New Backup"
-#~ msgstr "బ్యాకప్స్"
-
#, fuzzy
#~| msgid "NTP client in contact with servers"
#~ msgid "chrony client in contact with servers"
diff --git a/plinth/locale/tr/LC_MESSAGES/django.po b/plinth/locale/tr/LC_MESSAGES/django.po
index 8cc1b687c..060346a33 100644
--- a/plinth/locale/tr/LC_MESSAGES/django.po
+++ b/plinth/locale/tr/LC_MESSAGES/django.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-04-22 21:32+0000\n"
"Last-Translator: Burak Yavuz \n"
"Language-Team: Turkish Yapılandır sayfasında "
"ayarlayabilirsiniz."
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Sohbet Sunucusu"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Dizin mevcut değil."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "unavailable"
+msgid "RoundCube availability"
+msgstr "kullanılamaz"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Sertifika yok"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Etki Alanı"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Etkisizleştirildi"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "kablo bağlı"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Deleted selected snapshots"
+msgid "Delete selected"
+msgstr "Seçilen anlık görüntüler silindi"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Yeni bir yedek oluşturun"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Ekle"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Güncelle"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Hizmet Türü"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Yol bir dizin değil."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "Güncellenmiş ortam dizini"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "Güncel durum:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Etki alanı adı ayarlandı"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Sertifika Durumu"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private key of this machine"
+msgid "Private key path"
+msgstr "Bu makinenin özel anahtarı"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Giriş"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Güvenlik"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Etki Alanları"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Hasarı etkinleştir"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Etkisizleştirildi"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3608,10 +3891,6 @@ msgstr "İptal"
msgid "Service"
msgstr "Hizmet"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Etki Alanları"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4385,11 +4664,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Bu bağlantı etkin değil."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Güvenlik"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5611,11 +5885,6 @@ msgstr ""
"gerekeceğini unutmayın (https://myaccount.google.com/lesssecureapps )."
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "E-posta İstemcisi"
@@ -5920,9 +6189,15 @@ msgstr ""
"sağlayan FreedomBox uygulamasında bildirilen %(count)s güvenlik açığı var."
#: plinth/modules/security/templates/security_report.html:19
+#, fuzzy
+#| msgid ""
+#| "The following table lists the current reported number, and historical "
+#| "count, of security vulnerabilities for each installed app. More "
+#| "information on the vulnerabilities can be found on the Debian Security Bug Tracker ."
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5961,30 +6236,26 @@ msgid "Current Vulnerabilities"
msgstr "Şu Anki Güvenlik Açığı"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Geçmiş Güvenlik Açığı"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr "Korumalı"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr "Korumalı Alan Kapsamı"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr "YOK"
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Evet"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Hayır"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "Çalışmıyor"
@@ -6833,10 +7104,6 @@ msgstr "Evcil Hayvan Adı"
msgid "Add new introducer"
msgstr "Yeni tanıtıcı ekle"
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Ekle"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr "Bağlı tanıtıcılar"
@@ -7044,7 +7311,7 @@ msgstr ""
"9050 nolu TCP bağlantı noktası üzerindeki %(box_name)s cihazınızda bir Tor "
"SOCKS bağlantı noktası kullanılabilir."
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Ayar değişmedi"
@@ -7132,13 +7399,6 @@ msgstr ""
"Eğer sistemin yeniden başlatılması gerekli görülürse, saat 02:00'da otomatik "
"olarak yapılır ve tüm uygulamalar kısa bir süre için kullanılamaz hale gelir."
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Güncelle"
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr "Güncellemeler"
@@ -7973,6 +8233,63 @@ msgstr "Sunucuya Bağlantıyı Sil"
msgid "Server deleted."
msgstr "Sunucu silindi."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Adres"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Viki ve Blog"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "herkese açık erişim"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8134,10 +8451,6 @@ msgstr "%(box_name)s için temel işlevsellik ve web arayüzü"
msgid " Home"
msgstr " Giriş"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Giriş"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Uygulamalar"
@@ -8428,6 +8741,9 @@ msgstr "%%%(percentage)s tamamlandı"
msgid "Gujarati"
msgstr "Gujarati"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Geçmiş Güvenlik Açığı"
+
#~ msgid "Message Archive Management enabled"
#~ msgstr "İleti Arşivi Yönetimi etkinleştirildi"
@@ -9211,9 +9527,6 @@ msgstr "Gujarati"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "SSL (Secure Socket Layer) üzerinden Web Sunucusu"
-#~ msgid "Current status:"
-#~ msgstr "Güncel durum:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "Viki ya da Blogu Sil"
diff --git a/plinth/locale/uk/LC_MESSAGES/django.po b/plinth/locale/uk/LC_MESSAGES/django.po
index 06aeb9c41..441d01c99 100644
--- a/plinth/locale/uk/LC_MESSAGES/django.po
+++ b/plinth/locale/uk/LC_MESSAGES/django.po
@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
-"PO-Revision-Date: 2021-08-10 19:32+0000\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
+"PO-Revision-Date: 2021-08-20 21:20+0000\n"
"Last-Translator: Andrij Mizyk \n"
"Language-Team: Ukrainian \n"
@@ -24,7 +24,7 @@ msgstr ""
msgid "Page source"
msgstr "Джерело сторінки"
-#: plinth/context_processors.py:23 plinth/views.py:78
+#: plinth/context_processors.py:23 plinth/views.py:80
msgid "FreedomBox"
msgstr "FreedomBox"
@@ -117,7 +117,7 @@ msgid "Access URL {url}"
msgstr "Доступ до URL {url}"
#: plinth/modules/avahi/__init__.py:35
-#, fuzzy, python-brace-format
+#, python-brace-format
msgid ""
"Service discovery allows other devices on the network to discover your "
"{box_name} and services running on it. It also allows {box_name} to "
@@ -126,11 +126,11 @@ msgid ""
"disabled to improve security especially when connecting to a hostile local "
"network."
msgstr ""
-"Виявлення служб дозволяє іншим пристроям в мережі знаходити ваш {box_name} "
-"та запущені на ньому служби. Це дозволяє {box_name} знаходити інші пристрої "
-"та служби запущені у вашій локальній мережі. Знаходження служб не головне і "
-"працює лише у внутрішніх мережах. Це можна виключити, для підвищення "
-"безпеки, особливо при підключенні до не довіреної мережі."
+"Виявлення сервісів дозволяє іншим пристроям у мережі знаходити ваш "
+"{box_name} та запущені на ньому сервіси. Це дозволяє {box_name} знаходити "
+"інші пристрої та сервіси запущені у вашій локальній мережі. Знаходження "
+"сервісів не головне і працює лише у внутрішніх мережах. Це можна вимкнути "
+"для підвищення безпеки, особливо при підключенні до не довіреної мережі."
#: plinth/modules/avahi/__init__.py:59
msgid "Service Discovery"
@@ -397,6 +397,8 @@ msgid ""
"Connection refused - make sure you provided correct credentials and the "
"server is running."
msgstr ""
+"У зʼєднані відмовлено - переконайтеся, що ви надали правильні облікові дані "
+"і чи сервер працює."
#: plinth/modules/backups/repository.py:41
msgid "Connection refused"
@@ -417,6 +419,7 @@ msgstr "Доступ SSH відхилено"
#: plinth/modules/backups/repository.py:64
msgid "Repository path is neither empty nor is an existing backups repository."
msgstr ""
+"Шлях репозиторію непорожній і не є наявним репозиторієм резервних копій."
#: plinth/modules/backups/repository.py:143
msgid "Existing repository is not encrypted."
@@ -471,6 +474,9 @@ msgid ""
"To restore a backup on a new %(box_name)s you need the ssh credentials and, "
"if chosen, the encryption passphrase."
msgstr ""
+"Облікові дані для цього репозиторію зберігаються на вашому %(box_name)s. "
+" Щоб відновити резервну копію на новому %(box_name)s вам потрібні "
+"облікові дані ssh та, якщо вибрано, парольна фраза для шифрування."
#: plinth/modules/backups/templates/backups_add_remote_repository.html:28
msgid "Create Location"
@@ -552,6 +558,8 @@ msgid ""
"The remote repository will not be deleted. This just removes the repository "
"from the listing on the backup page, you can add it again later on."
msgstr ""
+"Віддалений репозиторій не видалиться. Це лише вилучить репозиторій зі списку "
+"на сторінці резервування, ви можете додати його пізніше."
#: plinth/modules/backups/templates/backups_repository_remove.html:31
msgid "Remove Location"
@@ -572,12 +580,19 @@ msgid ""
" backup file.\n"
" "
msgstr ""
+"\n"
+" Вивантажити файл резервної копії від іншого %(box_name)s, щоб "
+"відновити\n"
+" його вміст. Можете обрати застосунки, які бажаєте відновити, після "
+"вивантажування\n"
+" файлу резервної копії.\n"
+" "
#: plinth/modules/backups/templates/backups_upload.html:27
#: plinth/modules/help/templates/statuslog.html:23
#: plinth/modules/networks/templates/connection_show.html:23
msgid "Caution:"
-msgstr ""
+msgstr "Обережно:"
#: plinth/modules/backups/templates/backups_upload.html:28
#, python-format
@@ -585,6 +600,8 @@ msgid ""
"You have %(max_filesize)s available to restore a backup. Exceeding this "
"limit can leave your %(box_name)s unusable."
msgstr ""
+"У вас доступно %(max_filesize)s для відновлення резервної копії. Перевищення "
+"цього обмеження може зробити ваш %(box_name)s не придатним для використання."
#: plinth/modules/backups/templates/backups_upload.html:41
msgid "Upload file"
@@ -596,6 +613,8 @@ msgid ""
"Could not reach SSH host %(hostname)s. Please verify that the host is up and "
"accepting connections."
msgstr ""
+"Не вдалося звʼязатися з власником SSH %(hostname)s. Перевірте чи компʼютер "
+"працює і приймає зʼєднання."
#: plinth/modules/backups/templates/verify_ssh_hostkey.html:28
#, python-format
@@ -603,6 +622,8 @@ msgid ""
"The authenticity of SSH host %(hostname)s could not be established. The host "
"advertises the following SSH public keys. Please verify any one of them."
msgstr ""
+"Не вдалося встановити автентифікацію власника SSH %(hostname)s. Компʼютер "
+"повідомляє про такі публічні ключі SSH. Перевірте будь-який з них."
#: plinth/modules/backups/templates/verify_ssh_hostkey.html:40
msgid "How to verify?"
@@ -614,10 +635,13 @@ msgid ""
"one of the provided options. You can also use dsa, ecdsa, ed25519 etc. "
"instead of rsa, by choosing the corresponding file."
msgstr ""
+"Запустіть наступні команди на машині, що розміщує SSH. Вивід має відповідати "
+"одному з наведених параметрів. Ви також можете використовувати dsa, ecdsa, "
+"ed25519 і т.п. замість rsa, обравши відповідний файл."
#: plinth/modules/backups/templates/verify_ssh_hostkey.html:60
msgid "Verify Host"
-msgstr ""
+msgstr "Перевірити власника"
#: plinth/modules/backups/views.py:55
msgid "Backup schedule updated."
@@ -673,19 +697,19 @@ msgstr "Додано новий віддалений SSH-репозиторій.
#: plinth/modules/backups/views.py:366
msgid "Verify SSH hostkey"
-msgstr ""
+msgstr "Перевірити ключ власника SSH"
#: plinth/modules/backups/views.py:392
msgid "SSH host already verified."
-msgstr ""
+msgstr "Власника SSH вже перевірено."
#: plinth/modules/backups/views.py:402
msgid "SSH host verified."
-msgstr ""
+msgstr "Власника SSH перевірено."
#: plinth/modules/backups/views.py:417
msgid "SSH host public key could not be verified."
-msgstr ""
+msgstr "Публічний ключ власника SSH не можливо перевірити."
#: plinth/modules/backups/views.py:419
msgid "Authentication to remote server failed."
@@ -722,6 +746,11 @@ msgid ""
"audio, video and PDF documents can be previewed in the browser. Shared files "
"can be set to expire after a time period."
msgstr ""
+"bepasty — це вебзастосунок, що дозволяє відвантажувати і ділитися великими "
+"файлами. Текст і фрагменти коду також можна вставляти і ширити. Текст, "
+"картинки, звук, відеозаписи та документи PDF можна попередньо переглянути в "
+"оглядачі. Поширювані файли можна позначати застарілими після певного періоду "
+"часу."
#: plinth/modules/bepasty/__init__.py:28
msgid ""
@@ -730,6 +759,9 @@ msgid ""
"password, you can share it with the users who should have the associated "
"permissions."
msgstr ""
+"bepasty не використовує імена користувачів для входу. Використовує лише "
+"паролі. Для кожного пароля можна вибирати набір дозволів. Створивши пароль, "
+"ви зможете ділитися ним із користувачами, які мають відповідні дозволи."
#: plinth/modules/bepasty/__init__.py:32
msgid ""
@@ -738,18 +770,21 @@ msgid ""
"revoke access for a single person or group, by removing their password from "
"the list."
msgstr ""
+"Можна створити декілька паролів з однаковим набором привілеїв і роздати їх "
+"різним людям або групам. Це дозволить скасувати доступ до певної особи або "
+"групи видаливши її пароль зі списку."
#: plinth/modules/bepasty/__init__.py:41 plinth/modules/bepasty/__init__.py:50
msgid "Read a file, if a web link to the file is available"
-msgstr ""
+msgstr "Прочитати файл, якщо вебпосилання на файл доступне"
#: plinth/modules/bepasty/__init__.py:42
msgid "Create or upload files"
-msgstr ""
+msgstr "Створити або відвантажити файли"
#: plinth/modules/bepasty/__init__.py:43
msgid "List all files and their web links"
-msgstr ""
+msgstr "Показати всі файли і їхні вебпосилання"
#: plinth/modules/bepasty/__init__.py:44
msgid "Delete files"
@@ -757,42 +792,42 @@ msgstr "Видалити файли"
#: plinth/modules/bepasty/__init__.py:45
msgid "Administer files: lock/unlock files"
-msgstr ""
+msgstr "Адміністрування файлів: блокувати/розблокувати файли"
#: plinth/modules/bepasty/__init__.py:49
msgid "None, password is always required"
-msgstr ""
+msgstr "Нічого, пароль обовʼязковий"
#: plinth/modules/bepasty/__init__.py:51
msgid "List and read all files"
-msgstr ""
+msgstr "Показати і зчитати всі файли"
#: plinth/modules/bepasty/__init__.py:64 plinth/modules/bepasty/manifest.py:6
msgid "bepasty"
-msgstr ""
+msgstr "bepasty"
#: plinth/modules/bepasty/__init__.py:66
msgid "File & Snippet Sharing"
-msgstr ""
+msgstr "Обмін файлами і фрагментами коду"
#: plinth/modules/bepasty/forms.py:17
msgid "Public Access (default permissions)"
-msgstr ""
+msgstr "Публічний доступ (типові дозволи)"
#: plinth/modules/bepasty/forms.py:18
msgid "Permissions for anonymous users, who have not provided a password."
-msgstr ""
+msgstr "Дозволи для анонімних користувачів, що не надали пароль."
#: plinth/modules/bepasty/forms.py:27
#: plinth/modules/bepasty/templates/bepasty.html:30
#: plinth/modules/users/forms.py:103 plinth/modules/users/forms.py:227
msgid "Permissions"
-msgstr ""
+msgstr "Дозволи"
#: plinth/modules/bepasty/forms.py:29
msgid ""
"Users that log in with this password will have the selected permissions."
-msgstr ""
+msgstr "Користувачі, що ввійдуть із цим паролем матимуть вибрані дозволи."
#: plinth/modules/bepasty/forms.py:33
#: plinth/modules/bepasty/templates/bepasty.html:31
@@ -801,7 +836,7 @@ msgstr "Коментар"
#: plinth/modules/bepasty/forms.py:34
msgid "Any comment to help you remember the purpose of this password."
-msgstr ""
+msgstr "Будь-який коментар, що допоможе запамʼятати призначення цього пароля."
#: plinth/modules/bepasty/templates/bepasty.html:12
msgid "Manage Passwords"
@@ -814,7 +849,7 @@ msgstr "Додати пароль"
#: plinth/modules/bepasty/templates/bepasty.html:23
msgid "No passwords currently configured."
-msgstr ""
+msgstr "Не налаштовано жодного пароля."
#: plinth/modules/bepasty/templates/bepasty.html:29
#: plinth/modules/dynamicdns/forms.py:106 plinth/modules/networks/forms.py:213
@@ -824,7 +859,7 @@ msgstr "Пароль"
#: plinth/modules/bepasty/views.py:23
msgid "admin"
-msgstr ""
+msgstr "адміністратор"
#: plinth/modules/bepasty/views.py:24
msgid "editor"
@@ -832,11 +867,11 @@ msgstr "редактор"
#: plinth/modules/bepasty/views.py:25
msgid "viewer"
-msgstr ""
+msgstr "переглядач"
#: plinth/modules/bepasty/views.py:50
msgid "Read"
-msgstr ""
+msgstr "Читати"
#: plinth/modules/bepasty/views.py:51
msgid "Create"
@@ -844,7 +879,7 @@ msgstr "Створити"
#: plinth/modules/bepasty/views.py:52
msgid "List"
-msgstr ""
+msgstr "Показати"
#: plinth/modules/bepasty/views.py:53
#: plinth/modules/letsencrypt/templates/letsencrypt.html:86
@@ -855,23 +890,23 @@ msgstr ""
#: plinth/modules/wireguard/templates/wireguard_show_client.html:77
#: plinth/modules/wireguard/templates/wireguard_show_server.html:78
msgid "Delete"
-msgstr ""
+msgstr "Видалити"
#: plinth/modules/bepasty/views.py:54
msgid "Admin"
-msgstr ""
+msgstr "Адміністратор"
#: plinth/modules/bepasty/views.py:91 plinth/modules/searx/views.py:38
#: plinth/modules/searx/views.py:49 plinth/modules/tor/views.py:130
#: plinth/modules/tor/views.py:157 plinth/modules/zoph/views.py:69
msgid "Configuration updated."
-msgstr ""
+msgstr "Налаштування оновлено."
#: plinth/modules/bepasty/views.py:94 plinth/modules/gitweb/views.py:117
#: plinth/modules/searx/views.py:41 plinth/modules/searx/views.py:52
#: plinth/modules/tor/views.py:159 plinth/modules/zoph/views.py:72
msgid "An error occurred during configuration."
-msgstr ""
+msgstr "Під час налаштування відбулася помилка."
#: plinth/modules/bepasty/views.py:105
msgid "Password added."
@@ -900,10 +935,13 @@ msgid ""
"machines on local network. It is also incompatible with sharing Internet "
"connection from {box_name}."
msgstr ""
+"Зараз на {box_name} BIND використовується лише для обробки DNS-запитів для "
+"інших машин у локальній мережі. Це також не сумісно зі спільним доступом до "
+"Інтернету з {box_name}."
#: plinth/modules/bind/__init__.py:78
msgid "BIND"
-msgstr ""
+msgstr "BIND"
#: plinth/modules/bind/__init__.py:79
msgid "Domain Name Server"
@@ -911,13 +949,13 @@ msgstr "Сервер доменних імен"
#: plinth/modules/bind/forms.py:20
msgid "Forwarders"
-msgstr ""
+msgstr "Перенаправлювачі"
#: plinth/modules/bind/forms.py:21
msgid ""
"A list DNS servers, separated by space, to which requests will be forwarded"
msgstr ""
-"Список серверів DNS, розділених пробілами, до яких направлятимуться запити"
+"Список серверів DNS, що розділені пробілами, до яких направлятимуться запити"
#: plinth/modules/bind/forms.py:25
msgid "Enable DNSSEC"
@@ -925,11 +963,11 @@ msgstr "Увімкнути DNSSEC"
#: plinth/modules/bind/forms.py:26
msgid "Enable Domain Name System Security Extensions"
-msgstr ""
+msgstr "Дозволити розширення безпеки системи доменних назв"
#: plinth/modules/bind/templates/bind.html:11
msgid "Serving Domains"
-msgstr ""
+msgstr "Обслуговування доменів"
#: plinth/modules/bind/templates/bind.html:17
#: plinth/modules/ikiwiki/forms.py:12
@@ -938,7 +976,7 @@ msgstr ""
#: plinth/modules/samba/templates/samba.html:65
#: plinth/modules/storage/templates/storage.html:26
msgid "Type"
-msgstr ""
+msgstr "Тип"
#: plinth/modules/bind/templates/bind.html:18
msgid "Domain Names"
@@ -946,16 +984,16 @@ msgstr "Назви доменів"
#: plinth/modules/bind/templates/bind.html:19
msgid "Serving"
-msgstr ""
+msgstr "Обслуговування"
#: plinth/modules/bind/templates/bind.html:20
msgid "IP addresses"
-msgstr ""
+msgstr "IP-адреси"
#: plinth/modules/bind/templates/bind.html:37
#: plinth/modules/bind/templates/bind.html:39
msgid "Refresh IP address and domains"
-msgstr ""
+msgstr "Оновити IP-адреси і домени"
#: plinth/modules/bind/views.py:71 plinth/modules/coturn/views.py:39
#: plinth/modules/deluge/views.py:42 plinth/modules/dynamicdns/views.py:169
@@ -963,7 +1001,7 @@ msgstr ""
#: plinth/modules/matrixsynapse/views.py:124 plinth/modules/mumble/views.py:28
#: plinth/modules/pagekite/forms.py:78 plinth/modules/quassel/views.py:29
#: plinth/modules/shadowsocks/views.py:59
-#: plinth/modules/transmission/views.py:47
+#: plinth/modules/transmission/views.py:47 plinth/modules/wordpress/views.py:36
msgid "Configuration updated"
msgstr "Конфігурацію оновлено"
@@ -974,6 +1012,9 @@ msgid ""
"store your e-books on your {box_name}, read them online or from any of your "
"devices."
msgstr ""
+"сервер calibre надає мережевий доступ до вашої колекції електронних книжок. "
+"Ви можете зберігати електронні книжки на своєму {box_name}, читаючи їх "
+"онлайн або з будь-якого вашого пристрою."
#: plinth/modules/calibre/__init__.py:34
msgid ""
@@ -983,12 +1024,22 @@ msgid ""
"an online web reader. It remembers your last read location, bookmarks, and "
"highlighted text. Content distribution using OPDS is currently not supported."
msgstr ""
+"Ви можете організовувати свої електронні книжки, витягувати та змінювати "
+"їхні метадані і виконувати розширений пошук. calibre може імпортувати, "
+"експортувати або перетворювати між широким вибором форматів, щоб робити "
+"електронні книжки готовими для читання на будь-якому пристрої. Він також "
+"надає мережевий веб-читач, що запамʼятовує ваше останнє місце читання, "
+"закладки і виділений текст. Поширення вмісту через OPDS поки що не "
+"підтримується."
#: plinth/modules/calibre/__init__.py:40
msgid ""
"Only users belonging to calibre group will be able to access the "
"app. All users with access can use all the libraries."
msgstr ""
+"Лише користувачі, що належать до групи calibre можуть мати доступ "
+"до застосунку. Усі користувачі з доступом можуть користуватися всіма "
+"бібліотеками."
#: plinth/modules/calibre/__init__.py:58
msgid "Use calibre e-book libraries"
@@ -1080,6 +1131,10 @@ msgid ""
"advanced functions that are not usually required. A web based terminal for "
"console operations is also available."
msgstr ""
+"Cockpit – це серверний керівник, що полегшує адміністрування серверів GNU/"
+"Linux через вебоглядач. На {box_name} доступне керування для багатьох "
+"розширених функцій, які зазвичай не потрібні. Також доступний вебтермінал "
+"для консольних операцій."
#: plinth/modules/cockpit/__init__.py:38
msgid ""
@@ -1088,6 +1143,10 @@ msgid ""
"firewall ports and advanced networking such as bonding, bridging and VLAN "
"management."
msgstr ""
+"Cockpit можна використовувати для виконання розширених операцій зі сховищем, "
+"як-от поділ дисків чи керування RAID. Його також можна використовувати для "
+"відкривання власних портів фаєрволу та розширеної роботи з мережею, як-от "
+"роботи зі звʼязком, мостами та керуванням VLAN."
#: plinth/modules/cockpit/__init__.py:43
#, python-brace-format
@@ -1095,12 +1154,16 @@ msgid ""
"It can be accessed by any user on {box_name} "
"belonging to the admin group."
msgstr ""
+"До нього може мати доступ будь-який користувач "
+"на {box_name}, що належить до групи admin."
#: plinth/modules/cockpit/__init__.py:47
msgid ""
"Cockpit requires that you access it through a domain name. It will not work "
"when accessed using an IP address as part of the URL."
msgstr ""
+"Cockpit вимагає доступу до нього через доменне імʼя. Він не працюватиме, "
+"якщо звертатися до нього використовуючи IP-адресу як частину URL."
#: plinth/modules/cockpit/__init__.py:64 plinth/modules/cockpit/manifest.py:9
#: plinth/modules/performance/manifest.py:33
@@ -1117,13 +1180,15 @@ msgstr "Доступ"
#: plinth/modules/cockpit/templates/cockpit.html:14
msgid "Cockpit will only work when accessed using the following URLs."
-msgstr ""
+msgstr "Cockpit працюватиме лише, якщо входити через наступні URL-адреси."
#: plinth/modules/config/__init__.py:27
msgid ""
"Here you can set some general configuration options like hostname, domain "
"name, webserver home page etc."
msgstr ""
+"Тут ви можете задати деякі загальні параметри налаштування, як назва "
+"компʼютера, назва домена, домашня сторінка вебсервера тощо."
#: plinth/modules/config/__init__.py:58
msgid "General Configuration"
@@ -1156,7 +1221,7 @@ msgstr "Вебсайт {user}"
#: plinth/modules/config/forms.py:42
msgid "Apache Default"
-msgstr ""
+msgstr "Типова Apache"
#: plinth/modules/config/forms.py:43
msgid "FreedomBox Service (Plinth)"
@@ -1174,10 +1239,15 @@ msgid ""
"and have as interior characters only alphabets, digits and hyphens. Total "
"length must be 63 characters or less."
msgstr ""
+"Назва компʼютера – це локальна назва, за якою інші пристрої в локальній "
+"мережі можуть звертатися до вашого {box_name}. Вона має починатися і "
+"закінчуватися символами алфавіту або цифрами, і містити всередині лише "
+"символи алфавіту, цифри чи дефіси. Загальна довжина не повинна перевищувати "
+"63 знаки."
#: plinth/modules/config/forms.py:64
msgid "Invalid hostname"
-msgstr ""
+msgstr "Некоректна назва компʼютера"
#: plinth/modules/config/forms.py:70
#, python-brace-format
@@ -1192,7 +1262,7 @@ msgstr ""
#: plinth/modules/config/forms.py:85
msgid "Webserver Home Page"
-msgstr ""
+msgstr "Домашня сторінка вебсервера"
#: plinth/modules/config/forms.py:87
#, python-brace-format
@@ -1206,11 +1276,12 @@ msgstr ""
#: plinth/modules/config/forms.py:98
msgid "Show advanced apps and features"
-msgstr ""
+msgstr "Показувати розширені застосунки і можливості"
#: plinth/modules/config/forms.py:100
msgid "Show apps and features that require more technical knowledge."
msgstr ""
+"Показувати застосунки і можливості, що вимагають більш технічних знань."
#: plinth/modules/config/views.py:46
#, python-brace-format
@@ -1219,16 +1290,16 @@ msgstr "Помилка параметру hostname: {exception}"
#: plinth/modules/config/views.py:49
msgid "Hostname set"
-msgstr ""
+msgstr "Назву компʼютера задано"
#: plinth/modules/config/views.py:58
#, python-brace-format
msgid "Error setting domain name: {exception}"
-msgstr ""
+msgstr "Помилка встановлення доменної назви: {exception}"
#: plinth/modules/config/views.py:61
msgid "Domain name set"
-msgstr ""
+msgstr "Доменну назву задано"
#: plinth/modules/config/views.py:69
#, python-brace-format
@@ -1237,7 +1308,7 @@ msgstr "Помилка налаштування домашньої сторін
#: plinth/modules/config/views.py:72
msgid "Webserver home page set"
-msgstr ""
+msgstr "Домашню сторінку вебсервера задано"
#: plinth/modules/config/views.py:80
#, python-brace-format
@@ -1246,11 +1317,11 @@ msgstr "Помилка зміни розширеного режиму: {exceptio
#: plinth/modules/config/views.py:85
msgid "Showing advanced apps and features"
-msgstr ""
+msgstr "Відображення розширених застосунків і можливостей"
#: plinth/modules/config/views.py:88
msgid "Hiding advanced apps and features"
-msgstr ""
+msgstr "Приховування розширених застосунків і можливостей"
#: plinth/modules/coturn/__init__.py:36
msgid ""
@@ -1259,6 +1330,10 @@ msgid ""
"other communication servers can use it to establish a call between parties "
"who are otherwise unable connect to each other."
msgstr ""
+"Coturn — це сервер для полегшення звукових/відео дзвінків та конференцій, "
+"надаючи реалізацію протоколів TURN та STUN. WebRTC, SIP та інші сервери "
+"комунікації можуть використовувати його для встановлення дзвінків між "
+"частинами, які по-іншому не можливо звʼязати між собою."
#: plinth/modules/coturn/__init__.py:41
#, python-brace-format
@@ -1267,23 +1342,26 @@ msgid ""
"\"{ms_url}\">Matrix Synapse or ejabberd need to "
"be configured with the details provided here."
msgstr ""
+"Він не призначений для використання користувачами напряму. Деякі сервери, як-"
+"от Matrix Synapse або ejabberd"
+"a> потрібно налаштовувати з урахуванням деталей наведених тут."
#: plinth/modules/coturn/__init__.py:62
msgid "Coturn"
-msgstr ""
+msgstr "Coturn"
#: plinth/modules/coturn/__init__.py:63
msgid "VoIP Helper"
-msgstr ""
+msgstr "Помічник VoIP"
#: plinth/modules/coturn/forms.py:22
msgid "Invalid list of STUN/TURN Server URIs"
-msgstr ""
+msgstr "Невірний список URI серверів STUN/TURN"
#: plinth/modules/coturn/forms.py:30 plinth/modules/mumble/forms.py:21
#: plinth/modules/quassel/forms.py:22
msgid "TLS domain"
-msgstr ""
+msgstr "TLS-домен"
#: plinth/modules/coturn/forms.py:32 plinth/modules/mumble/forms.py:23
#: plinth/modules/quassel/forms.py:24
@@ -1297,16 +1375,20 @@ msgstr ""
#: plinth/modules/coturn/templates/coturn.html:15
msgid "Use the following URLs to configure your communication server:"
msgstr ""
+"Використовуйте наступні URL-адреси для налаштування власних серверів "
+"спілкування:"
#: plinth/modules/coturn/templates/coturn.html:24
msgid "Use the following shared authentication secret:"
-msgstr ""
+msgstr "Використовуйте наступний спільний секрет автентифікації:"
#: plinth/modules/datetime/__init__.py:26
msgid ""
"Network time server is a program that maintains the system time in "
"synchronization with servers on the Internet."
msgstr ""
+"Сервер мережевого часу — це програма, що підтримує системний час "
+"синхронізовано зі серверами в Інтернеті."
#: plinth/modules/datetime/__init__.py:70
msgid "Date & Time"
@@ -1325,6 +1407,8 @@ msgid ""
"Set your time zone to get accurate timestamps. This will set the system-wide "
"time zone."
msgstr ""
+"Вкажіть часовий пояс, щоб отримувати точні часові штампи. Це задасть часову "
+"зону для всієї системи."
#: plinth/modules/datetime/forms.py:30
msgid "-- no time zone set --"
@@ -1333,11 +1417,11 @@ msgstr "-- часовий пояс не обрано --"
#: plinth/modules/datetime/views.py:45
#, python-brace-format
msgid "Error setting time zone: {exception}"
-msgstr ""
+msgstr "Помилка задавання часового поясу: {exception}"
#: plinth/modules/datetime/views.py:48
msgid "Time zone set"
-msgstr ""
+msgstr "Часовий пояс задано"
#: plinth/modules/deluge/__init__.py:27
msgid "Deluge is a BitTorrent client that features a Web UI."
@@ -1348,11 +1432,13 @@ msgid ""
"The default password is 'deluge', but you should log in and change it "
"immediately after enabling this service."
msgstr ""
+"Типовий пароль – 'deluge', але ви можете ввійти і змінити його відразу після "
+"ввімкнення цього сервісу."
#: plinth/modules/deluge/__init__.py:47
#: plinth/modules/transmission/__init__.py:50
msgid "Download files using BitTorrent applications"
-msgstr ""
+msgstr "Завантаження файлів через застосунки BitTorrent"
#: plinth/modules/deluge/__init__.py:51 plinth/modules/deluge/manifest.py:6
msgid "Deluge"
@@ -1365,7 +1451,7 @@ msgstr "Вебклієнт BitTorrent"
#: plinth/modules/deluge/forms.py:20 plinth/modules/transmission/forms.py:21
msgid "Download directory"
-msgstr ""
+msgstr "Каталог завантаження"
#: plinth/modules/deluge/manifest.py:7
msgid "Bittorrent client written in Python/PyGTK"
@@ -1376,6 +1462,8 @@ msgid ""
"The system diagnostic test will run a number of checks on your system to "
"confirm that applications and services are working as expected."
msgstr ""
+"Тест діагностики системи запускає певну кількість перевірок, щоб упевнитися, "
+"що застосунки і сервіси працюють так, як очікується."
#: plinth/modules/diagnostics/__init__.py:54
#: plinth/modules/diagnostics/__init__.py:238
@@ -1383,41 +1471,45 @@ msgid "Diagnostics"
msgstr "Діагностика"
#: plinth/modules/diagnostics/__init__.py:98
+#: plinth/modules/email_server/templates/email_server.html:29
msgid "passed"
-msgstr ""
+msgstr "пройдено"
#: plinth/modules/diagnostics/__init__.py:99
+#: plinth/modules/email_server/templates/email_server.html:27
#: plinth/modules/networks/views.py:49
msgid "failed"
-msgstr ""
+msgstr "невдало"
#: plinth/modules/diagnostics/__init__.py:100
+#: plinth/modules/email_server/templates/email_server.html:25
msgid "error"
-msgstr ""
+msgstr "помилка"
#: plinth/modules/diagnostics/__init__.py:101
msgid "warning"
-msgstr ""
+msgstr "попередження"
#. Translators: This is the unit of computer storage Mebibyte similar to
#. Megabyte.
#: plinth/modules/diagnostics/__init__.py:204
msgid "MiB"
-msgstr ""
+msgstr "МіБ"
#. Translators: This is the unit of computer storage Gibibyte similar to
#. Gigabyte.
#: plinth/modules/diagnostics/__init__.py:209
msgid "GiB"
-msgstr ""
+msgstr "ҐіБ"
#: plinth/modules/diagnostics/__init__.py:216
msgid "You should disable some apps to reduce memory usage."
msgstr ""
+"Ви повинні вимкнути деякі застосунки, щоб зменшити використання памʼяті."
#: plinth/modules/diagnostics/__init__.py:221
msgid "You should not install any new apps on this system."
-msgstr ""
+msgstr "Не слід встановлювати нових застосунків на цій системі."
#: plinth/modules/diagnostics/__init__.py:233
#, no-python-format, python-brace-format
@@ -1425,19 +1517,21 @@ msgid ""
"System is low on memory: {percent_used}% used, {memory_available} "
"{memory_available_unit} free. {advice_message}"
msgstr ""
+"У системі бракує памʼяті: {percent_used}% використано, {memory_available} "
+"{memory_available_unit} вільно. {advice_message}"
#: plinth/modules/diagnostics/__init__.py:235
msgid "Low Memory"
-msgstr ""
+msgstr "Мало памʼяті"
#: plinth/modules/diagnostics/templates/diagnostics.html:17
#: plinth/modules/diagnostics/templates/diagnostics_button.html:11
msgid "Run Diagnostics"
-msgstr ""
+msgstr "Запустити діагностику"
#: plinth/modules/diagnostics/templates/diagnostics.html:20
msgid "Diagnostics test is currently running"
-msgstr ""
+msgstr "Тест діагностики вже запущено"
#: plinth/modules/diagnostics/templates/diagnostics.html:33
msgid "Results"
@@ -1450,6 +1544,9 @@ msgid ""
" App: %(app_name)s\n"
" "
msgstr ""
+"\n"
+" Застосунок: %(app_name)s\n"
+" "
#: plinth/modules/diagnostics/templates/diagnostics_app.html:10
msgid "Diagnostic Results"
@@ -1474,13 +1571,15 @@ msgstr "Результат"
#: plinth/modules/diagnostics/views.py:57
msgid "Diagnostic Test"
-msgstr ""
+msgstr "Тест діагностики"
#: plinth/modules/diaspora/__init__.py:45
msgid ""
"diaspora* is a decentralized social network where you can store and control "
"your own data."
msgstr ""
+"diaspora* це децентралізована соціальна мережа, де ви можете зберігати і "
+"контролювати свої дані."
#: plinth/modules/diaspora/__init__.py:68
#: plinth/modules/diaspora/manifest.py:23
@@ -1489,21 +1588,23 @@ msgstr "diaspora*"
#: plinth/modules/diaspora/__init__.py:69
msgid "Federated Social Network"
-msgstr ""
+msgstr "Федеративна соціальна мережа"
#: plinth/modules/diaspora/forms.py:13
msgid "Enable new user registrations"
-msgstr ""
+msgstr "Дозволити реєстрацію нових користувачів"
#: plinth/modules/diaspora/manifest.py:11
msgid "dandelion*"
-msgstr ""
+msgstr "dandelion*"
#: plinth/modules/diaspora/manifest.py:13
msgid ""
"It is an unofficial webview based client for the community-run, distributed "
"social network diaspora*"
msgstr ""
+"Це неофіційний вебперегляд на основі клієнта для community-run, розподіленої "
+"соціальної мережі diaspora*"
#: plinth/modules/diaspora/templates/diaspora-post-setup.html:16
#, python-format
@@ -1520,7 +1621,7 @@ msgstr ""
#: plinth/modules/snapshot/templates/snapshot.html:12
#: plinth/templates/app.html:46
msgid "Configuration"
-msgstr ""
+msgstr "Налаштування"
#: plinth/modules/diaspora/templates/diaspora-pre-setup.html:43
#: plinth/modules/dynamicdns/templates/dynamicdns_configure.html:25
@@ -1534,11 +1635,11 @@ msgstr "Оновити налаштування"
#: plinth/modules/diaspora/views.py:74
msgid "User registrations enabled"
-msgstr ""
+msgstr "Реєстрацію користувачів дозволено"
#: plinth/modules/diaspora/views.py:78
msgid "User registrations disabled"
-msgstr ""
+msgstr "Реєстрацію користувачів вимкнено"
#: plinth/modules/dynamicdns/__init__.py:29
#, python-brace-format
@@ -1561,7 +1662,7 @@ msgstr ""
#: plinth/modules/dynamicdns/__init__.py:56
msgid "Dynamic DNS Client"
-msgstr ""
+msgstr "Клієнт динамічної DNS"
#: plinth/modules/dynamicdns/__init__.py:66
msgid "Dynamic Domain Name"
@@ -1591,6 +1692,8 @@ msgstr ""
#, python-brace-format
msgid "The public domain name you want to use to reach your {box_name}."
msgstr ""
+"Публічна назва домену, яку ви бажаєте використовувати для входу на ваш "
+"{box_name}."
#: plinth/modules/dynamicdns/forms.py:45
msgid "Use this option if your provider uses self signed certificates."
@@ -1617,35 +1720,35 @@ msgstr ""
#: plinth/modules/dynamicdns/forms.py:62
msgid "The username that was used when the account was created."
-msgstr ""
+msgstr "Імʼя користувача, яке використовуватиметься після створення обліківки."
#: plinth/modules/dynamicdns/forms.py:65
msgid "GnuDIP"
-msgstr ""
+msgstr "GnuDIP"
#: plinth/modules/dynamicdns/forms.py:68
msgid "other update URL"
-msgstr ""
+msgstr "інша URL оновлення"
#: plinth/modules/dynamicdns/forms.py:70
msgid "Enable Dynamic DNS"
-msgstr ""
+msgstr "Дозволити динамічну DNS"
#: plinth/modules/dynamicdns/forms.py:73
msgid "Service Type"
-msgstr ""
+msgstr "Тип сервісу"
#: plinth/modules/dynamicdns/forms.py:78
msgid "GnuDIP Server Address"
-msgstr ""
+msgstr "Адреса сервера GnuDIP"
#: plinth/modules/dynamicdns/forms.py:81
msgid "Invalid server name"
-msgstr ""
+msgstr "Невірна назва сервера"
#: plinth/modules/dynamicdns/forms.py:84
msgid "Update URL"
-msgstr ""
+msgstr "Оновити URL"
#: plinth/modules/dynamicdns/forms.py:89
msgid "Accept all SSL certificates"
@@ -1653,7 +1756,7 @@ msgstr "Приймати всі SSL-сертифікати"
#: plinth/modules/dynamicdns/forms.py:93
msgid "Use HTTP basic authentication"
-msgstr ""
+msgstr "Використовувати основну автентифікацію HTTP"
#: plinth/modules/dynamicdns/forms.py:103 plinth/modules/networks/forms.py:212
#: plinth/modules/users/forms.py:69
@@ -1666,27 +1769,27 @@ msgstr "Показати пароль"
#: plinth/modules/dynamicdns/forms.py:114
msgid "URL to look up public IP"
-msgstr ""
+msgstr "URL для пошуку публічної IP"
#: plinth/modules/dynamicdns/forms.py:119
msgid "Use IPv6 instead of IPv4"
-msgstr ""
+msgstr "Використовувати IPv6 замість IPv4"
#: plinth/modules/dynamicdns/forms.py:142
msgid "Please provide an update URL or a GnuDIP server address"
-msgstr ""
+msgstr "Надайте URL оновлення або адресу сервера GnuDIP"
#: plinth/modules/dynamicdns/forms.py:147
msgid "Please provide a GnuDIP username"
-msgstr ""
+msgstr "Надайте імʼя користувача GnuDIP"
#: plinth/modules/dynamicdns/forms.py:151
msgid "Please provide a GnuDIP domain name"
-msgstr ""
+msgstr "Надайте назву домену GnuDIP"
#: plinth/modules/dynamicdns/forms.py:156
msgid "Please provide a password"
-msgstr ""
+msgstr "Надайте пароль"
#: plinth/modules/dynamicdns/templates/dynamicdns.html:12
msgid ""
@@ -1713,7 +1816,7 @@ msgstr ""
#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:9
msgid "NAT type"
-msgstr ""
+msgstr "Тип NAT"
#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:13
msgid ""
@@ -1723,7 +1826,7 @@ msgstr ""
#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:19
msgid "Direct connection to the Internet."
-msgstr ""
+msgstr "Пряме підʼєднання до Інтернету."
#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:21
#, python-format
@@ -1736,7 +1839,7 @@ msgstr ""
#: plinth/modules/dynamicdns/templates/dynamicdns_status.html:33
msgid "Last update"
-msgstr ""
+msgstr "Востаннє оновлено"
#: plinth/modules/dynamicdns/views.py:26 plinth/modules/help/__init__.py:53
#: plinth/templates/help-menu.html:46 plinth/templates/help-menu.html:47
@@ -1759,17 +1862,19 @@ msgstr "Стан"
#: plinth/modules/dynamicdns/views.py:62
msgid "Configure Dynamic DNS"
-msgstr ""
+msgstr "Налаштувати динамічну DNS"
#: plinth/modules/dynamicdns/views.py:86
msgid "Dynamic DNS Status"
-msgstr ""
+msgstr "Стан динамічної DNS"
#: plinth/modules/ejabberd/__init__.py:38
msgid ""
"XMPP is an open and standardized communication protocol. Here you can run "
"and configure your XMPP server, called ejabberd."
msgstr ""
+"XMPP – це відкритий і стандартизований протокол спілкування. Тут ви можете "
+"запустити і налаштувати свій XMPP-сервер ejabberd."
#: plinth/modules/ejabberd/__init__.py:41
#, python-brace-format
@@ -1786,10 +1891,13 @@ msgid ""
"ejabberd needs a STUN/TURN server for audio/video calls. Install the Coturn app or configure an external server."
msgstr ""
+"ejabberd потребує сервера STUN/TURN для звукових/відео дзвінків. Встановіть "
+"застосунок Coturn або налаштуйте зовнішній "
+"сервер."
#: plinth/modules/ejabberd/__init__.py:70
msgid "ejabberd"
-msgstr ""
+msgstr "ejabberd"
#: plinth/modules/ejabberd/__init__.py:71
#: plinth/modules/matrixsynapse/__init__.py:77
@@ -1798,7 +1906,7 @@ msgstr "Сервер чату"
#: plinth/modules/ejabberd/forms.py:18
msgid "Enable Message Archive Management"
-msgstr ""
+msgstr "Дозволити керування архівом повідомлень"
#: plinth/modules/ejabberd/forms.py:20
#, python-brace-format
@@ -1823,41 +1931,44 @@ msgstr ""
#: plinth/modules/ejabberd/forms.py:36 plinth/modules/matrixsynapse/forms.py:31
msgid "STUN/TURN Server URIs"
-msgstr ""
+msgstr "URI сервера STUN/TURN"
#: plinth/modules/ejabberd/forms.py:38 plinth/modules/matrixsynapse/forms.py:33
msgid "List of public URIs of the STUN/TURN server, one on each line."
-msgstr ""
+msgstr "Перелік публічних URI для сервера STUN/TURN, по одному на кожен рядок."
#: plinth/modules/ejabberd/forms.py:42 plinth/modules/matrixsynapse/forms.py:37
msgid "Shared Authentication Secret"
-msgstr ""
+msgstr "Спільний секрет автентифікації"
#: plinth/modules/ejabberd/forms.py:43 plinth/modules/matrixsynapse/forms.py:38
msgid "Shared secret used to compute passwords for the TURN server."
msgstr ""
+"Спільний секрет використовується для обрахунку паролів для сервера TURN."
#: plinth/modules/ejabberd/manifest.py:10
msgid "Conversations"
-msgstr ""
+msgstr "Розмови"
#: plinth/modules/ejabberd/manifest.py:24
msgid "Xabber"
-msgstr ""
+msgstr "Xabber"
#: plinth/modules/ejabberd/manifest.py:26
msgid ""
"Open source Jabber (XMPP) client with multi-account support and clean and "
"simple interface. "
msgstr ""
+"Клієнт Jabber (XMPP) з відкритим кодом, підтримкою декількох обліківок та "
+"чистим і простим інтерфейсом. "
#: plinth/modules/ejabberd/manifest.py:41
msgid "Yaxim"
-msgstr ""
+msgstr "Yaxim"
#: plinth/modules/ejabberd/manifest.py:55
msgid "ChatSecure"
-msgstr ""
+msgstr "ChatSecure"
#: plinth/modules/ejabberd/manifest.py:57
msgid ""
@@ -1869,11 +1980,11 @@ msgstr ""
#: plinth/modules/ejabberd/manifest.py:72
msgid "Dino"
-msgstr ""
+msgstr "Dino"
#: plinth/modules/ejabberd/manifest.py:84
msgid "Gajim"
-msgstr ""
+msgstr "Gajim"
#: plinth/modules/ejabberd/templates/ejabberd.html:19
#, python-format
@@ -1883,6 +1994,282 @@ msgid ""
"Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Chat Server"
+msgid "Email Server"
+msgstr "Сервер чату"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+#, fuzzy
+#| msgid "Directory does not exist."
+msgid "User does not exist"
+msgstr "Каталог не існує."
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "Нема сертифікату"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "Домен"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr "Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+#, fuzzy
+#| msgid "Mozilla Thunderbird"
+msgid "Thunderbird"
+msgstr "Mozilla Thunderbird"
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "Вимкнені"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "кабель підʼєднано"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete User"
+msgid "Delete selected"
+msgstr "Видалити користувача"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Створити нову резервну копію"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr "Додати"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Оновити"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Тип сервісу"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Path is not a directory."
+msgid "You do not have a home directory."
+msgstr "Шлях не є каталогом."
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Updated media directory"
+msgid "Create home directory"
+msgstr "Оновлено каталог медія"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Let's Encrypt"
+msgid "Use Let's Encrypt"
+msgstr "Let's Encrypt"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Доменну назву задано"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "Стан сертифікату"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Private key of this machine"
+msgid "Private key path"
+msgstr "Приватний ключ машини"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "Домівка"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "Безпека"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "Домени"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "Дозволити пошкодження"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "Вимкнені"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -1898,17 +2285,17 @@ msgstr ""
#: plinth/modules/firewall/components.py:134
#, python-brace-format
msgid "Port {name} ({details}) available for internal networks"
-msgstr ""
+msgstr "Порт {name} ({details}) доступний для внутрішніх мереж"
#: plinth/modules/firewall/components.py:142
#, python-brace-format
msgid "Port {name} ({details}) available for external networks"
-msgstr ""
+msgstr "Порт {name} ({details}) доступний для зовнішніх мереж"
#: plinth/modules/firewall/components.py:147
#, python-brace-format
msgid "Port {name} ({details}) unavailable for external networks"
-msgstr ""
+msgstr "Порт {name} ({details}) недоступний для зовнішніх мереж"
#: plinth/modules/firewall/templates/firewall.html:21
#, python-format
@@ -1927,7 +2314,7 @@ msgstr "Сервіс/Порт"
#: plinth/modules/letsencrypt/templates/letsencrypt.html:69
#: plinth/modules/snapshot/forms.py:23 plinth/modules/snapshot/forms.py:28
msgid "Enabled"
-msgstr ""
+msgstr "Дозволено"
#: plinth/modules/firewall/templates/firewall.html:57
#: plinth/modules/letsencrypt/templates/letsencrypt.html:71
@@ -1938,19 +2325,19 @@ msgstr "Вимкнені"
#: plinth/modules/firewall/templates/firewall.html:72
msgid "Permitted"
-msgstr ""
+msgstr "Дозволяється"
#: plinth/modules/firewall/templates/firewall.html:75
msgid "Permitted (internal only)"
-msgstr ""
+msgstr "Дозволяється (лише внутрішні)"
#: plinth/modules/firewall/templates/firewall.html:78
msgid "Permitted (external only)"
-msgstr ""
+msgstr "Дозволяється (лише зовнішні)"
#: plinth/modules/firewall/templates/firewall.html:81
msgid "Blocked"
-msgstr ""
+msgstr "Блоковано"
#: plinth/modules/firewall/templates/firewall.html:94
msgid ""
@@ -1963,7 +2350,7 @@ msgstr ""
#: plinth/modules/networks/templates/networks_configuration.html:22
#: plinth/modules/storage/templates/storage.html:93
msgid "Advanced"
-msgstr ""
+msgstr "Розширені"
#: plinth/modules/firewall/templates/firewall.html:104
msgid ""
@@ -2029,14 +2416,16 @@ msgid ""
"To learn more on how to use Git visit Git tutorial ."
msgstr ""
+"Щоб дізнатися більше як користуватися Git відвідайте навчання Git ."
#: plinth/modules/gitweb/__init__.py:52
msgid "Read-write access to Git repositories"
-msgstr ""
+msgstr "Доступ читання-запису до репозиторіїв Git"
#: plinth/modules/gitweb/__init__.py:57 plinth/modules/gitweb/manifest.py:10
msgid "Gitweb"
-msgstr ""
+msgstr "Gitweb"
#: plinth/modules/gitweb/__init__.py:58
msgid "Simple Git Hosting"
@@ -2053,14 +2442,15 @@ msgstr "Некоректна назва репозиторію."
#: plinth/modules/gitweb/forms.py:77
msgid "Name of a new repository or URL to import an existing repository."
msgstr ""
+"Назва нового репозиторію або URL для імпортування зовнішнього репозиторію."
#: plinth/modules/gitweb/forms.py:83
msgid "Description of the repository"
-msgstr ""
+msgstr "Опис репозиторію"
#: plinth/modules/gitweb/forms.py:84 plinth/modules/gitweb/forms.py:88
msgid "Optional, for displaying on Gitweb."
-msgstr ""
+msgstr "Необовʼязково, для відображення на Gitweb."
#: plinth/modules/gitweb/forms.py:86
msgid "Repository's owner name"
@@ -2072,11 +2462,11 @@ msgstr "Приватний репозиторій"
#: plinth/modules/gitweb/forms.py:92
msgid "Allow only authorized users to access this repository."
-msgstr ""
+msgstr "Дозволити доступ до цього репозиторію лише авторизованим користувачам."
#: plinth/modules/gitweb/forms.py:113 plinth/modules/gitweb/forms.py:155
msgid "A repository with this name already exists."
-msgstr ""
+msgstr "Репозиторій із цією назвою вже існує."
#: plinth/modules/gitweb/forms.py:126
msgid "Name of the repository"
@@ -2084,11 +2474,11 @@ msgstr "Назва репозиторію"
#: plinth/modules/gitweb/forms.py:130
msgid "An alpha-numeric string that uniquely identifies a repository."
-msgstr ""
+msgstr "Рядок із букв і чисел, що унікально ідентифікує репозиторій."
#: plinth/modules/gitweb/forms.py:134
msgid "Default branch"
-msgstr ""
+msgstr "Типова гілка"
#: plinth/modules/gitweb/forms.py:135
msgid "Gitweb displays this as a default branch."
@@ -2573,7 +2963,7 @@ msgstr ""
#: plinth/modules/infinoted/__init__.py:26
msgid "infinoted is a server for Gobby, a collaborative text editor."
-msgstr ""
+msgstr "infinoted — це сервер для Gobby, колективного редактора тексту."
#: plinth/modules/infinoted/__init__.py:28
#, python-brace-format
@@ -2862,6 +3252,8 @@ msgid ""
"Anyone with a link to this wiki can read it. Only users that are logged in "
"can make changes to the content."
msgstr ""
+"Будь-хто, хто має посилання на цю вікі може читати її. Лише користувачі, що "
+"ввійшли можуть робити зміни вмісту."
#: plinth/modules/mediawiki/__init__.py:59
#: plinth/modules/mediawiki/manifest.py:6
@@ -3174,10 +3566,6 @@ msgstr "Скасувати"
msgid "Service"
msgstr "Сервіс"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "Домени"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3855,11 +4243,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "Це зʼєднання неактивне."
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "Безпека"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4277,10 +4660,8 @@ msgid "shared connection service failed to start"
msgstr ""
#: plinth/modules/networks/views.py:76
-#, fuzzy
-#| msgid "Configuration updated"
msgid "shared connection service failed"
-msgstr "Конфігурацію оновлено"
+msgstr "помилка сервісу спільного зʼєднання"
#: plinth/modules/networks/views.py:78
msgid "device was removed"
@@ -4847,6 +5228,11 @@ msgid ""
"application is needed. Radicale can be accessed by any user with a "
"{box_name} login."
msgstr ""
+"Radicale – це сервер для CalDAV та CardDAV. Він дозволяє синхронізувати і "
+"поширювати дані планування і контактів. Для використання Radicale необхідні "
+"підтримувані клієнтські застосунки . До Radicale може мати доступ будь-"
+"який користувач з імʼям входу для {box_name}."
#: plinth/modules/radicale/__init__.py:34
msgid ""
@@ -4867,6 +5253,7 @@ msgstr "Календар й Адресна книга"
#: plinth/modules/radicale/forms.py:14
msgid "Only the owner of a calendar/addressbook can view or make changes."
msgstr ""
+"Лише власник календаря/адресної книжки може переглядати або робити зміни."
#: plinth/modules/radicale/forms.py:18
#, python-brace-format
@@ -4874,6 +5261,8 @@ msgid ""
"Any user with a {box_name} login can view any calendar/addressbook, but only "
"the owner can make changes."
msgstr ""
+"Будь-який користувач з імʼям входу {box_name} може переглядати будь-який "
+"календар/адресну книжку, але лише власник може робити зміни."
#: plinth/modules/radicale/forms.py:23
#, python-brace-format
@@ -4881,6 +5270,8 @@ msgid ""
"Any user with a {box_name} login can view or make changes to any calendar/"
"addressbook."
msgstr ""
+"Будь-який користувач з імʼям входу {box_name} може переглядати або робити "
+"зміни в будь-якому календарі/адресній книжці."
#: plinth/modules/radicale/forms.py:30
msgid "Access rights"
@@ -4925,7 +5316,7 @@ msgstr ""
#: plinth/modules/radicale/views.py:35
msgid "Access rights configuration updated"
-msgstr "Конфіґурацію прав доступу оновлено"
+msgstr "Оновлено налаштування прав доступу"
#: plinth/modules/roundcube/__init__.py:23
msgid ""
@@ -4958,11 +5349,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr "Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr "Клієнт ел. пошти"
@@ -5235,8 +5621,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5264,30 +5650,26 @@ msgid "Current Vulnerabilities"
msgstr "Поточні вразливості"
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr "Минулі вразливості"
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr "Так"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr "Ні"
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr "Не запущено"
@@ -6049,10 +6431,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr "Додати"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6229,7 +6607,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "Налаштування незмінено"
@@ -6310,13 +6688,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Оновити"
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr "Оновлення"
@@ -6528,6 +6899,10 @@ msgid ""
"relevant to them in the home page. However, only users of the admin "
"group may alter apps or system settings."
msgstr ""
+"Будь-який користувач може входити через вебінтерфейс {box_name}, щоб "
+"подивитися список доречних застосунків на домашній сторінці. Однак, лише "
+"користувачі з групи admin можуть змінювати застосунки або системні "
+"налаштування."
#: plinth/modules/users/__init__.py:64
msgid "Users and Groups"
@@ -7076,6 +7451,63 @@ msgstr "Видалити зʼєднання до сервера"
msgid "Server deleted."
msgstr "Сервер видалено."
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "Адреса"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Вікі та блоґ"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "public access"
+msgid "Public access"
+msgstr "публічний доступ"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7212,10 +7644,6 @@ msgstr "Функціональність ядра та вебінтерфейс
msgid " Home"
msgstr " Домівка"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "Домівка"
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr " Застосунки"
@@ -7501,6 +7929,9 @@ msgstr "%(percentage)s%% завершено"
msgid "Gujarati"
msgstr "Gujarati"
+#~ msgid "Past Vulnerabilities"
+#~ msgstr "Минулі вразливості"
+
#, fuzzy
#~| msgid "Domain Name"
#~ msgid "Disk Name"
diff --git a/plinth/locale/vi/LC_MESSAGES/django.po b/plinth/locale/vi/LC_MESSAGES/django.po
index cc6baee82..6604035c7 100644
--- a/plinth/locale/vi/LC_MESSAGES/django.po
+++ b/plinth/locale/vi/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-07-28 08:34+0000\n"
"Last-Translator: bruh \n"
"Language-Team: Vietnamese Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Domain Name Server"
+msgid "Email Server"
+msgstr "Máy chủ tên miền"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "Accept all SSL certificates"
+msgid "Has a TLS certificate"
+msgstr "Chấp nhận tất cả chứng chỉ SSL"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "TLS domain"
+msgid "domain"
+msgstr "Miền TLS"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "Enable scheduled backups"
+msgid "Enable selected"
+msgstr "Bật sao lưu được lên lịch"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete files"
+msgid "Delete selected"
+msgstr "Xoá tệp"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "Tạo một bản sao lưu mới"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "Cập nhật"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "Loại dịch vụ"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Create home directory"
+msgstr "Tạo kho"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "Đã đặt tên miền"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3318,10 +3579,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3989,11 +4246,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5050,11 +5302,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5320,8 +5567,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5349,30 +5596,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -6129,10 +6372,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6309,7 +6548,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6381,13 +6620,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "Cập nhật"
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -7135,6 +7367,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7271,10 +7554,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/locale/zh_Hans/LC_MESSAGES/django.po b/plinth/locale/zh_Hans/LC_MESSAGES/django.po
index 407ab7c08..1df171d2e 100644
--- a/plinth/locale/zh_Hans/LC_MESSAGES/django.po
+++ b/plinth/locale/zh_Hans/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Plinth\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-06-12 02:32+0000\n"
"Last-Translator: 池边树下 \n"
"Language-Team: Chinese (Simplified) 。你可以在系统的配置 中设置你"
"的域名。"
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Web Server"
+msgid "Email Server"
+msgstr "Web 服务器"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+#, fuzzy
+#| msgid "Available Domains"
+msgid "RoundCube availability"
+msgstr "可用域名"
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+#, fuzzy
+#| msgid "No certificate"
+msgid "Has a TLS certificate"
+msgstr "没有证书"
+
+#: plinth/modules/email_server/forms.py:7
+#, fuzzy
+#| msgid "Domain"
+msgid "domain"
+msgstr "域名"
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+#, fuzzy
+#| msgid "Enable Roundcube"
+msgid "Roundcube"
+msgstr "启用 Roundcube"
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disable selected"
+msgstr "已禁用"
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+#, fuzzy
+#| msgid "cable is connected"
+msgid "Enable selected"
+msgstr "线缆已连接"
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete Snapshot"
+msgid "Delete selected"
+msgstr "删除快照"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "创建新备份"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+#, fuzzy
+#| msgid "Address"
+msgid "Add"
+msgstr "地址"
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr "更新"
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Type"
+msgid "Service Alert"
+msgstr "服务类型"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+#, fuzzy
+#| msgid "Download directory"
+msgid "You do not have a home directory."
+msgstr "下载目录"
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Create home directory"
+msgstr "创建存储库"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+#, fuzzy
+#| msgid "Current status:"
+msgid "Keep current settings"
+msgstr "当前状态:"
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+#, fuzzy
+#| msgid "Certificates (Let's Encrypt)"
+msgid "Use Let's Encrypt"
+msgstr "证书(Let's Encrypt)"
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+#, fuzzy
+#| msgid "Domain name set"
+msgid "Common name"
+msgstr "域名集"
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+#, fuzzy
+#| msgid "Certificate Status"
+msgid "Certificate path"
+msgstr "证书状态"
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+#, fuzzy
+#| msgid "Create User"
+msgid "Private key path"
+msgstr "创建用户"
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr "主页"
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr "安全"
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr "域名"
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+#, fuzzy
+#| msgid "Enable damage"
+msgid "Enabled aliases"
+msgstr "启用伤害"
+
+#: plinth/modules/email_server/views.py:182
+#, fuzzy
+#| msgid "Disabled"
+msgid "Disabled aliases"
+msgstr "已禁用"
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3528,10 +3811,6 @@ msgstr "取消"
msgid "Service"
msgstr "服务"
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr "域名"
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -4230,11 +4509,6 @@ msgstr "IPv6"
msgid "This connection is not active."
msgstr "此连接未处于激活状态。"
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr "安全"
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -5482,13 +5756,6 @@ msgstr ""
"href=\"https://www.google.com/settings/security/lesssecureapps\">https://www."
"google.com/settings/security/lesssecureapps)中启用“安全性较低的应用”。"
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-#, fuzzy
-#| msgid "Enable Roundcube"
-msgid "Roundcube"
-msgstr "启用 Roundcube"
-
#: plinth/modules/roundcube/__init__.py:56
#, fuzzy
#| msgid ""
@@ -5798,8 +6065,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5829,10 +6096,6 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid ""
#| "Block Sandbox \n"
@@ -5842,7 +6105,7 @@ msgstr ""
"方块沙盒\n"
"(Minetest)"
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
#, fuzzy
#| msgid ""
#| "Block Sandbox \n"
@@ -5852,21 +6115,21 @@ msgstr ""
"方块沙盒\n"
"(Minetest)"
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
#, fuzzy
#| msgid "yes"
msgid "Yes"
msgstr "是的"
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
#, fuzzy
#| msgid "is not running"
msgid "Not running"
@@ -6733,12 +6996,6 @@ msgstr "名称"
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-#, fuzzy
-#| msgid "Address"
-msgid "Add"
-msgstr "地址"
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6939,7 +7196,7 @@ msgstr "SOCKS"
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr "Tor SOCKS 端口是你 %(box_name)s 上的 TCP 端口 9050 。"
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr "设置未改变"
@@ -7032,13 +7289,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr "更新"
-
#: plinth/modules/upgrades/__init__.py:122
#, fuzzy
#| msgid "Update"
@@ -7932,6 +8182,63 @@ msgstr "删除连接"
msgid "Server deleted."
msgstr "{name} 已删除。"
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+#, fuzzy
+#| msgid "Address"
+msgid "WordPress"
+msgstr "地址"
+
+#: plinth/modules/wordpress/__init__.py:70
+#, fuzzy
+#| msgid "Wiki and Blog"
+msgid "Website and Blog"
+msgstr "Wiki 和博客"
+
+#: plinth/modules/wordpress/forms.py:14
+#, fuzzy
+#| msgid "Publish Key"
+msgid "Public access"
+msgstr "发布密钥"
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -8089,10 +8396,6 @@ msgstr "Plinth %(box_name)s 管理界面"
msgid " Home"
msgstr "主页"
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr "主页"
-
#: plinth/templates/base.html:115
#, fuzzy
#| msgid "Apps"
@@ -8928,9 +9231,6 @@ msgstr "古吉拉特语"
#~ msgid "Web Server over Secure Socket Layer"
#~ msgstr "Web 服务器安全套接字层"
-#~ msgid "Current status:"
-#~ msgstr "当前状态:"
-
#~ msgid "Delete Wiki or Blog"
#~ msgstr "删除 wiki 页面或博客"
diff --git a/plinth/locale/zh_Hant/LC_MESSAGES/django.po b/plinth/locale/zh_Hant/LC_MESSAGES/django.po
index 9d505e81e..55f1f3ffc 100644
--- a/plinth/locale/zh_Hant/LC_MESSAGES/django.po
+++ b/plinth/locale/zh_Hant/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-08-16 18:38-0400\n"
+"POT-Creation-Date: 2021-08-30 19:29-0400\n"
"PO-Revision-Date: 2021-04-27 13:32+0000\n"
"Last-Translator: James Pan \n"
"Language-Team: Chinese (Traditional) Configure page."
msgstr ""
+#: plinth/modules/email_server/__init__.py:49
+#, fuzzy
+#| msgid "Domain Name Server"
+msgid "Email Server"
+msgstr "域名服務器 DNS"
+
+#: plinth/modules/email_server/__init__.py:81
+msgid "Powered by Postfix, Dovecot & Rspamd"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/__init__.py:66
+#: plinth/modules/email_server/aliases/__init__.py:73
+msgid "The alias was taken"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:13
+msgid "Must be at least 2 characters long"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:15
+msgid "Contains illegal characters"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:17
+msgid "Must start and end with a-z or 0-9"
+msgstr ""
+
+#: plinth/modules/email_server/aliases/models.py:19
+msgid "Cannot be a number"
+msgstr ""
+
+#: plinth/modules/email_server/audit/home.py:23
+#: plinth/modules/email_server/audit/home.py:32
+msgid "User does not exist"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:66
+msgid "Postfix-Dovecot SASL integration"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:67
+msgid "Postfix alias maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/ldap.py:68
+msgid "Postfix local recipient maps"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:31
+msgid "RoundCube availability"
+msgstr ""
+
+#: plinth/modules/email_server/audit/rcube.py:32
+msgid "RoundCube configured for FreedomBox email"
+msgstr ""
+
+#: plinth/modules/email_server/audit/spam.py:86
+msgid "Inbound and outbound mail filters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:80
+msgid "Postfix TLS parameters"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:81
+msgid "Postfix uses a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/audit/tls.py:90
+msgid "Has a TLS certificate"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:7
+msgid "domain"
+msgstr ""
+
+#: plinth/modules/email_server/forms.py:14
+msgid "New alias (without @domain)"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:6
+#: plinth/modules/roundcube/__init__.py:55
+#: plinth/modules/roundcube/manifest.py:6
+msgid "Roundcube"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:12
+msgid "Thunderbird"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:27
+msgid "K-9 Mail"
+msgstr ""
+
+#: plinth/modules/email_server/manifest.py:40
+msgid "FairEmail"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:12
+msgid "You have no email aliases."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:21
+msgid "Disable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:24
+msgid "Enable selected"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_alias.html:27
+#, fuzzy
+#| msgid "Delete files"
+msgid "Delete selected"
+msgstr "刪除檔案"
+
+#: plinth/modules/email_server/templates/email_alias.html:31
+#, fuzzy
+#| msgid "Create a new backup"
+msgid "Create a new email alias"
+msgstr "建立一個新的備份檔"
+
+#: plinth/modules/email_server/templates/email_alias.html:38
+#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
+msgid "Add"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:19
+msgid "New value"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_domains.html:31
+#: plinth/modules/email_server/templates/email_security.html:23
+#: plinth/modules/upgrades/__init__.py:77
+#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
+#: plinth/modules/upgrades/templates/update-firstboot.html:11
+#: plinth/templates/setup.html:62
+msgid "Update"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_form_base.html:12
+msgid "There was a problem with your request. Please try again."
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:13
+msgid "Postfix TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_security.html:18
+msgid "Dovecot TLS"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:14
+msgid "Visit Rspamd administration interface"
+msgstr ""
+
+#: plinth/modules/email_server/templates/email_server.html:18
+#, fuzzy
+#| msgid "Service Discovery"
+msgid "Service Alert"
+msgstr "發現服務"
+
+#: plinth/modules/email_server/templates/email_server.html:38
+msgid "Repair"
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:15
+msgid "You do not have a home directory."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:17
+msgid "Create one to begin receiving emails."
+msgstr ""
+
+#: plinth/modules/email_server/templates/my_mail.html:22
+#, fuzzy
+#| msgid "Create Repository"
+msgid "Create home directory"
+msgstr "建立儲存庫"
+
+#: plinth/modules/email_server/templates/tls_form.html:10
+msgid "Keep current settings"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:19
+msgid "Use Let's Encrypt"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:24
+msgid "Common name"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:38
+msgid "Use custom values"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:43
+msgid "Certificate path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:53
+msgid "Private key path"
+msgstr ""
+
+#: plinth/modules/email_server/templates/tls_form.html:67
+msgid "Use system default"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:24
+#: plinth/modules/email_server/views.py:32 plinth/templates/base.html:110
+msgid "Home"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:25
+msgid "My Mail"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:26
+#: plinth/modules/email_server/views.py:33
+msgid "My Aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:27
+#: plinth/modules/networks/templates/connection_show.html:259
+#: plinth/modules/security/__init__.py:45
+msgid "Security"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:28
+#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
+msgid "Domains"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:104
+#, python-brace-format
+msgid "Internal error in {0}"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:107
+msgid "Check syslog for more information"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:181
+msgid "Enabled aliases"
+msgstr ""
+
+#: plinth/modules/email_server/views.py:182
+msgid "Disabled aliases"
+msgstr ""
+
#: plinth/modules/firewall/__init__.py:33
#, python-brace-format
msgid ""
@@ -3144,10 +3397,6 @@ msgstr ""
msgid "Service"
msgstr ""
-#: plinth/modules/monkeysphere/templates/monkeysphere.html:37
-msgid "Domains"
-msgstr ""
-
#: plinth/modules/monkeysphere/templates/monkeysphere.html:38
#: plinth/modules/monkeysphere/templates/monkeysphere_details.html:17
msgid "OpenPGP Fingerprint"
@@ -3815,11 +4064,6 @@ msgstr ""
msgid "This connection is not active."
msgstr ""
-#: plinth/modules/networks/templates/connection_show.html:259
-#: plinth/modules/security/__init__.py:46
-msgid "Security"
-msgstr ""
-
#: plinth/modules/networks/templates/connection_show.html:264
#: plinth/modules/networks/templates/connection_show.html:284
#: plinth/modules/networks/templates/connection_show.html:303
@@ -4876,11 +5120,6 @@ msgid ""
"a>)."
msgstr ""
-#: plinth/modules/roundcube/__init__.py:55
-#: plinth/modules/roundcube/manifest.py:6
-msgid "Roundcube"
-msgstr ""
-
#: plinth/modules/roundcube/__init__.py:56
msgid "Email Client"
msgstr ""
@@ -5146,8 +5385,8 @@ msgstr ""
#: plinth/modules/security/templates/security_report.html:19
msgid ""
-"The following table lists the current reported number, and historical count, "
-"of security vulnerabilities for each installed app. More information on the "
+"The following table lists the current reported number of security "
+"vulnerabilities for each installed app. More information on the "
"vulnerabilities can be found on the Debian Security Bug Tracker ."
msgstr ""
@@ -5175,30 +5414,26 @@ msgid "Current Vulnerabilities"
msgstr ""
#: plinth/modules/security/templates/security_report.html:47
-msgid "Past Vulnerabilities"
-msgstr ""
-
-#: plinth/modules/security/templates/security_report.html:48
msgid "Sandboxed"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:49
+#: plinth/modules/security/templates/security_report.html:48
msgid "Sandbox Coverage"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:60
+#: plinth/modules/security/templates/security_report.html:58
msgid "N/A"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:62
+#: plinth/modules/security/templates/security_report.html:60
msgid "Yes"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:64
+#: plinth/modules/security/templates/security_report.html:62
msgid "No"
msgstr ""
-#: plinth/modules/security/templates/security_report.html:71
+#: plinth/modules/security/templates/security_report.html:69
msgid "Not running"
msgstr ""
@@ -5952,10 +6187,6 @@ msgstr ""
msgid "Add new introducer"
msgstr ""
-#: plinth/modules/tahoe/templates/tahoe-post-setup.html:59
-msgid "Add"
-msgstr ""
-
#: plinth/modules/tahoe/templates/tahoe-post-setup.html:64
msgid "Connected introducers"
msgstr ""
@@ -6132,7 +6363,7 @@ msgstr ""
msgid "A Tor SOCKS port is available on your %(box_name)s on TCP port 9050."
msgstr ""
-#: plinth/modules/tor/views.py:137 plinth/views.py:216
+#: plinth/modules/tor/views.py:137 plinth/views.py:218
msgid "Setting unchanged"
msgstr ""
@@ -6204,13 +6435,6 @@ msgid ""
"automatically at 02:00 causing all apps to be unavailable briefly."
msgstr ""
-#: plinth/modules/upgrades/__init__.py:77
-#: plinth/modules/upgrades/templates/update-firstboot-progress.html:11
-#: plinth/modules/upgrades/templates/update-firstboot.html:11
-#: plinth/templates/setup.html:62
-msgid "Update"
-msgstr ""
-
#: plinth/modules/upgrades/__init__.py:122
msgid "Updates"
msgstr ""
@@ -6958,6 +7182,57 @@ msgstr ""
msgid "Server deleted."
msgstr ""
+#: plinth/modules/wordpress/__init__.py:36
+msgid ""
+"WordPress is a popular way to create and manage websites and blogs. Content "
+"can be managed using a visual interface. Layout and functionality of the web "
+"pages can be customized. Appearance can be chosen using themes. "
+"Administration interface and produced web pages are suitable for mobile "
+"devices."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:42
+#, python-brace-format
+msgid ""
+"You need to run WordPress setup by visiting the app before making the site "
+"publicly available below. Setup must be run when accessing {box_name} with "
+"the correct domain name. Enable permalinks in administrator interface for "
+"better URLs to your pages and posts."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:47
+msgid ""
+"WordPress has its own user accounts. First administrator account is created "
+"during setup. Bookmark the admin page "
+"to reach administration interface in the future."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:51
+msgid ""
+"After a major version upgrade, you need to manually run database upgrade "
+"from administrator interface. Additional plugins or themes may be installed "
+"and upgraded at your own risk."
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:69
+#: plinth/modules/wordpress/manifest.py:6
+msgid "WordPress"
+msgstr ""
+
+#: plinth/modules/wordpress/__init__.py:70
+msgid "Website and Blog"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:14
+msgid "Public access"
+msgstr ""
+
+#: plinth/modules/wordpress/forms.py:15
+msgid ""
+"Allow all visitors. Disabling allows only administrators to view the "
+"WordPress site or blog. Enable only after performing initial WordPress setup."
+msgstr ""
+
#: plinth/modules/zoph/__init__.py:33
#, python-brace-format
msgid ""
@@ -7094,10 +7369,6 @@ msgstr ""
msgid " Home"
msgstr ""
-#: plinth/templates/base.html:110
-msgid "Home"
-msgstr ""
-
#: plinth/templates/base.html:115
msgid " Apps"
msgstr ""
diff --git a/plinth/log.py b/plinth/log.py
index 0d0a316c4..ddf984321 100644
--- a/plinth/log.py
+++ b/plinth/log.py
@@ -5,6 +5,8 @@ Setup logging for the application.
import importlib
import logging
+import logging.handlers
+import sys
import warnings
import cherrypy
@@ -127,3 +129,24 @@ def get_configuration():
configuration['root']['handlers'].append('journal')
return configuration
+
+
+def pipe_to_syslog(level=logging.INFO, to_stderr=True):
+ """Make the root logger write to syslog and stderr. Useful in actions"""
+ logger = logging.getLogger()
+ logger.setLevel(level)
+
+ fmt = '/freedombox/%(name)s[%(process)d]: %(levelname)s: %(message)s'
+ formatter = logging.Formatter(fmt=fmt)
+
+ # Using syslog in Python: https://stackoverflow.com/q/3968669
+ syslog_handler = logging.handlers.SysLogHandler(address='/dev/log')
+ syslog_handler.setFormatter(formatter)
+ logger.addHandler(syslog_handler)
+
+ if to_stderr == 'tty' and sys.stdin.isatty():
+ to_stderr = True
+ if to_stderr is True:
+ stderr_handler = logging.StreamHandler()
+ stderr_handler.setFormatter(formatter)
+ logger.addHandler(stderr_handler)
diff --git a/plinth/modules/diagnostics/urls.py b/plinth/modules/diagnostics/urls.py
index 2c6c692ba..63b843670 100644
--- a/plinth/modules/diagnostics/urls.py
+++ b/plinth/modules/diagnostics/urls.py
@@ -9,6 +9,6 @@ from . import views
urlpatterns = [
url(r'^sys/diagnostics/$', views.index, name='index'),
- url(r'^sys/diagnostics/(?P[1-9a-z\-]+)/$', views.diagnose_app,
+ url(r'^sys/diagnostics/(?P[1-9a-z\-_]+)/$', views.diagnose_app,
name='app'),
]
diff --git a/plinth/modules/email_server/__init__.py b/plinth/modules/email_server/__init__.py
new file mode 100644
index 000000000..305a10bf3
--- /dev/null
+++ b/plinth/modules/email_server/__init__.py
@@ -0,0 +1,155 @@
+"""FreedomBox email server app"""
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import logging
+
+from django.urls import reverse_lazy
+from django.utils.translation import ugettext_lazy as _
+
+import plinth.app
+import plinth.daemon
+import plinth.frontpage
+import plinth.menu
+from plinth import actions
+from plinth.modules.apache.components import Webserver
+from plinth.modules.config import get_domainname
+from plinth.modules.firewall.components import Firewall
+from plinth.modules.letsencrypt.components import LetsEncrypt
+
+from . import audit
+from . import manifest
+
+version = 1
+
+packages = [
+ 'postfix-ldap', 'dovecot-pop3d', 'dovecot-imapd',
+ 'dovecot-ldap', 'dovecot-lmtpd', 'dovecot-managesieved',
+]
+
+packages_bloat = ['rspamd']
+
+clamav_packages = ['clamav', 'clamav-daemon']
+clamav_daemons = ['clamav-daemon', 'clamav-freshclam']
+
+port_info = {
+ 'postfix': ('smtp', 25, 'smtps', 465, 'smtp-submission', 587),
+ 'dovecot': ('imaps', 993, 'pop3s', 995),
+}
+
+managed_services = ['postfix', 'dovecot', 'rspamd']
+
+managed_packages = packages + packages_bloat
+app = None
+logger = logging.getLogger(__name__)
+
+
+class EmailServerApp(plinth.app.App):
+ """FreedomBox email server app"""
+ app_id = 'email_server'
+ app_name = _('Email Server')
+
+ def __init__(self):
+ """The app's constructor"""
+ super().__init__()
+ self._add_ui_components()
+ self._add_daemons()
+ self._add_firewall_ports()
+
+ # /rspamd location
+ webserver = Webserver('webserver-email', # unique id
+ 'email-server-freedombox', # config file name
+ urls=['https://{host}/rspamd'])
+ self.add(webserver)
+
+ # Let's Encrypt event hook
+ default_domain = get_domainname()
+ domains = [default_domain] if default_domain else []
+ letsencrypt = LetsEncrypt(
+ 'letsencrypt-email-server', domains=domains,
+ daemons=['postfix', 'dovecot'], should_copy_certificates=False,
+ managing_app='email_server')
+ self.add(letsencrypt)
+
+ if not domains:
+ logger.warning('Could not fetch the FreedomBox domain name!')
+
+ def _add_ui_components(self):
+ info = plinth.app.Info(
+ app_id=self.app_id,
+ version=version,
+ name=self.app_name,
+ short_description=_('Powered by Postfix, Dovecot & Rspamd'),
+ manual_page='EmailServer',
+ clients=manifest.clients,
+ donation_url='https://freedomboxfoundation.org/donate/'
+ )
+ self.add(info)
+
+ menu_item = plinth.menu.Menu(
+ 'menu_' + self.app_id, # unique id
+ info.name, # app display name
+ info.short_description, # app description
+ 'roundcube', # icon name in `static/theme/icons/`
+ 'email_server:index', # view name
+ parent_url_name='apps'
+ )
+ self.add(menu_item)
+
+ shortcut = plinth.frontpage.Shortcut(
+ 'shortcut_' + self.app_id,
+ name=info.name,
+ short_description=info.short_description,
+ icon='roundcube',
+ url=reverse_lazy('email_server:my_mail'),
+ clients=manifest.clients,
+ login_required=True
+ )
+ self.add(shortcut)
+
+ def _add_daemons(self):
+ for srvname in managed_services:
+ # Construct `listen_ports` parameter for the daemon
+ mixed = port_info.get(srvname, ())
+ port_numbers = [v for v in mixed if isinstance(v, int)]
+ listen = []
+ for n in port_numbers:
+ listen.append((n, 'tcp4'))
+ listen.append((n, 'tcp6'))
+ # Add daemon
+ daemon = plinth.daemon.Daemon('daemon-' + srvname, srvname,
+ listen_ports=listen)
+ self.add(daemon)
+
+ def _add_firewall_ports(self):
+ all_port_names = []
+ for mixed in port_info.values():
+ port_names = [v for v in mixed if isinstance(v, str)]
+ all_port_names.extend(port_names)
+
+ firewall = Firewall('firewall-email', self.app_name,
+ ports=all_port_names, is_external=True)
+ self.add(firewall)
+
+ def diagnose(self):
+ """Run diagnostics and return the results"""
+ results = super().diagnose()
+ results.extend([r.summarize() for r in audit.domain.get()])
+ results.extend([r.summarize() for r in audit.ldap.get()])
+ results.extend([r.summarize() for r in audit.spam.get()])
+ results.extend([r.summarize() for r in audit.tls.get()])
+ results.extend([r.summarize() for r in audit.rcube.get()])
+ return results
+
+
+def setup(helper, old_version=None):
+ """Installs and configures module"""
+ helper.install(packages)
+ helper.install(packages_bloat, skip_recommends=True)
+ helper.call('post', audit.ldap.repair)
+ helper.call('post', audit.spam.repair)
+ helper.call('post', audit.tls.repair)
+ helper.call('post', audit.rcube.repair)
+ for srvname in managed_services:
+ actions.superuser_run('service', ['reload', srvname])
+ # Final step: expose service daemons to public internet
+ helper.call('post', app.enable)
diff --git a/plinth/modules/email_server/aliases/__init__.py b/plinth/modules/email_server/aliases/__init__.py
new file mode 100644
index 000000000..e4811bb17
--- /dev/null
+++ b/plinth/modules/email_server/aliases/__init__.py
@@ -0,0 +1,151 @@
+"""Manages email aliases"""
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import contextlib
+import dbm
+import logging
+import os
+import pwd
+import sqlite3
+
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+
+from plinth.modules.email_server import lock
+from . import models
+
+map_db_schema_script = """
+PRAGMA journal_mode=WAL;
+BEGIN;
+CREATE TABLE IF NOT EXISTS Alias (
+ email_name TEXT NOT NULL,
+ uid_number INTEGER NOT NULL,
+ status INTEGER NOT NULL,
+ PRIMARY KEY (email_name)
+);
+COMMIT;
+"""
+
+mailsrv_dir = '/var/lib/plinth/mailsrv'
+hash_db_path = mailsrv_dir + '/aliases'
+sqlite_db_path = mailsrv_dir + '/aliases.sqlite3'
+
+alias_sync_mutex = lock.Mutex('alias-sync')
+logger = logging.getLogger(__name__)
+
+
+@contextlib.contextmanager
+def db_cursor():
+ # Turn ON autocommit mode
+ con = sqlite3.connect(sqlite_db_path, isolation_level=None)
+ con.row_factory = sqlite3.Row
+ try:
+ cur = con.cursor()
+ yield cur
+ finally:
+ con.close()
+
+
+def get(uid_number):
+ s = 'SELECT * FROM Alias WHERE uid_number=?'
+ with db_cursor() as cur:
+ rows = cur.execute(s, (uid_number,))
+ result = [models.Alias(**r) for r in rows]
+ return result
+
+
+def put(uid_number, email_name):
+ s = """INSERT INTO Alias(email_name, uid_number, status)
+ SELECT ?,?,? WHERE NOT EXISTS(
+ SELECT 1 FROM Alias WHERE email_name=?
+ )"""
+ email_name = models.sanitize_email_name(email_name)
+ # email_name cannot be the same as a user name
+ try:
+ pwd.getpwnam(email_name)
+ raise ValidationError(_('The alias was taken'))
+ except KeyError:
+ pass
+
+ with db_cursor() as cur:
+ cur.execute(s, (email_name, uid_number, 1, email_name))
+ if cur.rowcount == 0:
+ raise ValidationError(_('The alias was taken'))
+
+ schedule_hash_update()
+
+
+def delete(uid_number, alias_list):
+ s = 'DELETE FROM Alias WHERE uid_number=? AND email_name=?'
+ for i in range(len(alias_list)):
+ alias_list[i] = models.sanitize_email_name(alias_list[i])
+
+ parameter_seq = ((uid_number, a) for a in alias_list)
+ with db_cursor() as cur:
+ cur.execute('BEGIN')
+ cur.executemany(s, parameter_seq)
+ cur.execute('COMMIT')
+ schedule_hash_update()
+
+
+def set_enabled(uid_number, alias_list):
+ return _set_status(uid_number, alias_list, 1)
+
+
+def set_disabled(uid_number, alias_list):
+ return _set_status(uid_number, alias_list, 0)
+
+
+def _set_status(uid_number, alias_list, status):
+ s = 'UPDATE Alias SET status=? WHERE uid_number=? AND email_name=?'
+ for i in range(len(alias_list)):
+ alias_list[i] = models.sanitize_email_name(alias_list[i])
+
+ parameter_seq = ((status, uid_number, a) for a in alias_list)
+ with db_cursor() as cur:
+ cur.execute('BEGIN')
+ cur.executemany(s, parameter_seq)
+ cur.execute('COMMIT')
+ schedule_hash_update()
+
+
+def schedule_hash_update():
+ tmp = hash_db_path + '-tmp'
+ with alias_sync_mutex.lock_all(), db_cursor() as cur:
+ all_aliases = cur.execute('SELECT * FROM Alias')
+
+ # Delete the temp file if exists
+ if os.path.exists(tmp):
+ os.unlink(tmp)
+
+ # Create new alias db at temp path
+ db = dbm.ndbm.open(tmp, 'c')
+ try:
+ for row in all_aliases:
+ alias = models.Alias(**row)
+ key = alias.email_name.encode('ascii') + b'\0'
+ if alias.enabled:
+ value = str(alias.uid_number).encode('ascii')
+ value += b'@localhost\0'
+ else:
+ value = b'/dev/null\0'
+ db[key] = value
+ finally:
+ db.close()
+
+ # Atomically replace old alias db, rename(2)
+ os.rename(tmp + '.db', hash_db_path + '.db')
+
+
+def first_setup():
+ _create_db_schema_if_not_exists()
+ schedule_hash_update()
+
+
+def _create_db_schema_if_not_exists():
+ # Create folder
+ if not os.path.isdir(mailsrv_dir):
+ os.mkdir(mailsrv_dir)
+ # Create schema if not exists
+ with db_cursor() as cur:
+ cur.executescript(map_db_schema_script)
diff --git a/plinth/modules/email_server/aliases/models.py b/plinth/modules/email_server/aliases/models.py
new file mode 100644
index 000000000..ac3277fe1
--- /dev/null
+++ b/plinth/modules/email_server/aliases/models.py
@@ -0,0 +1,31 @@
+import re
+from dataclasses import dataclass, field, InitVar
+
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+
+email_positive_pattern = re.compile('^[a-zA-Z0-9-_\\.]+')
+
+
+def sanitize_email_name(email_name):
+ email_name = email_name.strip().lower()
+ if len(email_name) < 2:
+ raise ValidationError(_('Must be at least 2 characters long'))
+ if not re.match('^[a-z0-9-_\\.]+$', email_name):
+ raise ValidationError(_('Contains illegal characters'))
+ if not re.match('^[a-z0-9].*[a-z0-9]$', email_name):
+ raise ValidationError(_('Must start and end with a-z or 0-9'))
+ if re.match('^[0-9]+$', email_name):
+ raise ValidationError(_('Cannot be a number'))
+ return email_name
+
+
+@dataclass
+class Alias:
+ uid_number: int
+ email_name: str
+ enabled: bool = field(init=False)
+ status: InitVar[int]
+
+ def __post_init__(self, status):
+ self.enabled = (status != 0)
diff --git a/plinth/modules/email_server/audit/__init__.py b/plinth/modules/email_server/audit/__init__.py
new file mode 100644
index 000000000..c3e03b90e
--- /dev/null
+++ b/plinth/modules/email_server/audit/__init__.py
@@ -0,0 +1,14 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""
+Provides diagnosis and repair of email server configuration issues
+"""
+
+from . import domain
+from . import home
+from . import ldap
+from . import models
+from . import rcube
+from . import spam
+from . import tls
+
+__all__ = ['domain', 'home', 'ldap', 'models', 'rcube', 'spam', 'tls']
diff --git a/plinth/modules/email_server/audit/domain.py b/plinth/modules/email_server/audit/domain.py
new file mode 100644
index 000000000..77f1951cb
--- /dev/null
+++ b/plinth/modules/email_server/audit/domain.py
@@ -0,0 +1,186 @@
+"""Configure email domains"""
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import io
+import json
+import os
+import re
+import select
+import subprocess
+import sys
+import time
+
+from types import SimpleNamespace
+
+from django.core.exceptions import ValidationError
+from plinth.errors import ActionError
+from plinth.actions import superuser_run
+
+from . import models
+from plinth.modules.email_server import interproc, postconf
+
+EXIT_VALIDATION = 40
+
+managed_keys = ['_mailname', 'mydomain', 'myhostname', 'mydestination']
+
+
+class ClientError(RuntimeError):
+ pass
+
+
+def get():
+ # Stub
+ return [models.Diagnosis('Email domains')]
+
+
+def repair():
+ # Stub
+ raise RuntimeError()
+
+
+def get_domain_config():
+ fields = []
+
+ # Special keys
+ mailname = SimpleNamespace(key='_mailname', name='/etc/mailname')
+ with open('/etc/mailname', 'r') as fd:
+ mailname.value = fd.readline().strip()
+ fields.append(mailname)
+
+ # Postconf keys
+ postconf_keys = [k for k in managed_keys if not k.startswith('_')]
+ result_dict = postconf.get_many(postconf_keys)
+ for key, value in result_dict.items():
+ field = SimpleNamespace(key=key, value=value, name='$' + key)
+ fields.append(field)
+
+ return fields
+
+
+def set_keys(raw):
+ # Serialize the keys we know
+ config_dict = {k: v for (k, v) in raw.items() if k in managed_keys}
+ if not config_dict:
+ raise ClientError('To update a key, specify a new value')
+
+ ipc = b'%s\n' % json.dumps(config_dict).encode('utf8')
+ if len(ipc) > 4096:
+ raise ClientError('POST data exceeds max line length')
+
+ try:
+ superuser_run('email_server', ['-i', 'domain', 'set_keys'], input=ipc)
+ except ActionError as e:
+ stdout = e.args[1]
+ if not stdout.startswith('ClientError:'):
+ raise RuntimeError('Action script failure') from e
+ else:
+ raise ValidationError(stdout) from e
+
+
+def action_set_keys():
+ try:
+ _action_set_keys()
+ except ClientError as e:
+ print('ClientError:', end=' ')
+ print(e.args[0])
+ sys.exit(EXIT_VALIDATION)
+
+
+def _action_set_keys():
+ line = _stdin_readline()
+ if not line.startswith('{') or not line.endswith('}\n'):
+ raise ClientError('Bad stdin data')
+
+ clean_dict = {}
+ # Input validation
+ for key, value in json.loads(line).items():
+ if key not in managed_keys:
+ raise ClientError('Key not allowed: %r' % key)
+ if not isinstance(value, str):
+ raise ClientError('Bad value type from key: %r' % key)
+ clean_function = globals()['clean_' + key.lstrip('_')]
+ clean_dict[key] = clean_function(value)
+
+ # Apply changes (postconf)
+ postconf_dict = dict(filter(lambda kv: not kv[0].startswith('_'),
+ clean_dict.items()))
+ postconf.set_many(postconf_dict)
+
+ # Apply changes (special)
+ for key, value in clean_dict.items():
+ if key.startswith('_'):
+ set_function = globals()['su_set' + key]
+ set_function(value)
+
+ # Important: reload postfix after acquiring lock
+ with postconf.mutex.lock_all():
+ # systemctl reload postfix
+ args = ['systemctl', 'reload', 'postfix']
+ completed = subprocess.run(args, capture_output=True)
+ if completed.returncode != 0:
+ interproc.log_subprocess(completed)
+ raise OSError('Could not reload postfix')
+
+
+def clean_mailname(mailname):
+ mailname = mailname.lower().strip()
+ if not re.match('^[a-z0-9-\\.]+$', mailname):
+ raise ClientError('Invalid character in host/domain/mail name')
+ # XXX: need more verification
+ return mailname
+
+
+def clean_mydomain(raw):
+ return clean_mailname(raw)
+
+
+def clean_myhostname(raw):
+ return clean_mailname(raw)
+
+
+def clean_mydestination(raw):
+ ascii_code = (ord(c) for c in raw)
+ valid = all(32 <= a <= 126 for a in ascii_code)
+ if not valid:
+ raise ClientError('Bad input for $mydestination')
+ else:
+ return raw
+
+
+def su_set_mailname(cleaned):
+ with interproc.atomically_rewrite('/etc/mailname') as fd:
+ fd.write(cleaned)
+ fd.write('\n')
+
+
+def _stdin_readline():
+ membuf = io.BytesIO()
+ bytes_saved = 0
+ fd = sys.stdin.buffer
+ time_started = time.monotonic()
+
+ # Reading stdin with timeout
+ # https://stackoverflow.com/a/21429655
+ os.set_blocking(fd.fileno(), False)
+
+ while bytes_saved < 4096:
+ rlist, wlist, xlist = select.select([fd], [], [], 1.0)
+ if fd in rlist:
+ data = os.read(fd.fileno(), 4096)
+ membuf.write(data)
+ bytes_saved += len(data)
+ if len(data) == 0 or b'\n' in data: # end of file or line
+ break
+ if time.monotonic() - time_started > 5:
+ raise TimeoutError()
+
+ # Read a line
+ membuf.seek(0)
+ line = membuf.readline()
+ if not line.endswith(b'\n'):
+ raise ClientError('Line was too long')
+
+ try:
+ return line.decode('utf8')
+ except ValueError as e:
+ raise ClientError('UTF-8 decode failed') from e
diff --git a/plinth/modules/email_server/audit/home.py b/plinth/modules/email_server/audit/home.py
new file mode 100644
index 000000000..6b09a327b
--- /dev/null
+++ b/plinth/modules/email_server/audit/home.py
@@ -0,0 +1,71 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import logging
+import os
+import pwd
+import subprocess
+
+from django.core.exceptions import ValidationError
+from django.utils.translation import ugettext_lazy as _
+from plinth.actions import superuser_run
+from plinth.errors import ActionError
+
+from plinth.modules.email_server import interproc
+
+logger = logging.getLogger(__name__)
+
+
+def exists_nam(username):
+ """Returns True if the user's home directory exists"""
+ try:
+ passwd = pwd.getpwnam(username)
+ except KeyError as e:
+ raise ValidationError(_('User does not exist')) from e
+ return _exists(passwd)
+
+
+def exists_uid(uid_number):
+ """Returns True if the user's home directory exists"""
+ try:
+ passwd = pwd.getpwuid(uid_number)
+ except KeyError as e:
+ raise ValidationError(_('User does not exist')) from e
+ return _exists(passwd)
+
+
+def _exists(passwd):
+ return os.path.exists(passwd.pw_dir)
+
+
+def put_nam(username):
+ """Create a home directory for the user (identified by username)"""
+ _put('nam', username)
+
+
+def put_uid(uid_number):
+ """Create a home directory for the user (identified by UID)"""
+ _put('uid', str(uid_number))
+
+
+def _put(arg_type, user_info):
+ try:
+ args = ['-i', 'home', 'mk', arg_type, user_info]
+ superuser_run('email_server', args)
+ except ActionError as e:
+ raise RuntimeError('Action script failure') from e
+
+
+def action_mk(arg_type, user_info):
+ if arg_type == 'nam':
+ passwd = pwd.getpwnam(user_info)
+ elif arg_type == 'uid':
+ passwd = pwd.getpwuid(int(user_info))
+ else:
+ raise ValueError('Unknown arg_type')
+
+ args = ['sudo', '-n', '--user=#' + str(passwd.pw_uid)]
+ args.extend(['/bin/sh', '-c', 'mkdir -p ~'])
+ completed = subprocess.run(args, capture_output=True)
+ if completed.returncode != 0:
+ interproc.log_subprocess(completed)
+ raise OSError('Could not create home directory')
diff --git a/plinth/modules/email_server/audit/ldap.py b/plinth/modules/email_server/audit/ldap.py
new file mode 100644
index 000000000..351ceccb7
--- /dev/null
+++ b/plinth/modules/email_server/audit/ldap.py
@@ -0,0 +1,202 @@
+"""Provides the diagnosis of SASL, mail submission, and user database lookup
+configurations"""
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import logging
+
+from django.utils.translation import ugettext_lazy as _
+from plinth import actions
+
+import plinth.modules.email_server.postconf as postconf
+import plinth.modules.email_server.aliases as aliases
+from . import models
+
+default_config = {
+ 'smtpd_sasl_auth_enable': 'yes',
+ 'smtpd_sasl_type': 'dovecot',
+ 'smtpd_sasl_path': 'private/auth',
+ 'mailbox_transport': 'lmtp:unix:private/dovecot-lmtp',
+ 'virtual_transport': 'lmtp:unix:private/dovecot-lmtp',
+
+ 'smtpd_relay_restrictions': ','.join([
+ 'permit_sasl_authenticated', 'defer_unauth_destination',
+ ])
+}
+
+submission_flags = postconf.ServiceFlags(
+ service='submission', type='inet', private='n', unpriv='-', chroot='y',
+ wakeup='-', maxproc='-', command_args='smtpd'
+)
+
+default_submission_options = {
+ 'syslog_name': 'postfix/submission',
+ 'smtpd_tls_security_level': 'encrypt',
+ 'smtpd_client_restrictions': 'permit_sasl_authenticated,reject',
+ 'smtpd_relay_restrictions': 'permit_sasl_authenticated,reject'
+}
+
+smtps_flags = postconf.ServiceFlags(
+ service='smtps', type='inet', private='n', unpriv='-', chroot='y',
+ wakeup='-', maxproc='-', command_args='smtpd'
+)
+
+default_smtps_options = {
+ 'syslog_name': 'postfix/smtps',
+ 'smtpd_tls_wrappermode': 'yes',
+ 'smtpd_sasl_auth_enable': 'yes',
+ 'smtpd_relay_restrictions': 'permit_sasl_authenticated,reject'
+}
+
+
+MAILSRV_DIR = '/var/lib/plinth/mailsrv'
+ETC_ALIASES = 'hash:/etc/aliases'
+BEFORE_ALIASES = 'ldap:/etc/postfix/freedombox-username-to-uid-number.cf'
+AFTER_ALIASES = 'hash:' + aliases.hash_db_path
+
+logger = logging.getLogger(__name__)
+
+
+def get():
+ """Compare current values with the default. Generate an audit report
+
+ Recommended endpoint name:
+ GET /audit/ldap
+ """
+ translation_table = [
+ (check_sasl, _('Postfix-Dovecot SASL integration')),
+ (check_alias_maps, _('Postfix alias maps')),
+ (check_local_recipient_maps, _('Postfix local recipient maps')),
+ ]
+ results = []
+ with postconf.mutex.lock_all():
+ for check, title in translation_table:
+ results.append(check(title))
+ return results
+
+
+def repair():
+ """Tries to repair SASL, mail submission, and user lookup settings
+
+ Recommended endpoint name:
+ POST /audit/ldap/repair
+ """
+ aliases.first_setup()
+ actions.superuser_run('email_server', ['-i', 'ldap', 'set_up'])
+
+
+def action_set_up():
+ action_set_sasl()
+ action_set_submission()
+ action_set_ulookup()
+
+
+def check_sasl(title=''):
+ diagnosis = models.MainCfDiagnosis(title)
+ diagnosis.compare(default_config, postconf.get_many_unsafe)
+ return diagnosis
+
+
+def fix_sasl(diagnosis):
+ diagnosis.apply_changes(postconf.set_many_unsafe)
+
+
+def action_set_sasl():
+ """Handles email_server -i ldap set_sasl"""
+ with postconf.mutex.lock_all():
+ fix_sasl(check_sasl())
+
+
+def action_set_submission():
+ """Handles email_server -i ldap set_submission"""
+ postconf.set_master_cf_options(service_flags=submission_flags,
+ options=default_submission_options)
+ postconf.set_master_cf_options(service_flags=smtps_flags,
+ options=default_smtps_options)
+
+
+def check_alias_maps(title=''):
+ """Check the ability to mail to usernames and user aliases"""
+ diagnosis = models.MainCfDiagnosis(title)
+
+ analysis = models.AliasMapsAnalysis()
+ analysis.parsed = postconf.parse_maps_by_key_unsafe('alias_maps')
+ analysis.isystem = list_find(analysis.parsed, ETC_ALIASES)
+ analysis.ibefore = list_find(analysis.parsed, BEFORE_ALIASES)
+ analysis.iafter = list_find(analysis.parsed, AFTER_ALIASES)
+
+ if analysis.ibefore == -1 or analysis.iafter == -1:
+ diagnosis.flag_once('alias_maps', user=analysis)
+ diagnosis.critical('Required maps not in list')
+ if analysis.ibefore > analysis.iafter:
+ diagnosis.flag_once('alias_maps', user=analysis)
+ diagnosis.critical('Insecure map order')
+
+ return diagnosis
+
+
+def fix_alias_maps(diagnosis):
+ diagnosis.repair('alias_maps', rearrange_alias_maps)
+ diagnosis.apply_changes(postconf.set_many_unsafe)
+
+
+def rearrange_alias_maps(analysis):
+ # Delete *all* references to BEFORE_ALIASES and AFTER_ALIASES
+ for i in range(len(analysis.parsed)):
+ if analysis.parsed[i] in (BEFORE_ALIASES, AFTER_ALIASES):
+ analysis.parsed[i] = ''
+ # Does hash:/etc/aliases exist in list?
+ if analysis.isystem >= 0:
+ # Put the maps around hash:/etc/aliases
+ val = '%s %s %s' % (BEFORE_ALIASES, ETC_ALIASES, AFTER_ALIASES)
+ analysis.parsed[analysis.isystem] = val
+ else:
+ # To the end
+ analysis.parsed.append(BEFORE_ALIASES)
+ analysis.parsed.append(AFTER_ALIASES)
+ # List -> string
+ return ' '.join(filter(None, analysis.parsed))
+
+
+def check_local_recipient_maps(title=''):
+ diagnosis = models.MainCfDiagnosis(title)
+ lrcpt_maps = postconf.parse_maps_by_key_unsafe('local_recipient_maps')
+ list_modified = False
+
+ # Block mails to system users
+ # local_recipient_maps must not contain proxy:unix:passwd.byname
+ ipasswd = list_find(lrcpt_maps, 'proxy:unix:passwd.byname')
+ if ipasswd >= 0:
+ diagnosis.critical('Mail to system users (/etc/passwd) possible')
+ # Propose a fix
+ lrcpt_maps[ipasswd] = ''
+ list_modified = True
+
+ if list_modified:
+ fix = ' '.join(filter(None, lrcpt_maps))
+ diagnosis.flag('local_recipient_maps', corrected_value=fix)
+
+ return diagnosis
+
+
+def fix_local_recipient_maps(diagnosis):
+ diagnosis.apply_changes(postconf.set_many_unsafe)
+
+
+def action_set_ulookup():
+ """Handles email_server -i ldap set_ulookup"""
+ with postconf.mutex.lock_all():
+ fix_alias_maps(check_alias_maps())
+ fix_local_recipient_maps(check_local_recipient_maps())
+
+
+def list_find(lst, element, start=None, end=None):
+ if start is None:
+ start = 0
+ if end is None:
+ end = len(lst)
+ if start < 0 or end < 0:
+ return -1
+ try:
+ return lst.index(element, start, end)
+ except ValueError:
+ return -1
diff --git a/plinth/modules/email_server/audit/models.py b/plinth/modules/email_server/audit/models.py
new file mode 100644
index 000000000..de4b3e77d
--- /dev/null
+++ b/plinth/modules/email_server/audit/models.py
@@ -0,0 +1,220 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""Models of the audit module"""
+
+import dataclasses
+import logging
+import typing
+
+logger = logging.getLogger(__name__)
+
+
+class UnresolvedIssueError(AssertionError):
+ pass
+
+
+class Diagnosis:
+ """Records a diagnosis: what went wrong and how to fix them"""
+
+ def __init__(self, title='', action=''):
+ """Class constructor"""
+ self.title = title
+ self.action = action
+ self.critical = []
+ self.errors = []
+
+ def to_json(self):
+ """Serialize object to JSON"""
+ return {
+ 'class': self.__class__.__name__,
+ 'title': self.title,
+ 'action': self.action,
+ 'errors': self.errors,
+ 'critical': self.critical
+ }
+
+ @classmethod
+ def from_json(cls, valid_dict, translate=None):
+ """Construct a Diagnosis instance from a valid JSON dictionary.
+
+ :type valid_dict: dict
+ :param valid_dict: a valid dictionary representation
+ :type translate: str -> Union[str, None]
+ :param translate: optional; if specified, should be a function that
+ accepts the title and returns a new title or None.
+ """
+ title = valid_dict['title']
+ if translate:
+ title = translate(title) or title
+ result = cls(title, action=valid_dict['action'])
+ result.errors.extend(valid_dict['errors'])
+ result.critical.extend(valid_dict['critical'])
+ return result
+
+ def critical(self, message_fmt, *args):
+ """Append a message to the critical errors list"""
+ if args:
+ self.critical.append(message_fmt % args)
+ else:
+ self.critical.append(message_fmt)
+
+ def error(self, message_fmt, *args):
+ """Append a message to the errors list"""
+ if args:
+ self.errors.append(message_fmt % args)
+ else:
+ self.errors.append(message_fmt)
+
+ def summarize(self, log=True):
+ """Return a 2-element list for the diagnose function in AppView"""
+ if log:
+ self.write_logs()
+
+ if self.critical:
+ return [self.title, 'error']
+ elif self.errors:
+ return [self.title, 'failed']
+ else:
+ return [self.title, 'passed']
+
+ @property
+ def has_failed(self):
+ """True if the diagnosis has failed or contains an error"""
+ return (self.critical or self.errors)
+
+ def write_logs(self):
+ """Log errors and failures"""
+ logger.debug('Ran audit: %s', self.title)
+ for message in self.critical:
+ logger.critical(message)
+ for message in self.errors:
+ logger.error(message)
+
+ def sorting_key(self):
+ """The key function for list.sort"""
+ return (-len(self.critical), -len(self.errors), self.title)
+
+
+class MainCfDiagnosis(Diagnosis):
+ """Diagnosis for a set of main.cf configuration keys"""
+
+ def __init__(self, *args, **kwargs):
+ """Class constructor. See :class:`.Diagnosis` for method signature"""
+ super().__init__(*args, **kwargs)
+ self.advice = {}
+ self.user = {}
+
+ def flag(self, key, corrected_value=None, user=None):
+ """Flag a problematic key.
+
+ If `corrected_value` is a str, the specified value is assumed to be
+ correct.
+
+ :type key: str
+ :param key: main.cf key
+ :type corrected_value: str or None
+ :param corrected_value: corrected value
+ :type user: Any
+ :param user: customized data (see the :meth:`.repair` method)
+ :raises ValueError: if the key has been flagged
+ """
+ if key in self.advice:
+ raise ValueError('Key has been flagged')
+ else:
+ self.advice[key] = corrected_value
+ self.user[key] = user
+
+ def flag_once(self, key, **kwargs):
+ """Flag a problematic key. If the key has been flagged, do nothing.
+
+ See :meth:`.flag` for the function signature.
+ """
+ if key not in self.advice:
+ self.flag(key, **kwargs)
+
+ def unresolved_issues(self):
+ """Return the iterator of all keys that do not have a corrected value.
+
+ :return: an iterator of keys
+ """
+ for key, value in self.advice.items():
+ if value is None:
+ yield key
+
+ def _compare_and_advise(self, current, default):
+ if len(current) > len(default):
+ raise ValueError('Sanity check failed: dictionary sizes')
+ for key, value in default.items():
+ if current.get(key, None) != value:
+ self.flag(key, corrected_value=value)
+ self.critical('%s must equal %s', key, value)
+
+ def compare(self, expected, getter):
+ """Check the current Postfix configuration. Flag and correct all keys
+ that have an unexpected value.
+
+ :type expected: dict[str, str]
+ :param expected: a dictionary specifying the set of keys to be checked
+ and their expected values
+ :type getter: Iterator[str] -> dict[str, str]
+ :param getter: a function that fetches the current postfix config; it
+ takes an iterator of strings and returns a str-to-str dictionary.
+ """
+ current = getter(expected.keys())
+ self._compare_and_advise(current, expected)
+
+ def repair(self, key, repair_function):
+ """Repair the key if its value has not been corrected by other means.
+
+ `repair_function` will not be called if the key has had a corrected
+ value or the key does not need attention.
+
+ In case `repair_function` is called, we will pass in the `user` data
+ associated with `key`.
+
+ The job of `repair_function` is to return a corrected value. It should
+ not modify any Postfix configuration in any way. It may read
+ configuration files, but pending Postconf changes are not visible.
+
+ If `repair_function` could not solve the problem, it may return `None`
+ as an alternative to raising an exception. Using this feature, you may
+ implement fallback strategies.
+
+ :type key: str
+ :param key: the key to be repaired
+ :type repair_function: Any -> Union[str, None]
+ :param repair_function: a function that returns the corrected value
+ for `key`
+ """
+ if key in self.advice and self.advice[key] is None:
+ self.advice[key] = repair_function(self.user[key])
+
+ def apply_changes(self, setter):
+ """Apply changes by calling the `setter` with a dictionary of corrected
+ keys and values.
+
+ :type setter: dict[str, str] -> None
+ :param setter: configuration changing function that takes a str-to-str
+ dictionary.
+ :raises UnresolvedIssueError: if the diagnosis contains an uncorrected
+ key
+ """
+ self.assert_resolved()
+ logger.info('Setting postconf: %r', self.advice)
+ setter(self.advice)
+
+ def assert_resolved(self):
+ """Raises an :class:`.UnresolvedIssueError` if the diagnosis report
+ contains an unresolved issue (i.e. an uncorrected key)"""
+ if None in self.advice.values():
+ raise UnresolvedIssueError('Assertion failed')
+
+
+@dataclasses.dataclass(init=False)
+class AliasMapsAnalysis:
+ parsed = typing.List[str]
+ ibefore = int
+ isystem = int
+ iafter = int
+
+ def __init__(self):
+ pass
diff --git a/plinth/modules/email_server/audit/rcube.py b/plinth/modules/email_server/audit/rcube.py
new file mode 100644
index 000000000..426c31e23
--- /dev/null
+++ b/plinth/modules/email_server/audit/rcube.py
@@ -0,0 +1,90 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import json
+import logging
+import os
+
+from django.utils.translation import ugettext_lazy as _
+from plinth import actions
+
+from . import models
+from plinth.modules.email_server.lock import Mutex
+from plinth.modules.email_server.modconf import ConfigInjector
+
+
+config_path = '/etc/roundcube/config.inc.php'
+boundary_pattern = '//[ ]*--[ ]*(BEGIN|END)[ ]+FREEDOMBOX CONFIG$'
+boundary_format = '//-- {} FREEDOMBOX CONFIG'
+
+rconf_template = """//
+// The following section is managed by FreedomBox
+// Be careful not to edit
+include_once("/etc/roundcube/freedombox_mail.inc.php");
+"""
+
+logger = logging.getLogger(__name__)
+rcube_mutex = Mutex('rcube-config')
+
+
+def get():
+ translation = {
+ 'rc_installed': _('RoundCube availability'),
+ 'rc_config_header': _('RoundCube configured for FreedomBox email'),
+ }
+
+ output = actions.superuser_run('email_server', ['-i', 'rcube', 'check'])
+ results = json.loads(output)
+ for i in range(0, len(results)):
+ results[i] = models.Diagnosis.from_json(results[i], translation.get)
+
+ return results
+
+
+def repair():
+ actions.superuser_run('email_server', ['-i', 'rcube', 'set_up'])
+
+
+def repair_component(action):
+ action_to_services = {'set_up': []}
+ if action not in action_to_services:
+ return
+ actions.superuser_run('email_server', ['-i', 'rcube', action])
+ return action_to_services[action]
+
+
+def action_check():
+ results = _action_check()
+ for i in range(0, len(results)):
+ results[i] = results[i].to_json()
+ print(json.dumps(results))
+
+
+def _action_check():
+ results = []
+ if not os.path.exists(config_path):
+ diagnosis = models.Diagnosis('rc_installed')
+ diagnosis.error('Config file was missing')
+ diagnosis.error('Check that RoundCube has been installed')
+ results.append(diagnosis)
+ return results
+
+ diagnosis = models.Diagnosis('rc_config_header', action='set_up')
+ injector = ConfigInjector(boundary_pattern, boundary_format)
+ if not injector.has_header_line(config_path):
+ diagnosis.error('FreedomBox header line was missing')
+ results.append(diagnosis)
+ return results
+
+
+def action_set_up():
+ with rcube_mutex.lock_all():
+ _inject_rcube_config()
+
+
+def _inject_rcube_config():
+ if not os.path.exists(config_path):
+ logger.warning('Roundcube has not been installed')
+ return
+ logger.info('Opening rcube config file %s', config_path)
+ injector = ConfigInjector(boundary_pattern, boundary_format)
+ injector.do_template_string(rconf_template, config_path)
diff --git a/plinth/modules/email_server/audit/spam.py b/plinth/modules/email_server/audit/spam.py
new file mode 100644
index 000000000..e92808b04
--- /dev/null
+++ b/plinth/modules/email_server/audit/spam.py
@@ -0,0 +1,145 @@
+"""Configures spam filters and the virus scanner"""
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import glob
+import logging
+import re
+import subprocess
+
+from django.utils.translation import ugettext_lazy as _
+from plinth import actions
+
+from . import models
+from plinth.modules.email_server import interproc, lock, postconf
+from plinth.modules.email_server.modconf import ConfigInjector
+
+milter_config = {
+ 'milter_mail_macros': 'i ' + ' '.join([
+ '{auth_type}', '{auth_authen}', '{auth_author}',
+ '{client_addr}', '{client_name}',
+ '{mail_addr}', '{mail_host}', '{mail_mailer}'
+ ]),
+ # XXX In postconf this field is a list
+ 'smtpd_milters': 'inet:127.0.0.1:11332',
+ # XXX In postconf this field is a list
+ 'non_smtpd_milters': 'inet:127.0.0.1:11332',
+ 'milter_header_checks': 'regexp:fbx-managed/pre-queue-milter-headers',
+
+ # Last-resort internal header cleanup at smtp client
+ 'smtp_header_checks': 'regexp:/etc/postfix/freedombox-internal-cleanup',
+ # Reserved mail transports
+ # XXX This field is a list
+ 'transport_maps': 'regexp:/etc/postfix/freedombox-transport-to',
+ # XXX This field is a list
+ 'sender_dependent_default_transport_maps': \
+ 'regexp:/etc/postfix/freedombox-transport-from',
+}
+
+# FreedomBox egress filtering
+
+egress_filter = postconf.ServiceFlags(
+ service='127.0.0.1:10025', type='inet', private='n', unpriv='-',
+ chroot='y', wakeup='-', maxproc='-', command_args='smtpd'
+)
+
+egress_filter_options = {
+ 'syslog_name': 'postfix/fbxout',
+ 'cleanup_service_name': 'fbxcleanup',
+ 'content_filter': '',
+ 'receive_override_options': 'no_unknown_recipient_checks',
+ 'smtpd_helo_restrictions': '',
+ 'smtpd_client_restrictions': '',
+ 'smtpd_relay_restrictions': '',
+ 'smtpd_recipient_restrictions': 'permit_mynetworks,reject',
+ 'mynetworks': '127.0.0.0/8,[::1]/128'
+}
+
+egress_filter_cleanup = postconf.ServiceFlags(
+ service='fbxcleanup', type='unix', private='n', unpriv='-',
+ chroot='y', wakeup='-', maxproc='0', command_args='cleanup'
+)
+
+egress_filter_cleanup_options = {
+ 'syslog_name': 'postfix/fbxout',
+ # "From" domain rewriting
+ 'sender_canonical_maps': 'regexp:/etc/postfix/freedombox-rewrite-sender',
+ 'local_header_rewrite_clients': 'static:all',
+ # "From" domain masquerading
+ 'masquerade_domains': '$mydomain',
+ 'masquerade_classes': 'envelope_sender,header_sender',
+ # Header privacy
+ 'header_checks': 'regexp:/etc/postfix/freedombox-header-cleanup',
+ 'nested_header_checks': ''
+}
+
+# Rspamd config
+
+rspamd_re = re.compile('#[ ]*--[ ]*([A-Z]{3,5})[ ]+FREEDOMBOX CONFIG$')
+rspamd_format = '#-- {} FREEDOMBOX CONFIG'
+
+rspamd_mutex = lock.Mutex('rspamd-config')
+logger = logging.getLogger(__name__)
+
+
+def get():
+ translation_table = [
+ (check_filter, _('Inbound and outbound mail filters')),
+ ]
+ results = []
+ with postconf.mutex.lock_all():
+ for check, title in translation_table:
+ results.append(check(title))
+ return results
+
+
+def repair():
+ actions.superuser_run('email_server', ['-i', 'spam', 'set_filter'])
+
+
+def check_filter(title=''):
+ diagnosis = models.MainCfDiagnosis(title)
+ diagnosis.compare(milter_config, postconf.get_many_unsafe)
+ return diagnosis
+
+
+def fix_filter(diagnosis):
+ diagnosis.apply_changes(postconf.set_many_unsafe)
+
+
+def action_set_filter():
+ _compile_sieve()
+ postconf.set_master_cf_options(egress_filter, egress_filter_options)
+ postconf.set_master_cf_options(egress_filter_cleanup,
+ egress_filter_cleanup_options)
+
+ with postconf.mutex.lock_all():
+ fix_filter(check_filter())
+
+ injector = ConfigInjector(rspamd_re, rspamd_format)
+ with rspamd_mutex.lock_all():
+ # XXX Maybe use globbing?
+ _inject_rspamd_config(injector, 'override', 'options.inc')
+ _inject_rspamd_config(injector, 'local', 'milter_headers.conf')
+
+
+def _inject_rspamd_config(injector, type, name):
+ template_path = '/etc/plinth/rspamd-config/%s_%s' % (type, name)
+ config_path = '/etc/rspamd/%s.d/%s' % (type, name)
+
+ logger.info('Opening Rspamd config file %s', config_path)
+ injector.do_template_file(template_path, config_path)
+
+
+def _compile_sieve():
+ sieve_list = glob.glob('/etc/dovecot/freedombox-sieve-after/*.sieve')
+ for sieve_file in sieve_list:
+ _run_sievec(sieve_file)
+
+
+def _run_sievec(sieve_file):
+ logger.info('Compiling sieve script %s', sieve_file)
+ args = ['sievec', '--', sieve_file]
+ completed = subprocess.run(args, capture_output=True)
+ if completed.returncode != 0:
+ interproc.log_subprocess(completed)
+ raise OSError('Sieve compilation failed: ' + sieve_file)
diff --git a/plinth/modules/email_server/audit/tls.py b/plinth/modules/email_server/audit/tls.py
new file mode 100644
index 000000000..f0746d17b
--- /dev/null
+++ b/plinth/modules/email_server/audit/tls.py
@@ -0,0 +1,204 @@
+"""TLS configuration"""
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import json
+import logging
+import os
+import sys
+
+from django.utils.translation import ugettext_lazy as _
+from plinth import actions
+
+from . import models
+from plinth.modules.email_server import interproc, postconf
+
+# Mozilla Guideline v5.6, Postfix 1.17.7, OpenSSL 1.1.1d, intermediate
+# Generated 2021-08
+# https://ssl-config.mozilla.org/
+tls_medium_cipherlist = [
+ 'ECDHE-ECDSA-AES128-GCM-SHA256', 'ECDHE-RSA-AES128-GCM-SHA256',
+ 'ECDHE-ECDSA-AES256-GCM-SHA384', 'ECDHE-RSA-AES256-GCM-SHA384',
+ 'ECDHE-ECDSA-CHACHA20-POLY1305', 'ECDHE-RSA-CHACHA20-POLY1305',
+ 'DHE-RSA-AES128-GCM-SHA256', 'DHE-RSA-AES256-GCM-SHA384'
+]
+
+postfix_config = {
+ # Enable TLS
+ 'smtpd_tls_security_level': 'may',
+
+ # Allow unencrypted auth on port 25, needed by Roundcube
+ 'smtpd_tls_auth_only': 'no',
+
+ # Debugging information
+ 'smtpd_tls_received_header': 'yes',
+
+ # Use a strong hashing algorithm
+ 'smtp_tls_fingerprint_digest': 'sha256',
+ 'smtpd_tls_fingerprint_digest': 'sha256',
+
+ # Mozilla Intermediate Configuration
+ 'smtpd_tls_mandatory_protocols': '!SSLv2, !SSLv3, !TLSv1, !TLSv1.1',
+ 'smtpd_tls_protocols': '!SSLv2, !SSLv3, !TLSv1, !TLSv1.1',
+ 'smtpd_tls_mandatory_ciphers': 'medium',
+ 'tls_medium_cipherlist': ':'.join(tls_medium_cipherlist),
+ 'tls_preempt_cipherlist': 'no',
+
+ # Postfix SMTP client
+ 'smtp_tls_mandatory_protocols': '!SSLv2, !SSLv3, !TLSv1, !TLSv1.1',
+ 'smtp_tls_protocols': '!SSLv2, !SSLv3, !TLSv1, !TLSv1.1',
+ 'smtp_tls_mandatory_ciphers': 'medium',
+
+ # Use DNSSEC to validate TLS certificates
+ 'smtp_host_lookup': 'dns',
+ 'smtp_dns_support_level': 'dnssec',
+ 'smtp_tls_security_level': 'dane', # Opportunistic DANE TLS
+
+ # Maintain 1 cipherlist and keep it the most secure
+ 'tls_low_cipherlist': '$tls_medium_cipherlist',
+ 'tls_high_cipherlist': '$tls_medium_cipherlist',
+}
+
+dovecot_cert_config = '/etc/dovecot/conf.d/91-freedombox-ssl.conf'
+
+dovecot_cert_template = """# This file is managed by FreedomBox
+ssl_cert = <{cert}
+ssl_key = <{key}
+"""
+
+logger = logging.getLogger(__name__)
+
+
+def get():
+ results = []
+ _get_regular_results(results)
+ _get_superuser_results(results)
+ return results
+
+
+def _get_regular_results(results):
+ translation_table = [
+ (check_tls, _('Postfix TLS parameters')),
+ (check_postfix_cert_usage, _('Postfix uses a TLS certificate')),
+ ]
+ with postconf.mutex.lock_all():
+ for check, title in translation_table:
+ results.append(check(title))
+
+
+def _get_superuser_results(results):
+ translation = {
+ 'cert_availability': _('Has a TLS certificate'),
+ }
+ dump = actions.superuser_run('email_server', ['-i', 'tls', 'check'])
+ for jmap in json.loads(dump):
+ results.append(models.Diagnosis.from_json(jmap, translation.get))
+
+
+def repair():
+ actions.superuser_run('email_server', ['-i', 'tls', 'set_up'])
+
+
+def repair_component(action):
+ action_to_services = {'set_cert': ['dovecot', 'postfix']}
+ if action not in action_to_services: # action not allowed
+ return
+ actions.superuser_run('email_server', ['-i', 'tls', action])
+ return action_to_services[action]
+
+
+def check_tls(title=''):
+ diagnosis = models.MainCfDiagnosis(title)
+ diagnosis.compare(postfix_config, postconf.get_many_unsafe)
+ return diagnosis
+
+
+def repair_tls(diagnosis):
+ diagnosis.apply_changes(postconf.set_many_unsafe)
+
+
+def try_set_up_certificates():
+ cert_folder = find_cert_folder()
+ if not cert_folder:
+ logger.warning('Could not find a suitable TLS certificate')
+ return
+ logger.info('Using TLS certificate in %s', cert_folder)
+
+ cert = cert_folder + '/cert.pem'
+ key = cert_folder + '/privkey.pem'
+ write_postfix_cert_config(cert, key)
+ write_dovecot_cert_config(cert, key)
+
+
+def find_cert_folder() -> str:
+ directory = '/etc/letsencrypt/live'
+ domains_available = []
+ try:
+ listdir_result = os.listdir(directory)
+ except OSError:
+ return ''
+
+ for item in listdir_result:
+ if item[0] != '.' and os.path.isdir(directory + '/' + item):
+ domains_available.append(item)
+ domains_available.sort()
+
+ if len(domains_available) == 0:
+ return ''
+ if len(domains_available) == 1:
+ return directory + '/' + domains_available[0]
+ # XXX Cannot handle the case with multiple domains
+ if len(domains_available) > 1:
+ return ''
+
+
+def write_postfix_cert_config(cert, key):
+ postconf.set_many_unsafe({
+ 'smtpd_tls_cert_file': cert,
+ 'smtpd_tls_key_file': key
+ })
+
+
+def write_dovecot_cert_config(cert, key):
+ content = dovecot_cert_template.format(cert=cert, key=key)
+ with interproc.atomically_rewrite(dovecot_cert_config) as fd:
+ fd.write(content)
+
+
+def check_postfix_cert_usage(title=''):
+ prefix = '/etc/letsencrypt/live/'
+ diagnosis = models.Diagnosis(title, action='set_cert')
+ conf = postconf.get_many_unsafe(['smtpd_tls_cert_file',
+ 'smtpd_tls_key_file'])
+ if not conf['smtpd_tls_cert_file'].startswith(prefix):
+ diagnosis.error("Cert file not in Let's Encrypt directory")
+ if not conf['smtpd_tls_key_file'].startswith(prefix):
+ diagnosis.error("Privkey file not in Let's Encrypt directory")
+
+ return diagnosis
+
+
+def su_check_cert_availability(title=''):
+ diagnosis = models.Diagnosis(title)
+ if find_cert_folder() == '':
+ diagnosis.error("Could not find a Let's Encrypt certificate")
+ return diagnosis
+
+
+def action_set_up():
+ with postconf.mutex.lock_all():
+ repair_tls(check_tls())
+ try_set_up_certificates()
+
+
+def action_set_cert():
+ with postconf.mutex.lock_all():
+ try_set_up_certificates()
+
+
+def action_check():
+ checks = ('cert_availability',)
+ results = []
+ for check_name in checks:
+ check_function = globals()['su_check_' + check_name]
+ results.append(check_function(check_name).to_json())
+ json.dump(results, sys.stdout, indent=0) # indent=0 adds a new line
diff --git a/plinth/modules/email_server/data/etc/apache2/conf-available/email-server-freedombox.conf b/plinth/modules/email_server/data/etc/apache2/conf-available/email-server-freedombox.conf
new file mode 100644
index 000000000..218087e8a
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/apache2/conf-available/email-server-freedombox.conf
@@ -0,0 +1,32 @@
+
+ Redirect "/rspamd/"
+
+
+
+ ProxyPass http://127.0.0.1:11334/
+ ProxyPassReverse http://127.0.0.1:11334/
+ # Modify proxy headers
+ ProxyAddHeaders off
+ RequestHeader unset Forwarded
+ RequestHeader unset Via
+ RequestHeader unset X-Forwarded-For
+ RequestHeader unset X-Forwarded-Host
+ RequestHeader unset X-Forwarded-Proto
+ RequestHeader unset X-Forwarded-Server
+ RequestHeader unset X-Real-IP
+ RequestHeader set X-Forwarded-For "127.0.0.1"
+ # Modify response headers
+ Header unset Set-Cookie
+ # Require SSO
+ Include includes/freedombox-single-sign-on.conf
+
+ TKTAuthToken "admin"
+
+
+
+
+
+ RewriteEngine On
+ RewriteRule ^ /plinth/apps/email_server/config.xml [PT]
+
+
diff --git a/plinth/modules/email_server/data/etc/apache2/includes/freedombox-robots.conf b/plinth/modules/email_server/data/etc/apache2/includes/freedombox-robots.conf
new file mode 100644
index 000000000..87ef3035d
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/apache2/includes/freedombox-robots.conf
@@ -0,0 +1 @@
+Header merge X-Robots-Tag "noindex, nofollow, noarchive, notranslate"
diff --git a/plinth/modules/email_server/data/etc/dovecot/conf.d/05-freedombox-auth.conf b/plinth/modules/email_server/data/etc/dovecot/conf.d/05-freedombox-auth.conf
new file mode 100644
index 000000000..53f74960f
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/conf.d/05-freedombox-auth.conf
@@ -0,0 +1,31 @@
+# Direct edits to this file will be lost!
+# Manage your settings on Plinth
+
+auth_mechanisms = plain login
+
+passdb {
+ driver = ldap
+ args = /etc/dovecot/freedombox-ldap-passdb.conf.ext
+ # Block the default passdb lookup (pam, 10-auth.conf)
+ result_failure = return-fail
+ result_internalfail = return-fail
+ result_success = return-ok
+}
+
+userdb {
+ # UID number lookup (10001@example.com)
+ driver = ldap
+ args = /etc/dovecot/freedombox-ldap-userdb-uid.conf.ext
+ result_failure = continue
+ result_internalfail = return-fail
+ result_success = return-ok
+}
+
+userdb {
+ driver = ldap
+ args = /etc/dovecot/freedombox-ldap-userdb.conf.ext
+ # Block the default userdb lookup (passwd, 10-auth.conf)
+ result_failure = return-fail
+ result_internalfail = return-fail
+ result_success = return-ok
+}
diff --git a/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-lmtp.conf b/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-lmtp.conf
new file mode 100644
index 000000000..0b9c3516f
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-lmtp.conf
@@ -0,0 +1,10 @@
+# Direct edits to this file will be lost!
+# Manage your settings on Plinth
+
+# Privacy: remove the recipient's UID number from email headers
+lmtp_add_received_header = no
+lmtp_hdr_delivery_address = original
+
+protocol lmtp {
+ mail_plugins = $mail_plugins sieve
+}
diff --git a/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-mailboxes.conf b/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-mailboxes.conf
new file mode 100644
index 000000000..d14f70d59
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-mailboxes.conf
@@ -0,0 +1,43 @@
+# Direct edits to this file will be lost!
+# Manage your settings on Plinth
+
+namespace inbox {
+ mailbox Archive {
+ auto = subscribe
+ special_use = \Archive
+ }
+ mailbox Drafts {
+ auto = subscribe
+ special_use = \Drafts
+ }
+ mailbox Junk {
+ auto = subscribe
+ autoexpunge = 30d
+ special_use = \Junk
+ }
+ mailbox Trash {
+ auto = subscribe
+ autoexpunge = 30d
+ special_use = \Trash
+ }
+
+ mailbox INBOX.Junk {
+ auto = no
+ autoexpunge = 30d
+ special_use = \Junk
+ }
+ mailbox INBOX.Trash {
+ auto = no
+ autoexpunge = 30d
+ special_use = \Trash
+ }
+
+ mailbox Sent {
+ auto = subscribe
+ special_use = \Sent
+ }
+ mailbox "Sent Messages" {
+ auto = no
+ special_use = \Sent
+ }
+}
diff --git a/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-master.conf b/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-master.conf
new file mode 100644
index 000000000..0b1137be7
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-master.conf
@@ -0,0 +1,18 @@
+# Direct edits to this file will be lost!
+# Manage your settings on Plinth
+
+service auth {
+ unix_listener /var/spool/postfix/private/auth {
+ mode = 0600
+ user = postfix
+ group = postfix
+ }
+}
+
+service lmtp {
+ unix_listener /var/spool/postfix/private/dovecot-lmtp {
+ mode = 0600
+ user = postfix
+ group = postfix
+ }
+}
diff --git a/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-ssl.conf b/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-ssl.conf
new file mode 100644
index 000000000..fa3c5af64
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/conf.d/90-freedombox-ssl.conf
@@ -0,0 +1,12 @@
+# Direct edits to this file will be lost!
+# Manage your settings on Plinth
+
+# Mozilla Guideline v5.6, Dovecot 2.3.9, OpenSSL 1.1.1d, intermediate
+# Generated 2021-08
+# https://ssl-config.mozilla.org/
+ssl = required
+
+ssl_min_protocol = TLSv1.2
+ssl_prefer_server_ciphers = no
+
+ssl_cipher_list = ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
diff --git a/plinth/modules/email_server/data/etc/dovecot/conf.d/95-freedombox-sieve.conf b/plinth/modules/email_server/data/etc/dovecot/conf.d/95-freedombox-sieve.conf
new file mode 100644
index 000000000..dc34ba411
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/conf.d/95-freedombox-sieve.conf
@@ -0,0 +1,6 @@
+# Direct edits to this file will be lost!
+# Manage your settings on Plinth
+
+plugin {
+ sieve_after = /etc/dovecot/freedombox-sieve-after
+}
diff --git a/plinth/modules/email_server/data/etc/dovecot/freedombox-ldap-passdb.conf.ext b/plinth/modules/email_server/data/etc/dovecot/freedombox-ldap-passdb.conf.ext
new file mode 100644
index 000000000..0480c3354
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/freedombox-ldap-passdb.conf.ext
@@ -0,0 +1,8 @@
+# Direct edits to this file will be lost!
+# Manage your settings on Plinth
+
+uris = ldap://127.0.0.1
+base = dc=thisbox
+
+auth_bind = yes
+auth_bind_userdn = uid=%u,ou=users,dc=thisbox
diff --git a/plinth/modules/email_server/data/etc/dovecot/freedombox-ldap-userdb-uid.conf.ext b/plinth/modules/email_server/data/etc/dovecot/freedombox-ldap-userdb-uid.conf.ext
new file mode 100644
index 000000000..e8a047f22
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/freedombox-ldap-userdb-uid.conf.ext
@@ -0,0 +1,22 @@
+# Direct edits to this file will be lost!
+# Manage your settings on Plinth https://localhost/plinth/apps/email_server
+
+uris = ldap://127.0.0.1
+base = dc=thisbox
+
+user_attrs = \
+ =home=%{ldap:homeDirectory}, \
+ =uid=%{ldap:uidNumber}, \
+ =gid=%{ldap:gidNumber}, \
+ =user=%{ldap:uid}, \
+ =mail=maildir:~/Maildir:LAYOUT=index
+
+# Support user lookup by UID number
+
+user_filter = \
+ (&(objectClass=posixAccount)(!(uidNumber=0))(uidNumber=%n))
+
+# doveadm -A
+
+iterate_attrs = =user=%{ldap:uid}
+iterate_filter = (objectClass=posixAccount)
diff --git a/plinth/modules/email_server/data/etc/dovecot/freedombox-ldap-userdb.conf.ext b/plinth/modules/email_server/data/etc/dovecot/freedombox-ldap-userdb.conf.ext
new file mode 100644
index 000000000..29067ba34
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/freedombox-ldap-userdb.conf.ext
@@ -0,0 +1,20 @@
+# Direct edits to this file will be lost!
+# Manage your settings on Plinth
+
+uris = ldap://127.0.0.1
+base = dc=thisbox
+
+user_attrs = \
+ =home=%{ldap:homeDirectory}, \
+ =uid=%{ldap:uidNumber}, \
+ =gid=%{ldap:gidNumber}, \
+ =mail=maildir:~/Maildir:LAYOUT=index
+
+# Support user lookup by username
+
+user_filter = (&(objectClass=posixAccount)(uid=%Ln)(!(uidNumber=0)))
+
+# For doveadm
+
+iterate_attrs = =user=%{ldap:uid}
+iterate_filter = (objectClass=posixAccount)
diff --git a/plinth/modules/email_server/data/etc/dovecot/freedombox-sieve-after/README.txt b/plinth/modules/email_server/data/etc/dovecot/freedombox-sieve-after/README.txt
new file mode 100644
index 000000000..17160f2fd
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/freedombox-sieve-after/README.txt
@@ -0,0 +1,2 @@
+DO NOT PUT PERSONAL ITEMS HERE!
+This folder in its entirety is managed by FreedomBox.
diff --git a/plinth/modules/email_server/data/etc/dovecot/freedombox-sieve-after/sort-spam.sieve b/plinth/modules/email_server/data/etc/dovecot/freedombox-sieve-after/sort-spam.sieve
new file mode 100644
index 000000000..aebaf100a
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/dovecot/freedombox-sieve-after/sort-spam.sieve
@@ -0,0 +1,8 @@
+require ["fileinto", "mailbox"];
+
+if anyof(header :contains "X-Spam" "Yes",
+ header :contains "X-Spam-Status" "Yes",
+ header :matches "X-Spam-Flag" "YES") {
+ fileinto :create "Junk";
+ stop;
+}
diff --git a/plinth/modules/email_server/data/etc/plinth/modules-enabled/email_server b/plinth/modules/email_server/data/etc/plinth/modules-enabled/email_server
new file mode 100644
index 000000000..fb87084c0
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/plinth/modules-enabled/email_server
@@ -0,0 +1 @@
+#plinth.modules.email_server
diff --git a/plinth/modules/email_server/data/etc/plinth/rspamd-config/local_milter_headers.conf b/plinth/modules/email_server/data/etc/plinth/rspamd-config/local_milter_headers.conf
new file mode 100644
index 000000000..8c24018cf
--- /dev/null
+++ b/plinth/modules/email_server/data/etc/plinth/rspamd-config/local_milter_headers.conf
@@ -0,0 +1,39 @@
+# The following section is managed by FreedomBox
+# Be careful not to edit
+
+use = ["x-fbx-mail-type", "authentication-results", "x-spam-level",
+ "x-spam-status", "x-spamd-bar", "x-spamd-result"];
+
+routines {
+ authentication-results {
+ add_smtp_user = false;
+ }
+}
+
+# Custom headers required by FreedomBox filtering system
+custom {
+x-fbx-mail-type = <
diff --git a/plinth/modules/email_server/data/var/spool/postfix/fbx-managed/README.txt b/plinth/modules/email_server/data/var/spool/postfix/fbx-managed/README.txt
new file mode 100644
index 000000000..9ad4efb15
--- /dev/null
+++ b/plinth/modules/email_server/data/var/spool/postfix/fbx-managed/README.txt
@@ -0,0 +1,5 @@
+DO NOT PUT PERSONAL ITEMS HERE!
+This folder in its entirety is managed by FreedomBox.
+
+/var/spool/postfix/fbx-managed/ contains config files read by chrooted Postfix
+services.
diff --git a/plinth/modules/email_server/data/var/spool/postfix/fbx-managed/pre-queue-milter-headers b/plinth/modules/email_server/data/var/spool/postfix/fbx-managed/pre-queue-milter-headers
new file mode 100644
index 000000000..5bb480860
--- /dev/null
+++ b/plinth/modules/email_server/data/var/spool/postfix/fbx-managed/pre-queue-milter-headers
@@ -0,0 +1,7 @@
+# -*- mode: conf-space -*-
+# This file is managed by FreedomBox. Direct edits will be lost!
+
+# Outbound
+/^X-Fbx-Mail-Type: smtpd-submission;/ FILTER smtp:[127.0.0.1]:10025
+# Inbound
+/^X-Fbx-Mail-Type: smtpd-anon;/ IGNORE
diff --git a/plinth/modules/email_server/forms.py b/plinth/modules/email_server/forms.py
new file mode 100644
index 000000000..9567d1be1
--- /dev/null
+++ b/plinth/modules/email_server/forms.py
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+from django import forms
+from django.utils.translation import ugettext_lazy as _
+
+
+class EmailServerForm(forms.Form):
+ domain = forms.CharField(label=_('domain'), max_length=256)
+
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+
+
+class AliasCreationForm(forms.Form):
+ email_name = forms.CharField(label=_('New alias (without @domain)'),
+ max_length=50)
diff --git a/plinth/modules/email_server/interproc.py b/plinth/modules/email_server/interproc.py
new file mode 100644
index 000000000..bc1db6b9b
--- /dev/null
+++ b/plinth/modules/email_server/interproc.py
@@ -0,0 +1,39 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import contextlib
+import logging
+import os
+import uuid
+
+logger = logging.getLogger(__name__)
+
+
+def log_subprocess(result):
+ logger.critical('Subprocess returned %d', result.returncode)
+ logger.critical('Stdout: %r', result.stdout)
+ logger.critical('Stderr: %r', result.stderr)
+
+
+@contextlib.contextmanager
+def atomically_rewrite(filepath):
+ successful = False
+ tmp = '%s.%s.plinth-tmp' % (filepath, uuid.uuid4().hex)
+ fd = open(tmp, 'x')
+
+ try:
+ # Let client write to a temporary file
+ yield fd
+ successful = True
+ finally:
+ fd.close()
+
+ try:
+ if successful:
+ # Invoke rename(2) to atomically replace the original
+ os.rename(tmp, filepath)
+ finally:
+ # Delete temp file
+ try:
+ os.unlink(tmp)
+ except FileNotFoundError:
+ pass
diff --git a/plinth/modules/email_server/lock.py b/plinth/modules/email_server/lock.py
new file mode 100644
index 000000000..e3909039c
--- /dev/null
+++ b/plinth/modules/email_server/lock.py
@@ -0,0 +1,106 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+import contextlib
+import fcntl
+import logging
+import os
+import pwd
+import re
+import subprocess
+import threading
+
+from . import interproc
+
+lock_name_pattern = re.compile('^[0-9a-zA-Z_-]+$')
+logger = logging.getLogger(__name__)
+
+
+class RaceCondition(AssertionError):
+ pass
+
+
+class Mutex:
+ """File and pthread lock based resource mutex"""
+
+ def __init__(self, lock_name):
+ if not lock_name_pattern.match(lock_name):
+ raise ValueError('Bad lock name')
+ self._lock_path = '/var/lock/plinth-%s.lock' % lock_name
+ self._thread_mutex = threading.Lock()
+
+ @property
+ def lock_path(self):
+ return self._lock_path
+
+ @contextlib.contextmanager
+ def lock_threads_only(self):
+ """Acquire the thread lock but not the file lock"""
+ if not self._thread_mutex.acquire(timeout=5):
+ raise RuntimeError('Could not acquire thread lock')
+ try:
+ yield
+ finally:
+ self._thread_mutex.release()
+
+ @contextlib.contextmanager
+ def lock_all(self):
+ """Acquire both the thread lock and the file lock"""
+ with self.lock_threads_only():
+ # Set up
+ fd = self._open_lock_file()
+ fcntl.lockf(fd, fcntl.LOCK_EX)
+ # Enter context
+ try:
+ yield
+ finally:
+ # Clean up
+ fcntl.lockf(fd, fcntl.LOCK_UN)
+ fd.close()
+
+ def _open_lock_file(self):
+ """Attempt to open lock file for R&W. Raises OSError on failure"""
+ og_ruid, og_euid, og_suid = os.getresuid()
+ if og_euid == 0 and threading.active_count() > 1:
+ raise RaceCondition('setuid in a multi-threaded process')
+ if not os.path.exists(self.lock_path):
+ self._create_lock_file_as_plinth(og_euid)
+
+ fd = None
+ try:
+ if og_euid == 0:
+ # Temporarily run the current process as plinth
+ plinth_uid = pwd.getpwnam('plinth').pw_uid
+ self._checked_setresuid(og_ruid, plinth_uid, 0)
+ fd = open(self.lock_path, 'w+b')
+ finally:
+ # Restore resuid
+ if og_euid == 0:
+ self._checked_setresuid(og_ruid, 0, 0)
+ if og_suid != 0:
+ self._checked_setresuid(og_ruid, 0, og_suid)
+
+ return fd
+
+ def _create_lock_file_as_plinth(self, your_euid):
+ # Don't change the current processes umask
+ # Do create a new process
+ args = []
+ if your_euid == 0:
+ args.extend(['sudo', '-n', '-u', 'plinth'])
+ args.extend(['/bin/sh', '-c'])
+ args.append('umask 177 && > ' + self.lock_path)
+
+ completed = subprocess.run(args, capture_output=True)
+ if completed.returncode != 0:
+ interproc.log_subprocess(completed)
+ raise OSError('Could not create ' + self.lock_path)
+
+ def _checked_setresuid(self, ruid, euid, suid):
+ os.setresuid(ruid, euid, suid)
+ if os.getresuid() != (ruid, euid, suid):
+ try:
+ raise SystemExit('PANIC: setresuid failed')
+ except SystemExit as e:
+ # Print stack trace
+ logger.exception(e)
+ # Force exit
+ exit(1)
diff --git a/plinth/modules/email_server/manifest.py b/plinth/modules/email_server/manifest.py
new file mode 100644
index 000000000..51e4d8e75
--- /dev/null
+++ b/plinth/modules/email_server/manifest.py
@@ -0,0 +1,66 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+from django.utils.translation import ugettext_lazy as _
+from plinth.clients import store_url
+
+clients = [{
+ 'name': _('Roundcube'),
+ 'platforms': [{
+ 'type': 'web',
+ 'url': '/plinth/apps/roundcube'
+ }]
+}, {
+ 'name': _('Thunderbird'),
+ 'platforms': [{
+ 'type': 'download',
+ 'os': 'gnu-linux',
+ 'url': 'https://www.thunderbird.net/en-US/'
+ }, {
+ 'type': 'download',
+ 'os': 'macos',
+ 'url': 'https://www.thunderbird.net/en-US/'
+ }, {
+ 'type': 'download',
+ 'os': 'windows',
+ 'url': 'https://www.thunderbird.net/en-US/'
+ }]
+}, {
+ 'name': _('K-9 Mail'),
+ 'platforms': [{
+ 'type': 'store',
+ 'os': 'android',
+ 'store_name': 'f-droid',
+ 'url': store_url('f-droid', 'com.fsck.k9')
+ }, {
+ 'type': 'store',
+ 'os': 'android',
+ 'store_name': 'google-play',
+ 'url': store_url('google-play', 'com.fsck.k9')
+ }]
+}, {
+ 'name': _('FairEmail'),
+ 'platforms': [{
+ 'type': 'store',
+ 'os': 'android',
+ 'store_name': 'f-droid',
+ 'url': store_url('f-droid', 'eu.faircode.email')
+ }, {
+ 'type': 'store',
+ 'os': 'android',
+ 'store_name': 'google-play',
+ 'url': store_url('google-play', 'eu.faircode.email')
+ }]
+}]
+
+backup = {
+ 'data': {
+ 'directories': [
+ '/var/lib/plinth/mailsrv',
+ '/var/spool/postfix/fbx-managed',
+ '/etc/postfix',
+ '/etc/dovecot',
+ '/etc/rspamd',
+ '/var/lib/rspamd',
+ ]
+ },
+ 'services': ['postfix', 'dovecot', 'rspamd']
+}
diff --git a/plinth/modules/email_server/modconf.py b/plinth/modules/email_server/modconf.py
new file mode 100644
index 000000000..d78f9b194
--- /dev/null
+++ b/plinth/modules/email_server/modconf.py
@@ -0,0 +1,78 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""Generic config modifying utilities"""
+
+import contextlib
+import io
+import re
+
+from . import interproc
+
+
+class ConfigInjector:
+ def __init__(self, match, generate):
+ self.re_pattern = re.compile(match)
+ self.boundary_fmt = generate + '\n'
+
+ def do_file_des(self, template, config, scratch):
+ """Write modified config to the `scratch` stream"""
+ if not isinstance(template, io.TextIOBase):
+ raise TypeError('Not a text IO stream: template')
+ self._inject_config3(template, config, scratch)
+
+ def _inject_config3(self, template, config, scratch):
+ # Copy the original config up to header line
+ for line in config:
+ match = self.re_pattern.match(line.strip())
+ if match and match.group(1) == 'BEGIN':
+ break
+ scratch.write(line)
+ if not line.endswith('\n'): # in case no new line was at the eof
+ scratch.write('\n')
+
+ # Write header line
+ scratch.write(self.boundary_fmt.format('BEGIN'))
+ # Write template to scratch
+ for line in template:
+ scratch.write(line)
+ # in case no new line was at the eof
+ if not line.endswith('\n'):
+ scratch.write('\n')
+ # Write footer line
+ scratch.write(self.boundary_fmt.format('END'))
+
+ # Find the trailer line in config
+ for line in config:
+ match = self.re_pattern.match(line.strip())
+ if match and match.group(1) == 'END':
+ break
+
+ # Copy the original
+ for line in config:
+ scratch.write(line) # keep original file ending style
+
+ def do_template_file(self, template_path, config_path):
+ with open(template_path, 'r') as template:
+ with self._open_config(config_path) as (config, scratch):
+ self._inject_config3(template, config, scratch)
+
+ def do_template_string(self, template_string, config_path):
+ with self._open_config(config_path) as (config, scratch):
+ self._inject_config3([template_string], config, scratch)
+
+ @contextlib.contextmanager
+ def _open_config(self, config_path):
+ with open(config_path, 'a+') as config:
+ with interproc.atomically_rewrite(config_path) as scratch:
+ config.seek(0)
+ yield config, scratch
+
+ def has_header_line(self, config_path):
+ with open(config_path, 'r') as config_fd:
+ return self._has_header_line(config_fd)
+
+ def _has_header_line(self, config_fd):
+ for line in config_fd:
+ match = self.re_pattern.match(line.strip())
+ if match and match.group(1) == 'BEGIN':
+ return True
+ return False
diff --git a/plinth/modules/email_server/postconf.py b/plinth/modules/email_server/postconf.py
new file mode 100644
index 000000000..cba3a007b
--- /dev/null
+++ b/plinth/modules/email_server/postconf.py
@@ -0,0 +1,180 @@
+"""Postconf wrapper providing thread-safe operations"""
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+import logging
+import re
+import subprocess
+from dataclasses import dataclass
+from typing import ClassVar
+
+from . import interproc
+from .lock import Mutex
+
+logger = logging.getLogger(__name__)
+mutex = Mutex('email-postconf')
+
+
+@dataclass
+class ServiceFlags:
+ service: str
+ type: str
+ private: str
+ unpriv: str
+ chroot: str
+ wakeup: str
+ maxproc: str
+ command_args: str
+
+ crash_handler: ClassVar[str] = '/dev/null/plinth-crash'
+
+ def _get_flags_ordered(self):
+ return [self.service, self.type, self.private, self.unpriv,
+ self.chroot, self.wakeup, self.maxproc, self.command_args]
+
+ def serialize(self) -> str:
+ ordered = self._get_flags_ordered()
+ return ' '.join(ordered)
+
+ def serialize_temp(self) -> str:
+ ordered = self._get_flags_ordered()
+ ordered[-1] = self.crash_handler
+ return ' '.join(ordered)
+
+ def try_remove_crash_handler(self, line) -> str:
+ pattern = re.compile('([^ \\t]+)[ \\t]+([a-z]+)[ \\t]+')
+ match = pattern.match(line)
+ if match is None:
+ return None
+ if match.group(1) != self.service or match.group(2) != self.type:
+ return None
+ if not line.rstrip().endswith(self.crash_handler):
+ return None
+ return line.replace(self.crash_handler, self.command_args)
+
+
+def get_many(key_list):
+ """Acquire resource lock. Get the list of postconf values as specified.
+ Return a key-value map"""
+ for key in key_list:
+ validate_key(key)
+ with mutex.lock_all():
+ return get_many_unsafe(key_list)
+
+
+def get_many_unsafe(key_iterator):
+ result = {}
+ for key in key_iterator:
+ result[key] = get_unsafe(key)
+ return result
+
+
+def set_many(kv_map):
+ """Acquire resource lock. Set the list of postconf values as specified"""
+ for key, value in kv_map.items():
+ validate_key(key)
+ validate_value(value)
+
+ with mutex.lock_all():
+ set_many_unsafe(kv_map)
+
+
+def set_many_unsafe(kv_map, flag=''):
+ args = ['/sbin/postconf']
+
+ if not kv_map:
+ return
+ if flag:
+ args.append(flag)
+ for key, value in kv_map.items():
+ args.append('{}={}'.format(key, value))
+ _run(args)
+
+
+def set_master_cf_options(service_flags, options={}):
+ """Acquire resource lock. Set master.cf service options"""
+ if not isinstance(service_flags, ServiceFlags):
+ raise TypeError('service_flags')
+ for key, value in options.items():
+ validate_key(key)
+ validate_value(value)
+
+ service_key = service_flags.service + '/' + service_flags.type
+ long_opts = {service_key + '/' + k: v for (k, v) in options.items()}
+
+ logger.info('Setting %s service: %r', service_flags.service, options)
+
+ # Crash resistant config setting:
+ # /sbin/postconf -M "service/type="
+ # /sbin/postconf -P "service/type/k=v" ...
+ # Delete placeholder string /dev/null/plinth-crash
+ with mutex.lock_all():
+ set_unsafe(service_key, service_flags.serialize_temp(), '-M')
+ set_many_unsafe(long_opts, '-P')
+ _master_remove_crash_handler(service_flags)
+
+
+def get_unsafe(key):
+ """Get postconf value (no locking, no sanitization)"""
+ result = _run(['/sbin/postconf', key])
+ match = key + ' ='
+ if not result.startswith(match):
+ raise KeyError(key)
+ return result[len(match):].strip()
+
+
+def set_unsafe(key, value, flag=''):
+ """Set postconf value (assuming root, no locking, no sanitization)"""
+ if flag:
+ _run(['/sbin/postconf', flag, '{}={}'.format(key, value)])
+ else:
+ _run(['/sbin/postconf', '{}={}'.format(key, value)])
+
+
+def parse_maps(raw_value):
+ if '{' in raw_value or '}' in raw_value:
+ raise ValueError('Unsupported map list format')
+
+ value_list = []
+ for segment in raw_value.split(','):
+ for sub_segment in segment.strip().split(' '):
+ sub_segment = sub_segment.strip()
+ if sub_segment:
+ value_list.append(sub_segment)
+ return value_list
+
+
+def parse_maps_by_key_unsafe(key):
+ return parse_maps(get_unsafe(key))
+
+
+def _run(args):
+ """Run process. Capture and return standard output as a string. Raise a
+ RuntimeError on non-zero exit codes"""
+ try:
+ result = subprocess.run(args, check=True, capture_output=True)
+ return result.stdout.decode('utf-8')
+ except subprocess.SubprocessError as subprocess_error:
+ raise RuntimeError('Subprocess failed') from subprocess_error
+ except UnicodeDecodeError as unicode_error:
+ raise RuntimeError('Unicode decoding failed') from unicode_error
+
+
+def _master_remove_crash_handler(service_flags):
+ with interproc.atomically_rewrite('/etc/postfix/master.cf') as writer:
+ with open('/etc/postfix/master.cf') as reader:
+ for line in reader:
+ cleaned = service_flags.try_remove_crash_handler(line)
+ writer.write(line if cleaned is None else cleaned)
+
+
+def validate_key(key):
+ """Validate postconf key format. Raises ValueError"""
+ if not re.match('^[a-zA-Z][a-zA-Z0-9_]*$', key):
+ raise ValueError('Invalid postconf key format')
+
+
+def validate_value(value):
+ """Validate postconf value format. Raises ValueError"""
+ for c in value:
+ if ord(c) < 32:
+ raise ValueError('Value contains control characters')
diff --git a/plinth/modules/email_server/templates/email_alias.html b/plinth/modules/email_server/templates/email_alias.html
new file mode 100644
index 000000000..fab376a96
--- /dev/null
+++ b/plinth/modules/email_server/templates/email_alias.html
@@ -0,0 +1,41 @@
+{# SPDX-License-Identifier: AGPL-3.0-or-later #}
+{% extends "email_form_base.html" %}
+
+{% load bootstrap %}
+{% load i18n %}
+
+{% block content %}
+
+ {{ block.super }}
+
+ {% if no_alias %}
+ {% trans "You have no email aliases." %}
+ {% else %}
+
+ {% endif %}
+
+ {% trans "Create a new email alias" %}
+
+
+
+{% endblock %}
diff --git a/plinth/modules/email_server/templates/email_autoconfig.xml b/plinth/modules/email_server/templates/email_autoconfig.xml
new file mode 100644
index 000000000..4573d5339
--- /dev/null
+++ b/plinth/modules/email_server/templates/email_autoconfig.xml
@@ -0,0 +1,22 @@
+
+
+
+ {{ host }}
+ FreedomBox Mail
+ FBXMail
+
+ {{ host }}
+ 993
+ SSL
+ %EMAILLOCALPART%
+ password-cleartext
+
+
+ {{ host }}
+ 465
+ SSL
+ %EMAILLOCALPART%
+ password-cleartext
+
+
+
diff --git a/plinth/modules/email_server/templates/email_domains.html b/plinth/modules/email_server/templates/email_domains.html
new file mode 100644
index 000000000..5a588b658
--- /dev/null
+++ b/plinth/modules/email_server/templates/email_domains.html
@@ -0,0 +1,35 @@
+{# SPDX-License-Identifier: AGPL-3.0-or-later #}
+{% extends "email_form_base.html" %}
+{% load bootstrap %}
+{% load i18n %}
+
+{% block content %}
+
+ {{ block.super }}
+
+
+
+
+{% endblock %}
diff --git a/plinth/modules/email_server/templates/email_form_base.html b/plinth/modules/email_server/templates/email_form_base.html
new file mode 100644
index 000000000..390c0936b
--- /dev/null
+++ b/plinth/modules/email_server/templates/email_form_base.html
@@ -0,0 +1,19 @@
+{# SPDX-License-Identifier: AGPL-3.0-or-later #}
+{% extends "base.html" %}
+
+{% load i18n %}
+
+{% block content %}
+ {{ tabs|safe }}
+ {{ block.super }}
+ {% if error %}
+
+
+ {% trans "There was a problem with your request. Please try again." %}
+
+ {% for message in error %}
+
{{ message }}
+ {% endfor %}
+
+ {% endif %}
+{% endblock %}
diff --git a/plinth/modules/email_server/templates/email_security.html b/plinth/modules/email_server/templates/email_security.html
new file mode 100644
index 000000000..0a65916f2
--- /dev/null
+++ b/plinth/modules/email_server/templates/email_security.html
@@ -0,0 +1,27 @@
+{# SPDX-License-Identifier: AGPL-3.0-or-later #}
+{% extends "email_form_base.html" %}
+
+{% load i18n %}
+
+{% block content %}
+
+ {{ block.super }}
+
+
+
+{% endblock %}
+
diff --git a/plinth/modules/email_server/templates/email_server.html b/plinth/modules/email_server/templates/email_server.html
new file mode 100644
index 000000000..78c1fd575
--- /dev/null
+++ b/plinth/modules/email_server/templates/email_server.html
@@ -0,0 +1,57 @@
+{# SPDX-License-Identifier: AGPL-3.0-or-later #}
+{% extends "app.html" %}
+
+{% load i18n %}
+
+{% block content %}
+ {{ tabs|safe }}
+ {{ block.super }}
+{% endblock %}
+
+{% block extra_content %}
+
+
+ {% trans "Visit Rspamd administration interface" %}
+
+
+ {% if related_diagnostics %}
+ {% trans "Service Alert" %}
+
+ {% for model in related_diagnostics %}
+
+
+ {{ model.title }}
+ {% if model.critical %}
+ {% trans "error" %}
+ {% elif model.errors %}
+ {% trans "failed" %}
+ {% else %}
+ {% trans "passed" %}
+ {% endif %}
+
+ {% if model.has_failed and model.action %}
+
+ {% endif %}
+
+
+ {% for message in model.critical %}
+ {{ message }}
+ {% endfor %}
+ {% for message in model.errors %}
+ {{ message }}
+ {% endfor %}
+
+
+
+ {% endfor %}
+
+ {% endif %}
+ {{ block.super }}
+{% endblock %}
diff --git a/plinth/modules/email_server/templates/my_mail.html b/plinth/modules/email_server/templates/my_mail.html
new file mode 100644
index 000000000..720ba77fe
--- /dev/null
+++ b/plinth/modules/email_server/templates/my_mail.html
@@ -0,0 +1,32 @@
+{# SPDX-License-Identifier: AGPL-3.0-or-later #}
+{% extends "email_form_base.html" %}
+
+{% load bootstrap %}
+{% load i18n %}
+
+{% block content %}
+
+ {{ block.super }}
+
+ {% if not has_homedir %}
+
+ {% endif %}
+
+
+ Roundcube login
+
+
+{% endblock %}
diff --git a/plinth/modules/email_server/templates/tls_form.html b/plinth/modules/email_server/templates/tls_form.html
new file mode 100644
index 000000000..544f6e55b
--- /dev/null
+++ b/plinth/modules/email_server/templates/tls_form.html
@@ -0,0 +1,69 @@
+{# SPDX-License-Identifier: AGPL-3.0-or-later #}
+
+{% load i18n %}
+
+
+
+
+
+ {% trans "Keep current settings" %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% trans "Use system default" %}
+
+
diff --git a/plinth/modules/email_server/tests/__init__.py b/plinth/modules/email_server/tests/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/plinth/modules/email_server/urls.py b/plinth/modules/email_server/urls.py
new file mode 100644
index 000000000..5e12fefa1
--- /dev/null
+++ b/plinth/modules/email_server/urls.py
@@ -0,0 +1,19 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+from django.urls import path
+from plinth.utils import non_admin_view
+from stronghold.decorators import public
+from . import views
+
+
+urlpatterns = [
+ path('apps/email_server/', views.EmailServerView.as_view(), name='index'),
+ path('apps/email_server/security', views.TLSView.as_view()),
+ path('apps/email_server/domains', views.DomainView.as_view()),
+
+ path('apps/email_server/my_mail',
+ non_admin_view(views.MyMailView.as_view()), name='my_mail'),
+ path('apps/email_server/my_aliases',
+ non_admin_view(views.AliasView.as_view())),
+
+ path('apps/email_server/config.xml', public(views.XmlView.as_view())),
+]
diff --git a/plinth/modules/email_server/views.py b/plinth/modules/email_server/views.py
new file mode 100644
index 000000000..57492845a
--- /dev/null
+++ b/plinth/modules/email_server/views.py
@@ -0,0 +1,316 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+import io
+import itertools
+import pwd
+
+import plinth.actions
+import plinth.utils
+
+from django.core.exceptions import ValidationError
+from django.http import HttpResponseBadRequest
+from django.shortcuts import redirect
+from django.utils.html import escape
+from django.utils.translation import ugettext_lazy as _
+from django.views.generic.base import TemplateView, View
+from plinth.views import AppView, render_tabs
+
+from . import aliases
+from . import audit
+from . import forms
+
+
+class TabMixin(View):
+ admin_tabs = [
+ ('', _('Home')),
+ ('my_mail', _('My Mail')),
+ ('my_aliases', _('My Aliases')),
+ ('security', _('Security')),
+ ('domains', _('Domains'))
+ ]
+
+ user_tabs = [
+ ('my_mail', _('Home')),
+ ('my_aliases', _('My Aliases'))
+ ]
+
+ def get_context_data(self, *args, **kwargs):
+ # Retrieve context data from the next method in the MRO
+ context = super().get_context_data(*args, **kwargs)
+ # Populate context with customized data
+ context['tabs'] = self.render_dynamic_tabs()
+ return context
+
+ def render_dynamic_tabs(self):
+ if plinth.utils.is_user_admin(self.request):
+ return render_tabs(self.request.path, self.admin_tabs)
+ else:
+ return render_tabs(self.request.path, self.user_tabs)
+
+ def render_validation_error(self, validation_error, status=400):
+ context = self.get_context_data()
+ context['error'] = validation_error
+ return self.render_to_response(context, status=status)
+
+ def render_exception(self, exception, status=500):
+ context = self.get_context_data()
+ context['error'] = [str(exception)]
+ return self.render_to_response(context, status=status)
+
+ def catch_exceptions(self, function, request):
+ try:
+ return function(request)
+ except ValidationError as validation_error:
+ return self.render_validation_error(validation_error)
+ except Exception as error:
+ return self.render_exception(error)
+
+ def find_button(self, post):
+ key_filter = (k for k in post.keys() if k.startswith('btn_'))
+ lst = list(itertools.islice(key_filter, 2))
+ if len(lst) != 1:
+ raise ValidationError('Bad post data')
+ if not isinstance(lst[0], str):
+ raise ValidationError('Bad post data')
+ return lst[0][len('btn_'):]
+
+ def find_form(self, post):
+ form_name = post.get('form')
+ for cls in self.form_classes:
+ if cls.__name__ == form_name:
+ return cls(post)
+ raise ValidationError('Form was unspecified')
+
+
+class EmailServerView(TabMixin, AppView):
+ """Server configuration page"""
+ app_id = 'email_server'
+ template_name = 'email_server.html'
+ audit_modules = ('tls', 'rcube')
+
+ def get_context_data(self, *args, **kwargs):
+ dlist = []
+ for module_name in self.audit_modules:
+ self._get_audit_results(module_name, dlist)
+ dlist.sort(key=audit.models.Diagnosis.sorting_key)
+
+ context = super().get_context_data(*args, **kwargs)
+ context['related_diagnostics'] = dlist
+ return context
+
+ def _get_audit_results(self, module_name, dlist):
+ try:
+ results = getattr(audit, module_name).get()
+ except Exception as e:
+ title = _('Internal error in {0}').format('audit.' + module_name)
+ diagnosis = audit.models.Diagnosis(title)
+ diagnosis.critical(str(e))
+ diagnosis.critical(_('Check syslog for more information'))
+ results = [diagnosis]
+
+ for diagnosis in results:
+ if diagnosis.action:
+ diagnosis.action = '%s.%s' % (module_name, diagnosis.action)
+ if diagnosis.has_failed:
+ dlist.append(diagnosis)
+
+ def post(self, request):
+ repair_field = request.POST.get('repair')
+ module_name, sep, action_name = repair_field.partition('.')
+ if not sep or module_name not in self.audit_modules:
+ return HttpResponseBadRequest('Bad post data')
+
+ self._repair(module_name, action_name)
+ return redirect(request.path)
+
+ def _repair(self, module_name, action_name):
+ module = getattr(audit, module_name)
+ if not hasattr(module, 'repair_component'):
+ return
+
+ reload_list = []
+ try:
+ reload_list = module.repair_component(action_name)
+ except Exception:
+ pass
+
+ for service in reload_list:
+ # plinth.action_utils.service_reload(service)
+ plinth.actions.superuser_run('service', ['reload', service])
+
+
+class MyMailView(TabMixin, TemplateView):
+ template_name = 'my_mail.html'
+
+ def get_context_data(self, *args, **kwargs):
+ context = super().get_context_data(*args, **kwargs)
+
+ nam = self.request.user.username
+ context['has_homedir'] = audit.home.exists_nam(nam)
+
+ return context
+
+ def post(self, request):
+ return self.catch_exceptions(self._post, request)
+
+ def _post(self, request):
+ if 'btn_mkhome' not in request.POST:
+ raise ValidationError('Bad post data')
+ audit.home.put_nam(request.user.username)
+ return self.render_to_response(self.get_context_data())
+
+
+class AliasView(TabMixin, TemplateView):
+ class Checkboxes:
+ def __init__(self, post=None, initial=None):
+ self.models = initial
+ self.post = post
+ self.cleaned_data = {}
+ # HTML rendering
+ self.sb = io.StringIO()
+ self.counter = 0
+
+ def render(self):
+ if self.models is None:
+ raise RuntimeError('Uninitialized form')
+ if self.sb.tell() > 0:
+ raise RuntimeError('render has been called')
+
+ enabled = [a.email_name for a in self.models if a.enabled]
+ disabled = [a.email_name for a in self.models if not a.enabled]
+
+ self._render_fieldset(enabled, _('Enabled aliases'))
+ self._render_fieldset(disabled, _('Disabled aliases'))
+
+ return self.sb.getvalue()
+
+ def _render_fieldset(self, email_names, legend):
+ if len(email_names) > 0:
+ self.sb.write('')
+ self.sb.write('%s ' % escape(legend))
+ self._render_boxes(email_names)
+ self.sb.write(' ')
+
+ def _render_boxes(self, email_names):
+ for email_name in email_names:
+ input_id = 'cb_alias_%d' % self._count()
+ value = escape(email_name)
+ self.sb.write('')
+
+ self.sb.write(' ' % (input_id, value))
+
+ self.sb.write('%s ' % (input_id, value))
+
+ self.sb.write('
')
+
+ def _count(self):
+ self.counter += 1
+ return self.counter
+
+ def is_valid(self):
+ lst = list(filter(None, self.post.getlist('alias')))
+ if not lst:
+ return False
+ else:
+ self.cleaned_data['alias'] = lst
+ return True
+
+ template_name = 'email_alias.html'
+ form_classes = (forms.AliasCreationForm, Checkboxes)
+
+ def get_context_data(self, *args, **kwargs):
+ context = super().get_context_data(*args, **kwargs)
+ context['form'] = forms.AliasCreationForm()
+
+ uid = pwd.getpwnam(self.request.user.username).pw_uid
+ models = aliases.get(uid)
+ if len(models) > 0:
+ form = AliasView.Checkboxes(initial=models)
+ context['alias_boxes'] = form.render()
+ else:
+ context['no_alias'] = True
+ return context
+
+ def post(self, request):
+ return self.catch_exceptions(self._post, request)
+
+ def _post(self, request):
+ form = self.find_form(request.POST)
+ button = self.find_button(request.POST)
+ if not form.is_valid():
+ raise ValidationError('Form invalid')
+
+ if isinstance(form, AliasView.Checkboxes):
+ if button not in ('delete', 'disable', 'enable'):
+ raise ValidationError('Bad button')
+ return self.alias_operation_form_valid(form, button)
+
+ if isinstance(form, forms.AliasCreationForm):
+ if button != 'add':
+ raise ValidationError('Bad button')
+ return self.alias_creation_form_valid(form, button)
+
+ raise RuntimeError('Unknown form')
+
+ def alias_operation_form_valid(self, form, button):
+ uid = pwd.getpwnam(self.request.user.username).pw_uid
+ alias_list = form.cleaned_data['alias']
+ if button == 'delete':
+ aliases.delete(uid, alias_list)
+ elif button == 'disable':
+ aliases.set_disabled(uid, alias_list)
+ elif button == 'enable':
+ aliases.set_enabled(uid, alias_list)
+ return self.render_to_response(self.get_context_data())
+
+ def alias_creation_form_valid(self, form, button):
+ uid = pwd.getpwnam(self.request.user.username).pw_uid
+ aliases.put(uid, form.cleaned_data['email_name'])
+ return self.render_to_response(self.get_context_data())
+
+
+class TLSView(TabMixin, TemplateView):
+ template_name = 'email_security.html'
+
+
+class DomainView(TabMixin, TemplateView):
+ template_name = 'email_domains.html'
+
+ def get_context_data(self, *args, **kwargs):
+ context = super().get_context_data(*args, **kwargs)
+ fields = audit.domain.get_domain_config()
+ # If having post data, display the posted values
+ for field in fields:
+ field.new_value = self.request.POST.get(field.key, '')
+ context['fields'] = fields
+ return context
+
+ def post(self, request):
+ return self.catch_exceptions(self._post, request)
+
+ def _post(self, request):
+ changed = {}
+ # Skip blank fields
+ for key, value in request.POST.items():
+ value = value.strip()
+ if value:
+ changed[key] = value
+ audit.domain.set_keys(changed)
+ return self.render_to_response(self.get_context_data())
+
+
+class XmlView(TemplateView):
+ template_name = 'email_autoconfig.xml'
+
+ def render_to_response(self, *args, **kwargs):
+ kwargs['content_type'] = 'text/xml; charset=utf-8'
+ response = super().render_to_response(*args, **kwargs)
+ response['X-Robots-Tag'] = 'noindex, nofollow, noarchive'
+ return response
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context['host'] = self.request.get_host()
+ return context
diff --git a/plinth/modules/security/__init__.py b/plinth/modules/security/__init__.py
index 2cb859746..b67e0105e 100644
--- a/plinth/modules/security/__init__.py
+++ b/plinth/modules/security/__init__.py
@@ -7,7 +7,6 @@ import re
import subprocess
from collections import defaultdict
-import requests
from django.utils.translation import ugettext_lazy as _
from plinth import actions
@@ -109,12 +108,6 @@ def get_apps_report():
(label, package, *_) = line.split()
cves[label].add(package)
- try:
- past_cves = requests.get(
- 'https://security-tracker.debian.org/tracker/data/json').json()
- except Exception:
- past_cves = None
-
service_exposure_lines = subprocess.check_output(
['systemd-analyze', 'security']).decode().strip().split('\n')
service_exposure_lines.pop(0)
@@ -130,12 +123,8 @@ def get_apps_report():
'name': 'freedombox',
'packages': {'freedombox'},
'vulns': 0,
- 'past_vulns': 0 if past_cves else None,
}
}
- if past_cves and 'freedombox' in past_cves:
- apps['freedombox']['past_vulns'] = len(past_cves['freedombox'])
-
for module_name, module in module_loader.loaded_modules.items():
try:
packages = module.managed_packages
@@ -155,14 +144,9 @@ def get_apps_report():
'name': module_name,
'packages': set(packages),
'vulns': 0,
- 'past_vulns': 0 if past_cves else None,
'sandboxed': None,
}
- for package in packages:
- if past_cves and package in past_cves:
- apps[module_name]['past_vulns'] += len(past_cves[package])
-
if services:
apps[module_name]['sandboxed'] = False
for service in services:
diff --git a/plinth/modules/security/templates/security_report.html b/plinth/modules/security/templates/security_report.html
index 4401c1e48..9869828cf 100644
--- a/plinth/modules/security/templates/security_report.html
+++ b/plinth/modules/security/templates/security_report.html
@@ -17,11 +17,11 @@
{% blocktrans trimmed %}
- The following table lists the current reported number, and historical
- count, of security vulnerabilities for each installed app.
- More information on the vulnerabilities can be found on the
- Debian Security
- Bug Tracker .
+ The following table lists the current reported number of
+ security vulnerabilities for each installed app. More
+ information on the vulnerabilities can be found on the
+ Debian
+ Security Bug Tracker .
{% endblocktrans %}
@@ -44,7 +44,6 @@
{% trans "App Name" %}
{% trans "Current Vulnerabilities" %}
- {% trans "Past Vulnerabilities" %}
{% trans "Sandboxed" %}
{% trans "Sandbox Coverage" %}
@@ -54,7 +53,6 @@
{{ app.name }}
{{ app.vulns }}
- {{ app.past_vulns|default_if_none:"❗"}}
{% if app.sandboxed is None %}
{% trans "N/A" %}
diff --git a/plinth/modules/users/tests/test_functional.py b/plinth/modules/users/tests/test_functional.py
index bdcbb3117..a8fe4a6c7 100644
--- a/plinth/modules/users/tests/test_functional.py
+++ b/plinth/modules/users/tests/test_functional.py
@@ -158,7 +158,7 @@ def can_log_in(session_browser, username):
parsers.parse(
'I can log in as the user {username:w} with password {password:w}'))
def can_log_in_with_password(session_browser, username, password):
- functional.visit(session_browser, '/plinth/accounts/logout/')
+ functional.logout(session_browser)
functional.login_with_account(session_browser, functional.base_url,
username, password)
assert len(session_browser.find_by_id('id_user_menu')) > 0
diff --git a/plinth/modules/wordpress/__init__.py b/plinth/modules/wordpress/__init__.py
new file mode 100644
index 000000000..35f64de57
--- /dev/null
+++ b/plinth/modules/wordpress/__init__.py
@@ -0,0 +1,119 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""
+FreedomBox app to configure WordPress.
+"""
+
+from django.utils.translation import ugettext_lazy as _
+from plinth import actions
+from plinth import app as app_module
+from plinth import cfg, frontpage, menu
+from plinth.daemon import Daemon
+from plinth.modules.apache.components import Webserver
+from plinth.modules.backups.components import BackupRestore
+from plinth.modules.firewall.components import Firewall
+from plinth.utils import format_lazy
+
+from . import manifest
+
+PUBLIC_ACCESS_FILE = '/etc/wordpress/is_public'
+
+version = 1
+
+managed_services = ['wordpress-freedombox.timer']
+
+# Add php to avoid wordpress package bringing in lib-apache2-mod-php.
+# WordPress only supports MySQL/MariaDB as database server.
+managed_packages = [
+ 'wordpress',
+ 'php', # Avoid WordPress package bringing in libapache2-mod-php
+ 'php-imagick', # Optional, for performance
+ 'php-ssh2', # Optional, to upload plugins/themes using SSH connection
+ 'php-zip', # Optional, for performance
+ 'default-mysql-server', # WordPress only supports MySQL/MariaDB as DB
+]
+
+_description = [
+ _('WordPress is a popular way to create and manage websites and blogs. '
+ 'Content can be managed using a visual interface. Layout and '
+ 'functionality of the web pages can be customized. Appearance can be '
+ 'chosen using themes. Administration interface and produced web pages '
+ 'are suitable for mobile devices.'),
+ format_lazy(
+ _('You need to run WordPress setup by visiting the app before making '
+ 'the site publicly available below. Setup must be run when '
+ 'accessing {box_name} with the correct domain name. Enable '
+ 'permalinks in administrator interface for better URLs to your '
+ 'pages and posts.'), box_name=_(cfg.box_name)),
+ _('WordPress has its own user accounts. First administrator account is '
+ 'created during setup. Bookmark the admin page to reach administration '
+ 'interface in the future.'),
+ _('After a major version upgrade, you need to manually run database '
+ 'upgrade from administrator interface. Additional plugins or themes may '
+ 'be installed and upgraded at your own risk.'),
+]
+
+app = None
+
+
+class WordPressApp(app_module.App):
+ """FreedomBox app for WordPress."""
+
+ app_id = 'wordpress'
+
+ def __init__(self):
+ """Create components for the app."""
+ super().__init__()
+
+ info = app_module.Info(
+ app_id=self.app_id, version=version, name=_('WordPress'),
+ icon_filename='wordpress', short_description=_('Website and Blog'),
+ description=_description, manual_page='WordPress',
+ clients=manifest.clients,
+ donation_url='https://wordpressfoundation.org/donate/')
+ self.add(info)
+
+ menu_item = menu.Menu('menu-wordpress', info.name,
+ info.short_description, info.icon_filename,
+ 'wordpress:index', parent_url_name='apps')
+ self.add(menu_item)
+
+ shortcut = frontpage.Shortcut('shortcut-wordpress', info.name,
+ short_description=info.short_description,
+ icon=info.icon_filename,
+ url='/wordpress/', clients=info.clients)
+ self.add(shortcut)
+
+ firewall = Firewall('firewall-wordpress', info.name,
+ ports=['http', 'https'], is_external=True)
+ self.add(firewall)
+
+ webserver = Webserver('webserver-wordpress', 'wordpress-freedombox',
+ urls=['https://{host}/wordpress/'])
+ self.add(webserver)
+
+ daemon = Daemon('daemon-wordpress', managed_services[0])
+ self.add(daemon)
+
+ backup_restore = WordPressBackupRestore('backup-restore-wordpress',
+ **manifest.backup)
+ self.add(backup_restore)
+
+
+class WordPressBackupRestore(BackupRestore):
+ """Component to backup/restore WordPress."""
+
+ def backup_pre(self, packet):
+ """Save database contents."""
+ actions.superuser_run('wordpress', ['dump-database'])
+
+ def restore_post(self, packet):
+ """Restore database contents."""
+ actions.superuser_run('wordpress', ['restore-database'])
+
+
+def setup(helper, old_version=None):
+ """Install and configure the module."""
+ helper.install(managed_packages)
+ helper.call('post', actions.superuser_run, 'wordpress', ['setup'])
+ helper.call('post', app.enable)
diff --git a/plinth/modules/wordpress/data/etc/apache2/conf-available/wordpress-freedombox.conf b/plinth/modules/wordpress/data/etc/apache2/conf-available/wordpress-freedombox.conf
new file mode 100644
index 000000000..a55211a21
--- /dev/null
+++ b/plinth/modules/wordpress/data/etc/apache2/conf-available/wordpress-freedombox.conf
@@ -0,0 +1,56 @@
+##
+## On all sites, provide WordPress on a default path: /wordpress
+##
+## Requires the following Apache modules to be enabled:
+## mod_alias
+## mod_rewrite
+## mod_proxy_fcgi
+## mod_auth_pubtkt
+##
+
+# Match longer aliases first to meet expectations
+Alias /wordpress/wp-content /var/lib/wordpress/wp-content
+Alias /wordpress /usr/share/wordpress
+
+
+ Options FollowSymLinks
+
+
+ RewriteEngine On
+ RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
+ RewriteBase /wordpress/
+ RewriteRule ^index\.php$ - [L]
+ RewriteCond %{REQUEST_FILENAME} !-f
+ RewriteCond %{REQUEST_FILENAME} !-d
+ RewriteRule . /wordpress/index.php [L]
+
+
+ # Allow access only if site is marked as public or if user is an admin
+
+ Include includes/freedombox-single-sign-on.conf
+
+ TKTAuthToken "admin"
+
+
+
+ # Increase maximum upload file size
+
+ ProxyFCGISetEnvIf true PHP_VALUE "post_max_size=128M \n upload_max_filesize = 128M"
+
+
+
+
+ Options FollowSymLinks
+
+ # Allow access only if site is marked as public or if user is an admin
+
+ Include includes/freedombox-single-sign-on.conf
+
+ TKTAuthToken "admin"
+
+
+
+
+ Require all granted
+
+
diff --git a/plinth/modules/wordpress/data/etc/plinth/modules-enabled/wordpress b/plinth/modules/wordpress/data/etc/plinth/modules-enabled/wordpress
new file mode 100644
index 000000000..ca1bf6533
--- /dev/null
+++ b/plinth/modules/wordpress/data/etc/plinth/modules-enabled/wordpress
@@ -0,0 +1 @@
+plinth.modules.wordpress
diff --git a/plinth/modules/wordpress/data/lib/systemd/system/wordpress-freedombox.service b/plinth/modules/wordpress/data/lib/systemd/system/wordpress-freedombox.service
new file mode 100644
index 000000000..c25e0ac2a
--- /dev/null
+++ b/plinth/modules/wordpress/data/lib/systemd/system/wordpress-freedombox.service
@@ -0,0 +1,37 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+[Unit]
+Description=WordPress Scheduled Events Trigger (Cron)
+Documentation=https://rtcamp.com/tutorials/wordpress/wp-cron-crontab/
+
+[Service]
+CapabilityBoundingSet=~CAP_SYS_ADMIN CAP_SYS_PTRACE CAP_SETUID CAP_SETGID CAP_SETPCAP CAP_CHOWN CAP_FSETID CAP_SETFCAP CAP_DAC_OVERRIDE CAP_DAC_READ_SEARCH CAP_FOWNER CAP_IPC_OWNER CAP_NET_ADMIN CAP_AUDIT_CONTROL CAP_AUDIT_READ CAP_AUDIT_WRITE CAP_KILL CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_LINUX_IMMUTABLE CAP_IPC_LOCK CAP_SYS_CHROOT CAP_BLOCK_SUSPEND CAP_LEASE CAP_SYS_PACCT CAP_SYS_TTY_CONFIG CAP_SYS_BOOT CAP_MAC_ADMIN CAP_MAC_OVERRIDE CAP_SYS_NICE CAP_SYS_RESOURCE
+DevicePolicy=closed
+ExecStart=php --file /usr/share/wordpress/wp-cron.php
+Group=www-data
+LockPersonality=yes
+NoNewPrivileges=yes
+PrivateDevices=yes
+PrivateMounts=yes
+PrivateTmp=yes
+PrivateUsers=yes
+ProtectControlGroups=yes
+ProtectClock=yes
+ProtectHome=yes
+ProtectHostname=yes
+ProtectKernelLogs=yes
+ProtectKernelModules=yes
+ProtectKernelTunables=yes
+ProtectSystem=strict
+RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6 AF_NETLINK
+RestrictNamespaces=yes
+RestrictRealtime=yes
+RestrictSUIDSGID=yes
+StateDirectory=wordpress/wp-content
+SystemCallArchitectures=native
+SystemCallFilter=@system-service
+SystemCallFilter=~@resources
+SystemCallFilter=~@privileged
+SystemCallErrorNumber=EPERM
+Type=simple
+User=www-data
diff --git a/plinth/modules/wordpress/data/lib/systemd/system/wordpress-freedombox.timer b/plinth/modules/wordpress/data/lib/systemd/system/wordpress-freedombox.timer
new file mode 100644
index 000000000..0a42dbb79
--- /dev/null
+++ b/plinth/modules/wordpress/data/lib/systemd/system/wordpress-freedombox.timer
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+[Unit]
+Description=WordPress Scheduled Events Trigger (Cron) Timer
+Documentation=https://rtcamp.com/tutorials/wordpress/wp-cron-crontab/
+
+[Timer]
+OnCalendar=*:0/10
+
+[Install]
+WantedBy=timers.target
diff --git a/plinth/modules/wordpress/forms.py b/plinth/modules/wordpress/forms.py
new file mode 100644
index 000000000..8c6fe3479
--- /dev/null
+++ b/plinth/modules/wordpress/forms.py
@@ -0,0 +1,17 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""
+FreedomBox app for configuring WordPress.
+"""
+
+from django import forms
+from django.utils.translation import ugettext_lazy as _
+
+
+class WordPressForm(forms.Form):
+ """WordPress configuration form"""
+
+ is_public = forms.BooleanField(
+ label=_('Public access'), required=False, help_text=_(
+ 'Allow all visitors. Disabling allows only administrators to view '
+ 'the WordPress site or blog. Enable only after performing initial '
+ 'WordPress setup.'))
diff --git a/plinth/modules/wordpress/manifest.py b/plinth/modules/wordpress/manifest.py
new file mode 100644
index 000000000..dd16bc2bd
--- /dev/null
+++ b/plinth/modules/wordpress/manifest.py
@@ -0,0 +1,21 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+
+from django.utils.translation import ugettext_lazy as _
+
+clients = [{
+ 'name': _('WordPress'),
+ 'platforms': [{
+ 'type': 'web',
+ 'url': '/wordpress/'
+ }]
+}]
+
+backup = {
+ 'data': {
+ 'files': ['/var/lib/plinth/backups-data/wordpress-database.sql'],
+ 'directories': ['/var/lib/wordpress/']
+ },
+ 'secrets': {
+ 'directories': ['/etc/wordpress/']
+ },
+}
diff --git a/plinth/modules/wordpress/tests/__init__.py b/plinth/modules/wordpress/tests/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/plinth/modules/wordpress/tests/test_functional.py b/plinth/modules/wordpress/tests/test_functional.py
new file mode 100644
index 000000000..4e33c2e8a
--- /dev/null
+++ b/plinth/modules/wordpress/tests/test_functional.py
@@ -0,0 +1,167 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""
+Functional, browser based tests for WordPress.
+"""
+
+import pytest
+from plinth.tests import functional
+
+
+@pytest.fixture(scope='module', autouse=True)
+def fixture_background(session_browser):
+ """Login and install the app."""
+ functional.login(session_browser)
+ functional.install(session_browser, 'wordpress')
+ yield
+ functional.app_disable(session_browser, 'wordpress')
+
+
+def test_enable_disable(session_browser):
+ """Test enabling the app."""
+ functional.app_disable(session_browser, 'wordpress')
+
+ functional.app_enable(session_browser, 'wordpress')
+ assert functional.service_is_running(session_browser, 'wordpress')
+ assert functional.is_available(session_browser, 'wordpress')
+
+ functional.app_disable(session_browser, 'wordpress')
+ assert functional.service_is_not_running(session_browser, 'wordpress')
+ assert not functional.is_available(session_browser, 'wordpress')
+
+
+def test_post(session_browser):
+ """Test writing a blog post."""
+ functional.app_enable(session_browser, 'wordpress')
+ _write_post(session_browser, 'FunctionalTest')
+ assert _get_post(session_browser, 'FunctionalTest')
+ _delete_post(session_browser, 'FunctionalTest')
+ assert not _get_post(session_browser, 'FunctionalTest')
+
+
+def test_public_mode(session_browser):
+ """Test that site is available without login in public mode."""
+ functional.app_enable(session_browser, 'wordpress')
+ _enable_public_mode(session_browser, True)
+
+ def no_login_prompt():
+ _load_site(session_browser)
+ return not functional.is_login_prompt(session_browser)
+
+ try:
+ functional.logout(session_browser)
+ functional.eventually(no_login_prompt)
+ finally:
+ functional.login(session_browser)
+
+
+def test_private_mode(session_browser):
+ """Test that site is not available without login in public mode."""
+ functional.app_enable(session_browser, 'wordpress')
+ _enable_public_mode(session_browser, False)
+
+ def login_prompt():
+ _load_site(session_browser)
+ return functional.is_login_prompt(session_browser)
+
+ try:
+ functional.logout(session_browser)
+ functional.eventually(login_prompt)
+ finally:
+ functional.login(session_browser)
+
+
+@pytest.mark.backups
+def test_backup(session_browser):
+ """Test backing up and restoring."""
+ functional.app_enable(session_browser, 'wordpress')
+ _write_post(session_browser, 'FunctionalTest')
+ functional.backup_create(session_browser, 'wordpress', 'test_wordpress')
+ _delete_post(session_browser, 'FunctionalTest')
+ functional.backup_restore(session_browser, 'wordpress', 'test_wordpress')
+ assert _get_post(session_browser, 'FunctionalTest')
+
+
+def _load_site(browser):
+ """Visit WordPress site and wait until becomes available."""
+ functional.visit(browser, '/wordpress/wp-admin/')
+
+ def loaded():
+ browser.reload()
+ title_node = browser.find_by_css('title')
+ return (not title_node or '404' not in title_node[0].text)
+
+ functional.eventually(loaded)
+
+
+def _visit_site(browser):
+ """Visit WordPress and run the first setup wizard if needed."""
+ _load_site(browser)
+ if '/install.php' in browser.url:
+ browser.fill('weblog_title', 'Test Blog')
+ browser.fill('user_name', functional.config['DEFAULT']['username'])
+ # browser.fill() once does not work for some reason for password field
+ browser.fill('admin_password',
+ functional.config['DEFAULT']['password'])
+ browser.fill('admin_password',
+ functional.config['DEFAULT']['password'])
+ browser.check('pw_weak')
+ browser.fill('admin_email', 'admin@example.org')
+ functional.submit(browser)
+
+ if not browser.find_by_css('.install-success'):
+ raise Exception('WordPress installation failed')
+
+ functional.visit(browser, '/wordpress/wp-admin/')
+
+ if not browser.find_by_id('wpadminbar'):
+ functional.visit(browser, '/wordpress/wp-login.php')
+ browser.fill('log', functional.config['DEFAULT']['username'])
+ browser.fill('pwd', functional.config['DEFAULT']['password'])
+ functional.submit(browser)
+
+
+def _write_post(browser, title):
+ """Create a blog post in WordPress site."""
+ post = _get_post(browser, title)
+ if post:
+ _delete_post(browser, title)
+
+ functional.visit(browser, '/wordpress/wp-admin/post-new.php')
+ if browser.find_by_css('.edit-post-welcome-guide'):
+ browser.find_by_css('.components-modal__header button')[0].click()
+
+ browser.find_by_id('post-title-0').fill(title)
+ browser.find_by_css('.editor-post-publish-button__button')[0].click()
+ functional.eventually(browser.find_by_css, ['.editor-post-publish-button'])
+ browser.find_by_css('.editor-post-publish-button')[0].click()
+
+
+def _delete_post(browser, title):
+ """Delete a blog post in WordPress site."""
+ post = _get_post(browser, title)
+ if not post:
+ raise Exception('Post not found')
+
+ delete_element = post.find_by_css('.submitdelete')[0]
+ browser.visit(delete_element['href'])
+
+
+def _get_post(browser, title):
+ """Return whether a blog post with a given title is available."""
+ _visit_site(browser)
+ functional.visit(browser, '/wordpress/wp-admin/edit.php')
+ xpath = '//tr[contains(@class, "type-post")][.//a[contains(@class, ' \
+ f'"row-title") and contains(text(), "{title}")]]'
+ post = browser.find_by_xpath(xpath)
+ return post[0] if post else None
+
+
+def _enable_public_mode(browser, should_enable):
+ """Enable/disable the public mode."""
+ checkbox = browser.find_by_id('id_is_public')
+ if should_enable:
+ checkbox.check()
+ else:
+ checkbox.uncheck()
+
+ functional.submit(browser, form_class='form-configuration')
diff --git a/plinth/modules/wordpress/urls.py b/plinth/modules/wordpress/urls.py
new file mode 100644
index 000000000..f46b63908
--- /dev/null
+++ b/plinth/modules/wordpress/urls.py
@@ -0,0 +1,13 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""
+URLs for the WordPress module.
+"""
+
+from django.conf.urls import url
+
+from .views import WordPressAppView
+
+urlpatterns = [
+ url(r'^apps/wordpress/$', WordPressAppView.as_view(app_id='wordpress'),
+ name='index'),
+]
diff --git a/plinth/modules/wordpress/views.py b/plinth/modules/wordpress/views.py
new file mode 100644
index 000000000..ef341faf3
--- /dev/null
+++ b/plinth/modules/wordpress/views.py
@@ -0,0 +1,38 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""
+FreedomBox app for configuring WordPress.
+"""
+
+import pathlib
+
+from django.contrib import messages
+from django.utils.translation import ugettext as _
+from plinth import actions, views
+
+from . import PUBLIC_ACCESS_FILE
+from .forms import WordPressForm
+
+
+class WordPressAppView(views.AppView):
+ """Serve configuration page."""
+ form_class = WordPressForm
+ app_id = 'wordpress'
+
+ def get_initial(self):
+ """Get the current WordPress settings."""
+ status = super().get_initial()
+ status['is_public'] = pathlib.Path(PUBLIC_ACCESS_FILE).exists()
+ return status
+
+ def form_valid(self, form):
+ """Apply the changes submitted in the form."""
+ old_status = form.initial
+ new_status = form.cleaned_data
+ if old_status['is_public'] != new_status['is_public']:
+ actions.superuser_run(
+ 'wordpress',
+ ['set-public', '--enable',
+ str(new_status['is_public'])])
+ messages.success(self.request, _('Configuration updated'))
+
+ return super().form_valid(form)
diff --git a/plinth/tests/functional/__init__.py b/plinth/tests/functional/__init__.py
index 85d330e39..07d49003c 100644
--- a/plinth/tests/functional/__init__.py
+++ b/plinth/tests/functional/__init__.py
@@ -248,13 +248,13 @@ def _create_admin_account(browser, username, password):
def login(browser):
- """Login to the interface."""
+ """Login to the FreedomBox interface with default test account."""
login_with_account(browser, base_url, config['DEFAULT']['username'],
config['DEFAULT']['password'])
def login_with_account(browser, url, username, password=None):
-
+ """Login to the FreedomBox interface with provided account."""
if password is None:
password = get_password(username)
# XXX: Find a way to remove the hardcoded jsxc URL
@@ -294,6 +294,11 @@ def login_with_account(browser, url, username, password=None):
submit(browser, element=browser.find_by_name('next')[0])
+def logout(browser):
+ """Log out of the FreedomBox interface."""
+ visit(browser, '/plinth/accounts/logout/')
+
+
#################
# App utilities #
#################
@@ -356,10 +361,9 @@ def _change_app_status(browser, app_name, change_status_to='enabled'):
if button:
should_enable_field = browser.find_by_id('id_should_enable')
- if (should_enable_field.value == 'False'
- and change_status_to == 'disabled') or (
- should_enable_field.value == 'True'
- and change_status_to == 'enabled'):
+ if (should_enable_field.value == 'False' and change_status_to
+ == 'disabled') or (should_enable_field.value == 'True'
+ and change_status_to == 'enabled'):
submit(browser, element=button)
else:
checkbox_id = _app_checkbox_id[app_name]
diff --git a/plinth/tests/functional/step_definitions.py b/plinth/tests/functional/step_definitions.py
index 9bb445f70..5d48f6eed 100644
--- a/plinth/tests/functional/step_definitions.py
+++ b/plinth/tests/functional/step_definitions.py
@@ -18,12 +18,12 @@ def logged_in(session_browser):
@given("I'm a logged out user")
def logged_out_user(session_browser):
- functional.visit(session_browser, '/plinth/accounts/logout/')
+ functional.logout(session_browser)
@when("I log out")
def log_out_user(session_browser):
- functional.visit(session_browser, '/plinth/accounts/logout/')
+ functional.logout(session_browser)
@given(parsers.parse('the {app_name:w} application is installed'))
diff --git a/plinth/views.py b/plinth/views.py
index 4b8570ca7..de64c473f 100644
--- a/plinth/views.py
+++ b/plinth/views.py
@@ -3,6 +3,7 @@
Main FreedomBox views.
"""
+import io
import time
import urllib.parse
@@ -11,6 +12,7 @@ from django.core.exceptions import ImproperlyConfigured
from django.http import Http404, HttpResponseBadRequest, HttpResponseRedirect
from django.template.response import TemplateResponse
from django.urls import reverse
+from django.utils.html import escape
from django.utils.translation import ugettext as _
from django.views.generic import TemplateView
from django.views.generic.edit import FormView
@@ -321,3 +323,30 @@ def notification_dismiss(request, id):
notes[0].dismiss()
return HttpResponseRedirect(_get_redirect_url_from_param(request))
+
+
+def render_tabs(request_path, tab_data):
+ """Generate a Bootstrap tab group and return the raw HTML
+
+ :param request_path: value of `request.path`
+ :param tab_data: a list of (page_name, link_text) tuples
+ :returns: raw HTML of the tabs
+ """
+ sb = io.StringIO()
+ sb.write('')
+
+ for page_name, link_text in tab_data:
+ cls = 'active' if request_path.endswith('/' + page_name) else ''
+ href = '#' if cls == 'active' else ('./' + page_name)
+ # -- Begin list
+ sb.write('')
+ # -- Begin link
+ sb.write(''.format(escape(href)))
+ sb.write('{} '.format(escape(link_text)))
+ # -- End link
+ sb.write(' ')
+ # -- End list
+
+ sb.write(' ')
+ return sb.getvalue()
diff --git a/static/themes/default/icons/wordpress.png b/static/themes/default/icons/wordpress.png
new file mode 100644
index 000000000..7082d0f50
Binary files /dev/null and b/static/themes/default/icons/wordpress.png differ
diff --git a/static/themes/default/icons/wordpress.svg b/static/themes/default/icons/wordpress.svg
new file mode 100644
index 000000000..da838f6b9
--- /dev/null
+++ b/static/themes/default/icons/wordpress.svg
@@ -0,0 +1,54 @@
+
+image/svg+xml